diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml new file mode 100644 index 000000000..951eaf1d2 --- /dev/null +++ b/.github/workflows/workflow.yml @@ -0,0 +1,127 @@ +name: build + +on: + push: + branches: [ master ] + tags: [ "*" ] + paths-ignore: [ "README.md", "CHANGELOG.md", "release-notes.md" ] + + pull_request: + branches: [ master ] + +jobs: + build: + name: Build + runs-on: ${{ matrix.operating-system }} + + strategy: + matrix: + operating-system: [windows-latest,ubuntu-latest,macos-latest] +# lazarus-versions: [stable, 2.2.2, 2.2.0, 2.0.12] + lazarus-versions: [stable] + + steps: + - name: Checkout Repository + uses: actions/checkout@v3 + with: + submodules: false + + - name: Install Lazarus + uses: gcarreno/setup-lazarus@v3 + with: + with-cache: false + lazarus-version: ${{ matrix.lazarus-versions }} + + - name: Build the Pascal daemon + run: lazbuild -B "src/pascalcoin_daemon.lpi" + + - name: Build reference Pascal Miner + run: lazbuild -B "src/pascalcoin_miner.lpi" + + - name: Build the Main Wallet Application (Windows/Linux) + if: ${{ matrix.operating-system != 'macos-latest' }} + run: lazbuild -B "src/pascalcoin_wallet_classic.lpi" + + - name: Build the Main Wallet Application (macOS) + if: ${{ matrix.operating-system == 'macos-latest' }} + run: lazbuild -B --ws=cocoa "src/pascalcoin_wallet_classic.lpi" + + - name: Upload binary (Windows) + if: ${{ (matrix.operating-system == 'windows-latest') && (matrix.lazarus-versions == 'stable') }} + uses: actions/upload-artifact@v3 + with: + name: PascalCoinWindows + path: | + src/pascalcoin_daemon.exe + src/PascalCoinMiner.exe + src/PascalCoinWalletLazarus.exe + + - name: Upload binary (Ubuntu) + if: ${{ (matrix.operating-system == 'ubuntu-latest') && (matrix.lazarus-versions == 'stable') }} + uses: actions/upload-artifact@v3 + with: + name: PascalCoinLinux + path: | + src/pascalcoin_daemon + src/PascalCoinMiner + src/PascalCoinWalletLazarus + + - name: Upload binary (macOS) + if: ${{ (matrix.operating-system == 'macos-latest') && (matrix.lazarus-versions == 'stable') }} + uses: actions/upload-artifact@v3 + with: + name: PascalCoinMacOS + path: | + src/pascalcoin_daemon + src/PascalCoinMiner + src/PascalCoinWalletLazarus + + package-release: + if: contains(github.ref, '/tags/') + + name: Package and create GitHub Release + runs-on: ubuntu-latest + needs: build + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Set output + id: vars + run: echo "tag=${GITHUB_REF#refs/*/}" >> ${GITHUB_OUTPUT} + + - name: Download the Release binary + uses: actions/download-artifact@v3 + + - name: List files + run: | + ls -alF PascalCoinWindows + ls -alF PascalCoinLinux + ls -alF PascalCoinMacOS + + - name: Create release files + run: | + cd PascalCoinWindows + cp ../windows-dll/*.dll . + zip -r PascalCoin-${{ steps.vars.outputs.tag }}-x86_64-win64.zip *.exe *.dll + cd ../PascalCoinLinux + cp ../linux-libs/*.so.1.1 . + chmod +x PascalCoin* pascalcoin* + tar -zcvf PascalCoin-${{ steps.vars.outputs.tag }}-x86_64-linux.tar.gz PascalCoin* pascalcoin* *.so.1.1 + cd ../PascalCoinMacOS + chmod +x PascalCoin* pascalcoin* + tar -zcvf PascalCoin-${{ steps.vars.outputs.tag }}-x86_64-darwin.tar.gz PascalCoin* pascalcoin* + + - name: Create GitHub release + uses: softprops/action-gh-release@v1 + with: + name: PascalCoin ${{ steps.vars.outputs.tag }} + body_path: release-notes.md + files: | + PascalCoinWindows/*.zip + PascalCoinLinux/*.tar.gz + PascalCoinMacOS/*.tar.gz + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + diff --git a/.gitignore b/.gitignore index 5167cc575..4e6fac3e1 100644 --- a/.gitignore +++ b/.gitignore @@ -4,9 +4,11 @@ *.identcache *.stat /src/*.app -src/PascalCoinWallet -src/PascalCoinWalletLazarus -src/PascalCoinWalletExperimental +pascalcoin_daemon +PascalCoinMiner +PascalCoinWallet +PascalCoinWalletLazarus +PascalCoinWalletExperimental *.dSYM* *.dbg *.res @@ -14,9 +16,9 @@ src/PascalCoinWalletExperimental ## OpenSSL libeay32.dll libeay64.dll -libcrypto-1_1-x64.dll +#libcrypto-1_1-x64.dll libcrypto-1_1.dll -libcrypto.so.1.1 +#libcrypto.so.1.1 # Log files @@ -53,3 +55,6 @@ dunit.ini /PIP/resources/*.DS_Store /PIP/resources/PIP-0034A/*.DS_Store /src/*.tvsconfig +src/libssl-1_1.dll +src/libssl-1_1-x64.dll +*.rsm diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a1ae8c7f..ae9108273 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,102 @@ # Changelog -## Build 5.4 - (PENDING RELEASE) +## Build 6 (Pending) +- MANDATORY UPGRADE - HARD FORK ACTIVATION WILL OCCUR ON BLOCK **(pending)** +- Upgrade to Protocol 6 (Hard fork) +- Implementation of PIP-0043 (Update OP_RECOVER to recover only non used, not named PASA's) -> https://github.com/PascalCoin/PascalCoin/blob/master/PIP/PIP-0043.md +- Implementation of PIP-0044 (Induplicatable NFT) -> https://github.com/PascalCoin/PascalCoin/blob/master/PIP/PIP-0044.md +- Improvements on downloading Safebox (fresh installation) + +## Build 5.8 - 2024-01-17 +- Accumulative release, including: +- Minor bugs fixed +- Usage of AbstractMem v1.8 +- Improvements on speed and data storage (see Github commits since last release) +- Clean code and documentation + +## Build 5.7 - 2021-12-23 +- This version will not propagate 0-Fee operations, but will allow 0-Fee operations to the blockchain (CT_AllowPropagate0feeOperations=False) + - A wallet that wants to execute 0-Fee operations will need to connect to a miner/pool/node running a 5.6 version or solomine +- Removed "Ask for Account (PASA)" feature +- Improved resend operations process +- Improvements on TMemPool save to file to protect continued saving process +- Improvements on TStorage to allow usage of AbstractMem library +- AbstractMem library v1.6 with improvements on speed and allowing 64bits offsets for files +4Gb +- Net protocol upgraded to 15, min compatible version 14 (Build 5.6) +- Daemon: + - Usage of Fast Memory Manager for FPC x86_64 on Linux as part of mORMot framework. Copyright (C) 2021 Arnaud Bouchez + - log files separated by date: pascalcoin.log -> pascalcoin_YYYY-MM-DD.log + - RPC log files separated by date: pascalcoin_rpc.log -> pascalcoin_rpc_YYYY-MM-DD.log + - Peers cache stored on a separated file at DATAFOLDER with name "peers_cache.ini" instead of "pascacoin_daemon.ini" + +## Build 5.6 - 2021-11-02 +** MINERS SHOULD UPDATE AS SOON AS POSSIBLE ** +- Assigned OP_RECOVER automatically to miner using miner AccountKey +- Net Protocol upgraded to 14 (improvements) +- Minor fixed bugs (see GitHub commits since build 5.5) + +## Build 5.5 - 2021-04-12 +- Fixed fatal bug. Mandatory upgrade +- Net protocol upgraded to 13 + +## Build 5.4 - 2021-03-24 - Added usage of AbstractMem library to allow build a PascalCoin version using virtual memory and efficient caching mechanism - - Must activate {$DEFINE USE_ABSTRACTMEM} at config.inc file + - Use AbstractMem library v1.2 + - Must activate {$DEFINE USE_ABSTRACTMEM} at config.inc file (Enabled by default) +- Added "Ask for Account (PASA)" feature on GUI wallet +- Implementation of PIP-0027 (E-PASA: Infinite Address-Space Layer-2) -> https://github.com/PascalCoin/PascalCoin/blob/master/PIP/PIP-0027.md +- Changes to `pascalcoin_daemon.ini` file: + - Added "DATAFOLDER" configuration option at pascalcoin_daemon.ini file (daemon/service) in order to allow customize data folder + - Added "ABSTRACTMEM_MAX_CACHE_MB" to customize Maximum megabytes in memory as a cache + - Added "ABSTRACTMEM_USE_CACHE_ON_LISTS","ABSTRACTMEM_CACHE_MAX_ACCOUNTS","ABSTRACTMEM_CACHE_MAX_PUBKEYS" in order to customize cache values + - Added "MAX_PAYTOKEY_MOLINAS" to fix limit on automatic PayToKey feature - Improved performance when downloading Safebox (Fresh installation) -- Fixed minor bugs +- JSON-RPC changes: + - Updated "Operation Object" and "Multi Operation Object" return values: + **(IF THE WALLET IS UNLOCKED Will automatically try to decrypt encoded payloads and also return E-PASA used)** + - "senders" or "receivers" : ARRAY + - "account_epasa" : (String) If operation was using valid E-PASA format and can be decoded, will return E-PASA format used with extended checksum + - "unenc_payload" : (String) If payload can be decoded returns unencoded value in readable format (no HEXASTRING) + - "unenc_hexpayload" : (HEXASTRING) Unencoded value in hexastring + - "payload_method" : (String) Can be "key" or "pwd" + - "enc_pubkey" : HexaString with public key (if "payload_method"="key") + - "pwd" : String with password used (if "payload_method"="pwd") + - New method "checkepasa": Check that "account_epasa" param contains a valid E-PASA format. Returns an "EPasa Object" (See below) + - New method "validateepasa": Creates an "account_epasa" with provided data and returns an "EPasa Object" (See below) + - "account" : Valid number or account name ( Use @ for a PayToKey ) + - "payload_method" : "none","dest","sender","aes" + - "pwd" : If "payload_method" = "aes" + - "payload_encode" : "string"(default) | "hexa" | "base58" + - "payload" : HEXASTRING with the payload data + - "EPasa Object" params: + - "account_epasa" : (String) Encoded EPASA with extended checksum + - "account" : number or name + - "payload_method" : "none","dest","sender","aes" + - "pwd" : (String) Provided only if "payload_method" = "aes" + - "payload_encode" : "string"(default) | "hexa" | "base58" + - "account_epasa_classic" : (String) Encoded EPASA without extended checksum + - "payload" : HEXASTRING with the payload data + - "payload_type" : Byte + - "is_pay_to_key" : (Boolean) True if EPasa is a Pay To Key format like @[Base58Pubkey] + - Payload encoding will automatically set "payload_type" value based on encoding params in order to store E-PASA standard + - Updated "findaccounts": + - New param "end" (integer, -1 for default): Will search from "start" to "end" (if "end"=-1 will search to the end) + - New method "findblocks": Will search and return an array of "Block objects" + - "start","end","max" : Based on block number and max returns values (max by default=100) + - "enc_pubkey" or "b58_pubkey" : If provided will return blocks where pubkey equal to provided + - "payload", "payloadsearchtype" : Same workaround than "name" and "namesearchtype" on "findaccounts" method + - New method "save-safebox-stream" : Will save a Safebox file in Stream format + - "filename" : String (optional) + - New method "save-safebox-abstractmem" : Will save a Safebox AbstractMem file of actual state + - "filename" : String (optional) + - New method "abstractmem-stats" : Testing purposes only + - Updated "addnode" + - New param "whitelist" : Boolean (False by default). When true the "nodes" ips will be added to Whitelist for JSON-RPC calls +- Fixed bugs: + - Fixed bugs on "pascalcoin_daemon" (daemon on Linux / Service on Windows) that produced crash on windows and some invalid finalization on Linux + - Fixed bugs on "finddataoperations" (not searching as expected) + - Fixed bug on "delistaccountforsale" (Freezing application / api calls) + - Fixed minor bugs ## Build 5.3.0 - 2020-03-12 - Fixed "out of memory" error when downloading Safebox diff --git a/LICENSE b/LICENSE index aa5270f48..bab6f1d98 100644 --- a/LICENSE +++ b/LICENSE @@ -1,11 +1,21 @@ -Pascal - P2P Cryptocurrency without need of historical operations. +MIT License -The MIT License (MIT) +Copyright (c) 2016-2023 Pascal Cryptocurrency developers based on original Albert Molina source code -Copyright (c) 2016-2020 Pascal Cryptocurrency developers based on original Albert Molina source code +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/PIP/PIP-0016.md b/PIP/PIP-0016.md index 9a5f6992d..4ae8b43aa 100644 --- a/PIP/PIP-0016.md +++ b/PIP/PIP-0016.md @@ -55,4 +55,7 @@ As mentioned in Motivation section, enveloping layer-2 protocols inside layer-1 ## Backwards Compatibility -This change is not backwards compatible and requires a hard-fork activation. \ No newline at end of file +This change is not backwards compatible and requires a hard-fork activation. + +## Related links +- PIP-0033 DATA operation RPC implementation https://www.pascalcoin.org/development/pips/pip-0033 \ No newline at end of file diff --git a/PIP/PIP-0027.md b/PIP/PIP-0027.md index fe4c9ff4c..c03ec3be3 100644 --- a/PIP/PIP-0027.md +++ b/PIP/PIP-0027.md @@ -119,7 +119,15 @@ Layer-1 account checkum must be the following number: These strings are used to denote an account names and conform to the following rules. - By definition, they must **not** start with a digit. -- String length must between 3..64 inclusive. + +### Account Name validation + +Account names in PascalCoin must be 3..64 characters in length. This validation rule is applied at the processing-tier level and not enforced by the EPASA grammar where a Pascal64 string is unbounded in size. + +### New Account validation + +EPASA is used to encode addresses for new accounts. An E-PASA of the form +"@[1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2]" is used to denote a "Pay to Key" style transaction where payments are sent to a "new account" containing the key encoded in the payload. #### Extended Checksum @@ -174,47 +182,47 @@ PayloadType will allow E-PASA's to be deterministically decoded by the recipient /// /// Payload encryption and encoding method not specified. /// - NonDeterministic = 0x00000000, + NonDeterministic = 0b00000000, /// /// Unencrypted, public payload. /// - Public = 0x00000001, + Public = 0b00000001, /// /// ECIES encrypted using recipient accounts public key. /// - RecipientKeyEncrypted = 0x00000010, + RecipientKeyEncrypted = 0b00000010, /// /// ECIES encrypted using sender accounts public key. /// - SenderKeyEncrypted = 0x00000100, + SenderKeyEncrypted = 0b00000100, /// /// AES encrypted using pwd param /// - PasswordEncrypted = 0x00001000, + PasswordEncrypted = 0b00001000, /// /// Payload data encoded in ASCII /// - AsciiFormatted = 0x00010000, + AsciiFormatted = 0b00010000, /// /// Payload data encoded in HEX /// - HexFormatted = 0x00100000, + HexFormatted = 0b00100000, /// /// Payload data encoded in Base58 /// - Base58Formatted = 0x01000000, + Base58Formatted = 0b01000000, /// /// E-PASA addressed by account name (not number). /// - AddressedByName = 0x10000000, + AddressedByName = 0b10000000, } ``` @@ -323,6 +331,8 @@ The below cases are only example E-PASA without valid checksums. Description + @[1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2]Pay To Key style transaction with Base58 encoded public key without checksum protection + @[1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2]:a054Pay To Key style transaction with Base58 encoded public key with checksum protection 77-44[1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2]Account 77-44 with unencrypted (public) Base58 payload (bitcoin address) without checksum protection 77-44[1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2]:10cbChecksum protected 77-44(1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2):7ba2ECIES encrypted using recipients public key @@ -373,12 +383,12 @@ For Layer-2 applications the ability for a receiver to auto-decode the E-PASA vi * Ugochukwu Mmaduekwe for assistance developing payload length validation rules * Benjamin Ansbach for regular feedback, assistance and insightful suggestions * UrbanCohort for elegancy-improving suggestion - + ## Reference Implementation The following regex parses an e-pasa: ``` -((?(0|[1-9]\d+))(?:(?-)(?\d{2}))?|(?(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|!|@|#|\$|%|\^|&|\*|\\\(|\\\)|-|\+|\\\{|\\\}|\\\[|\\]|_|\\:|\\"|`|\||\\<|\\>|,|\.|\?|/|~)(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|0|1|2|3|4|5|6|7|8|9|!|@|#|\$|%|\^|&|\*|\\\(|\\\)|-|\+|\\\{|\\\}|\\\[|\\]|_|\\:|\\"|`|\||\\<|\\>|,|\.|\?|/|~){2,63}))(?:(?[\[\(<\{])(?"( |!|\\"|#|\$|%|&|'|\\\(|\\\)|\*|\+|,|-|\.|/|0|1|2|3|4|5|6|7|8|9|\\:|;|\\<|=|\\>|\?|@|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|\\\[|\\\\|\\]|\^|_|`|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|\\\{|\||\\\}|~)+"|0x(?:[0-9a-f]{2})+|[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)?(?:(?:){1}(?( |!|\\"|#|\$|%|&|'|\\\(|\\\)|\*|\+|,|-|\.|/|0|1|2|3|4|5|6|7|8|9|\\:|;|\\<|=|\\>|\?|@|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|\\\[|\\\\|\\]|\^|_|`|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|\\\{|\||\\\}|~)+)?)?(?[]\)>\}]))?(?:(?:)(?[0-9a-f]{2}[0-9a-f]{2}))? +((?(0|[1-9]\d*))(?:(?-)(?\d{2}))?|(?(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|!|@|#|\$|%|\^|&|\*|\\\(|\\\)|-|\+|\\\{|\\\}|\\\[|\\]|_|\\:|\\"|`|\||\\<|\\>|,|\.|\?|/|~)(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|0|1|2|3|4|5|6|7|8|9|!|@|#|\$|%|\^|&|\*|\\\(|\\\)|-|\+|\\\{|\\\}|\\\[|\\]|_|\\:|\\"|`|\||\\<|\\>|,|\.|\?|/|~)*))(?:(?[\[\(<\{])(?"( |!|\\"|#|\$|%|&|'|\\\(|\\\)|\*|\+|,|-|\.|/|0|1|2|3|4|5|6|7|8|9|\\:|;|\\<|=|\\>|\?|@|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|\\\[|\\\\|\\]|\^|_|`|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|\\\{|\||\\\}|~)+"|0x(?:[0-9a-f]{2})*|[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)?(?:(?:){1}(?( |!|\\"|#|\$|%|&|'|\\\(|\\\)|\*|\+|,|-|\.|/|0|1|2|3|4|5|6|7|8|9|\\:|;|\\<|=|\\>|\?|@|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|\\\[|\\\\|\\]|\^|_|`|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|\\\{|\||\\\}|~)+)?)?(?[]\)>\}]))?(?:(?:)(?[0-9a-f]{2}[0-9a-f]{2}))? ``` After matching with the above regex, the named groups need to be extracted and validated as the below snippet shows @@ -626,6 +636,6 @@ A recursive-descent implementation can be found [here][2]. 1. [C# Regex Parser][1] 2. [C# Recursive-Descent Parser][2] -[1]: https://github.com/Sphere10/NPascalCoin/blob/master/src/NPascalCoin/Common/Text/RegexEPasaParser.cs -[2]: https://github.com/Sphere10/NPascalCoin/blob/master/src/NPascalCoin/Common/Text/RecursiveDescentEPasaParser.cs - +[1]: https://github.com/Sphere10/NPascalCoin/blob/master/src/NPascalCoin/Encoding/RegexEPasaParser.cs +[2]: https://github.com/Sphere10/NPascalCoin/blob/master/src/NPascalCoin/Encoding/RecursiveDescentEPasaParser.cs + diff --git a/PIP/PIP-0033.md b/PIP/PIP-0033.md index f9de214c7..0a082745f 100644 --- a/PIP/PIP-0033.md +++ b/PIP/PIP-0033.md @@ -103,7 +103,8 @@ Array senddata({ - `data_sequence [UINT16]` The data sequence of the operation. If the data sequence cannot be determined (null or not given), it is 0 by default. - `guid [GUID]` - A 16 Bytes GUID in `8-4-4-4-12` format. If null or not given, the node will generate a UUID V4 (random). + A 16 Bytes GUID in `{8-4-4-4-12}` format. If null or not given, the node will generate a UUID V4 (random). + Note that in Pascal programming language, GUID is wrapped in {} brackets. Example: {E7213C38-1A97-4CCA-A200-1FF094639BF5}. Brackets {} do not affect the blockchain, but {} should be part of GUID passed to JSON RPC API calls. - `amount [PASCCURRENCY] (defult = 0)` The amount to transfer to `target`, if not given or null the default value is 0. @@ -158,7 +159,8 @@ Array signdata({ - `data_sequence [UINT16]` The data sequence of the operation. If the data sequence cannot be determined (null or not given), it is 0 by default. - `guid [GUID]` - A 16 Bytes GUID in `8-4-4-4-12` format. If null or not given, the node will generate a UUID V4 (random). + A 16 Bytes GUID in `{8-4-4-4-12}` format. If null or not given, the node will generate a UUID V4 (random). + Note that in Pascal programming language GUID is wrapped in {} brackets. Example: {E7213C38-1A97-4CCA-A200-1FF094639BF5}. Brackets {} do not affect the blockchain, but {} should be part of GUID passed to JSON RPC API calls. - `last_n_operation UINT32` Last value of `n_operation` of the signer (or sender or target) - `amount [PASCCURRENCY] (defult = 0)` @@ -198,7 +200,8 @@ Array finddataoperations({ - `target [UINT32] (default = null)` The account that received the DATA operation. Optional. - `guid [GUID] (default = null)` - A 16 Bytes GUID in `8-4-4-4-12` format. Optional. + A 16 Bytes GUID in `{8-4-4-4-12}` format. Optional. + Note that in Pascal programming language GUID is wrapped in {} brackets. Example: {E7213C38-1A97-4CCA-A200-1FF094639BF5}. Brackets {} do not affect the blockchain, but {} should be part of GUID passed to JSON RPC API calls. - `data_sequence [UINT16]` The data sequence of the operation to search for. Optional. - `data_type [UINT16]` @@ -229,3 +232,5 @@ None. - UUID V4: https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_4_(random) - PascalCoin JSON RPC documentation: https://github.com/PascalCoin/PascalCoin/wiki/JSON-RPC-API + +- DATA-OP: In-Protocol Data Exchange (Layer-2 support) https://www.pascalcoin.org/development/pips/pip-0016 diff --git a/PIP/PIP-0041.md b/PIP/PIP-0041.md new file mode 100644 index 000000000..b2c5cf393 --- /dev/null +++ b/PIP/PIP-0041.md @@ -0,0 +1,90 @@ +
+  PIP: PIP-0041
+  Title: Pay To Key: in-protocol PASA distribution
+  Type: Protocol
+  Impact: Hard-Fork
+  Author: Herman Schoenfeld 
+  Comments-URI: https://discord.gg/sJqcgtD  (channel #pip-0041)
+  Status: Draft
+  Created: 2020-10-26
+
+ +## Summary + +This PIP proposes solution to a fundamental problem in PascalCoin; how first-time users get their first account. + +## Motivation + +One of the issues with PascalCoin is that new users require an account (PASA) before they can receive PASC. This is known as the "first PASA problem" and is an chicken-and-egg type problem. In all other cryptocurrencies, first-time users can receive their first coins simply by giving the sender their "address". In PascalCoin, a new user that wants to receive PASC for the first time is unable to give an address because they do not have an account. Instead, they must first acquire an account. This process typically comprises of them scratching their head, searching the internet for information, learning about PASA's and eventually contacting a 3rd party PASA dispenser (like [FreePasa.org](https://freepasa.org)) to get their account. Only after all that and waiting 5 minutes for a blockchain confirmation can they finally possess an address to give the sender in order to receive their PASC. + +Almost all user feedback on this workflow has been highly negative. Attempts to solve this issue (as Blaise app does) are still a bad user experience and overtly complex. It's a well known principle of product design that onboarding new users should always be as easy and smooth as possible in order maximize the market penetration of that product. Thus it is clear that the "first PASA problem" is an impediment to PascalCoin's growth and needs to be solved. + +This PIP finally solves this problem. It provides first time users an **instant** receive address they can use immediately, just like Bitcoin. This is achieved through the use of E-PASA, Block Policy and a Buy Account operation. In this proposal, all users will be able to receive funds directly to their public key by virtue of an E-PASA of the form **@[1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2]**. Here the users public key is encoded in base-58 within square brackets pre-fixed with an @ symbol. + +A transaction to such an E-PASA is translated under-the-hood as a "Buy Account" operation for **any floating** account available in the SafeBox. Floating accounts are very similar to "Public Sale Accounts" except they are owned by no one and have no seller. The "sale price" for floating accounts is determined by an economic variable in the Block Policy called "New PASA Fee". This fee is "floating" in that it can change with the block policy. This allows the price of new PASA to always be low enough to onboard new users but high enough to dissuade hoarding and abuse. This value is determined by the PascalCoin community through a layer-1 governance system called [Block Policy][2]. + +From the senders perspective, this solution requires no change to their workflow. With the implementation of E-PASA, when sending transactions the sender can enter an E-PASA recipient. Thus, by simply entering an E-PASA of the form described above, the PascalCoin node can automatically produce a "Pay to key" style Buy Account operation under-the-hood. Thus it allows a sender to sent to a recipient's account or key, as they desire. This is also true at the API-level where the API sender is an E-PASA and can perform a Pay to Key by virtue of the recipient's address alone without any other details. + +## Specification + +### 1. Core Changes + +#### 1.1 BuyAccount Operation Changes + +A. New transaction sub-type called "buy floating account". + +B. Implements same logic as "buy account" except for the following changes: + + B.1. The "account to buy" is 0 and ignored + + B.2. The "account to pay" is 0 and ignored (i.e. sellers account) + +C. On execution, + + C.1 The **first** PASA in the SafeBox with type "Floating" is selected as the "account to buy" + + C.2 The "Sale Price" for C.1 is taken from the Block Policy variable "New PASA Fee" + + C.3 The account is purchased in exactly the same manner as Buy Account except "account to pay" is credited 0 PASC (i.e. the New PASA Fee is **burned**). + +#### 1.2 JSON API + +A. New method called “Pay to Key” is offered that works as follows: + + A.1 Arguments are Account, Public Key, Quantity + + A.2 Builds a "Buy Floating Account" operation as per (1.1) using arguments in (A.1) + + +B. Update "SendTransaction" method such that, + + B.1 If target E-PASA is of the form *"@[Base58Key]"* then B.2 else B.3 + + B.2 Route to "Pay To Key" method using the parsed Base58Key as buyers key, keeping other arguments unchanged then finish + + B.3 Continue as a normal SendTransaction + +### GUI Changes + +No changes are required since this feature is enabled with E-PASA support (PIP-0027). A pay to key will occur under-the-hood when someone sends a transaction to "@[1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2]" address. + +## Rationale + +The design approach is to provide a pure in-protocol PASA distribution solution for first time users. The design also is seamless in that a new operation is not required and minimizes implementation complexity as it leverages existing and other proposed new features. + +This proposal definitively solves the first-PASA problem and provides an in-protocol distribution mechanism for PASA's whilst maintaining the commoditization principles that made PASA's great to begin with. + +Also, there will be no need for 3rd party infrastructure FreePasa.org or GetPasa.com and the hundreds of thousands of accounts available to Foundation can be made floating. Also with Block Policy, all new PASA's are by default set to floating (except the miner/dev reward ones). + +## Backwards Compatibility + +This PIP is not backwards compatible and requires a hard-fork activation. It also requires [PIP-0027 E-PASA][1] and [PIP-0035 Block Policy][2] activation. + +## Links + +1. [E-PASA: Infinite Address-Space (via Layer-2)][1] +2. [Block Policy: Layer-1 Governance][2] + +[1]: https://github.com/PascalCoin/PascalCoin/blob/master/PIP/PIP-0027.md +[2]: https://github.com/PascalCoin/PascalCoin/blob/master/PIP/PIP-0035.md + diff --git a/PIP/PIP-0042.md b/PIP/PIP-0042.md new file mode 100644 index 000000000..6ce668539 --- /dev/null +++ b/PIP/PIP-0042.md @@ -0,0 +1,152 @@ +
+  PIP: PIP-0042
+  Title: Update OP_RECOVER to initial sense described on original WhitePaper and allow ASK FOR PASA feature
+  Type: Protocol
+  Impact: Hard-Fork
+  Author: Albert Molina   
+  Copyright: Albert Molina, 2021 (All Rights Reserved)
+  Comments-URI: https://discord.gg/gamPX9E4RF (Discord channel #pip-42)
+  Status: Proposed
+  Created: 2021-09-23
+
+ +## Summary + +Update current OP_RECOVER operation in order to have a similar sense as described on [Original PascalCoin WhitePaper published on July 2016][1] few weeks before Genesis Block. + +## Motivation + +OP_RECOVER feature was defined on original PascalCoin Whitepaper published on July 2016 as a way to allow recover coins that has lost private key. + +**PascalCoin WhitePaper:** +``` +PascalCoin proposes an alternative to the basic operation of Bitcoin, through which change +several aspects for working on the new virtual currency: +... + - PascalCoin provides a method set by protocol to retrieve coins that are not used + instead (lost key). This method only applies if after a certain time the owner does not + make any operation with the account private key. +... +(Page 2/8) +``` + +Basically was a way to mantain a constant and predectible inflation and available coin because burning coins are not possible. + +Current problem is that WhitePaper definition is ambiguous and **certain time** was not specified, initial source code proposal was to **set a time value = 4 years** (420480 blocks in PascalCoin) + +Another problem is that WhitePaper didn't specified who can retrieve coins that are not used, neither what to do with Pascal Accounts (aka **PASA**) not used. + +## Proposal + +This PIP specifies a more accurated OP_RECOVER feature that will mantain initial sense and will allow a fair PASA and coins distribution. + +Update current OP_RECOVER to work as this: + +1. The way to know if an Account is not used will be counting how many blocks since last private key signed this Account as an Active mode as defined on [PIP-0037][2]. + +2. Accounts without coins (amount = 0) can be reused to community usage in a ASK FOR PASA (OP_RECOVER special case) after 4 years if Account has not been used as specified on 1. + +3. Coins stored in Accounts (where amount > 0) can be retrieved to MINER that generates a block as a fee in the OP_RECOVER operation after 10 years if Account has not been used as specified on 1. + +4. ASK FOR PASA will be an OP_RECOVER special case operation signed by an Authority Account, Authority Account will be the Account stored in the type value of Account number 1 ( Account(1).type == Authority Account ). + +5. Accounts 0 to 9 (inclusive) are exempt for OP_RECOVER operation. + + +## Specification + +The following changes are required to implement this in PascalCoin. + +### New OP_RECOVER fields + +A new field `sign` will be added to OP_RECOVER that will be used in Proposal number 2. Value MUST be empty in other cases. + +``` + TOpRecoverFoundsData = Record + account: Cardinal; + n_operation : Cardinal; + fee: UInt64; + new_publicKey: TAccountKey; + // New field for PIP-0042 + sign: TECDSA_SIG; + End; +``` + +### Update OP_RECOVER code + +#### Changes on check + +Check proposals 2 to 5: + +``` + let A = target PASA + let L4Years = 420480 ((24 hours * 60 minutes) DIV 5 minutes) * 365 days * 4 years) + let L10Years = 1051200 ((24 hours * 60 minutes) DIV 5 minutes) * 365 days * 10 years) + let LCurrentBlock = Current Blockchain new block number + + // Proposal 5 protection + if (A.account<=9) then + Error 'Accounts 0..9 are protected'; + + // Proposal 2 protection + if (A.updated_on_block_active_mode + L4Years >= LCurrentBlock) then + Error 'Account is still active (less than 4 years without private key usage)'; + + // Proposal 3 protection + if (A.updated_on_block_active_mode + L10Years >= LCurrentBlock) AND (A.Balance > 0) then + Error 'Account has balance>0 and still active (less than 10 years without private key usage)'; + + let B = Account(1) + let C = Account( B.type ) // Authority account + let DATA = OP_RECOVER fields + + // Proposal 4 ASK FOR PASA signed by Authority account + if ((DATA.new_publicKey) not null) AND (NOT IsValidSignature(DATA.sign, C.accountInfo.publicKey)) then + Error 'Ask for Pasa feature must be signed by Authority account'; + +``` + +#### Changes on Execute + +Execution is done only **after checks are passed** + +``` + // Assume same fields than check code + + // Ask for Pasa + if ((DATA.new_publicKey) not null) then + set A.accountInfo.publicKey = DATA.new_publicKey + + set FEE = A.balance + set A.balance = 0; // Sets Account balance to 0, balance will be a fee for the miner + + SaveAccount( A ); + + // Only the miner will obtain coins as a Fee of the block, none other can retrieve coins + IncrementNewBlockFee( FEE ); + +``` + +### Conclusion + +Only miner can retrieve coins, this will help and add a miners and pools race + +Current holders will have a reasonable time period (10 years) to hold coins + +Ask for Pasa feature will be available since activation thanks to 4 years rule + +## Affected PIP's + +This PIP deactivates PIP-0012 and PIP-0019 + +## Backwards Compatibility + +This change is not backwards compatible and requires a hard-fork activation. + +## Links + +1. [Original PascalCoin WhitePaper published on July 2016. Accessed 2021-09.][1] +2. [PIP-0037][2] + +[1]: https://github.com/PascalCoin/PascalCoin/blob/c22184dd7a407c6646ab651494822071726ed36e/PascalCoin%20White%20Paper%20-%20EN.pdf +[2]: https://github.com/PascalCoin/PascalCoin/blob/master/PIP/PIP-0037.md diff --git a/PIP/PIP-0043.md b/PIP/PIP-0043.md new file mode 100644 index 000000000..6daaac320 --- /dev/null +++ b/PIP/PIP-0043.md @@ -0,0 +1,73 @@ +
+  PIP: PIP-0043
+  Title: Update OP_RECOVER to recover only non used, not named PASA's
+  Type: Protocol
+  Impact: Hard-Fork
+  Author: Albert Molina   
+  Copyright: Albert Molina, 2023 (All Rights Reserved)
+  Comments-URI: https://discord.gg/Scr8mcwnrC (Discord channel #pip-43)
+  Status: Proposed
+  Created: 2023-03-10
+
+ +## Summary + +Update current OP_RECOVER operation in order to have a similar sense as described on [Original PascalCoin WhitePaper published on July 2016][1] few weeks before Genesis Block and also a community poll made on discord channel + +## Motivation + +OP_RECOVER feature was defined on original PascalCoin Whitepaper published on July 2016 as a way to allow recover coins that has lost private key. + +**PascalCoin WhitePaper:** +``` +PascalCoin proposes an alternative to the basic operation of Bitcoin, through which change +several aspects for working on the new virtual currency: +... + - PascalCoin provides a method set by protocol to retrieve coins that are not used + instead (lost key). This method only applies if after a certain time the owner does not + make any operation with the account private key. +... +(Page 2/8) +``` + +Basically was a way to mantain a constant and predectible usage of inflation and available coin because burning coins are not possible. + +Current problem is that WhitePaper definition is ambiguous and **certain time** was not specified, initial source code proposal was to **set a time value = 4 years** (420480 blocks in PascalCoin) + +Another problem is that WhitePaper was mixing coins (**PASC**) and accounts (**PASA**), because what is necessary in PascalCoin is an Account (aka PASA), so we can focus on recover PASA instead of recover coins inside PASA + +## Proposal + +This PIP specifies a more accurated OP_RECOVER that was discussed on Discord Channel + +See poll results: https://discordapp.com/channels/383064643482025984/391780165669093377/719437469329915945 +``` +Poll on Discord +https://discordapp.com/channels/383064643482025984/391780165669093377/719437469329915945 +RESULTS ON 2020-07-21 +1 (22 votes) - Remove PASC/PASA Recovery rule +2 (27 votes) - Recover only EMPTY non used, not named PASA's +3 (3 votes) - Change Recovery to 10 year rule +4 (2 votes) - Leave As Is. + +Winner option 2: Will apply on next Hard Fork (Protocol 6) +``` + + +## Implementation + +https://github.com/PascalCoin/PascalCoin/commit/290ba9c288202250f891945f629a3d2aff907e08 + +## Affected PIP's + +This PIP deactivates PIP-0012 and PIP-0042 + +## Backwards Compatibility + +This change is not backwards compatible and requires a hard-fork activation. + +## Links + +1. [Original PascalCoin WhitePaper published on July 2016. Accessed 2021-09.][1] + +[1]: https://github.com/PascalCoin/PascalCoin/blob/c22184dd7a407c6646ab651494822071726ed36e/PascalCoin%20White%20Paper%20-%20EN.pdf diff --git a/PIP/PIP-0044.md b/PIP/PIP-0044.md new file mode 100644 index 000000000..cc97ca9e0 --- /dev/null +++ b/PIP/PIP-0044.md @@ -0,0 +1,64 @@ +
+  PIP: PIP-0044
+  Title: Induplicatable NFT
+  Type: Protocol
+  Impact: Hard-Fork
+  Author: Albert Molina   
+  Copyright: Albert Molina, 2023 (All Rights Reserved)
+  Comments-URI: https://discord.gg/Scr8mcwnrC (Discord channel #pip-44)
+  Status: Proposed
+  Created: 2023-03-14
+
+ +## Summary + +NFT (Non-fungible-token) is a well known item in the blockchain industry. It's currently based on store the item (usually a HASH of a information) in the blockchain as a Proof-of-ownership of the item. + +This means that this HASH of the item is stored in a transaction included in a block, and what really is used for transfers (buy/sell transactions) is a reference of the transaction, so **there is no warranty/prevention that same NFT HASH is stored in other blocks/transactions** + +A true NFT must be something that is impossible to be duplicated, so we present a way to store Induplicatable NFT on the blockchain because the HASH will live on the Safebox struct (that is a representation of the ledger balance of the blockchain information) and **HASH will be induplicatable** on Safebox struct, **converting NFT owner in a PASA owner** + +Also, thanks to Safebox current features, this Induplicatable NFT can be sold using same on-chain transactions mechanism without third party neither single point of failure (PIP-0002 - In-protocol PASA Exchange) + +## Proposal + +This PIP specifies how to use current Safebox struct and operations to store Induplicatable NFT on the PascalCoin blockchain + +- Safebox PASA's has Account Names and Types as described on PIP-0004, that allows to store unique Account Names in the safebox + +- Implementation of PIP-0004 limited Account Name to be Null or 3..64 characters long + +- Implementation of PIP-0004 prevents first char to be a number ('0'..'9') to not confuse name as an account number + +In order to use Account Name as a HASH, we must do one of proposals: + +- Without protocol upgrade: + + - **Option A**: Use a "encode"/"decode" function to convert first char in a numeric/non-numeric char like convert "`ghijklmnop`" as "`0123456789`" for first char, so hash `9a737f6e41c58935c535fe7b08426006f246986810c21deeb808cc564b8ecdca` will be encoded to `pa737f6e41c58935c535fe7b08426006f246986810c21deeb808cc564b8ecdca` (transform 9 -> p) + +- With protocol upgrade (Hard fork): + + - **Option B**: Start hash value with a suffix like "`nft_`" because first char cannot be an Hexadecimal numeric number, in this case the 64 characters length is a limitation because we cannot store 32 bytes hash plus suffix length in 64 chars + + - **Option C**: Allows usage of numeric first char when name is a representation of a 32 bytes hexadecimal value + + +This PIP-0044 will implement **Option C** allowing first char as a numberic "0".."9" char when name contains a 32 bytes (64 chars) hexadecimal value, this will prevent to use first number as an account number caused to overflow + +## Implementation + +``` + // Update ValidAccountName function introducing this exception: + ... + if (new_name[0] in [Ord('0')..Ord('9')]) then + if (protocol_version>=CT_PROTOCOL_6) and + (length(new_name)=64) and + (IsHexadecimal(new_name)) + then continue + else Error('Invalid numeric first char on a non-hash hexadecimal 32 bytes representation'); + end; +``` + +## Backwards Compatibility + +This change is not backwards compatible and requires a hard-fork activation. \ No newline at end of file diff --git a/PIP/README.md b/PIP/README.md index eb0ddf2ee..d484c8521 100644 --- a/PIP/README.md +++ b/PIP/README.md @@ -27,26 +27,29 @@ If they wish to continue, copy [this template](PIP-template.md) and ensure your | [18](PIP-0018.md) | 10% funding allocation for Lazarus/FPC | Herman Schoenfeld | Process | Proposed | | [19](PIP-0019.md) | Balance recovered from lost accounts to be sent to developers fund | Dr. Muhammad Amer | Protocol | Draft | | [20](PIP-0020.md) | 6-month PascalCoin Foundation Budget Appropriations | Herman Schoenfeld | Process | Withdrawn | -| [21](PIP-0021.md) | Agreement For Funding | Herman Schoenfeld | Process | Active | -| [22](PIP-0022.md) | Continuous Integration | Benjamin Ansbach | Process | Draft | -| [23](PIP-0023.md) | JSON RPC PASCURRENCY format | Benjamin Ansbach | Backend, Documentation | Draft | -| [24](PIP-0024.md) | Account Data | Herman Schoenfeld | Protocol | Draft | -| [26](PIP-0026.md) | URI Scheme Proposal | Ugochukwu Mmaduekwe | Front-End | Draft | -| [27](PIP-0027.md) | E-PASA: Infinite Address-Space (via Layer-2) | Herman Schoenfeld | Protocol, Front-End | Accepted | +| [21](PIP-0021.md) | Agreement For Funding | Herman Schoenfeld | Process | Cancelled | +| [22](PIP-0022.md) | Continuous Integration | Benjamin Ansbach | Process | Accepted | +| [23](PIP-0023.md) | JSON RPC PASCURRENCY format | Benjamin Ansbach | Backend, Documentation | Active | +| [24](PIP-0024.md) | Account Data | Herman Schoenfeld | Protocol | Active | +| [26](PIP-0026.md) | URI Scheme Proposal | Ugochukwu Mmaduekwe | Front-End | Rejected | +| [27](PIP-0027.md) | E-PASA: Infinite Address-Space (via Layer-2) | Herman Schoenfeld | Protocol, Front-End | Proposed | | [28](PIP-0028.md) | E-OP: Layer-2 operation encoding standard for smart-contracts | Herman Schoenfeld | Front-End | Withdrawn | | [29](PIP-0029.md) | Account Seals: Cryptographically Secure Account Histories | Herman Schoenfeld | Protocol | Active | | [30](PIP-0030.md) | SafeBoxRoot: Deletable SafeBox and Light-Nodes| Herman Schoenfeld | Protocol | Active | | [31A](PIP-0031A.md) | New Wallet: Multi-Platform & Multi-Paradigm | Herman Schoenfeld | User Interface | Withdrawn | -| [31B](PIP-0031B.md) | New GUI Wallet | mosu_forge | User Interface | Accepted | -| [31C](PIP-0031C.md) | New Wallet: Multi-Platform | Appditto | User Interface | Accepted | +| [31B](PIP-0031B.md) | New GUI Wallet | mosu_forge | User Interface | Cancelled | +| [31C](PIP-0031C.md) | New Wallet: Multi-Platform | Appditto | User Interface | Active | | [31D](https://github.com/davidbolet/PascWallet) | New Wallet: Multi-Platform & Multi-Paradigm | David Bolet | User Interface | Rejected | -| [32A](PIP-0032A.md) | Atomic Swaps via Hash-Locked Accounts | Herman Schoenfeld | Protocol | Proposed | +| [32A](PIP-0032A.md) | Atomic Swaps via Hash-Locked Accounts | Herman Schoenfeld | Protocol | Active | | [33](PIP-0033.md) | DATA operation RPC implementation | Benjamin Ansbach | Backend | Proposed | -| [34A](PIP-0034A.md) | Website UI/UX Redesigns | Appditto | Website | Proposed | -| [35](PIP-0035.md) | Block Policy: Layer-1 Governance (Velocity Cash) | Herman Schoenfeld | Protocol | Draft | +| [34A](PIP-0034A.md) | Website UI/UX Redesigns | Appditto | Website | Cancelled | +| [35](PIP-0035.md) | Block Policy: Layer-1 Governance (Velocity Cash) | Herman Schoenfeld | Protocol | Proposed | | [36](PIP-0036.md) | RandomHash2: Enhanced GPU & ASIC Resistant Hash Algorithm | Herman Schoenfeld | Protocol | Accepted | | [37](PIP-0037.md) | Distinguish account updates between active/passive mode | Albert Molina | Protocol | Accepted | | [38](PIP-0038.md) | P2P Chat and Communication | Preben Björn Biermann Madsen | Protocol | Draft | -| [39](PIP-0039.md) | Temporary Voting Procedure | Gynther and the Interrim Dao-Team | Process | Draft | -| [40](PIP-0040.md) | Pascal Governance | Gynther and the Interrim Dao-Team | Process | Draft | +| [39](PIP-0039.md) | Temporary Voting Procedure | Gynther and the Interrim Dao-Team | Process | Cancelled | +| [40](PIP-0040.md) | Pascal Governance | Gynther and the Interrim Dao-Team | Process | Cancelled | +| [41](PIP-0041.md) | Pay To Key: in-protocol PASA distribution | Herman Schoenfeld | Protocol | Draft | +| [42](PIP-0042.md) | Update OP_RECOVER to initial sense described on original WhitePaper and allow ASK FOR PASA feature | Albert Molina | Protocol | Proposed | +| [43](PIP-0043.md) | Update OP_RECOVER to recover only non used, not named PASA's | Albert Molina | Protocol | Proposed | diff --git a/README.md b/README.md index 63173e065..997b2136c 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,9 @@ -![VERSION](https://img.shields.io/github/v/tag/PascalCoin/PascalCoin?sort=semver&style=for-the-badge) -![License](https://img.shields.io/github/license/PascalCoin/PascalCoin.svg?style=for-the-badge) -![DISCORD](https://img.shields.io/discord/383064643482025984.svg?label=DISCORD%20COMMUNITY&style=for-the-badge) -![REDDIT](https://img.shields.io/reddit/subreddit-subscribers/pascalcoin.svg?style=for-the-badge) +[![BUILD](https://github.com/PascalCoin/PascalCoin/actions/workflows/workflow.yml/badge.svg?branch=master)](https://github.com/PascalCoin/PascalCoin/actions) + +[![VERSION](https://img.shields.io/github/v/tag/PascalCoin/PascalCoin?sort=semver&style=for-the-badge)](https://github.com/PascalCoin/PascalCoin/releases) +[![License](https://img.shields.io/github/license/PascalCoin/PascalCoin.svg?style=for-the-badge)](https://github.com/PascalCoin/PascalCoin/blob/master/LICENSE) +[![DISCORD](https://img.shields.io/discord/383064643482025984.svg?label=DISCORD%20COMMUNITY&style=for-the-badge)](https://discord.gg/9YYZyw) +[![REDDIT](https://img.shields.io/reddit/subreddit-subscribers/pascalcoin.svg?style=for-the-badge)](https://www.reddit.com/r/pascalcoin)



@@ -10,7 +12,7 @@ ``` -Copyright (c) 2016-2020 Pascal developers based on original Albert Molina source code +Copyright (c) 2016-2024 Pascal developers based on original Albert Molina source code ``` Please use at your own risk. @@ -39,22 +41,24 @@ There are testnet and mainnet releases. In case you have questions or just want to get in touch with like-minded Pascal users. - - Listen to our twitter on: https://twitter.com/PascalCoin + - Our twitter feed: https://twitter.com/PascalCoin - Chat with us on discord: https://discord.gg/9YYZyw - - Join our subreddit on: https://discord.gg/9YYZyw + - Join our subreddit on: https://www.reddit.com/r/pascalcoin ## Develop with Pascal | Language | Project Name | Type | Version support | Link | | ------------- | ------------ | ------- | --------------- | ---- | -| JavaScript | SBX | Library | 5 | [https://github.com/techworker/sbx](SBX) | -| Dart | PascalDart | Library | 4 | [https://github.com/appditto/pascaldart](PascalDart) | -| Java | JPascalCoin | Library | 4 | [https://github.com/davidbolet/JPascalCoin](JPascalCoin) | +| JavaScript | SBX | Library | 5 | [SBX](https://github.com/techworker/sbx) | +| Dart | PascalDart | Library | 4 | [PascalDart](https://github.com/appditto/pascaldart) | +| Java | JPascalCoin | Library | 4 | [JPascalCoin](https://github.com/davidbolet/JPascalCoin) | ## Changelog View the changelog [here](CHANGELOG.md) ## Donations - -Consider a donation using BitCoin to `16K3HCZRhFUtM8GdWRcfKeaa6KsuyxZaYk` + +Consider a donation using Pascal coin to development account: `0-10` + +Also, consider a donation using BitCoin to `16K3HCZRhFUtM8GdWRcfKeaa6KsuyxZaYk` diff --git a/linux-libs/libcrypto.so.1.1 b/linux-libs/libcrypto.so.1.1 new file mode 100755 index 000000000..3bd113c5d Binary files /dev/null and b/linux-libs/libcrypto.so.1.1 differ diff --git a/release-notes.md b/release-notes.md new file mode 100644 index 000000000..7bcc0027c --- /dev/null +++ b/release-notes.md @@ -0,0 +1,2 @@ +# PascalCoin v5.7.3 +- WIP diff --git a/src/config.inc b/src/config.inc index 668029b34..e418a52f5 100644 --- a/src/config.inc +++ b/src/config.inc @@ -35,7 +35,9 @@ // Activate to define CryptoLib4Pascal by default on all compilations {.$DEFINE Use_CryptoLib4Pascal} - + // Add the following paths to the project Search Path is this option is used + // .\libraries\cryptolib4pascal + // .\libraries\simplebaselib4pascal // Used to activate RandomHash in V4 hard-fork {$DEFINE ACTIVATE_RANDOMHASH_V4} @@ -64,7 +66,17 @@ // Activate ABSTRACTMEM library. Will use a virtual memory caching mechanism for efficient usage without high RAM requirements {$DEFINE USE_ABSTRACTMEM} + + // Activate GNUGETTEXT library + {$DEFINE USE_GNUGETTEXT} + // Activate usage of TPCTemporalFileStream instead of TBytes in order to minimize mem usage + // This also fixes issue #207 High memory usage on FreePascal compiler + {.$DEFINE USE_BIGBLOCKS_MEM_ON_DISK} + + // This will enable to use indexed data on Blockchain storage so will allow to quick search + // indexed by ophash, by block/operation and account history + {$DEFINE USE_ABSTRACTMEM_BLOCKCHAIN_STORAGE} { ******************************************************************** Don't touch more code, it will addapt based on your preferences @@ -111,6 +123,12 @@ ERROR: You must select ONLY ONE option: Use_OpenSSL or Use_CryptoLib4Pascal {$ELSE} {$UNDEF NO_ANSISTRING} {$ENDIF} + + {$IF COMPILERVERSION > 33} + {$DEFINE DELPHI_SYDNEY_PLUS} + {$ENDIF} +{$ELSE} + {$UNDEF USE_GNUGETTEXT} {$ENDIF} @@ -123,3 +141,20 @@ ERROR: You must select ONLY ONE option: Use_OpenSSL or Use_CryptoLib4Pascal {$ENDIF} {$ENDIF} + {$IFDEF FPC} + {$IFDEF CPU32} + {$DEFINE IS32BITS} + {$UNDEF IS64BITS} + {$ELSE} + {$UNDEF IS32BITS} + {$DEFINE IS64BITS} + {$ENDIF} + {$ELSE} + {$IFDEF CPU32BITS} + {$DEFINE IS32BITS} + {$UNDEF IS64BITS} + {$ELSE} + {$UNDEF IS32BITS} + {$DEFINE IS64BITS} + {$ENDIF} + {$ENDIF} diff --git a/src/core/UAbstractMemBlockchainStorage.pas b/src/core/UAbstractMemBlockchainStorage.pas new file mode 100644 index 000000000..bbb1850ab --- /dev/null +++ b/src/core/UAbstractMemBlockchainStorage.pas @@ -0,0 +1,2337 @@ +unit UAbstractMemBlockchainStorage; + +{ Copyright (c) 2022 by Albert Molina + + Distributed under the MIT software license, see the accompanying file LICENSE + or visit http://www.opensource.org/licenses/mit-license.php. + + This unit is a part of the PascalCoin Project, an infinitely scalable + cryptocurrency. Find us here: + Web: https://www.pascalcoin.org + Source: https://github.com/PascalCoin/PascalCoin + + If you like it, consider a donation using Bitcoin: + 16K3HCZRhFUtM8GdWRcfKeaa6KsuyxZaYk + + THIS LICENSE HEADER MUST NOT BE REMOVED. + +} + +{$IFDEF FPC} + {$mode delphi} +{$ENDIF} + +interface + +{$I ./../config.inc} + +uses + Classes, SysUtils, UBlockchain, UThread, UCrypto, math, UAccounts, ULog, + SyncObjs, + {$IFNDEF FPC}System.Generics.Collections{$ELSE}Generics.Collections{$ENDIF}, + UCommon, + UBaseTypes, UPCDataTypes, + UAbstractMem, UFileMem, UCacheMem, + UAbstractMemBTree, UOrderedList, + UFileStorage, + UConst; + +type + EAbstractMemBlockchainStorage = Class(Exception); + + TBlockchainStorageStats = record + blockInformationCount : Int64; + operationRawDataCount : Int64; + affectedAccountCount : Int64; + startTC : TTickCount; + procedure Clear; + function ToString : String; + function ThroughputPerSecond : Double; + procedure AddTo(var ADest : TBlockchainStorageStats); + end; + PBlockchainStorageStats = ^TBlockchainStorageStats; + + { TAbstractMemBlockchainStorage } + + TAbstractMemBlockchainStorage = Class(TStorage) + private + FFileMem : TFileMem; + FStorageLock : TCriticalSection; + FAutoFlushCache: Boolean; + FUseMultithread: Boolean; + FSaveStorageStats : TBlockchainStorageStats; + FPSaveStorageStats: PBlockchainStorageStats; + procedure SetUseMultithread(const Value: Boolean); + type + TOrphanInformation = record + orphan : string; + regsCounter : Integer; + procedure Clear; + procedure CopyFrom(const ASource : TOrphanInformation); + end; + TAMBTreeOrphanInformationByOrphan = Class(TAbstractMemBTreeData) + protected + function LoadData(const APosition : TAbstractMemPosition) : TOrphanInformation; override; + function SaveData(const AData : TOrphanInformation) : TAMZone; override; + public + procedure Update(const AOrphan : String; AIncrement : Integer); + function GetRegsCountByOrphan(const AOrphan : String) : Integer; + End; + + TBlockInformation = record + operationBlock : TOperationBlock; + orphan : String; + operationsCount : Integer; + volume : Int64; + rawDataPosition : TAbstractMemPosition; + procedure Clear; + procedure SetToFindByBlock(ABlock : Integer); + function ToSerialized : TBytes; + function FromSerialized(ABytes : TBytes) : Boolean; + function GetRawData(AAbstractMem : TAbstractMem; var ARawData : TBytes) : Boolean; + function CreateTPCOperationsComp(AAbstractMem : TAbstractMem; ABank: TPCBank) : TPCOperationsComp; + procedure ReadTPCOperationsComp(AAbstractMem : TAbstractMem; AOperationsComp : TPCOperationsComp); + function IsOrphan(const AOrphan : String) : Boolean; + procedure CopyFrom(const ASource : TBlockInformation); + end; + TAMBTreeOperationBlockInformationByOrphanBlock = Class(TAbstractMemBTreeData) + protected + function LoadData(const APosition : TAbstractMemPosition) : TBlockInformation; override; + function SaveData(const AData : TBlockInformation) : TAMZone; override; + procedure DeletedData(const AData: TBlockInformation); override; + public + function GetBlockInformationByBlock(ABlock : Integer) : TBlockInformation; + End; + + TOperationRawData = record + rightOpHash : TBytes; + account : Integer; + n_operation : Integer; + block : Integer; + opblock : Integer; + opType : Integer; + opSavedProtocol : Integer; + rawData : TBytes; + procedure Clear; + procedure SetToFindByRightOpHash(const ARightOpHash : TBytes); + procedure SetToFindByBlockOpblock(ABlock, AOpblock : Integer); + function ToSerialized : TBytes; + function FromSerialized(ABytes : TBytes) : Boolean; + procedure CopyFrom(const ASource : TOperationRawData); + function CreateTPCOperation(AAbstractMem : TAbstractMem) : TPCOperation; overload; + function CreateTPCOperation(AAbstractMem : TAbstractMem; out APCOperation : TPCOperation) : Boolean; overload; + end; + TAMBTreeTOperationRawDataByRightOpHash = Class(TAbstractMemBTreeData) + protected + function LoadData(const APosition : TAbstractMemPosition) : TOperationRawData; override; + function SaveData(const AData : TOperationRawData) : TAMZone; override; + End; + TAMBTreeTOperationRawDataByBlockOpBlock_Index = Class(TAbstractMemBTreeDataIndex) + End; + + TAffectedAccount = record + account : Integer; + n_operation : Integer; + block : Integer; + opblock : Integer; + procedure Clear; + procedure SetToFindByAccount(AAccount : Integer); + procedure SetToFindByAccountBlockOpblock(AAccount, ABlock, AOpblock : Integer); + function ToSerialized : TBytes; + function FromSerialized(ABytes : TBytes) : Boolean; + procedure CopyFrom(const ASource : TAffectedAccount); + function ToString:String; + end; + TAMBTreeTAffectedAccountByAccountBlockOpBlock = Class(TAbstractMemBTreeData) + protected + function LoadData(const APosition : TAbstractMemPosition) : TAffectedAccount; override; + function SaveData(const AData : TAffectedAccount) : TAMZone; override; + End; + + TPendingData = record + operation : TOperationRawData; + affectedAccounts : Array of TAffectedAccount; + procedure Clear; + end; + + TPendingToSaveThread = Class; + + TPendingToSave = Class + private + FAMStorage : TAbstractMemBlockchainStorage; + FMaxThreads : Integer; + FPending : TThreadList; + FThreads : TThreadList; + FOperationsRawData_By_RightOpHash : TAMBTreeTOperationRawDataByRightOpHash; + FAffectedAccounts_By_Account_Block_OpBlock : TAMBTreeTAffectedAccountByAccountBlockOpBlock; + FTotal: Integer; + FMaxPendingsCount: Integer; + FLastLogTC : TTickCount; + procedure SetMaxThreads(const Value: Integer); + protected + procedure ThreadHasFinishedCurrentJob; + public + procedure AddPendingData(const APendingData : TPendingData); + constructor Create(AStorage : TAbstractMemBlockchainStorage; AAMBTreeTOperationRawDataByRightOpHash : TAMBTreeTOperationRawDataByRightOpHash; + AAMBTreeTAffectedAccountByAccountBlockOpBlock : TAMBTreeTAffectedAccountByAccountBlockOpBlock); + destructor Destroy; override; + property MaxThreads : Integer read FMaxThreads write SetMaxThreads; + function PendingsCount : Integer; + property Total : Integer read FTotal write FTotal; + property MaxPendingsCount : Integer read FMaxPendingsCount write FMaxPendingsCount; + End; + + TPendingToSaveThread = Class(TPCThread) + private + FPendingToSave : TPendingToSave; + FBusy: Boolean; + protected + procedure BCExecute; override; + public + Constructor Create(APendingToSave : TPendingToSave); + property Busy : Boolean read FBusy write FBusy; + End; + + var + FOrphansInformation_By_Orphan : TAMBTreeOrphanInformationByOrphan; + FBlocksInformation_By_OrphanBlock : TAMBTreeOperationBlockInformationByOrphanBlock; + FOperationsRawData_By_RightOpHash : TAMBTreeTOperationRawDataByRightOpHash; + FOperationsRawData_By_Block_OpBlock_Index : TAMBTreeTOperationRawDataByBlockOpBlock_Index; + FAffectedAccounts_By_Account_Block_OpBlock : TAMBTreeTAffectedAccountByAccountBlockOpBlock; + + FPendingToSave : TPendingToSave; + FCheckingConsistency : Boolean; + FCheckingConsistencyProgress : String; + FCheckingConsistencyStats : TBlockchainStorageStats; + FLogSaveActivity : Boolean; + FInBlockNotFound : Boolean; + FInBlockSaving : Integer; + + function GetFirstBlockNumberByOrphan(const AOrphan : String): Int64; + function GetLastBlockNumberByOrphan(const AOrphan : String): Int64; + Function DoBlockExistsByOrphan(ABlock : Integer; const AOrphan : String; var LBlockInformation : TBlockInformation) : Boolean; + + function DeleteBlockChainBlockExt(ABlock : Integer; const AOrphan : String) : Boolean; + Function DoSaveBlockChainExt(Operations : TPCOperationsComp; const AOrphan : String; var AStats : TBlockchainStorageStats) : Boolean; + Function DoLoadBlockChainExt(Operations : TPCOperationsComp; Block : Cardinal; const AOrphan : String) : Boolean; + procedure AddMessage(AMessages : TStrings; const AMessage : String; ARaiseAnException : Boolean); + procedure OnCacheMemFlushedCache(const ASender : TCacheMem; const AProcessDesc : String; AElapsedMilis: Int64); + procedure OnCacheMemLog(ASender : TObject; const ALog : String); + protected + procedure SetReadOnly(const Value: Boolean); override; + Function DoGetBlockInformation(const ABlock : Integer; var AOperationBlock : TOperationBlock; var AOperationsCount : Integer; var AVolume : Int64) : Boolean; override; + + Function DoLoadBlockChain(Operations : TPCOperationsComp; Block : Cardinal) : Boolean; override; + Function DoSaveBlockChain(Operations : TPCOperationsComp) : Boolean; override; + Function DoMoveBlockChain(StartBlock : Cardinal; Const DestOrphan : TOrphan) : Boolean; override; + Procedure DoDeleteBlockChainBlocks(StartingDeleteBlock : Cardinal); override; + Function DoBlockExists(Block : Cardinal) : Boolean; override; + function GetFirstBlockNumber: Int64; override; + function GetLastBlockNumber: Int64; override; + function DoInitialize : Boolean; override; + Procedure DoEraseStorage; override; + function CheckBlockConsistency(ARaiseOnError : Boolean; AMessages : TStrings; const ABlockInformation : TBlockInformation; out AOperationsCount, AAffectedAccountsCount : Integer; AThread : TPCThread) : Boolean; + + procedure DoBlockNotFound(ABlock : Integer; var AFound : Boolean); virtual; + procedure BlockNotFound(ABlock : Integer; var AFound : Boolean); + + Function DoGetBlockOperations(ABlock, AOpBlockStartIndex, AMaxOperations : Integer; var AOperationBlock : TOperationBlock; var AOperationsCount : Integer; var AVolume : Int64; const AOperationsResumeList:TOperationsResumeList) : Boolean; override; + Function DoGetAccountOperations(AAccount : Integer; AMaxDepth, AStartOperation, AMaxOperations, ASearchBackwardsStartingAtBlock: Integer; const AOperationsResumeList:TOperationsResumeList): Boolean; override; + function DoFindOperation(const AOpHash : TBytes; var AOperationResume : TOperationResume) : TSearchOpHashResult; override; + Function DoGetOperation(const ABlock, AOpBlock : Integer; const AOperations : TOperationsHashTree) : Boolean; + public + Constructor Create(AOwner : TComponent); Override; + Destructor Destroy; Override; + procedure FinalizedUpdating; + procedure CheckConsistency(ARaiseOnError: Boolean; AMessages: TStrings; AThread : TPCThread); overload; + function CheckConsistency(const AOrphan : String; AFromBlock , AToBlock : Integer; ARaiseOnError : Boolean; AMessages : TStrings; out ABlocksFound, AOperationsFound, AAffectedAccountsFound : Integer; AThread : TPCThread) : Boolean; overload; + property FileMem : TFileMem read FFileMem; + property AutoFlushCache : Boolean read FAutoFlushCache write FAutoFlushCache; + + Procedure FillInfo(AStrings : TStrings); + class function OrphanCompare(const ALeft, ARight : String) : Integer; inline; + function PendingToSave : Integer; + procedure AbortPendingToSave; + property UseMultithread : Boolean read FUseMultithread write SetUseMultithread; + + property CheckingConsistency : Boolean read FCheckingConsistency; + property CheckingConsistencyProgress : String read FCheckingConsistencyProgress; + property CheckingConsistencyStats : TBlockchainStorageStats read FCheckingConsistencyStats; + property SaveStorageStats : PBlockchainStorageStats read FPSaveStorageStats; + property LogSaveActivity : Boolean read FLogSaveActivity write FLogSaveActivity; + End; + + + TAbstractMemBlockchainStorageSecondary = Class(TAbstractMemBlockchainStorage) + private + FAuxStorage : TStorage; + FSaving : Boolean; + protected + procedure SetReadOnly(const Value: Boolean); override; + Function DoSaveBlockChain(Operations : TPCOperationsComp) : Boolean; override; + Function DoMoveBlockChain(StartBlock : Cardinal; Const DestOrphan : TOrphan) : Boolean; override; + Procedure DoDeleteBlockChainBlocks(StartingDeleteBlock : Cardinal); override; + function DoInitialize : Boolean; override; + procedure DoBlockNotFound(ABlock : Integer; var AFound : Boolean); override; + public + Constructor Create(AOwner : TComponent); Override; + Destructor Destroy; Override; + property AuxStorage : TStorage read FAuxStorage; + End; + + +implementation + + +function Comparer_TOrphanInformation_By_Orphan(const ALeft, ARight : TAbstractMemBlockchainStorage.TOrphanInformation) : Integer; +begin + Result := TAbstractMemBlockchainStorage.OrphanCompare(ALeft.orphan,ARight.orphan); +end; + +function Comparer_TBlockInformation_By_OrphanBlock(const ALeft, ARight : TAbstractMemBlockchainStorage.TBlockInformation) : Integer; +begin + Result := TAbstractMemBlockchainStorage.OrphanCompare(ALeft.orphan,ARight.orphan); + if Result=0 then begin + if ALeft.operationBlock.blockARight.operationBlock.block then Result := 1 + else Result := 0; + end; +end; + +function Comparer_TOperationRawData_By_RightOpHash(const ALeft, ARight : TAbstractMemBlockchainStorage.TOperationRawData) : Integer; +begin + Result := BytesCompare(ALeft.rightOpHash,ARight.rightOpHash); +end; + +function Comparer_TOperationRawData_By_Block_OpBlock(const ALeft, ARight : TAbstractMemBlockchainStorage.TOperationRawData) : Integer; +begin + Result := ALeft.block - ARight.block; + if Result=0 then Result := ALeft.opblock - ARight.opblock; +end; + +function Comparer_TAffectedAccount_By_Account_Block_OpBlock(const ALeft, ARight : TAbstractMemBlockchainStorage.TAffectedAccount) : Integer; +begin + Result := ALeft.account - ARight.account; + if Result=0 then Result := ALeft.block - ARight.block; + if Result=0 then Result := ALeft.opblock - ARight.opblock; +end; + + +{ TAbstractMemBlockchainStorage } + +procedure TAbstractMemBlockchainStorage.AbortPendingToSave; +begin + FreeAndNil(FPendingToSave); +end; + +procedure TAbstractMemBlockchainStorage.AddMessage(AMessages: TStrings; const AMessage: String; ARaiseAnException : Boolean); +begin + if Assigned(AMessages) then AMessages.Add(AMessage); + if ARaiseAnException then raise EAbstractMemBlockchainStorage.Create(AMessage); + TLog.NewLog(ltinfo,ClassName,AMessage); + FCheckingConsistencyProgress := AMessage; +end; + +procedure TAbstractMemBlockchainStorage.BlockNotFound(ABlock: Integer; var AFound : Boolean); +begin + AFound := False; + if FInBlockNotFound then begin + TLog.NewLog(ltdebug,ClassName,Format('BlockNotFound cannot save Block:%d because saving block:%d',[ABlock,FInBlockSaving])); + Exit; + end; + FInBlockNotFound := True; + try + FInBlockSaving := ABlock; + DoBlockNotFound(ABlock,AFound); + finally + FInBlockNotFound := False; + end; +end; + +function TAbstractMemBlockchainStorage.CheckBlockConsistency( + ARaiseOnError: Boolean; AMessages: TStrings; const ABlockInformation : TBlockInformation; out AOperationsCount, AAffectedAccountsCount : Integer; + AThread : TPCThread): Boolean; +var LErrorsCount : Integer; + procedure AddInfo(AIsError : Boolean; const AMessage : String); + Var LTxt : String; + begin + if AIsError then begin + Result := False; + inc(LErrorsCount); + LTxt := 'ERROR: '+AMessage; + end else LTxt := AMessage; + AddMessage(AMessages,LTxt,(AIsError and ARaiseOnError)); + end; +var + LOperationsCounter : Integer; + LOperationRawDataToSearch, LOperationRawData, + LOperationRawDataAux, LOperationRawDataAuxFound : TOperationRawData; + LOperationsComp : TPCOperationsComp; + LOperation : TPCOperation; + LRawData : TBytes; + LError : String; + LPos : TAbstractMemPosition; + LAffectedAccountsList : TOrderedList; + LAffectedAccount, LAffectedAccountFound : TAffectedAccount; + i : Integer; +begin + Result := True; + LErrorsCount := 0; + AAffectedAccountsCount := 0; + AOperationsCount := 0; + if Not ABlockInformation.GetRawData(FFileMem,LRawData) then begin + AddInfo(True,Format('Cannot obtain raw data from block %d at pos %d',[AblockInformation.operationBlock.block,ABlockInformation.rawDataPosition])); + end; + LOperationsComp := ABlockInformation.CreateTPCOperationsComp(FFileMem,Nil); + Try + // + if LOperationsComp.Count<>ABlockInformation.operationsCount then begin + AddInfo(True,Format('Block %d operations count not equal %d <> %d',[AblockInformation.operationBlock.block,AblockInformation.operationsCount,LOperationsComp.Count])); + end; + if LOperationsComp.OperationsHashTree.TotalAmount<>ABlockInformation.volume then begin + AddInfo(True,Format('Block %d volume not equal %d <> %d',[AblockInformation.operationBlock.block,AblockInformation.volume,LOperationsComp.OperationsHashTree.TotalAmount])); + end; + // + LOperationsCounter := 0; + LOperationRawDataToSearch.Clear; + LOperationRawDataToSearch.block := ABlockInformation.operationBlock.block; + LOperationRawDataToSearch.opblock := 0; + if FOperationsRawData_By_Block_OpBlock_Index.FindData(LOperationRawDataToSearch,LPos,LOperationRawData) then begin + repeat + if Assigned(AThread) and AThread.Terminated then Break; + + Inc(FCheckingConsistencyStats.operationRawDataCount); + FCheckingConsistencyProgress := Format('Orphan "%s" Block %d Operation %d/%d',[ABlockInformation.orphan,ABlockInformation.operationBlock.block,LOperationRawData.opblock+1,ABlockInformation.operationsCount]); + + LOperationRawDataAux.CopyFrom(LOperationRawData); + if not FOperationsRawData_By_RightOpHash.FindData(LOperationRawDataAux,LPos,LOperationRawDataAuxFound) then begin + AddInfo(True,Format('Block %d operation %d not found by searching by OpHash',[LOperationRawData.block,LOperationRawData.opblock])); + end; + // + LOperation := LOperationRawData.CreateTPCOperation(FFileMem); + Try + if (Not BytesEqual(LOperationRawData.rightOpHash,LOperation.RipeMD160)) then raise EAbstractMemBlockchainStorage.Create('ERR 20211116-1'); + if LOperationRawData.account<>LOperation.SignerAccount then raise EAbstractMemBlockchainStorage.Create('ERR 20211116-2'); + if LOperationRawData.n_operation<>LOperation.N_Operation then raise EAbstractMemBlockchainStorage.Create('ERR 20211116-3'); + // + if (Not BytesEqual(LOperation.RipeMD160,LOperationsComp.Operation[LOperationRawData.opblock].RipeMD160)) then raise EAbstractMemBlockchainStorage.Create('ERR 20211116-4'); + // Check affected accounts: + LAffectedAccountsList := TOrderedList.Create(False,TComparison_Cardinal); + Try + LOperation.AffectedAccounts(LAffectedAccountsList); + for i := 0 to LAffectedAccountsList.Count-1 do begin + LAffectedAccount.Clear; + LAffectedAccount.account := LAffectedAccountsList.Get(i); + LAffectedAccount.n_operation := LOperation.GetAccountN_Operation(LAffectedAccount.account); + LAffectedAccount.block := ABlockInformation.operationBlock.block; + LAffectedAccount.opblock := LOperationRawData.opblock; + + Inc(FCheckingConsistencyStats.affectedAccountCount); + FCheckingConsistencyProgress := Format('Orphan "%s" Block %d Operation %d/%d Account %d/%d', + [ABlockInformation.orphan,ABlockInformation.operationBlock.block,LOperationRawData.opblock+1,ABlockInformation.operationsCount, + i+1,LAffectedAccountsList.Count]); + + if Not FAffectedAccounts_By_Account_Block_OpBlock.FindData(LAffectedAccount,LPos,LAffectedAccountFound) then begin + AddInfo(True,Format('Affected account %d (%d/%d) for block %d opblock %d/%d not found',[LAffectedAccount.account, + i+1,LAffectedAccountsList.Count, LAffectedAccount.block, LAffectedAccount.opblock+1, ABlockInformation.operationsCount])); + end else begin + if LAffectedAccountFound.n_operation <> LOperation.GetAccountN_Operation(LAffectedAccount.account) then begin + AddInfo(True,Format('Invalid n_operation %d for account %d (%d/%d) for block %d opblock %d/%d',[LAffectedAccountFound.n_operation, LAffectedAccount.account, + i+1,LAffectedAccountsList.Count, LAffectedAccount.block, LAffectedAccount.opblock+1, ABlockInformation.operationsCount])); + end; + end; + end; + inc(AAffectedAccountsCount, LAffectedAccountsList.Count); + Finally + LAffectedAccountsList.Free; + End; + Finally + LOperation.Free; + End; + // + inc(LOperationsCounter); + Inc(LOperationRawDataToSearch.opblock); + until Not (FOperationsRawData_By_Block_OpBlock_Index.FindData(LOperationRawDataToSearch,LPos,LOperationRawData)); + end; + if LOperationsCounter<>ABlockInformation.operationsCount then begin + AddInfo(True,Format('Block %d has %d operations but %d was found',[ABlockInformation.operationBlock.block,ABlockInformation.operationsCount,LOperationsCounter])); + end; + AOperationsCount := LOperationsCounter; + Finally + LOperationsComp.Free; + End; +end; + +procedure TAbstractMemBlockchainStorage.CheckConsistency(ARaiseOnError: Boolean; AMessages: TStrings; AThread : TPCThread); +var LOrphans, LSearch : TOrphanInformation; + LOrphansCount, LBlocksFound, LOperationsFound, LAffectedAccountsFound, + Ltemp1, Ltemp2, Ltemp3 : Integer; + LMyOrphanFound : Boolean; +begin + if FCheckingConsistency then begin + if ARaiseOnError then raise EAbstractMemBlockchainStorage.Create('Checking consistency in process...'); + Exit; + end; + LMyOrphanFound := False; + LBlocksFound := 0; + LOperationsFound := 0; + LAffectedAccountsFound := 0; + LOrphansCount := 0; + LOrphans.Clear; + AddMessage(AMessages,Format('Start CheckConsistency process for My Orphan "%s"',[Orphan]),False); + if FOrphansInformation_By_Orphan.FindDataLowest(LOrphans) then begin + repeat + if Assigned(AThread) and (AThread.Terminated) then Break; + inc(LOrphansCount); + AddMessage(AMessages,Format('Start analyzing orphan "%s" with %d registers',[LOrphans.orphan,LOrphans.regsCounter]),False); + if not CheckConsistency(LOrphans.orphan,-1,-1,ARaiseOnError,AMessages,Ltemp1,Ltemp2,Ltemp3,AThread) then begin + AddMessage(AMessages,Format('Errors analyzing orphan "%s"',[LOrphans.orphan]),ARaiseOnError); + end; + inc(LBlocksFound,Ltemp1); + inc(LOperationsFound,Ltemp2); + inc(LAffectedAccountsFound,Ltemp3); + LMyOrphanFound := LMyOrphanFound or (OrphanCompare(LOrphans.orphan,Orphan)=0); + LSearch := LOrphans; + until Not (FOrphansInformation_By_Orphan.FindDataSuccessor(LSearch,LOrphans)); + end; + if not LMyOrphanFound then begin + AddMessage(AMessages,Format('Warning: My orphan "%s" not found in list!',[Self.Orphan]),False); + // + if Not CheckConsistency(Self.Orphan,-1,-1,ARaiseOnError,AMessages,Ltemp1,Ltemp2,Ltemp3,AThread) then begin + AddMessage(AMessages,Format('Errors analyzing My orphan "%s"',[Self.Orphan]),ARaiseOnError); + end; + inc(LBlocksFound,Ltemp1); + inc(LOperationsFound,Ltemp2); + inc(LAffectedAccountsFound,Ltemp3); + end; + if (LBlocksFound<>FBlocksInformation_By_OrphanBlock.Count) then begin + AddMessage(AMessages,Format('Error: Found %d blocks but expected %d',[LBlocksFound,FBlocksInformation_By_OrphanBlock.Count]),ARaiseOnError); + end; + if (LOperationsFound<>FOperationsRawData_By_RightOpHash.Count) then begin + AddMessage(AMessages,Format('Error: Found %d operations but expected %d',[LOperationsFound,FOperationsRawData_By_RightOpHash.Count]),ARaiseOnError); + end; + if (LAffectedAccountsFound<>FAffectedAccounts_By_Account_Block_OpBlock.Count) then begin + AddMessage(AMessages,Format('Error: Found %d accounts but expected %d',[LAffectedAccountsFound,FAffectedAccounts_By_Account_Block_OpBlock.Count]),ARaiseOnError); + end; + if (FOperationsRawData_By_RightOpHash.Count<>FOperationsRawData_By_Block_OpBlock_Index.Count) then begin + AddMessage(AMessages,Format('Error: Indexes for operations %d not %d',[FOperationsRawData_By_RightOpHash.Count,FOperationsRawData_By_Block_OpBlock_Index.Count]),ARaiseOnError); + end; + + + AddMessage(AMessages,Format('Finalized analyzing orphans with %d orphans %d blocks %d operations and %d accounts', + [LOrphansCount,LBlocksFound,LOperationsFound,LAffectedAccountsFound]),False); +end; + +function TAbstractMemBlockchainStorage.CheckConsistency(const AOrphan: String; + AFromBlock, AToBlock: Integer; + ARaiseOnError: Boolean; AMessages: TStrings; + out ABlocksFound, AOperationsFound, AAffectedAccountsFound : Integer; AThread : TPCThread): Boolean; +var LMessages : TStringList; + LErrorsCount : Integer; + procedure AddInfo(AIsError : Boolean; const AMessage : String); + Var LTxt : String; + begin + if AIsError then begin + Result := False; + inc(LErrorsCount); + LTxt := 'ERROR: '+AMessage; + if ARaiseOnError then raise Exception.Create(Self.ClassName+' not consistent: '+LTxt); + end else LTxt := 'INFO: '+AMessage; + AddMessage(AMessages,Ltxt,AIsError and ARaiseOnError); + end; +var LBlockInformation, LPreviousBlockInformation : TBlockInformation; + LBlocksInformationMin,LBlocksInformationMax : Integer; + LOperationRawData,LOperationRawDataAux,LOperationRawDataAuxFound : TOperationRawData; + LAffectedAccount : TAffectedAccount; + LPos : TAbstractMemPosition; + + LTempOperationsCounter, LTempAccountsCounter : Integer; + LContinue : Boolean; + LOrphanInformation,LOrphanInformationFound : TOrphanInformation; + LTC,LStartTC : TTickCount; +begin + Assert((AToBlock<0) or (AToBlock>=AFromBlock),Format('Invalid from %d to %d values',[AFromBlock,AToBlock])); + Result := True; + + LBlocksInformationMin := 0; + LBlocksInformationMax := 0; + + ABlocksFound := 0; + AOperationsFound := 0; + AAffectedAccountsFound := 0; + + if FCheckingConsistency then begin + if ARaiseOnError then raise EAbstractMemBlockchainStorage.Create('Checking consistency in process...'); + Exit; + end; + FCheckingConsistencyStats.Clear; + FCheckingConsistency := True; + Try + + LPreviousBlockInformation.Clear; + if (AFromBlock<0) then begin + AFromBlock := GetFirstBlockNumberByOrphan(AOrphan); + end; + LTC := TPlatform.GetTickCount; + LStartTC := LTC; + LContinue := ((AToBlock<0) or (AFromBlock<=AToBlock)) and (DoBlockExistsByOrphan(AFromBlock,AOrphan,LBlockInformation)); + if (LContinue) then begin + inc(ABlocksFound); + LPreviousBlockInformation.CopyFrom(LBlockInformation); + // Initialize + LBlocksInformationMin := LBlockInformation.operationBlock.block; + LBlocksInformationMax := LBlockInformation.operationBlock.block; + // Check operations count + if (OrphanCompare(AOrphan,Self.Orphan)=0) then begin + CheckBlockConsistency(ARaiseOnError,AMessages,LBlockInformation,LTempOperationsCounter,LTempAccountsCounter,AThread); + inc(AOperationsFound,LTempOperationsCounter); + inc(AAffectedAccountsFound,LTempAccountsCounter); + end; + // + while (FBlocksInformation_By_OrphanBlock.FindDataSuccessor(LPreviousBlockInformation,LBlockInformation)) do begin + Inc(FCheckingConsistencyStats.blockInformationCount); + FCheckingConsistencyProgress := Format('Orphan "%s" Block %d Operations %d',[LBlockInformation.orphan,LBlockInformation.operationBlock.block,LBlockInformation.operationsCount]); + if Assigned(AThread) and (AThread.Terminated) then Break; + + if ((AToBlock>=0) and (AToBlock= LBlockInformation.operationBlock.block) then begin + AddInfo(True,Format('Previous block %d >= current block %d (DUPLICATE OR INVALID ORDER!)',[LPreviousBlockInformation.operationBlock.block,LBlockInformation.operationBlock.block])); + end else if LPreviousBlockInformation.operationBlock.block+1 <> LBlockInformation.operationBlock.block then begin + AddInfo(False,Format('Previous block %d+1 Not current block %d',[LPreviousBlockInformation.operationBlock.block,LBlockInformation.operationBlock.block])); + end; + + if LBlocksInformationMax < LBlockInformation.operationBlock.block then LBlocksInformationMax := LBlockInformation.operationBlock.block; + // + // Check operations count + if (OrphanCompare(AOrphan,Self.Orphan)=0) then begin + CheckBlockConsistency(ARaiseOnError,AMessages,LBlockInformation,LTempOperationsCounter,LTempAccountsCounter,AThread); + inc(AOperationsFound,LTempOperationsCounter); + inc(AAffectedAccountsFound,LTempAccountsCounter); + end; + // + inc(ABlocksFound); + LPreviousBlockInformation.CopyFrom(LBlockInformation); + if (TPlatform.GetElapsedMilliseconds(LTC)>6000) then begin + TLog.NewLog(ltdebug,ClassName,Format('Consistency checking %d/%d elapsed %s seconds',[LBlockInformation.operationBlock.block,AToBlock,FormatFloat('0.00',TPlatform.GetElapsedMilliseconds(LStartTC)/1000)])); + LTC := TPlatform.GetTickCount; + end; + end; + end; + if (AToBlock<0) and (GetLastBlockNumberByOrphan(AOrphan)>0) and (GetLastBlockNumberByOrphan(AOrphan)<>LBlocksInformationMax) then begin + AddInfo(True,Format('Last block found %d not what expected %d',[LBlocksInformationMax,GetLastBlockNumberByOrphan(AOrphan)])); + end; + + if (OrphanCompare(AOrphan,Self.Orphan)=0) then begin + if (FOperationsRawData_By_RightOpHash.Count<>AOperationsFound) then begin + AddInfo(False,Format('Stored %d operations but only %d on processed blocks',[FOperationsRawData_By_RightOpHash.Count,AOperationsFound])); + end; + if FAffectedAccounts_By_Account_Block_OpBlock.Count<>AAffectedAccountsFound then begin + AddInfo(False,Format('Stored %d affected accounts but only %d on processed blocks',[FAffectedAccounts_By_Account_Block_OpBlock.Count,AAffectedAccountsFound])); + end; + end; + LOrphanInformation.Clear; + LOrphanInformation.orphan := AOrphan; + if FOrphansInformation_By_Orphan.FindData(LOrphanInformation,LPos,LOrphanInformationFound) then begin + if LOrphanInformationFound.regsCounter<>ABlocksFound then begin + AddInfo((AToBlock<0),Format('Orphan information counter expected %d found %d for orphan "%s"',[LOrphanInformationFound.regsCounter,ABlocksFound,AOrphan])); + end; + end else begin + AddInfo(True,Format('Not found information for Orphan "%s"',[AOrphan])); + end; + + AddInfo(False,Format('Analyzed from block %d to %d on orphan "%s" (expected %d/%d pending %d) Operations %d Accounts %d',[ + LBlocksInformationMin,LBlocksInformationMax, + AOrphan, + ABlocksFound, (LBlocksInformationMax - LBlocksInformationMin + 1), (LBlocksInformationMax - LBlocksInformationMin + 1)- ABlocksFound, + + AOperationsFound,AAffectedAccountsFound])); + + Finally + FCheckingConsistency := False; + FCheckingConsistencyProgress := ''; + End; +end; + +constructor TAbstractMemBlockchainStorage.Create(AOwner: TComponent); +begin + inherited; + FInBlockNotFound := False; + FInBlockSaving := 0; + FLogSaveActivity := True; + FSaveStorageStats.Clear; + FPSaveStorageStats := @FSaveStorageStats; + FPSaveStorageStats^.clear; + FCheckingConsistency := False; + FCheckingConsistencyProgress := ''; + FCheckingConsistencyStats.Clear; + FUseMultithread := True; + FFileMem := Nil; + FOrphansInformation_By_Orphan := Nil; + FBlocksInformation_By_OrphanBlock := Nil; + FOperationsRawData_By_RightOpHash := Nil; + FOperationsRawData_By_Block_OpBlock_Index := Nil; + FAffectedAccounts_By_Account_Block_OpBlock := Nil; + FAutoFlushCache := True; + FStorageLock := TCriticalSection.Create; + FPendingToSave := Nil; +end; + +function TAbstractMemBlockchainStorage.DeleteBlockChainBlockExt(ABlock : Integer; const AOrphan : String) : Boolean; +var LBlock : TBlockInformation; + LOperationRawDataSearch,LOperationRawDataFound : TOperationRawData; + LPos : TAbstractMemPosition; + LOperation : TPCOperation; + LAffectedAccountSearch, LAffectedAccountFound, LAffectedAccount : TAffectedAccount; + LAffectedAccounts : TOrderedList; + i : Integer; +begin + Result := False; + LBlock.Clear; + LBlock.orphan := AOrphan; + LBlock.operationBlock.block := ABlock; + if Not (FBlocksInformation_By_OrphanBlock.DeleteData(LBlock)) then Exit; + + FOrphansInformation_By_Orphan.Update(AOrphan,-1); + + Result := True; + + if OrphanCompare(AOrphan,Orphan)<>0 then Exit; + + // Try to delete all operations and affected accounts: + LOperationRawDataSearch.Clear; + LOperationRawDataSearch.block := LBlock.operationBlock.block; + LOperationRawDataSearch.opblock := MAXINT; // Will search BACKWARDS + FOperationsRawData_By_Block_OpBlock_Index.FindData(LOperationRawDataSearch,LOperationRawDataFound); + while (LOperationRawDataSearch.opblock>=0) and (LOperationRawDataFound.block = LOperationRawDataSearch.block) do begin + // Delete affected accounts + + if LOperationRawDataFound.CreateTPCOperation(FFileMem,LOperation) then + try + LAffectedAccounts := TOrderedList.Create(False,TComparison_Cardinal); + Try + LOperation.AffectedAccounts(LAffectedAccounts); + for i := 0 to LAffectedAccounts.Count-1 do begin + LAffectedAccount.Clear; + LAffectedAccount.account := LAffectedAccounts.Items[i]; + LAffectedAccount.block := ABlock; + LAffectedAccount.opblock := LOperationRawDataFound.opblock; + // + if Not FAffectedAccounts_By_Account_Block_OpBlock.DeleteData(LAffectedAccount) then begin + TLog.NewLog(lterror,ClassName,Format('ERR 20211117-01 Affected account %d %d %d not found',[LAffectedAccount.account,LAffectedAccount.block,LAffectedAccount.opblock+1])); + end; + + end; + Finally + LAffectedAccounts.Free; + end; + Finally + LOperation.Free; + end; + if not FOperationsRawData_By_RightOpHash.DeleteData(LOperationRawDataFound) then begin + // Found + raise EAbstractMemBlockchainStorage.Create('ERR 20211117-02'); + end; + // Go backward + LOperationRawDataSearch.opblock := LOperationRawDataFound.opblock-1; + FOperationsRawData_By_Block_OpBlock_Index.FindData(LOperationRawDataSearch,LOperationRawDataFound); + end; +end; + +destructor TAbstractMemBlockchainStorage.Destroy; +begin + UseMultithread := False; + + FreeAndNil(FPendingToSave); + + FreeAndNil(FFileMem); + + FreeAndNil(FOrphansInformation_By_Orphan); + FreeAndNil(FBlocksInformation_By_OrphanBlock); + FreeAndNil(FOperationsRawData_By_RightOpHash); + FreeAndNil(FOperationsRawData_By_Block_OpBlock_Index); + FreeAndNil(FAffectedAccounts_By_Account_Block_OpBlock); + + FreeAndNil(FStorageLock); + + inherited; +end; + +function TAbstractMemBlockchainStorage.DoBlockExists(Block: Cardinal): Boolean; +var LFoundBlock : TBlockInformation; +begin + Result := DoBlockExistsByOrphan(Block,Orphan,LFoundBlock); + if Not Result then begin + BlockNotFound(Block,Result); + end; +end; + +function TAbstractMemBlockchainStorage.DoBlockExistsByOrphan(ABlock: Integer; + const AOrphan: String; var LBlockInformation: TBlockInformation): Boolean; +var LSearch : TBlockInformation; + LDataPos : TAbstractMemPosition; +begin + LSearch.Clear; + LSearch.orphan := AOrphan; + LSearch.operationBlock.block := ABlock; + Result := FBlocksInformation_By_OrphanBlock.FindData(LSearch,LDataPos,LBlockInformation); +end; + +procedure TAbstractMemBlockchainStorage.DoBlockNotFound(ABlock: Integer; var AFound : Boolean); +begin + // Nothing to do here + AFound := False; +end; + +procedure TAbstractMemBlockchainStorage.DoDeleteBlockChainBlocks(StartingDeleteBlock: Cardinal); +begin + FStorageLock.Acquire; + try + while DeleteBlockChainBlockExt(StartingDeleteBlock,Orphan) do inc(StartingDeleteBlock); + FinalizedUpdating; + finally + FStorageLock.Release; + end; +end; + +procedure TAbstractMemBlockchainStorage.DoEraseStorage; +begin + FStorageLock.Acquire; + Try + FFileMem.ClearContent(FFileMem.Is64Bits,FFileMem.MemUnitsSize); + FreeAndNil(FFileMem); + DoInitialize; + FinalizedUpdating; + Finally + FStorageLock.Release; + End; +end; + +function TAbstractMemBlockchainStorage.DoFindOperation(const AOpHash: TBytes; var AOperationResume: TOperationResume): TSearchOpHashResult; +var LSearch, LFound : TOperationRawData; + LPos : TAbstractMemPosition; + LOperation : TPCOperation; + LMD160Hash : TBytes; + LBlock, LAccount, LN_Operation : Cardinal; +begin + Result := OpHash_invalid_params; + if not (TPCOperation.DecodeOperationHash(AOpHash,LBlock,LAccount,LN_Operation,LMD160Hash)) then Exit; + + if Not BlockExists(LBlock) then Exit; + + LSearch.Clear; + LSearch.rightOpHash := Copy(AOpHash,12,20); + if (FOperationsRawData_By_RightOpHash.FindData(LSearch,LPos,LFound)) then begin + if LFound.CreateTPCOperation(FFileMem,LOperation) then + Try + if not TPCOperation.OperationToOperationResume(LFound.block,LOperation,True,LAccount,AOperationResume) then Exit; + AOperationResume.NOpInsideBlock := LFound.opblock; + AOperationResume.Balance := -1; + Result := OpHash_found; + Finally + LOperation.Free; + End; + end else Result := OpHash_block_not_found; +end; + + +function TAbstractMemBlockchainStorage.DoGetAccountOperations(AAccount, + AMaxDepth, AStartOperation, AMaxOperations, ASearchBackwardsStartingAtBlock: Integer; + const AOperationsResumeList: TOperationsResumeList): Boolean; +var LSearch,LFound : TAffectedAccount; + LOperation : TPCOperation; + LOPR : TOperationResume; + LPreviousBlock : Integer; + LOperationsHashTree : TOperationsHashTree; + LLastBalance : Int64; + LAcc : TAccount; + LHasFound : Boolean; +begin + if AMaxOperations=0 then Exit(False); + if AStartOperation<0 then Exit(False); + Result := True; + LSearch.Clear; + LSearch.account := AAccount; + LAcc := Bank.SafeBox.Account(AAccount); + + if Not BlockExists(LAcc.GetLastUpdatedBlock) then Exit(False); + + if ASearchBackwardsStartingAtBlock>0 then begin + LSearch.block := ASearchBackwardsStartingAtBlock; + end else begin + LSearch.block := MAXINT; + end; + LSearch.opblock := MAXINT; + LFound.Clear; + if Not FAffectedAccounts_By_Account_Block_OpBlock.FindData(LSearch,LFound) then begin + if (LFound.account <> AAccount) then Exit(False); + end; + if (LFound.block = LAcc.GetLastUpdatedBlock) then begin + LLastBalance := LAcc.balance; + end else LLastBalance := -1; + LPreviousBlock := LFound.block; + repeat + // Process back + if (LFound.account<>AAccount) then Break; + if (LFound.block<>LPreviousBlock) then begin + Dec(AMaxDepth); + LPreviousBlock := LFound.block; + if (AMAxDepth=0) then Break; + if Not BlockExists(LFound.block) then Break; + end; + if (AStartOperation>0) then Dec(AStartOperation) + else begin + LOperationsHashTree := TOperationsHashTree.Create; + Try + if DoGetOperation(LFound.block,LFound.opblock,LOperationsHashTree) then begin + if LOperationsHashTree.OperationsCount=1 then begin + LOperation := LOperationsHashTree.GetOperation(0); + if TPCOperation.OperationToOperationResume(LFound.block,LOperation,True,AAccount,LOPR) then begin + + LOPR.NOpInsideBlock := LFound.opblock; + LOPR.time := Bank.SafeBox.GetBlockInfo(LFound.block).timestamp; + LOPR.Block := LFound.block; + If LLastBalance>=0 then begin + LOPR.Balance := LLastBalance; + LLastBalance := LLastBalance - ( LOPR.Amount + LOPR.Fee ); + end else LOPR.Balance := 0; // Undetermined + + AOperationsResumeList.Add(LOPR); + end; + end; + end; + Finally + LOperationsHashTree.Free; + End; + Dec(AMaxOperations); + end; + LSearch.CopyFrom(LFound); + LHasFound := FAffectedAccounts_By_Account_Block_OpBlock.FindDataPrecessor(LSearch,LFound); + until (AMaxDepth=0) or (AMaxOperations=0) or (Not LHasFound); + +end; + +function TAbstractMemBlockchainStorage.DoGetBlockInformation(const ABlock : Integer; + var AOperationBlock: TOperationBlock; var AOperationsCount: Integer; + var AVolume: Int64): Boolean; +var LBlock,LFoundBlock : TBlockInformation; + LDataPos : TAbstractMemPosition; +begin + if Not BlockExists(ABlock) then Exit(False); + + LBlock.Clear; + LBlock.orphan := Orphan; + LBlock.operationBlock.block := ABlock; + if FBlocksInformation_By_OrphanBlock.FindData(LBlock,LDataPos,LFoundBlock) then begin + AOperationBlock := LFoundBlock.operationBlock; + AOperationsCount := LFoundBlock.operationsCount; + AVolume := LFoundBlock.volume; + Result := True; + end else Result := False; +end; + +function TAbstractMemBlockchainStorage.DoGetBlockOperations(ABlock, + AOpBlockStartIndex, AMaxOperations: Integer; + var AOperationBlock: TOperationBlock; var AOperationsCount: Integer; + var AVolume: Int64; + const AOperationsResumeList: TOperationsResumeList): Boolean; +var LFound,LSearch : TOperationRawData; + LOperation : TPCOperation; + LOPR : TOperationResume; +begin + // + if AMaxOperations=0 then Exit(False); + + if Not BlockExists(ABlock) then Exit(False); + + Result := True; + LSearch.Clear; + LSearch.block := ABlock; + LSearch.opblock := AOpBlockStartIndex; + LFound.Clear; + if not FOperationsRawData_By_Block_OpBlock_Index.FindData(LSearch,LFound) then begin + if LFound.block<>ABlock then Exit(False); + LSearch := LFound; + if Not FOperationsRawData_By_Block_OpBlock_Index.FindDataSuccessor(LSearch,LFound) then Exit(False); + if LFound.block<>ABlock then Exit(False); + end; + repeat + if LFound.block<>ABlock then Exit(True); + + if LFound.CreateTPCOperation(FFileMem,LOperation) then + Try + if not TPCOperation.OperationToOperationResume(ABlock,LOperation,True,LOperation.SignerAccount,LOPR) then break; + LOPR.NOpInsideBlock := LFound.opblock; + LOPR.Balance := -1; + AOperationsResumeList.Add(LOPR); + Finally + LOperation.Free; + End; + Dec(AMaxOperations); + LSearch := LFound; + until (AMaxOperations=0) or (Not FOperationsRawData_By_Block_OpBlock_Index.FindDataSuccessor(LSearch,LFound)); +end; + +function TAbstractMemBlockchainStorage.DoGetOperation(const ABlock, AOpBlock: Integer; const AOperations: TOperationsHashTree): Boolean; +var LSearch,LFound : TOperationRawData; + LOp : TPCOperation; +begin + if Not BlockExists(ABlock) then Exit(False); + + LSearch.Clear; + LSearch.SetToFindByBlockOpblock(ABlock,AOpBlock); + LFound.Clear; + if Not FOperationsRawData_By_Block_OpBlock_Index.FindData(LSearch,LFound) then Exit(False); + Result := True; + if LFound.CreateTPCOperation(FFileMem,LOp) then + try + AOperations.AddOperationToHashTree( LOp ); + finally + LOp.Free; + end; +end; + +function TAbstractMemBlockchainStorage.DoInitialize: Boolean; +const CT_HEADER = 'AMBlockchain'; // 12 chars + CT_VERSION : Integer = $00000003; // 4 bytes +var LfdZone : TAMZone; + LfdBytes : TBytes; + LExpectedHeader, + LHeader : TBytes; + LZoneOrphansInformation, + LZoneBlocksInformation_By_Block, + LZoneBlocksRawData_By_BlockOrphan, + LZoneOperationsRawData_By_RightOpHash, + LZoneOperationsRawData_By_Block_OpBlock, + LZoneAffectedAccounts_By_Account_Block_OpBlock : TAMZone; + LFileName : String; + i : Integer; + LCacheMem : TCacheMem; +begin + Result := False; + if Not Assigned(FFileMem) then begin + if (FStorageFilename='') then begin + FStorageFilename := Bank.GetStorageFolder(Bank.Orphan)+PathDelim+'BlockChainStream.am_blocks'; + end; + + FFileMem := TFileMem.Create(FStorageFilename,ReadOnly); + FFileMem.IncreaseFileBytes := 10 * 1024*1024; // 10Mb each increase + + LCacheMem := FFileMem.LockCache; + try + LCacheMem.GridCache := False; + LCacheMem.DefaultCacheDataBlocksSize := 1024; + {$IFDEF IS32BITS} + LCacheMem.MaxCacheSize := 5 * Int64(100 * 1024 * 1024); // 100Mb * 3 = 500Mb + LCacheMem.MaxCacheDataBlocks := 150000; + {$ELSE} + LCacheMem.MaxCacheSize := 10 * Int64(100 * 1024 * 1024); // 100Mb * 10 = 1Gb + LCacheMem.MaxCacheDataBlocks := 750000; + {$ENDIF}; + LCacheMem.OnFlushedCache := OnCacheMemFlushedCache; + LCacheMem.OnLog := OnCacheMemLog; + finally + FFileMem.UnlockCache; + end; + + end; + if Not FFileMem.HeaderInitialized then begin + if ReadOnly then Exit(False); + if not FFileMem.Initialize(True,4) then Exit(False); + end; + FreeAndNil(FPendingToSave); + FreeAndNil(FOrphansInformation_By_Orphan); + FreeAndNil(FBlocksInformation_By_OrphanBlock); + FreeAndNil(FOperationsRawData_By_RightOpHash); + FreeAndNil(FOperationsRawData_By_Block_OpBlock_Index); + FreeAndNil(FAffectedAccounts_By_Account_Block_OpBlock); + + LZoneOrphansInformation.Clear; + LZoneBlocksInformation_By_Block.Clear; + LZoneBlocksRawData_By_BlockOrphan.Clear; + LZoneOperationsRawData_By_RightOpHash.Clear; + LZoneOperationsRawData_By_Block_OpBlock.Clear; + LZoneAffectedAccounts_By_Account_Block_OpBlock.Clear; + + LExpectedHeader.FromString(CT_HEADER); + Assert(Length(LExpectedHeader)=12,'CT_HEADER Header is not 12 bytes'); + SetLength(LExpectedHeader,16); + i := CT_VERSION; + Move(i,LExpectedHeader[12],4); + + SetLength(LHeader,Length(LExpectedHeader)); // 16 + + if (FFileMem.ReadFirstData(LfdZone,LfdBytes)) + and (LfdZone.size>=100) then begin + Move(LfdBytes[0],LHeader[0],16); + // + Move(LfdBytes[16],LZoneBlocksInformation_By_Block.position,8); + Move(LfdBytes[24],LZoneBlocksRawData_By_BlockOrphan,8); + Move(LfdBytes[32],LZoneOperationsRawData_By_RightOpHash,8); + Move(LfdBytes[40],LZoneOperationsRawData_By_Block_OpBlock,8); + Move(LfdBytes[48],LZoneAffectedAccounts_By_Account_Block_OpBlock,8); + Move(LfdBytes[56],LZoneOrphansInformation,8); + end; + + if (Not CompareMem(@LExpectedHeader[0],@LHeader[0],Length(LExpectedHeader))) or + (Not FFileMem.Is64Bits) or + (LZoneOrphansInformation.position=0) or + (LZoneBlocksInformation_By_Block.position=0) or + (LZoneBlocksRawData_By_BlockOrphan.position=0) or + (LZoneOperationsRawData_By_RightOpHash.position=0) or + (LZoneOperationsRawData_By_Block_OpBlock.position=0) or + (LZoneAffectedAccounts_By_Account_Block_OpBlock.position=0) then begin + FFileMem.ClearContent(True,4); + + // + SetLength(LfdBytes,100); + FillChar(LfdBytes[0],Length(LfdBytes),0); + LfdZone := FFileMem.New(Length(LfdBytes)); + + // Create + LZoneOrphansInformation := FFileMem.New(TAbstractMemBTree.MinAbstractMemInitialPositionSize(FFileMem)); + LZoneBlocksInformation_By_Block := FFileMem.New(TAbstractMemBTree.MinAbstractMemInitialPositionSize(FFileMem)); + LZoneBlocksRawData_By_BlockOrphan := FFileMem.New(TAbstractMemBTree.MinAbstractMemInitialPositionSize(FFileMem)); + LZoneOperationsRawData_By_RightOpHash := FFileMem.New(TAbstractMemBTree.MinAbstractMemInitialPositionSize(FFileMem)); + LZoneOperationsRawData_By_Block_OpBlock := FFileMem.New(TAbstractMemBTree.MinAbstractMemInitialPositionSize(FFileMem)); + LZoneAffectedAccounts_By_Account_Block_OpBlock := FFileMem.New(TAbstractMemBTree.MinAbstractMemInitialPositionSize(FFileMem)); + // + Move(LExpectedHeader[0],LfdBytes[0],16); + // + Move(LZoneBlocksInformation_By_Block.position ,LfdBytes[16],8); + Move(LZoneBlocksRawData_By_BlockOrphan.position ,LfdBytes[24],8); + Move(LZoneOperationsRawData_By_RightOpHash.position ,LfdBytes[32],8); + Move(LZoneOperationsRawData_By_Block_OpBlock.position ,LfdBytes[40],8); + Move(LZoneAffectedAccounts_By_Account_Block_OpBlock.position,LfdBytes[48],8); + Move(LZoneOrphansInformation.position ,LfdBytes[56],8); + + FFileMem.Write(LfdZone.position,LfdBytes[0],Length(LfdBytes)); + end; + // + // + FOrphansInformation_By_Orphan := TAMBTreeOrphanInformationByOrphan.Create( + FFileMem,LZoneOrphansInformation, + False,29,Comparer_TOrphanInformation_By_Orphan); + FBlocksInformation_By_OrphanBlock := TAMBTreeOperationBlockInformationByOrphanBlock.Create( + FFileMem,LZoneBlocksInformation_By_Block, + False,509,Comparer_TBlockInformation_By_OrphanBlock); + FOperationsRawData_By_RightOpHash := TAMBTreeTOperationRawDataByRightOpHash.Create( + FFileMem,LZoneOperationsRawData_By_RightOpHash, + False,509,Comparer_TOperationRawData_By_RightOpHash); + FOperationsRawData_By_Block_OpBlock_Index := TAMBTreeTOperationRawDataByBlockOpBlock_Index.Create( + FOperationsRawData_By_RightOpHash,LZoneOperationsRawData_By_Block_OpBlock, + TRUE,509,Comparer_TOperationRawData_By_Block_OpBlock); + FAffectedAccounts_By_Account_Block_OpBlock := TAMBTreeTAffectedAccountByAccountBlockOpBlock.Create( + FFileMem,LZoneAffectedAccounts_By_Account_Block_OpBlock, + False,509,Comparer_TAffectedAccount_By_Account_Block_OpBlock); + + if FUseMultithread then begin + FPendingToSave := TPendingToSave.Create(Self,FOperationsRawData_By_RightOpHash,FAffectedAccounts_By_Account_Block_OpBlock); + end; + + Result := True; +end; + +function TAbstractMemBlockchainStorage.DoLoadBlockChain(Operations: TPCOperationsComp; Block: Cardinal): Boolean; +begin + Result := DoLoadBlockChainExt(Operations,Block,Orphan); + if Not Result then BlockNotFound(Block,Result); +end; + +function TAbstractMemBlockchainStorage.DoLoadBlockChainExt( + Operations: TPCOperationsComp; Block: Cardinal; + const AOrphan: String): Boolean; +var LBlock,LFoundBlock : TBlockInformation; + LDataPos : TAbstractMemPosition; +begin + LBlock.Clear; + LBlock.orphan := AOrphan; + LBlock.operationBlock.block := Block; + if FBlocksInformation_By_OrphanBlock.FindData(LBlock,LDataPos,LFoundBlock) then begin + LFoundBlock.ReadTPCOperationsComp(FBlocksInformation_By_OrphanBlock.AbstractMem,Operations); + Result := True; + end else Result := False; +end; + +function TAbstractMemBlockchainStorage.DoMoveBlockChain(StartBlock : Cardinal; Const DestOrphan : TOrphan) : Boolean; +var LPCOperationsComp : TPCOperationsComp; +begin + Assert(Orphan<>DestOrphan,'Orphan and Destorphan are equals'); + FStorageLock.Acquire; + try + LPCOperationsComp := TPCOperationsComp.Create(Nil); + try + while LoadBlockChainBlock(LPCOperationsComp,StartBlock) do begin + if Not DeleteBlockChainBlockExt(StartBlock,Orphan) then raise EAbstractMemBlockchainStorage.Create('ERR 20211117-03'); + if Not DoSaveBlockChainExt(LPCOperationsComp,DestOrphan,FSaveStorageStats) then raise EAbstractMemBlockchainStorage.Create('ERR 20211117-04'); + inc(StartBlock); + end; + finally + LPCOperationsComp.Free; + end; + Result := True; + FinalizedUpdating; + finally + FStorageLock.Release; + end; +end; + +function TAbstractMemBlockchainStorage.DoSaveBlockChain(Operations: TPCOperationsComp): Boolean; +begin + FStorageLock.Acquire; + try + Result := DoSaveBlockChainExt(Operations,Orphan,FSaveStorageStats); + FinalizedUpdating; + finally + FStorageLock.Release; + end; +end; + +function TAbstractMemBlockchainStorage.DoSaveBlockChainExt(Operations: TPCOperationsComp; const AOrphan: String; var AStats: TBlockchainStorageStats): Boolean; +var LBlockInformation : TBlockInformation; + LOperationRawData : TOperationRawData; + LAffectedAccount : TAffectedAccount; + LMemStream : TMemoryStream; + iOperation, iOpAccount : Integer; + LOp : TPCOperation; + Laccounts : TOrderedList; + LRawData : TBytes; + LAMZone : TAMZone; + + LPendingData : TPendingData; + LTC : TTickCount; +begin + Result := True; + LBlockInformation.Clear; + LOperationRawData.Clear; + LAffectedAccount.Clear; + + // Add + LBlockInformation.Clear; + LBlockInformation.operationBlock := Operations.OperationBlock; + LBlockInformation.orphan := AOrphan; + LBlockInformation.operationsCount := Operations.Count; + LBlockInformation.volume := Operations.OperationsHashTree.TotalAmount; + + // DELETE PREVIOUS: + DeleteBlockChainBlockExt(Operations.OperationBlock.block,AOrphan); + + LMemStream := TMemoryStream.Create; + Try + Operations.SaveBlockToStorage(LMemStream); + SetLength(LRawData,LMemStream.Size); + Move(LMemStream.Memory^,LRawData[0],LMemStream.Size); + Finally + LMemStream.Free; + End; + LAMZone := FFileMem.New(Length(LRawData)); + FFileMem.Write(LAMZone.position,LRawData[0],Length(LRawData)); + + LBlockInformation.rawDataPosition := LAMZone.position; + + FBlocksInformation_By_OrphanBlock.AddData(LBlockInformation); + Inc(AStats.blockInformationCount); + + // Save increment: + FOrphansInformation_By_Orphan.Update(AOrphan,+1); + + if OrphanCompare(AOrphan,Orphan)<>0 then Exit; + LTC := TPlatform.GetTickCount; + + for iOperation := 0 to Operations.count-1 do begin + LOp := Operations.Operation[iOperation]; + + LOperationRawData.Clear; + LOperationRawData.rightOpHash := Copy(LOp.RipeMD160,0,20); + LOperationRawData.account := LOp.SignerAccount; + LOperationRawData.n_operation := LOp.N_Operation; + + LOperationRawData.block := Operations.OperationBlock.block; + LOperationRawData.opblock := iOperation; + LOperationRawData.opType := LOp.OpType; + LOperationRawData.opSavedProtocol := LOp.ProtocolVersion; + + LMemStream := TMemoryStream.Create; + Try + LOp.SaveToStorage(LMemStream); + LOperationRawData.rawData := TStreamOp.SaveStreamToRaw(LMemStream); + Finally + LMemStream.Free; + End; + LPendingData.Clear; + LPendingData.operation.CopyFrom(LOperationRawData); + if Not Assigned(FPendingToSave) then begin + // Add Operation + if not FOperationsRawData_By_RightOpHash.AddData(LOperationRawData) then + raise EAbstractMemBlockchainStorage.Create(Format('Cannot add operation %d/%d of block %d - %s',[iOperation+1,Operations.Count,Operations.OperationBlock.block, LOp.ToString])); + Inc(AStats.operationRawDataCount); + end; + if (FLogSaveActivity) and (TPlatform.GetElapsedMilliseconds(LTC)>10000) then begin + LTC := TPlatform.GetTickCount; + TLog.NewLog(ltdebug,ClassName,Format('Saving block %d operation %d/%d - %s',[Operations.OperationBlock.block,iOperation+1,Operations.Count,FSaveStorageStats.ToString])); + end; + + // Affected accounts: + Laccounts := TOrderedList.Create(False,TComparison_Cardinal); + try + LOp.AffectedAccounts(Laccounts); + SetLength(LPendingData.affectedAccounts,LAccounts.Count); + for iOpAccount:=0 to Laccounts.Count-1 do begin + // + LAffectedAccount.Clear; + LAffectedAccount.account := Laccounts.Items[iOpAccount]; + LAffectedAccount.n_operation := LOp.GetAccountN_Operation(Laccounts.Items[iOpAccount]); + LAffectedAccount.block := Operations.OperationBlock.block; + LAffectedAccount.opblock := iOperation; + + LPendingData.affectedAccounts[iOpAccount].CopyFrom( LAffectedAccount ); + if Not Assigned(FPendingToSave) then begin + // Add affected account + if not FAffectedAccounts_By_Account_Block_OpBlock.AddData(LAffectedAccount) then begin + raise EAbstractMemBlockchainStorage.Create(Format('Cannot add affected account %d/%d in operation %d/%d of block %d - %s', + [iOpAccount+1,LAccounts.Count,iOperation+1,Operations.Count,Operations.OperationBlock.block, + LOp.ToString])); + end; + Inc(AStats.affectedAccountCount); + end; + end; + finally + Laccounts.Free; + end; + if Assigned(FPendingToSave) then begin + FPendingToSave.AddPendingData(LPendingData); + end; + end; + // +end; + +procedure TAbstractMemBlockchainStorage.FillInfo(AStrings: TStrings); +var LOrphans, LSearch : TOrphanInformation; +begin + AStrings.Add(Format('Orphan "%s" from %d to %d with Orphans: %d',[ + Orphan,FirstBlock,LastBlock, + FOrphansInformation_By_Orphan.Count])); + if FOrphansInformation_By_Orphan.FindDataLowest(LOrphans) then begin + repeat + AStrings.Add(Format('- Orphan "%s" regs: %d',[LOrphans.orphan,LOrphans.regsCounter])); + LSearch.CopyFrom(LOrphans) + until (Not (FOrphansInformation_By_Orphan.FindDataSuccessor(LSearch,LOrphans))); + end else AStrings.Add('No orphans'); + +end; + +procedure TAbstractMemBlockchainStorage.FinalizedUpdating; +var LTC : TTickCount; +begin + if FAutoFlushCache then begin + LTC := TPlatform.GetTickCount; + FileMem.FlushCache; + end; +end; + +function TAbstractMemBlockchainStorage.GetFirstBlockNumber: Int64; +begin + Result := GetFirstBlockNumberByOrphan(Orphan); +end; + +function TAbstractMemBlockchainStorage.GetFirstBlockNumberByOrphan( + const AOrphan: String): Int64; +var LBlockInformation,LBlockInformationFound : TBlockInformation; + LPos : TAbstractMemPosition; +begin + Result := -1; + LBlockInformation.Clear; + LBlockInformation.orphan := AOrphan; + LBlockInformation.operationBlock.block := 0; + if Not FBlocksInformation_By_OrphanBlock.FindData(LBlockInformation,LPos,LBlockInformationFound) then begin + if FBlocksInformation_By_OrphanBlock.Count<=0 then Exit(-1); + if LBlockInformationFound.IsOrphan(AOrphan) then Exit(LBlockInformationFound.operationBlock.block); + LBlockInformation := LBlockInformationFound; + if FBlocksInformation_By_OrphanBlock.FindDataSuccessor(LBlockInformation,LBlockInformationFound) then begin + if LBlockInformationFound.IsOrphan(AOrphan) then Exit(LBlockInformationFound.operationBlock.block); + end; + end else Result := LBlockInformationFound.operationBlock.block; +end; + +function TAbstractMemBlockchainStorage.GetLastBlockNumber: Int64; +begin + Result := GetLastBlockNumberByOrphan(Orphan); +end; + +function TAbstractMemBlockchainStorage.GetLastBlockNumberByOrphan(const AOrphan: String): Int64; +var LBlockInformation,LBlockInformationFound : TBlockInformation; + LPos : TAbstractMemPosition; +begin + Result := -1; + LBlockInformation.Clear; + LBlockInformation.orphan := AOrphan; + LBlockInformation.operationBlock.block := MAXINT; + if Not FBlocksInformation_By_OrphanBlock.FindData(LBlockInformation,LPos,LBlockInformationFound) then begin + if FBlocksInformation_By_OrphanBlock.Count<=0 then Exit(-1); + if LBlockInformationFound.IsOrphan(AOrphan) then Exit(LBlockInformationFound.operationBlock.block); + end else Result := LBlockInformationFound.operationBlock.block; +end; + +procedure TAbstractMemBlockchainStorage.OnCacheMemFlushedCache( + const ASender: TCacheMem; const AProcessDesc: String; AElapsedMilis: Int64); +begin + TLog.NewLog(ltdebug,ASender.ClassName,Self.ClassName+' '+AProcessDesc) +end; + +procedure TAbstractMemBlockchainStorage.OnCacheMemLog(ASender: TObject; + const ALog: String); +begin + TLog.NewLog(ltdebug,ASender.ClassName,Self.ClassName+' '+ALog); +end; + +class function TAbstractMemBlockchainStorage.OrphanCompare(const ALeft, ARight: String): Integer; +begin + Result := BinStrComp(ALeft,ARight); +end; + +function TAbstractMemBlockchainStorage.PendingToSave: Integer; +begin + if Assigned(FPendingToSave) then begin + Result := FPendingToSave.PendingsCount; + end else Result := 0; +end; + +procedure TAbstractMemBlockchainStorage.SetReadOnly(const Value: Boolean); +begin + if ReadOnly=Value then Exit; + inherited; + // + if Assigned(FFileMem) then begin + FreeAndNil(FPendingToSave); + FreeAndNil(FFileMem); + Initialize; + end; +end; + +procedure TAbstractMemBlockchainStorage.SetUseMultithread(const Value: Boolean); +var + i : Integer; +begin + if FUseMultithread=Value then Exit; + FStorageLock.Acquire; + Try + if Assigned(FPendingToSave) then begin + i := FPendingToSave.PendingsCount; + if i>0 then begin + TLog.NewLog(ltinfo,ClassName,Format('Finalizing use of multitrheads with %d pending jobs',[i])); + end; + while (FPendingToSave.PendingsCount>0) do begin + sleep(1); + end; + if i>0 then begin + TLog.NewLog(ltinfo,ClassName,Format('Finalized use of multitrheads with %d pending jobs',[i])); + end; + end; + FreeAndNil(FPendingToSave); + FUseMultithread := Value; + if FUseMultithread then begin + FPendingToSave := TPendingToSave.Create(Self,FOperationsRawData_By_RightOpHash,FAffectedAccounts_By_Account_Block_OpBlock); + end; + Finally + FStorageLock.Release; + End; +end; + +{ TAbstractMemBlockchainStorage.TAMBTreeOperationBlockInformationByBlock } + +procedure TAbstractMemBlockchainStorage.TAMBTreeOperationBlockInformationByOrphanBlock.DeletedData( + const AData: TBlockInformation); +begin + inherited; + if AData.rawDataPosition>0 then begin + AbstractMem.Dispose(AData.rawDataPosition); + end; +end; + +function TAbstractMemBlockchainStorage.TAMBTreeOperationBlockInformationByOrphanBlock.GetBlockInformationByBlock( + ABlock: Integer): TBlockInformation; +var LPos : TAbstractMemPosition; + LBlockSearch : TBlockInformation; +begin + LBlockSearch.Clear; + LBlockSearch.operationBlock.block := ABlock; + if Not FindData(LBlockSearch,LPos,Result) then Result.Clear; +end; + +function TAbstractMemBlockchainStorage.TAMBTreeOperationBlockInformationByOrphanBlock.LoadData( + const APosition: TAbstractMemPosition): TBlockInformation; +var LZone : TAMZone; + LBytes : TBytes; +begin + if APosition=0 then begin + Result.Clear; + Exit; + end; + if Not AbstractMem.GetUsedZoneInfo( APosition, False, LZone) then + raise EAbstractMemBTree.Create(Format('%s.LoadData Inconsistency error used zone info not found at pos %d',[Self.ClassName,APosition])); + SetLength(LBytes,LZone.size); + if AbstractMem.Read(LZone.position, LBytes[0], Length(LBytes) )<>Length(LBytes) then + raise EAbstractMemBTree.Create(Format('%s.LoadData Inconsistency error cannot read %d bytes at pos %d',[Self.ClassName,LZone.size,APosition])); + Result.Clear; + if not Result.FromSerialized(LBytes) then + raise EAbstractMemBTree.Create(Format('%s.LoadData Invalid FromSerialized call with %d bytes at pos %d',[Self.ClassName,LZone.size,APosition])); +end; + +function TAbstractMemBlockchainStorage.TAMBTreeOperationBlockInformationByOrphanBlock.SaveData( + const AData: TBlockInformation): TAMZone; +var LBytes : TBytes; +begin + LBytes := AData.ToSerialized; + Result := AbstractMem.New(Length(LBytes)); + AbstractMem.Write(Result.position,LBytes[0],Length(LBytes)); +end; + +{ TAbstractMemBlockchainStorage.TAMBTreeTOperationRawDataByRightOpHash } + +function TAbstractMemBlockchainStorage.TAMBTreeTOperationRawDataByRightOpHash.LoadData( + const APosition: TAbstractMemPosition): TOperationRawData; +var LZone : TAMZone; + LBytes : TBytes; +begin + if APosition=0 then begin + Result.Clear; + Exit; + end; + if Not AbstractMem.GetUsedZoneInfo( APosition, False, LZone) then + raise EAbstractMemBTree.Create(Format('%s.LoadData Inconsistency error used zone info not found at pos %d',[Self.ClassName,APosition])); + SetLength(LBytes,LZone.size); + if AbstractMem.Read(LZone.position, LBytes[0], Length(LBytes) )<>Length(LBytes) then + raise EAbstractMemBTree.Create(Format('%s.LoadData Inconsistency error cannot read %d bytes at pos %d',[Self.ClassName,LZone.size,APosition])); + Result.Clear; + if not Result.FromSerialized(LBytes) then + raise EAbstractMemBTree.Create(Format('%s.LoadData Invalid FromSerialized call with %d bytes at pos %d',[Self.ClassName,LZone.size,APosition])); +end; + +function TAbstractMemBlockchainStorage.TAMBTreeTOperationRawDataByRightOpHash.SaveData( + const AData: TOperationRawData): TAMZone; +var LBytes : TBytes; +begin + LBytes := AData.ToSerialized; + Result := AbstractMem.New(Length(LBytes)); + AbstractMem.Write(Result.position,LBytes[0],Length(LBytes)); +end; + +{ TAbstractMemBlockchainStorage.TAMBTreeTAffectedAccountByAccountBlockOpBlock } + +function TAbstractMemBlockchainStorage.TAMBTreeTAffectedAccountByAccountBlockOpBlock.LoadData( + const APosition: TAbstractMemPosition): TAffectedAccount; +var LZone : TAMZone; + LBytes : TBytes; +begin + if APosition=0 then begin + Result.Clear; + Exit; + end; + if Not AbstractMem.GetUsedZoneInfo( APosition, False, LZone) then + raise EAbstractMemBTree.Create(Format('%s.LoadData Inconsistency error used zone info not found at pos %d',[Self.ClassName,APosition])); + SetLength(LBytes,LZone.size); + if AbstractMem.Read(LZone.position, LBytes[0], Length(LBytes) )<>Length(LBytes) then + raise EAbstractMemBTree.Create(Format('%s.LoadData Inconsistency error cannot read %d bytes at pos %d',[Self.ClassName,LZone.size,APosition])); + Result.Clear; + if not Result.FromSerialized(LBytes) then + raise EAbstractMemBTree.Create(Format('%s.LoadData Invalid FromSerialized call with %d bytes at pos %d',[Self.ClassName,LZone.size,APosition])); +end; + +function TAbstractMemBlockchainStorage.TAMBTreeTAffectedAccountByAccountBlockOpBlock.SaveData( + const AData: TAffectedAccount): TAMZone; +var LBytes : TBytes; +begin + LBytes := AData.ToSerialized; + Result := AbstractMem.New(Length(LBytes)); + AbstractMem.Write(Result.position,LBytes[0],Length(LBytes)); +end; + +{ TAbstractMemBlockchainStorage.TBlockInformation } + +procedure TAbstractMemBlockchainStorage.TBlockInformation.Clear; +begin + Self.operationBlock := CT_OperationBlock_NUL; + Self.orphan := ''; + Self.operationsCount := 0; + Self.volume := 0; + Self.rawDataPosition := 0; +end; + +procedure TAbstractMemBlockchainStorage.TBlockInformation.CopyFrom(const ASource: TBlockInformation); +begin + Self.operationBlock := ASource.operationBlock.GetCopy; + Self.orphan := ASource.orphan; + Self.operationsCount := ASource.operationsCount; + Self.volume := ASource.volume; + Self.rawDataPosition := ASource.rawDataPosition; +end; + +function TAbstractMemBlockchainStorage.TBlockInformation.CreateTPCOperationsComp( + AAbstractMem : TAbstractMem; ABank: TPCBank): TPCOperationsComp; +begin + Result := TPCOperationsComp.Create(ABank); + try + ReadTPCOperationsComp(AAbstractMem,Result); + Except + On E:Exception do begin + Result.Free; + Raise; + end; + end; +end; + +function TAbstractMemBlockchainStorage.TBlockInformation.FromSerialized(ABytes: TBytes): Boolean; +var LStream : TStream; + Lsoob : Byte; + LBuild : Word; +begin + Clear; + LStream := TMemoryStream.Create; + Try + TStreamOp.LoadStreamFromRaw(LStream,ABytes); + LStream.Position := 0; + LStream.Read(LBuild,2); + if LBuild>CT_PROTOCOL_5 then Exit(False); + Result := TPCOperationsComp.LoadOperationBlockFromStream(LStream,Lsoob,Self.operationBlock); + TStreamOp.ReadString(LStream,Self.orphan); + LStream.Read(Self.operationsCount,4); + LStream.Read(Self.volume,8); + LStream.Read(Self.rawDataPosition,8); + Finally + LStream.Free; + End; + Result := True; +end; + +function TAbstractMemBlockchainStorage.TBlockInformation.GetRawData( + AAbstractMem: TAbstractMem; var ARawData: TBytes): Boolean; +var LZone : TAMZone; +begin + if Self.rawDataPosition<=0 then begin + Exit(False); + end; + if Not AAbstractMem.GetUsedZoneInfo( Self.rawDataPosition, False, LZone) then + raise EAbstractMemBlockchainStorage.Create(Format('TAbstractMemBlockchainStorage.TBlockInformation.GetRawData Inconsistency error used zone info not found at pos %d',[Self.rawDataPosition])); + SetLength(ARawData,LZone.size); + if AAbstractMem.Read(LZone.position, ARawData[0], Length(ARawData) )<>Length(ARawData) then + raise EAbstractMemBlockchainStorage.Create(Format('TAbstractMemBlockchainStorage.TBlockInformation.GetRawData Inconsistency error cannot read %d bytes at pos %d',[LZone.size,Self.rawDataPosition])); + Result := True; +end; + +function TAbstractMemBlockchainStorage.TBlockInformation.IsOrphan(const AOrphan: String): Boolean; +begin + Result := TAbstractMemBlockchainStorage.OrphanCompare(Self.orphan,AOrphan)=0; +end; + +procedure TAbstractMemBlockchainStorage.TBlockInformation.ReadTPCOperationsComp( + AAbstractMem: TAbstractMem; AOperationsComp: TPCOperationsComp); +var LStream : TStream; + LRaw : TBytes; + LErrors : String; +begin + LStream := TMemoryStream.Create; + Try + Self.GetRawData(AAbstractMem,LRaw); + LStream.Write(LRaw[0],Length(LRaw)); + LStream.Position := 0; + if Not AOperationsComp.LoadBlockFromStorage(LStream,Lerrors) then raise EAbstractMemBlockchainStorage.Create( + Format('Cannot read ReadTPCOperationsComp %d from storage: %s',[Self.operationBlock.block,LErrors])); + Finally + LStream.Free; + End; +end; + +procedure TAbstractMemBlockchainStorage.TBlockInformation.SetToFindByBlock(ABlock: Integer); +begin + Self.Clear; + Self.operationBlock.block := ABlock; +end; + +function TAbstractMemBlockchainStorage.TBlockInformation.ToSerialized: TBytes; +var LStream : TStream; + LBuild : Word; +begin + LStream := TMemoryStream.Create; + Try + LBuild := CT_BUILD_PROTOCOL; + LStream.Write(LBuild,2); + TPCOperationsComp.SaveOperationBlockToStream(Self.operationBlock,LStream); + TStreamOp.WriteString(LStream,Self.orphan); + LStream.Write(Self.operationsCount,4); + LStream.Write(Self.volume,8); + LStream.Write(Self.rawDataPosition,8); + Result := TStreamOp.SaveStreamToRaw(LStream); + Finally + LStream.Free; + End; +end; + +{ TAbstractMemBlockchainStorage.TOperationRawData } + +procedure TAbstractMemBlockchainStorage.TOperationRawData.Clear; +begin + Self.rightOpHash := Nil; + Self.account := 0; + Self.n_operation := 0; + Self.block := 0; + Self.opblock := 0; + Self.opType := 0; + Self.opSavedProtocol := 0; + Self.rawData := Nil; +end; + +procedure TAbstractMemBlockchainStorage.TOperationRawData.CopyFrom(const + ASource: TOperationRawData); +begin + Self.rightOpHash := Copy(ASource.rightOpHash); + Self.account := ASource.account; + Self.n_operation := ASource.n_operation; + Self.block := ASource.block; + Self.opblock := ASource.opblock; + Self.opType := ASource.opType; + Self.opSavedProtocol := ASource.opSavedProtocol; + Self.rawData := Copy(ASource.rawData); +end; + +function TAbstractMemBlockchainStorage.TOperationRawData.CreateTPCOperation( + AAbstractMem: TAbstractMem; out APCOperation: TPCOperation): Boolean; +var LOpClass: TPCOperationClass; + LStream : TStream; +begin + Result := false; + APCOperation := Nil; + LOpClass := TPCOperationsComp.GetOperationClassByOpType(Self.opType); + if Not Assigned(LOpClass) then Exit; + APCOperation := LOpClass.Create(Self.opSavedProtocol); + Try + LStream := TMemoryStream.Create; + Try + TStreamOp.LoadStreamFromRaw(LStream,Self.rawData); + LStream.Position := 0; + Result := APCOperation.LoadFromStorage(LStream,CT_BUILD_PROTOCOL,Nil); + Finally + LStream.Free; + End; + Finally + if not Result then FreeAndNil(APCOperation); + End; +end; + +function TAbstractMemBlockchainStorage.TOperationRawData.CreateTPCOperation(AAbstractMem: TAbstractMem): TPCOperation; +var LOpClass: TPCOperationClass; + LStream : TStream; +begin + + LOpClass := TPCOperationsComp.GetOperationClassByOpType(Self.opType); + if Not Assigned(LOpClass) then raise EAbstractMemBlockchainStorage.Create(Format('Class for OpType %d not found ',[Self.opType])); + Result := LOpClass.Create(Self.opSavedProtocol); + Try + LStream := TMemoryStream.Create; + Try + TStreamOp.LoadStreamFromRaw(LStream,Self.rawData); + LStream.Position := 0; + if not Result.LoadFromStorage(LStream,CT_BUILD_PROTOCOL,Nil) then raise EAbstractMemBlockchainStorage.Create( + Format('Cannot load TPCOperation type %s from stream ',[Result.ClassName])); + Finally + LStream.Free; + End; + Except + On E: Exception do begin + Result.Free; + raise; + end; + End; +end; + +function TAbstractMemBlockchainStorage.TOperationRawData.FromSerialized( + ABytes: TBytes): Boolean; +var LStream : TStream; + LBuild : Word; +begin + Self.Clear; + LStream := TMemoryStream.Create; + Try + TStreamOp.LoadStreamFromRaw(LStream,ABytes); + LStream.Position := 0; + LStream.Read(LBuild,2); + if LBuild>CT_PROTOCOL_5 then Exit(False); + TStreamOp.ReadAnsiString(LStream,Self.rightOpHash); + LStream.Read(Self.account,4); + LStream.Read(Self.n_operation,4); + LStream.Read(Self.block,4); + LStream.Read(Self.opblock,4); + LStream.Read(Self.opType,2); + LStream.Read(Self.opSavedProtocol,2); + TStreamOp.ReadAnsiString(LStream,Self.rawData); + Finally + LStream.Free; + End; + Result := True; +end; + +procedure TAbstractMemBlockchainStorage.TOperationRawData.SetToFindByBlockOpblock( + ABlock, AOpblock: Integer); +begin + Self.Clear; + Self.block := Ablock; + Self.opblock := AOpblock; +end; + +procedure TAbstractMemBlockchainStorage.TOperationRawData.SetToFindByRightOpHash( + const ARightOpHash: TBytes); +begin + Self.Clear; + Self.rightOpHash := Copy(ARightOpHash); +end; + +function TAbstractMemBlockchainStorage.TOperationRawData.ToSerialized: TBytes; +var LStream : TStream; + Lraw : TRawBytes; + LBuild : Word; +begin + LStream := TMemoryStream.Create; + Try + LBuild := CT_BUILD_PROTOCOL; + LStream.Write(LBuild,2); + TStreamOp.WriteAnsiString(LStream,Self.rightOpHash); + LStream.Write(Self.account,4); + LStream.Write(Self.n_operation,4); + LStream.Write(Self.block,4); + LStream.Write(Self.opblock,4); + LStream.Write(Self.opType,2); + LStream.Write(Self.opSavedProtocol,2); + TStreamOp.WriteAnsiString(LStream,Self.rawData); + Result := TStreamOp.SaveStreamToRaw(LStream); + Finally + LStream.Free; + End; +end; + +{ TAbstractMemBlockchainStorage.TAffectedAccount } + +procedure TAbstractMemBlockchainStorage.TAffectedAccount.Clear; +begin + Self.account := -1; // -1 = No account + Self.n_operation := 0; + Self.block := -1; // -1 = No block + Self.opblock := -1; // -1 = No opblock +end; + +procedure TAbstractMemBlockchainStorage.TAffectedAccount.CopyFrom( + const ASource: TAffectedAccount); +begin + Self.account := ASource.account; + Self.n_operation := ASource.n_operation; + Self.block := ASource.block; + Self.opblock := ASource.opblock; +end; + +function TAbstractMemBlockchainStorage.TAffectedAccount.FromSerialized( + ABytes: TBytes): Boolean; +var LStream : TStream; + LBuild : Word; +begin + LStream := TMemoryStream.Create; + Try + TStreamOp.LoadStreamFromRaw(LStream,ABytes); + LStream.Position := 0; + LStream.Read(LBuild,2); + if LBuild>CT_PROTOCOL_5 then Exit(False); + LStream.Read(Self.account,4); + LStream.Read(Self.n_operation,4); + LStream.Read(Self.block,4); + LStream.Read(Self.opblock,4); + Finally + LStream.Free; + End; + Result := True; +end; + +procedure TAbstractMemBlockchainStorage.TAffectedAccount.SetToFindByAccount( + AAccount: Integer); +begin + Self.Clear; + Self.account := AAccount; +end; + +procedure TAbstractMemBlockchainStorage.TAffectedAccount.SetToFindByAccountBlockOpblock( + AAccount, ABlock, AOpblock: Integer); +begin + Self.Clear; + Self.account := AAccount; + Self.block := ABlock; + Self.opblock := AOpblock; +end; + +function TAbstractMemBlockchainStorage.TAffectedAccount.ToSerialized: TBytes; +var LStream : TStream; + Lraw : TRawBytes; + LBuild : Word; +begin + LStream := TMemoryStream.Create; + Try + LBuild := CT_BUILD_PROTOCOL; + LStream.Write(LBuild,2); + LStream.Write(Self.account,4); + LStream.Write(Self.n_operation,4); + LStream.Write(Self.block,4); + LStream.Write(Self.opblock,4); + Result := TStreamOp.SaveStreamToRaw(LStream); + Finally + LStream.Free; + End; +end; + +function TAbstractMemBlockchainStorage.TAffectedAccount.ToString: String; +begin + Result := Format('Account %s (n_operation %d) on Block %d opBlock %d',[TAccountComp.AccountNumberToAccountTxtNumber(Self.account),Self.n_operation,Self.block,Self.opblock]); +end; + +{ TAbstractMemBlockchainStorage.TAMBTreeOrphanInformationByOrphan } + +function TAbstractMemBlockchainStorage.TAMBTreeOrphanInformationByOrphan.GetRegsCountByOrphan(const AOrphan: String): Integer; +var LSearch, LFound : TOrphanInformation; + LPos : TAbstractMemPosition; +begin + LSearch.Clear; + LSearch.orphan := AOrphan; + if FindData(LSearch,LPos, LFound) then begin + Result := LFound.regsCounter; + end else Result := 0; +end; + +function TAbstractMemBlockchainStorage.TAMBTreeOrphanInformationByOrphan.LoadData( + const APosition: TAbstractMemPosition): TOrphanInformation; +var LZone : TAMZone; + LBytes : TBytes; + LStream : TStream; +begin + Result.Clear; + if Not AbstractMem.GetUsedZoneInfo( APosition, False, LZone) then + raise EAbstractMemBTree.Create(Format('%s.LoadData Inconsistency error used zone info not found at pos %d',[Self.ClassName,APosition])); + SetLength(LBytes,LZone.size); + if AbstractMem.Read(LZone.position, LBytes[0], Length(LBytes) )<>Length(LBytes) then + raise EAbstractMemBTree.Create(Format('%s.LoadData Inconsistency error cannot read %d bytes at pos %d',[Self.ClassName,LZone.size,APosition])); + LStream := TMemoryStream.Create; + Try + LStream.Write(LBytes[0],Length(LBytes)); + LStream.Position := 0; + TStreamOp.ReadString(LStream,Result.orphan); + LStream.Read(Result.regsCounter,4); + Finally + LStream.Free; + End; +end; + +function TAbstractMemBlockchainStorage.TAMBTreeOrphanInformationByOrphan.SaveData( + const AData: TOrphanInformation): TAMZone; +var + LBytes : TBytes; + LStream : TStream; +begin + LStream := TMemoryStream.Create; + Try + TStreamOp.WriteString(LStream,AData.orphan); + LStream.Write(AData.regsCounter,4); + SetLength(LBytes,LStream.Size); + LBytes := TStreamOp.SaveStreamToRaw(LStream); + Finally + LStream.Free; + End; + Result := AbstractMem.New(Length(LBytes)); + AbstractMem.Write(Result.position,LBytes[0],Length(LBytes)); +end; + +procedure TAbstractMemBlockchainStorage.TAMBTreeOrphanInformationByOrphan.Update( + const AOrphan: String; AIncrement: Integer); +var LUpdate, LUpdateFound : TOrphanInformation; + LPos : TAbstractMemPosition; +begin + LUpdate.Clear; + LUpdate.orphan := AOrphan; + if FindData(LUpdate,LPos, LUpdateFound) then begin + LUpdate.regsCounter := LUpdateFound.regsCounter + AIncrement; + DeleteData(LUpdateFound); + end else begin + Assert(AIncrement>0,'Creating an orphan with increment<=0 '+AIncrement.ToString); + LUpdate.regsCounter := AIncrement; + end; + LUpdate.orphan := AOrphan; + if not AddData(LUpdate) then raise EAbstractMemBlockchainStorage.Create(Format('Cannot update Orphan information for %s inc %d to %d',[AOrphan,AIncrement,LUpdate.regsCounter])); +end; + +{ TAbstractMemBlockchainStorage.TOrphanInformation } + +procedure TAbstractMemBlockchainStorage.TOrphanInformation.Clear; +begin + Self.orphan:=''; + Self.regsCounter := 0; +end; + +procedure TAbstractMemBlockchainStorage.TOrphanInformation.CopyFrom( + const ASource: TOrphanInformation); +begin + Self.orphan := ASource.orphan; + Self.regsCounter := ASource.regsCounter; +end; + +{ TAbstractMemBlockchainStorageSecondary } + +constructor TAbstractMemBlockchainStorageSecondary.Create(AOwner: TComponent); +begin + inherited; + FAuxStorage := Nil; + FSaving := False; +end; + +destructor TAbstractMemBlockchainStorageSecondary.Destroy; +begin + FreeAndNil(FAuxStorage); + inherited; +end; + +procedure TAbstractMemBlockchainStorageSecondary.DoBlockNotFound(ABlock: Integer; var AFound : Boolean); +var LOperationsComp : TPCOperationsComp; +begin + inherited; + AFound := False; + if (Assigned(FAuxStorage)) then begin + FSaving := True; + LOperationsComp := TPCOperationsComp.Create(Nil); + Try + if FAuxStorage.LoadBlockChainBlock(LOperationsComp,ABlock) then begin + AFound := True; + inherited DoSaveBlockChain(LOperationsComp); + end; + Finally + LOperationsComp.Free; + FSaving := False; + End; + end; +end; + +procedure TAbstractMemBlockchainStorageSecondary.DoDeleteBlockChainBlocks( + StartingDeleteBlock: Cardinal); +begin + inherited; + if Assigned(FAuxStorage) then begin + FAuxStorage.DeleteBlockChainBlocks(StartingDeleteBlock); + end; +end; + +function TAbstractMemBlockchainStorageSecondary.DoInitialize: Boolean; + procedure FillSecondary; + var i, LTotal, LNotFound : Integer; + Ltc : TTickCount; + LOpComp : TPCOperationsComp; + begin + i := FAuxStorage.LastBlock; + if i>=Self.LastBlock then Exit; + TLog.NewLog(ltdebug,ClassName,Format('Start filling secondary storage with blocks from %d to %d',[i,Self.LastBlock])); + Ltc := TPlatform.GetTickCount; + LOpComp := TPCOperationsComp.Create(Nil); + try + LTotal := 0; LNotFound := 0; + while (i<=Self.LastBlock) do begin + if (Self.DoLoadBlockChain(LOpComp,i)) then begin + inc(LTotal); + FAuxStorage.SaveBlockChainBlock(LOpComp); + end else inc(LNotFound); + inc(i); + if TPlatform.GetElapsedMilliseconds(Ltc)>10000 then begin + TLog.NewLog(ltdebug,ClassName,Format('Filling secondary storage with blocks current %d to %d done %d not found %d',[i,Self.LastBlock,LTotal,LNotFound])); + Ltc := TPlatform.GetTickCount; + end; + end; + finally + LOpComp.Free; + end; + TLog.NewLog(ltdebug,ClassName,Format('Finalized filling secondary storage with blocks to %d done %d not found %d',[Self.LastBlock,LTotal,LNotFound])); + end; + +begin + Result := inherited DoInitialize; + if (Result) And (Not Assigned(FAuxStorage)) then begin + FAuxStorage := TFileStorage.Create(Self); + FAuxStorage.Bank := Self.Bank; + FAuxStorage.ReadOnly := Self.ReadOnly; + Result := FAuxStorage.Initialize; + // Try to fill secondary with newest blocks... + FillSecondary; + end; +end; + +function TAbstractMemBlockchainStorageSecondary.DoMoveBlockChain( + StartBlock: Cardinal; const DestOrphan: TOrphan): Boolean; +begin + Result := inherited; + if (Result) and (Assigned(FAuxStorage)) then begin + FAuxStorage.DeleteBlockChainBlocks(StartBlock); + end; +end; + +function TAbstractMemBlockchainStorageSecondary.DoSaveBlockChain( + Operations: TPCOperationsComp): Boolean; +begin + Result := inherited; + if (Result) and (Assigned(FAuxStorage)) and (Not FSaving) then begin + Result := FAuxStorage.SaveBlockChainBlock(Operations); + end; +end; + +procedure TAbstractMemBlockchainStorageSecondary.SetReadOnly( + const Value: Boolean); +begin + inherited; + if (Assigned(FAuxStorage)) then begin + FAuxStorage.ReadOnly := Value; + FAuxStorage.StorageFilename := ''; + end; +end; + +{ TAbstractMemBlockchainStorage.TPendingToSaveThread } + +procedure TAbstractMemBlockchainStorage.TPendingToSaveThread.BCExecute; +var LPendingList : TList; + LPending, LZero : TPendingData; + i, nLastBatch : Integer; +begin + // + nLastBatch := 0; + while (Not Terminated) do begin + LPendingList := FPendingToSave.FPending.LockList; + try + if LPendingList.Count>0 then begin + LZero := LPendingList.Items[0]; + LPending := LPendingList.Items[LPendingList.Count-1]; + LPendingList.Delete(LPendingList.Count-1); + FBusy := True; + if (FPendingToSave.FAMStorage.LogSaveActivity) and (TPlatform.GetElapsedMilliseconds(FPendingToSave.FLastLogTC)>10000) then begin + + TLog.NewLog(ltdebug,ClassName,Format('Pendings %d (%d/%d..%d/%d) - %s', + [LPendingList.Count+1, LZero.operation.block, LZero.operation.opblock, + LPending.operation.block, LPending.operation.opblock, FPendingToSave.FAMStorage.FSaveStorageStats.ToString])); + FPendingToSave.FLastLogTC := TPlatform.GetTickCount; + FPendingToSave.FAMStorage.FSaveStorageStats.Clear; + end; + end else FBusy := False; + finally + FPendingToSave.FPending.UnlockList; + end; + if (FBusy) then begin + inc(nLastBatch); + // Here will not terminate until finished job (or raised exception) + DebugStep := Format('Block %d opBlock %d',[LPending.operation.block,LPending.operation.opblock]); + if not FPendingToSave.FOperationsRawData_By_RightOpHash.AddData(LPending.operation) then + raise EAbstractMemBlockchainStorage.Create(Format('Cannot add operation block %d opBlock %d',[LPending.operation.block,LPending.operation.opblock])); + Inc(FPendingToSave.FAMStorage.FSaveStorageStats.operationRawDataCount); + // + for i := 0 to High(LPending.affectedAccounts) do begin + DebugStep := Format('Block %d opBlock %d Account %d %d/%d',[LPending.operation.block,LPending.operation.opblock,LPending.affectedAccounts[i].account,i+1,Length(LPending.affectedAccounts)]); + if not FPendingToSave.FAffectedAccounts_By_Account_Block_OpBlock.AddData(LPending.affectedAccounts[i]) then begin + raise EAbstractMemBlockchainStorage.Create(Format('Cannot add affected account %d %d/%d in block %d opBlock %d', + [LPending.affectedAccounts[i].account, + i+1,Length(LPending.affectedAccounts), + LPending.affectedAccounts[i].block,LPending.affectedAccounts[i].opblock])); + end; + Inc(FPendingToSave.FAMStorage.FSaveStorageStats.affectedAccountCount); + end; + end else begin + if (nLastBatch>0) then begin + TLog.NewLog(ltdebug,ClassName,Format('Finished %d operations... waiting for more - %s', + [nLastBatch, FPendingToSave.FAMStorage.FSaveStorageStats.ToString])); + nLastBatch := 0; + FPendingToSave.FAMStorage.FSaveStorageStats.Clear; + FPendingToSave.FLastLogTC := FPendingToSave.FAMStorage.FSaveStorageStats.startTC; + FPendingToSave.ThreadHasFinishedCurrentJob; // Notify in order to flush when all threads terminated + end; + Sleep(10); + end; + end; +end; + +constructor TAbstractMemBlockchainStorage.TPendingToSaveThread.Create( + APendingToSave: TPendingToSave); +begin + FBusy := True; + FPendingToSave := APendingToSave; + inherited Create(True); + FreeOnTerminate := False; + Resume; +end; + +{ TAbstractMemBlockchainStorage.TPendingToSave } + +procedure TAbstractMemBlockchainStorage.TPendingToSave.AddPendingData(const APendingData: TPendingData); +var LPendings : TList; + LCount : Integer; +begin + LPendings := FPending.LockList; + Try + LPendings.Add(APendingData); + LCount := LPendings.Count; + inc(FTotal); + Finally + FPending.UnlockList; + End; + if MaxThreads<1 then begin + SetMaxThreads(1); + repeat + sleep(1); + until PendingsCount=0; + SetMaxThreads(0); + end else SetMaxThreads( FMaxThreads ); + + if (MaxPendingsCount>0) And (LCount>=MaxPendingsCount) then begin + while (PendingsCount>=MaxPendingsCount) and (MaxPendingsCount>0) do begin + Sleep(10); + end; + end; +end; + +constructor TAbstractMemBlockchainStorage.TPendingToSave.Create( + AStorage : TAbstractMemBlockchainStorage; + AAMBTreeTOperationRawDataByRightOpHash: TAMBTreeTOperationRawDataByRightOpHash; + AAMBTreeTAffectedAccountByAccountBlockOpBlock: TAMBTreeTAffectedAccountByAccountBlockOpBlock); +begin + FAMStorage := AStorage; + FTotal := 0; + FMaxPendingsCount := {$IFDEF IS32BITS}10000{$ELSE}50000{$ENDIF}; + FLastLogTC := TPlatform.GetTickCount; + FOperationsRawData_By_RightOpHash := AAMBTreeTOperationRawDataByRightOpHash; + FAffectedAccounts_By_Account_Block_OpBlock := AAMBTreeTAffectedAccountByAccountBlockOpBlock; + FPending := TThreadList.Create; + FThreads := TThreadList.Create; + SetMaxThreads( TCPUTool.GetLogicalCPUCount ); +end; + +destructor TAbstractMemBlockchainStorage.TPendingToSave.Destroy; +var i : Integer; +begin + SetMaxThreads(0); + i := PendingsCount; + if i>0 then begin + TLog.NewLog(lterror,ClassName,Format('ERROR: Finalizing Pending to save with %d pending operations!',[i])); + end; + if FTotal>0 then begin + TLog.NewLog(ltdebug,ClassName,Format('Finalizing Pending to save with %d operations saved',[FTotal])); + end; + FreeAndNil(FPending); + FreeAndNil(FThreads); + inherited; +end; + +function TAbstractMemBlockchainStorage.TPendingToSave.PendingsCount: Integer; +var LPendings : TList; +begin + LPendings := FPending.LockList; + Try + Result := LPendings.Count; + Finally + FPending.UnlockList; + End; +end; + +procedure TAbstractMemBlockchainStorage.TPendingToSave.SetMaxThreads(const Value: Integer); +var i : Integer; + ListTh : TList; +begin + {$IFDEF HIGHLOG} + if Value<>FMaxThreads then begin + TLog.NewLog(ltdebug,ClassName,Format('Setting muxThreads from %d to %d',[FMaxThreads,Value])); + end; + {$ENDIF} + if Value<0 then FMaxThreads := 0 + else if Value>16 then FMaxThreads := 16 + else FMaxThreads := Value; + + ListTh := FThreads.LockList; + try + // Clean terminateds... + for i := ListTh.Count-1 downto 0 do begin + if ListTh.Items[i].Terminated then begin + ListTh.Items[i].Free; + ListTh.Delete(i); + end; + end; + // CREATE + while ListTh.Count; +begin + if PendingsCount>0 then Exit; + ListTh := FThreads.LockList; + try + for i := ListTh.Count-1 downto 0 do begin + if ListTh.Items[i].Busy then Exit; // Still working + end; + Finally + FThreads.UnlockList; + end; + // + FAMStorage.FinalizedUpdating; +end; + +{ TAbstractMemBlockchainStorage.TPendingData } + +procedure TAbstractMemBlockchainStorage.TPendingData.Clear; +begin + Self.operation.Clear; + SetLength(Self.affectedAccounts,0); +end; + +{ TBlockchainStorageStats } + +procedure TBlockchainStorageStats.AddTo(var ADest: TBlockchainStorageStats); +begin + Inc(ADest.blockInformationCount,Self.blockInformationCount); + Inc(ADest.operationRawDataCount,Self.operationRawDataCount); + Inc(ADest.affectedAccountCount,Self.affectedAccountCount); +end; + +procedure TBlockchainStorageStats.Clear; +begin + Self.blockInformationCount := 0; + Self.operationRawDataCount := 0; + Self.affectedAccountCount := 0; + Self.startTC := TPlatform.GetTickCount; +end; + +function TBlockchainStorageStats.ThroughputPerSecond: Double; +var Lmilis : Int64; + LRend : Double; +begin + Lmilis := TPlatform.GetElapsedMilliseconds(Self.startTC); + if LMilis>0 then begin + Result := ((Self.blockInformationCount + Self.operationRawDataCount + Self.affectedAccountCount) / Lmilis)*1000; + end else Result := 0; +end; + +function TBlockchainStorageStats.ToString: String; +begin + Result := format('Blocks:%d Operations:%d Accounts:%d secs:%.2f TPS:%.2f', + [Self.blockInformationCount,Self.operationRawDataCount,Self.affectedAccountCount, + TPlatform.GetElapsedMilliseconds(Self.startTC)/1000,Self.ThroughputPerSecond]); +end; + +initialization +end. + diff --git a/src/core/UAccounts.pas b/src/core/UAccounts.pas index ea1e0b565..e2753af27 100644 --- a/src/core/UAccounts.pas +++ b/src/core/UAccounts.pas @@ -30,7 +30,9 @@ interface UPCHardcodedRandomHashTable, UJSONFunctions, {$IFDEF USE_ABSTRACTMEM} UPCAbstractMem, UPCAbstractMemAccountKeys, + {$ELSE} {$ENDIF} + UPCAccountsOrdenations, {$IFNDEF FPC}System.Generics.Collections{$ELSE}Generics.Collections{$ENDIF}; Type @@ -56,6 +58,7 @@ interface class procedure GetRewardDistributionForNewBlock(const OperationBlock : TOperationBlock; out acc_0_miner_reward, acc_4_dev_reward : Int64; out acc_4_for_dev : Boolean); class Function CalcSafeBoxHash(ABlocksHashBuffer : TBytesBuffer; protocol_version : Integer) : TRawBytes; class Function AllowUseHardcodedRandomHashTable(const AHardcodedFileName : String; const AHardcodedSha256Value : TRawBytes) : Boolean; + class function IsValidAccountName(protocol_version : Integer; const new_name : TRawBytes; var errors : String) : Boolean; end; TAccount_Helper = record helper for TAccount @@ -116,12 +119,15 @@ TAccount_Helper = record helper for TAccount Class procedure SaveTOperationBlockToStream(const stream : TStream; const operationBlock:TOperationBlock); Class Function LoadTOperationBlockFromStream(const stream : TStream; var operationBlock:TOperationBlock) : Boolean; Class Function AccountToTxt(const Account : TAccount) : String; + Class Function AccountCanRecover(const Account: TAccount; currentBlockCount: Cardinal; ASafeboxCurrentProtocol : Integer) : Boolean; End; TPCSafeBox = Class; TAccountKeyArray = array of TAccountKey; + TAccountList = TList; + // This is a class to quickly find accountkeys and their respective account number/s { TOrderedAccountKeysList } @@ -216,6 +222,8 @@ TProgressNotifyManyHelper = record helper for TProgressNotifyMany FOrderedByName : TOrderedRawList; // OrderedAccountKeysList (Added after Build 3.0.1) allows an indexed search of public keys in the safebox with mem optimization FOrderedAccountKeysList : TSafeboxPubKeysAndAccounts; + FAccountsOrderedByUpdatedBlock : TAccountsOrderedByUpdatedBlock; + FAccountsOrderedBySalePrice : TAccountsOrderedBySalePrice; {$ENDIF} FModifiedBlocksSeparatedChain : TOrderedBlockAccountList; // Used when has PreviousSafebox (Used if we are on a Separated chain) // @@ -245,6 +253,7 @@ TProgressNotifyManyHelper = record helper for TProgressNotifyMany procedure SearchBlockWhenOnSeparatedChain(blockNumber : Cardinal; out blockAccount : TBlockAccount); function GetAggregatedHashrate: TBigNum; function GetOrderedAccountKeysList: TSafeboxPubKeysAndAccounts; + function GetAccount(AAccountNumber : Integer; var AAccount : TAccount) : Boolean; protected FTotalFee: Int64; Procedure UpdateAccount(account_number : Cardinal; const newAccountInfo: TAccountInfo; const newName : TRawBytes; newType : Word; @@ -257,6 +266,7 @@ TProgressNotifyManyHelper = record helper for TProgressNotifyMany function DoUpgradeToProtocol3 : Boolean; function DoUpgradeToProtocol4 : Boolean; function DoUpgradeToProtocol5 : Boolean; + function DoUpgradeToProtocol6 : Boolean; function BufferBlocksHash : TBytesBuffer32Safebox; public Constructor Create; @@ -272,7 +282,8 @@ TProgressNotifyManyHelper = record helper for TProgressNotifyMany Function LoadSafeBoxChunkFromStream(Stream : TStream; checkAll : Boolean; checkSafeboxHash : TRawBytes; progressNotify : TProgressNotify; previousCheckedSafebox : TPCSafebox; var ALastReadBlock : TBlockAccount; var errors : String) : Boolean; Function LoadSafeBoxFromStream(Stream : TStream; checkAll : Boolean; var LastReadBlock : TBlockAccount; var errors : String) : Boolean; overload; Function LoadSafeBoxFromStream(Stream : TStream; checkAll : Boolean; checkSafeboxHash : TRawBytes; progressNotify : TProgressNotify; previousCheckedSafebox : TPCSafebox; var ALastReadBlock : TBlockAccount; var errors : String) : Boolean; overload; - Class Function LoadSafeBoxStreamHeader(Stream : TStream; var sbHeader : TPCSafeBoxHeader) : Boolean; + Class Function LoadSafeBoxStreamHeader(Stream : TStream; var sbHeader : TPCSafeBoxHeader; out AStreamFinalPos : Int64) : Boolean; overload; + Class Function LoadSafeBoxStreamHeader(Stream : TStream; var sbHeader : TPCSafeBoxHeader) : Boolean; overload; Class Function SaveSafeBoxStreamHeader(Stream : TStream; protocol : Word; OffsetStartBlock, OffsetEndBlock, CurrentSafeBoxBlocksCount : Cardinal) : Boolean; Class Function MustSafeBoxBeSaved(BlocksCount : Cardinal) : Boolean; Class Function InitialSafeboxHash : TRawBytes; @@ -280,7 +291,6 @@ TProgressNotifyManyHelper = record helper for TProgressNotifyMany Procedure SaveSafeBoxToAStream(Stream : TStream; FromBlock, ToBlock : Cardinal); class Function CopySafeBoxStream(Source,Dest : TStream; FromBlock, ToBlock : Cardinal; var errors : String) : Boolean; class Function ConcatSafeBoxStream(Source1, Source2, Dest : TStream; var errors : String) : Boolean; - class function ValidAccountName(const new_name : TRawBytes; var errors : String) : Boolean; Function IsValidNewOperationsBlock(Const newOperationBlock : TOperationBlock; checkSafeBoxHash, checkValidOperationsBlock : Boolean; var errors : String) : Boolean; class Function IsValidOperationBlock(Const newOperationBlock : TOperationBlock; var errors : String) : Boolean; @@ -289,7 +299,7 @@ TProgressNotifyManyHelper = record helper for TProgressNotifyMany Function FindAccountByName(const aName : String) : Integer; overload; Function FindAccountByName(const aName : TRawBytes) : Integer; overload; Function FindAccountsStartingByName(const AStartName : TRawBytes; const ARawList : TOrderedRawList; const AMax : Integer = 0) : Integer; - + Procedure Clear; Function Account(account_number : Cardinal) : TAccount; Function GetBlock(block_number : Cardinal) : TBlockAccount; @@ -319,7 +329,10 @@ TProgressNotifyManyHelper = record helper for TProgressNotifyMany procedure UpdateSafeboxFileName(const ANewSafeboxFileName : String); procedure ClearSafeboxfile; class Function CopyAbstractMemToSafeBoxStream(ASource : TPCAbstractMem; ADestStream : TStream; AFromBlock, AToBlock : Cardinal; var AErrors : String) : Boolean; + property PCAbstractMem : TPCAbstractMem read FPCAbstractMem; {$ENDIF} + Function AccountsOrderedByUpdatedBlock : TAccountsOrderedByUpdatedBlock; + Function AccountsOrderedBySalePrice : TAccountsOrderedBySalePrice; End; @@ -453,9 +466,12 @@ TProgressNotifyManyHelper = record helper for TProgressNotifyMany public class Function WriteAnsiString(Stream: TStream; const value: TRawBytes): Integer; overload; class Function WriteAnsiString(Stream: TStream; const value: T32Bytes): Integer; overload; + class Function WriteString(Stream: TStream; const value: String): Integer; + class Function WriteTBytes(Stream: TStream; const value: TBytes): Integer; class Function ReadAnsiString(Stream: TStream; var value: TRawBytes; ACheckLength : Integer = 0) : Integer; overload; class Function ReadAnsiString(Stream: TStream; var value: T32Bytes): Integer; overload; class Function ReadString(Stream: TStream; var value: String): Integer; + class Function ReadTBytes(Stream: TStream; var ABytes : TBytes; ACheckLength : Integer = 0): Integer; class Function WriteAccountKey(Stream: TStream; const value: TAccountKey): Integer; class Function ReadAccountKey(Stream: TStream; var value : TAccountKey): Integer; class Function SaveStreamToRaw(Stream: TStream) : TRawBytes; @@ -479,7 +495,18 @@ function Check_Safebox_Names_Consistency(sb : TPCSafeBox; const title :String; v implementation uses - ULog, UAccountKeyStorage, math, UCommon, UPCOperationsBlockValidator; + ULog, {$IFnDEF USE_ABSTRACTMEM} UAccountKeyStorage,{$ENDIF} math, UCommon, UPCOperationsBlockValidator, UPCTemporalFileStream, UEncoding; + + +{$IFDEF FPC} + {$DEFINE USE_BIGBLOCKS_MEM_ON_DISK} + // USE_BIGBLOCKS_MEM_ON_DISK directive is used in order to prevent a FreePascal issue with Heap allocation strategy that + // reuses big blocks of disposed memory and fragments it, this causes that when a new big block of same size that previously + // freeded mem is needed it will not reuse because has been fragmented... + // Tested on FPC version 3.2.0 (2020-11-03) and order versions + // Defragmention documented here: https://www.freepascal.org/docs-html/current/prog/progsu172.html + // This issue is not detected on current Delphi memory manager (Tested on Delphi 10.3.2) +{$ENDIF} { This function is for testing purpose only. Will check if Account Names are well assigned and stored } @@ -873,6 +900,53 @@ class procedure TPascalCoinProtocol.CalcProofOfWork(const operationBlock: TOpera end; end; +class function TPascalCoinProtocol.IsValidAccountName(protocol_version: Integer; const new_name: TRawBytes; var errors: String): Boolean; + { Note: + This function is case senstive, and only lower case chars are valid. + Execute a LowerCase() prior to call this function! + } +Const CT_PascalCoin_Base64_Charset : RawByteString = 'abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()-+{}[]\_:"|<>,.?/~'; + // First char can't start with a number + CT_PascalCoin_FirstChar_Charset : RawByteString = 'abcdefghijklmnopqrstuvwxyz!@#$%^&*()-+{}[]\_:"|<>,.?/~'; + CT_PascalCoin_name_min_length = 3; + CT_PascalCoin_name_max_length = 64; +var i,j : Integer; + Lraw : TRawBytes; +begin + Result := False; errors := ''; + if (length(new_name)CT_PascalCoin_name_max_length) then begin + errors := 'Invalid length:'+IntToStr(Length(new_name))+' (valid from '+Inttostr(CT_PascalCoin_name_max_length)+' to '+IntToStr(CT_PascalCoin_name_max_length)+')'; + Exit; + end; + for i:=Low(new_name) to High(new_name) do begin + if (i=Low(new_name)) then begin + j:=Low(CT_PascalCoin_FirstChar_Charset); + // First char can't start with a number + While (j<=High(CT_PascalCoin_FirstChar_Charset)) and (Ord(new_name[i])<>Ord(CT_PascalCoin_FirstChar_Charset[j])) do inc(j); + if (j>High(CT_PascalCoin_FirstChar_Charset)) then begin + // Allow Account Name as an hexadecimal value for a hash on Protocol V6 as proposed on PIP-0044 + if Not ( + (protocol_version>=CT_PROTOCOL_6) and + (new_name[i] in [Ord('0')..Ord('9')]) and + (length(new_name)=64) and + (TCrypto.HexaToRaw(new_name.ToString,Lraw)) + ) then begin + errors := 'Invalid char '+Char(new_name[i])+' at first pos'; + Exit; // Not found + end; + end; + end else begin + j:=Low(CT_PascalCoin_Base64_Charset); + While (j<=High(CT_PascalCoin_Base64_Charset)) and (Ord(new_name[i])<>Ord(CT_PascalCoin_Base64_Charset[j])) do inc(j); + if j>High(CT_PascalCoin_Base64_Charset) then begin + errors := 'Invalid char '+Char(new_name[i])+' at pos '+IntToStr(i); + Exit; // Not found + end; + end; + end; + Result := True; +end; + class function TPascalCoinProtocol.IsValidMinerBlockPayload(const newBlockPayload: TRawBytes): Boolean; var i : Integer; begin @@ -1135,6 +1209,30 @@ class function TStreamOp.ReadString(Stream: TStream; var value: String): Integer value := raw.ToString; end; +class function TStreamOp.ReadTBytes(Stream: TStream; + var ABytes: TBytes; ACheckLength : Integer = 0): Integer; +var LSize : Integer; +begin + if Stream.Size - Stream.Position < 4 then begin + SetLength(ABytes,0); + Result := -1; + Exit; + end; + LSize := 0; + Stream.Read(LSize, 4); + if (Stream.Size - Stream.Position < LSize) OR ((ACheckLength > 0) AND (LSize <> ACheckLength)) then begin + Stream.Position := Stream.Position - 4; // Go back! + SetLength(ABytes,0); + Result := -1; + Exit; + end; + SetLength(ABytes, LSize); + if (LSize>0) then begin + Stream.ReadBuffer(ABytes[Low(ABytes)], LSize); + end; + Result := LSize+4; +end; + class function TStreamOp.WriteAccountKey(Stream: TStream; const value: TAccountKey): Integer; begin Result := stream.Write(value.EC_OpenSSL_NID, SizeOf(value.EC_OpenSSL_NID)); @@ -1176,6 +1274,29 @@ class function TStreamOp.WriteGUID(AStream: TStream; const AGUID: TGUID): Intege Result := 16; // GUID is 16 bytes end; +class function TStreamOp.WriteString(Stream: TStream; + const value: String): Integer; +var LRaw : TRawBytes; +begin + LRaw.FromString(value); + Result := WriteAnsiString(Stream,LRaw); +end; + +class function TStreamOp.WriteTBytes(Stream: TStream; + const value: TBytes): Integer; +Var LSize : Integer; +begin + if (Length(value)>MAXINT) then begin + TLog.NewLog(lterror,Classname,'Invalid stream size! '+Inttostr(Length(value))+' '+MAXINT.ToString); + raise Exception.Create('Invalid stream size! '+Inttostr(Length(value))+' '+MAXINT.ToString); + end; + LSize := Length(value); + Stream.Write(LSize, 4); + if (LSize > 0) then + Stream.WriteBuffer(value[Low(value)], Length(value)); + Result := LSize+4; +end; + { TAccountComp } Const CT_Base58 : String = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'; @@ -1267,7 +1388,7 @@ class function TAccountComp.LoadAccountFromStream(Stream: TStream; var Account: Result := False; if (Stream.Size - Stream.Position<8) then Exit; Stream.Read(LSaved_protocol,SizeOf(LSaved_protocol)); - if Not (LSaved_protocol in [CT_PROTOCOL_4,CT_PROTOCOL_5]) then Exit; + if Not (LSaved_protocol in [CT_PROTOCOL_4..CT_PROTOCOL_MAX]) then Exit; Stream.Read(Account.account,Sizeof(Account.account)); if TStreamOp.ReadAnsiString(Stream,raw) < 0 then Exit; TAccountComp.RawString2AccountInfo(raw,Account.accountInfo); @@ -1465,7 +1586,7 @@ class function TAccountComp.EqualAccounts(const account1, account2: TAccount): B class function TAccountComp.EqualOperationBlocks(const opBlock1, opBlock2: TOperationBlock): Boolean; begin - Result := (opBlock1.block = opBlock1.block) + Result := (opBlock1.block = opBlock2.block) And (EqualAccountKeys(opBlock1.account_key,opBlock2.account_key)) And (opBlock1.reward = opBlock2.reward) And (opBlock1.fee = opBlock2.fee) @@ -1498,9 +1619,10 @@ class function TAccountComp.EqualBlockAccounts(const blockAccount1, blockAccount end; end; +// Deprecated class function TAccountComp.FormatMoney(Money: Int64): String; begin - Result := FormatFloat('#,###0.0000',(Money/10000), TPCJSONData.JSONFormatSettings); + Result := TPASCEncoding.Encode(Money); end; class function TAccountComp.FormatMoneyDecimal(Money : Int64) : Currency; @@ -1703,6 +1825,36 @@ class function TAccountComp.AccountToTxt(const Account: TAccount): String; Account.account_data.ToHexaString,Account.account_seal.ToHexaString ]); end; +class function TAccountComp.AccountCanRecover(const Account: TAccount; currentBlockCount: Cardinal; ASafeboxCurrentProtocol : Integer) : Boolean; +begin + Result := True; + if TAccountComp.IsAccountBlockedByProtocol(Account.account, currentBlockCount) then begin + Result := False; // 'account is blocked for protocol'; + Exit; + end; + if TAccountComp.IsAccountLocked(Account.accountInfo,currentBlockCount) then begin + Result := False; // 'account is locked'; + Exit; + end; + // check boundary 1 gotten from TOpRecoverFounds.DoOperation + if( Account.updated_on_block_active_mode + CT_RecoverFoundsWaitInactiveCount >= currentBlockCount ) then begin + Result := False; // 'account is active'; + Exit; + end; + // check boundary 2 gotten from TOpRecoverFounds.DoOperation + if( TAccountComp.AccountBlock(Account.account) + CT_RecoverFoundsWaitInactiveCount >= currentBlockCount ) then begin + Result := False; // 'account block is active'; + Exit; + end; + if (ASafeboxCurrentProtocol>CT_PROTOCOL_5) then begin + if (Account.balance>0) or (Length(Account.name)>0) then begin + Result := False; // 'Recover account is only valid for Balance 0 since Protocol 6' + exit; + end; + end; + +end; + class function TAccountComp.IsValidAccountInfo(const AAccountInfo: TAccountInfo; ACurrentProtocol : Word; var errors: String): Boolean; Var s : String; begin @@ -1879,41 +2031,10 @@ class procedure TAccountComp.RawString2Accountkey(const rawaccstr: TRawBytes; va {$IFNDEF VER210} {$DEFINE DELPHIXE} {$ENDIF} - -class function TAccountComp.TxtToMoney(const moneytxt: String; - var money: Int64): Boolean; -Var s : String; - LPosThousand, LPosDecimal : Integer; - LMoneyString : String; +// Deprecated +class function TAccountComp.TxtToMoney(const moneytxt: String; var money: Int64): Boolean; begin - money := 0; - LMoneyString := Trim(moneytxt); - if LMoneyString.Length=0 then begin - Result := true; - exit; - end; - try - LPosThousand := LMoneyString.IndexOf( TPCJSONData.JSONFormatSettings.ThousandSeparator ); - LPosDecimal := LMoneyString.IndexOf( TPCJSONData.JSONFormatSettings.DecimalSeparator ); - - if (LPosThousand>0) then begin - if (LPosThousand < LPosDecimal ) then begin - // Remove thousand values - LMoneyString := LMoneyString.Replace(String(TPCJSONData.JSONFormatSettings.ThousandSeparator),'',[rfReplaceAll]); - end else begin - // Possible 15.123.456,7890 format ( coma (,) = decimal separator ) - // Remove decimal "." and convert thousand to decimal - LMoneyString := LMoneyString.Replace(String(TPCJSONData.JSONFormatSettings.DecimalSeparator),'',[rfReplaceAll]); - LMoneyString := LMoneyString.Replace(TPCJSONData.JSONFormatSettings.ThousandSeparator,TPCJSONData.JSONFormatSettings.DecimalSeparator,[rfReplaceAll]); - end; - end; - - money := Round( StrToFloat(LMoneyString,TPCJSONData.JSONFormatSettings)*10000 ); - Result := true; - Except - result := false; - end; - + Result := TPASCEncoding.TryDecode(moneytxt, money); end; class procedure TAccountComp.ValidsEC_OpenSSL_NID(list: TList); @@ -2180,7 +2301,7 @@ procedure ToTBlockAccount(const source : TMemBlockAccount; block_number : Cardin newBlocks : TOrderedBlockAccountList; // Saves final blocks values on modified blocks namesDeleted : TOrderedRawList; namesAdded : TOrderedRawList; - oldBufferBlocksHash: TBytesBuffer; + oldBufferBlocksHash: {$IFDEF USE_BIGBLOCKS_MEM_ON_DISK}TPCTemporalFileStream{$ELSE}TBytesBuffer{$ENDIF}; oldTotalBalance: Int64; oldTotalFee: Int64; oldSafeBoxHash : TRawBytes; @@ -2203,11 +2324,11 @@ function TPCSafeBox.Account(account_number: Cardinal): TAccount; iBlock:=(Integer(account_number) DIV CT_AccountsPerBlock); If (Assigned(FPreviousSafeBox)) then begin SearchBlockWhenOnSeparatedChain(iBlock,blockAccount); - Result := blockAccount.accounts[account_number MOD CT_AccountsPerBlock]; + Result := blockAccount.accounts[account_number MOD CT_AccountsPerBlock].GetCopy; end else begin {$IFDEF USE_ABSTRACTMEM} if (iBlock<0) Or (iBlock>=FPCAbstractMem.AccountsCount) then raise Exception.Create('Invalid account: '+IntToStr(account_number)); - Result := FPCAbstractMem.GetAccount(account_number); + Result := FPCAbstractMem.GetAccount(account_number).GetCopy; {$ELSE} if (iBlock<0) Or (iBlock>=FBlockAccountsList.Count) then raise Exception.Create('Invalid account: '+IntToStr(account_number)); ToTAccount(PBlockAccount(FBlockAccountsList.Items[iBlock])^.accounts[account_number MOD CT_AccountsPerBlock],account_number,Result); @@ -2346,7 +2467,12 @@ function TPCSafeBox.AddNew(const blockChain: TOperationBlock): TBlockAccount; Psnapshot^.newBlocks := FModifiedBlocksFinalState; Psnapshot^.namesDeleted := FDeletedNamesSincePreviousSafebox; Psnapshot^.namesAdded := FAddedNamesSincePreviousSafebox; + {$IFDEF USE_BIGBLOCKS_MEM_ON_DISK} + Psnapshot^.oldBufferBlocksHash := TPCTemporalFileStream.Create('oldbufferblockhash'); + BufferBlocksHash.SaveToStream( Psnapshot^.oldBufferBlocksHash ); + {$ELSE} Psnapshot^.oldBufferBlocksHash := TBytesBuffer.CreateCopy(BufferBlocksHash); + {$ENDIF} Psnapshot^.oldTotalBalance:=FTotalBalance; Psnapshot^.oldTotalFee:=FTotalFee; Psnapshot^.oldSafeBoxHash := FSafeBoxHash; @@ -2419,6 +2545,24 @@ function TPCSafeBox.AccountsCount: Integer; end; end; +function TPCSafeBox.AccountsOrderedBySalePrice: TAccountsOrderedBySalePrice; +begin + {$IFDEF USE_ABSTRACTMEM} + Result := FPCAbstractMem.AccountsOrderedBySalePrice; + {$ELSE} + Result := FAccountsOrderedBySalePrice; + {$ENDIF} +end; + +function TPCSafeBox.AccountsOrderedByUpdatedBlock: TAccountsOrderedByUpdatedBlock; +begin + {$IFDEF USE_ABSTRACTMEM} + Result := FPCAbstractMem.AccountsOrderedByUpdatedBlock; + {$ELSE} + Result := FAccountsOrderedByUpdatedBlock; + {$ENDIF} +end; + function TPCSafeBox.GetBlock(block_number: Cardinal): TBlockAccount; begin StartThreadSafe; @@ -2577,6 +2721,8 @@ function TPCSafeBox.CanUpgradeToProtocol(newProtocolVersion : Word) : Boolean; Result := (FCurrentProtocol=CT_PROTOCOL_3) And (BlocksCount >= CT_Protocol_Upgrade_v4_MinBlock); end else if (newProtocolVersion=CT_PROTOCOL_5) then begin Result := (FCurrentProtocol=CT_PROTOCOL_4) And (BlocksCount >= CT_Protocol_Upgrade_v5_MinBlock); + end else if (newProtocolVersion=CT_PROTOCOL_6) then begin + Result := (FCurrentProtocol=CT_PROTOCOL_5) And (BlocksCount >= CT_Protocol_Upgrade_v6_MinBlock); end else Result := False; end; @@ -2832,6 +2978,8 @@ constructor TPCSafeBox.Create; FBlockAccountsList := TList.Create; FAggregatedHashrate := TBigNum.Create(0); FOrderedByName := TOrderedRawList.Create; + FAccountsOrderedByUpdatedBlock := TAccountsOrderedByUpdatedBlock.Create(GetAccount); + FAccountsOrderedBySalePrice := TAccountsOrderedBySalePrice.Create(GetAccount); {$ENDIF} FListOfOrderedAccountKeysList := TList.Create; FCurrentProtocol := CT_PROTOCOL_1; @@ -2875,6 +3023,11 @@ destructor TPCSafeBox.Destroy; FreeAndNil(FAddedNamesSincePreviousSafebox); FreeAndNil(FDeletedNamesSincePreviousSafebox); FreeAndNil(FSubChains); + {$IFnDEF USE_ABSTRACTMEM} + FreeAndNil(FAccountsOrderedByUpdatedBlock); + FreeAndNil(FAccountsOrderedBySalePrice); + {$ENDIF} + If Assigned(FPreviousSafeBox) then begin FPreviousSafeBox.FSubChains.Remove(Self); // Remove from current snapshot FPreviousSafeBox := Nil; @@ -2920,7 +3073,13 @@ procedure TPCSafeBox.SetToPrevious(APreviousSafeBox: TPCSafeBox; StartBlock: Car // FPreviousSafeBox.FSubChains.Add(Self); // + {$IFDEF USE_BIGBLOCKS_MEM_ON_DISK} + BufferBlocksHash.Clear; + BufferBlocksHash.LoadFromStream( Psnapshot^.oldBufferBlocksHash ); + {$ELSE} BufferBlocksHash.CopyFrom( Psnapshot^.oldBufferBlocksHash ); + {$ENDIF} + FTotalBalance := Psnapshot^.oldTotalBalance; FTotalFee := Psnapshot^.oldTotalFee; FSafeBoxHash := Psnapshot^.oldSafeBoxHash; @@ -2971,7 +3130,7 @@ procedure TPCSafeBox.CommitToPrevious; // Start deleting: For i:=0 to DeletedNamesList.Count-1 do begin {$IFDEF USE_ABSTRACTMEM} - FPreviousSafebox.FPCAbstractMem.AccountsNames.Remove(DeletedNamesList.Get(i).ToString); + FPreviousSafebox.FPCAbstractMem.AccountsNames.DeleteAccountName(DeletedNamesList.Get(i).ToString); {$ELSE} FPreviousSafebox.FOrderedByName.Remove(DeletedNamesList.Get(i)); {$ENDIF} @@ -2979,7 +3138,7 @@ procedure TPCSafeBox.CommitToPrevious; // Finally adding For i:=0 to AddedNamesList.Count-1 do begin {$IFDEF USE_ABSTRACTMEM} - FPreviousSafebox.FPCAbstractMem.AccountsNames.Add(AddedNamesList.Get(i).ToString,AddedNamesList.GetTag(i)); + FPreviousSafebox.FPCAbstractMem.AccountsNames.AddNameAndNumber(AddedNamesList.Get(i).ToString,AddedNamesList.GetTag(i)); {$ELSE} FPreviousSafebox.FOrderedByName.Add(AddedNamesList.Get(i),AddedNamesList.GetTag(i)); {$ENDIF} @@ -3114,19 +3273,23 @@ procedure TPCSafeBox.RollBackToSnapshot(snapshotBlock: Cardinal); Procedure UndoAddedDeletedNames(AddedNamesList,DeletedNamesList : TOrderedRawList); Var i,j : Integer; + {$IFDEF USE_ABSTRACTMEM} + Laninfo : TAccountNameInfo; + {$ELSE} + {$ENDIF} Begin // Start adding For i:=0 to AddedNamesList.Count-1 do begin // It was added, so we MUST FIND on current names list {$IFDEF USE_ABSTRACTMEM} - If Not FPCAbstractMem.AccountsNames.FindByName(AddedNamesList.Get(i).ToString,j) then begin + If Not FPCAbstractMem.AccountsNames.FindByName(AddedNamesList.Get(i).ToString,Laninfo) then begin // ERROR: It has been added, why we not found??? If DeletedNamesList.Find(AddedNamesList.Get(i),j) then begin end else begin TLog.NewLog(lterror,ClassName,Format('ERROR DEV 20180319-1 Name %s not found at account:%d',[AddedNamesList.Get(i).ToPrintable,AddedNamesList.GetTag(i)])); end; end else begin - FPCAbstractMem.AccountsNames.Delete(j); + FPCAbstractMem.AccountsNames.DeleteData(Laninfo); end; {$ELSE} If Not FOrderedByName.Find(AddedNamesList.Get(i),j) then begin @@ -3142,15 +3305,14 @@ procedure TPCSafeBox.RollBackToSnapshot(snapshotBlock: Cardinal); For i:=0 to DeletedNamesList.Count-1 do begin {$IFDEF USE_ABSTRACTMEM} // It has been deleted, we MUST NOT FIND on current names list - If FPCAbstractMem.AccountsNames.FindByName(DeletedNamesList.Get(i).ToString,j) then begin - // It has been deleted... now is found - If (FPCAbstractMem.AccountsNames.Item[j].accountNumber<>DeletedNamesList.GetTag(i)) then begin + If FPCAbstractMem.AccountsNames.FindByName(DeletedNamesList.Get(i).ToString,Laninfo) then begin + if Laninfo.accountNumber<>DeletedNamesList.GetTag(i) then begin // ERROR: It has been deleted, why is found with another account??? - TLog.NewLog(lterror,ClassName,Format('ERROR DEV 20180319-2 Name %s found at account:%d <> saved account:%d',[DeletedNamesList.Get(i).ToPrintable,DeletedNamesList.GetTag(i),FPCAbstractMem.AccountsNames.Item[j].accountNumber])); + TLog.NewLog(lterror,ClassName,Format('ERROR DEV 20180319-2 Name %s found at account:%d <> saved account:%d',[DeletedNamesList.Get(i).ToPrintable,DeletedNamesList.GetTag(i),Laninfo.accountNumber])); end; end; // Add with Info of previous account with name (saved at Tag value) - FPCAbstractMem.AccountsNames.Add(DeletedNamesList.Get(i).ToString,DeletedNamesList.GetTag(i)); + FPCAbstractMem.AccountsNames.AddNameAndNumber(DeletedNamesList.Get(i).ToString,DeletedNamesList.GetTag(i)); {$ELSE} // It has been deleted, we MUST NOT FIND on current names list If FOrderedByName.Find(DeletedNamesList.Get(i),j) then begin @@ -3345,6 +3507,13 @@ function TPCSafeBox.DoUpgradeToProtocol5: Boolean; TLog.NewLog(ltInfo,ClassName,'End Upgraded to protocol 5 - New safeboxhash:'+TCrypto.ToHexaString(FSafeBoxHash)); end; +function TPCSafeBox.DoUpgradeToProtocol6: Boolean; +begin + FCurrentProtocol := CT_PROTOCOL_6; + Result := True; + TLog.NewLog(ltInfo,ClassName,'End Upgraded to protocol 6 - New safeboxhash:'+TCrypto.ToHexaString(FSafeBoxHash)); +end; + function TPCSafeBox.BufferBlocksHash: TBytesBuffer32Safebox; begin {$IFnDEF USE_ABSTRACTMEM} @@ -3391,6 +3560,9 @@ function TPCSafeBox.LoadSafeBoxChunkFromStream(Stream : TStream; checkAll : Bool tc := TPlatform.GetTickCount; StartThreadSafe; try + {$IFDEF USE_ABSTRACTMEM} + FPCAbstractMem.SavingNewSafeboxMode := True; + {$ENDIF} LStartTickCount := tc; // Read Header info If not LoadSafeBoxStreamHeader(Stream,sbHeader) then begin @@ -3405,7 +3577,7 @@ function TPCSafeBox.LoadSafeBoxChunkFromStream(Stream : TStream; checkAll : Bool if sbHeader.blocksCountCT_PROTOCOL_MAX then begin + errors := 'Invalid protocol version or corrupted stream ('+IntToStr(sbHeader.protocol)+')'; + exit; + end else FCurrentProtocol := sbHeader.protocol; end; if sbHeader.IsAChunk then begin if (sbHeader.startBlock<>BlocksCount) then begin @@ -3500,16 +3674,16 @@ function TPCSafeBox.LoadSafeBoxChunkFromStream(Stream : TStream; checkAll : Bool // // check valid If (Length(LBlock.accounts[iacc].name)>0) then begin - if Not TPCSafeBox.ValidAccountName(LBlock.accounts[iacc].name,aux_errors) then begin + if Not TPascalCoinProtocol.IsValidAccountName(CurrentProtocol,LBlock.accounts[iacc].name,aux_errors) then begin errors := errors + ' > Invalid name "'+LBlock.accounts[iacc].name.ToPrintable+'": '+aux_errors; Exit; end; {$IFDEF USE_ABSTRACTMEM} - if FPCAbstractMem.AccountsNames.IndexOf( LBlock.accounts[iacc].name.ToString )>=0 then begin + if FPCAbstractMem.AccountsNames.FindByName(LBlock.accounts[iacc].name.ToString ) then begin errors := errors + ' Duplicate name "'+LBlock.accounts[iacc].name.ToPrintable+'"'; Exit; end; - FPCAbstractMem.AccountsNames.Add(LBlock.accounts[iacc].name.ToString,LBlock.accounts[iacc].account); + FPCAbstractMem.AccountsNames.AddNameAndNumber(LBlock.accounts[iacc].name.ToString,LBlock.accounts[iacc].account); {$ELSE} if FOrderedByName.IndexOf(LBlock.accounts[iacc].name)>=0 then begin errors := errors + ' Duplicate name "'+LBlock.accounts[iacc].name.ToPrintable+'"'; @@ -3546,9 +3720,9 @@ function TPCSafeBox.LoadSafeBoxChunkFromStream(Stream : TStream; checkAll : Bool if ((iblock + (CT_BankToDiskEveryNBlocks * 10)) >= sbHeader.blockscount) then begin {$ENDIF} {$IFDEF ASSUME_VALID_POW_OLD_PROTOCOLS} - LAddToMultiThreadOperationsBlockValidator := (LUseMultiThreadOperationsBlockValidator) and (LBlock.blockchainInfo.protocol_version>=CT_PROTOCOL_5) and (Assigned(LPCOperationsBlockValidator)); + LAddToMultiThreadOperationsBlockValidator := False; {$ELSE} - LAddToMultiThreadOperationsBlockValidator := (LUseMultiThreadOperationsBlockValidator) and (LBlock.blockchainInfo.protocol_version>=CT_PROTOCOL_4) and (Assigned(LPCOperationsBlockValidator)); + LAddToMultiThreadOperationsBlockValidator := (LUseMultiThreadOperationsBlockValidator) and (LBlock.blockchainInfo.protocol_version=CT_PROTOCOL_4) and (Assigned(LPCOperationsBlockValidator)); {$ENDIF} If not IsValidNewOperationsBlock(LBlock.blockchainInfo,False,Not LAddToMultiThreadOperationsBlockValidator,aux_errors) then begin errors := errors + ' > ' + aux_errors; @@ -3594,6 +3768,7 @@ function TPCSafeBox.LoadSafeBoxChunkFromStream(Stream : TStream; checkAll : Bool Exit; end; end; + // Add {$IFDEF USE_ABSTRACTMEM} FPCAbstractMem.SetBlockAccount(LBlock); @@ -3604,6 +3779,17 @@ function TPCSafeBox.LoadSafeBoxChunkFromStream(Stream : TStream; checkAll : Bool // BufferBlocksHash fill with data j := (length(LBlock.block_hash)*(iBlock)); BufferBlocksHash.Replace( j, LBlock.block_hash[0], 32 ); + for j := low(LBlock.accounts) to High(LBlock.accounts) do begin + FAccountsOrderedByUpdatedBlock.Update( + LBlock.accounts[j].account, + 0, + LBlock.accounts[j].updated_on_block_active_mode); + FAccountsOrderedBySalePrice.UpdateAccountBySalePrice( + LBlock.accounts[j].account, + CT_AccountInfo_NUL, + LBlock.accounts[j].accountInfo + ); + end; {$ENDIF} for j := low(LBlock.accounts) to High(LBlock.accounts) do begin AccountKeyListAddAccounts(LBlock.accounts[j].accountInfo.accountKey,[LBlock.accounts[j].account]); @@ -3616,7 +3802,7 @@ function TPCSafeBox.LoadSafeBoxChunkFromStream(Stream : TStream; checkAll : Bool finally LBlockHashRate.Free; end; - // Upgrade to Protocol 4,5... step: + // Upgrade to Protocol 4,5... step:CT_PROTOCOL_5 if (LBlock.blockchainInfo.protocol_version>FCurrentProtocol) then begin if (LBlock.blockchainInfo.protocol_version = CT_PROTOCOL_4) then begin FCurrentProtocol := CT_PROTOCOL_4; @@ -3627,7 +3813,6 @@ function TPCSafeBox.LoadSafeBoxChunkFromStream(Stream : TStream; checkAll : Bool // Assign to previous LPreviousProofOfWork := LBlock.blockchainInfo.proof_of_work; end; // For iBlock ... - if Assigned(LPCOperationsBlockValidator) then begin repeat LPCOperationsBlockValidator.GetStatus(LValidatedOPOk, LValidatedOPError, LValidatedOPPending); @@ -3689,6 +3874,9 @@ function TPCSafeBox.LoadSafeBoxChunkFromStream(Stream : TStream; checkAll : Bool if Not Result then Clear else errors := ''; End; Finally + {$IFDEF USE_ABSTRACTMEM} + FPCAbstractMem.SavingNewSafeboxMode := False; + {$ENDIF} EndThreadSave; end; TLog.NewLog(ltdebug,ClassName,Format('Finalized read Safebox from blocks %d to %d (total %d blocks) in %.2f seconds', @@ -3697,8 +3885,16 @@ function TPCSafeBox.LoadSafeBoxChunkFromStream(Stream : TStream; checkAll : Bool function TPCSafeBox.LoadSafeBoxFromStream(Stream : TStream; checkAll : Boolean; checkSafeboxHash : TRawBytes; progressNotify : TProgressNotify; previousCheckedSafebox : TPCSafebox; var ALastReadBlock : TBlockAccount; var errors : String) : Boolean; +var Ltc : TTickCount; begin + Ltc := TPlatform.GetTickCount; Result := LoadSafeBoxChunkFromStream(Stream,checkAll,checkSafeboxHash,progressNotify,previousCheckedSafebox,ALastReadBlock,errors); + if Result then begin + while LoadSafeBoxChunkFromStream(Stream,checkAll,checkSafeboxHash,progressNotify,previousCheckedSafebox,ALastReadBlock,errors) do begin + TLog.NewLog(ltdebug,ClassName,Format('Loading safebox from stream... %.2f secs',[TPlatform.GetElapsedMilliseconds(Ltc)/1000])); + end; + end; + TLog.NewLog(ltdebug,ClassName,Format('Finalized Loading safebox from stream in %.2f secs',[TPlatform.GetElapsedMilliseconds(Ltc)/1000])); end; function TPCSafeBox.LoadSafeBoxFromStream(Stream: TStream; checkAll: Boolean; var LastReadBlock: TBlockAccount; var errors: String): Boolean; @@ -3708,7 +3904,13 @@ function TPCSafeBox.LoadSafeBoxFromStream(Stream: TStream; checkAll: Boolean; va Result := LoadSafeBoxFromStream(Stream,checkAll,Nil,pn,Nil,LastReadBlock,errors); end; -class function TPCSafeBox.LoadSafeBoxStreamHeader(Stream: TStream; var sbHeader : TPCSafeBoxHeader) : Boolean; +class function TPCSafeBox.LoadSafeBoxStreamHeader(Stream: TStream; var sbHeader: TPCSafeBoxHeader): Boolean; +var LPos : Int64; +begin + Result := LoadSafeBoxStreamHeader(Stream,sbHeader,LPos); +end; + +class function TPCSafeBox.LoadSafeBoxStreamHeader(Stream: TStream; var sbHeader : TPCSafeBoxHeader; out AStreamFinalPos : Int64) : Boolean; // This function reads SafeBox stream info and sets position at offset start zone if valid, otherwise sets position to actual position Var w : Word; raw : TRawBytes; @@ -3724,7 +3926,7 @@ class function TPCSafeBox.LoadSafeBoxStreamHeader(Stream: TStream; var sbHeader if (raw.ToPrintable<>CT_MagicIdentificator) then exit; if Stream.Size<8 then exit; Stream.Read(w,SizeOf(w)); - if not (w in [CT_PROTOCOL_1,CT_PROTOCOL_2,CT_PROTOCOL_3,CT_PROTOCOL_4,CT_PROTOCOL_5]) then exit; + if not (w in [CT_PROTOCOL_1..CT_PROTOCOL_MAX]) then exit; sbHeader.protocol := w; Stream.Read(safeBoxBankVersion,2); if safeBoxBankVersion<>CT_SafeBoxBankVersion then exit; @@ -3741,6 +3943,7 @@ class function TPCSafeBox.LoadSafeBoxStreamHeader(Stream: TStream; var sbHeader If (Stream.SizeCT_PascalCoin_name_max_length) then begin - errors := 'Invalid length:'+IntToStr(Length(new_name))+' (valid from '+Inttostr(CT_PascalCoin_name_max_length)+' to '+IntToStr(CT_PascalCoin_name_max_length)+')'; - Exit; - end; - for i:=Low(new_name) to High(new_name) do begin - if (i=Low(new_name)) then begin - j:=Low(CT_PascalCoin_FirstChar_Charset); - // First char can't start with a number - While (j<=High(CT_PascalCoin_FirstChar_Charset)) and (Ord(new_name[i])<>Ord(CT_PascalCoin_FirstChar_Charset[j])) do inc(j); - if j>High(CT_PascalCoin_FirstChar_Charset) then begin - errors := 'Invalid char '+Char(new_name[i])+' at first pos'; - Exit; // Not found - end; - end else begin - j:=Low(CT_PascalCoin_Base64_Charset); - While (j<=High(CT_PascalCoin_Base64_Charset)) and (Ord(new_name[i])<>Ord(CT_PascalCoin_Base64_Charset[j])) do inc(j); - if j>High(CT_PascalCoin_Base64_Charset) then begin - errors := 'Invalid char '+Char(new_name[i])+' at pos '+IntToStr(i); - Exit; // Not found - end; - end; - end; - Result := True; -end; var _initialSafeboxHash : TRawBytes = Nil; @@ -4220,7 +4386,12 @@ function TPCSafeBox.IsValidNewOperationsBlock(const newOperationBlock: TOperatio errors := 'Invalid PascalCoin protocol version: '+IntToStr( newOperationBlock.protocol_version )+' Current: '+IntToStr(CurrentProtocol)+' Previous:'+IntToStr(lastBlock.protocol_version); exit; end; - If (newOperationBlock.protocol_version=CT_PROTOCOL_5) then begin + If (newOperationBlock.protocol_version=CT_PROTOCOL_6) then begin + If (newOperationBlock.blockCT_PROTOCOL_3)) or ((newOperationBlock.block = CT_Protocol_Upgrade_v4_MinBlock) and (newOperationBlock.protocol_version<>CT_PROTOCOL_4)) or ((newOperationBlock.block = CT_Protocol_Upgrade_v5_MinBlock) and (newOperationBlock.protocol_version<>CT_PROTOCOL_5)) + or ((newOperationBlock.block = CT_Protocol_Upgrade_v6_MinBlock) and (newOperationBlock.protocol_version<>CT_PROTOCOL_6)) then begin errors := Format('In block %d protocol must be upgraded! Current %d',[newOperationBlock.block,newOperationBlock.protocol_version]); exit; @@ -4330,7 +4502,12 @@ class function TPCSafeBox.IsValidOperationBlock(const newOperationBlock: TOperat // fee: Cannot be checked only with the safebox // Checking valid protocol version // protocol available is not checked - if (newOperationBlock.block >= CT_Protocol_Upgrade_v5_MinBlock) then begin + if (newOperationBlock.block >= CT_Protocol_Upgrade_v6_MinBlock) then begin + if Not newOperationBlock.protocol_version = CT_PROTOCOL_6 then begin + errors := Format('Invalid protocol version at block %d Found:%d Expected:%d',[newOperationBlock.block,newOperationBlock.protocol_version,CT_PROTOCOL_6]); + exit; + end; + end else if (newOperationBlock.block >= CT_Protocol_Upgrade_v5_MinBlock) then begin if Not newOperationBlock.protocol_version = CT_PROTOCOL_5 then begin errors := Format('Invalid protocol version at block %d Found:%d Expected:%d',[newOperationBlock.block,newOperationBlock.protocol_version,CT_PROTOCOL_5]); exit; @@ -4418,9 +4595,9 @@ function TPCSafeBox.GetActualTargetHash(protocolVersion : Word): TRawBytes; tsReal := (ts1 - ts2); If (protocolVersion=CT_PROTOCOL_1) then begin Result := TPascalCoinProtocol.GetNewTarget(tsTeorical, tsReal,protocolVersion,False,TPascalCoinProtocol.TargetFromCompact(lastBlock.compact_target,lastBlock.protocol_version)); - end else if (protocolVersion<=CT_PROTOCOL_5) then begin + end else if (protocolVersion<=CT_PROTOCOL_MAX) then begin CalcBack := CalcBack DIV CT_CalcNewTargetLimitChange_SPLIT; - If CalcBack=0 then CalcBack := 1; + If CalcBack<=0 then CalcBack := 1; ts2 := GetBlockInfo(BlocksCount-CalcBack-1).timestamp; tsTeoricalStop := (CalcBack * CT_NewLineSecondsAvg); tsRealStop := (ts1 - ts2); @@ -4443,7 +4620,7 @@ function TPCSafeBox.GetActualTargetHash(protocolVersion : Word): TRawBytes; end; end; end else begin - Raise Exception.Create('ERROR DEV 20180306-1 Protocol not valid'); + Raise Exception.Create('ERROR DEV 20180306-1 Protocol not valid: '+IntToStr(protocolVersion)); end; end; end; @@ -4497,11 +4674,11 @@ function TPCSafeBox.GetBlockInfo(ABlockNumber: Cardinal): TOperationBlock; If (Assigned(FPreviousSafeBox)) then begin if (ABlockNumber<0) Or (ABlockNumber>=BlocksCount) then raise Exception.Create('Invalid block number for GetBlockInfo chain: '+inttostr(ABlockNumber)+' max: '+IntToStr(BlocksCount-1)); SearchBlockWhenOnSeparatedChain(ABlockNumber,LBlock); - Result := LBlock.blockchainInfo; + Result := LBlock.blockchainInfo.GetCopy; end else begin {$IFDEF USE_ABSTRACTMEM} if (ABlockNumber<0) Or (ABlockNumber>=FPCAbstractMem.BlocksCount) then raise Exception.Create('Invalid GetBlockInfo block number: '+inttostr(ABlockNumber)+' max: '+IntToStr(FPCAbstractMem.BlocksCount-1)); - Result := FPCAbstractMem.GetBlockInfo(ABlockNumber).operationBlock; + Result := FPCAbstractMem.GetBlockInfo(ABlockNumber).operationBlock.GetCopy; {$ELSE} if (ABlockNumber<0) Or (ABlockNumber>=FBlockAccountsList.Count) then raise Exception.Create('Invalid GetBlockInfo block number: '+inttostr(ABlockNumber)+' max: '+IntToStr(FBlockAccountsList.Count-1)); ToTBlockAccount(PBlockAccount(FBlockAccountsList.Items[ABlockNumber])^,ABlockNumber,LBlock); @@ -4513,6 +4690,12 @@ function TPCSafeBox.GetBlockInfo(ABlockNumber: Cardinal): TOperationBlock; end; end; +function TPCSafeBox.GetAccount(AAccountNumber: Integer; var AAccount: TAccount): Boolean; +begin + AAccount := Account(AAccountNumber).GetCopy; + Result := True; +end; + function TPCSafeBox.GetActualCompactTargetHash(protocolVersion : Word): Cardinal; begin Result := TPascalCoinProtocol.TargetToCompact(GetActualTargetHash(protocolVersion),protocolVersion); @@ -4526,10 +4709,13 @@ function TPCSafeBox.FindAccountByName(const aName: String): Integer; function TPCSafeBox.FindAccountByName(const aName: TRawBytes): Integer; Var i,j,k : Integer; Psnapshot : PSafeboxSnapshot; + {$IFDEF USE_ABSTRACTMEM} + Laninfo : TAccountNameInfo; + {$ENDIF} begin {$IFDEF USE_ABSTRACTMEM} - i := FPCAbstractMem.AccountsNames.IndexOf(aName.ToString); - if i>=0 then Result := FPCAbstractMem.AccountsNames.Item[i].accountNumber + if FPCAbstractMem.AccountsNames.FindByName(aName.ToString,Laninfo) then + Result := Laninfo.accountNumber {$ELSE} i := FOrderedByName.IndexOf(aName); if i>=0 then Result := FOrderedByName.GetTag(i) @@ -4584,26 +4770,24 @@ function TPCSafeBox.FindAccountByName(const aName: TRawBytes): Integer; function TPCSafeBox.FindAccountsStartingByName(const AStartName: TRawBytes; const ARawList: TOrderedRawList; const AMax: Integer = 0): Integer; -var LIndex : Integer; +var LRaw : TRawBytes; - LStartNameString : String; + {$IFDEF USE_ABSTRACTMEM} + Laninfo : TAccountNameInfo; + {$ELSE} + LIndex : Integer; + {$ENDIF} begin ARawList.Clear; StartThreadSafe; try {$IFDEF USE_ABSTRACTMEM} - if FPCAbstractMem.AccountsNames.FindByName(AStartName.ToString,LIndex) then begin - LRaw.FromString(FPCAbstractMem.AccountsNames.Item[LIndex].accountName); - ARawList.Add( LRaw, FPCAbstractMem.AccountsNames.Item[LIndex].accountNumber ); - inc(LIndex); - end; - LStartNameString := AStartName.ToString; - while (LIndexARawList.Count)) // AMax <=0 inifinte results - do begin - LRaw.FromString( FPCAbstractMem.AccountsNames.Item[LIndex].accountName ); - ARawList.Add( LRaw, FPCAbstractMem.AccountsNames.Item[LIndex].accountNumber ); - inc(LIndex); + FPCAbstractMem.AccountsNames.FindByName(AStartName.ToString,Laninfo); + while (Laninfo.accountName.StartsWith(AStartName.ToString)) + and ((AMax<=0) or (AMax>ARawList.Count)) do begin + LRaw.FromString(Laninfo.accountName); + ARawList.Add( LRaw, Laninfo.accountNumber ); + if not FPCAbstractMem.AccountsNames.FindDataSuccessor(Laninfo,Laninfo) then Break; end; {$ELSE} if FOrderedByName.Find(AStartName,LIndex) then begin @@ -4680,6 +4864,8 @@ procedure TPCSafeBox.UpdateAccount(account_number : Cardinal; const newAccountIn blockAccount : TBlockAccount; {$IFnDEF USE_ABSTRACTMEM} Pblock : PBlockAccount; + {$ELSE} + Laninfo : TAccountNameInfo; {$ENDIF} begin iBlock := account_number DIV CT_AccountsPerBlock; @@ -4693,6 +4879,16 @@ procedure TPCSafeBox.UpdateAccount(account_number : Cardinal; const newAccountIn end else begin Pblock := FBlockAccountsList.Items[iBlock]; end; + FAccountsOrderedByUpdatedBlock.Update( + account_number, + blockAccount.accounts[iAccount].updated_on_block_active_mode, + newUpdated_block_active_mode + ); + FAccountsOrderedBySalePrice.UpdateAccountBySalePrice( + account_number, + blockAccount.accounts[iAccount].accountInfo, + newAccountInfo + ); {$ENDIF} if (NOT TAccountComp.EqualAccountKeys(blockAccount.accounts[iAccount].accountInfo.accountKey,newAccountInfo.accountKey)) then begin @@ -4723,16 +4919,15 @@ procedure TPCSafeBox.UpdateAccount(account_number : Cardinal; const newAccountIn If Length(blockAccount.accounts[iAccount].name)>0 then begin {$IFDEF USE_ABSTRACTMEM} - i := FPCAbstractMem.AccountsNames.IndexOf(blockAccount.accounts[iAccount].name.ToString); - if i<0 then begin + if Not FPCAbstractMem.AccountsNames.FindByName(blockAccount.accounts[iAccount].name.ToString,Laninfo) then begin If (Not Assigned(FPreviousSafeBox)) then begin TLog.NewLog(ltError,ClassName,'ERROR DEV 20170606-1 Name "'+blockAccount.accounts[iAccount].name.ToPrintable+'" not found for delete on account '+IntToStr(account_number)); end; end else begin - If (FPCAbstractMem.AccountsNames.Item[i].accountNumber<>account_number) then begin - TLog.NewLog(ltError,ClassName,'ERROR DEV 20170606-3 Name "'+blockAccount.accounts[iAccount].name.ToPrintable+'" not found for delete at suposed account '+IntToStr(account_number)+' found at '+IntToStr(FPCAbstractMem.AccountsNames.Item[i].accountNumber)+' '+FPCAbstractMem.AccountsNames.Item[i].accountName); + If (Laninfo.accountNumber<>account_number) then begin + TLog.NewLog(ltError,ClassName,'ERROR DEV 20170606-3 Name "'+blockAccount.accounts[iAccount].name.ToPrintable+'" not found for delete at suposed account '+IntToStr(account_number)+' found at '+IntToStr(Laninfo.accountNumber)+' '+Laninfo.accountName); end; - FPCAbstractMem.AccountsNames.Delete(i); + FPCAbstractMem.AccountsNames.DeleteData(Laninfo); end; {$ELSE} i := FOrderedByName.IndexOf(blockAccount.accounts[iAccount].name); @@ -4753,11 +4948,11 @@ procedure TPCSafeBox.UpdateAccount(account_number : Cardinal; const newAccountIn If (iDeleted<0) then begin If (iAdded<0) then begin - {$IFDEF HIGHLOG}TLog.NewLog(ltdebug,ClassName,Format('Deleted from PREVIOUS snapshot name:%s at account:%d',[blockAccount.accounts[iAccount].name,account_number]));{$ENDIF} + {$IFDEF HIGHLOG}TLog.NewLog(ltdebug,ClassName,Format('Deleted from PREVIOUS snapshot name:%s at account:%d',[blockAccount.accounts[iAccount].name.ToPrintable,account_number]));{$ENDIF} FDeletedNamesSincePreviousSafebox.Add(blockAccount.accounts[iAccount].name,account_number); // Very important to store account_number in order to restore a snapshot! end else begin // Was added, so delete from added - {$IFDEF HIGHLOG}TLog.NewLog(ltdebug,ClassName,Format('Deleted from current snapshot name:%s at account:%d',[blockAccount.accounts[iAccount].name,account_number]));{$ENDIF} + {$IFDEF HIGHLOG}TLog.NewLog(ltdebug,ClassName,Format('Deleted from current snapshot name:%s at account:%d',[blockAccount.accounts[iAccount].name.ToPrintable,account_number]));{$ENDIF} FAddedNamesSincePreviousSafebox.Delete(iAdded); end; end else begin @@ -4770,9 +4965,11 @@ procedure TPCSafeBox.UpdateAccount(account_number : Cardinal; const newAccountIn blockAccount.accounts[iAccount].name:=newName; If Length(blockAccount.accounts[iAccount].name)>0 then begin {$IFDEF USE_ABSTRACTMEM} - i := FPCAbstractMem.AccountsNames.IndexOf(blockAccount.accounts[iAccount].name.ToString); - if i>=0 then TLog.NewLog(ltError,ClassName,'ERROR DEV 20170606-2 New Name "'+blockAccount.accounts[iAccount].name.ToPrintable+'" for account '+IntToStr(account_number)+' found at account '+IntToStr(FPCAbstractMem.AccountsNames.Item[i].accountNumber)); - FPCAbstractMem.AccountsNames.Add(blockAccount.accounts[iAccount].name.ToString,account_number); + if FPCAbstractMem.AccountsNames.FindByName(blockAccount.accounts[iAccount].name.ToString,Laninfo) then begin + TLog.NewLog(ltError,ClassName,'ERROR DEV 20170606-2 New Name "'+blockAccount.accounts[iAccount].name.ToPrintable+'" for account '+IntToStr(account_number)+' found at account '+IntToStr(Laninfo.accountNumber)); + FPCAbstractMem.AccountsNames.DeleteData(Laninfo); + end; + FPCAbstractMem.AccountsNames.AddNameAndNumber(blockAccount.accounts[iAccount].name.ToString,account_number); {$ELSE} i := FOrderedByName.IndexOf(blockAccount.accounts[iAccount].name); if i>=0 then TLog.NewLog(ltError,ClassName,'ERROR DEV 20170606-2 New Name "'+blockAccount.accounts[iAccount].name.ToPrintable+'" for account '+IntToStr(account_number)+' found at account '+IntToStr(FOrderedByName.GetTag(i))); @@ -4786,17 +4983,17 @@ procedure TPCSafeBox.UpdateAccount(account_number : Cardinal; const newAccountIn If (iDeleted>=0) Then begin if (FDeletedNamesSincePreviousSafebox.GetTag(iDeleted)=account_number) then begin // Is restoring to initial position, delete from deleted - {$IFDEF HIGHLOG}TLog.NewLog(ltdebug,ClassName,Format('Adding equal to PREVIOUS (DELETING FROM DELETED) snapshot name:%s at account:%d',[blockAccount.accounts[iAccount].name,account_number]));{$ENDIF} + {$IFDEF HIGHLOG}TLog.NewLog(ltdebug,ClassName,Format('Adding equal to PREVIOUS (DELETING FROM DELETED) snapshot name:%s at account:%d',[blockAccount.accounts[iAccount].name.ToPrintable,account_number]));{$ENDIF} FDeletedNamesSincePreviousSafebox.Delete(iDeleted); if iAdded>=0 then FAddedNamesSincePreviousSafebox.Remove(blockAccount.accounts[iAccount].name); end else begin // Was deleted, but now adding to a new account - {$IFDEF HIGHLOG}TLog.NewLog(ltdebug,ClassName,Format('Adding again name:%s to new account account:%d',[blockAccount.accounts[iAccount].name,account_number]));{$ENDIF} + {$IFDEF HIGHLOG}TLog.NewLog(ltdebug,ClassName,Format('Adding again name:%s to new account account:%d',[blockAccount.accounts[iAccount].name.ToPrintable,account_number]));{$ENDIF} FAddedNamesSincePreviousSafebox.Add(blockAccount.accounts[iAccount].name,account_number); end; end else begin // Was not deleted, Add it - {$IFDEF HIGHLOG}TLog.NewLog(ltdebug,ClassName,Format('Adding first time at this snapshot name:%s at account:%d',[blockAccount.accounts[iAccount].name,account_number]));{$ENDIF} + {$IFDEF HIGHLOG}TLog.NewLog(ltdebug,ClassName,Format('Adding first time at this snapshot name:%s at account:%d',[blockAccount.accounts[iAccount].name.ToPrintable,account_number]));{$ENDIF} FAddedNamesSincePreviousSafebox.Add(blockAccount.accounts[iAccount].name,account_number); end; end; @@ -5079,6 +5276,15 @@ function TPCSafeBoxTransaction.Commit(const operationBlock: TOperationBlock; end; end; end; + if (FFreezedAccounts.FCurrentProtocol0 then begin - If Not TPCSafeBox.ValidAccountName(newName,errors) then begin + If Not TPascalCoinProtocol.IsValidAccountName(FreezedSafeBox.CurrentProtocol,newName,errors) then begin errors := 'Invalid account name "'+newName.ToPrintable+'" length:'+IntToStr(length(newName))+': '+errors; Exit; end; diff --git a/src/core/UBaseTypes.pas b/src/core/UBaseTypes.pas index f2e8020dd..2b3fe1398 100644 --- a/src/core/UBaseTypes.pas +++ b/src/core/UBaseTypes.pas @@ -98,13 +98,16 @@ TRawBytesHelper = record helper for TRawBytes function Replace(startPos : Integer; const buffer : TBytes) : Integer; overload; function Replace(startPos : Integer; const buffer; bufferSize : Integer) : Integer; overload; property DefaultIncrement : Integer read FDefaultIncrement write SetDefaultIncrement; - function Compare(ABytesBuffer : TBytesBuffer) : Integer; + function Compare(ABytesBuffer : TBytesBuffer) : Integer; overload; + function Compare(AStream : TStream) : Integer; overload; procedure SetLength(ANewLength : Integer); function Memory : Pointer; function MemoryLength : Integer; procedure Clear; procedure CopyFrom(ABytesBuffer : TBytesBuffer); function Capture(AStartPos, ALength : Integer) : TBytes; + procedure SaveToStream(AStream : TStream); + procedure LoadFromStream(AStream : TStream); end; @@ -215,7 +218,8 @@ function TRawBytesHelper.FromSerialized(const ASerialized: TBytes; ACheckLength Move(ASerialized[0],Lsize,2); if (2 + Lsize > Length(ASerialized)) then Exit(False); SetLength(Self,Lsize); - Move(ASerialized[2],Self[0],Lsize); + if Lsize>0 then + Move(ASerialized[2],Self[0],Lsize); Result := True; end; @@ -624,10 +628,15 @@ procedure TBytesBuffer.IncreaseSize(newSize: Integer); end; end; +procedure TBytesBuffer.SaveToStream(AStream: TStream); +begin + AStream.Write(FBytes[0],Self.Length); +end; + procedure TBytesBuffer.SetDefaultIncrement(AValue: Integer); begin if AValue<=0 then FDefaultIncrement:=1024 - else if AValue>(1024*1024) then FDefaultIncrement := 1024*1024 + else if AValue>(100*1024*1024) then FDefaultIncrement := (100*1024*1024) else FDefaultIncrement:=AValue; end; @@ -690,6 +699,18 @@ function TBytesBuffer.Compare(ABytesBuffer: TBytesBuffer): Integer; end; end; +function TBytesBuffer.Compare(AStream: TStream): Integer; +var Lbb : TBytesBuffer; +begin + Lbb := TBytesBuffer.Create(DefaultIncrement); + try + Lbb.LoadFromStream(AStream); + Result := Compare(Lbb); + finally + Lbb.Free; + end; +end; + procedure TBytesBuffer.CopyFrom(ABytesBuffer: TBytesBuffer); begin System.SetLength(FBytes,System.Length(ABytesBuffer.FBytes)); @@ -725,6 +746,14 @@ function TBytesBuffer.Length: Integer; Result := FUsedBytes; end; +procedure TBytesBuffer.LoadFromStream(AStream: TStream); +begin + AStream.Position := 0; + IncreaseSize(Self.Length + AStream.Size); + AStream.Read(FBytes[FUsedBytes],AStream.Size); + SetLength(Self.Length + AStream.Size); +end; + function TBytesBuffer.Memory: Pointer; begin Result := addr(FBytes[0]); diff --git a/src/core/UBlockChain.pas b/src/core/UBlockChain.pas index be1d1ce4a..65da5bd76 100644 --- a/src/core/UBlockChain.pas +++ b/src/core/UBlockChain.pas @@ -25,10 +25,10 @@ interface uses - Classes, UCrypto, UAccounts, ULog, UThread, SyncObjs, UBaseTypes, SysUtils, + Classes,{$IFnDEF FPC}Windows,{$ENDIF}UCrypto, UAccounts, ULog, UThread, SyncObjs, UBaseTypes, SysUtils, {$IFNDEF FPC}System.Generics.Collections{$ELSE}Generics.Collections{$ENDIF}, {$IFDEF USE_ABSTRACTMEM}UPCAbstractMem,{$ENDIF} - UPCDataTypes, UChunk; + UPCDataTypes, UChunk, UOrderedList; { @@ -113,6 +113,7 @@ interface } Type + TSearchOpHashResult = (OpHash_found, OpHash_invalid_params, OpHash_block_not_found); // Moved from UOpTransaction to here TOpChangeAccountInfoType = (public_key, account_name, account_type, list_for_public_sale, list_for_private_sale, delist, account_data, list_for_account_swap, list_for_coin_swap ); TOpChangeAccountInfoTypes = Set of TOpChangeAccountInfoType; @@ -188,6 +189,7 @@ TMultiOpData = record Balance : Int64; OriginalPayload : TOperationPayload; PrintablePayload : String; + DecodedEPasaPayload : String; OperationHash : TRawBytes; OperationHash_OLD : TRawBytes; // Will include old oeration hash value errors : String; @@ -203,19 +205,8 @@ TMultiOpData = record TPCOperation = Class; TPCOperationClass = Class of TPCOperation; - TOperationsResumeList = Class - private - FList : TPCThreadList; - function GetOperationResume(index: Integer): TOperationResume; - public - Constructor Create; - Destructor Destroy; override; - Procedure Add(Const OperationResume : TOperationResume); - Function Count : Integer; - Procedure Delete(index : Integer); - Procedure Clear; - Property OperationResume[index : Integer] : TOperationResume read GetOperationResume; default; - End; + + TOperationsResumeList = TList; TOpReference = UInt64; TOpReferenceArray = Array of TopReference; @@ -223,6 +214,10 @@ TMultiOpData = record { TPCOperation } TPCOperation = Class + private + FResendOnBlock: Integer; + FDiscoveredOnBlock: Integer; + FResendCount: Integer; Protected FProtocolVersion : Word; FHasValidSignature : Boolean; @@ -243,7 +238,7 @@ TMultiOpData = record property ProtocolVersion : Word read FProtocolVersion; function GetBufferForOpHash(UseProtocolV2 : Boolean): TRawBytes; virtual; function DoOperation(AccountPreviousUpdatedBlock : TAccountPreviousBlockInfo; AccountTransaction : TPCSafeBoxTransaction; var errors: String): Boolean; virtual; abstract; - procedure AffectedAccounts(list : TList); virtual; abstract; + procedure AffectedAccounts(list : TOrderedList); virtual; abstract; class function OpType: Byte; virtual; abstract; Class Function OperationToOperationResume(Block : Cardinal; Operation : TPCOperation; getInfoForAllAccounts : Boolean; Affected_account_number : Cardinal; var OperationResume : TOperationResume) : Boolean; virtual; Function GetDigestToSign : TRawBytes; virtual; abstract; @@ -274,6 +269,7 @@ TMultiOpData = record class function OperationHashAsHexa(const operationHash : TRawBytes) : String; class function GetOpReferenceAccount(const opReference : TOpReference) : Cardinal; class function GetOpReferenceN_Operation(const opReference : TOpReference) : Cardinal; + class function CreateOperationFromStream(AStream : TStream; var AOperation : TPCOperation) : Boolean; function Sha256 : TRawBytes; function RipeMD160 : TRawBytes; function GetOpReference : TOpReference; @@ -284,6 +280,9 @@ TMultiOpData = record class function GetOperationFromStreamData(AUseV5EncodeStyle : Boolean; ACurrentProtocol: word; StreamData : TBytes) : TPCOperation; // function IsValidSignatureBasedOnCurrentSafeboxState(ASafeBoxTransaction : TPCSafeBoxTransaction) : Boolean; virtual; abstract; + property DiscoveredOnBlock : Integer read FDiscoveredOnBlock write FDiscoveredOnBlock; + property ResendOnBlock : Integer read FResendOnBlock write FResendOnBlock; + property ResendCount : Integer read FResendCount write FResendCount; End; TPCOperationStorage = Record @@ -336,6 +335,7 @@ TMultiOpData = record FTotalAmount : Int64; FTotalFee : Int64; FMax0feeOperationsBySigner : Integer; + FHasOpRecoverOperations : Boolean; function InternalCanAddOperationToHashTree(lockedThreadList : TList; op : TPCOperation) : Boolean; function InternalAddOperationToHashTree(list : TList; op : TPCOperation; CalcNewHashTree : Boolean) : Boolean; Function FindOrderedByOpReference(lockedThreadList : TList; const Value: TOpReference; var Index: Integer): Boolean; @@ -357,7 +357,8 @@ TMultiOpData = record Property TotalAmount : Int64 read FTotalAmount; Property TotalFee : Int64 read FTotalFee; function SaveOperationsHashTreeToStream(AStream: TStream; ASaveToStorage : Boolean): Boolean; - function LoadOperationsHashTreeFromStream(AStream: TStream; ALoadingFromStorage : Boolean; ASetOperationsToProtocolVersion : Word; ALoadFromStorageVersion : Word; APreviousUpdatedBlocks : TAccountPreviousBlockInfo; var AErrors : String): Boolean; + function LoadOperationsHashTreeFromStream(AStream: TStream; ALoadingFromStorage : Boolean; ASetOperationsToProtocolVersion : Word; ALoadFromStorageVersion : Word; APreviousUpdatedBlocks : TAccountPreviousBlockInfo; var AErrors : String): Boolean; overload; + function LoadOperationsHashTreeFromStream(AStream: TStream; ALoadingFromStorage : Boolean; ASetOperationsToProtocolVersion : Word; ALoadFromStorageVersion : Word; APreviousUpdatedBlocks : TAccountPreviousBlockInfo; AAllow0FeeOperations : Boolean; var AOperationsCount, AProcessedCount : Integer; var AErrors : String): Boolean; overload; function IndexOfOperation(op : TPCOperation) : Integer; function CountOperationsBySameSignerWithoutFee(account_number : Cardinal) : Integer; Procedure Delete(index : Integer); @@ -366,7 +367,7 @@ TMultiOpData = record Property OnChanged : TNotifyEvent read FOnChanged write FOnChanged; Property Max0feeOperationsBySigner : Integer Read FMax0feeOperationsBySigner write SetMax0feeOperationsBySigner; procedure MarkVerifiedECDSASignatures(operationsHashTreeToMark : TOperationsHashTree); - + Property HasOpRecoverOperations : Boolean read FHasOpRecoverOperations; // Will add all operations of the HashTree to then end of AList without removing previous objects function GetOperationsList(AList : TList; AAddOnlyOperationsWithoutNotVerifiedSignature : Boolean) : Integer; End; @@ -417,8 +418,10 @@ TMultiOpData = record Procedure Clear(DeleteOperations : Boolean); Function Count: Integer; Property OperationBlock: TOperationBlock read FOperationBlock; + procedure SetOperationBlock(const ANewValues : TOperationBlock); // For testing purposes only Class Function OperationBlockToText(const OperationBlock: TOperationBlock) : String; Class Function SaveOperationBlockToStream(Const OperationBlock: TOperationBlock; Stream: TStream) : Boolean; + class Function LoadOperationBlockFromStream(AStream : TStream; var Asoob : Byte; var AOperationBlock : TOperationBlock) : Boolean; Property AccountKey: TAccountKey read GetAccountKey write SetAccountKey; Property nonce: Cardinal read GetnOnce write SetnOnce; Property timestamp: Cardinal read Gettimestamp write Settimestamp; @@ -431,6 +434,7 @@ TMultiOpData = record function LoadBlockFromStream(Stream: TStream; var errors: String): Boolean; // Function GetMinerRewardPseudoOperation : TOperationResume; + Function AddMinerRecover(LRecoverAccounts: TAccountList; const ANewAccountKey : TAccountKey) : Boolean; Function ValidateOperationBlock(var errors : String) : Boolean; Property IsOnlyOperationBlock : Boolean read FIsOnlyOperationBlock; Procedure Lock; @@ -481,50 +485,54 @@ TMultiOpData = record TStorage = Class(TComponent) private - FOrphan: TOrphan; FBank : TPCBank; FReadOnly: Boolean; + FPendingBufferOperationsStream : TFileStream; procedure SetBank(const Value: TPCBank); + Function GetPendingBufferOperationsStream : TFileStream; protected FIsMovingBlockchain : Boolean; - procedure SetOrphan(const Value: TOrphan); virtual; + FStorageFilename: String; procedure SetReadOnly(const Value: Boolean); virtual; Function DoLoadBlockChain(Operations : TPCOperationsComp; Block : Cardinal) : Boolean; virtual; abstract; Function DoSaveBlockChain(Operations : TPCOperationsComp) : Boolean; virtual; abstract; - Function DoMoveBlockChain(StartBlock : Cardinal; Const DestOrphan : TOrphan; DestStorage : TStorage) : Boolean; virtual; abstract; - Function DoSaveBank : Boolean; virtual; abstract; - Function DoRestoreBank(max_block : Int64; restoreProgressNotify : TProgressNotify) : Boolean; virtual; abstract; + Function DoMoveBlockChain(StartBlock : Cardinal; Const DestOrphan : TOrphan) : Boolean; virtual; abstract; Procedure DoDeleteBlockChainBlocks(StartingDeleteBlock : Cardinal); virtual; abstract; Function DoBlockExists(Block : Cardinal) : Boolean; virtual; abstract; function GetFirstBlockNumber: Int64; virtual; abstract; function GetLastBlockNumber: Int64; virtual; abstract; function DoInitialize:Boolean; virtual; abstract; - Function DoOpenSafeBoxCheckpoint(blockCount : Cardinal) : TCheckPointStruct; virtual; abstract; Procedure DoEraseStorage; virtual; abstract; - Procedure DoSavePendingBufferOperations(OperationsHashTree : TOperationsHashTree); virtual; abstract; - Procedure DoLoadPendingBufferOperations(OperationsHashTree : TOperationsHashTree); virtual; abstract; + Procedure DoSavePendingBufferOperations(OperationsHashTree : TOperationsHashTree); virtual; + Procedure DoLoadPendingBufferOperations(OperationsHashTree : TOperationsHashTree); virtual; + Function DoGetBlockInformation(const ABlock : Integer; var AOperationBlock : TOperationBlock; var AOperationsCount : Integer; var AVolume : Int64) : Boolean; virtual; + Function DoGetBlockOperations(ABlock, AOpBlockStartIndex, AMaxOperations : Integer; var AOperationBlock : TOperationBlock; var AOperationsCount : Integer; var AVolume : Int64; const AOperationsResumeList:TOperationsResumeList) : Boolean; virtual; + Function DoGetAccountOperations(AAccount : Integer; AMaxDepth, AStartOperation, AMaxOperations, ASearchBackwardsStartingAtBlock: Integer; const AOperationsResumeList:TOperationsResumeList): Boolean; virtual; + function DoFindOperation(const AOpHash : TBytes; var AOperationResume : TOperationResume) : TSearchOpHashResult; virtual; public Function LoadBlockChainBlock(Operations : TPCOperationsComp; Block : Cardinal) : Boolean; Function SaveBlockChainBlock(Operations : TPCOperationsComp) : Boolean; Function MoveBlockChainBlocks(StartBlock : Cardinal; Const DestOrphan : TOrphan; DestStorage : TStorage) : Boolean; Procedure DeleteBlockChainBlocks(StartingDeleteBlock : Cardinal); - Function SaveBank(forceSave : Boolean) : Boolean; - Function RestoreBank(max_block : Int64; restoreProgressNotify : TProgressNotify = Nil) : Boolean; Constructor Create(AOwner : TComponent); Override; - Property Orphan : TOrphan read FOrphan write SetOrphan; + Destructor Destroy; override; Property ReadOnly : Boolean read FReadOnly write SetReadOnly; Property Bank : TPCBank read FBank write SetBank; Procedure CopyConfiguration(Const CopyFrom : TStorage); virtual; Property FirstBlock : Int64 read GetFirstBlockNumber; Property LastBlock : Int64 read GetLastBlockNumber; Function Initialize : Boolean; - Function OpenSafeBoxCheckpoint(blockCount : Cardinal) : TCheckPointStruct; - Function HasUpgradedToVersion2 : Boolean; virtual; abstract; - Procedure CleanupVersion1Data; virtual; abstract; Procedure EraseStorage; // Erase Blockchain storage Procedure SavePendingBufferOperations(OperationsHashTree : TOperationsHashTree); Procedure LoadPendingBufferOperations(OperationsHashTree : TOperationsHashTree); Function BlockExists(Block : Cardinal) : Boolean; + + function Orphan : String; + Function GetBlockInformation(ABlock : Integer; var AOperationBlock : TOperationBlock; var AOperationsCount : Integer; var AVolume : Int64) : Boolean; + Function GetBlockOperations(ABlock, AOpBlockStartIndex, AMaxOperations : Integer; var AOperationBlock : TOperationBlock; var AOperationsCount : Integer; var AVolume : Int64; const AOperationsResumeList:TOperationsResumeList) : Boolean; + Function GetAccountOperations(AAccount : Integer; AMaxDepth, AStartOperation, AMaxOperations, ASearchBackwardsStartingAtBlock: Integer; const AOperationsResumeList:TOperationsResumeList): Boolean; + function FindOperation(const AOpHash : TBytes; var AOperationResume : TOperationResume) : TSearchOpHashResult; + property StorageFilename : String read FStorageFilename write FStorageFilename; End; TStorageClass = Class of TStorage; @@ -538,13 +546,14 @@ TMultiOpData = record FLastBlockCache : TPCOperationsComp; FLastOperationBlock: TOperationBlock; FIsRestoringFromFile: Boolean; - FUpgradingToV2: Boolean; FOnLog: TPCBankLog; FBankLock: TPCCriticalSection; FNotifyList : TList; FStorageClass: TStorageClass; + FOrphan: TOrphan; function GetStorage: TStorage; procedure SetStorageClass(const Value: TStorageClass); + Function DoSaveBank : Boolean; public Constructor Create(AOwner: TComponent); Override; Destructor Destroy; Override; @@ -569,12 +578,21 @@ TMultiOpData = record Property StorageClass : TStorageClass read FStorageClass write SetStorageClass; Function IsReady(Var CurrentProcess : String) : Boolean; Property LastBlockFound : TPCOperationsComp read FLastBlockCache; - Property UpgradingToV2 : Boolean read FUpgradingToV2; + Function OpenSafeBoxCheckpoint(ABlockCount : Cardinal) : TCheckPointStruct; + Class Function GetSafeboxCheckpointingFileName(Const ABaseDataFolder : String; ABlock : Cardinal) : String; + Class Function GetStorageFolder(Const AOrphan : String) : String; + Function RestoreBank(AMax_block : Int64; AOrphan : String; ARestoreProgressNotify : TProgressNotify) : Boolean; + Function LoadBankFileInfo(Const AFilename : String; var ASafeBoxHeader : TPCSafeBoxHeader) : Boolean; + Property Orphan : TOrphan read FOrphan write FOrphan; + Function SaveBank(forceSave : Boolean) : Boolean; + Property IsRestoringFromFile : Boolean read FIsRestoringFromFile; End; Const + CT_Safebox_Extension = {$IFDEF USE_ABSTRACTMEM}'.am_safebox'{$ELSE}'.safebox'{$ENDIF}; + CT_TOperationPayload_NUL : TOperationPayload = (payload_type:0;payload_raw:Nil); - CT_TOperationResume_NUL : TOperationResume = (valid:false;Block:0;NOpInsideBlock:-1;OpType:0;OpSubtype:0;time:0;AffectedAccount:0;SignerAccount:-1;n_operation:0;DestAccount:-1;SellerAccount:-1;newKey:(EC_OpenSSL_NID:0;x:Nil;y:Nil);OperationTxt:'';Amount:0;Fee:0;Balance:0;OriginalPayload:(payload_type:0;payload_raw:nil);PrintablePayload:'';OperationHash:Nil;OperationHash_OLD:Nil;errors:'';isMultiOperation:False;Senders:Nil;Receivers:Nil;changers:Nil); + CT_TOperationResume_NUL : TOperationResume = (valid:false;Block:0;NOpInsideBlock:-1;OpType:0;OpSubtype:0;time:0;AffectedAccount:0;SignerAccount:-1;n_operation:0;DestAccount:-1;SellerAccount:-1;newKey:(EC_OpenSSL_NID:0;x:Nil;y:Nil);OperationTxt:'';Amount:0;Fee:0;Balance:0;OriginalPayload:(payload_type:0;payload_raw:nil);PrintablePayload:'';DecodedEPasaPayload:'';OperationHash:Nil;OperationHash_OLD:Nil;errors:'';isMultiOperation:False;Senders:Nil;Receivers:Nil;changers:Nil); CT_TMultiOpSender_NUL : TMultiOpSender = (Account:0;Amount:0;N_Operation:0;Payload:(payload_type:0;payload_raw:Nil);Signature:(r:Nil;s:Nil)); CT_TMultiOpReceiver_NUL : TMultiOpReceiver = (Account:0;Amount:0;Payload:(payload_type:0;payload_raw:Nil)); CT_TMultiOpChangeInfo_NUL : TMultiOpChangeInfo = (Account:0;N_Operation:0;Changes_type:[];New_Accountkey:(EC_OpenSSL_NID:0;x:Nil;y:Nil);New_Name:Nil;New_Type:0;New_Data:Nil;Seller_Account:-1;Account_Price:-1;Locked_Until_Block:0; @@ -588,7 +606,9 @@ implementation Variants, UTime, UConst, UOpTransaction, UPCOrderedLists, UPCOperationsSignatureValidator, - UPCOperationsBlockValidator; + UPCOperationsBlockValidator, + UAbstractMemBlockchainStorage, + UNode; { TPCOperationsStorage } @@ -896,7 +916,6 @@ constructor TPCBank.Create(AOwner: TComponent); FNotifyList := TList.Create; FLastBlockCache := TPCOperationsComp.Create(Nil); FIsRestoringFromFile:=False; - FUpgradingToV2:=False; Clear; end; @@ -945,7 +964,6 @@ procedure TPCBank.DiskRestoreFromOperations(max_block : Int64; restoreProgressNo LStartProcessTC := tc; TPCThread.ProtectEnterCriticalSection(Self,FBankLock); try - FUpgradingToV2 := NOT Storage.HasUpgradedToVersion2; FIsRestoringFromFile := true; try Clear; @@ -953,7 +971,7 @@ procedure TPCBank.DiskRestoreFromOperations(max_block : Int64; restoreProgressNo If (max_block0) And (SafeBox.CurrentProtocol=CT_PROTOCOL_1) then begin if Not Storage.LoadBlockChainBlock(FLastBlockCache,BlocksCount-1) then begin @@ -969,14 +987,14 @@ procedure TPCBank.DiskRestoreFromOperations(max_block : Int64; restoreProgressNo FLastOperationBlock.initial_safe_box_hash := TPCSafeBox.InitialSafeboxHash; // Genesis hash end; - NewLog(Nil, ltinfo,'Start restoring from disk operations (Max '+inttostr(max_block)+') BlockCount: '+inttostr(BlocksCount)+' Orphan: ' +Storage.Orphan); + NewLog(Nil, ltinfo,'Start restoring from disk operations (Max '+inttostr(max_block)+') BlockCount: '+inttostr(BlocksCount)+' Orphan: ' +Orphan); LBlocks := TList.Create; try LProgressBlock := 0; LProgressEndBlock := Storage.LastBlock - BlocksCount; while ((BlocksCount<=max_block)) do begin i := BlocksCount; - j := i + 99; + j := i + 999; // Load a batch of TPCOperationsComp; try LOpsInBlocks := 0; @@ -1017,9 +1035,8 @@ procedure TPCBank.DiskRestoreFromOperations(max_block : Int64; restoreProgressNo Exit; end else begin // To prevent continuous saving... - if ((BlocksCount+(CT_BankToDiskEveryNBlocks*2)) >= Storage.LastBlock ) or - ((BlocksCount MOD (CT_BankToDiskEveryNBlocks*10))=0) then begin - Storage.SaveBank(False); + if ((BlocksCount MOD (CT_BankToDiskEveryNBlocks*10))=0) then begin + SaveBank(False); end; if (Assigned(restoreProgressNotify)) And (TPlatform.GetElapsedMilliseconds(tc)>1000) then begin tc := TPlatform.GetTickCount; @@ -1039,24 +1056,94 @@ procedure TPCBank.DiskRestoreFromOperations(max_block : Int64; restoreProgressNo finally LBlocks.Free; - if FUpgradingToV2 then Storage.CleanupVersion1Data; - NewLog(Nil, ltinfo,'End restoring from disk operations (Max '+inttostr(max_block)+') Orphan: ' + Storage.Orphan+' Restored '+Inttostr(BlocksCount)+' blocks in '+IntToStr(TPlatform.GetElapsedMilliseconds(LStartProcessTC))+' milliseconds'); + NewLog(Nil, ltinfo,'End restoring from disk operations (Max '+inttostr(max_block)+') Orphan: ' + Orphan+' Restored '+Inttostr(BlocksCount)+' blocks in '+IntToStr(TPlatform.GetElapsedMilliseconds(LStartProcessTC))+' milliseconds'); end; finally FIsRestoringFromFile := False; - FUpgradingToV2 := false; for i := 0 to FNotifyList.Count - 1 do begin TPCBankNotify(FNotifyList.Items[i]).NotifyNewBlock; end; end; - - + {$IFDEF USE_ABSTRACTMEM} + SafeBox.PCAbstractMem.FlushCache; + {$ENDIF} finally FBankLock.Release; end; end; +Procedure DoCopyFile(sourcefn,destfn : AnsiString); +var sourceFS, destFS : TFileStream; +Begin + if Not FileExists(sourcefn) then Raise Exception.Create('Source file not found: '+sourcefn); + sourceFS := TFileStream.Create(sourcefn,fmOpenRead+fmShareDenyNone); + try + sourceFS.Position:=0; + destFS := TFileStream.Create(destfn,fmCreate+fmShareDenyWrite); + try + destFS.Size:=0; + destFS.CopyFrom(sourceFS,sourceFS.Size); + finally + destFS.Free; + end; + finally + sourceFS.Free; + end; +end; + +function TPCBank.DoSaveBank: Boolean; +var fs: TFileStream; + LBankfilename,Laux_newfilename: AnsiString; + ms : TMemoryStream; + LTC : TTickCount; +begin + Result := true; + LBankfilename := GetSafeboxCheckpointingFileName(GetStorageFolder(Orphan),BlocksCount); + if (LBankfilename<>'') then begin + LTC := TPlatform.GetTickCount; + {$IFDEF USE_ABSTRACTMEM} + SafeBox.SaveCheckpointing(LBankfilename); + {$ELSE} + fs := TFileStream.Create(bankfilename,fmCreate); + try + fs.Size := 0; + fs.Position:=0; + if LowMemoryUsage then begin + Bank.SafeBox.SaveSafeBoxToAStream(fs,0,Bank.SafeBox.BlocksCount-1); + end else begin + ms := TMemoryStream.Create; + try + Bank.SafeBox.SaveSafeBoxToAStream(ms,0,Bank.SafeBox.BlocksCount-1); + ms.Position := 0; + fs.CopyFrom(ms,0); + finally + ms.Free; + end; + end; + finally + fs.Free; + end; + {$ENDIF} + TLog.NewLog(ltInfo,ClassName,Format('Saving Safebox blocks:%d file:%s in %.2n seconds',[BlocksCount,LBankfilename,TPlatform.GetElapsedMilliseconds(LTC)/1000])); + // Save a copy each 10000 blocks (aprox 1 month) only when not an orphan + if (Orphan='') And ((BlocksCount MOD (CT_BankToDiskEveryNBlocks*100))=0) then begin + Laux_newfilename := GetStorageFolder('') + PathDelim+'checkpoint_'+ inttostr(BlocksCount)+CT_Safebox_Extension; + try + {$IFDEF FPC} + DoCopyFile(LBankfilename,Laux_newfilename); + {$ELSE} + CopyFile(PWideChar(LBankfilename),PWideChar(Laux_newfilename),False); + {$ENDIF} + Except + On E:Exception do begin + TLog.NewLog(lterror,ClassName,'Exception copying extra safebox file '+Laux_newfilename+' ('+E.ClassName+'):'+E.Message); + end; + end; + end; + end; +end; + procedure TPCBank.UpdateValuesFromSafebox; Var aux : String; i : Integer; @@ -1177,6 +1264,21 @@ function TPCBank.GetTargetSecondsMedian(AFromBlock: Cardinal; ABackBlocks : Inte end; end; +Const CT_SafeboxsToStore = 10; + +class function TPCBank.GetSafeboxCheckpointingFileName( + const ABaseDataFolder: String; ABlock: Cardinal): String; +begin + Result := ''; + If not ForceDirectories(ABaseDataFolder) then exit; + if TPCSafeBox.MustSafeBoxBeSaved(ABlock) then begin + // We will store checkpointing + Result := ABaseDataFolder + PathDelim+'checkpoint'+ inttostr((ABlock DIV CT_BankToDiskEveryNBlocks) MOD CT_SafeboxsToStore)+CT_Safebox_Extension; + end else begin + Result := ABaseDataFolder + PathDelim+'checkpoint_'+inttostr(ABlock)+CT_Safebox_Extension; + end; +end; + function TPCBank.GetStorage: TStorage; begin if Not Assigned(FStorage) then begin @@ -1187,18 +1289,34 @@ function TPCBank.GetStorage: TStorage; Result := FStorage; end; +class function TPCBank.GetStorageFolder(const AOrphan: String): String; +var Lbase : String; +begin + Lbase := TNode.GetPascalCoinDataFolder + PathDelim + 'Data'; + if Lbase = '' then raise Exception.Create('No Database Folder'); + if AOrphan<>'' then Result := Lbase + PathDelim+AOrphan + else Result := Lbase; + if not ForceDirectories(Result) then raise Exception.Create('Cannot create storage folder: '+Result); +end; + function TPCBank.IsReady(var CurrentProcess: String): Boolean; begin Result := false; CurrentProcess := ''; if FIsRestoringFromFile then begin - if FUpgradingToV2 then - CurrentProcess := 'Migrating to version 2 format' - else - CurrentProcess := 'Restoring from file' + CurrentProcess := 'Restoring from file'; end else Result := true; end; +function TPCBank.LoadBankFileInfo(const AFilename: String; + var ASafeBoxHeader: TPCSafeBoxHeader): Boolean; +begin + Result := false; + ASafeBoxHeader := CT_PCSafeBoxHeader_NUL; + If Not FileExists(AFilename) then exit; + Result := TPCSafeboxChunks.GetSafeboxHeaderFromFile(AFilename,ASafeBoxHeader); +end; + function TPCBank.LoadBankFromChunks(AChunks : TPCSafeboxChunks; checkSafeboxHash: TRawBytes; previousCheckedSafebox: TPCSafebox; progressNotify: TProgressNotify; var errors: String): Boolean; @@ -1249,12 +1367,20 @@ function TPCBank.LoadBankFromStream(Stream: TStream; useSecureLoad : Boolean; ch Var LastReadBlock : TBlockAccount; i : Integer; auxSB : TPCSafeBox; + Lucoaml : boolean; + Lmmu : Integer; begin auxSB := Nil; Try If useSecureLoad then begin // When on secure load will load Stream in a separate SafeBox, changing only real SafeBox if successfully auxSB := TPCSafeBox.Create; + {$IFDEF USE_ABSTRACTMEM} + Lucoaml := Self.SafeBox.PCAbstractMem.UseCacheOnAbstractMemLists; + Lmmu := Self.SafeBox.PCAbstractMem.MaxMemUsage; + auxSB.PCAbstractMem.UseCacheOnAbstractMemLists := False; + auxSB.PCAbstractMem.MaxMemUsage := 100 * 1024 * 1024; // 100 Mb + {$ENDIF} Result := auxSB.LoadSafeBoxFromStream(Stream,true,checkSafeboxHash,progressNotify,previousCheckedSafebox,LastReadBlock,errors); If Not Result then Exit; end; @@ -1262,6 +1388,10 @@ function TPCBank.LoadBankFromStream(Stream: TStream; useSecureLoad : Boolean; ch try If Assigned(auxSB) then begin SafeBox.CopyFrom(auxSB); + {$IFDEF USE_ABSTRACTMEM} + Self.SafeBox.PCAbstractMem.UseCacheOnAbstractMemLists := Lucoaml; + Self.SafeBox.PCAbstractMem.MaxMemUsage := Lmmu; + {$ENDIF} end else begin Result := SafeBox.LoadSafeBoxFromStream(Stream,False,checkSafeboxHash,progressNotify,previousCheckedSafebox,LastReadBlock,errors); end; @@ -1308,6 +1438,132 @@ procedure TPCBank.NewLog(Operations: TPCOperationsComp; Logtype: TLogType; const FOnLog(Self, Operations, Logtype, Logtxt); end; +function TPCBank.OpenSafeBoxCheckpoint(ABlockCount: Cardinal): TCheckPointStruct; +var fn : TFilename; + err : AnsiString; +begin + Result := Nil; + fn := GetSafeboxCheckpointingFileName(GetStorageFolder(''),ABlockCount); + If (fn<>'') and (FileExists(fn)) then begin + {$IFDEF USE_ABSTRACTMEM} + Result := TPCAbstractMem.Create(fn,True); + {$ELSE} + Result := TFileStream.Create(fn,fmOpenRead+fmShareDenyWrite); + {$ENDIF} + end; + If Not Assigned(Result) then begin + err := 'Cannot load SafeBoxStream (block:'+IntToStr(ABlockCount)+') file:'+fn; + TLog.NewLog(ltError,ClassName,err); + end; +end; + +function TPCBank.RestoreBank(AMax_block: Int64; AOrphan : String; + ARestoreProgressNotify: TProgressNotify): Boolean; +var + sr: TSearchRec; + FileAttrs: Integer; + folder : AnsiString; + Lfilename,auxfn : AnsiString; + fs : TFileStream; + errors : String; + LBlockscount : Cardinal; + sbHeader, goodSbHeader : TPCSafeBoxHeader; + {$IFDEF USE_ABSTRACTMEM} + LTempBlocksCount : Integer; + LSafeboxFileName : String; + {$ELSE} + {$ENDIF} +begin + FBankLock.Acquire; + Try + {$IFDEF USE_ABSTRACTMEM} + Lfilename := ''; + LSafeboxFileName := GetStorageFolder(AOrphan)+PathDelim+'safebox'+CT_Safebox_Extension; + if TPCAbstractMem.AnalyzeFile(LSafeboxFileName,LTempBlocksCount) then begin + LBlockscount := LTempBlocksCount; + end else begin + LBlockscount := 0; + end; + // + FileAttrs := faArchive; + folder := GetStorageFolder(''); /// Without Orphan folder + if SysUtils.FindFirst(folder+PathDelim+'checkpoint*'+CT_Safebox_Extension, FileAttrs, sr) = 0 then begin + repeat + if (sr.Attr and FileAttrs) = FileAttrs then begin + auxfn := folder+PathDelim+sr.Name; + if TPCAbstractMem.AnalyzeFile(auxfn,LTempBlocksCount) then begin + if (((AMax_block<0) Or (LTempBlocksCount<=AMax_block)) AND (LTempBlocksCount>LBlockscount)) then begin + Lfilename := auxfn; + LBlockscount := LTempBlocksCount; + end; + end; + end; + until FindNext(sr) <> 0; + FindClose(sr); + end; + if (Lfilename='') then begin + SafeBox.SetSafeboxFileName(LSafeboxFileName); + end else begin + SafeBox.SetSafeboxFileName(Lfilename); + SafeBox.UpdateSafeboxFileName(LSafeboxFileName); + end; + {$ELSE} + LBlockscount := 0; + {$ENDIF} + FileAttrs := faArchive; + folder := GetStorageFolder(AOrphan); + Lfilename := ''; + if SysUtils.FindFirst(folder+PathDelim+'*.safebox', FileAttrs, sr) = 0 then begin + repeat + if (sr.Attr and FileAttrs) = FileAttrs then begin + auxfn := folder+PathDelim+sr.Name; + If LoadBankFileInfo(auxfn,sbHeader) then begin + if (((AMax_block<0) Or (sbHeader.endBlock<=AMax_block)) AND (sbHeader.blocksCount>LBlockscount)) And + (sbHeader.startBlock=0) And (sbHeader.endBlock=sbHeader.startBlock+sbHeader.blocksCount-1) then begin + Lfilename := auxfn; + LBlockscount := sbHeader.blocksCount; + goodSbHeader := sbHeader; + end; + end; + end; + until FindNext(sr) <> 0; + FindClose(sr); + end; + if (Lfilename<>'') then begin + TLog.NewLog(ltinfo,Self.ClassName,'Loading SafeBox protocol:'+IntToStr(goodSbHeader.protocol)+' with '+inttostr(LBlockscount)+' blocks from file '+Lfilename); + fs := TFileStream.Create(Lfilename,fmOpenRead); + try + fs.Position := 0; + if not LoadBankFromStream(fs,False,Nil,Nil,ARestoreProgressNotify,errors) then begin + TLog.NewLog(lterror,ClassName,'Error reading bank from file: '+Lfilename+ ' Error: '+errors); + end; + finally + fs.Free; + end; + end; + Finally + FBankLock.Release; + End; +end; + +function TPCBank.SaveBank(forceSave: Boolean): Boolean; +begin + Result := true; + If Storage.FIsMovingBlockchain then Exit; + if (Not forceSave) AND (Not TPCSafeBox.MustSafeBoxBeSaved(BlocksCount)) then exit; // No save + Try + Result := DoSaveBank; + {$IFnDEF USE_ABSTRACTMEM} + SafeBox.CheckMemory; + {$ENDIF} + Except + On E:Exception do begin + TLog.NewLog(lterror,Classname,'Error saving Bank: '+E.Message); + Raise; + end; + End; +end; + procedure TPCBank.SetStorageClass(const Value: TStorageClass); begin if FStorageClass=Value then exit; @@ -1468,6 +1724,8 @@ procedure TPCOperationsComp.Clear(DeleteOperations : Boolean); {$ENDIF} end else if (FOperationBlock.protocol_version=CT_PROTOCOL_4) And (FBank.SafeBox.CanUpgradeToProtocol(CT_PROTOCOL_5)) then begin FOperationBlock.protocol_version := CT_PROTOCOL_5; // If minting... upgrade to Protocol 5 + end else if (FOperationBlock.protocol_version=CT_PROTOCOL_5) And (FBank.SafeBox.CanUpgradeToProtocol(CT_PROTOCOL_6)) then begin + FOperationBlock.protocol_version := CT_PROTOCOL_6; // If minting... upgrade to Protocol 6 end; if (FOperationBlock.protocol_version>=CT_PROTOCOL_4) then begin FOperationsHashTree.Max0feeOperationsBySigner := 1; // Limit to 1 0-fee operation by signer @@ -1492,7 +1750,7 @@ procedure TPCOperationsComp.Clear(DeleteOperations : Boolean); FOperationsHashTree.Max0feeOperationsBySigner := -1; FOperationBlock.previous_proof_of_work := Nil; end; - FOperationBlock.operations_hash := FOperationsHashTree.HashTree; + FOperationBlock.operations_hash := Copy(FOperationsHashTree.HashTree); FOperationBlock.fee := 0; FOperationBlock.nonce := 0; FOperationBlock.proof_of_work:=Nil; @@ -1689,8 +1947,12 @@ function TPCOperationsComp.LoadBlockFromStreamExt(Stream: TStream; LoadingFromSt errors := 'Invalid protocol structure. Check application version!'; exit; end; - soob := 255; - Stream.Read(soob,1); + + if Not LoadOperationBlockFromStream(Stream,soob,FOperationBlock) then begin + errors := 'Cannot load operationBlock'; + Exit; + end; + // About soob var: // In build prior to 1.0.4 soob only can have 2 values: 0 or 1 // In build 1.0.4 soob can has 2 more values: 2 or 3 @@ -1718,32 +1980,10 @@ function TPCOperationsComp.LoadBlockFromStreamExt(Stream: TStream; LoadingFromSt exit; end; - if (soob in [2,3,4,5]) then begin - Stream.Read(FOperationBlock.protocol_version, Sizeof(FOperationBlock.protocol_version)); - Stream.Read(FOperationBlock.protocol_available, Sizeof(FOperationBlock.protocol_available)); - end else begin - // We assume that protocol_version is 1 and protocol_available is 0 - FOperationBlock.protocol_version := 1; - FOperationBlock.protocol_available := 0; - end; - - if Stream.Read(FOperationBlock.block, Sizeof(FOperationBlock.block))<0 then exit; - - if TStreamOp.ReadAnsiString(Stream, raw) < 0 then exit; - FOperationBlock.account_key := TAccountComp.RawString2Accountkey(raw); - if Stream.Read(FOperationBlock.reward, Sizeof(FOperationBlock.reward)) < 0 then exit; - if Stream.Read(FOperationBlock.fee, Sizeof(FOperationBlock.fee)) < 0 then exit; - if Stream.Read(FOperationBlock.timestamp, Sizeof(FOperationBlock.timestamp)) < 0 then exit; - if Stream.Read(FOperationBlock.compact_target, Sizeof(FOperationBlock.compact_target)) < 0 then exit; - if Stream.Read(FOperationBlock.nonce, Sizeof(FOperationBlock.nonce)) < 0 then exit; - if TStreamOp.ReadAnsiString(Stream, FOperationBlock.block_payload) < 0 then exit; - if TStreamOp.ReadAnsiString(Stream, FOperationBlock.initial_safe_box_hash) < 0 then exit; - if TStreamOp.ReadAnsiString(Stream, FOperationBlock.operations_hash) < 0 then exit; - if TStreamOp.ReadAnsiString(Stream, FOperationBlock.proof_of_work) < 0 then exit; if FOperationBlock.protocol_version>=CT_PROTOCOL_5 then begin - if TStreamOp.ReadAnsiString(Stream, FOperationBlock.previous_proof_of_work) < 0 then exit; load_protocol_version := FOperationBlock.protocol_version; end; + If FIsOnlyOperationBlock then begin Result := true; exit; @@ -1785,6 +2025,41 @@ function TPCOperationsComp.LoadBlockFromStreamExt(Stream: TStream; LoadingFromSt end; end; +class function TPCOperationsComp.LoadOperationBlockFromStream(AStream: TStream; var Asoob : Byte; + var AOperationBlock: TOperationBlock): Boolean; +var Lraw : TBytes; +begin + Result := False; + AStream.Read(Asoob,1); + if (Asoob in [2,3,4,5]) then begin + if AStream.Read(AOperationBlock.protocol_version, Sizeof(AOperationBlock.protocol_version)) < 0 then Exit; + AStream.Read(AOperationBlock.protocol_available, Sizeof(AOperationBlock.protocol_available)); + end else begin + // We assume that protocol_version is 1 and protocol_available is 0 + AOperationBlock.protocol_version := 1; + AOperationBlock.protocol_available := 0; + end; + + if AStream.Read(AOperationBlock.block, Sizeof(AOperationBlock.block))<=0 then exit; + + if TStreamOp.ReadAnsiString(AStream, Lraw) < 0 then exit; + AOperationBlock.account_key := TAccountComp.RawString2Accountkey(Lraw); + + if AStream.Read(AOperationBlock.reward, Sizeof(AOperationBlock.reward)) < 0 then exit; + if AStream.Read(AOperationBlock.fee, Sizeof(AOperationBlock.fee)) < 0 then exit; + if AStream.Read(AOperationBlock.timestamp, Sizeof(AOperationBlock.timestamp)) < 0 then exit; + if AStream.Read(AOperationBlock.compact_target, Sizeof(AOperationBlock.compact_target)) < 0 then exit; + if AStream.Read(AOperationBlock.nonce, Sizeof(AOperationBlock.nonce)) < 0 then exit; + if TStreamOp.ReadAnsiString(AStream, AOperationBlock.block_payload) < 0 then exit; + if TStreamOp.ReadAnsiString(AStream, AOperationBlock.initial_safe_box_hash) < 0 then exit; + if TStreamOp.ReadAnsiString(AStream, AOperationBlock.operations_hash) < 0 then exit; + if TStreamOp.ReadAnsiString(AStream, AOperationBlock.proof_of_work) < 0 then exit; + if AOperationBlock.protocol_version>=CT_PROTOCOL_5 then begin + if TStreamOp.ReadAnsiString(AStream, AOperationBlock.previous_proof_of_work) < 0 then exit; + end; + Result := True; +end; + class function TPCOperationsComp.OperationBlockToText(const OperationBlock: TOperationBlock): String; begin Result := Format('Block:%d Timestamp:%d Reward:%d Fee:%d Target:%d PoW:%s Payload:%s Nonce:%d OperationsHash:%s SBH:%s',[operationBlock.block, @@ -1836,6 +2111,8 @@ procedure TPCOperationsComp.SanitizeOperations; {$ENDIF} end else if (FOperationBlock.protocol_version=CT_PROTOCOL_4) And (FBank.SafeBox.CanUpgradeToProtocol(CT_PROTOCOL_5)) then begin FOperationBlock.protocol_version := CT_PROTOCOL_5; // If minting... upgrade to Protocol 5 + end else if (FOperationBlock.protocol_version=CT_PROTOCOL_5) And (FBank.SafeBox.CanUpgradeToProtocol(CT_PROTOCOL_6)) then begin + FOperationBlock.protocol_version := CT_PROTOCOL_6; // If minting... upgrade to Protocol 6 end; FOperationBlock.block := FBank.BlocksCount; @@ -2065,6 +2342,11 @@ procedure TPCOperationsComp.SetnOnce(const value: Cardinal); Update_And_RecalcPOW(value,FOperationBlock.timestamp,FOperationBlock.block_payload); end; +procedure TPCOperationsComp.SetOperationBlock(const ANewValues: TOperationBlock); +begin + FOperationBlock := ANewValues; +end; + procedure TPCOperationsComp.Settimestamp(const value: Cardinal); begin Update_And_RecalcPOW(FOperationBlock.nonce,value,FOperationBlock.block_payload); @@ -2098,6 +2380,50 @@ function TPCOperationsComp.GetMinerRewardPseudoOperation : TOperationResume; Result.OperationTxt := 'Miner reward'; end; +function TPCOperationsComp.AddMinerRecover(LRecoverAccounts: TAccountList; const ANewAccountKey : TAccountKey): Boolean; +var + LAccount: TAccount; + LOpRecoverFounds: TOpRecoverFounds; + i: Integer; + errors: string; + LmaxFee : UInt64; +begin + Self.Lock; + errors := ''; + Result := True; + try + for i:=0 to LRecoverAccounts.Count-1 do begin + LAccount := LRecoverAccounts[i]; + LmaxFee := LAccount.balance; + if LMaxFee>CT_MaxTransactionFee then LMaxFee := CT_MaxTransactionFee; + LOpRecoverFounds := TOpRecoverFounds.Create( + Self.OperationBlock.protocol_version, + LAccount.account, + LAccount.n_operation+1, + LmaxFee, + ANewAccountKey + ); + try + if not( + Self.AddOperation( + True, + LOpRecoverFounds, + errors + ) + ) then begin + // if it fails then it number of operations could be maxed out, not a problem + TLog.NewLog(lterror,ClassName,Format('Cannot add OpRecover %d/%d %s error %s',[i+1,LRecoverAccounts.Count,LOpRecoverFounds.ToString,errors])); + Break; + end; + finally + LOpRecoverFounds.Free; + end; + end; + finally + Self.Unlock; + end; +end; + function TPCOperationsComp.ValidateOperationBlock(var errors : String): Boolean; Var i : Integer; begin @@ -2273,6 +2599,7 @@ procedure TOperationsHashTree.ClearHastThree; FListOrderedByAccountsData.Clear; FListOrderedByOpReference.Clear; FHashTree:=Nil; + FHasOpRecoverOperations := False; End; If Assigned(FOnChanged) then FOnChanged(Self); finally @@ -2328,6 +2655,7 @@ constructor TOperationsHashTree.Create; FHashTree := Nil; FMax0feeOperationsBySigner := -1; // Unlimited by default FHashTreeOperations := TPCThreadList.Create('TOperationsHashTree_HashTreeOperations'); + FHasOpRecoverOperations := False; end; procedure TOperationsHashTree.Delete(index: Integer); @@ -2456,13 +2784,13 @@ function TOperationsHashTree.GetOperation(index: Integer): TPCOperation; function TOperationsHashTree.GetOperationsAffectingAccount(account_number: Cardinal; List: TList): Integer; // This function retrieves operations from HashTree that affeccts to an account_number Var l : TList; - intl : TList; + intl : TOrderedList; i,j : Integer; begin List.Clear; l := FHashTreeOperations.LockList; try - intl := TList.Create; + intl := TOrderedList.Create(False,TComparison_Cardinal); try for i := 0 to l.Count - 1 do begin intl.Clear; @@ -2558,6 +2886,7 @@ function TOperationsHashTree.InternalAddOperationToHashTree(list: TList Result := False; Exit; end else Result := True; // Will add: + if (op is TOpRecoverFounds) then FHasOpRecoverOperations := True; New(P); if Not _PCOperationsStorage.FindPCOperationAndIncCounterIfFound(op) then begin msCopy := TMemoryStream.Create; @@ -2727,7 +3056,11 @@ function TOperationsHashTree.FindOrderedByOpReference(lockedThreadList: TList0) then begin + AddOperationToHashTree(LOperation); + inc(AProcessedCount); + end else begin + {$IFDEF HIGHLOG}TLog.NewLog(ltdebug,ClassName,Format('Not added a 0fee operation: %s',[LOperation.ToString]));{$ENDIF} + end; Finally FreeAndNil(LOperation); end; @@ -2806,11 +3148,17 @@ function TOperationsHashTree.LoadOperationsHashTreeFromStream(AStream: TStream; end; If Assigned(FOnChanged) then FOnChanged(Self); AErrors := ''; - Result := true; + Result := True; +end; + +function TOperationsHashTree.LoadOperationsHashTreeFromStream(AStream: TStream; ALoadingFromStorage : Boolean; ASetOperationsToProtocolVersion : Word; ALoadFromStorageVersion : Word; APreviousUpdatedBlocks : TAccountPreviousBlockInfo; var AErrors : String): Boolean; +var Lopc,Lprc : Integer; +begin + Result := LoadOperationsHashTreeFromStream(AStream,ALoadingFromStorage,ASetOperationsToProtocolVersion,ALoadFromStorageVersion,APreviousUpdatedBlocks,True,Lopc,Lprc,AErrors); end; procedure TOperationsHashTree.MarkVerifiedECDSASignatures(operationsHashTreeToMark: TOperationsHashTree); -var i, iPosInMyList, nMarkedAsGood, nAlreadyMarked : Integer; +var i, iPosInMyList, nMarkedAsGood, nAlreadyMarked, nFound : Integer; opToMark, opInMyList : TPCOperation; myList, listToMark : TList; begin @@ -2819,6 +3167,7 @@ procedure TOperationsHashTree.MarkVerifiedECDSASignatures(operationsHashTreeToMa If Self=operationsHashTreeToMark then Exit; nMarkedAsGood := 0; nAlreadyMarked := 0; + nFound := 0; myList := FHashTreeOperations.LockList; try if myList.Count<=0 then Exit; // Nothing to search... @@ -2831,6 +3180,7 @@ procedure TOperationsHashTree.MarkVerifiedECDSASignatures(operationsHashTreeToMa // Check if found iPosInMyList := Self.IndexOfOperation(opToMark); if (iPosInMyList>=0) then begin + inc(nFound); opInMyList := POperationHashTreeReg(myList[iPosInMyList])^.Op; if (opInMyList.FHasValidSignature) then begin if (opToMark.FHasValidSignature) then inc(nAlreadyMarked) @@ -2844,7 +3194,9 @@ procedure TOperationsHashTree.MarkVerifiedECDSASignatures(operationsHashTreeToMa end; end; end; - TLog.NewLog(ltdebug,ClassName,Format('Marked %d/%d operations as ValidSignature (%d before) from MemPool with %d operations',[nMarkedAsGood,listToMark.Count,nAlreadyMarked,myList.Count])); + if (nFound>0) then begin + TLog.NewLog(ltdebug,ClassName,Format('Marked %d/%d operations (%d found) as ValidSignature (%d before) from MemPool with %d operations',[nMarkedAsGood,listToMark.Count,nFound,nAlreadyMarked,myList.Count])); + end; finally operationsHashTreeToMark.FHashTreeOperations.UnlockList; end; @@ -2937,15 +3289,16 @@ function TStorage.BlockExists(Block: Cardinal): Boolean; procedure TStorage.CopyConfiguration(const CopyFrom: TStorage); begin - Orphan := CopyFrom.Orphan; + ReadOnly := CopyFrom.ReadOnly; end; constructor TStorage.Create(AOwner: TComponent); begin inherited; - FOrphan := ''; FReadOnly := false; FIsMovingBlockchain := False; + FPendingBufferOperationsStream := Nil; + FStorageFilename := ''; end; procedure TStorage.DeleteBlockChainBlocks(StartingDeleteBlock: Cardinal); @@ -2954,14 +3307,287 @@ procedure TStorage.DeleteBlockChainBlocks(StartingDeleteBlock: Cardinal); DoDeleteBlockChainBlocks(StartingDeleteBlock); end; -function TStorage.Initialize: Boolean; +destructor TStorage.Destroy; begin - Result := DoInitialize; + FreeAndNil(FPendingBufferOperationsStream); + inherited; end; -function TStorage.OpenSafeBoxCheckpoint(blockCount: Cardinal): TCheckPointStruct; +function TStorage.DoFindOperation(const AOpHash: TBytes; var AOperationResume: TOperationResume): TSearchOpHashResult; +var LBlock, LAccount, LN_Operation : Cardinal; + LMD160,LOpHashValid,LOpHashOld : TBytes; + i,LPreviousBlock, LAux_n_op,LInitialBlock : Integer; + LOperationsComp : TPCOperationsComp; + LOp : TPCOperation; begin - Result := DoOpenSafeBoxCheckpoint(blockCount); + Result := OpHash_invalid_params; + If not TPCOperation.DecodeOperationHash(AOpHash,LBlock,LAccount,LN_Operation,LMD160) then exit; + LInitialBlock := LBlock; + If (LAccount>=Bank.AccountsCount) then exit; // Invalid account number + // If block=0 then we must search in pending operations first + if (LBlock=0) then begin + // block=0 and not found... start searching at block updated by account updated_block + LBlock := Bank.SafeBox.Account(LAccount).GetLastUpdatedBlock; + end; + if Bank.SafeBox.Account(LAccount).n_operation=Bank.BlocksCount) then exit; + // + // Search in previous blocks + LOperationsComp := TPCOperationsComp.Create(Bank); + try + While (LBlock>0) do begin + LPreviousBlock := LBlock; + If Not Bank.LoadOperations(LOperationsComp,LBlock) then begin + Result := OpHash_block_not_found; + exit; + end; + For i:=LOperationsComp.Count-1 downto 0 do begin + LOp := LOperationsComp.Operation[i]; + if (LOp.IsSignerAccount(LAccount)) then begin + LAux_n_op := LOp.GetAccountN_Operation(LAccount); + If (LAux_n_op=LPreviousBlock) then exit; // Error... not found a valid block positioning + if (LInitialBlock<>0) then exit; // If not found in specified block, no valid hash + end; + finally + LOperationsComp.Free; + end; +end; + +function TStorage.DoGetAccountOperations(AAccount, AMaxDepth, AStartOperation, + AMaxOperations, ASearchBackwardsStartingAtBlock: Integer; + const AOperationsResumeList:TOperationsResumeList): Boolean; + // Optimization: + // For better performance, will only include at "OperationsResume" values betweeen "startOperation" and "endOperation" + + // New use case: Will allow to start in an unknown block when first_block_is_unknows + Procedure DoGetFromBlock(block_number : Integer; last_balance : Int64; act_depth : Integer; nOpsCounter : Integer; first_block_is_unknown : Boolean); + var opc : TPCOperationsComp; + op : TPCOperation; + OPR : TOperationResume; + LAccounts : TList; + i : Integer; + last_block_number : Integer; + found_in_block : Boolean; + acc_0_miner_reward, acc_4_dev_reward : Int64; + acc_4_for_dev : Boolean; + begin + if (act_depth=0) then exit; + opc := TPCOperationsComp.Create(Nil); + Try + LAccounts := TList.Create; + try + last_block_number := block_number+1; + while (last_block_number>block_number) And (act_depth<>0) + And (block_number >= (AAccount DIV CT_AccountsPerBlock)) + And (AMaxOperations<>0) + do begin + found_in_block := False; + last_block_number := block_number; + LAccounts.Clear; + If not Bank.Storage.LoadBlockChainBlock(opc,block_number) then begin + exit; + end; + opc.OperationsHashTree.GetOperationsAffectingAccount(AAccount,LAccounts); + for i := LAccounts.Count - 1 downto 0 do begin + op := opc.Operation[(LAccounts.Items[i])]; + If TPCOperation.OperationToOperationResume(block_number,Op,False,AAccount,OPR) then begin + OPR.NOpInsideBlock := (LAccounts.Items[i]); + OPR.time := opc.OperationBlock.timestamp; + OPR.Block := block_number; + If last_balance>=0 then begin + OPR.Balance := last_balance; + last_balance := last_balance - ( OPR.Amount + OPR.Fee ); + end else OPR.Balance := -1; // Undetermined + if (nOpsCounter>=AStartOperation) And (AMaxOperations<>0) then begin + AOperationsResumeList.Add(OPR); + end; + inc(nOpsCounter); + Dec(AMaxOperations); + found_in_block := True; + end; + end; + + // Is a new block operation? + if (TAccountComp.AccountBlock(AAccount)=block_number) then begin + TPascalCoinProtocol.GetRewardDistributionForNewBlock(opc.OperationBlock,acc_0_miner_reward,acc_4_dev_reward,acc_4_for_dev); + If ((AAccount MOD CT_AccountsPerBlock)=0) Or + ( ((AAccount MOD CT_AccountsPerBlock)=CT_AccountsPerBlock-1) AND (acc_4_for_dev) ) then begin + OPR := CT_TOperationResume_NUL; + OPR.OpType:=CT_PseudoOp_Reward; + OPR.valid := true; + OPR.Block := block_number; + OPR.time := opc.OperationBlock.timestamp; + OPR.AffectedAccount := AAccount; + If ((AAccount MOD CT_AccountsPerBlock)=0) then begin + OPR.Amount := acc_0_miner_reward; + OPR.OperationTxt := 'Miner reward'; + OPR.OpSubtype:=CT_PseudoOpSubtype_Miner; + end else begin + OPR.Amount := acc_4_dev_reward; + OPR.OperationTxt := 'Dev reward'; + OPR.OpSubtype:=CT_PseudoOpSubtype_Developer; + end; + If last_balance>=0 then begin + OPR.Balance := last_balance; + end else OPR.Balance := -1; // Undetermined + if (nOpsCounter>=AStartOperation) And (AMaxOperations<>0) then begin + AOperationsResumeList.Add(OPR); + end; + inc(nOpsCounter); + dec(AMaxOperations); + found_in_block := True; + end; + end; + // + dec(act_depth); + If (Not found_in_block) And (first_block_is_unknown) then begin + Dec(block_number); + end else begin + block_number := opc.PreviousUpdatedBlocks.GetPreviousUpdatedBlock(AAccount,block_number); + end; + opc.Clear(true); + end; + finally + LAccounts.Free; + end; + Finally + opc.Free; + End; + end; + +Var acc : TAccount; + startBlock : Cardinal; + lastBalance : Int64; +begin + Result := False; + if AMaxDepth=0 then Exit; + if AAccount>=Bank.SafeBox.AccountsCount then Exit; + if AMaxOperations=0 then Exit; + Result := True; + acc := Bank.SafeBox.Account(AAccount); + if (acc.GetLastUpdatedBlock>0) Or (acc.account=0) then Begin + if (ASearchBackwardsStartingAtBlock=0) Or (ASearchBackwardsStartingAtBlock>=acc.GetLastUpdatedBlock) then begin + startBlock := acc.GetLastUpdatedBlock; + lastBalance := acc.balance; + end else begin + startBlock := ASearchBackwardsStartingAtBlock; + lastBalance := -1; + end; + DoGetFromBlock(startBlock,lastBalance,AMaxDepth,0,startBlock<>acc.GetLastUpdatedBlock); + end; +end; + +function TStorage.DoGetBlockInformation(const ABlock: Integer; + var AOperationBlock: TOperationBlock; var AOperationsCount: Integer; + var AVolume: Int64): Boolean; +var LPCOperations : TPCOperationsComp; +begin + AOperationBlock:=CT_OperationBlock_NUL; + AOperationsCount := 0; + AVolume := 0; + // + LPCOperations := TPCOperationsComp.Create(Bank); + Try + if Not LoadBlockChainBlock(LPCOperations,ABlock) then begin + Exit(False); + end else Result := True; + AOperationBlock := LPCOperations.OperationBlock.GetCopy; + AOperationsCount := LPCOperations.Count; + AVolume := LPCOperations.OperationsHashTree.TotalAmount; + Finally + LPCOperations.Free; + End; +end; + +function TStorage.DoGetBlockOperations(ABlock, AOpBlockStartIndex, + AMaxOperations: Integer; var AOperationBlock: TOperationBlock; + var AOperationsCount: Integer; var AVolume: Int64; + const AOperationsResumeList:TOperationsResumeList): Boolean; +var LPCOperations : TPCOperationsComp; + LOpResume : TOperationResume; + LOp : TPCOperation; +begin + AOperationBlock:=CT_OperationBlock_NUL; + AOperationsCount := 0; + AVolume := 0; + LPCOperations := TPCOperationsComp.Create(Bank); + Try + if Not LoadBlockChainBlock(LPCOperations,ABlock) then begin + Exit(False); + end; + AOperationBlock := LPCOperations.OperationBlock.GetCopy; + AOperationsCount := LPCOperations.Count; + AVolume := LPCOperations.OperationsHashTree.TotalAmount; + while (AMaxOperations<>0) and (AOpBlockStartIndex>=0) and (AOpBlockStartIndex0 then begin + if Assigned(Bank) then LCurrentProtocol := Bank.SafeBox.CurrentProtocol + else LCurrentProtocol := CT_BUILD_PROTOCOL; + If OperationsHashTree.LoadOperationsHashTreeFromStream(fs,true,LCurrentProtocol,LCurrentProtocol, Nil,errors) then begin + TLog.NewLog(ltInfo,ClassName,Format('DoLoadPendingBufferOperations loaded operations:%d',[OperationsHashTree.OperationsCount])); + end else TLog.NewLog(ltError,ClassName,Format('DoLoadPendingBufferOperations ERROR (Protocol %d): loaded operations:%d errors:%s',[LCurrentProtocol,OperationsHashTree.OperationsCount,errors])); + end; +end; + +procedure TStorage.DoSavePendingBufferOperations( + OperationsHashTree: TOperationsHashTree); +Var fs : TFileStream; +begin + fs := GetPendingBufferOperationsStream; + fs.Position:=0; + fs.Size:=0; + OperationsHashTree.SaveOperationsHashTreeToStream(fs,true); + {$IFDEF HIGHLOG}TLog.NewLog(ltdebug,ClassName,Format('DoSavePendingBufferOperations operations:%d',[OperationsHashTree.OperationsCount]));{$ENDIF} +end; + +function TStorage.Initialize: Boolean; +begin + Result := DoInitialize; end; procedure TStorage.EraseStorage; @@ -2970,6 +3596,62 @@ procedure TStorage.EraseStorage; DoEraseStorage; end; +function TStorage.FindOperation(const AOpHash: TBytes; + var AOperationResume: TOperationResume): TSearchOpHashResult; +begin + Result := DoFindOperation(AOpHash,AOperationResume); +end; + +function TStorage.GetAccountOperations(AAccount, AMaxDepth, AStartOperation, + AMaxOperations, ASearchBackwardsStartingAtBlock: Integer; + const AOperationsResumeList:TOperationsResumeList): Boolean; +begin + Result := DoGetAccountOperations(AAccount,AMaxDepth,AStartOperation,AMaxOperations,ASearchBackwardsStartingAtBlock,AOperationsResumeList); +end; + +function TStorage.GetBlockInformation(ABlock: Integer; + var AOperationBlock: TOperationBlock; var AOperationsCount: Integer; + var AVolume: Int64): Boolean; +begin + if (ABlockLastBlock) then begin + AOperationBlock := CT_OperationBlock_NUL; + AOperationsCount := 0; + AVolume := 0; + Result := false; + end else Result := DoGetBlockInformation(ABlock,AOperationBlock,AOperationsCount,AVolume); +end; + +function TStorage.GetBlockOperations(ABlock, AOpBlockStartIndex, + AMaxOperations: Integer; var AOperationBlock: TOperationBlock; + var AOperationsCount: Integer; var AVolume: Int64; + const AOperationsResumeList:TOperationsResumeList): Boolean; +begin + if (ABlockLastBlock) then begin + Result := false; + end else Result := DoGetBlockOperations(ABlock,AOpBlockStartIndex,AMaxOperations,AOperationBlock,AOperationsCount,AVolume,AOperationsResumeList); +end; + +function TStorage.GetPendingBufferOperationsStream: TFileStream; +Var fs : TFileStream; + fn : TFileName; + fm : Word; +begin + If Not Assigned(FPendingBufferOperationsStream) then begin + fn := Bank.GetStorageFolder(Bank.Orphan)+PathDelim+'pendingbuffer.ops'; + If FileExists(fn) then fm := fmOpenReadWrite+fmShareExclusive + else fm := fmCreate+fmShareExclusive; + Try + FPendingBufferOperationsStream := TFileStream.Create(fn,fm); + Except + On E:Exception do begin + TLog.NewLog(ltError,ClassName,'Error opening PendingBufferOperationsStream '+fn+' ('+E.ClassName+'):'+ E.Message); + Raise; + end; + end; + end; + Result := FPendingBufferOperationsStream; +end; + procedure TStorage.SavePendingBufferOperations(OperationsHashTree : TOperationsHashTree); begin DoSavePendingBufferOperations(OperationsHashTree); @@ -2987,32 +3669,82 @@ function TStorage.LoadBlockChainBlock(Operations: TPCOperationsComp; Block: Card end; function TStorage.MoveBlockChainBlocks(StartBlock: Cardinal; const DestOrphan: TOrphan; DestStorage : TStorage): Boolean; + Procedure DoCopySafebox; + var sr: TSearchRec; + FileAttrs: Integer; + folder : AnsiString; + sourcefn,destfn : AnsiString; + begin + FileAttrs := faArchive; + folder := Bank.GetStorageFolder(Bank.Orphan); + if SysUtils.FindFirst(Bank.GetStorageFolder(Bank.Orphan)+PathDelim+'checkpoint*'+CT_Safebox_Extension, FileAttrs, sr) = 0 then begin + repeat + if (sr.Attr and FileAttrs) = FileAttrs then begin + sourcefn := Bank.GetStorageFolder(Bank.Orphan)+PathDelim+sr.Name; + destfn := Bank.GetStorageFolder('')+PathDelim+sr.Name; + TLog.NewLog(ltInfo,ClassName,'Copying safebox file '+sourcefn+' to '+destfn); + Try + {$IFDEF FPC} + DoCopyFile(sourcefn,destfn); + {$ELSE} + CopyFile(PWideChar(sourcefn),PWideChar(destfn),False); + {$ENDIF} + Except + On E:Exception do begin + TLog.NewLog(ltError,Classname,'Error copying file: ('+E.ClassName+') '+E.Message); + end; + End; + end; + until FindNext(sr) <> 0; + FindClose(sr); + end; + End; +Var + LOperationsComp : TPCOperationsComp; + LCurrentBlock : Integer; begin if Assigned(DestStorage) then begin if DestStorage.ReadOnly then raise Exception.Create('Cannot move blocks because is ReadOnly'); - end else if ReadOnly then raise Exception.Create('Cannot move blocks from myself because is ReadOnly'); - Result := DoMoveBlockChain(StartBlock,DestOrphan,DestStorage); -end; - -function TStorage.RestoreBank(max_block: Int64; restoreProgressNotify : TProgressNotify = Nil): Boolean; -begin - Result := DoRestoreBank(max_block,restoreProgressNotify); + // Move process: + try + try + DestStorage.FIsMovingBlockchain:=True; + DestStorage.Bank.Orphan := DestOrphan; + LOperationsComp := TPCOperationsComp.Create(Nil); + try + LCurrentBlock := StartBlock; + while LoadBlockChainBlock(LOperationsComp,LCurrentBlock) do begin + inc(LCurrentBlock); + TLog.NewLog(ltDebug,Classname,'Moving block from "'+Orphan+'" to "'+DestOrphan+'" '+TPCOperationsComp.OperationBlockToText(LOperationsComp.OperationBlock)); + DestStorage.SaveBlockChainBlock(LOperationsComp); + end; + TLog.NewLog(ltdebug,Classname,'Moved blockchain from "'+Orphan+'" to "'+DestOrphan+'" from block '+inttostr(StartBlock)+' to '+inttostr(LCurrentBlock-1)); + finally + LOperationsComp.Free; + end; + finally + DestStorage.FIsMovingBlockchain:=False; + end; + Except + On E:Exception do begin + TLog.NewLog(lterror,ClassName,'Error at DoMoveBlockChain: ('+E.ClassName+') '+E.Message); + Raise; + end; + End; + end else begin + if ReadOnly then raise Exception.Create('Cannot move blocks from myself because is ReadOnly'); + Result := DoMoveBlockChain(StartBlock,DestOrphan); + end; + // If DestOrphan is empty, then copy possible updated safebox (because, perhaps current saved safebox is from invalid blockchain) + if (DestOrphan='') And (Orphan<>'') then begin + DoCopySafebox; + end; end; -function TStorage.SaveBank(forceSave : Boolean): Boolean; +function TStorage.Orphan: String; begin - Result := true; - If FIsMovingBlockchain then Exit; - if (Not forceSave) AND (Not TPCSafeBox.MustSafeBoxBeSaved(Bank.BlocksCount)) then exit; // No save - Try - Result := DoSaveBank; - FBank.SafeBox.CheckMemory; - Except - On E:Exception do begin - TLog.NewLog(lterror,Classname,'Error saving Bank: '+E.Message); - Raise; - end; - End; + if Assigned(Bank) then Result := Bank.Orphan + else Result := ''; end; function TStorage.SaveBlockChainBlock(Operations: TPCOperationsComp): Boolean; @@ -3033,11 +3765,6 @@ procedure TStorage.SetBank(const Value: TPCBank); FBank := Value; end; -procedure TStorage.SetOrphan(const Value: TOrphan); -begin - FOrphan := Value; -end; - procedure TStorage.SetReadOnly(const Value: Boolean); begin FReadOnly := Value; @@ -3054,6 +3781,29 @@ constructor TPCOperation.Create(AProtocolVersion : Word); InitializeData(AProtocolVersion); end; +class function TPCOperation.CreateOperationFromStream(AStream: TStream; + var AOperation: TPCOperation): Boolean; +var LOpTypeWord, LOpProtocolVersion : Word; + LOpClass : TPCOperationClass; +begin + AOperation := Nil; + AStream.Read(LOpTypeWord, 2); + AStream.Read(LOpProtocolVersion, 2); + + LOpClass := TPCOperationsComp.GetOperationClassByOpType(LOpTypeWord); + if Not Assigned(LOpClass) then Exit(False); + AOperation := LOpClass.Create(LOpProtocolVersion); + Try + If not AOperation.LoadFromStorage(AStream,CT_BUILD_PROTOCOL,Nil) then raise Exception.Create(Format('ERR 20211119-01 Cannot read %s from stream optype %d protocol %d',[ClassName,LOpTypeWord,LOpProtocolVersion])); + Result := True; + Except + On E:Exception do begin + FreeAndNil(AOperation); + Result := False; + end; + end; +end; + destructor TPCOperation.Destroy; begin inherited Destroy; @@ -3284,6 +4034,9 @@ procedure TPCOperation.InitializeData(AProtocolVersion : Word); FUsedPubkeyForSignature:=CT_TECDSA_Public_Nul; FBufferedSha256 := Nil; FBufferedRipeMD160 := Nil; + FDiscoveredOnBlock := 0; + FResendOnBlock := 0; + FResendCount := 0; end; procedure TPCOperation.FillOperationResume(Block: Cardinal; getInfoForAllAccounts : Boolean; Affected_account_number: Cardinal; var OperationResume: TOperationResume); @@ -3293,6 +4046,7 @@ procedure TPCOperation.FillOperationResume(Block: Cardinal; getInfoForAllAccount function TPCOperation.IsValidECDSASignature(const PubKey: TECDSA_Public; const Signature: TECDSA_SIG): Boolean; begin + {$IFnDEF TESTING_NO_POW_CHECK} // Will reuse FHasValidSignature if checked previously and was True // Introduced on Build 4.0.2 to increase speed using MEMPOOL verified operations instead of verify again everytime if (FHasValidSignature) then begin @@ -3309,6 +4063,11 @@ function TPCOperation.IsValidECDSASignature(const PubKey: TECDSA_Public; const S end; end; Result := FHasValidSignature; + {$ELSE} + FHasValidSignature := True; + FUsedPubkeyForSignature := PubKey; + Result := True; + {$ENDIF} end; procedure TPCOperation.CopyUsedPubkeySignatureFrom(SourceOperation: TPCOperation); @@ -3666,7 +4425,7 @@ function TPCOperation.RipeMD160: TRawBytes; If Length(FBufferedRipeMD160)=0 then begin FBufferedRipeMD160 := TCrypto.DoRipeMD160AsRaw(GetBufferForOpHash(true)); end; - Result := FBufferedRipeMD160; + Result := Copy(FBufferedRipeMD160); // Fixed bug. TBytes must be copied using Copy instead of direct assignement. end; function TPCOperation.IsSignerAccount(account: Cardinal): Boolean; @@ -3675,9 +4434,9 @@ function TPCOperation.IsSignerAccount(account: Cardinal): Boolean; end; function TPCOperation.IsAffectedAccount(account: Cardinal): Boolean; -Var l : TList; +Var l : TOrderedList; begin - l := TList.Create; + l := TOrderedList.Create(False,TComparison_Cardinal); Try AffectedAccounts(l); Result := (l.IndexOf(account)>=0); @@ -3725,84 +4484,6 @@ function TPCOperation.OperationAmountByAccount(account: Cardinal): Int64; Result := 0; end; -{ TOperationsResumeList } - -Type POperationResume = ^TOperationResume; - -procedure TOperationsResumeList.Add(const OperationResume: TOperationResume); -Var P : POperationResume; -begin - New(P); - P^ := OperationResume; - FList.Add(P); -end; - -procedure TOperationsResumeList.Clear; -Var P : POperationResume; - i : Integer; - l : TList; -begin - l := FList.LockList; - try - for i := 0 to l.Count - 1 do begin - P := l[i]; - Dispose(P); - end; - l.Clear; - finally - FList.UnlockList; - end; -end; - -function TOperationsResumeList.Count: Integer; -Var l : TList; -begin - l := FList.LockList; - Try - Result := l.Count; - Finally - FList.UnlockList; - End; -end; - -constructor TOperationsResumeList.Create; -begin - FList := TPCThreadList.Create('TOperationsResumeList_List'); -end; - -procedure TOperationsResumeList.Delete(index: Integer); -Var P : POperationResume; - l : TList; -begin - l := FList.LockList; - Try - P := l[index]; - l.Delete(index); - Dispose(P); - Finally - FList.UnlockList; - End; -end; - -destructor TOperationsResumeList.Destroy; -begin - Clear; - FreeAndNil(FList); - inherited; -end; - -function TOperationsResumeList.GetOperationResume(index: Integer): TOperationResume; -Var l : TList; -begin - l := FList.LockList; - try - if index0) then begin - LLastHeader := GetSafeboxChunkHeader(Count-1); - if (LsbHeader.ContainsFirstBlock) - or (LsbHeader.startBlock<>LLastHeader.endBlock+1) - or (LLastHeader.ContainsLastBlock) - or (LsbHeader.protocol<>LLastHeader.protocol) - or (LsbHeader.blocksCount<>LLastHeader.blocksCount) - or (Not LsbHeader.safeBoxHash.IsEqualTo( LLastHeader.safeBoxHash )) - then begin - raise EPCChunk.Create(Format('Cannot add %s at (%d) %s',[LsbHeader.ToString,Length(FChunks),LLastHeader.ToString])); + LCount := 0; + repeat + LChunk.streamInitialPosition := ASafeboxStreamChunk.position; + LChunk.stream := ASafeboxStreamChunk; + LChunk.freeStreamOnClear := AFreeStreamOnClear; + If Not TPCSafeBox.LoadSafeBoxStreamHeader(ASafeboxStreamChunk,LsbHeader,LChunk.streamFinalPosition) then begin + if (ARaiseOnError) and (LCount=0) then Raise EPCChunk.Create('SafeBoxStream is not a valid SafeBox to add!') + else Exit(LCount>0); + end else if LCount>0 then FIsMultiChunkStream := True; + + if (Count>0) then begin + LLastHeader := GetSafeboxChunkHeader(Count-1); + if (LsbHeader.ContainsFirstBlock) + or (LsbHeader.startBlock<>LLastHeader.endBlock+1) + or (LLastHeader.ContainsLastBlock) + or (LsbHeader.protocol<>LLastHeader.protocol) + or (LsbHeader.blocksCount<>LLastHeader.blocksCount) + or (Not LsbHeader.safeBoxHash.IsEqualTo( LLastHeader.safeBoxHash )) + then begin + if ARaiseOnError then raise EPCChunk.Create(Format('Cannot add %s at (%d) %s',[LsbHeader.ToString,Length(FChunks),LLastHeader.ToString])) + else Exit(False); + end; + end else if (Not LsbHeader.ContainsFirstBlock) then begin + if ARaiseOnError then raise EPCChunk.Create(Format('Cannot add %s',[LsbHeader.ToString])) + else Exit(False); end; - end else if (Not LsbHeader.ContainsFirstBlock) then begin - raise EPCChunk.Create(Format('Cannot add %s',[LsbHeader.ToString])); - end; - // - SetLength(FChunks,Length(FChunks)+1); - FChunks[High(FChunks)] := ASafeboxStreamChunk; + // + ASafeboxStreamChunk.Position := LChunk.streamFinalPosition; + // + SetLength(FChunks,Length(FChunks)+1); + FChunks[High(FChunks)] := LChunk; + inc(LCount); + until false; + Result := True; end; function TPCSafeboxChunks.GetSafeboxChunk(index: Integer): TStream; begin if (index<0) or (index>=Count) then raise EPCChunk.Create(Format('Invalid index %d of %d',[index,Length(FChunks)])); - Result := FChunks[index]; - Result.Position := 0; + if FIsMultiChunkStream then begin + Result := FChunks[0].stream; + end else begin + Result := FChunks[index].stream; + end; + Result.Position := FChunks[index].streamInitialPosition; end; function TPCSafeboxChunks.GetSafeboxChunkHeader(index: Integer): TPCSafeBoxHeader; @@ -146,6 +186,32 @@ function TPCSafeboxChunks.IsComplete: Boolean; end; end; +function TPCSafeboxChunks.SaveSafeboxfile(AFileName: String): Boolean; +var fs : TFileStream; +begin + fs := TFileStream.Create(AFilename,fmCreate); + try + Result := SaveSafeboxStream(fs); + finally + fs.Free; + end; +end; + + +function TPCSafeboxChunks.SaveSafeboxStream(AStream: TStream): Boolean; +Var + iChunk : Integer; + Lstream : TStream; +begin + Result := false; + for iChunk := 0 to Count-1 do begin + Lstream := GetSafeboxChunk(iChunk); + AStream.CopyFrom(LStream,FChunks[iChunk].streamFinalPosition - FChunks[iChunk].streamInitialPosition); + end; + Result := True; +end; + + function TPCSafeboxChunks.GetSafeboxHeader: TPCSafeBoxHeader; begin if Not IsComplete then Raise EPCChunk.Create(Format('Chunks are not complete %d',[Length(FChunks)])); @@ -153,6 +219,37 @@ function TPCSafeboxChunks.GetSafeboxHeader: TPCSafeBoxHeader; Result.startBlock := 0; end; +class function TPCSafeboxChunks.GetSafeboxHeaderFromFile(AFilename: String; + var APCSafeBoxHeader: TPCSafeBoxHeader): Boolean; +var fs: TFileStream; +begin + APCSafeBoxHeader := CT_PCSafeBoxHeader_NUL; + if (AFileName.trim()='') or (Not FileExists(AFileName)) then Exit(False); + fs := TFileStream.Create(AFilename,fmOpenRead); + try + Result := TPCSafeboxChunks.GetSafeboxHeaderFromStream(fs,APCSafeBoxHeader); + finally + fs.Free; + end; +end; + +class function TPCSafeboxChunks.GetSafeboxHeaderFromStream(AStream: TStream; + var APCSafeBoxHeader: TPCSafeBoxHeader): Boolean; +var LChunks : TPCSafeboxChunks; +begin + APCSafeBoxHeader := CT_PCSafeBoxHeader_NUL; + LChunks := TPCSafeboxChunks.Create; + try + if LChunks.AddChunk(AStream,False,False) then begin + if LChunks.IsComplete then APCSafeBoxHeader := LChunks.GetSafeboxHeader + else APCSafeBoxHeader := LChunks.GetSafeboxChunkHeader(0); + Result := True; + end else Result := False; + finally + LChunks.Free; + end; +end; + { TPCChunk } class function TPCChunk.SaveSafeBoxChunkFromSafeBox(SafeBoxStream, DestStream : TStream; fromBlock, toBlock: Cardinal; var errors : String) : Boolean; diff --git a/src/core/UConst.pas b/src/core/UConst.pas index 08ca122c9..b69e25ca9 100644 --- a/src/core/UConst.pas +++ b/src/core/UConst.pas @@ -118,6 +118,8 @@ interface CT_PROTOCOL_3 = 3; CT_PROTOCOL_4 = 4; CT_PROTOCOL_5 = 5; + CT_PROTOCOL_6 = 6; + CT_PROTOCOL_MAX = CT_PROTOCOL_6; CT_BUILD_PROTOCOL = CT_PROTOCOL_5; CT_BlockChain_Protocol_Available: Word = 5; // Protocol 5 flag @@ -125,22 +127,24 @@ interface CT_Protocol_Upgrade_v3_MinBlock = {$IFDEF PRODUCTION}210000{$ELSE}250{$ENDIF}; CT_Protocol_Upgrade_v4_MinBlock = {$IFDEF PRODUCTION}260000{$ELSE}400{$ENDIF}; CT_Protocol_Upgrade_v5_MinBlock = {$IFDEF PRODUCTION}378000{$ELSE}500{$ENDIF}; + CT_Protocol_Upgrade_v6_MinBlock = {$IFDEF PRODUCTION}999999999{$ELSE}999999999{$ENDIF}; // TODO: ALLOW V6 activate setting a valid "min block" value - CT_MagicNetIdentification = {$IFDEF PRODUCTION}$0A043580{$ELSE}$05000004{$ENDIF}; + CT_MagicNetIdentification = {$IFDEF PRODUCTION}$0A043580{$ELSE}$05000005{$ENDIF}; - CT_NetProtocol_Version: Word = 10; + CT_NetProtocol_Version: Word = 14; // IMPORTANT NOTE!!! // NetProtocol_Available MUST BE always >= NetProtocol_version - CT_NetProtocol_Available: Word = {$IFDEF PRODUCTION}12{$ELSE}12{$ENDIF}; + CT_NetProtocol_Available: Word = {$IFDEF PRODUCTION}15{$ELSE}15{$ENDIF}; CT_MaxAccountOperationsPerBlockWithoutFee = 1; + CT_AllowPropagate0feeOperations = False; CT_SafeBoxBankVersion : Word = 3; // Protocol 2 upgraded safebox version from 2 to 3 - CT_MagicIdentificator: String = {$IFDEF PRODUCTION}'PascalCoin'{$ELSE}'PascalCoinTESTNET_5.Beta.4'{$ENDIF}; // + CT_MagicIdentificator: String = {$IFDEF PRODUCTION}'PascalCoin'{$ELSE}'PascalCoin_TESTNET'{$ENDIF}; // - CT_PascalCoin_Data_Folder : String = {$IFDEF PRODUCTION}'PascalCoin'{$ELSE}'PascalCoin_TESTNET_5.Beta.4'{$ENDIF}; // + CT_PascalCoin_Data_Folder : String = {$IFDEF PRODUCTION}'PascalCoin'{$ELSE}'PascalCoin_TESTNET'{$ENDIF}; // CT_PseudoOp_Reward = $0; // Value of Operations type in Protocol 1 @@ -195,7 +199,7 @@ interface CT_OpSubtype_Data_Signer = 103; CT_OpSubtype_Data_Receiver = 104; - CT_ClientAppVersion : String = {$IFDEF PRODUCTION}'5.4.beta'{$ELSE}{$IFDEF TESTNET}'TESTNET 5.4.beta'{$ELSE}{$ENDIF}{$ENDIF}; + CT_ClientAppVersion : String = {$IFDEF PRODUCTION}'5.8'{$ELSE}{$IFDEF TESTNET}'TESTNET 5.8'{$ELSE}{$ENDIF}{$ENDIF}; CT_Discover_IPs = {$IFDEF PRODUCTION}'bpascal1.dynamic-dns.net;bpascal2.dynamic-dns.net;pascalcoin1.dynamic-dns.net;pascalcoin2.dynamic-dns.net;pascalcoin1.dns1.us;pascalcoin2.dns1.us;pascalcoin1.dns2.us;pascalcoin2.dns2.us' {$ELSE}'pascaltestnet1.dynamic-dns.net;pascaltestnet2.dynamic-dns.net;pascaltestnet1.dns1.us;pascaltestnet2.dns1.us'{$ENDIF}; @@ -214,8 +218,14 @@ interface CT_MOLINA = 1; CT_MOLINA_DECIMAL = {$IFDEF FPC}Real(CT_MOLINA/1000.0);{$ELSE}0.0001;{$ENDIF} + CT_DEFAULT_PAY_TO_KEY_MAX_MOLINAS = 5000; + CT_ACTIVATE_RANDOMHASH_V4 = {$IFDEF ACTIVATE_RANDOMHASH_V4}True{$ELSE}False{$ENDIF}; + // Represents a non-existent account number + // (chosen as the last account in safebox, generated in year 6101) + CT_AccountNo_NUL = High(Cardinal); + // App Params CT_PARAM_GridAccountsStream = 'GridAccountsStreamV2'; CT_PARAM_GridAccountsPos = 'GridAccountsPos'; diff --git a/src/core/UCrypto.pas b/src/core/UCrypto.pas index 40226e4eb..883f23716 100644 --- a/src/core/UCrypto.pas +++ b/src/core/UCrypto.pas @@ -632,8 +632,9 @@ class procedure TCrypto.DoSha256(const TheMessage: TRawBytes; out ResultSha256: begin {$IFDEF Use_OpenSSL} If length(ResultSha256)<>32 then SetLength(ResultSha256,32); - PS := @ResultSha256[Low(ResultSha256)]; - SHA256(@TheMessage[Low(TheMessage)],Length(TheMessage),PS); + PS := @ResultSha256[0]; + if length(TheMessage)=0 then SHA256(Nil,0,PS) + else SHA256(@TheMessage[0],Length(TheMessage),PS); {$ELSE} TPCCryptoLib4Pascal.DoSHA256(TheMessage,ResultSha256); {$ENDIF} diff --git a/src/core/UEPasa.pas b/src/core/UEPasa.pas new file mode 100644 index 000000000..c44d6658c --- /dev/null +++ b/src/core/UEPasa.pas @@ -0,0 +1,843 @@ +unit UEPasa; + +{ Copyright (c) 2020 by Herman Schoenfeld + + PIP-0027: E-PASA Reference Implementation + See: https://github.com/PascalCoin/PascalCoin/blob/master/PIP/PIP-0027.md + + Distributed under the MIT software license, see the accompanying file LICENSE + or visit http://www.opensource.org/licenses/mit-license.php. + + This unit is a part of the PascalCoin Project, an infinitely scalable + cryptocurrency. Find us here: + Web: https://www.pascalcoin.org + Source: https://github.com/PascalCoin/PascalCoin + + THIS LICENSE HEADER MUST NOT BE REMOVED. +} + +{$IFDEF FPC} + {$MODE DELPHI} + {$ZEROBASEDSTRINGS OFF} +{$ENDIF FPC} + +interface + +uses + SysUtils, + TypInfo, + uregexpr, + UCommon, + UCrypto, + UEncoding, + SyncObjs; + +type + + EPascalCoinException = class(Exception); + + EPasaErrorCode = ( + Success, BadFormat, BadChecksum, InvalidAccountNumber, + AccountChecksumInvalid, InvalidAccountName, MismatchedPayloadEncoding, + PayloadTooLarge, MissingPassword, UnusedPassword, InvalidPassword, + BadExtendedChecksum + ); + + { TPayloadTrait } + + TPayloadTrait = ( + ptNonDeterministic = 0, // Payload encryption and encoding method not specified. + ptPublic = 1, // Unencrypted, public payload. + ptRecipientKeyEncrypted = 2, // ECIES encrypted using recipient accounts public key. + ptSenderKeyEncrypted = 3, // ECIES encrypted using sender accounts public key. + ptPasswordEncrypted = 4, // AES encrypted using pwd param + ptAsciiFormatted = 5, // Payload data encoded in ASCII + ptHexFormatted = 6, // Payload data encoded in HEX + ptBase58Formatted = 7, // Payload data encoded in Base58 + ptAddressedByName = 8 // E-PASA addressed by account name (not number). + ); + + { TPayloadTraitHelper } + + TPayloadTraitHelper = record helper for TPayloadTrait + public + function ToProtocolValue: byte; + end; + + { TPayloadType } + + TPayloadType = set of TPayloadTrait; + + { TPayloadTypesHelper } + + TPayloadTypeHelper = record helper for TPayloadType + public + function HasTrait(APayloadTrait: TPayloadTrait): Boolean; inline; + function ToProtocolValue : byte; + function IsValid : Boolean; + end; + + { TEPasa } + + + TEPasa = record + strict private var + FAccount, FAccountChecksum: TNullable; + FAccountName, FPayload, FPassword, FExtendedChecksum: String; + FPayloadType: TPayloadType; + + function GetAccount: TNullable; inline; + procedure SetAccount(const AValue: TNullable); inline; + function GetAccountChecksum: TNullable; inline; + procedure SetAccountChecksum(const AValue: TNullable); inline; + function GetPayloadType: TPayloadType; inline; + function GetAccountName: String; inline; + procedure SetAccountName(const AValue: String); inline; + procedure SetPayloadType(const AValue: TPayloadType); inline; + function GetExtendedChecksum: String; inline; + procedure SetExtendedChecksum(const AValue: String); inline; + function GetPassword: String; inline; + procedure SetPassword(const AValue: String); inline; + function GetPayload: String; inline; + procedure SetPayload(const AValue: String); inline; + function GetHasPayload: Boolean; inline; + function GetIsStandard: Boolean; inline; + function GetIsPayToKey: Boolean; inline; + function GetIsAddressedByName : Boolean; inline; + function GetIsAddressedByNumber : Boolean; inline; + class function GetEmptyValue : TEPasa; static; + public + property Account: TNullable read GetAccount write SetAccount; + property AccountChecksum: TNullable read GetAccountChecksum write SetAccountChecksum; + property AccountName: String read GetAccountName write SetAccountName; + property PayloadType: TPayloadType read GetPayloadType write SetPayloadType; + property Payload: String read GetPayload write SetPayload; + property Password: String read GetPassword write SetPassword; + property ExtendedChecksum: String read GetExtendedChecksum write SetExtendedChecksum; + property IsAddressedByNumber: boolean read GetIsAddressedByNumber; + property IsAddressedByName: boolean read GetIsAddressedByName; + property IsPayToKey: boolean read GetIsPayToKey; + property IsClassicPASA: boolean read GetIsStandard; + property HasPayload: boolean read GetHasPayload; + class property Empty : TEPasa read GetEmptyValue; + + function GetRawPayloadBytes(): TBytes; inline; + + function ToClassicPASAString(): String; overload; + function ToString(): String; overload; + function ToString(AOmitExtendedChecksum: Boolean): String; overload; + + class function TryParse(const AEPasaText: String; AOmitExtendedChecksumVerification : Boolean; out AEPasa: TEPasa) : Boolean; overload; static; + class function TryParse(const AEPasaText: String; out AEPasa: TEPasa) : Boolean; overload; static; + class function Parse(const AEPasaText: String): TEPasa; static; + + class function CalculateAccountChecksum(AAccNo: UInt32): Byte; static; inline; + procedure Clear; + end; + + + + { TEPasaParser } + + TEPasaParser = class + strict private + class var FEPasaRegex: TCustomRegex; + class var FEPasaLocker : TCriticalSection; + class constructor CreateRegexEPasaParser(); + class destructor DestroyRegexEPasaParser(); + + public + const + // note: regex syntax escapes following chars [\^$.|?*+(){} + // note: epasa syntax escapes following chars: :\"[]()<>(){} + // note: c-sharp syntax verbatim strings escape: " as "" + IntegerPattern = '(0|[1-9]\d*)'; + AccountNamePattern = '(?P' + TPascal64Encoding.StringPattern + ')'; + AccountChecksumPattern = '(?:(?P-)(?P\d{2}))?'; + AccountNumberPattern = '(?P' + IntegerPattern + ')' + AccountChecksumPattern; + PasaPattern = '(' + AccountNumberPattern + '|' + AccountNamePattern + ')'; + ASCIIContentPattern = '"' + TPascalAsciiEncoding.StringPattern + '"'; + HexContentPattern = '0x' + THexEncoding.SubStringPattern; + Base58ContentPattern = TPascalBase58Encoding.SubStringPattern; + PayloadPasswordPattern = '(?:(?P' + ':){1}(?P' + TPascalAsciiEncoding.StringPattern + ')?)?'; + PayloadStartCharPattern = '(?P[\[\(<\{])'; + PayloadEndCharPattern = '(?P[]\)>\}])'; + PayloadContentPattern = '(?P' + ASCIIContentPattern + '|' + HexContentPattern + '|' + Base58ContentPattern + ')?'; + PayloadPattern = '(?:' + PayloadStartCharPattern + PayloadContentPattern + PayloadPasswordPattern + PayloadEndCharPattern + ')?'; + ExtendedChecksumPattern = '(?:' + '(?P:)' + '(?P' + THexEncoding.BytePattern + THexEncoding.BytePattern + '))?'; + EPasaPattern = PasaPattern + PayloadPattern + ExtendedChecksumPattern; + + function Parse(const AEPasaText: String): TEPasa; + function TryParse(const AEPasaText: String; out AEPasa: TEPasa): Boolean; overload; + function TryParse(const AEPasaText: String; out AEPasa: TEPasa; out AErrorCode: EPasaErrorCode): Boolean; overload; + function TryParse(const AEPasaText: String; AOmitExtendedChecksumVerification : Boolean; out AEPasa: TEPasa; out AErrorCode: EPasaErrorCode): Boolean; overload; + end; + + { TEPasaComp } + + TEPasaComp = class sealed(TObject) + + strict private + class function ReadUInt16AsBytesLE(AValue: UInt16): TArray; static; + + public + const + MaxPublicAsciiContentLength: Int32 = 255; + MaxECIESAsciiContentLength: Int32 = 144; + MaxAESAsciiContentLength: Int32 = 223; + MaxPublicHexContentLength: Int32 = 510 + 2; + MaxECIESHexContentLength: Int32 = 288 + 2; + MaxAESHexContentLength: Int32 = 446 + 2; + MaxPublicBase58ContentLength: Int32 = 348; + MaxECIESBase58ContentLength: Int32 = 196; + MaxAESBase58ContentLength: Int32 = 304; + ExtendedChecksumMurMur3Seed: UInt32 = 0; + + class function ComputeExtendedChecksum(const AText: String): String; static; + class function IsValidExtendedChecksum(const AText: String; const AChecksum: String): Boolean; static; + class function IsValidPayloadLength(APayloadType: TPayloadType; const APayloadContent: String): Boolean; static; + class function IsValidPasswordLength(const APasswordValue: String) : Boolean; static; + + class function GetPayloadTypeProtocolByte(const APayloadType : TPayloadType) : Byte; + class function GetPayloadTypeFromProtocolByte(AByte : Byte) : TPayloadType; + class function FromProtocolValue(AVal : Byte) : TPayloadType; + end; + +resourcestring + SUnknownPayloadEncoding = 'Unknown payload encoding.'; + SInvalidEPasaFormat = 'Invalid E-PASA format, %s'; + SInvalidEPasa = 'Invalid EPASA "%s": %s'; + SInvalidHexString = 'Invalid hex-formatted string, %s'; + SInvalidBase58String = 'Invalid Base58-formatted string, %s'; + SBase58EncodeError = 'Error Encoding to Base58'; + SUnRecognizedStartCharacter = 'Unrecognized start character, %s'; + SInvalidPASCQuantity = 'Invalid PASC quantity string, %s'; + +implementation + +uses + HlpHashFactory, + HlpIHashInfo, + HlpConverters, + UMemory; + +var + EmptyEPasa : TEPasa; + +{ TPayloadTraitHelper } + +function TPayloadTraitHelper.ToProtocolValue: Byte; +begin + case Self of + ptNonDeterministic: Exit(0); + ptPublic: Exit(BYTE_BIT_0); + ptRecipientKeyEncrypted: Exit(BYTE_BIT_1); + ptSenderKeyEncrypted: Exit(BYTE_BIT_2); + ptPasswordEncrypted: Exit(BYTE_BIT_3); + ptAsciiFormatted: Exit(BYTE_BIT_4); + ptHexFormatted: Exit(BYTE_BIT_5); + ptBase58Formatted: Exit(BYTE_BIT_6); + ptAddressedByName: Exit(BYTE_BIT_7); + end; + raise Exception.Create('Internal Error 2faed11a-1b0f-447a-87d1-2e1735ac4ca2'); +end; + +{ TPayloadTypeHelper } + +function TPayloadTypeHelper.HasTrait(APayloadTrait : TPayloadTrait) : Boolean; +begin + Result := APayloadTrait in Self; +end; + +function TPayloadTypeHelper.IsValid: Boolean; +var LValue, LEncryptedBits, LFormattedBits : Byte; +begin + { As described on PIP-0027 E-PASA: + Bits 0..3 describe how payload is encrypted. 1 option (and only 1) must be selected + Bits 4..6 describe how is data encoded: String, Hexa or Base58. 1 option (and 1 only 1) must be selected + + IsValid = 1 bit from 0..3 and 1 bit from 4..6 must be selected + } + LValue := Self.ToProtocolValue; + LEncryptedBits := (LValue and $0F); // 0000 1111 + LFormattedBits := (LValue and $70); // 0111 0000 + Result := + ( + ((LEncryptedBits and BYTE_BIT_0)=BYTE_BIT_0) + or ((LEncryptedBits and BYTE_BIT_1)=BYTE_BIT_1) + or ((LEncryptedBits and BYTE_BIT_2)=BYTE_BIT_2) + or ((LEncryptedBits and BYTE_BIT_3)=BYTE_BIT_3) + ) + and + ( + ((LFormattedBits and BYTE_BIT_4)=BYTE_BIT_4) + or ((LFormattedBits and BYTE_BIT_5)=BYTE_BIT_5) + or ((LFormattedBits and BYTE_BIT_6)=BYTE_BIT_6) + ); +end; + +function TPayloadTypeHelper.ToProtocolValue : Byte; +begin + Result := TEPasaComp.GetPayloadTypeProtocolByte(Self); +end; + +{ TEPasa } + +procedure TEPasa.Clear; +begin + Self.FAccount.Clear; + Self.FAccountChecksum.Clear; + Self.FAccountName:=''; + Self.FPayload:=''; + Self.FPassword:=''; + Self.FExtendedChecksum:=''; + Self.FPayloadType:=[]; +end; + +function TEPasa.GetAccount: TNullable; +begin + Result := FAccount; +end; + +function TEPasa.GetAccountChecksum: TNullable; +begin + Result := FAccountChecksum; +end; + +function TEPasa.GetAccountName: String; +begin + Result := FAccountName; +end; + +function TEPasa.GetExtendedChecksum: String; +begin + Result := FExtendedChecksum; +end; + +function TEPasa.GetPassword: String; +begin + Result := FPassword; +end; + +function TEPasa.GetPayload: String; +begin + Result := FPayload; +end; + +function TEPasa.GetPayloadType: TPayloadType; +begin + Result := FPayloadType; +end; + +procedure TEPasa.SetAccount(const AValue: TNullable); +begin + FAccount := AValue; +end; + +procedure TEPasa.SetAccountChecksum(const AValue: TNullable); +begin + FAccountChecksum := AValue; +end; + +procedure TEPasa.SetAccountName(const AValue: String); +begin + FAccountName := AValue; +end; + +procedure TEPasa.SetExtendedChecksum(const AValue: String); +begin + FExtendedChecksum := AValue; +end; + +procedure TEPasa.SetPassword(const AValue: String); +begin + FPassword := AValue; +end; + +procedure TEPasa.SetPayload(const AValue: String); +begin + FPayload := AValue; +end; + +procedure TEPasa.SetPayloadType(const AValue: TPayloadType); +begin + FPayloadType := AValue; +end; + +function TEPasa.GetIsAddressedByNumber : Boolean; +begin + Result := NOT PayloadType.HasTrait(ptAddressedByName); +end; + +function TEPasa.GetIsAddressedByName : Boolean; +begin + Result := (NOT IsPayToKey) AND PayloadType.HasTrait(ptAddressedByName); +end; + +function TEPasa.GetIsPayToKey: Boolean; +begin + Result := + (AccountName = '@') and + (PayloadType.HasTrait(ptAddressedByName) and + PayloadType.HasTrait(ptPublic) and + PayloadType.HasTrait(ptBase58Formatted)); +end; + +function TEPasa.GetIsStandard: Boolean; +begin + Result := (NOT PayloadType.HasTrait(ptAddressedByName)) AND (NOT HasPayload); +end; + +function TEPasa.GetHasPayload: Boolean; +begin + Result := PayloadType.HasTrait(ptPublic) OR PayloadType.HasTrait(ptRecipientKeyEncrypted) OR PayloadType.HasTrait(ptSenderKeyEncrypted); +end; + +function TEPasa.GetRawPayloadBytes: TBytes; +begin + if (PayloadType.HasTrait(ptAsciiFormatted)) then + Exit(TEncoding.ASCII.GetBytes(Payload)); + + if (PayloadType.HasTrait(ptBase58Formatted)) then + Exit(TPascalBase58Encoding.Decode(Payload)); + + if (PayloadType.HasTrait(ptHexFormatted)) then + Exit(THexEncoding.Decode(Payload)); + + raise EPascalCoinException.CreateRes(@SUnknownPayloadEncoding); +end; + +function TEPasa.ToClassicPASAString : String; +begin + Result := ToString(True); +end; + +function TEPasa.ToString: String; +begin + Result := ToString(False); +end; + +function TEPasa.ToString(AOmitExtendedChecksum: Boolean): String; +var + LPayloadContent: String; +begin + Result := string.Empty; + if PayloadType.HasTrait(ptNonDeterministic) then Exit; + + if (PayloadType.HasTrait(ptAddressedByName)) then begin + Result := Result + TPascal64Encoding.Escape(AccountName); + end else begin + if (Not Account.HasValue) then Exit; + Result := Result + Account.Value.ToString(); + if (AccountChecksum.HasValue) then begin + Result := Result + String.Format('-%u', [AccountChecksum.Value]); + end; + end; + + if (PayloadType.HasTrait(ptAsciiFormatted)) then begin + LPayloadContent := String.Format('"%s"', [TPascalAsciiEncoding.Escape(Payload)]); + end else if (PayloadType.HasTrait(ptHexFormatted)) then begin + LPayloadContent := string.Format('0x%s', [Payload]); + end else if (PayloadType.HasTrait(ptBase58Formatted)) then begin + LPayloadContent := string.Format('%s', [Payload]); + end else begin + // it is non-deterministic, so payload content is ignored + LPayloadContent := string.Empty; + end; + + if (PayloadType.HasTrait(ptPublic)) then begin + Result := Result + string.Format('[%s]', [LPayloadContent]); + end else if (PayloadType.HasTrait(ptRecipientKeyEncrypted)) then begin + Result := Result + string.Format('(%s)', [LPayloadContent]); + end else if (PayloadType.HasTrait(ptSenderKeyEncrypted)) then begin + Result := Result + string.Format('<%s>', [LPayloadContent]); + end else if (PayloadType.HasTrait(ptPasswordEncrypted)) then begin + Result := Result + string.Format('{%s:%s}', [LPayloadContent, TPascalAsciiEncoding.Escape(Password)]); + end else begin + // it is non-deterministic, so payload omitted entirely + end; + + if (not AOmitExtendedChecksum) then begin + if (ExtendedChecksum='') then begin + // Need to compute: + ExtendedChecksum := TEPasaComp.ComputeExtendedChecksum(Result); + end; + Result := Result + string.Format(':%s', [ExtendedChecksum]); + end; +end; + + + +class function TEPasa.TryParse(const AEPasaText: String; out AEPasa: TEPasa): Boolean; +begin + Result := TryParse(AEPasaText,False,AEPasa); +end; + +class function TEPasa.TryParse(const AEPasaText: String; AOmitExtendedChecksumVerification: Boolean; out AEPasa: TEPasa): Boolean; +var + LParser: TEPasaParser; + LDisposables : TDisposables; + LEPasaErrorCode : EPasaErrorCode; +begin + LParser := LDisposables.AddObject( TEPasaParser.Create() ) as TEPasaParser; + Result := LParser.TryParse(AEPasaText,AOmitExtendedChecksumVerification,AEPasa,LEPasaErrorCode); +end; + +class function TEPasa.Parse(const AEPasaText: String): TEPasa; +begin + if (TryParse(AEPasaText, Result)) then + Exit(Result); + raise EArgumentException.CreateResFmt(@SInvalidEPasaFormat, ['AEPasaText']); +end; + +class function TEPasa.CalculateAccountChecksum(AAccNo: UInt32): Byte; +begin + Result := Byte(((UInt64(AAccNo) * 101) mod 89) + 10); +end; + + +class function TEPasa.GetEmptyValue : TEPasa; +begin + Result := EmptyEPasa; +end; + +{ TEPasaParser } + +class constructor TEPasaParser.CreateRegexEPasaParser; +begin + FEPasaRegex := TCustomRegex.Create(EPasaPattern); + FEPasaLocker := TCriticalSection.Create; +end; + +class destructor TEPasaParser.DestroyRegexEPasaParser; +begin + FEPasaRegex.Free; + FEPasaLocker.Free; +end; + +function TEPasaParser.Parse(const AEPasaText: String): TEPasa; +var + LErrorCode: EPasaErrorCode; +begin + if (not TryParse(AEPasaText, Result, LErrorCode)) then + raise EArgumentException.CreateResFmt(@SInvalidEPasa, + ['AEPasaText', GetEnumName(TypeInfo(EPasaErrorCode), Ord(LErrorCode))]); + Exit(Result); +end; + +function TEPasaParser.TryParse(const AEPasaText: String; out AEPasa: TEPasa): Boolean; +var + LErrorCode: EPasaErrorCode; +begin + Result := TryParse(AEPasaText, AEPasa, LErrorCode); +end; + +function TEPasaParser.TryParse(const AEPasaText: String; out AEPasa: TEPasa; out AErrorCode: EPasaErrorCode): Boolean; +begin + Result := TryParse(AEPasaText,False,AEPasa,AErrorCode); +end; + +function TEPasaParser.TryParse(const AEPasaText: String; AOmitExtendedChecksumVerification: Boolean; out AEPasa: TEPasa; out AErrorCode: EPasaErrorCode): Boolean; +var + LChecksumDelim, LAccountNumber, LAccountChecksum, LAccountName, LPayloadStartChar, + LPayloadEndChar, LPayloadContent, LPayloadPasswordDelim, LPayloadPassword, + LExtendedChecksumDelim, LExtendedChecksum, LActualChecksum: String; + LAccNo, LAccChecksum: UInt32; + LActualAccountChecksum: Byte; +begin + AErrorCode := EPasaErrorCode.Success; + AEPasa.Clear; + if (string.IsNullOrEmpty(AEPasaText)) then begin + AErrorCode := EPasaErrorCode.BadFormat; + Exit(False); + end; + + FEPasaLocker.Acquire; // Protect against multithread + Try + + FEPasaRegex.Match(AEPasaText); + + LChecksumDelim := FEPasaRegex.GetMatchFromName('ChecksumDelim'); + LAccountNumber := FEPasaRegex.GetMatchFromName('AccountNumber'); + LAccountChecksum := FEPasaRegex.GetMatchFromName('Checksum'); + LAccountName := FEPasaRegex.GetMatchFromName('AccountName'); + LPayloadStartChar := FEPasaRegex.GetMatchFromName('PayloadStartChar'); + LPayloadEndChar := FEPasaRegex.GetMatchFromName('PayloadEndChar'); + LPayloadContent := FEPasaRegex.GetMatchFromName('PayloadContent'); + LPayloadPasswordDelim := FEPasaRegex.GetMatchFromName('PayloadPasswordDelim'); + LPayloadPassword := FEPasaRegex.GetMatchFromName('PayloadPassword'); + LExtendedChecksumDelim := FEPasaRegex.GetMatchFromName('ExtendedChecksumDelim'); + LExtendedChecksum := FEPasaRegex.GetMatchFromName('ExtendedChecksum'); + + // Check parsed completely + if (AEPasaText <> FEPasaRegex.Value) then begin + AErrorCode := EPasaErrorCode.BadFormat; + Exit(False); + end; + + Finally + FEPasaLocker.Release; + End; + + if (LAccountName <> #0) then begin + // Account Name + if (string.IsNullOrEmpty(LAccountName)) then begin + AErrorCode := EPasaErrorCode.BadFormat; + Exit(False); + end; + + // KeyNote + // when multiple enums are OR'ed in C#, they are combined and + // if any of the enums numeric value is zero, it is excluded. + // in our case,"PayloadType.NonDeterministic" is always zero so we exclude it from our set. + AEPasa.PayloadType := AEPasa.PayloadType + [ptAddressedByName] -[ptNonDeterministic]; + AEPasa.AccountName := TPascal64Encoding.Unescape(LAccountName); + AEPasa.Account := Nil; + AEPasa.AccountChecksum := Nil; + end else begin + // Account Number + if (not UInt32.TryParse(LAccountNumber, LAccNo)) then begin + AErrorCode := EPasaErrorCode.InvalidAccountNumber; + Exit(False); + end; + AEPasa.Account := LAccNo; + LActualAccountChecksum := TEPasa.CalculateAccountChecksum(LAccNo); + + if (LChecksumDelim <> #0) then begin + // validate account checksum + if (not UInt32.TryParse(LAccountChecksum, LAccChecksum)) then begin + AErrorCode := EPasaErrorCode.AccountChecksumInvalid; + Exit(False); + end; + if (LAccChecksum <> LActualAccountChecksum) then begin + AErrorCode := EPasaErrorCode.BadChecksum; + Exit(False); + end; + end; + + AEPasa.AccountChecksum := LActualAccountChecksum; + end; + + // Encryption type + case LPayloadStartChar[1] of + #0: begin + // do nothing + end; + '[': begin + if (LPayloadEndChar <> ']') then begin + AErrorCode := EPasaErrorCode.MismatchedPayloadEncoding; + Exit(False); + end; + AEPasa.PayloadType := AEPasa.PayloadType + [ptPublic] - + [ptNonDeterministic]; + end; + '(': begin + if (LPayloadEndChar <> ')') then begin + AErrorCode := EPasaErrorCode.MismatchedPayloadEncoding; + Exit(False); + end; + AEPasa.PayloadType := AEPasa.PayloadType + [ptRecipientKeyEncrypted] - [ptNonDeterministic]; + end; + '<': begin + if (LPayloadEndChar <> '>') then begin + AErrorCode := EPasaErrorCode.MismatchedPayloadEncoding; + Exit(False); + end; + AEPasa.PayloadType := AEPasa.PayloadType + + [ptSenderKeyEncrypted] - [ptNonDeterministic]; + end; + + '{': begin + if (LPayloadEndChar <> '}') then begin + AErrorCode := EPasaErrorCode.MismatchedPayloadEncoding; + Exit(False); + end; + AEPasa.PayloadType := AEPasa.PayloadType + [ptPasswordEncrypted] - [ptNonDeterministic]; + end + else raise ENotSupportedException.CreateResFmt(@SUnRecognizedStartCharacter, [LPayloadStartChar]); + end; + + // Password + if (AEPasa.PayloadType.HasTrait(ptPasswordEncrypted)) then begin + if (LPayloadPasswordDelim = #0) then begin + AErrorCode := EPasaErrorCode.MissingPassword; + Exit(False); + end; + + AEPasa.Password := TPascalAsciiEncoding.UnEscape(IIF(LPayloadPassword = #0, '', LPayloadPassword)); + end else if (LPayloadPasswordDelim <> #0) then begin + AErrorCode := EPasaErrorCode.UnusedPassword; + Exit(False); + end; + + // Payload + if (LPayloadStartChar <> #0) then begin + if (LPayloadContent = #0) then begin + AEPasa.Payload := string.Empty; + end else if (LPayloadContent.StartsWith('"')) then begin + AEPasa.PayloadType := AEPasa.PayloadType + [ptAsciiFormatted] - [ptNonDeterministic]; + AEPasa.Payload := TPascalAsciiEncoding.UnEscape(LPayloadContent.Trim(['"'])); + end else if (LPayloadContent.StartsWith('0x')) then begin + AEPasa.PayloadType := AEPasa.PayloadType + [ptHexFormatted] - [ptNonDeterministic]; + AEPasa.Payload := System.Copy(LPayloadContent, 3, LPayloadContent.Length - 2); + end else begin + AEPasa.PayloadType := AEPasa.PayloadType + [ptBase58Formatted] - [ptNonDeterministic]; + AEPasa.Payload := LPayloadContent; + end; + end; + + // Payload Lengths + if (not TEPasaComp.IsValidPayloadLength(AEPasa.PayloadType, AEPasa.Payload)) then begin + AErrorCode := EPasaErrorCode.PayloadTooLarge; + Exit(False); + end; + + // Extended Checksum + LActualChecksum := TEPasaComp.ComputeExtendedChecksum(AEPasa.ToString(True)); + if (LExtendedChecksumDelim <> #0) then begin + if (LExtendedChecksum <> LActualChecksum) and (Not AOmitExtendedChecksumVerification) then begin + AErrorCode := EPasaErrorCode.BadExtendedChecksum; + Exit(False); + end; + end; + AEPasa.ExtendedChecksum := LActualChecksum; + + Result := True; +end; + + +{ TEPasaComp } + +class function TEPasaComp.ReadUInt16AsBytesLE(AValue: UInt16): TArray; +begin + System.SetLength(Result, System.SizeOf(UInt16)); + Result[0] := Byte(AValue); + Result[1] := Byte(AValue shr 8); +end; + +class function TEPasaComp.ComputeExtendedChecksum(const AText: String): String; +var + LHashInstance: IHashWithKey; + LChecksum: UInt16; +begin + LHashInstance := THashFactory.THash32.CreateMurmurHash3_x86_32(); + LHashInstance.Key := TConverters.ReadUInt32AsBytesLE(ExtendedChecksumMurMur3Seed); + LChecksum := UInt16(LHashInstance.ComputeBytes(TEncoding.ASCII.GetBytes(AText)).GetUInt32() mod 65536); + Result := THexEncoding.Encode(ReadUInt16AsBytesLE(LChecksum), True); +end; + +class function TEPasaComp.IsValidExtendedChecksum(const AText, AChecksum: String): Boolean; +begin + Result := ComputeExtendedChecksum(AText) = AChecksum; +end; + +class function TEPasaComp.IsValidPayloadLength(APayloadType: TPayloadType; const APayloadContent: String): Boolean; +begin + if (string.IsNullOrEmpty(APayloadContent)) then + Exit(True); + + if (APayloadType.HasTrait(ptPublic)) then begin + + if (APayloadType.HasTrait(ptAsciiFormatted)) then + Exit(TPascalAsciiEncoding.UnEscape(APayloadContent).Length <= MaxPublicAsciiContentLength); + + if (APayloadType.HasTrait(ptHexFormatted)) then + Exit(APayloadContent.Length <= MaxPublicHexContentLength); + + if (APayloadType.HasTrait(ptBase58Formatted)) then + Exit(APayloadContent.Length <= MaxPublicBase58ContentLength); + + // unknown encoding format + Result := False; + end; + + if (APayloadType.HasTrait(ptSenderKeyEncrypted) or APayloadType.HasTrait(ptRecipientKeyEncrypted)) then begin + + if (APayloadType.HasTrait(ptAsciiFormatted)) then + Exit(TPascalAsciiEncoding.UnEscape(APayloadContent).Length <= MaxECIESAsciiContentLength); + + if (APayloadType.HasTrait(ptHexFormatted)) then + Exit(APayloadContent.Length <= MaxECIESHexContentLength); + + if (APayloadType.HasTrait(ptBase58Formatted)) then + Exit(APayloadContent.Length <= MaxECIESBase58ContentLength); + // unknown encoding format + Result := False; + end; + + if (APayloadType.HasTrait(ptPasswordEncrypted)) then begin + if (APayloadType.HasTrait(ptAsciiFormatted)) then + Exit(TPascalAsciiEncoding.UnEscape(APayloadContent).Length <= MaxAESAsciiContentLength); + + if (APayloadType.HasTrait(ptHexFormatted)) then + Exit(APayloadContent.Length <= MaxAESHexContentLength); + + if (APayloadType.HasTrait(ptBase58Formatted)) then + Exit(APayloadContent.Length <= MaxAESBase58ContentLength); + + // unknown encoding format + Result := False; + end; + + // unknown encryption format + Result := False; +end; + +class function TEPasaComp.IsValidPasswordLength(const APasswordValue : String): Boolean; +begin + // no password length policy established (only client-side concern) + Result := True; +end; + +class function TEPasaComp.GetPayloadTypeProtocolByte(const APayloadType : TPayloadType) : Byte; +var + LPayloadType : TPayloadTrait; +begin + Result := 0; // NonDeterministic by default + for LPayloadType := Low(TPayloadTrait) to High(TPayloadTrait) do + if APayloadType.HasTrait(LPayloadType) then + Result := Result OR LPayloadType.ToProtocolValue; +end; + +class function TEPasaComp.GetPayloadTypeFromProtocolByte(AByte: Byte) : TPayloadType; +var + LPayloadType : TPayloadTrait; + LPayloadTypeByte : byte; +begin + if AByte = 0 then + Exit([ptNonDeterministic]); + + Result := []; + for LPayloadType := Low(TPayloadTrait) to High(TPayloadTrait) do begin + LPayloadTypeByte := LPayloadType.ToProtocolValue; + if (AByte AND LPayloadTypeByte) = LPayloadTypeByte then + Result := Result + [LPayloadType]; + end; +end; + +class function TEPasaComp.FromProtocolValue(AVal : Byte) : TPayloadType; +begin + if AVal = 0 then begin + Exit([ptNonDeterministic]); + end; + Result := []; + if AVal AND BYTE_BIT_0 <> 0 then Result := Result + [ptPublic]; + if AVal AND BYTE_BIT_1 <> 0 then Result := Result + [ptRecipientKeyEncrypted]; + if AVal AND BYTE_BIT_2 <> 0 then Result := Result + [ptSenderKeyEncrypted]; + if AVal AND BYTE_BIT_3 <> 0 then Result := Result + [ptPasswordEncrypted]; + if AVal AND BYTE_BIT_4 <> 0 then Result := Result + [ptAsciiFormatted]; + if AVal AND BYTE_BIT_5 <> 0 then Result := Result + [ptHexFormatted]; + if AVal AND BYTE_BIT_6 <> 0 then Result := Result + [ptBase58Formatted]; + if AVal AND BYTE_BIT_7 <> 0 then Result := Result + [ptAddressedByName]; +end; + + + + +initialization +{$IFDEF FPC} +FillChar(EmptyEPasa, SizeOf(EmptyEPASA), 0); +{$ELSE} +EmptyEPasa := Default(TEPasa); +{$ENDIF} +end. diff --git a/src/core/UEPasaDecoder.pas b/src/core/UEPasaDecoder.pas new file mode 100644 index 000000000..3c8bd8341 --- /dev/null +++ b/src/core/UEPasaDecoder.pas @@ -0,0 +1,300 @@ +unit UEPasaDecoder; + +{ Copyright (c) PascalCoin Developers - Herman Schoenfeld - Albert Molina + + PIP-0027: E-PASA Reference Implementation + See: https://github.com/PascalCoin/PascalCoin/blob/master/PIP/PIP-0027.md + + Distributed under the MIT software license, see the accompanying file LICENSE + or visit http://www.opensource.org/licenses/mit-license.php. + + This unit is a part of the PascalCoin Project, an infinitely scalable + cryptocurrency. Find us here: + Source: https://github.com/PascalCoin/PascalCoin + + THIS LICENSE HEADER MUST NOT BE REMOVED. +} + +{$IFDEF FPC} + {$MODE DELPHI} + {$ZEROBASEDSTRINGS OFF} +{$ENDIF FPC} + +interface + +{$I ./../config.inc} + +uses + SysUtils, + TypInfo, + {$IFNDEF FPC}System.Generics.Collections{$ELSE}Generics.Collections{$ENDIF}, + UBlockChain, UNode, UBaseTypes, UPCDataTypes, + UAccounts, + UEncoding, + UEPasa, + UWallet, + URPC, UJSONFunctions; + +type + TDecodeEPasaResult = (der_Decoded, der_Undefined, der_NonDeterministic, der_InvalidPayloadType, der_AccountNameNotFound, der_NotEnoughData, der_PrivateKeyNotFound, der_PasswordNotFound); + + TEPasaDecoder = Class + public + class Function TryDecodeEPASA(AAccount : Cardinal; const APayload : TOperationPayload; const ANode : TNode; const AWalletKeys : TWalletKeys; const APasswords : TList; + out ADecodeEPasaResult : TDecodeEPasaResult; out AEPasa : TEPasa) : Boolean; overload; + class Function TryDecodeEPASA(AAccount : Cardinal; const APayload : TOperationPayload; const ANode : TNode; const AWalletKeys : TWalletKeys; const APasswords : TList; + out AEPasa : TEPasa) : Boolean; overload; + class Function DecodeEPASA(AAccount : Cardinal; const APayload : TOperationPayload; const ANode : TNode; const AWalletKeys : TWalletKeys; const APasswords : TList) : String; overload; + class function CheckEPasa(const ASender : TRPCProcess; const AAccount_EPasa : String; AJSONResponse : TPCJSONObject; var AErrorNum : Integer; var AErrorDesc : String) : Boolean; overload; + class function CheckEPasa(const ASender : TRPCProcess; const AMethodName : String; AInputParams, AJSONResponse : TPCJSONObject; var AErrorNum : Integer; var AErrorDesc : String) : Boolean; overload; + class function ValidateEPasa(const ASender : TRPCProcess; const AMethodName : String; AInputParams, AJSONResponse : TPCJSONObject; var AErrorNum : Integer; var AErrorDesc : String) : Boolean; + End; + +implementation + +uses UPCEncryption, UCommon, UCrypto; + +{ TEPasaDecoder } + +class function TEPasaDecoder.TryDecodeEPASA(AAccount: Cardinal; + const APayload: TOperationPayload; const ANode : TNode; const AWalletKeys: TWalletKeys; + const APasswords: TList; out ADecodeEPasaResult: TDecodeEPasaResult; + out AEPasa: TEPasa): Boolean; +var + LUnencryptedPayloadBytes, LPwd : TBytes; + LDone : Boolean; + i : Integer; + LAccount : TAccount; +begin + LUnencryptedPayloadBytes := Nil; + AEPasa.Clear; + Result := False; + ADecodeEPasaResult := der_Decoded; + AEPasa.Account := AAccount; + AEPasa.AccountChecksum := TEPasa.CalculateAccountChecksum(AAccount); + AEPasa.PayloadType := TEPasaComp.FromProtocolValue(APayload.payload_type); + if AEPasa.PayloadType.HasTrait(ptNonDeterministic) then begin + ADecodeEPasaResult := der_NonDeterministic; + Exit(False); + end; + if Not AEPasa.PayloadType.IsValid then begin + ADecodeEPasaResult := der_InvalidPayloadType; + Exit(False); + end; + + if AEPasa.PayloadType.HasTrait(ptAddressedByName) then begin + if (AEPasa.PayloadType.HasTrait(ptPublic) and + AEPasa.PayloadType.HasTrait(ptBase58Formatted)) then begin + // PayToKey candidate... + AEPasa.AccountName := '@'; + end else begin + if Assigned(ANode) then begin + LAccount := ANode.GetMempoolAccount(AAccount); + AEPasa.AccountName := LAccount.name.ToPrintable; + end; + if AEPasa.AccountName='' then begin + ADecodeEPasaResult := der_AccountNameNotFound; // Will continue processing + end; + end; + end; + + // payload data + if (Length(APayload.payload_raw)=0) then begin + // Nothing to decode... + end else if (AEPasa.PayloadType.HasTrait(ptSenderKeyEncrypted)) or (AEPasa.PayloadType.HasTrait(ptRecipientKeyEncrypted)) then begin + if Assigned(AWalletKeys) then begin + LDone := False; + i := 0; + while (Not LDone) and (i < AWalletKeys.Count) do begin + if Assigned(AWalletKeys.Key[i].PrivateKey) then begin + if TPCEncryption.DoPascalCoinECIESDecrypt(AWalletKeys.Key[i].PrivateKey.PrivateKey,APayload.payload_raw,LUnencryptedPayloadBytes) then begin + LDone := True; + end; + end; + inc(i); + end; + if Not LDone then begin + ADecodeEPasaResult := der_PrivateKeyNotFound; + Exit(False); + end; + end else begin + ADecodeEPasaResult := der_NotEnoughData; + Exit(False); + end; + end else if (AEPasa.PayloadType.HasTrait(ptPasswordEncrypted)) then begin + if Assigned(APasswords) then begin + LDone := False; + i := 0; + while (Not LDone) and (i < APasswords.Count) do begin + LPwd.FromString(APasswords[i]); + if TPCEncryption.DoPascalCoinAESDecrypt(APayload.payload_raw,LPwd,LUnencryptedPayloadBytes) then begin + AEPasa.Password := APasswords[i]; + LDone := True; + end; + inc(i); + end; + if Not LDone then begin + ADecodeEPasaResult := der_PasswordNotFound; + Exit(False); + end; + end else begin + ADecodeEPasaResult := der_NotEnoughData; + Exit(False); + end; + end else begin + if (Not AEPasa.PayloadType.HasTrait(ptPublic)) then begin + // Internal Error + ADecodeEPasaResult := der_Undefined; + Exit(False); + end; + LUnencryptedPayloadBytes := APayload.payload_raw; + end; + // LUnencryptedPayloadBytes Has Value in RAW + if (AEPasa.PayloadType.HasTrait(ptAsciiFormatted)) then begin + AEPasa.Payload := LUnencryptedPayloadBytes.ToString; + end else if (AEPasa.PayloadType.HasTrait(ptHexFormatted)) then begin + AEPasa.Payload := THexEncoding.Encode(LUnencryptedPayloadBytes,True); + end else if (AEPasa.PayloadType.HasTrait(ptBase58Formatted)) then begin + AEPasa.Payload := TPascalBase58Encoding.Encode(LUnencryptedPayloadBytes); + end else begin + // Internal error + ADecodeEPasaResult := der_Undefined; + Exit(False); + end; + Result := true; +end; + +class function TEPasaDecoder.CheckEPasa(const ASender: TRPCProcess; + const AMethodName: String; AInputParams, AJSONResponse: TPCJSONObject; + var AErrorNum: Integer; var AErrorDesc: String): Boolean; +begin + Result := CheckEPAsa(ASender,AInputParams.AsString('account_epasa',''),AJSONResponse,AErrorNum,AErrorDesc); +end; + +class function TEPasaDecoder.CheckEPasa(const ASender: TRPCProcess; + const AAccount_EPasa: String; AJSONResponse: TPCJSONObject; + var AErrorNum: Integer; var AErrorDesc: String): Boolean; +var LEPasa : TEPasa; + LResultObject : TPCJSONObject; +begin + if Not TEPasa.TryParse(AAccount_EPasa,LEPasa) then begin + AErrorNum := CT_RPC_ErrNum_InvalidEPASA; + AErrorDesc := 'Not a valid epasa: '+AAccount_EPasa; + Result := False; + Exit(False); + end else begin + Result := True; + LResultObject := AJSONResponse.GetAsObject('result'); + LResultObject.GetAsVariant('account_epasa').Value := LEPasa.ToString(False); + LResultObject.GetAsVariant('account_epasa_classic').Value := LEPasa.ToClassicPASAString; + + if LEPasa.PayloadType.HasTrait(ptAddressedByName) then begin + LResultObject.GetAsVariant('account').Value := LEPasa.AccountName; + end else begin + LResultObject.GetAsVariant('account').Value := LEPasa.Account.Value; + end; + + if LEPasa.PayloadType.HasTrait(ptPublic) then begin + LResultObject.GetAsVariant('payload_method').Value := 'none'; + end else if LEPasa.PayloadType.HasTrait(ptSenderKeyEncrypted) then begin + LResultObject.GetAsVariant('payload_method').Value := 'sender'; + end else if LEPasa.PayloadType.HasTrait(ptRecipientKeyEncrypted) then begin + LResultObject.GetAsVariant('payload_method').Value := 'dest'; + end else if LEPasa.PayloadType.HasTrait(ptPasswordEncrypted) then begin + LResultObject.GetAsVariant('payload_method').Value := 'aes'; + LResultObject.GetAsVariant('pwd').Value := LEPasa.Password; + end; + + if LEPasa.PayloadType.HasTrait(ptAsciiFormatted) then begin + LResultObject.GetAsVariant('payload_encode').Value := 'string'; + end else if LEPasa.PayloadType.HasTrait(ptHexFormatted) then begin + LResultObject.GetAsVariant('payload_encode').Value := 'hexa'; + end else if LEPasa.PayloadType.HasTrait(ptBase58Formatted) then begin + LResultObject.GetAsVariant('payload_encode').Value := 'base58'; + end; + + LResultObject.GetAsVariant('payload').Value := LEPasa.GetRawPayloadBytes.ToHexaString; + LResultObject.GetAsVariant('payload_type').Value := LEPasa.PayloadType.ToProtocolValue; + LResultObject.GetAsVariant('is_pay_to_key').Value := LEPasa.IsPayToKey; + end; +end; + +class function TEPasaDecoder.DecodeEPASA(AAccount: Cardinal; + const APayload: TOperationPayload; const ANode: TNode; + const AWalletKeys: TWalletKeys; const APasswords: TList): String; +var LEPasa : TEPasa; +begin + if TryDecodeEPASA(AAccount,APayload,ANode,AWalletKeys,APasswords,LEPasa) then begin + Result := LEPasa.ToClassicPASAString; + end else Result := ''; +end; + +class function TEPasaDecoder.TryDecodeEPASA(AAccount: Cardinal; + const APayload: TOperationPayload; const ANode : TNode; const AWalletKeys: TWalletKeys; + const APasswords: TList; out AEPasa: TEPasa): Boolean; +var LDecodeEPasaResult: TDecodeEPasaResult; +begin + Result := TryDecodeEPASA(AAccount,APayload,ANode,AWalletKeys,APasswords,LDecodeEPasaResult,AEPasa); +end; + +class function TEPasaDecoder.ValidateEPasa(const ASender: TRPCProcess; + const AMethodName: String; AInputParams, AJSONResponse: TPCJSONObject; + var AErrorNum: Integer; var AErrorDesc: String): Boolean; +var + s : String; + card : Cardinal; + LEPasaStr, LDelimStart,LDelimEnd, LPwdZone, LPayload : String; + LRawPayload : TRawBytes; +begin + LEPasaStr := ''; + LPwdZone := ''; + LEPasaStr := AInputParams.AsString('account',''); + s := Trim(AInputParams.AsString('payload_method','none')); + if s='dest' then begin + LDelimStart := '('; + LDelimEnd := ')'; + end else if s='sender' then begin + LDelimStart := '<'; + LDelimEnd := '>'; + end else if s='aes' then begin + LDelimStart := '{'; + LDelimEnd := '}'; + LPwdZone := ':' + AInputParams.AsString('pwd',''); + end else if (s='none') or (trim(s)='') then begin + LDelimStart := '['; + LDelimEnd := ']'; + end else begin + AErrorNum := CT_RPC_ErrNum_InvalidData; + AErrorDesc := Format('"payload_method" %s not valid',[s]); + Exit(False); + end; + s := Trim(AInputParams.AsString('payload','')); + if Not TCrypto.HexaToRaw(s,LRawPayload) then begin + AErrorNum := CT_RPC_ErrNum_InvalidData; + AErrorDesc := Format('"payload" is not an HEXASTRING: %s',[s]); + Exit(False); + end; + s := Trim(AInputParams.AsString('payload_encode','string')); + if s='hexa' then begin + LPayload := '0x'+LRawPayload.ToHexaString; + end else if s='base58' then begin + LPayload := TPascalBase58Encoding.Encode(LRawPayload); + end else if (s='string') or (Trim(s)='') then begin + LPayload := '"'+TPascalAsciiEncoding.Escape(LRawPayload.ToString)+'"'; + end else begin + AErrorNum := CT_RPC_ErrNum_InvalidData; + AErrorDesc := Format('"payload_encode" %s not valid',[s]); + Exit(False); + end; + + LEPasaStr := AInputParams.AsString('account','') + LDelimStart + LPayload + LPwdZone + LDelimEnd; + Result := CheckEPasa(ASender,LEPasaStr,AJSONResponse,AErrorNum,AErrorDesc); +end; + +initialization + TRPCProcess.RegisterProcessMethod('validateepasa',TEPasaDecoder.ValidateEPasa); + TRPCProcess.RegisterProcessMethod('checkepasa',TEPasaDecoder.CheckEPasa); +finalization + TRPCProcess.UnregisterProcessMethod('validateepasa'); + TRPCProcess.UnregisterProcessMethod('checkepasa'); +end. diff --git a/src/core/UEncoding.pas b/src/core/UEncoding.pas new file mode 100644 index 000000000..e4bf715a5 --- /dev/null +++ b/src/core/UEncoding.pas @@ -0,0 +1,568 @@ +unit UEncoding; + +{ Copyright (c) 2020 by Herman Schoenfeld + + Contains text encoding schemes used through PascalCoin. + + Distributed under the MIT software license, see the accompanying file LICENSE + or visit http://www.opensource.org/licenses/mit-license.php. + + This unit is a part of the PascalCoin Project, an infinitely scalable + cryptocurrency. Find us here: + Web: https://www.pascalcoin.org + Source: https://github.com/PascalCoin/PascalCoin + + THIS LICENSE HEADER MUST NOT BE REMOVED. +} + +{$IFDEF FPC} + {$MODE Delphi} +{$ENDIF} + +interface + +uses + SysUtils, + TypInfo, + uregexpr, + UCommon, + UCrypto; + + +type + + { TCustomRegex } + + TCustomRegex = class sealed(TObject) + var + FRegex: TRegExpr; + public + constructor Create(const ARegexExpression: String); + destructor Destroy(); override; + function IsMatch(const AInputString: String): Boolean; + function GetMatchFromName(const AGroupName: String): String; + function Value(): String; + procedure Match(const AInputString: String); + end; + + + { TPascalAsciiEncoding } + + TPascalAsciiEncoding = class sealed(TObject) + strict private + class var FEscapedStringRegex: TCustomRegex; + class constructor CreatePascalAsciiEncoding(); + class destructor DestroyPascalAsciiEncoding(); + + public + const + EscapeChar: Char = '\'; + CharSet = ' !"#$%&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~'; + CharSetEscaped = '"():<>[\]{}'; + CharSetUnescaped = ' !#$%&''*+,-./0123456789;=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ^_`abcdefghijklmnopqrstuvwxyz|~'; + CharPattern = '( |!|\\"|#|\$|%|&|''|\\\(|\\\)|\*|\+|,|-|\.|/|0|1|2|3|4|5|6|7|8|9|\\:|;|\\<|=|\\>|\?|@|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|\\\[|\\\\|\\]|\^|_|`|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|\\\{|\||\\\}|~)'; + StringPattern = CharPattern + '+'; + + class function IsValidEscaped(const ASafeAnsiString: String) : Boolean; static; + class function IsValidUnescaped(const AUnescapedPascalAsciiString: String) : Boolean; static; + class function Escape(const APascalAsciiString: String): String; static; + class function Unescape(const APascalAsciiString: String): String; static; + end; + + { TPascal64Encoding } + + TPascal64Encoding = class sealed(TObject) + strict private + class var FEscapedRegex: TCustomRegex; + class constructor CreatePascal64Encoding(); + class destructor DestroyPascal64Encoding(); + public + const + EscapeChar: Char = '\'; + CharSet = 'abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()-+{}[]_:"`|<>,.?/~'; + CharSetStart = 'abcdefghijklmnopqrstuvwxyz!@#$%^&*()-+{}[]_:"`|<>,.?/~'; + CharSetEscaped = '(){}[]:"<>'; + CharSetUnescaped = 'abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*-+_`|,.?/~'; + StartCharPattern = '(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|!|@|#|\$|%|\^|&|\*|\\\(|\\\)|-|\+|\\\{|\\\}|\\\[|\\]|_|\\:|\\"|`|\||\\<|\\>|,|\.|\?|/|~)'; + NextCharPattern = '(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|0|1|2|3|4|5|6|7|8|9|!|@|#|\$|%|\^|&|\*|\\\(|\\\)|-|\+|\\\{|\\\}|\\\[|\\]|_|\\:|\\"|`|\||\\<|\\>|,|\.|\?|/|~)'; + StringPattern = StartCharPattern + NextCharPattern + '*'; + StringOnlyPattern = StringPattern + '$'; + + class function IsValidEscaped(const AEscapedPascal64String: String) : Boolean; static; + class function IsValidUnescaped(const AUnescapedPascal64String: String) : Boolean; static; + class function Escape(const APascal64String: String): String; static; + class function Unescape(const APascal64String: String): String; static; + end; + + + { THexEncoding } + + THexEncoding = class sealed(TObject) + private + class var FHexStringRegex: TCustomRegex; + class constructor CreateHexEncoding(); + class destructor DestroyHexEncoding(); + + public + const + CharSet = '0123456789abcdef'; + NibblePattern = '[0-9a-fA-F]'; + BytePattern = NibblePattern + '{2}'; + SubStringPattern = '(?:' + BytePattern + ')+'; + StringPattern = SubStringPattern + '$'; + + class function IsValid(const AHexString: String): Boolean; static; + class function Decode(const AHexString: String): TArray; static; + class function TryDecode(const AHexString: String; out AResult: TArray): Boolean; static; + class function Encode(const ABytes: TArray; AOmitPrefix: Boolean = True): String; static; + end; + + { TPascalBase58Encoding } + + TPascalBase58Encoding = class sealed(TObject) + private + class var FStringRegex: TCustomRegex; + class constructor CreatePascalBase58Encoding(); + class destructor DestroyPascalBase58Encoding(); + + public + const + CharSet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'; + CharPattern = '[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]'; + SubStringPattern = CharPattern + '+'; + StringPattern = SubStringPattern + '$'; + + class function IsValid(const ABase58String: String): Boolean; static; + class function Decode(const ABase58String: String): TArray; static; + class function TryDecode(const ABase58String: String; out AResult: TArray): Boolean; static; + class function Encode(const ABytes: TArray): String; static; + end; + + { TPASCEncoding } + + TPASCEncoding = class sealed(TObject) + public + class function IsValid(const APasc: String): Boolean; static; + class function Decode(const APasc: String): Int64; static; + class function TryDecode(const APasc: String; out AMolinas: Int64) : Boolean; static; + class function Encode(const AMolinas: Int64): String; static; + end; + + + { TStringExtensions } + + TStringExtensions = class sealed(TObject) + public + class function Escape(const AStr: String; AEscapeSymbol: Char; const AEscapedChars: TArray): String; static; + class function Unescape(const AStr: String; AEscapeSymbol: Char; const AEscapedChars: TArray): String; static; + class function All(const ANeedle: String; const AStack: String) : Boolean; static; + end; + +resourcestring + SUnknownPayloadEncoding = 'Unknown payload encoding.'; + SInvalidEPasaFormat = 'Invalid E-PASA format, %s'; + SInvalidEPasa = 'Invalid EPASA "%s": %s'; + SInvalidHexString = 'Invalid hex-formatted string, %s'; + SInvalidBase58String = 'Invalid Base58-formatted string, %s'; + SBase58EncodeError = 'Error Encoding to Base58'; + SUnRecognizedStartCharacter = 'Unrecognized start character, %s'; + SInvalidPASCQuantity = 'Invalid PASC quantity string, %s'; + +implementation + +uses + HlpHashFactory, + HlpIHashInfo, + HlpConverters, + UJSONFunctions; + +{ TCustomRegex } + +constructor TCustomRegex.Create(const ARegexExpression: String); +begin + inherited Create(); + FRegex := TRegExpr.Create(ARegexExpression); +end; + +destructor TCustomRegex.Destroy; +begin + FRegex.Free; + inherited Destroy; +end; + +function TCustomRegex.GetMatchFromName(const AGroupName: String): String; +var + i: Int32; +begin + Result := #0; + // carefull: E:\SourceCode\PascalCoin-master\src\libraries\regex must be added to project file + // otherwise wrong unit will be used from: + // Drive:\Tools\Lazarus\fpc\3.2.0\source\packages\regexpr\src + i := FRegex.MatchIndexFromName(AGroupName); + if i >= 0 then begin + Result := FRegex.Match[i]; + end; +end; + +function TCustomRegex.IsMatch(const AInputString: String): Boolean; +begin + Result := FRegex.Exec(AInputString); +end; + +procedure TCustomRegex.Match(const AInputString: String); +begin + FRegex.Exec(AInputString); +end; + +function TCustomRegex.Value: String; +begin + Result := FRegex.Match[0]; +end; + +{ TPascalAsciiEncoding } + +class function TPascalAsciiEncoding.IsValidEscaped(const ASafeAnsiString : String): Boolean; +begin + Result := FEscapedStringRegex.IsMatch(ASafeAnsiString); +end; + +class function TPascalAsciiEncoding.IsValidUnescaped (const AUnescapedPascalAsciiString: String): Boolean; +begin + Result := TStringExtensions.All(AUnescapedPascalAsciiString, CharSet); +end; + +class function TPascalAsciiEncoding.Escape(const APascalAsciiString : String): String; +begin + Result := TStringExtensions.Escape(APascalAsciiString, EscapeChar, CharSetEscaped.ToCharArray); +end; + +class function TPascalAsciiEncoding.Unescape(const APascalAsciiString : String): String; +begin + Result := TStringExtensions.Unescape(APascalAsciiString, EscapeChar, CharSetEscaped.ToCharArray); +end; + +class constructor TPascalAsciiEncoding.CreatePascalAsciiEncoding; +begin + FEscapedStringRegex := TCustomRegex.Create(StringPattern); +end; + +class destructor TPascalAsciiEncoding.DestroyPascalAsciiEncoding; +begin + FEscapedStringRegex.Free; +end; + +{ TPascal64Encoding } + +class function TPascal64Encoding.IsValidEscaped(const AEscapedPascal64String : String): Boolean; +begin + Result := FEscapedRegex.IsMatch(AEscapedPascal64String); +end; + +class function TPascal64Encoding.IsValidUnescaped(const AUnescapedPascal64String : String): Boolean; +begin + Result := (3 <= AUnescapedPascal64String.Length) and + (AUnescapedPascal64String.Length <= 64) and + (StartCharPattern.Contains(AUnescapedPascal64String[1])) and + (TStringExtensions.All(AUnescapedPascal64String, CharSet)); +end; + +class function TPascal64Encoding.Escape(const APascal64String: String): String; +begin + Result := TStringExtensions.Escape(APascal64String, EscapeChar, + CharSetEscaped.ToCharArray); +end; + +class function TPascal64Encoding.Unescape(const APascal64String : String): String; +begin + Result := TStringExtensions.Unescape(APascal64String, EscapeChar, + CharSetEscaped.ToCharArray); +end; + +class constructor TPascal64Encoding.CreatePascal64Encoding; +begin + FEscapedRegex := TCustomRegex.Create(StringOnlyPattern); +end; + +class destructor TPascal64Encoding.DestroyPascal64Encoding; +begin + FEscapedRegex.Free; +end; + +{ THexEncoding } + +class function THexEncoding.IsValid(const AHexString: String): Boolean; +begin + Result := FHexStringRegex.IsMatch(AHexString); +end; + +class function THexEncoding.Decode(const AHexString: String): TArray; +begin + if (not TryDecode(AHexString, Result)) then + raise EArgumentException.CreateResFmt(@SInvalidHexString, ['AHexString']); +end; + +class function THexEncoding.TryDecode(const AHexString: String; out AResult: TArray): Boolean; +begin + AResult := Nil; + if (not IsValid(AHexString)) then + Exit(False); + + Result := TryHex2Bytes(AHexString, AResult); +end; + +class function THexEncoding.Encode(const ABytes: TArray; AOmitPrefix: Boolean): String; +begin + Result := Bytes2Hex(ABytes, not AOmitPrefix).ToLowerInvariant; +end; + +class constructor THexEncoding.CreateHexEncoding; +begin + FHexStringRegex := TCustomRegex.Create(StringPattern); +end; + +class destructor THexEncoding.DestroyHexEncoding; +begin + FHexStringRegex.Free; +end; + +{ TPascalBase58Encoding } + +class function TPascalBase58Encoding.IsValid(const ABase58String : String): Boolean; +begin + Result := FStringRegex.IsMatch(ABase58String); +end; + +class function TPascalBase58Encoding.Decode(const ABase58String: String) : TArray; +begin + if (not TryDecode(ABase58String, Result)) then + raise EArgumentException.CreateResFmt(@SInvalidBase58String, ['ABase58String']); +end; + +class function TPascalBase58Encoding.TryDecode(const ABase58String: String; out AResult: TArray): Boolean; +var + LBN, LBNAux, LBNBase: TBigNum; + i, LOffset: Int32; +begin + Result := False; + LBN := TBigNum.Create(0); + LBNAux := TBigNum.Create; + LBNBase := TBigNum.Create(1); + + try + for i := ABase58String.Length downto 1 do begin + LOffset := System.Pos(ABase58String[i], CharSet) - 1; + if LOffset < 0 then begin + Exit(False); + end; + LBNAux.Value := LOffset; + LBNAux.Multiply(LBNBase); + LBN.Add(LBNAux); + LBNBase.Multiply(CharSet.Length); + end; + AResult := THexEncoding.Decode(LBN.HexaValue); + finally + LBN.Free; + LBNAux.Free; + LBNBase.Free; + end; + TArrayTool.RemoveAt(AResult, 0); + Result := True; +end; + +class function TPascalBase58Encoding.Encode(const ABytes: TArray): String; +Var + LBN, LBNMod, LBNDiv: TBigNum; +begin + Result := string.Empty; + LBN := TBigNum.Create; + LBNMod := TBigNum.Create; + LBNDiv := TBigNum.Create(CharSet.Length); + + try + LBN.HexaValue := '01' + THexEncoding.Encode(ABytes); + while (not LBN.IsZero) do begin + LBN.Divide(LBNDiv, LBNMod); + If (LBNMod.Value >= 0) and (LBNMod.Value < CharSet.Length) then begin + Result := CharSet[Byte(LBNMod.Value) + 1] + Result; + end else begin + raise Exception.CreateRes(@SBase58EncodeError); + end; + end; + finally + LBN.Free; + LBNMod.Free; + LBNDiv.Free; + end; +end; + +class constructor TPascalBase58Encoding.CreatePascalBase58Encoding; +begin + FStringRegex := TCustomRegex.Create(StringPattern); +end; + +class destructor TPascalBase58Encoding.DestroyPascalBase58Encoding; +begin + FStringRegex.Free; +end; + +{ TPASCEncoding } + +class function TPASCEncoding.IsValid(const APasc: String): Boolean; +var + temp: Int64; +begin + Result := TryDecode(APasc, temp); +end; + +class function TPASCEncoding.Decode(const APasc: String): Int64; +begin + if (not TryDecode(APasc, Result)) then + begin + raise EArgumentException.CreateResFmt(@SInvalidPASCQuantity, ['APasc']); + end; +end; + +class function TPASCEncoding.TryDecode(const APasc: String; out AMolinas: Int64): Boolean; var s : String; + LPosThousand, LPosDecimal : Integer; + LMoneyString : String; +begin + AMolinas := 0; + LMoneyString := Trim(APasc); + if LMoneyString.Length=0 then begin + Result := true; + exit; + end; + try + LPosThousand := LMoneyString.IndexOf( TPCJSONData.JSONFormatSettings.ThousandSeparator ); + LPosDecimal := LMoneyString.IndexOf( TPCJSONData.JSONFormatSettings.DecimalSeparator ); + + if (LPosThousand>0) then begin + if (LPosThousand < LPosDecimal ) then begin + // Remove thousand values + LMoneyString := LMoneyString.Replace(String(TPCJSONData.JSONFormatSettings.ThousandSeparator),'',[rfReplaceAll]); + end else begin + // Possible 15.123.456,7890 format ( coma (,) = decimal separator ) + // Remove decimal "." and convert thousand to decimal + LMoneyString := LMoneyString.Replace(String(TPCJSONData.JSONFormatSettings.DecimalSeparator),'',[rfReplaceAll]); + LMoneyString := LMoneyString.Replace(TPCJSONData.JSONFormatSettings.ThousandSeparator,TPCJSONData.JSONFormatSettings.DecimalSeparator,[rfReplaceAll]); + end; + end; + + AMolinas := Round( StrToFloat(LMoneyString,TPCJSONData.JSONFormatSettings)*10000 ); + Result := true; + Except + result := false; + end; + +end; + +class function TPASCEncoding.Encode(const AMolinas: Int64): String; +begin + Result := FormatFloat('#,###0.0000',(AMolinas/10000.0), TPCJSONData.JSONFormatSettings); +end; + +{ TStringExtensions } + +class function TStringExtensions.Escape(const AStr: String; AEscapeSymbol: Char; const AEscapedChars: TArray): String; +var + LPPtr: PChar; + LPeek, LNext: Char; +begin + Result := String.Empty; + LPPtr := PChar(AStr); + + while LPPtr^ <> #0 do + begin + LPeek := LPPtr^; + if LPeek = AEscapeSymbol then + begin + Result := Result + LPPtr^; // append escape symbol + System.Inc(LPPtr); + LNext := LPPtr^; + if LNext = #0 then + begin + // end of string, last char was escape symbol + if (TArrayTool.Contains(AEscapedChars, AEscapeSymbol)) then + begin + // need to escape it + Result := Result + AEscapeSymbol; + end; + end + else if (TArrayTool.Contains(AEscapedChars, LNext)) then + begin + // is an escape sequence, append next char + Result := Result + LPPtr^; + System.Inc(LPPtr); + end + else + begin + // is an invalid escape sequence + if (TArrayTool.Contains(AEscapedChars, AEscapeSymbol)) then + begin + // need to escape symbol, since it's an escaped char + Result := Result + AEscapeSymbol; + end; + end; + + end + else if (TArrayTool.Contains(AEscapedChars, LPeek)) then + begin + // char needs escaping + Result := Result + AEscapeSymbol + LPPtr^; + System.Inc(LPPtr); + end + else + begin + // normal char + Result := Result + LPPtr^; + System.Inc(LPPtr); + end; + end; +end; + +class function TStringExtensions.Unescape(const AStr: String; AEscapeSymbol: Char; const AEscapedChars: TArray): String; +var + LPPtr: PChar; + LPeek: Char; +begin + Result := String.Empty; + LPPtr := PChar(AStr); + + while LPPtr^ <> #0 do + begin + LPeek := LPPtr^; + if LPeek = AEscapeSymbol then begin + System.Inc(LPPtr); // omit the escape symbol + LPeek := LPPtr^; + if LPeek = #0 then begin + // last character was the escape symbol, so include it + Result := Result + AEscapeSymbol; + break; + end; + + if (not(TArrayTool.Contains(AEscapedChars, LPeek))) then begin + // was not an escaped char, so include the escape symbol + Result := Result + AEscapeSymbol; + continue; + end; + + end; + // include the char (or escaped char) + Result := Result + LPPtr^; + System.Inc(LPPtr); + end; +end; + +class function TStringExtensions.All(const ANeedle: String; const AStack: String): Boolean; +var + c: Char; +begin + Result := True; + for c in ANeedle do + begin + if not AStack.Contains(c) then + Exit(False); + end; +end; + +end. diff --git a/src/core/UFileStorage.pas b/src/core/UFileStorage.pas index 311a3a35e..672eb3c31 100644 --- a/src/core/UFileStorage.pas +++ b/src/core/UFileStorage.pas @@ -29,7 +29,7 @@ interface Type - TBlockHeader = Record + TBlockHeader = packed record BlockNumber : Cardinal; StreamBlockRelStartPos : Int64; BlockSize : Cardinal; @@ -41,55 +41,36 @@ interface TFileStorage = Class(TStorage) private - FLowMemoryUsage: Boolean; FStorageLock : TPCCriticalSection; FBlockChainStream : TFileStream; - FPendingBufferOperationsStream : TFileStream; FStreamFirstBlockNumber : Int64; FStreamLastBlockNumber : Int64; FBlockHeadersFirstBytePosition : TArrayOfInt64; - FDatabaseFolder: AnsiString; - FBlockChainFileName : AnsiString; Function StreamReadBlockHeader(Stream: TStream; iBlockHeaders : Integer; BlockHeaderFirstBlock, Block: Cardinal; CanSearchBackward : Boolean; var BlockHeader : TBlockHeader): Boolean; Function StreamBlockRead(Stream : TStream; iBlockHeaders : Integer; BlockHeaderFirstBlock, Block : Cardinal; Operations : TPCOperationsComp) : Boolean; Function StreamBlockSave(Stream : TStream; iBlockHeaders : Integer; BlockHeaderFirstBlock : Cardinal; Operations : TPCOperationsComp) : Boolean; - Function GetFolder(Const AOrphan : TOrphan): AnsiString; Function GetBlockHeaderFirstBytePosition(Stream : TStream; Block : Cardinal; CanInitialize : Boolean; var iBlockHeaders : Integer; var BlockHeaderFirstBlock : Cardinal) : Boolean; Function GetBlockHeaderFixedSize : Int64; - procedure SetDatabaseFolder(const Value: AnsiString); Procedure ClearStream; Procedure GrowStreamUntilPos(Stream : TStream; newPos : Int64; DeleteDataStartingAtCurrentPos : Boolean); - Function GetPendingBufferOperationsStream : TFileStream; protected procedure SetReadOnly(const Value: Boolean); override; - procedure SetOrphan(const Value: TOrphan); override; Function DoLoadBlockChain(Operations : TPCOperationsComp; Block : Cardinal) : Boolean; override; Function DoSaveBlockChain(Operations : TPCOperationsComp) : Boolean; override; - Function DoMoveBlockChain(Start_Block : Cardinal; Const DestOrphan : TOrphan; DestStorage : TStorage) : Boolean; override; - Function DoSaveBank : Boolean; override; - Function DoRestoreBank(max_block : Int64; restoreProgressNotify : TProgressNotify) : Boolean; override; + Function DoMoveBlockChain(Start_Block : Cardinal; Const DestOrphan : TOrphan) : Boolean; override; Procedure DoDeleteBlockChainBlocks(StartingDeleteBlock : Cardinal); override; Function DoBlockExists(Block : Cardinal) : Boolean; override; Function LockBlockChainStream : TFileStream; Procedure UnlockBlockChainStream; - Function LoadBankFileInfo(Const Filename : AnsiString; var safeBoxHeader : TPCSafeBoxHeader) : Boolean; function GetFirstBlockNumber: Int64; override; function GetLastBlockNumber: Int64; override; function DoInitialize : Boolean; override; - Function DoOpenSafeBoxCheckpoint(blockCount : Cardinal) : TCheckPointStruct; override; Procedure DoEraseStorage; override; - Procedure DoSavePendingBufferOperations(OperationsHashTree : TOperationsHashTree); override; - Procedure DoLoadPendingBufferOperations(OperationsHashTree : TOperationsHashTree); override; public Constructor Create(AOwner : TComponent); Override; Destructor Destroy; Override; - Class Function GetSafeboxCheckpointingFileName(Const BaseDataFolder : AnsiString; block : Cardinal) : AnsiString; - Property DatabaseFolder : AnsiString read FDatabaseFolder write SetDatabaseFolder; Procedure CopyConfiguration(Const CopyFrom : TStorage); override; Procedure SetBlockChainFile(BlockChainFileName : AnsiString); - Function HasUpgradedToVersion2 : Boolean; override; - Procedure CleanupVersion1Data; override; - property LowMemoryUsage : Boolean read FLowMemoryUsage write FLowMemoryUsage; End; implementation @@ -160,7 +141,6 @@ function TFileStorage.DoBlockExists(Block: Cardinal): Boolean; procedure TFileStorage.ClearStream; begin FreeAndNil(FBlockChainStream); - FreeAndNil(FPendingBufferOperationsStream); FStreamFirstBlockNumber := 0; FStreamLastBlockNumber := -1; SetLength(FBlockHeadersFirstBytePosition,0); @@ -186,46 +166,18 @@ procedure TFileStorage.GrowStreamUntilPos(Stream : TStream; newPos: Int64; Delet Stream.Position := newPos; end; -function TFileStorage.GetPendingBufferOperationsStream: TFileStream; -Var fs : TFileStream; - fn : TFileName; - fm : Word; -begin - If Not Assigned(FPendingBufferOperationsStream) then begin - fn := GetFolder(Orphan)+PathDelim+'pendingbuffer.ops'; - If FileExists(fn) then fm := fmOpenReadWrite+fmShareExclusive - else fm := fmCreate+fmShareExclusive; - Try - FPendingBufferOperationsStream := TFileStream.Create(fn,fm); - Except - On E:Exception do begin - TLog.NewLog(ltError,ClassName,'Error opening PendingBufferOperationsStream '+fn+' ('+E.ClassName+'):'+ E.Message); - Raise; - end; - end; - end; - Result := FPendingBufferOperationsStream; -end; - procedure TFileStorage.CopyConfiguration(const CopyFrom: TStorage); begin inherited; - if CopyFrom is TFileStorage then begin - DatabaseFolder := TFileStorage(CopyFrom).DatabaseFolder; - end; end; constructor TFileStorage.Create(AOwner: TComponent); begin inherited; - FLowMemoryUsage := False; - FDatabaseFolder := ''; - FBlockChainFileName := ''; FBlockChainStream := Nil; SetLength(FBlockHeadersFirstBytePosition,0); FStreamFirstBlockNumber := 0; FStreamLastBlockNumber := -1; - FPendingBufferOperationsStream := Nil; FStorageLock := TPCCriticalSection.Create('TFileStorage_StorageLock'); end; @@ -278,25 +230,6 @@ function TFileStorage.DoInitialize: Boolean; End; end; -function TFileStorage.DoOpenSafeBoxCheckpoint(blockCount: Cardinal): TCheckPointStruct; -var fn : TFilename; - err : AnsiString; -begin - Result := Nil; - fn := GetSafeboxCheckpointingFileName(GetFolder(Orphan),blockCount); - If (fn<>'') and (FileExists(fn)) then begin - {$IFDEF USE_ABSTRACTMEM} - Result := TPCAbstractMem.Create(fn,True); - {$ELSE} - Result := TFileStream.Create(fn,fmOpenRead+fmShareDenyWrite); - {$ENDIF} - end; - If Not Assigned(Result) then begin - err := 'Cannot load SafeBoxStream (block:'+IntToStr(blockCount)+') file:'+fn; - TLog.NewLog(ltError,ClassName,err); - end; -end; - procedure TFileStorage.DoEraseStorage; Var stream : TStream; begin @@ -309,43 +242,6 @@ procedure TFileStorage.DoEraseStorage; end; end; -procedure TFileStorage.DoSavePendingBufferOperations(OperationsHashTree : TOperationsHashTree); -Var fs : TFileStream; -begin - LockBlockChainStream; - Try - fs := GetPendingBufferOperationsStream; - fs.Position:=0; - fs.Size:=0; - OperationsHashTree.SaveOperationsHashTreeToStream(fs,true); - {$IFDEF HIGHLOG}TLog.NewLog(ltdebug,ClassName,Format('DoSavePendingBufferOperations operations:%d',[OperationsHashTree.OperationsCount]));{$ENDIF} - finally - UnlockBlockChainStream; - end; -end; - -procedure TFileStorage.DoLoadPendingBufferOperations(OperationsHashTree : TOperationsHashTree); -Var fs : TFileStream; - errors : String; - n : Integer; - LCurrentProtocol : Word; -begin - LockBlockChainStream; - Try - fs := GetPendingBufferOperationsStream; - fs.Position:=0; - if fs.Size>0 then begin - if Assigned(Bank) then LCurrentProtocol := Bank.SafeBox.CurrentProtocol - else LCurrentProtocol := CT_BUILD_PROTOCOL; - If OperationsHashTree.LoadOperationsHashTreeFromStream(fs,true,LCurrentProtocol,LCurrentProtocol, Nil,errors) then begin - TLog.NewLog(ltInfo,ClassName,Format('DoLoadPendingBufferOperations loaded operations:%d',[OperationsHashTree.OperationsCount])); - end else TLog.NewLog(ltError,ClassName,Format('DoLoadPendingBufferOperations ERROR (Protocol %d): loaded operations:%d errors:%s',[LCurrentProtocol,OperationsHashTree.OperationsCount,errors])); - end; - finally - UnlockBlockChainStream; - end; -end; - function TFileStorage.DoLoadBlockChain(Operations: TPCOperationsComp; Block: Cardinal): Boolean; Var stream : TStream; iBlockHeaders : Integer; @@ -380,52 +276,19 @@ function TFileStorage.DoLoadBlockChain(Operations: TPCOperationsComp; Block: Car end; end; -function TFileStorage.DoMoveBlockChain(Start_Block: Cardinal; const DestOrphan: TOrphan; DestStorage : TStorage): Boolean; - - Procedure DoCopySafebox; - var sr: TSearchRec; - FileAttrs: Integer; - folder : AnsiString; - sourcefn,destfn : AnsiString; - begin - FileAttrs := faArchive; - folder := GetFolder(Orphan); - if SysUtils.FindFirst(GetFolder(Orphan)+PathDelim+'checkpoint*'+CT_Safebox_Extension, FileAttrs, sr) = 0 then begin - repeat - if (sr.Attr and FileAttrs) = FileAttrs then begin - sourcefn := GetFolder(Orphan)+PathDelim+sr.Name; - destfn := GetFolder('')+PathDelim+sr.Name; - TLog.NewLog(ltInfo,ClassName,'Copying safebox file '+sourcefn+' to '+destfn); - Try - DoCopyFile(sourcefn,destfn); - Except - On E:Exception do begin - TLog.NewLog(ltError,Classname,'Error copying file: ('+E.ClassName+') '+E.Message); - end; - End; - end; - until FindNext(sr) <> 0; - FindClose(sr); - end; - End; - +function TFileStorage.DoMoveBlockChain(Start_Block: Cardinal; const DestOrphan: TOrphan): Boolean; Var db : TFileStorage; i : Integer; ops : TPCOperationsComp; b : Cardinal; begin Try - if (Assigned(DestStorage)) And (DestStorage is TFileStorage) then db := TFileStorage(DestStorage) - else db := Nil; + db := TFileStorage.Create(Nil); try - if Not assigned(db) then begin - db := TFileStorage.Create(Nil); - db.DatabaseFolder := Self.DatabaseFolder; - db.Bank := Self.Bank; - db.Orphan := DestOrphan; - db.FStreamFirstBlockNumber := Start_Block; - end; - if db is TFileStorage then TFileStorage(db).LockBlockChainStream; + db.Bank := Self.Bank; + db.FStreamFirstBlockNumber := Start_Block; + db.FStorageFilename := TPCBank.GetStorageFolder(DestOrphan)+PathDelim+'BlockChainStream.blocks'; + db.LockBlockChainStream; try db.FIsMovingBlockchain:=True; ops := TPCOperationsComp.Create(Nil); @@ -433,23 +296,19 @@ function TFileStorage.DoMoveBlockChain(Start_Block: Cardinal; const DestOrphan: b := Start_Block; while LoadBlockChainBlock(ops,b) do begin inc(b); - TLog.NewLog(ltDebug,Classname,'Moving block from "'+Orphan+'" to "'+DestOrphan+'" '+TPCOperationsComp.OperationBlockToText(ops.OperationBlock)); + TLog.NewLog(ltDebug,Classname,'Moving block from "'+Bank.Orphan+'" to "'+DestOrphan+'" '+TPCOperationsComp.OperationBlockToText(ops.OperationBlock)); db.SaveBlockChainBlock(ops); end; - TLog.NewLog(ltdebug,Classname,'Moved blockchain from "'+Orphan+'" to "'+DestOrphan+'" from block '+inttostr(Start_Block)+' to '+inttostr(b-1)); + TLog.NewLog(ltdebug,Classname,'Moved blockchain from "'+Bank.Orphan+'" to "'+DestOrphan+'" from block '+inttostr(Start_Block)+' to '+inttostr(b-1)); finally ops.Free; end; - // If DestOrphan is empty, then copy possible updated safebox (because, perhaps current saved safebox is from invalid blockchain) - if (DestOrphan='') And (Orphan<>'') then begin - DoCopySafebox; - end; finally db.FIsMovingBlockchain:=False; - if db is TFileStorage then TFileStorage(db).UnlockBlockChainStream; + db.UnlockBlockChainStream; end; Finally - If Not Assigned(DestStorage) then db.Free; + db.Free; End; Except On E:Exception do begin @@ -459,160 +318,6 @@ function TFileStorage.DoMoveBlockChain(Start_Block: Cardinal; const DestOrphan: End; end; -function TFileStorage.DoRestoreBank(max_block: Int64; restoreProgressNotify : TProgressNotify): Boolean; -var - sr: TSearchRec; - FileAttrs: Integer; - folder : AnsiString; - Lfilename,auxfn : AnsiString; - fs : TFileStream; - ms : TMemoryStream; - errors : String; - LBlockscount : Cardinal; - sbHeader, goodSbHeader : TPCSafeBoxHeader; - {$IFDEF USE_ABSTRACTMEM} - LTempBlocksCount : Integer; - LSafeboxFileName : String; - {$ELSE} - {$ENDIF} -begin - LockBlockChainStream; - Try - {$IFDEF USE_ABSTRACTMEM} - Lfilename := ''; - LSafeboxFileName := GetFolder(Orphan)+PathDelim+'safebox'+CT_Safebox_Extension; - if TPCAbstractMem.AnalyzeFile(LSafeboxFileName,LTempBlocksCount) then begin - LBlockscount := LTempBlocksCount; - end else begin - LBlockscount := 0; - end; - // - FileAttrs := faArchive; - folder := GetFolder(''); /// Without Orphan folder - if SysUtils.FindFirst(folder+PathDelim+'checkpoint*'+CT_Safebox_Extension, FileAttrs, sr) = 0 then begin - repeat - if (sr.Attr and FileAttrs) = FileAttrs then begin - auxfn := folder+PathDelim+sr.Name; - if TPCAbstractMem.AnalyzeFile(auxfn,LTempBlocksCount) then begin - if (((max_block<0) Or (LTempBlocksCount<=max_block)) AND (LTempBlocksCount>LBlockscount)) then begin - Lfilename := auxfn; - LBlockscount := LTempBlocksCount; - end; - end; - end; - until FindNext(sr) <> 0; - FindClose(sr); - end; - if (Lfilename='') then begin - Bank.SafeBox.SetSafeboxFileName(LSafeboxFileName); - end else begin - Bank.SafeBox.SetSafeboxFileName(Lfilename); - Bank.SafeBox.UpdateSafeboxFileName(LSafeboxFileName); - end; - {$ELSE} - LBlockscount := 0; - {$ENDIF} - FileAttrs := faArchive; - folder := GetFolder(Orphan); - Lfilename := ''; - if SysUtils.FindFirst(folder+PathDelim+'*.safebox', FileAttrs, sr) = 0 then begin - repeat - if (sr.Attr and FileAttrs) = FileAttrs then begin - auxfn := folder+PathDelim+sr.Name; - If LoadBankFileInfo(auxfn,sbHeader) then begin - if (((max_block<0) Or (sbHeader.endBlock<=max_block)) AND (sbHeader.blocksCount>LBlockscount)) And - (sbHeader.startBlock=0) And (sbHeader.endBlock=sbHeader.startBlock+sbHeader.blocksCount-1) then begin - Lfilename := auxfn; - LBlockscount := sbHeader.blocksCount; - goodSbHeader := sbHeader; - end; - end; - end; - until FindNext(sr) <> 0; - FindClose(sr); - end; - if (Lfilename<>'') then begin - TLog.NewLog(ltinfo,Self.ClassName,'Loading SafeBox protocol:'+IntToStr(goodSbHeader.protocol)+' with '+inttostr(LBlockscount)+' blocks from file '+Lfilename+' LowMemoryUsage:'+LowMemoryUsage.ToString(True)); - fs := TFileStream.Create(Lfilename,fmOpenRead); - try - fs.Position := 0; - if LowMemoryUsage then begin - if not Bank.LoadBankFromStream(fs,False,Nil,Nil,restoreProgressNotify,errors) then begin - TLog.NewLog(lterror,ClassName,'Error reading bank from file: '+Lfilename+ ' Error: '+errors); - end; - end else begin - ms := TMemoryStream.Create; - Try - ms.CopyFrom(fs,0); - ms.Position := 0; - if not Bank.LoadBankFromStream(ms,False,Nil,Nil,restoreProgressNotify,errors) then begin - TLog.NewLog(lterror,ClassName,'Error reading bank from file: '+Lfilename+ ' Error: '+errors); - end; - Finally - ms.Free; - End; - end; - finally - fs.Free; - end; - end; - Finally - UnlockBlockChainStream; - End; -end; - -function TFileStorage.DoSaveBank: Boolean; -var fs: TFileStream; - bankfilename,aux_newfilename: AnsiString; - ms : TMemoryStream; - LTC : TTickCount; -begin - Result := true; - bankfilename := GetSafeboxCheckpointingFileName(GetFolder(Orphan),Bank.BlocksCount); - if (bankfilename<>'') then begin - LTC := TPlatform.GetTickCount; - {$IFDEF USE_ABSTRACTMEM} - Bank.SafeBox.SaveCheckpointing(bankfilename); - {$ELSE} - fs := TFileStream.Create(bankfilename,fmCreate); - try - fs.Size := 0; - fs.Position:=0; - if LowMemoryUsage then begin - Bank.SafeBox.SaveSafeBoxToAStream(fs,0,Bank.SafeBox.BlocksCount-1); - end else begin - ms := TMemoryStream.Create; - try - Bank.SafeBox.SaveSafeBoxToAStream(ms,0,Bank.SafeBox.BlocksCount-1); - ms.Position := 0; - fs.CopyFrom(ms,0); - finally - ms.Free; - end; - end; - finally - fs.Free; - end; - {$ENDIF} - TLog.NewLog(ltInfo,ClassName,Format('Saving Safebox blocks:%d file:%s in %.2n seconds',[Bank.BlocksCount,bankfilename,TPlatform.GetElapsedMilliseconds(LTC)/1000])); - // Save a copy each 10000 blocks (aprox 1 month) only when not an orphan - if (Orphan='') And ((Bank.BlocksCount MOD (CT_BankToDiskEveryNBlocks*100))=0) then begin - aux_newfilename := GetFolder('') + PathDelim+'checkpoint_'+ inttostr(Bank.BlocksCount)+CT_Safebox_Extension; - try - {$IFDEF FPC} - DoCopyFile(bankfilename,aux_newfilename); - {$ELSE} - CopyFile(PWideChar(bankfilename),PWideChar(aux_newfilename),False); - {$ENDIF} - Except - On E:Exception do begin - TLog.NewLog(lterror,ClassName,'Exception copying extra safebox file '+aux_newfilename+' ('+E.ClassName+'):'+E.Message); - end; - end; - end; - end; -end; - function TFileStorage.DoSaveBlockChain(Operations: TPCOperationsComp): Boolean; Var stream : TStream; iBlockHeaders : Integer; @@ -634,23 +339,11 @@ function TFileStorage.DoSaveBlockChain(Operations: TPCOperationsComp): Boolean; Finally UnlockBlockChainStream; End; - if Assigned(Bank) then SaveBank(False); + if Assigned(Bank) then Bank.SaveBank(False); end; Const CT_SafeboxsToStore = 10; -class function TFileStorage.GetSafeboxCheckpointingFileName(const BaseDataFolder: AnsiString; block: Cardinal): AnsiString; -begin - Result := ''; - If not ForceDirectories(BaseDataFolder) then exit; - if TPCSafeBox.MustSafeBoxBeSaved(block) then begin - // We will store checkpointing - Result := BaseDataFolder + PathDelim+'checkpoint'+ inttostr((block DIV CT_BankToDiskEveryNBlocks) MOD CT_SafeboxsToStore)+CT_Safebox_Extension; - end else begin - Result := BaseDataFolder + PathDelim+'checkpoint_'+inttostr(block)+CT_Safebox_Extension; - end; -end; - function TFileStorage.GetBlockHeaderFirstBytePosition(Stream : TStream; Block: Cardinal; CanInitialize : Boolean; var iBlockHeaders : Integer; var BlockHeaderFirstBlock: Cardinal): Boolean; var iPos,start, nCurrBlock : Cardinal; bh : TBlockHeader; @@ -750,34 +443,11 @@ function TFileStorage.GetFirstBlockNumber: Int64; Result := FStreamFirstBlockNumber; end; -function TFileStorage.GetFolder(const AOrphan: TOrphan): AnsiString; -begin - if FDatabaseFolder = '' then raise Exception.Create('No Database Folder'); - if AOrphan<>'' then Result := FDatabaseFolder + PathDelim+AOrphan - else Result := FDatabaseFolder; - if not ForceDirectories(Result) then raise Exception.Create('Cannot create database folder: '+Result); -end; - function TFileStorage.GetLastBlockNumber: Int64; begin Result := FStreamLastBlockNumber; end; -function TFileStorage.LoadBankFileInfo(const Filename: AnsiString; var safeBoxHeader : TPCSafeBoxHeader) : Boolean; -var fs: TFileStream; -begin - Result := false; - safeBoxHeader := CT_PCSafeBoxHeader_NUL; - If Not FileExists(Filename) then exit; - fs := TFileStream.Create(Filename,fmOpenRead); - try - fs.Position:=0; - Result := Bank.SafeBox.LoadSafeBoxStreamHeader(fs,safeBoxHeader); - finally - fs.Free; - end; -end; - function TFileStorage.LockBlockChainStream: TFileStream; function InitStreamInfo(Stream : TStream; var errors : String) : Boolean; Var mem : TStream; @@ -906,10 +576,11 @@ function TFileStorage.LockBlockChainStream: TFileStream; TPCThread.ProtectEnterCriticalSection(Self,FStorageLock); Try if Not Assigned(FBlockChainStream) then begin - if FBlockChainFileName<>'' then begin - fn := FBlockChainFileName + if FStorageFilename<>'' then begin + fn := FStorageFilename end else begin - fn := GetFolder(Orphan)+PathDelim+'BlockChainStream.blocks'; + fn := TPCBank.GetStorageFolder(Orphan)+PathDelim+'BlockChainStream.blocks'; + FStorageFilename := fn; end; exists := FileExists(fn); if ReadOnly then begin @@ -938,20 +609,7 @@ function TFileStorage.LockBlockChainStream: TFileStream; procedure TFileStorage.SetBlockChainFile(BlockChainFileName: AnsiString); begin ClearStream; - FBlockChainFileName := BlockChainFileName; -end; - -procedure TFileStorage.SetDatabaseFolder(const Value: AnsiString); -begin - if FDatabaseFolder=Value then exit; - FDatabaseFolder := Value; - ClearStream; -end; - -procedure TFileStorage.SetOrphan(const Value: TOrphan); -begin - inherited; - ClearStream; + FStorageFilename := BlockChainFileName; end; procedure TFileStorage.SetReadOnly(const Value: Boolean); @@ -1135,24 +793,4 @@ procedure TFileStorage.UnlockBlockChainStream; FStorageLock.Release; end; -function TFileStorage.HasUpgradedToVersion2: Boolean; -var searchRec: TSearchRec; -begin - HasUpgradedToVersion2 := SysUtils.FindFirst( GetFolder(Orphan)+PathDelim+'*'+CT_Safebox_Extension, faArchive, searchRec) = 0; - FindClose(searchRec); -end; - -procedure TFileStorage.CleanupVersion1Data; -var - folder : AnsiString; - searchRec : TSearchRec; -begin - folder := GetFolder(Orphan); - if SysUtils.FindFirst( folder+PathDelim+'*.bank', faArchive, searchRec) = 0 then - repeat - SysUtils.DeleteFile(folder+PathDelim+searchRec.Name); - until FindNext(searchRec) <> 0; - FindClose(searchRec); -end; - end. diff --git a/src/core/ULog.pas b/src/core/ULog.pas index 0cc02cd06..90d3bd331 100644 --- a/src/core/ULog.pas +++ b/src/core/ULog.pas @@ -123,7 +123,9 @@ destructor TLog.Destroy; FThreadSafeLogEvent.Terminate; FThreadSafeLogEvent.WaitFor; FreeAndNil(FThreadSafeLogEvent); - _logs.Remove(Self); + if Assigned(_logs) then begin + _logs.Remove(Self); + end; FreeAndNil(FFileStream); l := FLogDataList.LockList; try @@ -164,7 +166,7 @@ procedure TLog.NotifyNewLog(logtype: TLogType; Const sender, logtext: String); try if assigned(FFileStream) And (logType in FSaveTypes) then begin if TThread.CurrentThread.ThreadID=MainThreadID then tid := ' MAIN:' else tid:=' TID:'; - s := FormatDateTime('yyyy-mm-dd hh:nn:ss.zzz',now)+tid+IntToHex(PtrInt(TThread.CurrentThread.ThreadID),8)+' ['+CT_LogType[logtype]+'] <'+sender+'> '+logtext+#13#10; + s := FormatDateTime('yyyy-mm-dd hh:nn:ss.zzz',now)+tid+PtrInt(TThread.CurrentThread.ThreadID).ToHexString+' ['+CT_LogType[logtype]+'] <'+sender+'> '+logtext+#13#10; FFileStream.Write(s[Low(s)],Length(s)); end; if Assigned(FOnInThreadNewLog) then begin diff --git a/src/core/UNetProtocol.pas b/src/core/UNetProtocol.pas index 68ea2c98e..4822edef8 100644 --- a/src/core/UNetProtocol.pas +++ b/src/core/UNetProtocol.pas @@ -36,7 +36,7 @@ interface UPCDataTypes, {$IFNDEF FPC}System.Generics.Collections,System.Generics.Defaults {$ELSE}Generics.Collections,Generics.Defaults{$ENDIF}, - {$IFDEF USE_ABSTRACTMEM}UPCAbstractMem,{$ENDIF} + {$IFDEF USE_ABSTRACTMEM}UPCAbstractMem, UAbstractMemBlockchainStorage,{$ENDIF} UNetProtection; Const @@ -164,7 +164,8 @@ interface Function LockList : TList; Procedure UnlockList; procedure ResetConnectAttempts; - function IsBlackListed(const ip: String): Boolean; + function IsBlackListed(const ip: String; out AReason : string): Boolean; overload; + function IsBlackListed(const ip: String): Boolean; overload; function GetNodeServerAddress(const ip : String; port:Word; CanAdd : Boolean; var nodeServerAddress : TNodeServerAddress) : Boolean; procedure SetNodeServerAddress(const nodeServerAddress : TNodeServerAddress); Procedure UpdateNetConnection(netConnection : TNetConnection); @@ -302,6 +303,7 @@ interface procedure SetMinServersConnected(AValue: Integer); procedure SetNetConnectionsActive(const Value: Boolean); procedure SetMinFutureBlocksToDownloadNewSafebox(const Value: Integer); + procedure OnDownloadingSafeboxProgressNotify(sender : TObject; const mesage : String; curPos, totalCount : Int64); protected procedure Notification(AComponent: TComponent; Operation: TOperation); override; Procedure DiscoverServersTerminated(Sender : TObject); @@ -420,7 +422,6 @@ interface Procedure DoProcess_GetPendingOperations; Procedure SetClient(Const Value : TNetTcpIpClient); Function ReadTcpClientBuffer(MaxWaitMiliseconds : Cardinal; var HeaderData : TNetHeaderData; BufferData : TStream) : Boolean; - Procedure DisconnectInvalidClient(ItsMyself : Boolean; Const why : String); function GetClient: TNetTcpIpClient; protected Procedure Send(NetTranferType : TNetTransferType; operation, errorcode : Word; request_id : Integer; DataBuffer : TStream); @@ -434,6 +435,7 @@ interface Function ConnectTo(ServerIP: String; ServerPort:Word) : Boolean; Property Connected : Boolean read GetConnected write SetConnected; Property IsConnecting : Boolean read FIsConnecting; + Procedure DisconnectInvalidClient(ItsMyself : Boolean; Const why : String); Function Send_Hello(NetTranferType : TNetTransferType; request_id : Integer) : Boolean; Function Send_NewBlockFound(Const NewBlock : TPCOperationsComp) : Boolean; Function Send_GetBlocks(StartAddress, quantity : Cardinal; var request_id : Cardinal) : Boolean; @@ -512,7 +514,7 @@ implementation uses UConst, ULog, UNode, UTime, UPCEncryption, UChunk, - UPCOperationsBlockValidator, UPCOperationsSignatureValidator, + UPCOperationsBlockValidator, UPCOperationsSignatureValidator, UOpTransaction, UPCDownloadSafebox, UPCTemporalFileStream; Const @@ -821,11 +823,12 @@ function TOrderedServerAddressListTS.GetValidNodeServers(OnlyWhereIConnected: Bo end; end; -function TOrderedServerAddressListTS.IsBlackListed(const ip: String): Boolean; +function TOrderedServerAddressListTS.IsBlackListed(const ip: String; out AReason : string): Boolean; Var i : Integer; P : PNodeServerAddress; begin Result := false; + AReason := ''; FCritical.Acquire; Try SecuredFindByIp(ip,0,i); @@ -835,6 +838,7 @@ function TOrderedServerAddressListTS.IsBlackListed(const ip: String): Boolean; if Not SameStr(P^.ip,ip) then exit; if P^.is_blacklisted then begin Result := Not P^.its_myself; + AReason := P^.BlackListText; end; inc(i); end; @@ -843,6 +847,12 @@ function TOrderedServerAddressListTS.IsBlackListed(const ip: String): Boolean; End; end; +function TOrderedServerAddressListTS.IsBlackListed(const ip: String): Boolean; +var LReason : String; +begin + Result := IsBlackListed(ip,LReason); +end; + function TOrderedServerAddressListTS.LockList: TList; begin FCritical.Acquire; @@ -1243,7 +1253,12 @@ destructor TNetData.Destroy; tdc : TThreadDiscoverConnection; begin TLog.NewLog(ltInfo,ClassName,'TNetData.Destroy START'); + {$IFDEF DELPHI_SYDNEY_PLUS } + SetLength(FOnConnectivityChanged.Handlers, 0); + SetLength(FOnConnectivityChanged.MainThreadHandlers, 0); + {$ELSE} FreeAndNil(FOnConnectivityChanged); + {$ENDIF} FOnGetNewBlockchainFromClientDownloadNewSafebox := Nil; FOnStatisticsChanged := Nil; FOnNetConnectionsUpdated := Nil; @@ -1644,9 +1659,9 @@ procedure TNetData.GetNewBlockChainFromClient(Connection: TNetConnection; Bank := TPCBank.Create(Nil); try Bank.StorageClass := TNode.Node.Bank.StorageClass; - Bank.Storage.Orphan := TNode.Node.Bank.Storage.Orphan; - Bank.Storage.ReadOnly := true; + Bank.Orphan := TNode.Node.Bank.Orphan; Bank.Storage.CopyConfiguration(TNode.Node.Bank.Storage); + Bank.Storage.ReadOnly := true; if start_block>=0 then begin @@ -1656,18 +1671,19 @@ procedure TNetData.GetNewBlockChainFromClient(Connection: TNetConnection; Bank.UpdateValuesFromSafebox; IsUsingSnapshot := True; - Bank.Storage.Orphan := FormatDateTime('yyyymmddhhnnss',DateTime2UnivDateTime(now)); + Bank.Orphan := FormatDateTime('yyyymmddhhnnss',DateTime2UnivDateTime(now)); + Bank.Storage.StorageFilename := ''; Bank.Storage.ReadOnly := false; end else begin {$IFDEF USE_ABSTRACTMEM} - Bank.Storage.Orphan := FormatDateTime('yyyymmddhhnnss',DateTime2UnivDateTime(now)); + Bank.Orphan := FormatDateTime('yyyymmddhhnnss',DateTime2UnivDateTime(now)); Bank.Storage.ReadOnly := false; {$ENDIF} // Restore a part from disk Bank.DiskRestoreFromOperations(start_block-1); - Bank.Storage.SaveBank(True); + Bank.SaveBank(True); if (Bank.BlocksCount Note: Maximum is CT_MAX_SAFEBOXCHUNK_BLOCKS - for i:=0 to ((LDownloadedSafeboxBlocksCount-1) DIV 10000) do begin // Bug v3.0.1 and minors - FNewBlockChainFromClientStatus := Format('Receiving new safebox with %d blocks (step %d/%d) from %s', - [LDownloadedSafeboxBlocksCount,i+1,((LDownloadedSafeboxBlocksCount-1) DIV 10000)+1,Connection.ClientRemoteAddr]); - LreceivedChunk := TPCTemporalFileStream.Create(Format('CHUNK_%.3d_',[i])); - if (Not DownloadSafeBoxChunk(LDownloadedSafeboxBlocksCount,ASafeboxLastOperationBlock.initial_safe_box_hash,(i*10000),((i+1)*10000)-1,LreceivedChunk,safeBoxHeader,errors)) then begin - LreceivedChunk.Free; - TLog.NewLog(ltError,CT_LogSender,errors); - Exit; - end; - try - LreceivedChunk.Position := 0; - ASafeboxChunks.AddChunk( LreceivedChunk ); - Except - On E:Exception do begin - errors:= Format('(%s) %s',[E.ClassName,E.Message]); - Result := false; - LreceivedChunk.Free; - Exit; - end; - end; - end; - if Not ASafeboxChunks.IsComplete then begin - errors := 'Safebox Chunks is not complete!'; - Exit; - end else Result := True; + LdownSafebox := TPCDownloadSafebox.Create; + Try + LdownSafebox.OnProgressNotify := OnDownloadingSafeboxProgressNotify; + Result := LdownSafebox.DownloadSafebox(TThread.CurrentThread,ASafeboxLastOperationBlock,ASafeboxChunks); + finally + LdownSafebox.Free; + end; + end; @@ -1957,7 +1955,7 @@ procedure TNetData.GetNewBlockChainFromClient(Connection: TNetConnection; If Not IsMyBlockchainValid then begin TNode.Node.Bank.Storage.EraseStorage; end; - TNode.Node.Bank.Storage.SaveBank(False); + TNode.Node.Bank.SaveBank(False); Connection.Send_GetBlocks(TNode.Node.Bank.BlocksCount,100,request_id); Result := true; end else begin @@ -2000,16 +1998,16 @@ procedure TNetData.GetNewBlockChainFromClient(Connection: TNetConnection; newTmpBank := TPCBank.Create(Nil); try newTmpBank.StorageClass := TNode.Node.Bank.StorageClass; - newTmpBank.Storage.Orphan := TNode.Node.Bank.Storage.Orphan; + newTmpBank.Orphan := TNode.Node.Bank.Orphan; newTmpBank.Storage.ReadOnly := true; newTmpBank.Storage.CopyConfiguration(TNode.Node.Bank.Storage); - newTmpBank.Storage.Orphan := FormatDateTime('yyyymmddhhnnss',DateTime2UnivDateTime(now)); + newTmpBank.Orphan := FormatDateTime('yyyymmddhhnnss',DateTime2UnivDateTime(now)); newTmpBank.Storage.ReadOnly := false; If newTmpBank.LoadBankFromChunks(LChunks,LSafeboxLastOperationBlock.initial_safe_box_hash,TNode.Node.Bank.SafeBox,OnReadingNewSafeboxProgressNotify,errors) then begin TNode.Node.DisableNewBlocks; try TLog.NewLog(ltInfo,ClassName,'Received new safebox!'); - newTmpBank.Storage.SaveBank(True); // Saving bank + newTmpBank.SaveBank(True); // Saving bank // Receive at least 1 new block blocksList := TList.Create; try @@ -2291,6 +2289,14 @@ procedure TNetData.NotifyStatisticsChanged; FNetDataNotifyEventsThread.FNotifyOnStatisticsChanged := true; end; +procedure TNetData.OnDownloadingSafeboxProgressNotify(sender: TObject; + const mesage: String; curPos, totalCount: Int64); +Var pct : String; +begin + if (totalCount>0) then pct := FormatFloat('0.00',curPos*100/totalCount)+'%' else pct := ''; + FNewBlockChainFromClientStatus := Format('%s %s',[mesage,pct]); +end; + procedure TNetData.OnReadingNewSafeboxProgressNotify(sender: TObject; const mesage: String; curPos, totalCount: Int64); Var pct : String; begin @@ -2412,7 +2418,7 @@ constructor TNetServer.Create; procedure TNetServer.OnNewIncommingConnection(Sender : TObject; Client : TNetTcpIpClient); Var n : TNetServerClient; - DebugStep : String; + DebugStep, LReason : String; tc : TTickCount; begin DebugStep := ''; @@ -2428,10 +2434,10 @@ procedure TNetServer.OnNewIncommingConnection(Sender : TObject; Client : TNetTcp TNetData.NetData.IncStatistics(1,1,0,0,0,0); TNetData.NetData.NodeServersAddresses.CleanBlackList(False); DebugStep := 'Checking blacklisted'; - if (TNetData.NetData.NodeServersAddresses.IsBlackListed(Client.RemoteHost)) then begin + if (TNetData.NetData.NodeServersAddresses.IsBlackListed(Client.RemoteHost,LReason)) then begin // Invalid! TLog.NewLog(ltinfo,Classname,'Refusing Blacklist ip: '+Client.ClientRemoteAddr); - n.SendError(ntp_autosend,CT_NetOp_Error, 0,CT_NetError_IPBlackListed,'Your IP is blacklisted:'+Client.ClientRemoteAddr); + n.SendError(ntp_autosend,CT_NetOp_Error, 0,CT_NetError_IPBlackListed,'Your IP is blacklisted:'+Client.ClientRemoteAddr+' '+LReason); // Wait some time before close connection sleep(5000); end else begin @@ -2704,6 +2710,7 @@ procedure TNetConnection.DoProcess_AddOperations(HeaderData: TNetHeaderData; Dat operations : TOperationsHashTree; errors : String; DoDisconnect : Boolean; + Lopc,Lprc : Integer; begin DoDisconnect := true; operations := TOperationsHashTree.Create; @@ -2712,30 +2719,9 @@ procedure TNetConnection.DoProcess_AddOperations(HeaderData: TNetHeaderData; Dat errors := 'Not autosend'; exit; end; - if (NetProtocolVersion.protocol_available>=10) then begin - if Not operations.LoadOperationsHashTreeFromStream(DataBuffer,False,TNode.Node.Bank.SafeBox.CurrentProtocol,TNode.Node.Bank.SafeBox.CurrentProtocol,Nil,errors) then Exit; - end else begin - // TODO: - // After V5 Activation all this code can be deleted, not used anymore - if DataBuffer.Size<4 then begin - errors := 'Invalid databuffer size'; - exit; - end; - DataBuffer.Read(c,4); - for i := 1 to c do begin - errors := 'Invalid operation '+inttostr(i)+'/'+inttostr(c); - if not DataBuffer.Read(optype,1)=1 then exit; - opclass := TPCOperationsComp.GetOperationClassByOpType(optype); - if Not Assigned(opclass) then exit; - op := opclass.Create(TNode.Node.Bank.SafeBox.CurrentProtocol); - Try - op.LoadFromNettransfer(DataBuffer); - operations.AddOperationToHashTree(op); - Finally - op.Free; - End; - end; - end; + if Not operations.LoadOperationsHashTreeFromStream(DataBuffer,False, + TNode.Node.Bank.SafeBox.CurrentProtocol,TNode.Node.Bank.SafeBox.CurrentProtocol,Nil, + CT_AllowPropagate0feeOperations,Lopc,Lprc,errors) then Exit; DoDisconnect := false; finally try @@ -2964,8 +2950,15 @@ procedure TNetConnection.DoProcess_GetBlocks_Response(HeaderData: TNetHeaderData DoDisconnect : Boolean; LBlocks : TList; LSafeboxTransaction : TPCSafeBoxTransaction; + LPrevious : Boolean; begin DoDisconnect := true; + {$IFDEF USE_ABSTRACTMEM} + if (TNode.Node.Bank.Storage is TAbstractMemBlockchainStorage) then begin + LPrevious := TAbstractMemBlockchainStorage( TNode.Node.Bank.Storage ).AutoFlushCache; + TAbstractMemBlockchainStorage( TNode.Node.Bank.Storage ).AutoFlushCache := False; + end; + {$ENDIF} try if HeaderData.header_type<>ntp_response then begin errors := 'Not response'; @@ -3033,9 +3026,10 @@ procedure TNetConnection.DoProcess_GetBlocks_Response(HeaderData: TNetHeaderData end; sleep(1); end; + FIsDownloadingBlocks := false; if ((LOpCount>0) And (FRemoteOperationBlock.block>=TNode.Node.Bank.BlocksCount)) then begin - Send_GetBlocks(TNode.Node.Bank.BlocksCount,100,c); + Send_GetBlocks(TNode.Node.Bank.BlocksCount,100+Random(300),c); end else begin // No more blocks to download, download Pending operations DoProcess_GetPendingOperations; @@ -3051,6 +3045,15 @@ procedure TNetConnection.DoProcess_GetBlocks_Response(HeaderData: TNetHeaderData if DoDisconnect then begin DisconnectInvalidClient(false,errors+' > '+TNetData.HeaderDataToText(HeaderData)+' BuffSize: '+inttostr(DataBuffer.Size)); end; + {$IFDEF USE_ABSTRACTMEM} + TNode.Node.Bank.SafeBox.PCAbstractMem.FlushCache; + if (TNode.Node.Bank.Storage is TAbstractMemBlockchainStorage) then begin + TAbstractMemBlockchainStorage( TNode.Node.Bank.Storage ).AutoFlushCache := LPrevious; + if TAbstractMemBlockchainStorage( TNode.Node.Bank.Storage ).PendingToSave = 0 then begin + TAbstractMemBlockchainStorage( TNode.Node.Bank.Storage ).FileMem.FlushCache; + end; + end; + {$ENDIF} end; end; @@ -3164,7 +3167,7 @@ procedure TNetConnection.DoProcess_GetSafeBox_Request(HeaderData: TNetHeaderData responseStream := TMemoryStream.Create; try {$IFDEF USE_ABSTRACTMEM} - Labstracmem := TNode.Node.Bank.Storage.OpenSafeBoxCheckpoint(_blockcount); + Labstracmem := TNode.Node.Bank.OpenSafeBoxCheckpoint(_blockcount); try If Not Assigned(Labstracmem) then begin SendError(ntp_response,HeaderData.operation,CT_NetError_SafeboxNotFound,HeaderData.request_id,Format('Safebox stream file for block %d not found',[_blockcount])); @@ -3314,7 +3317,7 @@ procedure TNetConnection.DoProcess_GetPendingOperations; headerData : TNetHeaderData; opht : TOperationsHashTree; errors : String; - i : Integer; + i,Lopc,Lprc : Integer; begin {$IFDEF PRODUCTION} If FNetProtocolVersion.protocol_available<=6 then Exit; // Note: GetPendingOperations started on protocol_available=7 @@ -3361,7 +3364,10 @@ procedure TNetConnection.DoProcess_GetPendingOperations; // opht := TOperationsHashTree.Create; try - If Not opht.LoadOperationsHashTreeFromStream(dataReceived,False,FRemoteOperationBlock.protocol_version,FRemoteOperationBlock.protocol_version,Nil,errors) then begin + If Not opht.LoadOperationsHashTreeFromStream(dataReceived,False, + FRemoteOperationBlock.protocol_version,FRemoteOperationBlock.protocol_version,Nil, + CT_AllowPropagate0feeOperations,Lopc,Lprc,errors) + then begin DisconnectInvalidClient(False,'Invalid operations hash tree stream: '+errors); Exit; end; @@ -3388,7 +3394,7 @@ procedure TNetConnection.DoProcess_GetPendingOperations; procedure TNetConnection.DoProcess_GetPubkeyAccounts_Request(HeaderData: TNetHeaderData; DataBuffer: TStream); Const CT_Max_Accounts_per_call = 1000; var responseStream, accountsStream : TMemoryStream; - start,max : Integer; + start,max,i : Integer; c, nAccounts : Cardinal; acc : TAccount; DoDisconnect : Boolean; @@ -3396,6 +3402,7 @@ procedure TNetConnection.DoProcess_GetPubkeyAccounts_Request(HeaderData: TNetHea pubKey : TAccountKey; sbakl : TSafeboxPubKeysAndAccounts; ocl : TAccountsNumbersList; + LAccountsList : TList; begin { This call is used to obtain Accounts used by a Public key @@ -3442,15 +3449,19 @@ procedure TNetConnection.DoProcess_GetPubkeyAccounts_Request(HeaderData: TNetHea if Assigned(sbakl) then begin ocl := sbakl.GetAccountsUsingThisKey(pubKey); if Assigned(ocl) then begin - while (start0) do begin - acc := TNode.Node.GetMempoolAccount(ocl.Get(start)); - if (HeaderData.protocol.protocol_available>9) then - TAccountComp.SaveAccountToAStream(accountsStream,acc,CT_PROTOCOL_5) - else - TAccountComp.SaveAccountToAStream(accountsStream,acc,CT_PROTOCOL_4); - inc(nAccounts); - inc(start); - dec(max); + LAccountsList := TList.Create; + try + ocl.FillList(start,max,LAccountsList); + for i := 0 to LaccountsList.Count-1 do begin + acc := TNode.Node.GetMempoolAccount(LAccountsList[i]); + if (HeaderData.protocol.protocol_available>9) then + TAccountComp.SaveAccountToAStream(accountsStream,acc,CT_PROTOCOL_5) + else + TAccountComp.SaveAccountToAStream(accountsStream,acc,CT_PROTOCOL_4); + end; + nAccounts := LaccountsList.Count; + finally + LaccountsList.Free; end; end; // Save & send @@ -3911,8 +3922,13 @@ procedure TNetConnection.DoProcess_NewBlock(AHeaderData: TNetHeaderData; DataBuf If Not TAccountComp.EqualOperationBlocks(operationsComp.OperationBlock,original_OperationBlock) then begin // This can happen when a OpReference in my MEMPOOL is different to an OpReference in the miner, causing different OperationsHash value // This means a possible double spend found - TLog.NewLog(lterror,ClassName,Format('Constructed a distinct FAST PROPAGATION block with my mempool operations. Received: %s Constructed: %s', + if Not operationsComp.OperationsHashTree.HasOpRecoverOperations then begin + TLog.NewLog(lterror,ClassName,Format('Constructed a distinct FAST PROPAGATION block with my mempool operations. Received: %s Constructed: %s', [TPCOperationsComp.OperationBlockToText(original_OperationBlock),TPCOperationsComp.OperationBlockToText(operationsComp.OperationBlock)])); + end else begin + TLog.NewLog(lterror,ClassName,Format('Constructed a distinct FAST PROPAGATION block with my mempool operations. Posible double-spend attempt. Received: %s Constructed: %s', + [TPCOperationsComp.OperationBlockToText(original_OperationBlock),TPCOperationsComp.OperationBlockToText(operationsComp.OperationBlock)])); + end; if Not TPCSafeBox.IsValidOperationBlock(original_OperationBlock,errors) then begin // This means a scammer! DoDisconnect := True; @@ -4431,7 +4447,7 @@ function TNetConnection.Send_AddOperations(Operations : TOperationsHashTree) : B nOpsToSend := Operations.OperationsCount; end; if FBufferToSendOperations.OperationsCount>0 then begin - TLog.NewLog(ltdebug,ClassName,Format('Sending %d Operations to %s (inProc:%d, Received:%d)',[FBufferToSendOperations.OperationsCount,ClientRemoteAddr,nOpsToSend,FBufferReceivedOperationsHash.Count])); + {$IFDEF HIGHLOG}TLog.NewLog(ltdebug,ClassName,Format('Sending %d Operations to %s (inProc:%d, Received:%d)',[FBufferToSendOperations.OperationsCount,ClientRemoteAddr,nOpsToSend,FBufferReceivedOperationsHash.Count]));{$ENDIF} LStream := TMemoryStream.Create; try request_id := TNetData.NetData.NewRequestId; @@ -4623,8 +4639,12 @@ function TNetConnection.Send_NewBlockFound(const NewBlock: TPCOperationsComp): B data := TMemoryStream.Create; try request_id := TNetData.NetData.NewRequestId; - // Will send a FAST PROPAGATION BLOCK as described at PIP-0015 - netOp := CT_NetOp_NewBlock_Fast_Propagation; + if (NewBlock.OperationsHashTree.HasOpRecoverOperations) then begin + netOp := CT_NetOp_NewBlock; + end else begin + // Will send a FAST PROPAGATION BLOCK as described at PIP-0015 + netOp := CT_NetOp_NewBlock_Fast_Propagation; + end; NewBlock.SaveBlockToStream(netOp = CT_NetOp_NewBlock_Fast_Propagation,data); // Will save all only if not FAST PROPAGATION // Send Aggregated Hashsrate based on network protocol available version if FNetProtocolVersion.protocol_available>=CT_MIN_NetProtocol_Use_Aggregated_Hashrate then begin @@ -4644,6 +4664,9 @@ function TNetConnection.Send_NewBlockFound(const NewBlock: TPCOperationsComp): B data.Write(opRef,SizeOf(opRef)); end; end; + TLog.NewLog(ltdebug,ClassName,Format('Sending NEW FAST PROPAGATION BLOCK %d with %d operations in %d bytes to %s',[NewBlock.OperationBlock.block,c,data.Size,ClientRemoteAddr])); + end else begin + TLog.NewLog(ltdebug,ClassName,Format('Sending NEW BLOCK %d with %d operations in %d bytes to %s',[NewBlock.OperationBlock.block,NewBlock.Count,data.Size,ClientRemoteAddr])); end; Send(ntp_autosend,netOp,0,request_id,data); finally @@ -5131,7 +5154,7 @@ procedure TNetworkAdjustedTime.AddNewIp(const clientIp: String; clientTimestamp inc(P^.counter); inc(FTotalCounter); UpdateMedian(l); - TLog.NewLog(ltDebug,ClassName,Format('AddNewIp (%s,%d) - Total:%d/%d Offset:%d',[clientIp,clientTimestamp,l.Count,FTotalCounter,FTimeOffset])); + {$IFDEF HIGHLOG}TLog.NewLog(ltDebug,ClassName,Format('AddNewIp (%s,%d) - Total:%d/%d Offset:%d',[clientIp,clientTimestamp,l.Count,FTotalCounter,FTimeOffset]));{$ENDIF} finally FTimesList.UnlockList; end; @@ -5206,9 +5229,9 @@ procedure TNetworkAdjustedTime.RemoveIp(const clientIp: String); Dec(FTotalCounter); end; UpdateMedian(l); - if (i>=0) then - TLog.NewLog(ltDebug,ClassName,Format('RemoveIp (%s) - Total:%d/%d Offset:%d',[clientIp,l.Count,FTotalCounter,FTimeOffset])) - else TLog.NewLog(ltError,ClassName,Format('RemoveIp not found (%s) - Total:%d/%d Offset:%d',[clientIp,l.Count,FTotalCounter,FTimeOffset])) + if (i>=0) then begin + {$IFDEF HIGHLOG}TLog.NewLog(ltDebug,ClassName,Format('RemoveIp (%s) - Total:%d/%d Offset:%d',[clientIp,l.Count,FTotalCounter,FTimeOffset])){$ENDIF} + end else TLog.NewLog(ltError,ClassName,Format('RemoveIp not found (%s) - Total:%d/%d Offset:%d',[clientIp,l.Count,FTotalCounter,FTimeOffset])) finally FTimesList.UnlockList; end; diff --git a/src/core/UNode.pas b/src/core/UNode.pas index 9f7735ac4..fb248a9d5 100644 --- a/src/core/UNode.pas +++ b/src/core/UNode.pas @@ -35,8 +35,8 @@ interface uses Classes, SysUtils, - {$IFNDEF FPC}System.Generics.Collections{$ELSE}Generics.Collections{$ENDIF}, UPCDataTypes, - UBlockChain, UNetProtocol, UAccounts, UCrypto, UThread, SyncObjs, ULog, UBaseTypes, UPCOrderedLists; + {$IFNDEF FPC}System.Generics.Collections{$ELSE}Generics.Collections{$ENDIF}, UPCDataTypes, UEncoding, + UBlockChain, UNetProtocol, UAccounts, UCrypto, UEPasa, UThread, SyncObjs, ULog, UBaseTypes, UPCOrderedLists; {$I ./../config.inc} @@ -44,10 +44,20 @@ interface { TNode } - TSearchOperationResult = (found, invalid_params, blockchain_block_not_found); - TNodeNotifyEvents = Class; + TNode = Class; + + TSaveMempoolOperationsThread = Class(TPCThread) + private + FNode : TNode; + FPendingToSave : Boolean; + protected + procedure BCExecute; override; + public + procedure Touch; + End; + TNode = Class(TComponent) private FNodeLog : TLog; @@ -61,9 +71,10 @@ interface FBCBankNotify : TPCBankNotify; FPeerCache : String; FDisabledsNewBlocksCount : Integer; - FSentOperations : TOrderedRawList; FBroadcastData : Boolean; FUpdateBlockchain: Boolean; + FMaxPayToKeyPurchasePrice: Int64; + FSaveMempoolOperationsThread : TSaveMempoolOperationsThread; {$IFDEF BufferOfFutureOperations} FBufferAuxWaitingOperations : TOperationsHashTree; {$ENDIF} @@ -100,12 +111,9 @@ interface // Procedure NotifyBlocksChanged; // - procedure GetStoredOperationsFromAccount(AOwnerThread : TPCThread; const OperationsResume: TList; account_number: Cardinal; MaxDepth, StartOperation, EndOperation : Integer; SearchBackwardsStartingAtBlock : Cardinal=0); overload; - procedure GetStoredOperationsFromAccount(const OperationsResume: TOperationsResumeList; account_number: Cardinal; MaxDepth, StartOperation, EndOperation : Integer; SearchBackwardsStartingAtBlock : Cardinal=0); overload; - Function FindOperation(Const OperationComp : TPCOperationsComp; Const OperationHash : TRawBytes; var block : Cardinal; var operation_block_index : Integer) : Boolean; - Function FindOperationExt(Const OperationComp : TPCOperationsComp; Const OperationHash : TRawBytes; var block : Cardinal; var operation_block_index : Integer) : TSearchOperationResult; - Function FindNOperation(block, account, n_operation : Cardinal; var OpResume : TOperationResume) : TSearchOperationResult; - Function FindNOperations(account, start_block : Cardinal; allow_search_previous : Boolean; n_operation_low, n_operation_high : Cardinal; OpResumeList : TOperationsResumeList) : TSearchOperationResult; + Function FindOperation(Const AOperationHash : TRawBytes; var AOperationResume : TOperationResume) : TSearchOpHashResult; + Function FindNOperation(block, account, n_operation : Cardinal; var OpResume : TOperationResume) : TSearchOpHashResult; + Function FindNOperations(account, start_block : Cardinal; allow_search_previous : Boolean; n_operation_low, n_operation_high : Cardinal; OpResumeList : TOperationsResumeList) : TSearchOpHashResult; // Procedure InitSafeboxAndOperations(max_block_to_read : Cardinal = $FFFFFFFF; restoreProgressNotify : TProgressNotify = Nil); Procedure AutoDiscoverNodes(Const ips : String); @@ -119,11 +127,24 @@ interface function TryLockNode(MaxWaitMilliseconds : Cardinal) : Boolean; procedure UnlockNode; // + function GetAccountsAvailableByPublicKey(const APubKeys : TList; out AOnSafebox, AOnMempool : Integer) : Integer; overload; + function GetAccountsAvailableByPublicKey(const APubKey : TAccountKey; out AOnSafebox, AOnMempool : Integer) : Integer; overload; + // Property BroadcastData : Boolean read FBroadcastData write FBroadcastData; Property UpdateBlockchain : Boolean read FUpdateBlockchain write FUpdateBlockchain; procedure MarkVerifiedECDSASignaturesFromMemPool(newOperationsToValidate : TPCOperationsComp); class function NodeVersion : String; class function GetPascalCoinDataFolder : String; + class procedure SetPascalCoinDataFolder(const ANewDataFolder : String); + // + function TryFindAccountByKey(const APubKey : TAccountKey; out AAccountNumber : Cardinal) : Boolean; + function TryFindPublicSaleAccount(AMaximumPrice : Int64; APreventRaceCondition : Boolean; out AAccountNumber : Cardinal) : Boolean; + Function TryResolveEPASA(const AEPasa : TEPasa; out AResolvedAccount: Cardinal): Boolean; overload; + Function TryResolveEPASA(const AEPasa : TEPasa; out AResolvedAccount: Cardinal; out AErrorMessage: String): Boolean; overload; + Function TryResolveEPASA(const AEPasa : TEPasa; out AResolvedAccount: Cardinal; out AResolvedKey : TAccountKey; out ARequiresPurchase : boolean): Boolean; overload; + Function TryResolveEPASA(const AEPasa : TEPasa; out AResolvedAccount: Cardinal; out AResolvedKey : TAccountKey; out ARequiresPurchase : boolean; out AErrorMessage: String): Boolean; overload; + + Property MaxPayToKeyPurchasePrice: Int64 read FMaxPayToKeyPurchasePrice write FMaxPayToKeyPurchasePrice; End; TThreadSafeNodeNotifyEvent = Class(TPCThread) @@ -204,9 +225,11 @@ TNodeMessageManyEventHelper = record helper for TNodeMessageManyEvent implementation -Uses UOpTransaction, UConst, UTime, UCommon, UPCOperationsSignatureValidator, UFolderHelper; +Uses UOpTransaction, UConst, UTime, UCommon, UPCOperationsSignatureValidator, + UFolderHelper, USettings; var _Node : TNode; + _PascalCoinDataFolder : String; { TNode } @@ -256,6 +279,11 @@ function TNode.AddNewBlockChain(SenderConnection: TNetConnection; NewBlockOperat // Does not need to save a FOperations backup because is Sanitized by "TNode.OnBankNewBlock" Result := Bank.AddNewBlockChainBlock(NewBlockOperations,TNetData.NetData.NetworkAdjustedTime.GetMaxAllowedTimestampForNewBlock,errors); if Result then begin + {$IFDEF USE_ABSTRACTMEM} + If Not FBank.IsRestoringFromFile then begin + Bank.SafeBox.PCAbstractMem.FlushCache; + end; + {$ENDIF} if Assigned(SenderConnection) then begin FNodeLog.NotifyNewLog(ltupdate,SenderConnection.ClassName,Format(';%d;%s;%s;;%d;%d;%d;%s',[OpBlock.block,sClientRemoteAddr,OpBlock.block_payload.ToPrintable, OpBlock.timestamp,UnivDateTimeToUnix(DateTime2UnivDateTime(Now)),UnivDateTimeToUnix(DateTime2UnivDateTime(Now)) - OpBlock.timestamp,IntToHex(OpBlock.compact_target,8)])); @@ -275,7 +303,7 @@ function TNode.AddNewBlockChain(SenderConnection: TNetConnection; NewBlockOperat if Result then begin opsht := TOperationsHashTree.Create; Try - j := Random(3); // j=0,1 or 2 + j := Random(5); If (Bank.LastBlockFound.OperationBlock.block>j) then minBlockResend:=Bank.LastBlockFound.OperationBlock.block - j else minBlockResend:=1; @@ -286,20 +314,18 @@ function TNode.AddNewBlockChain(SenderConnection: TNetConnection; NewBlockOperat While (opsht.OperationsCount'+inttostr(minBlockResend)+') ('+inttostr(i+1)+'/'+inttostr(FOperations.Count)+'): '+FOperations.Operation[i].ToString);{$ENDIF} + resendOp.ResendOnBlock := LLockedMempool.OperationBlock.block; + resendOp.ResendCount := resendOp.ResendCount + 1; end; inc(i); end; - If LLockedMempool.Count>0 then begin - TLog.NewLog(ltinfo,classname,Format('Resending %d operations for new block (Buffer Pending Operations:%d)',[opsht.OperationsCount,LLockedMempool.Count])); + If opsht.OperationsCount>0 then begin + TLog.NewLog(ltinfo,classname,Format('Resending %d operations for new block (Mempool Pending Operations:%d)',[opsht.OperationsCount,LLockedMempool.Count])); {$IFDEF HIGHLOG} if opsht.OperationsCount>0 then begin for i := 0 to opsht.OperationsCount - 1 do begin @@ -311,15 +337,6 @@ function TNode.AddNewBlockChain(SenderConnection: TNetConnection; NewBlockOperat Finally UnlockMempoolRead; End; - // Clean sent operations buffer - j := 0; - for i := FSentOperations.Count-1 downto 0 do begin - If (FSentOperations.GetTag(i)0 then begin - LLockedMempool := LockMempoolRead; - try - // Save operations buffer - Bank.Storage.SavePendingBufferOperations(LLockedMempool.OperationsHashTree); - finally - UnlockMempoolRead; - end; + FSaveMempoolOperationsThread.Touch; // This will indicate to thread that mempool needs to be saved LTickCount := TPlatform.GetElapsedMilliseconds(LTickCount); if LTickCount=0 then LTickCount:=1; if Assigned(SenderConnection) then begin s := SenderConnection.ClientRemoteAddr; end else s := '(SELF)'; - TLog.NewLog(ltdebug,Classname,Format('Finalizing AddOperations from %s Operations:%d of %d valids:%d spam:%d invalids:%d repeated:%d Miliseconds:%d %.1f ops/sec', - [s,LOpsToAdd.Count,AOperationsHashTreeToAdd.OperationsCount,Result,nSpam,nError,nRepeated,LTickCount,LOpsToAdd.Count * 1000 / LTickCount])); + {$IFDEF HIGHLOG}TLog.NewLog(ltdebug,Classname,Format('Finalizing AddOperations from %s Operations:%d of %d valids:%d spam:%d invalids:%d repeated:%d Miliseconds:%d %.1f ops/sec', + [s,LOpsToAdd.Count,AOperationsHashTreeToAdd.OperationsCount,Result,nSpam,nError,nRepeated,LTickCount,LOpsToAdd.Count * 1000 / LTickCount]));{$ENDIF} if FBroadcastData then begin // Send to other nodes j := TNetData.NetData.ConnectionsCountAll; @@ -625,7 +636,7 @@ procedure TNode.AutoDiscoverNodes(const ips: String); constructor TNode.Create(AOwner: TComponent); begin - FSentOperations := TOrderedRawList.Create; + FMaxPayToKeyPurchasePrice := 0; FNodeLog := TLog.Create(Self); FNodeLog.ProcessGlobalLogs := false; RegisterOperationsClass; @@ -649,11 +660,14 @@ constructor TNode.Create(AOwner: TComponent); {$ENDIF} FBroadcastData := True; FUpdateBlockchain := True; + FSaveMempoolOperationsThread := TSaveMempoolOperationsThread.Create(True); + FSaveMempoolOperationsThread.FNode := Self; + FSaveMempoolOperationsThread.Resume; if Not Assigned(_Node) then _Node := Self; end; -class procedure TNode.DecodeIpStringToNodeServerAddressArray( - const Ips: String; Var NodeServerAddressArray: TNodeServerAddressArray); +class procedure TNode.DecodeIpStringToNodeServerAddressArray(const Ips: String; + var NodeServerAddressArray: TNodeServerAddressArray); Function GetIp(var ips_string : String; var nsa : TNodeServerAddress) : Boolean; Const CT_IP_CHARS = ['a'..'z','A'..'Z','0'..'9','.','-','_']; var i : Integer; @@ -667,18 +681,18 @@ class procedure TNode.DecodeIpStringToNodeServerAddressArray( end; // Delete invalid chars: i := 0; - while (i<=High(ips_string)) AND (NOT (ips_string.Chars[i] IN CT_IP_CHARS)) do inc(i); - if (i>Low(ips_string)) then ips_string := ips_string.Substring(i,Length(ips_string)); + while (i<=(ips_string.Length-1)) AND (NOT (ips_string.Chars[i] IN CT_IP_CHARS)) do inc(i); + if (i>0) then ips_string := ips_string.Substring(i,ips_string.Length); // Capture IP value i := 0; - while (i<=High(ips_string)) and (ips_string.Chars[i] in CT_IP_CHARS) do inc(i); + while (i<=(ips_string.Length-1)) and (ips_string.Chars[i] in CT_IP_CHARS) do inc(i); if (i>0) then begin nsa.ip := ips_string.Substring(0,i); // Capture possible :Port value - if (i<=High(ips_string)) and (ips_string.Chars[i]=':') then begin + if (i<=(ips_string.Length-1)) and (ips_string.Chars[i]=':') then begin inc(i); port := ''; - while (i<=High(ips_string)) and (ips_string.Chars[i] in ['0'..'9']) do begin + while (i<=(ips_string.Length-1)) and (ips_string.Chars[i] in ['0'..'9']) do begin port := port + ips_string.Chars[i]; inc(i); end; @@ -708,6 +722,11 @@ destructor TNode.Destroy; begin TLog.NewLog(ltInfo,ClassName,'TNode.Destroy START'); Try + step := 'Deleting SaveMempoolOperationsThread'; + FSaveMempoolOperationsThread.Terminate; + FSaveMempoolOperationsThread.WaitFor; + FreeAndNil(FSaveMempoolOperationsThread); + step := 'Deleting critical section'; FreeAndNil(FLockMempool); FreeAndNil(FOperationSequenceLock); @@ -725,8 +744,6 @@ destructor TNode.Destroy; FreeAndNil(FMemPoolAddingOperationsList); step := 'Assigning NIL to node var'; if _Node=Self then _Node := Nil; - Step := 'Destroying SentOperations list'; - FreeAndNil(FSentOperations); step := 'Destroying Bank'; FreeAndNil(FBCBankNotify); @@ -757,6 +774,170 @@ procedure TNode.EnableNewBlocks; dec(FDisabledsNewBlocksCount); end; +function TNode.TryFindAccountByKey(const APubKey: TAccountKey; + out AAccountNumber: Cardinal): Boolean; + // Finds the smallest numbered account with selected key (or returns false) +var Lpka : TSafeboxPubKeysAndAccounts; + LAccountsNumberList : TAccountsNumbersList; +begin + Result := False; + Lpka := Bank.SafeBox.OrderedAccountKeysList; + if Assigned(Lpka) then begin + LAccountsNumberList := Lpka.GetAccountsUsingThisKey(APubKey); + if Assigned(LAccountsNumberList) then begin + if LAccountsNumberList.Count>0 then begin + AAccountNumber := LAccountsNumberList.Get(0); + Result := True; + end; + end; + end; +end; + +function TNode.TryFindPublicSaleAccount(AMaximumPrice: Int64; APreventRaceCondition : Boolean; + out AAccountNumber: Cardinal): Boolean; + // Finds an account at or below argument purchase price (or returns false) + // APreventRaceCondition: When True will return a random account in valid range price + // Limitations: Account must be >0 +var LtempAccNumber : Int64; + LLastValidAccount, LCurrAccount : TAccount; + LContinueSearching : Boolean; +begin + Result := False; + + // Sorted list: Bank.SafeBox.AccountsOrderedBySalePrice + // Note: List is sorted by Sale price (ASCENDING), but NOT by public/private sale, must check + + if Not Bank.SafeBox.AccountsOrderedBySalePrice.FindLowest(LtempAccNumber) then Exit(False); + LCurrAccount := GetMempoolAccount(LtempAccNumber); + + if (LCurrAccount.accountInfo.price<=AMaximumPrice) + and (TAccountComp.IsAccountForPublicSale(LCurrAccount.accountInfo)) then begin + LLastValidAccount := LCurrAccount; + LContinueSearching := (APreventRaceCondition) And (Random(50)=0); + end else begin + LLastValidAccount := CT_Account_NUL; + LContinueSearching := True; + end; + + while (LCurrAccount.accountInfo.price<=AMaximumPrice) and (LContinueSearching) do begin + + if TAccountComp.IsAccountForPublicSale(LCurrAccount.accountInfo) then LLastValidAccount := LCurrAccount; + + if Not (Bank.SafeBox.AccountsOrderedBySalePrice.FindSuccessor(LtempAccNumber,LtempAccNumber)) then Break; + LCurrAccount := GetMempoolAccount(LtempAccNumber); + + // If price increased, then do not continue and use LastValidAccount + if (LLastValidAccount.account>0) + and (LLastValidAccount.accountInfo.price <> LCurrAccount.accountInfo.price) then Break; + + // Continue? + LContinueSearching := + (LLastValidAccount.account=0) // This means that no valid account has been found yet... + or + (LContinueSearching And (Random(50)=0)); // Random prevention + end; + if (LLastValidAccount.account>0) then begin + AAccountNumber := LLastValidAccount.account; + Result := True; + end else begin + AAccountNumber := 0; + Result := False; + end; +end; + +Function TNode.TryResolveEPASA(const AEPasa : TEPasa; out AResolvedAccount: Cardinal): Boolean; +var LErrMsg : String; +begin + Result := TryResolveEPASA(AEPasa, AResolvedAccount, LErrMsg); +end; + +Function TNode.TryResolveEPASA(const AEPasa : TEPasa; out AResolvedAccount: Cardinal; out AErrorMessage: String): Boolean; +var + LAccountKey : TAccountKey; + LRequiresPurchase : Boolean; +begin + Result := TryResolveEPASA(AEPasa, AResolvedAccount, LAccountKey, LRequiresPurchase, AErrorMessage); + if Result AND AEPasa.IsPayToKey then begin + Result := False; + AErrorMessage := 'EPASA was a pay-to-key style'; + end; +end; + +Function TNode.TryResolveEPASA(const AEPasa : TEPasa; out AResolvedAccount: Cardinal; out AResolvedKey : TAccountKey; out ARequiresPurchase : boolean): Boolean; +var LErrMsg : String; +begin + Result := TryResolveEPASA(AEPasa, AResolvedAccount, AResolvedKey, ARequiresPurchase, LErrMsg); +end; + +Function TNode.TryResolveEPASA(const AEPasa : TEPasa; out AResolvedAccount: Cardinal; out AResolvedKey : TAccountKey; out ARequiresPurchase : boolean; out AErrorMessage: String): Boolean; +var + LErrMsg : String; +begin + AResolvedAccount := 0; + AResolvedKey.Clear; + ARequiresPurchase := False; + AErrorMessage := ''; + if (AEPasa.IsPayToKey) then begin + // Parse account key in EPASA + if NOT TAccountComp.AccountPublicKeyImport(AEPasa.Payload, AResolvedKey, LErrMsg) then begin + AResolvedAccount := CT_AccountNo_NUL; + AResolvedKey := CT_Account_NUL.accountInfo.accountKey; + ARequiresPurchase := False; + AErrorMessage := Format('Invalid key specified in PayToKey EPASA "%s". %s',[AEPasa.ToString(), LErrMsg]); + Exit(False); + end; + + // Try to find key in safebox + if TryFindAccountByKey(AResolvedKey, AResolvedAccount) then begin + // Key already exists in SafeBox, so send to that account + ARequiresPurchase := False; + Exit(True); + end; + + // If no key found, find optimal public purchase account + if TryFindPublicSaleAccount(MaxPayToKeyPurchasePrice, True, AResolvedAccount) then begin + // Account needs to be purchased + ARequiresPurchase := True; + Exit(True); + end; + + // Account could not be resolved + AResolvedAccount := CT_AccountNo_NUL; + AResolvedKey := CT_Account_NUL.accountInfo.accountKey; + ARequiresPurchase := False; + AErrorMessage := 'No account could be resolved for pay to key EPASA'; + Exit(False); + + end else if (AEPasa.IsAddressedByName) then begin + // Find account by name + AResolvedAccount := Bank.SafeBox.FindAccountByName(AEPasa.AccountName); + AResolvedKey := CT_Account_NUL.accountInfo.accountKey; + ARequiresPurchase := False; + if AResolvedAccount = CT_AccountNo_NUL then begin + // No account with name found + AResolvedAccount := CT_AccountNo_NUL; + AResolvedKey := CT_Account_NUL.accountInfo.accountKey; + ARequiresPurchase := False; + AErrorMessage := Format('No account with name "%s" was found', [AEPasa.AccountName]); + Exit(False); + end; + Exit(True); + end; + // addressed by number + if NOT AEPasa.IsAddressedByNumber then raise Exception.Create('Internal Error c8ecd69d-3621-4f5e-b4f1-9926ab2f5013'); + if NOT AEPasa.Account.HasValue then raise Exception.Create('Internal Error 544c8cb9-b700-4b5f-93ca-4d045d0a06ae'); + AResolvedAccount := AEPasa.Account.Value; + if (AResolvedAccount < 0) or (AResolvedAccount >= Self.Bank.AccountsCount) then begin + AResolvedAccount := CT_AccountNo_NUL; + AResolvedKey := CT_Account_NUL.accountInfo.accountKey; + ARequiresPurchase := False; + AErrorMessage := Format('Account number %d does not exist in safebox',[AEPasa.Account.Value]); + Exit(False); + end; + Result := true; +end; + + function TNode.TryLockNode(MaxWaitMilliseconds: Cardinal): Boolean; begin Result := TPCThread.TryProtectEnterCriticalSection(Self,MaxWaitMilliseconds,FLockMempool); @@ -829,7 +1010,7 @@ function TNode.IsBlockChainValid(var WhyNot : String): Boolean; Result := true; end; -function TNode.IsReady(Var CurrentProcess: String): Boolean; +function TNode.IsReady(var CurrentProcess: String): Boolean; var LLockedMempool : TPCOperationsComp; begin Result := false; @@ -894,148 +1075,8 @@ procedure TNode.NotifyBlocksChanged; end; end; -procedure TNode.GetStoredOperationsFromAccount(AOwnerThread : TPCThread; const OperationsResume: TList; account_number: Cardinal; - MaxDepth, StartOperation, EndOperation: Integer; SearchBackwardsStartingAtBlock: Cardinal); - // Optimization: - // For better performance, will only include at "OperationsResume" values betweeen "startOperation" and "endOperation" - - // New use case: Will allow to start in an unknown block when first_block_is_unknows - Procedure DoGetFromBlock(block_number : Integer; last_balance : Int64; act_depth : Integer; nOpsCounter : Integer; first_block_is_unknown : Boolean); - var opc : TPCOperationsComp; - op : TPCOperation; - OPR : TOperationResume; - l : TList; - i : Integer; - last_block_number : Integer; - found_in_block : Boolean; - acc_0_miner_reward, acc_4_dev_reward : Int64; - acc_4_for_dev : Boolean; - begin - if Assigned(AOwnerThread) then begin - if AOwnerThread.terminated then Exit; - end; - if (act_depth<=0) then exit; - opc := TPCOperationsComp.Create(Nil); - Try - l := TList.Create; - try - last_block_number := block_number+1; - while (last_block_number>block_number) And (act_depth>0) - And (block_number >= (account_number DIV CT_AccountsPerBlock)) - And (nOpsCounter <= EndOperation) do begin - if Assigned(AOwnerThread) then begin - if AOwnerThread.terminated then Exit; - end; - found_in_block := False; - last_block_number := block_number; - l.Clear; - If not Bank.Storage.LoadBlockChainBlock(opc,block_number) then begin - TLog.NewLog(ltdebug,ClassName,'Block '+inttostr(block_number)+' not found. Cannot read operations'); - exit; - end; - opc.OperationsHashTree.GetOperationsAffectingAccount(account_number,l); - for i := l.Count - 1 downto 0 do begin - op := opc.Operation[PtrInt(l.Items[i])]; - If TPCOperation.OperationToOperationResume(block_number,Op,False,account_number,OPR) then begin - OPR.NOpInsideBlock := PtrInt(l.Items[i]); - OPR.time := opc.OperationBlock.timestamp; - OPR.Block := block_number; - If last_balance>=0 then begin - OPR.Balance := last_balance; - last_balance := last_balance - ( OPR.Amount + OPR.Fee ); - end else OPR.Balance := -1; // Undetermined - if (nOpsCounter>=StartOperation) And (nOpsCounter<=EndOperation) then begin - OperationsResume.Add(OPR); - end; - inc(nOpsCounter); - found_in_block := True; - end; - end; - - // Is a new block operation? - if (TAccountComp.AccountBlock(account_number)=block_number) then begin - TPascalCoinProtocol.GetRewardDistributionForNewBlock(opc.OperationBlock,acc_0_miner_reward,acc_4_dev_reward,acc_4_for_dev); - If ((account_number MOD CT_AccountsPerBlock)=0) Or - ( ((account_number MOD CT_AccountsPerBlock)=CT_AccountsPerBlock-1) AND (acc_4_for_dev) ) then begin - OPR := CT_TOperationResume_NUL; - OPR.OpType:=CT_PseudoOp_Reward; - OPR.valid := true; - OPR.Block := block_number; - OPR.time := opc.OperationBlock.timestamp; - OPR.AffectedAccount := account_number; - If ((account_number MOD CT_AccountsPerBlock)=0) then begin - OPR.Amount := acc_0_miner_reward; - OPR.OperationTxt := 'Miner reward'; - OPR.OpSubtype:=CT_PseudoOpSubtype_Miner; - end else begin - OPR.Amount := acc_4_dev_reward; - OPR.OperationTxt := 'Dev reward'; - OPR.OpSubtype:=CT_PseudoOpSubtype_Developer; - end; - If last_balance>=0 then begin - OPR.Balance := last_balance; - end else OPR.Balance := -1; // Undetermined - if (nOpsCounter>=StartOperation) And (nOpsCounter<=EndOperation) then begin - OperationsResume.Add(OPR); - end; - inc(nOpsCounter); - found_in_block := True; - end; - end; - // - dec(act_depth); - If (Not found_in_block) And (first_block_is_unknown) then begin - Dec(block_number); - end else begin - block_number := opc.PreviousUpdatedBlocks.GetPreviousUpdatedBlock(account_number,block_number); - end; - opc.Clear(true); - end; - finally - l.Free; - end; - Finally - opc.Free; - End; - end; - -Var acc : TAccount; - startBlock : Cardinal; - lastBalance : Int64; -begin - if MaxDepth<0 then Exit; - if account_number>=Bank.SafeBox.AccountsCount then Exit; - if StartOperation>EndOperation then Exit; - acc := Bank.SafeBox.Account(account_number); - if (acc.GetLastUpdatedBlock>0) Or (acc.account=0) then Begin - if (SearchBackwardsStartingAtBlock=0) Or (SearchBackwardsStartingAtBlock>=acc.GetLastUpdatedBlock) then begin - startBlock := acc.GetLastUpdatedBlock; - lastBalance := acc.balance; - end else begin - startBlock := SearchBackwardsStartingAtBlock; - lastBalance := -1; - end; - DoGetFromBlock(startBlock,lastBalance,MaxDepth,0,startBlock<>acc.GetLastUpdatedBlock); - end; -end; - -procedure TNode.GetStoredOperationsFromAccount(const OperationsResume: TOperationsResumeList; account_number: Cardinal; MaxDepth, StartOperation, EndOperation: Integer; SearchBackwardsStartingAtBlock : Cardinal = 0); -var LOpList : TList; - i : Integer; -begin - LOpList := TList.Create; - try - GetStoredOperationsFromAccount(Nil,LOpList,account_number,MaxDepth,StartOperation,EndOperation,SearchBackwardsStartingAtBlock); - for i := 0 to LOpList.Count-1 do begin - OperationsResume.Add(LOpList[i]); - end; - finally - LOpList.Free; - end; -end; - function TNode.FindNOperation(block, account, n_operation: Cardinal; - var OpResume: TOperationResume): TSearchOperationResult; + var OpResume: TOperationResume): TSearchOpHashResult; // Note: block = 0 search in all blocks. If Block>0 must match a valid block with operation with this account var oprl : TOperationsResumeList; begin @@ -1043,14 +1084,14 @@ function TNode.FindNOperation(block, account, n_operation: Cardinal; try Result := FindNOperations(account,block,block=0,n_operation,n_operation,oprl); If oprl.Count>0 then begin - OpResume := oprl.OperationResume[0]; + OpResume := oprl.Items[0]; end else OpResume := CT_TOperationResume_NUL; finally oprl.Free; end; end; -function TNode.FindNOperations(account, start_block : Cardinal; allow_search_previous : Boolean; n_operation_low, n_operation_high: Cardinal; OpResumeList: TOperationsResumeList): TSearchOperationResult; +function TNode.FindNOperations(account, start_block : Cardinal; allow_search_previous : Boolean; n_operation_low, n_operation_high: Cardinal; OpResumeList: TOperationsResumeList): TSearchOpHashResult; var i : Integer; op : TPCOperation; aux_block, block : Cardinal; @@ -1060,7 +1101,7 @@ function TNode.FindNOperations(account, start_block : Cardinal; allow_search_pre LLockedMempool : TPCOperationsComp; begin OpResumeList.Clear; - Result := invalid_params; + Result := OpHash_invalid_params; block := start_block; If (block>=Bank.BlocksCount) then exit; // Invalid block number If (account>=Bank.AccountsCount) then exit; // Invalid account number @@ -1088,7 +1129,7 @@ function TNode.FindNOperations(account, start_block : Cardinal; allow_search_pre OpResumeList.Add(opr); if (n_operation>n_operation_low) then dec(n_operation) else begin - Result := found; + Result := OpHash_found; Exit; end; end; @@ -1105,7 +1146,7 @@ function TNode.FindNOperations(account, start_block : Cardinal; allow_search_pre While (n_operation>0) And (n_operation>=n_operation_low) And (block>0) do begin aux_block := block; If Not Bank.LoadOperations(OperationComp,block) then begin - Result := blockchain_block_not_found; // Cannot continue searching! + Result := OpHash_block_not_found; // Cannot continue searching! exit; end; For i:=OperationComp.Count-1 downto 0 do begin @@ -1121,12 +1162,12 @@ function TNode.FindNOperations(account, start_block : Cardinal; allow_search_pre OpResumeList.Add(opr); if (n_operation>n_operation_low) then dec(n_operation) else begin - Result := found; + Result := OpHash_found; Exit; end; end else begin If (op.GetAccountN_Operation(account) < n_operation) then begin - If (n_operation_high>n_operation_low) then Result := found; // multiple search, result is found (not an error) + If (n_operation_high>n_operation_low) then Result := OpHash_found; // multiple search, result is found (not an error) Exit // First occurrence is lower end; end; @@ -1142,7 +1183,7 @@ function TNode.FindNOperations(account, start_block : Cardinal; allow_search_pre finally OperationComp.Free; end; - Result := found; + Result := OpHash_found; end; procedure TNode.InitSafeboxAndOperations(max_block_to_read : Cardinal = $FFFFFFFF; restoreProgressNotify : TProgressNotify = Nil); @@ -1164,40 +1205,36 @@ procedure TNode.InitSafeboxAndOperations(max_block_to_read : Cardinal = $FFFFFFF end; end; -function TNode.FindOperationExt(const OperationComp: TPCOperationsComp; - const OperationHash: TRawBytes; var block: Cardinal; - var operation_block_index: Integer): TSearchOperationResult; +function TNode.FindOperation(Const AOperationHash : TRawBytes; var AOperationResume : TOperationResume) : TSearchOpHashResult; { With a OperationHash, search it } -var account,n_operation : Cardinal; +var i : Integer; op : TPCOperation; - initial_block, aux_block, aux_n_op : Cardinal; - opHashValid, opHash_OLD : TRawBytes; + opHashValid : TRawBytes; md160 : TRawBytes; LLockedMempool : TPCOperationsComp; + LBlock, LAccount, LN_Operation : Cardinal; begin - Result := invalid_params; + Result := OpHash_invalid_params; // Decode OperationHash - If not TPCOperation.DecodeOperationHash(OperationHash,block,account,n_operation,md160) then exit; - initial_block := block; + If not TPCOperation.DecodeOperationHash(AOperationHash,LBlock,LAccount,LN_Operation,md160) then exit; // - If (account>=Bank.AccountsCount) then exit; // Invalid account number + If (LAccount>=Bank.AccountsCount) then exit; // Invalid account number // If block=0 then we must search in pending operations first - if (block=0) then begin + if (LBlock=0) then begin LLockedMempool := LockMempoolRead; Try LLockedMempool.Lock; Try For i:=0 to LLockedMempool.Count-1 do begin op := LLockedMempool.Operation[i]; - If (op.SignerAccount=account) then begin + If (op.SignerAccount=LAccount) then begin opHashValid := TPCOperation.OperationHashValid(op,0); - opHash_OLD := TPCOperation.OperationHash_OLD(op,0); - If TBaseType.Equals(opHashValid,OperationHash) or - ((FBank.BlocksCount=Bank.BlocksCount) then exit; - // Search in previous blocks - While (block>0) do begin - aux_block := block; - If Not Bank.LoadOperations(OperationComp,block) then begin - Result := blockchain_block_not_found; - exit; - end; - For i:=OperationComp.Count-1 downto 0 do begin - op := OperationComp.Operation[i]; - if (op.IsSignerAccount(account)) then begin - aux_n_op := op.GetAccountN_Operation(account); - If (aux_n_op=aux_block) then exit; // Error... not found a valid block positioning - if (initial_block<>0) then exit; // If not found in specified block, no valid hash end; -end; - -function TNode.FindOperation(const OperationComp: TPCOperationsComp; - const OperationHash: TRawBytes; var block: Cardinal; - var operation_block_index: Integer): Boolean; - { With a OperationHash, search it } -var sor : TSearchOperationResult; -begin - sor := FindOperationExt(OperationComp,OperationHash,block,operation_block_index); - Result := sor = found; + Result := Bank.Storage.FindOperation(AOperationHash,AOperationResume); end; procedure TNode.NotifyNetClientMessage(Sender: TNetConnection; const TheMessage: String); @@ -1280,6 +1270,63 @@ function TNode.MempoolOperationsCount: Integer; end; end; +function TNode.GetAccountsAvailableByPublicKey(const APubKey: TAccountKey; + out AOnSafebox, AOnMempool: Integer): Integer; +var LPubKeys: TList; +begin + LPubKeys := TList.Create; + Try + LPubKeys.Add(APubKey); + Result := GetAccountsAvailableByPublicKey(LPubKeys,AOnSafebox,AOnMempool); + Finally + LPubKeys.Free; + End; +end; + +function TNode.GetAccountsAvailableByPublicKey( + const APubKeys: TList; out AOnSafebox, + AOnMempool: Integer): Integer; +var Lmempool : TPCOperationsComp; + i,j,k : Integer; + Lop : TPCOperation; + LopResume : TOperationResume; + Lpubkeys : TSafeboxPubKeysAndAccounts; + Laccounts : TAccountsNumbersList; +begin + AOnMempool := 0; + AOnSafebox := 0; + // Check safebox + Lpubkeys := Bank.SafeBox.OrderedAccountKeysList; + if Assigned(Lpubkeys) then begin + for i := 0 to APubKeys.Count-1 do begin + Laccounts := Lpubkeys.GetAccountsUsingThisKey(APubKeys[i]); + if Assigned(Laccounts) then begin + Inc(AOnSafebox,Laccounts.Count); + end; + end; + end else AOnSafebox := -1; + for i := 0 to APubKeys.Count-1 do begin + // Check mempool + Lmempool := LockMempoolRead; + try + for j := 0 to Lmempool.Count-1 do begin + Lop := Lmempool.Operation[j]; + Lop.OperationToOperationResume(Bank.BlocksCount,Lop,True,Lop.SignerAccount,LopResume); + for k:=0 to Length(LopResume.Changers)-1 do begin + if (public_key in LopResume.Changers[k].Changes_type) and (LopResume.Changers[k].New_Accountkey.IsEqualTo(APubKeys[i])) then begin + // New account is on the mempool! + inc(AOnMempool); + end; + end; + end; + finally + UnlockMempoolRead; + end; + end; + if AOnSafebox>=0 then Result := (AOnMempool + AOnsafebox) + else Result := AOnMempool; +end; + function TNode.GetMempoolAccount(AAccountNumber : Cardinal): TAccount; var LLockedMempool : TPCOperationsComp; begin @@ -1293,7 +1340,16 @@ function TNode.GetMempoolAccount(AAccountNumber : Cardinal): TAccount; class function TNode.GetPascalCoinDataFolder: String; begin - Result := TFolderHelper.GetDataFolder(CT_PascalCoin_Data_Folder); + if (_PascalCoinDataFolder.Trim.Length>0) then begin + Result := _PascalCoinDataFolder; + end else begin + Result := TFolderHelper.GetDataFolder(CT_PascalCoin_Data_Folder); + end; +end; + +class procedure TNode.SetPascalCoinDataFolder(const ANewDataFolder: String); +begin + _PascalCoinDataFolder := ANewDataFolder; end; function TNode.LockMempoolRead: TPCOperationsComp; @@ -1598,8 +1654,40 @@ destructor TThreadNodeNotifyOperations.Destroy; inherited; end; +{ TSaveMempoolOperationsThread } + +procedure TSaveMempoolOperationsThread.BCExecute; +var i : Integer; + LLocked : TPCOperationsComp; +begin + FPendingToSave := false; + repeat + if FPendingToSave then begin + LLocked := FNode.LockMempoolRead; + try + FPendingToSave := False; + FNode.Bank.Storage.SavePendingBufferOperations(LLocked.OperationsHashTree); + finally + FNode.UnlockMempoolRead; + end; + end; + // Wait 10 seconds prior to save updates on mempool + i := 0; + while (i<1000) and (Not Terminated) do begin + Sleep(10); + inc(i); + end; + until (false) or (Terminated); +end; + +procedure TSaveMempoolOperationsThread.Touch; +begin + FPendingToSave := True; +end; + initialization _Node := Nil; + _PascalCoinDataFolder := ''; finalization FreeAndNil(_Node); end. diff --git a/src/core/UOpTransaction.pas b/src/core/UOpTransaction.pas index 826cc882b..ae00de962 100644 --- a/src/core/UOpTransaction.pas +++ b/src/core/UOpTransaction.pas @@ -27,12 +27,12 @@ interface Uses UCrypto, UBlockChain, Classes, UAccounts, UBaseTypes, {$IFNDEF FPC}System.Generics.Collections{$ELSE}Generics.Collections{$ENDIF}, - UPCDataTypes; + UPCDataTypes, UEPasa, UOrderedList; Type // Operations Type TOpTransactionStyle = (transaction, transaction_with_auto_buy_account, buy_account, transaction_with_auto_atomic_swap); - // transaction = Sinlge standard transaction + // transaction = Single standard transaction // transaction_with_auto_buy_account = Single transaction made over an account listed for private sale. For STORING purposes only // buy_account = A Buy account operation // transaction_with_auto_atomic_swap = Single transaction made over an account listed for atomic swap (coin swap or account swap) @@ -91,7 +91,7 @@ interface public function GetBufferForOpHash(UseProtocolV2 : Boolean): TRawBytes; override; function DoOperation(APrevious : TAccountPreviousBlockInfo; ASafeBoxTransaction : TPCSafeBoxTransaction; var AErrors : String) : Boolean; override; - procedure AffectedAccounts(list : TList); override; + procedure AffectedAccounts(list : TOrderedList); override; // class function OpType : Byte; override; function OperationAmount : Int64; override; @@ -132,7 +132,7 @@ interface function SignerAccount : Cardinal; override; function DestinationAccount : Int64; override; function N_Operation : Cardinal; override; - procedure AffectedAccounts(list : TList); override; + procedure AffectedAccounts(list : TOrderedList); override; function OperationAmountByAccount(account : Cardinal) : Int64; override; Constructor Create(ACurrentProtocol : Word; account_signer, n_operation, account_target: Cardinal; key:TECPrivateKey; new_account_key : TAccountKey; fee: UInt64; const payload: TOperationPayload); Property Data : TOpChangeKeyData read FData; @@ -171,7 +171,7 @@ interface function SignerAccount : Cardinal; override; function N_Operation : Cardinal; override; function OperationAmountByAccount(account : Cardinal) : Int64; override; - procedure AffectedAccounts(list : TList); override; + procedure AffectedAccounts(list : TOrderedList); override; Constructor Create(ACurrentProtocol : word; account_number, n_operation: Cardinal; fee: UInt64; new_accountkey : TAccountKey); Property Data : TOpRecoverFoundsData read FData; Function toString : String; Override; @@ -243,7 +243,7 @@ interface function DestinationAccount : Int64; override; function SellerAccount : Int64; override; function N_Operation : Cardinal; override; - procedure AffectedAccounts(list : TList); override; + procedure AffectedAccounts(list : TOrderedList); override; function OperationAmountByAccount(account : Cardinal) : Int64; override; Property Data : TOpListAccountData read FData; Function toString : String; Override; @@ -297,7 +297,7 @@ interface function SignerAccount : Cardinal; override; function DestinationAccount : Int64; override; function N_Operation : Cardinal; override; - procedure AffectedAccounts(list : TList); override; + procedure AffectedAccounts(list : TOrderedList); override; function OperationAmountByAccount(account : Cardinal) : Int64; override; Constructor CreateChangeAccountInfo(ACurrentProtocol : word; account_signer, n_operation, account_target: Cardinal; key:TECPrivateKey; @@ -349,7 +349,7 @@ interface function SignerAccount : Cardinal; override; function DestinationAccount : Int64; override; function N_Operation : Cardinal; override; - procedure AffectedAccounts(list : TList); override; + procedure AffectedAccounts(list : TOrderedList); override; function OperationAmountByAccount(account : Cardinal) : Int64; override; Constructor CreateOpData( ACurrentProtocol : word; account_signer, account_sender, account_target : Cardinal; signer_key:TECPrivateKey; n_operation : Cardinal; dataType, dataSequence : Word; AGUID : TGUID; amount, fee : UInt64; const payload: TOperationPayload); Property Data : TOpDataData read FData; @@ -393,6 +393,7 @@ procedure TOpChangeAccountInfo.InitializeData(AProtocolVersion : Word); function TOpChangeAccountInfo.IsValidSignatureBasedOnCurrentSafeboxState(ASafeBoxTransaction: TPCSafeBoxTransaction): Boolean; var LAccount : TAccount; begin + if (FData.account_signer<0) or (FData.account_signer>=ASafeBoxTransaction.FreezedSafeBox.AccountsCount) then Exit(False); // Preventing exception LAccount := ASafeBoxTransaction.Account(FData.account_signer); Result := IsValidECDSASignature(LAccount.accountInfo.accountkey,FData.sign); end; @@ -549,7 +550,7 @@ function TOpChangeAccountInfo.DoOperation(AccountPreviousUpdatedBlock : TAccount end; If (account_name in FData.changes_type) then begin If (Length(FData.new_name)>0) then begin - If Not TPCSafeBox.ValidAccountName(FData.new_name,errors) then Exit; + If Not TPascalCoinProtocol.IsValidAccountName(AccountTransaction.FreezedSafeBox.CurrentProtocol,FData.new_name,errors) then Exit; end; end else begin If (Length(FData.new_name)>0) then begin @@ -655,7 +656,7 @@ function TOpChangeAccountInfo.N_Operation: Cardinal; Result := FData.n_operation; end; -procedure TOpChangeAccountInfo.AffectedAccounts(list: TList); +procedure TOpChangeAccountInfo.AffectedAccounts(list: TOrderedList); begin list.Add(FData.account_signer); if (FData.account_target<>FData.account_signer) then list.Add(FData.account_target); @@ -774,7 +775,7 @@ function TOpChangeAccountInfo.GetDigestToSign: TRawBytes; { TOpTransaction } -procedure TOpTransaction.AffectedAccounts(list: TList); +procedure TOpTransaction.AffectedAccounts(list: TOrderedList); begin list.Add(FData.sender); list.Add(FData.target); @@ -1133,6 +1134,7 @@ procedure TOpTransaction.InitializeData; function TOpTransaction.IsValidSignatureBasedOnCurrentSafeboxState(ASafeBoxTransaction: TPCSafeBoxTransaction): Boolean; var LAccount : TAccount; begin + if (FData.sender<0) or (FData.sender>=ASafeBoxTransaction.FreezedSafeBox.AccountsCount) then Exit(False); // Preventing exception LAccount := ASafeBoxTransaction.Account(FData.sender); Result := IsValidECDSASignature(LAccount.accountInfo.accountkey,FData.sign); end; @@ -1335,6 +1337,13 @@ function TOpTransaction.toString: String; TAccountComp.FormatMoney(FData.AccountPrice), TAccountComp.AccountNumberToAccountTxtNumber(FData.SellerAccount), TAccountComp.FormatMoney(FData.amount),TAccountComp.FormatMoney(FData.fee),FData.n_operation,Length(FData.payload.payload_raw), TCrypto.ToHexaString(FData.payload.payload_raw)]); + transaction_with_auto_atomic_swap : + Result := Format('Transaction/Swap account %s by %s paying %s to %s amount:%s fee:%s (n_op:%d) payload size:%d payload:%s',[ + TAccountComp.AccountNumberToAccountTxtNumber(FData.target), + TAccountComp.AccountNumberToAccountTxtNumber(FData.sender), + TAccountComp.FormatMoney(FData.AccountPrice), TAccountComp.AccountNumberToAccountTxtNumber(FData.SellerAccount), + TAccountComp.FormatMoney(FData.amount),TAccountComp.FormatMoney(FData.fee),FData.n_operation,Length(FData.payload.payload_raw), + TCrypto.ToHexaString(FData.payload.payload_raw)]); else raise Exception.Create('ERROR DEV 20170424-2'); end; end; @@ -1385,7 +1394,7 @@ function TOpTransaction.GetDigestToSign: TRawBytes; { TOpChangeKey } -procedure TOpChangeKey.AffectedAccounts(list: TList); +procedure TOpChangeKey.AffectedAccounts(list: TOrderedList); begin list.Add(FData.account_signer); if (FData.account_target<>FData.account_signer) then list.Add(FData.account_target); @@ -1458,7 +1467,7 @@ function TOpChangeKey.DoOperation(AccountPreviousUpdatedBlock : TAccountPrevious Exit; end; if (account_signer.balanceCT_MaxPayloadSize) then begin @@ -1572,6 +1581,7 @@ procedure TOpChangeKey.InitializeData(AProtocolVersion : Word); function TOpChangeKey.IsValidSignatureBasedOnCurrentSafeboxState(ASafeBoxTransaction: TPCSafeBoxTransaction): Boolean; var LAccount : TAccount; begin + if (FData.account_signer<0) or (FData.account_signer>=ASafeBoxTransaction.FreezedSafeBox.AccountsCount) then Exit(False); // Preventing exception LAccount := ASafeBoxTransaction.Account(FData.account_signer); Result := IsValidECDSASignature(LAccount.accountInfo.accountkey,FData.sign); end; @@ -1732,7 +1742,7 @@ class function TOpChangeKeySigned.OpType: Byte; { TOpRecoverFounds } -procedure TOpRecoverFounds.AffectedAccounts(list: TList); +procedure TOpRecoverFounds.AffectedAccounts(list: TOrderedList); begin list.Add(FData.account); end; @@ -1785,6 +1795,23 @@ function TOpRecoverFounds.DoOperation(AccountPreviousUpdatedBlock : TAccountPrev if Not TAccountComp.IsValidAccountKey(FData.new_accountkey,LSafeboxCurrentProtocol,errors) then begin Exit; end; + + // Poll on Discord + // https://discordapp.com/channels/383064643482025984/391780165669093377/719437469329915945 + // RESULTS ON 2020-07-21 + // 1 (22 votes) - Remove PASC/PASA Recovery rule + // 2 (27 votes) - Recover only EMPTY non used, not named PASA's + // 3 (3 votes) - Change Recovery to 10 year rule + // 4 (2 votes) - Leave As Is. + // ---------- + // Winner option 2: Will apply on next Hard Fork (Protocol 6) + if (LSafeboxCurrentProtocol>CT_PROTOCOL_5) then begin + if (acc.balance>0) or (Length(acc.name)>0) then begin + errors := 'Recover account is only valid for Balance 0 and unnamed accounts'; + exit; + end; + end; + Result := AccountTransaction.UpdateAccountInfo(AccountPreviousUpdatedBlock, GetOpID, FData.account,FData.n_operation, FData.account, @@ -1906,7 +1933,7 @@ function TOpRecoverFounds.GetDigestToSign: TRawBytes; { TOpListAccount } -procedure TOpListAccount.AffectedAccounts(list: TList); +procedure TOpListAccount.AffectedAccounts(list: TOrderedList); begin list.Add(FData.account_signer); if FData.account_signer<>FData.account_target then @@ -2043,7 +2070,7 @@ function TOpListAccount.DoOperation(AccountPreviousUpdatedBlock : TAccountPrevio Exit; end; if (account_signer.balanceCT_MaxPayloadSize) then begin @@ -2139,6 +2166,7 @@ procedure TOpListAccount.InitializeData; function TOpListAccount.IsValidSignatureBasedOnCurrentSafeboxState(ASafeBoxTransaction: TPCSafeBoxTransaction): Boolean; var LAccount : TAccount; begin + if (FData.account_signer<0) or (FData.account_signer>=ASafeBoxTransaction.FreezedSafeBox.AccountsCount) then Exit(False); // Preventing exception LAccount := ASafeBoxTransaction.Account(FData.account_signer); Result := IsValidECDSASignature(LAccount.accountInfo.accountkey,FData.sign); end; @@ -2550,6 +2578,7 @@ procedure TOpData.InitializeData(AProtocolVersion : Word); function TOpData.IsValidSignatureBasedOnCurrentSafeboxState(ASafeBoxTransaction: TPCSafeBoxTransaction): Boolean; var LAccount : TAccount; begin + if (FData.account_signer<0) or (FData.account_signer>=ASafeBoxTransaction.FreezedSafeBox.AccountsCount) then Exit(False); // Preventing exception LAccount := ASafeBoxTransaction.Account(FData.account_signer); Result := IsValidECDSASignature(LAccount.accountInfo.accountkey,FData.sign); end; @@ -2793,7 +2822,7 @@ function TOpData.N_Operation: Cardinal; Result := FData.n_operation; end; -procedure TOpData.AffectedAccounts(list: TList); +procedure TOpData.AffectedAccounts(list: TOrderedList); begin list.Add(FData.account_signer); if (FData.account_signer<>FData.account_sender) then begin diff --git a/src/core/UPCAbstractMem.pas b/src/core/UPCAbstractMem.pas index 189556d6f..54767539e 100644 --- a/src/core/UPCAbstractMem.pas +++ b/src/core/UPCAbstractMem.pas @@ -6,12 +6,16 @@ interface {$MODE DELPHI} {$ENDIF} +{$I ./../config.inc} + uses Classes, SysUtils, SyncObjs, - UAbstractMem, UFileMem, UAbstractMemTList, - UAbstractBTree, UThread, + UAbstractMem, UFileMem, UAbstractMemTList, UCacheMem, + UAbstractBTree, UThread, UAbstractMemBTree, UAVLCache, ULog, UCrypto, UPCAbstractMemAccountKeys, UPCDataTypes, UBaseTypes, UConst, UPCSafeBoxRootHash, UOrderedList, + UPCAccountsOrdenations, + UPCAbstractMemAccounts, {$IFNDEF FPC}System.Generics.Collections,System.Generics.Defaults{$ELSE}Generics.Collections,Generics.Defaults{$ENDIF}; type @@ -34,8 +38,6 @@ TPCAbstractMemListBlocks = class(TAbstractMemTList) procedure SaveTo(const AItem: TOperationBlockExt; AIsAddingItem : Boolean; var ABytes: TBytes); override; end; - TPCAbstractMemListAccounts = class; - TAccountNameInfo = record accountName: string; accountNumber: cardinal; @@ -43,30 +45,22 @@ TAccountNameInfo = record { TPCAbstractMemListAccountNames } - TPCAbstractMemListAccountNames = class(TAbstractMemOrderedTList) + TPCAbstractMemListAccountNames = Class(TAbstractMemBTreeData) private FPCAbstractMem: TPCAbstractMem; + procedure LoadFrom(const ABytes: TBytes; var AItem: TAccountNameInfo); + procedure SaveTo(const AItem: TAccountNameInfo; var ABytes: TBytes); + function FindByName(const AName : String; out AAbstractMemPosition : TAbstractMemPosition) : Boolean; overload; protected - function ToString(const AItem: TAccountNameInfo): string; override; - - procedure LoadFrom(const ABytes: TBytes; var AItem: TAccountNameInfo); override; - procedure SaveTo(const AItem: TAccountNameInfo; AIsAddingItem : Boolean; var ABytes: TBytes); override; - function Compare(const ALeft, ARight: TAccountNameInfo): integer; override; + function LoadData(const APosition : TAbstractMemPosition) : TAccountNameInfo; override; + function SaveData(const AData : TAccountNameInfo) : TAMZone; override; public - function IndexOf(const AName : String) : Integer; - procedure Remove(const AName : String); - procedure Add(const AName : String; AAccountNumber : Cardinal); - function FindByName(const AName : String; out AIndex : Integer) : Boolean; - end; - - { TPCAbstractMemListAccounts } - - TPCAbstractMemListAccounts = class(TAbstractMemTList) - private - FPCAbstractMem: TPCAbstractMem; - protected - procedure LoadFrom(const ABytes: TBytes; var AItem: TAccount); override; - procedure SaveTo(const AItem: TAccount; AIsAddingItem : Boolean; var ABytes: TBytes); override; + function NodeDataToString(const AData : TAbstractMemPosition) : String; override; + // Special + procedure AddNameAndNumber(const AName : String; AAccountNumber : Cardinal); + function FindByName(const AName : String) : Boolean; overload; + function FindByName(const AName : String; out ANameInfo : TAccountNameInfo) : Boolean; overload; + function DeleteAccountName(const AName : String) : Boolean; end; { TPCAbstractMemBytesBuffer32Safebox } @@ -77,7 +71,7 @@ TPCAbstractMemListAccounts = class(TAbstractMemTList) FSaveBufferPosition : TAbstractMemPosition; protected public - Constructor Create(AAbstractMem : TAbstractMem; APosition : TAbstractMemPosition; ACurrBlocksCount : Integer); + Constructor Create(AAbstractMem : TAbstractMem; APosition : TAbstractMemPosition; ACurrBlocksCount : Integer); reintroduce; procedure Flush; end; @@ -90,7 +84,7 @@ TPCAbstractMemListAccounts = class(TAbstractMemTList) procedure BCExecute; override; public Constructor Create(APCAbstractMem : TPCAbstractMem); - Destructor Destroy; + Destructor Destroy; override; procedure Restart; property Errors : TStrings read FErrors; End; @@ -98,6 +92,13 @@ TPCAbstractMemListAccounts = class(TAbstractMemTList) TAccountCache = Class(TAVLCache) End; + TPCAbstractMemStats = Record + FlushesCount : Integer; + FlushesMillis : TTickCount; + function ToString : String; + procedure Clear; + end; + TPCAbstractMem = class private FFileName : String; @@ -105,6 +106,8 @@ TPCAbstractMem = class FCheckingThread : TPCAbstractMemCheckThread; FLockAbstractMem : TPCCriticalSection; + FStats : TPCAbstractMemStats; + FBlocks: TPCAbstractMemListBlocks; FAccounts: TPCAbstractMemListAccounts; FAccountsNames: TPCAbstractMemListAccountNames; @@ -113,6 +116,14 @@ TPCAbstractMem = class FBufferBlocksHash: TPCAbstractMemBytesBuffer32Safebox; FAggregatedHashrate : TBigNum; FZoneAggregatedHashrate : TAMZone; + FUseCacheOnAbstractMemLists: Boolean; + FMaxMemUsage: Integer; + FSavingNewSafeboxMode: Boolean; + + FSavingOldGridCache : Boolean; + FSavingOldDefaultCacheDataBlocksSize : Integer; + FAccountsOrderedByUpdatedBlock : TAccountsOrderedByUpdatedBlock; + FAccountsOrderedBySalePrice : TAccountsOrderedBySalePrice; function IsChecking : Boolean; procedure DoCheck; @@ -121,8 +132,18 @@ TPCAbstractMem = class procedure AddBlockInfo(const ABlock : TOperationBlockExt); procedure SetBlockInfo(const ABlock : TOperationBlockExt); function DoInit(out AIsNewStructure : Boolean) : Boolean; + procedure SetMaxMemUsage(const Value: Integer); + procedure SetUseCacheOnAbstractMemLists(const Value: Boolean); + procedure SetMaxAccountsCache(const Value: Integer); + function GetMaxAccountsCache: Integer; + function GetMaxAccountKeysCache: Integer; + procedure SetMaxAccountKeysCache(const Value: Integer); + procedure SetSavingNewSafeboxMode(const Value: Boolean); + procedure OnCacheMemFlushedCache(const ASender : TCacheMem; const AProcessDesc : String; AElapsedMilis: Int64); + procedure OnCacheMemLog(ASender : TObject; const ALog : String); protected procedure UpgradeAbstractMemVersion(const ACurrentHeaderVersion : Integer); + function DoGetAccount(AAccountNumber : Integer; var AAccount : TAccount) : Boolean; public constructor Create(const ASafeboxFileName: string; AReadOnly: boolean); class function AnalyzeFile(const ASafeboxFileName: string; var ABlocksCount : Integer) : Boolean; @@ -156,6 +177,15 @@ TPCAbstractMem = class property AccountCache : TAccountCache read FAccountCache; property FileName : String read FFileName; procedure EraseData; + function GetStatsReport(AClearStats : Boolean) : String; + // + Property UseCacheOnAbstractMemLists : Boolean read FUseCacheOnAbstractMemLists write SetUseCacheOnAbstractMemLists; + Property MaxMemUsage : Integer read FMaxMemUsage write SetMaxMemUsage; + Property MaxAccountsCache : Integer read GetMaxAccountsCache write SetMaxAccountsCache; + Property MaxAccountKeysCache : Integer read GetMaxAccountKeysCache write SetMaxAccountKeysCache; + Property SavingNewSafeboxMode : Boolean read FSavingNewSafeboxMode write SetSavingNewSafeboxMode; + Property AccountsOrderedByUpdatedBlock : TAccountsOrderedByUpdatedBlock read FAccountsOrderedByUpdatedBlock; + Property AccountsOrderedBySalePrice : TAccountsOrderedBySalePrice read FAccountsOrderedBySalePrice; end; implementation @@ -163,8 +193,8 @@ implementation uses UAccounts; const - CT_PCAbstractMem_FileVersion = CT_PROTOCOL_5; - CT_PCAbstractMem_HeaderVersion = 1; + CT_PCAbstractMem_FileVersion = 100; + CT_PCAbstractMem_HeaderVersion = 3; function _AccountCache_Comparision(const Left, Right: TAccountCache.PAVLCacheMemData): Integer; begin @@ -180,7 +210,7 @@ constructor TPCAbstractMemBytesBuffer32Safebox.Create(AAbstractMem : TAbstractMe LCachedSafeboxHash : TBytes; begin FCachedSafeboxHash := Nil; - inherited Create(1000*32); + inherited Create(100000*32); FAbstractMem := AAbstractMem; FSaveBufferPosition:=APosition; if (APosition>0) then begin @@ -231,145 +261,6 @@ procedure TPCAbstractMemBytesBuffer32Safebox.Flush; end; end; -{ TPCAbstractMemListAccounts } - -procedure TPCAbstractMemListAccounts.LoadFrom(const ABytes: TBytes; var AItem: TAccount); -var - LPointer: TAbstractMemPosition; - LStream : TStream; - w : Word; -begin - AItem.Clear; - LStream := TMemoryStream.Create; - Try - LPointer := 0; - LStream.Write(ABytes[0],Length(ABytes)); - LStream.Position := 0; - - LStream.Read( AItem.account , 4 ); - - LStream.Read( w,2 ); - if (w<>CT_PROTOCOL_5) then raise EPCAbstractMem.Create(Format('Invalid Account %d protocol %d',[AItem.account,w])); - - LStream.Read( w, 2 ); - case w of - CT_NID_secp256k1,CT_NID_secp384r1,CT_NID_sect283k1,CT_NID_secp521r1 : Begin - AItem.accountInfo.state := as_Normal; - LStream.Read(LPointer,4); - AItem.accountInfo.accountKey := FPCAbstractMem.FAccountKeys.GetKeyAtPosition( LPointer ); - if w<>AItem.accountInfo.accountKey.EC_OpenSSL_NID then raise EPCAbstractMem.Create('INCONSISTENT 20200318-2'); - End; - CT_AccountInfo_ForSale, CT_AccountInfo_ForAccountSwap, CT_AccountInfo_ForCoinSwap : Begin - case w of - CT_AccountInfo_ForSale : AItem.accountInfo.state := as_ForSale; - CT_AccountInfo_ForAccountSwap : AItem.accountInfo.state := as_ForAtomicAccountSwap; - CT_AccountInfo_ForCoinSwap : AItem.accountInfo.state := as_ForAtomicCoinSwap; - end; - LStream.Read(LPointer,4); - AItem.accountInfo.accountKey := FPCAbstractMem.FAccountKeys.GetKeyAtPosition( LPointer ); - - LStream.Read(AItem.accountInfo.locked_until_block,4); - LStream.Read(AItem.accountInfo.price,8); - LStream.Read(AItem.accountInfo.account_to_pay,4); - LStream.Read(LPointer,4); - AItem.accountInfo.new_publicKey := FPCAbstractMem.FAccountKeys.GetKeyAtPosition( LPointer ); - if (w<>CT_AccountInfo_ForSale) then begin - AItem.accountInfo.hashed_secret.FromSerialized(LStream); - end; - - End; - else raise EPCAbstractMem.Create(Format('Unknow accountInfo type %d for account %d',[w,Aitem.account])); - end; - // - LStream.Read( AItem.balance , 8); - LStream.Read( AItem.updated_on_block_passive_mode , 4); - LStream.Read( AItem.updated_on_block_active_mode , 4); - LStream.Read( AItem.n_operation , 4); - AItem.name.FromSerialized( LStream ); - LStream.Read( AItem.account_type ,2); - AItem.account_data.FromSerialized( LStream ); - if AItem.account_seal.FromSerialized( LStream )<0 then raise EPCAbstractMem.Create('INCONSISTENT 20200318-4'); - // Force account_seal to 20 bytes - if Length(AItem.account_seal)<>20 then begin - AItem.account_seal := TBaseType.T20BytesToRawBytes( TBaseType.To20Bytes(AItem.account_seal) ); - end; - Finally - LStream.Free; - End; -end; - -procedure TPCAbstractMemListAccounts.SaveTo(const AItem: TAccount; AIsAddingItem : Boolean; var ABytes: TBytes); -var LStream : TStream; - LPointer : TAbstractMemPosition; - w : Word; - LPrevious : TAccount; -begin - if (Length(ABytes)>0) and (Not AIsAddingItem) then begin - // Capture previous values - LoadFrom(ABytes,LPrevious); - if (LPrevious.account<>AItem.account) then raise EPCAbstractMem.Create(Format('INCONSISTENT account number %d<>%d',[AItem.account,LPrevious.account])); - - if Not LPrevious.accountInfo.accountKey.IsEqualTo( AItem.accountInfo.accountKey ) then begin - // Remove previous account link - FPCAbstractMem.FAccountKeys.GetPositionOfKeyAndRemoveAccount( LPrevious.accountInfo.accountKey, LPrevious.account ); - end; - end; - - LStream := TMemoryStream.Create; - try - LStream.Position := 0; - - - LStream.Write( AItem.account , 4 ); - - w := CT_PROTOCOL_5; - LStream.Write( w, 2 ); - - w := 0; - case AItem.accountInfo.state of - as_Normal : begin - LPointer := FPCAbstractMem.FAccountKeys.GetPositionOfKeyAndAddAccount(AItem.accountInfo.accountKey,AItem.account); - LStream.Write( AItem.accountInfo.accountKey.EC_OpenSSL_NID , 2 ); - LStream.Write( LPointer, 4); - end; - as_ForSale : w := CT_AccountInfo_ForSale; - as_ForAtomicAccountSwap : w := CT_AccountInfo_ForAccountSwap; - as_ForAtomicCoinSwap : w := CT_AccountInfo_ForCoinSwap; - end; - if (w>0) then begin - LStream.Write(w,2); - - LPointer := FPCAbstractMem.FAccountKeys.GetPositionOfKeyAndAddAccount(AItem.accountInfo.accountKey,AItem.account); - LStream.Write( LPointer, 4); - - LStream.Write(AItem.accountInfo.locked_until_block,4); - LStream.Write(AItem.accountInfo.price,8); - LStream.Write(AItem.accountInfo.account_to_pay,4); - LPointer := FPCAbstractMem.FAccountKeys.GetPositionOfKey(AItem.accountInfo.new_publicKey,True); - LStream.Write(LPointer,4); - if (w<>CT_AccountInfo_ForSale) then begin - AItem.accountInfo.hashed_secret.ToSerialized(LStream); - end; - end; - // - LStream.Write( AItem.balance , 8); - LStream.Write( AItem.updated_on_block_passive_mode , 4); - LStream.Write( AItem.updated_on_block_active_mode , 4); - LStream.Write( AItem.n_operation , 4); - - AItem.name.ToSerialized( LStream ); - - LStream.Write( AItem.account_type ,2); - AItem.account_data.ToSerialized( LStream ); - AItem.account_seal.ToSerialized( LStream ); - // - ABytes.FromStream( LStream ); - - finally - LStream.Free; - end; -end; - { TPCAbstractMem } function TPCAbstractMem.CheckConsistency(AReport: TStrings) : Boolean; @@ -403,9 +294,16 @@ procedure TPCAbstractMem.CopyFrom(ASource: TPCAbstractMem); begin ASource.FlushCache; FAbstractMem.CopyFrom(ASource.FAbstractMem); + FUseCacheOnAbstractMemLists := ASource.FUseCacheOnAbstractMemLists; + FMaxMemUsage := ASource.FMaxMemUsage; DoInit(LIsNew); end; +function _TComparison_TAccountNameInfo(const ALeft, ARight : TAccountNameInfo) : Integer; +begin + Result := CompareText(ALeft.accountName,ARight.accountName); +end; + function TPCAbstractMem.DoInit(out AIsNewStructure : Boolean) : Boolean; const CT_HEADER_MIN_SIZE = 100; @@ -420,6 +318,8 @@ function TPCAbstractMem.DoInit(out AIsNewStructure : Boolean) : Boolean; [28..31] 4 bytes: LZoneAccountKeys.position [32..35] 4 bytes: FZoneAggregatedHashrate.position [36..39] 4 bytes: LZoneBuffersBlockHash + [40..43] 4 bytes: LZoneAccountsOrderedByUpdatedBlock.position + [44..47] 4 bytes: LZoneAccountsOrderedBySalePrice.position ... [96..99] 4 bytes: Header version } @@ -427,7 +327,9 @@ function TPCAbstractMem.DoInit(out AIsNewStructure : Boolean) : Boolean; LZoneBlocks, LZoneAccounts, LZoneAccountsNames, - LZoneAccountKeys : TAMZone; + LZoneAccountKeys, + LZoneAccountsOrderedByUpdatedBlock, + LZoneAccountsOrderedBySalePrice : TAMZone; LZoneBuffersBlockHash : TAbstractMemPosition; LHeader, LBuffer, LBigNum : TBytes; LIsGood : Boolean; @@ -441,6 +343,8 @@ function TPCAbstractMem.DoInit(out AIsNewStructure : Boolean) : Boolean; FreeAndNil(FAccountsNames); FreeAndNil(FAccountKeys); FreeAndNil(FBufferBlocksHash); + FreeAndNil(FAccountsOrderedByUpdatedBlock); + FreeAndNil(FAccountsOrderedBySalePrice); // Result := False; AIsNewStructure := True; @@ -451,6 +355,8 @@ function TPCAbstractMem.DoInit(out AIsNewStructure : Boolean) : Boolean; LZoneAccountKeys.Clear; FZoneAggregatedHashrate.Clear; LZoneBuffersBlockHash := 0; + LZoneAccountsOrderedByUpdatedBlock.Clear; + LZoneAccountsOrderedBySalePrice.Clear; if (FAbstractMem.ReadFirstData(LZone,LHeader)) then begin // Check if header is valid: @@ -473,18 +379,34 @@ function TPCAbstractMem.DoInit(out AIsNewStructure : Boolean) : Boolean; Move(LHeader[28], LZoneAccountKeys.position, 4); Move(LHeader[32], FZoneAggregatedHashrate.position, 4); LZoneBuffersBlockHash := LZone.position + 36; + Move(LHeader[40], LZoneAccountsOrderedByUpdatedBlock.position, 4); + Move(LHeader[44], LZoneAccountsOrderedBySalePrice.position, 4); + // Move(LHeader[96], LHeaderVersion, 4); if (LHeaderVersion>CT_PCAbstractMem_HeaderVersion) then begin TLog.NewLog(lterror,ClassName,Format('Header version readed %d is greater than expected %d',[LHeaderVersion,CT_PCAbstractMem_HeaderVersion])); end else begin AIsNewStructure := False; + // + if (Not FAbstractMem.ReadOnly) then begin + if (LZoneAccountsOrderedByUpdatedBlock.position=0) then begin + LZoneAccountsOrderedByUpdatedBlock := FAbstractMem.New(TAbstractMemBTree.MinAbstractMemInitialPositionSize(FAbstractMem)); + Move(LZoneAccountsOrderedByUpdatedBlock.position,LHeader[40],4); + FAbstractMem.Write(LZone.position,LHeader[0],Length(LHeader)); + end; + if (LZoneAccountsOrderedBySalePrice.position=0) then begin + LZoneAccountsOrderedBySalePrice := FAbstractMem.New(TAbstractMemBTree.MinAbstractMemInitialPositionSize(FAbstractMem)); + Move(LZoneAccountsOrderedBySalePrice.position,LHeader[44],4); + FAbstractMem.Write(LZone.position,LHeader[0],Length(LHeader)); + end; + end; end; end; end; end; if (Not FAbstractMem.ReadOnly) and (AIsNewStructure) then begin // Initialize struct - FAbstractMem.ClearContent; + FAbstractMem.ClearContent(FAbstractMem.Is64Bits); LZone := FAbstractMem.New( CT_HEADER_MIN_SIZE ); // Header zone SetLength(LHeader,100); FillChar(LHeader[0],Length(LHeader),0); @@ -493,12 +415,16 @@ function TPCAbstractMem.DoInit(out AIsNewStructure : Boolean) : Boolean; Move(LBuffer[0],LHeader[0],14); w := CT_PCAbstractMem_FileVersion; Move(w,LHeader[14],2); - LZoneBlocks := FAbstractMem.New( CT_AbstractMemTList_HeaderSize ); - LZoneAccounts := FAbstractMem.New( CT_AbstractMemTList_HeaderSize ); - LZoneAccountsNames := FAbstractMem.New( CT_AbstractMemTList_HeaderSize ); + LZoneBlocks := FAbstractMem.New( TAbstractMemTList.MinAbstractMemTListHeaderSize(FAbstractMem) ); + LZoneAccounts := FAbstractMem.New( TAbstractMemTList.MinAbstractMemTListHeaderSize(FAbstractMem) ); + LZoneAccountsNames := FAbstractMem.New( TAbstractMemTList.MinAbstractMemTListHeaderSize(FAbstractMem) ); LZoneAccountKeys := FAbstractMem.New( 100 ); FZoneAggregatedHashrate := FAbstractMem.New(100); // Note: Enough big to store a BigNum LZoneBuffersBlockHash := LZone.position+36; + LZoneAccountsOrderedByUpdatedBlock := FAbstractMem.New( + TAbstractMemBTree.MinAbstractMemInitialPositionSize(FAbstractMem)); + LZoneAccountsOrderedBySalePrice := FAbstractMem.New( + TAbstractMemBTree.MinAbstractMemInitialPositionSize(FAbstractMem)); Move(LZoneBlocks.position, LHeader[16],4); Move(LZoneAccounts.position, LHeader[20],4); @@ -506,6 +432,8 @@ function TPCAbstractMem.DoInit(out AIsNewStructure : Boolean) : Boolean; Move(LZoneAccountKeys.position, LHeader[28],4); Move(FZoneAggregatedHashrate.position,LHeader[32],4); LHeaderVersion := CT_PCAbstractMem_HeaderVersion; + Move(LZoneAccountsOrderedByUpdatedBlock, LHeader[40],4); + Move(LZoneAccountsOrderedBySalePrice, LHeader[44],4); Move(LHeaderVersion, LHeader[96],4); FAbstractMem.Write(LZone.position,LHeader[0],Length(LHeader)); @@ -514,13 +442,17 @@ function TPCAbstractMem.DoInit(out AIsNewStructure : Boolean) : Boolean; // Free FreeAndNil(FBlocks); // - FBlocks := TPCAbstractMemListBlocks.Create( FAbstractMem, LZoneBlocks, 10000 ); + FBlocks := TPCAbstractMemListBlocks.Create( FAbstractMem, LZoneBlocks, 20000, Self.UseCacheOnAbstractMemLists); FBlocks.FPCAbstractMem := Self; - FAccounts := TPCAbstractMemListAccounts.Create( FAbstractMem, LZoneAccounts, 50000); - FAccounts.FPCAbstractMem := Self; - FAccountsNames := TPCAbstractMemListAccountNames.Create( FAbstractMem, LZoneAccountsNames, 5000 , False); + + FAccounts := TPCAbstractMemListAccounts.Create( FAbstractMem, LZoneAccounts, 100000, Self.UseCacheOnAbstractMemLists); + + FAccountsNames := TPCAbstractMemListAccountNames.Create( FAbstractMem, LZoneAccountsNames, False, 31, _TComparison_TAccountNameInfo); FAccountsNames.FPCAbstractMem := Self; - FAccountKeys := TPCAbstractMemAccountKeys.Create( FAbstractMem, LZoneAccountKeys.position ); + + FAccountKeys := TPCAbstractMemAccountKeys.Create( FAbstractMem, LZoneAccountKeys.position, Self.UseCacheOnAbstractMemLists); + FAccounts.AccountKeys := FAccountKeys; + // Read AggregatedHashrate SetLength(LBuffer,100); FAbstractMem.Read(FZoneAggregatedHashrate.position,LBuffer[0],Length(LBuffer)); @@ -529,6 +461,12 @@ function TPCAbstractMem.DoInit(out AIsNewStructure : Boolean) : Boolean; end; FBufferBlocksHash := TPCAbstractMemBytesBuffer32Safebox.Create(FAbstractMem,LZoneBuffersBlockHash,FBlocks.Count); + FAccountsOrderedByUpdatedBlock := TAccountsOrderedByUpdatedBlock.Create({$IFDEF USE_ABSTRACTMEM}FAbstractMem,LZoneAccountsOrderedByUpdatedBlock,{$ENDIF}DoGetAccount); + FAccounts.AccountsOrderedByUpdatedBlock := FAccountsOrderedByUpdatedBlock; + + FAccountsOrderedBySalePrice := TAccountsOrderedBySalePrice.Create({$IFDEF USE_ABSTRACTMEM}FAbstractMem,LZoneAccountsOrderedBySalePrice,{$ENDIF}DoGetAccount); + FAccounts.AccountsOrderedBySalePrice := FAccountsOrderedBySalePrice; + FAccountCache.Clear; if (Not AIsNewStructure) And (Not FAbstractMem.ReadOnly) And (LHeaderVersion'') {and (FileExists(ASafeboxFileName))} then begin + if (FFileName<>'') then begin FAbstractMem := TFileMem.Create( ASafeboxFileName , AReadOnly); end else begin FAbstractMem := TMem.Create(0,AReadOnly); end; + if FAbstractMem is TFileMem then begin - TFileMem(FAbstractMem).MaxCacheSize := 40 * 1024 * 1024; // 40Mb - TFileMem(FAbstractMem).MaxCacheDataBlocks := 200000; + TFileMem(FAbstractMem).IncreaseFileBytes := 10 * 1024*1024; // 10Mb each increase + TFileMem(FAbstractMem).SetCachePerformance(True,1024,FMaxMemUsage,400000); + LCacheMem := TFileMem(FAbstractMem).LockCache; + Try + LCacheMem.OnFlushedCache := OnCacheMemFlushedCache; + LCacheMem.OnLog := OnCacheMemLog; + Finally + TFileMem(FAbstractMem).UnlockCache; + End; end; DoInit(LIsNewStructure); @@ -598,6 +557,8 @@ destructor TPCAbstractMem.Destroy; FreeAndNil(FAccountKeys); FreeAndNil(FBufferBlocksHash); FreeAndNil(FAggregatedHashrate); + FreeAndNil(FAccountsOrderedByUpdatedBlock); + FreeAndNil(FAccountsOrderedBySalePrice); if (FFileName<>'') And (FAbstractMem is TMem) And (Not FAbstractMem.ReadOnly) then begin LFile := TFileStream.Create(FFileName,fmCreate); try @@ -629,13 +590,20 @@ procedure TPCAbstractMem.DoCheck; End; end; +function TPCAbstractMem.DoGetAccount(AAccountNumber: Integer; var AAccount: TAccount): Boolean; +begin + AAccount := GetAccount(AAccountNumber); + Result := True; +end; + procedure TPCAbstractMem.FlushCache; var LBigNum : TBytes; + Ltc : TTickCount; begin if FAbstractMem.ReadOnly then Exit; + Ltc := TPlatform.GetTickCount; FBlocks.FlushCache; FAccounts.FlushCache; - FAccountsNames.FlushCache; FAccountKeys.FlushCache; FBufferBlocksHash.Flush; LBigNum := FAggregatedHashrate.RawValue.ToSerialized; @@ -643,6 +611,9 @@ procedure TPCAbstractMem.FlushCache; if FAbstractMem is TFileMem then begin TFileMem(FAbstractMem).FlushCache; end; + Inc(FStats.FlushesCount); + Inc(Fstats.FlushesMillis, TPlatform.GetElapsedMilliseconds(Ltc) ); + TLog.NewLog(ltdebug,Self.ClassName,Format('AbstractMem Safebox flushed in %.2f seconds',[TPlatform.GetElapsedMilliseconds(Ltc)/1000])); end; Procedure DoCopyFile(const ASource, ADest : String); @@ -692,13 +663,13 @@ procedure TPCAbstractMem.SetAccount(const AAccount: TAccount); if (AAccount.account<0) or (AAccount.account>FAccounts.Count) then begin raise EPCAbstractMem.Create(Format('Account %d not in range %d..%d',[AAccount.account,0,FAccounts.Count])); end; - FAccountCache.Remove(AAccount); if (AAccount.account = FAccounts.Count) then begin FAccounts.Add(AAccount); end else begin - FAccounts.SetItem( AAccount.account , AAccount); + FAccounts.Item[ AAccount.account ] := AAccount; end; // Update cache + FAccountCache.Remove(AAccount); FAccountCache.Add(AAccount); end; @@ -773,8 +744,59 @@ procedure TPCAbstractMem.SetBlockInfo(const ABlock: TOperationBlockExt); end else raise EPCAbstractMem.Create(Format('Cannot set block info %d (current %d blocks)',[ABlock.operationBlock.block,LCount])); end; +procedure TPCAbstractMem.SetMaxAccountKeysCache(const Value: Integer); +begin + FAccountKeys.AccountKeyByPositionCache.MaxRegisters := Value; +end; + +procedure TPCAbstractMem.SetMaxAccountsCache(const Value: Integer); +begin + FAccountCache.MaxRegisters := Value; +end; + +procedure TPCAbstractMem.SetMaxMemUsage(const Value: Integer); +begin + FMaxMemUsage := Value; + if FAbstractMem is TFileMem then begin + TFileMem(FAbstractMem).SetCachePerformance(True,1024,FMaxMemUsage,200000); + end; +end; + +procedure TPCAbstractMem.SetSavingNewSafeboxMode(const Value: Boolean); +var Lcm : TCacheMem; +begin + FSavingNewSafeboxMode := Value; + // Will set in optimized state (cache and others) for maximum performance and minimum impact + TLog.NewLog(ltinfo,ClassName,Format('Seting AbstractMem is Saving mode:%s',[Value.ToString])); + if FAbstractMem is TFileMem then begin + Lcm := TFileMem(FAbstractMem).LockCache; + try + if Value then begin + FSavingOldGridCache := Lcm.GridCache; + FSavingOldDefaultCacheDataBlocksSize := Lcm.DefaultCacheDataBlocksSize; + Lcm.GridCache := False; + Lcm.DefaultCacheDataBlocksSize := -1; + end else begin + Lcm.GridCache := FSavingOldGridCache; + Lcm.DefaultCacheDataBlocksSize := FSavingOldDefaultCacheDataBlocksSize; + end; + finally + TFileMem(FAbstractMem).UnlockCache; + end; + end; +end; + +procedure TPCAbstractMem.SetUseCacheOnAbstractMemLists(const Value: Boolean); +var Lins : Boolean; +begin + if Value=FUseCacheOnAbstractMemLists then Exit; + FUseCacheOnAbstractMemLists := Value; + DoInit(Lins); +end; + procedure TPCAbstractMem.UpdateSafeboxFileName(const ANewSafeboxFileName: String); var LReadOnly, Ltmp : Boolean; + LCacheMem : TCacheMem; begin if SameFileName(FFileName,ANewSafeboxFileName) then Exit; @@ -791,8 +813,14 @@ procedure TPCAbstractMem.UpdateSafeboxFileName(const ANewSafeboxFileName: String FAbstractMem := TMem.Create(0,LReadOnly); end; if FAbstractMem is TFileMem then begin - TFileMem(FAbstractMem).MaxCacheSize := 40 * 1024 * 1024; // 40Mb - TFileMem(FAbstractMem).MaxCacheDataBlocks := 200000; + TFileMem(FAbstractMem).SetCachePerformance(True,1024,FMaxMemUsage,200000); + LCacheMem := TFileMem(FAbstractMem).LockCache; + Try + LCacheMem.OnFlushedCache := OnCacheMemFlushedCache; + LCacheMem.OnLog := OnCacheMemLog; + Finally + TFileMem(FAbstractMem).UnlockCache; + End; end; DoInit(Ltmp); end; @@ -801,24 +829,17 @@ procedure TPCAbstractMem.UpgradeAbstractMemVersion(const ACurrentHeaderVersion: var LFirstTC, LTC : TTickCount; i : integer; LAccount : TAccount; + LaccInfoNul : TAccountInfo; begin LFirstTC := TPlatform.GetTickCount; LTC := LFirstTC; - if (ACurrentHeaderVersion=0) then begin - // Redo AccountNames - TLog.NewLog(ltinfo,ClassName,Format('Upgrade AbstractMem file from %d to %d with %d Accounts and %d AccNames',[ACurrentHeaderVersion,CT_PCAbstractMem_HeaderVersion, AccountsCount, AccountsNames.Count])); - AccountsNames.Clear; + if (ACurrentHeaderVersion=2) then begin + // Set accounts price + LaccInfoNul.Clear; for i := 0 to AccountsCount-1 do begin LAccount := GetAccount(i); - if Length(LAccount.name)>0 then begin - AccountsNames.Add( LAccount.name.ToString, LAccount.account ); - end; - if TPlatform.GetElapsedMilliseconds(LTC)>5000 then begin - LTC := TPlatform.GetTickCount; - TLog.NewLog(ltdebug,ClassName,Format('Upgrading %d/%d found %d',[i,AccountsCount,AccountsNames.Count])); - end; + AccountsOrderedBySalePrice.UpdateAccountBySalePrice(LAccount.account,LaccInfoNul,LAccount.accountInfo); end; - TLog.NewLog(ltdebug,ClassName,Format('End upgrade found %d',[AccountsNames.Count])); end; TLog.NewLog(ltinfo,ClassName,Format('Finalized upgrade AbstractMem file from %d to %d in %.2f seconds',[ACurrentHeaderVersion,CT_PCAbstractMem_HeaderVersion, TPlatform.GetElapsedMilliseconds(LFirstTC)/1000])); end; @@ -864,6 +885,22 @@ function TPCAbstractMem.GetBlockInfo(ABlockNumber: cardinal): TOperationBlockExt Result := FBlocks.GetItem( ABlockNumber ); end; +function TPCAbstractMem.GetMaxAccountKeysCache: Integer; +begin + Result := FAccountKeys.AccountKeyByPositionCache.MaxRegisters; +end; + +function TPCAbstractMem.GetMaxAccountsCache: Integer; +begin + Result := FAccountCache.MaxRegisters; +end; + +function TPCAbstractMem.GetStatsReport(AClearStats: Boolean): String; +begin + Result := AbstractMem.GetStatsReport(AClearStats) + #10 + FStats.ToString; + if AClearStats then FStats.Clear; +end; + function TPCAbstractMem.IsChecking: Boolean; begin Result := Assigned(TPCThread.GetThreadByClass(TPCAbstractMemCheckThread,Nil)); @@ -875,6 +912,17 @@ function TPCAbstractMem.IsChecking: Boolean; End; end; +procedure TPCAbstractMem.OnCacheMemFlushedCache(const ASender: TCacheMem; + const AProcessDesc: String; AElapsedMilis: Int64); +begin + TLog.NewLog(ltdebug,ASender.ClassName,Self.ClassName+' '+AProcessDesc) +end; + +procedure TPCAbstractMem.OnCacheMemLog(ASender: TObject; const ALog: String); +begin + TLog.NewLog(ltdebug,ASender.ClassName,Self.ClassName+' '+ALog); +end; + function TPCAbstractMem.AccountsCount: integer; begin Result := FAccounts.Count; @@ -885,25 +933,25 @@ function TPCAbstractMem.GetAccount(AAccountNumber: cardinal): TAccount; Result.Clear; Result.account := AAccountNumber; if Not FAccountCache.Find(Result,Result) then begin - Result := FAccounts.GetItem( AAccountNumber ); + Result := FAccounts.Item[ AAccountNumber ]; // Save for future usage: FAccountCache.Add(Result); end; end; -{ TPCAbstractMemListAccountNames } -function TPCAbstractMemListAccountNames.ToString(const AItem: TAccountNameInfo): string; -begin - Result:= Format('AccountNameInfo: Account:%d Name(%d):%d',[AItem.accountNumber, Length(AItem.accountName), AItem.accountName]); -end; +{ TPCAbstractMemListAccountNames } -function TPCAbstractMemListAccountNames.IndexOf(const AName: String): Integer; -var LFind : TAccountNameInfo; +function TPCAbstractMemListAccountNames.LoadData(const APosition: TAbstractMemPosition): TAccountNameInfo; +var LZone : TAMZone; + LBytes : TBytes; begin - LFind.accountName := AName; - LFind.accountNumber := 0; - if Not Find(LFind,Result) then Result := -1; + if Not FPCAbstractMem.AbstractMem.GetUsedZoneInfo( APosition, False, LZone) then + raise EAbstractMemTList.Create(Format('%s.LoadData Inconsistency error used zone info not found at pos %d',[Self.ClassName,APosition])); + SetLength(LBytes,LZone.size); + if FPCAbstractMem.AbstractMem.Read(LZone.position, LBytes[0], Length(LBytes) )<>Length(LBytes) then + raise EAbstractMemTList.Create(Format('%s.LoadData Inconsistency error cannot read %d bytes at pos %d',[Self.ClassName,LZone.size,APosition])); + LoadFrom(LBytes,Result); end; procedure TPCAbstractMemListAccountNames.LoadFrom(const ABytes: TBytes; var AItem: TAccountNameInfo); @@ -914,14 +962,31 @@ procedure TPCAbstractMemListAccountNames.LoadFrom(const ABytes: TBytes; var AIte Move(ABytes[LTmp.GetSerializedLength],AItem.accountNumber,4); end; -procedure TPCAbstractMemListAccountNames.Remove(const AName: String); -var i : Integer; +function TPCAbstractMemListAccountNames.NodeDataToString(const AData: TAbstractMemPosition): String; +var Lani : TAccountNameInfo; +begin + Lani := LoadData(AData); + Result:= Format('AccountNameInfo: Account:%d Name(%d):%d',[Lani.accountNumber, Length(Lani.accountName), Lani.accountName]); +end; + +function TPCAbstractMemListAccountNames.DeleteAccountName(const AName: String) : Boolean; +var Lani : TAccountNameInfo; +begin + Lani.accountName := AName; + Lani.accountNumber := 0; + Result := DeleteData(Lani); +end; + +function TPCAbstractMemListAccountNames.SaveData(const AData: TAccountNameInfo): TAMZone; +var LBytes : TBytes; begin - i := IndexOf(AName); - if i>=0 then Delete(i); + SetLength(LBytes,0); + SaveTo(AData,LBytes); + Result := FPCAbstractMem.AbstractMem.New(Length(LBytes)); + FPCAbstractMem.AbstractMem.Write(Result.position,LBytes[0],Length(LBytes)); end; -procedure TPCAbstractMemListAccountNames.SaveTo(const AItem: TAccountNameInfo; AIsAddingItem : Boolean; var ABytes: TBytes); +procedure TPCAbstractMemListAccountNames.SaveTo(const AItem: TAccountNameInfo; var ABytes: TBytes); var LStream : TStream; LTmp : TBytes; begin @@ -937,36 +1002,46 @@ procedure TPCAbstractMemListAccountNames.SaveTo(const AItem: TAccountNameInfo; A End; end; -procedure TPCAbstractMemListAccountNames.Add(const AName: String; AAccountNumber: Cardinal); -var LItem : TAccountNameInfo; - i : Integer; +procedure TPCAbstractMemListAccountNames.AddNameAndNumber(const AName: String; AAccountNumber: Cardinal); +var Lani : TAccountNameInfo; + Lposition : TAbstractMemPosition; begin - LItem.accountName := AName; - LItem.accountNumber := AAccountNumber; - i := inherited Add(LItem); - if (i<0) then begin - i := IndexOf(AName); - if (i<0) then + Lani.accountName := AName; + Lani.accountNumber := AAccountNumber; + if Not AddData(Lani) then begin + if Not FindDataPos(Lani,Lposition) then raise EPCAbstractMem.Create(Format('Fatal error Cannot add account(%d) name %s',[AAccountNumber,AName])) else raise EPCAbstractMem.Create(Format('Cannot add account(%d) name %s because used by %d with %s',[AAccountNumber,AName, - GetItem(i).accountNumber,GetItem(i).accountName])); + Lani.accountNumber,Lani.accountName])); end; end; -function TPCAbstractMemListAccountNames.Compare(const ALeft, ARight: TAccountNameInfo): integer; -Var LBytesLeft,LBytesRight : TBytes; +function TPCAbstractMemListAccountNames.FindByName(const AName: String): Boolean; +var Lpos : TAbstractMemPosition; begin - LBytesLeft.FromString(ALeft.accountName); - LBytesRight.FromString(ARight.accountName); - Result := TBaseType.BinStrComp(LBytesLeft,LBytesRight); + Result := FindByName(AName,Lpos); end; -function TPCAbstractMemListAccountNames.FindByName(const AName: String; out AIndex: Integer): Boolean; -var LFind : TAccountNameInfo; +function TPCAbstractMemListAccountNames.FindByName(const AName: String; out ANameInfo: TAccountNameInfo): Boolean; +var Lpos : TAbstractMemPosition; begin - LFind.accountName := AName; - LFind.accountNumber := 0; - Result := Find(LFind,AIndex); + if FindByName(AName,Lpos) then begin + ANameInfo := LoadData(Lpos); + Result := True; + end else begin + if Lpos<>0 then begin + ANameInfo := LoadData(Lpos); + end; + Result := False; + end; +end; + +function TPCAbstractMemListAccountNames.FindByName(const AName: String; out AAbstractMemPosition: TAbstractMemPosition): Boolean; +var Lani : TAccountNameInfo; +begin + Lani.accountName := AName; + Lani.accountNumber := 0; + Result := FindDataPos(Lani,AAbstractMemPosition); end; { TPCAbstractMemListBlocks } @@ -976,6 +1051,7 @@ procedure TPCAbstractMemListBlocks.LoadFrom(const ABytes: TBytes; var AItem: TOp LPointer: TAbstractMemPosition; LIndex: integer; begin + LPointer := 0; AItem.accumulatedWork := 0; Move(ABytes[0], AItem.operationBlock.block, 4); Move(ABytes[4], LPointer, 4); @@ -1048,15 +1124,18 @@ procedure TPCAbstractMemCheckThread.BCExecute; inc(FErrorsCount); TLog.NewLog(ltError,ClassName,'CheckConsistency: '+AError); end; -var iBlock, i, iAccName : Integer; +var iBlock, i : Integer; LAccount : TAccount; LBlockAccount : TBlockAccount; + LHighestOperationBlock : TOperationBlockExt; LOrdered : TOrderedList; LOrderedNames : TOrderedList; - LAccountNameInfo : TAccountNameInfo; LTC, LTCInitial : TTickCount; LAggregatedHashrate, LBlockHashRate : TBigNum; + LBuff1,LBuff2 : TRawBytes; + Laninfo : TAccountNameInfo; begin + LBlockAccount := CT_BlockAccount_NUL; iBlock :=0; LOrdered := TOrderedList.Create(False,TComparison_Integer); LOrderedNames := TOrderedList.Create(False,TComparison_String); @@ -1064,6 +1143,7 @@ procedure TPCAbstractMemCheckThread.BCExecute; Try LTC := TPlatform.GetTickCount; LTCInitial := LTC; + LHighestOperationBlock := FPCAbstractMem.GetBlockInfo(FPCAbstractMem.BlocksCount-1); while (iBlock < FPCAbstractMem.BlocksCount) and (Not Terminated) do begin if FMustRestart then begin TLog.NewLog(ltdebug,ClassName,Format('Restarting check thread after %d/%d blocks',[iBlock+1,FPCAbstractMem.BlocksCount]) ); @@ -1074,6 +1154,7 @@ procedure TPCAbstractMemCheckThread.BCExecute; LOrdered.Clear; LOrderedNames.Clear; LAggregatedHashrate.Value := 0; + LHighestOperationBlock := FPCAbstractMem.GetBlockInfo(FPCAbstractMem.BlocksCount-1); end; LBlockAccount := FPCAbstractMem.GetBlockAccount(iBlock); @@ -1084,19 +1165,30 @@ procedure TPCAbstractMemCheckThread.BCExecute; if LOrderedNames.Add(LAccount.name.ToString)<0 then begin _error(Format('Account %d name %s allready added',[LAccount.account,LAccount.name.ToString])); end; - iAccName := FPCAbstractMem.AccountsNames.IndexOf(LAccount.name.ToString); - if iAccName<0 then begin + if Not FPCAbstractMem.AccountsNames.FindByName(LAccount.name.ToString,Laninfo) then begin // ERROR _error(Format('Account %d name %s not found at list',[LAccount.account,LAccount.name.ToString])); end else begin - if FPCAbstractMem.AccountsNames.Item[iAccName].accountNumber<>LAccount.account then begin - _error(Format('Account %d name %s found at list at pos %d but links to %d',[LAccount.account,LAccount.name.ToString,iAccName,FPCAbstractMem.AccountsNames.Item[iAccName].accountNumber])); + if Laninfo.accountNumber<>LAccount.account then begin + _error(Format('Account %d name %s found at list but links to %d',[LAccount.account,LAccount.name.ToString,Laninfo.accountNumber])); end; if (LOrdered.Add(LAccount.account)<0) then begin _error(Format('Account %d (with name %s) allready added',[LAccount.account,LAccount.name.ToString])); end; end; end; + if LAccount.GetLastUpdatedBlock>=FPCAbstractMem.BlocksCount then begin + _error(Format('Account Updated %d > %d - %s',[LAccount.GetLastUpdatedBlock,FPCAbstractMem.BlocksCount,TAccountComp.AccountToTxt(LAccount)])); + end; + + end; + LBuff1 := TPCSafeBox.CalcBlockHash(LBlockAccount,LHighestOperationBlock.operationBlock.protocol_version); + If Not (LBuff1.IsEqualTo(LBlockAccount.block_hash)) then begin + _error(Format('Blockaccount hash for %d are not equals: calculated %s <> saved %s',[LBlockAccount.blockchainInfo.block,LBuff1.ToHexaString,LBlockAccount.block_hash.ToHexaString])); + end; + LBuff2 := FPCAbstractMem.FBufferBlocksHash.Capture((iBlock*32),32); + if Not LBuff1.IsEqualTo(LBuff2) then begin + _error(Format('Blockaccount hash for %d are not equals: %s <> %s',[LBlockAccount.blockchainInfo.block,LBuff1.ToHexaString,LBuff2.ToHexaString])); end; LBlockHashRate := TBigNum.TargetToHashRate( LBlockAccount.blockchainInfo.compact_target ); @@ -1113,12 +1205,21 @@ procedure TPCAbstractMemCheckThread.BCExecute; inc(iBlock); end; // - for i := 0 to FPCAbstractMem.AccountsNames.Count-1 do begin - LAccountNameInfo := FPCAbstractMem.AccountsNames.Item[i]; - if LOrdered.IndexOf( LAccountNameInfo.accountNumber ) < 0 then begin - _error(Format('Account name %s at index %d/%d not found in search',[LAccountNameInfo.accountName, i+1,FPCAbstractMem.AccountsNames.Count])); - end; + FPCAbstractMem.FBufferBlocksHash.SafeBoxHashCalcType := sbh_Single_Sha256; + FPCAbstractMem.FBufferBlocksHash.SafeBoxHashCalcType := sbh_Merkle_Root_Hash; + LBuff1 := FPCAbstractMem.FBufferBlocksHash.GetSafeBoxHash; + FErrors.Add(Format('Last Block %d - SBH %s - Next SBH: %s',[LBlockAccount.blockchainInfo.block,LBlockAccount.blockchainInfo.initial_safe_box_hash.ToHexaString,LBuff1.ToHexaString])); + // + i := 0; + if FPCAbstractMem.AccountsNames.FindDataLowest(Laninfo) then begin + repeat + inc(i); + if LOrdered.IndexOf(Laninfo.accountNumber ) < 0 then begin + _error(Format('Account name %s at index %d/%d not found in search',[Laninfo.accountName, i,FPCAbstractMem.AccountsNames.Count])); + end; + until Not FPCAbstractMem.AccountsNames.FindDataSuccessor(Laninfo,Laninfo); end; + if (LOrdered.Count)<>FPCAbstractMem.AccountsNames.Count then begin _error(Format('Found %d accounts with names but %d on list',[LOrdered.Count,FPCAbstractMem.AccountsNames.Count])); end; @@ -1168,6 +1269,7 @@ destructor TPCAbstractMemCheckThread.Destroy; FPCAbstractMem.FLockAbstractMem.Release; end; FErrors.Free; + inherited Destroy; end; procedure TPCAbstractMemCheckThread.Restart; @@ -1177,4 +1279,17 @@ procedure TPCAbstractMemCheckThread.Restart; end; +{ TPCAbstractMemStats } + +procedure TPCAbstractMemStats.Clear; +begin + Self.FlushesCount := 0; + Self.FlushesMillis := 0; +end; + +function TPCAbstractMemStats.ToString: String; +begin + Result := Format('PCAbstractMem flushes:%d in %d millis',[Self.FlushesCount,Self.FlushesMillis]); +end; + end. diff --git a/src/core/UPCAbstractMemAccountKeys.pas b/src/core/UPCAbstractMemAccountKeys.pas index a16cf294e..19f185906 100644 --- a/src/core/UPCAbstractMemAccountKeys.pas +++ b/src/core/UPCAbstractMemAccountKeys.pas @@ -9,8 +9,8 @@ interface uses Classes, SysUtils, SyncObjs, UAbstractMem, UFileMem, UAbstractMemTList, - UAbstractBTree, - UPCDataTypes, UBaseTypes, UAVLCache, + UAbstractBTree, UAbstractAVLTree, + UPCDataTypes, UBaseTypes, UAVLCache, UAbstractMemBTree, UOrderedList, {$IFNDEF FPC}System.Generics.Collections,System.Generics.Defaults{$ELSE}Generics.Collections,Generics.Defaults{$ENDIF}; type @@ -20,7 +20,7 @@ TAbstractMemAccountKeyNode = record myPosition : TAbstractMemPosition; // Position in the AbstractMem accountKey : TAccountKey; accounts_using_this_key_position : TAbstractMemPosition; - function GetSize : Integer; + function GetSize(AAbstractMem : TAbstractMem) : Integer; procedure ReadFromMem(AMyPosition : TAbstractMemPosition; AAbstractMem : TAbstractMem); procedure WriteToMem(AAbstractMem : TAbstractMem); procedure Clear; @@ -31,16 +31,16 @@ TAbstractMemAccountKeyNode = record { TAccountsUsingThisKey } - TAccountsUsingThisKey = Class(TAbstractMemOrderedTList) + TAccountsUsingThisKey = Class(TAbstractMemBTree) + // AbstractMem position will be considered a Account Number protected - function GetItem(index : Integer) : Cardinal; override; - procedure LoadFrom(const ABytes : TBytes; var AItem : Cardinal); override; - procedure SaveTo(const AItem : Cardinal; AIsAddingItem : Boolean; var ABytes : TBytes); override; - function Compare(const ALeft, ARight : Cardinal) : Integer; override; + procedure DisposeData(var AData : TAbstractMemPosition); override; + function DoCompareData(const ALeftData, ARightData: TAbstractMemPosition): Integer; override; public - Constructor Create(AAbstractMem : TAbstractMem; const AInitialZone : TAMZone); reintroduce; - Function Add(const AItem : Cardinal) : Integer; reintroduce; - procedure Delete(index : Integer); reintroduce; + function NodeDataToString(const AData : TAbstractMemPosition) : String; override; + public + Constructor Create(AAbstractMem : TAbstractMem; const AInitialZone : TAMZone; AUseCache : Boolean); reintroduce; + function Get(Index : Integer) : Cardinal; End; TAccountKeyByPosition = record @@ -64,6 +64,7 @@ TAccountKeyByPosition = record FPointerToRootPosition : TAbstractMemPosition; FRootPosition : TAbstractMemPosition; FAccountKeyByPositionCache : TPCAccountKeyByPositionCache; + FUseCacheOnAbstractMemLists: Boolean; protected function GetRoot: TAbstractMemAccountKeyNode; override; procedure SetRoot(const Value: TAbstractMemAccountKeyNode); override; @@ -79,7 +80,7 @@ TAccountKeyByPosition = record public function IsNil(const ANode : TAbstractMemAccountKeyNode) : Boolean; override; function ToString(const ANode: TAbstractMemAccountKeyNode) : String; override; - constructor Create(AAbstractMem : TAbstractMem; APointerToRootPosition : TAbstractMemPosition); reintroduce; + constructor Create(AAbstractMem : TAbstractMem; APointerToRootPosition : TAbstractMemPosition; AUseCacheOnAbstractMemLists : Boolean); reintroduce; destructor Destroy; override; // function GetKeyAtPosition(APosition : TAbstractMemPosition) : TAccountKey; @@ -89,6 +90,8 @@ TAccountKeyByPosition = record procedure GetAccountsUsingKey(const AAccountKey : TAccountKey; const AList : TList); function GetAccountsUsingThisKey(const AAccountKey : TAccountKey) : TAccountsUsingThisKey; procedure FlushCache; + property UseCacheOnAbstractMemLists : Boolean read FUseCacheOnAbstractMemLists write FUseCacheOnAbstractMemLists; + property AccountKeyByPositionCache : TPCAccountKeyByPositionCache read FAccountKeyByPositionCache; end; @@ -113,7 +116,7 @@ class function TAccountsUsingThisKey_BlackHole.GetInstance: TAccountsUsingThisKe _BlackHoleAbstractMem := TMem.Create(0,True); end; LZone.Clear; - _TAccountsUsingThisKey_BlackHole := TAccountsUsingThisKey_BlackHole.Create(_BlackHoleAbstractMem,LZone); + _TAccountsUsingThisKey_BlackHole := TAccountsUsingThisKey_BlackHole.Create(_BlackHoleAbstractMem,LZone,True); end; Result := _TAccountsUsingThisKey_BlackHole; end; @@ -130,9 +133,9 @@ procedure TAbstractMemAccountKeyNode.Clear; Self.accounts_using_this_key_position := 0; end; -function TAbstractMemAccountKeyNode.GetSize: Integer; +function TAbstractMemAccountKeyNode.GetSize(AAbstractMem : TAbstractMem) : Integer; begin - Result := accountKey.GetSerializedLength + 4 + TAbstractMemAVLTreeNodeInfoClass.GetSize; + Result := accountKey.GetSerializedLength + 4 + TAbstractMemAVLTreeNodeInfoClass.GetSize(AAbstractMem); end; procedure TAbstractMemAccountKeyNode.ReadFromMem(AMyPosition: TAbstractMemPosition; AAbstractMem: TAbstractMem); @@ -142,7 +145,7 @@ procedure TAbstractMemAccountKeyNode.ReadFromMem(AMyPosition: TAbstractMemPositi begin Self.Clear; Self.myPosition := AMyPosition; - inc(AMyPosition,TAbstractMemAVLTreeNodeInfoClass.GetSize); + inc(AMyPosition,TAbstractMemAVLTreeNodeInfoClass.GetSize(AAbstractMem)); // Minimum size is 4 + 2 + 2 = 8 bytes i := 8; SetLength(LBytes,i); @@ -177,7 +180,7 @@ procedure TAbstractMemAccountKeyNode.WriteToMem(AAbstractMem: TAbstractMem); LStream.Write(Self.accounts_using_this_key_position,4); Self.accountKey.ToSerialized(LStream); LBytes.FromStream(LStream); - AAbstractMem.Write(Self.myPosition + TAbstractMemAVLTreeNodeInfoClass.GetSize,LBytes[0],Length(LBytes)); + AAbstractMem.Write(Self.myPosition + TAbstractMemAVLTreeNodeInfoClass.GetSize(AAbstractMem),LBytes[0],Length(LBytes)); finally LStream.Free; end; @@ -225,12 +228,13 @@ function _AccountKeyByPositionCache_Comparision(const Left, Right: TPCAccountKey Result := Left.data.position - Right.data.position; end; -constructor TPCAbstractMemAccountKeys.Create(AAbstractMem: TAbstractMem; APointerToRootPosition : TAbstractMemPosition); +constructor TPCAbstractMemAccountKeys.Create(AAbstractMem: TAbstractMem; APointerToRootPosition : TAbstractMemPosition; AUseCacheOnAbstractMemLists : Boolean); begin FAccountKeysLock := TCriticalSection.Create; FAbstractMem := AAbstractMem; FPointerToRootPosition := APointerToRootPosition; FRootPosition := 0; + FUseCacheOnAbstractMemLists := AUseCacheOnAbstractMemLists; // Read Root position FAbstractMem.Read(FPointerToRootPosition,FRootPosition,4); FAccountKeyByPositionCache := TPCAccountKeyByPositionCache.Create(5000,_AccountKeyByPositionCache_Comparision); @@ -239,8 +243,8 @@ constructor TPCAbstractMemAccountKeys.Create(AAbstractMem: TAbstractMem; APointe destructor TPCAbstractMemAccountKeys.Destroy; begin - FAccountKeyByPositionCache.Free; - FAccountKeysLock.Free; + FreeAndNil(FAccountKeyByPositionCache); + FreeAndNil(FAccountKeysLock); inherited; end; @@ -258,15 +262,17 @@ procedure TPCAbstractMemAccountKeys.FlushCache; procedure TPCAbstractMemAccountKeys.GetAccountsUsingKey( const AAccountKey: TAccountKey; const AList: TList); var Lautk : TAccountsUsingThisKey; - i : Integer; + i : TAbstractMemPosition; begin AList.Clear; FAccountKeysLock.Acquire; try Lautk := GetAccountsUsingThisKey(AAccountKey); if Assigned(Lautk) then begin - for i:=0 to Lautk.Count-1 do begin - AList.Add( Lautk.GetItem(i) ); + if Lautk.FindLowest(i) then begin + repeat + AList.Add(i); + until Not Lautk.FindSuccessor(i,i); end; end; finally @@ -297,7 +303,7 @@ function TPCAbstractMemAccountKeys.GetAccountsUsingThisKey(const AAccountKey: TA LP.Clear; LP.position := LNode.myPosition; LP.accountKey := AAccountKey; - LP.accountsUsingThisKey := TAccountsUsingThisKey.Create(FAbstractMem,LZone); + LP.accountsUsingThisKey := TAccountsUsingThisKey.Create(FAbstractMem,LZone,Self.UseCacheOnAbstractMemLists); FAccountKeyByPositionCache.Add(LP); // Add to cache! end; Result := LP.accountsUsingThisKey; @@ -330,7 +336,7 @@ function TPCAbstractMemAccountKeys.GetKeyAtPosition(APosition: TAbstractMemPosit if LNode.accounts_using_this_key_position>0 then begin LAccZone.Clear; LAccZone.position := LNode.accounts_using_this_key_position; - LP.accountsUsingThisKey := TAccountsUsingThisKey.Create(FAbstractMem,LAccZone); + LP.accountsUsingThisKey := TAccountsUsingThisKey.Create(FAbstractMem,LAccZone,Self.UseCacheOnAbstractMemLists); end else LP.accountsUsingThisKey := Nil; FAccountKeyByPositionCache.Add(LP); // Add to cache! end; @@ -367,7 +373,7 @@ function TPCAbstractMemAccountKeys.GetPositionOfKeyAndAddAccount(const AAccountK // if LNode does not exists, then ADD LNode.accountKey := AAccountKey; LNode.accounts_using_this_key_position := 0; - LNode.myPosition := FAbstractMem.New( LNode.GetSize ).position; + LNode.myPosition := FAbstractMem.New( LNode.GetSize(FAbstractMem) ).position; LNode.WriteToMem(FAbstractMem); Add(LNode); end; @@ -388,11 +394,11 @@ function TPCAbstractMemAccountKeys.GetPositionOfKeyAndAddAccount(const AAccountK LZone.Clear; if (LNode.accounts_using_this_key_position=0) then begin // Create - LZone := FAbstractMem.New( CT_AbstractMemTList_HeaderSize ); + LZone := FAbstractMem.New( TAbstractMemTList.MinAbstractMemTListHeaderSize(FAbstractMem) ); LNode.accounts_using_this_key_position := LZone.position; LNode.WriteToMem( FAbstractMem ); // Save update: end else LZone.position := LNode.accounts_using_this_key_position; - LAccKeyByPos.accountsUsingThisKey := TAccountsUsingThisKey.Create(FAbstractMem,LZone); + LAccKeyByPos.accountsUsingThisKey := TAccountsUsingThisKey.Create(FAbstractMem,LZone,Self.UseCacheOnAbstractMemLists); // Add to cache FAccountKeyByPositionCache.Add( LAccKeyByPos ); end; @@ -410,7 +416,6 @@ function TPCAbstractMemAccountKeys.GetPositionOfKeyAndRemoveAccount( const AAccountNumber: Cardinal): TAbstractMemPosition; var LNode : TAbstractMemAccountKeyNode; LZone : TAMZone; - i : Integer; Lacckutk : TAccountsUsingThisKey; LAccKeyByPos : TAccountKeyByPosition; begin @@ -435,16 +440,13 @@ function TPCAbstractMemAccountKeys.GetPositionOfKeyAndRemoveAccount( LAccKeyByPos.accountKey := AAccountKey; LZone.Clear; LZone.position := LNode.accounts_using_this_key_position; - LAccKeyByPos.accountsUsingThisKey := TAccountsUsingThisKey.Create(FAbstractMem,LZone); + LAccKeyByPos.accountsUsingThisKey := TAccountsUsingThisKey.Create(FAbstractMem,LZone,Self.UseCacheOnAbstractMemLists); // Add to cache FAccountKeyByPositionCache.Add( LAccKeyByPos ); end; if Assigned(LAccKeyByPos.accountsUsingThisKey) then begin - i := LAccKeyByPos.accountsUsingThisKey.IndexOf( AAccountNumber ); - if i>=0 then begin - LAccKeyByPos.accountsUsingThisKey.Delete( i ); - end; + LAccKeyByPos.accountsUsingThisKey.Delete( AAccountNumber ); end; finally FAccountKeysLock.Release; @@ -461,7 +463,7 @@ function TPCAbstractMemAccountKeys.GetPositionOfKey(const AAccountKey: TAccountK // if LNode does not exists, then ADD LNode.accountKey := AAccountKey; LNode.accounts_using_this_key_position := 0; - LNode.myPosition := FAbstractMem.New( LNode.GetSize ).position; + LNode.myPosition := FAbstractMem.New( LNode.GetSize(FAbstractMem) ).position; LNode.WriteToMem(FAbstractMem); Add(LNode); end; @@ -520,53 +522,32 @@ function TPCAbstractMemAccountKeys.ToString(const ANode: TAbstractMemAccountKeyN { TAccountsUsingThisKey } -procedure TAccountsUsingThisKey.LoadFrom(const ABytes: TBytes; var AItem: Cardinal); -begin - Move(ABytes[0],AItem,4); -end; - -procedure TAccountsUsingThisKey.SaveTo(const AItem: Cardinal; AIsAddingItem : Boolean; var ABytes: TBytes); +constructor TAccountsUsingThisKey.Create(AAbstractMem: TAbstractMem; const AInitialZone: TAMZone; AUseCache : Boolean); begin - SetLength(ABytes,4); - Move(AItem,ABytes[0],4); - raise Exception.Create('INCONSISTENT 20200324-1 NEVER CALL HERE'); + inherited Create(AAbstractMem,AInitialZone,False, 7); end; -function TAccountsUsingThisKey.Add(const AItem: Cardinal): Integer; -var - LFound : Boolean; - LBytes : TBytes; - LZone : TAMZone; -begin - FList.LockList; - try - LFound := Find(AItem,Result); - if (LFound and AllowDuplicates) or (Not LFound) then begin - FList.Insert( Result , AItem ); - end else Result := -1; - finally - FList.UnlockList; - end; -end; -function TAccountsUsingThisKey.Compare(const ALeft, ARight: Cardinal): Integer; +procedure TAccountsUsingThisKey.DisposeData(var AData: TAbstractMemPosition); begin - Result := ALeft - ARight; + // NOTE: Nothing to do NEITHER to inherit from ancestor end; -constructor TAccountsUsingThisKey.Create(AAbstractMem: TAbstractMem; const AInitialZone: TAMZone); +function TAccountsUsingThisKey.DoCompareData(const ALeftData, ARightData: TAbstractMemPosition): Integer; begin - inherited Create(AAbstractMem,AInitialZone,1000,False); + Result := ALeftData - ARightData; end; -procedure TAccountsUsingThisKey.Delete(index: Integer); +function TAccountsUsingThisKey.Get(Index: Integer): Cardinal; +var i : TAbstractMemPosition; begin - FList.Delete( index ); + if Not FindIndex(Index,i) then raise Exception.Create(Format('Accounts using this key index %d not found',[Index])); + Result := i; end; -function TAccountsUsingThisKey.GetItem(index: Integer): Cardinal; +function TAccountsUsingThisKey.NodeDataToString(const AData: TAbstractMemPosition): String; begin - Result := FList.Position[index]; + Result := IntToStr(AData); end; { TPCAccountKeyByPositionCache } diff --git a/src/core/UPCAbstractMemAccounts.pas b/src/core/UPCAbstractMemAccounts.pas new file mode 100644 index 000000000..b42fc6551 --- /dev/null +++ b/src/core/UPCAbstractMemAccounts.pas @@ -0,0 +1,214 @@ +unit UPCAbstractMemAccounts; + +interface + +{$IFDEF FPC} + {$MODE DELPHI} +{$ENDIF} + +uses Classes, SysUtils, SyncObjs, + UPCAbstractMemAccountKeys, UPCAccountsOrdenations, + UAbstractMem, + UAbstractMemTList, + UPCDataTypes, + UBaseTypes, + UConst, + {$IFNDEF FPC}System.Generics.Collections,System.Generics.Defaults{$ELSE}Generics.Collections,Generics.Defaults{$ENDIF}; + +type + { TPCAbstractMemListAccounts } + + TPCAbstractMemListAccounts = class(TAbstractMemTList) + private + FAccountKeys: TPCAbstractMemAccountKeys; + FAccountsOrderedByUpdatedBlock : TAccountsOrderedByUpdatedBlock; + FAccountsOrderedBySalePrice : TAccountsOrderedBySalePrice; + protected + procedure LoadFrom(const ABytes: TBytes; var AItem: TAccount); override; + procedure SaveTo(const AItem: TAccount; AIsAddingItem : Boolean; var ABytes: TBytes); override; + public + Constructor Create(AAbstractMem : TAbstractMem; const AInitialZone : TAMZone; ADefaultElementsPerBlock : Integer; AUseCache : Boolean); override; + class procedure LoadAccountFromTBytes(const ABytes: TBytes; const AAccountKeys : TPCAbstractMemAccountKeys; var AItem: TAccount); + property AccountKeys: TPCAbstractMemAccountKeys read FAccountKeys write FAccountKeys; + property AccountsOrderedByUpdatedBlock: TAccountsOrderedByUpdatedBlock read FAccountsOrderedByUpdatedBlock write FAccountsOrderedByUpdatedBlock; + property AccountsOrderedBySalePrice: TAccountsOrderedBySalePrice read FAccountsOrderedBySalePrice write FAccountsOrderedBySalePrice; + end; + + EAbsctractMemAccounts = Class(Exception); + +implementation + +uses UAccounts, UOrderedList; + +{ TPCAbstractMemListAccounts } + +constructor TPCAbstractMemListAccounts.Create(AAbstractMem: TAbstractMem; + const AInitialZone: TAMZone; ADefaultElementsPerBlock: Integer; + AUseCache: Boolean); +begin + inherited; + FAccountKeys := Nil; + FAccountsOrderedByUpdatedBlock := Nil; + FAccountsOrderedBySalePrice := Nil; +end; + +class procedure TPCAbstractMemListAccounts.LoadAccountFromTBytes( + const ABytes: TBytes; const AAccountKeys: TPCAbstractMemAccountKeys; + var AItem: TAccount); +var + LPointer: TAbstractMemPosition; + LStream : TStream; + w : Word; +begin + AItem.Clear; + LStream := TMemoryStream.Create; + Try + LPointer := 0; + LStream.Write(ABytes[0],Length(ABytes)); + LStream.Position := 0; + + LStream.Read( AItem.account , 4 ); + + LStream.Read( w,2 ); + if (w<>CT_PROTOCOL_5) then raise EAbsctractMemAccounts.Create(Format('Invalid Account %d protocol %d',[AItem.account,w])); + + LStream.Read( w, 2 ); + case w of + CT_NID_secp256k1,CT_NID_secp384r1,CT_NID_sect283k1,CT_NID_secp521r1 : Begin + AItem.accountInfo.state := as_Normal; + LStream.Read(LPointer,4); + if Assigned(AAccountKeys) then begin + AItem.accountInfo.accountKey := AAccountKeys.GetKeyAtPosition( LPointer ); + if w<>AItem.accountInfo.accountKey.EC_OpenSSL_NID then raise EAbsctractMemAccounts.Create('INCONSISTENT 20200318-2'); + end; + End; + CT_AccountInfo_ForSale, CT_AccountInfo_ForAccountSwap, CT_AccountInfo_ForCoinSwap : Begin + case w of + CT_AccountInfo_ForSale : AItem.accountInfo.state := as_ForSale; + CT_AccountInfo_ForAccountSwap : AItem.accountInfo.state := as_ForAtomicAccountSwap; + CT_AccountInfo_ForCoinSwap : AItem.accountInfo.state := as_ForAtomicCoinSwap; + end; + LStream.Read(LPointer,4); + if Assigned(AAccountKeys) then begin + AItem.accountInfo.accountKey := AAccountKeys.GetKeyAtPosition( LPointer ); + end; + + LStream.Read(AItem.accountInfo.locked_until_block,4); + LStream.Read(AItem.accountInfo.price,8); + LStream.Read(AItem.accountInfo.account_to_pay,4); + LStream.Read(LPointer,4); + if Assigned(AAccountKeys) then begin + AItem.accountInfo.new_publicKey := AAccountKeys.GetKeyAtPosition( LPointer ); + end; + if (w<>CT_AccountInfo_ForSale) then begin + AItem.accountInfo.hashed_secret.FromSerialized(LStream); + end; + + End; + else raise EAbsctractMemAccounts.Create(Format('Unknow accountInfo type %d for account %d',[w,Aitem.account])); + end; + // + LStream.Read( AItem.balance , 8); + LStream.Read( AItem.updated_on_block_passive_mode , 4); + LStream.Read( AItem.updated_on_block_active_mode , 4); + LStream.Read( AItem.n_operation , 4); + AItem.name.FromSerialized( LStream ); + LStream.Read( AItem.account_type ,2); + AItem.account_data.FromSerialized( LStream ); + if AItem.account_seal.FromSerialized( LStream )<0 then raise EAbsctractMemAccounts.Create('INCONSISTENT 20200318-4'); + // Force account_seal to 20 bytes + if Length(AItem.account_seal)<>20 then begin + AItem.account_seal := TBaseType.T20BytesToRawBytes( TBaseType.To20Bytes(AItem.account_seal) ); + end; + Finally + LStream.Free; + End; +end; + +procedure TPCAbstractMemListAccounts.LoadFrom(const ABytes: TBytes; var AItem: TAccount); +begin + LoadAccountFromTBytes(ABytes,FAccountKeys,AItem); +end; + +procedure TPCAbstractMemListAccounts.SaveTo(const AItem: TAccount; AIsAddingItem : Boolean; var ABytes: TBytes); +var LStream : TStream; + LPointer : TAbstractMemPosition; + w : Word; + LPrevious : TAccount; +begin + if (Length(ABytes)>0) and (Not AIsAddingItem) then begin + // Capture previous values + LoadFrom(ABytes,LPrevious); + if (LPrevious.account<>AItem.account) then raise EAbsctractMemAccounts.Create(Format('INCONSISTENT account number %d<>%d',[AItem.account,LPrevious.account])); + + if Not LPrevious.accountInfo.accountKey.IsEqualTo( AItem.accountInfo.accountKey ) then begin + // Remove previous account link + FAccountKeys.GetPositionOfKeyAndRemoveAccount( LPrevious.accountInfo.accountKey, LPrevious.account ); + end; + + if LPrevious.updated_on_block_active_mode<>AItem.updated_on_block_active_mode then begin + FAccountsOrderedByUpdatedBlock.Update(AItem.account,LPrevious.updated_on_block_active_mode,AItem.updated_on_block_active_mode); + end; + FAccountsOrderedBySalePrice.UpdateAccountBySalePrice(AItem.account,LPrevious.accountInfo,AItem.accountInfo); + end else begin + FAccountsOrderedByUpdatedBlock.Update(AItem.account,0,AItem.updated_on_block_active_mode); + FAccountsOrderedBySalePrice.UpdateAccountBySalePrice(AItem.account,CT_AccountInfo_NUL,AItem.accountInfo); + end; + + LStream := TMemoryStream.Create; + try + LStream.Position := 0; + + + LStream.Write( AItem.account , 4 ); + + w := CT_PROTOCOL_5; + LStream.Write( w, 2 ); + + w := 0; + case AItem.accountInfo.state of + as_Normal : begin + LPointer := FAccountKeys.GetPositionOfKeyAndAddAccount(AItem.accountInfo.accountKey,AItem.account); + LStream.Write( AItem.accountInfo.accountKey.EC_OpenSSL_NID , 2 ); + LStream.Write( LPointer, 4); + end; + as_ForSale : w := CT_AccountInfo_ForSale; + as_ForAtomicAccountSwap : w := CT_AccountInfo_ForAccountSwap; + as_ForAtomicCoinSwap : w := CT_AccountInfo_ForCoinSwap; + end; + if (w>0) then begin + LStream.Write(w,2); + + LPointer := FAccountKeys.GetPositionOfKeyAndAddAccount(AItem.accountInfo.accountKey,AItem.account); + LStream.Write( LPointer, 4); + + LStream.Write(AItem.accountInfo.locked_until_block,4); + LStream.Write(AItem.accountInfo.price,8); + LStream.Write(AItem.accountInfo.account_to_pay,4); + LPointer := FAccountKeys.GetPositionOfKey(AItem.accountInfo.new_publicKey,True); + LStream.Write(LPointer,4); + if (w<>CT_AccountInfo_ForSale) then begin + AItem.accountInfo.hashed_secret.ToSerialized(LStream); + end; + end; + // + LStream.Write( AItem.balance , 8); + LStream.Write( AItem.updated_on_block_passive_mode , 4); + LStream.Write( AItem.updated_on_block_active_mode , 4); + LStream.Write( AItem.n_operation , 4); + + AItem.name.ToSerialized( LStream ); + + LStream.Write( AItem.account_type ,2); + AItem.account_data.ToSerialized( LStream ); + AItem.account_seal.ToSerialized( LStream ); + // + ABytes.FromStream( LStream ); + + finally + LStream.Free; + end; +end; + + +end. diff --git a/src/core/UPCAccountsOrdenations.pas b/src/core/UPCAccountsOrdenations.pas new file mode 100644 index 000000000..66d54ad1d --- /dev/null +++ b/src/core/UPCAccountsOrdenations.pas @@ -0,0 +1,251 @@ +unit UPCAccountsOrdenations; + +{ Copyright (c) 2016-2021 by Albert Molina + + Distributed under the MIT software license, see the accompanying file LICENSE + or visit http://www.opensource.org/licenses/mit-license.php. + + This unit is a part of the PascalCoin Project, an infinitely scalable + cryptocurrency. Find us here: + Web: https://www.pascalcoin.org + Source: https://github.com/PascalCoin/PascalCoin + + If you like it, consider a donation using Bitcoin: + 16K3HCZRhFUtM8GdWRcfKeaa6KsuyxZaYk + + THIS LICENSE HEADER MUST NOT BE REMOVED. +} + +interface + +{$IFDEF FPC} + {$MODE DELPHI} +{$ENDIF} + +{$I ./../config.inc} + +uses Classes, SysUtils, + UAbstractMem, + UAbstractMemBTree, + UAbstractBTree, + UPCDataTypes, UBaseTypes, UOrderedList, + {$IFNDEF FPC}System.Generics.Collections,System.Generics.Defaults{$ELSE}Generics.Collections,Generics.Defaults{$ENDIF}; + +type + + TCallReturnAccount = function(AAccountNumber : Integer; var AAccount : TAccount) : Boolean of object; + + TAccountsOrderedByUpdatedBlock = Class + private + type + TAccounstByUpdatedBlockBTree = Class({$IFDEF USE_ABSTRACTMEM}TAbstractMemBTree{$ELSE}TMemoryBTree{$ENDIF}) + protected + FCallReturnAccount : TCallReturnAccount; + FSearching_AccountNumber : Int64; + FSearching_UpdatedBlock : Integer; + function DoCompareData(const ALeftData, ARightData: TAbstractMemPosition): Integer; override; + public + function NodeDataToString(const AData : TAbstractMemPosition) : String; override; + End; + private + var + FBTree : TAccounstByUpdatedBlockBTree; + {$IFDEF USE_ABSTRACTMEM} + FAbstractMem : TAbstractMem; + {$ENDIF} + public + constructor Create({$IFDEF USE_ABSTRACTMEM}AAbstractMem : TAbstractMem; const AInitialZone : TAMZone; {$ENDIF}ACallReturnAccount : TCallReturnAccount); + destructor Destroy; override; + function First(var AAccountNumber : Integer) : Boolean; + function Next(var AAccountNumber : Integer) : Boolean; + function Count : Integer; + function Update(const AAccountNumber, AOldUpdatedBlock, ANewUpdatedBlock : Integer) : Boolean; + End; + + TAccountsOrderedBySalePrice = Class({$IFDEF USE_ABSTRACTMEM}TAbstractMemBTree{$ELSE}TMemoryBTree{$ENDIF}) + protected + FCallReturnAccount : TCallReturnAccount; + FSearching_AccountNumber : Integer; + FSearching_AccountInfo : TAccountInfo; + function DoCompareData(const ALeftData, ARightData: TAbstractMemPosition): Integer; override; + public + function NodeDataToString(const AData : TAbstractMemPosition) : String; override; + function UpdateAccountBySalePrice(const AAccountNumber : Integer; const AOldAccountInfo, ANewAccountInfo : TAccountInfo) : Boolean; + constructor Create({$IFDEF USE_ABSTRACTMEM}AAbstractMem : TAbstractMem; const AInitialZone: TAMZone; {$ENDIF}ACallReturnAccount : TCallReturnAccount); + End; + +implementation + +Uses UPCAbstractMemAccounts, UAccounts; + +{ TAccountsOrderedByUpdatedBlock } + +function TAccountsOrderedByUpdatedBlock.Count: Integer; +begin + Result := FBTree.Count; +end; + +constructor TAccountsOrderedByUpdatedBlock.Create({$IFDEF USE_ABSTRACTMEM}AAbstractMem : TAbstractMem; const AInitialZone : TAMZone; {$ENDIF}ACallReturnAccount : TCallReturnAccount); +begin + {$IFDEF USE_ABSTRACTMEM} + FAbstractMem := AAbstractMem; + FBTree := TAccounstByUpdatedBlockBTree.Create(FAbstractMem,AInitialZone,False,31); + {$ELSE} + FBTree := TAccounstByUpdatedBlockBTree.Create(Nil,False,31); + {$ENDIF} + FBTree.FSearching_AccountNumber := -1; + FBTree.FSearching_UpdatedBlock := 0; + FBTree.FCallReturnAccount := ACallReturnAccount; +end; + +destructor TAccountsOrderedByUpdatedBlock.Destroy; +begin + FBTree.Free; + inherited; +end; + +function TAccountsOrderedByUpdatedBlock.First(var AAccountNumber : Integer) : Boolean; +var i : Int64; +begin + FBTree.Lock; + Try + FBTree.FSearching_AccountNumber := -1; + i := AAccountNumber; + Result := FBTree.FindLowest(i); + AAccountNumber := i; + Finally + FBTree.Unlock; + End; +end; + +function TAccountsOrderedByUpdatedBlock.Next(var AAccountNumber : Integer): Boolean; +var i : Int64; +begin + FBTree.Lock; + Try + FBTree.FSearching_AccountNumber := -1; + i := AAccountNumber; + Result := FBTree.FindSuccessor(i,i); + AAccountNumber := i; + Finally + FBTree.Unlock; + End; +end; + +function TAccountsOrderedByUpdatedBlock.Update(const AAccountNumber, AOldUpdatedBlock, ANewUpdatedBlock: Integer): Boolean; +var + Lampos : TAbstractMemPosition; + Lnode : TAbstractBTree.TAbstractBTreeNode; + LAccount : TAccount; + LPosition : TAbstractMemPosition; + LiPos : Integer; +begin + FBTree.Lock; + Try + FBTree.FSearching_AccountNumber := AAccountNumber; + FBTree.FSearching_UpdatedBlock := AOldUpdatedBlock; + FBTree.Delete(AAccountNumber); + FBTree.FSearching_UpdatedBlock := ANewUpdatedBlock; + FBTree.Add(AAccountNumber); + Finally + FBTree.Unlock; + End; + Result := True; +end; + +{ TAccountsOrderedByUpdatedBlock.TAccounstByUpdatedBlockBTree } + +function TAccountsOrderedByUpdatedBlock.TAccounstByUpdatedBlockBTree.DoCompareData( + const ALeftData, ARightData: TAbstractMemPosition): Integer; +var LLeftAccount, LRightAccount : TAccount; +begin + if (ALeftData = ARightData) then Exit(0); + + FCallReturnAccount(ARightData,LRightAccount); + if ((FSearching_AccountNumber>=0) And (ALeftData=FSearching_AccountNumber)) then begin + Result := FSearching_UpdatedBlock - LRightAccount.updated_on_block_active_mode; + end else begin + FCallReturnAccount(ALeftData,LLeftAccount); + Result := LLeftAccount.updated_on_block_active_mode - LRightAccount.updated_on_block_active_mode; + end; + if Result=0 then Result := ALeftData - ARightData; +end; + +function TAccountsOrderedByUpdatedBlock.TAccounstByUpdatedBlockBTree.NodeDataToString( + const AData: TAbstractMemPosition): String; +var LAccount : TAccount; +begin + if FCallReturnAccount(AData,LAccount) then begin + Result := Format('(Acc:%d Upd:%d)',[LAccount.account,LAccount.updated_on_block_active_mode]); + end else Result := Format('(Pos:%d not found)',[AData]); +end; + +{ TAccounstBySalePrice } + +constructor TAccountsOrderedBySalePrice.Create({$IFDEF USE_ABSTRACTMEM}AAbstractMem: TAbstractMem; + const AInitialZone: TAMZone; {$ENDIF}ACallReturnAccount: TCallReturnAccount); +begin + {$IFDEF USE_ABSTRACTMEM} + inherited Create(AAbstractMem,AInitialZone,False,15); + {$ELSE} + inherited Create(Nil,False,15); + {$ENDIF} + FCallReturnAccount := ACallReturnAccount; + FSearching_AccountNumber := -1; + FSearching_AccountInfo.Clear; +end; + +function TAccountsOrderedBySalePrice.DoCompareData(const ALeftData, + ARightData: TAbstractMemPosition): Integer; +var LLeftAccount, LRightAccount : TAccount; + LopResult : Int64; +begin + if (ALeftData = ARightData) then Exit(0); + + FCallReturnAccount(ARightData,LRightAccount); + if ((FSearching_AccountNumber>=0) And (ALeftData=FSearching_AccountNumber)) then begin + LopResult := FSearching_AccountInfo.price - LRightAccount.accountInfo.price; + end else begin + FCallReturnAccount(ALeftData,LLeftAccount); + LopResult := LLeftAccount.accountInfo.price - LRightAccount.accountInfo.price; + end; + if LopResult<0 then Result := -1 + else if LopResult>0 then Result := 1 + else Result := ALeftData - ARightData; +end; + +function TAccountsOrderedBySalePrice.NodeDataToString( + const AData: TAbstractMemPosition): String; +var LAccount : TAccount; +begin + if FCallReturnAccount(AData,LAccount) then begin + Result := Format('(Acc:%d price:%s)',[LAccount.account,TAccountComp.FormatMoney(LAccount.accountInfo.price)]); + end else Result := Format('(Pos:%d not found)',[AData]); +end; + +function TAccountsOrderedBySalePrice.UpdateAccountBySalePrice(const AAccountNumber: Integer; + const AOldAccountInfo, ANewAccountInfo: TAccountInfo): Boolean; +var Ldone : Boolean; +begin + if (TAccountComp.IsAccountForSale(AOldAccountInfo)=TAccountComp.IsAccountForSale(ANewAccountInfo)) and + (AOldAccountInfo.price = ANewAccountInfo.price) then Exit(True); // No updates, no need to change + Lock; + Try + FSearching_AccountNumber := AAccountNumber; + FSearching_AccountInfo := AOldAccountInfo; + Ldone := Delete(AAccountNumber); + if (Ldone) and (Not TAccountComp.IsAccountForSale(AOldAccountInfo)) then raise EAbsctractMemAccounts.Create('ERROR DEV 20210126-1'); + if (Not Ldone) and (TAccountComp.IsAccountForSale(AOldAccountInfo)) then raise EAbsctractMemAccounts.Create('ERROR DEV 20210126-2'); + FSearching_AccountInfo := ANewAccountInfo; + if (TAccountComp.IsAccountForSale(ANewAccountInfo)) then begin + if Not Add(AAccountNumber) then raise EAbsctractMemAccounts.Create('ERROR DEV 20210126-3'); + end; + FSearching_AccountNumber := -1; + FSearching_AccountInfo.Clear; + Finally + Unlock; + End; + Result := True; +end; + +end. diff --git a/src/core/UPCDataTypes.pas b/src/core/UPCDataTypes.pas index f94fb6c94..3f6e40313 100644 --- a/src/core/UPCDataTypes.pas +++ b/src/core/UPCDataTypes.pas @@ -47,6 +47,7 @@ TECDSA_Public = record function FromSerialized(const AStream : TStream) : Boolean; overload; function LoadFromTBytes(const ABytes : TBytes; var AStartIndex : Integer) : Boolean; function IsEqualTo(const ACompareTo : TECDSA_Public) : Boolean; + function GetCopy : TECDSA_Public; end; { TECDSA_Public_Raw is a TECDSA_Public stored in a single TRawBytes @@ -65,6 +66,7 @@ TECDSA_Public_Helper = record helper for TECDSA_Public TECDSA_SIG = record r: TRawBytes; s: TRawBytes; + function GetCopy : TECDSA_SIG; end; PECDSA_Public = ^TECDSA_Public; // Pointer to a TECDSA_SIG @@ -91,6 +93,7 @@ TECDSA_SIG = record function ToSerialized : TBytes; function FromSerialized(const ASerialized : TBytes) : Boolean; function LoadFromTBytes(const ABytes : TBytes; var AStartIndex : Integer) : Boolean; + function GetCopy : TAccountInfo; end; TOperationBlock = Record @@ -108,6 +111,7 @@ TECDSA_SIG = record operations_hash: TRawBytes; // RAW sha256 (32 bytes) of Operations proof_of_work: TRawBytes; // RAW 32 bytes previous_proof_of_work: TRawBytes; // RAW 32 bytes + function GetCopy : TOperationBlock; end; { TAccount } @@ -125,6 +129,7 @@ TECDSA_SIG = record account_seal : TRawBytes; // Protocol 5. PIP-0029 seal of data changes procedure Clear; function GetLastUpdatedBlock : Cardinal; + function GetCopy : TAccount; End; PAccount = ^TAccount; @@ -199,6 +204,13 @@ function TECDSA_Public.FromSerialized(const ASerialized: TBytes): Boolean; Result := LoadFromTBytes(ASerialized,i); end; +function TECDSA_Public.GetCopy: TECDSA_Public; +begin + Result.EC_OpenSSL_NID := Self.EC_OpenSSL_NID; + Result.x := Copy(Self.x); + Result.y := Copy(Self.y); +end; + function TECDSA_Public.FromSerialized(const AStream: TStream): Boolean; begin if AStream.Read(Self.EC_OpenSSL_NID,2)<>2 then Exit(False); @@ -301,6 +313,14 @@ function TAccountInfo.FromSerialized(const ASerialized: TBytes): Boolean; Result := LoadFromTBytes(ASerialized,i); end; +function TAccountInfo.GetCopy: TAccountInfo; +begin + Result := Self; + Result.accountKey := Self.accountKey.GetCopy; + Result.new_publicKey := Self.new_publicKey.GetCopy; + Result.hashed_secret := Copy(Self.hashed_secret); +end; + function TAccountInfo.LoadFromTBytes(const ABytes: TBytes; var AStartIndex: Integer): Boolean; var w : Word; begin @@ -394,6 +414,15 @@ procedure TAccount.Clear; Self := CT_Account_NUL; end; +function TAccount.GetCopy: TAccount; +begin + Result := Self; + Result.accountInfo := Self.accountInfo.GetCopy; + Result.name := Copy(Self.name); + Result.account_data := Copy(Self.account_data); + Result.account_seal := Copy(Self.account_seal); +end; + function TAccount.GetLastUpdatedBlock: Cardinal; begin if (Self.updated_on_block_passive_mode>Self.updated_on_block_active_mode) then Result := Self.updated_on_block_passive_mode @@ -438,5 +467,26 @@ function TPCSafeBoxHeader.ToString: String; +{ TOperationBlock } + +function TOperationBlock.GetCopy: TOperationBlock; +begin + Result := Self; + Result.account_key := Self.account_key.GetCopy; + Result.block_payload := Copy(Self.block_payload); + Result.initial_safe_box_hash := Copy(Self.initial_safe_box_hash); + Result.operations_hash := Copy(Self.operations_hash); + Result.proof_of_work := Copy(Self.proof_of_work); + Result.previous_proof_of_work := Copy(Self.previous_proof_of_work); +end; + +{ TECDSA_SIG } + +function TECDSA_SIG.GetCopy: TECDSA_SIG; +begin + Result.r := Copy(Self.r); + Result.s := Copy(Self.s); +end; + end. diff --git a/src/core/UPCDownloadSafebox.pas b/src/core/UPCDownloadSafebox.pas new file mode 100644 index 000000000..4298de869 --- /dev/null +++ b/src/core/UPCDownloadSafebox.pas @@ -0,0 +1,300 @@ +unit UPCDownloadSafebox; + +{ Copyright (c) 2016-2023 by Albert Molina + + Distributed under the MIT software license, see the accompanying file LICENSE + or visit http://www.opensource.org/licenses/mit-license.php. + + This unit is a part of the PascalCoin Project, an infinitely scalable + cryptocurrency. Find us here: + Web: https://www.pascalcoin.org + Source: https://github.com/PascalCoin/PascalCoin + + If you like it, consider a donation using Bitcoin: + 16K3HCZRhFUtM8GdWRcfKeaa6KsuyxZaYk + + THIS LICENSE HEADER MUST NOT BE REMOVED. +} + +{$IFDEF FPC} + {$mode delphi} +{$ENDIF} + +interface + +{$I ./../config.inc} + +uses + Classes, SysUtils, + UNetProtocol, UThread, + {$IFNDEF FPC}System.Generics.Collections{$ELSE}Generics.Collections{$ENDIF}, + UBlockChain, + UNode, UPCTemporalFileStream, UChunk, + UAccounts, ULog, UConst, UCrypto, UBaseTypes, UPCDataTypes; + +type + TPCDownloadSafebox = class + private + FDownloadedBank: TPCBank; + FOnProgressNotify: TProgressNotify; + type + TDownloadSBThread = Class(TPCThread) + private + FOwner : TPCDownloadSafebox; + FBlockStart, FBlocksCount : Cardinal; + FStream: TPCTemporalFileStream; + protected + procedure BCExecute; override; + public + constructor Create(AOwner : TPCDownloadSafebox; ABlockStart, ACount : Cardinal); + destructor Destroy; override; + Property Stream : TPCTemporalFileStream read FStream write FStream; + End; + TPCDownloadSafeboxChunk = record + BlockStart : Cardinal; + Count : Cardinal; + Thread : TDownloadSBThread; + end; + var + FNode : TNode; + FSavedSafeboxHighOperationBlock : TOperationBlock; + FChunks : TPCThreadList; + protected + public + constructor Create; + destructor Destroy; override; + function DownloadSafebox(AOwnerThread : TThread; ASavedSafeboxHighOperationBlock : TOperationBlock; AChunks : TPCSafeboxChunks) : Boolean; + property DownloadedBank : TPCBank read FDownloadedBank; + property OnProgressNotify : TProgressNotify read FOnProgressNotify write FOnProgressNotify; + end; + +implementation + +{ TPCDownloadSafebox.TDownloadSBThread } + +procedure TPCDownloadSafebox.TDownloadSBThread.BCExecute; + function DownloadSafebox(AConnection : TNetConnection; ASafeboxHash : TRawBytes; ASafeboxChunkStream : TStream) : Boolean; + Var sendData,receiveData : TStream; + headerdata : TNetHeaderData; + request_id : Cardinal; + c : Cardinal; + LRandomMilis : Integer; + LsafeBoxHeader : TPCSafeBoxHeader; + LErrors : String; + Ltc : TTickCount; + Begin + Result := False; + Ltc := TPlatform.GetTickCount; + sendData := TMemoryStream.Create; + receiveData := TMemoryStream.Create; + try + c := FOwner.FSavedSafeboxHighOperationBlock.block; + sendData.Write(c,4); // 4 bytes for blockcount + TStreamOp.WriteAnsiString(SendData,ASafeboxHash); // SafeboxHash + sendData.Write(FBlockStart,4); + c := FBlockStart + FBlocksCount - 1; + sendData.Write(c,4); + // + request_id := TNetData.NetData.NewRequestId; + if AConnection.DoSendAndWaitForResponse(CT_NetOp_GetSafeBox,request_id,sendData,receiveData,30000,headerdata) then begin + if HeaderData.is_error then exit; + ASafeboxChunkStream.Position := 0; + ASafeboxChunkStream.Size:=0; + If Not TPCChunk.LoadSafeBoxFromChunk(receiveData,ASafeboxChunkStream,LsafeBoxHeader,LErrors) then begin + AConnection.DisconnectInvalidClient(false,'Invalid received chunk: '+LErrors); + exit; + end; + If (Not (TBaseType.Equals(LsafeBoxHeader.safeBoxHash,ASafeboxHash))) or (LsafeBoxHeader.startBlock<>FBlockStart) or (LsafeBoxHeader.endBlock<>c) or + (LsafeBoxHeader.protocolCT_BlockChain_Protocol_Available) then begin + Lerrors := Format('Invalid received Safebox chunk Blockscount:%d %d - from:%d %d to %d %d - SafeboxHash:%s %s - Protocol %d', + [LsafeBoxHeader.blocksCount,FBlocksCount,LsafeBoxHeader.startBlock,FBlockStart,LsafeBoxHeader.endBlock,c, + LsafeBoxHeader.safeBoxHash.ToHexaString,ASafeboxHash.ToHexaString,LsafeBoxHeader.protocol]); + AConnection.DisconnectInvalidClient(false,'Invalid received chunk: '+Lerrors); + exit; + end; + Result := True; + TLog.NewLog(ltdebug,Self.ClassName,Format('Received Safebox chunk %d..%d from %s in %.2f secs',[FBlockStart,FBlockStart+FBlocksCount,AConnection.ClientRemoteAddr,TPlatform.GetElapsedMilliseconds(Ltc)/1000])); + end else begin + Lerrors := 'No response on DownloadSafeBoxChunk'; + TLog.NewLog(ltdebug,Self.ClassName,Lerrors); + end; + finally + receiveData.Free; + sendData.Free; + end; + end; +var LConnection : TNetConnection; +begin + repeat + FStream.Position := 0; + FStream.Size := 0; // Clear + // Search for a connection + FOwner.FChunks.LockList; + try + if TNetData.NetData.GetConnection(Random(TNetData.NetData.ConnectionsCountAll),LConnection) then begin + if Assigned(LConnection) And (Not LConnection.Connected) then LConnection := Nil; + end else LConnection := Nil; + if Assigned(LConnection) then begin + if TNetData.NetData.ConnectionLock(Self,LConnection,100) then begin + TNetData.NetData.ConnectionUnlock(LConnection); + end else LConnection := Nil; + end; + finally + FOwner.FChunks.UnlockList; + end; + if Assigned(LConnection) then begin + if DownloadSafebox(LConnection,FOwner.FSavedSafeboxHighOperationBlock.initial_safe_box_hash,Self.FStream) then Break; + end; + Sleep(100); + until Terminated; +end; + +constructor TPCDownloadSafebox.TDownloadSBThread.Create(AOwner : TPCDownloadSafebox; ABlockStart, ACount : Cardinal); +begin + FOwner := AOwner; + FBlockStart := ABlockStart; + FBlocksCount := ACount; + FStream := TPCTemporalFileStream.Create(Format('CHUNK_%.8d_%.8d',[ABlockStart,ABlockStart+ACount-1])); + inherited Create(True); + + FreeOnTerminate := False; + Suspended := False; +end; + +destructor TPCDownloadSafebox.TDownloadSBThread.Destroy; +begin + FreeAndNil(FStream); + inherited; +end; + +{ TPCDownloadSafebox } + +constructor TPCDownloadSafebox.Create; +begin + FNode := TNode.Node; + FDownloadedBank := TPCBank.Create(Nil); + FChunks := TPCThreadList.Create(''); + FSavedSafeboxHighOperationBlock := CT_OperationBlock_NUL; + FOnProgressNotify := Nil; +end; + +destructor TPCDownloadSafebox.Destroy; +var i : Integer; + Ll : TList; +begin + Ll := FChunks.LockList; + Try + for i:=0 to Ll.Count-1 do begin + if assigned(Ll.Items[i].Thread) then begin + Ll.Items[i].Thread.Terminate; + Ll.Items[i].Thread.WaitFor; + Ll.Items[i].Thread.Free; + end; + end; + Finally + FChunks.UnlockList; + End; + FreeAndNil(FChunks); + FreeAndNil(FDownloadedBank); + inherited; +end; + +function TPCDownloadSafebox.DownloadSafebox(AOwnerThread : TThread; ASavedSafeboxHighOperationBlock: TOperationBlock; AChunks : TPCSafeboxChunks): Boolean; +var LDownloadedSafeboxBlocksCount, request_id : Cardinal; + LreceivedChunk : TStream; + safeBoxHeader : TPCSafeBoxHeader; + i : Integer; + LContinue : Boolean; + Ll : TList; + Ldsbc : TPCDownloadSafeboxChunk; + LTerminated : Boolean; + LTerminatedCount, LTotal : Integer; + LFileName, Lstatus : String; +Begin + Result := False; + // Check + LDownloadedSafeboxBlocksCount := ((ASavedSafeboxHighOperationBlock.block DIV CT_BankToDiskEveryNBlocks)) * CT_BankToDiskEveryNBlocks; + if LDownloadedSafeboxBlocksCount<>ASavedSafeboxHighOperationBlock.block then Exit(False); + FSavedSafeboxHighOperationBlock := ASavedSafeboxHighOperationBlock; + + LTotal := 0; + Ll := FChunks.LockList; + Try + for i:=0 to ((LDownloadedSafeboxBlocksCount-1) DIV CT_MAX_SAFEBOXCHUNK_BLOCKS) do begin + Ldsbc.BlockStart := (i * CT_MAX_SAFEBOXCHUNK_BLOCKS); + Ldsbc.Count := CT_MAX_SAFEBOXCHUNK_BLOCKS; + if Ldsbc.BlockStart + Ldsbc.Count > LDownloadedSafeboxBlocksCount then begin + Ldsbc.Count := LDownloadedSafeboxBlocksCount - Ldsbc.BlockStart; + end; + Ldsbc.Thread := Nil; + Ll.Add(Ldsbc); + end; + LTotal := Ll.Count; + Finally + FChunks.UnlockList; + End; + + if Assigned(AOwnerThread) then LContinue := Not AOwnerThread.CheckTerminated + else LContinue := True; + + LTerminated := False; + + while (FNode.NetServer.Active) And LContinue And (Not LTerminated) do begin + // + LTerminatedCount := 0; + Ll := FChunks.LockList; + Try + i := 0; + for i:=0 to Ll.Count-1 do begin + Ldsbc := Ll.Items[i]; + if Not Assigned(Ldsbc.Thread) then begin + Ldsbc.Thread := TPCDownloadSafebox.TDownloadSBThread.Create(Self,Ldsbc.BlockStart,Ldsbc.Count); + Ll.Items[i] := Ldsbc; + end else begin + if Ldsbc.Thread.Terminated then Inc(LTerminatedCount); + end; + end; + LTerminated := LTerminatedCount >= Ll.Count; + Lstatus := Format('Downloading Safebox chunks %d/%d',[LTerminatedCount,Ll.Count]); + Finally + FChunks.UnlockList; + End; + + Sleep(10); + // + if Assigned(AOwnerThread) then LContinue := Not AOwnerThread.CheckTerminated + else LContinue := True; + if (LContinue) and (Assigned(FOnProgressNotify)) then begin + FOnProgressNotify(Self,LStatus,LTerminatedCount,LTotal); + end; + end; + + if (LTerminated) And (LContinue) then begin + AChunks.Clear; + Ll := FChunks.LockList; + try + for i := 0 to Ll.Count-1 do begin + Ll.Items[i].Thread.Stream.Position := 0; + AChunks.AddChunk(Ll.Items[i].Thread.Stream,True,True); + Ll.Items[i].Thread.Stream := Nil; + end; + LFileName := TNode.Node.Bank.GetStorageFolder('')+PathDelim+'safebox_'+IntToStr(LDownloadedSafeboxBlocksCount)+'.safebox'; + + if (Assigned(FOnProgressNotify)) then begin + FOnProgressNotify(Self,Format('Saving Safebox %d chunks to %s',[LTotal,ExtractFileName(LFileName)]),0,0); + end; + AChunks.SaveSafeboxfile(LFileName); + finally + FChunks.UnlockList; + end; + // + Result := True; + end; + + +end; + +initialization +finalization +end. diff --git a/src/core/UPCOperationsSignatureValidator.pas b/src/core/UPCOperationsSignatureValidator.pas index c7c53f6da..200f129b2 100644 --- a/src/core/UPCOperationsSignatureValidator.pas +++ b/src/core/UPCOperationsSignatureValidator.pas @@ -325,6 +325,9 @@ procedure TPCOperationsSignatureValidatorThread.BCExecute; LOperation := FValidator.GetNextOperation(Self); if Assigned(LOperation) then begin if Not LOperation.HasValidSignature then begin + {$IFDEF TESTING_NO_POW_CHECK} + LIsValid := True; + {$ELSE} // Only will validate if HasValidSignature is False (Not validated before) try LIsValid := LOperation.IsValidSignatureBasedOnCurrentSafeboxState(FValidator.FSafeBoxTransaction); @@ -334,6 +337,7 @@ procedure TPCOperationsSignatureValidatorThread.BCExecute; TLog.NewLog(lterror,ClassName,LOperation.ToString+' ERROR: ('+E.ClassName+') '+E.Message); end; end; + {$ENDIF} FValidator.SetOperationCheckResult(Self,LOperation, LIsValid); end; end; diff --git a/src/core/UPCOrderedLists.pas b/src/core/UPCOrderedLists.pas index 3944d6854..20e4dc8f5 100644 --- a/src/core/UPCOrderedLists.pas +++ b/src/core/UPCOrderedLists.pas @@ -56,6 +56,8 @@ interface Procedure Disable; Procedure Enable; Function ToArray : TCardinalsArray; + function FillList(AStartIndex, ACount : Integer; const AList : TList) : Integer; overload; + function FillList(AStartIndex, ACount : Integer; const AList : TList) : Integer; overload; End; @@ -180,6 +182,36 @@ procedure TOrderedCardinalList.Enable; if (FDisabledsCount=0) And (FModifiedWhileDisabled) then NotifyChanged; end; +function TOrderedCardinalList.FillList(AStartIndex, ACount : Integer; const AList : TList) : Integer; +var i : Integer; +begin + AList.Clear; + AList.Capacity := ACount; + if (AStartIndex=0) and (ACount=FOrderedList.Count) then begin + AList.InsertRange(AStartIndex,FOrderedList); + end else begin + while (ACount>0) and (AStartIndex < FOrderedList.Count) do begin + AList.Add( FOrderedList.Items[AStartIndex] ); + Inc(AStartIndex); + Dec(ACount); + end; + end; + Result := AList.Count; +end; + +function TOrderedCardinalList.FillList(AStartIndex, ACount: Integer; const AList: TList): Integer; +var i : Integer; +begin + AList.Clear; + AList.Capacity := ACount; + while (ACount>0) and (AStartIndex < FOrderedList.Count) do begin + AList.Add( FOrderedList.Items[AStartIndex] ); + Inc(AStartIndex); + Dec(ACount); + end; + Result := AList.Count; +end; + function TOrderedCardinalList.Find(const Value: Cardinal; var Index: Integer): Boolean; var L, H, I: Integer; C : Int64; diff --git a/src/core/UPCRPCFileUtils.pas b/src/core/UPCRPCFileUtils.pas new file mode 100644 index 000000000..ff5c2f780 --- /dev/null +++ b/src/core/UPCRPCFileUtils.pas @@ -0,0 +1,180 @@ +unit UPCRPCFileUtils; + +{ Copyright (c) 2020 by PascalCoin developers, orignal code by Albert Molina + + Distributed under the MIT software license, see the accompanying file LICENSE + or visit http://www.opensource.org/licenses/mit-license.php. + + This unit is a part of the PascalCoin Project, an infinitely scalable + cryptocurrency. Find us here: + Web: https://www.pascalcoin.org + Source: https://github.com/PascalCoin/PascalCoin + + If you like it, consider a donation using Bitcoin: + 16K3HCZRhFUtM8GdWRcfKeaa6KsuyxZaYk + + THIS LICENSE HEADER MUST NOT BE REMOVED. +} + +{$IFDEF FPC} + {$MODE Delphi} +{$ENDIF} + +interface + +{$I ./../config.inc} + +Uses classes, SysUtils, + UJSONFunctions, URPC, UCrypto, ULog, + {$IFDEF USE_ABSTRACTMEM} + UPCAbstractMem, UPCAbstractMemAccountKeys, + {$ENDIF} + {$IFNDEF FPC}System.Generics.Collections{$ELSE}Generics.Collections{$ENDIF}, + UBlockChain, UPCOrderedLists; + + +Type + + { TRPCFileUtils } + + TRPCFileUtils = Class + private + public + class function SaveAsSafeboxStream(const ASender : TRPCProcess; const AMethodName : String; AInputParams, AJSONResponse : TPCJSONObject; var AErrorNum : Integer; var AErrorDesc : String) : Boolean; + class function GenerateNewAbstractMemSafebox(const ASender : TRPCProcess; const AMethodName : String; AInputParams, AJSONResponse : TPCJSONObject; var AErrorNum : Integer; var AErrorDesc : String) : Boolean; + class function AbstractMemStats(const ASender : TRPCProcess; const AMethodName : String; AInputParams, AJSONResponse : TPCJSONObject; var AErrorNum : Integer; var AErrorDesc : String) : Boolean; + + End; + +implementation + +uses UPCDataTypes, UFileStorage, UNode; + +{ TRPCFileUtils } + +class function TRPCFileUtils.GenerateNewAbstractMemSafebox( + const ASender: TRPCProcess; const AMethodName: String; AInputParams, + AJSONResponse: TPCJSONObject; var AErrorNum: Integer; + var AErrorDesc: String): Boolean; +{$IFDEF USE_ABSTRACTMEM} +var + LFileName : String; +{$ENDIF} +begin + if Not ASender.RPCServer.AllowUsePrivateKeys then begin + AErrorNum := CT_RPC_ErrNum_NotAllowedCall; + Exit(False); + end; +{$IFDEF USE_ABSTRACTMEM} + LFileName := AInputParams.AsString('filename', '').Trim; + if (LFileName='') then begin + LFileName := TPCBank.GetSafeboxCheckpointingFileName(TNode.Node.Bank.GetStorageFolder(''),TNode.Node.Bank.BlocksCount); + end; + TNode.Node.Bank.SafeBox.SaveCheckpointing(LFileName); + AJSONResponse.GetAsObject('result').GetAsVariant('filename').Value := LFileName; + AErrorNum := 0; + AErrorDesc := ''; + Result := True; +{$ELSE} + AErrorNum := CT_RPC_ErrNum_NotImplemented; + AErrorDesc := 'AbstractMem library is not available in this build'; + Result := False; +{$ENDIF} +end; + +class function TRPCFileUtils.AbstractMemStats(const ASender: TRPCProcess; + const AMethodName: String; AInputParams, AJSONResponse: TPCJSONObject; + var AErrorNum: Integer; var AErrorDesc: String): Boolean; +var LStrings, LReport : TStrings; + LTotalUsedSize, LTotalUsedBlocksCount, LTotalLeaksSize, LTotalLeaksBlocksCount : Int64; + i, nMax : Integer; + Lobj : TPCJSONObject; + Larray : TPCJSONArray; +begin + if Not ASender.RPCServer.AllowUsePrivateKeys then begin + AErrorNum := CT_RPC_ErrNum_NotAllowedCall; + Exit(False); + end; +{$IFDEF USE_ABSTRACTMEM} + LStrings := TStringList.Create; + Try + if AInputParams.GetAsVariant('report').AsBoolean(False) then LReport := LStrings + else LReport := Nil; + Lobj := AJSONResponse.GetAsObject('result').GetAsObject('abstractmem'); + if TNode.Node.Bank.SafeBox.PCAbstractMem.AbstractMem.CheckConsistency(LReport,Nil, LTotalUsedSize, LTotalUsedBlocksCount, LTotalLeaksSize, LTotalLeaksBlocksCount) then begin + Lobj.GetAsVariant('checkconsistency').Value := True; + end else begin + Lobj.GetAsVariant('checkconsistency').Value := False; + end; + Lobj.GetAsVariant('total_used_size').Value := LTotalUsedSize; + Lobj.GetAsVariant('total_used_blocks_count').Value := LTotalUsedBlocksCount; + Lobj.GetAsVariant('total_leaks_size').Value := LTotalLeaksSize; + Lobj.GetAsVariant('total_leaks_blocks_count').Value := LTotalLeaksBlocksCount; + + if Assigned(LReport) then begin + Larray := Lobj.GetAsArray('report'); + i := AInputParams.GetAsVariant('report_start').AsInteger(0); + nMax := AInputParams.GetAsVariant('report_max').AsInteger(100); + while (nMax>0) and (i>=0) and (i; begin // Get Parameters Result := False; @@ -175,6 +177,7 @@ class function TRPCFindAccounts.FindAccounts(const ASender: TRPCProcess; end; LAccountType := AInputParams.AsInteger('type', -1); LStart := AInputParams.AsInteger('start', 0); + LEnd := AInputParams.AsInteger('end', -1); LMax := AInputParams.AsInteger('max', 100); if AInputParams.IndexOfName('statustype')>=0 then begin LString := AInputParams.AsString('statustype','all'); @@ -203,7 +206,7 @@ class function TRPCFindAccounts.FindAccounts(const ASender: TRPCProcess; // Validate Parameters if (Length(LAccountName)>0) And (LSearchByNameType = st_exact) then begin LRaw.FromString( LAccountName ); - if not ASender.Node.Bank.SafeBox.ValidAccountName(LRaw, LErrors) then begin + if not TPascalCoinProtocol.IsValidAccountName(CT_BUILD_PROTOCOL, LRaw, LErrors) then begin AErrorNum := CT_RPC_ErrNum_InvalidAccountName; AErrorDesc := LErrors; exit; @@ -221,6 +224,10 @@ class function TRPCFindAccounts.FindAccounts(const ASender: TRPCProcess; exit; end; + if (LEnd<0) or (LEnd>=ASender.Node.Bank.AccountsCount) then begin + LEnd := ASender.Node.Bank.AccountsCount - 1; + end; + // Declare return result (empty by default) LOutput := AJSONResponse.GetAsArray('result'); @@ -271,17 +278,31 @@ class function TRPCFindAccounts.FindAccounts(const ASender: TRPCProcess; end; end else begin // Search by type-forSale-balance - for i := LStart to ASender.Node.Bank.AccountsCount - 1 do begin - if (LSearchByPubkey) then begin - if (i>=LAccountsNumbersList.Count) then Break; - LAccount := ASender.Node.GetMempoolAccount( LAccountsNumbersList.Get(i) ); - end else begin - LAccount := ASender.Node.GetMempoolAccount(i); + if (LSearchByPubkey) then begin + LAccountsList := TList.Create; + try + LAccountsNumbersList.FillList(LStart,LEnd-LStart+1,LAccountsList); + for i := 0 to LAccountsList.Count-1 do begin + LAccount := ASender.Node.GetMempoolAccount( LAccountsList[i] ); + if (_IsValidAccount(LAccount)) then begin + TPascalCoinJSONComp.FillAccountObject(LAccount,LOutput.GetAsObject(LOutput.Count)); + if LOutput.Count>=LMax then break; + end; + end; + finally + LAccountsList.Free; end; + end else begin + i := LStart; + while (Not ASender.Terminated) And (i < LEnd) do begin + LAccount := ASender.Node.GetMempoolAccount(i); + + if (_IsValidAccount(LAccount)) then begin + TPascalCoinJSONComp.FillAccountObject(LAccount,LOutput.GetAsObject(LOutput.Count)); + if LOutput.Count>=LMax then break; + end; + inc(i); - if (_IsValidAccount(LAccount)) then begin - TPascalCoinJSONComp.FillAccountObject(LAccount,LOutput.GetAsObject(LOutput.Count)); - if LOutput.Count>=LMax then break; end; end; end; diff --git a/src/core/UPCRPCFindBlocks.pas b/src/core/UPCRPCFindBlocks.pas new file mode 100644 index 000000000..887d33f8b --- /dev/null +++ b/src/core/UPCRPCFindBlocks.pas @@ -0,0 +1,191 @@ +unit UPCRPCFindBlocks; + +{ Copyright (c) 2020 by PascalCoin developers, orignal code by Albert Molina + + Distributed under the MIT software license, see the accompanying file LICENSE + or visit http://www.opensource.org/licenses/mit-license.php. + + This unit is a part of the PascalCoin Project, an infinitely scalable + cryptocurrency. Find us here: + Web: https://www.pascalcoin.org + Source: https://github.com/PascalCoin/PascalCoin + + If you like it, consider a donation using Bitcoin: + 16K3HCZRhFUtM8GdWRcfKeaa6KsuyxZaYk + + THIS LICENSE HEADER MUST NOT BE REMOVED. +} + +{$IFDEF FPC} + {$MODE Delphi} +{$ENDIF} + +interface + +{$I ./../config.inc} + +Uses classes, SysUtils, + UJSONFunctions, UAccounts, UBaseTypes, UOpTransaction, UConst, + {$IFNDEF FPC}System.Generics.Collections{$ELSE}Generics.Collections{$ENDIF}, + URPC, UCrypto, UWallet, UBlockChain, ULog, UPCOrderedLists; + + +Type + TRPCFindBlocks = Class + private + public + class function FindBlocks(const ASender : TRPCProcess; const AMethodName : String; AInputParams, AJSONResponse : TPCJSONObject; var AErrorNum : Integer; var AErrorDesc : String) : Boolean; + End; + +implementation + +uses UPCDataTypes; + +{ TRPCFindBlocks } + +class function TRPCFindBlocks.FindBlocks(const ASender: TRPCProcess; + const AMethodName: String; AInputParams, AJSONResponse: TPCJSONObject; + var AErrorNum: Integer; var AErrorDesc: String): Boolean; + + +{ RPC "findblocks" +### findblocks +Find blocks by name/type and returns them as an array of "Block Object" + +##### Params +- `payload` : String - Name to search +- `payloadsearchtype` : String - One of those values + - `exact` : + - `startswith` : (DEFAULT OPTION) + - `not-startswith` : + - `contains` : + - `not-contains` : + - `endswith` : + - `not-endswith` : +- `enc_pubkey` or `b58_pubkey` : HEXASTRING or String - Will return blocks with this public key. +- `start` : Integer - Start block (by default, 0) +- `end` : Integer - End block (by default -1, equals to "no limit") +- `max` : Integer - Max of accounts returned in array (by default, 100) + +} + +type + TSearchBlockPayloadType = (st_exact, st_startswith, st_contains, st_endswith, st_not_startswith, st_not_contains, st_not_endswith); + + function _SearchValidPayload(const ASearch : String; const APayload : String; ASearchType : TSearchBlockPayloadType) : Boolean; + var i : Integer; + begin + if (ASearch.Length=0) then Exit(True); // If nothing to search, allways TRUE + // Here we know that ASearchName has a value + if (APayload.Length=0) then Exit(False); // If account has NO NAME, allways FALSE + if (ASearchType=st_exact) then begin + Exit( APayload.Equals(ASearch) ); // Must match + end; + + i := APayload.IndexOf(ASearch); + Result := + ((i=0) and (ASearchType in [st_startswith])) // found at first position + or + ((i>=0) and (ASearchType in [st_contains])) // found in any pos + or + ((i=(APayload.Length-1)) and (ASearchType in [st_endswith])) // found at last position + or + ((i<0) and (ASearchType in [st_not_startswith, st_not_contains, st_not_endswith])) // not found and must not contain in any pos + or + ((i>=1) and (ASearchType in [st_not_startswith])) // not found at first position + or + ((i<(APayload.Length-1)) and (ASearchType in [st_not_endswith])); // not found at last position + end; + +var + LPayload : String; + LSearchByPayloadType : TSearchBlockPayloadType; + LSearchByPubkey : Boolean; + LPubKey : TAccountKey; + + function _IsValidBlock(const ABlock : TOperationBlock) : Boolean; + begin + if (Not _SearchValidPayload(LPayload,ABlock.block_payload.ToString,LSearchByPayloadType)) then Exit(False); + if (LSearchByPubkey) then begin + if Not (TAccountComp.EqualAccountKeys(LPubKey,ABlock.account_key)) then Exit(False); + end; + + Result := True; + end; + +var + LString : String; + LAccountNumber : Integer; + LRaw : TRawBytes; + LStart, LEnd, LMax : Integer; + LBlock : TOperationBlock; + + i : Integer; + LErrors : String; + LOutput : TPCJSONArray; + LStartsWith : TOrderedRawList; +begin + // Get Parameters + Result := False; + LPayload := LowerCase(AInputParams.AsString('payload', '')); // Convert to lowercase... + if AInputParams.IndexOfName('payloadsearchtype')>=0 then begin + LString := AInputParams.AsString('payloadsearchtype',''); + if (AnsiSameStr(LString,'exact')) then LSearchByPayloadType := st_exact + else if (AnsiSameStr(LString,'startswith')) then LSearchByPayloadType := st_startswith + else if (AnsiSameStr(LString,'not-startswith')) then LSearchByPayloadType := st_not_startswith + else if (AnsiSameStr(LString,'contains')) then LSearchByPayloadType := st_contains + else if (AnsiSameStr(LString,'not-contains')) then LSearchByPayloadType := st_not_contains + else if (AnsiSameStr(LString,'endswith')) then LSearchByPayloadType := st_endswith + else if (AnsiSameStr(LString,'not-endswith')) then LSearchByPayloadType := st_not_endswith + else begin + AErrorNum := CT_RPC_ErrNum_InvalidData; + AErrorDesc := Format('Invalid "payloadsearchtype" value: "%s"',[LString]); + Exit(False); + end; + end else begin + LSearchByPayloadType := st_startswith; + end; + LStart := AInputParams.AsInteger('start', 0); + LMax := AInputParams.AsInteger('max', 100); + LEnd := AInputParams.AsInteger('end', -1); + + if LStart < 0 then begin + AErrorNum := CT_RPC_ErrNum_InvalidData; + AErrorDesc := '"start" param must be >=0'; + exit; + end; + if LMax <= 0 then begin + AErrorNum := CT_RPC_ErrNum_InvalidData; + AErrorDesc := '"max" param must be greater than zero'; + exit; + end; + + if (LEnd<0) or (LEnd>=ASender.Node.Bank.SafeBox.BlocksCount) then begin + LEnd := ASender.Node.Bank.SafeBox.BlocksCount - 1; + end; + + // Declare return result (empty by default) + LOutput := AJSONResponse.GetAsArray('result'); + + // Search by PubKey (if provided) + If TPascalCoinJSONComp.CapturePubKey(AInputParams, '',LPubKey,LErrors) then begin + LSearchByPubkey := True; + end else LSearchByPubkey := False; + // + i := LStart; + while (Not ASender.Terminated) And (i < LEnd) do begin + LBlock := ASender.Node.Bank.SafeBox.GetBlockInfo(i); + if (_IsValidBlock(LBlock)) then begin + TPascalCoinJSONComp.FillBlockObject(i,ASender.Node,LOutput.GetAsObject(LOutput.Count)); + if LOutput.Count>=LMax then break; + end; + inc(i); + end; + Result := True; +end; + +initialization + TRPCProcess.RegisterProcessMethod('findblocks',TRPCFindBlocks.FindBlocks); +finalization + TRPCProcess.UnregisterProcessMethod('findblocks'); +end. diff --git a/src/core/UPCRPCOpData.pas b/src/core/UPCRPCOpData.pas index ad832f229..0f7c9c89a 100644 --- a/src/core/UPCRPCOpData.pas +++ b/src/core/UPCRPCOpData.pas @@ -27,7 +27,7 @@ interface Uses classes, SysUtils, UJSONFunctions, UAccounts, UBaseTypes, UOpTransaction, UConst, UPCDataTypes, {$IFNDEF FPC}System.Generics.Collections{$ELSE}Generics.Collections{$ENDIF}, - URPC, UCrypto, UWallet, UBlockChain, ULog; + URPC, UCrypto, UEPasa, UWallet, UBlockChain, ULog; Type @@ -132,7 +132,28 @@ class function TRPCOpData.OpData_FindOpDataOperations( end; end; - var LOpComp : TPCOperationsComp; + function DoAddOpData(AOpData : TOpData; var AFoundCounter : Integer; out AOperationResume : TOperationResume) : Boolean; + begin + Result := False; + // Search by filter: + if ((Not ASearchBySender) Or (ASearchSender = AOpData.Data.account_sender)) + and ((Not ASearchByTarget) Or (ASearchTarget = AOpData.Data.account_target)) + and ((Not ASearchByGUID) Or (EqualGUIDs(ASearchGUID,AOpData.Data.guid))) + and ((Not ASearchByDataSequence) Or (ASearchDataSequence = AOpData.Data.dataSequence)) + and ((Not ASearchByDataType) Or (ASearchDataType = AOpData.Data.dataType)) + then begin + if (AFoundCounter>=AStartOperation) And (AFoundCounter<=AEndOperation) then begin + If TPCOperation.OperationToOperationResume(ABlock_number,AOpData,False,AOpData.SignerAccount,AOperationResume) then begin + AOperationResume.Balance:=-1; + Result := True; + end; + end; + inc(AFoundCounter); + end; + end; // For LList... + + + var LOpComp, LMemPool : TPCOperationsComp; LOperation : TPCOperation; LOpData : TOpData; LOperationResume : TOperationResume; @@ -148,6 +169,39 @@ class function TRPCOpData.OpData_FindOpDataOperations( Try LList := TList.Create; try + // Mempool + if ABlock_number>=ASender.Node.Bank.BlocksCount then begin + // Search mempool + LMemPool := ASender.Node.LockMempoolRead; + try + LMemPool.OperationsHashTree.GetOperationsAffectingAccount(ASearchedAccount_number,LList); + LFound_in_block := False; + // Reverse order: + for i := LList.Count - 1 downto 0 do begin + LOperation := LMemPool.Operation[LList.Items[i]]; + if LOperation is TOpData then begin + // + LOpData := TOpData( LOperation ); + if DoAddOpData(LOpData,LFoundCounter,LOperationResume) then begin + LOperationResume.NOpInsideBlock:=LList.Items[i]; + LOperationResume.Block:=ASender.Node.Bank.BlocksCount; + AOperationsResumeList.Add(LOperationResume); + LFound_in_block := True; + end; + end; + end; // For LList... + If (Not LFound_in_block) And (AFirst_Block_Is_Unknown) then begin + ABlock_number := ASender.Node.Bank.BlocksCount - 1; + end else begin + ABlock_number := LMemPool.PreviousUpdatedBlocks.GetPreviousUpdatedBlock(ASearchedAccount_number,ASender.Node.Bank.BlocksCount - 1); + end; + finally + ASender.Node.UnlockMempoolRead; + end; + end; + + + LLast_block_number := ABlock_number+1; while (LLast_block_number>ABlock_number) And (AAct_depth>0) And (ABlock_number >= (ASearchedAccount_number DIV CT_AccountsPerBlock)) @@ -171,22 +225,11 @@ class function TRPCOpData.OpData_FindOpDataOperations( if LOperation is TOpData then begin // LOpData := TOpData( LOperation ); - // Search by filter: - if ((Not ASearchBySender) Or (ASearchSender = LOpData.Data.account_sender)) - and ((Not ASearchByTarget) Or (ASearchTarget = LOpData.Data.account_target)) - and ((Not ASearchByGUID) Or (EqualGUIDs(ASearchGUID,LOpData.Data.guid))) - and ((Not ASearchByDataSequence) Or (ASearchDataSequence = LOpData.Data.dataSequence)) - and ((Not ASearchByDataType) Or (ASearchDataType = LOpData.Data.dataType)) - then begin - if (LFoundCounter>=AStartOperation) And (LFoundCounter<=AEndOperation) then begin - If TPCOperation.OperationToOperationResume(ABlock_number,LOpData,False,LOpData.SignerAccount,LOperationResume) then begin - LOperationResume.Balance:=-1; - LOperationResume.NOpInsideBlock:=LList.Items[i]; - LOperationResume.Block:=ABlock_number; - AOperationsResumeList.Add(LOperationResume); - end; - end; - inc(LFoundCounter); + if DoAddOpData(LOpData,LFoundCounter,LOperationResume) then begin + LOperationResume.NOpInsideBlock:=LList.Items[i]; + LOperationResume.Block:=ABlock_number; + AOperationsResumeList.Add(LOperationResume); + LFound_in_block := True; end; end; end; // For LList... @@ -225,8 +268,12 @@ class function TRPCOpData.OpData_FindOpDataOperations( begin Result := False; - LSender := AInputParams.AsCardinal('sender',CT_MaxAccount); - LTarget := AInputParams.AsCardinal('target',CT_MaxAccount); + if Not TPascalCoinJSONComp.CaptureAccountNumber(AInputParams,'sender',ASender.Node,LSender,AErrorDesc) then begin + LSender := CT_MaxAccount; + end; + if Not TPascalCoinJSONComp.CaptureAccountNumber(AInputParams,'target',ASender.Node,LTarget,AErrorDesc) then begin + LTarget := CT_MaxAccount; + end; LSearchedAccount_number := CT_MaxAccount; LSearchBySender := (LSender>=0) And (LSender=0) And (LTarget=0 then begin - LStartBlock := AInputParams.AsInteger('startblock',100); + LStartBlock := AInputParams.AsInteger('startblock',ASender.Node.Bank.BlocksCount); LFirst_Block_Is_Unknown := True; end else begin if not ASender.RPCServer.GetMempoolAccount(LSearchedAccount_number,LAccount) then begin @@ -277,14 +324,13 @@ class function TRPCOpData.OpData_FindOpDataOperations( end; LFirst_Block_Is_Unknown := False; LStartBlock := LAccount.GetLastUpdatedBlock; - if LStartBlock>=ASender.Node.Bank.BlocksCount then Dec(LStartBlock); // If its updated on mempool, don't look the mempool end; LOperationsResumeList := TOperationsResumeList.Create; try DoFindFromBlock(LStartBlock, LSearchedAccount_number, - LStartOperation, LStartOperation + LMaxOperations, + LStartOperation, LStartOperation + LMaxOperations - 1, LMaxDepth, LFirst_Block_Is_Unknown, LSearchBySender, LSender, LSearchByTarget, LTarget, @@ -297,7 +343,9 @@ class function TRPCOpData.OpData_FindOpDataOperations( LResultArray := AJSONResponse.GetAsArray('result'); for i := 0 to LOperationsResumeList.Count-1 do begin - TPascalCoinJSONComp.FillOperationObject(LOperationsResumeList.OperationResume[i],ASender.Node.Bank.BlocksCount,LResultArray.GetAsObject( LResultArray.Count )); + TPascalCoinJSONComp.FillOperationObject(LOperationsResumeList.Items[i],ASender.Node.Bank.BlocksCount, + ASender.Node,ASender.RPCServer.WalletKeys,ASender.RPCServer.PayloadPasswords, + LResultArray.GetAsObject( LResultArray.Count )); end; Result := True; finally @@ -313,28 +361,46 @@ class function TRPCOpData.OpData_SendOpData(const ASender: TRPCProcess; LOperationPayload : TOperationPayload; LErrors : String; LOPR : TOperationResume; + LTargetEPASA : TEPasa; + LTargetKey : TAccountKey; + LTargetRequiresPurchase : Boolean; begin Result := False; - if Not ASender.RPCServer.GetMempoolAccount(AInputParams.AsInteger('sender',CT_MaxAccount),LSender) then begin + ASender.Node.OperationSequenceLock.Acquire; // Use lock to prevent N_Operation race-condition on concurrent operations + try + + if Not TPascalCoinJSONComp.CaptureMempoolAccount(AInputParams,'sender',ASender.Node,LSender,AErrorDesc) then begin AErrorNum := CT_RPC_ErrNum_InvalidAccount; - AErrorDesc := 'Invalid "sender"'; Exit; end; if (AInputParams.IndexOfName('signer')>=0) then begin - if Not ASender.RPCServer.GetMempoolAccount(AInputParams.AsInteger('signer',CT_MaxAccount),LSigner) then begin + if Not TPascalCoinJSONComp.CaptureMempoolAccount(AInputParams,'signer',ASender.Node,LSigner,AErrorDesc) then begin AErrorNum := CT_RPC_ErrNum_InvalidAccount; - AErrorDesc := 'Invalid "signer"'; Exit; end; end else LSigner := LSender; // If no "signer" param, then use "sender" as signer by default - if Not ASender.RPCServer.GetMempoolAccount(AInputParams.AsInteger('target',CT_MaxAccount),LTarget) then begin + + LTarget := CT_Account_NUL; + if Not TPascalCoinJSONComp.CaptureEPASA(AInputParams,'target',ASender.Node, LTargetEPASA, LTarget.account, LTargetKey, LTargetRequiresPurchase, AErrorDesc) then begin AErrorNum := CT_RPC_ErrNum_InvalidAccount; - AErrorDesc := 'Invalid "target"'; - Exit; + Exit(False); + end else begin + LTarget := ASender.Node.GetMempoolAccount(LTarget.account); + if (LTargetRequiresPurchase) then begin + AErrorNum := CT_RPC_ErrNum_InvalidEPASA; + AErrorDesc := 'PayToKey not available as a EPasa format on this method'; + Exit(False); + end; + end; + if Not TPascalCoinJSONComp.OverridePayloadParams(AInputParams, LTargetEPASA) then begin + AErrorNum := CT_RPC_ErrNum_AmbiguousPayload; + AErrorDesc := 'Target EPASA payload conflicts with argument payload.'; + Exit(False); end; if not TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload( TCrypto.HexaToRaw(AInputParams.AsString('payload','')), + [ptNonDeterministic], AInputParams.AsString('payload_method','none'), AInputParams.AsString('pwd',''), LSender.accountInfo.accountKey, @@ -361,11 +427,17 @@ class function TRPCOpData.OpData_SendOpData(const ASender: TRPCProcess; Exit; end; TPCOperation.OperationToOperationResume(0,LOpData,False,LSender.account,LOPR); - TPascalCoinJSONComp.FillOperationObject(LOPR,ASender.Node.Bank.BlocksCount,AJSONResponse.GetAsObject('result')); + TPascalCoinJSONComp.FillOperationObject(LOPR,ASender.Node.Bank.BlocksCount, + ASender.Node,ASender.RPCServer.WalletKeys,ASender.RPCServer.PayloadPasswords, + AJSONResponse.GetAsObject('result')); Result := True; finally LOpData.free; end; + + finally + ASender.Node.OperationSequenceLock.Release; + end; end; class function TRPCOpData.OpData_SignOpData(const ASender: TRPCProcess; @@ -409,6 +481,7 @@ class function TRPCOpData.OpData_SignOpData(const ASender: TRPCProcess; if not TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload( TCrypto.HexaToRaw(AInputParams.AsString('payload','')), + [ptNonDeterministic], AInputParams.AsString('payload_method','dest'), AInputParams.AsString('pwd',''), LPayloadPubkey, diff --git a/src/core/UPCRPCSend.pas b/src/core/UPCRPCSend.pas new file mode 100644 index 000000000..51b832c43 --- /dev/null +++ b/src/core/UPCRPCSend.pas @@ -0,0 +1,362 @@ +unit UPCRPCSend; + +{ Copyright (c) 2021 by PascalCoin developers, orignal code by Albert Molina + + Distributed under the MIT software license, see the accompanying file LICENSE + or visit http://www.opensource.org/licenses/mit-license.php. + + This unit is a part of the PascalCoin Project, an infinitely scalable + cryptocurrency. Find us here: + Web: https://www.pascalcoin.org + Source: https://github.com/PascalCoin/PascalCoin + + If you like it, consider a donation using Bitcoin: + 16K3HCZRhFUtM8GdWRcfKeaa6KsuyxZaYk + + THIS LICENSE HEADER MUST NOT BE REMOVED. +} + +{$IFDEF FPC} + {$MODE Delphi} +{$ENDIF} + +interface + +{$I ./../config.inc} + +Uses classes, SysUtils, + UJSONFunctions, UAccounts, UBaseTypes, UOpTransaction, UConst, + {$IFNDEF FPC}System.Generics.Collections{$ELSE}Generics.Collections{$ENDIF}, + URPC, UCrypto, UWallet, UBlockChain, UEPasa, ULog, UPCOrderedLists, UPCDataTypes; + + +Type + TRPCSend = Class + private + public + class function CreateOperationTransaction(const ARPCProcess : TRPCProcess; ACurrentProtocol : Word; ASender, ATarget : TAccount; AAmount, AFee : UInt64; const ARawPayload : TRawBytes; const APayloadMethod, AEncodePwd : String; const APayloadType : TPayloadType; var AErrorNum: Integer; var AErrorDesc: String) : TOpTransaction; + class function CreatePayToKeyTransaction(const ARPCProcess : TRPCProcess; ACurrentProtocol: Word; ASender, APurchaseAccount : TAccount; const ANewKey : TAccountKey; AAmount, AFee: UInt64; const ARawPayload: TRawBytes; const APayloadMethod, AEncodePwd: String; const APayloadType : TPayloadType; var AErrorNum: Integer; var AErrorDesc: String) : TOpTransaction; + class function SendTo(const ASender : TRPCProcess; const AMethodName : String; AInputParams, AJSONResponse : TPCJSONObject; var AErrorNum : Integer; var AErrorDesc : String) : Boolean; + class function SignSendTo(const ASender : TRPCProcess; const AMethodName : String; AInputParams, AJSONResponse : TPCJSONObject; var AErrorNum : Integer; var AErrorDesc : String) : Boolean; + End; + +implementation + +{ TRPCSend } + +class function TRPCSend.CreateOperationTransaction(const ARPCProcess : TRPCProcess; ACurrentProtocol : Word; ASender, ATarget : TAccount; AAmount, AFee : UInt64; const ARawPayload : TRawBytes; const APayloadMethod, AEncodePwd : String; const APayloadType : TPayloadType; var AErrorNum: Integer; var AErrorDesc: String): TOpTransaction; +var + LOpPayload : TOperationPayload; + LPrivateKey : TECPrivateKey; +Begin + Result := Nil; + if Not ARPCProcess.RPCServer.CheckAndGetPrivateKeyInWallet(ASender.accountInfo.accountKey, LPrivateKey, AErrorNum, AErrorDesc) then Exit(Nil); + if Not TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload(ARawPayload, APayloadType, APayloadMethod, AEncodePwd, ASender.accountInfo.accountKey, ATarget.accountInfo.accountKey, LOpPayload, AErrorNum, AErrorDesc) then Exit(Nil); + Result := TOpTransaction.CreateTransaction(ACurrentProtocol, ASender.account, ASender.n_operation+1, ATarget.account, LPrivateKey, AAmount, AFee, LOpPayload); + if Not Result.HasValidSignature then begin + FreeAndNil(Result); + AErrorNum:=CT_RPC_ErrNum_InternalError; + AErrorDesc:='Invalid signature'; + exit; + end; +end; + +class function TRPCSend.CreatePayToKeyTransaction(const ARPCProcess : TRPCProcess; ACurrentProtocol: Word; ASender, APurchaseAccount : TAccount; const ANewKey : TAccountKey; AAmount, AFee: UInt64; const ARawPayload: TRawBytes; const APayloadMethod, AEncodePwd: String; const APayloadType : TPayloadType; var AErrorNum: Integer; var AErrorDesc: String): TOpTransaction; +Var + LOpPayload : TOperationPayload; + LPrivateKey : TECPrivateKey; +Begin + Result := Nil; + if (AAmount < APurchaseAccount.accountInfo.price) then begin + AErrorNum := CT_RPC_ErrNum_InternalError; + AErrorDesc := 'Insufficient funds to purchase account for pay-to-key transaction'; + Exit(Nil); + end; + + if Not ARPCProcess.RPCServer.CheckAndGetPrivateKeyInWallet(ASender.accountInfo.accountKey, LPrivateKey, AErrorNum, AErrorDesc) then Exit(Nil); + if Not TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload(ARawPayload, APayloadType, APayloadMethod, AEncodePwd, ASender.accountInfo.accountKey, ANewKey, LOpPayload, AErrorNum, AErrorDesc) then Exit(Nil); + Result := TOpBuyAccount.CreateBuy(ACurrentProtocol, ASender.account, ASender.n_operation + 1, APurchaseAccount.account, APurchaseAccount.accountInfo.account_to_pay, APurchaseAccount.accountInfo.price, AAmount, AFee, ANewKey, LPrivateKey, LOpPayload); + if Not Result.HasValidSignature then begin + FreeAndNil(Result); + AErrorNum:=CT_RPC_ErrNum_InternalError; + AErrorDesc:='Invalid signature'; + exit; + end; +end; + +class function TRPCSend.SendTo(const ASender: TRPCProcess; + const AMethodName: String; AInputParams, AJSONResponse: TPCJSONObject; + var AErrorNum: Integer; var AErrorDesc: String): Boolean; + +{ JSON-RPC "sendto" + +### sendto +Executes a transaction operation from "sender" to "target" + +##### Params +- `sender` : Integer - Sender account +- `target` : Integer - Destination account +- `amount` : PASCURRENCY - Coins to be transferred +- `fee` : PASCURRENCY - Fee of the operation +- `payload` : HEXASTRING - Payload "item" that will be included in this operation +- `payload_method` : String - Encode type of the item payload + - `none` : Not encoded. Will be visible for everybody + - `dest` (default) : Using Public key of "target" account. Only "target" will be able to decrypt this payload + - `sender` : Using sender Public key. Only "sender" will be able to decrypt this payload + - `aes` : Encrypted data using `pwd` param +- `pwd` : String - Used to encrypt payload with `aes` as a `payload_method`. If none equals to empty password + +##### Result +If transaction is successfull will return a JSON Object in "[Operation Object]" format. +Otherwise, will return a JSON-RPC error code with description + +} + +var + LSender, LTarget : TAccount; + LTargetEPASA : TEPasa; + LTargetKey : TAccountKey; + LTargetRequiresPurchase : Boolean; + LAmount, LFee : UInt64; + LRawPayload : TRawBytes; + LPayload_method, LEncodePwd, LErrors : String; + LOpt : TOpTransaction; + LOpr : TOperationResume; + LTmpTarget : Cardinal; +begin + // Get Parameters + Result := False; + + if (Not ASender.RPCServer.AllowUsePrivateKeys) then begin + // Protection when server is locked to avoid private keys call + AErrorNum := CT_RPC_ErrNum_NotAllowedCall; + Exit; + end; + If Not ASender.RPCServer.WalletKeys.IsValidPassword then begin + AErrorNum := CT_RPC_ErrNum_WalletPasswordProtected; + AErrorDesc := 'Wallet is password protected. Unlock first'; + exit; + end; + + // Do new operation + ASender.Node.OperationSequenceLock.Acquire; // Use lock to prevent N_Operation race-condition on concurrent sends + try + + if Not TPascalCoinJSONComp.CaptureAccountNumber(AInputParams,'sender',ASender.Node,LSender.account,AErrorDesc) then begin + AErrorNum := CT_RPC_ErrNum_InvalidAccount; + Exit; + end else LSender := ASender.Node.GetMempoolAccount(LSender.account); + + LTarget := CT_Account_NUL; + if Not TPascalCoinJSONComp.CaptureEPASA(AInputParams,'target',ASender.Node, LTargetEPASA, LTarget.account, LTargetKey, LTargetRequiresPurchase, AErrorDesc) then begin + AErrorNum := CT_RPC_ErrNum_InvalidAccount; + Exit; + end else LTarget := ASender.Node.GetMempoolAccount(LTarget.account); + + if (LTargetEPASA.PayloadType.ToProtocolValue=0) and ((LTarget.account=0) or (LTarget.account=LSender.account)) then begin + // Try to decode from payload + // String payload: + if TPascalCoinJSONComp.CaptureEPASA(AInputParams,'payload',ASender.Node, LTargetEPASA, LTmpTarget, LTargetKey, LTargetRequiresPurchase, AErrorDesc) then begin + if LTargetRequiresPurchase then begin + AInputParams.GetAsVariant('payload').Value := LTargetEPASA.GetRawPayloadBytes.ToHexaString; + LTarget := ASender.Node.GetMempoolAccount(LTmpTarget); + end; + end; + if (Not LTargetRequiresPurchase) then begin + // HEXASTRING payload: + if (TPascalCoinJSONComp.CaptureEPASA(TCrypto.HexaToRaw(AInputParams.AsString('payload','')).ToPrintable, ASender.Node, LTargetEPASA, LTmpTarget, LTargetKey, LTargetRequiresPurchase, AErrorDesc)) then begin + if LTargetRequiresPurchase then begin + AInputParams.GetAsVariant('payload').Value := LTargetEPASA.GetRawPayloadBytes.ToHexaString; + LTarget := ASender.Node.GetMempoolAccount(LTmpTarget); + end; + end; + end; + end; + + if Not TPascalCoinJSONComp.OverridePayloadParams(AInputParams, LTargetEPASA) then begin + AErrorNum := CT_RPC_ErrNum_AmbiguousPayload; + AErrorDesc := 'Target EPASA payload conflicts with argument payload.'; + Exit; + end; + + LAmount := TPascalCoinJSONComp.ToPascalCoins(AInputParams.AsDouble('amount',0)); + LFee := TPascalCoinJSONComp.ToPascalCoins(AInputParams.AsDouble('fee',0)); + LRawPayload := TCrypto.HexaToRaw(AInputParams.AsString('payload','')); + LPayload_method := AInputParams.AsString('payload_method','dest'); + LEncodePwd := AInputParams.AsString('pwd',''); + + // Create operation + if LTargetRequiresPurchase then begin + // Buy Account + LOpt := CreatePayToKeyTransaction( + ASender, ASender.Node.Bank.SafeBox.CurrentProtocol, + LSender, LTarget, LTargetKey, LAmount, LFee, + LRawPayload, LPayload_method, LEncodePwd, LTargetEPASA.PayloadType, + AErrorNum, AErrorDesc); + end else begin + // Transaction + LOpt := CreateOperationTransaction( + ASender, ASender.Node.Bank.SafeBox.CurrentProtocol, + LSender, LTarget, LAmount, LFee, + LRawPayload, LPayload_method, LEncodePwd, LTargetEPASA.PayloadType, + AErrorNum, AErrorDesc); + end; + // Execute operation + if Assigned(LOpt) then + try + If not ASender.Node.AddOperation(Nil,LOpt,LErrors) then begin + AErrorDesc := 'Error adding operation: '+LErrors; + AErrorNum := CT_RPC_ErrNum_InvalidOperation; + Exit; + end; + TPCOperation.OperationToOperationResume(0,LOpt,False,LSender.account,LOpr); + TPascalCoinJSONComp.FillOperationObject(LOpr,ASender.Node.Bank.BlocksCount, + ASender.Node,ASender.RPCServer.WalletKeys,ASender.RPCServer.PayloadPasswords, + AJSONResponse.GetAsObject('result')); + Result := true; + finally + LOpt.free; + end; + finally + ASender.Node.OperationSequenceLock.Release; + end; +end; + +class function TRPCSend.SignSendTo(const ASender: TRPCProcess; + const AMethodName: String; AInputParams, AJSONResponse: TPCJSONObject; + var AErrorNum: Integer; var AErrorDesc: String): Boolean; + +{ JSON-RPC "signsendto" + +### signsendto + +Creates and signs a "Send to" operation without checking information and without transfering to the network. +It's usefull for "cold wallets" that are off-line (not synchronized with the network) and only holds private keys + +##### Params +- `rawoperations` : HEXASTRING (optional) - If we want to add a sign operation with other previous operations, here we must put previous `rawoperations` result +- `sender` : Integer - Sender account +- `target` : Integer - Target account +- `sender_enc_pubkey` or `sender_b58_pubkey` : HEXASTRING - Public key (in encoded format or b58 format) of the sender account +- `target_enc_pubkey` or `target_b58_pubkey` : HEXASTRING - Public key (in encoded format or b58 format) of the target account +- `last_n_operation` : Last value of `n_operation` obtained with an [Account object](#account-object), for example when called to [getaccount](#getaccount) +- `amount`,`fee`,`payload`,`payload_method`,`pwd` : Same values that calling [sendto](#sendto) + +##### Result + +Wallet must be unlocked and sender private key (searched with provided public key) must be in wallet. +No other checks are made (no checks for valid target, valid n_operation, valid amount or fee ...) +Returns a [Raw Operations Object](#raw-operations-object) + +} +var + LSender, LTarget : TAccount; + LTargetEPASA : TEPasa; + LTargetKey : TAccountKey; + LTargetRequiresPurchase : Boolean; + LHexaStringOperationsHashTree, LErrors : String; + LProtocol : Integer; + LOperationsHashTree : TOperationsHashTree; + LOpt : TOpTransaction; + LOpr : TOperationResume; + LRawPayload : TRawBytes; + LPayload_method, LEncodePwd : String; + LAmount, LFee : UInt64; +begin + Result := False; + + if (Not ASender.RPCServer.AllowUsePrivateKeys) then begin + // Protection when server is locked to avoid private keys call + AErrorNum := CT_RPC_ErrNum_NotAllowedCall; + Exit; + end; + If Not ASender.RPCServer.WalletKeys.IsValidPassword then begin + AErrorNum := CT_RPC_ErrNum_WalletPasswordProtected; + AErrorDesc := 'Wallet is password protected. Unlock first'; + exit; + end; + if Not TPascalCoinJSONComp.CaptureAccountNumber(AInputParams,'sender',Nil,LSender.account,AErrorDesc) then begin + AErrorNum := CT_RPC_ErrNum_InvalidAccount; + Exit; + end; + if Not TPascalCoinJSONComp.CaptureNOperation(AInputParams,'last_n_operation',Nil,LSender.n_operation,AErrorDesc) then begin + AErrorNum := CT_RPC_ErrNum_InvalidAccount; + Exit; + end; + + if Not TPascalCoinJSONComp.CaptureEPASA(AInputParams,'target', nil, LTargetEPASA, LTarget.account, LTargetKey, LTargetRequiresPurchase, AErrorDesc) then begin + AErrorNum := CT_RPC_ErrNum_InvalidEPASA; + Exit; + end; + + if Not TPascalCoinJSONComp.OverridePayloadParams(AInputParams, LTargetEPASA) then begin + AErrorNum := CT_RPC_ErrNum_AmbiguousPayload; + Exit; + end; + + If Not TPascalCoinJSONComp.CapturePubKey(AInputParams,'sender_',LSender.accountInfo.accountKey,AErrorDesc) then begin + AErrorNum := CT_RPC_ErrNum_InvalidPubKey; + exit; + end; + + If Not TPascalCoinJSONComp.CapturePubKey(AInputParams,'target_',LTarget.accountInfo.accountKey,AErrorDesc) then begin + AErrorNum := CT_RPC_ErrNum_InvalidPubKey; + exit; + end; + + LAmount := TPascalCoinJSONComp.ToPascalCoins(AInputParams.AsDouble('amount',0)); + LFee := TPascalCoinJSONComp.ToPascalCoins(AInputParams.AsDouble('fee',0)); + LRawPayload := TCrypto.HexaToRaw(AInputParams.AsString('payload','')); + LPayload_method := AInputParams.AsString('payload_method','dest'); + LEncodePwd := AInputParams.AsString('pwd',''); + + LHexaStringOperationsHashTree := AInputParams.AsString('rawoperations',''); + LProtocol := AInputParams.AsCardinal('protocol',CT_BUILD_PROTOCOL); + + if Not TPascalCoinJSONComp.HexaStringToOperationsHashTree(LHexaStringOperationsHashTree,LProtocol,LOperationsHashTree,LErrors) then begin + AErrorNum:=CT_RPC_ErrNum_InvalidData; + AErrorDesc:= 'Error decoding param "rawoperations": '+LErrors; + Exit; + end; + + + Try + // Create operation + if LTargetRequiresPurchase then begin + // Buy Account + LOpt := CreatePayToKeyTransaction( + ASender, ASender.Node.Bank.SafeBox.CurrentProtocol, + LSender, LTarget, LTargetKey, LAmount, LFee, + LRawPayload, LPayload_method, LEncodePwd, LTargetEPASA.PayloadType, + AErrorNum, AErrorDesc); + end else begin + // Transaction + LOpt := CreateOperationTransaction( + ASender, ASender.Node.Bank.SafeBox.CurrentProtocol, + LSender, LTarget, LAmount, LFee, + LRawPayload, LPayload_method, LEncodePwd, LTargetEPASA.PayloadType, + AErrorNum, AErrorDesc); + end; + + // Execute operation + if Assigned(LOpt) then + try + LOperationsHashTree.AddOperationToHashTree(LOpt); + TPascalCoinJSONComp.FillOperationsHashTreeObject(LOperationsHashTree,AJSONResponse.GetAsObject('result')); + Result := true; + finally + LOpt.Free; + end; + + Finally + LOperationsHashTree.Free; + End; +end; + +initialization + TRPCProcess.RegisterProcessMethod('signsendto',TRPCSend.SignSendTo); + TRPCProcess.RegisterProcessMethod('sendto',TRPCSend.SendTo); +finalization + TRPCProcess.UnregisterProcessMethod('signsendto'); + TRPCProcess.UnregisterProcessMethod('sendto'); +end. diff --git a/src/core/UPCSafeBoxRootHash.pas b/src/core/UPCSafeBoxRootHash.pas index f12477739..c48da7d05 100644 --- a/src/core/UPCSafeBoxRootHash.pas +++ b/src/core/UPCSafeBoxRootHash.pas @@ -428,7 +428,7 @@ procedure TBytesBuffer32Safebox.NotifyUpdated(AStartPos, ACountBytes: Integer); FreeAndNil(FNextLevelBytesBuffer); end else if Not Assigned(FNextLevelBytesBuffer) then begin // First time must "Redo" - RedoNextLevelsForMerkleRootHash; + // "RedoNextLevelsForMerkleRootHash" will be called when need to access next level value end else begin LLevelItemIndex := AStartPos DIV 32; LLevelItemsCount := Self.Length DIV 32; diff --git a/src/core/UPCTNetDataExtraMessages.pas b/src/core/UPCTNetDataExtraMessages.pas index ac535179b..db8835ff3 100644 --- a/src/core/UPCTNetDataExtraMessages.pas +++ b/src/core/UPCTNetDataExtraMessages.pas @@ -33,7 +33,7 @@ interface {$ENDIF} Uses Classes, UThread, UAccounts, UBlockChain, UNetProtocol, SysUtils, UNode, - UWallet, UNetProtection, UPCDataTypes, + UWallet, UNetProtection, UPCDataTypes, UPCAccountsOrdenations, UOrderedList, {$IFNDEF FPC}System.Generics.Collections{$ELSE}Generics.Collections{$ENDIF}; type @@ -42,9 +42,9 @@ interface FNode : TNode; FNetData : TNetData; FWalletKeys : TWalletKeysExt; - function DoAskForFreeAccount(ANewPubliKey : TAccountKey) : Integer; - {$IFDEF TESTNET} + function DoAskForFreeAccount(const ANewPubliKey : TAccountKey; const AMessage : String) : Integer; procedure DoGiveMeAnAccount(ANetData : TNetData; ASenderConnection : TNetConnection; const AHeaderData : TNetHeaderData; AReceivedData : TStream; AResponseData : TStream); + {$IFDEF TESTNET} procedure DoGiveMeMoney(ANetData : TNetData; ASenderConnection : TNetConnection; const AHeaderData : TNetHeaderData; AReceivedData : TStream; AResponseData : TStream); {$ENDIF} procedure OnTNetDataProcessReservedAreaMessage(ANetData : TNetData; ASenderConnection : TNetConnection; const AHeaderData : TNetHeaderData; AReceivedData : TStream; AResponseData : TStream); @@ -54,7 +54,7 @@ interface class function InitNetDataExtraMessages(ANode : TNode; ANetData : TNetData; AWalletKeys : TWalletKeysExt) : TPCTNetDataExtraMessages; constructor Create(ANode : TNode; ANetData : TNetData; AWalletKeys : TWalletKeysExt); destructor Destroy; override; - class function AskForFreeAccount(ANewPubliKey : TAccountKey) : Integer; + class function AskForFreeAccount(const ANewPubliKey : TAccountKey; const AMessage : String): Integer; End; const @@ -63,16 +63,16 @@ interface implementation -Uses UOpTransaction, UBaseTypes, ULog; +Uses UOpTransaction, UBaseTypes, ULog, UPCAbstractMemAccountKeys; var _PCTNetDataExtraMessages : TPCTNetDataExtraMessages = Nil; { TPCTNetDataExtraMessages } -class function TPCTNetDataExtraMessages.AskForFreeAccount(ANewPubliKey : TAccountKey): Integer; +class function TPCTNetDataExtraMessages.AskForFreeAccount(const ANewPubliKey : TAccountKey; const AMessage : String): Integer; begin if Assigned(_PCTNetDataExtraMessages) then begin - Result := _PCTNetDataExtraMessages.DoAskForFreeAccount(ANewPubliKey); + Result := _PCTNetDataExtraMessages.DoAskForFreeAccount(ANewPubliKey,AMessage); end else Result := 0; end; @@ -98,15 +98,18 @@ destructor TPCTNetDataExtraMessages.Destroy; inherited; end; -function TPCTNetDataExtraMessages.DoAskForFreeAccount(ANewPubliKey : TAccountKey): Integer; +function TPCTNetDataExtraMessages.DoAskForFreeAccount(const ANewPubliKey : TAccountKey; const AMessage : String): Integer; var i : Integer; LNetConnection : TNetConnection; LRequestStream : TMemoryStream; + Lraw : TRawBytes; begin Result := 0; LRequestStream := TMemoryStream.Create; try TStreamOp.WriteAccountKey(LRequestStream,ANewPubliKey); + Lraw.FromString(AMessage); + TStreamOp.WriteAnsiString(LRequestStream,Lraw); LRequestStream.position := 0; for i := 0 to FNetData.ConnectionsCountAll-1 do begin LNetConnection := FNetData.Connection(i); @@ -126,42 +129,76 @@ function TPCTNetDataExtraMessages.DoAskForFreeAccount(ANewPubliKey : TAccountKey end; end; -{$IFDEF TESTNET} procedure TPCTNetDataExtraMessages.DoGiveMeAnAccount(ANetData: TNetData; ASenderConnection: TNetConnection; const AHeaderData: TNetHeaderData; AReceivedData, AResponseData: TStream); var LSenderPublicKey : TAccountKey; - LIndexKey : Integer; + LIndexKey,LOnSafebox,LOnMempool : Integer; LAccount : TAccount; - LOpChangeKey : TOpChangeKey; + LOpRecoverFounds : TOpRecoverFounds; LPayload : TOperationPayload; - LErrors : String; + LErrors, LSenderMessage : String; LWord : Word; + LAccOrd : TAccountsOrderedByUpdatedBlock; + LRaw : TRawBytes; begin if Not (AHeaderData.header_type in [ntp_request,ntp_autosend]) then Exit; // Nothing to do // Protection to allow spam - if ANetData.IpInfos.Update_And_ReachesLimits(ASenderConnection.Client.RemoteHost,'EXTRA','GIVE_ME_AN_ACCOUNT',AHeaderData.buffer_data_length,True, + if ANetData.IpInfos.Update_And_ReachesLimits(ASenderConnection.Client.RemoteHost,'EXTRA','GIVE_ME_AN_ACCOUNT', + AHeaderData.buffer_data_length,True, TArray.Create(TLimitLifetime.Create(300,2,20000))) then Exit; // Read info if TStreamOp.ReadAccountKey(AReceivedData,LSenderPublicKey)<=0 then Exit; - if Not RandomGetWalletKeysAccount(FNode.Bank.SafeBox,FWalletKeys,0,10000,LIndexKey,LAccount) then Exit; - // Send - LPayload := CT_TOperationPayload_NUL; - LPayload.payload_raw.FromString('Free Account to '+ASenderConnection.Client.RemoteHost); - LOpChangeKey := TOpChangeKey.Create(FNode.Bank.SafeBox.CurrentProtocol,LAccount.account,LAccount.n_operation+1, - LAccount.account,FWalletKeys.Key[LIndexKey].PrivateKey,LSenderPublicKey,0,LPayload); + if TStreamOp.ReadString(AReceivedData,LSenderMessage)<0 then Exit; + + if FNode.GetAccountsAvailableByPublicKey(LSenderPublicKey,LOnSafebox,LOnMempool)>0 then begin + // Exit; + TLog.NewLog(ltdebug,ClassName,Format('Not Sending to %s because PublicKey %s is used %d and mempool %d',[ASenderConnection.Client.RemoteHost, + TAccountComp.AccountPublicKeyExport(LSenderPublicKey),LOnSafebox,LOnMempool])); + Lword := 0; + AResponseData.Write(Lword,2); + Exit; + end; + + LAccOrd := FNode.Bank.SafeBox.AccountsOrderedByUpdatedBlock; + if Assigned(LAccOrd) then begin + LAccount := CT_Account_NUL; + if LAccOrd.First(LIndexKey) then begin + LAccount := FNode.GetMempoolAccount(LIndexKey); + while (Random(100)>0) or (LAccount.balance>0) or (Length(LAccount.name)>0) do begin + if Not LAccOrd.Next(LIndexKey) then Exit; + LAccount := FNode.GetMempoolAccount(LIndexKey); + end; + end; + // + end; + + TLog.NewLog(ltdebug,ClassName,Format('Sending to %s Account %s PublicKey %s', + [ASenderConnection.Client.RemoteHost, + TAccountComp.AccountNumberToAccountTxtNumber(LAccount.account), + TAccountComp.AccountPublicKeyExport(LSenderPublicKey)])); + + LOpRecoverFounds := TOpRecoverFounds.Create(FNode.Bank.SafeBox.CurrentProtocol,LAccount.account,LAccount.n_operation+1,0,LSenderPublicKey); try - FNode.AddOperation(Nil,LOpChangeKey,LErrors); + if FNode.AddOperation(Nil,LOpRecoverFounds,LErrors) then begin + Lword := 1; + AResponseData.Write(Lword,2); + LRaw := LOpRecoverFounds.OperationHashValid(LOpRecoverFounds,0); + TStreamOp.WriteAnsiString(AResponseData,LRaw); + end else begin + Lword := 0; + AResponseData.Write(Lword,2); + TLog.NewLog(ltdebug,ClassName,Format('Error %s sending to %s Account %s PublicKey %s', + [LErrors, ASenderConnection.Client.RemoteHost, + TAccountComp.AccountNumberToAccountTxtNumber(LAccount.account), + TAccountComp.AccountPublicKeyExport(LSenderPublicKey)])); + end; finally - LOpChangeKey.Free; + LOpRecoverFounds.Free; end; - // Response - TStreamOp.WriteAccountKey(AResponseData,LSenderPublicKey); - LWord := 1; - AResponseData.Write(LWord,SizeOf(LWord)); - AResponseData.Write(LAccount.account,SizeOf(LAccount.account)); end; +{$IFDEF TESTNET} procedure TPCTNetDataExtraMessages.DoGiveMeMoney(ANetData: TNetData; ASenderConnection: TNetConnection; const AHeaderData: TNetHeaderData; AReceivedData, AResponseData: TStream); @@ -207,6 +244,7 @@ class function TPCTNetDataExtraMessages.InitNetDataExtraMessages(ANode: TNode; ANetData: TNetData; AWalletKeys: TWalletKeysExt): TPCTNetDataExtraMessages; begin if not Assigned(_PCTNetDataExtraMessages) then begin + TLog.NewLog(ltinfo,ClassName,'InitNetDataExtraMessages'); _PCTNetDataExtraMessages := TPCTNetDataExtraMessages.Create(ANode,ANetData,AWalletKeys); end; Result := _PCTNetDataExtraMessages; @@ -215,12 +253,12 @@ class function TPCTNetDataExtraMessages.InitNetDataExtraMessages(ANode: TNode; procedure TPCTNetDataExtraMessages.OnTNetDataProcessReservedAreaMessage(ANetData : TNetData; ASenderConnection : TNetConnection; const AHeaderData : TNetHeaderData; AReceivedData : TStream; AResponseData : TStream); begin TLog.NewLog(ltdebug,ClassName,Format('Received extra message from %s Operation:%d',[ASenderConnection.ClientRemoteAddr,AHeaderData.operation])); - {$IFDEF TESTNET} case AHeaderData.operation of CT_NetProtocol_Extra_NetOp_GIVE_ME_AN_ACCOUNT : DoGiveMeAnAccount(ANetData,ASenderConnection,AHeaderData,AReceivedData,AResponseData); + {$IFDEF TESTNET} CT_NetProtocol_Extra_NetOp_GIVE_ME_MONEY : DoGiveMeMoney(ANetData,ASenderConnection,AHeaderData,AReceivedData,AResponseData); + {$ENDIF} end; - {$ENDIF} end; function TPCTNetDataExtraMessages.RandomGetWalletKeysAccount( diff --git a/src/core/UPCTemporalAbstractMem.pas b/src/core/UPCTemporalAbstractMem.pas new file mode 100644 index 000000000..1d850ec31 --- /dev/null +++ b/src/core/UPCTemporalAbstractMem.pas @@ -0,0 +1,78 @@ +unit UPCTemporalAbstractMem; + +{ Copyright (c) 2016-2021 by Albert Molina + + Distributed under the MIT software license, see the accompanying file LICENSE + or visit http://www.opensource.org/licenses/mit-license.php. + + This unit is a part of the PascalCoin Project, an infinitely scalable + cryptocurrency. Find us here: + Web: https://www.pascalcoin.org + Source: https://github.com/PascalCoin/PascalCoin + + If you like it, consider a donation using Bitcoin: + 16K3HCZRhFUtM8GdWRcfKeaa6KsuyxZaYk + + THIS LICENSE HEADER MUST NOT BE REMOVED. +} + +{$IFDEF FPC} + {$MODE Delphi} +{$ENDIF} + +interface + +{$I ./../config.inc} + +uses + Classes, {$IFnDEF FPC}Windows,{$ENDIF} SysUtils, + UPCTemporalFileStream, + UAbstractMem, UFileMem; + +Type + { TPCTemporalAbstractMem } + + TPCTemporalAbstractMem = Class({$IFDEF USE_ABSTRACTMEM}TFileMem{$ELSE}TMem{$ENDIF}) + private + {$IFDEF USE_ABSTRACTMEM} + FTemporalFileName : String; + {$ENDIF} + protected + public + Constructor Create; reintroduce; + Destructor Destroy; override; + End; + +implementation + +Uses {$IFDEF HIGHLOG}ULog, {$ENDIF} UNode; + +{ TPCTemporalFileStream } + +constructor TPCTemporalAbstractMem.Create; +begin + {$IFDEF USE_ABSTRACTMEM} + FTemporalFileName := TPCTemporalFileStream.GetTemporalFileName('ABSTRACTMEM'); + {$IFDEF HIGHLOG}TLog.NewLog(ltdebug,ClassName,Format('Creating a new Temporal AbstractMem file: %s',[FTemporalFileName]));{$ENDIF} + inherited Create(FTemporalFileName,False); + {$ELSE} + inherited Create(0,False); + {$ENDIF} +end; + +destructor TPCTemporalAbstractMem.Destroy; +{$IFDEF HIGHLOG}var LSize : Int64;{$ENDIF} +begin + {$IFDEF HIGHLOG} + LSize := {$IFDEF USE_ABSTRACTMEM}NextAvailablePos{$ELSE}Size{$ENDIF}; + {$ENDIF} + inherited Destroy; + {$IFDEF USE_ABSTRACTMEM} + if FTemporalFileName<>'' then begin + {$IFDEF HIGHLOG}TLog.NewLog(ltdebug,ClassName,Format('Deleting a Temporal AbstractMem file (%d bytes): %s',[LSize, FTemporalFileName]));{$ENDIF} + DeleteFile(FTemporalFileName); + end; + {$ENDIF} +end; + +end. diff --git a/src/core/UPCTemporalFileStream.pas b/src/core/UPCTemporalFileStream.pas index 812ae623a..9a3419704 100644 --- a/src/core/UPCTemporalFileStream.pas +++ b/src/core/UPCTemporalFileStream.pas @@ -41,7 +41,7 @@ interface implementation -Uses ULog, UNode; +Uses {$IFDEF HIGHLOG}ULog, {$ENDIF} UNode; { TPCTemporalFileStream } @@ -63,18 +63,18 @@ constructor TPCTemporalFileStream.Create(const AInitialName : String); end; inc(i); until (Not (FileExists(LFileName)) or (i>5000)); - TLog.NewLog(ltdebug,ClassName,Format('Creating a new Temporal file Stream: %s',[LFileName])); + {$IFDEF HIGHLOG}TLog.NewLog(ltdebug,ClassName,Format('Creating a new Temporal file Stream: %s',[LFileName]));{$ENDIF} inherited Create(LFileName,fmCreate+fmShareDenyWrite); FTemporalFileName:=LFileName; end; destructor TPCTemporalFileStream.Destroy; -var LSize : Integer; +{$IFDEF HIGHLOG}var LSize : Integer;{$ENDIF} begin - LSize := Size; + {$IFDEF HIGHLOG}LSize := Size;{$ENDIF} inherited Destroy; if FTemporalFileName<>'' then begin - TLog.NewLog(ltdebug,ClassName,Format('Deleting a Temporal file Stream (%d bytes): %s',[LSize, FTemporalFileName])); + {$IFDEF HIGHLOG}TLog.NewLog(ltdebug,ClassName,Format('Deleting a Temporal file Stream (%d bytes): %s',[LSize, FTemporalFileName]));{$ENDIF} DeleteFile(FTemporalFileName); end; end; diff --git a/src/core/UPoolMinerThreads.pas b/src/core/UPoolMinerThreads.pas index 584fbd7b1..f8526bf10 100644 --- a/src/core/UPoolMinerThreads.pas +++ b/src/core/UPoolMinerThreads.pas @@ -36,10 +36,11 @@ interface WorkingMillisecondsTotal : Cardinal; WinsCount : Integer; Invalids : Integer; + InternalComputingRounds : Integer; End; Const - CT_TMinerStats_NULL : TMinerStats = (Miners:0;RoundsCount:0;WorkingMillisecondsHashing:0;WorkingMillisecondsTotal:0;WinsCount:0;Invalids:0); + CT_TMinerStats_NULL : TMinerStats = (Miners:0;RoundsCount:0;WorkingMillisecondsHashing:0;WorkingMillisecondsTotal:0;WinsCount:0;Invalids:0;InternalComputingRounds:0); Type @@ -626,11 +627,6 @@ procedure TCustomMinerDeviceThread.SetPaused(AValue: Boolean); end; procedure TCustomMinerDeviceThread.UpdateDeviceStats(Stats: TMinerStats); -Type TTimeMinerStats = Record - tc : Cardinal; - stats : TMinerStats; - end; - PTimeMinerStats = ^TTimeMinerStats; Var l : TList; i : Integer; P : PTimeMinerStats; @@ -657,6 +653,7 @@ procedure TCustomMinerDeviceThread.UpdateDeviceStats(Stats: TMinerStats); if ((stats.Miners>foundMaxMiners)) then foundMaxMiners := stats.Miners; end; end; + FPartialDeviceStats.InternalComputingRounds:=l.count; If l.count>0 then begin P := PTimeMinerStats(l[l.count-1]); FPartialDeviceStats.WorkingMillisecondsHashing:=P^.tc - PTimeMinerStats(l[0]).tc + P^.stats.WorkingMillisecondsHashing; @@ -863,7 +860,7 @@ TNonceResult = record if FCurrentMinerValuesForWork.version < CT_PROTOCOL_5 then roundsToDo := 20 else - roundsToDo := 200+Random(200); + roundsToDo := 100+Random(100); end else begin roundsToDo := 10000; end; @@ -982,6 +979,7 @@ TNonceResult = record finalHashingTC:=TPlatform.GetTickCount; end; AuxStats.Miners:=FCPUDeviceThread.FCPUs; + AuxStats.InternalComputingRounds:=roundsToDo; AuxStats.RoundsCount:=LRoundsPerformed; AuxStats.WorkingMillisecondsTotal:=TPlatform.GetTickCount - baseRealTC; AuxStats.WorkingMillisecondsHashing:= finalHashingTC - baseHashingTC; diff --git a/src/core/UPoolMining.pas b/src/core/UPoolMining.pas index b1d98f9d8..970e99405 100644 --- a/src/core/UPoolMining.pas +++ b/src/core/UPoolMining.pas @@ -31,7 +31,8 @@ interface {LCLIntf, LCLType, LMessages,} {$ENDIF} UTCPIP, SysUtils, UThread, SyncObjs, Classes, UJSONFunctions, UPCEncryption, UNode, - UCrypto, UAccounts, UConst, UBlockChain, UBaseTypes, UPCDataTypes, + UCrypto, UAccounts, UConst, UBlockChain, UBaseTypes, UPCDataTypes, UOpTransaction, + UPCAccountsOrdenations, {$IFNDEF FPC}System.Generics.Collections{$ELSE}Generics.Collections{$ENDIF}; Const @@ -140,6 +141,8 @@ TMinerValuesForWork_HELPER = record helper for TMinerValuesForWork End; + { TPoolMiningServer } + TPoolMiningServer = Class(TNetTcpIpServer) private FIncomingsCounter : Integer; @@ -154,6 +157,7 @@ TMinerValuesForWork_HELPER = record helper for TMinerValuesForWork FMinerOperations : TPCOperationsComp; FMaxOperationsPerBlock: Integer; FMax0FeeOperationsPerBlock: Integer; + Procedure CheckMinerRecover(nbOperations: TPCOperationsComp); Procedure DoProcessJSON(json : TPCJSONObject; ResponseMethod : String; Client : TJSONRPCTcpIpClient); Procedure OnNodeNewBlock(Sender : TObject); Procedure OnNodeOperationsChanged(Sender : TObject); @@ -786,6 +790,11 @@ procedure TPoolMiningServer.FillMinerOperations; if checkDuplicate then begin if tree.IndexOfOperation(Op)>=0 then exit; end; + if (Op is TOpRecoverFounds) then begin + if Not TAccountComp.EqualAccountKeys( TOpRecoverFounds(Op).Data.new_accountkey , FMinerAccountKey ) then begin + TLog.NewLog(lterror,ClassName,'Adding a OpRecoverFounds operation from another public key: '+Op.ToString); + end; + end; tree.AddOperationToHashTree(Op); End; Var i,j : Integer; @@ -801,6 +810,9 @@ procedure TPoolMiningServer.FillMinerOperations; try if (Not (TPCOperationsComp.EqualsOperationBlock(FMinerOperations.OperationBlock,LLockedMempool.OperationBlock))) then begin FMinerOperations.Clear(true); + if LLockedMempool.SafeBoxTransaction.FreezedSafeBox.CurrentProtocol < CT_PROTOCOL_6 then begin + CheckMinerRecover(LLockedMempool); + end; if LLockedMempool.Count>0 then begin // First round: Select with fee > 0 i := 0; @@ -942,6 +954,44 @@ function TPoolMiningServer.MinerSubmit(Client: TJSONRPCTcpIpClient; params: TPCJ End; end; +// Looks for accounts to recover, adds up to 100 recoverFounds Operations to nbOperations +procedure TPoolMiningServer.CheckMinerRecover(nbOperations: TPCOperationsComp); +var + LAccOrd: TAccountsOrderedByUpdatedBlock; + LAccount: TAccount; + LRecoverAccounts: TList; + LIndexKey, LRecIndex, LRecoverAccountsCount: Integer; +begin + LIndexKey := 0; + LRecoverAccountsCount := 0; + LRecoverAccounts := TList.Create(); // make a list of RecoverAccounts + nbOperations.Lock; + try + LAccOrd := nbOperations.bank.SafeBox.AccountsOrderedByUpdatedBlock; // Walk AccountsOrderedByUpdatedBlock, this keeps a list of the oldest accounts + if Assigned(LAccOrd) then begin + LAccount := CT_Account_NUL; + if LAccOrd.First(LIndexKey) then begin + LRecIndex := 0; + LRecoverAccountsCount := LAccOrd.Count; + while ((LRecIndex < LRecoverAccountsCount) and (LRecIndex < CT_MAX_0_fee_operations_per_block_by_miner)) do begin + LAccount := FNodeNotifyEvents.Node.GetMempoolAccount(LIndexKey); + if(TAccountComp.AccountCanRecover(LAccount, nbOperations.OperationBlock.block, nbOperations.bank.SafeBox.CurrentProtocol)) then begin // does the AccountCanRecover check, !locked, old enough, etc + LRecoverAccounts.Add(LAccount); + end else begin + Break; // we could not recover this account, then we can never recover move recent accounts + end; + if Not LAccOrd.Next(LIndexKey) then Break; + Inc(LRecIndex); + end; + nbOperations.AddMinerRecover(LRecoverAccounts,FMinerAccountKey); + end; + end; + finally + nbOperations.Unlock; + LRecoverAccounts.Free; // destroy the list, operations have been added + end; +end; + procedure TPoolMiningServer.OnNewIncommingConnection(Sender: TObject; Client: TNetTcpIpClient); var bClient : TJSONRPCTcpIpClient; jsonobj : TPCJSONObject; diff --git a/src/core/URPC.pas b/src/core/URPC.pas index 6919d8401..f653cbe79 100644 --- a/src/core/URPC.pas +++ b/src/core/URPC.pas @@ -24,10 +24,12 @@ interface {$I ./../config.inc} +{$DEFINE RPC_PROTECT_MASSIVE_CALLS} + Uses UThread, ULog, UConst, UNode, UAccounts, UCrypto, UBlockChain, UNetProtocol, UOpTransaction, UWallet, UTime, UPCEncryption, UTxMultiOperation, UJSONFunctions, classes, blcksock, synsock, - IniFiles, Variants, math, UBaseTypes, + IniFiles, Variants, math, UBaseTypes, UEPasa, {$IFDEF Use_OpenSSL} UOpenSSL, {$ENDIF} @@ -45,11 +47,15 @@ interface CT_RPC_ErrNum_InvalidOperation = 1004; CT_RPC_ErrNum_InvalidPubKey = 1005; CT_RPC_ErrNum_InvalidAccountName = 1006; + CT_RPC_ErrNum_InvalidEPASA = 1007; CT_RPC_ErrNum_NotFound = 1010; CT_RPC_ErrNum_WalletPasswordProtected = 1015; CT_RPC_ErrNum_InvalidData = 1016; + CT_RPC_ErrNum_AmbiguousPayload = 1017; CT_RPC_ErrNum_InvalidSignature = 1020; CT_RPC_ErrNum_NotAllowedCall = 1021; + CT_RPC_ErrNum_MaxCalls = 1022; + Type @@ -60,18 +66,26 @@ interface TPascalCoinJSONComp = Class private class function OperationsHashTreeToHexaString(Const OperationsHashTree : TOperationsHashTree) : String; + class function TryResolveOfflineEPASA(const AEPasa : TEPasa; out AResolvedAccount: Cardinal; out AErrorMessage: String): Boolean; public class procedure FillAccountObject(Const account : TAccount; jsonObj : TPCJSONObject); class procedure FillBlockObject(nBlock : Cardinal; ANode : TNode; jsonObject: TPCJSONObject); - class procedure FillOperationObject(Const OPR : TOperationResume; currentNodeBlocksCount : Cardinal; jsonObject : TPCJSONObject); + class procedure FillOperationObject(Const OPR : TOperationResume; currentNodeBlocksCount : Cardinal; const ANode : TNode; const AWalletKeys : TWalletKeys; const APasswords : TList; jsonObject : TPCJSONObject); overload; class procedure FillOperationsHashTreeObject(Const OperationsHashTree : TOperationsHashTree; jsonObject : TPCJSONObject); - class procedure FillMultiOperationObject(current_protocol : Word; Const multiOperation : TOpMultiOperation; jsonObject : TPCJSONObject); + class procedure FillMultiOperationObject(current_protocol : Word; Const multiOperation : TOpMultiOperation; const ANode : TNode; const AWalletKeys : TWalletKeys; const APasswords : TList; jsonObject : TPCJSONObject); class procedure FillPublicKeyObject(const PubKey : TAccountKey; jsonObj : TPCJSONObject); + class function FillEPasaOrDecrypt(const AAccount : Int64; Const APayload : TOperationPayload; const ANode : TNode; const AWalletKeys : TWalletKeys; const APasswords : TList; jsonObject : TPCJSONObject) : Boolean; class function ToPascalCoins(jsonCurr : Real) : Int64; // class Function HexaStringToOperationsHashTree(Const AHexaStringOperationsHashTree : String; ACurrentProtocol : Word; out AOperationsHashTree : TOperationsHashTree; var AErrors : String) : Boolean; class Function CapturePubKey(const AInputParams : TPCJSONObject; const APrefix : String; var APubKey : TAccountKey; var AErrortxt : String) : Boolean; - class function CheckAndGetEncodedRAWPayload(Const ARawPayload : TRawBytes; Const APayload_method, AEncodePwdForAES : String; const ASenderAccounKey, ATargetAccountKey : TAccountKey; out AOperationPayload : TOperationPayload; Var AErrorNum : Integer; Var AErrorDesc : String) : Boolean; + class function CheckAndGetEncodedRAWPayload(Const ARawPayload : TRawBytes; const APayloadType : TPayloadType; Const APayload_method, AEncodePwdForAES : String; const ASenderAccounKey, ATargetAccountKey : TAccountKey; out AOperationPayload : TOperationPayload; Var AErrorNum : Integer; Var AErrorDesc : String) : Boolean; + class Function CaptureNOperation(const AInputParams : TPCJSONObject; const AParamName : String; const ANode : TNode; out ALastNOp: Cardinal; var AErrorParam : String) : Boolean; + class Function CaptureAccountNumber(const AInputParams : TPCJSONObject; const AParamName : String; const ANode : TNode; out AResolvedAccount: Cardinal; var AErrorParam : String) : Boolean; + class Function CaptureMempoolAccount(const AInputParams : TPCJSONObject; const AParamName : String; const ANode : TNode; out AMempoolAccount: TAccount; var AErrorParam : String) : Boolean; + class Function CaptureEPASA(const AInputParams : TPCJSONObject; const AParamName : String; const ANode : TNode; out AEPasa: TEPasa; out AResolvedAccount: Cardinal; out AResolvedKey : TAccountKey; out ARequiresPurchase : Boolean; var AErrorParam : String) : Boolean; overload; + class Function CaptureEPASA(const AEPasaText : String; const ANode : TNode; out AEPasa: TEPasa; out AResolvedAccount: Cardinal; out AResolvedKey : TAccountKey; out ARequiresPurchase : Boolean; var AErrorParam : String) : Boolean; overload; + class Function OverridePayloadParams(const AInputParams : TPCJSONObject; const AEPASA : TEPasa) : Boolean; end; TRPCServerThread = Class; @@ -89,13 +103,15 @@ interface FValidIPs: String; FAllowUsePrivateKeys: Boolean; FNode : TNode; + FPayloadPasswords: TList; + FLiveConnectionsCount : Integer; procedure SetActive(AValue: Boolean); procedure SetIniFileName(const Value: String); procedure SetLogFileName(const Value: String); Function GetLogFileName : String; procedure SetValidIPs(const Value: String); protected Function IsValidClientIP(Const clientIp : String; clientPort : Word) : Boolean; - Procedure AddRPCLog(Const Sender : String; Const Message : String); + Procedure AddRPCLog(Const Sender : String; ACallsCounter : Int64; Const Message : String); Function GetNewCallCounter : Int64; public Constructor Create; @@ -103,6 +119,7 @@ interface Property Port : Word read FPort Write FPort; Property Active : Boolean read FActive write SetActive; Property WalletKeys : TWalletKeysExt read FWalletKeys write FWalletKeys; + Property PayloadPasswords: TList read FPayloadPasswords; // Property JSON20Strict : Boolean read FJSON20Strict write FJSON20Strict; Property IniFileName : String read FIniFileName write SetIniFileName; @@ -148,33 +165,46 @@ TRPCProcess = class(TPCThread) class procedure RegisterProcessMethod(Const AMethodName : String; ARPCProcessMethod : TRPCProcessMethod); class procedure UnregisterProcessMethod(Const AMethodName : String); class function FindRegisteredProcessMethod(Const AMethodName : String) : TRPCProcessMethod; + class procedure ProcessMethodCalled(Const AMethodName : String; AStartTickCount : TTickCount); end; - implementation -Uses {$IFNDEF FPC}windows,{$ENDIF} +Uses + {$IFNDEF FPC}windows,{$ENDIF} SysUtils, Synautil, - UPCRPCOpData, UPCRPCFindAccounts; + UEPasaDecoder, + UPCRPCSend, + UOrderedList, + UPCRPCOpData, UPCRPCFindAccounts, UPCRPCFindBlocks, UPCRPCFileUtils; Type TRegisteredRPCProcessMethod = Record MethodName : String; RPCProcessMethod : TRPCProcessMethod; + CallsCounter : Integer; + ElapsedMilis : Int64; + procedure Clear; end; + PRegisteredRPCProcessMethod = ^TRegisteredRPCProcessMethod; var _RPCServer : TRPCServer = Nil; - _RPCProcessMethods : TList = Nil; + _RPCProcessMethods : TOrderedList = Nil; + +function TRegisteredRPCProcessMethod_Comparer(const ALeft,ARight : PRegisteredRPCProcessMethod) : Integer; +begin + Result := AnsiCompareText(ALeft.MethodName , ARight.MethodName); +end; { TPascalCoinJSONComp } class procedure TPascalCoinJSONComp.FillBlockObject(nBlock : Cardinal; ANode : TNode; jsonObject: TPCJSONObject); -var pcops : TPCOperationsComp; - ob : TOperationBlock; +var + ob, LOpBlock : TOperationBlock; + LAmount : Int64; + LOperationsCount : Integer; begin - pcops := TPCOperationsComp.Create(Nil); - try If ANode.Bank.BlocksCount<=nBlock then begin Exit; end; @@ -197,20 +227,66 @@ class procedure TPascalCoinJSONComp.FillBlockObject(nBlock : Cardinal; ANode : T jsonObject.GetAsVariant('pow').Value:=TCrypto.ToHexaString(ob.proof_of_work); jsonObject.GetAsVariant('hashratekhs').Value := ANode.Bank.SafeBox.CalcBlockHashRateInKhs(ob.Block,50); jsonObject.GetAsVariant('maturation').Value := ANode.Bank.BlocksCount - ob.block - 1; - If ANode.Bank.LoadOperations(pcops,nBlock) then begin - jsonObject.GetAsVariant('operations').Value:=pcops.Count; + if (ANode.Bank.Storage.GetBlockInformation(ob.block,LOpBlock,LOperationsCount,LAmount)) then begin + jsonObject.GetAsVariant('operations').Value:=LOperationsCount; + jsonObject.GetAsVariant('amount').Value:=LAmount; + end; +end; + +class function TPascalCoinJSONComp.FillEPasaOrDecrypt(const AAccount: Int64; + const APayload: TOperationPayload; const ANode: TNode; + const AWalletKeys: TWalletKeys; const APasswords: TList; + jsonObject: TPCJSONObject) : Boolean; +var LEPasa : TEPasa; + i : Integer; + pkey : TECPrivateKey; + decrypted_payload : TRawBytes; + LDecodeEPasaResult : TDecodeEPasaResult; +begin + Result := False; + if AAccount>=0 then begin + if TEPasaDecoder.TryDecodeEPASA(AAccount,APayload,ANode,AWalletKeys,APasswords,LDecodeEPasaResult,LEPasa) then begin + jsonObject.GetAsVariant('account_epasa').Value := LEPasa.ToString; + jsonObject.GetAsVariant('unenc_payload').Value := LEPasa.Payload; + jsonObject.GetAsVariant('unenc_hexpayload').Value := LEPasa.GetRawPayloadBytes.ToHexaString; + Result := True; + end; + end; + if (Not Result) and (Assigned(AWalletKeys)) and (LDecodeEPasaResult<>der_PrivateKeyNotFound) then begin + for i := 0 to AWalletKeys.Count - 1 do begin + pkey := AWalletKeys.Key[i].PrivateKey; + if (assigned(pkey)) then begin + if TPCEncryption.DoPascalCoinECIESDecrypt(pkey.PrivateKey,APayload.payload_raw,decrypted_payload) then begin + jsonObject.GetAsVariant('unenc_payload').Value:= decrypted_payload.ToPrintable; + jsonObject.GetAsVariant('unenc_hexpayload').Value:= TCrypto.ToHexaString(decrypted_payload); + jsonObject.GetAsVariant('payload_method').Value:= 'key'; + jsonObject.GetAsVariant('enc_pubkey').Value:= TCrypto.ToHexaString(TAccountComp.AccountKey2RawString(pkey.PublicKey)); + Result := true; + end; + end; + end; + end; + if (Not Result) And Assigned(APasswords) and (LDecodeEPasaResult<>der_PasswordNotFound) then begin + for i := 0 to APasswords.Count - 1 do begin + if TPCEncryption.DoPascalCoinAESDecrypt(APayload.payload_raw,TEncoding.ANSI.GetBytes(APasswords[i]),decrypted_payload) then begin + jsonObject.GetAsVariant('unenc_payload').Value:= decrypted_payload.ToPrintable; + jsonObject.GetAsVariant('unenc_hexpayload').Value:= TCrypto.ToHexaString(decrypted_payload); + jsonObject.GetAsVariant('payload_method').Value:= 'pwd'; + jsonObject.GetAsVariant('pwd').Value:=APasswords[i]; + Result := true; + end; end; - finally - pcops.Free; end; end; -class procedure TPascalCoinJSONComp.FillOperationObject(const OPR: TOperationResume; currentNodeBlocksCount : Cardinal; jsonObject: TPCJSONObject); +class procedure TPascalCoinJSONComp.FillOperationObject(const OPR: TOperationResume; currentNodeBlocksCount : Cardinal; + const ANode : TNode; const AWalletKeys : TWalletKeys; const APasswords : TList; jsonObject: TPCJSONObject); Var i : Integer; LOpChangeAccountInfoType : TOpChangeAccountInfoType; LString : String; jsonArr : TPCJSONArray; auxObj : TPCJSONObject; + LEPasa : TEPasa; procedure FillOpDataObject(AParentObj : TPCJSONObject; const AOpData : TMultiOpData); var LDataObj : TPCJSONObject; @@ -230,7 +306,7 @@ class procedure TPascalCoinJSONComp.FillOperationObject(const OPR: TOperationRes end; if OPR.valid then begin jsonObject.GetAsVariant('block').Value:=OPR.Block; - jsonObject.GetAsVariant('time').Value:=OPR.time; + if OPR.time>0 then jsonObject.GetAsVariant('time').Value:=OPR.time; jsonObject.GetAsVariant('opblock').Value:=OPR.NOpInsideBlock; if (OPR.Block>0) And (OPR.Block0) then jsonObject.GetAsVariant('n_operation').Value:=OPR.n_operation; end; - // New V3: Will include senders[], receivers[] and changers[] + // New V3: Will include senders[], receivers[] and changers[] jsonArr := jsonObject.GetAsArray('senders'); for i:=Low(OPR.senders) to High(OPR.Senders) do begin + LString := TCrypto.ToHexaString(OPR.Senders[i].Payload.payload_raw); auxObj := jsonArr.GetAsObject(jsonArr.Count); auxObj.GetAsVariant('account').Value := OPR.Senders[i].Account; + FillEPasaOrDecrypt(OPR.Senders[i].Account,OPR.Senders[i].Payload,ANode,AWalletKeys,APasswords,auxObj); if (OPR.Senders[i].N_Operation>0) then auxObj.GetAsVariant('n_operation').Value := OPR.Senders[i].N_Operation; auxObj.GetAsVariant('amount').Value := TAccountComp.FormatMoneyDecimal(OPR.Senders[i].Amount * (-1)); auxObj.GetAsVariant('amount_s').Value := TAccountComp.FormatMoney (OPR.Senders[i].Amount * (-1)); - auxObj.GetAsVariant('payload').Value := TCrypto.ToHexaString(OPR.Senders[i].Payload.payload_raw); + auxObj.GetAsVariant('payload').Value := LString; auxObj.GetAsVariant('payload_type').Value := OPR.Senders[i].Payload.payload_type; if (OPR.OpType = CT_Op_Data) then begin FillOpDataObject(auxObj, OPR.senders[i].OpData); @@ -262,6 +340,7 @@ class procedure TPascalCoinJSONComp.FillOperationObject(const OPR: TOperationRes for i:=Low(OPR.Receivers) to High(OPR.Receivers) do begin auxObj := jsonArr.GetAsObject(jsonArr.Count); auxObj.GetAsVariant('account').Value := OPR.Receivers[i].Account; + FillEPasaOrDecrypt(OPR.Receivers[i].Account,OPR.Receivers[i].Payload,ANode,AWalletKeys,APasswords,auxObj); auxObj.GetAsVariant('amount').Value := TAccountComp.FormatMoneyDecimal(OPR.Receivers[i].Amount); auxObj.GetAsVariant('amount_s').Value := TAccountComp.FormatMoney(OPR.Receivers[i].Amount); auxObj.GetAsVariant('payload').Value := TCrypto.ToHexaString(OPR.Receivers[i].Payload.payload_raw); @@ -332,6 +411,7 @@ class procedure TPascalCoinJSONComp.FillOperationObject(const OPR: TOperationRes end; If OPR.DestAccount>=0 then begin jsonObject.GetAsVariant('dest_account').Value:=OPR.DestAccount; + FillEPasaOrDecrypt(OPR.DestAccount,OPR.OriginalPayload,ANode,AWalletKeys,APasswords,jsonObject); end; end; If OPR.newKey.EC_OpenSSL_NID>0 then begin @@ -345,6 +425,157 @@ class procedure TPascalCoinJSONComp.FillOperationObject(const OPR: TOperationRes end; end; +class Function TPascalCoinJSONComp.CaptureNOperation(const AInputParams : TPCJSONObject; const AParamName : String; const ANode : TNode; out ALastNOp: Cardinal; var AErrorParam : String) : Boolean; +var + LParamValue : String; +begin + if NOT AInputParams.HasName(AParamName) then begin + AErrorParam := Format('Missing n-operation value for Param "%s"',[AParamName]); + Exit(False); + end; + // TODO: add type checking? + ALastNOp := AInputParams.AsCardinal(AParamName,0); +end; + +class Function TPascalCoinJSONComp.CaptureAccountNumber(const AInputParams : TPCJSONObject; const AParamName : String; const ANode : TNode; out AResolvedAccount: Cardinal; var AErrorParam : String) : Boolean; +var + LEPasa : TEPasa; + LKey : TAccountKey; + LPurchase : Boolean; + LParamValue : String; +begin + LParamValue := AInputParams.AsString(AParamName,''); + Result := CaptureEPASA(AInputParams, AParamName, ANode, LEPasa, AResolvedAccount, LKey, LPurchase, AErrorParam); + if Result AND (NOT LEPasa.IsClassicPASA) then begin + AErrorParam := Format('"%s" is not valid Account Number for Param "%s"',[LParamValue,AParamName]); + Exit(False); + end; +end; + +class function TPascalCoinJSONComp.CaptureEPASA(const AInputParams : TPCJSONObject; const AParamName : String; const ANode : TNode; out AEPasa: TEPasa; out AResolvedAccount: Cardinal; out AResolvedKey : TAccountKey; out ARequiresPurchase : Boolean; var AErrorParam : String): Boolean; +var LParamValue : String; +Begin + AEPasa.Clear; + AResolvedAccount := 0; + AResolvedKey.Clear; + ARequiresPurchase := False; + AErrorParam := ''; + LParamValue := AInputParams.AsString(AParamName,''); + if Length(LParamValue)>0 then begin + if Not TEPasa.TryParse(LParamValue, AEPasa) then begin + AEPasa := TEPasa.Empty; + AResolvedAccount := CT_AccountNo_NUL; + AResolvedKey := CT_Account_NUL.accountInfo.accountKey; + AErrorParam := Format('"%s" is not valid Account EPASA for Param "%s"',[LParamValue,AParamName]); + Exit(False); + end; + if Assigned(ANode) then begin + Result := ANode.TryResolveEPASA(AEPasa, AResolvedAccount, AResolvedKey, ARequiresPurchase, AErrorParam); + end else begin + // Offline EPASA + Result := TryResolveOfflineEPASA(AEPasa, AResolvedAccount, AErrorParam); + AResolvedKey := CT_Account_NUL.accountInfo.accountKey; + ARequiresPurchase := False; + end; + end else begin + AEPasa := TEPasa.Empty; + AResolvedAccount := CT_AccountNo_NUL; + AResolvedKey := CT_Account_NUL.accountInfo.accountKey; + AErrorParam := Format('Param "%s" not provided or null',[AParamName]); + Exit(False); + end; +end; + +class function TPascalCoinJSONComp.CaptureEPASA(const AEPasaText: String; + const ANode: TNode; out AEPasa: TEPasa; out AResolvedAccount: Cardinal; + out AResolvedKey: TAccountKey; out ARequiresPurchase: Boolean; + var AErrorParam: String): Boolean; +Begin + AEPasa.Clear; + AResolvedAccount := 0; + AResolvedKey.Clear; + ARequiresPurchase := False; + AErrorParam := ''; + if Length(AEPasaText)>0 then begin + if Not TEPasa.TryParse(AEPasaText, AEPasa) then begin + AEPasa := TEPasa.Empty; + AResolvedAccount := CT_AccountNo_NUL; + AResolvedKey := CT_Account_NUL.accountInfo.accountKey; + AErrorParam := Format('"%s" is not valid Account EPASA',[AEPasaText]); + Exit(False); + end; + if Assigned(ANode) then begin + Result := ANode.TryResolveEPASA(AEPasa, AResolvedAccount, AResolvedKey, ARequiresPurchase, AErrorParam); + end else begin + // Offline EPASA + Result := TryResolveOfflineEPASA(AEPasa, AResolvedAccount, AErrorParam); + AResolvedKey := CT_Account_NUL.accountInfo.accountKey; + ARequiresPurchase := False; + end; + end else begin + AEPasa := TEPasa.Empty; + AResolvedAccount := CT_AccountNo_NUL; + AResolvedKey := CT_Account_NUL.accountInfo.accountKey; + AErrorParam := Format('EPasa not provided or null',[]); + Exit(False); + end; +end; + +class function TPascalCoinJSONComp.CaptureMempoolAccount( + const AInputParams: TPCJSONObject; const AParamName: String; + const ANode: TNode; out AMempoolAccount: TAccount; + var AErrorParam: String): Boolean; +var LAccountNumber : Cardinal; +begin + Result := CaptureAccountNumber(AInputParams,AParamName,ANode,LAccountNumber,AErrorParam); + if Result then begin + if (LAccountNumber>=0) And (LAccountNumber'') and (LPayloadmethod_old<>LPayloadmethod_new) then Exit(False); + AInputParams.GetAsVariant('payload_method').Value := LPayloadmethod_new; + + if (LPayload_old<>'') and (LPayload_old<>LPayload_new) then Exit(False); + AInputParams.GetAsVariant('payload').Value := LPayload_new; + + if (LPwd_old<>'') and (LPwd_old<>LPwd_new) then Exit(False); + if (LPwd_new<>'') then AInputParams.GetAsVariant('pwd').Value := LPwd_new; + + Result := True; +end; + class function TPascalCoinJSONComp.CapturePubKey( const AInputParams: TPCJSONObject; const APrefix: String; var APubKey: TAccountKey; var AErrortxt: String): Boolean; @@ -381,27 +612,46 @@ class function TPascalCoinJSONComp.CapturePubKey( end; class function TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload( - const ARawPayload: TRawBytes; const APayload_method, AEncodePwdForAES: String; + const ARawPayload: TRawBytes; + const APayloadType : TPayloadType; + const APayload_method, AEncodePwdForAES: String; const ASenderAccounKey, ATargetAccountKey: TAccountKey; - out AOperationPayload : TOperationPayload; var AErrorNum: Integer; + out AOperationPayload : TOperationPayload; + var AErrorNum: Integer; var AErrorDesc: String): Boolean; +var LNewPayloadType : TPayloadType; begin AOperationPayload := CT_TOperationPayload_NUL; - // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - // TODO: - // Needs to assign AOperationPayload.payload_type based on PIP-0027 - // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + AOperationPayload.payload_type := APayloadType.ToProtocolValue; if (Length(ARawPayload)>0) then begin + if ARawPayload.ToPrintable.CompareTo(ARawPayload.ToString)=0 then LNewPayloadType := [ptAsciiFormatted] + else LNewPayloadType := []; if (APayload_method='none') then begin AOperationPayload.payload_raw:=ARawPayload; + if (AOperationPayload.payload_type=0) then begin + LNewPayloadType := LNewPayloadType + [ptPublic]; + AOperationPayload.payload_type := LNewPayloadType.ToProtocolValue; + end; Result := True; end else if (APayload_method='dest') then begin Result := TPCEncryption.DoPascalCoinECIESEncrypt(ATargetAccountKey,ARawPayload,AOperationPayload.payload_raw); + if (AOperationPayload.payload_type=0) then begin + LNewPayloadType := LNewPayloadType + [ptRecipientKeyEncrypted]; + AOperationPayload.payload_type := LNewPayloadType.ToProtocolValue; + end; end else if (APayload_method='sender') then begin Result := TPCEncryption.DoPascalCoinECIESEncrypt(ASenderAccounKey,ARawPayload,AOperationPayload.payload_raw); + if (AOperationPayload.payload_type=0) then begin + LNewPayloadType := LNewPayloadType + [ptSenderKeyEncrypted]; + AOperationPayload.payload_type := LNewPayloadType.ToProtocolValue; + end; end else if (APayload_method='aes') then begin AOperationPayload.payload_raw := TPCEncryption.DoPascalCoinAESEncrypt(ARawPayload,TEncoding.ANSI.GetBytes(AEncodePwdForAES)); Result := True; + if (AOperationPayload.payload_type=0) then begin + LNewPayloadType := LNewPayloadType + [ptPasswordEncrypted]; + AOperationPayload.payload_type := LNewPayloadType.ToProtocolValue; + end; end else begin Result := False; AErrorNum:=CT_RPC_ErrNum_InvalidOperation; @@ -468,11 +718,13 @@ class procedure TPascalCoinJSONComp.FillOperationsHashTreeObject(const Operation jsonObject.GetAsVariant('rawoperations').Value:=OperationsHashTreeToHexaString(OperationsHashTree); end; -class procedure TPascalCoinJSONComp.FillMultiOperationObject(current_protocol : Word; const multiOperation: TOpMultiOperation; jsonObject: TPCJSONObject); +class procedure TPascalCoinJSONComp.FillMultiOperationObject(current_protocol : Word; const multiOperation: TOpMultiOperation; + const ANode : TNode; const AWalletKeys : TWalletKeys; const APasswords : TList; jsonObject: TPCJSONObject); Var i, nSigned, nNotSigned : Integer; opht : TOperationsHashTree; jsonArr : TPCJSONArray; auxObj : TPCJSONObject; + LStr : String; begin opht := TOperationsHashTree.Create; Try @@ -493,18 +745,22 @@ class procedure TPascalCoinJSONComp.FillMultiOperationObject(current_protocol : // jsonArr := jsonObject.GetAsArray('senders'); for i:=Low(multiOperation.Data.txSenders) to High(multiOperation.Data.txSenders) do begin + LStr := TCrypto.ToHexaString(multiOperation.Data.txSenders[i].Payload.payload_raw); auxObj := jsonArr.GetAsObject(jsonArr.Count); auxObj.GetAsVariant('account').Value := multiOperation.Data.txSenders[i].Account; + FillEPasaOrDecrypt(multiOperation.Data.txSenders[i].Account,multiOperation.Data.txSenders[i].Payload,ANode,AWalletKeys,APasswords,auxObj); auxObj.GetAsVariant('n_operation').Value := multiOperation.Data.txSenders[i].N_Operation; auxObj.GetAsVariant('amount').Value := TAccountComp.FormatMoneyDecimal(multiOperation.Data.txSenders[i].Amount * (-1)); - auxObj.GetAsVariant('payload').Value := TCrypto.ToHexaString(multiOperation.Data.txSenders[i].Payload.payload_raw); + auxObj.GetAsVariant('payload').Value := LStr; auxObj.GetAsVariant('payload_type').Value := multiOperation.Data.txSenders[i].Payload.payload_type; end; // jsonArr := jsonObject.GetAsArray('receivers'); for i:=Low(multiOperation.Data.txReceivers) to High(multiOperation.Data.txReceivers) do begin + LStr := TCrypto.ToHexaString(multiOperation.Data.txSenders[i].Payload.payload_raw); auxObj := jsonArr.GetAsObject(jsonArr.Count); auxObj.GetAsVariant('account').Value := multiOperation.Data.txReceivers[i].Account; + FillEPasaOrDecrypt(multiOperation.Data.txReceivers[i].Account,multiOperation.Data.txReceivers[i].Payload,ANode,AWalletKeys,APasswords,auxObj); auxObj.GetAsVariant('amount').Value := TAccountComp.FormatMoneyDecimal(multiOperation.Data.txReceivers[i].Amount); auxObj.GetAsVariant('payload').Value := TCrypto.ToHexaString(multiOperation.Data.txReceivers[i].Payload.payload_raw); auxObj.GetAsVariant('payload_type').Value := multiOperation.Data.txReceivers[i].Payload.payload_type; @@ -597,6 +853,27 @@ class function TPascalCoinJSONComp.OperationsHashTreeToHexaString(const Operatio End; end; + +class function TPascalCoinJSONComp.TryResolveOfflineEPASA(const AEPasa : TEPasa; out AResolvedAccount: Cardinal; out AErrorMessage: String): Boolean; +begin + if (AEPasa.IsPayToKey) then begin + // PayToKey not supported in offline signing + AResolvedAccount := CT_AccountNo_NUL; + AErrorMessage := 'PayToKey not supported in offline signing'; + Exit(False); + end else if (AEPasa.IsAddressedByName) then begin + // PayToKey not supported in offline signing + AResolvedAccount := CT_AccountNo_NUL; + AErrorMessage := 'Addressed-by-name EPASA not supported in offline signing'; + Exit(False); + end; + // addressed by number + if NOT AEPasa.IsAddressedByNumber then raise Exception.Create('Internal Error 0293f104-fce6-46a5-853f-e91fb501b452'); + if NOT AEPasa.Account.HasValue then raise Exception.Create('Internal Error b569cd90-8dd7-4fac-95c4-6508179dac03'); + AResolvedAccount := AEPasa.Account.Value; + Result := true; +end; + class function TPascalCoinJSONComp.ToPascalCoins(jsonCurr: Real): Int64; begin Result := Round(jsonCurr * 10000); @@ -604,10 +881,10 @@ class function TPascalCoinJSONComp.ToPascalCoins(jsonCurr: Real): Int64; { TRPCServer } -Procedure TRPCServer.AddRPCLog(Const Sender : String; Const Message : String); +Procedure TRPCServer.AddRPCLog(Const Sender : String; ACallsCounter : Int64; Const Message : String); Begin If Not Assigned(FRPCLog) then exit; - FRPCLog.NotifyNewLog(ltinfo,Sender+' '+Inttostr(FCallsCounter),Message); + FRPCLog.NotifyNewLog(ltinfo,Sender+' '+Inttostr(ACallsCounter),Message); end; Function TRPCServer.GetLogFileName : String; @@ -718,6 +995,7 @@ function TRPCServer.CheckAndGetPrivateKeyInWallet(const APublicKey : TAccountKey constructor TRPCServer.Create; begin + FPayloadPasswords := TList.Create; FActive := false; FRPCLog := Nil; FIniFile := Nil; @@ -730,12 +1008,14 @@ constructor TRPCServer.Create; FValidIPs := '127.0.0.1;localhost'; // New Build 1.5 - By default, only localhost can access to RPC FAllowUsePrivateKeys := True; // New Build 3.0.2 - By default RPC allows to use private keys functions FNode := TNode.Node; + FLiveConnectionsCount := 0; If Not assigned(_RPCServer) then _RPCServer := Self; end; destructor TRPCServer.Destroy; begin FreeAndNil(FRPCLog); + FreeAndNil(FPayloadPasswords); active := false; if _RPCServer=Self then _RPCServer:=Nil; inherited Destroy; @@ -746,6 +1026,7 @@ destructor TRPCServer.Destroy; constructor TRPCProcess.Create(ARPCServer : TRPCServer; AHSock:tSocket); begin FRPCServer := ARPCServer; + Inc(FRPCServer.FLiveConnectionsCount); FSock:=TTCPBlockSocket.create; FSock.socket:=AHSock; FreeOnTerminate:=true; @@ -758,25 +1039,47 @@ constructor TRPCProcess.Create(ARPCServer : TRPCServer; AHSock:tSocket); destructor TRPCProcess.Destroy; begin + Dec(FRPCServer.FLiveConnectionsCount); FSock.free; inherited Destroy; end; class function TRPCProcess.FindRegisteredProcessMethod(const AMethodName: String): TRPCProcessMethod; var i : Integer; + P : PRegisteredRPCProcessMethod; begin Result := Nil; if Not Assigned(_RPCProcessMethods) then Exit; - i := 0; - while (i<_RPCProcessMethods.Count) and (Not Assigned(Result)) do begin - if AnsiSameStr( _RPCProcessMethods.Items[i].MethodName , AMethodName) then begin - Result := _RPCProcessMethods.Items[i].RPCProcessMethod; + New(P); + Try + P.Clear; + P.MethodName := AMethodName; + if _RPCProcessMethods.Find(P,i) then begin + Result := _RPCProcessMethods.Get(i).RPCProcessMethod; end; - inc(i); - end; + Finally + Dispose(P); + End; end; procedure TRPCProcess.BCExecute; + function ValidMethodName(const AMethod : String) : Boolean; + var i : Integer; + begin + Result := False; + for i:=0 to AMethod.Length-1 do begin + case AMethod.Chars[i] of + 'a'..'z', + 'A'..'Z', + '0'..'9', + '_','.' : ; // Nothing to do + '-' : if i=0 then Exit; // Cannot start with "-" + else Exit; // Not a valid char + end; + end; + Result := True; + end; + var timeout: integer; s: string; @@ -786,16 +1089,19 @@ procedure TRPCProcess.BCExecute; resultcode: integer; inputdata : TRawBytes; js,jsresult : TPCJSONData; - jsonobj,jsonresponse : TPCJSONObject; + jsonobj,jsonresponse, paramsJSON : TPCJSONObject; errNum : Integer; errDesc : String; jsonrequesttxt, - jsonresponsetxt, methodName, paramsTxt : String; + jsonresponsetxt, methodName, paramsTxt, senderIP : String; valid : Boolean; i : Integer; Headers : TStringList; tc : TTickCount; callcounter : Int64; + LOnStartLiveConnectionCount : Integer; begin + LOnStartLiveConnectionCount := FRPCServer.FLiveConnectionsCount; + senderIP := ''; callcounter := _RPCServer.GetNewCallCounter; tc := TPlatform.GetTickCount; methodName := ''; @@ -803,7 +1109,7 @@ procedure TRPCProcess.BCExecute; // IP Protection If (Not _RPCServer.IsValidClientIP(FSock.GetRemoteSinIP,FSock.GetRemoteSinPort)) then begin TLog.NewLog(lterror,Classname,FSock.GetRemoteSinIP+':'+inttostr(FSock.GetRemoteSinPort)+' INVALID IP'); - _RPCServer.AddRPCLog(FSock.GetRemoteSinIP+':'+InttoStr(FSock.GetRemoteSinPort),' INVALID IP'); + _RPCServer.AddRPCLog(FSock.GetRemoteSinIP+':'+InttoStr(FSock.GetRemoteSinPort),callcounter,' INVALID IP'); exit; end; errNum := CT_RPC_ErrNum_InternalError; @@ -869,9 +1175,27 @@ procedure TRPCProcess.BCExecute; errDesc := ''; try methodName := jsonobj.AsString('method',''); - paramsTxt := jsonobj.GetAsObject('params').ToJSON(false); + paramsJSON := jsonobj.GetAsObject('params'); + senderIP := Trim(jsonObj.AsString('remoteaddr','')); // + paramsTxt := paramsJSON.ToJSON(false); {$IFDEF HIGHLOG}TLog.NewLog(ltinfo,Classname,FSock.GetRemoteSinIP+':'+inttostr(FSock.GetRemoteSinPort)+' Processing method '+methodName+' params '+paramsTxt);{$ENDIF} - Valid := ProcessMethod(methodName,jsonobj.GetAsObject('params'),jsonresponse,errNum,errDesc); + valid := True; + {$IFDEF RPC_PROTECT_MASSIVE_CALLS} + if (senderIP<>'') and (ValidMethodName(methodName)) then begin + if TNetData.NetData.IpInfos.Update_And_ReachesLimits(senderIP,'rpcmethod',methodName,0,True, + TArray.Create(TLimitLifetime.Create(60,50,0),TLimitLifetime.Create(3600,500,0))) then begin + valid := false; + errNum := CT_RPC_ErrNum_MaxCalls; + errDesc := Format('IP:%s Reached limit %s',[senderIP,methodName]); + jsonresponse.GetAsObject('error').GetAsVariant('code').Value:=errNum; + jsonresponse.GetAsObject('error').GetAsVariant('message').Value:=errDesc; + end; + end; + {$ENDIF} + if valid then begin + + TRPCProcess.ProcessMethodCalled(methodName,tc); + Valid := ProcessMethod(methodName,paramsJSON,jsonresponse,errNum,errDesc); if not Valid then begin if (errNum<>0) or (errDesc<>'') then begin jsonresponse.GetAsObject('error').GetAsVariant('code').Value:=errNum; @@ -881,6 +1205,8 @@ procedure TRPCProcess.BCExecute; jsonresponse.GetAsObject('error').GetAsVariant('message').Value:='Unknown error processing method'; end; end; + + end; Except on E:Exception do begin TLog.NewLog(lterror,Classname,'Exception processing method'+methodName+' ('+E.ClassName+'): '+E.Message); @@ -927,7 +1253,14 @@ procedure TRPCProcess.BCExecute; FSock.SendString(jsonresponsetxt); end; end; - _RPCServer.AddRPCLog(FSock.GetRemoteSinIP+':'+InttoStr(FSock.GetRemoteSinPort),'Method:'+methodName+' Params:'+paramsTxt+' '+Inttostr(errNum)+':'+errDesc+' Time:'+FormatFloat('0.000',(TPlatform.GetElapsedMilliseconds(tc)/1000))); + if senderIP<>'' then begin + senderIP := FSock.GetRemoteSinIP+':'+InttoStr(FSock.GetRemoteSinPort) + ' @'+senderIP; + end else begin + senderIP := FSock.GetRemoteSinIP+':'+InttoStr(FSock.GetRemoteSinPort); + end; + _RPCServer.AddRPCLog(senderIP,callcounter,'Method:'+methodName+' Params:'+paramsTxt+' '+Inttostr(errNum)+':'+errDesc+' Time:'+FormatFloat('0.000',(TPlatform.GetElapsedMilliseconds(tc)/1000)) + +' '+LOnStartLiveConnectionCount.ToString+'->'+FRPCServer.FLiveConnectionsCount.ToString); + TRPCProcess.ProcessMethodCalled(methodName,tc); finally jsonresponse.free; Headers.Free; @@ -998,6 +1331,8 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; Function GetBlock(nBlock : Cardinal; jsonObject : TPCJSONObject) : Boolean; begin + FNode.OperationSequenceLock.Acquire; // Added to prevent high concurrent API calls + try If FNode.Bank.BlocksCount<=nBlock then begin ErrorNum := CT_RPC_ErrNum_InvalidBlock; ErrorDesc := 'Cannot load Block: '+IntToStr(nBlock); @@ -1006,11 +1341,78 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; end; TPascalCoinJSONComp.FillBlockObject(nBlock,FNode,jsonObject); Result := True; + finally + FNode.OperationSequenceLock.Release; + end; + end; + + Function GetBlockOperation(ABlock, AOpBlock : Integer; jsonObject : TPCJSONObject) : Boolean; + var LOpResumeList : TOperationsResumeList; + LOperationBlock : TOperationBlock; + LOperationsCount : Integer; + LOperationsAmount : Int64; + begin + FNode.OperationSequenceLock.Acquire; // Added to prevent high concurrent API calls + try + LOpResumeList := TOperationsResumeList.Create; + Try + if not FNode.Bank.Storage.GetBlockOperations(ABlock,AOpBlock,1,LOperationBlock,LOperationsCount,LOperationsAmount,LOpResumeList) then begin + ErrorNum := CT_RPC_ErrNum_InvalidOperation; + ErrorDesc := 'Cannot load Block: '+ABlock.ToString+' OpBlock: '+AOpBlock.ToString; + Result := False; + Exit; + end; + if LOpResumeList.Count<>1 then Exit(False); + TPascalCoinJSONComp.FillOperationObject(LOpResumeList.Items[0], + FNode.Bank.BlocksCount, + Node,RPCServer.WalletKeys,RPCServer.PayloadPasswords, + jsonObject); + Result := True; + Finally + LOpResumeList.Free; + End; + finally + FNode.OperationSequenceLock.Release; + end; + end; + + + Function GetBlockOperations(ABlock, AOpBlockStartIndex, AMaxOperations : Integer; jsonArray : TPCJSONArray) : Boolean; + var LOpResumeList : TOperationsResumeList; + LOperationBlock : TOperationBlock; + LOperationsCount : Integer; + LOperationsAmount : Int64; + i : Integer; + begin + FNode.OperationSequenceLock.Acquire; // Added to prevent high concurrent API calls + try + LOpResumeList := TOperationsResumeList.Create; + Try + if not FNode.Bank.Storage.GetBlockOperations(ABlock,AOpBlockStartIndex,AMaxOperations,LOperationBlock,LOperationsCount,LOperationsAmount,LOpResumeList) then begin + ErrorNum := CT_RPC_ErrNum_InvalidOperation; + ErrorDesc := 'Cannot load Block: '+ABlock.ToString+' OpBlock: '+AOpBlockStartIndex.ToString+' Max: '+AMaxOperations.ToString; + Result := False; + Exit; + end; + for i := 0 to LOpResumeList.Count-1 do begin + TPascalCoinJSONComp.FillOperationObject(LOpResumeList.Items[i],FNode.Bank.BlocksCount, + Node,RPCServer.WalletKeys,RPCServer.PayloadPasswords, + jsonArray.GetAsObject(jsonArray.Count)); + end; + Result := True; + Finally + LOpResumeList.Free; + End; + finally + FNode.OperationSequenceLock.Release; + end; end; Procedure FillOperationResumeToJSONObject(Const OPR : TOperationResume; jsonObject : TPCJSONObject); Begin - TPascalCoinJSONComp.FillOperationObject(OPR,FNode.Bank.BlocksCount,jsonObject); + TPascalCoinJSONComp.FillOperationObject(OPR,FNode.Bank.BlocksCount, + Node,RPCServer.WalletKeys,RPCServer.PayloadPasswords, + jsonObject); end; Function GetAccountOperations(accountNumber : Cardinal; jsonArray : TPCJSONArray; maxBlocksDepth, startReg, maxReg: Integer; forceStartBlock : Cardinal) : Boolean; @@ -1023,6 +1425,8 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; LLockedMempool : TPCOperationsComp; Begin Result := false; + FNode.OperationSequenceLock.Acquire; // Added to prevent high concurrent API calls + try if (startReg<-1) or (maxReg<=0) then begin ErrorNum := CT_RPC_ErrNum_InvalidData; ErrorDesc := 'Invalid start or max value'; @@ -1060,7 +1464,7 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; end; if (nCounter0 then begin + obj.GetAsVariant('secs_average').Value := FormatFloat('0.000',(P.ElapsedMilis/1000)/P.CallsCounter); + end; + inc(LCalls,P.CallsCounter); + inc(LMilis,P.ElapsedMilis); + inc(i); + end; + obj := GetResultArray.GetAsObject(GetResultArray.Count); + obj.GetAsVariant('method').Value := 'TOTAL'; + obj.GetAsVariant('calls').Value := LCalls; + obj.GetAsVariant('seconds').Value := FormatFloat('0.000',LMilis/1000); + if LCalls>0 then begin + obj.GetAsVariant('secs_average').Value := FormatFloat('0.000',(LMilis/1000)/LCalls); + end; + end; + // This function creates a TOpTransaction without looking for balance/private key of sender account // It assumes that sender,target,sender_last_n_operation,senderAccountKey and targetAccountKey are correct Function CreateOperationTransaction(current_protocol : Word; sender, target, sender_last_n_operation : Cardinal; amount, fee : UInt64; @@ -1162,7 +1601,7 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; Begin Result := Nil; if Not RPCServer.CheckAndGetPrivateKeyInWallet(senderAccounKey,privateKey,ErrorNum,ErrorDesc) then Exit(Nil); - if Not TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload(RawPayload,Payload_method,EncodePwd,senderAccounKey,targetAccountKey,LOpPayload,ErrorNum,ErrorDesc) then Exit(Nil); + if Not TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload(RawPayload,[ptNonDeterministic],Payload_method,EncodePwd,senderAccounKey,targetAccountKey,LOpPayload,ErrorNum,ErrorDesc) then Exit(Nil); Result := TOpTransaction.CreateTransaction(current_protocol, sender,sender_last_n_operation+1,target,privateKey,amount,fee,LOpPayload); if Not Result.HasValidSignature then begin FreeAndNil(Result); @@ -1175,98 +1614,9 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; Function CaptureAccountNumber(const AParamName : String; const ACheckAccountNumberExistsInSafebox : Boolean; var AAccountNumber : Cardinal; var AErrorParam : String) : Boolean; var LParamValue : String; Begin - LParamValue := params.AsString(AParamName,''); - if Length(LParamValue)>0 then begin - Result := TAccountComp.AccountTxtNumberToAccountNumber(LParamValue,AAccountNumber); - if Not Result then begin - AErrorParam := Format('"%s" is no valid Account number for Param "%s"',[LParamValue,AParamName]); - end else if (ACheckAccountNumberExistsInSafebox) then begin - if (AAccountNumber<0) or (AAccountNumber>=FNode.Bank.AccountsCount) then begin - Result := False; - AErrorParam := Format('Account %d does not exist in safebox (param "%s")',[AAccountNumber,AParamName]); - end; - end; - end else begin - Result := False; - AErrorParam := Format('Param "%s" not provided or null',[AParamName]); - end; + Result := TPascalCoinJSONComp.CaptureAccountNumber(params,AParamName,FNode,AAccountNumber,AErrorParam); End; - Function OpSendTo(sender, target : Cardinal; amount, fee : UInt64; Const RawPayload : TRawBytes; Const Payload_method, EncodePwd : String) : Boolean; - // "payload_method" types: "none","dest"(default),"sender","aes"(must provide "pwd" param) - Var opt : TOpTransaction; - sacc,tacc : TAccount; - errors : String; - opr : TOperationResume; - begin - FNode.OperationSequenceLock.Acquire; // Use lock to prevent N_Operation race-condition on concurrent sends - try - Result := false; - if (sender<0) or (sender>=FNode.Bank.AccountsCount) then begin - If (sender=CT_MaxAccount) then ErrorDesc := 'Need sender' - else ErrorDesc:='Invalid sender account '+Inttostr(sender); - ErrorNum:=CT_RPC_ErrNum_InvalidAccount; - Exit; - end; - if (target<0) or (target>=FNode.Bank.AccountsCount) then begin - If (target=CT_MaxAccount) then ErrorDesc := 'Need target' - else ErrorDesc:='Invalid target account '+Inttostr(target); - ErrorNum:=CT_RPC_ErrNum_InvalidAccount; - Exit; - end; - sacc := FNode.GetMempoolAccount(sender); - tacc := FNode.GetMempoolAccount(target); - - opt := CreateOperationTransaction(FNode.Bank.SafeBox.CurrentProtocol,sender,target,sacc.n_operation,amount,fee,sacc.accountInfo.accountKey,tacc.accountInfo.accountKey,RawPayload,Payload_method,EncodePwd); - if opt=nil then exit; - try - If not FNode.AddOperation(Nil,opt,errors) then begin - ErrorDesc := 'Error adding operation: '+errors; - ErrorNum := CT_RPC_ErrNum_InvalidOperation; - Exit; - end; - TPCOperation.OperationToOperationResume(0,opt,False,sender,opr); - FillOperationResumeToJSONObject(opr,GetResultObject); - Result := true; - finally - opt.free; - end; - finally - FNode.OperationSequenceLock.Release; - end; - end; - - Function SignOpSendTo(Const HexaStringOperationsHashTree : String; current_protocol : Word; - sender, target : Cardinal; - Const senderAccounKey, targetAccountKey : TAccountKey; - last_sender_n_operation : Cardinal; - amount, fee : UInt64; Const RawPayload : TRawBytes; Const Payload_method, EncodePwd : String) : Boolean; - // "payload_method" types: "none","dest"(default),"sender","aes"(must provide "pwd" param) - var OperationsHashTree : TOperationsHashTree; - errors : String; - opt : TOpTransaction; - begin - Result := false; - if Not TPascalCoinJSONComp.HexaStringToOperationsHashTree(HexaStringOperationsHashTree,current_protocol,OperationsHashTree,errors) then begin - ErrorNum:=CT_RPC_ErrNum_InvalidData; - ErrorDesc:= 'Error decoding param "rawoperations": '+errors; - Exit; - end; - Try - opt := CreateOperationTransaction(current_protocol, sender,target,last_sender_n_operation,amount,fee,senderAccounKey,targetAccountKey,RawPayload,Payload_method,EncodePwd); - if opt=nil then exit; - try - OperationsHashTree.AddOperationToHashTree(opt); - TPascalCoinJSONComp.FillOperationsHashTreeObject(OperationsHashTree,GetResultObject); - Result := true; - finally - opt.Free; - end; - Finally - OperationsHashTree.Free; - End; - end; - // This function creates a TOpChangeKey without looking for private key of account // It assumes that account_signer,account_last_n_operation, account_target and account_pubkey are correct Function CreateOperationChangeKey(current_protocol : Word; account_signer, account_last_n_operation, account_target : Cardinal; const account_pubkey, new_pubkey : TAccountKey; fee : UInt64; RawPayload : TRawBytes; Const Payload_method, EncodePwd : String) : TOpChangeKey; @@ -1279,7 +1629,7 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; Result := Nil; LOpPayload := CT_TOperationPayload_NUL; if Not RPCServer.CheckAndGetPrivateKeyInWallet(account_pubkey,privateKey,ErrorNum,ErrorDesc) then Exit(Nil); - if Not TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload(RawPayload,Payload_method,EncodePwd,account_pubkey,new_pubkey,LOpPayload,ErrorNum,ErrorDesc) then Exit(Nil); + if Not TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload(RawPayload,[ptNonDeterministic],Payload_method,EncodePwd,account_pubkey,new_pubkey,LOpPayload,ErrorNum,ErrorDesc) then Exit(Nil); If account_signer=account_target then begin Result := TOpChangeKey.Create(current_protocol,account_signer,account_last_n_operation+1,account_target,privateKey,new_pubkey,fee,LOpPayload); end else begin @@ -1346,7 +1696,7 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; // If using 'dest', only will apply if there is a fixed new public key, otherwise will use current public key of account aux_target_pubkey := new_account_pubkey; end else aux_target_pubkey := account_signer_pubkey; - if Not TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload(RawPayload,Payload_method,EncodePwd,account_signer_pubkey,aux_target_pubkey,LOpPayload,ErrorNum,ErrorDesc) then Exit(Nil); + if Not TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload(RawPayload,[ptNonDeterministic],Payload_method,EncodePwd,account_signer_pubkey,aux_target_pubkey,LOpPayload,ErrorNum,ErrorDesc) then Exit(Nil); Result := TOpListAccountForSaleOrSwap.CreateListAccountForSaleOrSwap( current_protocol, ANewAccountState, @@ -1381,7 +1731,7 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; Result := Nil; LOpPayload := CT_TOperationPayload_NUL; if Not RPCServer.CheckAndGetPrivateKeyInWallet(account_signer_pubkey,privateKey,ErrorNum,ErrorDesc) then Exit(Nil); - if Not TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload(RawPayload,Payload_method,EncodePwd,account_signer_pubkey,account_signer_pubkey,LOpPayload,ErrorNum,ErrorDesc) then Exit(Nil); + if Not TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload(RawPayload, [ptNonDeterministic],Payload_method,EncodePwd,account_signer_pubkey,account_signer_pubkey,LOpPayload,ErrorNum,ErrorDesc) then Exit(Nil); Result := TOpDelistAccountForSale.CreateDelistAccountForSale(current_protocol,account_signer,account_last_n_operation+1,account_delisted,fee,privateKey,LOpPayload); if Not Result.HasValidSignature then begin FreeAndNil(Result); @@ -1404,7 +1754,7 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; Begin Result := Nil; if Not RPCServer.CheckAndGetPrivateKeyInWallet(account_pubkey,privateKey,ErrorNum,ErrorDesc) then Exit(Nil); - if Not TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload(RawPayload,Payload_method,EncodePwd,account_pubkey,new_account_pubkey,LOpPayload,ErrorNum,ErrorDesc) then Exit(Nil); + if Not TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload(RawPayload,[ptNonDeterministic],Payload_method,EncodePwd,account_pubkey,new_account_pubkey,LOpPayload,ErrorNum,ErrorDesc) then Exit(Nil); Result := TOpBuyAccount.CreateBuy(current_protocol,account_number,account_last_n_operation+1,account_to_buy,account_to_pay,account_price,amount,fee,new_account_pubkey,privateKey,LOpPayload); if Not Result.HasValidSignature then begin FreeAndNil(Result); @@ -1578,7 +1928,9 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; If TPCOperation.OperationToOperationResume(0,Op,True,Op.SignerAccount,OPR) then begin OPR.NOpInsideBlock := i; OPR.Balance := -1; - end else OPR := CT_TOperationResume_NUL; + end else begin + OPR := CT_TOperationResume_NUL; + end; FillOperationResumeToJSONObject(OPR,Obj); end; Result := true; @@ -1642,48 +1994,44 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; Result := true; end; - Function DoDecrypt(RawEncryptedPayload : TRawBytes; jsonArrayPwds : TPCJSONArray) : Boolean; + Function DoDecrypt(jsonArrayPwds : TPCJSONArray) : Boolean; var i : Integer; pkey : TECPrivateKey; decrypted_payload : TRawBytes; + LPayload : TOperationPayload; + s : String; + Lpasswords : TList; Begin - Result := false; - if Length(RawEncryptedPayload)=0 then begin - GetResultObject.GetAsVariant('result').Value:= False; - GetResultObject.GetAsVariant('enc_payload').Value:= ''; - Result := true; - exit; + if Length(params.AsString('payload',''))=0 then begin + ErrorNum:= CT_RPC_ErrNum_InvalidData; + ErrorDesc := 'Need param "payload"'; + Exit(False); end; - for i := 0 to _RPCServer.WalletKeys.Count - 1 do begin - pkey := _RPCServer.WalletKeys.Key[i].PrivateKey; - if (assigned(pkey)) then begin - if TPCEncryption.DoPascalCoinECIESDecrypt(pkey.PrivateKey,RawEncryptedPayload,decrypted_payload) then begin - GetResultObject.GetAsVariant('result').Value:= true; - GetResultObject.GetAsVariant('enc_payload').Value:= TCrypto.ToHexaString(RawEncryptedPayload); - GetResultObject.GetAsVariant('unenc_payload').Value:= decrypted_payload.ToPrintable; - GetResultObject.GetAsVariant('unenc_hexpayload').Value:= TCrypto.ToHexaString(decrypted_payload); - GetResultObject.GetAsVariant('payload_method').Value:= 'key'; - GetResultObject.GetAsVariant('enc_pubkey').Value:= TCrypto.ToHexaString(TAccountComp.AccountKey2RawString(pkey.PublicKey)); - Result := true; - Exit; - end; - end; + LPayload.payload_raw := TCrypto.HexaToRaw(params.AsString('payload','')); + LPayload.payload_type := params.AsInteger('payload_type',0); + if Length(LPayload.payload_raw)=0 then begin + ErrorNum:= CT_RPC_ErrNum_InvalidData; + ErrorDesc := '"payload" param is not an HEXASTRING'; + Exit(False); end; - for i := 0 to jsonArrayPwds.Count - 1 do begin - if TPCEncryption.DoPascalCoinAESDecrypt(RawEncryptedPayload,TEncoding.ANSI.GetBytes(jsonArrayPwds.GetAsVariant(i).AsString('')),decrypted_payload) then begin - GetResultObject.GetAsVariant('result').Value:= true; - GetResultObject.GetAsVariant('enc_payload').Value:= TCrypto.ToHexaString(RawEncryptedPayload); - GetResultObject.GetAsVariant('unenc_payload').Value:= decrypted_payload.ToPrintable; - GetResultObject.GetAsVariant('unenc_hexpayload').Value:= TCrypto.ToHexaString(decrypted_payload); - GetResultObject.GetAsVariant('payload_method').Value:= 'pwd'; - GetResultObject.GetAsVariant('pwd').Value:= jsonArrayPwds.GetAsVariant(i).AsString(''); - Result := true; - exit; + Lpasswords := TList.Create; + Try + for i := 0 to jsonArrayPwds.Count-1 do begin + s := jsonArrayPwds.GetAsVariant(i).AsString(''); + if Lpasswords.IndexOf(s)<0 then Lpasswords.Add(s); end; - end; - // Not found - GetResultObject.GetAsVariant('result').Value:= False; - GetResultObject.GetAsVariant('enc_payload').Value:= TCrypto.ToHexaString(RawEncryptedPayload); + + if TPascalCoinJSONComp.FillEPasaOrDecrypt(-1,LPayload,FNode,FRPCServer.WalletKeys,Lpasswords,GetResultObject) then begin + GetResultObject.GetAsVariant('result').Value:= True; + end else begin + GetResultObject.GetAsVariant('result').Value:= False; + end; + GetResultObject.GetAsVariant('enc_payload').Value:= TCrypto.ToHexaString(LPayload.payload_raw); + + Finally + Lpasswords.Free; + End; + Result := true; End; @@ -1909,7 +2257,7 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; // If using 'dest', only will apply if there is a fixed new public key, otherwise will use current public key of account aux_target_pubkey := new_account_pubkey; end else aux_target_pubkey := account_signer_pubkey; - if Not TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload(RawPayload,Payload_method,EncodePwd,account_signer_pubkey,aux_target_pubkey,LOpPayload,ErrorNum,ErrorDesc) then Exit(Nil); + if Not TPascalCoinJSONComp.CheckAndGetEncodedRAWPayload(RawPayload,[ptNonDeterministic],Payload_method,EncodePwd,account_signer_pubkey,aux_target_pubkey,LOpPayload,ErrorNum,ErrorDesc) then Exit(Nil); Result := TOpChangeAccountInfo.CreateChangeAccountInfo(current_protocol, account_signer,account_last_n_operation+1,account_target, privateKey, @@ -2257,7 +2605,7 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; OperationsHashTree.Free; end; finally - FNode.OperationSequenceLock.Acquire; + FNode.OperationSequenceLock.Release; end; End; @@ -2360,10 +2708,12 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; function FindNOperations : Boolean; Var oprl : TOperationsResumeList; start_block, account, n_operation_min, n_operation_max : Cardinal; - sor : TSearchOperationResult; + sor : TSearchOpHashResult; jsonarr : TPCJSONArray; i : Integer; begin + FNode.OperationSequenceLock.Acquire; // Added to prevent high concurrent API calls + try Result := False; oprl := TOperationsResumeList.Create; try @@ -2381,13 +2731,13 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; start_block := params.AsCardinal('start_block',0); // Optional: 0 = Search all sor := FNode.FindNOperations(account,start_block,true,n_operation_min,n_operation_max,oprl); Case sor of - found : Result := True; - invalid_params : begin + OpHash_found : Result := True; + OpHash_invalid_params : begin ErrorNum:=CT_RPC_ErrNum_NotFound; ErrorDesc:='Not found using block/account/n_operation'; exit; end; - blockchain_block_not_found : begin + OpHash_block_not_found : begin ErrorNum := CT_RPC_ErrNum_InvalidBlock; ErrorDesc:='Blockchain file does not contain all blocks to find'; exit; @@ -2397,12 +2747,15 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; jsonarr := jsonresponse.GetAsArray('result'); if oprl.Count>0 then begin; for i:=0 to oprl.Count-1 do begin - FillOperationResumeToJSONObject(oprl.OperationResume[i],jsonarr.GetAsObject(jsonarr.Count)); + FillOperationResumeToJSONObject(oprl.Items[i],jsonarr.GetAsObject(jsonarr.Count)); end; end; finally oprl.Free; end; + finally + FNode.OperationSequenceLock.Release; + end; end; function MultiOperationAddOperation(Const HexaStringOperationsHashTree : String) : boolean; @@ -2413,6 +2766,45 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; Result := FNode.GetMempoolAccount( nAccount ); end; + Function TryCaptureEPASA(const AJSONObj : TPCJSONObject; out AAccount : Cardinal; out AErrorNum : Integer; out AErrorDesc : String) : Boolean; + var LEPasa : TEPasa; + begin + // Parse EPASA + if NOT TEPasa.TryParse(AJSONObj.AsString('account',''), LEPasa) then begin + AErrorNum := CT_RPC_ErrNum_InvalidData; + AErrorDesc := 'Field "account" missing or invalid EPASA format'; + Exit(False); + end; + + // Resolve EPASA (note: PayToKey returns error in this resolution method) + if NOT FNode.TryResolveEPASA(LEPasa, AAccount, AErrorDesc) then begin + AErrorNum := CT_RPC_ErrNum_InvalidEPASA; + Exit(False); + end; + + // Payload override + if LEPasa.HasPayload then begin + // Only support public payloads for now + if NOT LEPasa.PayloadType.HasTrait(ptPublic) then begin + AErrorNum := CT_RPC_ErrNum_NotImplemented; + AErrorDesc := 'Encrypted payloads not currently supported in DATA operation'; + Exit(false); + end; + + // Ensure no ambiguity with payload arguments + if AJSONObj.HasValue('payload') OR AJSONObj.HasValue('payload_type') then begin + AErrorNum := CT_RPC_ErrNum_AmbiguousPayload; + AErrorDesc := 'Ambiguous Payload between EPASA and method arguments'; + Exit(False); + end; + // Override the JSON args (processed later by caller) + AJSONObj.GetAsVariant('payload').Value := LEPasa.GetRawPayloadBytes.ToHexaString; + AJSONObj.GetAsVariant('payload_type').Value := LEPasa.PayloadType.ToProtocolValue; + end; + AAccount := LEPasa.Account.Value; + Result := True; + end; + var errors : String; OperationsHashTree : TOperationsHashTree; jsonArr : TPCJSONArray; @@ -2421,6 +2813,7 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; receiver : TMultiOpReceiver; changeinfo : TMultiOpChangeInfo; mop : TOpMultiOperation; + LEPASA : TEPasa; begin { This will ADD or UPDATE a MultiOperation with NEW field/s - UPDATE: If LAST operation in HexaStringOperationsHashTree RAW value contains a MultiOperation @@ -2448,7 +2841,7 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; } Result := false; if Not HexaStringToOperationsHashTreeAndGetMultioperation( - Self.FNode.Bank.SafeBox.CurrentProtocol, // HS: 2019-07-09: use current protocol since this API used to build new unpublished operations, not historical ones + Self.FNode.Bank.SafeBox.CurrentProtocol, HexaStringOperationsHashTree,True,OperationsHashTree,mop,errors) then begin ErrorNum:=CT_RPC_ErrNum_InvalidData; ErrorDesc:= 'Error decoding param previous operations hash tree raw value: '+errors; @@ -2459,11 +2852,8 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; jsonArr := params.GetAsArray('senders'); for i:=0 to jsonArr.Count-1 do begin sender := CT_TMultiOpSender_NUL; - if not TAccountComp.AccountTxtNumberToAccountNumber(jsonArr.GetAsObject(i).AsString('account',''),sender.Account) then begin - ErrorNum := CT_RPC_ErrNum_InvalidData; - ErrorDesc := 'Field "account" for "senders" array not found at senders['+IntToStr(i)+']'; + if NOT TryCaptureEPASA(jsonArr.GetAsObject(i), sender.Account, ErrorNum, ErrorDesc) then Exit; - end; sender.Amount:= ToPascalCoins(jsonArr.GetAsObject(i).AsDouble('amount',0)); sender.N_Operation:=jsonArr.GetAsObject(i).AsInteger('n_operation',0); // Update N_Operation with valid info @@ -2481,11 +2871,8 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; jsonArr := params.GetAsArray('receivers'); for i:=0 to jsonArr.Count-1 do begin receiver := CT_TMultiOpReceiver_NUL; - if not TAccountComp.AccountTxtNumberToAccountNumber(jsonArr.GetAsObject(i).AsString('account',''),receiver.Account) then begin - ErrorNum := CT_RPC_ErrNum_InvalidData; - ErrorDesc := 'Field "account" for "receivers" array not found at receivers['+IntToStr(i)+']'; + if NOT TryCaptureEPASA(jsonArr.GetAsObject(i), receiver.Account, ErrorNum, ErrorDesc) then Exit; - end; receiver.Amount:= ToPascalCoins(jsonArr.GetAsObject(i).AsDouble('amount',0)); receiver.Payload.payload_raw:=TCrypto.HexaToRaw(jsonArr.GetAsObject(i).AsString('payload','')); receiver.Payload.payload_type := jsonArr.GetAsObject(i).AsInteger('payload_type',CT_TOperationPayload_NUL.payload_type); @@ -2543,7 +2930,7 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; end; end; // Return multioperation object: - TPascalCoinJSONComp.FillMultiOperationObject(FNode.Bank.SafeBox.CurrentProtocol,mop,GetResultObject); + TPascalCoinJSONComp.FillMultiOperationObject(FNode.Bank.SafeBox.CurrentProtocol,mop,FNode,FRPCServer.WalletKeys,FRPCServer.PayloadPasswords, GetResultObject); finally OperationsHashTree.Free; end; @@ -2680,7 +3067,7 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; Try InternalMultiOperationSignCold(mop,protocol,params.GetAsArray('accounts_and_keys'),j); // Return multioperation object: - TPascalCoinJSONComp.FillMultiOperationObject(protocol,mop,GetResultObject); + TPascalCoinJSONComp.FillMultiOperationObject(protocol,mop,FNode,FRPCServer.WalletKeys,FRPCServer.PayloadPasswords,GetResultObject); Result := True; finally senderOperationsHashTree.Free; @@ -2731,7 +3118,7 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; lSigners.Free; end; // Return multioperation object: - TPascalCoinJSONComp.FillMultiOperationObject(FNode.Bank.SafeBox.CurrentProtocol,mop,GetResultObject); + TPascalCoinJSONComp.FillMultiOperationObject(FNode.Bank.SafeBox.CurrentProtocol,mop,FNode,FRPCServer.WalletKeys,FRPCServer.PayloadPasswords,GetResultObject); Result := True; finally senderOperationsHashTree.Free; @@ -2780,6 +3167,7 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; jsonarr : TPCJSONArray; jso : TPCJSONObject; LRPCProcessMethod : TRPCProcessMethod; + LAccountsList : TList; begin _ro := Nil; _ra := Nil; @@ -2796,10 +3184,17 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; Exit; end; TNode.DecodeIpStringToNodeServerAddressArray(params.AsString('nodes',''),nsaarr); + ansistr := ''; for i:=low(nsaarr) to high(nsaarr) do begin TNetData.NetData.AddServer(nsaarr[i]); + if (params.AsBoolean('whitelist',false)) then begin + ansistr := ansistr + ';' + nsaarr[i].ip; + end; end; jsonresponse.GetAsVariant('result').Value:=length(nsaarr); + if (ansistr<>'') then begin + self.RPCServer.ValidIPs := self.RPCServer.ValidIPs + ';' + ansistr; + end; Result := true; end else if (method='getaccount') then begin // Param "account" contains account number @@ -2834,13 +3229,16 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; Lanl := _RPCServer.WalletKeys.AccountsKeyList.AccountKeyList[i]; k := params.AsInteger('max',100); l := params.AsInteger('start',0); - for j := 0 to Lanl.Count - 1 do begin - if (j>=l) then begin - account := FNode.GetMempoolAccount(Lanl.Get(j)); + LAccountsList := TList.Create; + Try + Lanl.FillList(l,k,LAccountsList); + for j := 0 to LAccountsList.Count - 1 do begin + account := FNode.GetMempoolAccount(LAccountsList[j]); TPascalCoinJSONComp.FillAccountObject(account,jsonarr.GetAsObject(jsonarr.Count)); end; - if (k>0) And ((j+1)>=(k+l)) then break; - end; + Finally + LAccountsList.Free; + End; Result := true; end else begin k := params.AsInteger('max',100); @@ -2848,14 +3246,20 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; c := 0; for i:=0 to _RPCServer.WalletKeys.AccountsKeyList.Count-1 do begin Lanl := _RPCServer.WalletKeys.AccountsKeyList.AccountKeyList[i]; - for j := 0 to Lanl.Count - 1 do begin - if (c>=l) then begin - account := FNode.GetMempoolAccount(Lanl.Get(j)); - TPascalCoinJSONComp.FillAccountObject(account,jsonarr.GetAsObject(jsonarr.Count)); + LAccountsList := TList.Create; + Try + Lanl.FillList(0,Lanl.Count,LAccountsList); + for j := 0 to LAccountsList.Count - 1 do begin + if (c>=l) then begin + account := FNode.GetMempoolAccount(LAccountsList[j]); + TPascalCoinJSONComp.FillAccountObject(account,jsonarr.GetAsObject(jsonarr.Count)); + end; + inc(c); + if (k>0) And (c>=(k+l)) then break; end; - inc(c); - if (k>0) And (c>=(k+l)) then break; - end; + Finally + LAccountsList.Free; + End; if (k>0) And (c>=(k+l)) then break; end; Result := true; @@ -2911,9 +3315,17 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; end; Lanl := _RPCServer.WalletKeys.AccountsKeyList.AccountKeyList[i]; account.balance := 0; - for j := 0 to Lanl.Count - 1 do begin - inc(account.balance, FNode.GetMempoolAccount(Lanl.Get(j)).balance ); - end; + + LAccountsList := TList.Create; + Try + Lanl.FillList(0,Lanl.Count,LAccountsList); + for j := 0 to LAccountsList.Count - 1 do begin + inc(account.balance, FNode.GetMempoolAccount(LAccountsList[j]).balance ); + end; + Finally + LAccountsList.Free; + End; + jsonresponse.GetAsVariant('result').value := ToJSONCurrency(account.balance); Result := true; end else begin @@ -2922,9 +3334,17 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; account.balance := 0; for i:=0 to _RPCServer.WalletKeys.AccountsKeyList.Count-1 do begin Lanl := _RPCServer.WalletKeys.AccountsKeyList.AccountKeyList[i]; - for j := 0 to Lanl.Count - 1 do begin - inc(account.balance, FNode.GetMempoolAccount(Lanl.Get(j)).balance ); - end; + + LAccountsList := TList.Create; + Try + Lanl.FillList(0,Lanl.Count,LAccountsList); + for j := 0 to LAccountsList.Count - 1 do begin + inc(account.balance, FNode.GetMempoolAccount(LAccountsList[j]).balance ); + end; + Finally + LAccountsList.Free; + End; + end; jsonresponse.GetAsVariant('result').value := ToJSONCurrency(account.balance); Result := true; @@ -3035,71 +3455,15 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; // Param "block" contains block. Null = Pending operation // Param "opblock" contains operation inside a block: (0..getblock.operations-1) // Returns a JSON object with operation values as "Operation resume format" - c := params.GetAsVariant('block').AsCardinal(CT_MaxBlock); - if (c>=0) And (c=pcops.Count) then begin - ErrorNum := CT_RPC_ErrNum_InvalidOperation; - ErrorDesc := 'Block/Operation not found: '+IntToStr(c)+'/'+IntToStr(i)+' BlockOperations:'+IntToStr(pcops.Count); - Exit; - end; - If TPCOperation.OperationToOperationResume(c,pcops.Operation[i],True,pcops.Operation[i].SignerAccount,opr) then begin - opr.NOpInsideBlock:=i; - opr.time:=pcops.OperationBlock.timestamp; - opr.Balance := -1; - FillOperationResumeToJSONObject(opr,GetResultObject); - end; - Result := True; - finally - pcops.Free; - end; - end else begin - If (c=CT_MaxBlock) then ErrorDesc := 'Need block param' - else ErrorDesc := 'Block not found: '+IntToStr(c); - ErrorNum := CT_RPC_ErrNum_InvalidBlock; - end; + Result := GetBlockOperation(params.GetAsVariant('block').AsInteger(CT_MaxBlock), + params.GetAsVariant('opblock').AsInteger(CT_MaxBlock),GetResultObject); end else if (method='getblockoperations') then begin // Param "block" contains block // Returns a JSON array with items as "Operation resume format" - c := params.GetAsVariant('block').AsCardinal(CT_MaxBlock); - if (c>=0) And (c=j) then begin - If TPCOperation.OperationToOperationResume(c,pcops.Operation[i],True,pcops.Operation[i].SignerAccount,opr) then begin - opr.NOpInsideBlock:=i; - opr.time:=pcops.OperationBlock.timestamp; - opr.Balance := -1; // Don't include! - FillOperationResumeToJSONObject(opr,jsonarr.GetAsObject(jsonarr.Count)); - end; - end; - if (k>0) And ((i+1)>=(j+k)) then break; - end; - Result := True; - finally - pcops.Free; - end; - end else begin - If (c=CT_MaxBlock) then ErrorDesc := 'Need block param' - else ErrorDesc := 'Block not found: '+IntToStr(c); - ErrorNum := CT_RPC_ErrNum_InvalidBlock; - end; + Result := GetBlockOperations(params.GetAsVariant('block').AsInteger(CT_MaxBlock), + params.GetAsVariant('start').AsInteger(0), + params.GetAsVariant('max').AsInteger(100), + GetResultArray); end else if (method='getaccountoperations') then begin // Returns all the operations affecting an account in "Operation resume format" as an array // Param "account" contains account number @@ -3172,33 +3536,32 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; ErrorDesc:='param ophash not found or invalid hexadecimal value "'+params.AsString('ophash','')+'"'; exit; end; - pcops := TPCOperationsComp.Create(Nil); + if (Length(r1)<>32) then begin + ErrorNum:=CT_RPC_ErrNum_InvalidOperation; + ErrorDesc:='param ophash with invalid length (Expected 64 chars for a 32bytes hexadecimal) value length = '+IntToStr(Length(r1)); + exit; + end; + FNode.OperationSequenceLock.Acquire; // Added to prevent high concurrent API calls try - Case FNode.FindOperationExt(pcops,r1,c,i) of - found : ; - invalid_params : begin + Case FNode.FindOperation(r1,opr) of + OpHash_found : ; + OpHash_invalid_params : begin ErrorNum:=CT_RPC_ErrNum_NotFound; ErrorDesc:='ophash not found: "'+params.AsString('ophash','')+'"'; exit; end; - blockchain_block_not_found : begin + OpHash_block_not_found : begin ErrorNum := CT_RPC_ErrNum_InternalError; - ErrorDesc:='Blockchain block '+IntToStr(c)+' not found to search ophash: "'+params.AsString('ophash','')+'"'; + ErrorDesc:='Blockchain block not found to search ophash: "'+params.AsString('ophash','')+'"'; exit; end; else Raise Exception.Create('ERROR DEV 20171120-4'); end; - If not TPCOperation.OperationToOperationResume(c,pcops.Operation[i],True,pcops.Operation[i].SignerAccount,opr) then begin - ErrorNum := CT_RPC_ErrNum_InternalError; - ErrorDesc := 'Error 20161026-1'; - end; - opr.NOpInsideBlock:=i; - opr.time:=pcops.OperationBlock.timestamp; opr.Balance := -1; // don't include FillOperationResumeToJSONObject(opr,GetResultObject); Result := True; finally - pcops.Free; + FNode.OperationSequenceLock.Release; end; end else if (method='findnoperation') then begin // Search for an operation signed by "account" and with "n_operation", start searching "block" (0=all) @@ -3207,101 +3570,31 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; ErrorNum := CT_RPC_ErrNum_InvalidAccount; Exit; end; + FNode.OperationSequenceLock.Acquire; // Added to prevent high concurrent API calls + try Case FNode.FindNOperation(params.AsCardinal('block',0),c,params.AsCardinal('n_operation',0),opr) of - found : ; - invalid_params : begin + OpHash_found : ; + OpHash_invalid_params : begin ErrorNum:=CT_RPC_ErrNum_NotFound; ErrorDesc:='Not found using block/account/n_operation'; exit; end; - blockchain_block_not_found : begin + OpHash_block_not_found : begin ErrorNum := CT_RPC_ErrNum_InvalidBlock; ErrorDesc:='Blockchain file does not contain all blocks to find'; exit; end; else Raise Exception.Create('ERROR DEV 20171120-5'); end; + finally + FNode.OperationSequenceLock.Release; + end; FillOperationResumeToJSONObject(opr,GetResultObject); Result := True; end else if (method='findnoperations') then begin // Search for all operations signed by "account" and n_operation value between "n_operation_min" and "n_operation_max", start searching at "block" (0=all) // "block" = 0 search in all blocks, pending operations included Result := findNOperations; - end else if (method='sendto') then begin - // Sends "amount" coins from "sender" to "target" with "fee" - // If "payload" is present, it will be encoded using "payload_method" - // "payload_method" types: "none","dest"(default),"sender","aes"(must provide "pwd" param) - // Returns a JSON "Operation Resume format" object when successfull - // Note: "ophash" will contain block "0" = "pending block" - if (Not _RPCServer.AllowUsePrivateKeys) then begin - // Protection when server is locked to avoid private keys call - ErrorNum := CT_RPC_ErrNum_NotAllowedCall; - Exit; - end; - If Not _RPCServer.WalletKeys.IsValidPassword then begin - ErrorNum := CT_RPC_ErrNum_WalletPasswordProtected; - ErrorDesc := 'Wallet is password protected. Unlock first'; - exit; - end; - if Not CaptureAccountNumber('sender',True,c2,ErrorDesc) then begin - ErrorNum := CT_RPC_ErrNum_InvalidAccount; - Exit; - end; - if Not CaptureAccountNumber('target',True,c3,ErrorDesc) then begin - ErrorNum := CT_RPC_ErrNum_InvalidAccount; - Exit; - end; - Result := OpSendTo(c2,c3, - ToPascalCoins(params.AsDouble('amount',0)), - ToPascalCoins(params.AsDouble('fee',0)), - TCrypto.HexaToRaw(params.AsString('payload','')), - params.AsString('payload_method','dest'),params.AsString('pwd','')); - end else if (method='signsendto') then begin - // Create a Transaction operation and adds it into a "rawoperations" (that can include - // previous operations). This RPC method is usefull ffor cold storage, because doesn't - // need to check or verify accounts status/public key, assuming that passed values - // are ok. - // Signs a transaction of "amount" coins from "sender" to "target" with "fee", using "sender_enc_pubkey" or "sender_b58_pubkey" - // and "last_n_operation" of sender. Also, needs "target_enc_pubkey" or "target_b58_pubkey" - // If "payload" is present, it will be encoded using "payload_method" - // "payload_method" types: "none","dest"(default),"sender","aes"(must provide "pwd" param) - // Returns a JSON "Operations info" containing old "rawoperations" plus new Transaction - if (Not _RPCServer.AllowUsePrivateKeys) then begin - // Protection when server is locked to avoid private keys call - ErrorNum := CT_RPC_ErrNum_NotAllowedCall; - Exit; - end; - If Not _RPCServer.WalletKeys.IsValidPassword then begin - ErrorNum := CT_RPC_ErrNum_WalletPasswordProtected; - ErrorDesc := 'Wallet is password protected. Unlock first'; - exit; - end; - if Not CaptureAccountNumber('sender',False,c2,ErrorDesc) then begin - ErrorNum := CT_RPC_ErrNum_InvalidAccount; - Exit; - end; - if Not CaptureAccountNumber('target',False,c3,ErrorDesc) then begin - ErrorNum := CT_RPC_ErrNum_InvalidAccount; - Exit; - end; - If Not CapturePubKey('sender_',senderpubkey,ErrorDesc) then begin - ErrorNum := CT_RPC_ErrNum_InvalidPubKey; - exit; - end; - If Not CapturePubKey('target_',destpubkey,ErrorDesc) then begin - ErrorNum := CT_RPC_ErrNum_InvalidPubKey; - exit; - end; - Result := SignOpSendTo( - params.AsString('rawoperations',''), - params.AsCardinal('protocol',CT_BUILD_PROTOCOL), - c2,c3, - senderpubkey,destpubkey, - params.AsCardinal('last_n_operation',0), - ToPascalCoins(params.AsDouble('amount',0)), - ToPascalCoins(params.AsDouble('fee',0)), - TCrypto.HexaToRaw(params.AsString('payload','')), - params.AsString('payload_method','dest'),params.AsString('pwd','')); end else if (method='changekey') then begin // Change key of "account" to "new_enc_pubkey" or "new_b58_pubkey" (encoded public key format) with "fee" // If "payload" is present, it will be encoded using "payload_method" @@ -3547,10 +3840,11 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; GetResultObject.GetAsObject('netstats').GetAsVariant('tservers').Value:=TNetData.NetData.NetStatistics.TotalServersConnections; GetResultObject.GetAsObject('netstats').GetAsVariant('breceived').Value:=TNetData.NetData.NetStatistics.BytesReceived; GetResultObject.GetAsObject('netstats').GetAsVariant('bsend').Value:=TNetData.NetData.NetStatistics.BytesSend; + GetResultObject.GetAsObject('netstats').GetAsVariant('ips').Value:=TNetData.NetData.IpInfos.Count; {$IFDEF Use_OpenSSL} GetResultObject.GetAsVariant('openssl').Value := IntToHex(OpenSSLVersion,8); {$ENDIF} - nsaarr := TNetData.NetData.NodeServersAddresses.GetValidNodeServers(true,20); + nsaarr := TNetData.NetData.NodeServersAddresses.GetValidNodeServers(true,10); for i := low(nsaarr) to High(nsaarr) do begin jso := GetResultObject.GetAsArray('nodeservers').GetAsObject(i); jso.GetAsVariant('ip').Value := nsaarr[i].ip; @@ -3558,6 +3852,7 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; jso.GetAsVariant('lastcon').Value := nsaarr[i].last_connection; jso.GetAsVariant('attempts').Value := nsaarr[i].total_failed_attemps_to_connect; end; + GetResultObject.GetAsVariant('datafolder').Value:=FNode.GetPascalCoinDataFolder; Result := True; end else if (method='encodepubkey') then begin // Creates a encoded public key based on params @@ -3622,19 +3917,12 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; ErrorNum := CT_RPC_ErrNum_NotAllowedCall; Exit; end; - // Decrypts a "payload" searching for wallet private keys and for array of strings in "pwds" param - // Returns an JSON Object with "result" (Boolean) and - if (params.AsString('payload','')='') then begin - ErrorNum:= CT_RPC_ErrNum_InvalidData; - ErrorDesc := 'Need param "payload"'; - exit; - end; If Not _RPCServer.WalletKeys.IsValidPassword then begin ErrorNum := CT_RPC_ErrNum_WalletPasswordProtected; ErrorDesc := 'Wallet is password protected. Unlock first'; exit; end; - Result := DoDecrypt(TCrypto.HexaToRaw(params.AsString('payload','')),params.GetAsArray('pwds')); + Result := DoDecrypt(params.GetAsArray('pwds')); end else if (method='getconnections') then begin if (Not _RPCServer.AllowUsePrivateKeys) then begin // Protection when server is locked to avoid private keys call @@ -3673,7 +3961,12 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; ErrorNum := CT_RPC_ErrNum_NotAllowedCall; Exit; end; - jsonresponse.GetAsVariant('result').Value := _RPCServer.WalletKeys.LockWallet; + FNode.OperationSequenceLock.Acquire; // Use lock to prevent N_Operation race-condition on concurrent invocations + try + jsonresponse.GetAsVariant('result').Value := _RPCServer.WalletKeys.LockWallet; + finally + FNode.OperationSequenceLock.Release; + end; Result := true; end else if (method='unlock') then begin // Unlocks the Wallet with "pwd" password @@ -3688,11 +3981,16 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; ErrorDesc := 'Need param "pwd"'; exit; end; - If Not _RPCServer.WalletKeys.IsValidPassword then begin - _RPCServer.WalletKeys.WalletPassword:=params.AsString('pwd',''); + FNode.OperationSequenceLock.Acquire; // Use lock to prevent N_Operation race-condition on concurrent invocations + try + If Not _RPCServer.WalletKeys.IsValidPassword then begin + _RPCServer.WalletKeys.WalletPassword:=params.AsString('pwd',''); + end; + jsonresponse.GetAsVariant('result').Value := _RPCServer.WalletKeys.IsValidPassword; + Result := true; + finally + FNode.OperationSequenceLock.Release; end; - jsonresponse.GetAsVariant('result').Value := _RPCServer.WalletKeys.IsValidPassword; - Result := true; end else if (method='setwalletpassword') then begin // Changes the Wallet password with "pwd" param // Must be unlocked first @@ -3713,9 +4011,14 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; ErrorDesc := 'Need param "pwd"'; exit; end; - _RPCServer.WalletKeys.WalletPassword:=params.AsString('pwd',''); - jsonresponse.GetAsVariant('result').Value := _RPCServer.WalletKeys.IsValidPassword; - Result := true; + FNode.OperationSequenceLock.Acquire; // Use lock to prevent N_Operation race-condition on concurrent invocations + try + _RPCServer.WalletKeys.WalletPassword:=params.AsString('pwd',''); + jsonresponse.GetAsVariant('result').Value := _RPCServer.WalletKeys.IsValidPassword; + Result := true; + finally + FNode.OperationSequenceLock.Release; + end; end else if (method='stopnode') then begin // Stops communications to other nodes if (Not _RPCServer.AllowUsePrivateKeys) then begin @@ -3754,6 +4057,14 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; end; Get_node_ip_stats; Result := True; + end else if (method='methods_stats') then begin + if (Not _RPCServer.AllowUsePrivateKeys) then begin + // Protection when server is locked to avoid private keys call + ErrorNum := CT_RPC_ErrNum_NotAllowedCall; + Exit; + end; + GetMethodsCallsStats; + Result := True; end else begin LRPCProcessMethod := FindRegisteredProcessMethod(method); if Assigned(LRPCProcessMethod) then begin @@ -3765,26 +4076,77 @@ function TRPCProcess.ProcessMethod(const method: String; params: TPCJSONObject; end; end; +class procedure TRPCProcess.ProcessMethodCalled(const AMethodName: String; + AStartTickCount: TTickCount); +var + P, PFound : PRegisteredRPCProcessMethod; + i : Integer; +begin + if Not Assigned(_RPCProcessMethods) then begin + _RPCProcessMethods := TOrderedList.Create(False,TRegisteredRPCProcessMethod_Comparer); + end; + New(P); + try + P.Clear; + P.MethodName := AMethodName; + if _RPCProcessMethods.Find(P,i) then begin + PFound := _RPCProcessMethods.Get(i); + end else begin + // Create + New(PFound); + PFound.Clear; + PFound.MethodName := AMethodName; + _RPCProcessMethods.Add(PFound); + end; + if (AStartTickCount>0) then begin + inc(PFound.CallsCounter); + inc(PFound.ElapsedMilis,Int64(TPlatform.GetElapsedMilliseconds(AStartTickCount))); + end; + finally + Dispose(P); + end; +end; + class procedure TRPCProcess.RegisterProcessMethod(const AMethodName: String; ARPCProcessMethod: TRPCProcessMethod); -var LRegistered : TRegisteredRPCProcessMethod; +var + P, PFound : PRegisteredRPCProcessMethod; + i : Integer; begin if Not Assigned(_RPCProcessMethods) then begin - _RPCProcessMethods := TList.Create; + _RPCProcessMethods := TOrderedList.Create(False,TRegisteredRPCProcessMethod_Comparer); + end; + New(P); + try + P.Clear; + P.MethodName := AMethodName; + if _RPCProcessMethods.Find(P,i) then begin + PFound := _RPCProcessMethods.Get(i); + end else begin + // Create + New(PFound); + PFound.Clear; + PFound.MethodName := AMethodName; + _RPCProcessMethods.Add(PFound); + end; + PFound.RPCProcessMethod := ARPCProcessMethod; + finally + Dispose(P); end; - if Assigned(FindRegisteredProcessMethod(AMethodName)) then Exit; // Duplicated! - LRegistered.MethodName := AMethodName; - LRegistered.RPCProcessMethod := ARPCProcessMethod; - _RPCProcessMethods.Add(LRegistered); end; class procedure TRPCProcess.UnregisterProcessMethod(const AMethodName: String); -var i : Integer; +var + P : PRegisteredRPCProcessMethod; + i : Integer; begin if Not Assigned(_RPCProcessMethods) then Exit; - for i := _RPCProcessMethods.Count-1 downto 0 do begin - if AnsiSameStr(_RPCProcessMethods.Items[i].MethodName , AMethodName) then begin - _RPCProcessMethods.Delete(i); - end; + New(P); + try + P.Clear; + P.MethodName := AMethodName; + _RPCProcessMethods.Remove(P); + finally + Dispose(P); end; end; @@ -3836,16 +4198,29 @@ destructor TRPCServerThread.Destroy; procedure DoFinalize; var i : Integer; + P : PRegisteredRPCProcessMethod; begin if Assigned(_RPCProcessMethods) then begin for i := _RPCProcessMethods.Count-1 downto 0 do begin + P := _RPCProcessMethods.Get(i); _RPCProcessMethods.Delete(i); + Dispose(P); end; end; FreeAndNil(_RPCProcessMethods); FreeAndNil(_RPCServer); end; +{ TRegisteredRPCProcessMethod } + +procedure TRegisteredRPCProcessMethod.Clear; +begin + Self.MethodName := ''; + Self.RPCProcessMethod := Nil; + Self.CallsCounter := 0; + Self.ElapsedMilis := 0; +end; + initialization finalization DoFinalize; diff --git a/src/core/USettings.pas b/src/core/USettings.pas index 83afca03f..ab01da2be 100644 --- a/src/core/USettings.pas +++ b/src/core/USettings.pas @@ -39,6 +39,7 @@ interface CT_PARAM_SaveDebugLogs = 'SaveDebugLogs'; CT_PARAM_ShowLogs = 'ShowLogs'; CT_PARAM_MinerName = 'MinerName'; + CT_PARAM_MaxPayToKeyPurchasePrice = 'MaxPayToKeyPurchasePrice'; CT_PARAM_RunCount = 'RunCount'; CT_PARAM_FirstTime = 'FirstTime'; CT_PARAM_ShowModalMessages = 'ShowModalMessages'; @@ -53,6 +54,7 @@ interface CT_PARAM_ShowHashRateAs = 'ShowHashRateAs'; CT_PARAM_AllowDownloadNewCheckpointIfOlderThan = 'AllowDownloadNewCheckpointIfOlderThan'; CT_PARAM_MinFutureBlocksToDownloadNewSafebox = 'MinFutureBlocksToDownloadNewSafebox'; + CT_PARAM_UILanguage = 'UILanguage'; type @@ -60,6 +62,10 @@ interface TMinerPrivateKeyType = (mpk_NewEachTime, mpk_Random, mpk_Selected); + { TShowHashRateAs } + + TShowHashRateAs = (hr_Unit, hr_Kilo, hr_Mega, hr_Giga, hr_Tera, hr_Peta, hr_Exa); + { TSettings } TSettings = class @@ -71,19 +77,15 @@ TSettings = class class function GetMinFutureBlocksToDownloadNewSafebox: Integer; static; class procedure SetAllowDownloadNewCheckpointIfOlderThan(ABool: Boolean); static; class procedure SetInternetServerPort(AInt:Integer); static; - class function GetRpcPortEnabled : boolean; static; + class function GetJsonRpcPortEnabled : boolean; static; class procedure SetMinFutureBlocksToDownloadNewSafebox(AInt: Integer); static; - class procedure SetRpcPortEnabled(ABool: boolean); static; + class procedure SetJsonRpcPortEnabled(ABool: boolean); static; class function GetDefaultFee : Int64; static; class procedure SetDefaultFee(AInt64: Int64); static; class function GetMinerPrivateKeyType : TMinerPrivateKeyType; static; class procedure SetMinerPrivateKeyType(AType: TMinerPrivateKeyType); static; - class function GetMinerSelectedPrivateKey : TRawBytes; static; - class procedure SetMinerSelectedPrivateKey(AKey:TRawBytes); static; - class function GetMinerServerRpcActive : boolean; static; - class procedure SetMinerServerRpcActive(ABool: Boolean); static; - class function GetMinerServerRpcPort : Integer; static; - class procedure SetMinerServerRpcPort(APort: Integer); static; + class function GetMinerSelectedPublicKey : TRawBytes; static; + class procedure SetMinerSelectedPublicKey(AKey:TRawBytes); static; class function GetSaveLogFiles : boolean; static; class procedure SetSaveLogFiles(ABool: boolean); static; class function GetShowLogs : boolean; static; @@ -94,14 +96,27 @@ TSettings = class class procedure SetMinerName(AName: string); static; class function GetRunCount : Integer; static; class procedure SetRunCount(AInt: Integer); static; + class function GetFirstTime : Boolean; static; + class procedure SetFirstTime(ABool: Boolean); static; + class function GetMaxPayToKeyPurchasePrice : UInt64; static; + class procedure SetMaxPayToKeyPurchasePrice(AVal: UInt64); static; class function GetShowModalMessages : boolean; static; class procedure SetShowModalMessages(ABool: boolean); static; - class function GetRpcAllowedIPs : string; static; - class procedure SetRpcAllowedIPs(AString: string); static; + class function GetJsonRpcAllowedIPs : string; static; + class procedure SetJsonRpcAllowedIPs(AString: string); static; + class function GetJsonRpcMinerServerActive : boolean; static; + class procedure SetJsonRpcMinerServerActive(ABool: Boolean); static; + class function GetMinerServerRpcPort : Integer; static; + class procedure SetMinerServerRpcPort(APort: Integer); static; + class function GetHashRateAvgBlocksCount : Integer; static; + class procedure SetHashRateAvgBlocksCount(AInt: Integer); static; + class function GetShowHashRateAs : TShowHashRateAs; static; + class procedure SetShowHashRateAs(AVal: TShowHashRateAs); static; class function GetPeerCache : string; static; class procedure SetPeerCache(AString: string); static; class function GetTryConnectOnlyWithThisFixedServers : string; static; class procedure SetTryConnectOnlyWithThisFixedServers(AString: string); static; + class procedure CheckNotLoaded; class procedure CheckLoaded; class procedure NotifyOnChanged; public @@ -109,18 +124,22 @@ TSettings = class class procedure Save; class property OnChanged : TNotifyManyEvent read FOnChanged; class property InternetServerPort : Integer read GetInternetServerPort write SetInternetServerPort; - class property RpcPortEnabled : boolean read GetRpcPortEnabled write SetRpcPortEnabled; - class property RpcAllowedIPs : string read GetRpcAllowedIPs write SetRpcAllowedIPs; + class property JsonRpcPortEnabled : boolean read GetJsonRpcPortEnabled write SetJsonRpcPortEnabled; + class property JsonRpcAllowedIPs : string read GetJsonRpcAllowedIPs write SetJsonRpcAllowedIPs; + class property JsonRpcMinerServerActive : boolean read GetJsonRpcMinerServerActive write SetJsonRpcMinerServerActive; + class property JsonRpcMinerServerPort : Integer read GetMinerServerRpcPort write SetMinerServerRpcPort; + class property HashRateAvgBlocksCount : Integer read GetHashRateAvgBlocksCount write SetHashRateAvgBlocksCount; + class property ShowHashRateAs : TShowHashRateAs read GetShowHashRateAs write SetShowHashRateAs; class property DefaultFee : Int64 read GetDefaultFee write SetDefaultFee; class property MinerPrivateKeyType : TMinerPrivateKeyType read GetMinerPrivateKeyType write SetMinerPrivateKeyType; - class property MinerSelectedPrivateKey : TRawBytes read GetMinerSelectedPrivateKey write SetMinerSelectedPrivateKey; - class property MinerServerRpcActive : boolean read GetMinerServerRpcActive write SetMinerServerRpcActive; - class property MinerServerRpcPort : Integer read GetMinerServerRpcPort write SetMinerServerRpcPort; + class property MinerSelectedPublicKey : TRawBytes read GetMinerSelectedPublicKey write SetMinerSelectedPublicKey; class property SaveLogFiles : boolean read GetSaveLogFiles write SetSaveLogFiles; class property ShowLogs : boolean read GetShowLogs write SetShowLogs; class property SaveDebugLogs : boolean read GetSaveDebugLogs write SetSaveDebugLogs; class property MinerName : string read GetMinerName write SetMinerName; class property RunCount : Integer read GetRunCount write SetRunCount; + class property FirstTime : Boolean read GetFirstTime write SetFirstTime; + class property MaxPayToKeyPurchasePrice : UInt64 read GetMaxPayToKeyPurchasePrice write SetMaxPayToKeyPurchasePrice; class property ShowModalMessages : boolean read GetShowModalMessages write SetShowModalMessages; class property PeerCache : string read GetPeerCache write SetPeerCache; class property TryConnectOnlyWithThisFixedServers : string read GetTryConnectOnlyWithThisFixedServers write SetTryConnectOnlyWithThisFixedServers; @@ -139,13 +158,22 @@ implementation class procedure TSettings.Load; begin + CheckNotLoaded; FAppParams := TAppParams.Create(nil); FAppParams.FileName := TNode.GetPascalCoinDataFolder+PathDelim+'AppParams.prm'; + + If FAppParams.FindParam(CT_PARAM_MinerName)=Nil then begin + // New configuration... assigning a new random value + FAppParams.ParamByName[CT_PARAM_MinerName].SetAsString('New Node '+DateTimeToStr(Now)+' - '+ CT_ClientAppVersion); + end; + end; class procedure TSettings.Save; begin //TODO Update FAppParams to optionally save on set value, and make FApp.Save public and verify all AppParams updates in client code + CheckLoaded; + OnChanged.Invoke(Nil); end; class function TSettings.GetInternetServerPort : Integer; @@ -178,40 +206,65 @@ class procedure TSettings.SetInternetServerPort(AInt:Integer); FAppParams.ParamByName[CT_PARAM_InternetServerPort].SetAsInteger(AInt); end; -class function TSettings.GetRpcPortEnabled : boolean; +class procedure TSettings.SetMinFutureBlocksToDownloadNewSafebox(AInt: Integer); begin CheckLoaded; - Result := FAppParams.ParamByName[CT_PARAM_JSONRPCEnabled].GetAsBoolean(false); + FAppParams.ParamByName[CT_PARAM_MinFutureBlocksToDownloadNewSafebox].SetAsInteger(AInt); end; -class procedure TSettings.SetMinFutureBlocksToDownloadNewSafebox(AInt: Integer); +class function TSettings.GetJsonRpcPortEnabled : boolean; begin CheckLoaded; - FAppParams.ParamByName[CT_PARAM_MinFutureBlocksToDownloadNewSafebox].SetAsInteger(AInt); + Result := FAppParams.ParamByName[CT_PARAM_JSONRPCEnabled].GetAsBoolean(false); end; -class procedure TSettings.SetRpcPortEnabled(ABool: boolean); +class procedure TSettings.SetJsonRpcPortEnabled(ABool: boolean); begin CheckLoaded; FAppParams.ParamByName[CT_PARAM_JSONRPCEnabled].SetAsBoolean(ABool); end; -class function TSettings.GetRpcAllowedIPs : string; +class function TSettings.GetJsonRpcAllowedIPs : string; begin CheckLoaded; Result := FAppParams.ParamByName[CT_PARAM_JSONRPCAllowedIPs].GetAsString('127.0.0.1;'); end; -class procedure TSettings.SetRpcAllowedIPs(AString: string); +class procedure TSettings.SetJsonRpcAllowedIPs(AString: string); begin CheckLoaded; FAppParams.ParamByName[CT_PARAM_JSONRPCAllowedIPs].SetAsString(AString); end; +class function TSettings.GetHashRateAvgBlocksCount : Integer; +begin + CheckLoaded; + Result := FAppParams.ParamByName[CT_PARAM_HashRateAvgBlocksCount].GetAsInteger(50) +end; + +class procedure TSettings.SetHashRateAvgBlocksCount(AInt: Integer); +begin + CheckLoaded; + FAppParams.ParamByName[CT_PARAM_HashRateAvgBlocksCount].SetAsInteger(AInt); +end; + +class function TSettings.GetShowHashRateAs : TShowHashRateAs; +begin + CheckLoaded; + Result := TShowHashRateAs(FAppParams.ParamByName[CT_PARAM_ShowHashRateAs].GetAsInteger(Integer({$IFDEF TESTNET}hr_Mega{$ELSE}hr_Tera{$ENDIF}))); +end; + +class procedure TSettings.SetShowHashRateAs(AVal: TShowHashRateAs); +begin + CheckLoaded; + FAppParams.ParamByName[CT_PARAM_ShowHashRateAs].SetAsInteger(Integer(AVal)); +end; + class function TSettings.GetDefaultFee : Int64; begin CheckLoaded; Result := FAppParams.ParamByName[CT_PARAM_DefaultFee].GetAsInt64(0); + if (Not CT_AllowPropagate0feeOperations) and (Result<=0) then Result := 1; end; class procedure TSettings.SetDefaultFee(AInt64: Int64); @@ -220,13 +273,13 @@ class procedure TSettings.SetDefaultFee(AInt64: Int64); FAppParams.ParamByName[CT_PARAM_DefaultFee].SetAsInt64(AInt64); end; -class function TSettings.GetMinerServerRpcActive : boolean; +class function TSettings.GetJsonRpcMinerServerActive : boolean; begin CheckLoaded; Result := FAppParams.ParamByName[CT_PARAM_JSONRPCMinerServerActive].GetAsBoolean(true); end; -class procedure TSettings.SetMinerServerRpcActive(ABool: Boolean); +class procedure TSettings.SetJsonRpcMinerServerActive(ABool: Boolean); begin CheckLoaded; FAppParams.ParamByName[CT_PARAM_JSONRPCMinerServerActive].SetAsBoolean(ABool); @@ -256,13 +309,13 @@ class procedure TSettings.SetMinerPrivateKeyType(AType: TMinerPrivateKeyType); FAppParams.ParamByName[CT_PARAM_MinerPrivateKeyType].SetAsInteger(Integer(AType)); end; -class function TSettings.GetMinerSelectedPrivateKey : TRawBytes; +class function TSettings.GetMinerSelectedPublicKey : TRawBytes; begin CheckLoaded; Result := FAppParams.ParamByName[CT_PARAM_MinerPrivateKeySelectedPublicKey].GetAsTBytes(Nil); end; -class procedure TSettings.SetMinerSelectedPrivateKey(AKey:TRawBytes); +class procedure TSettings.SetMinerSelectedPublicKey(AKey:TRawBytes); begin CheckLoaded; FAppParams.ParamByName[CT_PARAM_MinerPrivateKeySelectedPublicKey].SetAsTBytes(AKey); @@ -328,6 +381,30 @@ class procedure TSettings.SetRunCount(AInt: Integer); FAppParams.ParamByName[CT_PARAM_RunCount].SetAsInteger(AInt) end; +class function TSettings.GetFirsttime : Boolean; +begin + CheckLoaded; + Result := FAppParams.ParamByName[CT_PARAM_FirstTime].GetAsBoolean(true); +end; + +class procedure TSettings.SetFirstTime(ABool: Boolean); +begin + CheckLoaded; + FAppParams.ParamByName[CT_PARAM_FirstTime].SetAsBoolean(ABool); +end; + +class function TSettings.GetMaxPayToKeyPurchasePrice : UInt64; +begin + CheckLoaded; + Result := FAppParams.ParamByName[CT_PARAM_MaxPayToKeyPurchasePrice].GetAsUInt64(CT_DEFAULT_PAY_TO_KEY_MAX_MOLINAS); +end; + +class procedure TSettings.SetMaxPayToKeyPurchasePrice(AVal: UInt64); +begin + CheckLoaded; + FAppParams.ParamByName[CT_PARAM_MaxPayToKeyPurchasePrice].SetAsUInt64(AVal); +end; + class function TSettings.GetShowModalMessages : boolean; begin CheckLoaded; @@ -364,6 +441,12 @@ class procedure TSettings.SetTryConnectOnlyWithThisFixedServers(AString: string) FAppParams.ParamByName[CT_PARAM_TryToConnectOnlyWithThisFixedServers].SetAsString(Trim(AString)); end; +class procedure TSettings.CheckNotLoaded; +begin + if Assigned(FAppParams) then + raise Exception.Create('Application settings have already been loaded'); +end; + class procedure TSettings.CheckLoaded; begin if not Assigned(FAppParams) then diff --git a/src/core/UTCPIP.pas b/src/core/UTCPIP.pas index 75e5e6e84..5bb1d3ead 100644 --- a/src/core/UTCPIP.pas +++ b/src/core/UTCPIP.pas @@ -333,7 +333,12 @@ constructor TNetTcpIpClient.Create(AOwner : TComponent); destructor TNetTcpIpClient.Destroy; begin - Disconnect; + FLock.Acquire; + try + Disconnect; + finally + FLock.Release; + end; {$IFDEF Synapse} // Memory leak on 1.5.0 FreeAndNil(FSendBufferLock); {$ENDIF} diff --git a/src/core/UThread.pas b/src/core/UThread.pas index 69a114603..d916bccc7 100644 --- a/src/core/UThread.pas +++ b/src/core/UThread.pas @@ -81,6 +81,7 @@ interface constructor Create(CreateSuspended: Boolean); destructor Destroy; override; Property DebugStep : String read FDebugStep write FDebugStep; + Property StartTickCount : TTickCount read FStartTickCount; property Terminated; End; @@ -183,7 +184,7 @@ implementation constructor TPCThread.Create(CreateSuspended: Boolean); begin inherited Create(CreateSuspended); - {$IFDEF HIGHLOG}TLog.NewLog(ltdebug,Classname,'Created Thread '+IntToHex(PtrInt(Self),8));{$ENDIF} + {$IFDEF HIGHLOG}TLog.NewLog(ltdebug,Classname,'Created Thread '+IntToHex(PtrInt(Self),16));{$ENDIF} end; destructor TPCThread.Destroy; @@ -204,7 +205,7 @@ procedure TPCThread.Execute; FDebugStep := ''; i := _threads.Add(Self); try - {$IFDEF HIGHLOG}TLog.NewLog(ltdebug,Classname,'Starting Thread '+IntToHex(PtrInt(Self),8)+' in pos '+inttostr(i+1));{$ENDIF} + {$IFDEF HIGHLOG}TLog.NewLog(ltdebug,Classname,'Starting Thread '+IntToHex(PtrInt(Self),16)+' in pos '+inttostr(i+1));{$ENDIF} Try Try BCExecute; @@ -346,9 +347,9 @@ class function TPCThread.TryProtectEnterCriticalSection(const Sender: TObject; if lockStartedTimestamp=0 then tc3 := 0 else tc3 := tc2-lockStartedTimestamp; s := Format('Cannot Protect a critical section %s %s class %s after %d milis locked by %s waiting %d-%d elapsed milis: %d', - [IntToHex(PtrInt(Lock),8),Lock.Name, + [IntToHex(PtrInt(Lock),16),Lock.Name, Sender.ClassName,tc2-tc, - IntToHex(lockCurrThread,8)+'-'+IntToHex(Lock.CurrentThread,8), + IntToHex(lockCurrThread,16)+'-'+IntToHex(Lock.CurrentThread,16), lockWatingForCounter,Lock.WaitingForCounter, tc3 ]); @@ -434,9 +435,11 @@ procedure TPCThreadList.UnlockList; {$IFDEF HIGHLOG} procedure TPCCriticalSection.Acquire; Var continue, logged : Boolean; - startTC : TTickCount; + startTC, LLastTC : TTickCount; + LWaitMillis : Int64; begin startTC := TPlatform.GetTickCount; + LLastTC := startTC; FCounterLock.Acquire; try FWaitingForCounter := FWaitingForCounter + 1; @@ -444,21 +447,23 @@ procedure TPCCriticalSection.Acquire; FCounterLock.Release; end; logged := false; + LWaitMillis := 1000; Repeat continue := inherited TryEnter; if (Not continue) then begin - If (not logged) And (TPlatform.GetElapsedMilliseconds(startTC)>1000) then begin + If (TPlatform.GetElapsedMilliseconds(LLastTC)>LWaitMillis) then begin + LLastTC := TPlatform.GetTickCount; + inc(LWaitMillis,LWaitMillis); logged := true; - TLog.NewLog(ltdebug,ClassName,'ALERT Critical section '+IntToHex(PtrInt(Self),8)+' '+Name+ - ' locked by '+IntToHex(FCurrentThread,8)+' waiting '+ + TLog.NewLog(ltdebug,ClassName,'ALERT Critical section '+IntToHex(PtrInt(Self),16)+' '+Name+ + ' locked by '+IntToHex(FCurrentThread,16)+' waiting '+ IntToStr(FWaitingForCounter)+' elapsed milis: '+IntToStr(TPlatform.GetElapsedMilliseconds(startTC))); - continue := true; - inherited; end else sleep(1); + sleep(1); end; Until continue; if (logged) then begin - TLog.NewLog(ltdebug,Classname,'ENTER Critical section '+IntToHex(PtrInt(Self),8)+' '+Name+' elapsed milis: '+IntToStr(TPlatform.GetElapsedMilliseconds(startTC)) ); + TLog.NewLog(ltdebug,Classname,'ENTER Critical section '+IntToHex(PtrInt(Self),16)+' '+Name+' elapsed milis: '+IntToStr(TPlatform.GetElapsedMilliseconds(startTC)) ); end; FCounterLock.Acquire; try @@ -479,7 +484,7 @@ constructor TPCCriticalSection.Create(const AName : String); FStartedTickCount := 0; FName := AName; inherited Create; - {$IFDEF HIGHLOG}TLog.NewLog(ltDebug,ClassName,'Created critical section '+IntToHex(PtrInt(Self),8)+' '+AName );{$ENDIF} + {$IFDEF HIGHLOG}TLog.NewLog(ltDebug,ClassName,'Created critical section '+IntToHex(PtrInt(Self),16)+' '+AName );{$ENDIF} end; destructor TPCCriticalSection.Destroy; diff --git a/src/core/UTxMultiOperation.pas b/src/core/UTxMultiOperation.pas index 672602b84..c011e636c 100644 --- a/src/core/UTxMultiOperation.pas +++ b/src/core/UTxMultiOperation.pas @@ -23,9 +23,9 @@ interface uses - Classes, SysUtils, UCrypto, UBlockChain, UAccounts, UBaseTypes, + Classes, SysUtils, UCrypto, UBlockChain, UAccounts, UBaseTypes, UEPasa, {$IFNDEF FPC}System.Generics.Collections{$ELSE}Generics.Collections{$ENDIF}, - UPCDataTypes; + UPCDataTypes, UOrderedList; Type @@ -122,7 +122,7 @@ interface function CheckSignatures(AccountTransaction : TPCSafeBoxTransaction; var errors : String) : Boolean; function DoOperation(AccountPreviousUpdatedBlock : TAccountPreviousBlockInfo; AccountTransaction : TPCSafeBoxTransaction; var errors : String) : Boolean; override; - procedure AffectedAccounts(list : TList); override; + procedure AffectedAccounts(list : TOrderedList); override; // Function DoSignMultiOperationSigner(current_protocol : Word; SignerAccount : Cardinal; key : TECPrivateKey) : Integer; class function OpType : Byte; override; @@ -320,7 +320,7 @@ function TOpMultiOperation.SaveOpToStream(Stream: TStream; SaveExtendedData: Boo // Will save protocol info if FProtocolVersionCT_MAX_MultiOperation_Senders then Raise Exception.Create('Max senders'); @@ -504,6 +504,7 @@ function TOpMultiOperation.CheckSignatures(AccountTransaction: TPCSafeBoxTransac ophtosign := GetDigestToSign; // Tx verification For i:=Low(FData.txSenders) to High(FData.txSenders) do begin + if (FData.txSenders[i].Account<0) or (FData.txSenders[i].Account>=AccountTransaction.FreezedSafeBox.AccountsCount) then Exit(False); // Preventing exception acc := AccountTransaction.Account(FData.txSenders[i].Account); If (length(FData.txSenders[i].Signature.r)>0) And (length(FData.txSenders[i].Signature.s)>0) then begin @@ -523,6 +524,7 @@ function TOpMultiOperation.CheckSignatures(AccountTransaction: TPCSafeBoxTransac end; // Change verification For i:=Low(FData.changesInfo) to High(FData.changesInfo) do begin + if (FData.changesInfo[i].Account<0) or (FData.changesInfo[i].Account>=AccountTransaction.FreezedSafeBox.AccountsCount) then Exit(False); // Preventing exception acc := AccountTransaction.Account(FData.changesInfo[i].Account); If (length(FData.changesInfo[i].Signature.r)>0) And (length(FData.changesInfo[i].Signature.s)>0) then begin @@ -678,7 +680,7 @@ function TOpMultiOperation.DoOperation(AccountPreviousUpdatedBlock : TAccountPre end; If (account_name in chi.changes_type) then begin If (Length(chi.New_Name)>0) then begin - If Not TPCSafeBox.ValidAccountName(chi.New_Name,errors) then Exit; + If Not TPascalCoinProtocol.IsValidAccountName(AccountTransaction.FreezedSafeBox.CurrentProtocol,chi.New_Name,errors) then Exit; // Check name not found! j := AccountTransaction.FindAccountByNameInTransaction(chi.New_Name,newNameWasAdded, newNameWasDeleted); If (j>=0) Or (newNameWasAdded) or (newNameWasDeleted) then begin @@ -763,7 +765,7 @@ function TOpMultiOperation.DoOperation(AccountPreviousUpdatedBlock : TAccountPre Result := True; end; -procedure TOpMultiOperation.AffectedAccounts(list: TList); +procedure TOpMultiOperation.AffectedAccounts(list: TOrderedList); Var i : Integer; Procedure _doAdd(nAcc : Cardinal); Begin diff --git a/src/core/UWallet.pas b/src/core/UWallet.pas index 012135414..f4bb3f607 100644 --- a/src/core/UWallet.pas +++ b/src/core/UWallet.pas @@ -592,7 +592,7 @@ class function TWallet.GetMiningKey: TAccountKey; Result := CT_TECDSA_Public_Nul; case TSettings.MinerPrivateKeyType of mpk_NewEachTime: PublicK := CT_TECDSA_Public_Nul; - mpk_Selected: PublicK := TAccountComp.RawString2Accountkey(TSettings.MinerSelectedPrivateKey); + mpk_Selected: PublicK := TAccountComp.RawString2Accountkey(TSettings.MinerSelectedPublicKey); mpk_Random: begin PublicK := CT_TECDSA_Public_Nul; if FKeys.Count>0 then PublicK := FKeys.Key[Random(FKeys.Count)].AccountKey; @@ -612,7 +612,7 @@ class function TWallet.GetMiningKey: TAccountKey; // Set to Settings if not mpk_NewEachTime if (TSettings.MinerPrivateKeyType<>mpk_NewEachTime) then begin TSettings.MinerPrivateKeyType:=mpk_Selected; - TSettings.MinerSelectedPrivateKey := TAccountComp.AccountKey2RawString(PublicK); + TSettings.MinerSelectedPublicKey := TAccountComp.AccountKey2RawString(PublicK); end; finally PK.Free; diff --git a/src/core/mormot.core.fpcx64mm.pas b/src/core/mormot.core.fpcx64mm.pas new file mode 100644 index 000000000..59947ed54 --- /dev/null +++ b/src/core/mormot.core.fpcx64mm.pas @@ -0,0 +1,3382 @@ +// 2021-12-15 DOWNLOADED FROM https://raw.githubusercontent.com/synopse/mORMot2/master/src/core/mormot.core.fpcx64mm.pas +// Added some changes: +// {$define FPCMM_SERVER} <- Enable! +// + +/// Fast Memory Manager for FPC x86_64 +// - this unit is a part of the Open Source Synopse mORMot framework 2, +// licensed under a MPL/GPL/LGPL three license - see LICENSE.md +unit mormot.core.fpcx64mm; + +{ + ***************************************************************************** + + A Multi-thread Friendly Memory Manager for FPC written in x86_64 assembly + - targetting Linux (and Windows) multi-threaded Services + - only for FPC on the x86_64 target - use the RTL MM on Delphi or ARM + - based on proven FastMM4 by Pierre le Riche - with tuning and enhancements + - can report detailed statistics (with threads contention and memory leaks) + - three app modes: default mono-thread friendly, FPCMM_SERVER or FPCMM_BOOST + + Usage: include this unit as the very first in your FPC project uses clause + + Why another Memory Manager on FPC? + - The built-in heap.inc is well written and cross-platform and cross-CPU, + but its threadvar arena for small blocks tends to consume a lot of memory + on multi-threaded servers, and has suboptimal allocation performance + - C memory managers (glibc, Intel TBB, jemalloc) have a very high RAM + consumption (especially Intel TBB) and do panic/SIGKILL on any GPF + - Pascal alternatives (FastMM4,ScaleMM2,BrainMM) are Windows+Delphi specific + - Our lockess round-robin of tiny blocks and freemem bin list are unique + algorithms among Memory Managers, and match modern CPUs and workloads + - It was so fun diving into SSE2 x86_64 assembly and Pierre's insight + - Resulting code is still easy to understand and maintain + + DISCLAMER: seems stable on Linux and Win64 but feedback is welcome! + + ***************************************************************************** +} + +{ ---- Ready-To-Use Scenarios for Memory Manager Tuning } + +{ + TL;DR: + 1. default settings target LCL/console mono-threaded apps; + 2. define FPCMM_SERVER for a multi-threaded service/daemon. +} + +// target a multi-threaded service on a modern CPU +// - define FPCMM_DEBUG, FPCMM_ASSUMEMULTITHREAD, FPCMM_ERMS, FPCMM_LOCKLESSFREE +// - currently mormot2tests run with no sleep when FPCMM_SERVER is set :) +// - you may try to define FPCMM_BOOST for even more aggressive settings. +{$define FPCMM_SERVER} + +// increase settings for very aggressive multi-threaded process +// - try to enable it if unexpected SmallGetmemSleepCount/SmallFreememSleepCount +// and SleepCount/SleepCycles contentions are reported by CurrentHeapStatus; +// - tiny blocks will be <= 256 bytes (instead of 128 bytes); +// - FPCMM_BOOSTER will use 2x more tiny blocks arenas - likely to be wasteful; +// - will enable FPCMM_SMALLNOTWITHMEDIUM trying to reduce medium sleeps; +// - warning: depending on the workload and hardware, it may actually be slower, +// triggering more Meidum arena contention, and consuming more RAM: consider +// FPCMM_SERVER as a fair alternative. +{.$define FPCMM_BOOST} +{.$define FPCMM_BOOSTER} + + +{ ---- Fine Grained Memory Manager Tuning } + +// includes more detailed information to WriteHeapStatus() +{.$define FPCMM_DEBUG} + +// on thread contention, don't spin executing "pause" but directly call Sleep() +// - may help on a single core CPU, or for very specific workloads +{.$define FPCMM_NOPAUSE} + +// let FPCMM_DEBUG include SleepCycles information from rdtsc +// and FPCMM_PAUSE call rdtsc for its spinnning loop +// - since rdtsc is emulated so unrealiable on VM, it is disabled by default +{.$define FPCMM_SLEEPTSC} + +// checks leaks and write them to the console at process shutdown +// - only basic information will be included: more debugging information (e.g. +// call stack) may be gathered using heaptrc or valgrid +{.$define FPCMM_REPORTMEMORYLEAKS} + +// won't check the IsMultiThread global, but assume it is true +// - multi-threaded apps (e.g. a Server Daemon instance) will be faster with it +// - mono-threaded (console/LCL) apps are faster without this conditional +{.$define FPCMM_ASSUMEMULTITHREAD} + +// let Freemem multi-thread contention use a lockless algorithm +// - on contention, Freemem won't yield the thread using an OS call, but fill +// an internal Bin list which will be released when the lock becomes available +// - beneficial from our tests on high thread contention (HTTP/REST server) +{.$define FPCMM_LOCKLESSFREE} + +// won't use mremap but a regular getmem/move/freemem pattern for large blocks +// - depending on the actual system (e.g. on a VM), mremap may be slower +// - will disable Linux mremap() or Windows following block VirtualQuery/Alloc +{.$define FPCMM_NOMREMAP} + +// force the tiny/small blocks to be in their own arena, not with medium blocks +// - would use a little more memory, but medium pool is less likely to sleep +// - not defined for FPCMM_SERVER because no performance difference was found +{.$define FPCMM_SMALLNOTWITHMEDIUM} + +// use "rep movsb/stosd" ERMS for blocks > 256 bytes instead of SSE2 "movaps" +// - ERMS is available since Ivy Bridge, and we use "movaps" for smallest blocks +// (to not slow down older CPUs), so it is safe to enable this on FPCMM_SERVER +{.$define FPCMM_ERMS} + +// try "cmp" before "lock cmpxchg" for old processors with huge lock penalty +{.$define FPCMM_CMPBEFORELOCK} + +// will export libc-like functions, and not replace the FPC MM +// - e.g. to use this unit as a stand-alone C memory allocator +{.$define FPCMM_STANDALONE} + +// this whole unit will compile as void +// - may be defined e.g. when compiled as Design-Time Lazarus package +{.$define FPCMM_DISABLE} + +interface + +{$ifdef FPC} + // cut-down version of mormot.defines.inc to make this unit standalone + {$mode Delphi} + {$inline on} + {$R-} // disable Range checking + {$S-} // disable Stack checking + {$W-} // disable stack frame generation + {$Q-} // disable overflow checking + {$B-} // expect short circuit boolean + {$ifdef CPUX64} + {$define FPCX64MM} // this unit is for FPC + x86_64 only + {$asmmode Intel} + {$endif CPUX64} + {$ifdef FPCMM_BOOSTER} + {$define FPCMM_BOOST} + {$endif FPCMM_BOOSTER} + {$ifdef FPCMM_BOOST} + {$define FPCMM_SERVER} + {$define FPCMM_SMALLNOTWITHMEDIUM} + {$endif FPCMM_BOOST} + {$ifdef FPCMM_SERVER} + {$define FPCMM_DEBUG} + {$define FPCMM_ASSUMEMULTITHREAD} + {$define FPCMM_LOCKLESSFREE} + {$define FPCMM_ERMS} + {$endif FPCMM_SERVER} + {$ifdef FPCMM_BOOSTER} + {$undef FPCMM_DEBUG} // when performance matters more than stats + {$endif FPCMM_BOOSTER} +{$endif FPC} + +{$ifdef FPCMM_DISABLE} + {$undef FPCX64MM} // e.g. when compiled as Design-Time Lazarus package +{$endif FPCMM_DISABLE} + + +{$ifdef FPCX64MM} +// this unit is available only for FPC + X86_64 CPU +// other targets would compile as a void unit + +type + /// Arena (middle/large) heap information as returned by CurrentHeapStatus + TMMStatusArena = record + /// how many bytes are currently reserved (mmap) to the Operating System + CurrentBytes: PtrUInt; + /// how many bytes have been reserved (mmap) to the Operating System + CumulativeBytes: PtrUInt; + {$ifdef FPCMM_DEBUG} + /// maximum bytes count reserved (mmap) to the Operating System + PeakBytes: PtrUInt; + /// how many VirtualAlloc/mmap calls to the Operating System did occur + CumulativeAlloc: PtrUInt; + /// how many VirtualFree/munmap calls to the Operating System did occur + CumulativeFree: PtrUInt; + {$endif FPCMM_DEBUG} + /// how many times this Arena did wait from been unlocked by another thread + SleepCount: PtrUInt; + end; + + /// heap information as returned by CurrentHeapStatus + TMMStatus = record + /// how many tiny/small memory blocks (<=2600 bytes) are currently allocated + SmallBlocks: PtrUInt; + /// how many bytes of tiny/small memory blocks are currently allocated + // - this size is included in Medium.CurrentBytes value, even if + // FPCMM_SMALLNOTWITHMEDIUM has been defined + SmallBlocksSize: PtrUInt; + /// information about blocks up to 256KB (tiny, small and medium) + // - includes also the memory needed for tiny/small blocks + Medium: TMMStatusArena; + /// information about large blocks > 256KB + // - those blocks are directly handled by the Operating System + Large: TMMStatusArena; + {$ifdef FPCMM_DEBUG} + {$ifdef FPCMM_SLEEPTSC} + /// how much rdtsc cycles were spent within SwitchToThread/NanoSleep API + // - we rdtsc since it is an indicative but very fast way of timing on + // direct hardware + // - warning: on virtual machines, the rdtsc opcode is usually emulated so + // these SleepCycles number are non indicative anymore + SleepCycles: PtrUInt; + {$endif FPCMM_SLEEPTSC} + {$ifdef FPCMM_LOCKLESSFREE} + /// how many times Freemem() did spin to acquire its lock-less bin list + SmallFreememLockLessSpin: PtrUInt; + {$endif FPCMM_LOCKLESSFREE} + {$endif FPCMM_DEBUG} + /// how many times the Operating System Sleep/NanoSleep API was called + // - in a perfect world, should be as small as possible: mormot2tests run as + // SleepCount=0 when FPCMM_LOCKLESSFREE is defined (FPCMM_SERVER default) + SleepCount: PtrUInt; + /// how many times Getmem() did block and wait for a tiny/small block + // - see also GetSmallBlockContention() for more detailed information + SmallGetmemSleepCount: PtrUInt; + /// how many times Freemem() did block and wait for a tiny/small block + // - see also GetSmallBlockContention() for more detailed information + SmallFreememSleepCount: PtrUInt; + end; + PMMStatus = ^TMMStatus; + + +/// allocate a new memory buffer +// - as FPC default heap, _Getmem(0) returns _Getmem(1) +function _GetMem(size: PtrUInt): pointer; + +/// allocate a new zeroed memory buffer +function _AllocMem(Size: PtrUInt): pointer; + +/// release a memory buffer +// - returns the allocated size of the supplied pointer (as FPC default heap) +function _FreeMem(P: pointer): PtrUInt; + +/// change the size of a memory buffer +// - won't move any data if in-place reallocation is possible +// - as FPC default heap, _ReallocMem(P=nil,Size) maps P := _getmem(Size) and +// _ReallocMem(P,0) maps _Freemem(P) +function _ReallocMem(var P: pointer; Size: PtrUInt): pointer; + +/// retrieve the maximum size (i.e. the allocated size) of a memory buffer +function _MemSize(P: pointer): PtrUInt; inline; + +/// retrieve high-level statistics about the current memory manager state +// - see also GetSmallBlockContention for detailed small blocks information +// - standard GetHeapStatus and GetFPCHeapStatus gives less accurate information +// (only CurrHeapSize and MaxHeapSize are set), since we don't track "free" heap +// bytes: I can't figure how "free" memory is relevant nowadays - on 21th century +// Operating Systems, memory is virtual, and reserved/mapped by the OS but +// physically hosted in the HW RAM chips only when written the first time - +// GetHeapStatus information made sense on MSDOS with fixed 640KB of RAM +// - note that FPC GetHeapStatus and GetFPCHeapStatus is only about the +// current thread (irrelevant for sure) whereas CurrentHeapStatus is global +function CurrentHeapStatus: TMMStatus; + + +{$ifdef FPCMM_STANDALONE} + +/// should be called before using any memory function +procedure InitializeMemoryManager; + +/// should be called to finalize this memory manager process and release all RAM +procedure FreeAllMemory; + +{$undef FPCMM_DEBUG} // excluded FPC-specific debugging + +/// IsMultiThread global variable is not correct outside of the FPC RTL +{$define FPCMM_ASSUMEMULTITHREAD} +/// not supported to reduce dependencies and console writing +{$undef FPCMM_REPORTMEMORYLEAKS} + +{$else} + +type + /// one GetSmallBlockContention info about unexpected multi-thread waiting + // - a single GetmemBlockSize or FreememBlockSize non 0 field is set + TSmallBlockContention = packed record + /// how many times a small block getmem/freemem has been waiting for unlock + SleepCount: cardinal; + /// the small block size on which Getmem() has been blocked - or 0 + GetmemBlockSize: cardinal; + /// the small block size on which Freemem() has been blocked - or 0 + FreememBlockSize: cardinal; + end; + + /// small blocks detailed information as returned GetSmallBlockContention + TSmallBlockContentionDynArray = array of TSmallBlockContention; + + /// one GetSmallBlockStatus information + TSmallBlockStatus = packed record + /// how many times a memory block of this size has been allocated + Total: cardinal; + /// how many memory blocks of this size are currently allocated + Current: cardinal; + /// the standard size of the small memory block + BlockSize: cardinal; + end; + + /// small blocks detailed information as returned GetSmallBlockStatus + TSmallBlockStatusDynArray = array of TSmallBlockStatus; + + /// sort order of detailed information as returned GetSmallBlockStatus + TSmallBlockOrderBy = (obTotal, obCurrent, obBlockSize); + +/// retrieve the use counts of allocated small blocks +// - returns maxcount biggest results, sorted by "orderby" field occurence +function GetSmallBlockStatus(maxcount: integer = 10; + orderby: TSmallBlockOrderBy = obTotal; count: PPtrUInt = nil; bytes: PPtrUInt = nil; + small: PCardinal = nil; tiny: PCardinal = nil): TSmallBlockStatusDynArray; + +/// retrieve all small blocks which suffered from blocking during multi-thread +// - returns maxcount biggest results, sorted by SleepCount occurence +function GetSmallBlockContention( + maxcount: integer = 10): TSmallBlockContentionDynArray; + + +/// convenient debugging function into the console +// - if smallblockcontentioncount > 0, includes GetSmallBlockContention() info +// up to the smallblockcontentioncount biggest occurences +procedure WriteHeapStatus(const context: ShortString = ''; + smallblockstatuscount: integer = 8; smallblockcontentioncount: integer = 8; + compilationflags: boolean = false); + +/// convenient debugging function into a string +// - if smallblockcontentioncount > 0, includes GetSmallBlockContention() info +// up to the smallblockcontentioncount biggest occurences +// - warning: this function is not thread-safe +function GetHeapStatus(const context: ShortString; smallblockstatuscount, + smallblockcontentioncount: integer; compilationflags, onsameline: boolean): string; + + +const + /// human readable information about how our MM was built + // - similar to WriteHeapStatus(compilationflags=true) output + FPCMM_FLAGS = ' ' + {$ifdef FPCMM_BOOSTER} + 'BOOSTER ' {$else} + {$ifdef FPCMM_BOOST} + 'BOOST ' {$else} + {$ifdef FPCMM_SERVER} + 'SERVER ' {$endif} + {$endif} + {$endif} + {$ifdef FPCMM_ASSUMEMULTITHREAD} + ' assumulthrd' {$endif} + {$ifdef FPCMM_LOCKLESSFREE} + ' lockless' {$endif} + {$ifdef FPCMM_PAUSE} + ' pause' {$endif} + {$ifdef FPCMM_SLEEPTSC} + ' rdtsc' {$endif} + {$ifndef BSD} + {$ifdef FPCMM_NOMREMAP} + ' nomremap' {$endif} + {$endif BSD} + {$ifdef FPCMM_SMALLNOTWITHMEDIUM}+ ' smallpool' {$endif} + {$ifdef FPCMM_ERMS} + ' erms' {$endif} + {$ifdef FPCMM_DEBUG} + ' debug' {$endif} + {$ifdef FPCMM_REPORTMEMORYLEAKS} + ' repmemleak' {$endif}; + +{$endif FPCMM_STANDALONE} + +{$endif FPCX64MM} + + + +implementation + +{ + High-level Allocation Strategy Description + -------------------------------------------- + + The allocator handles the following families of memory blocks: + - TINY <= 128 B (<= 256 B for FPCMM_BOOST) + Round-robin distribution into several arenas, fed from shared tiny/small pool + (fair scaling from multi-threaded calls, with no threadvar nor GC involved) + - SMALL <= 2600 B + One arena per block size, fed from shared tiny/small pool + - MEDIUM <= 256 KB + Separated pool of bitmap-marked chunks, fed from 1MB of OS mmap/virtualalloc + - LARGE > 256 KB + Directly fed from OS mmap/virtualalloc with mremap when growing + + The original FastMM4 was enhanced as such, especially in FPCMM_SERVER mode: + - FPC compatibility, even on POSIX/Linux, also for FPC specific API behavior; + - x86_64 code was refactored and tuned in regard to 2020's hardware; + - Inlined SSE2 movaps loop or ERMS are more efficient that subfunction(s); + - New round-robin thread-friendly arenas of tiny blocks; + - Tiny and small blocks can fed from their own pool, not the medium pool; + - Additional bin list to reduce small/tiny Freemem() thread contention; + - Memory leaks and thread sleep tracked with almost no performance loss; + - Large blocks logic has been rewritten, especially realloc; + - On Linux, mremap is used for efficient realloc of large blocks. + + About locking: + - Tiny and Small blocks have their own per-size lock; + - Tiny and Small blocks have one giant lock when fedding from their pool; + - Medium blocks have one giant lock over their own pool; + - Large blocks have one giant lock over mmap/virtualalloc system calls; + - SwitchToThread/FpNanoSleep OS call is done after initial spinning; + - FPCMM_LOCKLESSFREE reduces Freemem() thread contention; + - FPCMM_DEBUG / WriteHeapStatus helps identifying the lock contention(s). + +} + +{$ifdef FPCX64MM} +// this unit is available only for FPC + X86_64 CPU + +{$ifndef FPCMM_NOPAUSE} + // on contention problem, execute "pause" opcode and spin retrying the lock + // - defined by default to follow Intel recommendatations from + // https://software.intel.com/content/www/us/en/develop/articles/benefitting-power-and-performance-sleep-loops.html + // - spinning loop is either using constants or rdtsc (if FPCMM_SLEEPTSC is set) + // - on SkylakeX (Intel 7th gen), "pause" opcode went from 10-20 to 140 cycles + // so our constants below will favor those latest CPUs with a longer pause + {$define FPCMM_PAUSE} +{$endif FPCMM_NOPAUSE} + + +{ ********* Operating System Specific API Calls } + +{$ifdef MSWINDOWS} + +// Win64: any assembler function with sub-calls should have a stack frame +// -> nostackframe is defined only on Linux or for functions with no nested call +{$undef NOSFRAME} + +const + kernel32 = 'kernel32.dll'; + + MEM_COMMIT = $1000; + MEM_RESERVE = $2000; + MEM_RELEASE = $8000; + MEM_FREE = $10000; + MEM_TOP_DOWN = $100000; + + PAGE_READWRITE = 4; + PAGE_GUARD = $0100; + PAGE_VALID = $00e6; // PAGE_READONLY or PAGE_READWRITE or PAGE_EXECUTE or + // PAGE_EXECUTE_READ or PAGE_EXECUTE_READWRITE or PAGE_EXECUTE_WRITECOPY + +type + // VirtualQuery() API result structure + TMemInfo = record + BaseAddress, AllocationBase: pointer; + AllocationProtect: cardinal; + PartitionId: word; + RegionSize: PtrUInt; + State, Protect, MemType: cardinal; + end; + +function VirtualAlloc(lpAddress: pointer; + dwSize: PtrUInt; flAllocationType, flProtect: cardinal): pointer; + stdcall; external kernel32 name 'VirtualAlloc'; +function VirtualFree(lpAddress: pointer; dwSize: PtrUInt; + dwFreeType: cardinal): LongBool; + stdcall; external kernel32 name 'VirtualFree'; +procedure SwitchToThread; + stdcall; external kernel32 name 'SwitchToThread'; +function VirtualQuery(lpAddress, lpMemInfo: pointer; dwLength: PtrUInt): PtrUInt; + stdcall; external kernel32 name 'VirtualQuery'; + +function AllocMedium(Size: PtrInt): pointer; inline; +begin + // bottom-up allocation to reduce fragmentation + result := VirtualAlloc(nil, Size, MEM_COMMIT, PAGE_READWRITE); +end; + +function AllocLarge(Size: PtrInt): pointer; inline; +begin + // top-down allocation of large blocks to reduce fragmentation + // (MEM_TOP_DOWN is not available on POSIX, but seems less needed) + result := VirtualAlloc(nil, Size, MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE); +end; + +procedure FreeMediumLarge(ptr: pointer; Size: PtrInt); inline; +begin + VirtualFree(ptr, 0, MEM_RELEASE); +end; + +{$ifndef FPCMM_NOMREMAP} + +function RemapLarge(addr: pointer; old_len, new_len: size_t): pointer; +var + meminfo: TMemInfo; + next: pointer; + nextsize: PtrUInt; +begin + // old_len and new_len have 64KB granularity, so match Windows page size + nextsize := new_len - old_len; + if PtrInt(nextsize) > 0 then + begin + // try to allocate the memory just after the existing one + FillChar(meminfo, SizeOf(meminfo), 0); + next := addr + old_len; + if (VirtualQuery(next, @meminfo, SizeOf(meminfo)) = SizeOf(meminfo)) and + (meminfo.State = MEM_FREE) and + (meminfo.RegionSize >= nextsize) and // enough space? + // reserve the address space in two steps for thread safety + (VirtualAlloc(next, nextsize, MEM_RESERVE, PAGE_READWRITE) <> nil) and + (VirtualAlloc(next, nextsize, MEM_COMMIT, PAGE_READWRITE) <> nil) then + begin + result := addr; // in-place realloc: no need to move memory :) + exit; + end; + end; + // we need to use the slower but safe Alloc/Move/Free pattern + result := AllocLarge(new_len); + if new_len > old_len then + new_len := old_len; // handle size up or down + Move(addr^, result^, new_len); // RTL non-volatile asm or our AVX MoveFast() + FreeMediumLarge(addr, old_len); +end; + +{$endif FPCMM_NOMREMAP} + +// experimental VirtualQuery detection of object class - use at your own risk +{$define FPCMM_REPORTMEMORYLEAKS_EXPERIMENTAL} + +{$else} + +uses + {$ifndef DARWIN} + syscall, + {$endif DARWIN} + BaseUnix; + +// in practice, SYSV ABI seems to not require a stack frame, as Win64 does, for +// our use case of nested calls with no local stack storage and direct kernel +// syscalls - but since it is clearly undocumented, we set it on LINUX only +// -> appears to work with no problem from our tests: feedback is welcome! +// -> see FPCMM_NOSFRAME conditional to disable it on LINUX +{$ifdef LINUX} + {$define NOSFRAME} +{$endif LINUX} + + +// we directly call the OS Kernel, so this unit doesn't require any libc + +function AllocMedium(Size: PtrInt): pointer; inline; +begin + result := fpmmap(nil, Size, PROT_READ or PROT_WRITE, + MAP_PRIVATE or MAP_ANONYMOUS, -1, 0); +end; + +function AllocLarge(Size: PtrInt): pointer; inline; +begin + result := AllocMedium(size); // same API (no MEM_TOP_DOWN option) +end; + +procedure FreeMediumLarge(ptr: pointer; Size: PtrInt); inline; +begin + fpmunmap(ptr, Size); +end; + +{$ifdef LINUX} + +{$ifndef FPCMM_NOMREMAP} + +const + syscall_nr_mremap = 25; // valid on x86_64 Linux and Android + MREMAP_MAYMOVE = 1; + +function RemapLarge(addr: pointer; old_len, new_len: size_t): pointer; inline; +begin + // let the Linux Kernel mremap() the memory using its TLB magic + result := pointer(do_syscall(syscall_nr_mremap, TSysParam(addr), + TSysParam(old_len), TSysParam(new_len), TSysParam(MREMAP_MAYMOVE))); +end; + +{$endif FPCMM_NOMREMAP} + +// experimental detection of object class - use at your own risk +{$define FPCMM_REPORTMEMORYLEAKS_EXPERIMENTAL} +// (untested on BSD/DARWIN) + +{$else} + + {$define FPCMM_NOMREMAP} // mremap is a Linux-specific syscall + +{$endif LINUX} + +procedure SwitchToThread; +var + t: Ttimespec; +begin + // note: nanosleep() adds a few dozen of microsecs for context switching + t.tv_sec := 0; + t.tv_nsec := 10; // empirically identified on a recent Linux Kernel + fpnanosleep(@t, nil); +end; + +{$endif MSWINDOWS} + +// fallback to safe and simple Alloc/Move/Free pattern +{$ifdef FPCMM_NOMREMAP} + +function RemapLarge(addr: pointer; old_len, new_len: size_t): pointer; +begin + result := AllocLarge(new_len); + if new_len > old_len then + new_len := old_len; // resize down + Move(addr^, result^, new_len); // RTL non-volatile asm or our AVX MoveFast() + FreeMediumLarge(addr, old_len); +end; + +{$endif FPCMM_NOMREMAP} + + +{ ********* Some Assembly Helpers } + +// low-level conditional to disable nostackframe code on Linux +{$ifdef FPCMM_NOSFRAME} + {$undef NOSFRAME} +{$endif FPCMM_NOSFRAME} + +var + HeapStatus: TMMStatus; + +{$ifdef FPCMM_DEBUG} + +procedure ReleaseCore; + {$ifdef NOSFRAME} nostackframe; {$endif} assembler; +asm + {$ifdef FPCMM_SLEEPTSC} + rdtsc // returns the TSC in EDX:EAX + shl rdx, 32 + or rax, rdx + push rax + call SwitchToThread + pop rcx + rdtsc + shl rdx, 32 + or rax, rdx + lea rdx, [rip + HeapStatus] + sub rax, rcx + lock add qword ptr [rdx + TMMStatus.SleepCycles], rax + {$else} + call SwitchToThread + lea rdx, [rip + HeapStatus] + {$endif FPCMM_SLEEPTSC} + lock inc qword ptr [rdx + TMMStatus.SleepCount] +end; + +{$else} + +procedure ReleaseCore; +begin + SwitchToThread; + inc(HeapStatus.SleepCount); // indicative counter +end; + +{$endif FPCMM_DEBUG} + +procedure NotifyArenaAlloc(var Arena: TMMStatusArena; Size: PtrUInt); + nostackframe; assembler; +asm + {$ifdef FPCMM_DEBUG} + lock add qword ptr [Arena].TMMStatusArena.CurrentBytes, Size + lock add qword ptr [Arena].TMMStatusArena.CumulativeBytes, Size + lock inc qword ptr [Arena].TMMStatusArena.CumulativeAlloc + mov rax, qword ptr [Arena].TMMStatusArena.CurrentBytes + cmp rax, qword ptr [Arena].TMMStatusArena.PeakBytes + jbe @s + mov qword ptr [Arena].TMMStatusArena.PeakBytes, rax +@s: {$else} + add qword ptr [Arena].TMMStatusArena.CurrentBytes, Size + add qword ptr [Arena].TMMStatusArena.CumulativeBytes, Size + {$endif FPCMM_DEBUG} +end; + +procedure NotifyMediumLargeFree(var Arena: TMMStatusArena; Size: PtrUInt); + nostackframe; assembler; +asm + neg Size + {$ifdef FPCMM_DEBUG} + lock add qword ptr [Arena].TMMStatusArena.CurrentBytes, Size + lock inc qword ptr [Arena].TMMStatusArena.CumulativeFree + {$else} + add qword ptr [Arena].TMMStatusArena.CurrentBytes, Size + {$endif FPCMM_DEBUG} +end; + + +{ ********* Constants and Data Structures Definitions } + +const + // (sometimes) the more arenas, the better multi-threadable + {$ifdef FPCMM_BOOSTER} + NumTinyBlockTypesPO2 = 4; + NumTinyBlockArenasPO2 = 4; // will probably end up with Medium lock contention + {$else} + {$ifdef FPCMM_BOOST} + NumTinyBlockTypesPO2 = 4; // tiny are <= 256 bytes + NumTinyBlockArenasPO2 = 3; // 8 arenas + {$else} + // default (or FPCMM_SERVER) settings + NumTinyBlockTypesPO2 = 3; // multiple arenas for tiny blocks <= 128 bytes + NumTinyBlockArenasPO2 = 3; // 8 round-robin arenas (including main) by default + {$endif FPCMM_BOOST} + {$endif FPCMM_BOOSTER} + + NumSmallBlockTypes = 46; + MaximumSmallBlockSize = 2608; + SmallBlockSizes: array[0..NumSmallBlockTypes - 1] of word = ( + 16, 32, 48, 64, 80, 96, 112, 128, 144, 160, 176, 192, 208, 224, 240, 256, + 272, 288, 304, 320, 352, 384, 416, 448, 480, 528, 576, 624, 672, 736, 800, + 880, 960, 1056, 1152, 1264, 1376, 1504, 1648, 1808, 1984, 2176, 2384, + MaximumSmallBlockSize, MaximumSmallBlockSize, MaximumSmallBlockSize); + NumTinyBlockTypes = 1 shl NumTinyBlockTypesPO2; + NumTinyBlockArenas = (1 shl NumTinyBlockArenasPO2) - 1; // -1 = main Small[] + NumSmallInfoBlock = NumSmallBlockTypes + NumTinyBlockArenas * NumTinyBlockTypes; + SmallBlockGranularity = 16; + TargetSmallBlocksPerPool = 48; + MinimumSmallBlocksPerPool = 12; + SmallBlockDownsizeCheckAdder = 64; + SmallBlockUpsizeAdder = 32; + {$ifdef FPCMM_LOCKLESSFREE} + SmallBlockTypePO2 = 8; // SizeOf(TSmallBlockType)=256 with Bin list + SmallBlockBinCount = (((1 shl SmallBlockTypePO2) - 64) div 8) - 1; // =23 + {$else} + SmallBlockTypePO2 = 6; // SizeOf(TSmallBlockType)=64 + {$endif FPCMM_LOCKLESSFREE} + + MediumBlockPoolSizeMem = 20 * 64 * 1024; + MediumBlockPoolSize = MediumBlockPoolSizeMem - 16; + MediumBlockSizeOffset = 48; + MinimumMediumBlockSize = 11 * 256 + MediumBlockSizeOffset; + MediumBlockBinsPerGroup = 32; + MediumBlockBinGroupCount = 32; + MediumBlockBinCount = MediumBlockBinGroupCount * MediumBlockBinsPerGroup; + MediumBlockGranularity = 256; + MaximumMediumBlockSize = + MinimumMediumBlockSize + (MediumBlockBinCount - 1) * MediumBlockGranularity; + OptimalSmallBlockPoolSizeLowerLimit = + 29 * 1024 - MediumBlockGranularity + MediumBlockSizeOffset; + OptimalSmallBlockPoolSizeUpperLimit = + 64 * 1024 - MediumBlockGranularity + MediumBlockSizeOffset; + MaximumSmallBlockPoolSize = + OptimalSmallBlockPoolSizeUpperLimit + MinimumMediumBlockSize; + MediumInPlaceDownsizeLimit = MinimumMediumBlockSize div 4; + + IsFreeBlockFlag = 1; + IsMediumBlockFlag = 2; + IsSmallBlockPoolInUseFlag = 4; + IsLargeBlockFlag = 4; + PreviousMediumBlockIsFreeFlag = 8; + LargeBlockIsSegmented = 8; + DropSmallFlagsMask = -8; + ExtractSmallFlagsMask = 7; + DropMediumAndLargeFlagsMask = -16; + ExtractMediumAndLargeFlagsMask = 15; + + {$ifdef FPCMM_SLEEPTSC} + // pause using rdtsc (30 cycles latency on hardware but emulated on VM) + SpinMediumLockTSC = 10000; + SpinLargeLockTSC = 10000; + {$ifdef FPCMM_PAUSE} + SpinSmallGetmemLockTSC = 1000; + SpinSmallFreememLockTSC = 1000; // _freemem has more collisions + {$ifdef FPCMM_LOCKLESSFREE} + SpinSmallFreememBinTSC = 2000; + {$endif FPCMM_LOCKLESSFREE} + {$endif FPCMM_PAUSE} + {$else} + // pause with constant spinning counts (empirical values from fastmm4-avx) + SpinMediumLockCount = 2500; + SpinLargeLockCount = 5000; + {$ifdef FPCMM_PAUSE} + SpinSmallGetmemLockCount = 500; + SpinSmallFreememLockCount = 500; + {$ifdef FPCMM_LOCKLESSFREE} + SpinFreememBinCount = 500; + {$endif FPCMM_LOCKLESSFREE} + {$endif FPCMM_PAUSE} + {$endif FPCMM_SLEEPTSC} + + {$ifdef FPCMM_ERMS} + // pre-ERMS expects at least 256 bytes, IvyBridge+ with ERMS is good from 64 + // see https://stackoverflow.com/a/43837564/458259 for explanations and timing + // -> "movaps" loop is used up to 256 bytes of data: good on all CPUs + // -> "movnt" Move/MoveFast is used for large blocks: always faster than ERMS + ErmsMinSize = 256; + {$endif FPCMM_ERMS} + +type + PSmallBlockPoolHeader = ^TSmallBlockPoolHeader; + + // information for each small block size - 64/256 bytes long >= CPU cache line + TSmallBlockType = record + Locked: boolean; + AllowedGroupsForBlockPoolBitmap: byte; + BlockSize: Word; + MinimumBlockPoolSize: Word; + OptimalBlockPoolSize: Word; + NextPartiallyFreePool: PSmallBlockPoolHeader; + PreviousPartiallyFreePool: PSmallBlockPoolHeader; + NextSequentialFeedBlockAddress: pointer; + MaxSequentialFeedBlockAddress: pointer; + CurrentSequentialFeedPool: PSmallBlockPoolHeader; + GetmemCount: cardinal; + FreememCount: cardinal; + GetmemSleepCount: cardinal; + FreememSleepCount: cardinal; + {$ifdef FPCMM_LOCKLESSFREE} // 192 optional bytes for FreeMem Bin (= 13KB) + BinLocked: boolean; // dedicated lock for less contention + BinCount: byte; + BinSpinCount: cardinal; + BinInstance: array[0.. SmallBlockBinCount - 1] of pointer; + {$endif FPCMM_LOCKLESSFREE} + end; + PSmallBlockType = ^TSmallBlockType; + + TSmallBlockTypes = array[0..NumSmallBlockTypes - 1] of TSmallBlockType; + TTinyBlockTypes = array[0..NumTinyBlockTypes - 1] of TSmallBlockType; + + TSmallBlockInfo = record + Small: TSmallBlockTypes; + Tiny: array[0..NumTinyBlockArenas - 1] of TTinyBlockTypes; + GetmemLookup: array[0.. + (MaximumSmallBlockSize - 1) div SmallBlockGranularity] of byte; + {$ifndef FPCMM_ASSUMEMULTITHREAD} + IsMultiThreadPtr: PBoolean; // safe access to IsMultiThread global variable + {$endif FPCMM_ASSUMEMULTITHREAD} + TinyCurrentArena: integer; + end; + + TSmallBlockPoolHeader = record + BlockType: PSmallBlockType; + {$ifdef CPU32} + Padding32Bits: cardinal; + {$endif CPU32} + NextPartiallyFreePool: PSmallBlockPoolHeader; + PreviousPartiallyFreePool: PSmallBlockPoolHeader; + FirstFreeBlock: pointer; + BlocksInUse: cardinal; + SmallBlockPoolSignature: cardinal; + FirstBlockPoolPointerAndFlags: PtrUInt; + end; + + PMediumBlockPoolHeader = ^TMediumBlockPoolHeader; + TMediumBlockPoolHeader = record + PreviousMediumBlockPoolHeader: PMediumBlockPoolHeader; + NextMediumBlockPoolHeader: PMediumBlockPoolHeader; + Reserved1: PtrUInt; + FirstMediumBlockSizeAndFlags: PtrUInt; + end; + + PMediumFreeBlock = ^TMediumFreeBlock; + TMediumFreeBlock = record + PreviousFreeBlock: PMediumFreeBlock; + NextFreeBlock: PMediumFreeBlock; + end; + + // medium locks occurs at getmem: freemem bin list got MaxCount=0 :( + {.$define FPCMM_LOCKLESSFREEMEDIUM} + +{$ifdef FPCMM_LOCKLESSFREEMEDIUM} +const + MediumBlockLocklessBinCount = 255; + +type + // used by TMediumBlockInfo to reduce thread pressure + TMediumLocklessBin = record + Locked: boolean; // dedicated lock for less contention + Count: byte; + MaxCount: byte; + Instance: array[0 .. MediumBlockLocklessBinCount - 1] of pointer; + end; +{$endif FPCMM_LOCKLESSFREEMEDIUM} + + TMediumBlockInfo = record + Locked: boolean; + PoolsCircularList: TMediumBlockPoolHeader; + LastSequentiallyFed: pointer; + SequentialFeedBytesLeft: cardinal; + BinGroupBitmap: cardinal; + {$ifndef FPCMM_ASSUMEMULTITHREAD} + IsMultiThreadPtr: PBoolean; // safe access to IsMultiThread global variable + {$endif FPCMM_ASSUMEMULTITHREAD} + BinBitmaps: array[0..MediumBlockBinGroupCount - 1] of cardinal; + Bins: array[0..MediumBlockBinCount - 1] of TMediumFreeBlock; + {$ifdef FPCMM_LOCKLESSFREEMEDIUM} + LocklessBin: TMediumLocklessBin; + {$endif FPCMM_LOCKLESSFREEMEDIUM} + end; + + PLargeBlockHeader = ^TLargeBlockHeader; + TLargeBlockHeader = record + PreviousLargeBlockHeader: PLargeBlockHeader; + NextLargeBlockHeader: PLargeBlockHeader; + Reserved: PtrUInt; + BlockSizeAndFlags: PtrUInt; + end; + +const + BlockHeaderSize = SizeOf(pointer); + SmallBlockPoolHeaderSize = SizeOf(TSmallBlockPoolHeader); + MediumBlockPoolHeaderSize = SizeOf(TMediumBlockPoolHeader); + LargeBlockHeaderSize = SizeOf(TLargeBlockHeader); + LargeBlockGranularity = 65536; + +var + SmallBlockInfo: TSmallBlockInfo; + MediumBlockInfo: TMediumBlockInfo; + SmallMediumBlockInfo: TMediumBlockInfo + {$ifdef FPCMM_SMALLNOTWITHMEDIUM} ; + {$else} absolute MediumBlockInfo; + {$endif FPCMM_SMALLNOTWITHMEDIUM} + + + LargeBlocksLocked: boolean; + LargeBlocksCircularList: TLargeBlockHeader; + + +{ ********* Shared Routines } + +{$define FPCMM_CMPBEFORELOCK_SPIN} +// during spinning, there is clearly thread contention: in this case, plain +// "cmp" before "lock cmpxchg" is mandatory to leverage the CPU cores + + +procedure LockMediumBlocks; + {$ifdef NOSFRAME} nostackframe; {$endif} assembler; +// on input/output: r10=TMediumBlockInfo +asm + {$ifdef FPCMM_SLEEPTSC} +@s: rdtsc // tsc in edx:eax + shl rdx, 32 + lea r9, [rax + rdx + SpinMediumLockTSC] // r9 = endtsc +@sp: pause + rdtsc + shl rdx, 32 + or rax, rdx + cmp rax, r9 + ja @rc // timeout + {$else} +@s: mov edx, SpinMediumLockCount +@sp: pause + dec edx + jz @rc //timeout + {$endif FPCMM_SLEEPTSC} + mov rcx, r10 + mov eax, $100 + {$ifdef FPCMM_CMPBEFORELOCK_SPIN} + cmp byte ptr [r10].TMediumBlockInfo.Locked, true + je @sp + {$endif FPCMM_CMPBEFORELOCK_SPIN} + lock cmpxchg byte ptr [rcx].TMediumBlockInfo.Locked, ah + je @ok + jmp @sp +@rc: push rsi // preserve POSIX and Win64 ABI registers + push rdi + push r10 + push r11 + call ReleaseCore + pop r11 + pop r10 + pop rdi + pop rsi + lea rax, [rip + HeapStatus] + {$ifdef FPCMM_DEBUG} lock {$endif} + inc qword ptr [rax].TMMStatus.Medium.SleepCount + jmp @s +@ok: +end; + +procedure InsertMediumBlockIntoBin; nostackframe; assembler; +// rcx=P edx=blocksize r10=TMediumBlockInfo - even on POSIX +asm + mov rax, rcx + // Get the bin number for this block size + sub edx, MinimumMediumBlockSize + shr edx, 8 + // Validate the bin number + sub edx, MediumBlockBinCount - 1 + sbb ecx, ecx + and edx, ecx + add edx, MediumBlockBinCount - 1 + mov r9, rdx + // Get the bin address in rcx + shl edx, 4 + lea rcx, [r10 + rdx + TMediumBlockInfo.Bins] + // Bins are LIFO, se we insert this block as the first free block in the bin + mov rdx, TMediumFreeBlock[rcx].NextFreeBlock + mov TMediumFreeBlock[rax].PreviousFreeBlock, rcx + mov TMediumFreeBlock[rax].NextFreeBlock, rdx + mov TMediumFreeBlock[rdx].PreviousFreeBlock, rax + mov TMediumFreeBlock[rcx].NextFreeBlock, rax + // Was this bin empty? + cmp rdx, rcx + jne @Done + // Get ecx=bin number, edx=group number + mov rcx, r9 + mov rdx, r9 + shr edx, 5 + // Flag this bin as not empty + mov eax, 1 + shl eax, cl + or dword ptr [r10 + TMediumBlockInfo.BinBitmaps + rdx * 4], eax + // Flag the group as not empty + mov eax, 1 + mov ecx, edx + shl eax, cl + or [r10 + TMediumBlockInfo.BinGroupBitmap], eax +@Done: +end; + +procedure RemoveMediumFreeBlock; nostackframe; assembler; +asm + // rcx=MediumFreeBlock r10=TMediumBlockInfo - even on POSIX + // Get the current previous and next blocks + mov rdx, TMediumFreeBlock[rcx].PreviousFreeBlock + mov rcx, TMediumFreeBlock[rcx].NextFreeBlock + // Remove this block from the linked list + mov TMediumFreeBlock[rcx].PreviousFreeBlock, rdx + mov TMediumFreeBlock[rdx].NextFreeBlock, rcx + // Is this bin now empty? If the previous and next free block pointers are + // equal, they must point to the bin + cmp rcx, rdx + jne @Done + // Get ecx=bin number, edx=group number + lea r8, [r10 + TMediumBlockInfo.Bins] + sub rcx, r8 + mov edx, ecx + shr ecx, 4 + shr edx, 9 + // Flag this bin as empty + mov eax, -2 + rol eax, cl + and dword ptr [r10 + TMediumBlockInfo.BinBitmaps + rdx * 4], eax + jnz @Done + // Flag this group as empty + mov eax, -2 + mov ecx, edx + rol eax, cl + and [r10 + TMediumBlockInfo.BinGroupBitmap], eax +@Done: +end; + +procedure BinMediumSequentialFeedRemainder( + var Info: TMediumBlockInfo); nostackframe; assembler; +asm + mov r10, Info + mov eax, [Info + TMediumBlockInfo.SequentialFeedBytesLeft] + test eax, eax + jz @Done + // Is the last fed sequentially block free? + mov rax, [Info + TMediumBlockInfo.LastSequentiallyFed] + test byte ptr [rax - BlockHeaderSize], IsFreeBlockFlag + jnz @LastBlockFedIsFree + // Set the "previous block is free" flag in the last block fed + or qword ptr [rax - BlockHeaderSize], PreviousMediumBlockIsFreeFlag + // Get edx=remainder size, rax=remainder start + mov edx, [r10 + TMediumBlockInfo.SequentialFeedBytesLeft] + sub rax, rdx +@BinTheRemainder: + // Store the size of the block as well as the flags + lea rcx, [rdx + IsMediumBlockFlag + IsFreeBlockFlag] + mov [rax - BlockHeaderSize], rcx + // Store the trailing size marker + mov [rax + rdx - 16], rdx + // Bin this medium block + cmp edx, MinimumMediumBlockSize + jb @Done + mov rcx, rax + jmp InsertMediumBlockIntoBin // rcx=APMediumFreeBlock, edx=AMediumBlockSize +@Done: ret +@LastBlockFedIsFree: + // Drop the flags + mov rdx, DropMediumAndLargeFlagsMask + and rdx, [rax - BlockHeaderSize] + // Free the last block fed + cmp edx, MinimumMediumBlockSize + jb @DontRemoveLastFed + // Last fed block is free - remove it from its size bin + mov rcx, rax + call RemoveMediumFreeBlock // rcx = APMediumFreeBlock + // Re-read rax and rdx + mov rax, [r10 + TMediumBlockInfo.LastSequentiallyFed] + mov rdx, DropMediumAndLargeFlagsMask + and rdx, [rax - BlockHeaderSize] +@DontRemoveLastFed: + // Get the number of bytes left in ecx + mov ecx, [r10 + TMediumBlockInfo.SequentialFeedBytesLeft] + // rax = remainder start, rdx = remainder size + sub rax, rcx + add edx, ecx + jmp @BinTheRemainder +end; + +procedure FreeMedium(ptr: PMediumBlockPoolHeader); +begin + FreeMediumLarge(ptr, MediumBlockPoolSizeMem); + NotifyMediumLargeFree(HeapStatus.Medium, MediumBlockPoolSizeMem); +end; + +function AllocNewSequentialFeedMediumPool(BlockSize: cardinal; + var Info: TMediumBlockInfo): pointer; +var + old: PMediumBlockPoolHeader; + new: pointer; +begin + BinMediumSequentialFeedRemainder(Info); + new := AllocMedium(MediumBlockPoolSizeMem); + if new <> nil then + begin + old := Info.PoolsCircularList.NextMediumBlockPoolHeader; + PMediumBlockPoolHeader(new).PreviousMediumBlockPoolHeader := @Info.PoolsCircularList; + Info.PoolsCircularList.NextMediumBlockPoolHeader := new; + PMediumBlockPoolHeader(new).NextMediumBlockPoolHeader := old; + old.PreviousMediumBlockPoolHeader := new; + PPtrUInt(PByte(new) + MediumBlockPoolSize - BlockHeaderSize)^ := IsMediumBlockFlag; + Info.SequentialFeedBytesLeft := + (MediumBlockPoolSize - MediumBlockPoolHeaderSize) - BlockSize; + result := pointer(PByte(new) + MediumBlockPoolSize - BlockSize); + Info.LastSequentiallyFed := result; + PPtrUInt(PByte(result) - BlockHeaderSize)^ := BlockSize or IsMediumBlockFlag; + NotifyArenaAlloc(HeapStatus.Medium, MediumBlockPoolSizeMem); + end + else + begin + Info.SequentialFeedBytesLeft := 0; + result := nil; + end; +end; + +procedure LockLargeBlocks; + {$ifdef NOSFRAME} nostackframe; {$endif} assembler; +asm +@s: mov eax, $100 + lea rcx, [rip + LargeBlocksLocked] + lock cmpxchg byte ptr [rcx], ah + je @ok + {$ifdef FPCMM_SLEEPTSC} + rdtsc + shl rdx, 32 + lea r9, [rax + rdx + SpinLargeLockTSC] // r9 = endtsc +@sp: pause + rdtsc + shl rdx, 32 + or rax, rdx + cmp rax, r9 + ja @rc // timeout + {$else} + mov edx, SpinLargeLockCount +@sp: pause + dec edx + jz @rc // timeout + {$endif FPCMM_SLEEPTSC} + mov eax, $100 + {$ifdef FPCMM_CMPBEFORELOCK_SPIN} + cmp byte ptr [rcx], true + je @sp + {$endif FPCMM_CMPBEFORELOCK_SPIN} + lock cmpxchg byte ptr [rcx], ah + je @ok + jmp @sp +@rc: call ReleaseCore + lea rax, [rip + HeapStatus] + {$ifdef FPCMM_DEBUG} lock {$endif} + inc qword ptr [rax].TMMStatus.Large.SleepCount + jmp @s +@ok: // reset the stack frame before ret +end; + +function AllocateLargeBlockFrom(size: PtrUInt; + existing: pointer; oldsize: PtrUInt): pointer; +var + blocksize: PtrUInt; + header, old: PLargeBlockHeader; +begin + blocksize := (size + LargeBlockHeaderSize + + LargeBlockGranularity - 1 + BlockHeaderSize) and -LargeBlockGranularity; + if existing = nil then + header := AllocLarge(blocksize) + else + header := RemapLarge(existing, oldsize, blocksize); + if header <> nil then + begin + NotifyArenaAlloc(HeapStatus.Large, blocksize); + if existing <> nil then + NotifyMediumLargeFree(HeapStatus.Large, oldsize); + header.BlockSizeAndFlags := blocksize or IsLargeBlockFlag; + LockLargeBlocks; + old := LargeBlocksCircularList.NextLargeBlockHeader; + header.PreviousLargeBlockHeader := @LargeBlocksCircularList; + LargeBlocksCircularList.NextLargeBlockHeader := header; + header.NextLargeBlockHeader := old; + old.PreviousLargeBlockHeader := header; + LargeBlocksLocked := False; + inc(header); + end; + result := header; +end; + +function AllocateLargeBlock(size: PtrUInt): pointer; +begin + result := AllocateLargeBlockFrom(size, nil, 0); +end; + +procedure FreeLarge(ptr: PLargeBlockHeader; size: PtrUInt); +begin + NotifyMediumLargeFree(HeapStatus.Large, size); + FreeMediumLarge(ptr, size); +end; + +function FreeLargeBlock(p: pointer): PtrInt; +var + header, prev, next: PLargeBlockHeader; +begin + header := pointer(PByte(p) - LargeBlockHeaderSize); + if header.BlockSizeAndFlags and IsFreeBlockFlag <> 0 then + begin + // try to release the same pointer twice + result := 0; + exit; + end; + LockLargeBlocks; + prev := header.PreviousLargeBlockHeader; + next := header.NextLargeBlockHeader; + next.PreviousLargeBlockHeader := prev; + prev.NextLargeBlockHeader := next; + LargeBlocksLocked := False; + result := DropMediumAndLargeFlagsMask and header.BlockSizeAndFlags; + FreeLarge(header, result); +end; + +function ReallocateLargeBlock(p: pointer; size: PtrUInt): pointer; +var + oldavail, minup, new: PtrUInt; + prev, next, header: PLargeBlockHeader; +begin + header := pointer(PByte(p) - LargeBlockHeaderSize); + oldavail := (DropMediumAndLargeFlagsMask and header^.BlockSizeAndFlags) - + (LargeBlockHeaderSize + BlockHeaderSize); + new := size; + if size > oldavail then + begin + // size-up with 1/8 or 1/4 overhead for any future growing realloc + if oldavail > 128 shl 20 then + minup := oldavail + oldavail shr 3 + else + minup := oldavail + oldavail shr 2; + if size < minup then + new := minup; + end + else + begin + result := p; + oldavail := oldavail shr 1; + if size >= oldavail then + // small size-up within current buffer -> no reallocate + exit + else + // size-down and move just the trailing data + oldavail := size; + end; + if new < MaximumMediumBlockSize then + begin + // size was reduced to a small/medium block: use GetMem/Move/FreeMem + result := _GetMem(new); + if result <> nil then + Move(p^, result^, oldavail); // RTL non-volatile asm or our AVX MoveFast() + _FreeMem(p); + end + else + begin + // remove large block from current chain list + LockLargeBlocks; + prev := header^.PreviousLargeBlockHeader; + next := header^.NextLargeBlockHeader; + next.PreviousLargeBlockHeader := prev; + prev.NextLargeBlockHeader := next; + LargeBlocksLocked := False; + size := DropMediumAndLargeFlagsMask and header^.BlockSizeAndFlags; + // on Linux, call Kernel mremap() and its TLB magic + // on Windows, try to reserve the memory block just after the existing + // otherwise, use Alloc/Move/Free pattern, with asm/AVX move + result := AllocateLargeBlockFrom(new, header, size); + end; +end; + + +{ ********* Main Memory Manager Functions } + +function _GetMem(size: PtrUInt): pointer; + {$ifdef NOSFRAME} nostackframe; {$endif} assembler; +asm + {$ifndef MSWINDOWS} + mov rcx, size + {$else} + push rsi + push rdi + {$endif MSWINDOWS} + push rbx + // Since most allocations are for small blocks, determine small block type + lea rbx, [rip + SmallBlockInfo] +@VoidSizeToSomething: + lea rdx, [size + BlockHeaderSize - 1] + shr rdx, 4 // div SmallBlockGranularity + // Is it a tiny/small block? + cmp size, (MaximumSmallBlockSize - BlockHeaderSize) + ja @NotTinySmallBlock + test size, size + jz @VoidSize + {$ifndef FPCMM_ASSUMEMULTITHREAD} + mov rax, qword ptr [rbx].TSmallBlockInfo.IsMultiThreadPtr + {$endif FPCMM_ASSUMEMULTITHREAD} + // Get the tiny/small TSmallBlockType[] offset in rcx + movzx ecx, byte ptr [rbx + rdx].TSmallBlockInfo.GetmemLookup + mov r8, rbx + shl ecx, SmallBlockTypePO2 + // ---------- Acquire block type lock ---------- + {$ifndef FPCMM_ASSUMEMULTITHREAD} + cmp byte ptr [rax], false + je @GotLockOnSmallBlock // no lock if IsMultiThread=false + {$endif FPCMM_ASSUMEMULTITHREAD} + // Can use one of the several arenas reserved for tiny blocks? + cmp ecx, SizeOf(TTinyBlockTypes) + jae @NotTinyBlockType + // ---------- TINY (size<=128B) block lock ---------- +@LockTinyBlockTypeLoop: + // Round-Robin attempt to lock next SmallBlockInfo.Tiny[] + // -> fair distribution among calls to reduce thread contention + mov dl, NumTinyBlockArenas + 1 // 8/16 arenas (including Small[]) +@TinyBlockArenaLoop: + mov eax, SizeOf(TTinyBlockTypes) + // note: "lock xadd" decreases the loop iterations but is slower + xadd dword ptr [r8 + TSmallBlockInfo.TinyCurrentArena], eax + lea rbx, [r8 + rcx] + and eax, ((NumTinyBlockArenas + 1) * SizeOf(TTinyBlockTypes)) - 1 + jz @TinySmall // Arena 0 = TSmallBlockInfo.Small[] + lea rbx, [rax + rbx + TSmallBlockInfo.Tiny - SizeOf(TTinyBlockTypes)] +@TinySmall: + mov eax, $100 + {$ifdef FPCMM_CMPBEFORELOCK} + cmp byte ptr [rbx].TSmallBlockType.Locked, false + jnz @NextTinyBlockArena1 + {$endif FPCMM_CMPBEFORELOCK} + lock cmpxchg byte ptr [rbx].TSmallBlockType.Locked, ah + je @GotLockOnSmallBlockType +@NextTinyBlockArena1: + dec dl + jnz @TinyBlockArenaLoop + // Fallback to SmallBlockInfo.Small[] next 2 small sizes - never occurs + lea rbx, [r8 + rcx + TSmallBlockInfo.Small + SizeOf(TSmallBlockType)] + mov eax, $100 + lock cmpxchg byte ptr [rbx].TSmallBlockType.Locked, ah + je @GotLockOnSmallBlockType + add rbx, SizeOf(TSmallBlockType) // next two small sizes + mov eax, $100 + lock cmpxchg byte ptr [rbx].TSmallBlockType.Locked, ah + je @GotLockOnSmallBlockType + // Thread Contention (_Freemem is more likely) + {$ifdef FPCMM_DEBUG} lock {$endif} + inc dword ptr [rbx].TSmallBlockType.GetmemSleepCount + push r8 + push rcx + call ReleaseCore + pop rcx + pop r8 + jmp @LockTinyBlockTypeLoop + // ---------- SMALL (size<2600) block lock ---------- +@NotTinyBlockType: + lea rbx, [r8 + rcx].TSmallBlockInfo.Small +@LockBlockTypeLoopRetry: + {$ifdef FPCMM_PAUSE} + {$ifdef FPCMM_SLEEPTSC} + rdtsc + shl rdx, 32 + lea r9, [rax + rdx + SpinSmallGetmemLockTSC] // r9 = endtsc + {$else} + mov edx, SpinSmallGetmemLockCount + {$endif FPCMM_SLEEPTSC} + {$endif FPCMM_PAUSE} +@LockBlockTypeLoop: + // Grab the default block type + mov eax, $100 + {$ifdef FPCMM_CMPBEFORELOCK} + cmp byte ptr [rbx].TSmallBlockType.Locked, false + jnz @NextLockBlockType1 + {$endif FPCMM_CMPBEFORELOCK} + lock cmpxchg byte ptr [rbx].TSmallBlockType.Locked, ah + je @GotLockOnSmallBlockType + // Try up to two next sizes + mov eax, $100 +@NextLockBlockType1: + add rbx, SizeOf(TSmallBlockType) + {$ifdef FPCMM_CMPBEFORELOCK} + cmp byte ptr [rbx].TSmallBlockType.Locked, al + jnz @NextLockBlockType2 + {$endif FPCMM_CMPBEFORELOCK} + lock cmpxchg byte ptr [rbx].TSmallBlockType.Locked, ah + je @GotLockOnSmallBlockType + mov eax, $100 +@NextLockBlockType2: + add rbx, SizeOf(TSmallBlockType) + pause + {$ifdef FPCMM_CMPBEFORELOCK} + cmp byte ptr [rbx].TSmallBlockType.Locked, al + jnz @NextLockBlockType3 + {$endif FPCMM_CMPBEFORELOCK} + lock cmpxchg byte ptr [rbx].TSmallBlockType.Locked, ah + je @GotLockOnSmallBlockType +@NextLockBlockType3: + sub rbx, 2 * SizeOf(TSmallBlockType) + {$ifdef FPCMM_PAUSE} + pause + {$ifdef FPCMM_SLEEPTSC} + rdtsc + shl rdx, 32 + or rax, rdx + cmp rax, r9 + jb @LockBlockTypeLoop // continue spinning until timeout + {$else} + dec edx + jnz @LockBlockTypeLoop // continue until spin count reached + {$endif FPCMM_SLEEPTSC} + {$endif FPCMM_PAUSE} + // Block type and two sizes larger are all locked - give up and sleep + {$ifdef FPCMM_DEBUG} lock {$endif} + inc dword ptr [rbx].TSmallBlockType.GetmemSleepCount + call ReleaseCore + jmp @LockBlockTypeLoopRetry + // ---------- TINY/SMALL block registration ---------- + {$ifndef FPCMM_ASSUMEMULTITHREAD} +@GotLockOnSmallBlock: + add rbx, rcx + {$endif FPCMM_ASSUMEMULTITHREAD} +@GotLockOnSmallBlockType: + // set rdx=NextPartiallyFreePool rax=FirstFreeBlock rcx=DropSmallFlagsMask + mov rdx, [rbx].TSmallBlockType.NextPartiallyFreePool + add [rbx].TSmallBlockType.GetmemCount, 1 + mov rax, [rdx].TSmallBlockPoolHeader.FirstFreeBlock + mov rcx, DropSmallFlagsMask + // Is there a pool with free blocks? + cmp rdx, rbx + je @TrySmallSequentialFeed + add [rdx].TSmallBlockPoolHeader.BlocksInUse, 1 + // Set the new first free block and the block header + and rcx, [rax - BlockHeaderSize] + mov [rdx].TSmallBlockPoolHeader.FirstFreeBlock, rcx + mov [rax - BlockHeaderSize], rdx + // Is the chunk now full? + jz @RemoveSmallPool + // Unlock the block type and leave + mov byte ptr [rbx].TSmallBlockType.Locked, false + {$ifdef NOSFRAME} + pop rbx + ret + {$else} + jmp @Done // on Win64, a stack frame is required + {$endif NOSFRAME} +@VoidSize: + inc size // "we always need to allocate something" (see RTL heap.inc) + jmp @VoidSizeToSomething +@TrySmallSequentialFeed: + // Feed a small block sequentially + movzx ecx, [rbx].TSmallBlockType.BlockSize + mov rdx, [rbx].TSmallBlockType.CurrentSequentialFeedPool + add rcx, rax + // Can another block fit? + cmp rax, [rbx].TSmallBlockType.MaxSequentialFeedBlockAddress + ja @AllocateSmallBlockPool + // Adjust number of used blocks and sequential feed pool + mov [rbx].TSmallBlockType.NextSequentialFeedBlockAddress, rcx + add [rdx].TSmallBlockPoolHeader.BlocksInUse, 1 + // Unlock the block type, set the block header and leave + mov byte ptr [rbx].TSmallBlockType.Locked, false + mov [rax - BlockHeaderSize], rdx + {$ifdef NOSFRAME} + pop rbx + ret + {$else} + jmp @Done // on Win64, a stack frame is required + {$endif NOSFRAME} +@RemoveSmallPool: + // Pool is full - remove it from the partially free list + mov rcx, [rdx].TSmallBlockPoolHeader.NextPartiallyFreePool + mov [rcx].TSmallBlockPoolHeader.PreviousPartiallyFreePool, rbx + mov [rbx].TSmallBlockType.NextPartiallyFreePool, rcx + // Unlock the block type and leave + mov byte ptr [rbx].TSmallBlockType.Locked, false + {$ifdef NOSFRAME} + pop rbx + ret + {$else} + jmp @Done // on Win64, a stack frame is required + {$endif NOSFRAME} +@AllocateSmallBlockPool: + // Access shared information about Medium blocks storage + lea rcx, [rip + SmallMediumBlockInfo] + mov r10, rcx + {$ifndef FPCMM_ASSUMEMULTITHREAD} + mov rax, [rcx + TMediumBlockinfo.IsMultiThreadPtr] + cmp byte ptr [rax], false + je @MediumLocked1 // no lock if IsMultiThread=false + {$endif FPCMM_ASSUMEMULTITHREAD} + mov eax, $100 + lock cmpxchg byte ptr [rcx].TMediumBlockInfo.Locked, ah + je @MediumLocked1 + call LockMediumBlocks +@MediumLocked1: + // Are there any available blocks of a suitable size? + movsx esi, [rbx].TSmallBlockType.AllowedGroupsForBlockPoolBitmap + and esi, [r10 + TMediumBlockInfo.BinGroupBitmap] + jz @NoSuitableMediumBlocks + // Compute rax = bin group number with free blocks, rcx = bin number + bsf eax, esi + lea r9, [rax * 4] + mov ecx, [r10 + TMediumBlockInfo.BinBitmaps + r9] + bsf ecx, ecx + lea rcx, [rcx + r9 * 8] + // Set rdi = @bin, rsi = free block + lea rsi, [rcx * 8] // SizeOf(TMediumBlockBin) = 16 + lea rdi, [r10 + TMediumBlockInfo.Bins + rsi * 2] + mov rsi, TMediumFreeBlock[rdi].NextFreeBlock + // Remove the first block from the linked list (LIFO) + mov rdx, TMediumFreeBlock[rsi].NextFreeBlock + mov TMediumFreeBlock[rdi].NextFreeBlock, rdx + mov TMediumFreeBlock[rdx].PreviousFreeBlock, rdi + // Is this bin now empty? + cmp rdi, rdx + jne @MediumBinNotEmpty + // rbx = block type, rax = bin group number, + // r9 = bin group number * 4, rcx = bin number, rdi = @bin, rsi = free block + // Flag this bin (and the group if needed) as empty + mov edx, - 2 + mov r11d, [r10 + TMediumBlockInfo.BinGroupBitmap] + rol edx, cl + btr r11d, eax // btr reg,reg is faster than btr [mem],reg + and [r10 + TMediumBlockInfo.BinBitmaps + r9], edx + jnz @MediumBinNotEmpty + mov [r10 + TMediumBlockInfo.BinGroupBitmap], r11d +@MediumBinNotEmpty: + // rsi = free block, rbx = block type + // Get the size of the available medium block in edi + mov rdi, DropMediumAndLargeFlagsMask + and rdi, [rsi - BlockHeaderSize] + cmp edi, MaximumSmallBlockPoolSize + jb @UseWholeBlock + // Split the block: new block size is the optimal size + mov edx, edi + movzx edi, [rbx].TSmallBlockType.OptimalBlockPoolSize + sub edx, edi + lea rcx, [rsi + rdi] + lea rax, [rdx + IsMediumBlockFlag + IsFreeBlockFlag] + mov [rcx - BlockHeaderSize], rax + // Store the size of the second split as the second last pointer + mov [rcx + rdx - 16], rdx + // Put the remainder in a bin (it will be big enough) + call InsertMediumBlockIntoBin // rcx=APMediumFreeBlock, edx=AMediumBlockSize + jmp @GotMediumBlock +@NoSuitableMediumBlocks: + // Check the sequential feed medium block pool for space + movzx ecx, [rbx].TSmallBlockType.MinimumBlockPoolSize + mov edi, [r10 + TMediumBlockInfo.SequentialFeedBytesLeft] + cmp edi, ecx + jb @AllocateNewSequentialFeed + // Get the address of the last block that was fed + mov rsi, [r10 + TMediumBlockInfo.LastSequentiallyFed] + // Enough sequential feed space: Will the remainder be usable? + movzx ecx, [rbx].TSmallBlockType.OptimalBlockPoolSize + lea rdx, [rcx + MinimumMediumBlockSize] + cmp edi, edx + cmovae edi, ecx + sub rsi, rdi + // Update the sequential feed parameters + sub [r10 + TMediumBlockInfo.SequentialFeedBytesLeft], edi + mov [r10 + TMediumBlockInfo.LastSequentiallyFed], rsi + jmp @GotMediumBlock +@AllocateNewSequentialFeed: + // Use the optimal size for allocating this small block pool + {$ifdef MSWINDOWS} + movzx ecx, word ptr [rbx].TSmallBlockType.OptimalBlockPoolSize + lea rdx, [rip + SmallMediumBlockInfo] + push rcx + push rdx + {$else} + movzx edi, word ptr [rbx].TSmallBlockType.OptimalBlockPoolSize + lea rsi, [rip + SmallMediumBlockInfo] + push rdi + push rsi + {$endif MSWINDOWS} + call AllocNewSequentialFeedMediumPool + pop r10 + pop rdi // restore edi=blocksize and r10=TMediumBlockInfo + mov rsi, rax + test rax, rax + jnz @GotMediumBlock // rsi=freeblock rbx=blocktype edi=blocksize + mov [r10 + TMediumBlockInfo.Locked], al + mov [rbx].TSmallBlockType.Locked, al + {$ifdef NOSFRAME} + pop rbx + ret + {$else} + jmp @Done // on Win64, a stack frame is required + {$endif NOSFRAME} +@UseWholeBlock: + // rsi = free block, rbx = block type, edi = block size + // Mark this block as used in the block following it + and byte ptr [rsi + rdi - BlockHeaderSize], NOT PreviousMediumBlockIsFreeFlag +@GotMediumBlock: + // rsi = free block, rbx = block type, edi = block size + // Set the size and flags for this block + lea rcx, [rdi + IsMediumBlockFlag + IsSmallBlockPoolInUseFlag] + mov [rsi - BlockHeaderSize], rcx + // Unlock medium blocks and setup the block pool + xor eax, eax + mov [r10 + TMediumBlockInfo.Locked], al + mov TSmallBlockPoolHeader[rsi].BlockType, rbx + mov TSmallBlockPoolHeader[rsi].FirstFreeBlock, rax + mov TSmallBlockPoolHeader[rsi].BlocksInUse, 1 + mov [rbx].TSmallBlockType.CurrentSequentialFeedPool, rsi + // Return the pointer to the first block, compute next/last block addresses + lea rax, [rsi + SmallBlockPoolHeaderSize] + movzx ecx, [rbx].TSmallBlockType.BlockSize + lea rdx, [rax + rcx] + mov [rbx].TSmallBlockType.NextSequentialFeedBlockAddress, rdx + add rdi, rsi + sub rdi, rcx + mov [rbx].TSmallBlockType.MaxSequentialFeedBlockAddress, rdi + // Unlock the small block type, set header and leave + mov byte ptr [rbx].TSmallBlockType.Locked, false + mov [rax - BlockHeaderSize], rsi + {$ifdef NOSFRAME} + pop rbx + ret + {$else} + jmp @Done // on Win64, a stack frame is required + {$endif NOSFRAME} + // ---------- MEDIUM block allocation ---------- +@NotTinySmallBlock: + // Do we need a Large block? + lea r10, [rip + MediumBlockInfo] + cmp rcx, MaximumMediumBlockSize - BlockHeaderSize + ja @IsALargeBlockRequest + // Get the bin size for this block size (rounded up to the next bin size) + lea rbx, [rcx + MediumBlockGranularity - 1 + BlockHeaderSize - MediumBlockSizeOffset] + mov rcx, r10 + and ebx, - MediumBlockGranularity + add ebx, MediumBlockSizeOffset + {$ifndef FPCMM_ASSUMEMULTITHREAD} + mov rax, [r10 + TMediumBlockinfo.IsMultiThreadPtr] + cmp byte ptr [rax], false + je @MediumLocked2 // no lock if IsMultiThread=false + {$endif FPCMM_ASSUMEMULTITHREAD} + mov eax, $100 + lock cmpxchg byte ptr [rcx].TMediumBlockInfo.Locked, ah + je @MediumLocked2 + call LockMediumBlocks +@MediumLocked2: + // Compute ecx = bin number in ecx and edx = group number + lea rdx, [rbx - MinimumMediumBlockSize] + mov ecx, edx + shr edx, 8 + 5 + shr ecx, 8 + mov eax, -1 + shl eax, cl + and eax, [r10 + TMediumBlockInfo.BinBitmaps + rdx * 4] + jz @GroupIsEmpty + and ecx, - 32 + bsf eax, eax + or ecx, eax + jmp @GotBinAndGroup +@GroupIsEmpty: + // Try all groups greater than this group + mov eax, - 2 + mov ecx, edx + shl eax, cl + and eax, [r10 + TMediumBlockInfo.BinGroupBitmap] + jz @TrySequentialFeedMedium + // There is a suitable group with enough space + bsf edx, eax + mov eax, [r10 + TMediumBlockInfo.BinBitmaps + rdx * 4] + bsf ecx, eax + mov eax, edx + shl eax, 5 + or ecx, eax + jmp @GotBinAndGroup +@TrySequentialFeedMedium: + mov ecx, [r10 + TMediumBlockInfo.SequentialFeedBytesLeft] + // Can block be fed sequentially? + sub ecx, ebx + jc @AllocateNewSequentialFeedForMedium + // Get the block address, store remaining bytes, set the flags and unlock + mov rax, [r10 + TMediumBlockInfo.LastSequentiallyFed] + sub rax, rbx + mov [r10 + TMediumBlockInfo.LastSequentiallyFed], rax + mov [r10 + TMediumBlockInfo.SequentialFeedBytesLeft], ecx + or rbx, IsMediumBlockFlag + mov [rax - BlockHeaderSize], rbx + mov byte ptr [r10 + TMediumBlockInfo.Locked], false + {$ifdef NOSFRAME} + pop rbx + ret + {$else} + jmp @Done // on Win64, a stack frame is required + {$endif NOSFRAME} +@AllocateNewSequentialFeedForMedium: + {$ifdef MSWINDOWS} + mov ecx, ebx + lea rdx, [rip + MediumBlockInfo] + {$else} + mov edi, ebx + lea rsi, [rip + MediumBlockInfo] + {$endif MSWINDOWS} + call AllocNewSequentialFeedMediumPool + mov byte ptr [rip + MediumBlockInfo.Locked], false + {$ifdef NOSFRAME} + pop rbx + ret + {$else} + jmp @Done // on Win64, a stack frame is required + {$endif NOSFRAME} +@GotBinAndGroup: + // ebx = block size, ecx = bin number, edx = group number + // Compute rdi = @bin, rsi = free block + lea rax, [rcx + rcx] + lea rdi, [r10 + TMediumBlockInfo.Bins + rax * 8] + mov rsi, TMediumFreeBlock[rdi].NextFreeBlock + // Remove the first block from the linked list (LIFO) + mov rax, TMediumFreeBlock[rsi].NextFreeBlock + mov TMediumFreeBlock[rdi].NextFreeBlock, rax + mov TMediumFreeBlock[rax].PreviousFreeBlock, rdi + // Is this bin now empty? + cmp rdi, rax + jne @MediumBinNotEmptyForMedium + // edx=bingroupnumber, ecx=binnumber, rdi=@bin, rsi=freeblock, ebx=blocksize + // Flag this bin and group as empty + mov eax, - 2 + mov r11d, [r10 + TMediumBlockInfo.BinGroupBitmap] + rol eax, cl + btr r11d, edx // btr reg,reg is faster than btr [mem],reg + and [r10 + TMediumBlockInfo.BinBitmaps + rdx * 4], eax + jnz @MediumBinNotEmptyForMedium + mov [r10 + TMediumBlockInfo.BinGroupBitmap], r11d +@MediumBinNotEmptyForMedium: + // rsi = free block, ebx = block size + // Get rdi = size of the available medium block, rdx = second split size + mov rdi, DropMediumAndLargeFlagsMask + and rdi, [rsi - BlockHeaderSize] + mov edx, edi + sub edx, ebx + jz @UseWholeBlockForMedium + // Split the block in two + lea rcx, [rsi + rbx] + lea rax, [rdx + IsMediumBlockFlag + IsFreeBlockFlag] + mov [rcx - BlockHeaderSize], rax + // Store the size of the second split as the second last pointer + mov [rcx + rdx - 16], rdx + // Put the remainder in a bin + cmp edx, MinimumMediumBlockSize + jb @GotMediumBlockForMedium + call InsertMediumBlockIntoBin // rcx=APMediumFreeBlock, edx=AMediumBlockSize + jmp @GotMediumBlockForMedium +@UseWholeBlockForMedium: + // Mark this block as used in the block following it + and byte ptr [rsi + rdi - BlockHeaderSize], NOT PreviousMediumBlockIsFreeFlag +@GotMediumBlockForMedium: + // Set the size and flags for this block + lea rcx, [rbx + IsMediumBlockFlag] + mov [rsi - BlockHeaderSize], rcx + // Unlock medium blocks and leave + mov byte ptr [r10 + TMediumBlockInfo.Locked], false + mov rax, rsi + {$ifdef NOSFRAME} + pop rbx + ret + {$else} + jmp @Done // on Win64, a stack frame is required + {$endif NOSFRAME} + // ---------- LARGE block allocation ---------- +@IsALargeBlockRequest: + xor rax, rax + test rcx, rcx + js @Done + // Note: size is still in the rcx/rdi first param register + call AllocateLargeBlock +@Done: // restore registers and the stack frame before ret + pop rbx + {$ifdef MSWINDOWS} + pop rdi + pop rsi + {$endif MSWINDOWS} +end; + +function FreeMediumBlock(arg1: pointer): PtrUInt; + {$ifdef NOSFRAME} nostackframe; {$endif} assembler; +// rcx=P rdx=[P-BlockHeaderSize] r10=TMediumBlockInfo +// (arg1 is used only for proper call of pascal functions below on all ABI) +asm + // Drop the flags, and set r11=P rbx=blocksize + and rdx, DropMediumAndLargeFlagsMask + push rbx + push rdx // save blocksize + mov rbx, rdx + mov r11, rcx + // Lock the Medium blocks + mov rcx, r10 + {$ifndef FPCMM_ASSUMEMULTITHREAD} + mov rax, [r10 + TMediumBlockinfo.IsMultiThreadPtr] + cmp byte ptr [rax], false + je @MediumBlocksLocked // no lock if IsMultiThread=false + {$endif FPCMM_ASSUMEMULTITHREAD} + mov eax, $100 + lock cmpxchg byte ptr [rcx].TMediumBlockInfo.Locked, ah + je @MediumBlocksLocked + {$ifdef FPCMM_LOCKLESSFREEMEDIUM} + // locked: try to put r11=P in TMediumBlockInfo.LocklessBin.Instance[] + lea rcx, [rcx].TMediumBlockInfo.LocklessBin + cmp byte ptr [rcx].TMediumLocklessBin.Count, MediumBlockLocklessBinCount + je @DoLock // all slots are filled + mov r9d, SpinFreememBinCount +@BinSp: mov eax, $100 + lock cmpxchg byte ptr [rcx].TMediumLocklessBin.Locked, ah + je @BinOk +@BinNo: pause + dec r9d + jnz @BinSp + jmp @DoLock +@BinOk: // we acquired TMediumLocklessBin.Locked + movzx eax, byte ptr [rcx].TMediumLocklessBin.Count + cmp al, MediumBlockLocklessBinCount + je @DoLoc2 + add byte ptr [rcx].TMediumLocklessBin.Count, 1 + + cmp al, byte ptr [rcx].TMediumLocklessBin.MaxCount + jb @max + mov byte ptr [rcx].TMediumLocklessBin.MaxCount, al +@max: + mov [rcx + TMediumLocklessBin.Instance + rax * 8], r11 + mov byte ptr [rcx].TMediumLocklessBin.Locked, false + jmp @Quit +@DoLoc2:mov byte ptr [rcx].TMediumLocklessBin.Locked, false +@DoLock:{$endif FPCMM_LOCKLESSFREEMEDIUM} + call LockMediumBlocks +@MediumBlocksLocked: + // Get rcx = next block size and flags + mov rcx, [r11 + rbx - BlockHeaderSize] + // Can we combine this block with the next free block? + test qword ptr [r11 + rbx - BlockHeaderSize], IsFreeBlockFlag + jnz @NextBlockIsFree + // Set the "PreviousIsFree" flag in the next block + or rcx, PreviousMediumBlockIsFreeFlag + mov [r11 + rbx - BlockHeaderSize], rcx +@NextBlockChecked: + // Re-read the flags and try to combine with previous free block + test byte ptr [r11 - BlockHeaderSize], PreviousMediumBlockIsFreeFlag + jnz @PreviousBlockIsFree +@PreviousBlockChecked: + // Check if entire medium block pool is free + cmp ebx, (MediumBlockPoolSize - MediumBlockPoolHeaderSize) + je @EntireMediumPoolFree +@Bin: // Store size of the block, flags and trailing size marker and insert into bin + lea rax, [rbx + IsMediumBlockFlag + IsFreeBlockFlag] + mov [r11 - BlockHeaderSize], rax + mov [r11 + rbx - 16], rbx + mov rcx, r11 + mov rdx, rbx + call InsertMediumBlockIntoBin // rcx=P, edx=blocksize + {$ifdef FPCMM_LOCKLESSFREEMEDIUM} + // recycle any pending TMediumLocklessBin.Instance[] pointer + lea rcx, [r10].TMediumBlockInfo.LocklessBin + cmp byte ptr [rcx].TMediumLocklessBin.Count, 0 + je @Done + mov eax, $100 + lock cmpxchg byte ptr [rcx].TMediumLocklessBin.Locked, ah // just try once + jne @Done + // compute r11=P and rbx=blocksize from pending pointer + movzx eax, byte ptr [rcx].TMediumLocklessBin.Count + dec byte ptr [rcx].TMediumLocklessBin.Count + mov r11, [rcx + TMediumLocklessBin.Instance - 8 + rax * 8] + mov byte ptr [rcx].TMediumLocklessBin.Locked, false + mov rbx, qword ptr [r11 - BlockHeaderSize] + and rbx, DropMediumAndLargeFlagsMask + jmp @MediumBlocksLocked +@Done: {$endif FPCMM_LOCKLESSFREEMEDIUM} + // Unlock medium blocks and leave + mov byte ptr [r10 + TMediumBlockInfo.Locked], false + jmp @Quit +@NextBlockIsFree: + // Get rax = next block address, rbx = end of the block + lea rax, [r11 + rbx] + and rcx, DropMediumAndLargeFlagsMask + add rbx, rcx + // Was the block binned? + cmp rcx, MinimumMediumBlockSize + jb @NextBlockChecked + mov rcx, rax + call RemoveMediumFreeBlock // rcx = APMediumFreeBlock + jmp @NextBlockChecked +@PreviousBlockIsFree: + // Get rcx = size/point of the previous free block, rbx = new block end + mov rcx, [r11 - 16] + sub r11, rcx + add rbx, rcx + // Remove the previous block from the linked list + cmp ecx, MinimumMediumBlockSize + jb @PreviousBlockChecked + mov rcx, r11 + call RemoveMediumFreeBlock // rcx = APMediumFreeBlock + jmp @PreviousBlockChecked +@EntireMediumPoolFree: + // Ensure current sequential feed pool is free + cmp dword ptr [r10 + TMediumBlockInfo.SequentialFeedBytesLeft], MediumBlockPoolSize - MediumBlockPoolHeaderSize + jne @MakeEmptyMediumPoolSequentialFeed + // Remove this medium block pool from the linked list stored in its header + sub r11, MediumBlockPoolHeaderSize + mov rax, TMediumBlockPoolHeader[r11].PreviousMediumBlockPoolHeader + mov rdx, TMediumBlockPoolHeader[r11].NextMediumBlockPoolHeader + mov TMediumBlockPoolHeader[rax].NextMediumBlockPoolHeader, rdx + mov TMediumBlockPoolHeader[rdx].PreviousMediumBlockPoolHeader, rax + // Unlock medium blocks and free the block pool + mov byte ptr [r10 + TMediumBlockInfo.Locked], false + mov arg1, r11 + call FreeMedium + jmp @Quit +@MakeEmptyMediumPoolSequentialFeed: + // Get rbx = end-marker block, and recycle the current sequential feed pool + lea rbx, [r11 + MediumBlockPoolSize - MediumBlockPoolHeaderSize] + mov arg1, r10 + call BinMediumSequentialFeedRemainder + // Set this medium pool up as the new sequential feed pool, unlock and leave + mov qword ptr [rbx - BlockHeaderSize], IsMediumBlockFlag + mov dword ptr [r10 + TMediumBlockInfo.SequentialFeedBytesLeft], MediumBlockPoolSize - MediumBlockPoolHeaderSize + mov [r10 + TMediumBlockInfo.LastSequentiallyFed], rbx + mov byte ptr [r10 + TMediumBlockInfo.Locked], false +@Quit: // restore registers and the stack frame + pop rax // medium block size + pop rbx +end; + +{$ifdef FPCMM_REPORTMEMORYLEAKS} +const + /// mark freed blocks with 00000000 BLODLESS marker to track incorrect usage + REPORTMEMORYLEAK_FREEDHEXSPEAK = $B10D1E55; +{$endif FPCMM_REPORTMEMORYLEAKS} + +function _FreeMem(P: pointer): PtrUInt; + {$ifdef NOSFRAME} nostackframe; {$endif} assembler; +asm + {$ifdef FPCMM_REPORTMEMORYLEAKS} + mov eax, REPORTMEMORYLEAK_FREEDHEXSPEAK // 00000000 BLODLESS marker + {$endif FPCMM_REPORTMEMORYLEAKS} + {$ifndef MSWINDOWS} + mov rcx, P + {$endif MSWINDOWS} + test P, P + jz @Quit // void pointer + {$ifdef FPCMM_REPORTMEMORYLEAKS} + mov qword ptr [P], rax // over TObject VMT or string/dynarray header + {$endif FPCMM_REPORTMEMORYLEAKS} + mov rdx, qword ptr [P - BlockHeaderSize] + {$ifdef FPCMM_ASSUMEMULTITHREAD} + mov eax, $100 + {$else} + mov rax, qword ptr [rip + SmallBlockInfo].TSmallBlockInfo.IsMultiThreadPtr + {$endif FPCMM_ASSUMEMULTITHREAD} + // Is it a small block in use? + test dl, IsFreeBlockFlag + IsMediumBlockFlag + IsLargeBlockFlag + jnz @NotSmallBlockInUse + // Get the small block type in rbx and try to grab it + push rbx + mov rbx, [rdx].TSmallBlockPoolHeader.BlockType + {$ifdef FPCMM_ASSUMEMULTITHREAD} + lock cmpxchg byte ptr [rbx].TSmallBlockType.Locked, ah + jne @CheckTinySmallLock + {$else} + cmp byte ptr [rax], false + jne @TinySmallLockLoop // lock if IsMultiThread=true + {$endif FPCMM_ASSUMEMULTITHREAD} +@FreeAndUnlock: + // rbx=TSmallBlockType rcx=P rdx=TSmallBlockPoolHeader + // Adjust number of blocks in use, set rax = old first free block + add [rbx].TSmallBlockType.FreememCount, 1 + mov rax, [rdx].TSmallBlockPoolHeader.FirstFreeBlock + sub [rdx].TSmallBlockPoolHeader.BlocksInUse, 1 + jz @PoolIsNowEmpty + // Store this as the new first free block + mov [rdx].TSmallBlockPoolHeader.FirstFreeBlock, rcx + // Store the previous first free block as the block header + lea r9, [rax + IsFreeBlockFlag] + mov [rcx - BlockHeaderSize], r9 + // Was the pool full? + test rax, rax + jnz @SmallPoolWasNotFull + // Insert the pool back into the linked list if it was full + mov rcx, [rbx].TSmallBlockType.NextPartiallyFreePool + mov [rdx].TSmallBlockPoolHeader.PreviousPartiallyFreePool, rbx + mov [rdx].TSmallBlockPoolHeader.NextPartiallyFreePool, rcx + mov [rcx].TSmallBlockPoolHeader.PreviousPartiallyFreePool, rdx + mov [rbx].TSmallBlockType.NextPartiallyFreePool, rdx +@SmallPoolWasNotFull: + {$ifdef FPCMM_LOCKLESSFREE} + // Try to release all pending bin from this block while we have the lock + cmp byte ptr [rbx].TSmallBlockType.BinCount, 0 + jne @ProcessPendingBin + {$endif FPCMM_LOCKLESSFREE} + mov byte ptr [rbx].TSmallBlockType.Locked, false + movzx eax, word ptr [rbx].TSmallBlockType.BlockSize + {$ifdef NOSFRAME} + pop rbx + ret + {$else} + jmp @Done // on Win64, a stack frame is required + {$endif NOSFRAME} +@PoolIsNowEmpty: + // FirstFreeBlock=nil means it is the sequential feed pool with a single block + test rax, rax + jz @IsSequentialFeedPool + // Pool is now empty: Remove it from the linked list and free it + mov rax, [rdx].TSmallBlockPoolHeader.PreviousPartiallyFreePool + mov rcx, [rdx].TSmallBlockPoolHeader.NextPartiallyFreePool + mov TSmallBlockPoolHeader[rax].NextPartiallyFreePool, rcx + mov [rcx].TSmallBlockPoolHeader.PreviousPartiallyFreePool, rax + // Is this the sequential feed pool? If so, stop sequential feeding + xor eax, eax + cmp [rbx].TSmallBlockType.CurrentSequentialFeedPool, rdx + jne @NotSequentialFeedPool +@IsSequentialFeedPool: + mov [rbx].TSmallBlockType.MaxSequentialFeedBlockAddress, rax +@NotSequentialFeedPool: + // Unlock blocktype and release this pool + mov byte ptr [rbx].TSmallBlockType.Locked, false + mov rcx, rdx + mov rdx, qword ptr [rdx - BlockHeaderSize] + lea r10, [rip + SmallMediumBlockInfo] + call FreeMediumBlock // no call nor BinLocked to avoid race condition + movzx eax, word ptr [rbx].TSmallBlockType.BlockSize + {$ifdef NOSFRAME} + pop rbx + ret + {$else} + jmp @Done // on Win64, a stack frame is required + {$endif NOSFRAME} +{$ifdef FPCMM_LOCKLESSFREE} +@ProcessPendingBin: + // Try once to acquire BinLocked (spinning may induce race condition) + {$ifdef FPCMM_CMPBEFORELOCK} + cmp byte ptr [rbx].TSmallBlockType.BinLocked, true + je @BinAlreadyLocked + {$endif FPCMM_CMPBEFORELOCK} + mov eax, $100 + lock cmpxchg byte ptr [rbx].TSmallBlockType.BinLocked, ah + jne @BinAlreadyLocked + movzx eax, byte ptr [rbx].TSmallBlockType.BinCount + test al, al + jz @NoBin + // free last pointer in TSmallBlockType.BinInstance[] + mov rcx, qword ptr [rbx + TSmallBlockType.BinInstance - 8 + rax * 8] + dec byte ptr [rbx].TSmallBlockType.BinCount + mov byte ptr [rbx].TSmallBlockType.BinLocked, false + mov rdx, [rcx - BlockHeaderSize] + jmp @FreeAndUnlock // loop until BinCount=0 or BinLocked +@NoBin: mov byte ptr [rbx].TSmallBlockType.BinLocked, false +@BinAlreadyLocked: + mov byte ptr [rbx].TSmallBlockType.Locked, false +{$endif FPCMM_LOCKLESSFREE} + movzx eax, word ptr [rbx].TSmallBlockType.BlockSize + {$ifdef NOSFRAME} + pop rbx + ret + {$else} + jmp @Done // on Win64, a stack frame is required + {$endif NOSFRAME} +@NotSmallBlockInUse: + lea r10, [rip + MediumBlockInfo] + test dl, IsFreeBlockFlag + IsLargeBlockFlag + jz @DoFreeMedium + call FreeLargeBlock // P is still in rcx/rdi first param register + jmp @Quit +@DoFreeMedium: + call FreeMediumBlock + jmp @Quit +@TinySmallLockLoop: + mov eax, $100 + lock cmpxchg byte ptr [rbx].TSmallBlockType.Locked, ah + je @FreeAndUnlock +@CheckTinySmallLock: + {$ifdef FPCMM_LOCKLESSFREE} + // Try to put rcx=P in TSmallBlockType.BinInstance[] + cmp byte ptr [rbx].TSmallBlockType.BinCount, SmallBlockBinCount + je @LockBlockTypeSleep // wait if all slots are filled + mov eax, $100 + lock cmpxchg byte ptr [rbx].TSmallBlockType.BinLocked, ah + je @BinLocked + {$ifdef FPCMM_PAUSE} + {$ifdef FPCMM_SLEEPTSC} + push rdx + rdtsc + shl rdx, 32 + lea r9, [rax + rdx + SpinSmallFreememBinTSC] // r9 = endtsc + {$else} + mov r9d, SpinFreememBinCount + {$endif FPCMM_SLEEPTSC} +@SpinBinLock: + pause + {$ifdef FPCMM_SLEEPTSC} + rdtsc + shl rdx, 32 + or rax, rdx + cmp rax, r9 + ja @SpinTimeout + {$else} + dec r9 + jz @SpinTimeout + {$endif FPCMM_SLEEPTSC} + {$ifdef FPCMM_CMPBEFORELOCK_SPIN} + cmp byte ptr [rbx].TSmallBlockType.BinLocked, true + je @SpinBinLock + {$endif FPCMM_CMPBEFORELOCK_SPIN} + mov eax, $100 + lock cmpxchg byte ptr [rbx].TSmallBlockType.BinLocked, ah + jne @SpinBinLock + {$ifdef FPCMM_SLEEPTSC} + pop rdx + {$endif FPCMM_SLEEPTSC} + jmp @BinLocked +@SpinTimeout: + {$ifdef FPCMM_SLEEPTSC} + pop rdx + {$endif FPCMM_SLEEPTSC} + {$endif FPCMM_PAUSE} + {$ifdef FPCMM_DEBUG} // no lock (informative only) + inc dword ptr [rbx].TSmallBlockType.BinSpinCount + {$endif FPCMM_DEBUG} + jmp @LockBlockTypeSleep +@BinLocked: + movzx eax, byte ptr [rbx].TSmallBlockType.BinCount + cmp al, SmallBlockBinCount + je @LockBlockType + add byte ptr [rbx].TSmallBlockType.BinCount, 1 + mov [rbx + TSmallBlockType.BinInstance + rax * 8], rcx + mov byte ptr [rbx].TSmallBlockType.BinLocked, false + movzx eax, word ptr [rbx].TSmallBlockType.BlockSize + {$ifdef NOSFRAME} + pop rbx + ret + {$else} + jmp @Done // on Win64, a stack frame is required + {$endif NOSFRAME} +@LockBlockType: + // Fallback to main block lock if TSmallBlockType.BinInstance[] is full + mov byte ptr [rbx].TSmallBlockType.BinLocked, false +@LockBlockTypeSleep: + {$endif FPCMM_LOCKLESSFREE} + {$ifdef FPCMM_PAUSE} + // Spin to grab the block type (don't try too long due to contention) + {$ifdef FPCMM_SLEEPTSC} + push rdx + rdtsc + shl rdx, 32 + lea r9, [rax + rdx + SpinSmallFreememLockTSC] // r9 = endtsc +@SpinLockBlockType: + pause + rdtsc + shl rdx, 32 + or rax, rdx + cmp rax, r9 + ja @LockBlockTypeReleaseCore + {$else} + mov r8d, SpinSmallFreememLockCount +@SpinLockBlockType: + pause + dec r8d + jz @LockBlockTypeReleaseCore + {$endif FPCMM_SLEEPTSC} + mov eax, $100 + {$ifdef FPCMM_CMPBEFORELOCK_SPIN} + cmp byte ptr [rbx].TSmallBlockType.Locked, true + je @SpinLockBlockType + {$endif FPCMM_CMPBEFORELOCK_SPIN} + lock cmpxchg byte ptr [rbx].TSmallBlockType.Locked, ah + jne @SpinLockBlockType + {$ifdef FPCMM_SLEEPTSC} + pop rdx + {$endif FPCMM_SLEEPTSC} + jmp @FreeAndUnlock +@LockBlockTypeReleaseCore: + {$ifdef FPCMM_SLEEPTSC} + pop rdx + {$endif FPCMM_SLEEPTSC} + {$endif FPCMM_PAUSE} + // Couldn't grab the block type - sleep and try again + {$ifdef FPCMM_DEBUG} lock {$endif} + inc dword ptr [rbx].TSmallBlockType.FreeMemSleepCount + push rdx + push rcx + call ReleaseCore + pop rcx + pop rdx + jmp @TinySmallLockLoop +@Done: // restore rbx and the stack frame before ret + pop rbx +@Quit: +end; + +// warning: FPC signature is not the same than Delphi: requires "var P" +function _ReallocMem(var P: pointer; Size: PtrUInt): pointer; + {$ifdef NOSFRAME} nostackframe; {$endif} assembler; +asm + {$ifdef MSWINDOWS} + push rdi + push rsi + {$else} + mov rdx, Size + {$endif MSWINDOWS} + push rbx + push r14 + push P // for assignement in @Done + mov r14, qword ptr [P] + test rdx, rdx + jz @VoidSize // ReallocMem(P,0)=FreeMem(P) + test r14, r14 + jz @GetMemMoveFreeMem // ReallocMem(nil,Size)=GetMem(Size) + mov rcx, [r14 - BlockHeaderSize] + test cl, IsFreeBlockFlag + IsMediumBlockFlag + IsLargeBlockFlag + jnz @NotASmallBlock + // -------------- TINY/SMALL block ------------- + // Get rbx=blocktype, rcx=available size, rax=inplaceresize + mov rbx, [rcx].TSmallBlockPoolHeader.BlockType + lea rax, [rdx * 4 + SmallBlockDownsizeCheckAdder] + movzx ecx, [rbx].TSmallBlockType.BlockSize + sub ecx, BlockHeaderSize + cmp rcx, rdx + jb @SmallUpsize + // Downsize or small growup with enough space: reallocate only if need + cmp eax, ecx + jb @GetMemMoveFreeMem // r14=P rdx=size +@NoResize: + // branchless execution if current block is good enough for this size + mov rax, r14 // keep original pointer + pop rcx + {$ifdef NOSFRAME} + pop r14 + pop rbx + ret + {$else} + jmp @Quit // on Win64, a stack frame is required + {$endif NOSFRAME} +@VoidSize: + push rdx // to set P=nil + jmp @DoFree // ReallocMem(P,0)=FreeMem(P) +@SmallUpsize: + // State: r14=pointer, rdx=NewSize, rcx=CurrentBlockSize, rbx=CurrentBlockType + // Small blocks always grow with at least 100% + SmallBlockUpsizeAdder bytes + lea P, qword ptr [rcx * 2 + SmallBlockUpsizeAdder] + movzx ebx, [rbx].TSmallBlockType.BlockSize + sub ebx, BlockHeaderSize + 8 + // r14=pointer, P=NextUpBlockSize, rdx=NewSize, rbx=OldSize-8 +@AdjustGetMemMoveFreeMem: + // New allocated size is max(requestedsize, minimumupsize) + cmp rdx, P + cmova P, rdx + push rdx + call _GetMem + pop rdx + test rax, rax + jz @Done + jmp @MoveFreeMem // rax=New r14=P rbx=size-8 +@GetMemMoveFreeMem: + // reallocate copy and free: r14=P rdx=size + mov rbx, rdx + mov P, rdx // P is the proper first argument register + call _GetMem + test rax, rax + jz @Done + test r14, r14 // ReallocMem(nil,Size)=GetMem(Size) + jz @Done + sub rbx, 8 +@MoveFreeMem: + // copy and free: rax=New r14=P rbx=size-8 + push rax + {$ifdef FPCMM_ERMS} + cmp rbx, ErmsMinSize // startup cost of 0..255 bytes + jae @erms + {$endif FPCMM_ERMS} + lea rcx, [r14 + rbx] + lea rdx, [rax + rbx] + neg rbx + jns @Last8 + align 16 +@By16: movaps xmm0, oword ptr [rcx + rbx] + movaps oword ptr [rdx + rbx], xmm0 + add rbx, 16 + js @By16 +@Last8: mov rax, qword ptr [rcx + rbx] + mov qword ptr [rdx + rbx], rax +@DoFree:mov P, r14 + call _FreeMem + pop rax + jmp @Done + {$ifdef FPCMM_ERMS} +@erms: cld + mov rsi, r14 + mov rdi, rax + lea rcx, [rbx + 8] + rep movsb + jmp @DoFree + {$endif FPCMM_ERMS} +@NotASmallBlock: + // Is this a medium block or a large block? + test cl, IsFreeBlockFlag + IsLargeBlockFlag + jnz @PossibleLargeBlock + // -------------- MEDIUM block ------------- + // rcx=CurrentSize+Flags, r14=P, rdx=RequestedSize, r10=TMediumBlockInfo + lea rsi, [rdx + rdx] + lea r10, [rip + MediumBlockInfo] + mov rbx, rcx + and ecx, DropMediumAndLargeFlagsMask + lea rdi, [r14 + rcx] + sub ecx, BlockHeaderSize + and ebx, ExtractMediumAndLargeFlagsMask + // Is it an upsize or a downsize? + cmp rdx, rcx + ja @MediumBlockUpsize + // rcx=CurrentBlockSize-BlockHeaderSize, rbx=CurrentBlockFlags, + // rdi=@NextBlock, r14=P, rdx=RequestedSize + // Downsize reallocate and move data only if less than half the current size + cmp rsi, rcx + jae @NoResize + // In-place downsize? Ensure not smaller than MinimumMediumBlockSize + cmp edx, MinimumMediumBlockSize - BlockHeaderSize + jae @MediumBlockInPlaceDownsize + // Need to move to another Medium block pool, or into a Small block? + cmp edx, MediumInPlaceDownsizeLimit + jb @GetMemMoveFreeMem + // No need to realloc: resize in-place (if not already at the minimum size) + mov edx, MinimumMediumBlockSize - BlockHeaderSize + cmp ecx, MinimumMediumBlockSize - BlockHeaderSize + jna @NoResize +@MediumBlockInPlaceDownsize: + // Round up to the next medium block size + lea rsi, [rdx + BlockHeaderSize + MediumBlockGranularity - 1 - MediumBlockSizeOffset] + and rsi, - MediumBlockGranularity + add rsi, MediumBlockSizeOffset + // Get the size of the second split + add ecx, BlockHeaderSize + sub ecx, esi + mov ebx, ecx + // Lock the medium blocks + mov rcx, r10 + {$ifndef FPCMM_ASSUMEMULTITHREAD} + mov rax, [r10 + TMediumBlockinfo.IsMultiThreadPtr] + cmp byte ptr [rax], false + je @MediumBlocksLocked1 // no lock if IsMultiThread=false + {$endif FPCMM_ASSUMEMULTITHREAD} + mov eax, $100 + lock cmpxchg byte ptr [rcx].TMediumBlockInfo.Locked, ah + je @MediumBlocksLocked1 + call LockMediumBlocks +@MediumBlocksLocked1: + mov ecx, ebx + // Reread the flags - may have changed before medium blocks could be locked + mov rbx, ExtractMediumAndLargeFlagsMask + and rbx, [r14 - BlockHeaderSize] +@DoMediumInPlaceDownsize: + // Set the new size in header, and get rbx = second split size + or rbx, rsi + mov [r14 - BlockHeaderSize], rbx + mov ebx, ecx + // If the next block is used, flag its previous block as free + mov rdx, [rdi - BlockHeaderSize] + test dl, IsFreeBlockFlag + jnz @MediumDownsizeNextBlockFree + or rdx, PreviousMediumBlockIsFreeFlag + mov [rdi - BlockHeaderSize], rdx + jmp @MediumDownsizeDoSplit +@MediumDownsizeNextBlockFree: + // If the next block is free, combine both + mov rcx, rdi + and rdx, DropMediumAndLargeFlagsMask + add rbx, rdx + add rdi, rdx + cmp edx, MinimumMediumBlockSize + jb @MediumDownsizeDoSplit + call RemoveMediumFreeBlock // rcx=APMediumFreeBlock +@MediumDownsizeDoSplit: + // Store the trailing size field and free part header + mov [rdi - 16], rbx + lea rcx, [rbx + IsMediumBlockFlag + IsFreeBlockFlag]; + mov [r14 + rsi - BlockHeaderSize], rcx + // Bin this free block (if worth it) + cmp rbx, MinimumMediumBlockSize + jb @MediumBlockDownsizeDone + lea rcx, [r14 + rsi] + mov rdx, rbx + call InsertMediumBlockIntoBin // rcx=APMediumFreeBlock, edx=AMediumBlockSize +@MediumBlockDownsizeDone: + // Unlock the medium blocks, and leave with the new pointer + mov byte ptr [r10 + TMediumBlockInfo.Locked], false + mov rax, r14 + jmp @Done +@MediumBlockUpsize: + // ecx = Current Block Size - BlockHeaderSize, bl = Current Block Flags, + // rdi = @Next Block, r14 = P, rdx = Requested Size + // Try to make in-place upsize + mov rax, [rdi - BlockHeaderSize] + test al, IsFreeBlockFlag + jz @CannotUpsizeMediumBlockInPlace + // Get rax = available size, rsi = available size with the next block + and rax, DropMediumAndLargeFlagsMask + lea rsi, [rax + rcx] + cmp rdx, rsi + ja @CannotUpsizeMediumBlockInPlace + // Grow into the next block + mov rbx, rcx + mov rcx, r10 + {$ifndef FPCMM_ASSUMEMULTITHREAD} + mov rax, [r10 + TMediumBlockinfo.IsMultiThreadPtr] + cmp byte ptr [rax], false + je @MediumBlocksLocked2 // no lock if IsMultiThread=false + {$endif FPCMM_ASSUMEMULTITHREAD} + mov eax, $100 + lock cmpxchg byte ptr [rcx].TMediumBlockInfo.Locked, ah + je @MediumBlocksLocked2 + mov rsi, rdx + call LockMediumBlocks + mov rdx, rsi +@MediumBlocksLocked2: + // Re-read info once locked, and ensure next block is still free + mov rcx, rbx + mov rbx, ExtractMediumAndLargeFlagsMask + and rbx, [r14 - BlockHeaderSize] + mov rax, [rdi - BlockHeaderSize] + test al, IsFreeBlockFlag + jz @NextMediumBlockChanged + and eax, DropMediumAndLargeFlagsMask + lea rsi, [rax + rcx] + cmp rdx, rsi + ja @NextMediumBlockChanged +@DoMediumInPlaceUpsize: + // Bin next free block (if worth it) + cmp eax, MinimumMediumBlockSize + jb @MediumInPlaceNoNextRemove + push rcx + push rdx + mov rcx, rdi + call RemoveMediumFreeBlock // rcx=APMediumFreeBlock + pop rdx + pop rcx +@MediumInPlaceNoNextRemove: + // Medium blocks grow a minimum of 25% in in-place upsizes + mov eax, ecx + shr eax, 2 + add eax, ecx + // Get the maximum of the requested size and the minimum growth size + xor edi, edi + sub eax, edx + adc edi, -1 + and eax, edi + // Round up to the nearest block size granularity + lea rax, [rax + rdx + BlockHeaderSize + MediumBlockGranularity - 1 - MediumBlockSizeOffset] + and eax, -MediumBlockGranularity + add eax, MediumBlockSizeOffset + // Calculate the size of the second split and check if it fits + lea rdx, [rsi + BlockHeaderSize] + sub edx, eax + ja @MediumInPlaceUpsizeSplit + // Grab the whole block: Mark it as used in the next block, and adjust size + and qword ptr [r14 + rsi], NOT PreviousMediumBlockIsFreeFlag + add rsi, BlockHeaderSize + jmp @MediumUpsizeInPlaceDone +@MediumInPlaceUpsizeSplit: + // Store the size of the second split as the second last pointer + mov [r14 + rsi - BlockHeaderSize], rdx + // Set the second split header + lea rdi, [rdx + IsMediumBlockFlag + IsFreeBlockFlag] + mov [r14 + rax - BlockHeaderSize], rdi + mov rsi, rax + cmp edx, MinimumMediumBlockSize + jb @MediumUpsizeInPlaceDone + lea rcx, [r14 + rax] + call InsertMediumBlockIntoBin // rcx=APMediumFreeBlock, edx=AMediumBlockSize +@MediumUpsizeInPlaceDone: + // No need to move data at upsize: set the size and flags for this block + or rsi, rbx + mov [r14 - BlockHeaderSize], rsi + mov byte ptr [r10 + TMediumBlockInfo.Locked], false + mov rax, r14 + jmp @Done +@NextMediumBlockChanged: + // The next block changed during lock: reallocate and move data + mov byte ptr [r10 + TMediumBlockInfo.Locked], false +@CannotUpsizeMediumBlockInPlace: + // rcx=OldSize-8, rdx=NewSize + mov rbx, rcx + mov eax, ecx + shr eax, 2 + lea P, qword ptr [rcx + rax] // NextUpBlockSize = OldSize+25% + jmp @AdjustGetMemMoveFreeMem // P=BlockSize, rdx=NewSize, rbx=OldSize-8 +@PossibleLargeBlock: + // -------------- LARGE block ------------- + test cl, IsFreeBlockFlag + IsMediumBlockFlag + jnz @Error + {$ifdef MSWINDOWS} + mov rcx, r14 + {$else} + mov rdi, r14 + mov rsi, rdx + {$endif MSWINDOWS} + call ReallocateLargeBlock // with restored proper registers + jmp @Done +@Error: xor eax, eax +@Done: // restore registers and the stack frame before ret + pop rcx + mov qword ptr [rcx], rax // store new pointer in var P +@Quit: pop r14 + pop rbx + {$ifdef MSWINDOWS} + pop rsi + pop rdi + {$endif MSWINDOWS} +end; + +function _AllocMem(Size: PtrUInt): pointer; + {$ifdef NOSFRAME} nostackframe; {$endif} assembler; +asm + push rbx + // Compute rbx = size rounded down to the last pointer + lea rbx, [Size - 1] + and rbx, - 8 + // Perform the memory allocation + call _GetMem + // Could a block be allocated? rcx = 0 if yes, -1 if no + cmp rax, 1 + sbb rcx, rcx + // Point rdx to the last pointer + lea rdx, [rax + rbx] + // Compute Size (1..8 doesn't need to enter the SSE2 loop) + or rbx, rcx + jz @LastQ + // Large blocks from mmap/VirtualAlloc are already zero filled + cmp rbx, MaximumMediumBlockSize - BlockHeaderSize + jae @Done + {$ifdef FPCMM_ERMS} + cmp rbx, ErmsMinSize // startup cost of 0..255 bytes + jae @erms + {$endif FPCMM_ERMS} + neg rbx + pxor xmm0, xmm0 + align 16 +@FillLoop: // non-temporal movntdq not needed with small/medium size + movaps oword ptr [rdx + rbx], xmm0 + add rbx, 16 + js @FillLoop + // fill the last pointer +@LastQ: xor rcx, rcx + mov qword ptr [rdx], rcx + {$ifdef FPCMM_ERMS} + {$ifdef NOSFRAME} + pop rbx + ret + {$else} + jmp @Done // on Win64, a stack frame is required + {$endif NOSFRAME} + // ERMS has a startup cost, but "rep stosd" is fast enough on all CPUs +@erms: mov rcx, rbx + push rax + {$ifdef MSWINDOWS} + push rdi + {$endif MSWINDOWS} + cld + mov rdi, rdx + xor eax, eax + sub rdi, rbx + shr ecx, 2 + mov qword ptr [rdx], rax + rep stosd + {$ifdef MSWINDOWS} + pop rdi + {$endif MSWINDOWS} + pop rax + {$endif FPCMM_ERMS} +@Done: // restore rbx register and the stack frame before ret + pop rbx +end; + +function _MemSize(P: pointer): PtrUInt; +begin + // AFAIK used only by fpc_AnsiStr_SetLength() in FPC RTL + // also used by our static SQLite3 for its xSize() callback + P := PPointer(PByte(P) - BlockHeaderSize)^; + if (PtrUInt(P) and (IsMediumBlockFlag or IsLargeBlockFlag)) = 0 then + result := PSmallBlockPoolHeader(PtrUInt(P) and DropSmallFlagsMask). + BlockType.BlockSize - BlockHeaderSize + else + begin + result := (PtrUInt(P) and DropMediumAndLargeFlagsMask) - BlockHeaderSize; + if (PtrUInt(P) and IsMediumBlockFlag) = 0 then + dec(result, LargeBlockHeaderSize); + end; +end; + +function _FreeMemSize(P: pointer; size: PtrUInt): PtrInt; +begin + // should return the chunk size - only used by heaptrc AFAIK + if (P <> nil) and + (size <> 0) then + result := _FreeMem(P) + else + result := 0; +end; + + +{ ********* Information Gathering } + +{$ifdef FPCMM_STANDALONE} + +procedure Assert(flag: boolean); +begin +end; + +{$else} + +function _GetFPCHeapStatus: TFPCHeapStatus; +var + mm: PMMStatus; +begin + mm := @HeapStatus; + {$ifdef FPCMM_DEBUG} + result.MaxHeapSize := mm^.Medium.PeakBytes + mm^.Large.PeakBytes; + {$else} + result.MaxHeapSize := 0; + {$endif FPCMM_DEBUG} + result.MaxHeapUsed := result.MaxHeapSize; + result.CurrHeapSize := mm^.Medium.CurrentBytes + mm^.Large.CurrentBytes; + result.CurrHeapUsed := result.CurrHeapSize; + result.CurrHeapFree := 0; +end; + +function _GetHeapStatus: THeapStatus; +begin + FillChar(result, sizeof(result), 0); + with HeapStatus do + result.TotalAllocated := Medium.CurrentBytes + Large.CurrentBytes; + result.TotalAddrSpace := result.TotalAllocated; +end; + +type + // match both TSmallBlockStatus and TSmallBlockContention + TRes = array[0..2] of cardinal; + // details are allocated on the stack, not the heap + TResArray = array[0..(NumSmallInfoBlock * 2) - 1] of TRes; + +procedure QuickSortRes(var Res: TResArray; L, R, Level: PtrInt); +var + I, J, P: PtrInt; + pivot: cardinal; + tmp: TRes; +begin + if L < R then + repeat + I := L; + J := R; + P := (L + R) shr 1; + repeat + pivot := Res[P, Level]; + while Res[I, Level] > pivot do + inc(I); + while Res[J, Level] < pivot do + dec(J); + if I <= J then + begin + tmp := Res[J]; + Res[J] := Res[I]; + Res[I] := tmp; + if P = I then + P := J + else if P = J then + P := I; + inc(I); + dec(J); + end; + until I > J; + if J - L < R - I then + begin + // use recursion only for smaller range + if L < J then + QuickSortRes(Res, L, J, Level); + L := I; + end + else + begin + if I < R then + QuickSortRes(Res, I, R, Level); + R := J; + end; + until L >= R; +end; + +procedure SetSmallBlockStatus(var res: TResArray; out small, tiny: cardinal); +var + i, a: integer; + p: PSmallBlockType; + d: ^TSmallBlockStatus; +begin + small := 0; + tiny := 0; + d := @res; + p := @SmallBlockInfo; + for i := 1 to NumSmallBlockTypes do + begin + inc(small, ord(p^.GetmemCount <> 0)); + d^.Total := p^.GetmemCount; + d^.Current := p^.GetmemCount - p^.FreememCount; + d^.BlockSize := p^.BlockSize; + inc(d); + inc(p); + end; + for a := 1 to NumTinyBlockArenas do + begin + d := @res; // aggregate counters + for i := 1 to NumTinyBlockTypes do + begin + inc(tiny, ord(p^.GetmemCount <> 0)); + inc(d^.Total, p^.GetmemCount); + inc(d^.Current, p^.GetmemCount - p^.FreememCount); + inc(d); + inc(p); + end; + end; + assert(p = @SmallBlockInfo.GetmemLookup); +end; + +function SortSmallBlockStatus(var res: TResArray; maxcount, orderby: PtrInt; + count, bytes: PPtrUInt): PtrInt; +var + i: PtrInt; +begin + QuickSortRes(res, 0, NumSmallBlockTypes - 1, orderby); + if count <> nil then + begin + count^ := 0; + for i := 0 to NumSmallBlockTypes - 1 do + inc(count^, res[i, orderby]); + end; + if bytes <> nil then + begin + bytes^ := 0; + for i := 0 to NumSmallBlockTypes - 1 do + inc(bytes^, res[i, orderby] * res[i, ord(obBlockSize)]); + end; + result := maxcount; + if result > NumSmallBlockTypes then + result := NumSmallBlockTypes; + while (result > 0) and + (res[result - 1, orderby] = 0) do + dec(result); +end; + +function SetSmallBlockContention(var res: TResArray; maxcount: integer): integer; +var + i: integer; + p: PSmallBlockType; + d: ^TSmallBlockContention; +begin + result := 0; + d := @res; + p := @SmallBlockInfo; + for i := 1 to NumSmallInfoBlock do + begin + if p^.GetmemSleepCount <> 0 then + begin + d^.SleepCount := p^.GetmemSleepCount; + d^.GetmemBlockSize := p^.BlockSize; + d^.FreememBlockSize := 0; + inc(d); + inc(result); + end; + if p^.FreememSleepCount <> 0 then + begin + d^.SleepCount := p^.FreememSleepCount; + d^.GetmemBlockSize := 0; + d^.FreememBlockSize := p^.BlockSize; + inc(d); + inc(result); + end; + inc(p); + end; + if result = 0 then + exit; + QuickSortRes(res, 0, result - 1, 0); + if result > maxcount then + result := maxcount; +end; + +const + K_: array[0..4] of string[1] = ( + 'P', 'T', 'G', 'M', 'K'); + +function K(i: PtrUInt): ShortString; +var + j, n: PtrUInt; + tmp: PShortString; +begin + tmp := nil; + n := 1 shl 50; + for j := 0 to high(K_) do + if i >= n then + begin + i := i div n; + tmp := @K_[j]; + break; + end + else + n := n shr 10; + str(i, result); + if tmp <> nil then + result := result + tmp^; +end; + +function S(i: PtrUInt): ShortString; +begin + str(i, result); +end; + +type + // allow to write into a temp string or the console + TGetHeapStatusWrite = + procedure(const V: array of ShortString; CRLF: boolean = true); + +procedure WriteHeapStatusDetail(const arena: TMMStatusArena; + const name: ShortString; Wr: TGetHeapStatusWrite); +begin + Wr([name, K(arena.CurrentBytes), + 'B/', K(arena.CumulativeBytes), 'B '], {crlf=}false); + {$ifdef FPCMM_DEBUG} + Wr([' peak=', K(arena.PeakBytes), + 'B current=', K(arena.CumulativeAlloc - arena.CumulativeFree), + ' alloc=', K(arena.CumulativeAlloc), + ' free=', K(arena.CumulativeFree)], false); + {$endif FPCMM_DEBUG} + Wr([' sleep=', K(arena.SleepCount)]); +end; + +procedure ComputeHeapStatus(const context: ShortString; smallblockstatuscount, + smallblockcontentioncount: integer; compilationflags: boolean; + Wr: TGetHeapStatusWrite); +var + res: TResArray; // no heap allocation involved + i, n, smallcount: PtrInt; + t, b: PtrUInt; + small, tiny: cardinal; +begin + if context[0] <> #0 then + Wr([context]); + if compilationflags then + Wr([' Flags:' + FPCMM_FLAGS]); + with CurrentHeapStatus do + begin + Wr([' Small: blocks=', K(SmallBlocks), + ' size=', K(SmallBlocksSize), 'B (part of Medium arena)']); + WriteHeapStatusDetail(Medium, ' Medium: ', Wr); + WriteHeapStatusDetail(Large, ' Large: ', Wr); + if SleepCount <> 0 then + Wr([' Total Sleep: count=', K(SleepCount) + {$ifdef FPCMM_SLEEPTSC} , ' rdtsc=', K(SleepCycles) {$endif}]); + smallcount := SmallGetmemSleepCount + SmallFreememSleepCount + {$ifdef FPCMM_LOCKLESSFREE} {$ifdef FPCMM_DEBUG} + + SmallFreememLockLessSpin {$endif} {$endif}; + if smallcount <> 0 then + Wr([' Small Sleep: getmem=', K(SmallGetmemSleepCount), + ' freemem=', K(SmallFreememSleepCount) + {$ifdef FPCMM_LOCKLESSFREE} {$ifdef FPCMM_DEBUG} , + ' locklessspin=', K(SmallFreememLockLessSpin) {$endif} {$endif}]); + end; + if (smallblockcontentioncount > 0) and + (smallcount <> 0) then + begin + n := SetSmallBlockContention(res, smallblockcontentioncount); + for i := 0 to n - 1 do + with TSmallBlockContention(res[i]) do + begin + if GetmemBlockSize <> 0 then + Wr([' getmem(', S(GetmemBlockSize)], {crlf=}false) + else + Wr([' freemem(', S(FreememBlockSize)], false); + Wr([')=' , K(SleepCount)], false); + if (i and 3 = 3) or + (i = n - 1) then + Wr([]); + end; + end; + if smallblockstatuscount > 0 then + begin + SetSmallBlockStatus(res, small, tiny); + n := SortSmallBlockStatus(res, smallblockstatuscount, ord(obTotal), @t, @b) - 1; + Wr([' Small Blocks since beginning: ', K(t), '/', K(b), + 'B (as small=', K(small), '/', S(NumSmallBlockTypes), + ' tiny=', K(tiny), '/', S(NumTinyBlockArenas * NumTinyBlockTypes), ')']); + for i := 0 to n do + with TSmallBlockStatus(res[i]) do + begin + Wr([' ', S(BlockSize), '=', K(Total)], false); + if (i and 7 = 7) or + (i = n) then + Wr([]); + end; + n := SortSmallBlockStatus(res, smallblockstatuscount, ord(obCurrent), @t, @b) - 1; + Wr([' Small Blocks current: ', K(t), '/', K(b), 'B']); + for i := 0 to n do + with TSmallBlockStatus(res[i]) do + begin + Wr([' ', S(BlockSize), '=', K(Current)], false); + if (i and 7 = 7) or + (i = n) then + Wr([]); + end; + end; +end; + +var + WrStrTemp: string; // we don't require thread safety here + WrStrOnSameLine: boolean; + +procedure WrStr(const V: array of ShortString; CRLF: boolean); +var + i: PtrInt; +begin // we don't have format() nor formatutf8() -> this is good enough + for i := 0 to high(V) do + WrStrTemp := WrStrTemp + string(V[i]); // fast enough + if CRLF and + not WrStrOnSameLine then + WrStrTemp := WrStrTemp + #13#10; +end; + +function GetHeapStatus(const context: ShortString; smallblockstatuscount, + smallblockcontentioncount: integer; compilationflags, onsameline: boolean): string; +begin + WrStrOnSameLine := onsameline; + ComputeHeapStatus(context, smallblockstatuscount, smallblockcontentioncount, + compilationflags, WrStr); + result := WrStrTemp; + WrStrTemp := ''; +end; + +procedure WrConsole(const V: array of ShortString; CRLF: boolean); +var + i: PtrInt; +begin // direct write to the console with no memory heap allocation + {$I-} + for i := 0 to high(V) do + write(V[i]); + if CRLF then + writeln; + ioresult; + {$I+} +end; + +procedure WriteHeapStatus(const context: ShortString; smallblockstatuscount, + smallblockcontentioncount: integer; compilationflags: boolean); +begin + ComputeHeapStatus(context, smallblockstatuscount, smallblockcontentioncount, + compilationflags, WrConsole); +end; + +function GetSmallBlockStatus(maxcount: integer; orderby: TSmallBlockOrderBy; + count, bytes: PPtrUInt; small, tiny: PCardinal): TSmallBlockStatusDynArray; +var + res: TResArray; + sm, ti: cardinal; +begin + assert(SizeOf(TRes) = SizeOf(TSmallBlockStatus)); + result := nil; + if maxcount <= 0 then + exit; + SetSmallBlockStatus(res, sm, ti); + if small <> nil then + small^ := sm; + if tiny <> nil then + tiny^ := ti; + maxcount := SortSmallBlockStatus(res, maxcount, ord(orderby), count, bytes); + if maxcount = 0 then + exit; + SetLength(result, maxcount); + Move(res[0], result[0], maxcount * SizeOf(res[0])); +end; + +function GetSmallBlockContention(maxcount: integer): TSmallBlockContentionDynArray; +var + n: integer; + res: TResArray; +begin + result := nil; + if maxcount <= 0 then + exit; + n := SetSmallBlockContention(res, maxcount); + if n = 0 then + exit; + SetLength(result, n); + Move(res[0], result[0], n * SizeOf(res[0])); +end; + +{$endif FPCMM_STANDALONE} + +function CurrentHeapStatus: TMMStatus; +var + i: integer; + small: PtrUInt; + p: PSmallBlockType; +begin + result := HeapStatus; + p := @SmallBlockInfo; + for i := 1 to NumSmallInfoBlock do + begin + inc(result.SmallGetmemSleepCount, p^.GetmemSleepCount); + inc(result.SmallFreememSleepCount, p^.FreememSleepCount); + small := p^.GetmemCount - p^.FreememCount; + if small <> 0 then + begin + inc(result.SmallBlocks, small); + inc(result.SmallBlocksSize, small * p^.BlockSize); + end; + {$ifdef FPCMM_LOCKLESSFREE} + {$ifdef FPCMM_DEBUG} + inc(result.SmallFreememLockLessSpin, p^.BinSpinCount); + {$endif FPCMM_LOCKLESSFREE} + {$endif FPCMM_DEBUG} + inc(p); + end; +end; + + +{ ********* Initialization and Finalization } + +procedure InitializeMediumPool(var Info: TMediumBlockInfo); +var + i: PtrInt; + medium: PMediumFreeBlock; +begin + {$ifndef FPCMM_ASSUMEMULTITHREAD} + Info.IsMultiThreadPtr := @IsMultiThread; + {$endif FPCMM_ASSUMEMULTITHREAD} + Info.PoolsCircularList.PreviousMediumBlockPoolHeader := @Info.PoolsCircularList; + Info.PoolsCircularList.NextMediumBlockPoolHeader := @Info.PoolsCircularList; + for i := 0 to MediumBlockBinCount -1 do + begin + medium := @Info.Bins[i]; + medium.PreviousFreeBlock := medium; + medium.NextFreeBlock := medium; + end; +end; + +procedure InitializeMemoryManager; +var + small: PSmallBlockType; + a, i, min, poolsize, num, perpool, size, start, next: PtrInt; +begin + small := @SmallBlockInfo; + assert(SizeOf(small^) = 1 shl SmallBlockTypePO2); + for a := 0 to NumTinyBlockArenas do + for i := 0 to NumSmallBlockTypes - 1 do + begin + if (i = NumTinyBlockTypes) and + (a > 0) then + break; + size := SmallBlockSizes[i]; + assert(size and 15 = 0); + small^.BlockSize := size; + small^.PreviousPartiallyFreePool := pointer(small); + small^.NextPartiallyFreePool := pointer(small); + small^.MaxSequentialFeedBlockAddress := pointer(0); + small^.NextSequentialFeedBlockAddress := pointer(1); + min := ((size * MinimumSmallBlocksPerPool + + (SmallBlockPoolHeaderSize + MediumBlockGranularity - 1 - MediumBlockSizeOffset)) + and -MediumBlockGranularity) + MediumBlockSizeOffset; + if min < MinimumMediumBlockSize then + min := MinimumMediumBlockSize; + num := (min + (- MinimumMediumBlockSize + + MediumBlockBinsPerGroup * MediumBlockGranularity div 2)) div + (MediumBlockBinsPerGroup * MediumBlockGranularity); + if num > 7 then + num := 7; + small^.AllowedGroupsForBlockPoolBitmap := byte(byte(-1) shl num); + small^.MinimumBlockPoolSize := MinimumMediumBlockSize + + num * (MediumBlockBinsPerGroup * MediumBlockGranularity); + poolsize := ((size * TargetSmallBlocksPerPool + + (SmallBlockPoolHeaderSize + MediumBlockGranularity - 1 - MediumBlockSizeOffset)) + and -MediumBlockGranularity) + MediumBlockSizeOffset; + if poolsize < OptimalSmallBlockPoolSizeLowerLimit then + poolsize := OptimalSmallBlockPoolSizeLowerLimit; + if poolsize > OptimalSmallBlockPoolSizeUpperLimit then + poolsize := OptimalSmallBlockPoolSizeUpperLimit; + perpool := (poolsize - SmallBlockPoolHeaderSize) div size; + small^.OptimalBlockPoolSize := ((perpool * size + + (SmallBlockPoolHeaderSize + MediumBlockGranularity - 1 - MediumBlockSizeOffset)) + and -MediumBlockGranularity) + MediumBlockSizeOffset; + inc(small); + end; + assert(small = @SmallBlockInfo.GetmemLookup); + {$ifndef FPCMM_ASSUMEMULTITHREAD} + SmallBlockInfo.IsMultiThreadPtr := @IsMultiThread; + {$endif FPCMM_ASSUMEMULTITHREAD} + start := 0; + with SmallBlockInfo do + for i := 0 to NumSmallBlockTypes - 1 do + begin + next := PtrUInt(SmallBlockSizes[i]) div SmallBlockGranularity; + while start < next do + begin + GetmemLookup[start] := i; + inc(start); + end; + end; + InitializeMediumPool(MediumBlockInfo); + {$ifdef FPCMM_SMALLNOTWITHMEDIUM} + InitializeMediumPool(SmallMediumBlockInfo); + {$endif FPCMM_SMALLNOTWITHMEDIUM} + LargeBlocksCircularList.PreviousLargeBlockHeader := @LargeBlocksCircularList; + LargeBlocksCircularList.NextLargeBlockHeader := @LargeBlocksCircularList; +end; + +{$I-} + +{$ifdef FPCMM_REPORTMEMORYLEAKS} + +var + MemoryLeakReported: boolean; + +procedure StartReport; +begin + if MemoryLeakReported then + exit; + writeln {$ifndef MSWINDOWS} (#27'[1;31m') {$endif}; // lightred posix console + WriteHeapStatus('WARNING! THIS PROGRAM LEAKS MEMORY!'#13#10'Memory Status:'); + writeln('Leaks Identified:' {$ifndef MSWINDOWS} + #27'[1;37m' {$endif}); + MemoryLeakReported := true; +end; + +{$ifdef FPCMM_REPORTMEMORYLEAKS_EXPERIMENTAL} +function SeemsRealPointer(p: pointer): boolean; +{$ifdef MSWINDOWS} +var + meminfo: TMemInfo; +{$endif MSWINDOWS} +begin + result := false; + if PtrUInt(p) <= 65535 then + exit; + {$ifdef MSWINDOWS} + // VirtualQuery API is slow but better than raising an exception + // see https://stackoverflow.com/a/37547837/458259 + FillChar(meminfo, SizeOf(meminfo), 0); + result := (VirtualQuery(p, @meminfo, SizeOf(meminfo)) = SizeOf(meminfo)) and + (meminfo.RegionSize >= SizeOf(pointer)) and + (meminfo.State = MEM_COMMIT) and + (meminfo.Protect and PAGE_VALID <> 0) and + (meminfo.Protect and PAGE_GUARD = 0); + {$else} + // let the GPF happen silently in the kernel + result := (fpaccess(p, F_OK) <> 0) and + (fpgeterrno <> ESysEFAULT); + {$endif MSWINDOWS} +end; +{$endif FPCMM_REPORTMEMORYLEAKS_EXPERIMENTAL} + +procedure MediumMemoryLeakReport( + var Info: TMediumBlockInfo; p: PMediumBlockPoolHeader); +var + block: PByte; + header, size: PtrUInt; + {$ifdef FPCMM_REPORTMEMORYLEAKS_EXPERIMENTAL} + first, last: PByte; + vmt: PAnsiChar; + exceptcount: integer; + {$endif FPCMM_REPORTMEMORYLEAKS_EXPERIMENTAL} +begin + if (Info.SequentialFeedBytesLeft = 0) or + (PtrUInt(Info.LastSequentiallyFed) < PtrUInt(p)) or + (PtrUInt(Info.LastSequentiallyFed) > PtrUInt(p) + MediumBlockPoolSize) then + block := Pointer(PByte(p) + MediumBlockPoolHeaderSize) + else if Info.SequentialFeedBytesLeft <> + MediumBlockPoolSize - MediumBlockPoolHeaderSize then + block := Info.LastSequentiallyFed + else + exit; + {$ifdef FPCMM_REPORTMEMORYLEAKS_EXPERIMENTAL} + exceptcount := 0; + {$endif FPCMM_REPORTMEMORYLEAKS_EXPERIMENTAL} + repeat + header := PPtrUInt(block - BlockHeaderSize)^; + size := header and DropMediumAndLargeFlagsMask; + if size = 0 then + exit; + if header and IsFreeBlockFlag = 0 then + if header and IsSmallBlockPoolInUseFlag <> 0 then + begin + {$ifdef FPCMM_REPORTMEMORYLEAKS_EXPERIMENTAL} + if PSmallBlockPoolHeader(block).BlocksInUse > 0 then + begin + first := PByte(block) + SmallBlockPoolHeaderSize; + with PSmallBlockPoolHeader(block).BlockType^ do + if (CurrentSequentialFeedPool <> pointer(block)) or + (PtrUInt(NextSequentialFeedBlockAddress) > + PtrUInt(MaxSequentialFeedBlockAddress)) then + last := PByte(block) + (PPtrUInt(PByte(block) - BlockHeaderSize)^ + and DropMediumAndLargeFlagsMask) - BlockSize + else + last := Pointer(PByte(NextSequentialFeedBlockAddress) - 1); + while (first <= last) and + (exceptcount < 64) do + begin + if ((PPtrUInt(first - BlockHeaderSize)^ and IsFreeBlockFlag) = 0) then + begin + vmt := PPointer(first)^; // _FreeMem() ensured vmt=nil/$b10dle55 + if (vmt <> nil) and + {$ifdef FPCMM_REPORTMEMORYLEAKS} + (PtrUInt(vmt) <> REPORTMEMORYLEAK_FREEDHEXSPEAK) and + // FreeMem marked freed blocks with 00000000 BLOODLESS marker + {$endif FPCMM_REPORTMEMORYLEAKS} + SeemsRealPointer(vmt) then + try + // try to access the TObject VMT + if (PPtrInt(vmt + vmtInstanceSize)^ >= sizeof(vmt)) and + (PPtrInt(vmt + vmtInstanceSize)^ <= + PSmallBlockPoolHeader(block).BlockType.BlockSize) and + SeemsRealPointer(PPointer(vmt + vmtClassName)^) then + begin + StartReport; + writeln(' probable ', PShortString(PPointer(vmt + vmtClassName)^)^, + ' leak (', PPtrInt(vmt + vmtInstanceSize)^, '/', + PSmallBlockPoolHeader(block).BlockType.BlockSize, + ' bytes) at $', HexStr(first)); + end; + except + // intercept and ignore any GPF - SeemsRealPointer() + inc(exceptcount); + end; + end; + inc(first, PSmallBlockPoolHeader(block).BlockType.BlockSize); + end; + end; + {$endif FPCMM_REPORTMEMORYLEAKS_EXPERIMENTAL} + end + else + begin + StartReport; + writeln(' medium block leak of ', size, ' bytes (', K(size), 'B)'); + end; + inc(block, size); + until false; +end; + +{$endif FPCMM_REPORTMEMORYLEAKS} + +procedure FreeMediumPool(var Info: TMediumBlockInfo); +var + medium, nextmedium: PMediumBlockPoolHeader; + bin: PMediumFreeBlock; + i: PtrInt; +begin + medium := Info.PoolsCircularList.NextMediumBlockPoolHeader; + while medium <> @Info.PoolsCircularList do + begin + {$ifdef FPCMM_REPORTMEMORYLEAKS} + MediumMemoryLeakReport(Info, medium); + {$endif FPCMM_REPORTMEMORYLEAKS} + nextmedium := medium.NextMediumBlockPoolHeader; + FreeMedium(medium); + medium := nextmedium; + end; + Info.PoolsCircularList.PreviousMediumBlockPoolHeader := @Info.PoolsCircularList; + Info.PoolsCircularList.NextMediumBlockPoolHeader := @Info.PoolsCircularList; + for i := 0 to MediumBlockBinCount - 1 do + begin + bin := @Info.Bins[i]; + bin.PreviousFreeBlock := bin; + bin.NextFreeBlock := bin; + end; + Info.BinGroupBitmap := 0; + Info.SequentialFeedBytesLeft := 0; + for i := 0 to MediumBlockBinGroupCount - 1 do + Info.BinBitmaps[i] := 0; + {$ifdef FPCMM_LOCKLESSFREEMEDIUM} + with Info.LocklessBin do + for i := 0 to Count - 1 do + if Instance[i] <> nil then + _FreeMem(Instance[i]); // release (unlikely) pending instances + {$endif FPCMM_LOCKLESSFREEMEDIUM} +end; + +procedure FreeAllMemory; +var + large, nextlarge: PLargeBlockHeader; + p: PSmallBlockType; + i, size: PtrUInt; + {$ifdef FPCMM_LOCKLESSFREE} + j: PtrInt; + {$endif FPCMM_LOCKLESSFREE} + {$ifdef FPCMM_REPORTMEMORYLEAKS} + leak, leaks: PtrUInt; + {$endif FPCMM_REPORTMEMORYLEAKS} +begin + {$ifdef FPCMM_REPORTMEMORYLEAKS} + leaks := 0; + {$endif FPCMM_REPORTMEMORYLEAKS} + p := @SmallBlockInfo; + for i := 1 to NumSmallInfoBlock do + begin + {$ifdef FPCMM_LOCKLESSFREE} + {$ifdef FPCMM_REPORTMEMORYLEAKS} + if p^.BinCount <> 0 then + writeln('BinCount=', p^.BinCount, ' for small=', p^.BlockSize); + {$endif FPCMM_REPORTMEMORYLEAKS} + for j := 0 to p^.BinCount - 1 do + if p^.BinInstance[j] <> nil then + _FreeMem(p^.BinInstance[j]); // release (unlikely) pending instances + {$endif FPCMM_LOCKLESSFREE} + p^.PreviousPartiallyFreePool := pointer(p); + p^.NextPartiallyFreePool := pointer(p); + p^.NextSequentialFeedBlockAddress := pointer(1); + p^.MaxSequentialFeedBlockAddress := nil; + {$ifdef FPCMM_REPORTMEMORYLEAKS} + leak := p^.GetmemCount - p^.FreememCount; + if leak <> 0 then + begin + StartReport; + inc(leaks, leak); + writeln(' small block leak x', leak, ' of size=', p^.BlockSize, + ' (getmem=', p^.GetmemCount, ' freemem=', p^.FreememCount, ')'); + end; + {$endif FPCMM_REPORTMEMORYLEAKS} + inc(p); + end; + {$ifdef FPCMM_REPORTMEMORYLEAKS} + if leaks <> 0 then + writeln(' Total small block leaks = ', leaks); + {$endif FPCMM_REPORTMEMORYLEAKS} + {$ifdef FPCMM_SMALLNOTWITHMEDIUM} + FreeMediumPool(SmallMediumBlockInfo); + {$endif FPCMM_SMALLNOTWITHMEDIUM} + FreeMediumPool(MediumBlockInfo); + large := LargeBlocksCircularList.NextLargeBlockHeader; + while large <> @LargeBlocksCircularList do + begin + size := large.BlockSizeAndFlags and DropMediumAndLargeFlagsMask; + {$ifdef FPCMM_REPORTMEMORYLEAKS} + StartReport; + writeln(' large block leak of ', size, ' bytes (', K(size), 'B)'); + {$endif FPCMM_REPORTMEMORYLEAKS} + nextlarge := large.NextLargeBlockHeader; + FreeLarge(large, size); + large := nextlarge; + end; + LargeBlocksCircularList.PreviousLargeBlockHeader := @LargeBlocksCircularList; + LargeBlocksCircularList.NextLargeBlockHeader := @LargeBlocksCircularList; +end; + +{$I+} + +{$ifndef FPCMM_STANDALONE} + +const + NewMM: TMemoryManager = ( + NeedLock: false; + GetMem: @_Getmem; + FreeMem: @_FreeMem; + FreememSize: @_FreememSize; + AllocMem: @_AllocMem; + ReallocMem: @_ReAllocMem; + MemSize: @_MemSize; + InitThread: nil; + DoneThread: nil; + RelocateHeap: nil; + GetHeapStatus: @_GetHeapStatus; + GetFPCHeapStatus: @_GetFPCHeapStatus); + +var + OldMM: TMemoryManager; + +initialization + InitializeMemoryManager; + GetMemoryManager(OldMM); + SetMemoryManager(NewMM); + +finalization + SetMemoryManager(OldMM); + FreeAllMemory; + +{$endif FPCMM_STANDALONE} + +{$endif FPCX64MM} + +end. + diff --git a/src/core/upcdaemon.pas b/src/core/upcdaemon.pas index 9f897922c..f71b28703 100644 --- a/src/core/upcdaemon.pas +++ b/src/core/upcdaemon.pas @@ -1,6 +1,6 @@ unit upcdaemon; -{ Copyright (c) 2016 by Albert Molina +{ Copyright (c) 2016-2020 by Albert Molina Distributed under the MIT software license, see the accompanying file LICENSE or visit http://www.opensource.org/licenses/mit-license.php. @@ -26,6 +26,10 @@ interface Classes, SysUtils, daemonapp, SyncObjs, UOpenSSL, UCrypto, UNode, UFileStorage, UFolderHelper, UWallet, UConst, ULog, UNetProtocol, IniFiles, UBaseTypes, + {$IFDEF USE_ABSTRACTMEM_BLOCKCHAIN_STORAGE} + UAbstractMemBlockchainStorage, + {$ENDIF} + {$IF Defined(FPC) and Defined(WINDOWS)}windows,jwawinsvc,crt,{$ENDIF} UThread, URPC, UPoolMining, UAccounts, UPCDataTypes; Const @@ -43,20 +47,33 @@ interface CT_INI_IDENT_MINER_MAX_CONNECTIONS = 'RPC_SERVERMINER_MAX_CONNECTIONS'; CT_INI_IDENT_MINER_MAX_OPERATIONS_PER_BLOCK = 'RPC_SERVERMINER_MAX_OPERATIONS_PER_BLOCK'; CT_INI_IDENT_MINER_MAX_ZERO_FEE_OPERATIONS = 'RPC_SERVERMINER_MAX_ZERO_FEE_OPERATIONS'; - CT_INI_IDENT_LOWMEMORY = 'LOWMEMORY'; + CT_INI_IDENT_LOWMEMORY = 'LOWMEMORY'; // TODO: Not used currently... CT_INI_IDENT_MINPENDINGBLOCKSTODOWNLOADCHECKPOINT = 'MINPENDINGBLOCKSTODOWNLOADCHECKPOINT'; CT_INI_IDENT_PEERCACHE = 'PEERCACHE'; + CT_INI_IDENT_DATA_FOLDER = 'DATAFOLDER'; + CT_INI_IDENT_NODE_MAX_PAYTOKEY_MOLINAS = 'MAX_PAYTOKEY_MOLINAS'; + {$IFDEF USE_ABSTRACTMEM} + CT_INI_IDENT_ABSTRACTMEM_MAX_CACHE_MB = 'ABSTRACTMEM_MAX_CACHE_MB'; + CT_INI_IDENT_ABSTRACTMEM_USE_CACHE_ON_LISTS = 'ABSTRACTMEM_USE_CACHE_ON_LISTS'; + CT_INI_IDENT_ABSTRACTMEM_CACHE_MAX_ACCOUNTS = 'ABSTRACTMEM_CACHE_MAX_ACCOUNTS'; + CT_INI_IDENT_ABSTRACTMEM_CACHE_MAX_PUBKEYS = 'ABSTRACTMEM_CACHE_MAX_PUBKEYS'; + {$ENDIF} Type { TPCDaemonThread } TPCDaemonThread = Class(TPCThread) private + FRPC : TRPCServer; FIniFile : TIniFile; + FPeerCache : TIniFile; FMaxBlockToRead: Int64; FLastNodesCacheUpdatedTS : TTickCount; + FLogsDate : TDate; + function GetDataFolder : String; procedure OnNetDataReceivedHelloMessage(Sender : TObject); procedure OnInitSafeboxProgressNotify(sender : TObject; const message : String; curPos, totalCount : Int64); + procedure UpdateLogFilenames; protected Procedure BCExecute; override; public @@ -70,7 +87,6 @@ interface TPCDaemon = Class(TCustomDaemon) Private FThread : TPCDaemonThread; - Procedure ThreadStopped (Sender : TObject); public Function Start : Boolean; override; Function Stop : Boolean; override; @@ -87,24 +103,35 @@ interface TPCDaemonMapper = Class(TCustomDaemonMapper) private FLog : TLog; - procedure OnPascalCoinInThreadLog(logtype : TLogType; Time : TDateTime; AThreadID : TThreadID; Const sender, logtext : String); protected Procedure DoOnCreate; override; Procedure DoOnDestroy; override; + Procedure DoOnRun; override; public end; implementation -{$IFDEF TESTNET} uses UPCTNetDataExtraMessages; -{$ENDIF} Var _FLog : TLog; { TPCDaemonThread } +function TPCDaemonThread.GetDataFolder: String; +Var LIniDataFolder : String; +begin + LIniDataFolder := FIniFile.ReadString(CT_INI_SECTION_GLOBAL,CT_INI_IDENT_DATA_FOLDER,'').Trim; + if (LIniDataFolder.Length=0) then begin + LIniDataFolder:=TNode.GetPascalCoinDataFolder; + end else begin + TNode.SetPascalCoinDataFolder(LIniDataFolder); + end; + ForceDirectories(LIniDataFolder); + Result := LIniDataFolder; +end; + procedure TPCDaemonThread.OnNetDataReceivedHelloMessage(Sender: TObject); Var LNsarr : TNodeServerAddressArray; i : Integer; @@ -119,7 +146,7 @@ procedure TPCDaemonThread.OnNetDataReceivedHelloMessage(Sender: TObject); if (s<>'') then s := s+';'; s := s + LNsarr[i].ip+':'+IntToStr( LNsarr[i].port ); end; - FIniFile.WriteString(CT_INI_SECTION_GLOBAL,CT_INI_IDENT_PEERCACHE,s); + FPeerCache.WriteString(CT_INI_SECTION_GLOBAL,CT_INI_IDENT_PEERCACHE,s); TNode.Node.PeerCache := s; end; @@ -129,11 +156,25 @@ procedure TPCDaemonThread.OnInitSafeboxProgressNotify(sender: TObject; TLog.NewLog(ltdebug,ClassName,Format('Progress (%d/%d): %s',[curPos,totalCount,message])); end; +procedure TPCDaemonThread.UpdateLogFilenames; +var LDateStr : String; +begin + LDateStr := FormatDateTime('yyyy-mm-dd',FLogsDate); + // Need to update filenames: + if (Assigned(_FLOG)) and (FIniFile.ReadBool(CT_INI_SECTION_GLOBAL,CT_INI_IDENT_SAVELOGS,true)) then begin + // Update LOG + _FLog.FileName:=GetDataFolder+PathDelim+'pascalcoin_'+LDateStr+'.log'; + end; + // + If (Assigned(FRPC)) and (FIniFile.ReadBool(CT_INI_SECTION_GLOBAL,CT_INI_IDENT_RPC_SAVELOGS,true)) then begin + FRPC.LogFileName:= GetDataFolder+PathDelim+'pascalcoin_rpc_'+LDateStr+'.log'; + end; +end; + procedure TPCDaemonThread.BCExecute; var FNode : TNode; FWalletKeys : TWalletKeysExt; - FRPC : TRPCServer; FMinerServer : TPoolMiningServer; Procedure InitRPCServer; @@ -154,12 +195,12 @@ procedure TPCDaemonThread.BCExecute; TLog.NewLog(ltInfo,ClassName,'RPC server is active on port '+IntToStr(port)); If FIniFile.ReadBool(CT_INI_SECTION_GLOBAL,CT_INI_IDENT_RPC_SAVELOGS,true) then begin FIniFile.WriteBool(CT_INI_SECTION_GLOBAL,CT_INI_IDENT_RPC_SAVELOGS,true); - FRPC.LogFileName:= TNode.GetPascalCoinDataFolder+PathDelim+'pascalcoin_rpc.log'; TLog.NewLog(ltInfo,ClassName,'Activating RPC logs on file '+FRPC.LogFileName); end else begin FIniFile.WriteBool(CT_INI_SECTION_GLOBAL,CT_INI_IDENT_RPC_SAVELOGS,false); TLog.NewLog(ltInfo,ClassName,'RPC logs not enabled on IniFile value '+CT_INI_IDENT_RPC_SAVELOGS+'=0'); end; + UpdateLogFilenames; end; Procedure InitRPCMinerServer; @@ -224,6 +265,19 @@ procedure TPCDaemonThread.BCExecute; end; end; + procedure CheckUpdateLogFilenames; + begin + if (Not SameStr( FormatDateTime('yyyymmdd',FLogsDate) , FormatDateTime('yyyymmdd',Now()) )) then begin + FLogsDate := Now(); + UpdateLogFilenames + end; + end; + + {$IFDEF USE_ABSTRACTMEM} + var LMaxMemMb : Integer; + LUseCacheOnMemLists : Boolean; + LCacheMaxAccounts, LCacheMaxPubKeys : Integer; + {$ENDIF} begin FMInerServer := Nil; TLog.NewLog(ltinfo,Classname,'START PascalCoin Server'); @@ -233,42 +287,60 @@ procedure TPCDaemonThread.BCExecute; // Load Node // Check OpenSSL dll if Not LoadSSLCrypt then begin - WriteLn('Cannot load '+SSL_C_LIB); - WriteLn('To use this software make sure this file is available on you system or reinstall the application'); raise Exception.Create('Cannot load '+SSL_C_LIB+#10+'To use this software make sure this file is available on you system or reinstall the application'); end; TCrypto.InitCrypto; - FWalletKeys.WalletFileName := TNode.GetPascalCoinDataFolder+PathDelim+'WalletKeys.dat'; + FWalletKeys.WalletFileName := GetDataFolder+PathDelim+'WalletKeys.dat'; // Creating Node: FNode := TNode.Node; - {$IFDEF TESTNET} - TPCTNetDataExtraMessages.InitNetDataExtraMessages(FNode,TNetData.NetData,FWalletKeys); + {$IFDEF USE_ABSTRACTMEM} + LMaxMemMb := FIniFile.ReadInteger(CT_INI_SECTION_GLOBAL,CT_INI_IDENT_ABSTRACTMEM_MAX_CACHE_MB,100); + LUseCacheOnMemLists:= FIniFile.ReadBool(CT_INI_SECTION_GLOBAL,CT_INI_IDENT_ABSTRACTMEM_USE_CACHE_ON_LISTS,True); + LCacheMaxAccounts := FIniFile.ReadInteger(CT_INI_SECTION_GLOBAL,CT_INI_IDENT_ABSTRACTMEM_CACHE_MAX_ACCOUNTS,10000); + LCacheMaxPubKeys := FIniFile.ReadInteger(CT_INI_SECTION_GLOBAL,CT_INI_IDENT_ABSTRACTMEM_CACHE_MAX_PUBKEYS,5000); + + TLog.NewLog(ltinfo,ClassName,Format('Init abstract mem library to %d mb %d accounts and %d Pubkeys and use cache lists: %s',[LMaxMemMb,LCacheMaxAccounts,LCacheMaxPubKeys,LUseCacheOnMemLists.ToString])); + FNode.Bank.SafeBox.PCAbstractMem.MaxMemUsage := LMaxMemMb * 1024 * 1024; + FNode.Bank.SafeBox.PCAbstractMem.UseCacheOnAbstractMemLists := LUseCacheOnMemLists; + FNode.Bank.SafeBox.PCAbstractMem.MaxAccountsCache := LCacheMaxAccounts; + FNode.Bank.SafeBox.PCAbstractMem.MaxAccountKeysCache := LCacheMaxPubKeys; {$ENDIF} // RPC Server InitRPCServer; Try // Check Database + {$IFDEF USE_ABSTRACTMEM_BLOCKCHAIN_STORAGE} + FNode.Bank.StorageClass := TAbstractMemBlockchainStorageSecondary; + {$ELSE} FNode.Bank.StorageClass := TFileStorage; - TFileStorage(FNode.Bank.Storage).DatabaseFolder := TNode.GetPascalCoinDataFolder+PathDelim+'Data'; - TFileStorage(FNode.Bank.Storage).LowMemoryUsage := FIniFile.ReadBool(CT_INI_SECTION_GLOBAL,CT_INI_IDENT_LOWMEMORY,False); + {$ENDIF} // By default daemon will not download checkpoint except if specified on INI file TNetData.NetData.MinFutureBlocksToDownloadNewSafebox := FIniFile.ReadInteger(CT_INI_SECTION_GLOBAL,CT_INI_IDENT_MINPENDINGBLOCKSTODOWNLOADCHECKPOINT,0); TNetData.NetData.OnReceivedHelloMessage:=@OnNetDataReceivedHelloMessage; - FNode.PeerCache:= FIniFile.ReadString(CT_INI_SECTION_GLOBAL,CT_INI_IDENT_PEERCACHE,''); + if Assigned(FPeerCache) then begin + FNode.PeerCache:= FPeerCache.ReadString(CT_INI_SECTION_GLOBAL,CT_INI_IDENT_PEERCACHE,''); + end; // Reading database FNode.InitSafeboxAndOperations(MaxBlockToRead,@OnInitSafeboxProgressNotify); FWalletKeys.SafeBox := FNode.Node.Bank.SafeBox; FNode.Node.NetServer.Port:=FIniFile.ReadInteger(CT_INI_SECTION_GLOBAL,CT_INI_IDENT_NODE_PORT,CT_NetServer_Port); FNode.Node.NetServer.MaxConnections:=FIniFile.ReadInteger(CT_INI_SECTION_GLOBAL,CT_INI_IDENT_NODE_MAX_CONNECTIONS,CT_MaxClientsConnected); + FNode.Node.MaxPayToKeyPurchasePrice:=FIniFile.ReadInt64(CT_INI_SECTION_GLOBAL,CT_INI_IDENT_NODE_MAX_PAYTOKEY_MOLINAS,CT_DEFAULT_PAY_TO_KEY_MAX_MOLINAS); FNode.Node.AutoDiscoverNodes(CT_Discover_IPs); FNode.Node.NetServer.Active := true; // RPC Miner Server InitRPCMinerServer; Try + TPCTNetDataExtraMessages.InitNetDataExtraMessages(FNode,TNetData.NetData,FWalletKeys); Repeat - Sleep(100); - Until Terminated; + Sleep(500); + CheckUpdateLogFilenames; + Until (Terminated) or (Application.Terminated); + + FNode.NetServer.Active := false; + TNetData.NetData.NetConnectionsActive:=false; + finally FreeAndNil(FMinerServer); end; @@ -291,21 +363,33 @@ procedure TPCDaemonThread.BCExecute; constructor TPCDaemonThread.Create; begin inherited Create(True); + FRPC := Nil; + FLogsDate := Now(); FLastNodesCacheUpdatedTS := TPlatform.GetTickCount; FIniFile := TIniFile.Create(ExtractFileDir(Application.ExeName)+PathDelim+'pascalcoin_daemon.ini'); If FIniFile.ReadBool(CT_INI_SECTION_GLOBAL,CT_INI_IDENT_SAVELOGS,true) then begin _FLog.SaveTypes:=CT_TLogTypes_ALL; - _FLog.FileName:=TNode.GetPascalCoinDataFolder+PathDelim+'pascalcoin_'+FormatDateTime('yyyymmddhhnn',Now)+'.log'; FIniFile.WriteBool(CT_INI_SECTION_GLOBAL,CT_INI_IDENT_SAVELOGS,true); + UpdateLogFilenames; end else begin FIniFile.WriteBool(CT_INI_SECTION_GLOBAL,CT_INI_IDENT_SAVELOGS,false); end; + Try + FPeerCache := TIniFile.Create(GetDataFolder+PathDelim+'peers_cache.ini'); + Except + on E:Exception do begin + FPeerCache := Nil; + TLog.NewLog(lterror,ClassName,'Peercache file error '+E.ClassName+':'+E.Message); + end; + end; FMaxBlockToRead:=$FFFFFFFF; TLog.NewLog(ltinfo,ClassName,'Create'); end; destructor TPCDaemonThread.Destroy; begin + FreeAndNil(FRPC); + FreeAndNil(FPeerCache); FreeAndNil(FIniFile); inherited Destroy; end; @@ -313,30 +397,26 @@ destructor TPCDaemonThread.Destroy; { TPCDaemon } -procedure TPCDaemon.ThreadStopped(Sender: TObject); -begin - FreeAndNil(FThread); -end; - function TPCDaemon.Start: Boolean; begin Result:=inherited Start; TLog.NewLog(ltinfo,ClassName,'Daemon Start '+BoolToStr(Result)); FThread:=TPCDaemonThread.Create; - FThread.OnTerminate:=@ThreadStopped; - FThread.FreeOnTerminate:=False; + FThread.FreeOnTerminate:=True; if (Application.HasOption('b','block')) then begin FThread.MaxBlockToRead:=StrToInt64Def(Application.GetOptionValue('b','block'),$FFFFFFFF); TLog.NewLog(ltinfo,ClassName,'Max block to read: '+IntToStr(FThread.MaxBlockToRead)); end; - FThread.Resume; + FThread.Start; end; function TPCDaemon.Stop: Boolean; begin Result:=inherited Stop; - TLog.NewLog(ltinfo,ClassName,'Daemon Stop: '+BoolToStr(Result)); + TLog.NewLog(ltinfo,ClassName,'Daemon Stop Start'); FThread.Terminate; + FThread.WaitFor; + TLog.NewLog(ltinfo,ClassName,'Daemon Stop Finished'); end; function TPCDaemon.Pause: Boolean; @@ -362,8 +442,10 @@ function TPCDaemon.Execute: Boolean; function TPCDaemon.ShutDown: Boolean; begin Result:=inherited ShutDown; - TLog.NewLog(ltinfo,ClassName,'Daemon Shutdown: '+BoolToStr(Result)); + TLog.NewLog(ltinfo,ClassName,'Daemon Shutdown Start'); FThread.Terminate; + FThread.WaitFor; + TLog.NewLog(ltinfo,ClassName,'Daemon Shutdown Finished'); end; function TPCDaemon.Install: Boolean; @@ -380,40 +462,62 @@ function TPCDaemon.UnInstall: boolean; { TPCDaemonMapper } -procedure TPCDaemonMapper.OnPascalCoinInThreadLog(logtype: TLogType; - Time: TDateTime; AThreadID: TThreadID; const sender, logtext: String); -Var s : AnsiString; -begin -// If Not SameText(sender,TPCDaemonThread.ClassName) then exit; - If logtype in [lterror,ltinfo] then begin - if AThreadID=MainThreadID then s := ' MAIN:' else s:=' TID:'; - WriteLn(formatDateTime('dd/mm/yyyy hh:nn:ss.zzz',Time)+s+IntToHex(PtrInt(AThreadID),8)+' ['+CT_LogType[Logtype]+'] <'+sender+'> '+logtext); - end; -end; - procedure TPCDaemonMapper.DoOnCreate; Var D : TDaemonDef; begin inherited DoOnCreate; - WriteLn(''); - WriteLn(formatDateTime('dd/mm/yyyy hh:nn:ss.zzz',now)+' Starting PascalCoin server'); FLog := TLog.Create(Nil); - FLog.OnInThreadNewLog:=@OnPascalCoinInThreadLog; _FLog := FLog; D:=DaemonDefs.Add as TDaemonDef; - D.DisplayName:='Pascal Coin Daemon'; + D.DisplayName:='PascalCoin Daemon'; D.Name:='PascalCoinDaemon'; D.DaemonClassName:='TPCDaemon'; + D.Options:=[doAllowStop]; D.WinBindings.ServiceType:=stWin32; end; procedure TPCDaemonMapper.DoOnDestroy; begin + inherited DoOnDestroy; If Assigned(FLog) then begin + _FLog := Nil; FLog.OnInThreadNewLog:=Nil; FreeAndNil(FLog); end; - inherited DoOnDestroy; +end; + +procedure TPCDaemonMapper.DoOnRun; +{$IF Defined(FPC) and Defined(WINDOWS)} +var LDT : TPCDaemonThread; +{$ENDIF} +begin + inherited DoOnRun; + {$IF Defined(FPC) and Defined(WINDOWS)} + // We are running -r command on windows + if Application.HasOption('d','debug') then begin + LDT:=TPCDaemonThread.Create; + LDT.FreeOnTerminate:=True; + if (Application.HasOption('b','block')) then begin + LDT.MaxBlockToRead:=StrToInt64Def(Application.GetOptionValue('b','block'),$FFFFFFFF); + TLog.NewLog(ltinfo,ClassName,'Max block to read: '+IntToStr(LDT.MaxBlockToRead)); + end; + LDT.Start; + repeat + CheckSynchronize(10); + Sleep(1); + + if Keypressed then begin + if (ReadKey in ['q','Q']) then begin + LDT.Terminate; + end; + end; + + until LDT.Terminated; + LDT.Terminate; + LDT.WaitFor; + Application.Terminate; + end; + {$ENDIF} end; end. diff --git a/src/default.po b/src/default.po new file mode 100644 index 000000000..b91a092d6 --- /dev/null +++ b/src/default.po @@ -0,0 +1,4884 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2020-03-30 19:19\n" +"PO-Revision-Date: 2020-03-30 19:19\n" +"Last-Translator: Somebody \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: dxgettext 1.2.2\n" + +#. FRMAbout..Caption +#: gui-classic/UFRMAbout.dfm:7 +msgid "About..." +msgstr "" + +#. FRMAbout..Font.Name +#: gui-classic/UFRMAbout.dfm:14 +#. FRMAbout..Label1..Font.Name +#: gui-classic/UFRMAbout.dfm:130 +#. FRMAbout..lblBuild..Font.Name +#: gui-classic/UFRMAbout.dfm:143 +#. FRMAbout..lblProtocolVersion..Font.Name +#: gui-classic/UFRMAbout.dfm:156 +#. FRMAbout..Label3..Font.Name +#: gui-classic/UFRMAbout.dfm:176 +#. FRMAbout..Label4..Font.Name +#: gui-classic/UFRMAbout.dfm:190 +#. FRMAbout..Label5..Font.Name +#: gui-classic/UFRMAbout.dfm:205 +#. FRMAccountSelect..Font.Name +#: gui-classic/UFRMAccountSelect.dfm:12 +#. FRMDiagnosticTool..Font.Name +#: gui-classic/UFRMDiagnosticTool.dfm:11 +#. FRMHashLock..Font.Name +#: gui-classic/UFRMHashLock.dfm:12 +#. FRMHashLock..lblError..Font.Name +#: gui-classic/UFRMHashLock.dfm:34 +#. FRMHashLock..GroupBox2..meHashLockData..Font.Name +#: gui-classic/UFRMHashLock.dfm:117 +#. FRMMemoText..Font.Name +#: gui-classic/UFRMMemoText.dfm:12 +#. FRMMemoText..Memo..Font.Name +#: gui-classic/UFRMMemoText.dfm:50 +#. FRMNewPrivateKeyType..Font.Name +#: gui-classic/UFRMNewPrivateKeyType.dfm:13 +#. FRMNodesIp..Font.Name +#: gui-classic/UFRMNodesIp.dfm:13 +#. FRMOperation..Font.Name +#: gui-classic/UFRMOperation.dfm:13 +#. FRMOperation..lblAccountBalance..Font.Name +#: gui-classic/UFRMOperation.dfm:40 +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..lblEncryptionErrors..Font.Name +#: gui-classic/UFRMOperation.dfm:196 +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..memoPayload..Font.Name +#: gui-classic/UFRMOperation.dfm:259 +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsTransaction..lblTransactionErrors..Font.Name +#: gui-classic/UFRMOperation.dfm:332 +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..lblChangeKeyErrors..Font.Name +#: gui-classic/UFRMOperation.dfm:410 +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..lblNewOwnerErrors..Font.Name +#: gui-classic/UFRMOperation.dfm:427 +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblListAccountErrors..Font.Name +#: gui-classic/UFRMOperation.dfm:539 +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsDelistAccount..lblDelistErrors..Font.Name +#: gui-classic/UFRMOperation.dfm:783 +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..lblBuyAccountErrors..Font.Name +#: gui-classic/UFRMOperation.dfm:825 +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..Label2..Font.Name +#: gui-classic/UFRMOperation.dfm:851 +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..lblChangeInfoErrors..Font.Name +#: gui-classic/UFRMOperation.dfm:978 +#. FRMOperation..PageControlLocked..tsGlobalError..lblGlobalErrors..Font.Name +#: gui-classic/UFRMOperation.dfm:1065 +#. FRMOperation..PageControlLocked..tsGlobalError..bbPassword..Font.Name +#: gui-classic/UFRMOperation.dfm:1080 +#. FRMOperation..memoAccounts..Font.Name +#: gui-classic/UFRMOperation.dfm:1149 +#. FRMOperation..ebSenderAccount..Font.Name +#: gui-classic/UFRMOperation.dfm:1167 +#. FRMOperationsExplorer..Font.Name +#: gui-classic/UFRMOperationsExplorer.dfm:12 +#. FRMPascalCoinWalletConfig..Font.Name +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:13 +#. FRMPascalCoinWalletConfig..Label4..Font.Name +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:66 +#. FRMPascalCoinWalletConfig..Label7..Font.Name +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:110 +#. FRMPascalCoinWalletConfig..bbUpdatePassword..Font.Name +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:200 +#. FRMPayloadDecoder..Font.Name +#: gui-classic/UFRMPayloadDecoder.dfm:14 +#. FRMPayloadDecoder..lblBlock..Font.Name +#: gui-classic/UFRMPayloadDecoder.dfm:37 +#. FRMPayloadDecoder..lblDateTime..Font.Name +#: gui-classic/UFRMPayloadDecoder.dfm:50 +#. FRMPayloadDecoder..lblOperationTxt..Font.Name +#: gui-classic/UFRMPayloadDecoder.dfm:78 +#. FRMPayloadDecoder..lblAmount..Font.Name +#: gui-classic/UFRMPayloadDecoder.dfm:99 +#. FRMPayloadDecoder..lblFee..Font.Name +#: gui-classic/UFRMPayloadDecoder.dfm:119 +#. FRMPayloadDecoder..lblSender..Font.Name +#: gui-classic/UFRMPayloadDecoder.dfm:146 +#. FRMPayloadDecoder..lblReceiver..Font.Name +#: gui-classic/UFRMPayloadDecoder.dfm:166 +#. FRMPayloadDecoder..lblReceiverInfo..Font.Name +#: gui-classic/UFRMPayloadDecoder.dfm:179 +#. FRMPayloadDecoder..PageControl..tsDecoded..lblDecodedMethod..Font.Name +#: gui-classic/UFRMPayloadDecoder.dfm:214 +#. FRMPayloadDecoder..PageControl..tsDecoded..memoDecoded..Font.Name +#: gui-classic/UFRMPayloadDecoder.dfm:234 +#. FRMPayloadDecoder..PageControl..tsDecoded..memoOriginalPayloadInHexa..Font.Name +#: gui-classic/UFRMPayloadDecoder.dfm:253 +#. FRMPayloadDecoder..ebOphash..Font.Name +#: gui-classic/UFRMPayloadDecoder.dfm:416 +#. FRMDiagnosticTool..Font.Name +#: gui-classic/UFRMRandomHashUtil.dfm:11 +#. FRMRandomOperations..Font.Name +#: gui-classic/UFRMRandomOperations.dfm:11 +#. FRMRandomOperations..pnlTop..lblTopCaption..Font.Name +#: gui-classic/UFRMRandomOperations.dfm:44 +#. FRMRPCCalls..Font.Name +#: gui-classic/UFRMRPCCalls.dfm:12 +#. FRMRPCCalls..pnlTop..lblTopCaption..Font.Name +#: gui-classic/UFRMRPCCalls.dfm:50 +#. FRMSaleAccounts..Font.Name +#: gui-classic/UFRMSaleAccounts.dfm:12 +#. FRMSaleAccounts..lblAccountBalance..Font.Name +#: gui-classic/UFRMSaleAccounts.dfm:57 +#. FRMSaleAccounts..memoAccounts..Font.Name +#: gui-classic/UFRMSaleAccounts.dfm:84 +#. FRMSaleAccounts..ebSenderAccount..Font.Name +#: gui-classic/UFRMSaleAccounts.dfm:103 +#. FRMWallet..Font.Name +#: gui-classic/UFRMWallet.dfm:13 +#. FRMWallet..pnlTop..lblTimeAverageAux..Font.Name +#: gui-classic/UFRMWallet.dfm:284 +#. FRMWallet..pnlTop..Label16..Font.Name +#: gui-classic/UFRMWallet.dfm:299 +#. FRMWallet..pnlTop..lblBlocksFound..Font.Name +#: gui-classic/UFRMWallet.dfm:315 +#. FRMWallet..pnlTop..lblReceivedMessages..Font.Name +#: gui-classic/UFRMWallet.dfm:333 +#. FRMWallet..pnlTop..lblBuild..Font.Name +#: gui-classic/UFRMWallet.dfm:349 +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsTop..Font.Name +#: gui-classic/UFRMWallet.dfm:658 +#. FRMWallet..PageControl..tsPendingOperations..pnlPendingOperations..Label10..Font.Name +#: gui-classic/UFRMWallet.dfm:870 +#. FRMWallet..PageControl..tsMessages..Label14..Font.Name +#: gui-classic/UFRMWallet.dfm:1183 +#. FRMWallet..PageControl..tsMessages..memoMessages..Font.Name +#: gui-classic/UFRMWallet.dfm:1216 +#. FRMWalletKeys..Font.Name +#: gui-classic/UFRMWalletKeys.dfm:13 +#. FRMWalletKeys..lblKeysEncrypted..Font.Name +#: gui-classic/UFRMWalletKeys.dfm:66 +#. FRMWalletKeys..memoPrivateKey..Font.Name +#: gui-classic/UFRMWalletKeys.dfm:155 +#. FRMWalletKeys..bbUpdatePassword..Font.Name +#: gui-classic/UFRMWalletKeys.dfm:504 +#. FRMDiagnosticTool..Font.Name +#: lib/i386-win32/UFRMDiagnosticTool.dfm:11 +msgid "Tahoma" +msgstr "" + +#. FRMAbout..Label1..Caption +#: gui-classic/UFRMAbout.dfm:126 +#. FRMWallet..Caption +#: gui-classic/UFRMWallet.dfm:4 +msgid "Pascal full node Wallet (Classic GUI)" +msgstr "" + +#. FRMAbout..lblBuild..Caption +#: gui-classic/UFRMAbout.dfm:139 +msgid "Build:" +msgstr "" + +#. FRMAbout..lblProtocolVersion..Caption +#: gui-classic/UFRMAbout.dfm:152 +msgid "Protocol:" +msgstr "" + +#. FRMAbout..Label2..Caption +#: gui-classic/UFRMAbout.dfm:165 +msgid "Source Code:" +msgstr "" + +#. FRMAbout..Label3..Caption +#: gui-classic/UFRMAbout.dfm:172 +msgid "Check For New Versions:" +msgstr "" + +#. FRMAbout..Label4..Caption +#: gui-classic/UFRMAbout.dfm:186 +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:252 +msgid "https://github.com/PascalCoin/PascalCoin" +msgstr "" + +#. FRMAbout..Label5..Caption +#: gui-classic/UFRMAbout.dfm:201 +msgid "https://sourceforge.net/projects/pascalcoin" +msgstr "" + +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:220 +msgid "Copyright (c) 2016 - 2019 PascalCoin " +"developers" +msgstr "" + +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:221 +msgid "Based on Albert Molina original source " +"code" +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:225 +msgid "Pascal (aka Pascal Coin) is P2P cryptocurrency without the need for " +"historical " +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:228 +msgid "operations. This software comprises a node within the Pascal " +"network." +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:232 +msgid "Distributed under the MIT software license, see the accompanying file " +"LICENSE or " +msgstr "" + +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:233 +msgid "visit http://www.opensource.org/licenses/mit-license.php." +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:237 +msgid "THIS IS EXPERIMENTAL SOFTWARE. Use it for educational purposes " +"only." +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:241 +msgid "This product includes software developed by the OpenSSL Project and " +"Denis " +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:244 +msgid "Grinyuk (https://github.com/Arvur/OpenSSL-Delphi), some cryptographic " +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:247 +msgid "functions inspirated in code written by Ladar Levison and Marco " +"Ferrante, and " +msgstr "" + +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:248 +msgid "Synapse Socket code copyright of Lukas " +"Gebauer." +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:251 +msgid "Original source code is written in Pascal Language and is available " +"at " +msgstr "" + +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:254 +msgid "If you like it, consider a donation using " +"BitCoin:" +msgstr "" + +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:255 +msgid "16K3HCZRhFUtM8GdWRcfKeaa6KsuyxZaYk" +msgstr "" + +#. FRMAbout..bbClose..Caption +#: gui-classic/UFRMAbout.dfm:266 +#. FRMPayloadDecoder..bbClose..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:353 +#. FRMWallet..MainMenu..miProject..MiClose..Caption +#: gui-classic/UFRMWallet.dfm:1273 +msgid "Close" +msgstr "" + +#. FRMAccountSelect..Caption +#: gui-classic/UFRMAccountSelect.dfm:5 +msgid "Accounts" +msgstr "" + +#. FRMAccountSelect..pnlAccountsTop..cbOnlyForSale..Caption +#: gui-classic/UFRMAccountSelect.dfm:33 +msgid "Only for sale or swap" +msgstr "" + +#. FRMAccountSelect..pnlAccountsTop..bbSearch..Caption +#: gui-classic/UFRMAccountSelect.dfm:41 +msgid "Search" +msgstr "" + +#. FRMAccountSelect..pnlAccountsTop..cbOnlyForPrivateSaleToMe..Caption +#: gui-classic/UFRMAccountSelect.dfm:107 +msgid "Only for private sale to me" +msgstr "" + +#. FRMAccountSelect..pnlAccountsTop..cbAccountsBalance..Caption +#: gui-classic/UFRMAccountSelect.dfm:115 +msgid "Accounts Balance" +msgstr "" + +#. FRMAccountSelect..pnlAccountsTop..cbMyAccounts..Caption +#: gui-classic/UFRMAccountSelect.dfm:123 +msgid "My Accounts" +msgstr "" + +#. FRMAccountSelect..pnlAccountsTop..cbOnlyForPublicSale..Caption +#: gui-classic/UFRMAccountSelect.dfm:141 +msgid "Only for public sale" +msgstr "" + +#. FRMAccountSelect..pnlAccountsTop..cbAccountsName..Caption +#: gui-classic/UFRMAccountSelect.dfm:165 +msgid "Accounts name" +msgstr "" + +#. FRMAccountSelect..pnlBottom..Label17..Caption +#: gui-classic/UFRMAccountSelect.dfm:192 +#. FRMWallet..pnlTop..Label5..Caption +#: gui-classic/UFRMWallet.dfm:261 +#. FRMWallet..PageControl..tsMyAccounts..pnlAccounts..pnlAccountsInfo..Label17..Caption +#: gui-classic/UFRMWallet.dfm:543 +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsBottom..Label20..Caption +#: gui-classic/UFRMWallet.dfm:685 +msgid "Accounts:" +msgstr "" + +#. FRMAccountSelect..pnlBottom..lblAccountsCount..Caption +#: gui-classic/UFRMAccountSelect.dfm:201 +#. FRMAccountSelect..pnlBottom..lblAccountsBalance..Caption +#: gui-classic/UFRMAccountSelect.dfm:219 +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..lblPayloadLength..Caption +#: gui-classic/UFRMOperation.dfm:207 +#. FRMPayloadDecoder..lblDateTime..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:46 +#. FRMPayloadDecoder..lblOperationTxt..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:74 +#. FRMPayloadDecoder..lblAmount..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:95 +#. FRMPayloadDecoder..lblFee..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:115 +#. FRMPayloadDecoder..lblReceiver..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:162 +#. FRMWallet..pnlTop..lblCurrentBlock..Caption +#: gui-classic/UFRMWallet.dfm:144 +#. FRMWallet..pnlTop..lblOperationsPending..Caption +#: gui-classic/UFRMWallet.dfm:180 +#. FRMWallet..pnlTop..lblMinersClients..Caption +#: gui-classic/UFRMWallet.dfm:198 +#. FRMWallet..pnlTop..lblCurrentDifficulty..Caption +#: gui-classic/UFRMWallet.dfm:216 +#. FRMWallet..pnlTop..lblTimeAverage..Caption +#: gui-classic/UFRMWallet.dfm:225 +#. FRMWallet..pnlTop..lblCurrentAccounts..Caption +#: gui-classic/UFRMWallet.dfm:270 +#. FRMWallet..pnlTop..lblTimeAverageAux..Caption +#: gui-classic/UFRMWallet.dfm:279 +#. FRMWallet..pnlTop..lblBlocksFound..Caption +#: gui-classic/UFRMWallet.dfm:310 +#. FRMWallet..PageControl..tsMyAccounts..pnlAccounts..pnlAccountsInfo..lblAccountsCount..Caption +#: gui-classic/UFRMWallet.dfm:561 +#. FRMWallet..PageControl..tsMyAccounts..pnlAccounts..pnlAccountsInfo..lblAccountsBalance..Caption +#: gui-classic/UFRMWallet.dfm:570 +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsBottom..lblSelectedAccountsCount..Caption +#: gui-classic/UFRMWallet.dfm:694 +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsBottom..lblSelectedAccountsBalance..Caption +#: gui-classic/UFRMWallet.dfm:712 +msgid "000" +msgstr "" + +#. FRMAccountSelect..pnlBottom..Label19..Caption +#: gui-classic/UFRMAccountSelect.dfm:210 +#. FRMOperation..lblBalanceCaption..Caption +#: gui-classic/UFRMOperation.dfm:50 +#. FRMSaleAccounts..lblBalanceCaption..Caption +#: gui-classic/UFRMSaleAccounts.dfm:73 +#. FRMWallet..PageControl..tsMyAccounts..pnlAccounts..pnlAccountsInfo..Label19..Caption +#: gui-classic/UFRMWallet.dfm:552 +msgid "Balance:" +msgstr "" + +#. FRMAccountSelect..pnlBottom..bbSelect..Caption +#: gui-classic/UFRMAccountSelect.dfm:229 +msgid "Select" +msgstr "" + +#. FRMAccountSelect..pnlBottom..bbTypeStats..Caption +#: gui-classic/UFRMAccountSelect.dfm:249 +msgid "Type stats" +msgstr "" + +#. FRMDiagnosticTool..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:4 +#. FRMDiagnosticTool..Caption +#: gui-classic/UFRMRandomHashUtil.dfm:4 +#. FRMDiagnosticTool..Caption +#: lib/i386-win32/UFRMDiagnosticTool.dfm:4 +msgid "FRMDiagnosticTool" +msgstr "" + +#. FRMDiagnosticTool..btnRH..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:25 +#. FRMDiagnosticTool..btnRH..Caption +#: lib/i386-win32/UFRMDiagnosticTool.dfm:25 +msgid "Start Random Hash" +msgstr "" + +#. FRMDiagnosticTool..btnRH2..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:34 +#. FRMDiagnosticTool..btnRH2..Caption +#: lib/i386-win32/UFRMDiagnosticTool.dfm:34 +msgid "Start Random Hash 2" +msgstr "" + +#. FRMDiagnosticTool..btnRH2C..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:51 +#. FRMDiagnosticTool..btnRH2C..Caption +#: lib/i386-win32/UFRMDiagnosticTool.dfm:51 +msgid "Start Random Hash 2 (Cached)" +msgstr "" + +#. FRMDiagnosticTool..btnEntropy..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:60 +#. FRMDiagnosticTool..btnEntropy..Caption +#: lib/i386-win32/UFRMDiagnosticTool.dfm:60 +msgid "Entropy Tests" +msgstr "" + +#. FRMDiagnosticTool..btnRH2NonceScan..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:69 +#. FRMDiagnosticTool..btnRH2NonceScan..Caption +#: lib/i386-win32/UFRMDiagnosticTool.dfm:69 +msgid "Start Random Hash 2 (Nonce Scan)" +msgstr "" + +#. FRMDiagnosticTool..txtScanLevel..TextHint +#: gui-classic/UFRMDiagnosticTool.dfm:79 +#. FRMDiagnosticTool..txtScanLevel..TextHint +#: lib/i386-win32/UFRMDiagnosticTool.dfm:79 +msgid "Enter Scan Level (2-4)" +msgstr "" + +#. FRMDiagnosticTool..btnRHC..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:86 +#. FRMDiagnosticTool..btnRHC..Caption +#: lib/i386-win32/UFRMDiagnosticTool.dfm:86 +msgid "Start Random Hash (Cached)" +msgstr "" + +#. FRMHashLock..Caption +#: gui-classic/UFRMHashLock.dfm:5 +msgid "Atomic Swap Hash-Lock " +msgstr "" + +#. FRMHashLock..lblError..Caption +#: gui-classic/UFRMHashLock.dfm:29 +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..lblEncryptionErrors..Caption +#: gui-classic/UFRMOperation.dfm:191 +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsTransaction..lblTransactionErrors..Caption +#: gui-classic/UFRMOperation.dfm:327 +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..lblChangeKeyErrors..Caption +#: gui-classic/UFRMOperation.dfm:405 +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..lblNewOwnerErrors..Caption +#: gui-classic/UFRMOperation.dfm:422 +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblListAccountErrors..Caption +#: gui-classic/UFRMOperation.dfm:534 +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsDelistAccount..lblDelistErrors..Caption +#: gui-classic/UFRMOperation.dfm:778 +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..lblBuyAccountErrors..Caption +#: gui-classic/UFRMOperation.dfm:820 +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..lblChangeInfoErrors..Caption +#: gui-classic/UFRMOperation.dfm:973 +msgid "Errors detected" +msgstr "" + +#. FRMHashLock..btnSet..Caption +#: gui-classic/UFRMHashLock.dfm:56 +msgid "Set Hash-Lock" +msgstr "" + +#. FRMHashLock..GroupBox1..Caption +#: gui-classic/UFRMHashLock.dfm:67 +msgid "Mode" +msgstr "" + +#. FRMHashLock..GroupBox1..rbHashLock....Caption +#: gui-classic/UFRMHashLock.dfm:76 +msgid "Hash-Lock - the 32 byte hash-lock provided to you by the " +"counterparty" +msgstr "" + +#. FRMHashLock..GroupBox1..rbHashLockKey....Caption +#: gui-classic/UFRMHashLock.dfm:86 +msgid "Hash-Lock Key - a secret that will be hashed to create the 32 byte " +"hash-lock" +msgstr "" + +#. FRMHashLock..GroupBox2..Caption +#: gui-classic/UFRMHashLock.dfm:96 +msgid "Data" +msgstr "" + +#. FRMHashLock..GroupBox2..Label2..Caption +#: gui-classic/UFRMHashLock.dfm:106 +msgid "Please enter the hash lock data as a hexadecimal " +"string" +msgstr "" + +#. FRMMemoText..Caption +#: gui-classic/UFRMMemoText.dfm:5 +msgid "Information" +msgstr "" + +#. FRMMemoText..Memo....Lines.Strings +#: gui-classic/UFRMMemoText.dfm:53 +msgid "Memo" +msgstr "" + +#. FRMNewPrivateKeyType..Caption +#: gui-classic/UFRMNewPrivateKeyType.dfm:6 +msgid "New Private Key" +msgstr "" + +#. FRMNewPrivateKeyType..Label1..Caption +#: gui-classic/UFRMNewPrivateKeyType.dfm:26 +msgid "Name" +msgstr "" + +#. FRMNewPrivateKeyType..ebName..Text +#: gui-classic/UFRMNewPrivateKeyType.dfm:34 +msgid "ebName" +msgstr "" + +#. FRMNewPrivateKeyType..rgKeyType..Caption +#: gui-classic/UFRMNewPrivateKeyType.dfm:41 +msgid " Key Type: " +msgstr "" + +#. FRMNewPrivateKeyType..rgKeyType....Items.Strings +#: gui-classic/UFRMNewPrivateKeyType.dfm:43 +msgid "asdf" +msgstr "" + +#. FRMNewPrivateKeyType..bbOk..Caption +#: gui-classic/UFRMNewPrivateKeyType.dfm:51 +#. FRMNodesIp..bbOk..Caption +#: gui-classic/UFRMNodesIp.dfm:42 +#. FRMChangeLanguage..bbOk..Caption +#: gui-classic/UFRMSelectLanguage.dfm:18 +#. FRMChangeLanguage..bbOk..Caption +#: lib/i386-win32/ufrmselectlanguage.dfm:18 +msgid "OK" +msgstr "" + +#. FRMNodesIp..Caption +#: gui-classic/UFRMNodesIp.dfm:6 +msgid "Nodes IP" +msgstr "" + +#. FRMNodesIp..Label1..Caption +#: gui-classic/UFRMNodesIp.dfm:25 +msgid "Available Nodes Ip to connect" +msgstr "" + +#. FRMNodesIp..memoNodesIp....Lines.Strings +#: gui-classic/UFRMNodesIp.dfm:33 +msgid "memoNodesIp" +msgstr "" + +#. FRMNodesIp..cbTryOnlyWithThisServers..Caption +#: gui-classic/UFRMNodesIp.dfm:82 +msgid "Try to connect ONLY with this servers" +msgstr "" + +#. FRMOperation..Caption +#: gui-classic/UFRMOperation.dfm:6 +msgid "New Operation" +msgstr "" + +#. FRMOperation..lblAccountCaption..Caption +#: gui-classic/UFRMOperation.dfm:26 +#. FRMSaleAccounts..lblAccountCaption..Caption +#: gui-classic/UFRMSaleAccounts.dfm:25 +msgid "Account:" +msgstr "" + +#. FRMOperation..lblAccountBalance..Caption +#: gui-classic/UFRMOperation.dfm:35 +#. FRMSaleAccounts..lblAccountBalance..Caption +#: gui-classic/UFRMSaleAccounts.dfm:53 +msgid "lblAccountBalance" +msgstr "" + +#. FRMOperation..lblAccountsCount..Caption +#: gui-classic/UFRMOperation.dfm:59 +#. FRMSaleAccounts..lblAccountsCount..Caption +#: gui-classic/UFRMSaleAccounts.dfm:66 +msgid "XXX" +msgstr "" + +#. FRMOperation..bbExecute..Caption +#: gui-classic/UFRMOperation.dfm:68 +#. FRMOperation..ActionList..actExecute..Caption +#: gui-classic/UFRMOperation.dfm:1179 +#. FRMSaleAccounts..bbExecute..Caption +#: gui-classic/UFRMSaleAccounts.dfm:178 +#. FRMSaleAccounts..ActionList..actExecute..Caption +#: gui-classic/UFRMSaleAccounts.dfm:215 +msgid "Execute (F12)" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..lblFee..Caption +#: gui-classic/UFRMOperation.dfm:113 +msgid "Operation Fee" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..lblSignerAccount..Caption +#: gui-classic/UFRMOperation.dfm:122 +msgid "Signer account (Fee payer)" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..Caption +#: gui-classic/UFRMOperation.dfm:165 +msgid " Payload: " +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..lblEncryptPassword..Caption +#: gui-classic/UFRMOperation.dfm:172 +msgid "Password:" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..Label4..Caption +#: gui-classic/UFRMOperation.dfm:181 +msgid "Payload Data" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..rbEncryptedWithEC..Caption +#: gui-classic/UFRMOperation.dfm:216 +msgid "Encrypted with dest account public key" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..rbEncrptedWithPassword..Caption +#: gui-classic/UFRMOperation.dfm:227 +msgid "Encrypted with password" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..rbNotEncrypted..Caption +#: gui-classic/UFRMOperation.dfm:237 +msgid "Dont encrypt (Public payload)" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..rbEncryptedWithOldEC..Caption +#: gui-classic/UFRMOperation.dfm:272 +msgid "Encrypted with old public key" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..cbPayloadAsHex..Caption +#: gui-classic/UFRMOperation.dfm:282 +msgid "As Hex" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsTransaction..Caption +#: gui-classic/UFRMOperation.dfm:302 +msgid "Transaction" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsTransaction..lblDestAccount..Caption +#: gui-classic/UFRMOperation.dfm:308 +msgid "Destination account" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsTransaction..lblAmount..Caption +#: gui-classic/UFRMOperation.dfm:317 +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..lblBuyAmount..Caption +#: gui-classic/UFRMOperation.dfm:810 +msgid "Amount" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..Caption +#: gui-classic/UFRMOperation.dfm:387 +msgid "Change Key" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..lblNewPrivateKey..Caption +#: gui-classic/UFRMOperation.dfm:394 +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..lblBuyNewKey..Caption +#: gui-classic/UFRMOperation.dfm:837 +msgid "New private key" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..lblNewOwnerPublicKey..Caption +#: gui-classic/UFRMOperation.dfm:437 +msgid "New owners public key" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..rbChangeKeyWithAnother..Caption +#: gui-classic/UFRMOperation.dfm:446 +msgid "Change private key" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..rbChangeKeyTransferAccountToNewOwner..Caption +#: gui-classic/UFRMOperation.dfm:514 +msgid "Transfer account to a new owner" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..Caption +#: gui-classic/UFRMOperation.dfm:526 +msgid "List Account" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblPrice..Caption +#: gui-classic/UFRMOperation.dfm:550 +msgid "Sale Price" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblSeller..Caption +#: gui-classic/UFRMOperation.dfm:560 +msgid "Seller Account" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblNewKey..Caption +#: gui-classic/UFRMOperation.dfm:604 +msgid "Buyer Key" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblTimeLock..Caption +#: gui-classic/UFRMOperation.dfm:614 +msgid "Time-Lock" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblHashLock..Caption +#: gui-classic/UFRMOperation.dfm:623 +msgid "Hash-Lock" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..rbListAccountForPublicSale..Caption +#: gui-classic/UFRMOperation.dfm:699 +msgid "List for Public Sale" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..rbListAccountForPrivateSale..Caption +#: gui-classic/UFRMOperation.dfm:707 +msgid "List for Private Sale" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..rbListAccountForAccountSwap..Caption +#: gui-classic/UFRMOperation.dfm:715 +msgid "List for Atomic Account Swap" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..rbListAccountForCoinSwap..Caption +#: gui-classic/UFRMOperation.dfm:723 +msgid "List for Atomic Coin Swap" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..ebPrice..TextHint +#: gui-classic/UFRMOperation.dfm:732 +msgid "PASC Quantity" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..ebSellerAccount..TextHint +#: gui-classic/UFRMOperation.dfm:740 +msgid "Account Number" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..ebNewKey..TextHint +#: gui-classic/UFRMOperation.dfm:748 +msgid "BASE58 Encoded Public Key Of New Owner" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..ebTimeLock..Hint +#: gui-classic/UFRMOperation.dfm:755 +msgid "Block Number " +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..ebTimeLock..TextHint +#: gui-classic/UFRMOperation.dfm:759 +msgid "Block number" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsDelistAccount..Caption +#: gui-classic/UFRMOperation.dfm:770 +msgid "Delist Account" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..Caption +#: gui-classic/UFRMOperation.dfm:790 +msgid "Buy Account" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..lblAccountToBuy..Caption +#: gui-classic/UFRMOperation.dfm:799 +msgid "Account to Buy" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..Label2..Caption +#: gui-classic/UFRMOperation.dfm:846 +msgid "any over-payment will remain on bought " +"account" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..Caption +#: gui-classic/UFRMOperation.dfm:966 +msgid "Change Info" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..lblChangeName..Caption +#: gui-classic/UFRMOperation.dfm:990 +msgid "Change name" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..lblChangeType..Caption +#: gui-classic/UFRMOperation.dfm:1001 +msgid "Change type" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..lblChangeAccountData..Caption +#: gui-classic/UFRMOperation.dfm:1012 +msgid "Change Data" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..ebChangeName..TextHint +#: gui-classic/UFRMOperation.dfm:1022 +msgid "Account name (null or 3..64 chars)" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..ebChangeType..TextHint +#: gui-classic/UFRMOperation.dfm:1030 +msgid "0..65535" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..ebChangeAccountData..TextHint +#: gui-classic/UFRMOperation.dfm:1038 +msgid "Hexadecimal value (0..32 bytes)" +msgstr "" + +#. FRMOperation..PageControlLocked..tsGlobalError..lblGlobalErrors..Caption +#: gui-classic/UFRMOperation.dfm:1060 +msgid "????" +msgstr "" + +#. FRMOperation..PageControlLocked..tsGlobalError..bbPassword..Caption +#: gui-classic/UFRMOperation.dfm:1076 +#. FRMWalletKeys..bbUpdatePassword..Caption +#: gui-classic/UFRMWalletKeys.dfm:500 +msgid "Password" +msgstr "" + +#. FRMOperation..memoAccounts....Lines.Strings +#: gui-classic/UFRMOperation.dfm:1152 +#. FRMOperation..memoAccounts....Lines.Strings +#: gui-classic/UFRMOperation.dfm:1153 +#. FRMSaleAccounts..memoAccounts....Lines.Strings +#: gui-classic/UFRMSaleAccounts.dfm:87 +#. FRMSaleAccounts..memoAccounts....Lines.Strings +#: gui-classic/UFRMSaleAccounts.dfm:88 +msgid "123456-11 (0.0000); 123456-11 (0.0000); " +msgstr "" + +#. FRMOperation..ebSenderAccount..Text +#: gui-classic/UFRMOperation.dfm:1171 +#. FRMSaleAccounts..ebSenderAccount..Text +#: gui-classic/UFRMSaleAccounts.dfm:107 +msgid "ebSenderAccount" +msgstr "" + +#. FRMOperationsExplorer..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:5 +msgid "Operations Explorer Tool" +msgstr "" + +#. FRMOperationsExplorer..pnlTop..lblTopCaption....Caption +#: gui-classic/UFRMOperationsExplorer.dfm:58 +msgid "You can use this tool to explore operations, also you can copy/paste " +"operations as a RAW (Use Ctrl+I to Import). This tool allows to " +"generate a Multioperation, send to third party the RAW, add more " +"txs... and then sign. Once Everybody has signed, you will be able to " +"EXECUTE OPERATION to be added to network nodes. " +msgstr "" + +#. FRMOperationsExplorer..pnlOpInfo..pnlExport..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:85 +msgid "pnlExport" +msgstr "" + +#. FRMOperationsExplorer..pnlOpInfo..pnlExport..Label1..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:94 +msgid "Operation as RAW:" +msgstr "" + +#. FRMOperationsExplorer..pnlOpInfo..pnlInfo..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:115 +msgid "pnlInfo" +msgstr "" + +#. FRMOperationsExplorer..pnlOpInfo..pnlInfo..pnlInfoOptions..Label2..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:139 +msgid "Multioperation actions:" +msgstr "" + +#. FRMOperationsExplorer..pnlOpInfo..pnlInfo..pnlInfoOptions..bbRandom..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:188 +msgid "RANDOM OPERATIONS" +msgstr "" + +#. FRMOperationsExplorer..mMenu..MiTools..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:199 +msgid "Tools" +msgstr "" + +#. FRMOperationsExplorer..mMenu..MiTools..MiImportOperationsFromTxt..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:201 +msgid "Import Operations from RAW" +msgstr "" + +#. FRMOperationsExplorer..mMenu..MiTools..MiDivider1..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:206 +#. FRMOperationsExplorer..mMenu..MiActions..MenuItem6..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:224 +#. FRMWallet..MainMenu..miProject..miN1..Caption +#: gui-classic/UFRMWallet.dfm:1254 +#. FRMWallet..MainMenu..miProject..N1..Caption +#: gui-classic/UFRMWallet.dfm:1270 +#. FRMWallet..MainMenu..MiOperations..N2..Caption +#: gui-classic/UFRMWallet.dfm:1310 +#. FRMWallet..MainMenu..MiOperations..N3..Caption +#: gui-classic/UFRMWallet.dfm:1327 +msgid "-" +msgstr "" + +#. FRMOperationsExplorer..mMenu..MiTools..miLoadFromBlockchain..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:209 +msgid "Load Operations from Blockchain" +msgstr "" + +#. FRMOperationsExplorer..mMenu..MiTools..MiLoadOperationsFromBlockchainFile..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:214 +msgid "Load Operations from Blockchain file" +msgstr "" + +#. FRMOperationsExplorer..mMenu..MiActions..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:219 +msgid "Actions" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActExecuteOperation..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:244 +msgid "Execute Operation" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActAddTxToMultioperation..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:249 +msgid "Add Tx to Multioperation" +msgstr "" + +#. FRMOperationsExplorer..ActionList..AddOpChangeToMultioperation..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:254 +msgid "Add OpChange to Multioperation" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActRemoveAccountFromMultioperation..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:259 +msgid "Remove Account from Multioperation" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActSignMultioperation..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:264 +msgid "Sign Multioperation" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActAddTx..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:269 +msgid "Add Tx" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActAddOpChange..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:274 +msgid "Add OpChange" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActRemove..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:279 +msgid "Remove" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActSign..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:284 +msgid "Sign" +msgstr "" + +#. FRMPascalCoinWalletConfig..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:6 +#. FRMWallet..MainMenu..miProject..miOptions..Caption +#: gui-classic/UFRMWallet.dfm:1257 +msgid "Options" +msgstr "" + +#. FRMPascalCoinWalletConfig..Label1..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:25 +msgid "Default fee for operation" +msgstr "" + +#. FRMPascalCoinWalletConfig..Label2..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:34 +msgid "Internet Server Port" +msgstr "" + +#. FRMPascalCoinWalletConfig..lblDefaultInternetServerPort..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:43 +#. FRMPascalCoinWalletConfig..lblDefaultJSONRPCMinerServerPort..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:87 +msgid "(Default XXXX)" +msgstr "" + +#. FRMPascalCoinWalletConfig..Label3..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:52 +msgid "Miner Name:" +msgstr "" + +#. FRMPascalCoinWalletConfig..Label4..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:61 +msgid "This name will be included in each new block you " +"mine!" +msgstr "" + +#. FRMPascalCoinWalletConfig..Label5..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:78 +msgid "JSON-RPC Port" +msgstr "" + +#. FRMPascalCoinWalletConfig..Label6..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:96 +msgid "Allowed IP's" +msgstr "" + +#. FRMPascalCoinWalletConfig..Label7..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:105 +msgid "Ip's separated by semicolon or empty for " +"all" +msgstr "" + +#. FRMPascalCoinWalletConfig..cbJSONRPCMinerServerActive..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:122 +msgid "JSON-RPC Server Miner (TCP/IP, no HTTP)" +msgstr "" + +#. FRMPascalCoinWalletConfig..cbSaveLogFiles..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:139 +msgid "Save log file" +msgstr "" + +#. FRMPascalCoinWalletConfig..cbShowLogs..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:148 +msgid "Show logs" +msgstr "" + +#. FRMPascalCoinWalletConfig..bbUpdatePassword..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:196 +msgid "Wallet Password" +msgstr "" + +#. FRMPascalCoinWalletConfig..ebMinerName..Text +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:265 +msgid "ebMinerName" +msgstr "" + +#. FRMPascalCoinWalletConfig..cbShowModalMessages..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:272 +msgid "Show modal messages" +msgstr "" + +#. FRMPascalCoinWalletConfig..gbMinerPrivateKey..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:301 +msgid " Miner Server Private Key: " +msgstr "" + +#. FRMPascalCoinWalletConfig..gbMinerPrivateKey..rbGenerateANewPrivateKeyEachBlock..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:308 +msgid "Generate a new private key for each generated " +"block" +msgstr "" + +#. FRMPascalCoinWalletConfig..gbMinerPrivateKey..rbUseARandomKey..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:316 +msgid "Use a random existing key" +msgstr "" + +#. FRMPascalCoinWalletConfig..gbMinerPrivateKey..rbMineAllwaysWithThisKey..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:324 +msgid "Always mine with this key:" +msgstr "" + +#. FRMPascalCoinWalletConfig..cbSaveDebugLogs..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:341 +msgid "Save debug logs too" +msgstr "" + +#. FRMPascalCoinWalletConfig..bbOpenDataFolder..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:349 +msgid "Open Data Folder" +msgstr "" + +#. FRMPascalCoinWalletConfig..cbJSONRPCPortEnabled..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:393 +msgid "JSON-RPC Server port enabled (HTTP)" +msgstr "" + +#. FRMPascalCoinWalletConfig..ebJSONRPCAllowedIPs..Text +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:403 +msgid "ebJSONRPCAllowedIPs" +msgstr "" + +#. FRMPascalCoinWalletConfig..cbDownloadNewCheckpoint..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:410 +msgid "Download new Checkpoint if blockchain older " +"than..." +msgstr "" + +#. FRMPascalCoinWalletConfig..bbChangeLanguage..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:428 +msgid "Change UI language" +msgstr "" + +#. FRMPayloadDecoder..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:7 +msgid "Operation Information/Decoder" +msgstr "" + +#. FRMPayloadDecoder..Label1..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:26 +msgid "Block/Op:" +msgstr "" + +#. FRMPayloadDecoder..lblBlock..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:33 +msgid "000000/0000" +msgstr "" + +#. FRMPayloadDecoder..Label6..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:59 +msgid "Date Time:" +msgstr "" + +#. FRMPayloadDecoder..Label2..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:66 +msgid "Operation:" +msgstr "" + +#. FRMPayloadDecoder..lblAmountCaption..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:88 +msgid "Amount:" +msgstr "" + +#. FRMPayloadDecoder..lblFeeCaption..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:108 +msgid "Fee:" +msgstr "" + +#. FRMPayloadDecoder..Label4..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:128 +msgid "OpHash" +msgstr "" + +#. FRMPayloadDecoder..lblSenderCaption..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:135 +msgid "Sender:" +msgstr "" + +#. FRMPayloadDecoder..lblSender..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:142 +msgid "9999999-99" +msgstr "" + +#. FRMPayloadDecoder..lblReceiverCaption..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:155 +msgid "Receiver:" +msgstr "" + +#. FRMPayloadDecoder..lblReceiverInfo..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:175 +msgid "(Receiver info)" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecoded..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:192 +msgid "Payload" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecoded..Label7..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:202 +msgid "Decoded Payload:" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecoded..lblDecodedMethod..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:210 +msgid "(Method)" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecoded..Label3..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:223 +msgid "Original Payload in Hexadecimal:" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecoded..memoDecoded....Lines.Strings +#: gui-classic/UFRMPayloadDecoder.dfm:237 +#. FRMPayloadDecoder..PageControl..tsDecoded..memoOriginalPayloadInHexa....Lines.Strings +#: gui-classic/UFRMPayloadDecoder.dfm:256 +msgid "memoDecoded" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecoded..cbShowAsHexadecimal..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:267 +msgid "Show as hexadecimal" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecodeMethods..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:273 +msgid "Decode methods" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecodeMethods..lblPasswordsInfo..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:280 +msgid "lblPasswordsInfo" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecodeMethods..cbMethodPublicPayload..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:287 +msgid "Not encrypted (Public payload)" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecodeMethods..cbUsingPrivateKeys..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:296 +msgid "Using Private keys of my Wallet" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecodeMethods..cbUsingPasswords..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:305 +msgid "Using Passwords of the list" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecodeMethods..bbSaveMethods..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:323 +msgid "Save" +msgstr "" + +#. FRMPayloadDecoder..bbFind..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:376 +msgid "&Find" +msgstr "" + +#. FRMPayloadDecoder..ebOphash..Text +#: gui-classic/UFRMPayloadDecoder.dfm:420 +msgid "12345678901234567890123456789012345678901234567890123456789012" +msgstr "" + +#. FRMDiagnosticTool..txtLog..Text +#: gui-classic/UFRMRandomHashUtil.dfm:26 +msgid "txtLog" +msgstr "" + +#. FRMDiagnosticTool..btnRH..Caption +#: gui-classic/UFRMRandomHashUtil.dfm:33 +msgid "Random Hash" +msgstr "" + +#. FRMDiagnosticTool..btnRH2..Caption +#: gui-classic/UFRMRandomHashUtil.dfm:41 +msgid "Random Hash 2" +msgstr "" + +#. FRMRandomOperations..Caption +#: gui-classic/UFRMRandomOperations.dfm:4 +#. FRMRandomOperations..pnlClient..pnlTop1..bbRandomOperations..Caption +#: gui-classic/UFRMRandomOperations.dfm:73 +msgid "Random Operations" +msgstr "" + +#. FRMRandomOperations..pnlTop..lblTopCaption....Caption +#: gui-classic/UFRMRandomOperations.dfm:39 +msgid "WARNING! This form will generate RANDOM operations using your private " +"keys!!!" +msgstr "" + +#. FRMRandomOperations..pnlClient..mLogs....Lines.Strings +#: gui-classic/UFRMRandomOperations.dfm:85 +msgid "mLogs" +msgstr "" + +#. FRMRPCCalls..Caption +#: gui-classic/UFRMRPCCalls.dfm:5 +#. FRMWallet..MainMenu..miProject..MiRPCCalls..Caption +#: gui-classic/UFRMWallet.dfm:1266 +msgid "RPC Calls" +msgstr "" + +#. FRMRPCCalls..pnlTop..lblTopCaption....Caption +#: gui-classic/UFRMRPCCalls.dfm:45 +msgid "WARNING! Execute only calls you understand. Execute unknown calls " +"provided by third person can cause that you lost your " +"keys/balance!" +msgstr "" + +#. FRMRPCCalls..pnlRight..Label1..Caption +#: gui-classic/UFRMRPCCalls.dfm:83 +msgid "Method" +msgstr "" + +#. FRMRPCCalls..pnlRight..Label2..Caption +#: gui-classic/UFRMRPCCalls.dfm:92 +msgid "Server" +msgstr "" + +#. FRMRPCCalls..pnlRight..ebMethod..Text +#: gui-classic/UFRMRPCCalls.dfm:102 +msgid "ebMethod" +msgstr "" + +#. FRMRPCCalls..pnlRight..pageControl..tsKeyNames..Caption +#: gui-classic/UFRMRPCCalls.dfm:113 +msgid "Key/Value Params" +msgstr "" + +#. FRMRPCCalls..pnlRight..pageControl..tsJSONParams..Caption +#: gui-classic/UFRMRPCCalls.dfm:130 +msgid "Params as JSON" +msgstr "" + +#. FRMRPCCalls..pnlRight..bbSendCommand..Caption +#: gui-classic/UFRMRPCCalls.dfm:148 +msgid "&Send" +msgstr "" + +#. FRMRPCCalls..pnlRight..ebServerURL..Text +#: gui-classic/UFRMRPCCalls.dfm:195 +msgid "ebServerURL" +msgstr "" + +#. FRMRPCCalls..pnlInfo..pnlInfoBottom..pnlLastCall..Label3..Caption +#: gui-classic/UFRMRPCCalls.dfm:244 +msgid "Last call result:" +msgstr "" + +#. FRMRPCCalls..pnlInfo..pnlInfoBottom..pnlLastCall..lblLastCallResultState..Caption +#: gui-classic/UFRMRPCCalls.dfm:253 +msgid "STATE" +msgstr "" + +#. FRMSaleAccounts..Caption +#: gui-classic/UFRMSaleAccounts.dfm:5 +msgid "Sale accounts" +msgstr "" + +#. FRMSaleAccounts..Label1..Caption +#: gui-classic/UFRMSaleAccounts.dfm:32 +msgid "Sale price:" +msgstr "" + +#. FRMSaleAccounts..Label2..Caption +#: gui-classic/UFRMSaleAccounts.dfm:39 +msgid "Locked until block:" +msgstr "" + +#. FRMSaleAccounts..Label3..Caption +#: gui-classic/UFRMSaleAccounts.dfm:46 +msgid "Seller account (where to pay)" +msgstr "" + +#. FRMSaleAccounts..ebSalePrice..Text +#: gui-classic/UFRMSaleAccounts.dfm:115 +#. FRMSaleAccounts..ebSellerAccount..Text +#: gui-classic/UFRMSaleAccounts.dfm:170 +msgid "Edit1" +msgstr "" + +#. FRMSaleAccounts..ebLockedUntilBlock..Text +#: gui-classic/UFRMSaleAccounts.dfm:123 +msgid "ebLockedUntilBlock" +msgstr "" + +#. FRMSaleAccounts..gbSellOptions..Caption +#: gui-classic/UFRMSaleAccounts.dfm:130 +msgid " Sell options: " +msgstr "" + +#. FRMSaleAccounts..gbSellOptions..lblNewOwnerPublicKey..Caption +#: gui-classic/UFRMSaleAccounts.dfm:137 +msgid "New owner's public key" +msgstr "" + +#. FRMSaleAccounts..gbSellOptions..rbEveryoneCanBuy..Caption +#: gui-classic/UFRMSaleAccounts.dfm:144 +msgid "Everyone can buy" +msgstr "" + +#. FRMSaleAccounts..gbSellOptions..rbReservedForAPublickKey..Caption +#: gui-classic/UFRMSaleAccounts.dfm:152 +msgid "Reserved for only one public key (private)" +msgstr "" + +#. FRMSaleAccounts..gbSellOptions..ebNewOwnerPublicKey..Text +#: gui-classic/UFRMSaleAccounts.dfm:161 +msgid "ebDestAccount" +msgstr "" + +#. FRMChangeLanguage..Caption +#: gui-classic/UFRMSelectLanguage.dfm:8 +#. FRMChangeLanguage..Caption +#: lib/i386-win32/ufrmselectlanguage.dfm:8 +msgid "Language Selection" +msgstr "" + +#. FRMChangeLanguage..bbCancel..Caption +#: gui-classic/UFRMSelectLanguage.dfm:28 +#. FRMChangeLanguage..bbCancel..Caption +#: lib/i386-win32/ufrmselectlanguage.dfm:28 +msgid "Cancel" +msgstr "" + +#. FRMChangeLanguage..Label1..Caption +#: gui-classic/UFRMSelectLanguage.dfm:46 +#. FRMChangeLanguage..Label1..Caption +#: lib/i386-win32/ufrmselectlanguage.dfm:46 +msgid "Select your preferred language" +msgstr "" + +#. FRMWallet..pnlTop..lblCurrentBlockCaption..Caption +#: gui-classic/UFRMWallet.dfm:135 +msgid "Total Blocks:" +msgstr "" + +#. FRMWallet..pnlTop..lblCurrentBlockTimeCaption..Caption +#: gui-classic/UFRMWallet.dfm:153 +msgid "Current Block Age:" +msgstr "" + +#. FRMWallet..pnlTop..lblCurrentBlockTime..Caption +#: gui-classic/UFRMWallet.dfm:162 +msgid "000 seconds ago" +msgstr "" + +#. FRMWallet..pnlTop..lblOperationsPendingCaption..Caption +#: gui-classic/UFRMWallet.dfm:171 +msgid "Pending Operations:" +msgstr "" + +#. FRMWallet..pnlTop..lblMiningStatusCaption..Caption +#: gui-classic/UFRMWallet.dfm:189 +msgid "Miner Clients:" +msgstr "" + +#. FRMWallet..pnlTop..lblCurrentDifficultyCaption..Caption +#: gui-classic/UFRMWallet.dfm:207 +msgid "Current Target:" +msgstr "" + +#. FRMWallet..pnlTop..Label4..Caption +#: gui-classic/UFRMWallet.dfm:234 +msgid "Time average:" +msgstr "" + +#. FRMWallet..pnlTop..Label8..Caption +#: gui-classic/UFRMWallet.dfm:243 +msgid "Node Status:" +msgstr "" + +#. FRMWallet..pnlTop..lblNodeStatus..Caption +#: gui-classic/UFRMWallet.dfm:252 +msgid "???" +msgstr "" + +#. FRMWallet..pnlTop..Label16..Caption +#: gui-classic/UFRMWallet.dfm:294 +msgid "Blocks Found:" +msgstr "" + +#. FRMWallet..pnlTop..lblBlocksFound..Hint +#: gui-classic/UFRMWallet.dfm:309 +msgid "Blocks found while Miner is running..." +msgstr "" + +#. FRMWallet..pnlTop..lblReceivedMessages..Caption +#: gui-classic/UFRMWallet.dfm:328 +msgid "Received Messages" +msgstr "" + +#. FRMWallet..pnlTop..lblBuild..Caption +#: gui-classic/UFRMWallet.dfm:344 +msgid "Build" +msgstr "" + +#. FRMWallet..StatusBar......Text +#: gui-classic/UFRMWallet.dfm:363 +msgid "Server Active" +msgstr "" + +#. FRMWallet..StatusBar......Text +#: gui-classic/UFRMWallet.dfm:367 +msgid "Connection status" +msgstr "" + +#. FRMWallet..StatusBar......Text +#: gui-classic/UFRMWallet.dfm:371 +msgid "Blocks" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..Caption +#: gui-classic/UFRMWallet.dfm:385 +msgid "Account Explorer" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pnlMyAccountsTop..Label18..Caption +#: gui-classic/UFRMWallet.dfm:406 +#. FRMWallet..MainMenu..MiOperations..MiFindaccount..Caption +#: gui-classic/UFRMWallet.dfm:1295 +msgid "Find account" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pnlMyAccountsTop..cbExploreMyAccounts..Caption +#: gui-classic/UFRMWallet.dfm:458 +msgid "Explore accounts with one of my Wallet " +"Keys" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pnlMyAccountsTop..bbChangeKeyName..Caption +#: gui-classic/UFRMWallet.dfm:476 +msgid "Change Key name" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pnlMyAccountsTop..cbFilterAccounts..Caption +#: gui-classic/UFRMWallet.dfm:485 +msgid "Filter accounts by balance" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pnlMyAccountsTop..ebFilterAccountByBalanceMin..Hint +#: gui-classic/UFRMWallet.dfm:494 +msgid "Min balance" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pnlMyAccountsTop..ebFilterAccountByBalanceMax..Hint +#: gui-classic/UFRMWallet.dfm:504 +msgid "Max balance" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pnlAccounts..pnlAccountsInfo..bbAccountsRefresh..Caption +#: gui-classic/UFRMWallet.dfm:580 +msgid "Refresh" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsAccountOperations..Caption +#: gui-classic/UFRMWallet.dfm:622 +msgid "Account Operations" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..Caption +#: gui-classic/UFRMWallet.dfm:634 +msgid "Selected Accounts For Batch Operation" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsTop..Label15..Caption +#: gui-classic/UFRMWallet.dfm:667 +msgid "Select multiple accounts to execute massive " +"operations" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsBottom..Label22..Caption +#: gui-classic/UFRMWallet.dfm:703 +msgid "Accounts Balance:" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsLeft..sbSelectedAccountsAdd..Caption +#: gui-classic/UFRMWallet.dfm:730 +msgid ">" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsLeft..sbSelectedAccountsAddAll..Caption +#: gui-classic/UFRMWallet.dfm:738 +msgid ">>" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsLeft..sbSelectedAccountsDel..Caption +#: gui-classic/UFRMWallet.dfm:746 +msgid "<" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsLeft..sbSelectedAccountsDelAll..Caption +#: gui-classic/UFRMWallet.dfm:754 +msgid "<<" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..bbSelectedAccountsOperation..Caption +#: gui-classic/UFRMWallet.dfm:763 +#. FRMWallet..MainMenu..MiOperations..Caption +#: gui-classic/UFRMWallet.dfm:1278 +msgid "Operations" +msgstr "" + +#. FRMWallet..PageControl..tsPendingOperations..Caption +#: gui-classic/UFRMWallet.dfm:829 +msgid "Pending Operations" +msgstr "" + +#. FRMWallet..PageControl..tsPendingOperations..pnlPendingOperations..Label10....Caption +#: gui-classic/UFRMWallet.dfm:865 +msgid "Here you can see Operations transmited/received from other nodes that " +"will be included in next block. There is no guarantee that other " +"nodes will include them when mining, so it's important that you mine " +"too to help include Operations to the main " +"BlockChain" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Caption +#: gui-classic/UFRMWallet.dfm:879 +msgid "Block Explorer" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..Label9..Caption +#: gui-classic/UFRMWallet.dfm:898 +#. FRMWallet..PageControl..tsOperations..Panel1..Label2..Caption +#: gui-classic/UFRMWallet.dfm:994 +msgid "Filter by blocks range" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..lblHashRateBackBlocks..Caption +#: gui-classic/UFRMWallet.dfm:907 +msgid "HashRate back blocks" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..lblHashRateBackBlocks1..Caption +#: gui-classic/UFRMWallet.dfm:916 +msgid "Units" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..cbHashRateUnits..Text +#: gui-classic/UFRMWallet.dfm:955 +#. FRMWallet..PageControl..tsBlockChain..Panel2..cbHashRateUnits....Items.Strings +#: gui-classic/UFRMWallet.dfm:960 +msgid "Mh/s" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..cbHashRateUnits....Items.Strings +#: gui-classic/UFRMWallet.dfm:959 +msgid "Kh/s" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..cbHashRateUnits....Items.Strings +#: gui-classic/UFRMWallet.dfm:961 +msgid "Gh/s" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..cbHashRateUnits....Items.Strings +#: gui-classic/UFRMWallet.dfm:962 +msgid "Th/s" +msgstr "" + +#. FRMWallet..PageControl..tsOperations..Caption +#: gui-classic/UFRMWallet.dfm:975 +#. FRMWallet..MainMenu..MiOperations..MiOperationsExplorer..Caption +#: gui-classic/UFRMWallet.dfm:1305 +msgid "Operations Explorer" +msgstr "" + +#. FRMWallet..PageControl..tsLogs..Caption +#: gui-classic/UFRMWallet.dfm:1027 +msgid "Logs" +msgstr "" + +#. FRMWallet..PageControl..tsLogs..pnlTopLogs..cbShowDebugLogs..Caption +#: gui-classic/UFRMWallet.dfm:1046 +msgid "Show Debug Logs" +msgstr "" + +#. FRMWallet..PageControl..tsNodeStats..Caption +#: gui-classic/UFRMWallet.dfm:1062 +msgid "Node Stats" +msgstr "" + +#. FRMWallet..PageControl..tsNodeStats..Label3..Caption +#: gui-classic/UFRMWallet.dfm:1076 +msgid "Active Connections:" +msgstr "" + +#. FRMWallet..PageControl..tsNodeStats..Label6..Caption +#: gui-classic/UFRMWallet.dfm:1086 +msgid "Known Node Servers:" +msgstr "" + +#. FRMWallet..PageControl..tsNodeStats..Label7..Caption +#: gui-classic/UFRMWallet.dfm:1096 +msgid "Blacklisted Nodes" +msgstr "" + +#. FRMWallet..PageControl..tsMessages..Caption +#: gui-classic/UFRMWallet.dfm:1135 +msgid "Messages" +msgstr "" + +#. FRMWallet..PageControl..tsMessages..Label11..Caption +#: gui-classic/UFRMWallet.dfm:1149 +msgid "Messages:" +msgstr "" + +#. FRMWallet..PageControl..tsMessages..Label12..Caption +#: gui-classic/UFRMWallet.dfm:1158 +msgid "Message to send:" +msgstr "" + +#. FRMWallet..PageControl..tsMessages..Label13..Caption +#: gui-classic/UFRMWallet.dfm:1167 +msgid "Available Connections:" +msgstr "" + +#. FRMWallet..PageControl..tsMessages..Label14....Caption +#: gui-classic/UFRMWallet.dfm:1178 +msgid "(Messages will be encrypted, so only dest connection will be able to " +"read it)" +msgstr "" + +#. FRMWallet..PageControl..tsMessages..bbSendAMessage..Caption +#: gui-classic/UFRMWallet.dfm:1203 +msgid "Send a Message" +msgstr "" + +#. FRMWallet..PageControl..tsMessages..memoMessageToSend....Lines.Strings +#: gui-classic/UFRMWallet.dfm:1232 +msgid "memoMessageToSend" +msgstr "" + +#. FRMWallet..MainMenu..miProject..Caption +#: gui-classic/UFRMWallet.dfm:1247 +msgid "Project" +msgstr "" + +#. FRMWallet..MainMenu..miProject..miPrivatekeys..Caption +#: gui-classic/UFRMWallet.dfm:1249 +msgid "Private Keys" +msgstr "" + +#. FRMWallet..MainMenu..miProject..IPnodes1..Caption +#: gui-classic/UFRMWallet.dfm:1262 +msgid "Available Node List" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..miNewOperation..Caption +#: gui-classic/UFRMWallet.dfm:1280 +msgid "New single Operation" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiFindOperationbyOpHash..Caption +#: gui-classic/UFRMWallet.dfm:1285 +msgid "Find Operation by OpHash" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiDecodePayload..Caption +#: gui-classic/UFRMWallet.dfm:1290 +msgid "Decode Payload" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiAccountInformation..Caption +#: gui-classic/UFRMWallet.dfm:1300 +msgid "Account Information" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiAddaccounttoSelected..Caption +#: gui-classic/UFRMWallet.dfm:1313 +msgid "Add account to selected" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiRemoveaccountfromselected..Caption +#: gui-classic/UFRMWallet.dfm:1318 +msgid "Remove account from selected" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiMultiaccountoperation..Caption +#: gui-classic/UFRMWallet.dfm:1323 +msgid "Multi account operation" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiFindpreviousaccountwithhighbalance..Caption +#: gui-classic/UFRMWallet.dfm:1330 +msgid "Find previous account with high balance" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiFindnextaccountwithhighbalance..Caption +#: gui-classic/UFRMWallet.dfm:1335 +msgid "Find next account with high balance" +msgstr "" + +#. FRMWallet..MainMenu..miAbout..Caption +#: gui-classic/UFRMWallet.dfm:1341 +msgid "About" +msgstr "" + +#. FRMWallet..MainMenu..miAbout..miAboutPascalCoin..Caption +#: gui-classic/UFRMWallet.dfm:1343 +msgid "About Pascal Coin..." +msgstr "" + +#. FRMWalletKeys..Caption +#: gui-classic/UFRMWalletKeys.dfm:6 +msgid "Wallet keys" +msgstr "" + +#. FRMWalletKeys..lblEncryptionTypeCaption..Caption +#: gui-classic/UFRMWalletKeys.dfm:25 +msgid "Encryption type:" +msgstr "" + +#. FRMWalletKeys..lblEncryptionType..Caption +#: gui-classic/UFRMWalletKeys.dfm:32 +#. FRMWalletKeys..lblKeyName..Caption +#: gui-classic/UFRMWalletKeys.dfm:47 +msgid "000000000" +msgstr "" + +#. FRMWalletKeys..lblKeyNameCaption..Caption +#: gui-classic/UFRMWalletKeys.dfm:39 +msgid "Key name:" +msgstr "" + +#. FRMWalletKeys..lblPrivateKeyCaption..Caption +#: gui-classic/UFRMWalletKeys.dfm:54 +msgid "Public Key:" +msgstr "" + +#. FRMWalletKeys..lblKeysEncrypted..Caption +#: gui-classic/UFRMWalletKeys.dfm:62 +msgid "lblKeysEncrypted" +msgstr "" + +#. FRMWalletKeys..bbExportPrivateKey..Caption +#: gui-classic/UFRMWalletKeys.dfm:85 +msgid "Export Private key" +msgstr "" + +#. FRMWalletKeys..memoPrivateKey....Lines.Strings +#: gui-classic/UFRMWalletKeys.dfm:158 +msgid "memoPrivateKey" +msgstr "" + +#. FRMWalletKeys..bbChangeName..Caption +#: gui-classic/UFRMWalletKeys.dfm:169 +msgid "Change Name" +msgstr "" + +#. FRMWalletKeys..bbImportPrivateKey..Caption +#: gui-classic/UFRMWalletKeys.dfm:178 +msgid "Import Private key" +msgstr "" + +#. FRMWalletKeys..bbExportPublicKey..Caption +#: gui-classic/UFRMWalletKeys.dfm:240 +msgid "Export Public key" +msgstr "" + +#. FRMWalletKeys..bbImportPublicKey..Caption +#: gui-classic/UFRMWalletKeys.dfm:306 +msgid "Import Public key" +msgstr "" + +#. FRMWalletKeys..bbGenerateNewKey..Caption +#: gui-classic/UFRMWalletKeys.dfm:372 +msgid "Generate a new Key" +msgstr "" + +#. FRMWalletKeys..bbDelete..Caption +#: gui-classic/UFRMWalletKeys.dfm:434 +msgid "Delete" +msgstr "" + +#. FRMWalletKeys..bbExportAllWalletKeys..Caption +#: gui-classic/UFRMWalletKeys.dfm:568 +msgid "Export all Wallet Keys to a file" +msgstr "" + +#. FRMWalletKeys..bbImportKeysFile..Caption +#: gui-classic/UFRMWalletKeys.dfm:634 +msgid "Import a Wallet Keys File" +msgstr "" + +#. FRMWalletKeys..bbLock..Caption +#: gui-classic/UFRMWalletKeys.dfm:700 +msgid "Lock" +msgstr "" + +#. FRMWalletKeys..SaveDialog..DefaultExt +#: gui-classic/UFRMWalletKeys.dfm:758 +#. FRMWalletKeys..OpenDialog..DefaultExt +#: gui-classic/UFRMWalletKeys.dfm:765 +msgid "dat" +msgstr "" + +#. FRMWalletKeys..SaveDialog..Filter +#: gui-classic/UFRMWalletKeys.dfm:759 +msgid "Wallet keys file|*.dat|All files|*.*" +msgstr "" + +#. FRMWalletKeys..OpenDialog..Filter +#: gui-classic/UFRMWalletKeys.dfm:766 +msgid "Wallet keys file (*.dat)|*.dat|All files " +"(*.*)|*.*" +msgstr "" + +#. Programmer's name for it: SUnSupportedHash +#: core/URandomHash.pas:267 +#. Programmer's name for it: SUnSupportedHash +#: core/URandomHash2.pas:219 +msgid "Unsupported Hash Selected" +msgstr "" + +#. Programmer's name for it: SInvalidRound +#: core/URandomHash.pas:268 +#. Programmer's name for it: SInvalidRound +#: core/URandomHash2.pas:220 +msgid "Round must be between 0 and N inclusive" +msgstr "" + +#. Programmer's name for it: SOverlappingArgs +#: core/URandomHash.pas:269 +#. Programmer's name for it: SOverlappingArgs +#: core/URandomHash2.pas:221 +msgid "Overlapping read/write regions" +msgstr "" + +#. Programmer's name for it: SBufferTooSmall +#: core/URandomHash.pas:270 +#. Programmer's name for it: SBufferTooSmall +#: core/URandomHash2.pas:222 +msgid "Buffer too small to apply memory transform" +msgstr "" + +#. Programmer's name for it: SBlockHeaderTooSmallForNonce +#: core/URandomHash.pas:271 +#. Programmer's name for it: SBlockHeaderTooSmallForNonce +#: core/URandomHash2.pas:223 +msgid "Buffer too small to contain nonce" +msgstr "" + +#. Programmer's name for it: SAESEngineNotInitialised +#: libraries/cryptolib4pascal/ClpAesEngine.pas:37 +#. Programmer's name for it: SAESEngineNotInitialised +#: libraries/cryptolib4pascal/ClpAesLightEngine.pas:37 +msgid "AES Engine not Initialised" +msgstr "" + +#. Programmer's name for it: SInputBuffertooShort +#: libraries/cryptolib4pascal/ClpAesEngine.pas:38 +#. Programmer's name for it: SInputBuffertooShort +#: libraries/cryptolib4pascal/ClpAesLightEngine.pas:38 +#. Programmer's name for it: SInputBufferTooShort +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:39 +#. Programmer's name for it: SInputBuffertooShort +#: libraries/cryptolib4pascal/ClpBlowfishEngine.pas:39 +#. Programmer's name for it: SInputBuffertooShort +#: libraries/cryptolib4pascal/ClpRijndaelEngine.pas:35 +#. Programmer's name for it: SInputBuffertooShort +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:43 +#. Programmer's name for it: SInputBuffertooShort +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:36 +#. Programmer's name for it: SInputBuffertooShort +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:36 +msgid "Input Buffer too Short" +msgstr "" + +#. Programmer's name for it: SOutputBuffertooShort +#: libraries/cryptolib4pascal/ClpAesEngine.pas:39 +#. Programmer's name for it: SOutputBuffertooShort +#: libraries/cryptolib4pascal/ClpAesLightEngine.pas:39 +#. Programmer's name for it: SOutputBufferTooShort +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:40 +#. Programmer's name for it: SOutputBuffertooShort +#: libraries/cryptolib4pascal/ClpBlowfishEngine.pas:40 +#. Programmer's name for it: SOutputBufferTooSmall +#: libraries/cryptolib4pascal/ClpBufferedBlockCipher.pas:39 +#. Programmer's name for it: SOutputBufferTooSmall +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:32 +#. Programmer's name for it: SOutputBufferTooSmall +#: libraries/cryptolib4pascal/ClpPaddedBufferedBlockCipher.pas:40 +#. Programmer's name for it: SOutputBuffertooShort +#: libraries/cryptolib4pascal/ClpRijndaelEngine.pas:36 +#. Programmer's name for it: SOutputBuffertooShort +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:44 +#. Programmer's name for it: SOutputBuffertooShort +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:37 +#. Programmer's name for it: SOutputBuffertooShort +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:37 +msgid "Output Buffer too Short" +msgstr "" + +#. Programmer's name for it: SInvalidParameterAESInit +#: libraries/cryptolib4pascal/ClpAesEngine.pas:40 +#. Programmer's name for it: SInvalidParameterAESInit +#: libraries/cryptolib4pascal/ClpAesLightEngine.pas:40 +msgid "Invalid Parameter Passed to AES Init - " +"\"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/cryptolib4pascal/ClpAesEngine.pas:41 +#. Programmer's name for it: SInvalidKeyLength +#: libraries/cryptolib4pascal/ClpAesLightEngine.pas:41 +msgid "Key Length not 128/192/256 bits." +msgstr "" + +#. Programmer's name for it: SInvalidOperation +#: libraries/cryptolib4pascal/ClpAesEngine.pas:42 +#. Programmer's name for it: SInvalidOperation +#: libraries/cryptolib4pascal/ClpAesLightEngine.pas:42 +msgid "Should Never Get Here" +msgstr "" + +#: libraries/cryptolib4pascal/ClpAESPRNGRandom.pas:40 +msgid "AES RNG Seed Length must be either one of these \"128/192/256 " +"bits\"." +msgstr "" + +#: libraries/cryptolib4pascal/ClpAgreementUtilities.pas:43 +msgid "Raw Agreement Algorithm \"%s\" Not Recognised." +msgstr "" + +#: libraries/cryptolib4pascal/ClpAgreementUtilities.pas:45 +msgid "Basic Agreement Algorithm \"%s\" Not Recognised." +msgstr "" + +#. Programmer's name for it: SArgon2TypeInvalid +#: libraries/cryptolib4pascal/ClpArgon2ParametersGenerator.pas:41 +msgid "Selected Argon2Type is Invalid" +msgstr "" + +#. Programmer's name for it: SArgon2VersionInvalid +#: libraries/cryptolib4pascal/ClpArgon2ParametersGenerator.pas:42 +msgid "Selected Argon2Version is Invalid" +msgstr "" + +#. Programmer's name for it: SArgon2MemoryCostTypeInvalid +#: libraries/cryptolib4pascal/ClpArgon2ParametersGenerator.pas:43 +msgid "Selected Argon2MemoryCostType is Invalid" +msgstr "" + +#. Programmer's name for it: SInvalidLength +#: libraries/cryptolib4pascal/ClpArrayUtils.pas:30 +msgid "%d \" > \" %d" +msgstr "" + +#. Programmer's name for it: SDataOverflow +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:43 +msgid "Data Overflow" +msgstr "" + +#. Programmer's name for it: SDataOverflow +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:45 +msgid "Corrupted Stream - Invalid High Tag Number " +"Found" +msgstr "" + +#. Programmer's name for it: SEOFFound +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:46 +msgid "EOF Found Inside Tag Value" +msgstr "" + +#. Programmer's name for it: SInvalidEnd +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:47 +msgid "EOF Found When Length Expected" +msgstr "" + +#. Programmer's name for it: SInvalidDerLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:48 +msgid "DER Length More Than 4 Bytes: %d" +msgstr "" + +#. Programmer's name for it: SEndOfStream +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:49 +msgid "EOF Found Reading Length" +msgstr "" + +#. Programmer's name for it: SNegativeLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:50 +msgid "Corrupted Stream - Negative Length Found" +msgstr "" + +#. Programmer's name for it: SOutOfBoundsLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:51 +msgid "Corrupted stream - Out of Bounds Length " +"Found" +msgstr "" + +#. Programmer's name for it: SUnknownTag +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:52 +msgid "Unknown Tag \" %d \" Encountered" +msgstr "" + +#. Programmer's name for it: SEndOfContent +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:53 +msgid "Unexpected End-of-Contents Marker" +msgstr "" + +#. Programmer's name for it: SIndefiniteLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:54 +msgid "Indefinite Length Primitive Encoding " +"Encountered" +msgstr "" + +#. Programmer's name for it: SUnknownBerObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:55 +msgid "Unknown BER Object Encountered" +msgstr "" + +#. Programmer's name for it: SCorruptedStream +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:56 +msgid "Corrupted Stream Detected: %s" +msgstr "" + +#. Programmer's name for it: SInvalidLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:57 +msgid "Negative Lengths not Allowed\", \"Length\"" +msgstr "" + +#. Programmer's name for it: SEndOfStreamTwo +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:58 +msgid "DEF Length %d \" TObject truncated by \" " +"%d" +msgstr "" + +#. Programmer's name for it: SInvalidBufferLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:59 +msgid "Buffer Length Not Right For Data" +msgstr "" + +#. Programmer's name for it: SMalformedContent +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:60 +msgid "Malformed End-of-Contents Marker" +msgstr "" + +#. Programmer's name for it: SExtraData +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:62 +msgid "Extra Data Found After Object" +msgstr "" + +#. Programmer's name for it: SUnRecognizedObjectStream +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:63 +msgid "Cannot Recognise Object in Stream" +msgstr "" + +#. Programmer's name for it: SUnRecognizedObjectByteArray +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:64 +msgid "Cannot Recognise Object in ByteArray" +msgstr "" + +#. Programmer's name for it: SIllegalObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:65 +msgid "Illegal Object in GetInstance: %s, " +"\"obj\"" +msgstr "" + +#. Programmer's name for it: SStrNil +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:66 +msgid "\"Str\" Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SProcessingError +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:67 +msgid "Error Processing Object : \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:68 +msgid "Object Implicit - Explicit Expected." +msgstr "" + +#. Programmer's name for it: SUnknownObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:69 +msgid "Unknown object in GetInstance: %s, " +"\"obj\"" +msgstr "" + +#. Programmer's name for it: SInvalidSequence +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:70 +msgid "\"Failed to Construct Sequence from byte array: \" " +"%s" +msgstr "" + +#. Programmer's name for it: SImplicitObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:71 +msgid "Implicitly Tagged Object" +msgstr "" + +#. Programmer's name for it: SImplicitTag +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:72 +msgid "Implicit Tagging for Tag: %d" +msgstr "" + +#. Programmer's name for it: SUnknownObjectBER +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:73 +msgid "Unknown BER Object Encountered: $%x" +msgstr "" + +#. Programmer's name for it: SImplicitTagging +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:74 +msgid "Implicit Tagging not Implemented" +msgstr "" + +#. Programmer's name for it: SImplicitTagging +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:76 +msgid "Sequences Must Use Constructed Encoding (see X.690 " +"8.9.1/8.10.1)" +msgstr "" + +#. Programmer's name for it: SImplicitTagging +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:78 +msgid "Sets Must Use Constructed Encoding (see X.690 " +"8.11.1/8.12.1)" +msgstr "" + +#. Programmer's name for it: SMalformedObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:79 +msgid "Malformed Object %s" +msgstr "" + +#. Programmer's name for it: SUnSupportedTag +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:80 +msgid "Unsupported Tag Number" +msgstr "" + +#. Programmer's name for it: SConvertError +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:81 +msgid "EIOCryptoLibException Converting Stream to Byte Array: " +"%s" +msgstr "" + +#. Programmer's name for it: SEncodingError +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:82 +msgid "Encoding Error in GetInstance: %s " +"\"obj\"" +msgstr "" + +#. Programmer's name for it: SDataNil +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:83 +msgid "\"data\"" +msgstr "" + +#. Programmer's name for it: SInvalidRange +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:84 +msgid "Must be in the Range 0 to 7\", \"padBits\"" +msgstr "" + +#. Programmer's name for it: SPadBitError +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:85 +msgid "If \"data\" is Empty, \"padBits\" Must be " +"0" +msgstr "" + +#. Programmer's name for it: SUnalignedData +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:86 +msgid "Attempt to Get non-octet Aligned Data from BIT " +"STRING\"" +msgstr "" + +#. Programmer's name for it: STruncatedBitString +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:87 +msgid "Truncated BIT STRING Detected\", \"octets\"" +msgstr "" + +#. Programmer's name for it: SNotImplemented +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:88 +msgid "Not Implemented %s" +msgstr "" + +#. Programmer's name for it: SUnConstructedTag +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:89 +msgid "Explicit Tags Must be Constructed (see X.690 " +"8.14.2)" +msgstr "" + +#. Programmer's name for it: SParsingError +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:90 +msgid "%s" +msgstr "" + +#. Programmer's name for it: SEmptyInput +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:91 +msgid "Input Cannot be Empty \"astr\"" +msgstr "" + +#. Programmer's name for it: SInvalidValue +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:92 +msgid "Byte Value Should Have 1 Byte in it', " +"\"val\"" +msgstr "" + +#. Programmer's name for it: SInvalidBooleanValue +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:93 +msgid "BOOLEAN Value Should Have 1 Byte in it\", " +"\"Value\"" +msgstr "" + +#. Programmer's name for it: SMalformedEnumerated +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:94 +msgid "Malformed Enumerated" +msgstr "" + +#. Programmer's name for it: SZeroLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:95 +msgid "Enumerated has Zero Length, \"enc\"" +msgstr "" + +#. Programmer's name for it: SInvalidEncoding +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:96 +msgid "Invalid Encoding Value: %d" +msgstr "" + +#. Programmer's name for it: SFewObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:97 +msgid "Too Few Objects in Input Vector, \"v\"" +msgstr "" + +#. Programmer's name for it: SVectorTooLarge +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:98 +msgid "Input Vector too Large\", \"vector\"" +msgstr "" + +#. Programmer's name for it: SVectorTooLarge +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:100 +msgid "No Tagged Object Found in Vector. Structure Doesn 't Seem to be of " +"Type External, \"Vector\"" +msgstr "" + +#. Programmer's name for it: SInvalidEncodingValue +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:101 +msgid "Invalid Encoding Value" +msgstr "" + +#. Programmer's name for it: SObjectNil +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:102 +msgid " \"obj\" Can't be Nil" +msgstr "" + +#. Programmer's name for it: SValueNil +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:103 +msgid " \"value\" Can't be Nil" +msgstr "" + +#. Programmer's name for it: SMalformedInteger +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:104 +msgid "Malformed Integer" +msgstr "" + +#. Programmer's name for it: SIdentifierNil +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:105 +msgid "Identifier Cannot be Empty" +msgstr "" + +#. Programmer's name for it: SInvalidOID +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:106 +msgid "\"String \" %s is \" not an OID\"" +msgstr "" + +#. Programmer's name for it: SInvalidBranchId +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:107 +msgid "\"String \" %s \" not a valid OID branch\", " +"\"branchID\"" +msgstr "" + +#. Programmer's name for it: SIllegalCharacters +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:108 +msgid "String Contains Illegal Characters \"str\"" +msgstr "" + +#. Programmer's name for it: SExpectedPublicKey +#: libraries/cryptolib4pascal/ClpAsymmetricCipherKeyPair.pas:30 +msgid "Expected a Public Key \"publicParameter\"" +msgstr "" + +#. Programmer's name for it: SExpectedPrivateKey +#: libraries/cryptolib4pascal/ClpAsymmetricCipherKeyPair.pas:31 +msgid "Expected a Private Key \"privateParameter\"" +msgstr "" + +#. Programmer's name for it: SOutputBufferTooSmall +#: libraries/cryptolib4pascal/ClpBaseKdfBytesGenerator.pas:36 +#. Programmer's name for it: SOutputBufferTooSmall +#: libraries/cryptolib4pascal/ClpPascalCoinECIESKdfBytesGenerator.pas:34 +msgid "Output Buffer too Small" +msgstr "" + +#. Programmer's name for it: SOutputLengthTooLarge +#: libraries/cryptolib4pascal/ClpBaseKdfBytesGenerator.pas:37 +msgid "Output Length too Large" +msgstr "" + +#. Programmer's name for it: SKDFParameterNotFound +#: libraries/cryptolib4pascal/ClpBaseKdfBytesGenerator.pas:38 +#. Programmer's name for it: SKDFParameterNotFound +#: libraries/cryptolib4pascal/ClpPascalCoinECIESKdfBytesGenerator.pas:35 +msgid "KDF Parameters Required For KDF Generator" +msgstr "" + +#. Programmer's name for it: SDivisionByZero +#: libraries/cryptolib4pascal/ClpBigInteger.pas:36 +msgid "Division by Zero Error" +msgstr "" + +#. Programmer's name for it: SModulusPositive +#: libraries/cryptolib4pascal/ClpBigInteger.pas:37 +msgid "Modulus must be Positive" +msgstr "" + +#. Programmer's name for it: SNotRelativelyPrime +#: libraries/cryptolib4pascal/ClpBigInteger.pas:38 +msgid "Numbers not Relatively Prime." +msgstr "" + +#. Programmer's name for it: SNegativeValue +#: libraries/cryptolib4pascal/ClpBigInteger.pas:39 +msgid "Cannot be Called on Value < 0" +msgstr "" + +#. Programmer's name for it: SNegativeExponent +#: libraries/cryptolib4pascal/ClpBigInteger.pas:40 +msgid "Negative Exponent" +msgstr "" + +#. Programmer's name for it: SResultTooLarge +#: libraries/cryptolib4pascal/ClpBigInteger.pas:41 +msgid "Result too Large" +msgstr "" + +#. Programmer's name for it: SNegativeBitPosition +#: libraries/cryptolib4pascal/ClpBigInteger.pas:42 +msgid "Bit Position must not be Negative" +msgstr "" + +#. Programmer's name for it: SInvalidBitAddress +#: libraries/cryptolib4pascal/ClpBigInteger.pas:43 +msgid "Bit Address less than Zero" +msgstr "" + +#. Programmer's name for it: SZeroLengthBigInteger +#: libraries/cryptolib4pascal/ClpBigInteger.pas:44 +msgid "Zero length BigInteger" +msgstr "" + +#. Programmer's name for it: SInvalidSign +#: libraries/cryptolib4pascal/ClpBigInteger.pas:45 +msgid "Invalid Sign Value" +msgstr "" + +#. Programmer's name for it: SNegativeSizeInBits +#: libraries/cryptolib4pascal/ClpBigInteger.pas:46 +msgid "sizeInBits must be non-negative" +msgstr "" + +#. Programmer's name for it: SInvalidBitLength +#: libraries/cryptolib4pascal/ClpBigInteger.pas:47 +msgid "bitLength < 2" +msgstr "" + +#. Programmer's name for it: SInvalidBase +#: libraries/cryptolib4pascal/ClpBigInteger.pas:48 +msgid "Only bases 2, 8, 10, or 16 allowed" +msgstr "" + +#. Programmer's name for it: SBadCharacterRadix8 +#: libraries/cryptolib4pascal/ClpBigInteger.pas:49 +msgid "Bad Character in radix 8 string: %s" +msgstr "" + +#. Programmer's name for it: SBadCharacterRadix2 +#: libraries/cryptolib4pascal/ClpBigInteger.pas:50 +msgid "Bad Character in radix 2 string: %s" +msgstr "" + +#. Programmer's name for it: SUnSupportedBase +#: libraries/cryptolib4pascal/ClpBigInteger.pas:51 +msgid "Only bases 2, 8, 10, 16 are allowed" +msgstr "" + +#. Programmer's name for it: SInvalidLength +#: libraries/cryptolib4pascal/ClpBigIntegers.pas:31 +msgid "Standard Length Exceeded, \"n\"" +msgstr "" + +#. Programmer's name for it: SInvalidMinValue +#: libraries/cryptolib4pascal/ClpBigIntegers.pas:32 +msgid "\"min\" may not be greater than \"max\"\"" +msgstr "" + +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:37 +msgid "Initialisation Vector Must be the Same Length as Block " +"Size" +msgstr "" + +#. Programmer's name for it: SInvalidChangeState +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:38 +msgid "Cannot Change Encrypting State Without Providing " +"Key." +msgstr "" + +#. Programmer's name for it: SInvalidParameterArgument +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:42 +msgid "CTR/SIC Mode Requires ParametersWithIV" +msgstr "" + +#. Programmer's name for it: SInvalidParameterArgument +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:44 +msgid "CTR/SIC mode requires IV no greater than: %u " +"bytes" +msgstr "" + +#. Programmer's name for it: SInvalidTooSmallIVLength +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:45 +msgid "CTR/SIC mode requires IV of at least: %u " +"bytes" +msgstr "" + +#. Programmer's name for it: SUnsupportedCipher +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:47 +msgid "CtsBlockCipher Can Only Accept ECB or CBC " +"Ciphers" +msgstr "" + +#. Programmer's name for it: SNegativeInputLength +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:48 +#. Programmer's name for it: SInvalidLength +#: libraries/cryptolib4pascal/ClpBufferedBlockCipher.pas:36 +#. Programmer's name for it: SNegativeInputLength +#: libraries/cryptolib4pascal/ClpPaddedBufferedBlockCipher.pas:42 +msgid "Can't Have a Negative Input Length!" +msgstr "" + +#. Programmer's name for it: SCTSDoFinalError +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:49 +msgid "Need at Least One Block of Input For " +"CTS" +msgstr "" + +#. Programmer's name for it: SBlowfishEngineNotInitialised +#: libraries/cryptolib4pascal/ClpBlowfishEngine.pas:36 +msgid "Blowfish Engine not Initialised" +msgstr "" + +#. Programmer's name for it: SBlowfishEngineNotInitialised +#: libraries/cryptolib4pascal/ClpBlowfishEngine.pas:38 +msgid "Invalid Parameter Passed to Blowfish Init - " +"\"%s\"" +msgstr "" + +#. Programmer's name for it: SOutputBuffertooShort +#: libraries/cryptolib4pascal/ClpBlowfishEngine.pas:42 +msgid "Key Length must be between 32 - 448 bits and divisible by " +"8." +msgstr "" + +#. Programmer's name for it: SInputNil +#: libraries/cryptolib4pascal/ClpBufferedBlockCipher.pas:37 +msgid "Input Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SCipherNil +#: libraries/cryptolib4pascal/ClpBufferedBlockCipher.pas:38 +msgid "Cipher Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SDataNotBlockSizeAligned +#: libraries/cryptolib4pascal/ClpBufferedBlockCipher.pas:40 +msgid "Data not Block Size Aligned" +msgstr "" + +#. Programmer's name for it: SOutputBufferTooSmallForDoFinal +#: libraries/cryptolib4pascal/ClpBufferedBlockCipher.pas:41 +msgid "Output Buffer too Short for DoFinal()" +msgstr "" + +#. Programmer's name for it: SInvalidBufferSize +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:33 +#. Programmer's name for it: SInvalidBufferSize +#: libraries/hashlib4pascal/HlpHash.pas:17 +msgid "\"BufferSize\" Must Be Greater Than Zero" +msgstr "" + +#. Programmer's name for it: SInvalidBufferSize +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:35 +msgid "Input and Output Streams Must not Point to the Same Stream " +"Instance" +msgstr "" + +#. Programmer's name for it: SUnAssignedInputStream +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:36 +#. Programmer's name for it: SUnAssignedStream +#: libraries/hashlib4pascal/HlpHash.pas:18 +msgid "Input Stream Is Unassigned" +msgstr "" + +#. Programmer's name for it: SUnAssignedOutputStream +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:37 +msgid "Output Stream Is Unassigned" +msgstr "" + +#. Programmer's name for it: SPositionOutOfRange +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:38 +msgid "Current Position Is Out Of Range" +msgstr "" + +#. Programmer's name for it: SPositionOutOfRange +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:40 +msgid "Stream Position (or Stream Length to Process) Is Out Of " +"Range" +msgstr "" + +#. Programmer's name for it: SCipherNil +#: libraries/cryptolib4pascal/ClpBufferedStreamCipher.pas:34 +msgid "Cipher Instance Cannot be Nil" +msgstr "" + +#: libraries/cryptolib4pascal/ClpCipherKeyGenerator.pas:34 +msgid "Strength must be a Positive Value, \"defaultStrength\"" +msgstr "" + +#. Programmer's name for it: SParametersNil +#: libraries/cryptolib4pascal/ClpCipherKeyGenerator.pas:35 +msgid "Parameters Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SGeneratorNotInitialized +#: libraries/cryptolib4pascal/ClpCipherKeyGenerator.pas:36 +msgid "Generator has not been Initialised" +msgstr "" + +#. Programmer's name for it: SMechanismNil +#: libraries/cryptolib4pascal/ClpCipherUtilities.pas:56 +#. Programmer's name for it: SMechanismNil +#: libraries/cryptolib4pascal/ClpDigestUtilities.pas:42 +#. Programmer's name for it: SMechanismNil +#: libraries/cryptolib4pascal/ClpSignerUtilities.pas:69 +msgid "Mechanism Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SAlgorithmNil +#: libraries/cryptolib4pascal/ClpCipherUtilities.pas:57 +#. Programmer's name for it: SAlgorithmNil +#: libraries/cryptolib4pascal/ClpParameterUtilities.pas:37 +#. Programmer's name for it: SAlgorithmNil +#: libraries/cryptolib4pascal/ClpSignerUtilities.pas:70 +msgid "Algorithm Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SUnRecognizedCipher +#: libraries/cryptolib4pascal/ClpCipherUtilities.pas:58 +msgid "Cipher \"%s\" Not Recognised." +msgstr "" + +#. Programmer's name for it: SUnRecognizedCipher +#: libraries/cryptolib4pascal/ClpCipherUtilities.pas:60 +msgid "Warning: SIC-Mode Can Become a TwoTime-Pad if the Blocksize of the " +"Cipher is Too Small. Use a Cipher With a Block Size of at Least 128 " +"bits (e.g. AES)" +msgstr "" + +#. Programmer's name for it: SUnRecognizedCipher +#: libraries/cryptolib4pascal/ClpCipherUtilities.pas:62 +msgid "Modes and Paddings Not Used for Stream " +"Ciphers" +msgstr "" + +#. Programmer's name for it: SEncodingInstanceNil +#: libraries/cryptolib4pascal/ClpConverters.pas:33 +#. Programmer's name for it: SEncodingInstanceNil +#: libraries/hashlib4pascal/HlpConverters.pas:16 +msgid "Encoding Instance Cannot Be Nil" +msgstr "" + +#. Programmer's name for it: SNegativeOffset +#: libraries/cryptolib4pascal/ClpCryptoApiRandomGenerator.pas:32 +msgid "Start Offset Cannot be Negative, \"Start\"" +msgstr "" + +#. Programmer's name for it: SArrayTooSmall +#: libraries/cryptolib4pascal/ClpCryptoApiRandomGenerator.pas:33 +msgid "Byte Array Too Small For Requested Offset and " +"Length" +msgstr "" + +#: libraries/cryptolib4pascal/ClpCurve25519Custom.pas:40 +msgid "Value Invalid for Curve25519FieldElement " +"\"%s\"" +msgstr "" + +#. Programmer's name for it: SOneOfECFieldElementIsNil +#: libraries/cryptolib4pascal/ClpCurve25519Custom.pas:41 +#. Programmer's name for it: SOneOfECFieldElementIsNil +#: libraries/cryptolib4pascal/ClpSecP256K1Custom.pas:41 +#. Programmer's name for it: SOneOfECFieldElementIsNil +#: libraries/cryptolib4pascal/ClpSecP256R1Custom.pas:41 +#. Programmer's name for it: SOneOfECFieldElementIsNil +#: libraries/cryptolib4pascal/ClpSecP384R1Custom.pas:41 +#. Programmer's name for it: SOneOfECFieldElementIsNil +#: libraries/cryptolib4pascal/ClpSecP521R1Custom.pas:41 +#. Programmer's name for it: SOneOfECFieldElementIsNil +#: libraries/cryptolib4pascal/ClpSecT283Custom.pas:42 +msgid "Exactly One of the Field Elements is " +"Nil" +msgstr "" + +#: libraries/cryptolib4pascal/ClpDHAgreement.pas:45 +#: libraries/cryptolib4pascal/ClpDHBasicAgreement.pas:38 +msgid "Diffie-Hellman Public Key has Wrong " +"Parameters." +msgstr "" + +#. Programmer's name for it: SNotDHPrivateKeyParameters +#: libraries/cryptolib4pascal/ClpDHAgreement.pas:46 +#. Programmer's name for it: SNotDHPrivateKeyParameters +#: libraries/cryptolib4pascal/ClpDHBasicAgreement.pas:39 +msgid "DHEngine Expects DHPrivateKeyParameters" +msgstr "" + +#. Programmer's name for it: SMessageNotInitialized +#: libraries/cryptolib4pascal/ClpDHAgreement.pas:47 +msgid "Message not Initialised" +msgstr "" + +#. Programmer's name for it: SSharedKeyInvalid +#: libraries/cryptolib4pascal/ClpDHAgreement.pas:48 +#. Programmer's name for it: SSharedKeyInvalid +#: libraries/cryptolib4pascal/ClpDHBasicAgreement.pas:41 +msgid "Shared Key Can't be 1" +msgstr "" + +#. Programmer's name for it: SDHPublicKeyWeak +#: libraries/cryptolib4pascal/ClpDHAgreement.pas:49 +#. Programmer's name for it: SDHPublicKeyWeak +#: libraries/cryptolib4pascal/ClpDHBasicAgreement.pas:42 +msgid "Diffie-Hellman Public Key is Weak" +msgstr "" + +#. Programmer's name for it: SDHPublicKeyNil +#: libraries/cryptolib4pascal/ClpDHAgreement.pas:50 +msgid "DH Public Key Parameter Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SAlgorithmNotInitialized +#: libraries/cryptolib4pascal/ClpDHBasicAgreement.pas:40 +msgid "Agreement Algorithm not Initialised" +msgstr "" + +#. Programmer's name for it: SParametersCannotBeNil +#: libraries/cryptolib4pascal/ClpDHBasicKeyPairGenerator.pas:42 +#. Programmer's name for it: SParametersCannotBeNil +#: libraries/cryptolib4pascal/ClpDHKeyPairGenerator.pas:42 +#. Programmer's name for it: SParametersCannotBeNil +#: libraries/cryptolib4pascal/ClpDsaKeyPairGenerator.pas:44 +msgid "\"parameters\" Cannot Be Nil" +msgstr "" + +#. Programmer's name for it: SPNil +#: libraries/cryptolib4pascal/ClpDHDomainParameters.pas:33 +msgid "P Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SGNil +#: libraries/cryptolib4pascal/ClpDHDomainParameters.pas:34 +#. Programmer's name for it: SGNil +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:35 +msgid "G Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SQNil +#: libraries/cryptolib4pascal/ClpDHDomainParameters.pas:35 +#. Programmer's name for it: SQNil +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:37 +#. Programmer's name for it: SQNil +#: libraries/cryptolib4pascal/ClpECPublicKeyParameters.pas:35 +msgid "Q Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SJNil +#: libraries/cryptolib4pascal/ClpDHDomainParameters.pas:36 +msgid "J Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SBadSequenceSize +#: libraries/cryptolib4pascal/ClpDHDomainParameters.pas:37 +#. Programmer's name for it: SBadSequenceSize +#: libraries/cryptolib4pascal/ClpDHValidationParams.pas:34 +#. Programmer's name for it: SBadSequenceSize +#: libraries/cryptolib4pascal/ClpDsaParameter.pas:32 +msgid "Bad Sequence Size \"seq\": %d" +msgstr "" + +#. Programmer's name for it: SInvalidDHDomainParameters +#: libraries/cryptolib4pascal/ClpDHDomainParameters.pas:38 +msgid "Invalid DHDomainParameters: %s" +msgstr "" + +#. Programmer's name for it: SPUnInitialized +#: libraries/cryptolib4pascal/ClpDHParameters.pas:33 +#. Programmer's name for it: SPUnInitialized +#: libraries/cryptolib4pascal/ClpDsaParameters.pas:32 +msgid "\"P\" Cannot Be Uninitialized" +msgstr "" + +#. Programmer's name for it: SGUnInitialized +#: libraries/cryptolib4pascal/ClpDHParameters.pas:34 +#. Programmer's name for it: SGUnInitialized +#: libraries/cryptolib4pascal/ClpDsaParameters.pas:34 +msgid "\"G\" Cannot Be Uninitialized" +msgstr "" + +#. Programmer's name for it: SMustBeOddPrime +#: libraries/cryptolib4pascal/ClpDHParameters.pas:35 +msgid "Field must be an Odd Prime, \"P\"" +msgstr "" + +#. Programmer's name for it: SInvalidGeneratorRange +#: libraries/cryptolib4pascal/ClpDHParameters.pas:36 +msgid "Generator must in the Range [2, p - 2], " +"\"G\"" +msgstr "" + +#. Programmer's name for it: SQTooBigToBeAFactor +#: libraries/cryptolib4pascal/ClpDHParameters.pas:37 +msgid "Q too Big to be a Factor of (P - 1), " +"\"Q\"" +msgstr "" + +#. Programmer's name for it: SMTooBig +#: libraries/cryptolib4pascal/ClpDHParameters.pas:38 +msgid "M value must be < BitLength of P, \"M\"" +msgstr "" + +#. Programmer's name for it: SLErrorOne +#: libraries/cryptolib4pascal/ClpDHParameters.pas:39 +msgid "when L value specified, it must be less than bitlength(P), " +"\"L\"" +msgstr "" + +#. Programmer's name for it: SLErrorTwo +#: libraries/cryptolib4pascal/ClpDHParameters.pas:40 +msgid "when L value specified, it may not be less than m value, " +"\"L\"" +msgstr "" + +#. Programmer's name for it: SInvalidSubGroupFactor +#: libraries/cryptolib4pascal/ClpDHParameters.pas:41 +msgid "Subgroup factor must be >= 2, \"j\"" +msgstr "" + +#. Programmer's name for it: SXUnInitialized +#: libraries/cryptolib4pascal/ClpDHPrivateKeyParameters.pas:33 +#. Programmer's name for it: SXUnInitialized +#: libraries/cryptolib4pascal/ClpDsaPrivateKeyParameters.pas:32 +msgid "\"X\" Cannot Be Uninitialized" +msgstr "" + +#. Programmer's name for it: SYUnInitialized +#: libraries/cryptolib4pascal/ClpDHPublicKeyParameters.pas:33 +#. Programmer's name for it: SYUnInitialized +#: libraries/cryptolib4pascal/ClpDsaPublicKeyParameters.pas:32 +msgid "\"Y\" Cannot Be Uninitialized" +msgstr "" + +#. Programmer's name for it: SInvalidDHPublicKey +#: libraries/cryptolib4pascal/ClpDHPublicKeyParameters.pas:34 +msgid "Invalid DH public key \"Y\"" +msgstr "" + +#. Programmer's name for it: SInvalidYInCorrectGroup +#: libraries/cryptolib4pascal/ClpDHPublicKeyParameters.pas:35 +#. Programmer's name for it: SInvalidYInCorrectGroup +#: libraries/cryptolib4pascal/ClpDsaPublicKeyParameters.pas:33 +msgid "\"Y\" Value Does Not Appear To Be In Correct " +"Group" +msgstr "" + +#. Programmer's name for it: SSeedNil +#: libraries/cryptolib4pascal/ClpDHValidationParameters.pas:30 +#. Programmer's name for it: SSeedNil +#: libraries/cryptolib4pascal/ClpDsaValidationParameters.pas:30 +msgid "\"Seed\" Cannot Be Nil" +msgstr "" + +#. Programmer's name for it: SSeedNil +#: libraries/cryptolib4pascal/ClpDHValidationParams.pas:32 +msgid "Seed Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SPGenCounterNil +#: libraries/cryptolib4pascal/ClpDHValidationParams.pas:33 +msgid "PGenCounter Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SInvalidDHValidationParams +#: libraries/cryptolib4pascal/ClpDHValidationParams.pas:35 +msgid "Invalid DHValidationParams: %s" +msgstr "" + +#. Programmer's name for it: SOutputBufferTooShort +#: libraries/cryptolib4pascal/ClpDigest.pas:31 +#. Programmer's name for it: SOutputBufferTooShort +#: libraries/cryptolib4pascal/ClpHMac.pas:34 +#. Programmer's name for it: SOutputBufferTooShort +#: libraries/hashlib4pascal/HlpBlake2B.pas:27 +#. Programmer's name for it: SOutputBufferTooShort +#: libraries/hashlib4pascal/HlpBlake2S.pas:27 +#. Programmer's name for it: SOutputBufferTooShort +#: libraries/hashlib4pascal/HlpSHA3.pas:29 +msgid "Output Buffer Too Short" +msgstr "" + +#. Programmer's name for it: SUnRecognizedDigest +#: libraries/cryptolib4pascal/ClpDigestUtilities.pas:43 +msgid "Digest \"%s\" not recognised." +msgstr "" + +#. Programmer's name for it: SPrivateKey +#: libraries/cryptolib4pascal/ClpDsaDigestSigner.pas:41 +#. Programmer's name for it: SPrivateKey +#: libraries/cryptolib4pascal/ClpSchnorrDigestSigner.pas:40 +msgid "Signing Requires Private Key." +msgstr "" + +#. Programmer's name for it: SPublicKey +#: libraries/cryptolib4pascal/ClpDsaDigestSigner.pas:42 +#. Programmer's name for it: SPublicKey +#: libraries/cryptolib4pascal/ClpSchnorrDigestSigner.pas:41 +msgid "Verification Requires Public Key." +msgstr "" + +#. Programmer's name for it: SPublicKey +#: libraries/cryptolib4pascal/ClpDsaDigestSigner.pas:44 +msgid "DSADigestSigner not Initialized for Signature " +"Generation." +msgstr "" + +#. Programmer's name for it: SPublicKey +#: libraries/cryptolib4pascal/ClpDsaDigestSigner.pas:46 +msgid "DSADigestSigner not Initialized for " +"Verification" +msgstr "" + +#. Programmer's name for it: SEncodingError +#: libraries/cryptolib4pascal/ClpDsaDigestSigner.pas:47 +#. Programmer's name for it: SEncodingError +#: libraries/cryptolib4pascal/ClpSchnorrDigestSigner.pas:46 +msgid "Unable to Encode Signature" +msgstr "" + +#. Programmer's name for it: SInvalidDsaParameter +#: libraries/cryptolib4pascal/ClpDsaParameter.pas:33 +msgid "Invalid DsaParameter: %s" +msgstr "" + +#. Programmer's name for it: SQUnInitialized +#: libraries/cryptolib4pascal/ClpDsaParameters.pas:33 +msgid "\"Q\" Cannot Be Uninitialized" +msgstr "" + +#: libraries/cryptolib4pascal/ClpDsaParametersGenerator.pas:44 +msgid "L Values Must be Between 1024 and 3072 and a Multiple of " +"1024" +msgstr "" + +#. Programmer's name for it: SInvalidNValueForSpecifiedL +#: libraries/cryptolib4pascal/ClpDsaParametersGenerator.pas:45 +msgid "N Must be \" %d \" for L = \" %d \"" +msgstr "" + +#. Programmer's name for it: SInvalidNValueForSpecifiedL_Two +#: libraries/cryptolib4pascal/ClpDsaParametersGenerator.pas:46 +msgid "N Must be \" %d \" or \" %d \" for L = \" %d " +"\"" +msgstr "" + +#. Programmer's name for it: SInvalidNValueForSpecifiedL_Two +#: libraries/cryptolib4pascal/ClpDsaParametersGenerator.pas:48 +msgid "Digest Output Size Too Small for Value of N Which is \" %d " +"\"" +msgstr "" + +#. Programmer's name for it: SInvalidNValueForSpecifiedL_Two +#: libraries/cryptolib4pascal/ClpDsaParametersGenerator.pas:50 +msgid "Can Only Use SHA-1 For Generating FIPS 186-2 " +"Parameters" +msgstr "" + +#. Programmer's name for it: SInvalidNValueForSpecifiedL_Two +#: libraries/cryptolib4pascal/ClpDsaParametersGenerator.pas:52 +msgid "Size Must Be From %d - %d and a multiple of %d, " +"\"%d\"" +msgstr "" + +#. Programmer's name for it: SDSAPrivateKeyNotFound +#: libraries/cryptolib4pascal/ClpDsaSigner.pas:44 +msgid "DSA Private Key Required For Signing" +msgstr "" + +#. Programmer's name for it: SDSAPublicKeyNotFound +#: libraries/cryptolib4pascal/ClpDsaSigner.pas:45 +msgid "DSA Public Key Required For Verification" +msgstr "" + +#: libraries/cryptolib4pascal/ClpECAlgorithms.pas:43 +msgid "Point and Scalar Arrays Should be Non-Null, and of Equal, Non-Zero, " +"Length" +msgstr "" + +#. Programmer's name for it: SInvalidPointLocation +#: libraries/cryptolib4pascal/ClpECAlgorithms.pas:44 +msgid "Point Must be on the Same Curve" +msgstr "" + +#. Programmer's name for it: SInvalidPoint +#: libraries/cryptolib4pascal/ClpECAlgorithms.pas:45 +msgid "Invalid Point, \"P\"" +msgstr "" + +#. Programmer's name for it: SInvalidResult +#: libraries/cryptolib4pascal/ClpECAlgorithms.pas:46 +msgid "Invalid Result" +msgstr "" + +#. Programmer's name for it: SInvalidResult +#: libraries/cryptolib4pascal/ClpECAlgorithms.pas:48 +#: libraries/cryptolib4pascal/ClpMultipliers.pas:46 +msgid "Fixed-Point Comb Doesn't Support Scalars Larger Than The Curve " +"Order" +msgstr "" + +#. Programmer's name for it: SInvalidValue +#: libraries/cryptolib4pascal/ClpECC.pas:52 +msgid "Value Invalid in Fp Field Element, \" x " +"\"" +msgstr "" + +#. Programmer's name for it: SInvalidValue2 +#: libraries/cryptolib4pascal/ClpECC.pas:53 +msgid "Value Invalid in F2m Field Element, " +"\"x\"" +msgstr "" + +#. Programmer's name for it: SInvalidK2Value +#: libraries/cryptolib4pascal/ClpECC.pas:54 +msgid "k2 must be smaller than k3" +msgstr "" + +#. Programmer's name for it: SInvalidK2Value2 +#: libraries/cryptolib4pascal/ClpECC.pas:55 +msgid "k2 must be larger than 0" +msgstr "" + +#. Programmer's name for it: SInvalidK2Value2 +#: libraries/cryptolib4pascal/ClpECC.pas:57 +msgid "Field elements are not both instances of " +"F2mFieldElement" +msgstr "" + +#. Programmer's name for it: SInvalidK2Value2 +#: libraries/cryptolib4pascal/ClpECC.pas:59 +msgid "Field elements are not elements of the same field " +"F2m" +msgstr "" + +#. Programmer's name for it: SInvalidK2Value2 +#: libraries/cryptolib4pascal/ClpECC.pas:61 +msgid "One of the F2m field elements has incorrect " +"representation" +msgstr "" + +#. Programmer's name for it: SEvenValue +#: libraries/cryptolib4pascal/ClpECC.pas:62 +msgid "Even Value of Q" +msgstr "" + +#. Programmer's name for it: STraceInternalErrorCalculation +#: libraries/cryptolib4pascal/ClpECC.pas:63 +msgid "Internal Error in Trace Calculation" +msgstr "" + +#. Programmer's name for it: SHalfTraceUndefinedForM +#: libraries/cryptolib4pascal/ClpECC.pas:64 +msgid "Half-Trace Only Defined For Odd M" +msgstr "" + +#. Programmer's name for it: SUnSupportedCoordinateSystem +#: libraries/cryptolib4pascal/ClpECC.pas:65 +msgid "UnSupported Coordinate System" +msgstr "" + +#. Programmer's name for it: SCurrentCurve +#: libraries/cryptolib4pascal/ClpECC.pas:66 +msgid "Implementation returned Current Curve" +msgstr "" + +#. Programmer's name for it: SInvalidPointCoordinates +#: libraries/cryptolib4pascal/ClpECC.pas:67 +msgid "Invalid Point Coordinates" +msgstr "" + +#. Programmer's name for it: SInvalidAffineCoordinates +#: libraries/cryptolib4pascal/ClpECC.pas:68 +msgid "not valid for affine coordinates, \"iso\"" +msgstr "" + +#. Programmer's name for it: SInvalidPointOnCurve +#: libraries/cryptolib4pascal/ClpECC.pas:69 +msgid "must be non-null and on this curve, " +"\"point\"" +msgstr "" + +#. Programmer's name for it: SInvalidPointOnCurve2 +#: libraries/cryptolib4pascal/ClpECC.pas:70 +msgid "Entries must be null or on this curve, " +"\"points\"" +msgstr "" + +#. Programmer's name for it: SPointsNil +#: libraries/cryptolib4pascal/ClpECC.pas:71 +msgid "points" +msgstr "" + +#. Programmer's name for it: SInvalidRangeSpecified +#: libraries/cryptolib4pascal/ClpECC.pas:72 +msgid "Invalid Range Specified\", \"points\"" +msgstr "" + +#. Programmer's name for it: SInvalidPointCompression +#: libraries/cryptolib4pascal/ClpECC.pas:73 +msgid "Invalid Point Compression" +msgstr "" + +#. Programmer's name for it: SInvalidK1 +#: libraries/cryptolib4pascal/ClpECC.pas:74 +msgid "k1 must be > 0" +msgstr "" + +#. Programmer's name for it: SInvalidK3 +#: libraries/cryptolib4pascal/ClpECC.pas:75 +msgid "k3 must be 0 if k2 == 0" +msgstr "" + +#. Programmer's name for it: SK2K1MisMatch +#: libraries/cryptolib4pascal/ClpECC.pas:76 +msgid "k2 must be > k1" +msgstr "" + +#. Programmer's name for it: SK3K2Mismatch +#: libraries/cryptolib4pascal/ClpECC.pas:77 +msgid "k3 must be > k2" +msgstr "" + +#. Programmer's name for it: SInvalidInfinityEncoding +#: libraries/cryptolib4pascal/ClpECC.pas:78 +msgid "Invalid Infinity Encoding, \"encoded\"" +msgstr "" + +#. Programmer's name for it: SInvalidPointEncoding +#: libraries/cryptolib4pascal/ClpECC.pas:79 +msgid "Invalid Point Encoding %u" +msgstr "" + +#. Programmer's name for it: SInvalidPointEncoding +#: libraries/cryptolib4pascal/ClpECC.pas:81 +msgid "Incorrect Length for infinity encoding\", " +"\"encoded\"" +msgstr "" + +#. Programmer's name for it: SInvalidPointEncoding +#: libraries/cryptolib4pascal/ClpECC.pas:83 +msgid "Incorrect Length for Compressed Encoding\", " +"\"encoded\"" +msgstr "" + +#. Programmer's name for it: SInvalidPoint +#: libraries/cryptolib4pascal/ClpECC.pas:84 +msgid "Invalid Point" +msgstr "" + +#. Programmer's name for it: SInvalidPoint +#: libraries/cryptolib4pascal/ClpECC.pas:86 +msgid "Incorrect Length for UnCompressed Encoding\", " +"\"encoded\"" +msgstr "" + +#. Programmer's name for it: SInvalidPoint +#: libraries/cryptolib4pascal/ClpECC.pas:88 +msgid "Incorrect Length for Hybrid Encoding\", " +"\"encoded\"" +msgstr "" + +#. Programmer's name for it: SInvalidPoint +#: libraries/cryptolib4pascal/ClpECC.pas:90 +msgid "Inconsistent Y Coordinate in Hybrid Encoding\", " +"\"encoded\"" +msgstr "" + +#. Programmer's name for it: SUnknownCoordSystem +#: libraries/cryptolib4pascal/ClpECC.pas:91 +msgid "Unknown Coordinate System" +msgstr "" + +#. Programmer's name for it: SPointNotInNormalForm +#: libraries/cryptolib4pascal/ClpECC.pas:92 +msgid "Point not in Normal Form" +msgstr "" + +#. Programmer's name for it: SNotProjectiveCoordSystem +#: libraries/cryptolib4pascal/ClpECC.pas:93 +msgid "Not a Projective Coordinate System" +msgstr "" + +#. Programmer's name for it: SCannotBeNegative +#: libraries/cryptolib4pascal/ClpECC.pas:94 +msgid "Cannot be Negative, \"e\"" +msgstr "" + +#. Programmer's name for it: SNilFieldElement +#: libraries/cryptolib4pascal/ClpECC.pas:95 +msgid "Exactly one of the Field Elements is " +"Nil" +msgstr "" + +#. Programmer's name for it: SUnsupportedOperation +#: libraries/cryptolib4pascal/ClpECC.pas:96 +msgid "Constant-time Lookup not Supported" +msgstr "" + +#. Programmer's name for it: SInvalidRange +#: libraries/cryptolib4pascal/ClpECCompUtilities.pas:43 +msgid "Must be in the Range [2, 16], \"width\"" +msgstr "" + +#. Programmer's name for it: SInvalidRange2 +#: libraries/cryptolib4pascal/ClpECCompUtilities.pas:44 +msgid "Must be in the Range [2, 8], \"width\"" +msgstr "" + +#. Programmer's name for it: SWrongDomainParameter +#: libraries/cryptolib4pascal/ClpECDHBasicAgreement.pas:39 +msgid "ECDH Public Key has Wrong Domain Parameters" +msgstr "" + +#. Programmer's name for it: SInvalidAgreementValue +#: libraries/cryptolib4pascal/ClpECDHBasicAgreement.pas:40 +msgid "Infinity is not a Valid Agreement Value for " +"ECDH" +msgstr "" + +#. Programmer's name for it: SInfinityInvalidPublicKey +#: libraries/cryptolib4pascal/ClpECDHBasicAgreement.pas:41 +msgid "Infinity is not a Valid Public Key for " +"ECDH" +msgstr "" + +#. Programmer's name for it: SWrongDomainParameter +#: libraries/cryptolib4pascal/ClpECDHCBasicAgreement.pas:39 +msgid "ECDHC Public Key has Wrong Domain Parameters" +msgstr "" + +#. Programmer's name for it: SInvalidAgreementValue +#: libraries/cryptolib4pascal/ClpECDHCBasicAgreement.pas:40 +msgid "Infinity is not a Valid Agreement Value for " +"ECDHC" +msgstr "" + +#. Programmer's name for it: SInfinityInvalidPublicKey +#: libraries/cryptolib4pascal/ClpECDHCBasicAgreement.pas:41 +msgid "Infinity is not a Valid Public Key for " +"ECDHC" +msgstr "" + +#. Programmer's name for it: SCurveNil +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:33 +msgid "Curve Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SScalarNil +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:34 +msgid "Scalar Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SBigIntegerNotInitialized +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:36 +#. Programmer's name for it: SBigIntegerNotInitialized +#: libraries/cryptolib4pascal/ClpECPrivateKeyParameters.pas:32 +msgid "BigInteger Not Initialized \"%s\"" +msgstr "" + +#. Programmer's name for it: SQInfinity +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:38 +msgid "Point at Infinity \"Q\"" +msgstr "" + +#. Programmer's name for it: SQPointNotOnCurve +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:39 +msgid "Point Not on Curve \"Q\"" +msgstr "" + +#. Programmer's name for it: SScalarInvalidRange +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:40 +msgid "Scalar is not in the Interval [1, n - " +"1]" +msgstr "" + +#. Programmer's name for it: SECPublicKeyNotFound +#: libraries/cryptolib4pascal/ClpECDsaSigner.pas:47 +#. Programmer's name for it: SECPublicKeyNotFound +#: libraries/cryptolib4pascal/ClpECNRSigner.pas:47 +#. Programmer's name for it: SECPublicKeyNotFound +#: libraries/cryptolib4pascal/ClpECSchnorrSipaSigner.pas:45 +msgid "EC Public Key Required for Verification" +msgstr "" + +#. Programmer's name for it: SECPrivateKeyNotFound +#: libraries/cryptolib4pascal/ClpECDsaSigner.pas:48 +#. Programmer's name for it: SECPrivateKeyNotFound +#: libraries/cryptolib4pascal/ClpECNRSigner.pas:48 +#. Programmer's name for it: SECPrivateKeyNotFound +#: libraries/cryptolib4pascal/ClpECSchnorrSipaSigner.pas:46 +msgid "EC Private Key Required for Signing" +msgstr "" + +#. Programmer's name for it: SSenderPublicKeyInvalid +#: libraries/cryptolib4pascal/ClpECIESPublicKeyParser.pas:35 +msgid "Sender's Public Key Invalid." +msgstr "" + +#. Programmer's name for it: SSenderPublicKeyInvalid +#: libraries/cryptolib4pascal/ClpECIESPublicKeyParser.pas:37 +msgid "Sender's Public Key has Invalid Point Encoding " +"\"%x\"" +msgstr "" + +#. Programmer's name for it: SAlgorithmNil +#: libraries/cryptolib4pascal/ClpECKeyPairGenerator.pas:56 +#. Programmer's name for it: SAlgorithmNil +#: libraries/cryptolib4pascal/ClpECKeyParameters.pas:39 +msgid "Algorithm Cannot be Empty" +msgstr "" + +#. Programmer's name for it: SInvalidKeySize +#: libraries/cryptolib4pascal/ClpECKeyPairGenerator.pas:57 +msgid "Unknown Key Size \"%d\"" +msgstr "" + +#. Programmer's name for it: SParameterNil +#: libraries/cryptolib4pascal/ClpECKeyParameters.pas:40 +msgid "Parameter Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SUnRecognizedAlgorithm +#: libraries/cryptolib4pascal/ClpECKeyParameters.pas:41 +msgid "Unrecognised Algorithm: \" %s, \"Algorithm" +msgstr "" + +#. Programmer's name for it: SNotInitializedForSigning +#: libraries/cryptolib4pascal/ClpECNRSigner.pas:49 +#. Programmer's name for it: SNotInitializedForSigning +#: libraries/cryptolib4pascal/ClpECSchnorrSipaSigner.pas:47 +msgid "Not Initialised For Signing" +msgstr "" + +#. Programmer's name for it: SNotInitializedForVerifying +#: libraries/cryptolib4pascal/ClpECNRSigner.pas:50 +#. Programmer's name for it: SNotInitializedForVerifying +#: libraries/cryptolib4pascal/ClpECSchnorrSipaSigner.pas:48 +msgid "Not Initialised For Verifying" +msgstr "" + +#. Programmer's name for it: SNotInitializedForVerifying +#: libraries/cryptolib4pascal/ClpECNRSigner.pas:52 +msgid "Not Initialised For Verifying/Recovery" +msgstr "" + +#. Programmer's name for it: SInputTooLargeForECNRKey +#: libraries/cryptolib4pascal/ClpECNRSigner.pas:53 +msgid "Input Too Large For ECNR Key." +msgstr "" + +#. Programmer's name for it: SSignatureGenerationError +#: libraries/cryptolib4pascal/ClpECSchnorrSipaSigner.pas:49 +msgid "An Error Occurred During Signature Generation" +msgstr "" + +#. Programmer's name for it: SSignatureGenerationError +#: libraries/cryptolib4pascal/ClpECSchnorrSipaSigner.pas:51 +msgid "Only FP (Prime Field) Curves are Allowed for This Schnorr " +"Implementation" +msgstr "" + +#. Programmer's name for it: SInvalidCtx +#: libraries/cryptolib4pascal/ClpEd25519.pas:40 +msgid "ctx" +msgstr "" + +#. Programmer's name for it: SDigestError +#: libraries/cryptolib4pascal/ClpEd25519.pas:41 +msgid "Digest Produced Insufficient Data" +msgstr "" + +#. Programmer's name for it: SEOFInPrivateKey +#: libraries/cryptolib4pascal/ClpEd25519Blake2BPrivateKeyParameters.pas:38 +msgid "EOF encountered in middle of Ed25519Blake2B private " +"key" +msgstr "" + +#. Programmer's name for it: SUnsupportedAlgorithm +#: libraries/cryptolib4pascal/ClpEd25519Blake2BPrivateKeyParameters.pas:39 +#. Programmer's name for it: SUnsupportedAlgorithm +#: libraries/cryptolib4pascal/ClpEd25519PrivateKeyParameters.pas:39 +msgid "Unsupported Algorithm" +msgstr "" + +#. Programmer's name for it: SCtxNotNil +#: libraries/cryptolib4pascal/ClpEd25519Blake2BPrivateKeyParameters.pas:40 +#. Programmer's name for it: SCtxNotNil +#: libraries/cryptolib4pascal/ClpEd25519PrivateKeyParameters.pas:40 +msgid "Ctx must be Nil for Ed25519 Algorithm" +msgstr "" + +#. Programmer's name for it: SMsgLen +#: libraries/cryptolib4pascal/ClpEd25519Blake2BPrivateKeyParameters.pas:41 +#. Programmer's name for it: SMsgLen +#: libraries/cryptolib4pascal/ClpEd25519PrivateKeyParameters.pas:41 +msgid "MsgLen must be Equal to \"PreHashSize\" for Ed25519ph " +"Algorithm" +msgstr "" + +#. Programmer's name for it: SEOFInPublicKey +#: libraries/cryptolib4pascal/ClpEd25519Blake2BPublicKeyParameters.pas:34 +msgid "EOF encountered in middle of Ed25519Blake2B public " +"key" +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519Blake2BSigner.pas:37 +msgid "Ed25519Blake2BSigner not Initialised for Signature " +"Generation." +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519Blake2BSigner.pas:39 +msgid "Ed25519Blake2BSigner not Initialised for " +"Verification" +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519CtxBlake2BSigner.pas:37 +msgid "Ed25519CtxBlake2BSigner not Initialised for Signature " +"Generation." +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519CtxBlake2BSigner.pas:39 +msgid "Ed25519CtxBlake2BSigner not Initialised for " +"Verification" +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519CtxSigner.pas:37 +msgid "Ed25519CtxSigner not Initialised for Signature " +"Generation." +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519CtxSigner.pas:39 +msgid "Ed25519CtxSigner not Initialised for " +"Verification" +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519PhBlake2BSigner.pas:37 +msgid "Ed25519PhBlake2BSigner not Initialised for Signature " +"Generation." +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519PhBlake2BSigner.pas:39 +msgid "Ed25519PhBlake2BSigner not Initialised for " +"Verification" +msgstr "" + +#. Programmer's name for it: SPreHashDigestFailed +#: libraries/cryptolib4pascal/ClpEd25519PhBlake2BSigner.pas:40 +#. Programmer's name for it: SPreHashDigestFailed +#: libraries/cryptolib4pascal/ClpEd25519PhSigner.pas:40 +msgid "PreHash Digest Failed" +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519PhSigner.pas:37 +msgid "Ed25519PhSigner not Initialised for Signature " +"Generation." +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519PhSigner.pas:39 +msgid "Ed25519PhSigner not Initialised for " +"Verification" +msgstr "" + +#. Programmer's name for it: SEOFInPrivateKey +#: libraries/cryptolib4pascal/ClpEd25519PrivateKeyParameters.pas:38 +msgid "EOF encountered in middle of Ed25519 private " +"key" +msgstr "" + +#. Programmer's name for it: SEOFInPublicKey +#: libraries/cryptolib4pascal/ClpEd25519PublicKeyParameters.pas:34 +msgid "EOF encountered in middle of Ed25519 public " +"key" +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519Signer.pas:37 +msgid "Ed25519Signer not Initialised for Signature " +"Generation." +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519Signer.pas:39 +msgid "Ed25519Signer not Initialised for Verification" +msgstr "" + +#. Programmer's name for it: SInvalidCharacteristic +#: libraries/cryptolib4pascal/ClpFiniteFields.pas:35 +msgid "Must be >= 2 , \" characteristic \"" +msgstr "" + +#. Programmer's name for it: SInvalidCharacteristic +#: libraries/cryptolib4pascal/ClpFiniteFields.pas:37 +msgid "Irreducible polynomials in GF(2) must have constant term, " +"\"exponents\"" +msgstr "" + +#. Programmer's name for it: SInvalidCharacteristic +#: libraries/cryptolib4pascal/ClpFiniteFields.pas:39 +msgid "Polynomial Exponents must be montonically increasing\", " +"\"exponents\"" +msgstr "" + +#. Programmer's name for it: SKeyGeneratorAlgorithmNotRecognised +#: libraries/cryptolib4pascal/ClpGeneratorUtilities.pas:52 +msgid "KeyGenerator \"%s\" not Recognised." +msgstr "" + +#. Programmer's name for it: SKeyGeneratorAlgorithmNotRecognised +#: libraries/cryptolib4pascal/ClpGeneratorUtilities.pas:54 +msgid "KeyGenerator \"%s\" ( \"%s\" ) not Supported." +msgstr "" + +#. Programmer's name for it: SKeyGeneratorAlgorithmNotRecognised +#: libraries/cryptolib4pascal/ClpGeneratorUtilities.pas:56 +msgid "KeyPairGenerator \"%s\" not Recognised." +msgstr "" + +#. Programmer's name for it: SKeyGeneratorAlgorithmNotRecognised +#: libraries/cryptolib4pascal/ClpGeneratorUtilities.pas:58 +msgid "KeyPairGenerator \"%s\" ( \"%s\" ) not Supported." +msgstr "" + +#. Programmer's name for it: SSizeTooBigHKDF +#: libraries/cryptolib4pascal/ClpHkdfBytesGenerator.pas:39 +msgid "HKDF Cannot Generate More Than 255 Blocks of HashLen " +"Size" +msgstr "" + +#. Programmer's name for it: SSizeTooBigHKDF2 +#: libraries/cryptolib4pascal/ClpHkdfBytesGenerator.pas:40 +msgid "HKDF May Only Be Used For 255 * HashLen Bytes of " +"Output" +msgstr "" + +#. Programmer's name for it: SSizeTooBigHKDF2 +#: libraries/cryptolib4pascal/ClpHkdfBytesGenerator.pas:42 +msgid "HKDF Parameters Required For \"HkdfBytesGenerator\", " +"\"parameters\"" +msgstr "" + +#. Programmer's name for it: SIKMNil +#: libraries/cryptolib4pascal/ClpHkdfParameters.pas:30 +msgid "\"ikm\" is Nil" +msgstr "" + +#. Programmer's name for it: SUnSupportedOperation +#: libraries/cryptolib4pascal/ClpHMacDsaKCalculator.pas:42 +#. Programmer's name for it: SUnSupportedOperation +#: libraries/cryptolib4pascal/ClpRandomDsaKCalculator.pas:34 +msgid "Operation not Supported" +msgstr "" + +#: libraries/cryptolib4pascal/ClpIESCipher.pas:54 +msgid "Must be Passed Recipient's Public EC Key for " +"Encryption" +msgstr "" + +#: libraries/cryptolib4pascal/ClpIESCipher.pas:56 +msgid "Must be Passed Recipient's Private EC Key for " +"Decryption" +msgstr "" + +#. Programmer's name for it: SIAlgorithmParameterSpecNil +#: libraries/cryptolib4pascal/ClpIESCipher.pas:57 +msgid "Parameter Spec Cannot Be Nil" +msgstr "" + +#. Programmer's name for it: SUnableToProcessBlock +#: libraries/cryptolib4pascal/ClpIESCipher.pas:58 +msgid "Unable to Process Block. \"%s\"" +msgstr "" + +#. Programmer's name for it: SIESParameterSpecError +#: libraries/cryptolib4pascal/ClpIESCipher.pas:59 +msgid "Must be Passed IES Parameter Spec" +msgstr "" + +#. Programmer's name for it: SNonceInvalidLength +#: libraries/cryptolib4pascal/ClpIESCipher.pas:60 +msgid "Nonce in IES Parameters Needs to be \"%s\" Bytes " +"Long" +msgstr "" + +#: libraries/cryptolib4pascal/ClpIESEngine.pas:53 +#: libraries/cryptolib4pascal/ClpPascalCoinIESEngine.pas:45 +msgid "Unable to Recover Ephemeral Public Key: " +"\"%s\"" +msgstr "" + +#: libraries/cryptolib4pascal/ClpIESEngine.pas:55 +#: libraries/cryptolib4pascal/ClpPascalCoinIESEngine.pas:47 +msgid "Length of Input Must be Greater than the MAC and V " +"Combined" +msgstr "" + +#. Programmer's name for it: SInvalidMAC +#: libraries/cryptolib4pascal/ClpIESEngine.pas:56 +#. Programmer's name for it: SInvalidMAC +#: libraries/cryptolib4pascal/ClpPascalCoinIESEngine.pas:48 +msgid "Invalid MAC" +msgstr "" + +#. Programmer's name for it: SRandomNil +#: libraries/cryptolib4pascal/ClpKeyGenerationParameters.pas:30 +msgid "Random Class Instance Can't Be Nil" +msgstr "" + +#. Programmer's name for it: SInvalidStrength +#: libraries/cryptolib4pascal/ClpKeyGenerationParameters.pas:31 +msgid "Strength Must Be Greater Than Zero But Was Given " +"%d" +msgstr "" + +#. Programmer's name for it: SKeyNil +#: libraries/cryptolib4pascal/ClpKeyParameter.pas:31 +msgid "Key Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SInvalidKeyOffSet +#: libraries/cryptolib4pascal/ClpKeyParameter.pas:32 +msgid "Invalid Key OffSet" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/cryptolib4pascal/ClpKeyParameter.pas:33 +msgid "Invalid Key Length" +msgstr "" + +#. Programmer's name for it: SInvalidF2MFieldValue +#: libraries/cryptolib4pascal/ClpLongArray.pas:34 +msgid "Invalid F2M Field value, \"bigInt\"" +msgstr "" + +#. Programmer's name for it: SUnRecognizedMac +#: libraries/cryptolib4pascal/ClpMacUtilities.pas:40 +msgid "Mac \"%s\" not recognised." +msgstr "" + +#. Programmer's name for it: SCannotBeZero +#: libraries/cryptolib4pascal/ClpMod.pas:35 +msgid "cannot be 0, \"x\"" +msgstr "" + +#. Programmer's name for it: SCurveUnknownGroupOrder +#: libraries/cryptolib4pascal/ClpMultipliers.pas:47 +msgid "Need Curve With Known Group Order, \"curve\"" +msgstr "" + +#. Programmer's name for it: SInCompatiblePoint +#: libraries/cryptolib4pascal/ClpMultipliers.pas:48 +msgid "Only AbstractF2mPoint can be used in " +"WTauNafMultiplier" +msgstr "" + +#: libraries/cryptolib4pascal/ClpOSRandom.pas:72 +msgid "An Error Occured while generating random data using MS Windows " +"Cryptography API." +msgstr "" + +#: libraries/cryptolib4pascal/ClpOSRandom.pas:76 +msgid "An Error Occured while generating random data using " +"SecRandomCopyBytes API." +msgstr "" + +#: libraries/cryptolib4pascal/ClpOSRandom.pas:80 +#: libraries/cryptolib4pascal/ClpOSRandom.pas:84 +msgid "An Error Occured while generating random data using getRandom " +"API" +msgstr "" + +#: libraries/cryptolib4pascal/ClpOSRandom.pas:88 +msgid "An Error Occured while generating random data using arc4random_buf " +"API." +msgstr "" + +#. Programmer's name for it: SIncompleteLastBlockInDecryption +#: libraries/cryptolib4pascal/ClpPaddedBufferedBlockCipher.pas:41 +msgid "Last Block Incomplete in Decryption" +msgstr "" + +#. Programmer's name for it: SCorruptedPadBlock +#: libraries/cryptolib4pascal/ClpPaddingModes.pas:32 +msgid "Pad Block Corrupted" +msgstr "" + +#. Programmer's name for it: SIVNil +#: libraries/cryptolib4pascal/ClpParametersWithIV.pas:31 +msgid "IV Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SParameters +#: libraries/cryptolib4pascal/ClpParametersWithRandom.pas:32 +msgid "Parameters" +msgstr "" + +#. Programmer's name for it: SRandom +#: libraries/cryptolib4pascal/ClpParametersWithRandom.pas:33 +msgid "Random" +msgstr "" + +#. Programmer's name for it: SAlgorithmNotRecognised +#: libraries/cryptolib4pascal/ClpParameterUtilities.pas:38 +msgid "Algorithm \"%s\" not Recognised." +msgstr "" + +#. Programmer's name for it: SKDFParameterNotFound +#: libraries/cryptolib4pascal/ClpPascalCoinECIESKdfBytesGenerator.pas:37 +msgid "Specified Hash Cannot Produce Sufficient Data for the Specified " +"Operation." +msgstr "" + +#. Programmer's name for it: SCipherCannotbeNilInThisMode +#: libraries/cryptolib4pascal/ClpPascalCoinIESEngine.pas:49 +msgid "Cipher Cannot be Nil in This Mode." +msgstr "" + +#. Programmer's name for it: SBufferNil +#: libraries/cryptolib4pascal/ClpRandom.pas:30 +msgid "Buffer Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SMaxValueNegative +#: libraries/cryptolib4pascal/ClpRandom.pas:31 +msgid "maxValue Must be Positive" +msgstr "" + +#. Programmer's name for it: SInvalidMinValue +#: libraries/cryptolib4pascal/ClpRandom.pas:32 +msgid "minValue Cannot be Greater Than maxValue" +msgstr "" + +#. Programmer's name for it: SUnknownAlgorithm +#: libraries/cryptolib4pascal/ClpRandomNumberGenerator.pas:31 +msgid "Unknown Random Generation Algorithm " +"Requested" +msgstr "" + +#. Programmer's name for it: SUnknownAlgorithm +#: libraries/cryptolib4pascal/ClpRandomNumberGenerator.pas:33 +msgid "Random Number Generator Output Buffer Cannot Be " +"Nil" +msgstr "" + +#. Programmer's name for it: SUnsupportedBlock +#: libraries/cryptolib4pascal/ClpRijndaelEngine.pas:37 +msgid "Unknown Blocksize to Rijndael" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/cryptolib4pascal/ClpRijndaelEngine.pas:38 +msgid "Key Length not 128/160/192/224/256 bits." +msgstr "" + +#. Programmer's name for it: SRijndaelEngineNotInitialised +#: libraries/cryptolib4pascal/ClpRijndaelEngine.pas:39 +msgid "Rijndael Engine not Initialised" +msgstr "" + +#. Programmer's name for it: SRijndaelEngineNotInitialised +#: libraries/cryptolib4pascal/ClpRijndaelEngine.pas:41 +msgid "Invalid Parameter Passed to Rijndael Init - " +"\"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidRound +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:38 +msgid "\"rounds\" Must be a Positive, Even Number" +msgstr "" + +#. Programmer's name for it: SInvalidKeySize +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:39 +msgid "%s Requires 128 bit or 256 bit key" +msgstr "" + +#. Programmer's name for it: SMaxByteExceeded +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:40 +msgid "2^70 Byte Limit per IV; Change IV" +msgstr "" + +#. Programmer's name for it: SMaxByteExceededTwo +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:41 +msgid "2^70 byte limit per IV would be exceeded; Change " +"IV" +msgstr "" + +#. Programmer's name for it: SEngineNotInitialized +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:42 +msgid "%s not Initialized" +msgstr "" + +#. Programmer's name for it: SRoundsMustbeEven +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:45 +#. Programmer's name for it: SRoundsMustBeEven +#: libraries/hashlib4pascal/HlpPBKDF_ScryptNotBuildInAdapter.pas:37 +msgid "Number of Rounds Must be Even" +msgstr "" + +#. Programmer's name for it: SIVRequired +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:47 +msgid "%s Init Requires an IV, \"parameters\"" +msgstr "" + +#. Programmer's name for it: SInvalidIV +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:48 +msgid "%s Requires exactly %d bytes of IV" +msgstr "" + +#. Programmer's name for it: SInvalidIV +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:50 +msgid "%s Init Parameters must Contain a KeyParameter (or null for " +"Re-Init)" +msgstr "" + +#. Programmer's name for it: SInvalidIV +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:52 +msgid "KeyParameter can not be null for First " +"Initialisation" +msgstr "" + +#. Programmer's name for it: SInvalidParameters +#: libraries/cryptolib4pascal/ClpScalarSplitParameters.pas:30 +msgid "\"%s\" must consist of exactly 2 (initialized) " +"values" +msgstr "" + +#. Programmer's name for it: SPublicKey +#: libraries/cryptolib4pascal/ClpSchnorrDigestSigner.pas:43 +msgid "SchnorrDigestSigner not Initialized for Signature " +"Generation." +msgstr "" + +#. Programmer's name for it: SPublicKey +#: libraries/cryptolib4pascal/ClpSchnorrDigestSigner.pas:45 +msgid "SchnorrDigestSigner not Initialized for " +"Verification" +msgstr "" + +#: libraries/cryptolib4pascal/ClpSecP256K1Custom.pas:40 +msgid "Value Invalid for SecP256K1FieldElement " +"\"%s\"" +msgstr "" + +#: libraries/cryptolib4pascal/ClpSecP256R1Custom.pas:40 +msgid "Value Invalid for SecP256R1FieldElement " +"\"%s\"" +msgstr "" + +#: libraries/cryptolib4pascal/ClpSecP384R1Custom.pas:40 +msgid "Value Invalid for SecP384R1FieldElement " +"\"%s\"" +msgstr "" + +#: libraries/cryptolib4pascal/ClpSecP521R1Custom.pas:40 +msgid "Value Invalid for SecP521R1FieldElement " +"\"%s\"" +msgstr "" + +#: libraries/cryptolib4pascal/ClpSecT283Custom.pas:41 +msgid "Value Invalid for SecT283FieldElement " +"\"%s\"" +msgstr "" + +#. Programmer's name for it: SUnRecognisedPRNGAlgorithm +#: libraries/cryptolib4pascal/ClpSecureRandom.pas:43 +msgid "Unrecognised PRNG Algorithm: %s \"algorithm\"" +msgstr "" + +#. Programmer's name for it: SCannotBeNegative +#: libraries/cryptolib4pascal/ClpSecureRandom.pas:44 +msgid "Cannot be Negative \"maxValue\"" +msgstr "" + +#. Programmer's name for it: SInvalidMaxValue +#: libraries/cryptolib4pascal/ClpSecureRandom.pas:45 +msgid "maxValue Cannot be Less Than minValue" +msgstr "" + +#. Programmer's name for it: SMalformedSignature +#: libraries/cryptolib4pascal/ClpSignersEncodings.pas:35 +msgid "Malformed signature, \"%s\"" +msgstr "" + +#. Programmer's name for it: SValueOutOfRange +#: libraries/cryptolib4pascal/ClpSignersEncodings.pas:36 +msgid "Value out of range, \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidEncodingLength +#: libraries/cryptolib4pascal/ClpSignersEncodings.pas:37 +msgid "Encoding has incorrect length, \"%s\"" +msgstr "" + +#. Programmer's name for it: SUnRecognizedAlgorithm +#: libraries/cryptolib4pascal/ClpSignerUtilities.pas:71 +msgid "Signer \" %s \" not recognised." +msgstr "" + +#. Programmer's name for it: SInvalidScale +#: libraries/cryptolib4pascal/ClpSimpleBigDecimal.pas:29 +#. Programmer's name for it: SNegativeScale +#: libraries/cryptolib4pascal/ClpSimpleBigDecimal.pas:32 +msgid "Scale may not be Negative" +msgstr "" + +#. Programmer's name for it: SInvalidScale +#: libraries/cryptolib4pascal/ClpSimpleBigDecimal.pas:31 +msgid "Only SimpleBigDecimal of Same Scale Allowed in Arithmetic " +"Operations" +msgstr "" + +#. Programmer's name for it: SSpeckEngineNotInitialised +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:35 +#. Programmer's name for it: SSpeckLegacyEngineNotInitialised +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:35 +msgid "%s Engine not Initialised" +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:38 +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:38 +msgid "Invalid Argument Encountered." +msgstr "" + +#. Programmer's name for it: SInvalidParameterSpeckInit +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:39 +msgid "Invalid Parameter Passed to Speck Init - " +"\"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidParameterSpeckInit +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:41 +msgid "Speck32 requires a key of 64 bits but input was \"%d\" " +"bits." +msgstr "" + +#. Programmer's name for it: SInvalidParameterSpeckInit +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:43 +msgid "Speck48 requires a key of 72 or 96 bits but input was \"%d\" " +"bits." +msgstr "" + +#. Programmer's name for it: SInvalidParameterSpeckInit +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:45 +msgid "Speck64 requires a key of 96 or 128 bits but input was \"%d\" " +"bits." +msgstr "" + +#. Programmer's name for it: SInvalidParameterSpeckInit +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:47 +msgid "Speck96 requires a key of 96 or 144 bits but input was \"%d\" " +"bits." +msgstr "" + +#. Programmer's name for it: SInvalidParameterSpeckInit +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:49 +msgid "Speck128 requires a key of 128, 192 or 256 bits but input was \"%d\" " +"bits." +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:40 +msgid "Invalid Parameter Passed to SpeckLegacy Init - " +"\"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:42 +msgid "Speck32Legacy requires a key of 64 bits but input was \"%d\" " +"bits." +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:44 +msgid "Speck48Legacy requires a key of 72 or 96 bits but input was \"%d\" " +"bits." +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:46 +msgid "Speck64Legacy requires a key of 96 or 128 bits but input was \"%d\" " +"bits." +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:48 +msgid "Speck96Legacy requires a key of 96 or 144 bits but input was \"%d\" " +"bits." +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:50 +msgid "Speck128Legacy requires a key of 128, 192 or 256 bits but input was " +"\"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidMU +#: libraries/cryptolib4pascal/ClpTnaf.pas:34 +msgid "mu must be 1 or -1" +msgstr "" + +#. Programmer's name for it: SDifferentScales +#: libraries/cryptolib4pascal/ClpTnaf.pas:35 +msgid "lambda0 and lambda1 do not have same " +"scale" +msgstr "" + +#. Programmer's name for it: SNoKoblitzCurve +#: libraries/cryptolib4pascal/ClpTnaf.pas:36 +msgid "No Koblitz curve (ABC), TNAF multiplication not " +"possible" +msgstr "" + +#. Programmer's name for it: SNotKoblitzCurve +#: libraries/cryptolib4pascal/ClpTnaf.pas:37 +msgid "si is defined for Koblitz curves only" +msgstr "" + +#. Programmer's name for it: SInvalidCoFactor +#: libraries/cryptolib4pascal/ClpTnaf.pas:38 +msgid "h (Cofactor) must be 2 or 4" +msgstr "" + +#: libraries/cryptolib4pascal/ClpX25519Agreement.pas:36 +msgid "The Init Parameter does not Contain the Private " +"Key" +msgstr "" + +#. Programmer's name for it: SEOFInPrivateKey +#: libraries/cryptolib4pascal/ClpX25519PrivateKeyParameters.pas:37 +msgid "EOF encountered in middle of X25519 private " +"key" +msgstr "" + +#. Programmer's name for it: SAgreementCalculationFailed +#: libraries/cryptolib4pascal/ClpX25519PrivateKeyParameters.pas:38 +msgid "X25519 Agreement Failed" +msgstr "" + +#. Programmer's name for it: SEOFInPublicKey +#: libraries/cryptolib4pascal/ClpX25519PublicKeyParameters.pas:34 +msgid "EOF encountered in middle of X25519 public " +"key" +msgstr "" + +#. Programmer's name for it: SInconsistentKValues +#: libraries/cryptolib4pascal/ClpX9ECC.pas:36 +msgid "Inconsistent K Values" +msgstr "" + +#. Programmer's name for it: SCurveNil +#: libraries/cryptolib4pascal/ClpX9ECC.pas:37 +msgid "Curve" +msgstr "" + +#. Programmer's name for it: SNotImplementedECCurve +#: libraries/cryptolib4pascal/ClpX9ECC.pas:38 +msgid "This Type of ECCurve is not Implemented" +msgstr "" + +#. Programmer's name for it: SFieldIDNil +#: libraries/cryptolib4pascal/ClpX9ECC.pas:39 +msgid "FieldID" +msgstr "" + +#. Programmer's name for it: SSeqNil +#: libraries/cryptolib4pascal/ClpX9ECC.pas:40 +msgid "Seq" +msgstr "" + +#. Programmer's name for it: SUnSupportedCurveOne +#: libraries/cryptolib4pascal/ClpX9ECParameters.pas:38 +msgid "Only trinomial and pentomial curves are " +"supported" +msgstr "" + +#. Programmer's name for it: SUnSupportedCurveTwo +#: libraries/cryptolib4pascal/ClpX9ECParameters.pas:39 +msgid "\"curve\" is of an unsupported type" +msgstr "" + +#. Programmer's name for it: SBadVersion +#: libraries/cryptolib4pascal/ClpX9ECParameters.pas:40 +msgid "Bad Version in X9ECParameters" +msgstr "" + +#. Programmer's name for it: SNullKeyReInit +#: libraries/cryptolib4pascal/ClpXSalsa20Engine.pas:33 +msgid "%s Doesn't Support Re-Init with Null " +"Key" +msgstr "" + +#. Programmer's name for it: SInvalidKeySize +#: libraries/cryptolib4pascal/ClpXSalsa20Engine.pas:34 +msgid "%s Requires a 256 bit Key" +msgstr "" + +#. Programmer's name for it: SArgumentOutOfRange +#: libraries/generics.collections/generics.strings.pas:26 +msgid "Argument out of range" +msgstr "" + +#. Programmer's name for it: SArgumentNilNode +#: libraries/generics.collections/generics.strings.pas:27 +msgid "Node is nil" +msgstr "" + +#. Programmer's name for it: SDuplicatesNotAllowed +#: libraries/generics.collections/generics.strings.pas:28 +msgid "Duplicates not allowed in dictionary" +msgstr "" + +#. Programmer's name for it: SCollectionInconsistency +#: libraries/generics.collections/generics.strings.pas:29 +msgid "Collection inconsistency" +msgstr "" + +#. Programmer's name for it: SCollectionDuplicate +#: libraries/generics.collections/generics.strings.pas:30 +msgid "Collection does not allow duplicates" +msgstr "" + +#. Programmer's name for it: SDictionaryKeyDoesNotExist +#: libraries/generics.collections/generics.strings.pas:31 +msgid "Dictionary key does not exist" +msgstr "" + +#. Programmer's name for it: SItemNotFound +#: libraries/generics.collections/generics.strings.pas:32 +msgid "Item not found" +msgstr "" + +#. Programmer's name for it: SInvalidConfigLength +#: libraries/hashlib4pascal/HlpBlake2B.pas:22 +#. Programmer's name for it: SInvalidConfigLength +#: libraries/hashlib4pascal/HlpBlake2S.pas:22 +msgid "Config Length Must Be 8 Words" +msgstr "" + +#. Programmer's name for it: SConfigNil +#: libraries/hashlib4pascal/HlpBlake2B.pas:23 +#. Programmer's name for it: SConfigNil +#: libraries/hashlib4pascal/HlpBlake2S.pas:23 +msgid "Config Cannot Be Nil" +msgstr "" + +#. Programmer's name for it: SConfigNil +#: libraries/hashlib4pascal/HlpBlake2B.pas:25 +#. Programmer's name for it: SConfigNil +#: libraries/hashlib4pascal/HlpBlake2S.pas:25 +msgid "XOFSize in Bits must be Multiples of 8 and be Between %u and %u " +"Bytes." +msgstr "" + +#. Programmer's name for it: SOutputLengthInvalid +#: libraries/hashlib4pascal/HlpBlake2B.pas:26 +#. Programmer's name for it: SOutputLengthInvalid +#: libraries/hashlib4pascal/HlpBlake2S.pas:26 +#. Programmer's name for it: SOutputLengthInvalid +#: libraries/hashlib4pascal/HlpSHA3.pas:28 +msgid "Output Length is above the Digest Length" +msgstr "" + +#. Programmer's name for it: SMaximumOutputLengthExceeded +#: libraries/hashlib4pascal/HlpBlake2B.pas:28 +msgid "\"Maximum Length is 2^32 blocks of 64 " +"bytes" +msgstr "" + +#. Programmer's name for it: SWritetoXofAfterReadError +#: libraries/hashlib4pascal/HlpBlake2B.pas:29 +#. Programmer's name for it: SWritetoXofAfterReadError +#: libraries/hashlib4pascal/HlpBlake2S.pas:29 +#. Programmer's name for it: SWritetoXofAfterReadError +#: libraries/hashlib4pascal/HlpSHA3.pas:30 +msgid "\"%s\" Write to Xof after Read not Allowed" +msgstr "" + +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:16 +msgid "BLAKE2B HashSize must be restricted to one of the following [1 .. " +"64], \"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:17 +msgid "\"Key\" Length Must Not Be Greater Than 64, " +"\"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:19 +msgid "\"Personalisation\" Length Must Be Equal To 16, " +"\"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:20 +msgid "\"Salt\" Length Must Be Equal To 16, \"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:23 +msgid "FanOut Value Should be Between [0 .. 255] for " +"Blake2B" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:25 +msgid "MaxDepth Value Should be Between [1 .. 255] for " +"Blake2B" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:27 +msgid "NodeDepth Value Should be Between [0 .. 255] for " +"Blake2B" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:29 +msgid "InnerHashSize Value Should be Between [0 .. 64] for " +"Blake2B" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:31 +msgid "NodeOffset Value Should be Between [0 .. (2^64-1)] for " +"Blake2B" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:34 +msgid "Tree Inner Hash Size Must Not Be Greater Than 64, " +"\"%d\"" +msgstr "" + +#. Programmer's name for it: SMaximumOutputLengthExceeded +#: libraries/hashlib4pascal/HlpBlake2S.pas:28 +msgid "\"Maximum Length is 2^32 blocks of 32 " +"bytes" +msgstr "" + +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:16 +msgid "BLAKE2S HashSize must be restricted to one of the following [1 .. " +"32], \"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:17 +msgid "\"Key\" Length Must Not Be Greater Than 32, " +"\"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:19 +msgid "\"Personalisation\" Length Must Be Equal To 8, " +"\"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:20 +msgid "\"Salt\" Length Must Be Equal To 8, \"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:23 +msgid "FanOut Value Should be Between [0 .. 255] for " +"Blake2S" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:25 +msgid "MaxDepth Value Should be Between [1 .. 255] for " +"Blake2S" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:27 +msgid "NodeDepth Value Should be Between [0 .. 255] for " +"Blake2S" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:29 +msgid "InnerHashSize Value Should be Between [0 .. 32] for " +"Blake2S" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:31 +msgid "NodeOffset Value Should be Between [0 .. (2^48-1)] for " +"Blake2S" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:34 +msgid "Tree Inner Hash Size Must Not Be Greater Than 32, " +"\"%d\"" +msgstr "" + +#. Programmer's name for it: SUnSupportedCRCType +#: libraries/hashlib4pascal/HlpCRC.pas:22 +msgid "UnSupported CRC Type: \"%s\"" +msgstr "" + +#. Programmer's name for it: SWidthOutOfRange +#: libraries/hashlib4pascal/HlpCRC.pas:23 +msgid "Width Must be Between 3 and 64. \"%d\"" +msgstr "" + +#. Programmer's name for it: SIndexOutOfRange +#: libraries/hashlib4pascal/HlpHash.pas:16 +msgid "Current Index Is Out Of Range" +msgstr "" + +#. Programmer's name for it: SFileNotExist +#: libraries/hashlib4pascal/HlpHash.pas:19 +msgid "Specified File Not Found" +msgstr "" + +#. Programmer's name for it: SCloneNotYetImplemented +#: libraries/hashlib4pascal/HlpHash.pas:20 +msgid "Clone Not Yet Implemented For \"%s\"" +msgstr "" + +#. Programmer's name for it: SHashBufferMessage +#: libraries/hashlib4pascal/HlpHashBuffer.pas:13 +msgid "HashBuffer, Length: %d, Position: %d, IsEmpty: " +"%s" +msgstr "" + +#: libraries/hashlib4pascal/HlpHashResult.pas:27 +msgid "Current Data Structure cannot be Represented as an \"Int32\" " +"Type." +msgstr "" + +#: libraries/hashlib4pascal/HlpHashResult.pas:29 +msgid "Current Data Structure cannot be Represented as an \"UInt8\" " +"Type." +msgstr "" + +#: libraries/hashlib4pascal/HlpHashResult.pas:31 +msgid "Current Data Structure cannot be Represented as an \"UInt16\" " +"Type." +msgstr "" + +#: libraries/hashlib4pascal/HlpHashResult.pas:33 +msgid "Current Data Structure cannot be Represented as an \"UInt32\" " +"Type." +msgstr "" + +#: libraries/hashlib4pascal/HlpHashResult.pas:35 +msgid "Current Data Structure cannot be Represented as an \"UInt64\" " +"Type." +msgstr "" + +#. Programmer's name for it: SInvalidHavalRound +#: libraries/hashlib4pascal/HlpHaval.pas:25 +msgid "Haval Round Must be 3, 4 or 5" +msgstr "" + +#. Programmer's name for it: SInvalidHavalRound +#: libraries/hashlib4pascal/HlpHaval.pas:27 +msgid "Haval HashSize Must be Either 128 bit(16 byte), 160 bit(20 byte), 192 " +"bit(24 byte), 224 bit(28 byte) or 256 bit(32 " +"byte)" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpMurmur2.pas:24 +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpMurmur2_64.pas:21 +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpMurmurHash3_x64_128.pas:22 +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpMurmurHash3_x86_128.pas:22 +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpMurmurHash3_x86_32.pas:22 +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpSipHash.pas:23 +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpXXHash32.pas:19 +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpXXHash64.pas:19 +msgid "KeyLength Must Be Equal to %d" +msgstr "" + +#: libraries/hashlib4pascal/HlpNullable.pas:16 +msgid "Cannot assign non-null pointer to nullable " +"type." +msgstr "" + +#: libraries/hashlib4pascal/HlpNullable.pas:18 +msgid "Unsupported Type: Only supports Integers, Int64, Floats and " +"Strings." +msgstr "" + +#. Programmer's name for it: SGetNullValue +#: libraries/hashlib4pascal/HlpNullable.pas:19 +msgid "Attempted to get a null value." +msgstr "" + +#. Programmer's name for it: SHashSizeNotImplemented +#: libraries/hashlib4pascal/HlpNullDigest.pas:18 +msgid "HashSize Not Implemented For \"%s\"" +msgstr "" + +#. Programmer's name for it: SBlockSizeNotImplemented +#: libraries/hashlib4pascal/HlpNullDigest.pas:19 +msgid "BlockSize Not Implemented For \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidOutputByteCount +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:32 +msgid "\"(AByteCount)\" Argument Less Than \"%d\"." +msgstr "" + +#. Programmer's name for it: SBlockInstanceNotInitialized +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:33 +msgid "Block Instance not Initialized" +msgstr "" + +#. Programmer's name for it: SInputLengthInvalid +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:34 +msgid "Input Length \"%d\" is not Equal to BlockSize " +"\"%d\"" +msgstr "" + +#. Programmer's name for it: SLanesTooSmall +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:35 +msgid "Lanes Must be Greater Than \"%d\"" +msgstr "" + +#. Programmer's name for it: SLanesTooBig +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:36 +msgid "Lanes Must be Less Than \"%d\"" +msgstr "" + +#. Programmer's name for it: SMemoryTooSmall +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:37 +msgid "Memory is Less Than: \"%d\", Expected " +"\"%d\"" +msgstr "" + +#. Programmer's name for it: SIterationsTooSmall +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:38 +msgid "Iterations is Less Than: \"%d\"" +msgstr "" + +#. Programmer's name for it: SIterationsTooSmall +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:40 +msgid "Argon2 Parameter Builder Not Initialized" +msgstr "" + +#: libraries/hashlib4pascal/HlpPBKDF_ScryptNotBuildInAdapter.pas:31 +#: libraries/hashlib4pascal/HlpPBKDF2_HMACNotBuildInAdapter.pas:18 +msgid "\"(AByteCount)\" Argument must be a value greater than " +"zero." +msgstr "" + +#. Programmer's name for it: SInvalidCost +#: libraries/hashlib4pascal/HlpPBKDF_ScryptNotBuildInAdapter.pas:32 +msgid "Cost parameter must be > 1 and a power of " +"2." +msgstr "" + +#. Programmer's name for it: SBlockSizeAndCostIncompatible +#: libraries/hashlib4pascal/HlpPBKDF_ScryptNotBuildInAdapter.pas:33 +msgid "Cost parameter must be > 1 and < 65536." +msgstr "" + +#. Programmer's name for it: SBlockSizeTooSmall +#: libraries/hashlib4pascal/HlpPBKDF_ScryptNotBuildInAdapter.pas:34 +msgid "Block size must be >= 1." +msgstr "" + +#. Programmer's name for it: SBlockSizeTooSmall +#: libraries/hashlib4pascal/HlpPBKDF_ScryptNotBuildInAdapter.pas:36 +msgid "Parallelism parameter must be >= 1 and <= %d (based on block size of " +"%d)" +msgstr "" + +#. Programmer's name for it: SInvalidIndex +#: libraries/hashlib4pascal/HlpPBKDF2_HMACNotBuildInAdapter.pas:19 +msgid "Invalid start or end index in the internal " +"buffer" +msgstr "" + +#. Programmer's name for it: SNotInitializedIHashInstance +#: libraries/hashlib4pascal/HlpPBKDF2_HMACNotBuildInAdapter.pas:20 +msgid "\"IHash\" instance is uninitialized" +msgstr "" + +#. Programmer's name for it: SIterationtooSmall +#: libraries/hashlib4pascal/HlpPBKDF2_HMACNotBuildInAdapter.pas:21 +msgid "Iteration must be greater than zero." +msgstr "" + +#. Programmer's name for it: SInvalidHashMode +#: libraries/hashlib4pascal/HlpSHA3.pas:25 +msgid "Only \"[%s]\" HashModes are Supported" +msgstr "" + +#. Programmer's name for it: SInvalidHashMode +#: libraries/hashlib4pascal/HlpSHA3.pas:27 +msgid "XOFSize in Bits must be Multiples of 8 and be Greater than Zero " +"Bytes" +msgstr "" + +#: libraries/hashlib4pascal/HlpSnefru.pas:24 +msgid "Snefru Security Level Cannot be Less than 1. Standard Level is " +"8" +msgstr "" + +#: libraries/hashlib4pascal/HlpSnefru.pas:26 +msgid "Snefru HashSize Must be Either 128 bit(16 byte) or 256 bit(32 " +"byte)" +msgstr "" + +#. Programmer's name for it: SInvalidHashSize +#: libraries/hashlib4pascal/HlpSnefru.pas:27 +msgid "Specified HashSize Is Invalid or UnSupported " +"\"%d\"" +msgstr "" + +#: libraries/hashlib4pascal/HlpTiger.pas:22 +msgid "Tiger HashSize Must be Either 128 bit(16 byte), 160 bit(20 byte) or " +"192 bit(24 byte)" +msgstr "" + +#. Programmer's name for it: SInvalidHashRound +#: libraries/hashlib4pascal/HlpTiger.pas:23 +#. Programmer's name for it: SInvalidHashRound +#: libraries/hashlib4pascal/HlpTiger2.pas:23 +msgid "Specified HashRound Is Invalid or UnSupported " +"\"%d\"" +msgstr "" + +#: libraries/hashlib4pascal/HlpTiger2.pas:22 +msgid "Tiger2 HashSize Must be Either 128 bit(16 byte), 160 bit(20 byte) or " +"192 bit(24 byte)" +msgstr "" + +#. Programmer's name for it: sInvalidIPAddress +#: libraries/mormot-min/SynCommons.pas:18356 +msgid "\"%s\" is an invalid IP v4 address" +msgstr "" + +#. Programmer's name for it: sInvalidEmailAddress +#: libraries/mormot-min/SynCommons.pas:18357 +msgid "\"%s\" is an invalid email address" +msgstr "" + +#. Programmer's name for it: sInvalidPattern +#: libraries/mormot-min/SynCommons.pas:18358 +msgid "\"%s\" does not match the expected pattern" +msgstr "" + +#. Programmer's name for it: sCharacter01n +#: libraries/mormot-min/SynCommons.pas:18359 +msgid "character,character,characters" +msgstr "" + +#. Programmer's name for it: sInvalidTextLengthMin +#: libraries/mormot-min/SynCommons.pas:18360 +msgid "Expect at least %d %s" +msgstr "" + +#. Programmer's name for it: sInvalidTextLengthMax +#: libraries/mormot-min/SynCommons.pas:18361 +msgid "Expect up to %d %s" +msgstr "" + +#. Programmer's name for it: sInvalidTextChar +#: libraries/mormot-min/SynCommons.pas:18364 +msgid "Expect at least %d %s %s,Expect up to %d %s " +"%s,alphabetical,digital,punctuation,lowercase,uppercase,space,Too " +"much spaces on the left,Too much spaces on the " +"right" +msgstr "" + +#. Programmer's name for it: sValidationFailed +#: libraries/mormot-min/SynCommons.pas:18365 +msgid "\"%s\" rule failed" +msgstr "" + +#. Programmer's name for it: sValidationFieldVoid +#: libraries/mormot-min/SynCommons.pas:18366 +msgid "An unique key field must not be void" +msgstr "" + +#. Programmer's name for it: sValidationFieldDuplicate +#: libraries/mormot-min/SynCommons.pas:18367 +msgid "Value already used for this unique key " +"field" +msgstr "" + +#. Programmer's name for it: Sneed_dict +#: libraries/paszlib/paszlib_zbase.pas:409 +msgid "need dictionary" +msgstr "" + +#. Programmer's name for it: Sstream_end +#: libraries/paszlib/paszlib_zbase.pas:410 +msgid "stream end" +msgstr "" + +#. Programmer's name for it: Sfile_error +#: libraries/paszlib/paszlib_zbase.pas:411 +msgid "file error" +msgstr "" + +#. Programmer's name for it: Sstream_error +#: libraries/paszlib/paszlib_zbase.pas:412 +msgid "stream error" +msgstr "" + +#. Programmer's name for it: Sdata_error +#: libraries/paszlib/paszlib_zbase.pas:413 +msgid "data error" +msgstr "" + +#. Programmer's name for it: Smem_error +#: libraries/paszlib/paszlib_zbase.pas:414 +msgid "insufficient memory" +msgstr "" + +#. Programmer's name for it: Sbuf_error +#: libraries/paszlib/paszlib_zbase.pas:415 +msgid "buffer error" +msgstr "" + +#. Programmer's name for it: Sversion_error +#: libraries/paszlib/paszlib_zbase.pas:416 +msgid "incompatible version" +msgstr "" + +#. Programmer's name for it: SInvalidHexCharacter +#: libraries/simplebaselib4pascal/SbpBase16.pas:12 +msgid "Invalid hex character: \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidTextLength +#: libraries/simplebaselib4pascal/SbpBase16.pas:13 +msgid "Text cannot be odd length \"%s\"" +msgstr "" + +#. Programmer's name for it: SAlphabetNil +#: libraries/simplebaselib4pascal/SbpBase32.pas:16 +#. Programmer's name for it: SAlphabetNil +#: libraries/simplebaselib4pascal/SbpBase58.pas:16 +#. Programmer's name for it: SAlphabetNil +#: libraries/simplebaselib4pascal/SbpBase64.pas:16 +#. Programmer's name for it: SAlphabetNil +#: libraries/simplebaselib4pascal/SbpBase85.pas:16 +msgid "Alphabet Instance cannot be Nil \"%s\"" +msgstr "" + +#. Programmer's name for it: SAlphabetNil +#: libraries/simplebaselib4pascal/SbpBase85.pas:18 +msgid "Unexpected Shortcut Character In The Middle Of a Regular " +"Block" +msgstr "" + +#. Programmer's name for it: SAlphabetNil +#: libraries/simplebaselib4pascal/SbpEncodingAlphabet.pas:12 +msgid "\"%s\" Cannot Be Nil." +msgstr "" + +#. Programmer's name for it: SAlphabetNil +#: libraries/simplebaselib4pascal/SbpEncodingAlphabet.pas:14 +msgid "Required Alphabet Length is \"%d\" but Provided Alphabet is \"%d\" " +"Characters Long." +msgstr "" + +#. Programmer's name for it: SInvalidCharacter +#: libraries/simplebaselib4pascal/SbpEncodingAlphabet.pas:15 +msgid "Alphabet Contains Character \"%s (%d)\" Above " +"\"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidInput +#: libraries/simplebaselib4pascal/SbpEncodingAlphabet.pas:16 +msgid "Invalid character value in input \"%s\"" +msgstr "" + +#. Programmer's name for it: sAColumnsCantBeNil +#: libraries/sphere10/UCommon.Data.pas:246 +msgid "AColumns can't be nil!" +msgstr "" + +#. Programmer's name for it: sTooManyValues +#: libraries/sphere10/UCommon.Data.pas:247 +msgid "Too many values" +msgstr "" + +#. Programmer's name for it: sInvalidUTF8String +#: libraries/sphere10/UCommon.Data.pas:248 +msgid "Invalid UTF8 string" +msgstr "" + +#. Programmer's name for it: sBadNumericExpression +#: libraries/sphere10/UCommon.Data.pas:249 +msgid "Bad numeric expression" +msgstr "" + +#. Programmer's name for it: sUnexpectedNumberFormat +#: libraries/sphere10/UCommon.Data.pas:250 +msgid "Unexpected number format" +msgstr "" + +#. Programmer's name for it: sBadSyntaxForEscapeCharacter +#: libraries/sphere10/UCommon.Data.pas:251 +msgid "Bad syntax for escape character \"\\\"" +msgstr "" + +#. Programmer's name for it: sUnexpectedCharInExpression +#: libraries/sphere10/UCommon.Data.pas:252 +msgid "Unexpected char in expression" +msgstr "" + +#. Programmer's name for it: sInvaildExpression_CharDetectedAfterClosingBracket +#: libraries/sphere10/UCommon.Data.pas:253 +msgid "Invaild expression (char detected after closing " +"bracket)" +msgstr "" + +#. Programmer's name for it: sUnexpectedTokenFound +#: libraries/sphere10/UCommon.Data.pas:254 +msgid "Unexpected token found : \"%s\"" +msgstr "" + +#. Programmer's name for it: sUnexpectedStringLiteralInExpression +#: libraries/sphere10/UCommon.Data.pas:255 +msgid "Unexpected string literal in expression" +msgstr "" + +#. Programmer's name for it: sBadlyClosedBetweenExpression +#: libraries/sphere10/UCommon.Data.pas:256 +msgid "Badly closed \"between\" expression" +msgstr "" + +#. Programmer's name for it: sMissingNumberInExpression +#: libraries/sphere10/UCommon.Data.pas:257 +msgid "Missing number in expression" +msgstr "" + +#. Programmer's name for it: sUnexpectedOccurrenceOf_Found +#: libraries/sphere10/UCommon.Data.pas:258 +msgid "Unexpected occurrence of \"%s\" found" +msgstr "" + +#. Programmer's name for it: sBadBetweenExpression_UnexpectedToken +#: libraries/sphere10/UCommon.Data.pas:259 +msgid "Bad \"between\" expression. Unexpected " +"\"%s\"" +msgstr "" + +#. Programmer's name for it: sExpressionError_NoValue +#: libraries/sphere10/UCommon.Data.pas:260 +msgid "Expression error (no value)" +msgstr "" + +#. Programmer's name for it: sNotImplemented +#: libraries/sphere10/UCommon.pas:468 +msgid "Not implemented" +msgstr "" + +#. Programmer's name for it: sInvalidParameter_OutOfBounds +#: libraries/sphere10/UCommon.pas:469 +msgid "Invalid Parameter: %s out of bounds" +msgstr "" + +#. Programmer's name for it: sLogDebug +#: libraries/sphere10/UCommon.pas:470 +msgid "DEBUG" +msgstr "" + +#. Programmer's name for it: sLogInfo +#: libraries/sphere10/UCommon.pas:471 +msgid "INFO" +msgstr "" + +#. Programmer's name for it: sLogWarn +#: libraries/sphere10/UCommon.pas:472 +msgid "WARNING" +msgstr "" + +#. Programmer's name for it: sLogError +#: libraries/sphere10/UCommon.pas:473 +msgid "ERROR" +msgstr "" + +#. Programmer's name for it: sTotal +#: libraries/sphere10/UVisualGrid.pas:475 +msgid "Total: %d" +msgstr "" + +#. Programmer's name for it: sStandardSearch +#: libraries/sphere10/UVisualGrid.pas:476 +msgid "Standard Search" +msgstr "" + +#. Programmer's name for it: sMultiColumnSearch +#: libraries/sphere10/UVisualGrid.pas:477 +msgid "Multi-Column Search" +msgstr "" + +#. Programmer's name for it: sPageSize +#: libraries/sphere10/UVisualGrid.pas:478 +msgid "Page size:" +msgstr "" + +#. Programmer's name for it: sSearchExpression +#: libraries/sphere10/UVisualGrid.pas:479 +msgid "Search expression" +msgstr "" + +#. Programmer's name for it: sDataLoading +#: libraries/sphere10/UVisualGrid.pas:480 +msgid "DATA LOADING" +msgstr "" + +#. Programmer's name for it: sExpression +#: libraries/sphere10/UVisualGrid.pas:481 +msgid "Expression" +msgstr "" + +#. Programmer's name for it: sImproperColumnIndex +#: libraries/sphere10/UVisualGrid.pas:482 +msgid "Improper column index. Max expected is %d but %d " +"found." +msgstr "" + diff --git a/src/gui-classic/UFRMAbout.dfm b/src/gui-classic/UFRMAbout.dfm index 83e0a2f12..7bfe418ab 100644 --- a/src/gui-classic/UFRMAbout.dfm +++ b/src/gui-classic/UFRMAbout.dfm @@ -217,7 +217,7 @@ object FRMAbout: TFRMAbout BorderStyle = bsNone Ctl3D = False Lines.Strings = ( - 'Copyright (c) 2016 - 2019 PascalCoin developers' + 'Copyright (c) 2016 - 2023 PascalCoin developers' 'Based on Albert Molina original source code' '' diff --git a/src/gui-classic/UFRMAbout.lfm b/src/gui-classic/UFRMAbout.lfm index 69909900e..40edf01e5 100644 --- a/src/gui-classic/UFRMAbout.lfm +++ b/src/gui-classic/UFRMAbout.lfm @@ -15,7 +15,7 @@ object FRMAbout: TFRMAbout Font.Name = 'Tahoma' OnCreate = FormCreate Position = poOwnerFormCenter - LCLVersion = '1.8.0.6' + LCLVersion = '2.0.10.0' object Image1: TImage Left = 15 Height = 64 @@ -102,9 +102,9 @@ object FRMAbout: TFRMAbout end object Label1: TLabel Left = 90 - Height = 25 + Height = 23 Top = 15 - Width = 384 + Width = 420 Caption = 'Pascal full node Wallet (Classic GUI)' Font.Color = clBlack Font.Height = -21 @@ -115,9 +115,9 @@ object FRMAbout: TFRMAbout end object lblBuild: TLabel Left = 15 - Height = 13 + Height = 12 Top = 356 - Width = 30 + Width = 36 Caption = 'Build:' Font.Color = clWindowText Font.Height = -11 @@ -128,9 +128,9 @@ object FRMAbout: TFRMAbout end object lblProtocolVersion: TLabel Left = 15 - Height = 13 + Height = 12 Top = 375 - Width = 50 + Width = 57 Caption = 'Protocol:' Font.Color = clWindowText Font.Height = -11 @@ -141,17 +141,17 @@ object FRMAbout: TFRMAbout end object Label2: TLabel Left = 90 - Height = 13 + Height = 12 Top = 320 - Width = 65 + Width = 74 Caption = 'Source Code:' ParentColor = False end object Label3: TLabel Left = 90 - Height = 13 + Height = 12 Top = 339 - Width = 135 + Width = 153 Caption = 'Check For New Versions:' Font.Color = clWindowText Font.Height = -11 @@ -163,9 +163,9 @@ object FRMAbout: TFRMAbout object Label4: TLabel Cursor = crHandPoint Left = 170 - Height = 13 + Height = 12 Top = 320 - Width = 240 + Width = 260 Caption = 'https://github.com/PascalCoin/PascalCoin' Font.Color = clBlue Font.Height = -11 @@ -178,9 +178,9 @@ object FRMAbout: TFRMAbout object Label5: TLabel Cursor = crHandPoint Left = 237 - Height = 13 + Height = 12 Top = 339 - Width = 253 + Width = 270 Caption = 'https://sourceforge.net/projects/pascalcoin' Font.Color = clBlue Font.Height = -11 @@ -197,7 +197,7 @@ object FRMAbout: TFRMAbout Width = 478 BorderStyle = bsNone Lines.Strings = ( - 'Copyright (c) 2016 - 2019 PascalCoin developers' + 'Copyright (c) 2016 - 2023 PascalCoin developers' 'Based on Albert Molina original source code' '' 'Pascal (aka Pascal Coin) is P2P cryptocurrency without the need for historical operations. This software comprises a node within the Pascal network.' diff --git a/src/gui-classic/UFRMAbout.pas b/src/gui-classic/UFRMAbout.pas index 1ddf777f5..9ce98a7a5 100644 --- a/src/gui-classic/UFRMAbout.pas +++ b/src/gui-classic/UFRMAbout.pas @@ -68,6 +68,9 @@ implementation UFolderHelper, UConst, {$IFDEF Use_OpenSSL} UOpenSSL, +{$ENDIF} +{$IFDEF USE_GNUGETTEXT} + gnugettext, {$ENDIF} UNode; @@ -79,6 +82,8 @@ implementation procedure TFRMAbout.FormCreate(Sender: TObject); begin + {$IFDEF USE_GNUGETTEXT}TranslateComponent(self);{$ENDIF} + // lblBuild.Caption := 'Build: '+CT_ClientAppVersion+' OpenSSL: '+{$IFDEF Use_OpenSSL}IntToHex(OpenSSLVersion,8){$ELSE}'NONE'{$ENDIF}+' Compiler: '{$IFDEF FPC}+'FPC'{$IFDEF CPU32}+' 32b'{$ELSE}+' 64b'{$ENDIF}{$ELSE}+'Delphi'{$IFDEF CPU32BITS}+' 32b'{$ELSE}+' 64b'{$ENDIF}{$ENDIF}; lblProtocolVersion.Caption := Format('BlockChain Protocol: %d (%d) - Net Protocol: %d (%d)',[TNode.Node.Bank.SafeBox.CurrentProtocol,CT_BlockChain_Protocol_Available, CT_NetProtocol_Version, CT_NetProtocol_Available]); diff --git a/src/gui-classic/UFRMAskForAccount.dfm b/src/gui-classic/UFRMAskForAccount.dfm new file mode 100644 index 000000000..fa1e07426 --- /dev/null +++ b/src/gui-classic/UFRMAskForAccount.dfm @@ -0,0 +1,3914 @@ +object FRMAskForAccount: TFRMAskForAccount + Left = 0 + Top = 0 + ActiveControl = ebMessageToSend + BorderIcons = [biSystemMenu] + BorderStyle = bsDialog + Caption = 'Ask for Account (PASA)' + ClientHeight = 388 + ClientWidth = 615 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = True + Position = poOwnerFormCenter + OnCreate = FormCreate + DesignSize = ( + 615 + 388) + PixelsPerInch = 96 + TextHeight = 13 + object lblDoYouWantToSendAMessage: TLabel + Left = 17 + Top = 288 + Width = 446 + Height = 13 + Caption = + 'Do you want to send a message that will be included in the block' + + 'chain? (visible to everybody)' + Color = clBtnFace + ParentColor = False + Transparent = False + end + object imgAskForAccount: TImage + Left = 8 + Top = 64 + Width = 200 + Height = 200 + Picture.Data = { + 07544269746D6170F6D40100424DF6D40100000000003600000028000000C800 + 0000C80000000100180000000000C0D40100120B0000120B0000000000000000 + 0000D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D1D1D1CFCFCFD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6B2AA9D + AB9470B3B0AAD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6CCCCCC9078556C471D7D5D34A493 + 79BFBFBFD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6AEA99F7151293121203A27205F3F1C8D7047ADA494CD + CDCDD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D0 + D0D097826251371E2B1D202C1E202D1F20472F1F704E2599825FB6B2ABD6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6B1AEAA7D5C313A2720 + 2D1E202F20202E20202C1D2032222054381E805F34A49379BFBFBFD6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D5D5D59E8D73593B1D2D1E202F20202F20202F20 + 202F20202E1F202C1E203A272060411D8D7047ACA392CECECED6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6BAB9B882653C3C28202D1E202F20202F20202F20202F20202F20202F + 20202D1F202E1F20462F1F714F2699815EB6B1AAD6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6A1947E61 + 421E2D1E202E20202F20202F20202F20202F20202F20202F20202F20202E1F20 + 2C1E2033222053371E805F33A39379BFBFBFD6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6C3C3C3896E46462F1F2C1E202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202E1F202C1E + 203B291F5F3F1C8D7047ADA393CECECED6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6A9A0916A49233020202E20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202D1E202D1F2046 + 301F6F4E259A825EB6B3ACD3D3D3D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6CACA + CA9078544A311F2C1D202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202E20202C1E2032212054381E + 98733CBBB3A4D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6ACA69C7553283423202D + 1F202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202C1E20322220795528B1ABA0D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D3D3D396816354381E2C1E202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202C1E204B321F927B59CCCCCCD6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D0D0D0C6C6C6B6 + B6B5B1AEA8B3ACA0ADA596A095859D92819D92819D92819D9281A79D8DB3AA9C + B1ACA2B2B1ADBFBFBFCDCDCDD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6B5B2AD7A5B333725202D1F202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202E + 1F203222206C4C25AAA295D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D3D3D3C4C4C4B4B0AAA89F8F9F8E748E785B876E4B7D5F3976582F684B29 + 5F42245C3E1E5C3E1E5B3E1E5B3E1E5C3E1E5E402064472770512C7B5B328266 + 418C755698876DA79C8AB1ADA5C2C2C2D3D3D3D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D69D8C73583B + 1D2C1E202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202C1E204A311E8E724B + C5C5C5D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6CDCDCDB6B4B0A39A8A988568836947 + 74563163442255381D4B321F3D29203927203725203021202D1F202C1E202C1E + 202C1E202C1E202C1E202D1F202E1F203423203826203A2720442E1F51361E5B + 3E2073542E8469459A8669ABA292BBBAB9D3D3D3D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6BEBDBC87683E402B1F2C1E202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202E20202E1F2063441FA39885D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + C9C9C9B3B0AAA69882947B567B5B346142204C331E402A203323202F20202C1E + 202C1E202D1E202D1F202D1F202E1F202F20202F20202F20202F20202F20202F + 20202F20202E20202E1F202D1F202D1F202C1E202B1E202E1F20322220402B20 + 52371E6B4B2485673C9B8667B0A89AC4C4C4D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6A699846444202E1F202E20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202D1E203F2A1F866842BEBDBDD6D6D6D6D6D6D3D3D3C9C9C9D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6CACACAB5B0A8A1927C8A725074552F6142 + 1E4B321F3826202E1F202C1E202D1E202E1F202E20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202E1F202D1E202C1E202F20203D29 + 2053371E6F4F278E724AA79982BEBDBBD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6C3C3C3 + 896E48432D1F2C1E202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202D1F205E + 401FA3947CD6D6D6D6D6D6D6D6D6B5B0A8AF8F5DA69A87C9C9C9D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6C9C9 + C9B4B0A89F927C8B725071532E57391D442D1F3423202D1F202C1E202D1F202E + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202E1F202C1E202B1E2032222046 + 2E1F5F411E8B6C40A9997EBDBCBAD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6A9A0916B4A233021202E1F + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202D1E203E2A1F806237B8B7B4D6D6D6 + D6D6D6D1D1D19C8666734C1C6C4B22967D57B4AEA4D2D2D2D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6C9C9C9B4B0A8A1927C8A714F71522F573A1D43 + 2D1F3423202D1E202C1E202D1F202E20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202E1F202C1E202D1F203F2B1F + 61411D8B6C40A9987EBEBDBCD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6CECECE967E594E341E2C1E202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202C1E205A3B1D9B886BD3D3D3D6D6D6D6D6D6B3B0AC805F + 3239262030212052371E7A5A2F9D8767B6B1A7D2D2D2D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6C2C2C2AF + A99F9D8E7689714F71532F56391D442D1F3423202C1E202C1E202E1F202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202E20202C1E202D1F203F2A1F6141 + 1D8A6C42A79B86C6C6C6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6AFAAA074542C3322202D1F202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202D1F + 2035242077572FB1AEA7D6D6D6D6D6D6D6D6D69F8F765B3D1D2C1E202D1F202B + 1E2036242052371E7A5A31988262ADA699C5C5C5D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6CECECEBAB8B6A8A09298866C8A6D46715129573A1D432D1F + 3423202D1E202C1E202E1F202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202E20202D1E202D1E20412C1F6B4A2196 + 7A52B1A99BCECECED6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D2D2D296826350351E + 2C1E202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202C1E2052371E9A8462D1 + D1D1D6D6D6D6D6D6BCBBBA85673F3D29202D1E202F20202F20202D1F202C1E20 + 36252051361E6D4E27896F4BA3947CB5B0A8C6C6C6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6CCCCCCBABAB9AFA89C9E8F7A + 9079597E613965462351361E422C1F3322202C1E202C1E202E1F202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202E20202C1E203121204C331F755329998260 + B6B3ABD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6B6B4AF7D5D333927202D1F202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202D1F20342320755329AFA99FD6D6D6D6D6D6D6D6D6 + A3978263431F2E1F202F20202F20202F20202F20202F20202D1F202C1E203121 + 20452E1F5E3F1D75552E866D4B99886DA79E8FB5B1AABFBFBFCBCBCBD4D4D4D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D5D5D5CFCFCFC3C3C3 + BCBBB9AFABA3A79D8C9D8C718E77547D603B6A4C28573A1D48301F3B27202F20 + 202C1E202C1E202E1F202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202E1F202B1D20342320583A1E836234A39176BAB9 + B9D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6A291775B3E1E2D1E202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202C1E2049311F907652CACACAD6D6D6D6D6D6C4C4C48C704949311F2C1E + 202F20202F20202F20202F20202F20202F20202F20202E1F202C1E202D1E2034 + 2320412B1F51351E61422271532F7F633F8A72519783669B8B719E8F799E917E + 9E93839E94849E917E9E8F799D8C7398866A8E7858866B477B5E3A6D4E2B6344 + 2253371E49311F3A27203121202C1E202C1E202D1F202E1F202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202D1F202C1E203A27205D3E1D8B6C3FAC9E8AC8C8C8D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6BBBBB982 + 653E3D29202D1E202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202E20202F20206646 + 23A69D8ED6D6D6D6D6D6D6D6D6ABA2936C4B253121202E1F202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202E20202D1F202C1E202C1E20 + 2F1F203323203D2920442E1F47301F56391D5D3E1D5D3E1E5D3E1E5D3F1F5C3F + 1E5E3E1D5A3C1D4A311E452E1F432D1F3926203121202F20202C1E202C1E202D + 1F202E1F202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202D1E202D1F20452E1F6A4A22917852B1AA9FD3D3D3D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6A1958260401F2D1F202E2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202C1E20432E1F8D7149C4C4C4D6D6D6D6 + D6D6CBCBCB9178564A311F2C1E202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202E20202E1F202D1F + 202C1E202C1E202C1E202C1E202C1E202C1E202C1E202C1E202C1E202C1E202C + 1E202C1E202C1E202D1F202E1F202E20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202E20202C1E202F20204C331F78572C9D8869B6B4AFD6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6C6C6C68D724B472F1F2C1E202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202E20202F202064431FA39783D6D6D6D6D6D6D6D6D6ACA69D6E4F29 + 3222202E1F202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202E20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202E1F202C1E20362420593B1D856539A79881C3C3C3D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6ABA2946C4C253121202E1F202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202C1E20 + 402B1F86663CB9B8B7D6D6D6D6D6D6D3D3D398846554381E2C1E202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202D + 1F202D1F203F2A1F67461F92754CAFA79BD3D3D3D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6CCCCCC8E775649311F2C + 1E202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202C1E20583A1D9E8D73D5D5 + D5D6D6D6D6D6D6B6B3AE7E5D343926202D1F202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202C1E20 + 3021204C331F77552BA28D6DBBB9B6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6AEA9A07252293322202D1F202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202D1F20392620805F35B7B4AFD6D6D6D6D6D6D5D5D59B + 8B7256391D2C1E202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202E1F202B1D203624 + 205B3D1D84663CA99D8ACBCBCBD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D3D3D39B876855391E2C1E202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202C1E2056391D9D896AD3D3D3D6D6D6D6D6D6BBBAB980633C3C28202C1E20 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202D1F202C1E20402B206C + 4A239A825DB8B4AED6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6B5B3AE7C5D + 343826202D1F202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202D1F2034232075542B + AEAAA2D6D6D6D6D6D6D6D6D6A6998463431F2E1F202E20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202C1E2031212054381E876638 + AA9C84C9C9C9D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D5D5D59C8B7356391D2C1E202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202C1E204B321F907959CDCDCDD6D6D6D6D6 + D6C4C4C48D714B442D1F2C1E202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202E20202E20202E20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202E1F202C1E203F2A1F6C4B219D825AB7B3 + ABD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6BDBDBC84673F402B1F2C1E202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202E1F203121206E4D26ABA496D6D6D6D6D6D6D6D6D6A69D8F6646232F + 20202E1F202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202E20202E1F202E1F202D1E202C1E202C + 1E202C1E202C1E202D1E202D1E202D1E202C1E202C1E202C1E202E1F202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202C1E2031212053371E886638A99C86CBCBCBD6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + A79B886445212F20202E20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202C1E2049 + 311F8F744FC9C9C9D6D6D6D6D6D6CCCCCC9178554C321F2C1E202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202E20202D1F202D1F202C + 1E202B1D202C1E202E1F203121203423203F2A2047301F47301F47301E54381D + 5F401D60401D5F401D56391D49311F442E1F3625202D1F202D1E202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202E1F202C1E203E2A1F6E4C229A825EB8B6B3D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6C4C4C48C714C452E1F2C1E + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202E1F202F2020694820A49987D6D6D6 + D6D6D6D6D6D6B1ABA176542B3423202D1F202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202E1F202E1F202D + 1F202C1E202C1E202C1E202C1E202F20203624203A2720442D1F51361E53371D + 6042216D4D27785A3682674289704D8F7A5D99886E9C8D759F917C9F937FA092 + 7D9F8E76978365886F4C775832593C1E3D29202C1E202E1F202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202C1E203121205A3C1D8C6B3EADA495D3D3D3D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6A8A092704E243222202E1F202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202C1E20402B1F866A42BEBEBED6D6D6D6D6D6D1D1D19883 + 6451361E2B1E202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202E20202E + 1F202D1F202D1F202C1E202B1E202D1F203020203222203B2720442D1F462F1F + 53371D5E3F1E6448277355307F633E8E7552937E609D8E76A99E8CAAA59CB9B7 + B2BFBFBFC7C7C7D1D1D1D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D3D3D3C7 + C7C7B6B3AFA2937C83663D5A3C1D3323202D1E202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202E1F202D1E20462F1F79562AA08E72C5C5C5D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6CECECE947C5A4F351E2C1E202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202D1E205E401EA2947CD6D6D6D6D6D6D6D6D6B2B0AA7758303624202D1F202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202E20202E1F202D1F202C1E202C1E202C1E202D1E203322203726203C2820 + 4A311F50351E5A3D1F6A4A2570522F7E623C866C48917B5D9B8B72A09583B0A8 + 9BB3B0AABCBCBCCACACAD1D1D1D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + BCBAB79F88646746203423202D1F202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202E20202C + 1E2036242065451E987D54B5B3AED6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6B0ABA375552C + 3423202D1F202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202D1E203D291F84653BBB + B9B7D6D6D6D6D6D6D6D6D69F8D735B3D1D2D1E202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202E20202E1F202D1F202C1E202C1E202E1F20302120 + 392620422C1F49301F573A1D5F41206F50297A5B34856B478D765798876DA799 + 84A8A094B3AFA8BCBBB9C5C5C5D1D1D1D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6CACACA9E89 + 696646203021202E1F202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202D1F202F2020 + 51371E8F6D3EADA495D3D3D3D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D1D1D199846654381E2C1E202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202C1E20583B1D9C8A6ED5D5D5D6D6D6D6D6D6 + BCBBB987683E3E2A1F2D1E202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202E20202E1F202D1E202C1E20 + 2C1E202F1F203423203C28204A311F4E341E5B3D1F6D4E297C5F39866C499580 + 619A8A73A59B89B1ABA0B4B3B0C4C4C4CECECED6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6CCCCCCC4C4C4B8B7B5AEABA4ADA79CAFA5 + 94A79C899B8E7A978974A1927CB5B1ABD6D6D6D6D6D6C7C7C79B7F5552361E2C + 1E202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202E1F202D1F204A311F7A58 + 2AA7987FD0D0D0D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6B4B2AF7F5E333B28202C1E202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202D1F2035242074552FB0ADA7D6D6D6D6D6D6D6D6D6A295805F401F2D1F + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202D1F202D1E203322203E292047301F56391E6445257455 + 2F8469438F78579B8B71A59A89AEA89FBBB9B6C7C7C7D3D3D3D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D3D3D3C8C8C8BABAB9B7B3ABA8A0 + 93A2958097856A8E7655866B48775B3775552D715029604324573B1F573A1D56 + 3A1D67441C987644BAB7B3D6D6D6D6D6D6AEAAA27E5C2E3A27202D1E202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202B1D203B2720765224A48E6BBF + BFBFD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6A1 + 91795B3E1E2D1E202E20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202C1E205035 + 1E988262D1D1D1D6D6D6D6D6D6C2C2C2896D45422D1F2C1E202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 203E2A205C40247255317C63418C785B968974A8A092AFADABC3C3C3D2D2D2D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D5D5D5D2D2D2CECECEC9C9C9C1C1C1B4B2 + AFB0ABA2AAA0909C8D779884658B714F80623C725430664723583B1D4D341E4B + 321F3F2A203625203524203322202E1F202C1E202C1E202B1D202C1E2061401D + A18F73D5D5D5D6D6D6D2D2D29984655A3C1D2C1E202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202D1F203523205F3F1D967B54BEBCB9D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6BDBCBB8568403E2A202D1E20 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202D1F20342320725229AFA99FD6D6D6D6 + D6D6D6D6D6ABA2936C4B233121202E1F202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202E1F203222205A3D2077592E8A + 734D8C7B609688729A90819F9689A59B8BA69B8AA59A89A49987A39886A29785 + A19684A19684A19684A19684A19684A19684A19684A29785A19785A19583A596 + 7FA5957DA09077948268907C5F917A598A72508066427859336E4F2B5E41225A + 3C1D4F351E432D1F3D29203323202F20202D1F202C1E202C1E202D1E202D1F20 + 2D1F202E1F202E20202F20202F20202F20202B1D20422C1F8C6F46C2C2C2D6D6 + D6D6D6D6AFABA576562E3524202E1F202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202D1E202E1F205A3C1D9D7D4DBBB7AFD6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6A398856745202E1F202E20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202C1E204E341E927853CACACAD6D6D6D6D6D6CBCBCB947B56 + 4B321F2C1E202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20203020203E2A1F4C3521523822543922533820 + 5036204F361F4E351E4E351E4E351E4E351E4E351E4E351E4E351E4E351E4E35 + 1E4E351E4E351E4E351E4E351E4E351E4E351E4E351E4F351D4F351E4F351E4F + 351E4F351F4E341F432D1F3926203725203322202D1F202C1E202C1E202C1E20 + 2D1E202E1F202E20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202D1F2035242077572EB1ADA6D6D6D6D6D6D6CFCFCF95 + 7D5B4D341E2C1E202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202E1F202E1F2054381E89693CACA59BD6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6C7C7C78C714C49311F2C1E202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202E1F20 + 302020684922A69D8ED6D6D6D6D6D6D6D6D6ABA69C6E4F283222202E1F202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202D1F202C1E202C1E202C1E202C1E202C1E202D1E202D1E + 202D1E202D1E202D1E202D1E202D1E202D1E202D1E202D1E202D1E202D1E202D + 1E202D1E202D1E202D1E202C1E202C1E202C1E202C1E202B1E202B1E202B1D20 + 2C1E202D1F202D1F202E1F202E20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202E1F202F2020644623ACA392D6D6D6D6D6D6D6D6D6A79D8B6746212E1F20 + 2E20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202E + 20202B1D20452E1F805E32ACA395D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6ABA4966D4C2530 + 21202E1F202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202C1E20432D1F8B7049C4C4 + C4D6D6D6D6D6D6CFCFCF96805F52371E2B1D202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202C1E20 + 583C1E9D8F7CD6D6D6D6D6D6D6D6D6B8B7B58061393B28202D1F202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202B1E20 + 432E1F815E2FAEA391D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6CECECE937C5A4C331E2C1E202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202E20202F2020654521A79A86D6D6D6D6D6D6D6D6D6B1 + AEA97A592E3826202D1F202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202C1E20593B1D9A8A71D6D6 + D6D6D6D6D6D6D6D0D0D0937D5D4E341E2B1E202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202B1E20432D1F8460 + 2EAFA390D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6AFABA477562C3625202E1F202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202C1E20402A1F85673EBDBCBBD6D6D6D6D6D6D5D5D59E8C70573A1E2D1E20 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202C1E20593B1D9A896FD6D6D6D6D6D6D6D6D6D6 + D6D6A196845C3E202D1F202E20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202B1D20422C1F84602DAEA390D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D0D0D0A692 + 725A3C1D2C1E202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202C1E2057391D + 9B8B73D5D5D5D6D6D6D6D6D6B8B7B58062393C28202D1E202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202C1E20593B1D9B8A71D6D6D6D6D6D6D6D6D6D6D6D6B2AEA873552E + 3322202E1F202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202B1D20422C1F84602DADA392D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6BCBAB7BA904D4E341E281B202D + 1F202E20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202D1F203826207C5D35B5B3AFD6D6D6D6D6 + D6D6D6D69E917C63431E2D1F202E20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202C1E20 + 593C1E9F927ED6D6D6D6D6D6D6D6D6D6D6D6C4C4C4836A48402B202C1E202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202C1D20422D1F815E30ACA396D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6C8C4BEBB99646F4C1F4A311F3A27202E20202C1E20 + 2D1F202E20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202C1E2055391E9C886AD3D3D3D6D6D6D6D6D6C1C1C093744844 + 2E1F2C1E202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202E1F202F1F20664725ADA597D6D6 + D6D6D6D6D6D6D6D6D6D6D3D3D39784684D331E2C1E202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202B1D20442D1F7F5F33ABA59CD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D3D3D3BCBCBCA79E8F9480627C5F3A6143224C321F3A27202F20202C1E + 202D1E202E1F202F20202F20202F20202F20202F20202F20202F20202D1F2037 + 252078572CAEAAA3D6D6D6D6D6D6D6D6D6BDB3A3A2712A3524202C1D202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202E1F202C1E202B1D20402B2084653AB9B8B6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6A398865D3E202D1E202E20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202C + 1D20452E2088693CBAB7AFD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D3D3D3BAB9B8A99F8F9480627B5F3A66462354381E3F2A1F3021202B + 1E202C1E202E1F202F20202F20202F20202F20202B1D204E341E947C5ACDCDCD + D6D6D6D6D6D6D6D6D6C3C0B9A6844F5E3F1D2F1F202D1F202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202E1F202D1F202B1E202D1F2035242046 + 2E1F593B1D7E5C2EA39783D4D4D4D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6B4B0A9 + 74552E3322202D1F202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202B1D2055391E + 9B7C4DBDBCBAD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D3D3D3BCBBB9AAA19398846684663D6B4B2453371E3F2A1F302120 + 2C1E202D1E202E1F202D1E203020206C4C26ABA397D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6BABAB89B7F555D3E1D3020202D1E202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202E20202E + 1F202C1E202C1E202F20203A28204D331E5D3F207355318C734FA09077B3AEA6 + D0D0D0D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6CCCCCC957E5D55381E2C1E + 202E1F202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202E1F202E1F205B3D1E947B57C3C3 + C3D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D3D3D3BBBBBAABA29399846584663D6B4B2354381E3F2A1F3121 + 202C1E2049301F927751C9C9C9D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6BF + BFBF96805F6B49213A27202C1E202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202E20202D1F202C1E202D1F20332320422C1F55391D + 6747247C603A947E5DA89B87B4B2ADC9C9C9D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6B8B5B18F704352371E2C1E202E1F202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202D1F202F202067451DA48F70D1D1D1D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D3D3D3BCBBBBAAA19299846683663D735024754E1B895F25A5 + 9C8CD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6C9C9C9AB997A + 7956273D29202B1D202E20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202E1F202D1E20 + 2C1D1F2D1E1F37251F4A311F60401D73542C886C489E8B6EAAA295BAB9B8CFCF + CFD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6B8B3AB8F704351361F2C1E202E1F202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202C1E20382620775325A39785D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D3D3D3BBBAB9AEA495BCA57FC3AF8EC4C4C4D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D3D3D3A69A877E5C304B33 + 1E2D1F202E1F202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202E1F202D1F202C1E202D1D1E331F1B4026185635186C49237E5D + 36907956A4957FB2AEA5C4C4C4D5D5D5D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6B7B4AF8E724C5E3E1D3423202D1E202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202B1E203E2A20856031B1ACA2D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6B5AEA192724354381E2F20202D + 1F202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202E1F202C1E202C1D1F2F1E + 1D392219482B175A3B1C5D492D55574B546A6E6E8896ADB7BBD3D2D0D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6BFBFBFA38B666B48203524202B1D202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202C1E + 204F351E907146BCBBB9D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6B8B6B2977D5668461F3625202B1E202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202E1F202D1F202C1D202C1D1E331F1B4127185031185E43235F513B525E5C3F + 6E872C7AB22783D32090E62795EE4DA3EE8EC0E9CFDDE4DADADAD6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6CACACA9E + 8D73735127412C1F2C1E202E20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202E1F202D1F2061401D9D + 8867CECECED6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6C7C7C7A28F71755125442E1F2B1D202E1F202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202E1F202C1E202C1D1F301E1C3A23194B + 2D1757391D604B2C59594A4A65703B739B2A7FC52089E11E92EF2797F42F98F2 + 2497F12396F12593F12491EE469DE498C0DFD7DEE2DBDBDBD6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D1D1D1AFA28D866334 + 472F1F2B1D202E1F202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202D1F20342320735025ABA08ED6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D0D0D0AA9E8C8A683954381E3020202C1E202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202E1F202D + 1E202C1D202D1D1E35211A4328185434196347245F543C526260406F8A2C78B1 + 2284D41F8EEA2495F22D98F32B98F02597EF2395F02893F12B94EE2B94EF2A93 + EE2896ED2596E92491E950A1E5A9CAE3DEE2E2D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6AFA99D86673D54381E3021 + 202D1E202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202C1D20432D1F876538B4B1ABD6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6B8B4AE9B7F5663421D3926202B1E202E20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202E20202E1F202C1E202C1D1F301E1C3D25184D2F175A3B1D + 645030595C4F4868763675A12580C9208AE22292EF2797F32998F22997F12896 + EF2A95ED2995ED2895ED2895ED2995EE2A95ED2A95ED2995EC2995ED2995EC27 + 95EE2292EE3091E672ADDFC2D5E0DDDDDDD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6B8B5B09A7F545D3E1D3221202D1E202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202C1E20583A1E977B53C2C2C2D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6C4C4C4 + A493777D5A2E4C331F2E1F202D1E202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202E1F202D1F202C1E20 + 2D1D1E34201B442A1856361A5E43255F563F5163643D6E8D2B7AB72186D8218F + EA2495F22998F32A97F12996EF2995EE2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2895ED2F95EE2C94EF + 1C95ED369AE096BFE0DCDEE1D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6C1C1C19C86667350253C29202C1E202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202E + 1F202F20205E401EA08C6DD1D1D1D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D4D4D4B2AB9F9377 + 4C63421D3926202C1D202E1F202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202E20202D1F202C1E202C1D1F311E1C3B23184E30175C3D1E5E4B30595D + 5047697A3275A52480C91F8BE42393F02797F32A98F22A97F02996EE2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2895ED2895F02992F12791F52990 + E966ABDCBFD7DFDBDBDBD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6CECECEAB9C8279572A402B202B1D202E20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202D1E20352420 + 775426A69A86D5D5D5D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6C2C2C2A392777C5C3152 + 371E3222202C1E202E1F202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202E1F202D1E202C1E202D1D1E3621 + 1A43281855361A6046265B533F4E62653B70912A7BB92085D7218FEB2596F329 + 98F32997F12996EF2995EE2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2895ED2B97EA3096E82E91F32B90F62795EE2996E23A9CE199 + C5E5DFDFDFD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D5D5D5A79E8F85643750361E2D1E202D1F202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202C1E203F2A1F826031B1AC + A4D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D4D4D4B5B0A7977F5C6D4C25462F1F + 2F20202C1E202E1F202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202E1F202C1E202C1D1F301E1C3D25184C2E185B3D1E614E32565A5144697A31 + 76A72481CB1F8AE32393F02797F32A98F22997EF2995EE2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2D94ED2D95EB209AE81F9AE82A96EB3092F12B8FF42F90ED84B6DDD9DDDC + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6B7 + B2AA8F7248573A1D3222202D1F202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202C1E2054381E9D825BCDCDCDD6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6CBCBCBADA39191754C684620452E1F2E1F + 202C1E202E1F202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202E20202D1F202C1E202C1D1E34201B452A1754 + 361A5E44255E56404F62653A6E902A7CBA2186D9218FEB2596F32998F32A97F1 + 2996EF2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2794F02494F1 + 2996EB2997E92895EE2993F12C93EF2994F12793EC60A7E2C4D5E2D9D9D9D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6B9B9B89E8660 + 6C491F3625202C1D202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202E1F20322220765429B3ADA2D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6C4C4C4A699848A6B406C471F482D19301E1C2B + 1D202D1F202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202E1F202C + 1E202C1D1F2F1E1D3B23194E30175C3D1D5F4B2E5A5D5046697A3275A42480CA + 1F8BE42393F02797F32A98F22997EF2996EE2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2895ED2795EF2B92F22D92F02B96 + EC2797EA2596ED2695EE2493F32391F0469DE2AECEE3DDDDDDD6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6CACACAA390736D4C233D29 + 1F2D1E202E20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202B1E2054381E9E8D74D4D4D4D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6C2C0BD9895886A614A6247274F301738221A2C1D1E + 2C1E202E1F202E20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202E20202D1F202C1E202C1D1F321F1B4127185132185C4122 + 5F533A5464623D6F8F2B7BB72085D72090EC2595F32998F32A97F12996EF2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED28 + 93F12C95EC2B97EB2594ED3C95E0A2C6E0E0E0E0D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6CFCFCFA79A8687633248301F2B1D202E + 1F202F20202F20202F20202F20202F20202F20202F20202F20202F20202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202B1E204D33 + 1F957F60CBCBCBD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D7D7D7C8DAE6559FE02783D63074A65264626250325A3B1C472B1735201A2E1D + 1D2C1D1F2D1E202D1F202E1F202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202E1F202D1F202D1E202C1D1F + 2E1D1D37211A45291755371A5F49295E5B484A667135729D257EC51F89E12292 + F02797F32A98F22996EF2996EE2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2B94EE2D95EB2A96EB + 2194F12392F13992E18FBDE2DFE0E0D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6B1AA9D8665394D331E2E1F202E1F202F2020 + 2F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202B1D2051361E9C8768CFCFCFD6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D8D8D8C3D4E0499EE12693 + EF2296FA1C92F61E8AE12D7DB9416D86565E56604E325F411F5032183D241835 + 201A301E1D2C1D1E2B1D1F2C1D1F2C1E202C1E202C1E202C1E202C1E202C1E20 + 2C1E202C1D1F2B1D1F2C1D1E321F1C3721194026174F31195A3E1F625133565D + 54426B822F78AF2283D1208EE92495F22898F32A98F12996EF2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2994F02C95ED2B96EC2394EF1E92F42292 + F32C91E884B8E0E0E0DED6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6B2AEA7987A4C5F3F1D3021202C1E202F20202F20202F20 + 202F20202F20202F20202F20202F20202F20202F20202F20202F20202F20202F + 20202F20202F20202E1F202F202068461EAA9F8DD6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D8D8D8BFD2DF439CE62192EF2896EE2895ED2A97ED2C + 99EF2997F22091EF1F86DD2A7CBC3D72944E6469585749604D30594125583A1C + 5939194C2F174227174128174127184127184128184127174328174F31185939 + 1A5A3D1F60482960513755594F4B656F3A7195297CBC2087DB2191ED2696F329 + 98F32997F02996EE2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2594F12794F02B95ED2B95EC2995ED2795EE2494F02991E87F + B5E1DEE0E0D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6C0BFBD9E835A62411C3625202C1E202E1F202F20202F20202F20202F + 20202F20202F20202F20202F20202F20202F20202F20202F20202F20202C1E20 + 2D1F205C3E1D987C53C3C3C3D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D8 + D8D8C3D3E0459CE61C94F22996EF2C95EB2D96E92D96EA2895EE2695F02896F1 + 2998F22897F32393F01F8BE52384D3287ABA3477A53E6C8948687650666A5363 + 61565A50585749585749585849535A545062654C666D45687A3B70923178AC27 + 7EC32387D91F8CE72394F12797F32998F22996EF2995EE2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED27 + 95EE2695EF2894EF2E94ED3095EA2C96EB2B97E92395F01F8FF086B8DFDFE0E0 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6C3 + C3C3A08D7078572C4A311F3322202C1E202C1E202D1E202C1E202C1E202C1E20 + 2C1E202C1E202C1E202C1E202D1E202C1E202C1E203826205F3F1D9A7C4FBEBB + B6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D8D8D8C5D5E14C9EE12592F0 + 2A95EE2A96EA2A95EE2C95EC2A95ED2593F12494F12A96EC2A96EB2795ED2896 + EF2A97F02C98F22A98F22796F22192F01F8EEB208DE7208CE41F86DB1E83D51E + 82D51E82D52088DD208DE6208EE81F8FEC2293F12797F22998F22A98F22B97EF + 2A96EE2A95EE2A94EE2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2B96EB2995EE2793F1 + 2C93EF2E95EC2A95ED2595EE2996EC2896EE2A91E989BBE3DFE0E0D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D3D3D3AFA89C + 91795675532B5A3B1D442E1F3A28203826203725203725203725203725203725 + 203826203B2720402B1F573B1D826134A38F6FBCBCBCD6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6DADADAC8D9E3579FDE2591ED2896ED2C95EC2995ED2995 + ED2995ED2995ED2895EE2895EE2995ED2B96E92396EE2195F12995EC2F95EA2F + 94ED2F94ED2996EE2997EF2A97F02A97F02A98F12A98F12A98F12A98F12A98F0 + 2A97F02997EF2996EF2A96ED2897EA2696ED2B94EE2D95EB2997EA2B94EE2B93 + EF2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995EE2995ED2A95ED2995 + ED2894EF2A93F02C95EE2493F43091E794C0E1E0E0E0D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6CACACAB2ACA1A08E + 738C724B8160338C632B9065289165299166299165299065288E642B83613385 + 6C48A08F75B9B5ADD3D3D3D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D2DDE262A5DE2C91EB2194F52896EC2D96EA2B95EC2995ED2995ED2995ED29 + 95ED2995ED2995ED2F94EC2D93EF2493F22494F12495EF1F93F41D92F62796EE + 2796EC2796EC2796EC2796ED2796ED2796ED2796ED2796ED2796ED2796EC2796 + EC2696ED1D95F01F93F42193F42295EF2497EC2A96EC2A95ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995EE2D94ED2C + 95EC2493F22392F53F93E1A4C8E4DBDBDBD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6C5C5C5B6B3AFB8 + B0A2BDB2A0C3B6A0C5B8A1C4B6A0BEB3A0B8B0A2B6B4AFC5C5C5D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DBDEDF73AEDF2990EA21 + 94F62194F22A96EB2D96EA2A95ED2995ED2995ED2995ED2995ED2995ED2995ED + 2D93F03292F02A94F02694EF2B92E42D92E22791EB2892EC2792EC2791EC2791 + EC2792EC2792EC2791EC2791EC2792EC2792EC2792EC2891EC2692EA2A92E332 + 90E62892EC1E96F12395EF2A95EC2996EC2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2D95EB2D96EA2695EF1F93F6 + 2691F23F95E3B6D0E3D9D9D9D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6E0E0DF84B9E42692E92796EF2495EE2895EC2B96EB + 2895EE2594F12995ED2995ED2995ED2995ED2995ED2995ED2393F22C94ED2B96 + EA2E94E870B8E79CC5DE9AC1DF9FC1DD9FC2DC9FC2DD9FC2DD9FC2DD9FC2DD9F + C2DD9FC2DD9FC2DD9FC2DD9FC2DCA0C2DC9BC2DE96C3DF9FC3E360A9E32694E9 + 2892F42C94F12895ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2895ED2795EE2B96EB2996EC2594EF2693F12891EC4C9C + E4CCD8E1D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + DADADAA1CDDC2592E62293F42C96E92D97E82D96E92A95EC2695F02494F12995 + ED2995ED2995ED2995ED2995ED2995ED1F94F22B96EA2797E92F93E7AFD7E9DF + DFDFDADADAD7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 + D7D7D7D7D7D7D7D7D7D9D9D9DBDBDBDEDEDEAACEE53094DF2C92F52D92F42795 + EE2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2895EE2595EF2795EE2B95EC2D96EA2E96E92B96EC2390F36EADDDDBDDDCD6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7C1D6E23B99E12293 + EF2794F02895EE2E95EB2C95EC2895EF2795EE2A95EC2995ED2995ED2995ED29 + 95ED2995ED2995ED2593F13395E82396EF238FF19AC4DED6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6C4D9E03A9DDE2B91F32B93F02596EC2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2A95ED2B95ED26 + 94F02694F02C96EC2C96EB2695EE2496F12991E98ABAE2DFDFDFD6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D8DDE159A6E62E8FEE2A98EB1E96EE2794EF2B + 95ED2994EE2894EF2995ED2A96EB2995ED2995ED2995ED2995ED2995ED2995ED + 2994EF3094EC2894EE1E8FF676B4E3DBDBDBD6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D7DFDE54A8E02690F32894EF2797EB2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2A95EC2B95EC2894EF2794F02995EE + 2895ED2595EF2395EF2E92F03090E89ECBE6DADADAD6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6DBDBDB8CBDDD2891E82D94F02997EB2696EC2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2895EE2A94EF2C95 + EC2392F35FA8E3DADCDCD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DBDBDB78B6E3 + 258FF02794F02997EB2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2594 + F23194ED2893ED429EE1CADBE3D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D8D8D8B8CEDE319ADE + 269BE62293F33192F03495EA2895ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2695ED2E94EE2796EC2593F3489EE1CD + D8DCD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D9D9D993C5E72A90EA2794F22A97 + EB2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2A95ED2E95ED2495EF2B97E92B + 91E770AFDFDBDFDFD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D2DDE254A2E22493EC219AE82593F13190 + F12E95EC2895ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2595EE3094ED2696EC2793F23195E2B1CCDFD6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D8D8D8B1D1E23494E52694F12C96EC2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED3094EE2497EA2597EA2592F52A91E69DC9E1 + DBDBDBD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6DDDDDD83BADE2290EE2D93F02D93EE2995EB2694EF2694F12995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2595F02E95EC2896ED2595F12992E68FBDE1DADADAD6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D1DBE04B9FE12593EE2D95ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2B93EF2C97E72196EE2492F31F93F2449CE3CDDDE5D7D7D7D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DADADAB9D1E33A + 96E22394F02892EF3692EF2898E71F96EF2793F12995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2794F02897EA2E94 + ED1F97EE2892EB6BADE4DDDEDED6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DDDDDD + 61ACE22593ED2E94ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2994 + EE2994EE2895EE2896E92394F3268FED79B5DFE0E2E2D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7E5E763A3E12891ED2697E72693F3 + 2C95EB2898E72694EF2994EF2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2A94EF2697EA2F94ED1E97EC2992F052 + A2E5D5DCDED6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DADADA7EBBE42491EB2E94 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2A96EB2491F72E95EB2D + 9AE32594F12790F33896DFBDD5E0D8D8D8D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6DADADA9FCAE32E8EEC2794EF2996EC2995EE2895EC2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED3095EA2B94ED2197EE2B96EB2792F3389BE3C3D4DFD6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6AFC8DE2C92ED2695EF2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2894EF2A95ED2A96EC2894ED2995EE + 2391ED65A8E3DDE0DFD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D4DD + E055A4DB2892EF2995EE2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2E95EC2A94EF2297EC3095E82894F22895E5AAC8DDD6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6C7D4DF3E99E82595EF2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2895EE2E92E2A1C8 + E2DCDCDCD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D8D8D897C3E02A93EA2897ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2B94EF2694F02697 + EA3395E92794EF2293EA8AB9E3D9D9D9D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D5DDE052A1E32393EF2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2A96EA2496EB46A0E5D1DFE5D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D7DADD56A4E32691F32797ED2996ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2A93F12495EE2A97E93294EA2896EE22 + 94EE68ABE7DCDCDCD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DEDEDE70AFE02292 + EE2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2996EC2696EE228FEE93C3E7DCDCDCD6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D8D8D8A1C5DF2D91EC2B93F22796ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2B93F12497EB2A96EA2D93F12696EC2796EC489DE8D3DBE1 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D8D8D894BFDF2290EC2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2794EE2692F053A0E5D8DEE1D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D5DCE04FA6E02992 + F22A94EF2797EC2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2F93EF2598E82995EC2791F82497EB2E98E73295E7BBD2E3D8D8D8D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6B0CDE32892EF2995ED2995EE2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995EC2795ED2694 + F03191E3A1C6E0D9D9D9D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D8D8D8A3CAE32793E82C94F12694F02896EB29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2C94ED2897EA2995 + EE2792F32797ED2D97E92A93EA98C2E4D9D9D9D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6C1D6E33597E82B96EB2A97E92493F22993F12797EA2C95EC2A95ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2A95EC2495EF2795EC2B92ED53A6E8DA + DEDED6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6DAE1E25EABDE2890EF2A93F02595EF2B95EC2A95ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995EC2995ED29 + 95ED2592EE7EB5E6D9D9D9D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6E1E44AA1 + E32994EA2A98E42191F42B92F22499E72D94EC2B94EE2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2595EF2D96EA2592F52793EDB9CFDCD6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6B1D0E1 + 3296DF2B93EF2894F02897EB2995EC2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2694EF67A9E1 + DCDDDCD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6E0E0E06FB1E52391EC2897E929 + 93F02E94ED2498E92993F02A94EE2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2795EE2B95EC2E94ED2595EF2692EF7CB3DEDCDCDCD6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DBDBDB7AB6E22092ED2B94EF2695 + EF2898E82896ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2694EF459AE2CAD9E0D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D7D7D79EC2E32791EB2496ED3095ED2F96E92397EC + 2893F22A94EE2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2696ED2B95EC2F94 + ED2696EB2692F23D9AE7C9DAE0D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D0DADF449FE51C92F52D94EF2695ED2698E92995EE29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2795EE3194E5AACDE4D9D9D9D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6BECFDF3999E52295F03295EC2C97E82496EE2A93F02A94EE2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2896EC2894EF2F94EE2896EA2793F224 + 91EB93C2E2D9D9D9D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7 + D7D79DC4E22D95E32593F02D92F12997EA2397EC2A94F02995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2895ED2491E988BDE6DCDCDCD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D2D8 + DE4CA1DE2295F13294EC2697EA2595EF2F94EC2A95EC2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2795EE2C94EE2993F02996EA2394ED5AA7E3DADEDE + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DCDCDC6BAEE92B94E5 + 2F95EC2C91F22B97E92296EE2C93F02A95ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2996EC2192ED + 70AFE4DCDCDCD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DCDDDD66ACDD2294F12F + 93EE2397EC2594F03195EA2996EC2895ED2895ED2995ED2995ED2A95ED2A95ED + 2A95ED2995ED2896EC2996EC2A95EC2A95ED2995ED2995ED2995ED2995ED2995 + ED2995ED2A95ED2A95ED2995ED2995EC2995EC2995EC2895ED2895EE2995ED28 + 95EE2895EE2895ED2995EC2995EC2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2694F02896EC2895EE2991F32C9AE52797ED3797E7BED4E1D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6CCD9E1439DE82794EC2B95ED2A95EE2A96 + EC2895EE2A95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2B95ED2A94EE52A5E5D4DCDED6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D9D9D983B7E42191F02796EC2796EC2794F0 + 2A95EC2596EC2496ED2695ED2A95ED2B95EC2B95ED2D94ED2D94ED2896EB2498 + EA2498EA2996EC2B94EF2995ED2995ED2995ED2995ED2995ED2995ED2A95ED2A + 94EE2795EF2896EC2B97E82896EB2195F02394F12895EE2795EF2294F22295F0 + 2995EC2C96EA2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2895EE2A95ED2995 + ED2994EE2A97ED2997EF2792EA8FBDE4D9D9D9D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D7D7D7A3C7DF2C94E62996EF2894EC2894EC2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2A95EC2B95EE3B9CE6C3D5DED6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D8D8D899C2E72891EB2597EB2896EC2694F02A94ED3193F03193 + EF3194EC2F95EB2A97EA2397EB2397EC2696EC2B95ED2D93EF2B93EF2494F120 + 94F32795EE2995ED2995ED2995ED2995ED2995ED2895EC2696EC2395EF2695EE + 2B95ED2C94EF2A93F12995ED2C97E92C96EA2895ED2694F02795EF2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2A + 96EE2593EC5FA7E2DBDEDED6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DCDCDC72 + B2DE2394EA2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2996EC2A95EE2E94E7A9CADFD7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6B8D0E23896E72896EC2895ED2694F02B95ED2A93F12C94EF2E94EC2F95EB2B + 95EC2894F02496EE2697EA2E94EC3492EE3293EE2B95ED2597EB2895ED2995ED + 2995ED2995ED2995ED2995ED2997EA2898E62897E92895ED2A94EF2E93EE3194 + EC2A96EC2996EB2B96EA2D96EB2C94ED2794F12693F12995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2895EE389AE5 + C1D5E2D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D3D9DF489FE32196EE2A95ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995EC2B96EF + 2A92EB89BCE0DADADAD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D0DCE14D9FE028 + 95EB2795ED2694F02A95EC2396ED2296ED2296ED2495EF2794F42890F42893F2 + 2494F02495F02295EF2495ED2A96EB2D96E92A95EC2995ED2995ED2995ED2995 + ED2995ED2594EF2395EF2996EC2895F02194F42094F32597EE2294EF1F93F421 + 94F42A95EE3095EA2C94EE2894F02995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2895ED2294EB96C2E2D9D9D9D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6B5CCE42C94EA2395EE2A95ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2896EC2996ED2891EF61AAE3DCDF + DFD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DDDEDE6DADE02993E92695EF2594F1 + 2D95EB3295EA2B95ED2295F12096F02695EA3195E13994E23894E83797E52D95 + E22493E62495EF2593F32894EE2995ED2995ED2995ED2995ED2A95EC2293F521 + 90F53593E63E96E23596E92E97EA2F97E22E93E12693F21D92F82694F03096E9 + 2E95EC2895EF2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2895ED2092ED6DB0E9DDDDDDD6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6DCDCDC89BBE32390EE2996ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2796EB2896EC2891F4489FE6D2DBDED6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6DADADA83BAE42B93E82694F12594F22E95EB3295EA2994 + F02493F42E94E756A3DEA9CEE2BBD4E0B9D1E0BFD1DCBAD1DF8ABDE33E99E123 + 93EC2795EE2995ED2995ED2995ED2995ED2895ED2E93E95AA5E7AECFE4C2D2DC + BCCFDDBAD1DEB7D1DF85BCDF4097DF2692F12694F02F96E92A96EB2595F02995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2993ED4B9FE7D3DCE0D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DEE1E15CAAE723 + 92EE2C96EB2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2796ED2995EE2495EF3999EAC6D2DED6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D7D7D7A5C9E22792EC2793F22893F12C94EE2794F02894EF2A93EF3894E7B8 + D4E9DCDCDCD7D7D7D6D6D6D6D6D6D7D7D7E0E0E0B7D2E4409BE02695EE2995EC + 2A96EC2A96EC2996ED2494EF3D99E0C4DCE8DBDBDBD6D6D6D6D6D6D6D6D6D7D7 + D7E3E5E599CAE32C95E22693F22696EC2394F12894F02B94EE2B94EE2B94EE2B + 94EE2B94EE2B94EE2B94EE2B94EE2B94EE2B94EE2B94EE2B94EE2994EF2594F0 + 2695EF2895ED2995ED2A95ED2A95EE2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2B94EE + 3793EABAD2E0D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D2DCE0419EEE2594EE2D96E92995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2895EF2994EE + 2599EA2990ECA7C3E3DADADAD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6C8D4DF36 + 98EC2894F02996EB2696ED2395F02D95EA2E95E93198ECC8DAE3D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6DBDBDB74B2E42292EE2794EE2994EC2A95ED2995 + F02192F24DA3E6D7DEDFD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DCE1E161 + AAE12D90F02A95EC2894F02C96EB2996EC2996EC2996EC2996EC2996EC2996EC + 2996EC2996EC2996EC2996EC2996EC2996EC2895ED2795EF2896ED2996EB2B96 + EC2A94EE2A93F02994EE2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2794F02E8EEE99C3E0D8D8 + D8D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6C1D3DE3596E82796F02C96EB2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2895EF2B94EE2B96EB2392EB7AB3 + DFDDDDDDD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7DCDF55A2E62C94EB2998E8 + 2898E72895EE2D94EE2B93F12890F0B4CEE0D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D9D9D993C2E42992EA2A94F02D94ED2E94EC2D94ED2A94EF4398E5C6 + D3E1D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DADADA85B7E32992E83195EA + 2A97E92797EB2A93F02A93F02A93EF2A93EF2A93EF2A93F02A93F02A93EF2A93 + EF2A93F02A93F02A93F02C94ED2F96E92D96E92C96EA2B96EC2894EE2793F128 + 94EF2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2595EE2A91ED7CB5DDDBDBDBD6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D9D9 + D9A3C7DE2B93E82697EF2B96EB2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2894EF2D95EE3293ED2295EC57ABDEDDDDDED6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6DEDFDF6AB0E32D91EC2A94EE2C95EC2997EB2895 + ED2493F31F90F096BFDDD9D9D9D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7B7 + D1E22E93E92394F32795F22894EF2893EE2895EF2D91E9A2C6E4D9D9D9D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D8D8D89CC8E32196E33093EF2C95EC2395F02895 + EE2895EE2795EE2795EE2795EE2895EE2895EE2795EE2795EE2895EE2895EE28 + 95EE2895EF2995EF2895EF2695EE2895EE2995ED2A95EE2A95ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2395EE2693EF5EA8DEDADEE0D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DDDDDD7FB7E12793E923 + 95ED2996EC2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2895EE2A95EC3092EF2295EE369EE4CCDAE3D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6DCDCDC8AC0E12791ED1B95F61D95F12C96EA2D94ED2993F02792F078 + B0E1DCDCDCD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D2DADF489FE42696EC + 2895EB2796EC2996EB2996EB2592E970B8E2DFE0E0D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6BED3E03699E12992F32794F12192F42E94ED2E94ED2D94ED2D + 94ED2D94ED2E94ED2E94ED2D94ED2D94ED2E94ED2E94ED2E94EC2B94F02393F6 + 2294F42295F22695EF2A95EC2F96EB2B95EC2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2496ED + 2594F04A9FE2CCD8DED6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6DDDEDE66ACE62593E92397ED2896ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2895EE + 2894EF2894F12B93E7A9CFE3D8D8D8D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7B7 + D0E03693E22395E82498E42A93EB2891EF2891EF2590EE4E9FE4D7DDDFD6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DCDDDD5FA8E22791E82792ED2392EF2492 + EE2492EE2991EA66ACD7DCDFDFD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D8 + DDDE55A3DC1C95E52498E02294EC2892ED2892ED2792ED2792ED2792ED2892ED + 2892ED2792ED2792ED2892ED2892ED2792ED2C93EA3293E62B93E82694EC2694 + EE2895ED2B96EC2B95EC2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2796ED2796F03C98E4BFD1 + DCD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D8DCDD56A4E52495EA2397ED2895ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2A96EB2595EE2396EF2C92F12F90 + EB8BC2E2DADADAD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D3D8DB95BADE86B7DE + 8AB8D985B8DD83B8DE85B8DC80B8DC91BEDDD5D8D9D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D8D8D8AECADD86B6D986B7DD84B6E084B7E082B7DF82B5E2A1 + C0D8D8D9D8D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D9D9D9A2C1DE6BB4DF + 87B8D988B7DD83B8DC82B9DC82B9DC82B9DC82B9DC82B9DC82B9DC82B9DC82B9 + DC82B9DC82B9DC83B8DC86B9DC84B7DA72B3E059A9E53E9CE62A93E82693EB25 + 95EF2995EE2995EC2995ED2795ED2895ED2A95EC2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995EE2995F02F95E9AFCBDED6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D3D8 + DE48A0EA2396EC2994F02B94ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2B95EC2796EC2394F22D95EB2A90EF70B2E7DADADAD6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D9D9D9D9D9D9D9D9D9D9D9D9D9D9 + D9D9D9D9D9D9D9D8D8D8D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DADADADEDEDEDADADAD9D9D9D9D9 + D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9 + D9D9D9D9D9DADADADDDDDDDBDFE0CADAE39FC7E26EACDE3298E42592EC2993EE + 2796EB2197EC2396ED2D95EC2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2895F22C94EE2394E98DBFE2D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6C5D0DD3898EA2296EC2A + 93F12B94ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2B95EC2996EC2593F32E96E92892F05BA6E8DBDCDCD6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6DADADADFDFDFBBCFDD65A9DF2C8DF12594EF2B99E52F95 + EC2892F32995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2794F1 + 2D95ED2295EA81B9E5D8D8D8D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6BACDDE2F95E62496ED2893F02A95ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2A95ED2895ED + 2794F02D95E92694F13F98E5CBD8DFD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6DBDEDF86BAE52F91E92C95EA2D95EC2891F42895ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2794EF2C97ED2294ED75B3 + E5DADADAD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D7D7D7AAC8E02C94E42895EF2894EF2895EC2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2895ED2795EF2A95EE2D96EB2495 + F02F90E6A9CBE4D9D9D9D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6DFDFDF90C5E72D92E72493F22694EF2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2895EF2997EB2392F15DA6E3DDE0DFD6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DADADA8EBE + E62A96E32B94EE2894EF2796EC2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2795ED2694F02C95EB2C96EB2395F0278FE982B9E6DD + DDDDD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + DFDFDF8ABFE4288FEA2497ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2896EE2797E92491F34F9FE5D4E1E4D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DADADA7FB8E82A96E12D94EF26 + 95EF2696EC2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2795EE2593F23095E92B95EC2095EE2592EF66AAE4DEDEDDD6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DFE1E16CB0 + DE2493E92995EE2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2A95ED + 2699E72591F6499BE4CBDDE5D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6DADADA7FB8E82895E42D95ED2795EF2796ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2895EE2793F1 + 2D95EC2995EE2395EE2993EF54A1E2D5DBDDD6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D8D8D8C4DEE93899E12294EF2B + 95EE2896EB2893EF2996EB2895EE2A94EF2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2996EC2897EA2692F44199 + E6C5DAE5D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6DADADA80B7E52593EB2997E92A94EE2894EF2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2B95EC2895EF2594F02794 + EE2F96EA3E9AE2BFD2E1D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6E0E3E381B8E12191ED2C94EF2898EA2793F1 + 2997EA2794EF2C92F12995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2795ED2B94EF2994EE389AE7C1D6E5D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DADADA7FB5 + E52593EB2A97E92A94EE2894EF2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2B96EB2896EC2595EF2796EF2996EB2E95E6A9 + C7E0D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6C5D5E23B98E52B94EF2896EA2794F12B96EC2795EE2B93 + F02995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2795ED2B94EF2994EE3698E5C0D4E4D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DADADA7DB5E32593EB2A97E92A + 94EE2894EF2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2996EC2B97EA2896EB2595EE2596F02697EF2493E988B9E1DADADAD6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6DDDDDD68ABE02892ED2997EB2794EF2C94EE2796ED2A94EE2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2795ED + 2B94EF2995EE3597E4BED2E2D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6DADADA7DB4E32593EB2A97E92A94EE2894EF2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2A96EB + 2896EB2696ED2696EF2696EF2193EC61AAE3DBDFE0D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D9D9D98FBEE127 + 92EB2896EA2695EE2C93EF2996EC2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2795ED2A93EE2995EE3698 + E5BFD2E2D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6DADADA7FB5E52593EB2997E92A94EE2894EF2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2895EE2995ED2895ED2794 + EC2795ED2694EF409EE6CCDAE1D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6ADCBE02894EC2996EA2696EC + 2D92F22996EB2896EC2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2795ED2A93EE2995EE3799E6C0D4E4D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DADADA80B7 + E52693EB2996E92A94EE2894EF2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2795F02894EF2B95EE2B95EC2994EB2A95EE30 + 99E9BAD0DFD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D9D9D9DADA + DADADADAD9D9D9D7D7D7D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9D9 + D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9 + D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D8D8D8D7D7D7D8D8 + D8DADADAD7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6BAD0DE3097EC2A97EC2596EC2E91F22997EA2796 + EB2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2795ED2A93EE2994EE399AE7C1D5E4D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DADADA7DB5E82E93E52495F028 + 93EF2C95EC2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995EE2995ED2995ED2A95ED2995ED2995EE2393EA96C3E1D9D9D9 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D8D8D9A2C4DE8EBFE48EC2E392BFE4A1 + C1DF99C3DE9AC0E196C1E196C1E296C0E296C0E295C0E295C0E296C0E296C0E2 + 96C0E295C0E295C0E296C0E296C0E295C0E295C0E296C0E296C0E295C0E295C0 + E295C0E296C0E296C0E295C0E296C0E297C1E19DC1DE9AC1DF90C0E2A0C6DDBE + D3DDDCDFDED7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6BACFE13296EA2597EC2996EC2B93F02895EE2A96EB2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2A95ED + 2496EC2994EE439CE4C6D7E7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6DADADA80B6E93194E52195F12794F02D95EB2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2392EB71B4E2DEDEDED6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6DBDCDC56A4DE2391E92094E52291EE3092EA2696E42893EA + 2694E82693E92694E82694E82693E92693E92694E82694E82694E92693E92693 + E92694E82694E82693E92693E92694E82694E82693E92693E92693E92694E826 + 94E82693E92693E92694E92994E72A92E72492E92793E73C98DE70ACDBABCFE6 + DEE0E0D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6B8CFE32F + 95EA2497EC2A96EC2A93F02894EF2B96EB2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2B95EE2497EC2994EF4C9F + E1CDD9E4D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6DADADA8DBCE73192E62395F02794F02C95EC2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2694EB5AA7E1DBDDDED6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + DBDBDB7BB6E32692ED2595EE2594F32E93F12997EC2A95F02895EF2895F02895 + F02895F02895F02895F02895F02895F02895F02895F02895F02895F02895F028 + 95F02895F02895F02895F02895F02895F02895F02895F02895F02895F02895F0 + 2895F02A95EF2A93EE2793F32692F72891F52B90ED3694E79BC5E5DBDBDBD6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6B8CFE32F95EA2497EC2A96EC + 2A93F02894EF2B96EB2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2A95EE2597EB2893F059A6E1D7DBDED6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D9D9D9A4C8 + E42F91E62595EF2694EF2B95EC2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED28 + 95ED419DE6CBD6DFD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D79FC4DC2E94 + E52D96EA2996E92E95EC2D97E72D97EA2C97EA2C96EA2C97EA2C97EA2C96EA2C + 96EA2C97EA2C97EA2C97EA2C96EA2C96EA2C97EA2C97EA2C96EA2C96EA2C97EA + 2C97EA2C96EA2C96EA2C96EA2C97EA2C97EA2C96EA2C96EA2C96EA2B97E92997 + E92B96EC2C93ED2B95EE2797EC2297E93B99E0BDD3DFD7D7D7D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6B8CFE32F95EA2497EC2A96EC2A93F02894EF2B96 + EB2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2994EF2798EA2692F062ABE3DDDDDCD6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6B8CFDF3193E92695EE26 + 95EE2A95EC2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2895EE2892E8ABCDE4 + D9D9D9D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6B9D1DF3296E92C94F02495ED25 + 93F32895EE2795EE2694F02694F02694F02694F02694F02694F02694F02694F0 + 2694F02694F02694F02694F02694F02694F02694F02694F02694F02694F02694 + F02694F02694F02694F02694F02694F02694F02395F02196F02594EF2A95EE2B + 95EC2797EA2398EA1C95E962B1D9DCDFDFD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6B8CFE32F95EA2497EC2A96EC2A93F02894EF2B96EB2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2894EF + 2898EA2591F076B4E5DADADAD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6C1D3E13696EC2895ED2595EE2995EC2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2694F02292EB8CBDE3DBDBDBD6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6CFDAE0439BEB3492EF2A96EC2791F52D93EF2B94EE + 2B93F12B93F12B93F12B93F12B93F12B93F12B93F12B93F12B93F12B93F12B93 + F12B93F12B93F12B93F12B93F12B93F12B93F12B93F12B93F12B93F12B93F12B + 93F12B93F12B93F12B93F12B93F12B92F22C93F02D93EF2D94EE2C93F02B93F1 + 2596EF379EDFC7D5DED6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6B8CFE32F + 95EA2497EC2A96EC2A93F02894EF2B96EB2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2894F02A98E82591F17FB9 + E7D8D8D8D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D2DBE0469FEB2895EC2795EE2895ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2893EF2792ED6DAEE2DCDCDCD6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6DADEDF5FAAE42893EB2499E62894EF2896EB2998E82897EB2897EB2897 + EB2897EB2897EB2897EB2897EB2897EB2897EB2897EB2897EB2897EB2897EB28 + 97EB2897EB2897EB2897EB2897EB2897EB2897EB2897EB2897EB2897EB2897EB + 2897EB2A96EB2B95EC2A96EB2896EC2796EC2695EE2694F02C96EE3096E8B1CC + E0D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6B8CFE32F95EA2497EC2A96EC + 2A93F02894EF2B96EB2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2894ED2997EB2590EF92BFE4D7D7D7D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DADB + DC52A4E42A95EE2B93EE2596EE2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2C + 95EC3093EC469FE9D6DBE1D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DADADA8BB7 + E01D92F02298EA2F92F12495F02A97EA2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2895ED2A93E8A3C9E3D7D7D7D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6B8CFE32F95EA2497EC2A96EC2A93F02894EF2B96 + EB2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2897EA2694F13295EAB4CADFD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DDDDDD67AEE32992EB2B + 93EF2595ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2796ED2F94EF3999E5 + C1D2DFD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7A7C6E12593E92597EB2B + 93F02894F02897EA2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2895ED2A93E8A3C9E3D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6B8CFE32F95EA2497EC2A96EC2A93F02894EF2B96EB2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2696EB + 2693F03E99E5C1D2DED6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D9D9D988BDDD2A91E92A93F02696ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2496ED2C94EE3095E5A5C9E2D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6C1D3E03897E42697EC2795EF2C93F12697EB + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2895ED2A93E8A3C9E3D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6B8CFE32F + 95EA2497EC2A96EC2A93F02894EF2B96EB2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2595EC2793F04DA0E3D0DA + E0D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D7D7D7A6C9DC2E92EA2B94F12896EB2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2496ED2A97ED2A93E882BAE4D9D9D9D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D7DCDE57A3E12596EC2795ED2C93F12796EC2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2996EE2A93E8A3C9 + E3D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6B8CFE32F95EA2497EC2A96EC + 2A93F02894EF2B96EB2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2596ED2793F065AAE0DBDEDED6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6BED3DC3897EB2893EF2997EB2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95EF2798EA2892ED61A9E5DCDDDDD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DADA + DA7AB1E12195EB2A96EB2993F22B95ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2996EE2A93E8A3C9E3D7D7D7D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6B8CFE32F95EA2497EC2A96EC2A93F02894EF2B96 + EB2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2597EF2A91EE7FB6E2DADADAD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6CFDDE1439DEE29 + 91F02996EA2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2C93F02299E72892F2 + 4A9DE3D4DDE1D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D794BFE51F94E82D + 96EA2593F32B94EE2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2A96EE2A92E8A2C9E3D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6B8CFE32F95EA2497EC2A96EC2A93F02894EF2B96EB2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2395EE + 298FEC94C2E6D9D9D9D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DDE0E063ABE82592EE2B96E92995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2594F22195F02996EC3A95D9A7D1E8DEE3 + E1DDDDDBDCDDDDDBDDDEDBDDDEDBDDDEDBDDDEDBDDDEDBDDDEDBDDDEDBDDDEDB + DDDEDBDDDEDBDDDEDCDDDDDDDDDBDEE4E398C9EC3193DF2996EB2195F22695EF + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2A95EE2B94EF2B95EE2C95EC2B95EB2B95EC2A96EC + 2E96E82C93E79FC8E6D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6B8CFE32F + 95EA2497EC2A96EC2A93F02894EF2B96EB2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2894EE3597E9BAD2E0D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6DADADA91BCE42291EA2897EC2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2C94EE2C93F02695EF2396EB309DEA53AAE561ACE15DAAE65A + A8E75AA8E65AA8E75AA8E65AA8E75AA8E75AA8E75AA8E75AA8E75AA8E65AA8E7 + 5CA8E660A8E552A8EB339DEF2595ED2696EC2B97E72C97E92995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2A95EE2B94EE2B95ED2B95EC2A95EC2996ED2895ED2595EE2F94E6ADCC + E4D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6B8CFE32F95EA2497EC2A96EC + 2A93F02894EF2B96EB2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2493EE4DA1E5D5DDDFD6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6BACEE32B95E82196ED2A95ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2C + 95EC2E94ED2B93F12893F42490F42391F22593EF2694EC2694EC2694EC2694EC + 2694EC2694EC2694EC2694EC2694EC2694EC2694EC2694EC2794ED2592EF2392 + EF2492F02893F22B92F22E91F32C93F02995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2A95ED2C95 + ED2A95ED2895EE2695EF2694F02695F11793F83E9AE0CDD6DED6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6B8CFE32F95EA2497EC2A96EC2A93F02894EF2B96 + EB2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2895ED1F93ED70B0E5DCDCDCD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DAE049 + A2E41F95ED2A95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2696EC2696EC2B95EC + 3195EC2F95E92C98E82898E62896EB2896EB2896EB2896EB2896EB2896EB2896 + EB2896EB2896EB2896EB2896EB2896EB2896EB2996EC2B97E82F98E53097E62B + 96EA2695EF2794EF2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2A95ED2C95EB2A95ED2694F025 + 94F02794EF2795F01C91F370AFDDDCDBDBD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6B8CFE32F95EA2497EC2A96EC2A93F02894EF2B96EB2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2894EC2895EE2493EA + 9EC4E1D8D8D8D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DBDBDB78B5E02393EA2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2497EB2398EA2896EC2A95ED2795EE2295 + EE2096EF2895EE2994EE2994EE2994EE2995EE2995EE2994EE2994EE2994EE29 + 95EE2995EE2995EE2894EF2093F42294F12796EC2A97E92897E92298E92597EB + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2A95EC2B96EB2895EE2594F02795EF2C96ED2E95EA + 3D94DEB8CFDED7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6B8CFE32F + 95EA2497EC2A96EC2A93F02894EF2B96EB2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2894EC2794ED409BE7C8D8E1D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7A3C7E22B92E82895EE2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2895ED28 + 95ED2995ED2A95ED2995EE2995EE2A95ED2995ED2995EC2995ED2995ED2995EC + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2796EC2696EC2995ED2A94EF2C92F12D91F32C91F32C93EF2C + 94EF2C93EF2C93EF2C94EF2C94EF2C93EF2C93EF2C93EF2C94EF2C94EF2C93EF + 2C94EE2D95EB2D95ED2C93F02A93F22993F22793F12794EF2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2A95ED2996EC2795EF2695F12895EE2D93E93594E195C0DFDCDCDCD6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6B8CFE32F95EA2497EC2996EC + 2A93F02894EF2B96EB2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995EC2995ED2995EE2793EC67A9E4DCDDDDD6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6CBD9E1449EE92696EB2C95EC2A95EF2796EB2995ED2A95ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2A95ED2F94ED3094ED2B95EE2396ED + 2397E91F93E81E92ED2391ED2690F12792EB2194E92491F02791EE2493EB2493 + EB2493EB2493EB2493EB2493EB2493EB2493EB2493EB2493EB2493EB2493EB26 + 91ED2791EE2493EB2294EA2295E92295E82295E82294E92294E92294E92294E9 + 2294E92294E92294E92294E92294E92294E92294E92294E92295E92296E72295 + E82293EC2292ED2492EC2793EA2693EA2493EB2493EB2493EB2493EB2493EB24 + 93EB2493EB2493EB2493EB2493EB2493EB2493EB2493EB2493EB2493EB2493EB + 2493EB2493EB2493EB2493EB2493EB2493EB2493EB2493EB2493EB2593EB2494 + EA2292EB2692EB3493E35BA2DE9ACAE9DBE2E2D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6B7CFE22D97E92796EC2E95EC2895EE2794F02C95 + ED2995ED2995ED2995ED2995ED2995ED2A94EF2995EE2796EB2B93F12B94EC28 + 98EB2792EB99C0E5D8D8D8D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DB + DBDB71B2E62598E42E96EC2993F22399E82A95ED2B94EE2995ED2995ED2995ED + 2995ED2995ED2995ED2495EE2995EC2E95EC2395EE1E96EC3A9CE771B7E87DB9 + E37AB5E88EB7E787B8E07ABADE8AB8E48EB9E28ABADF8ABAE08ABAE08ABAE08A + BAE08ABAE08ABAE08ABAE08ABAE08ABAE08ABAE08ABAE08ABAE08ABAE08ABAE0 + 8ABADF8ABAE08ABADF8ABADF8ABAE08ABAE08ABAE08ABAE08ABAE08ABAE08ABA + E08ABADF8ABAE08ABAE08ABAE08ABADF8ABAE08ABAE08ABAE08ABAE08ABADF8A + BADF8ABADF8ABADF8ABAE08ABAE08ABAE08ABAE08ABAE08ABAE08ABAE08ABAE0 + 8ABAE08ABAE08ABAE08ABAE08ABAE08ABAE08ABAE08ABAE08ABAE08ABAE08ABA + DF8ABAE08ABAE08ABAE08ABAE08ABAE08ABAE08BBBDF8BBBE07FB7E487BAE6AD + CAE0D6DCE0D9D9D9D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6B5D0E12699E62C93EF3394EC2299E92692F32D93EF2995ED2995ED29 + 95ED2995ED2995EC2B92F12A94EF2399E62E8FF72F94EC1F99E63998E8C7D3E1 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7A5C8E12796E3 + 2394F42992F02397EB2A96EB2994EF2995EE2995ED2995ED2995ED2995ED2995 + ED2196EE2097EC2297EB1E96ED2793ED4A92E7B8CEF0DFDFDFDCDCDCD8D8D8DA + DADADBDBDBD8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8 + D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8 + D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8 + D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8 + D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8 + D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8 + D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8DBDBDBDBDBDBD7D7D7D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6B7CFE22B + 97E52A94F12C92F02198EB2894EF2D94EE2995ED2995ED2995ED2995ED2995ED + 2994F02B94EE2498E92B93F12C93EF1997ED64AAE0DBDCDDD6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D5DBDE49A2E41B92F52B93F12495 + EF2A97EA2994EF2995EE2995ED2995ED2995ED2995ED2995ED2A94EE3194EC35 + 94EB2F94EE2995EF2996E94B9EDECAD5E1D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6AECAE02E96E52994F12692F3 + 2197EC2895EC2D95EC2995ED2995ED2995ED2995ED2995ED2995ED2B95ED2596 + EC2896EC2892F41A94EC9AC5DDD8D8D8D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D9D9D986B9E12294EC2B92F02794F02797EA2995EE29 + 95ED2995ED2995ED2995ED2995ED2995ED2695EF2795ED2D96EB2C95ED2794F0 + 2697EC2396E65FA8DED4DCE0D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D9D9D995BFE22A94E82994EF2593F22596ED2896EC2B95 + EC2995ED2995ED2995ED2995ED2995ED2996EC2A95ED2694EF2796EB2691F23E + 9CE5CADADFD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6BFD3DE379ADC2B92EF2D93EF2197EC2A95ED2A95ED2995ED2995ED + 2995ED2995ED2995ED2F93EF2B95ED2098EB1D98ED2195F02894EF2B96EC2094 + E567AEE0DCE1E0D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6DCDDDD6AADE52492EE2B96EB2994EF2C94EE2796ED2996EC2995ED2995ED29 + 95ED2995ED2995ED2B95EB2995ED2694F12995EE2691EC80B5DCDCDCDCD6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DDDEDD + 68B2DC2B91EE3292EE1D97EE2C96EB2A95ED2995ED2995ED2995ED2995ED2995 + ED2A94EF2A95ED2997EA2D94EC2E92F12894F02794EF2C92F32595E482B9DFDF + DFDFD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D0D8DC3E99E81E + 92F42C97E72E95EC3193EE2794F02895ED2995ED2995ED2995ED2995ED2995ED + 2C95EC2895EE2693F22B93F22F96E7BDD0DDD6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7ABCBE02893EB2D94 + EE2598EA2995EC2995ED2995ED2995ED2995ED2995ED2995ED2695EE2795ED2B + 95EC2E94ED2E93EF2A94EE2794EF2A93F21D94F02792ECA1C4E1DADADAD6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D9D9D99BC0DF2892EA2594F02B95EC2B95EC + 2B95ED2994EE2995ED2995ED2995ED2995ED2995ED2995ED2C95EC2996EC2494 + F02C92EB5DAAE3DBDEDED6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7DEE154A3E42893F12D97EA2795EE29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2895ED2895ED + 2995ED2995ED2A95EC2795ED2293F14098E2B6CFE2D9D9D9D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D7D7D7CEDCE2449DE12794ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2C95EC2995ED2995F13292E6ACCBE0D8 + D8D8D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D8D8D8A6C4DF2E92E92A94F12696EE2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2A95ED2D95 + EC2F97E82B96EA1E90F54298E8C6D9E4D8D8D8D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6E0E1E177B7 + DC2A91E82894EE2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2B96EE2995EF2690F161A7E3DBDDDDD6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D9DBDC59A4DF2291F32697EC2996ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2B95ED2A94EF2895EE3098E523 + 94F01C8FF45EA6DFD6DEE1D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D9D9D9A2C6E32F92E53293EC2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2696EC2796F02892EEA5C8DFD7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D8D8D89FC5 + DF2991E92797EC2995EC2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2693F22294F22F98E73197E42495F02190EE + 77B0DDDEE1E2D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6DADADAB6CBDE3C98E41A94F42495EE2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2796EC2693ED54A5 + E2D6DFE1D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7DEE05BA4DE2693EF28 + 95EE2995EE2A95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2894EF2894F02A95ED2595EF2796EE2C96E82495F22990E87FB7E1E0E4 + E4D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DFE0E098C2E2 + 3F98DE2594F01C94F22696ED2A95ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2694F13092E7ADCCDFDADADAD6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D9D9D9A7CBE53290E82993F02797EA2597EC + 2695EF2A96EC2B95EC2A95ED2995ED2995ED2995ED2995ED2995ED2895EF2B95 + ED3196E92294F31D93F52D96EB2E96EA2095F32F94DF9BC4DCDCDCDCD6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6DADADAC6D4DD6EACE32990ED2297EC2693EF3191 + F13195EA2995ED2995ED2995ED2995ED2995ED2995ED2B94ED2995ED2B96EB29 + 95EE2695EE2997EB258FF06BACE6DEDFDFD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6DAE3E56EAAE2298FEE259AE52197EB2793F12497EB2A95 + EC2C94EE2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED28 + 95EE2995ED2995ED2594F12593F33B92E1ACCBE3DCDCDCD7D7D7D7D7D7D7D7D7 + D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 + D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 + D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 + D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7 + D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8DBDBDBD6DB + E0B3CCE27EB1E1409AE52692EC2895EF2895ED2995ED2A95ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2C92F12996EB3097E62E92F12295EF2397EA + 3B94E6BFD7E7DADADAD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D9D9D9BFD5E33A9BE02993EC3390F12D94ED1C98EC2496EC2B95ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2495EE1F95F42593EE479CDF8BBDE096BFDD90BDE191BEDF91BEDF91BEDF91BE + DF91BEDF91BEDF91BEDF91BEDF91BEDF91BEDF91BEDF91BEDF91BEDF91BEDF91 + BEDF91BEDF91BEDF91BEDF91BEDF91BEDF91BEDF91BEDF91BEDF91BEDF91BEDF + 91BEDF91BEDF91BEDF91BEDF91BEDF91BEDF91BEDF91BEDF91BEDF91BEDF91BE + DF91BEDF91BEDF92BFDF94BEDE97BDDFC8D3DCD6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6C9D5D994BFDB92BEDB94BFDE94BDE094BDE093BFDD9DBEDB + CCD5DFD7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6C4D1DB95BDDE93BD + E092BDE094BEDF97BEDE90BEE18EBDDF8CBCE278B2E054A3E02C96E61B94ED23 + 95EF2A95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2193F32997EA2E95EC3591F02893F11E91EA79B8E3E2E6E6D7D7 + D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DBDBDB88 + C0E02A8FEA378FF42797EA2196EE2895EE2795EC2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2C96EA2A95EC2495 + F12795ED2993E72592EE1D90F42692EA2792E92792E92792E92792E92792E927 + 92E92792E92792E92792E92792E92792E92792E92792E92792E92792E92792E9 + 2792E92792E92792E92792E92792E92792E92792E92792E92792E92792E92792 + E92792E92792E92792E92792E92792E92792E92792E92792E92792E92792E927 + 93E72795E62690EB9BBFDDD7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + BAD3DC2D95E62991ED2591EC2D92E72993E62594E63291E3A4C4E1D8D8D8D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6ABCADE2F91E42692EB2593EA2592E92B + 92E72492ED2595EA2492EA2693EE2593EE2796EE2897EA2996EC2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2594 + F22695EE2895ED2F95ED2592F2479DE7CEDFE5D7D7D7D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DEE25BA5E21F95EA + 2998E92B93EF2A94EF2A95EC2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2694F22492F52493F32794EF2A95EC29 + 96ED2795EF2696ED2696ED2695ED2695ED2696ED2696ED2695ED2695ED2696ED + 2696ED2696ED2695ED2695ED2696ED2696ED2695ED2695ED2696ED2696ED2695 + ED2695ED2695ED2696ED2696ED2695ED2695ED2696ED2696ED2695ED2695ED26 + 96ED2696ED2696ED2695ED2695ED2696ED2696ED2695ED2896EC2795ED1D90F3 + 77AFDEDCDCDCD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6CEDADD4C9FEB2D8F + F72992F32F96E82598E91F94EF2291F284B6E0DADADAD6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6C6D8E03F99E52292EE2797EC2295EF2895EE2894ED2C98E7 + 2A96EB2894F02992F22D93F03193EE2B94EC2895ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED3394EC2592F62397EC20 + 9AE82C92E5ABC9E4DADADAD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7BAD2E12C9DDB2F96E92E92ED2695 + EF2C95EE2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2D95EB3096E92F96EA2C96EC2795EE2695EF2696EE2895ED + 2895ED2895ED2895ED2895ED2895ED2895ED2895ED2895ED2895ED2895ED2895 + ED2895ED2895ED2895ED2895ED2895ED2895ED2895ED2895ED2895ED2895ED28 + 95ED2895ED2895ED2895ED2895ED2895ED2895ED2895ED2895ED2895ED2895ED + 2895ED2895ED2895ED2895ED2895ED2996ED2296EC1895F04AA1E2D4DCE1D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DCDCDC6BAEE12394ED2C93EE3196E822 + 97EB2893F11F92F65CA8E3DBDDDDD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + DBDEDE5CA5E32692EE2B97E92395F02A95EE2E92F02D90F62A91F52793F22595 + F02496ED2497EB2896EC2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED3195EA2992F42396EE2297E076B2DDDFDFDF + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6DCDCDC8BBDE02393E62F95EE2894EF2195EF2A95ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2795ED2996EC2B96EB2A95ED2794F02A94EE2F96EB2C94ED2B94EE2B94EE2B94 + EE2B94EE2B94EE2B94EE2B94EE2B94EE2B94EE2B94EE2B94EE2B94EE2B94EE2B + 94EE2B94EE2B94EE2B94EE2B94EE2B94EE2B94EE2B94EE2B94EE2B94EE2B94EE + 2B94EE2B94EE2B94EE2B94EE2B94EE2B94EE2B94EE2B94EE2B94EE2B94EE2B94 + EE2B94EE2B94EE2D94ED3094EB2895E93799E7BFD2E0D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D8D8D896BDDD2794E82A93EF2896ED1C96F03493EC2495F0 + 3CA0E1CED8DDD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DBDBDB76B3E72492 + ED2A97E72195F02894EF2C94ED2695EE2896EC2B96EA2C95EB2A94EF2893F328 + 95EF2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED1F98EB2E98EB2691F0479EE2D1DDE2D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6DAE0E357ACE1278FEF2F94EE2695ED2993F02B95EE2894EF2694F0 + 2996EC2C96EA2A95ED2995ED2995ED2995ED2995ED2995ED2695ED2496ED2695 + ED2595ED2495EF2695EE2895ED2895ED2895ED2895ED2895ED2895ED2895ED28 + 95ED2895ED2895ED2895ED2895ED2895ED2895ED2895ED2895ED2895ED2895ED + 2895ED2895ED2895ED2895ED2895ED2895ED2895ED2895ED2895ED2895ED2895 + ED2895ED2895ED2895ED2895ED2895ED2895ED2895ED2895ED2895ED2895ED2A + 95ED3092F11F97F02796E6ABC4E0D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6AFCCDF2795E62495F02795ED2496ED3195EC2B96EC2994E6A8CCE5D7D7 + D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D8D8D89FC4E03194E72495F02794F029 + 95ED2796ED2597EB2697EA2897EB2996EB2795ED2695EF2895EE2995ED2995ED + 2995ED2995ED2995ED2A96EB2A97EA2895ED2894EE2B95ED2B94EF2593F22096 + EC2D94EF3791E8ABCDE7D9D9D9D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7 + C7D6E1459CE12295EE2A94ED2C95ED2D95EB2A95ED2595EF2695EE2A96EB2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2A95ED2995ED2995ED2A95ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2B94ED2F94ED1D99EF + 1C98E65DA5DDD2DDE5D9D9D9D7D7D7D7D7D7D7D7D7D7D7D7DEDEDEA1C5E32A8F + ED2294F12895EC2A95ED2895ED2B95ED2592ED61AAE3DDE2E2D8D8D8D7D7D7D7 + D7D7D7D7D7D7D7D7E2E2E28BBEE12D91E62193F52B94EE2A95ED2595EF2A95ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2996EC2796EC2795EE2A95EC2F95EA2E95EB2894F02193F62594E790BEE0DE + DEDED6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D8D8D8B0CCDF2896 + E11F95EF2C96EC2B96EB2B96EA2996EC2695EF2594F02995EE2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2B95EC2B95EE2496EF2296E259AA + DEB0CBE5C8DAE8C2DDE9C4DBE9C3DDEA9FD0E9459EDD1F93F12494F02995EC29 + 95ED2995ED2994EC2A94EE2C95E063B0D9AFD1E8C6DAEBC4D8E8C3DBE9C3DDE8 + 9DCAE9439ADF2595EE2394F02D95EB2B95ED2595EF2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2695EF2394F128 + 95ED2C96EA2D96E92C96EA2995ED1B8FF36FB1DEDDDFDED6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DCDCDC93BFDE2895E72394F31F + 93F22495EF2B96EA2A95ED2894F02995EE2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2895ED2896EB3293EE3591F12A94F12295E82D97E12E9AE22A + 9AE83996E83A98E62A96E02697E62D94EE2B94EE2A95ED2995ED2995ED2894EC + 2A95EC2593F22390F33293E93897E63198E72A9AE8299BE32F94E22894EB1F96 + F02695EE2F95EB2C95EC2695EE2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2795EF2794EF2B96EB2996EC2395F0 + 2295F22493ED55A2E2D2D9DFD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6DDDDDD82B4DF2B91E92093F61E93F32A96EB + 2D95EB2B95EE2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED28 + 95ED2496EC2396ED2595F02A92F22992F21F94F21D95F12A92F23091F32D92F1 + 2595EF2796ED3094EC2D95ED2B95ED2A95ED2995ED2995ED2995ED2A94EF2C93 + EF2797EA2396EB2794F12F90F33690F12992F22095F12096EF2895ED2E94EC2B + 95ED2695ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2B95EC2C96EA2396EE1E94F62594EF459ADFC3D3 + E1D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6DEE26BA9DC2E91E92194F32996EB2D95EC2A93F02A95 + ED2995ED2895ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2A95ED2B95ED2396ED + 1E97ED2596ED2D93EF2D92F22A94EE2497E72098E72097EA2496EE2495EE2496 + EC2A96EC2C95ED2A95ED2995ED2995ED2795ED2894EE2995EE2498EA2497EB29 + 93F02C92F12B93F02893F02696EE2796EC2994EE2A93EF2995EE2795EC2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2895EE2995EE2A96EB2295EF2293F14096DDAFCDE1D9D9D9D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D9D9D9CEDDE35EA4DC2791EE2994F12C96EB2795ED2595EF2995EE2C94EE2C + 94EE2995EE2896EC2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2A95ED3093EF3193ED2E95EB2996EB2696 + EB2695ED2C93F02C93F02596EC2795ED3092EF2F93EE2A96EB2A95ED2B95ED2B + 95ED2A95ED2895ED2795ED2794F02594F12795ED2E95EC2F92EE2894ED1F97EA + 2895EC2C95EB2B96EB2994EE2893F02795EE2896EC2995ED2995ED2995ED2995 + ED2995ED2995ED2A96EC2995ED2795EE2895EF2995ED2995EE2795F02695ED29 + 95EC2293F13395E3A3C6E1DCDCDCD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7C8 + D9E157A0E3228FF62796EC299BE42095F02B94EE3293EE2E92F02994EF2898E9 + 2996EB2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2A95ED2A95ED2995ED2895ED2895ED2995EE2A + 95EE2995ED2995ED2A94EE2A95ED2A95ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2895ED2995ED2A95ED2A95ED2995ED2995ED2995ED2A95ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2A + 97EA2895ED2494F12794F02C95EC2B94EE2994ED2996EC2394F42E92E89BC2DF + DCDCDCD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7C9D7DF469FE1 + 1D91F42994EF2F94EB2D96EA2797EA2397EC2795EE2D94EE2C95EE2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2795EF2794F02895EE + 2B96EC2D96E92C96EA2B96EB2093F42391ED97BEDFDCDCDCD6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D8D8D8C2D6E04EA0E2278FF62B93 + EF2595EE2196ED2497EB2996EC2C93F02A94EF2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2793F12A94F02C95EC2A96EB2696EE2596 + EC2495EF2A92E994BDDFDCDCDCD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7C9D5DF4E9FE12193EC2093F52592F52F + 94EE3096EA2696EE2695EE2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2B94EE2E94EB2C96EB2395EF1F94F42393EE3295E298C1DFDC + DCDCD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D8D8D8C2D8E253A4DC2E92E82A91F63192F03195EA2696ED + 2595EE2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2A + 95ED2E96EA2B96EB2194F22792EF4395DEA1C4DFDCDCDCD6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D9D9D9D0DFE56AAADD2791E92494EF2C96EB2B93EF2894EF2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2595F02996EC2A96EC + 2592EC479AE0ADC8DFDCDCDCD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D8D8 + D8D8DFE37FB8DE2297E12095EF2E93EF2095F12496EE3394EC2A95EE2297EC2A + 96EC3093F02A95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2895ED2494F1 + 1E94F32693F13594EB3495EA2797EC2097EC2294F22290F054A1E2C0D2E0D9D9 + D9D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DDDDDD9E + C4E0319BE02593EC3594ED2A93F02693F22A96EC2495EE2095EF2897E92995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2B95ED2C95ED2597EA2595EE2991 + F52C92F32A97E92495ED2692E974AFDED0D9E0D7D7D7D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DADADABACEDE4FA2E2 + 2892EB2D94ED2995EB2695EF2996EC2797EA2197ED2895ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2A97EA3197E63295EB2A95ED1F97ED1D97EF2891F137 + 91EA8EBBDDDDDEDCD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7CBD9E16CB3E42995E12499 + E62896EC3593EE3092EF2394F22895EE2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2795EE2694F02A93EF2996EC2598E72D94E1539FE5ABC9E4DDDDDDD6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DEDFDF9AC5E1409DDF2991EA2A90F727 + 93F02899E52996EC2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2A95ED2496EE2495F0 + 2D91F02791F12893E571B1DBCED8DED8D8D8D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6DADADACAD4E06CACE52795E32698E52A96EB2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2895ED + 2995ED2995ED2995ED2995ED2995ED2895ED2D95EA2D95EB2391EB479BE4A5C6 + E2DDDFDFD6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6DDE1E19DC8E0439AE32990ED2893F12895EE2896EB2796 + EC2895EE2995EE2A94ED2B95ED2994EE2995EE2995EE2B95ED2B95EC2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2895ED2795EE2895EE2994EE2A94EE2D95ED2E94ED2996EB2795ED2995 + ED2A96EB2996EC2793F02490F03092E577B4DECAD9E0D9D9D9D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6DBDBDBC9DCE77DB7E03B97E42991EB2594F12696EE2796EA2896ED29 + 94F02A94EF2B94EE2A95EC2A96EB2995EC2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2895EF2694 + F12995EF2C95EC2B95EC2A96EC2A95EE2997EC2896EC2795EE2596EF2795EC2E + 90E858A4E4ADD1E4E1E1E1D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D8 + D8D8DFDFDFBFD5DF77B0E03395EC2592F02B95EC2B94E82896ED2796EC2897EA + 2898E82697EA2496ED2395F02895EE2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2A95ED2B96EC2B96EA2B97E925 + 97E91E97ED1A97F02694F12E92F32990F42490ED4EA4E29EC6DDD7E2E2DDDDDD + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + DDDDDDB9D0DF79B3E03A97E52490EF2A94F02C94ED2A95EE2895EE2A93EF2E92 + F02E93F02A95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2996EC2897EA2896EC2894EE2993F02C93F22C92F1 + 2694EE2891EA51A1E59AC3E2D3DDE0D9D9D9D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6DBDB + DBBCD1DF6EB0E53998E9298FEB2A94EE2894EF2893EF2B93F22C93F22A95EE28 + 94EC2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995EC2995F02792F22993F12A95F02C95ED2A92E92F94E650A6E294C3E1D4DE + E1D9D9D9D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7DCDCDCC3 + D4E080B9DF4BA0E12595ED1A93EF2698E9309AE12A96EC2895ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2895ED2A98E92598 + E41D95EF1D92EE3998E46CADDBABCBDDD7DDDFDADADAD6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7DEDEDECFDBDF + A8C8DF6CAFDF3A99E22491E82693ED2895EE2895EE2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2895EE2795EE2592E92F96E45AA6DE92BDDFC1 + D3E0DEE0E0D8D8D8D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7DEDFDEBFD3 + E398C1E762ABE53F9AE52A92E92391EF2493F02694EE2C96EC2D95E92C95EA2B + 96EC2896EC2695ED2595EE2695EF2695EE2795EC2895EC2A96EC2B96EB2A95ED + 2894F02894F02894F02894F02894F02894EF2796EC2896EC2896EC2A95ED2B95 + EE2C94EE2995ED2598E92797EA2996EB2B95EC2D95ED2E95ED2A95EE2394EF1E + 93EF2292EC3495E65AA4E486B6E5B5CCE5D7DCDFD8D8D8D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D8D8D8DBDDDDC7 + D5DEA1C6E171B1E54A9DE53496E82991EC2790F12791F12893F12A94EF2A95ED + 2A95EC2A93EE2A93EF2A94F02993F02893F12793F22995EF2B96EB2B95EB2B96 + EB2B96EB2B96EB2B95EC2D94ED2D94EF2B94EF2B93F02893F22793F32893F129 + 93EF2A94F02893EE2793EE2793EE2792EC2F93E83F9AE664AAE590BDE0B9CFE0 + D7DBDEDADADAD5D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D9D9D9DEDEDE + D2DDE2BFD3DF9DC4E178B5E862A9E2499FE23497E42994E62694EA2693EB2694 + EB2595EB2695EB2597EA2597E92697EA2796EC2796EC2796EC2796EC2796EC28 + 96EC2D93F32C92F12893ED2694E92497E7239AE52497E82793EC2D94E83E9AE3 + 55A6E16CB0E085BFE4B2CEDECBD7E0DDDDDED9D9D9D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7 + D7DADADADCDDDCCDD8DDB2D0E29BC4E58CBBE375B3E75FA9E555A4E44AA1E439 + 98E23697E13194E72D92ED2C92EC2C92EC2C92EC2D92ED2E93ED2E96E93498E6 + 469EE454A3E261A8E274B0E184BAE093C2E1A8CDE5C2D6E0D6DCDEDCDCDCD9D9 + D9D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D7D7D7D8D8D8D8D8D8D9D9D9DDDCDBDADCDDD0DAE1BED2E5B5CEE6B3CCE4 + B3CCE2B2CBE1B1CAE1B1CAE1B3CBE2B4CCE2B3CFE2B9D2E2CAD7DFD6DADEDCDB + DCDADADAD8D8D8D8D8D8D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6} + Stretch = True + Transparent = True + end + object lblTitle: TLabel + Left = 8 + Top = 8 + Width = 590 + Height = 41 + Alignment = taCenter + AutoSize = False + Caption = 'Ask for a PASA (Account)' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -32 + Font.Name = 'Tahoma' + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + Transparent = False + end + object pnlBottom: TPanel + Left = 0 + Top = 337 + Width = 615 + Height = 51 + Align = alBottom + BevelOuter = bvNone + TabOrder = 0 + DesignSize = ( + 615 + 51) + object bbExecute: TBitBtn + Left = 330 + Top = 10 + Width = 130 + Height = 31 + Action = actExecute + Anchors = [akTop, akRight] + Caption = 'Ask for a PASA' + Glyph.Data = { + DE010000424DDE01000000000000760000002800000024000000120000000100 + 0400000000006801000000000000000000001000000000000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333 + 3333333333333333333333330000333333333333333333333333F33333333333 + 00003333344333333333333333388F3333333333000033334224333333333333 + 338338F3333333330000333422224333333333333833338F3333333300003342 + 222224333333333383333338F3333333000034222A22224333333338F338F333 + 8F33333300003222A3A2224333333338F3838F338F33333300003A2A333A2224 + 33333338F83338F338F33333000033A33333A222433333338333338F338F3333 + 0000333333333A222433333333333338F338F33300003333333333A222433333 + 333333338F338F33000033333333333A222433333333333338F338F300003333 + 33333333A222433333333333338F338F00003333333333333A22433333333333 + 3338F38F000033333333333333A223333333333333338F830000333333333333 + 333A333333333333333338330000333333333333333333333333333333333333 + 0000} + NumGlyphs = 2 + TabOrder = 0 + end + object bbCancel: TBitBtn + Left = 482 + Top = 10 + Width = 116 + Height = 31 + Anchors = [akTop, akRight] + Kind = bkCancel + NumGlyphs = 2 + TabOrder = 1 + end + end + object reDescription: TMemo + Left = 214 + Top = 64 + Width = 384 + Height = 218 + Anchors = [akLeft, akTop, akRight] + BorderStyle = bsNone + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Verdana' + Font.Style = [] + Lines.Strings = ( + 'Pascalcoin works like a Bank' + '' + 'For this reason, you need an Account to store your ' + 'Pascals.' + '' + 'Accounts are also called PASA (PAScal Account) and ' + 'are ' + 'a short sequential number with a checksum value like ' + '"1234-54" where "54" is the checksum' + '' + 'With this assistant you will be able to ask for a Free ' + 'Account to the network') + ParentColor = True + ParentFont = False + ReadOnly = True + ScrollBars = ssVertical + TabOrder = 1 + end + object ebMessageToSend: TEdit + Left = 17 + Top = 307 + Width = 581 + Height = 21 + Anchors = [akLeft, akTop, akRight] + TabOrder = 2 + end + object ActionList: TActionList + Left = 156 + Top = 78 + object actExecute: TAction + Caption = 'Execute (F12)' + ShortCut = 123 + OnExecute = actExecuteExecute + end + end +end diff --git a/src/gui-classic/UFRMAskForAccount.pas b/src/gui-classic/UFRMAskForAccount.pas new file mode 100644 index 000000000..b60dabf68 --- /dev/null +++ b/src/gui-classic/UFRMAskForAccount.pas @@ -0,0 +1,161 @@ +unit UFRMAskForAccount; + +{ Copyright (c) 2021 by Albert Molina + + Distributed under the MIT software license, see the accompanying file LICENSE + or visit http://www.opensource.org/licenses/mit-license.php. + + This unit is a part of the PascalCoin Project, an infinitely scalable + cryptocurrency. Find us here: + Web: https://www.pascalcoin.org + Source: https://github.com/PascalCoin/PascalCoin + + If you like it, consider a donation using Bitcoin: + 16K3HCZRhFUtM8GdWRcfKeaa6KsuyxZaYk + + THIS LICENSE HEADER MUST NOT BE REMOVED. +} + +{$IFDEF FPC} + {$MODE Delphi} +{$ENDIF} + +interface + +{$I ../config.inc} + +uses +{$IFnDEF FPC} + pngimage, Windows, Messages, +{$ELSE} + LCLIntf, LCLType, LMessages, +{$ENDIF} + SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls, UAccounts, Buttons, ActnList, + ExtCtrls, ComCtrls, + {$IFNDEF FPC}System.Actions, System.Generics.Collections{$ELSE}Generics.Collections{$ENDIF}, + UNode, UWallet, UNetProtocol, UPCDataTypes, UThread, UBaseTypes, + UBlockChain; + +type + + { TFRMAskForAccount } + + TFRMAskForAccount = class(TForm) + ActionList: TActionList; + actExecute: TAction; + pnlBottom: TPanel; + bbExecute: TBitBtn; + bbCancel: TBitBtn; + reDescription: TMemo; + lblDoYouWantToSendAMessage: TLabel; + ebMessageToSend: TEdit; + imgAskForAccount: TImage; + lblTitle: TLabel; + procedure actExecuteExecute(Sender: TObject); + procedure FormCreate(Sender: TObject); + private + { Private declarations } + FNode : TNode; + FNetData : TNetData; + FWalletKeys : TWalletKeysExt; + FNewPublicKey : TAccountKey; + public + { Public declarations } + class function AskForAccount(AOwnerForm : TComponent; ANode : TNode; ANetData : TNetData; AWalletKeys : TWalletKeysExt; const ANewPubliKey : TAccountKey) : Boolean; + end; + + +implementation + +{$R *.dfm} + +uses UFRMSplash, UPCTNetDataExtraMessages, + UPCAbstractMemAccountKeys, + UOrderedList; + +procedure TFRMAskForAccount.actExecuteExecute(Sender: TObject); +var Ltc, Ltc2 : TTickCount; + Lnodes, LtotalNodes : Integer; + Lmempool : TPCOperationsComp; + LOnsafebox,LOnMempool : Integer; +begin + // Ask + LOnSafebox := 0; + LOnMempool := 0; + LtotalNodes := 0; + + if (ebMessageToSend.Text='') then begin + if (Application.MessageBox(PChar('Are you sure to send an EMPTY message to the blockchain?'), + PChar(Application.Title),MB_ICONQUESTION+MB_YESNO+MB_DEFBUTTON2)<>IdYes) then Exit; + end; + + Try + TFRMSplash.SplashStart(Self,'Ask for PASA',True,True,100,0); + try + TFRMSplash.SplashUpdate('Checking current state... '+ebMessageToSend.Text,10); + FNode.GetAccountsAvailableByPublicKey(FNewPublicKey,LOnsafebox,LOnMempool); + if (LOnMempool>0) then raise Exception.Create(Format('%d accounts are on the mempool and will be available after next block.'+#10+ + 'Your wallet will have at least %d accounts, no need to ask for more!',[LOnMempool,LOnsafebox+LOnMempool])); + if (LOnSafebox>0) or (LOnMempool>0) then raise Exception.Create(Format('Your wallet has at least %d accounts, no need to ask for more!',[LOnsafebox+LOnMempool])); + TFRMSplash.SplashUpdate('Sending message to nodes... '+ebMessageToSend.Text,20); + Ltc := TPlatform.GetTickCount; + repeat + TFRMSplash.SplashUpdate(Format('Asking to %d nodes',[FNetData.ConnectionsCountAll]),10); + Lnodes := TPCTNetDataExtraMessages.AskForFreeAccount(FNewPublicKey,ebMessageToSend.Text); + inc(LtotalNodes,Lnodes); + // + if (LNodes>0) then begin + Ltc2 := TPlatform.GetTickCount; + repeat + TFRMSplash.SplashUpdate(Format('Asked to %d nodes (total %d) waiting for success...',[Lnodes,LtotalNodes]),40); + sleep(100); + FNode.GetAccountsAvailableByPublicKey(FNewPublicKey,LOnsafebox,LOnMempool); + until (Application.Terminated) or (Self.ModalResult<>0) or (LOnsafebox>0) or (LOnMempool>0) or (TPlatform.GetElapsedMilliseconds(Ltc2)>(10000)); + end else sleep(500); + until (Application.Terminated) or (Self.ModalResult<>0) or (LOnsafebox>0) or (LOnMempool>0) + or (FNetData.ConnectionsCountAll<=0) + or (TPlatform.GetElapsedMilliseconds(Ltc)>(60 * 60 * 1000)); // 1 hour + finally + TFRMSplash.SplashFinalize; + end; + if (LOnsafebox+LOnMempool)=0 then begin + Application.MessageBox(PChar('No accounts have been detected...'),PChar(Application.Title),MB_ICONERROR+MB_OK); + ModalResult := MrNone; + end else begin + Application.MessageBox(PChar(Format('Congratulations!'+#10+#10+'%d new accounts are on the way!'+#10+#10+'Total accounts will be %d',[LOnMempool,LOnsafebox+LOnMempool])),PChar(Application.Title),MB_ICONINFORMATION+MB_OK); + ModalResult := MrOk; + end; + Except + on E:Exception do begin + if (E is ESplashCancel) and ((LOnsafebox+LOnMempool)>0) then begin + ModalResult := MrOk; + end else Raise; + end; + End; +end; + +class function TFRMAskForAccount.AskForAccount(AOwnerForm: TComponent; + ANode: TNode; ANetData: TNetData; AWalletKeys: TWalletKeysExt; const ANewPubliKey : TAccountKey): Boolean; +var FRM : TFRMAskForAccount; +begin + TPCTNetDataExtraMessages.InitNetDataExtraMessages(ANode,ANetData,AWalletKeys); + FRM := TFRMAskForAccount.Create(AOwnerForm); + Try + FRM.FNode := ANode; + FRM.FNetData := ANetData; + FRM.FWalletKeys := AWalletKeys; + FRM.FNewPublicKey := ANewPubliKey; + Result := FRM.ShowModal=MrOk; + Finally + FRM.Free; + End; +end; + +procedure TFRMAskForAccount.FormCreate(Sender: TObject); +begin + bbCancel.Cancel := True; + bbCancel.ModalResult := MrCancel; +end; + +end. diff --git a/src/gui-classic/UFRMNewPrivateKeyType.lfm b/src/gui-classic/UFRMNewPrivateKeyType.lfm index 25414aed7..fccec59d9 100644 --- a/src/gui-classic/UFRMNewPrivateKeyType.lfm +++ b/src/gui-classic/UFRMNewPrivateKeyType.lfm @@ -15,8 +15,7 @@ object FRMNewPrivateKeyType: TFRMNewPrivateKeyType OnCreate = FormCreate OnDestroy = FormDestroy Position = poOwnerFormCenter - LCLVersion = '1.8.4.0' - Visible = False + LCLVersion = '2.0.2.0' object Label1: TLabel Left = 30 Height = 13 diff --git a/src/gui-classic/UFRMNewPrivateKeyType.pas b/src/gui-classic/UFRMNewPrivateKeyType.pas index 12278ad16..3c85f404f 100644 --- a/src/gui-classic/UFRMNewPrivateKeyType.pas +++ b/src/gui-classic/UFRMNewPrivateKeyType.pas @@ -57,7 +57,7 @@ TFRMNewPrivateKeyType = class(TForm) implementation uses - UAccounts, UConst ; + {$IFDEF USE_GNUGETTEXT}gnugettext,{$ENDIF}UAccounts, UConst; {$IFnDEF FPC} {$R *.dfm} @@ -82,6 +82,8 @@ procedure TFRMNewPrivateKeyType.FormCreate(Sender: TObject); Var l : TList; i : Integer; begin + {$IFDEF USE_GNUGETTEXT}TranslateComponent(self);{$ENDIF} + // FGeneratedPrivateKey := Nil; FWalletKeys := Nil; ebName.Text := DateTimeToStr(now); diff --git a/src/gui-classic/UFRMNodesIp.lfm b/src/gui-classic/UFRMNodesIp.lfm index ea7a2d48c..4c0ee483a 100644 --- a/src/gui-classic/UFRMNodesIp.lfm +++ b/src/gui-classic/UFRMNodesIp.lfm @@ -14,8 +14,7 @@ object FRMNodesIp: TFRMNodesIp Font.Name = 'Tahoma' OnCreate = FormCreate Position = poOwnerFormCenter - LCLVersion = '1.8.4.0' - Visible = False + LCLVersion = '2.0.2.0' object Label1: TLabel Left = 30 Height = 13 diff --git a/src/gui-classic/UFRMNodesIp.pas b/src/gui-classic/UFRMNodesIp.pas index 0245b02d8..1a0da863f 100644 --- a/src/gui-classic/UFRMNodesIp.pas +++ b/src/gui-classic/UFRMNodesIp.pas @@ -54,7 +54,7 @@ TFRMNodesIp = class(TForm) implementation uses - UNetProtocol, UNode, UConst, USettings; + {$IFDEF USE_GNUGETTEXT}gnugettext,{$ENDIF}UNetProtocol, UNode, UConst, USettings; {$IFnDEF FPC} {$R *.dfm} @@ -112,6 +112,8 @@ procedure TFRMNodesIp.cbTryOnlyWithThisServersClick(Sender: TObject); procedure TFRMNodesIp.FormCreate(Sender: TObject); begin + {$IFDEF USE_GNUGETTEXT}TranslateComponent(self);{$ENDIF} + // FAppParams := Nil; PrepareData; end; diff --git a/src/gui-classic/UFRMOperation.dfm b/src/gui-classic/UFRMOperation.dfm index bfac3cda7..8f3b4d9db 100644 --- a/src/gui-classic/UFRMOperation.dfm +++ b/src/gui-classic/UFRMOperation.dfm @@ -90,7 +90,7 @@ object FRMOperation: TFRMOperation object bbCancel: TBitBtn Left = 461 Top = 476 - Width = 116 + Width = 120 Height = 31 Kind = bkCancel NumGlyphs = 2 @@ -185,7 +185,7 @@ object FRMOperation: TFRMOperation object lblEncryptionErrors: TLabel Left = 255 Top = 96 - Width = 187 + Width = 152 Height = 33 AutoSize = False Caption = 'Errors detected' @@ -211,7 +211,7 @@ object FRMOperation: TFRMOperation object rbEncryptedWithEC: TRadioButton Left = 15 Top = 35 - Width = 207 + Width = 234 Height = 19 Caption = 'Encrypted with dest account public key' Checked = True @@ -222,7 +222,7 @@ object FRMOperation: TFRMOperation object rbEncrptedWithPassword: TRadioButton Left = 15 Top = 53 - Width = 141 + Width = 234 Height = 19 Caption = 'Encrypted with password' TabOrder = 2 @@ -232,7 +232,7 @@ object FRMOperation: TFRMOperation object rbNotEncrypted: TRadioButton Left = 15 Top = 93 - Width = 162 + Width = 234 Height = 19 Caption = 'Dont encrypt (Public payload)' TabOrder = 4 @@ -266,21 +266,25 @@ object FRMOperation: TFRMOperation end object rbEncryptedWithOldEC: TRadioButton Left = 15 - Top = 16 - Width = 159 + Top = 12 + Width = 234 Height = 19 Caption = 'Encrypted with old public key' TabOrder = 0 TabStop = True OnClick = memoPayloadClick end - object cbPayloadAsHex: TCheckBox - Left = 448 + object cbPayloadDataInputType: TComboBox + Left = 413 Top = 96 - Width = 97 - Height = 17 - Caption = 'As Hex' + Width = 89 + Height = 21 + Style = csDropDownList TabOrder = 6 + Items.Strings = ( + 'As String'#11 + 'As Hexadecimal'#11 + 'As Base58') end end object ebFee: TEdit @@ -295,11 +299,14 @@ object FRMOperation: TFRMOperation Top = 7 Width = 524 Height = 204 - ActivePage = tsBuyAccount + ActivePage = tsTransaction TabOrder = 0 OnChange = PageControlOpTypeChange object tsTransaction: TTabSheet Caption = 'Transaction' + DesignSize = ( + 516 + 176) object lblDestAccount: TLabel Left = 13 Top = 32 @@ -335,10 +342,11 @@ object FRMOperation: TFRMOperation ParentFont = False end object sbSearchDestinationAccount: TSpeedButton - Left = 208 + Left = 490 Top = 29 Width = 23 Height = 22 + Anchors = [akTop, akRight] Glyph.Data = { 36030000424D3603000000000000360000002800000010000000100000000100 18000000000000030000120B0000120B00000000000000000000FF00FF4A667C @@ -371,17 +379,31 @@ object FRMOperation: TFRMOperation object ebDestAccount: TEdit Left = 115 Top = 29 - Width = 87 + Width = 369 Height = 21 + Anchors = [akLeft, akTop, akRight] TabOrder = 0 end object ebAmount: TEdit Left = 115 - Top = 58 + Top = 56 Width = 87 Height = 21 TabOrder = 1 end + object memoEPASA: TMemo + Left = 13 + Top = 96 + Width = 492 + Height = 65 + TabStop = False + BorderStyle = bsNone + ReadOnly = True + TabOrder = 2 + WantReturns = False + OnChange = memoPayloadClick + OnClick = memoPayloadClick + end end object tsChangePrivateKey: TTabSheet Caption = 'Change Key' diff --git a/src/gui-classic/UFRMOperation.lfm b/src/gui-classic/UFRMOperation.lfm index e72c92479..bdd6ae40e 100644 --- a/src/gui-classic/UFRMOperation.lfm +++ b/src/gui-classic/UFRMOperation.lfm @@ -15,7 +15,7 @@ object FRMOperation: TFRMOperation OnCreate = FormCreate OnDestroy = FormDestroy Position = poOwnerFormCenter - LCLVersion = '1.8.0.6' + LCLVersion = '2.0.10.0' object lblAccountCaption: TLabel Left = 25 Height = 13 @@ -142,7 +142,7 @@ object FRMOperation: TFRMOperation Left = 255 Height = 33 Top = 87 - Width = 182 + Width = 153 AutoSize = False Caption = 'Errors detected' Font.Color = clRed @@ -223,12 +223,18 @@ object FRMOperation: TFRMOperation OnClick = memoPayloadClick TabOrder = 0 end - object cbPayloadAsHex: TCheckBox - Left = 444 - Height = 19 - Top = 92 - Width = 54 - Caption = 'As Hex' + object cbPayloadDataInputType: TComboBox + Left = 412 + Height = 21 + Top = 88 + Width = 89 + ItemHeight = 13 + Items.Strings = ( + 'As String'#11 + 'As Hexadecimal'#11 + 'As Base58' + ) + Style = csDropDownList TabOrder = 6 end end @@ -244,8 +250,8 @@ object FRMOperation: TFRMOperation Height = 167 Top = 11 Width = 521 - ActivePage = tsListAccount - TabIndex = 2 + ActivePage = tsTransaction + TabIndex = 0 TabOrder = 0 OnChange = PageControlOpTypeChange object tsTransaction: TTabSheet @@ -285,7 +291,7 @@ object FRMOperation: TFRMOperation Left = 115 Height = 21 Top = 29 - Width = 85 + Width = 357 TabOrder = 0 end object ebAmount: TEdit @@ -296,9 +302,9 @@ object FRMOperation: TFRMOperation TabOrder = 1 end object sbSearchDestinationAccount: TSpeedButton - Left = 208 + Left = 480 Height = 22 - Top = 29 + Top = 28 Width = 23 Glyph.Data = { 36030000424D3803000000000000360000002800000010000000100000000100 @@ -330,6 +336,23 @@ object FRMOperation: TFRMOperation } OnClick = sbSearchDestinationAccountClick end + object memoEPASA: TMemo + Left = 13 + Height = 48 + Top = 88 + Width = 492 + BorderStyle = bsNone + Font.Color = clBlack + Font.Height = -16 + Font.Name = 'Tahoma' + OnChange = memoPayloadClick + OnClick = memoPayloadClick + ParentFont = False + ReadOnly = True + TabOrder = 2 + TabStop = False + WantReturns = False + end end object tsChangePrivateKey: TTabSheet Caption = 'Change key' @@ -1024,7 +1047,7 @@ object FRMOperation: TFRMOperation end object tsGlobalError: TTabSheet Caption = 'Notification' - ClientHeight = 325 + ClientHeight = 357 ClientWidth = 548 ImageIndex = 1 TabVisible = False @@ -1148,8 +1171,8 @@ object FRMOperation: TFRMOperation Text = 'ebSenderAccount' end object ActionList: TActionList - left = 140 - top = 350 + Left = 140 + Top = 350 object actExecute: TAction Caption = 'Execute (F12)' OnExecute = actExecuteExecute diff --git a/src/gui-classic/UFRMOperation.pas b/src/gui-classic/UFRMOperation.pas index 1625d5f58..0b9448089 100644 --- a/src/gui-classic/UFRMOperation.pas +++ b/src/gui-classic/UFRMOperation.pas @@ -32,7 +32,7 @@ interface Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, UNode, UWallet, UCrypto, Buttons, UBlockChain, UAccounts, UFRMAccountSelect, ActnList, ComCtrls, Types, UFRMMemoText, - UPCEncryption, UBaseTypes, UPCDataTypes, UPCOrderedLists; + UPCEncryption, UBaseTypes, UPCDataTypes, UPCOrderedLists, UEPasa, UEncoding; Const CM_PC_WalletKeysChanged = WM_USER + 1; @@ -129,9 +129,10 @@ TFRMOperation = class(TForm) ebHashLock: TEdit; btnHashLock: TSpeedButton; sbTimeLock: TSpeedButton; - cbPayloadAsHex: TCheckBox; lblChangeAccountData: TLabel; ebChangeAccountData: TEdit; + cbPayloadDataInputType: TComboBox; + memoEPASA: TMemo; procedure ebNewPublicKeyExit(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); @@ -159,6 +160,7 @@ TFRMOperation = class(TForm) FDefaultFee: Int64; FEncodedPayload : TOperationPayload; FDisabled : Boolean; + FUpdating : Boolean; FSenderAccounts: TOrderedCardinalList; // TODO: TOrderedCardinalList should be replaced with a "TCardinalList" since signer account should be processed last procedure SetWalletKeys(const Value: TWalletKeys); Procedure UpdateWalletKeys; @@ -166,8 +168,8 @@ TFRMOperation = class(TForm) Procedure UpdateAccountsInfo; Function UpdateFee(var Fee : Int64; errors : String) : Boolean; Function UpdateOperationOptions(var errors : String) : Boolean; - Function UpdatePayload(Const SenderAccount : TAccount; var errors : String) : Boolean; - Function UpdateOpTransaction(Const SenderAccount : TAccount; var DestAccount : TAccount; var amount : Int64; var errors : String) : Boolean; + Function UpdatePayload(Const ASenderAccount : TAccount; var AErrors : String) : Boolean; + Function UpdateOpTransaction(const ASenderAccount: TAccount; out ATargetEPASA : TEPasa; out ATargetAccount : TAccount; out AResolvedTargetKey : TAccountKey; out ATargetRequiresPurchase : Boolean; out AAmount: Int64; out AErrors: String) : Boolean; Function UpdateOpChangeKey(Const TargetAccount : TAccount; var SignerAccount : TAccount; var NewPublicKey : TAccountKey; var errors : String) : Boolean; Function UpdateOpListAccount(Const TargetAccount : TAccount; var SalePrice : Int64; var SellerAccount,SignerAccount : TAccount; var NewOwnerPublicKey : TAccountKey; var LockedUntilBlock : Cardinal; var HashLock : T32Bytes; var errors : String) : Boolean; Function UpdateOpDelist(Const TargetAccount : TAccount; var SignerAccount : TAccount; var errors : String) : Boolean; @@ -179,6 +181,7 @@ TFRMOperation = class(TForm) procedure CM_WalletChanged(var Msg: TMessage); message CM_PC_WalletKeysChanged; Function GetDefaultSenderAccount : TAccount; procedure ebAccountKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); + function CaptureEPasa(const AEPasaTxt : String; out AEPasa : TEPasa) : Boolean; protected procedure searchAccount(editBox : TCustomEdit); public @@ -191,8 +194,8 @@ TFRMOperation = class(TForm) implementation uses - UConst, UOpTransaction, UFRMNewPrivateKeyType, UFRMWalletKeys, UFRMHashLock, - UCommon, ULog, UGUIUtils; + {$IFDEF USE_GNUGETTEXT}gnugettext,{$ENDIF}UConst, UOpTransaction, UFRMNewPrivateKeyType, UFRMWalletKeys, UFRMHashLock, + UCommon, ULog, UGUIUtils, USettings; {$IFnDEF FPC} {$R *.dfm} @@ -203,215 +206,224 @@ implementation { TFRMOperation } procedure TFRMOperation.actExecuteExecute(Sender: TObject); -Var errors : String; - P : PAccount; - i,iAcc : Integer; +var + LErrors : String; + LAccountPtr : PAccount; + i,LAccountNo : Integer; LKey : TWalletKey; - ops : TOperationsHashTree; - op : TPCOperation; - account,signerAccount,destAccount,accountToBuy : TAccount; - operation_to_string, operationstxt, auxs : String; - _amount,_fee, _totalamount, _totalfee, _totalSignerFee, _salePrice : Int64; - _lockedUntil, _signer_n_ops : Cardinal; - dooperation : Boolean; - _newOwnerPublicKey : TECDSA_Public; + LOperations : TOperationsHashTree; + LOperation : TPCOperation; + LAccount,LSignerAccount,LTargetAccount,LPurchaseAccount : TAccount; + LTargetEPASA : TEPasa; + LOperationString, LOperationsTxt, LAuxStr : String; + LAmount, LFee, LTotalamount, LTotalFee, LTotalSignerFee, LSalePrice : Int64; + LLockedUntil, LSignerNOps : Cardinal; + LDoOperation : Boolean; + LNewOwnerPublicKey : TECDSA_Public; LHashLock : T32Bytes; - _newName, LNewAccountData : TRawBytes; - _newType : Word; - _changeName, _changeType, LChangeAccountData, _V2, _executeSigner, LRecipientSigned : Boolean; - _senderAccounts : TCardinalsArray; + LNewName, LNewAccountData : TRawBytes; + LNewType : Word; + LChangeName, LChangeType, LChangeAccountData, LIsV2, LExecuteSigner, LRecipientSigned, LTargetRequiresPurchase : Boolean; + LSenderAccounts : TCardinalsArray; label loop_start; begin if Not Assigned(WalletKeys) then raise Exception.Create('No wallet keys'); - If Not UpdateOperationOptions(errors) then raise Exception.Create(errors); - ops := TOperationsHashTree.Create; + If Not UpdateOperationOptions(LErrors) then raise Exception.Create(LErrors); + LOperations := TOperationsHashTree.Create; Try - _V2 := FNode.Bank.SafeBox.CurrentProtocol >= CT_PROTOCOL_2; - _totalamount := 0; - _totalfee := 0; - _totalSignerFee := 0; - _signer_n_ops := 0; - operationstxt := ''; - operation_to_string := ''; + LIsV2 := FNode.Bank.SafeBox.CurrentProtocol >= CT_PROTOCOL_2; + LTotalamount := 0; + LTotalFee := 0; + LTotalSignerFee := 0; + LSignerNOps := 0; + LOperationsTxt := ''; + LOperationString := ''; // Compile FSenderAccounts into a reorderable array - _senderAccounts := FSenderAccounts.ToArray; + LSenderAccounts := FSenderAccounts.ToArray; // Loop through each sender account - for iAcc := 0 to Length(_senderAccounts) - 1 do begin + for LAccountNo := 0 to Length(LSenderAccounts) - 1 do begin loop_start: - op := Nil; - account := FNode.GetMempoolAccount(_senderAccounts[iAcc]); - If Not UpdatePayload(account, errors) then - raise Exception.Create('Error encoding payload of sender account '+TAccountComp.AccountNumberToAccountTxtNumber(account.account)+': '+errors); - if NOT WalletKeys.TryGetKey(account.accountInfo.accountKey, LKey) then begin + LOperation := Nil; + LAccount := FNode.GetMempoolAccount(LSenderAccounts[LAccountNo]); + If Not UpdatePayload(LAccount, LErrors) then + raise Exception.Create('Error encoding payload of sender account '+TAccountComp.AccountNumberToAccountTxtNumber(LAccount.account)+': '+LErrors); + if NOT WalletKeys.TryGetKey(LAccount.accountInfo.accountKey, LKey) then begin if ( - (TAccountComp.IsAccountForPrivateSale(account.accountInfo)) or - (TAccountComp.IsAccountForAccountSwap(account.accountInfo)) + (TAccountComp.IsAccountForPrivateSale(LAccount.accountInfo)) or + (TAccountComp.IsAccountForAccountSwap(LAccount.accountInfo)) ) - and (Not TAccountComp.IsNullAccountKey(account.accountInfo.new_publicKey)) then begin + and (Not TAccountComp.IsNullAccountKey(LAccount.accountInfo.new_publicKey)) then begin - if NOT WalletKeys.TryGetKey(account.accountInfo.new_publicKey, LKey) then + if NOT WalletKeys.TryGetKey(LAccount.accountInfo.new_publicKey, LKey) then Raise Exception.Create('New sender account private key not found in Wallet'); end else Raise Exception.Create('Sender account private key not found in Wallet'); end; - dooperation := true; + LDoOperation := true; // Default fee - if account.balance > uint64(DefaultFee) then _fee := DefaultFee else _fee := account.balance; + if LAccount.balance > uint64(DefaultFee) then LFee := DefaultFee else LFee := LAccount.balance; // Determine which operation type it is if PageControlOpType.ActivePage = tsTransaction then begin {%region Operation: Transaction} - if Not UpdateOpTransaction(account,destAccount,_amount,errors) then raise Exception.Create(errors); - if Length(_senderAccounts) > 1 then begin - if account.balance>0 then begin - if account.balance>DefaultFee then begin - _amount := account.balance - DefaultFee; - _fee := DefaultFee; + if Not UpdateOpTransaction(LAccount, LTargetEPASA, LTargetAccount,LNewOwnerPublicKey, LTargetRequiresPurchase, LAmount, LErrors) then + raise Exception.Create(LErrors); + + if Length(LSenderAccounts) > 1 then begin + if LAccount.balance>0 then begin + if LAccount.balance>DefaultFee then begin + LAmount := LAccount.balance - DefaultFee; + LFee := DefaultFee; end else begin - _amount := account.balance; - _fee := 0; + LAmount := LAccount.balance; + LFee := 0; end; - end else dooperation := false; - end else begin + end else LDoOperation := false; end; - if dooperation then begin - op := TOpTransaction.CreateTransaction(FNode.Bank.Safebox.CurrentProtocol,account.account,account.n_operation+1,destAccount.account,LKey.PrivateKey,_amount,_fee,FEncodedPayload); - inc(_totalamount,_amount); - inc(_totalfee,_fee); + + if LDoOperation then begin + if NOT LTargetRequiresPurchase then begin + LOperation := TOpTransaction.CreateTransaction(FNode.Bank.Safebox.CurrentProtocol,LAccount.account,LAccount.n_operation+1,LTargetAccount.account,LKey.PrivateKey,LAmount,LFee,FEncodedPayload); + LOperationsTxt := 'Transaction to '+TAccountComp.AccountNumberToAccountTxtNumber(LTargetAccount.account); + end else begin + // Pay-to-Key + LOperation := TOpBuyAccount.CreateBuy(FNode.Bank.SafeBox.CurrentProtocol, LAccount.account, LAccount.n_operation + 1, LTargetAccount.account, LTargetAccount.accountInfo.account_to_pay, LTargetAccount.accountInfo.price, LAmount, LFee, LNewOwnerPublicKey, LKey.PrivateKey, FEncodedPayload); + end; + inc(LTotalamount,LAmount); + inc(LTotalFee,LFee); end; - operationstxt := 'Transaction to '+TAccountComp.AccountNumberToAccountTxtNumber(destAccount.account); {%endregion} end else if (PageControlOpType.ActivePage = tsChangePrivateKey) then begin {%region Operation: Change Private Key} - if Not UpdateOpChangeKey(account,signerAccount,_newOwnerPublicKey,errors) then raise Exception.Create(errors); - if _V2 then begin + if Not UpdateOpChangeKey(LAccount,LSignerAccount,LNewOwnerPublicKey,LErrors) then raise Exception.Create(LErrors); + if LIsV2 then begin // must ensure is Signer account last if included in sender accounts (not necessarily ordered enumeration) - if (iAcc < Length(_senderAccounts) - 1) AND (account.account = signerAccount.account) then begin - TArrayTool.Swap(_senderAccounts, iAcc, Length(_senderAccounts) - 1); // ensure signer account processed last + if (LAccountNo < Length(LSenderAccounts) - 1) AND (LAccount.account = LSignerAccount.account) then begin + TArrayTool.Swap(LSenderAccounts, LAccountNo, Length(LSenderAccounts) - 1); // ensure signer account processed last goto loop_start; // TODO: remove ugly hack with refactoring! end; // Maintain correct signer fee distribution - if uint64(_totalSignerFee) >= signerAccount.balance then _fee := 0 - else if signerAccount.balance - uint64(_totalSignerFee) > uint64(DefaultFee) then _fee := DefaultFee - else _fee := signerAccount.balance - uint64(_totalSignerFee); - op := TOpChangeKeySigned.Create(FNode.Bank.SafeBox.CurrentProtocol,signerAccount.account,signerAccount.n_operation+_signer_n_ops+1,account.account,LKey.PrivateKey,_newOwnerPublicKey,_fee,FEncodedPayload); - inc(_signer_n_ops); - inc(_totalSignerFee, _fee); + if uint64(LTotalSignerFee) >= LSignerAccount.balance then LFee := 0 + else if LSignerAccount.balance - uint64(LTotalSignerFee) > uint64(DefaultFee) then LFee := DefaultFee + else LFee := LSignerAccount.balance - uint64(LTotalSignerFee); + LOperation := TOpChangeKeySigned.Create(FNode.Bank.SafeBox.CurrentProtocol,LSignerAccount.account,LSignerAccount.n_operation+LSignerNOps+1,LAccount.account,LKey.PrivateKey,LNewOwnerPublicKey,LFee,FEncodedPayload); + inc(LSignerNOps); + inc(LTotalSignerFee, LFee); end else begin - op := TOpChangeKey.Create(FNode.Bank.SafeBox.CurrentProtocol,account.account,account.n_operation+1,account.account,LKey.PrivateKey,_newOwnerPublicKey,_fee,FEncodedPayload); + LOperation := TOpChangeKey.Create(FNode.Bank.SafeBox.CurrentProtocol,LAccount.account,LAccount.n_operation+1,LAccount.account,LKey.PrivateKey,LNewOwnerPublicKey,LFee,FEncodedPayload); end; - inc(_totalfee,_fee); - operationstxt := 'Change private key to '+TAccountComp.GetECInfoTxt(_newOwnerPublicKey.EC_OpenSSL_NID); + inc(LTotalFee,LFee); + LOperationsTxt := 'Change private key to '+TAccountComp.GetECInfoTxt(LNewOwnerPublicKey.EC_OpenSSL_NID); {%endregion} end else if (PageControlOpType.ActivePage = tsListAccount) then begin {%region Operation: List For Sale} - If Not UpdateOpListAccount(account,_salePrice,destAccount,signerAccount,_newOwnerPublicKey, _lockedUntil, LHashLock, errors) then raise Exception.Create(errors); + If Not UpdateOpListAccount(LAccount,LSalePrice,LTargetAccount,LSignerAccount,LNewOwnerPublicKey, LLockedUntil, LHashLock, LErrors) then raise Exception.Create(LErrors); // Special fee account: - if signerAccount.balance>DefaultFee then _fee := DefaultFee - else _fee := signerAccount.balance; + if LSignerAccount.balance>DefaultFee then LFee := DefaultFee + else LFee := LSignerAccount.balance; if (rbListAccountForPublicSale.Checked) then begin - op := TOpListAccountForSaleOrSwap.CreateListAccountForSaleOrSwap(FNode.Bank.SafeBox.CurrentProtocol, as_ForSale, signerAccount.account,signerAccount.n_operation+1+iAcc, account.account,_salePrice,_fee, - destAccount.account,CT_TECDSA_Public_Nul,0,LKey.PrivateKey, CT_HashLock_NUL, FEncodedPayload); + LOperation := TOpListAccountForSaleOrSwap.CreateListAccountForSaleOrSwap(FNode.Bank.SafeBox.CurrentProtocol, as_ForSale, LSignerAccount.account,LSignerAccount.n_operation+1+LAccountNo, LAccount.account,LSalePrice,LFee, + LTargetAccount.account,CT_TECDSA_Public_Nul,0,LKey.PrivateKey, CT_HashLock_NUL, FEncodedPayload); end else if (rbListAccountForPrivateSale.Checked) then begin - op := TOpListAccountForSaleOrSwap.CreateListAccountForSaleOrSwap(FNode.Bank.SafeBox.CurrentProtocol, as_ForSale, signerAccount.account,signerAccount.n_operation+1+iAcc, account.account,_salePrice,_fee, - destAccount.account,_newOwnerPublicKey,_lockedUntil,LKey.PrivateKey, CT_HashLock_NUL, FEncodedPayload); + LOperation := TOpListAccountForSaleOrSwap.CreateListAccountForSaleOrSwap(FNode.Bank.SafeBox.CurrentProtocol, as_ForSale, LSignerAccount.account,LSignerAccount.n_operation+1+LAccountNo, LAccount.account,LSalePrice,LFee, + LTargetAccount.account,LNewOwnerPublicKey,LLockedUntil,LKey.PrivateKey, CT_HashLock_NUL, FEncodedPayload); end else if (rbListAccountForAccountSwap.Checked) then begin - op := TOpListAccountForSaleOrSwap.CreateListAccountForSaleOrSwap(FNode.Bank.SafeBox.CurrentProtocol, as_ForAtomicAccountSwap, signerAccount.account,signerAccount.n_operation+1+iAcc, account.account,_salePrice,_fee, - destAccount.account,_newOwnerPublicKey,_lockedUntil,LKey.PrivateKey, LHashLock, FEncodedPayload); + LOperation := TOpListAccountForSaleOrSwap.CreateListAccountForSaleOrSwap(FNode.Bank.SafeBox.CurrentProtocol, as_ForAtomicAccountSwap, LSignerAccount.account,LSignerAccount.n_operation+1+LAccountNo, LAccount.account,LSalePrice,LFee, + LTargetAccount.account,LNewOwnerPublicKey,LLockedUntil,LKey.PrivateKey, LHashLock, FEncodedPayload); end else if (rbListAccountForCoinSwap.Checked) then begin - op := TOpListAccountForSaleOrSwap.CreateListAccountForSaleOrSwap(FNode.Bank.SafeBox.CurrentProtocol, as_ForAtomicCoinSwap, signerAccount.account,signerAccount.n_operation+1+iAcc, account.account,_salePrice,_fee, - destAccount.account,CT_TECDSA_Public_Nul,_lockedUntil,LKey.PrivateKey, LHashLock, FEncodedPayload); + LOperation := TOpListAccountForSaleOrSwap.CreateListAccountForSaleOrSwap(FNode.Bank.SafeBox.CurrentProtocol, as_ForAtomicCoinSwap, LSignerAccount.account,LSignerAccount.n_operation+1+LAccountNo, LAccount.account,LSalePrice,LFee, + LTargetAccount.account,CT_TECDSA_Public_Nul,LLockedUntil,LKey.PrivateKey, LHashLock, FEncodedPayload); end else raise Exception.Create('Select Sale type'); {%endregion} end else if (PageControlOpType.ActivePage = tsDelistAccount) then begin {%region Operation: Delist For Sale} - if Not UpdateOpDelist(account,signerAccount,errors) then raise Exception.Create(errors); + if Not UpdateOpDelist(LAccount,LSignerAccount,LErrors) then raise Exception.Create(LErrors); // Special fee account: - if signerAccount.balance>DefaultFee then _fee := DefaultFee - else _fee := signerAccount.balance; - op := TOpDelistAccountForSale.CreateDelistAccountForSale(FNode.Bank.SafeBox.CurrentProtocol,signerAccount.account,signerAccount.n_operation+1+iAcc,account.account,_fee,LKey.PrivateKey,FEncodedPayload); + if LSignerAccount.balance>DefaultFee then LFee := DefaultFee + else LFee := LSignerAccount.balance; + LOperation := TOpDelistAccountForSale.CreateDelistAccountForSale(FNode.Bank.SafeBox.CurrentProtocol,LSignerAccount.account,LSignerAccount.n_operation+1+LAccountNo,LAccount.account,LFee,LKey.PrivateKey,FEncodedPayload); {%endregion} end else if (PageControlOpType.ActivePage = tsBuyAccount) then begin {%region Operation: Buy Account} - if Not UpdateOpBuyAccount(account,accountToBuy,_amount,_newOwnerPublicKey, LRecipientSigned, errors) then raise Exception.Create(errors); - if LRecipientSigned AND (NOT WalletKeys.TryGetKey(account.accountInfo.new_publicKey, LKey)) then + if Not UpdateOpBuyAccount(LAccount,LPurchaseAccount,LAmount,LNewOwnerPublicKey, LRecipientSigned, LErrors) then raise Exception.Create(LErrors); + if LRecipientSigned AND (NOT WalletKeys.TryGetKey(LAccount.accountInfo.new_publicKey, LKey)) then raise Exception.Create('Recipient-signed key not found in Wallet'); - op := TOpBuyAccount.CreateBuy(FNode.Bank.Safebox.CurrentProtocol,account.account,account.n_operation+1,accountToBuy.account,accountToBuy.accountInfo.account_to_pay, - accountToBuy.accountInfo.price,_amount,_fee,_newOwnerPublicKey,LKey.PrivateKey,FEncodedPayload); + LOperation := TOpBuyAccount.CreateBuy(FNode.Bank.Safebox.CurrentProtocol,LAccount.account,LAccount.n_operation+1,LPurchaseAccount.account,LPurchaseAccount.accountInfo.account_to_pay, + LPurchaseAccount.accountInfo.price,LAmount,LFee,LNewOwnerPublicKey,LKey.PrivateKey,FEncodedPayload); {%endregion} end else if (PageControlOpType.ActivePage = tsChangeInfo) then begin {%region Operation: Change Info} - if not UpdateOpChangeInfo(account,signerAccount,_changeName,_newName,_changeType,_newType,LChangeAccountData,LNewAccountData,errors) then begin - If Length(_senderAccounts)=1 then raise Exception.Create(errors); + if not UpdateOpChangeInfo(LAccount,LSignerAccount,LChangeName,LNewName,LChangeType,LNewType,LChangeAccountData,LNewAccountData,LErrors) then begin + If Length(LSenderAccounts)=1 then raise Exception.Create(LErrors); end else begin - if signerAccount.balance>DefaultFee then _fee := DefaultFee - else _fee := signerAccount.balance; - op := TOpChangeAccountInfo.CreateChangeAccountInfo(FNode.Bank.SafeBox.CurrentProtocol,signerAccount.account,signerAccount.n_operation+1,account.account,LKey.PrivateKey,false,CT_TECDSA_Public_Nul, - _changeName,_newName,_changeType,_newType, + if LSignerAccount.balance>DefaultFee then LFee := DefaultFee + else LFee := LSignerAccount.balance; + LOperation := TOpChangeAccountInfo.CreateChangeAccountInfo(FNode.Bank.SafeBox.CurrentProtocol,LSignerAccount.account,LSignerAccount.n_operation+1,LAccount.account,LKey.PrivateKey,false,CT_TECDSA_Public_Nul, + LChangeName,LNewName,LChangeType,LNewType, LChangeAccountData,LNewAccountData, - _fee,FEncodedPayload); + LFee,FEncodedPayload); end; {%endregion} end else begin raise Exception.Create('No operation selected'); end; - if Assigned(op) And (dooperation) then begin - ops.AddOperationToHashTree(op); - if operation_to_string<>'' then operation_to_string := operation_to_string + #10; - operation_to_string := operation_to_string + op.ToString; + if Assigned(LOperation) And (LDoOperation) then begin + LOperations.AddOperationToHashTree(LOperation); + if LOperationString<>'' then LOperationString := LOperationString + #10; + LOperationString := LOperationString + LOperation.ToString; end; - FreeAndNil(op); + FreeAndNil(LOperation); end; - if (ops.OperationsCount=0) then raise Exception.Create('No valid operation to execute'); + if (LOperations.OperationsCount=0) then raise Exception.Create('No valid operation to execute'); - if (Length(_senderAccounts)>1) then begin - if PageControlOpType.ActivePage = tsTransaction then auxs := 'Total amount that dest will receive: '+TAccountComp.FormatMoney(_totalamount)+#10 - else auxs:=''; - if Application.MessageBox(PChar('Execute '+Inttostr(Length(_senderAccounts))+' operations?'+#10+ - 'Operation: '+operationstxt+#10+ - auxs+ - 'Total fee: '+TAccountComp.FormatMoney(_totalfee)+#10+#10+'Note: This operation will be transmitted to the network!'), + if (Length(LSenderAccounts)>1) then begin + if PageControlOpType.ActivePage = tsTransaction then LAuxStr := 'Total amount that dest will receive: '+TAccountComp.FormatMoney(LTotalamount)+#10 + else LAuxStr:=''; + if Application.MessageBox(PChar('Execute '+Inttostr(Length(LSenderAccounts))+' operations?'+#10+ + 'Operation: '+LOperationsTxt+#10+ + LAuxStr+ + 'Total fee: '+TAccountComp.FormatMoney(LTotalFee)+#10+#10+'Note: This operation will be transmitted to the network!'), PChar(Application.Title),MB_YESNO+MB_ICONINFORMATION+MB_DEFBUTTON2)<>IdYes then exit; end else begin - if Application.MessageBox(PChar('Execute this operation:'+#10+#10+operation_to_string+#10+#10+'Note: This operation will be transmitted to the network!'), + if Application.MessageBox(PChar('Execute this operation:'+#10+#10+LOperationString+#10+#10+'Note: This operation will be transmitted to the network!'), PChar(Application.Title),MB_YESNO+MB_ICONINFORMATION+MB_DEFBUTTON2)<>IdYes then exit; end; - i := FNode.AddOperations(nil,ops,Nil,errors); - if (i=ops.OperationsCount) then begin - operationstxt := 'Successfully executed '+inttostr(i)+' operations!'+#10+#10+operation_to_string; + i := FNode.AddOperations(nil,LOperations,Nil,LErrors); + if (i=LOperations.OperationsCount) then begin + LOperationsTxt := 'Successfully executed '+inttostr(i)+' operations!'+#10+#10+LOperationString; If i>1 then begin With TFRMMemoText.Create(Self) do Try - InitData(Application.Title,operationstxt); + InitData(Application.Title,LOperationsTxt); ShowModal; finally Free; end; end else begin - Application.MessageBox(PChar('Successfully executed '+inttostr(i)+' operations!'+#10+#10+operation_to_string),PChar(Application.Title),MB_OK+MB_ICONINFORMATION); + Application.MessageBox(PChar('Successfully executed '+inttostr(i)+' operations!'+#10+#10+LOperationString),PChar(Application.Title),MB_OK+MB_ICONINFORMATION); end; ModalResult := MrOk; end else if (i>0) then begin - operationstxt := 'One or more of your operations has not been executed:'+#10+ + LOperationsTxt := 'One or more of your operations has not been executed:'+#10+ 'Errors:'+#10+ - errors+#10+#10+ + LErrors+#10+#10+ 'Total successfully executed operations: '+inttostr(i); With TFRMMemoText.Create(Self) do Try - InitData(Application.Title,operationstxt); + InitData(Application.Title,LOperationsTxt); ShowModal; finally Free; end; ModalResult := MrOk; end else begin - raise Exception.Create(errors); + raise Exception.Create(LErrors); end; Finally - ops.Free; + LOperations.Free; End; end; @@ -461,20 +473,60 @@ procedure TFRMOperation.bbPasswordClick(Sender: TObject); end; +function TFRMOperation.CaptureEPasa(const AEPasaTxt: String; out AEPasa: TEPasa): Boolean; +var LEPasaErrorCode : EPasaErrorCode; +begin + Result := TEPasa.TryParse(AEPasaTxt,True,AEPasa); + // + if ((FUpdating) or (Not Result)) then Exit; + FUpdating := True; + try + if AEPasa.PayloadType.HasTrait(ptPublic) then rbNotEncrypted.Checked := True + else if AEPasa.PayloadType.HasTrait(ptSenderKeyEncrypted) then rbEncryptedWithOldEC.Checked := True + else if AEPasa.PayloadType.HasTrait(ptRecipientKeyEncrypted) then rbEncryptedWithEC.Checked := True + else if AEPasa.PayloadType.HasTrait(ptPasswordEncrypted) then begin + rbEncrptedWithPassword.Checked := True; + ebEncryptPassword.Text := AEPasa.Password; + end; + if AEPasa.PayloadType.HasTrait(ptAsciiFormatted) then cbPayloadDataInputType.ItemIndex := 0 + else if AEPasa.PayloadType.HasTrait(ptHexFormatted) then cbPayloadDataInputType.ItemIndex := 1 + else if AEPasa.PayloadType.HasTrait(ptBase58Formatted) then cbPayloadDataInputType.ItemIndex := 2; + if (AEPasa.PayloadType.HasTrait(ptAsciiFormatted) or AEPasa.PayloadType.HasTrait(ptHexFormatted) or AEPasa.PayloadType.HasTrait(ptBase58Formatted)) then begin + memoPayload.Lines.Text := AEPasa.Payload; + end; + + memoEPASA.Lines.Clear; + if AEPasa.IsPayToKey then memoEPASA.Lines.Add('PayToKey EPASA'); + if AEPasa.IsAddressedByName then memoEPASA.Lines.Add('Addressed by name: '+AEPasa.AccountName); + memoEPASA.Lines.Add( AEPasa.ToString ); + if AEPasa.PayloadType.HasTrait(ptAsciiFormatted) or AEPasa.PayloadType.HasTrait(ptBase58Formatted) or AEPasa.PayloadType.HasTrait(ptHexFormatted) then begin + memoEPasa.Lines.Add( 'AS BYTES: 0x'+AEPasa.GetRawPayloadBytes.ToHexaString); + memoEPasa.Lines.Add( 'AS PRINTABLE: '+AEPasa.GetRawPayloadBytes.ToPrintable); + end; + + finally + FUpdating := False; + end; +end; + procedure TFRMOperation.CM_WalletChanged(var Msg: TMessage); begin UpdateWalletKeys; end; procedure TFRMOperation.ebAccountNumberExit(Sender: TObject); -Var an : Cardinal; +Var LEPasa : TEPASA; eb : TEdit; begin - if (Not assigned(Sender)) then exit; + if (Not assigned(Sender)) or (FUpdating) then exit; if (Not (Sender is TEdit)) then exit; eb := TEdit(Sender); - If TAccountComp.AccountTxtNumberToAccountNumber(eb.Text,an) then begin - eb.Text := TAccountComp.AccountNumberToAccountTxtNumber(an); + if CaptureEPasa(eb.Text,LEPasa) then begin + if LEPasa.IsClassicPASA then + eb.Text := LEPasa.ToClassicPASAString() + else if eb=ebDestAccount then + eb.Text := LEPasa.ToString(False) + else eb.Text := LEPasa.ToString(True); end else begin eb.Text := ''; end; @@ -485,7 +537,7 @@ procedure TFRMOperation.ebCurrencyExit(Sender: TObject); Var m : Int64; eb : TEdit; begin - if (Not assigned(Sender)) then exit; + if (Not assigned(Sender)) or (FUpdating) then exit; if (Not (Sender is TEdit)) then exit; eb := TEdit(Sender); If Not (eb.ReadOnly) then begin @@ -530,11 +582,12 @@ procedure TFRMOperation.ebSenderAccountKeyPress(Sender: TObject; var Key: Char); procedure TFRMOperation.FormCreate(Sender: TObject); begin + {$IFDEF USE_GNUGETTEXT}TranslateComponent(self);{$ENDIF} FDisabled := false; + FUpdating := False; FWalletKeys := Nil; FSenderAccounts := TOrderedCardinalList.Create; FSenderAccounts.OnListChanged := OnSenderAccountsChanged; - FDisabled := true; FNode := TNode.Node; ebSenderAccount.OnKeyDown:=ebAccountKeyDown; ebSenderAccount.Tag:=CT_AS_MyAccounts; @@ -607,6 +660,24 @@ procedure TFRMOperation.FormCreate(Sender: TObject); ebFee.OnExit:= ebCurrencyExit; memoAccounts.Lines.Clear; PageControlOpType.ActivePage := tsTransaction; + cbPayloadDataInputType.Items.Clear; + cbPayloadDataInputType.Items.Add('As String'); + cbPayloadDataInputType.Items.Add('As Hexadecimal'); + cbPayloadDataInputType.Items.Add('As Base58'); + cbPayloadDataInputType.ItemIndex := 0; + cbPayloadDataInputType.OnChange := memoPayloadClick; + memoPayload.OnChange := memoPayloadClick; + memoPayload.OnClick := memoPayloadClick; + memoEPASA.ScrollBars := ssBoth; + memoEPASA.ReadOnly := False; + memoEPASA.TabStop := False; + memoEPASA.ParentFont := True; + {$IFDEF TESTNET} + memoEPASA.Visible := True; + {$ELSE} + memoEPASA.Visible := False; + {$ENDIF} + memoEPASA.Enabled := memoEPASA.Visible; end; procedure TFRMOperation.ebNewPublicKeyExit(Sender: TObject); @@ -639,14 +710,16 @@ procedure TFRMOperation.ebAccountKeyDown(Sender: TObject; var Key: Word; Shift: procedure TFRMOperation.searchAccount(editBox: TCustomEdit); Var F : TFRMAccountSelect; - c : Cardinal; + LEPasa : TEPasa; begin F := TFRMAccountSelect.Create(Self); try F.Node := FNode; F.WalletKeys := FWalletKeys; F.Filters:=editBox.Tag; - If TAccountComp.AccountTxtNumberToAccountNumber(editBox.Text,c) then F.DefaultAccount := c; + if TEPasa.TryParse(editBox.Text,LEPasa) then begin + if LEPasa.Account.HasValue then F.DefaultAccount := LEPasa.Account.Value + end; F.AllowSelect:=True; If F.ShowModal=MrOk then begin editBox.Text := TAccountComp.AccountNumberToAccountTxtNumber(F.GetSelected); @@ -834,22 +907,30 @@ function TFRMOperation.UpdateFee(var Fee: Int64; errors: String): Boolean; Result := TAccountComp.TxtToMoney(Trim(ebFee.Text),Fee); if not Result then errors := 'Invalid fee value "'+ebFee.Text+'"'; end else begin - Fee := 0; + Fee := TSettings.DefaultFee; Result := true; end; + if (Fee<0) then begin + Result := False; + errors := 'Invalid fee value "'+ebFee.Text+'"'; + ebFee.Text := TAccountComp.FormatMoney(TSettings.DefaultFee); + end; + if (Fee=0) and (Not CT_AllowPropagate0feeOperations) then begin + Result := False; + errors := '0 fee not allowed'; + ebFee.Text := TAccountComp.FormatMoney(TSettings.DefaultFee); + end; end; -var GInUpdateInfoClick : boolean; procedure TFRMOperation.updateInfoClick(Sender: TObject); Var errors : String; begin - if NOT GInUpdateInfoClick then begin - GInUpdateInfoClick := true; - try - UpdateOperationOptions(errors); - finally - GInUpdateInfoClick := false; - end; + if FDisabled or FUpdating then Exit; + FDisabled := True; + try + UpdateOperationOptions(errors); + finally + FDisabled := False; end; end; @@ -969,7 +1050,7 @@ function TFRMOperation.UpdateOpChangeInfo(const TargetAccount: TAccount; var Sig If Not TBaseType.Equals(newName,TargetAccount.name) then begin changeName:=True; If Length(newName)>0 then begin - if (Not TPCSafeBox.ValidAccountName(newName,errors)) then begin + if (Not TPascalCoinProtocol.IsValidAccountName(TNode.Node.Bank.SafeBox.CurrentProtocol,newName,errors)) then begin errors := '"'+newName.ToPrintable+'" is not a valid name: '+errors; Exit; end; @@ -1146,6 +1227,8 @@ function TFRMOperation.UpdateOperationOptions(var errors : String) : Boolean; changeName,changeType, LRecipientSigned, LChangeAccountData : Boolean; newName, LNewAccountData : TRawBytes; newType : Word; + LTargetEPASA : TEPasa; + LRequiresPurchase : Boolean; begin Result := false; sender_account := CT_Account_NUL; @@ -1211,7 +1294,7 @@ function TFRMOperation.UpdateOperationOptions(var errors : String) : Boolean; end; End; if (PageControlOpType.ActivePage = tsTransaction) then begin - Result := UpdateOpTransaction(GetDefaultSenderAccount,dest_account,amount,errors); + Result := UpdateOpTransaction(GetDefaultSenderAccount,LTargetEPASA, dest_account, publicKey, LRequiresPurchase, amount,errors); end else if (PageControlOpType.ActivePage = tsChangePrivateKey) then begin Result := UpdateOpChangeKey(GetDefaultSenderAccount,signer_account,publicKey,errors); end else if (PageControlOpType.ActivePage = tsListAccount) then begin @@ -1246,8 +1329,6 @@ function TFRMOperation.UpdateOperationOptions(var errors : String) : Boolean; lblSignerAccount.Enabled := ebSignerAccount.Enabled; lblChangeName.Enabled:= (PageControlOpType.ActivePage=tsChangeInfo) And (SenderAccounts.Count=1); ebChangeName.Enabled:= lblChangeName.Enabled; - // - UpdatePayload(sender_account, e); end; function TFRMOperation.UpdateOpListAccount(const TargetAccount: TAccount; @@ -1507,177 +1588,249 @@ function TFRMOperation.UpdateOpListAccount(const TargetAccount: TAccount; End; end; -function TFRMOperation.UpdateOpTransaction(const SenderAccount: TAccount; var DestAccount: TAccount; var amount: Int64; var errors: String): Boolean; -Var c : Cardinal; +function TFRMOperation.UpdateOpTransaction(const ASenderAccount: TAccount; out ATargetEPASA : TEPasa; out ATargetAccount : TAccount; out AResolvedTargetKey : TECDSA_Public; out ATargetRequiresPurchase : Boolean; out AAmount: Int64; out AErrors: String): Boolean; +Var + LResolvedAccountNo : Cardinal; + LPublicKey : TAccountKey; begin - Result := False; - errors := ''; + AErrors := ''; lblTransactionErrors.Caption := ''; if PageControlOpType.ActivePage<>tsTransaction then exit; - if not (TAccountComp.AccountTxtNumberToAccountNumber(ebDestAccount.Text,c)) then begin - errors := 'Invalid dest. account ('+ebDestAccount.Text+')'; - lblTransactionErrors.Caption := errors; - exit; + + if (Trim(ebDestAccount.Text)='') then begin + AErrors := 'Need a destintation or EPASA'; + lblTransactionErrors.Caption := AErrors; + Exit(False); end; - if (c<0) Or (c>=TNode.Node.Bank.AccountsCount) then begin - errors := 'Invalid dest. account ('+TAccountComp.AccountNumberToAccountTxtNumber(c)+')'; - lblTransactionErrors.Caption := errors; - exit; + + + if Not CaptureEPasa(ebDestAccount.Text,ATargetEPasa) then begin + AErrors := 'Invalid EPASA value: '+ebDestAccount.Text; + lblTransactionErrors.Caption := AErrors; + Exit(False); end; - DestAccount := TNode.Node.GetMempoolAccount(c); - if SenderAccounts.Count=1 then begin - if not TAccountComp.TxtToMoney(ebAmount.Text,amount) then begin - errors := 'Invalid amount ('+ebAmount.Text+')'; - lblTransactionErrors.Caption := errors; - exit; + + Result := TNode.Node.TryResolveEPASA(ATargetEPASA, LResolvedAccountNo, AResolvedTargetKey, ATargetRequiresPurchase, AErrors); + if NOT Result then begin + lblTransactionErrors.Caption := AErrors; + Exit(False); + end; + + // GUI Base58 protection: In order to prevent manual mistake, Base58 is only allowed when introducing + // a Public key, otherwise will need to use String ("") or Hexadecimal (0x..) input + if (ATargetEPASA.PayloadType.HasTrait(ptBase58Formatted)) then begin + if Not TAccountComp.AccountPublicKeyImport(ATargetEPASA.Payload,LPublicKey,AErrors) then begin + AErrors := 'Not a Base58 Public key: '+AErrors; + lblTransactionErrors.Caption := AErrors; + Exit(False); + end; + end; + + if LResolvedAccountNo <> CT_AccountNo_NUL then begin + ATargetAccount := TNode.Node.GetMempoolAccount(LResolvedAccountNo); + if ATargetAccount.account=ASenderAccount.account then begin + AErrors := 'Sender and dest account are the same'; + lblTransactionErrors.Caption := AErrors; + Exit(False); end; - end else amount := 0; // ALL BALANCE - if DestAccount.account=SenderAccount.account then begin - errors := 'Sender and dest account are the same'; - lblTransactionErrors.Caption := errors; - exit; end; + + if SenderAccounts.Count=1 then begin + if not TAccountComp.TxtToMoney(ebAmount.Text,AAmount) then begin + AErrors := 'Invalid amount ('+ebAmount.Text+')'; + lblTransactionErrors.Caption := AErrors; + Exit(False); + end; + end else AAmount := 0; // ALL BALANCE + + if (SenderAccounts.Count=1) then begin - if (SenderAccount.balance<(amount+FDefaultFee)) then begin - errors := 'Insufficient funds'; - lblTransactionErrors.Caption := errors; - exit; + if (ASenderAccount.balance<(AAmount+FDefaultFee)) then begin + AErrors := 'Insufficient funds'; + lblTransactionErrors.Caption := AErrors; + Exit(False); end; end; - Result := True; end; -function TFRMOperation.UpdatePayload(const SenderAccount: TAccount; - var errors: String): Boolean; -Var payload_u : AnsiString; - payload_encrypted : TRawBytes; - account : TAccount; - public_key : TAccountKey; - dest_account_number : Cardinal; +function TFRMOperation.UpdatePayload(const ASenderAccount: TAccount; var AErrors: String): Boolean; +Var + LUserPayloadString : AnsiString; + LEncryptedPayloadBytes : TRawBytes; + LAccount : TAccount; + LTargetEPASA : TEPasa; + LPublicKey : TAccountKey; + LAccountNumber : Cardinal; i : Integer; - valid : Boolean; - wk : TWalletKey; + LValid : Boolean; + LWalletKey : TWalletKey; + LPassword : String; LPayloadBytes : TRawBytes; begin - valid := false; - payload_encrypted := Nil; + LValid := false; + LPayloadBytes := Nil; + LEncryptedPayloadBytes := Nil; FEncodedPayload := CT_TOperationPayload_NUL; - // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - // TODO: - // Needs to assign FEncodedPayload.payload_type based on PIP-0027 - // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - errors := 'Unknown error'; - payload_u := memoPayload.Lines.Text; + LUserPayloadString := memoPayload.Lines.Text; + FEncodedPayload.payload_type := 0; // [ptNonDeterministic] + AErrors := 'Unknown error'; try - if (payload_u='') then begin - valid := true; - exit; + LTargetEPASA := TEPasa.Empty; + + If (PageControlOpType.ActivePage=tsTransaction) then begin + if NOT TEPasa.TryParse(ebDestAccount.Text,True, LTargetEPASA) then begin + AErrors := 'Indeterminable target'; + Exit(False); + end; end; - if cbPayloadAsHex.Checked then begin - if NOT TCrypto.HexaToRaw(payload_u, LPayloadBytes) then begin - valid := false; - errors := 'Payload not hex-formatted'; - exit; + + if (LUserPayloadString='') then begin + LValid := True; + Exit(True); + end; + + LTargetEPASA.PayloadType := LTargetEPASA.PayloadType - [ptPublic] - [ptRecipientKeyEncrypted] - [ptSenderKeyEncrypted] + - [ptPasswordEncrypted] - [ptAsciiFormatted] - [ptHexFormatted] - [ptBase58Formatted]; + + case cbPayloadDataInputType.ItemIndex of + 0 : begin + LTargetEPASA.PayloadType := LTargetEPASA.PayloadType + [ptAsciiFormatted]; + LPayloadBytes := TEncoding.ASCII.GetBytes(LUserPayloadString); + end; + 1 : begin + LTargetEPASA.PayloadType := LTargetEPASA.PayloadType + [ptHexFormatted]; + if Not THexEncoding.TryDecode(LUserPayloadString,LPayloadBytes) then begin + AErrors := 'Payload is not an Hexadecimal string'; + Exit(False); + end; end; - end else LPayloadBytes := TEncoding.ANSI.GetBytes(payload_u); + 2 : begin + LTargetEPASA.PayloadType := LTargetEPASA.PayloadType + [ptBase58Formatted]; + if Not TPascalBase58Encoding.TryDecode(LUserPayloadString,LPayloadBytes) then begin + AErrors := 'Payload is not a Base 58 string'; + Exit(False); + end; + + // GUI Base58 protection: In order to prevent manual mistake, Base58 is only allowed when introducing + // a Public key, otherwise will need to use String ("") or Hexadecimal (0x..) input + if Not TAccountComp.AccountPublicKeyImport(LUserPayloadString,LPublicKey,AErrors) then begin + AErrors := 'Not a Public key: '+AErrors; + Exit(False); + end; + end + else + end; + LTargetEPASA.Payload := LUserPayloadString; - if (rbEncryptedWithOldEC.Checked) then begin + if (Length(LPayloadBytes)>0) and (rbEncryptedWithOldEC.Checked) then begin // Use sender - errors := 'Error encrypting'; - account := FNode.GetMempoolAccount(SenderAccount.account); - TPCEncryption.DoPascalCoinECIESEncrypt(account.accountInfo.accountKey,LPayloadBytes,payload_encrypted); - valid := Length(payload_encrypted)>0; - end else if (rbEncryptedWithEC.Checked) then begin - errors := 'Error encrypting'; + LTargetEPASA.PayloadType := LTargetEPASA.PayloadType + [ptSenderKeyEncrypted]; + AErrors := 'Error encrypting by sender'; + LAccount := FNode.GetMempoolAccount(ASenderAccount.account); + TPCEncryption.DoPascalCoinECIESEncrypt(LAccount.accountInfo.accountKey,LPayloadBytes,LEncryptedPayloadBytes); + LValid := Length(LEncryptedPayloadBytes)>0; + end else if (Length(LPayloadBytes)>0) and (rbEncryptedWithEC.Checked) then begin + AErrors := 'Error encrypting by recipient'; + LTargetEPASA.PayloadType := LTargetEPASA.PayloadType + [ptRecipientKeyEncrypted]; if (PageControlOpType.ActivePage=tsTransaction) or (PageControlOpType.ActivePage=tsListAccount) or (PageControlOpType.ActivePage=tsDelistAccount) or (PageControlOpType.ActivePage=tsBuyAccount) then begin + // With dest public key If (PageControlOpType.ActivePage=tsTransaction) then begin - If Not TAccountComp.AccountTxtNumberToAccountNumber(ebDestAccount.Text,dest_account_number) then begin - errors := 'Invalid dest account number'; + If Not Self.FNode.TryResolveEPASA(LTargetEPASA, LAccountNumber) then begin + AErrors := 'Invalid dest account EPASA'; exit; end; end else if (PageControlOpType.ActivePage=tsListAccount) then begin - If Not TAccountComp.AccountTxtNumberToAccountNumber(ebSignerAccount.Text,dest_account_number) then begin - errors := 'Invalid signer account number'; + If Not TAccountComp.AccountTxtNumberToAccountNumber(ebSignerAccount.Text,LAccountNumber) then begin + AErrors := 'Invalid signer account number'; exit; end; end else if (PageControlOpType.ActivePage=tsDelistAccount) then begin - If Not TAccountComp.AccountTxtNumberToAccountNumber(ebSignerAccount.Text,dest_account_number) then begin - errors := 'Invalid signer account number'; + If Not TAccountComp.AccountTxtNumberToAccountNumber(ebSignerAccount.Text,LAccountNumber) then begin + AErrors := 'Invalid signer account number'; exit; end; end else if (PageControlOpType.ActivePage=tsBuyAccount) then begin - If Not TAccountComp.AccountTxtNumberToAccountNumber(ebAccountToBuy.Text,dest_account_number) then begin - errors := 'Invalid account to buy number'; + If Not TAccountComp.AccountTxtNumberToAccountNumber(ebAccountToBuy.Text,LAccountNumber) then begin + AErrors := 'Invalid account to buy number'; exit; end; end else begin - errors := 'ERROR DEV 20170512-1'; + AErrors := 'ERROR DEV 20170512-1'; exit; end; - if (dest_account_number<0) or (dest_account_number>=FNode.Bank.AccountsCount) then begin - errors := 'Invalid payload encrypted account number: '+TAccountComp.AccountNumberToAccountTxtNumber(dest_account_number); + if (LAccountNumber<0) or (LAccountNumber>=FNode.Bank.AccountsCount) then begin + AErrors := 'Invalid payload encrypted account number: '+TAccountComp.AccountNumberToAccountTxtNumber(LAccountNumber); exit; end; - account := FNode.GetMempoolAccount(dest_account_number); - TPCEncryption.DoPascalCoinECIESEncrypt(account.accountInfo.accountKey,LPayloadBytes,payload_encrypted); - valid := Length(payload_encrypted)>0; + LAccount := FNode.GetMempoolAccount(LAccountNumber); + TPCEncryption.DoPascalCoinECIESEncrypt(LAccount.accountInfo.accountKey,LPayloadBytes,LEncryptedPayloadBytes); + LValid := Length(LEncryptedPayloadBytes)>0; end else if (PageControlOpType.ActivePage=tsChangePrivateKey) then begin if (rbChangeKeyWithAnother.Checked) then begin // With new key generated if (cbNewPrivateKey.ItemIndex>=0) then begin i := PtrInt(cbNewPrivateKey.Items.Objects[cbNewPrivateKey.ItemIndex]); - if (i>=0) then public_key := WalletKeys.Key[i].AccountKey; + if (i>=0) then LPublicKey := WalletKeys.Key[i].AccountKey; end else begin - errors := 'Must select a private key'; + AErrors := 'Must select a private key'; exit; end; end else if (rbChangeKeyTransferAccountToNewOwner.Checked) then begin - If Not TAccountComp.AccountKeyFromImport(ebNewPublicKey.Text,public_key,errors) then begin - errors := 'Public key: '+errors; + If Not TAccountComp.AccountKeyFromImport(ebNewPublicKey.Text,LPublicKey,AErrors) then begin + AErrors := 'Public key: '+AErrors; exit; end; end else begin - errors := 'Must select change type'; + AErrors := 'Must select change type'; exit; end; - if public_key.EC_OpenSSL_NID<>CT_Account_NUL.accountInfo.accountKey.EC_OpenSSL_NID then begin - TPCEncryption.DoPascalCoinECIESEncrypt(public_key,LPayloadBytes,payload_encrypted); - valid := Length(payload_encrypted)>0; + if LPublicKey.EC_OpenSSL_NID<>CT_Account_NUL.accountInfo.accountKey.EC_OpenSSL_NID then begin + TPCEncryption.DoPascalCoinECIESEncrypt(LPublicKey,LPayloadBytes,LEncryptedPayloadBytes); + LValid := Length(LEncryptedPayloadBytes)>0; end else begin - valid := false; - errors := 'Selected private key is not valid to encode'; + LValid := false; + AErrors := 'Selected private key is not valid to encode'; exit; end; end else begin - errors := 'This operation does not allow this kind of payload'; + AErrors := 'This operation does not allow this kind of payload'; end; - end else if (rbEncrptedWithPassword.Checked) then begin - payload_encrypted := TPCEncryption.DoPascalCoinAESEncrypt(LPayloadBytes,TEncoding.ANSI.GetBytes(ebEncryptPassword.Text)); - valid := Length(payload_encrypted)>0; - end else if (rbNotEncrypted.Checked) then begin - payload_encrypted := LPayloadBytes; - valid := true; + end else if (Length(LPayloadBytes)>0) AND (rbEncrptedWithPassword.Checked) then begin + LTargetEPASA.PayloadType := LTargetEPASA.PayloadType + [ptPasswordEncrypted]; + LPassword := ebEncryptPassword.Text; + LEncryptedPayloadBytes := TPCEncryption.DoPascalCoinAESEncrypt(LPayloadBytes,TEncoding.ANSI.GetBytes(LPassword)); + LTargetEPASA.Password := LPassword; + LValid := Length(LEncryptedPayloadBytes)>0; + end else if (Length(LPayloadBytes)>0) AND (rbNotEncrypted.Checked) then begin + LTargetEPASA.PayloadType := LTargetEPASA.PayloadType + [ptPublic]; + LEncryptedPayloadBytes := LPayloadBytes; + LValid := true; end else begin - errors := 'Must select an encryption option for payload'; + AErrors := 'Must select an encryption option for payload'; end; finally - if valid then begin - if length(payload_encrypted)>CT_MaxPayloadSize then begin - valid := false; - errors := 'Payload size is bigger than '+inttostr(CT_MaxPayloadSize)+' ('+Inttostr(length(payload_encrypted))+')'; + if LValid then begin + if length(LEncryptedPayloadBytes)>CT_MaxPayloadSize then begin + LValid := false; + AErrors := 'Payload size is bigger than '+inttostr(CT_MaxPayloadSize)+' ('+Inttostr(length(LEncryptedPayloadBytes))+')'; end; end; - if valid then begin + if LValid then begin lblEncryptionErrors.Caption := ''; - lblPayloadLength.Caption := Format('(%db -> %db)',[length(payload_u),length(payload_encrypted)]); + lblPayloadLength.Caption := Format('(%db -> %db)',[length(LTargetEPASA.Payload),length(LEncryptedPayloadBytes)]) end else begin - lblEncryptionErrors.Caption := errors; - lblPayloadLength.Caption := Format('(%db -> ?)',[length(payload_u)]); + if Trim(AErrors)='' then AErrors := 'Undefined'; + lblEncryptionErrors.Caption := AErrors; + lblPayloadLength.Caption := Format('(%db -> ?)',[length(LTargetEPASA.Payload)]) + end; + FEncodedPayload.payload_type := LTargetEPASA.PayloadType.ToProtocolValue; + FEncodedPayload.payload_raw := LEncryptedPayloadBytes; + Result := LValid; + if (LValid) And (Not FUpdating) then begin + ebDestAccount.Text := LTargetEPASA.ToString(False); end; - FEncodedPayload.payload_raw := payload_encrypted; - Result := valid; end; end; diff --git a/src/gui-classic/UFRMOperationsExplorer.pas b/src/gui-classic/UFRMOperationsExplorer.pas index 9ecf7b129..4a28a3126 100644 --- a/src/gui-classic/UFRMOperationsExplorer.pas +++ b/src/gui-classic/UFRMOperationsExplorer.pas @@ -29,7 +29,7 @@ interface {$ENDIF} Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, Menus, ActnList, UAccounts, UBlockChain, UNode, UCrypto, UBaseTypes, - UFileStorage, UWallet, UConst, UTxMultiOperation, UOpTransaction, URPC, + UFileStorage, UWallet, UConst, UTxMultiOperation, UOpTransaction, URPC, UOrderedList, {$IFNDEF FPC}System.Generics.Collections{$ELSE}Generics.Collections{$ENDIF}, UJSONFunctions; @@ -409,7 +409,7 @@ procedure TFRMOperationsExplorer.bbAddOpChangeClick(Sender: TObject); aux := new_name; If Not InputQuery(Caption,Format('New name for account %s:',[TAccountComp.AccountNumberToAccountTxtNumber(nAccount)]),aux) then Break; aux := LowerCase(aux); - Until (aux='') Or (TPCSafeBox.ValidAccountName(TEncoding.ANSI.GetBytes(aux),errors)); + Until (aux='') Or (TPascalCoinProtocol.IsValidAccountName(FSourceNode.Bank.SafeBox.CurrentProtocol,TEncoding.ANSI.GetBytes(aux),errors)); new_name := aux; aux := IntToStr(new_type); @@ -666,7 +666,7 @@ procedure TFRMOperationsExplorer.UpdateSelectedOperationInfo; Var op : TPCOperation; opht : TOperationsHashTree; i : Integer; - l : TList; + l : TOrderedList; aux : String; raw : TRawBytes; ms : TMemoryStream; @@ -684,7 +684,7 @@ procedure TFRMOperationsExplorer.UpdateSelectedOperationInfo; mOperationInfo.Lines.Add(Format('%s',[op.ToString])); mOperationInfo.Lines.Add(''); mOperationInfo.Lines.Add(Format('OpType:%d ClassName:%s Protocol:%d',[op.OpType,op.ClassName,op.ProtocolVersion])); - l := TList.Create; + l := TOrderedList.Create(False,TComparison_Cardinal); Try op.AffectedAccounts(l); aux := ''; For i:=0 to l.Count-1 do begin @@ -715,7 +715,9 @@ procedure TFRMOperationsExplorer.UpdateSelectedOperationInfo; If op.OperationToOperationResume(FSourceNode.Bank.BlocksCount,op,True,op.SignerAccount,opr) then begin jsonObj := TPCJSONObject.Create; Try - TPascalCoinJSONComp.FillOperationObject(opr,FSourceNode.Bank.BlocksCount,jsonObj); + TPascalCoinJSONComp.FillOperationObject(opr,FSourceNode.Bank.BlocksCount, + SourceNode,SourceWalletKeys,Nil, + jsonObj); mOperationInfo.Lines.Add('JSON:'); mOperationInfo.Lines.Add(jsonObj.ToJSON(False)); Finally diff --git a/src/gui-classic/UFRMPascalCoinWalletConfig.dfm b/src/gui-classic/UFRMPascalCoinWalletConfig.dfm index b8fc9371c..e808ac24d 100644 --- a/src/gui-classic/UFRMPascalCoinWalletConfig.dfm +++ b/src/gui-classic/UFRMPascalCoinWalletConfig.dfm @@ -1,10 +1,10 @@ object FRMPascalCoinWalletConfig: TFRMPascalCoinWalletConfig - Left = 0 - Top = 0 + Left = 462 + Top = 234 BorderIcons = [biSystemMenu] BorderStyle = bsSingle Caption = 'Options' - ClientHeight = 540 + ClientHeight = 581 ClientWidth = 374 Color = clBtnFace Font.Charset = DEFAULT_CHARSET @@ -12,17 +12,19 @@ object FRMPascalCoinWalletConfig: TFRMPascalCoinWalletConfig Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] - OldCreateOrder = False + OldCreateOrder = True Position = poOwnerFormCenter OnCreate = FormCreate PixelsPerInch = 96 TextHeight = 13 object Label1: TLabel Left = 30 - Top = 405 + Top = 403 Width = 120 Height = 13 Caption = 'Default fee for operation' + Color = clBtnFace + ParentColor = False end object Label2: TLabel Left = 30 @@ -30,6 +32,8 @@ object FRMPascalCoinWalletConfig: TFRMPascalCoinWalletConfig Width = 98 Height = 13 Caption = 'Internet Server Port' + Color = clBtnFace + ParentColor = False end object lblDefaultInternetServerPort: TLabel Left = 248 @@ -37,6 +41,8 @@ object FRMPascalCoinWalletConfig: TFRMPascalCoinWalletConfig Width = 70 Height = 13 Caption = '(Default XXXX)' + Color = clBtnFace + ParentColor = False end object Label3: TLabel Left = 15 @@ -44,33 +50,43 @@ object FRMPascalCoinWalletConfig: TFRMPascalCoinWalletConfig Width = 60 Height = 13 Caption = 'Miner Name:' + Color = clBtnFace + ParentColor = False end object Label4: TLabel Left = 90 - Top = 91 + Top = 90 Width = 259 Height = 13 Caption = 'This name will be included in each new block you mine!' - Font.Charset = DEFAULT_CHARSET + Color = clBtnFace + Font.Charset = ANSI_CHARSET Font.Color = clGray Font.Height = -11 Font.Name = 'Tahoma' + Font.Pitch = fpVariable Font.Style = [] + Font.Quality = fqDraft + ParentColor = False ParentFont = False end object Label5: TLabel Left = 30 - Top = 231 + Top = 226 Width = 73 Height = 13 Caption = 'JSON-RPC Port' + Color = clBtnFace + ParentColor = False end object lblDefaultJSONRPCMinerServerPort: TLabel Left = 248 - Top = 231 + Top = 226 Width = 70 Height = 13 Caption = '(Default XXXX)' + Color = clBtnFace + ParentColor = False end object Label6: TLabel Left = 24 @@ -78,31 +94,37 @@ object FRMPascalCoinWalletConfig: TFRMPascalCoinWalletConfig Width = 57 Height = 13 Caption = 'Allowed IP'#39's' + Color = clBtnFace + ParentColor = False end object Label7: TLabel - Left = 92 - Top = 182 + Left = 90 + Top = 183 Width = 209 Height = 13 Caption = 'Ip'#39's separated by semicolon or empty for all' - Font.Charset = DEFAULT_CHARSET + Color = clBtnFace + Font.Charset = ANSI_CHARSET Font.Color = clGray Font.Height = -11 Font.Name = 'Tahoma' + Font.Pitch = fpVariable Font.Style = [] + Font.Quality = fqDraft + ParentColor = False ParentFont = False end object cbJSONRPCMinerServerActive: TCheckBox Left = 15 - Top = 205 - Width = 261 - Height = 17 + Top = 200 + Width = 225 + Height = 19 Caption = 'JSON-RPC Server Miner (TCP/IP, no HTTP)' TabOrder = 6 end object ebDefaultFee: TEdit Left = 170 - Top = 402 + Top = 400 Width = 56 Height = 21 Alignment = taRightJustify @@ -111,36 +133,36 @@ object FRMPascalCoinWalletConfig: TFRMPascalCoinWalletConfig end object cbSaveLogFiles: TCheckBox Left = 15 - Top = 429 - Width = 97 - Height = 17 + Top = 427 + Width = 78 + Height = 19 Caption = 'Save log file' TabOrder = 13 OnClick = cbSaveLogFilesClick end object cbShowLogs: TCheckBox Left = 15 - Top = 467 - Width = 97 - Height = 17 + Top = 465 + Width = 68 + Height = 19 Caption = 'Show logs' TabOrder = 15 end object bbOk: TBitBtn - Left = 176 - Top = 490 + Left = 184 + Top = 530 Width = 75 - Height = 25 + Height = 30 Kind = bkOK NumGlyphs = 2 TabOrder = 18 OnClick = bbOkClick end object bbCancel: TBitBtn - Left = 266 - Top = 490 + Left = 274 + Top = 530 Width = 75 - Height = 25 + Height = 30 Kind = bkCancel NumGlyphs = 2 TabOrder = 19 @@ -152,7 +174,7 @@ object FRMPascalCoinWalletConfig: TFRMPascalCoinWalletConfig Height = 21 Associate = ebInternetServerPort Min = 1 - Max = 40000 + Max = 25000 Position = 4004 TabOrder = 3 Thousands = False @@ -169,7 +191,7 @@ object FRMPascalCoinWalletConfig: TFRMPascalCoinWalletConfig object bbUpdatePassword: TBitBtn Left = 15 Top = 14 - Width = 336 + Width = 337 Height = 38 Caption = 'Wallet Password' Font.Charset = DEFAULT_CHARSET @@ -244,67 +266,67 @@ object FRMPascalCoinWalletConfig: TFRMPascalCoinWalletConfig end object cbShowModalMessages: TCheckBox Left = 170 - Top = 429 - Width = 171 - Height = 17 + Top = 427 + Width = 127 + Height = 19 Caption = 'Show modal messages' TabOrder = 16 end object udJSONRPCMinerServerPort: TUpDown Left = 226 - Top = 228 + Top = 223 Width = 16 Height = 21 Associate = ebJSONRPCMinerServerPort Min = 1 - Max = 40000 - Position = 1 + Max = 25000 + Position = 4009 TabOrder = 8 Thousands = False end object ebJSONRPCMinerServerPort: TEdit Left = 170 - Top = 228 + Top = 223 Width = 56 Height = 21 Alignment = taRightJustify TabOrder = 7 - Text = '1' + Text = '4009' end object gbMinerPrivateKey: TGroupBox - Left = 15 - Top = 255 + Left = 8 + Top = 250 Width = 334 - Height = 121 + Height = 112 Caption = ' Miner Server Private Key: ' TabOrder = 9 object rbGenerateANewPrivateKeyEachBlock: TRadioButton - Left = 20 - Top = 20 - Width = 301 - Height = 17 + Left = 11 + Top = 14 + Width = 277 + Height = 19 Caption = 'Generate a new private key for each generated block' TabOrder = 0 end object rbUseARandomKey: TRadioButton - Left = 20 - Top = 40 - Width = 216 - Height = 17 + Left = 11 + Top = 34 + Width = 146 + Height = 19 Caption = 'Use a random existing key' TabOrder = 1 end object rbMineAllwaysWithThisKey: TRadioButton - Left = 20 - Top = 61 - Width = 216 - Height = 17 + Left = 11 + Top = 55 + Width = 146 + Height = 19 Caption = 'Always mine with this key:' TabOrder = 2 end object cbPrivateKeyToMine: TComboBox - Left = 45 - Top = 85 + Left = 36 + Top = 79 Width = 266 Height = 21 Style = csDropDownList @@ -313,65 +335,82 @@ object FRMPascalCoinWalletConfig: TFRMPascalCoinWalletConfig end object cbSaveDebugLogs: TCheckBox Left = 31 - Top = 447 - Width = 97 - Height = 17 + Top = 445 + Width = 118 + Height = 19 Caption = 'Save debug logs too' TabOrder = 14 end object bbOpenDataFolder: TBitBtn - Left = 15 - Top = 490 - Width = 120 - Height = 25 - Caption = 'Open Data folder' + Left = 16 + Top = 530 + Width = 131 + Height = 30 + Caption = 'Open Data Folder' Glyph.Data = { - 36030000424D3603000000000000360000002800000010000000100000000100 - 18000000000000030000120B0000120B00000000000000000000FF00FF078DBE - 078DBE078DBE078DBE078DBE078DBE078DBE078DBE078DBE078DBE078DBE078D - BEFF00FFFF00FFFF00FF078DBE25A1D171C6E884D7FA66CDF965CDF965CDF965 - CDF965CDF865CDF965CDF866CEF93AADD81999C9FF00FFFF00FF078DBE4CBCE7 - 39A8D1A0E2FB6FD4FA6FD4F96ED4FA6FD4F96FD4FA6FD4FA6FD4FA6ED4F93EB1 - D9C9F0F3078DBEFF00FF078DBE72D6FA078DBEAEE9FC79DCFB79DCFB79DCFB79 - DCFB79DCFB7ADCFB79DCFA79DCFA44B5D9C9F0F3078DBEFF00FF078DBE79DDFB - 1899C79ADFF392E7FC84E4FB83E4FC83E4FC84E4FC83E4FC83E4FB84E5FC48B9 - DAC9F0F31496C4FF00FF078DBE82E3FC43B7DC65C2E0ABF0FC8DEBFC8DEBFC8D - EBFD8DEBFD8DEBFC8DEBFD8DEBFC4CBBDAC9F0F3C9F0F3078DBE078DBE8AEAFC - 77DCF3219CC7FEFFFFC8F7FDC9F7FDC9F7FDC9F7FEC8F7FEC9F7FDC8F7FE9BD5 - E6EAFEFED2F3F8078DBE078DBE93F0FE93F0FD1697C5078DBE078DBE078DBE07 - 8DBE078DBE078DBE078DBE078DBE078DBE078DBE078DBE078DBE078DBE9BF5FE - 9AF6FE9AF6FE9BF5FD9BF6FE9AF6FE9BF5FE9AF6FD9BF5FE9AF6FE9AF6FE0989 - BAFF00FFFF00FFFF00FF078DBEFEFEFEA0FBFFA0FBFEA0FBFEA1FAFEA1FBFEA0 - FAFEA1FBFEA1FBFFA0FBFFA1FBFF0989BAFF00FFFF00FFFF00FFFF00FF078DBE - FEFEFEA5FEFFA5FEFFA5FEFF078DBE078DBE078DBE078DBE078DBE078DBEFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FF078DBE078DBE078DBE078DBEFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000078DBE4D078D + BEFF078DBEFF078DBEFF078DBEFF078DBEFF078DBEFF078DBEFF078DBEFF078D + BEFF078DBEFF078DBEFF078DBEFF078DBEFFFFFFFF00FFFFFF00078DBEFF25A1 + D1FF70C6E7FF6BCFF9FF66CDF9FF65CDF9FF65CDF9FF65CDF9FF65CDF8FF65CD + F9FF65CDF8FF66CEF9FF39ADD8FF078DBEFF078DBE4DFFFFFF00078DBEFF4CBC + E7FF5EB8DAFF94DFFBFF6FD4FAFF6FD4F9FF6ED4FAFF6FD4F9FF6FD4FAFF6FD4 + FAFF6FD4FAFF6ED4F9FF3EB1D9FF84D7EBFF078DBEFFFFFFFF00078DBEFF72D6 + FAFF1593C2FFB6ECFDFF7DDDFBFF79DCFBFF79DCFBFF79DCFBFF79DCFBFF7ADC + FBFF79DCFAFF79DCFAFF44B5D9FFAEF1F9FF078DBEFFFFFFFF00078DBEFF79DD + FBFF1899C7FF94DDF3FFA2EBFCFF84E4FBFF83E4FCFF83E4FCFF84E4FCFF83E4 + FCFF83E4FBFF84E5FCFF48B9DAFFB3F4F9FF078DBEFF078DBE4D078DBEFF82E3 + FCFF43B7DCFF4BB9DBFFBFF4FDFF8EEBFCFF8DEBFCFF8DEBFDFF8DEBFDFF8DEB + FCFF8DEBFDFF8DEBFCFF4CBBDAFFB6F7F9FF6DCAE0FF078DBEFF078DBEFF8AEA + FCFF77DCF3FF1496C3FFFFFFFFFFC9F8FEFFC9F8FEFFC9F8FEFFC9F8FFFFC9F7 + FFFFC9F8FEFFC9F8FFFF9CD6E7FFDFFAFBFFDBF7FAFF078DBEFF078DBEFF93F0 + FEFF93F0FDFF1697C5FF078DBEFF078DBEFF078DBEFF078DBEFF078DBEFF078D + BEFF078DBEFF078DBEFF078DBEFF078DBEFF078DBEFF078DBEFF078DBEFF9BF5 + FEFF9AF6FEFF9AF6FEFF9BF5FDFF9BF6FEFF9AF6FEFF9BF5FEFF9AF6FDFF9BF5 + FEFF9AF6FEFF9AF6FEFF0989BAFFFFFFFF00FFFFFF00FFFFFF00078DBEFFFEFE + FEFFA0FBFFFFA0FBFEFFA0FBFEFFA1FAFEFFA1FBFEFFA0FAFEFFA1FBFEFFA1FB + FFFFA0FBFFFFA1FBFFFF0989BAFFFFFFFF00FFFFFF00FFFFFF00078DBE4D078D + BEFFFEFEFEFFA5FEFFFFA5FEFFFFA5FEFFFF078DBEFF078DBEFF078DBEFF078D + BEFF078DBEFF078DBEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00078D + BE4D078DBEFF078DBEFF078DBEFF078DBEFF078DBE4DFFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00} TabOrder = 17 OnClick = bbOpenDataFolderClick end object cbJSONRPCPortEnabled: TCheckBox Left = 15 - Top = 139 - Width = 261 - Height = 17 + Top = 136 + Width = 205 + Height = 19 Caption = 'JSON-RPC Server port enabled (HTTP)' TabOrder = 4 OnClick = cbJSONRPCPortEnabledClick end object ebJSONRPCAllowedIPs: TEdit Left = 90 - Top = 158 + Top = 159 Width = 261 Height = 21 TabOrder = 5 Text = 'ebJSONRPCAllowedIPs' end + object cbDownloadNewCheckpoint: TCheckBox + Left = 16 + Top = 373 + Width = 271 + Height = 19 + Caption = 'Download new Checkpoint if blockchain older than...' + TabOrder = 10 + OnClick = cbDownloadNewCheckpointClick + end object ebMinFutureBlocksToDownloadNewSafebox: TEdit Left = 296 Top = 373 @@ -381,13 +420,13 @@ object FRMPascalCoinWalletConfig: TFRMPascalCoinWalletConfig TabOrder = 11 Text = '0' end - object cbDownloadNewCheckpoint: TCheckBox - Left = 16 - Top = 373 - Width = 271 - Height = 19 - Caption = 'Download new Checkpoint if blockchain older than...' - TabOrder = 10 - OnClick = cbDownloadNewCheckpointClick + object bbChangeLanguage: TBitBtn + Left = 15 + Top = 488 + Width = 131 + Height = 30 + Caption = 'Change UI language' + TabOrder = 20 + OnClick = bbChangeLanguageClick end end diff --git a/src/gui-classic/UFRMPascalCoinWalletConfig.lfm b/src/gui-classic/UFRMPascalCoinWalletConfig.lfm index f7b66898e..a7ab2d8c8 100644 --- a/src/gui-classic/UFRMPascalCoinWalletConfig.lfm +++ b/src/gui-classic/UFRMPascalCoinWalletConfig.lfm @@ -1,12 +1,12 @@ object FRMPascalCoinWalletConfig: TFRMPascalCoinWalletConfig Left = 462 - Height = 551 + Height = 581 Top = 234 Width = 374 BorderIcons = [biSystemMenu] BorderStyle = bsSingle Caption = 'Options' - ClientHeight = 551 + ClientHeight = 581 ClientWidth = 374 Color = clBtnFace Font.Color = clWindowText @@ -14,7 +14,6 @@ object FRMPascalCoinWalletConfig: TFRMPascalCoinWalletConfig Font.Name = 'Tahoma' OnCreate = FormCreate Position = poOwnerFormCenter - LCLVersion = '1.8.0.6' object Label1: TLabel Left = 30 Height = 13 @@ -115,23 +114,22 @@ object FRMPascalCoinWalletConfig: TFRMPascalCoinWalletConfig object bbOk: TBitBtn Left = 184 Height = 30 - Top = 500 + Top = 530 Width = 75 + Caption = 'OK' Kind = bkOK ModalResult = 1 OnClick = bbOkClick - Caption = 'OK' TabOrder = 18 end object bbCancel: TBitBtn Left = 274 Height = 30 - Top = 500 + Top = 530 Width = 75 - Cancel = True + Caption = 'Cancel' Kind = bkCancel ModalResult = 2 - Caption = 'Cancel' TabOrder = 19 end object udInternetServerPort: TUpDown @@ -145,7 +143,6 @@ object FRMPascalCoinWalletConfig: TFRMPascalCoinWalletConfig Position = 4004 TabOrder = 3 Thousands = False - Wrap = False end object ebInternetServerPort: TEdit Left = 170 @@ -251,7 +248,6 @@ object FRMPascalCoinWalletConfig: TFRMPascalCoinWalletConfig Position = 4009 TabOrder = 8 Thousands = False - Wrap = False end object ebJSONRPCMinerServerPort: TEdit Left = 170 @@ -316,7 +312,7 @@ object FRMPascalCoinWalletConfig: TFRMPascalCoinWalletConfig object bbOpenDataFolder: TBitBtn Left = 16 Height = 30 - Top = 500 + Top = 530 Width = 131 Caption = 'Open Data Folder' Glyph.Data = { @@ -416,4 +412,13 @@ object FRMPascalCoinWalletConfig: TFRMPascalCoinWalletConfig TabOrder = 11 Text = '0' end + object bbChangeLanguage: TBitBtn + Left = 15 + Height = 30 + Top = 488 + Width = 131 + Caption = 'Change UI language' + OnClick = bbChangeLanguageClick + TabOrder = 20 + end end diff --git a/src/gui-classic/UFRMPascalCoinWalletConfig.pas b/src/gui-classic/UFRMPascalCoinWalletConfig.pas index 46df2d1a3..afc8061ff 100644 --- a/src/gui-classic/UFRMPascalCoinWalletConfig.pas +++ b/src/gui-classic/UFRMPascalCoinWalletConfig.pas @@ -30,15 +30,15 @@ interface LCLIntf, LCLType, LMessages, {$ENDIF} Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, StdCtrls, Buttons, ComCtrls, UAppParams, UWallet; + Dialogs, StdCtrls, Buttons, ComCtrls, UAppParams, USettings, UWallet; type - TMinerPrivateKey = (mpk_NewEachTime, mpk_Random, mpk_Selected); { TFRMPascalCoinWalletConfig } TFRMPascalCoinWalletConfig = class(TForm) + bbChangeLanguage: TBitBtn; cbJSONRPCMinerServerActive: TCheckBox; cbDownloadNewCheckpoint: TCheckBox; ebDefaultFee: TEdit; @@ -72,6 +72,7 @@ TFRMPascalCoinWalletConfig = class(TForm) ebJSONRPCAllowedIPs: TEdit; Label6: TLabel; Label7: TLabel; + procedure bbChangeLanguageClick(Sender: TObject); procedure cbDownloadNewCheckpointClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure bbOkClick(Sender: TObject); @@ -82,6 +83,7 @@ TFRMPascalCoinWalletConfig = class(TForm) private FAppParams: TAppParams; FWalletKeys: TWalletKeys; + FNewUILanguage:String; procedure SetAppParams(const Value: TAppParams); procedure SetWalletKeys(const Value: TWalletKeys); Procedure UpdateWalletConfig; @@ -92,9 +94,12 @@ TFRMPascalCoinWalletConfig = class(TForm) Property WalletKeys : TWalletKeys read FWalletKeys write SetWalletKeys; end; + {$I ../config.inc} + implementation -uses UConst, UAccounts, ULog, UCrypto, UNode, USettings, UGUIUtils, UNetProtocol; +uses + {$IFDEF USE_GNUGETTEXT}gnugettext, UFRMSelectLanguage, {$ENDIF}UConst, UAccounts, ULog, UCrypto, UNode, UGUIUtils, UNetProtocol; {$IFnDEF FPC} {$R *.dfm} @@ -104,15 +109,19 @@ implementation procedure TFRMPascalCoinWalletConfig.bbOkClick(Sender: TObject); Var df : Int64; - mpk : TMinerPrivateKey; + mpk : TMinerPrivateKeyType; i : Integer; begin if udInternetServerPort.Position = udJSONRPCMinerServerPort.Position then raise Exception.Create('Server port and JSON-RPC Server miner port are equal!'); if TAccountComp.TxtToMoney(ebDefaultFee.Text,df) then begin + if (df<=0) And (Not CT_AllowPropagate0feeOperations) then begin + ebDefaultFee.Text := TAccountComp.FormatMoney(AppParams.ParamByName[CT_PARAM_DefaultFee].GetAsInteger(1)); + raise Exception.Create('Minimum fee is at least '+TAccountComp.FormatMoney(CT_MOLINA)); + end; AppParams.ParamByName[CT_PARAM_DefaultFee].SetAsInt64(df); end else begin - ebDefaultFee.Text := TAccountComp.FormatMoney(AppParams.ParamByName[CT_PARAM_DefaultFee].GetAsInteger(0)); + ebDefaultFee.Text := TAccountComp.FormatMoney(AppParams.ParamByName[CT_PARAM_DefaultFee].GetAsInteger(1)); raise Exception.Create('Invalid Fee value'); end; AppParams.ParamByName[CT_PARAM_InternetServerPort].SetAsInteger(udInternetServerPort.Position ); @@ -141,6 +150,7 @@ procedure TFRMPascalCoinWalletConfig.bbOkClick(Sender: TObject); AppParams.ParamByName[CT_PARAM_MinFutureBlocksToDownloadNewSafebox].SetAsInteger(i); AppParams.ParamByName[CT_PARAM_AllowDownloadNewCheckpointIfOlderThan].SetAsBoolean(i>200); end else AppParams.ParamByName[CT_PARAM_AllowDownloadNewCheckpointIfOlderThan].SetAsBoolean(False); + AppParams.ParamByName[CT_PARAM_UILanguage].SetAsString(FNewUILanguage); ModalResult := MrOk; end; @@ -194,6 +204,8 @@ procedure TFRMPascalCoinWalletConfig.cbSaveLogFilesClick(Sender: TObject); procedure TFRMPascalCoinWalletConfig.FormCreate(Sender: TObject); begin + {$IFDEF USE_GNUGETTEXT}TranslateComponent(self);{$ENDIF} + // lblDefaultInternetServerPort.Caption := Format('(Default %d)',[CT_NetServer_Port]); udInternetServerPort.Position := CT_NetServer_Port; ebDefaultFee.Text := TAccountComp.FormatMoney(0); @@ -212,6 +224,19 @@ procedure TFRMPascalCoinWalletConfig.cbDownloadNewCheckpointClick( UpdateWalletConfig; end; +procedure TFRMPascalCoinWalletConfig.bbChangeLanguageClick(Sender: TObject); +begin + {$IFDEF USE_GNUGETTEXT} + fNewUILanguage := AppParams.ParamByName[CT_PARAM_UILanguage].GetAsString(GetCurrentLanguage); + fNewUILanguage := SelectUILanguage(fNewUILanguage); + if fNewUILanguage<>AppParams.ParamByName[CT_PARAM_UILanguage].GetAsString(GetCurrentLanguage) then // new language selected + begin + UseLanguage(fNewUILanguage); + RetranslateComponent(Self); + end; + {$ENDIF} +end; + procedure TFRMPascalCoinWalletConfig.SetAppParams(const Value: TAppParams); Var i : Integer; begin @@ -219,9 +244,9 @@ procedure TFRMPascalCoinWalletConfig.SetAppParams(const Value: TAppParams); if Not Assigned(Value) then exit; Try udInternetServerPort.Position := AppParams.ParamByName[CT_PARAM_InternetServerPort].GetAsInteger(CT_NetServer_Port); - ebDefaultFee.Text := TAccountComp.FormatMoney(AppParams.ParamByName[CT_PARAM_DefaultFee].GetAsInt64(0)); + ebDefaultFee.Text := TAccountComp.FormatMoney(TSettings.DefaultFee); cbJSONRPCMinerServerActive.Checked := AppParams.ParamByName[CT_PARAM_JSONRPCMinerServerActive].GetAsBoolean(true); - case TMinerPrivateKey(AppParams.ParamByName[CT_PARAM_MinerPrivateKeyType].GetAsInteger(Integer(mpk_Random))) of + case TMinerPrivateKeyType(AppParams.ParamByName[CT_PARAM_MinerPrivateKeyType].GetAsInteger(Integer(mpk_Random))) of mpk_NewEachTime : rbGenerateANewPrivateKeyEachBlock.Checked := true; mpk_Random : rbUseARandomKey.Checked := true; mpk_Selected : rbMineAllwaysWithThisKey.Checked := true; diff --git a/src/gui-classic/UFRMPayloadDecoder.dfm b/src/gui-classic/UFRMPayloadDecoder.dfm index 1de15704e..04570462c 100644 --- a/src/gui-classic/UFRMPayloadDecoder.dfm +++ b/src/gui-classic/UFRMPayloadDecoder.dfm @@ -272,6 +272,10 @@ object FRMPayloadDecoder: TFRMPayloadDecoder object tsDecodeMethods: TTabSheet Caption = 'Decode methods' ImageIndex = 1 + ExplicitLeft = 0 + ExplicitTop = 0 + ExplicitWidth = 0 + ExplicitHeight = 0 object lblPasswordsInfo: TLabel Left = 235 Top = 143 diff --git a/src/gui-classic/UFRMPayloadDecoder.lfm b/src/gui-classic/UFRMPayloadDecoder.lfm index dd3106eda..4ea4dd4bd 100644 --- a/src/gui-classic/UFRMPayloadDecoder.lfm +++ b/src/gui-classic/UFRMPayloadDecoder.lfm @@ -15,8 +15,7 @@ object FRMPayloadDecoder: TFRMPayloadDecoder Font.Name = 'Tahoma' OnCreate = FormCreate Position = poOwnerFormCenter - LCLVersion = '1.8.4.0' - Visible = False + LCLVersion = '2.0.2.0' object Label1: TLabel Left = 20 Height = 13 diff --git a/src/gui-classic/UFRMPayloadDecoder.pas b/src/gui-classic/UFRMPayloadDecoder.pas index d2a2da2ae..ef09f08ea 100644 --- a/src/gui-classic/UFRMPayloadDecoder.pas +++ b/src/gui-classic/UFRMPayloadDecoder.pas @@ -106,7 +106,7 @@ implementation {$R *.lfm} {$ENDIF} -Uses UNode, UTime, UPCEncryption, UAccounts, UFRMMemoText, UBaseTypes; +Uses {$IFDEF USE_GNUGETTEXT}gnugettext,{$ENDIF}UNode, UTime, UPCEncryption, UAccounts, UFRMMemoText, UBaseTypes; { TFRMPayloadDecoder } @@ -138,10 +138,7 @@ procedure TFRMPayloadDecoder.cbShowAsHexadecimalClick(Sender: TObject); procedure TFRMPayloadDecoder.DoFind(Const OpHash : String); Var - r,md160 : TRawBytes; - pcops : TPCOperationsComp; - nBlock,nAccount,nN_Operation : Cardinal; - opbi : Integer; + r : TRawBytes; opr : TOperationResume; strings : TStrings; FRM : TFRMMemoText; @@ -156,46 +153,13 @@ procedure TFRMPayloadDecoder.DoFind(Const OpHash : String); if (Length(r)=0) then begin raise Exception.Create('Value is not an hexadecimal string'); end; - // Build 2.1.4 new decoder option: Check if OpHash is a posible double spend - If not TPCOperation.DecodeOperationHash(r,nBlock,nAccount,nN_Operation,md160) then begin - raise Exception.Create('Value is not a valid OPHASH because can''t extract Block/Account/N_Operation info'); - end; - Case TNode.Node.FindNOperation(nBlock,nAccount,nN_Operation,opr) of - invalid_params : raise Exception.Create(Format('Not a valid OpHash searching at Block:%d Account:%d N_Operation:%d',[nBlock,nAccount,nN_Operation])); - blockchain_block_not_found : raise Exception.Create('Your blockchain file does not contain all blocks to find'); - found : ; + case TNode.Node.FindOperation(r,opr) of + OpHash_invalid_params : raise Exception.Create(Format('Not a valid OpHash %s',[OpHash])); + OpHash_block_not_found : raise Exception.Create('Your blockchain file does not contain all blocks to find'); + OpHash_found : ; else raise Exception.Create('ERROR DEV 20171120-6'); end; - If (TPCOperation.EqualOperationHashes(opr.OperationHash,r)) Or - (TPCOperation.EqualOperationHashes(opr.OperationHash_OLD,r)) then begin - // Found! - OpResume := opr; - end else begin - // Not found! - strings := TStringList.Create; - try - strings.Add('Posible double spend detected!'); - strings.Add(Format('OpHash: %s',[OpHash])); - strings.Add(Format('Decode OpHash info: Block:%d Account:%s N_Operation:%d',[nBlock,TAccountComp.AccountNumberToAccountTxtNumber(nAccount),nN_Operation])); - strings.Add(''); - strings.Add('Real OpHash found in PascalCoin Blockchain:'); - strings.Add(Format('OpHash: %s',[TCrypto.ToHexaString(opr.OperationHash)])); - strings.Add(Format('Decode OpHash info: Block:%d Account:%s N_Operation:%d',[opr.Block,TAccountComp.AccountNumberToAccountTxtNumber(opr.SignerAccount),opr.n_operation])); - If (opr.Block=0) then begin - strings.Add('* Note: This is a pending operation not included on Blockchain'); - end; - OpResume := opr; // Do show operation resume! - FRM := TFRMMemoText.Create(Self); - try - FRM.InitData('Posible double spend detected',strings.Text); - FRM.ShowModal; - finally - FRM.Free; - end; - finally - strings.Free; - end; - end; + OpResume := opr; Except OpResume := CT_TOperationResume_NUL; try @@ -220,6 +184,8 @@ procedure TFRMPayloadDecoder.ebOphashKeyPress(Sender: TObject; var Key: Char); procedure TFRMPayloadDecoder.FormCreate(Sender: TObject); begin + {$IFDEF USE_GNUGETTEXT}TranslateComponent(self);{$ENDIF} + // FSemaphor := true; try FWalletKeys := Nil; diff --git a/src/gui-classic/UFRMSelectLanguage.dfm b/src/gui-classic/UFRMSelectLanguage.dfm new file mode 100644 index 000000000..806ecac26 --- /dev/null +++ b/src/gui-classic/UFRMSelectLanguage.dfm @@ -0,0 +1,49 @@ +object FRMChangeLanguage: TFRMChangeLanguage + Left = 2170 + Height = 451 + Top = 250 + Width = 374 + BorderIcons = [biSystemMenu] + BorderStyle = bsSingle + Caption = 'Language Selection' + ClientHeight = 451 + ClientWidth = 374 + OnCreate = FormCreate + Position = poOwnerFormCenter + object bbOk: TBitBtn + Left = 184 + Height = 30 + Top = 400 + Width = 75 + Caption = 'OK' + Kind = bkOK + ModalResult = 1 + TabOrder = 0 + end + object bbCancel: TBitBtn + Left = 274 + Height = 30 + Top = 400 + Width = 75 + Caption = 'Cancel' + Kind = bkCancel + ModalResult = 2 + TabOrder = 1 + end + object lbxAvailableLanguages: TListBox + Left = 15 + Height = 328 + Top = 56 + Width = 337 + ItemHeight = 0 + TabOrder = 2 + end + object Label1: TLabel + Left = 16 + Height = 15 + Top = 24 + Width = 161 + Caption = 'Select your preferred language' + ParentColor = False + end +end diff --git a/src/gui-classic/UFRMSelectLanguage.pas b/src/gui-classic/UFRMSelectLanguage.pas new file mode 100644 index 000000000..f7ea809a9 --- /dev/null +++ b/src/gui-classic/UFRMSelectLanguage.pas @@ -0,0 +1,72 @@ +unit UFRMSelectLanguage; + +{$IFDEF FPC} + {$MODE Delphi} +{$ENDIF} + +interface + +uses + gnugettext,Classes, SysUtils, Forms, Controls, Graphics, Dialogs, Buttons, StdCtrls; + +type + + { TFRMChangeLanguage } + + TFRMChangeLanguage = class(TForm) + bbCancel: TBitBtn; + bbOk: TBitBtn; + Label1: TLabel; + lbxAvailableLanguages: TListBox; + procedure FormCreate(Sender: TObject); + private + public + end; + + function SelectUILanguage(LanguageCode:String):string; + +implementation + + {$R *.dfm} +var + SelectedLanguageCode : string; + +function SelectUILanguage(LanguageCode:String):string; +begin + result := LanguageCode; + SelectedLanguageCode := LanguageCode; + with TFRMChangeLanguage.Create(nil) do + try + if (ShowModal=MrOk) and (lbxAvailableLanguages.ItemIndex<>-1) then + result := NativeLanguageToCode(lbxAvailableLanguages.Items[lbxAvailableLanguages.ItemIndex]); + finally + free; + end; +end; + +{ TFRMChangeLanguage } + +procedure TFRMChangeLanguage.FormCreate(Sender: TObject); +var + lst : TStringlist; + s :string; + i,y :integer; +begin + UseLanguage(SelectedLanguageCode); + TranslateComponent(self); + // fill listbox with available languages + lst := TStringlist.Create; + lbxAvailableLanguages.clear; + DefaultInstance.GetListOfLanguages('default',lst); + For i:=0 to lst.count-1 do + begin + y := lbxAvailableLanguages.Items.add(CodeToNativeLanguage(lst[i])); + if lst[i]=SelectedLanguageCode then lbxAvailableLanguages.ItemIndex:=y; + end; + if (lbxAvailableLanguages.ItemIndex=-1) and (lbxAvailableLanguages.Items.Count>0) then lbxAvailableLanguages.ItemIndex :=0; + lst.free; + // +end; + +end. + diff --git a/src/gui-classic/UFRMSplash.dfm b/src/gui-classic/UFRMSplash.dfm new file mode 100644 index 000000000..9ab9a4e8c --- /dev/null +++ b/src/gui-classic/UFRMSplash.dfm @@ -0,0 +1,1025 @@ +object FRMSplash: TFRMSplash + Left = 0 + Top = 0 + BorderIcons = [] + BorderStyle = bsDialog + Caption = 'PascalCoin process...' + ClientHeight = 188 + ClientWidth = 542 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + FormStyle = fsStayOnTop + OldCreateOrder = True + Position = poOwnerFormCenter + OnCreate = FormCreate + OnDestroy = FormDestroy + PixelsPerInch = 96 + TextHeight = 13 + object imgSplash: TImage + Left = 15 + Top = 15 + Width = 100 + Height = 100 + Picture.Data = { + 07544269746D617066750000424D667500000000000036000000280000006400 + 000064000000010018000000000030750000120B0000120B0000000000000000 + 0000FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + F8EAEAD2C8C8F7EAEAFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECF9EBEB959090484848807D7DF5E9E9FBECECFBECECFBEC + ECF8EAEADFD4D4FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBEDEDFBECECFBECECFBECECDFD4D44A4A4A4040404141 + 41999494FBECECFBECECFBEDED8985854A4A4AA9A3A3FBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECF4E7E78C88886F6D6DD9CECEFBECECFBED + ED8A86864343434444444242424747478D8989B6AEAE837F7F4242423E3E3E50 + 5050E9DDDDFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECB7AFAF4444 + 444040404D4D4D8F8B8B85818146464642424243434343434342424242424244 + 44444343434343434242424C4C4CDCD1D1FBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECB6AEAE45454543434342424242424241414140404042424244 + 4444454545464646454545434343414141434343434343444444BFB7B7FBECEC + FBECECF4E6E6FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECE9DDDD55555543434344444441 + 4141434343505050848080AFA8A8B7AFAFB7AFAFB4ADAD9C9696666464474747 + 414141424242605F5FA29C9C948F8F6A6767B9B2B2FBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEDEDBB + B4B44C4B4B4242424141415352529F9999E6DADAFBEDEDFBECECFBECECFBECEC + FBECECFBECECF2E4E4BDB4B45858584242424242424343434343434040404C4C + 4CCCC3C3FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECEE + E1E1A09A9AA09B9B807C7C4646464242424040406F6D6DE1D6D6FBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECE5D9D97775754141 + 41434343444444434343484848C7BEBEFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECF9EAEA8E8989434343434343424242424242414141525252 + E4D9D9FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECF5E8E87572724141414545454141417D7979F9EBEBFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECF7E8E87876763F3F3F434343 + 444444424242484848C4BCBCFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECD8CECE4A4A4A42424243 + 4343B4ADADFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECEDE1E1757272414141444444424242848080FBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECEC8A86864242424343439D9898FBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECE6DBDB575656404040484848D0C6 + C6FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECD5CACA4D4D4D4141414949498E8989 + C0B7B7F8EAEAFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECEEE2 + E25857573E3E3E6B6969F6E8E8FBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECE6DADA + 5554544343434242424141414848489C9797FBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECF9ECEC8884844242424141417F7B7BFBEDEDFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECF3E5E56664644141414444444343433E3E3E706D6DFAEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECE3D7D7716E6E42424243434341414173 + 7070F7E9E9FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC8480804141414343 + 434242425C5B5BC9C0C0FBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECA8A3A33F + 3F3F434343444444414141787575F8EAEAFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECF4E6E66B68684242424343437D7979EBDFDFFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEDEDD3C8C8 + C5BCBCC2BABAEEE1E1FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECADA8A8434343414141434343424242525252ECDFDFFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECEADDDD585757414141494949D1C7C7FBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBEDED9C98984A4A4A4848484646465D5C5CBAB3B3FBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECEDE1E1AEA7A77C7979474747 + 414141484848D6CCCCFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECDED3D351515141 + 4141494949D0C6C6FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFAEBEB9F99994444444242424343434343434040 + 404B4B4BD3C9C9FBECECFBECECFBECECFBECECFBECECFBECECFBECECF8EAEAD5 + CBCBD1C6C6EBDFDFFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBEDED8A86864343434242428C8888FBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECA7A1A1444444434343414141807D7DF5E8E8FBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECEDE0E05352524141 + 414444444444444444444444444141419B9595FBECECFBECECFBECECFBECECFB + ECECFBECECF6E9E9827F7F4A4A4A4949495C5B5BAEA7A7FBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECBDB5B54646464141414E4E + 4EE0D5D5FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECF7EAEA656464414141444444434343414141 + 8A8686FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECE7DBDB4F4F4F424242444444444444444444444444424242575656E2 + D7D7FBECECFBECECFBECECFBECECFBECECA49E9E424242424242434343414141 + 464646A49E9EFBEDEDFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECA7A0A0434343434343424242686666DCD1D1FBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFAECEC8D8989434343 + 4242424141414242423E3E3E515151D8CECEBEB5B58581818D8888DDD2D2FBEC + ECFBECECFBECECFBECECFBECECFBECEC9C969643434344444444444444444444 + 4444444444444444414141575656B8B0B0F9EBEBFBECECFBECECBAB2B24C4C4C + 424242444444444444444444414141464646BCB4B4FBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECE3D8D85A5959414141444444444444404040565555BE + B6B6FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + EFE3E38581814242424141414A4A4A817D7D9590907775754444444949494747 + 474242424141415B5A5AD9CFCFFBECECFBECECFBECECFBECECCDC3C349494942 + 4242444444444444444444444444444444444444444444404040484848787575 + ADA6A68D8989474747414141444444444444444444444444444444434343A39C + 9CFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECCCC3C34848483F3F3F42 + 42424141414343434141414646468D8989EADEDEFBECECFBECECFBECECFBECEC + FBECECFBECECF1E3E3B2AAAA5F5D5D4242424141414E4E4ECAC1C1FBEDEDFBEC + ECF8EBEB605E5E4040404343434444444444444040404F4F4FACA5A5F2E5E5EE + E1E1CBC2C25D5C5C414141444444444444444444444444444444444444444444 + 4444444444444343434242424343434242424242424444444444444444444444 + 44444444434343474747C4BBBBFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFAECECA59F9F6665658884848F8A8A555454424242424242414141605E5E + ADA6A6C5BBBBCAC0C0C6BCBCBCB4B49A95956462624545454141414343434141 + 415A5A5AF4E7E7FBECECFBECECF4E7E75F5E5E42424244444444444444444444 + 44444141414545456766665D5C5C474747424242444444444444444444444444 + 4444444444444444444444444444444444444444444444444343434444444444 + 44444444444444444444444444444444434343454545B0A9A9FBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECF3E6E6FBECECFBECECABA4A4 + 4343434343434444444141414444444949494949494949494747474343434141 + 41404040424242444444434343474747C1B9B9FBECECFBECECEEE1E158585843 + 4343444444444444444444444444444444434343404040414141434343444444 + 4444444444444444444444444444444444444444444444444444444444444444 + 4444444444444444444444444444444444444444444444444444444444444443 + 43439A9595FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECECE0E0CFC5C5FBEDEDFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECD5CACA4C4C4C4343434444444242424343434141414242 + 424343434343434242424444445A59594F4F4F464646414141424242B2ABABFB + ECECFBECECFAEBEB807C7C424242444444444444444444444444444444444444 + 4444444444444444444444444444444444444444444444444444444444444444 + 4444444444444444444444444444444444444444444444444444444444444444 + 4444444444444444444444424242676565FAECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECBDB5B55A5959484848949090FAECECFBECEC + FBECECFBECECFBECECFBECECFBEDEDFBECECFBECECD1C5C54646464141414141 + 415B5A5A9A95957E7B7B464646434343444444444444A19B9BECE0E0E6DADAB2 + AAAA6361618A8686EFE2E2FBECECFBECECFBECECC2B9B9464646434343444444 + 4444444444444444444444444444444444444444444444444444444444444444 + 4443434342424241414141414142424242424241414142424243434344444444 + 4444444444444444444444444444444444444444444444434343464646BEB6B6 + FBECECFBECECFBECECF6E9E9BEB6B6A09A9ABEB6B6FBEDEDFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECEADEDE505050404040 + 424242454545B0A9A9FBECECFBECECFBECECFBECECE7DCDC7F7B7B9C9797DFD4 + D4E3DADA7371714444446F6D6DE8DCDCFBECECFBECECA6A1A14343433F3F3F4A + 4A4AE9DDDDFBECECFBECECFBECECF5E8E8FBECECFBECECFBECECFBECECFBECEC + EBDEDE4F4F4F4242424444444444444444444444444444444444444444444444 + 444444444343434141414343434646465050506D6A6A6E6C6C6E6C6C716F6F67 + 66664A4A4A474747454545424242424242434343444444444444444444444444 + 444444444444414141595858AAA3A3B7AFAF999393716F6F4646464141414545 + 45948F8FFBEEEEFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECEDE0E0F3E6E6FBECECFBECECFBECEC + FBECECC2B9B94747474343434444444141415E5D5DEADEDEFBECECFBECECEFE2 + E26F6D6D404040414141535252C7C0C0F5E7E7CAC1C1EDE1E1FBECECFBECECFB + ECECF8EAEA787676464646868282F7E9E9FBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECF6E8E86A68684141414444444444444444444444 + 444444444444444444444242424141414747476D6B6B8F8A8AC6BDBDE2D6D6F5 + E7E7F5E7E7F5E7E7F6E8E8F3E5E5D8CDCDCCC2C2ADA6A6817D7D5A5959424242 + 4242424444444444444444444444444444444444444242424444444646464343 + 43414141434343454545424242444444A19B9BFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECC1B9B9595858 + 6B6A6AE8DDDDFBECECFBECECFAEDED7673734141414444444444444444444444 + 44686666AAA3A3ADA6A66D6B6B414141434343424242464646BDB4B4FBECECFB + ECECFBECECFBECECFBECECFBECECFBECECF0E4E4D0C7C7F4E7E7FBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECEBDFDF6362624141 + 414444444444444444444444444444444343434242424B4B4B898585C2B9B9FB + EDEDFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECE8DCDC9F9A9A4A4A4A4242424242424444444444444444444444 + 444444444343434343434444444444444444444444444444444242424D4D4DDE + D3D3FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECC7BEBE4C4C4C3F3F3F404040615F5FA39C9C9E9898706D6D4545454343 + 4344444444444444444444444442424244444444444442424244444444444443 + 4343484848C5BCBCFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECF5E7E7FBECECFBECECF6E8E8E7DB + DBB2AAAA605E5E42424244444444444444444444444444444442424246464683 + 7F7FDED3D3FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECD8CDCD9893934949 + 4942424244444444444444444444444444444444444444444444444444444444 + 4444444444434343474747BFB6B6FBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECEC8E8A8A4040404444444444444141414444 + 4444444441414143434344444444444443434343434343434343434343434343 + 4343444444444444444444444444444444A9A2A2FBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECF7EAEA9F9A9A706D + 6D9691917E7B7B716E6E53535344444442424244444444444444444444444444 + 44444141414C4C4CBAB3B3FBEDEDFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECCCC3C35B5A5A41414144444444444444444444444444 + 4444444444444444444444444444444444414141575757E9DDDDFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECD1C7C74E4E + 4E43434344444444444444444444444445454542424241414143434346464648 + 48484747474545454242424141414242424444444444444444444141416A6868 + F3E6E6FBECECFBECECD8CDCDEBDFDFFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECEC908C8C43434341414142424242424241414142424244444444444444 + 4444444444444444444444424242484848C1B9B9FBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECD9CECE57565641 + 4141444444444444444444444444444444444444444444444444434343454545 + AFA8A8FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBEDED706E6E4242424444444444444444444343434141414C + 4C4C7C7979928C8CBBB3B3C5BCBCC4BBBBABA5A58E8A8A6E6C6C4A4A4A434343 + 424242444444444444434343737171B7AFAF9C9797474747605E5EC6BDBDFBEC + ECFBECECFBECECFBECECFBECECD0C7C749494941414144444444444444444444 + 4444444444444444444444444444444444444444434343424242999494FBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECD9CECE5B5A5A414141444444444444444444444444444444 + 4444444444444242427E7B7BFBEDEDFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBEEEE69676741414144444444 + 4444424242464646868282D9CFCFFBEDEDFBECECFBECECFBECECFBECECFBECEC + FBECECF5E8E8D7CDCD8D89894F4F4F4242424444444343434141414646464343 + 434242423F3F3F515151E3D7D7FBECECFBECECFBECECFBECEC8C888841414144 + 4444444444444444444444444444444444444444444444444444444444444444 + 3F3F3F6D6B6BF4E7E7FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECD6CBCB535353414141 + 444444444444444444444444444444434343474747C6BCBCFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECE9DCDCC9BFBFD0C5C5C4BBBB86 + 8282434343444444444444404040565555BCB4B4FBEDEDFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECDACFCF7A77774242 + 42434343444444434343434343444444424242464646CDC3C3FBECECFBECECFB + ECECFBEDED797676404040444444444444444444444444444444444444444444 + 444444444444444444404040545454E0D5D5FBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECB4ACAC4343434343434444444444444444444444444343434A4A + 4AD1C6C6FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECDFD4D463 + 61614747474949494949494242424343434444444040404E4E4ECFC6C6FBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECF7EAEA7976764242424444444444444444444343434444449D + 9898F9EAEAFBECECFBECECFBECECFBECECA8A1A1444444414141444444444444 + 444444444444444444444444444444444444424242464646B6AFAFFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECF4E6E66E6B6B4141414444444444 + 444444444444444343434C4C4CD3C8C8FBECECFBECECFBECECFBECECFBECECFB + ECECFBECECF1E4E46B6969414141434343434343434343444444444444424242 + 444444B5AEAEFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECF1E4E467666640404044 + 4444444444434343515050E1D6D6FBECECFBECECFBECECFBECECFBECECFAECEC + 9592924545454242424444444444444444444444444444444444444444444040 + 40908C8CFBEDEDFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECD7CDCD4B4B4B4242424444444444444444444343434B4B4BD6CBCBFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECE8DBDB4D4D4D404040444444444444 + 444444444444444444404040908C8CFBEDEDFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECD2C8C84B4B4B434343444444434343545353E1D5D5FBECECFBECEC + FBECECFBECECFBECECFBECECFBEDEDC2BABA5757574242424444444444444444 + 44444444444444414141636161EDE1E1FBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECEC7F7C7C41414144444444444444444443 + 4343444444A6A0A0FAECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + AAA4A4484848424242444444444444444444404040626161F2E6E6FBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECEC918C8C424242444444424242 + 515151E2D6D6FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECB8B1 + B1444444444444444444444444444444444444434343A49E9EFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECC1B8B845 + 45454343434444444444444444444343434545457C7979A8A1A1A19A9AAEA7A7 + F9ECECFBECECFBECECFBECECFBECECB5AEAE4B4A4A4343434444444343434B4B + 4BC9C0C0FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + E2D7D7515050424242434343484848BCB4B4F6E8E8FBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECE8DBDB5757574141414444444444444444444242424A + 4A4ADACFCFFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECF1E3E3696767414141444444444444444444444444434343 + 414141444444444444454545757373E3D7D7FBECECFBECECFBECECFBECEC8C88 + 88414141444444424242868282FBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECEC8884844242424444444343434E4E4E716E + 6E807D7DCBC2C2FBECECFBECECFBECECFBECECFBECECF7E9E966646441414144 + 4444444444444444414141716E6EF8EAEAFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC928D8D424242444444 + 444444444444444444444444444444434343444444434343404040898585FBEC + ECFBECECFBECECFBECEC797676424242444444444444ACA5A5FBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECACA5A54545 + 45434343444444424242414141414141575656E7DBDBFBECECFBECECFBECECFB + ECECD4CBCB4C4C4C424242444444444444444444434343898484FBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECEC9A95954343434444444444444444444444444444444444444444444444 + 44444444424242545353FBECECFBECECFBECECDACFCF504F4F42424243434349 + 4949D5CACAFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECF7EAEBC6C4CA56616A52637152677656687654606A4E575D4C4D4EBA + B1B1FBECECFBECECFBECECEFE2E26D6B6B414141444444444444444444434343 + 454545ABA4A4FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECC4BCBC4848484343434444444444444444 + 44444444444444444444444444444444424242605E5EFBECECF2E4E4B5ADAD5B + 5A5A4242424444444242424A4A4ADCD1D1FBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECD3DCEAA6CAEC80BAEA66AEEA4EA1E63390DB2E8FDE2F90DF2F + 90E03491DD398FD63E87C571ABDAA7CAEBD3DDEAE0D5D4787575424242444444 + 444444444444444444434343444444B9B1B1FBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECD6CBCB4C4C + 4C4343434444444444444444444444444444444444444444444444444141416B + 6969F3E6E67E7B7B4343434242424444444444444242424A4A4ADCD1D1FBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECDDE0EA92C2EA53A6EB3099EC2A94EE2694ED2594ED26 + 93EE2694ED2795ED2895ED2795ED2694ED2593EE2694ED2794EC2A94ED2F97E8 + 3A8FD3497AA34E5A64444444444444444444444444434343464646B9B1B1FBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECDACFCF504F4F42424244444444444444444444444444444444 + 4444434343404040454545A6A0A0DAD3D35857573D3D3D444444444444444444 + 434343484848D4CACAFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECD2DBEB7BB6EB3097ED2894ED2694ED28 + 94EE2895ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2895ED2894ED2595EF2894EE3097E94785B94F62714444444444 + 44434343464646B9B1B1FBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECD9CECE4F4F4F42424244444444 + 4444444444444444444444414141454545595858A09B9BFBEDEDDBD3D3565656 + 3D3D3D434343444444444444444444444444B0A8A8FBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECEDE7EB81BAEB3398EC26 + 93EC2694ED2A96EC2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2B95ED2A95ED2594 + EE2592EE3298EA4F86B353585B434343434343A59E9EFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECDB + CFCF5150504343434444444444444444444444444141414B4B4BB0AAAAEEE2E2 + FBECECFBECECF8EBEB908B8B4C4C4C494949414141434343444444434343918C + 8CFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECC1 + D3EA49A2E92593EF2694ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2794ED2693ED3D94DA546D81444444AE + A7A7FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECDACFCF4E4E4E424242444444444444444444434343 + 484848C3BBBBFBECECFBECECFBECECFBECECFBECECFAEBEBDACFCFC6BCBC7A77 + 774343434444444141416B6969F6E9E9FBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBEDEB98C2EA2D96EE2394EF2896EE2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED28 + 95ED2594ED2F95EE4C7A9E8B8786FBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECC8BEBE484848434343 + 444444444444444444424242757373FBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECDFD5D54A4A4A424242434343474747C1B8B8FBECECFB + ECECFBECECFBECECFBECECFBECECF8EAEB7AB5EA2994ED2694ED2A95EC2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2994EE2995ED2693EE2994ED5490C2E9DDDCFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECEC959090424242444444444444444444444444444444AFA8A8FBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECE9DCDC51515142424244 + 44444141416F6D6DFAECECFBECECFBECECFBECECFBECECF9ECEB76B4EB2693ED + 2894EE2996ED2995ED2995EE2895ED2895ED2895ED2895ED2995ED2A95ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995EE + 2894EF2693ED72AFE3FAECEBFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECF4E6E66160604242424444444444444444444343 + 43454545B6AEAEFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECE9DCDC515151424242444444434343444444A8A2A2FBECECFBECECFBECEC + FBEDEB7EB6EA2693ED2994EC2995EE2A95ED2894EF2A94ED2996ED2995EC2A94 + EC2996ED2895EC2495EE2995ED2A94EE2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2A95ED2994EE2793EE85B9EBFBECEBFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECDACFCF4A4A4A4242 + 424444444444444444444444444242428D8989FBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECC5BCBC474747434343444444444444424242 + 444444908C8CF3E6E6FBECEC96C3EA2894EC2795ED2995ED2995ED2592EE3E9F + ECB3D8F2BBDBF5B8DAF5B8DAF5BADBF5BCDBF361AEED2491EF2895ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2A95ED2695 + EE2A94EEA4C7EBFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECEC848080414141444444444444444444444444444444434343464646A2 + 9D9DF9ECECFBECECFBECECFBECECFBECECFBECECFBECECF2E5E56B6969414141 + 444444444444444444444444424242424242696868B3C5D72E97EC2694ED2A95 + ED2996ED2995ED2793ED409FEEF6FAFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB + D4F42995EE2895EC2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995EC2995ED2494EE3197ECCEDAEAFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECE4D9D954535342424244444444444444444444 + 4444444444444444424242444444767373E9DDDDFBECECFBECECFBECECFBECEC + FBECECE0D5D54949494242424444444343434242424242424444444343434C52 + 563A94D92592EF2A95ED2995ED2995ED2995ED2894EE2E97ECC5E0F6FFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFCBE4F83298EC2894ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2B95EE2393ED50 + A6EBF2E9EBFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEDED84808042424244 + 4444444444444444444444444444444444444444444444434343404040696767 + ECDFDFFBECECFBECECFBECECFBECECF6E9E97977774141414343434B4B4B6260 + 604B4B4B424242444444528AB62792ED2896ED2895EE2995ED2995ED2995ED29 + 95EC2795EC9DCDF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7FB43A0EC2894EE + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2A95EE2995EE2694ED97C2E9FBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECB6AFAF454545434343444444444444444444444444444444444444444444 + 444444444444414141505050E5D9D9FBECECFBECECFBECECFBECECFBECECEEE1 + E18C88888F8B8BD1C7C7FAEDEDCDC4C45453534D5B663298EA2694ED2A95ED29 + 95ED2995ED2995ED2995ED2994EE2895EC75B9F1FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFF63AFEF2594EE2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2694EE379BEADDE1EC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECD9CFCF4C4C4C414141444444444444444444444444 + 4444444444444444444444444444444444444040406A6868F7E9E9FBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECA9A3A344 + 7FB02693EE2995EC2995ED2995ED2995ED2995ED2A95ED2995ED2493EE4DA6ED + F5F9FDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8AC4F32693ED2995ED2A95ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2693ED89BDEBFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECF0E3E36C6A6A404040444444 + 4444444444444444444444444444444444444444444444444444444444444444 + 44979292FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECBBBFC53398EB2594ED2A95ED2995ED2995ED2995ED2995ED + 2995ED2995ED2594EF3197EBE1EFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2D8 + F52995EB2795EE2A95EE2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2594EE3796E6DCDAE0FBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECEBDFDF + 726F6F4141414343434444444444444444444444444444444242424141414242 + 42414141424242404040666464F2E5E5FBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECEC85AFD42794ED2896ED2A95ED + 2995ED2995ED2995ED2995ED2995ED2995ED2895ED2A94EBB8DAF5FFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFDFEEFA3299EC2895ED2994EE2995ED2A95ED2995ED2A + 95ED2995ED2995ED2995ED2995ED2995ED2995EE2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2895ED2995 + EE2994ED5781A2C4BCBCFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECE1D6D66D6B6B4141414444444444444444444444444444444242 + 424040404D4D4D7C7979868282807C7C5D5C5C757272DDD1D1FBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + 54A2E22794ED2895EE2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2794ED90C7F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F9FD49A5EF2594EE2C + 95EC2A95ED2694ED2895ED2895EF2995ED2A95ED2695ED2694ED2795EF2895EE + 2895EE2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995EE2794ED3D89C7494949928D8DF7EAEAFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECEDE0E0A59E9E5251514141414444444444444444 + 44444444444444424242474747827F7FD6CCCCFBECECFBECECFBECECEEE1E1FB + EDEDFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECDDE0EB3399EB2794EE2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2694ED67B2EFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFEFEFE70B6EE2593EF2995EE2795ED2F97ED2D95EC2694EE2A95ED2694EE + 2A95EC2F96ED2895ED2894EE2A94EE2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2794EE3297E64D + 59614242426D6B6BD2C8C8FBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECF0E3E3ADA6A65C5A5A4343434141 + 41444444444444444444444444444444444444434343948F8FFBEDEDFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECB0CEED2A95ED2895ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2695ED43A1EEF4 + F8FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96C9F42894EE2693ED73B8EFE3EEF8 + CAE3F54CA6EC2493EE2E96EDB4D7F5E2F1FA9ECEF02C95ED2895ED2A95ED2A95 + ED2A95ED2A95ED2995EE2A95ED2995EE2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2895ED2C95ED4B6A854343434040404A4A4A8D8888ACA5A5D1C6C6 + EEE1E1FBEDEDFBECECFBECECF9EBEBF2E5E5FAECECD5CACAADA6A69792926261 + 6145454541414143434344444444444444444444444444444444444443434348 + 4848D3C9C9FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + EC8BBEEB2794EC2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2794EE3197ECCFE7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBBDBF7 + 2B97ED2392EE83BFF4FFFFFFFFFFFF9ACCF32492EF2D96EDD9ECF9FFFFFFFDFE + FD4AA4EB2292EF2894EF2894EF2894F02794EF2795EF2794EE2994EE2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2794EE497CA5444444444444 + 4242424141414444444A4A4A5D5C5C7C79798581818783836D6A6A6160606A68 + 684B4B4B45454542424241414143434344444444444444444444444444444444 + 4444444444444444444444464646C5BDBDFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECEC6DB2EB2595EC2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2795ED2994EEAAD4F5FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFE6F1FA6BB5ED56AAED8BC2F1FFFFFFFFFFFFD2E7F85EAE + ED57AAEDC5E1F4FFFFFFFFFFFF95CAEF57AAEC65B1EF65B1EE64B0ED67B1EE62 + B0EE46A3EC2D96EB2494ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2794ED3D80B54444444444444444444444444343434343434242424141414242 + 4242424242424243434341414143434343434344444444444444444444444444 + 44444444444444444444444444444444444444444444444343439A9595FBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECF2E8EB5BAAEC2794EE29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995EC + 2793EE88C1F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFF + FEFFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFF + FFFEFFFFFDFFFFFDFFFFFEFFFFFEF2F8FBB5D9F4409FEC2592EE2A95EE2995ED + 2995ED2995ED2995ED2995ED2793EE3786C4484A4C4444444444444444444444 + 4444444444444444444444444444444444444444444444444444444444444444 + 4444444444444444444444444444444444444444444444444444444444444444 + 444444424242636262F0E3E3FBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECE6E4EC4CA2EA2593ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2895EE2594ED5AAAEFFAFCFDFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + DBECF93D9EED2493ED2995ED2995ED2995ED2995ED2995ED2494ED3991D8545B + 6144444444444444444444444444444444444444444444444444444444444444 + 4444444444444444444444444444444444444444444444434343444444444444 + 444444444444444444444444444444444444454545AEA7A7FBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECE1E2EC46A1EB2794EE2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2A95ED2594EE3D9DECEDF5 + FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFACD5F32995EC2795EE2994EE2995ED2995 + ED2995ED2594EC3692DC545F6744444444444444444444444444444444444444 + 4444444444444444444444444444444444444444444444444444444444414141 + 4343434444444343434141414343434444444444444444444444444444444343 + 43A6A0A0FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECE1E1EB47A1EB + 2794EE2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2A96EC2695ED2A97EDCEE6F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F7FC43A1 + EC2894EE2995ED2995ED2995ED2995ED2694ED348FDA505B6444444443434342 + 4242434343424242424242444444444444444444444444444444444444444444 + 4444444343434444446E6C6C8B8787AAA3A38B86867471714848484141414444 + 444444444343434040405B5A5AEADDDDFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECE0E1EC459FEB2794ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2A94EE2893EDA2D1F5FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFBFDFEC4E1F7BDDEF7C2E0F7BFDFF7C0DFF7C0DFF7BFDFF7 + C0DFF7BFDFF7BFDFF7C0DFF7C0DFF7C2DFF6F5F9FCFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFF55ABEF2894ED2A96EC2995ED2995ED2995ED2593ED37 + 90DB535E66434343434343656464908B8B8D88885A5959414141434343444444 + 444444444444444444444444444444424242666464F3E6E6FBECECFBECECFBEC + ECF8EAEAC9C0C05D5C5C4141414141414343436C6A6AD5CBCBFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECE7E4EC4BA2EC2593EE2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED26 + 94ED77BAEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FBFD57ABEB2C95ED2E97EC + 2D97EC2D97EC2D97EC2D97EC2D97EC2D97EC2D97EC2D97EC2D97EC2D95ED58AB + ECE5F2F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFF52AAEF2793EE2A95ED29 + 95ED2995ED2995ED2694ED388DD24B51564545459A9595F1E4E4FBECECFBECEC + E2D6D67F7C7C434343434343444444444444444444444444444444444444B1AA + AAFBECECFBECECFBECECFBECECFBECECFBECECE4D8D88F8A8A6F6D6DA29C9CF3 + E6E6FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECF2E8 + EC5CAAED2594ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2694EE4EA6EEFBFCFDFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF84C0F22593EE2894EE2894EE2894EE2894EE2894EE2894EE2894EE2894 + EE2894EE2793EF2894EE2694ED8DC7F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE + FEFF51A9EE2793EE2A95ED2995ED2995ED2995ED2793EE3783C3454648807D7D + FBEDEDFBECECFBECECFBECECFBECECFBEEEE7370704141414444444444444444 + 44444444434343474747CBC2C2FBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECF6E7E7FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECEC72B3EB2694EE2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2795ED399BEDE0EFFA + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFADD5F52895ED2895ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2895ED2894EE7ABCF1FFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFEFEFF51A9EE2793EE2A95ED2995ED2995ED2995ED + 2795ED3E7EB35D5C5CE2D7D7FBECECFBECECFBECECFBECECFBECECFBECECC6BE + BE464646424242444444444444444444434343474747C8BFBFFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC8FBFEC2994ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2794EE2C96EBC3DFF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4F0F9369B + ED2893EF2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2895EC7BBCF1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFF51A9EE2793EE + 2A95ED2995ED2995ED2895ED2794ED7CA9D2E3D7D7FBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECEEE1E15A5A5A3F3F3F4040404040404040403F3F3F4F + 4F4FDFD3D3FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECB4CFED2A95EC2895ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995EE2794EE63B2EDA6D3F4A0CFF59FCF + F59FCFF5A5D1F593C9F3349AEC2894EE2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2A95ED2B95ED2595ED7CBDF0FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFEFEFF51A9EE2793EE2A95ED2995ED2995ED2895ED2B96ECBDD3ECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECCEC4C46968684C + 4C4C5050504C4C4C696767CDC3C3FBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECE1E2EB359AEB2894ED2995ED2995ED + 2995ED2995ED2995ED2593ED2694EE2794EE2794EE2794EE2794EE2795ED2695 + ED2593EF2695ED2894ED2794ED2794ED2794EE2594EE2794EC2794EE2794EE27 + 94EE2794EE2794EE2794EE2794EE2794EE2794EE2995ED2393EF2C96EDB9DBF4 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFF51A9EE2793EE2A95ED2995ED2995 + ED2794ED3B9CECE9E5ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECF2E6E6D6CDCDD3CCCCD9D0D0F2E5E5FBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + 60ACEA2695ED2A95ED2995ED2995ED2795ED3099EB63B0F062B0F161AFF062B1 + EF62B0F062B0F061B0F062B0F062B1EF62B1EF62B1EF61B1EF61B1EF61B1EF61 + B2EF61B0F062B1EF62B0F062B0F062B0F062B0F062B0F062B0F062B0F062AFF0 + 60B0F05BACEEAAD1F2FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE52AA + EE2793ED2994EE2995ED2A95EE2693ED6CB1EAFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECA5CAEB2694EF2995ED2995ED2895ED2694ED3198 + EBC4E0F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFF + FFFEFFFFFEFFFFFEFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFEFEFE4FA7EF2493EE2A95EC2994EE2995EE2895EEAECEEAFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECEBE6EA3E9DEB2594 + ED2A95ED2995ED2A96EC2493EE349BECD3E8F8FFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCECFA349AED2994EE2995ED2A + 95EC2593EE439FECEDE7EBFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECEC8FBEEB2594ED2995ED2895ED2995ED2B95ED2593ED49A3EDE9 + F4FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C + BCEE2693ED2995ED2995ED2995ED2793ED96C1EBFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECE3E2EA399BEB2594ED2A95ED29 + 95ED2995ED2895EE2293ED62AFECFAFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFBFCFD96C9F12895ED2895ED2995ED2A95ED2594ED3D9CEBE8E5EB + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECEC96C2E92693EC2696EE2A95ED2995ED2A95ED2894EE2493EE74B8EDC7E3F8 + C5E1F7C5E1F7C5E1F7C5E1F7C5E1F7C5E1F7C5E1F7C5E1F7C5E1F7C5E1F7C5E1 + F7C5E1F7C5E1F7C1DFF6E9F3FBFFFFFFFFFFFFDBEDF9BDDCF6C9E2F6FCFDFEFF + FFFFFBFCFEC9E2F8C3E0F7C6E2F7ADD4F45EAEEE2995ED2994EE2995EC2995EE + 2994EE2993ED9DC6EBFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECF3E9EB55A7E82493EE2995ED2995ED2995ED + 2A95EC2895EE2894EE2C97EE2B96EC2C96EB2C96EB2C96EB2C96EB2C96EB2C96 + EB2C96EB2C96EB2C96EB2C96EB2C96EB2D96EB2A96EB88C2F2FFFFFFFFFFFF9B + CDF42E96EC3198EBD6E9F9FFFFFFF6FAFD54A9ED2996EC2D96EE2995EE2594EE + 2895ED2995ED2895ED2A95ED2392EE59A9E9F5EAECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECCFDCE9 + 3197EB2693EE2995ED2A96EC2995ED2996EC2795ED2795EE2895EE2895EE2895 + EE2895EE2895EE2895EE2895EE2895EE2895EE2895EE2895EE2895EE2995EE27 + 93EE4FAAECFEFEFCFFFFFFC7E2F72896ED2593ED9CCDF1FFFFFFFFFFFF77BAEF + 2392EF2795EE2895ED2894EF2995ED2896EC2A96EC2593EE349AEDD8DEEAFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECA6C9E82894ED2694EE2995EE2995ED2995ED2895 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2895ED2894ED5BAEED7CBDF253A9EC2793EE2794ED + 359AEB73B9F175B8F0389CED2694ED2895ED2995ED2995ED2995ED2995ED2595 + EE2A95EDAFCCEBFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC8EBEE92694 + EE2795EE2B95EE2996EC2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2A94EE2895EE2492EF + 2493EC2593ED2B96EC2A95ED2694EF2693ED2691EE2594EE2A95ED2995EC2995 + ED2996EC2995EE2894ED2795ED95C1E9FBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECEC82B9EB2693EE2695EE2B95ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2A95ED2A95ED2A95ED2A95ED2A95ED2995ED2995ED2995ED2A95ED2996 + EC2A95ED2995ED2995ED2995ED2A95EE2694EE2895EC8BBDEBFBECEBFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEDEB88BCE92C94ED26 + 94EE2895ED2A95ED2A95ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2795EE2A94ED2694EE2C95EC95 + C0E8FBECEBFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECEBA3C9E83197EC2593ED2695ED2A95ED2995ED2995ED2995ED + 2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2A95EC28 + 95ED2493EE3499ECADCAEAFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECCAD9E957A8E92893EC + 2594ED2995EE2995EE2995EE2995ED2995ED2995ED2995ED2995ED2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED28 + 95EE2A95ED2995EC2594EE2893ED5BA9E8D3DAEAFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECF3E9EB93C1E93C9CEC2694ED2693EE2896ED2995EE2995ED2995 + ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995EE2995ED2494EE2694ED3E9EEB9AC3EAF5E9EBFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECDFE1EB8DBEEB3A9B + EB2894ED2794EE2794EE2895ED2895ED2995ED2995ED2995ED2995ED2995ED29 + 95ED2995ED2995ED2995ED2895ED2895ED2794EE2694ED2895EC3D9DEB90C0EC + E1E2EBFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECE6E4EBA4C9EA60ACEA389BED2C95EC2994EC2694EC25 + 94EE2593EE2794EE2794EE2694ED2793ED2693EE2695EC2A95ED2B95ED3B9CEC + 66AEEAABCBEAEAE5EAFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECDF + E1EBB7CFEC93C0EB72B3EB5FABEC4CA4EA45A0EB46A0ED46A0EE50A4EB60ADEA + 73B5EB94C2EAB9D1EBE3E2EBFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBEDECF3E9ECE8E5EBE0E1EC + E1E0ECE0E1ECE8E5ECF4E9EBFBEDECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBEC + ECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFB + ECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECECFBECEC + FBECECFBECECFBECECFBECECFBECECFBECEC} + Transparent = True + end + object lblProcess: TLabel + Left = 133 + Top = 17 + Width = 389 + Height = 31 + AutoSize = False + Caption = 'lblProcess' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Tahoma' + Font.Style = [] + ParentColor = False + ParentFont = False + WordWrap = True + end + object lblProcessActive: TLabel + Left = 133 + Top = 55 + Width = 389 + Height = 42 + AutoSize = False + Caption = + 'lblProcess lblProcess lblProcess lblProcess lblProcess lblProces' + + 's lblProcess lblProcess lblProcess lblProcess lblProcess lblProc' + + 'ess lblProcess lblProcess ' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Tahoma' + Font.Style = [] + ParentColor = False + ParentFont = False + WordWrap = True + end + object pgProgress1: TProgressBar + Left = 133 + Top = 97 + Width = 389 + Height = 17 + Position = 25 + TabOrder = 0 + end + object bbCancel: TBitBtn + Left = 376 + Top = 128 + Width = 146 + Height = 33 + Kind = bkCancel + NumGlyphs = 2 + TabOrder = 1 + OnClick = bbCancelClick + end +end diff --git a/src/gui-classic/UFRMSplash.pas b/src/gui-classic/UFRMSplash.pas new file mode 100644 index 000000000..b44c32f76 --- /dev/null +++ b/src/gui-classic/UFRMSplash.pas @@ -0,0 +1,184 @@ +unit UFRMSplash; + +{ Copyright (c) 2021 by Albert Molina + + Distributed under the MIT software license, see the accompanying file LICENSE + or visit http://www.opensource.org/licenses/mit-license.php. + + This unit is a part of the PascalCoin Project, an infinitely scalable + cryptocurrency. Find us here: + Web: https://www.pascalcoin.org + Source: https://github.com/PascalCoin/PascalCoin + + If you like it, consider a donation using Bitcoin: + 16K3HCZRhFUtM8GdWRcfKeaa6KsuyxZaYk + + THIS LICENSE HEADER MUST NOT BE REMOVED. +} + +{$IFDEF FPC} + {$MODE Delphi} +{$ENDIF} + +interface + +{$I ../config.inc} + +uses +{$IFnDEF FPC} + pngimage, Windows, Messages, +{$ELSE} + LCLIntf, LCLType, LMessages, +{$ENDIF} + SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls, UAccounts, Buttons, ActnList, + ExtCtrls, ComCtrls, + UNode, UWallet, UNetProtocol, UPCDataTypes, UThread, + {$IFNDEF FPC}System.Generics.Collections{$ELSE}Generics.Collections{$ENDIF}; + +type + TSplashProcess = record + processName : String; + allowProgress : Boolean; + allowCancel : Boolean; + maxValue : Integer; + currentValue : Integer; + end; + + ESplashCancel = Class(EAbort); + + TFRMSplash = class(TForm) + imgSplash: TImage; + lblProcess: TLabel; + pgProgress1: TProgressBar; + bbCancel: TBitBtn; + lblProcessActive: TLabel; + procedure bbCancelClick(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure FormDestroy(Sender: TObject); + private + { Private declarations } + FSplashProcesses : TList; + FDoCancel : Boolean; + public + { Public declarations } + class procedure SplashStart(const AOwnerForm : TForm; const AProcess : String; AAllowProgress, AAllowCancel : Boolean; AMaxValue : Integer; ACurrentValue : Integer); + class procedure SplashUpdate(const AProcess : String; ACurrentValue : Integer); + class procedure SplashFinalize; + class function SplashCount : Integer; + procedure UpdateInfo; + end; + +implementation + +{$R *.dfm} + +var _FRM : TFRMSplash; + +{ TFRMSplash } + +procedure TFRMSplash.bbCancelClick(Sender: TObject); +begin + FDoCancel := True; +end; + +procedure TFRMSplash.FormCreate(Sender: TObject); +begin + FDoCancel := False; + lblProcess.Caption := ''; + lblProcessActive.Caption := ''; + pgProgress1.Visible := False; + bbCancel.Enabled := False; + bbCancel.Visible := False; + bbCancel.Cancel := True; + FSplashProcesses := TList.Create; +end; + +procedure TFRMSplash.FormDestroy(Sender: TObject); +begin + FSplashProcesses.Free; +end; + +class function TFRMSplash.SplashCount: Integer; +begin + if Assigned(_FRM) then Result := _FRM.FSplashProcesses.Count + else Result := 0; +end; + +class procedure TFRMSplash.SplashFinalize; +begin + if Not Assigned(_FRM) then raise Exception.Create('No splash!'); + if _FRM.FSplashProcesses.Count<=0 then raise Exception.Create('No splash count!'); + _FRM.FSplashProcesses.Delete(_FRM.FSplashProcesses.Count-1); + if _FRM.FSplashProcesses.Count>0 then begin + _FRM.UpdateInfo; + end else begin + FreeAndNil(_FRM); + end; +end; + +class procedure TFRMSplash.SplashStart(const AOwnerForm : TForm; const AProcess: String; AAllowProgress, + AAllowCancel: Boolean; AMaxValue, ACurrentValue: Integer); +var Lprocess : TSplashProcess; +begin + if Not Assigned(_FRM) then begin + _FRM := TFRMSplash.Create(AOwnerForm); + _FRM.bbCancel.Enabled := AAllowCancel; + _FRM.bbCancel.Visible := AAllowCancel; + _FRM.lblProcess.Caption := AProcess; + end; + Lprocess.processName := AProcess; + Lprocess.allowProgress := AAllowProgress; + Lprocess.allowCancel := AAllowCancel; + Lprocess.maxValue := AMaxValue; + Lprocess.currentValue := ACurrentValue; + _FRM.FSplashProcesses.Add(Lprocess); + _FRM.UpdateInfo; + _FRM.Show; + Application.ProcessMessages; +end; + +class procedure TFRMSplash.SplashUpdate(const AProcess: String; ACurrentValue: Integer); +var Lprocess : TSplashProcess; +begin + if Not Assigned(_FRM) then raise Exception.Create('No splash!'); + if _FRM.FSplashProcesses.Count<=0 then raise Exception.Create('No splash count!'); + Lprocess := _FRM.FSplashProcesses.Items[_FRM.FSplashProcesses.Count-1]; + if AProcess<>'' then Lprocess.processName := AProcess; + Lprocess.currentValue := ACurrentValue; + _FRM.FSplashProcesses.Items[_FRM.FSplashProcesses.Count-1] := Lprocess; + _FRM.UpdateInfo; +end; + +procedure TFRMSplash.UpdateInfo; +var Lprocess : TSplashProcess; +begin + if FSplashProcesses.Count>0 then begin + Lprocess := _FRM.FSplashProcesses.Items[_FRM.FSplashProcesses.Count-1]; + + end else begin + Lprocess.processName := ''; + Lprocess.allowProgress := false; + Lprocess.allowCancel := false; + Lprocess.maxValue := 100; + Lprocess.currentValue := 0; + end; + lblProcessActive.Caption := Lprocess.processName; + pgProgress1.Visible := Lprocess.allowProgress; + pgProgress1.Min := 0; + if Lprocess.maxValue>0 then + pgProgress1.Max := Lprocess.maxValue; + if (Lprocess.currentValue>=0) and (Lprocess.currentValue<=Lprocess.maxValue) then begin + pgProgress1.Position := Lprocess.maxValue; + end; + Application.ProcessMessages; + if FDoCancel then begin + raise ESplashCancel.Create('Canceled process: '+Lprocess.processName); + end; +end; + +initialization + _FRM := Nil; +finalization + FreeAndNil(_FRM); +end. diff --git a/src/gui-classic/UFRMWallet.dfm b/src/gui-classic/UFRMWallet.dfm index cead1761b..54fe169ef 100644 --- a/src/gui-classic/UFRMWallet.dfm +++ b/src/gui-classic/UFRMWallet.dfm @@ -377,7 +377,7 @@ object FRMWallet: TFRMWallet Top = 91 Width = 865 Height = 466 - ActivePage = tsMyAccounts + ActivePage = tsMessages Align = alClient TabOrder = 2 OnChange = PageControlChange @@ -633,10 +633,6 @@ object FRMWallet: TFRMWallet object tsMultiSelectAccounts: TTabSheet Caption = 'Selected Accounts For Batch Operation' ImageIndex = 1 - ExplicitLeft = 0 - ExplicitTop = 0 - ExplicitWidth = 0 - ExplicitHeight = 0 object dgSelectedAccounts: TDrawGrid Left = 41 Top = 31 @@ -828,10 +824,6 @@ object FRMWallet: TFRMWallet object tsPendingOperations: TTabSheet Caption = 'Pending Operations' ImageIndex = 5 - ExplicitLeft = 0 - ExplicitTop = 0 - ExplicitWidth = 0 - ExplicitHeight = 0 object dgPendingOperations: TDrawGrid Left = 0 Top = 86 @@ -878,10 +870,6 @@ object FRMWallet: TFRMWallet object tsBlockChain: TTabSheet Caption = 'Block Explorer' ImageIndex = 1 - ExplicitLeft = 0 - ExplicitTop = 0 - ExplicitWidth = 0 - ExplicitHeight = 0 object Panel2: TPanel Left = 0 Top = 0 @@ -974,10 +962,6 @@ object FRMWallet: TFRMWallet object tsOperations: TTabSheet Caption = 'Operations Explorer' ImageIndex = 1 - ExplicitLeft = 0 - ExplicitTop = 0 - ExplicitWidth = 0 - ExplicitHeight = 0 object Panel1: TPanel Left = 0 Top = 0 @@ -1026,10 +1010,6 @@ object FRMWallet: TFRMWallet object tsLogs: TTabSheet Caption = 'Logs' ImageIndex = 2 - ExplicitLeft = 0 - ExplicitTop = 0 - ExplicitWidth = 0 - ExplicitHeight = 0 object pnlTopLogs: TPanel Left = 0 Top = 0 @@ -1061,10 +1041,6 @@ object FRMWallet: TFRMWallet object tsNodeStats: TTabSheet Caption = 'Node Stats' ImageIndex = 3 - ExplicitLeft = 0 - ExplicitTop = 0 - ExplicitWidth = 0 - ExplicitHeight = 0 DesignSize = ( 857 438) @@ -1134,10 +1110,6 @@ object FRMWallet: TFRMWallet object tsMessages: TTabSheet Caption = 'Messages' ImageIndex = 6 - ExplicitLeft = 0 - ExplicitTop = 0 - ExplicitWidth = 0 - ExplicitHeight = 0 DesignSize = ( 857 438) @@ -1216,8 +1188,7 @@ object FRMWallet: TFRMWallet Font.Name = 'Tahoma' Font.Style = [] Lines.Strings = ( - 'dsfa '#195#177'ldsaf '#195#177'lk dasf' - 'dsfklda'#195#177'fs '#195#177'l') + '(messages)') ParentFont = False ReadOnly = True ScrollBars = ssBoth diff --git a/src/gui-classic/UFRMWallet.lfm b/src/gui-classic/UFRMWallet.lfm index 97c3da5d6..765ca2aed 100644 --- a/src/gui-classic/UFRMWallet.lfm +++ b/src/gui-classic/UFRMWallet.lfm @@ -16,7 +16,7 @@ object FRMWallet: TFRMWallet OnCreate = FormCreate OnDestroy = FormDestroy Position = poScreenCenter - LCLVersion = '1.8.0.6' + LCLVersion = '2.0.10.0' object pnlTop: TPanel Left = 0 Height = 91 @@ -1192,12 +1192,12 @@ object FRMWallet: TFRMWallet end object TimerUpdateStatus: TTimer OnTimer = TimerUpdateStatusTimer - left = 32 - top = 56 + Left = 32 + Top = 56 end object MainMenu: TMainMenu - left = 165 - top = 160 + Left = 165 + Top = 160 object miProject: TMenuItem Caption = 'Project' object miPrivatekeys: TMenuItem diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index 96f5c1e34..a5b655faa 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -35,7 +35,7 @@ interface UNode, UGridUtils, UJSONFunctions, UAccounts, Menus, ImgList, UNetProtocol, UCrypto, Buttons, UPoolMining, URPC, UFRMAccountSelect, UConst, UAccountKeyStorage, UBaseTypes, UPCDataTypes, UOrderedList, - UFRMRPCCalls, UTxMultiOperation, + UFRMRPCCalls, UTxMultiOperation, USettings, UEPasa, {$IFNDEF FPC}System.Generics.Collections{$ELSE}Generics.Collections{$ENDIF}; Const @@ -43,7 +43,6 @@ interface CM_PC_NetConnectionUpdated = WM_USER + 2; type - TMinerPrivateKey = (mpk_NewEachTime, mpk_Random, mpk_Selected); { TFRMWallet } @@ -234,9 +233,6 @@ TFRMWallet = class(TForm) FBackgroundPanel : TPanel; FBackgroundLabel : TLabel; FMinersBlocksFound: Integer; - {$IFDEF TESTNET} - FLastAskForAccountTC : TTickCount; - {$ENDIF} procedure SetMinersBlocksFound(const Value: Integer); Procedure CheckIsReady; Procedure FinishedLoadingApp; @@ -246,12 +242,11 @@ TFRMWallet = class(TForm) Procedure InitMenuForTesting; {$IFDEF TESTNET} Procedure Test_RandomOperations(Sender: TObject); - Procedure Test_AskForFreeAccount(Sender: TObject); + Procedure Test_ConnectDisconnect(Sender: TObject); + {$ENDIF} {$IFDEF TESTING_NO_POW_CHECK} Procedure Test_CreateABlock(Sender: TObject); {$ENDIF} - Procedure Test_ConnectDisconnect(Sender: TObject); - {$ENDIF} Procedure Test_ShowPublicKeys(Sender: TObject); Procedure Test_ShowOperationsInMemory(Sender: TObject); Procedure Test_FindAccountsForPrivateBuyOrSwapToMe(Sender : TObject); @@ -262,7 +257,6 @@ TFRMWallet = class(TForm) FIsActivated : Boolean; FWalletKeys : TWalletKeysExt; FLog : TLog; - FAppParams : TAppParams; FNodeNotifyEvents : TNodeNotifyEvents; FAccountsGrid : TAccountsGrid; FSelectedAccountsGrid : TAccountsGrid; @@ -270,7 +264,7 @@ TFRMWallet = class(TForm) FPendingOperationsGrid : TOperationsGrid; FOperationsExplorerGrid : TOperationsGrid; FBlockChainGrid : TBlockChainGrid; - FMinerPrivateKeyType : TMinerPrivateKey; + FMinerPrivateKeyType : TMinerPrivateKeyType; FUpdating : Boolean; FMessagesUnreadCount : Integer; FMinAccountBalance : Int64; @@ -298,9 +292,7 @@ TFRMWallet = class(TForm) Procedure UpdateBlockChainState; Procedure UpdatePrivateKeys; Procedure UpdateOperations; - Procedure LoadAppParams; - Procedure SaveAppParams; - Procedure UpdateConfigChanged; + Procedure UpdateConfigChanged(Sender:TObject); Procedure UpdateNodeStatus; Procedure UpdateAvailableConnections; procedure Activate; override; @@ -327,21 +319,24 @@ implementation {$R *.lfm} {$ENDIF} -Uses UFolderHelper, +Uses UFolderHelper,{$IFDEF USE_GNUGETTEXT}gnugettext,{$ENDIF} {$IFDEF Use_OpenSSL} UOpenSSL, {$ENDIF} UTime, UFileStorage, + {$IFDEF USE_ABSTRACTMEM_BLOCKCHAIN_STORAGE} + UAbstractMemBlockchainStorage, + {$ENDIF} UThread, UOpTransaction, UFRMPascalCoinWalletConfig, UFRMOperationsExplorer, {$IFDEF TESTNET} UFRMRandomOperations, - UPCTNetDataExtraMessages, UFRMDiagnosticTool, {$ENDIF} - UAbstractBTree, + UPCTNetDataExtraMessages, + UAbstractBTree, UEPasaDecoder, UFRMAbout, UFRMOperation, UFRMWalletKeys, UFRMPayloadDecoder, UFRMNodesIp, UFRMMemoText, - USettings, UCommon, UPCOrderedLists; + UCommon, UPCOrderedLists; Type @@ -398,7 +393,9 @@ procedure TThreadActivate.BCExecute; FLastTC := 0; OnProgressNotify(Self,'Initializing databases',0,0); // Read Operations saved from disk + TAbstractMemBlockchainStorage( TNode.Node.Bank.Storage ).AutoFlushCache := False; TNode.Node.InitSafeboxAndOperations($FFFFFFFF,OnProgressNotify); // New Build 2.1.4 to load pending operations buffer + TAbstractMemBlockchainStorage( TNode.Node.Bank.Storage ).AutoFlushCache := True; TNode.Node.AutoDiscoverNodes(CT_Discover_IPs); TNode.Node.NetServer.Active := true; FLastTC := 0; @@ -441,42 +438,47 @@ procedure TFRMWallet.Activate; Raise; end; End; - ips := FAppParams.ParamByName[CT_PARAM_TryToConnectOnlyWithThisFixedServers].GetAsString(''); + ips := TSettings.TryConnectOnlyWithThisFixedServers; TNode.DecodeIpStringToNodeServerAddressArray(ips,nsarr); TNetData.NetData.DiscoverFixedServersOnly(nsarr); setlength(nsarr,0); + + UpdateConfigChanged(Self); + // Creating Node: FNode := TNode.Node; - FNode.NetServer.Port := FAppParams.ParamByName[CT_PARAM_InternetServerPort].GetAsInteger(CT_NetServer_Port); - FNode.PeerCache := FAppParams.ParamByName[CT_PARAM_PeerCache].GetAsString('')+';'+CT_Discover_IPs; + FNode.NetServer.Port := TSettings.InternetServerPort; + FNode.PeerCache := TSettings.PeerCache+';'+CT_Discover_IPs; + FNode.MaxPayToKeyPurchasePrice := TSettings.MaxPayToKeyPurchasePrice; // Create RPC server FRPCServer := TRPCServer.Create; FRPCServer.WalletKeys := WalletKeys; - FRPCServer.Active := FAppParams.ParamByName[CT_PARAM_JSONRPCEnabled].GetAsBoolean(false); - FRPCServer.ValidIPs := FAppParams.ParamByName[CT_PARAM_JSONRPCAllowedIPs].GetAsString('127.0.0.1'); + FRPCServer.Active := TSettings.JsonRpcPortEnabled; + FRPCServer.ValidIPs := TSettings.JsonRpcAllowedIPs; WalletKeys.SafeBox := FNode.Bank.SafeBox; // Check Database + {$IFDEF USE_ABSTRACTMEM_BLOCKCHAIN_STORAGE} + FNode.Bank.StorageClass := TAbstractMemBlockchainStorageSecondary; + {$ELSE} FNode.Bank.StorageClass := TFileStorage; - TFileStorage(FNode.Bank.Storage).DatabaseFolder := TNode.GetPascalCoinDataFolder+PathDelim+'Data'; - TFileStorage(FNode.Bank.Storage).Initialize; + {$ENDIF} + FNode.Bank.Storage.Initialize; // Init Grid + FSelectedAccountsGrid.Node := FNode; FWalletKeys.OnChanged.Add( OnWalletChanged ); FAccountsGrid.Node := FNode; FOperationsAccountGrid.Node := FNode; - FBlockChainGrid.HashRateAverageBlocksCount := FAppParams.ParamByName[CT_PARAM_HashRateAvgBlocksCount].GetAsInteger(50); - i := FAppParams.ParamByName[CT_PARAM_ShowHashRateAs].GetAsInteger(Integer({$IFDEF TESTNET}hr_Mega{$ELSE}hr_Tera{$ENDIF})); + FBlockChainGrid.HashRateAverageBlocksCount := TSettings.HashRateAvgBlocksCount; + i := Integer(TSettings.ShowHashRateAs); if (iInteger(High(TShowHashRateAs))) then i := Integer({$IFDEF TESTNET}hr_Mega{$ELSE}hr_Tera{$ENDIF}); FBlockChainGrid.HashRateAs := TShowHashRateAs(i); // Reading database FThreadActivate := TThreadActivate.Create(true); TThreadActivate(FThreadActivate).FreeOnTerminate := true; TThreadActivate(FThreadActivate).Suspended := False; - UpdateConfigChanged; UpdateNodeStatus; - {$IFDEF TESTNET} TPCTNetDataExtraMessages.InitNetDataExtraMessages(FNode,TNetData.NetData,FWalletKeys); - {$ENDIF} Except On E:Exception do begin E.Message := 'An error occurred during initialization. Application cannot continue:'+#10+#10+E.Message+#10+#10+'Application will close...'; @@ -486,11 +488,11 @@ procedure TFRMWallet.Activate; end; UpdatePrivateKeys; UpdateAccounts(false); - if FAppParams.ParamByName[CT_PARAM_FirstTime].GetAsBoolean(true) then begin - FAppParams.ParamByName[CT_PARAM_FirstTime].SetAsBoolean(false); + if TSettings.FirstTime then begin + TSettings.FirstTime := false; miAboutPascalCoinClick(Nil); end; - + PageControlChange(Nil); end; procedure TFRMWallet.bbAccountsRefreshClick(Sender: TObject); @@ -525,7 +527,7 @@ procedure TFRMWallet.bbSelectedAccountsOperationClick(Sender: TObject); finally FSelectedAccountsGrid.UnlockAccountsList; end; - DefaultFee := FAppParams.ParamByName[CT_PARAM_DefaultFee].GetAsInt64(0); + DefaultFee := TSettings.DefaultFee; WalletKeys := FWalletKeys; ShowModal; Finally @@ -617,9 +619,6 @@ procedure TFRMWallet.CM_NetConnectionUpdated(var Msg: TMessage); sClientApp, sLastConnTime : String; strings, sNSC, sRS, sDisc : TStrings; hh,nn,ss,ms : Word; - {$IFDEF TESTNET} - LFoundAccounts : Integer; - {$ENDIF} begin Try if Not TNetData.NetData.NetConnections.TryLockList(100,l) then exit; @@ -692,25 +691,6 @@ procedure TFRMWallet.CM_NetConnectionUpdated(var Msg: TMessage); Finally FMustProcessNetConnectionUpdated := false; End; - {$IFDEF TESTNET} - // TESTNET ONLY: Will automatic ask for get an account to other nodes if I have not enough - if TPlatform.GetElapsedMilliseconds(FLastAskForAccountTC)<60000 then Exit; // 1 per minute - FLastAskForAccountTC := TPlatform.GetTickCount; - LFoundAccounts := 0; - FNode.Bank.SafeBox.StartThreadSafe; - try - for i := 0 to FWalletKeys.AccountsKeyList.Count-1 do begin - inc(LFoundAccounts,FWalletKeys.AccountsKeyList.AccountKeyList[i].Count); - if LFoundAccounts>5 then Break; - end; - finally - FNode.Bank.SafeBox.EndThreadSave; - end; - if LFoundAccounts<5 then begin - // Will only ask if I have less than 5 accounts - TPCTNetDataExtraMessages.AskForFreeAccount(GetAccountKeyForMiner); - end; - {$ENDIF} end; procedure TFRMWallet.CM_WalletChanged(var Msg: TMessage); @@ -726,13 +706,13 @@ procedure TFRMWallet.dgAccountsClick(Sender: TObject); procedure TFRMWallet.dgAccountsColumnMoved(Sender: TObject; FromIndex, ToIndex: Integer); begin - SaveAppParams; + TSettings.Save; end; procedure TFRMWallet.dgAccountsFixedCellClick(Sender: TObject; ACol, ARow: Integer); begin - SaveAppParams; + TSettings.Save; end; procedure TFRMWallet.DoUpdateAccounts; @@ -877,6 +857,8 @@ procedure TFRMWallet.ebFindAccountNumberExit(Sender: TObject); procedure TFRMWallet.FinishedLoadingApp; var LLockedMempool : TPCOperationsComp; + LFoundAccounts, i, LOnSafebox,LOnMempool : Integer; + Lpubkeys : TList; begin FNodeNotifyEvents.Node := FNode; // Init @@ -890,16 +872,16 @@ procedure TFRMWallet.FinishedLoadingApp; TimerUpdateStatus.Enabled := true; // FPoolMiningServer := TPoolMiningServer.Create; - FPoolMiningServer.Port := FAppParams.ParamByName[CT_PARAM_JSONRPCMinerServerPort].GetAsInteger(CT_JSONRPCMinerServer_Port); + FPoolMiningServer.Port := TSettings.JsonRpcMinerServerPort; FPoolMiningServer.MinerAccountKey := GetAccountKeyForMiner; - FPoolMiningServer.MinerPayload := TEncoding.ANSI.GetBytes( FAppParams.ParamByName[CT_PARAM_MinerName].GetAsString('') ); + FPoolMiningServer.MinerPayload := TEncoding.ANSI.GetBytes(TSettings.MinerName); LLockedMempool := FNode.LockMempoolWrite; try LLockedMempool.AccountKey := GetAccountKeyForMiner; finally FNode.UnlockMempoolWrite; end; - FPoolMiningServer.Active := FAppParams.ParamByName[CT_PARAM_JSONRPCMinerServerActive].GetAsBoolean(true); + FPoolMiningServer.Active := TSettings.JsonRpcMinerServerActive; FPoolMiningServer.OnMiningServerNewBlockFound := OnMiningServerNewBlockFound; FreeAndNil(FBackgroundLabel); FreeAndNil(FBackgroundPanel); @@ -907,9 +889,30 @@ procedure TFRMWallet.FinishedLoadingApp; PageControl.Visible:=True; PageControl.Enabled:=True; - - UpdatePrivateKeys; + // + LFoundAccounts := 0; + FNode.Bank.SafeBox.StartThreadSafe; + try + Lpubkeys := TList.Create; + Try + for i := 0 to FWalletKeys.Count-1 do begin + if (FWalletKeys.Key[i].HasPrivateKey) then begin + Lpubkeys.Add(FWalletKeys.Key[i].AccountKey); + end; + end; + if (Lpubkeys.Count>0) then begin + LFoundAccounts := FNode.GetAccountsAvailableByPublicKey(Lpubkeys,LOnSafebox,LOnMempool); + end else LFoundAccounts := 0; + Finally + Lpubkeys.Free; + End; + finally + FNode.Bank.SafeBox.EndThreadSave; + end; + if LFoundAccounts<1 then begin + // TODO: Wallet has no PASA ... + end; end; procedure TFRMWallet.FillAccountInformation(const Strings: TStrings; @@ -987,6 +990,7 @@ procedure TFRMWallet.FillOperationInformation(const Strings: TStrings; const OperationResume: TOperationResume); var i : Integer; jsonObj : TPCJSONObject; + LEPASA : TEPasa; begin If (not OperationResume.valid) then exit; If OperationResume.Block0) then begin Strings.Add(Format('Old Operation Hash (old_ophash): %s',[TCrypto.ToHexaString(OperationResume.OperationHash_OLD)])); end; - Strings.Add(Format('Payload type:%d length:%d',[OperationResume.OriginalPayload.payload_type, length(OperationResume.OriginalPayload.payload_raw)])); + if TEPasaDecoder.TryDecodeEPASA(OperationResume.DestAccount,OperationResume.OriginalPayload,FNode,FWalletKeys,Nil,LEPASA) then begin + Strings.Add('EPASA: '+LEPASA.ToString); + end else Strings.Add('No EPASA format'); + Strings.Add(Format('Payload type:%s length:%d',['0x'+IntToHex(OperationResume.OriginalPayload.payload_type,2), length(OperationResume.OriginalPayload.payload_raw)])); if (Length(OperationResume.OriginalPayload.payload_raw)>0) then begin If OperationResume.PrintablePayload<>'' then begin Strings.Add(Format('Payload (human): %s',[OperationResume.PrintablePayload])); @@ -1027,7 +1034,9 @@ procedure TFRMWallet.FillOperationInformation(const Strings: TStrings; end; jsonObj := TPCJSONObject.Create; Try - TPascalCoinJSONComp.FillOperationObject(OperationResume,FNode.Bank.BlocksCount,jsonObj); + TPascalCoinJSONComp.FillOperationObject(OperationResume,FNode.Bank.BlocksCount, + FNode,FWalletKeys,Nil, + jsonObj); Strings.Add('OPERATION JSON:'); Strings.Add(jsonObj.ToJSON(False)); Finally @@ -1093,13 +1102,17 @@ procedure TFRMWallet.InitMenuForTesting; mi := TMenuItem.Create(MainMenu); mi.Caption:='Create a block'; mi.OnClick:=Test_CreateABlock; + {$IFnDEF FPC} mi.ShortCut := TextToShortCut('CTRL+B'); + {$ENDIF} miAbout.Add(mi); {$ENDIF} mi := TMenuItem.Create(MainMenu); mi.Caption:='Connect/Disconnect'; mi.OnClick:=Test_ConnectDisconnect; + {$IFnDEF FPC} mi.ShortCut := TextToShortCut('CTRL+D'); + {$ENDIF} miAbout.Add(mi); mi := TMenuItem.Create(MainMenu); @@ -1107,10 +1120,6 @@ procedure TFRMWallet.InitMenuForTesting; mi.OnClick:=Test_RandomOperations; miAbout.Add(mi); mi := TMenuItem.Create(MainMenu); - mi.Caption:='Ask for Free Account'; - mi.OnClick:=Test_AskForFreeAccount; - miAbout.Add(mi); - mi := TMenuItem.Create(MainMenu); mi.Caption:='Diagnostic Tool'; mi.OnClick:=Test_ShowDiagnosticTool; miAbout.Add(mi); @@ -1126,6 +1135,7 @@ procedure TFRMWallet.InitMenuForTesting; mi.Caption:='Search accounts for private or swap to me'; mi.OnClick:=Test_FindAccountsForPrivateBuyOrSwapToMe; miAbout.Add(mi); +{$ELSE} {$ENDIF} end; @@ -1185,14 +1195,6 @@ procedure TFRMWallet.Test_RandomOperations(Sender: TObject); end; end; -Procedure TFRMWallet.Test_AskForFreeAccount(Sender: TObject); -var i : Integer; -begin - i := TPCTNetDataExtraMessages.AskForFreeAccount(GetAccountKeyForMiner); - if i>0 then ShowMessage(Format('Asked for a free account to %d nodes...',[i])) - else ShowMessage('Sorry. No nodes available to ask for a free account'); -end; - {$ENDIF} procedure TFRMWallet.Test_ShowOperationsInMemory(Sender: TObject); @@ -1299,14 +1301,13 @@ procedure TFRMWallet.FormClose(Sender: TObject; var Action: TCloseAction); procedure TFRMWallet.FormCreate(Sender: TObject); Var i : Integer; begin + {$IFDEF USE_GNUGETTEXT}TranslateComponent(self);{$ENDIF} + // {$IFNDEF FPC} {$IFDEF TESTNET} System.ReportMemoryLeaksOnShutdown := True; // Delphi memory leaks testing {$ENDIF} {$ENDIF} - {$IFDEF TESTNET} - FLastAskForAccountTC := 0; - {$ENDIF} FLastAccountsGridInvalidateTC := TPlatform.GetTickCount; FLastNodesCacheUpdatedTS := Now; FBackgroundPanel := Nil; @@ -1337,8 +1338,8 @@ procedure TFRMWallet.FormCreate(Sender: TObject); FLog.OnNewLog := OnNewLog; FLog.SaveTypes := []; If Not ForceDirectories(TNode.GetPascalCoinDataFolder) then raise Exception.Create('Cannot create dir: '+TNode.GetPascalCoinDataFolder); - FAppParams := TAppParams.Create(self); - FAppParams.FileName := TNode.GetPascalCoinDataFolder+PathDelim+'AppParams.prm'; + TSettings.Load; + TSettings.OnChanged.Add(UpdateConfigChanged); FNodeNotifyEvents := TNodeNotifyEvents.Create(Self); FNodeNotifyEvents.OnBlocksChanged := OnNewAccount; FNodeNotifyEvents.OnNodeMessageEvent := OnNodeMessageEvent; @@ -1355,22 +1356,32 @@ procedure TFRMWallet.FormCreate(Sender: TObject); FOperationsAccountGrid := TOperationsGrid.Create(Self); FOperationsAccountGrid.DrawGrid := dgAccountOperations; FOperationsAccountGrid.MustShowAlwaysAnAccount := true; + FOperationsAccountGrid.WalletKeys := FWalletKeys; FPendingOperationsGrid := TOperationsGrid.Create(Self); FPendingOperationsGrid.DrawGrid := dgPendingOperations; FPendingOperationsGrid.AccountNumber := -1; // all FPendingOperationsGrid.PendingOperations := true; + FPendingOperationsGrid.WalletKeys := FWalletKeys; FOperationsExplorerGrid := TOperationsGrid.Create(Self); FOperationsExplorerGrid.DrawGrid := dgOperationsExplorer; FOperationsExplorerGrid.AccountNumber := -1; FOperationsExplorerGrid.PendingOperations := False; + FOperationsExplorerGrid.WalletKeys := FWalletKeys; FBlockChainGrid := TBlockChainGrid.Create(Self); FBlockChainGrid.DrawGrid := dgBlockChainExplorer; + FBlockChainGrid.ShowTimeAverageColumns:={$IFDEF SHOW_AVERAGE_TIME_STATS}True;{$ELSE}False;{$ENDIF} // FWalletKeys.OnChanged.Add( OnWalletChanged ); - LoadAppParams; + {$IFDEF USE_GNUGETTEXT} + // use language from the params and retranslate if needed + // might be better to move this a bit earlier in the formcreate routine + UseLanguage(TSettings.AppParams.ParamByName[CT_PARAM_UILanguage].GetAsString(GetCurrentLanguage)); + RetranslateComponent(self); + {$ENDIF} + // UpdatePrivateKeys; UpdateBlockChainState; UpdateConnectionStatus; - PageControl.ActivePage := tsMyAccounts; + PageControl.ActivePage := tsOperations; pcAccountsOptions.ActivePage := tsAccountOperations; ebFilterOperationsStartBlock.Text := ''; ebFilterOperationsEndBlock.Text := ''; @@ -1410,6 +1421,10 @@ procedure TFRMWallet.FormCreate(Sender: TObject); // this is macOS specific menu layout InitMacOSMenu; {$endif} + PageControl.ActivePageIndex := 0; + {$IFDEF DEBUG} + System.ReportMemoryLeaksOnShutdown := True; // Delphi memory leaks testing + {$ENDIF} end; procedure TFRMWallet.ebHashRateBackBlocksKeyPress(Sender: TObject; var Key: char); @@ -1425,7 +1440,7 @@ procedure TFRMWallet.ebHashRateBackBlocksExit(Sender: TObject); Try i := StrToIntDef(ebHashRateBackBlocks.Text,-1); FBlockChainGrid.HashRateAverageBlocksCount:=i; - FAppParams.ParamByName[CT_PARAM_HashRateAvgBlocksCount].Value := FBlockChainGrid.HashRateAverageBlocksCount; + TSettings.HashRateAvgBlocksCount := FBlockChainGrid.HashRateAverageBlocksCount; Finally ebHashRateBackBlocks.Text := IntToStr(FBlockChainGrid.HashRateAverageBlocksCount); FUpdating := false; @@ -1447,7 +1462,7 @@ procedure TFRMWallet.cbHashRateUnitsClick(Sender: TObject); 6 : FBlockChainGrid.HashRateAs := hr_Exa; else FBlockChainGrid.HashRateAs := hr_Mega; end; - FAppParams.ParamByName[CT_PARAM_ShowHashRateAs].Value := Integer(FBlockChainGrid.HashRateAs); + TSettings.ShowHashRateAs := FBlockChainGrid.HashRateAs; Finally FUpdating := false; End; @@ -1467,8 +1482,7 @@ procedure TFRMWallet.FormDestroy(Sender: TObject); FreeAndNil(FRPCServer); FreeAndNil(FPoolMiningServer); step := 'Saving params'; - SaveAppParams; - FreeAndNil(FAppParams); + TSettings.Save; // step := 'Assigning nil events'; FLog.OnNewLog :=Nil; @@ -1568,11 +1582,10 @@ function TFRMWallet.GetAccountKeyForMiner: TAccountKey; begin Result := CT_TECDSA_Public_Nul; if Not Assigned(FWalletKeys) then exit; - if Not Assigned(FAppParams) then exit; case FMinerPrivateKeyType of mpk_NewEachTime: PublicK := CT_TECDSA_Public_Nul; mpk_Selected: begin - PublicK := TAccountComp.RawString2Accountkey(FAppParams.ParamByName[CT_PARAM_MinerPrivateKeySelectedPublicKey].GetAsTBytes(Nil)); + PublicK := TAccountComp.RawString2Accountkey(TSettings.MinerSelectedPublicKey); end; else // Random @@ -1599,9 +1612,9 @@ function TFRMWallet.GetAccountKeyForMiner: TAccountKey; PublicK := PK.PublicKey; // Set to AppParams if not mpk_NewEachTime if (FMinerPrivateKeyType<>mpk_NewEachTime) then begin - FAppParams.ParamByName[CT_PARAM_MinerPrivateKeySelectedPublicKey].SetAsTBytes(TAccountComp.AccountKey2RawString(PublicK)); + TSettings.MinerSelectedPublicKey := TAccountComp.AccountKey2RawString(PublicK); FMinerPrivateKeyType:=mpk_Selected; - FAppParams.ParamByName[CT_PARAM_MinerPrivateKeyType].Value := Integer(mpk_Selected); + TSettings.MinerPrivateKeyType := mpk_Selected; end; finally PK.Free; @@ -1615,7 +1628,7 @@ procedure TFRMWallet.IPnodes1Click(Sender: TObject); begin FRM := TFRMNodesIp.Create(Self); Try - FRM.AppParams := FAppParams; + FRM.AppParams := TSettings.AppParams; FRM.ShowModal; Finally FRM.Free; @@ -1627,28 +1640,6 @@ procedure TFRMWallet.lblReceivedMessagesClick(Sender: TObject); PageControl.ActivePage := tsMessages; end; -procedure TFRMWallet.LoadAppParams; -Var ms : TMemoryStream; - s : AnsiString; -begin - ms := TMemoryStream.Create; - Try - s := FAppParams.ParamByName[CT_PARAM_GridAccountsStream].GetAsString(''); - ms.WriteBuffer(s[1],length(s)); - ms.Position := 0; - // Disabled on V2: FAccountsGrid.LoadFromStream(ms); - Finally - ms.Free; - End; - If FAppParams.FindParam(CT_PARAM_MinerName)=Nil then begin - // New configuration... assigning a new random value - FAppParams.ParamByName[CT_PARAM_MinerName].SetAsString('New Node '+DateTimeToStr(Now)+' - '+ - CT_ClientAppVersion); - end; - FBlockChainGrid.ShowTimeAverageColumns:={$IFDEF SHOW_AVERAGE_TIME_STATS}True;{$ELSE}False;{$ENDIF} - UpdateConfigChanged; -end; - procedure TFRMWallet.miAboutPascalCoinClick(Sender: TObject); begin With TFRMAbout.Create(Self) do @@ -1676,12 +1667,12 @@ procedure TFRMWallet.MiAccountInformationClick(Sender: TObject); if PageControl.ActivePage=tsOperations then begin i := FOperationsExplorerGrid.DrawGrid.Row; if (i>0) and (i<=FOperationsExplorerGrid.OperationsResume.Count) then begin - opr := FOperationsExplorerGrid.OperationsResume.OperationResume[i-1]; + opr := FOperationsExplorerGrid.OperationsResume.Items[i-1]; end; end else if PageControl.ActivePage=tsPendingOperations then begin i := FPendingOperationsGrid.DrawGrid.Row; if (i>0) and (i<=FPendingOperationsGrid.OperationsResume.Count) then begin - opr := FPendingOperationsGrid.OperationsResume.OperationResume[i-1]; + opr := FPendingOperationsGrid.OperationsResume.Items[i-1]; end; end else if PageControl.ActivePage=tsMyAccounts then begin accn := FAccountsGrid.AccountNumber(dgAccounts.Row); @@ -1690,7 +1681,7 @@ procedure TFRMWallet.MiAccountInformationClick(Sender: TObject); title := 'Account '+TAccountComp.AccountNumberToAccountTxtNumber(accn)+' info'; i := FOperationsAccountGrid.DrawGrid.Row; if (i>0) and (i<=FOperationsAccountGrid.OperationsResume.Count) then begin - opr := FOperationsAccountGrid.OperationsResume.OperationResume[i-1]; + opr := FOperationsAccountGrid.OperationsResume.Items[i-1]; end; end; If (opr.valid) then begin @@ -1730,11 +1721,11 @@ procedure TFRMWallet.MiCloseClick(Sender: TObject); procedure TFRMWallet.MiDecodePayloadClick(Sender: TObject); begin if PageControl.ActivePage=tsOperations then begin - FOperationsExplorerGrid.ShowModalDecoder(FWalletKeys,FAppParams); + FOperationsExplorerGrid.ShowModalDecoder(FWalletKeys, TSettings.AppParams); end else if PageControl.ActivePage=tsPendingOperations then begin - FPendingOperationsGrid.ShowModalDecoder(FWalletKeys,FAppParams); + FPendingOperationsGrid.ShowModalDecoder(FWalletKeys,TSettings.AppParams); end else if PageControl.ActivePage=tsMyAccounts then begin - FOperationsAccountGrid.ShowModalDecoder(FWalletKeys,FAppParams); + FOperationsAccountGrid.ShowModalDecoder(FWalletKeys,TSettings.AppParams); end; end; @@ -1980,7 +1971,7 @@ procedure TFRMWallet.MiFindOperationbyOpHashClick(Sender: TObject); // FRM := TFRMPayloadDecoder.Create(Self); try - FRM.Init(CT_TOperationResume_NUL,WalletKeys,FAppParams); + FRM.Init(CT_TOperationResume_NUL,WalletKeys,TSettings.AppParams); FRM.DoFind(oph); FRM.ShowModal; finally @@ -2029,7 +2020,7 @@ procedure TFRMWallet.miNewOperationClick(Sender: TObject); finally l.Free; end; - DefaultFee := FAppParams.ParamByName[CT_PARAM_DefaultFee].GetAsInt64(0); + DefaultFee := TSettings.DefaultFee; WalletKeys := FWalletKeys; ShowModal; Finally @@ -2041,11 +2032,12 @@ procedure TFRMWallet.miOptionsClick(Sender: TObject); begin With TFRMPascalCoinWalletConfig.Create(Self) do try - AppParams := Self.FAppParams; + AppParams := TSettings.AppParams; WalletKeys := Self.FWalletKeys; if ShowModal=MrOk then begin - SaveAppParams; - UpdateConfigChanged; + TSettings.Save; + UpdateConfigChanged(Self); + {$IFDEF USE_GNUGETTEXT}RetranslateComponent(self);{$ENDIF} end; finally free; @@ -2243,7 +2235,7 @@ procedure TFRMWallet.OnNodeMessageEvent(NetConnection: TNetConnection; MessageDa s := DateTimeToStr(now)+' Message received from '+NetConnection.ClientRemoteAddr; memoMessages.Lines.Add(DateTimeToStr(now)+' Message received from '+NetConnection.ClientRemoteAddr+' Length '+inttostr(Length(MessageData))+' bytes'); memoMessages.Lines.Add('RECEIVED> '+MessageData); - if FAppParams.ParamByName[CT_PARAM_ShowModalMessages].GetAsBoolean(false) then begin + if TSettings.ShowModalMessages then begin s := DateTimeToStr(now)+' Message from '+NetConnection.ClientRemoteAddr+#10+ 'Length '+inttostr(length(MessageData))+' bytes'+#10+#10; if TCrypto.IsHumanReadable(TEncoding.ANSI.GetBytes(MessageData)) then begin @@ -2281,7 +2273,7 @@ procedure TFRMWallet.OnReceivedHelloMessage(Sender: TObject); if (s<>'') then s := s+';'; s := s + nsarr[i].ip+':'+IntToStr( nsarr[i].port ); end; - FAppParams.ParamByName[CT_PARAM_PeerCache].SetAsString(s); + TSettings.PeerCache := s; TNode.Node.PeerCache := s; end; @@ -2326,22 +2318,6 @@ procedure TFRMWallet.PageControlChange(Sender: TObject); end; end; -procedure TFRMWallet.SaveAppParams; -Var ms : TMemoryStream; - s : AnsiString; -begin - ms := TMemoryStream.Create; - Try - FAccountsGrid.SaveToStream(ms); - ms.Position := 0; - setlength(s,ms.Size); - ms.ReadBuffer(s[1],ms.Size); - FAppParams.ParamByName[CT_PARAM_GridAccountsStream].SetAsString(s); - Finally - ms.Free; - End; -end; - procedure TFRMWallet.sbSelectedAccountsAddAllClick(Sender: TObject); Var lsource,ltarget : TOrderedCardinalList; i : Integer; @@ -2579,18 +2555,18 @@ procedure TFRMWallet.UpdateBlockChainState; end; end; -procedure TFRMWallet.UpdateConfigChanged; +procedure TFRMWallet.UpdateConfigChanged(Sender:TObject); Var wa : Boolean; i : Integer; LLockedMempool : TPCOperationsComp; begin - tsLogs.TabVisible := FAppParams.ParamByName[CT_PARAM_ShowLogs].GetAsBoolean(false); + tsLogs.TabVisible := TSettings.ShowLogs; if (Not tsLogs.TabVisible) then begin FLog.OnNewLog := Nil; if PageControl.ActivePage = tsLogs then PageControl.ActivePage := tsMyAccounts; end else FLog.OnNewLog := OnNewLog; - if (FAppParams.ParamByName[CT_PARAM_SaveLogFiles].GetAsBoolean(false)) then begin - if FAppParams.ParamByName[CT_PARAM_SaveDebugLogs].GetAsBoolean(false) then FLog.SaveTypes := CT_TLogTypes_ALL + if TSettings.SaveLogFiles then begin + if TSettings.SaveDebugLogs then FLog.SaveTypes := CT_TLogTypes_ALL else FLog.SaveTypes := CT_TLogTypes_DEFAULT; FLog.FileName := TNode.GetPascalCoinDataFolder+PathDelim+'PascalCointWallet.log'; end else begin @@ -2599,30 +2575,30 @@ procedure TFRMWallet.UpdateConfigChanged; end; if Assigned(FNode) then begin wa := FNode.NetServer.Active; - FNode.NetServer.Port := FAppParams.ParamByName[CT_PARAM_InternetServerPort].GetAsInteger(CT_NetServer_Port); + FNode.NetServer.Port := TSettings.InternetServerPort; FNode.NetServer.Active := wa; LLockedMempool := FNode.LockMempoolWrite; try - LLockedMempool.BlockPayload := TEncoding.ANSI.GetBytes(FAppParams.ParamByName[CT_PARAM_MinerName].GetAsString('')); + LLockedMempool.BlockPayload := TEncoding.ANSI.GetBytes(TSettings.MinerName); finally FNode.UnlockMempoolWrite; end; FNode.NodeLogFilename := TNode.GetPascalCoinDataFolder+PathDelim+'blocks.log'; end; if Assigned(FPoolMiningServer) then begin - if FPoolMiningServer.Port<>FAppParams.ParamByName[CT_PARAM_JSONRPCMinerServerPort].GetAsInteger(CT_JSONRPCMinerServer_Port) then begin + if FPoolMiningServer.Port<>TSettings.JsonRpcMinerServerPort then begin FPoolMiningServer.Active := false; - FPoolMiningServer.Port := FAppParams.ParamByName[CT_PARAM_JSONRPCMinerServerPort].GetAsInteger(CT_JSONRPCMinerServer_Port); + FPoolMiningServer.Port := TSettings.JsonRpcMinerServerPort; end; - FPoolMiningServer.Active :=FAppParams.ParamByName[CT_PARAM_JSONRPCMinerServerActive].GetAsBoolean(true); - FPoolMiningServer.UpdateAccountAndPayload(GetAccountKeyForMiner,TEncoding.ANSI.GetBytes(FAppParams.ParamByName[CT_PARAM_MinerName].GetAsString(''))); + FPoolMiningServer.Active := TSettings.JsonRpcMinerServerActive; + FPoolMiningServer.UpdateAccountAndPayload(GetAccountKeyForMiner,TEncoding.ANSI.GetBytes(TSettings.MinerName)); end; if Assigned(FRPCServer) then begin - FRPCServer.Active := FAppParams.ParamByName[CT_PARAM_JSONRPCEnabled].GetAsBoolean(false); - FRPCServer.ValidIPs := FAppParams.ParamByName[CT_PARAM_JSONRPCAllowedIPs].GetAsString('127.0.0.1'); + FRPCServer.Active := TSettings.JsonRpcPortEnabled; + FRPCServer.ValidIPs := TSettings.JsonRpcAllowedIPs; end; - i := FAppParams.ParamByName[CT_PARAM_MinerPrivateKeyType].GetAsInteger(Integer(mpk_Random)); - if (i>=Integer(Low(TMinerPrivatekey))) And (i<=Integer(High(TMinerPrivatekey))) then FMinerPrivateKeyType := TMinerPrivateKey(i) + i := Integer(TSettings.MinerPrivateKeyType); + if (i>=Integer(Low(TMinerPrivateKeyType))) And (i<=Integer(High(TMinerPrivateKeyType))) then FMinerPrivateKeyType := TMinerPrivateKeyType(i) else FMinerPrivateKeyType := mpk_Random; ebHashRateBackBlocks.Text := IntToStr(FBlockChainGrid.HashRateAverageBlocksCount); Case FBlockChainGrid.HashRateAs of @@ -2636,8 +2612,8 @@ procedure TFRMWallet.UpdateConfigChanged; else cbHashRateUnits.ItemIndex:=-1; end; if TNetData.NetDataExists then begin - if FAppParams.ParamByName[CT_PARAM_AllowDownloadNewCheckpointIfOlderThan].GetAsBoolean(TNetData.NetData.MinFutureBlocksToDownloadNewSafebox>200) then begin - TNetData.NetData.MinFutureBlocksToDownloadNewSafebox:=FAppParams.ParamByName[CT_PARAM_MinFutureBlocksToDownloadNewSafebox].GetAsInteger(TNetData.NetData.MinFutureBlocksToDownloadNewSafebox); + if TSettings.AppParams.ParamByName[CT_PARAM_AllowDownloadNewCheckpointIfOlderThan].GetAsBoolean(TNetData.NetData.MinFutureBlocksToDownloadNewSafebox>200) then begin + TNetData.NetData.MinFutureBlocksToDownloadNewSafebox:=TSettings.AppParams.ParamByName[CT_PARAM_MinFutureBlocksToDownloadNewSafebox].GetAsInteger(TNetData.NetData.MinFutureBlocksToDownloadNewSafebox); end else TNetData.NetData.MinFutureBlocksToDownloadNewSafebox:=0; end; end; diff --git a/src/gui-classic/UFRMWalletKeys.lfm b/src/gui-classic/UFRMWalletKeys.lfm index 66c722ed7..5477dd068 100644 --- a/src/gui-classic/UFRMWalletKeys.lfm +++ b/src/gui-classic/UFRMWalletKeys.lfm @@ -14,8 +14,7 @@ object FRMWalletKeys: TFRMWalletKeys Font.Name = 'Tahoma' OnCreate = FormCreate Position = poOwnerFormCenter - LCLVersion = '1.8.4.0' - Visible = False + LCLVersion = '2.0.2.0' object lblEncryptionTypeCaption: TLabel Left = 30 Height = 13 diff --git a/src/gui-classic/UFRMWalletKeys.pas b/src/gui-classic/UFRMWalletKeys.pas index b0073f099..cd6b569e2 100644 --- a/src/gui-classic/UFRMWalletKeys.pas +++ b/src/gui-classic/UFRMWalletKeys.pas @@ -95,6 +95,7 @@ implementation {$ELSE} LCLIntf, LCLType, {$ENDIF} + {$IFDEF USE_GNUGETTEXT}gnugettext,{$ENDIF} UCrypto, UAccounts, UFRMNewPrivateKeyType, UBaseTypes, UPCEncryption, UPCDataTypes, UCommon, UGUIUtils; @@ -493,6 +494,7 @@ destructor TFRMWalletKeys.Destroy; procedure TFRMWalletKeys.FormCreate(Sender: TObject); begin + {$IFDEF USE_GNUGETTEXT}TranslateComponent(self);{$ENDIF} lbWalletKeys.Sorted := true; FWalletKeys := Nil; UpdateWalletKeys; @@ -554,7 +556,7 @@ procedure TFRMWalletKeys.UpdateSelectedWalletKey; if wk.Name='' then lblKeyName.Caption := '(No name)' else lblKeyName.Caption := wk.Name; memoPrivateKey.Font.Color := clBlack; - s := TAccountComp.AccountPublicKeyExport(wk.AccountKey); + s := '@['+TAccountComp.AccountPublicKeyExport(wk.AccountKey)+']'; // PayToPubkey EPASA format memoPrivateKey.Lines.Text:=s; finally lblEncryptionTypeCaption.Enabled := ok; diff --git a/src/gui-classic/UGridUtils.pas b/src/gui-classic/UGridUtils.pas index 42446a5af..83324d8a2 100644 --- a/src/gui-classic/UGridUtils.pas +++ b/src/gui-classic/UGridUtils.pas @@ -31,7 +31,7 @@ interface LCLIntf, LCLType, LMessages, {$ENDIF} Classes, Grids, UNode, UAccounts, UBlockChain, UAppParams, UThread, UPCDataTypes, - UWallet, UCrypto, UPoolMining, URPC, UBaseTypes, UPCOrderedLists, + UWallet, UCrypto, UPoolMining, URPC, UBaseTypes, UPCOrderedLists, USettings, {$IFNDEF FPC}System.Generics.Collections{$ELSE}Generics.Collections{$ENDIF}; Type @@ -134,7 +134,7 @@ interface TOperationsGridUpdateThread = Class(TPCThread) FOperationsGrid : TOperationsGrid; - procedure DoUpdateOperationsGrid(ANode : TNode; var AList : TList); + procedure DoUpdateOperationsGrid(const ANode : TNode; const AWalleTKeys : TWalletKeys; const APasswords : TList; var AList : TList); protected procedure BCExecute; override; public @@ -152,6 +152,8 @@ interface FBlockEnd: Int64; FMustShowAlwaysAnAccount: Boolean; FOperationsGridUpdateThread : TOperationsGridUpdateThread; + FWalletKeys: TWalletKeys; + FPasswords: TList; Procedure OnNodeNewOperation(Sender : TObject); Procedure OnNodeNewAccount(Sender : TObject); Procedure InitGrid; @@ -177,6 +179,8 @@ interface Property AccountNumber : Int64 read FAccountNumber write SetAccountNumber; Property MustShowAlwaysAnAccount : Boolean read FMustShowAlwaysAnAccount write SetMustShowAlwaysAnAccount; Property Node : TNode read GetNode write SetNode; + property WalletKeys : TWalletKeys read FWalletKeys write FWalletKeys; + property Passwords : TList read FPasswords; Procedure UpdateAccountOperations; virtual; Procedure ShowModalDecoder(WalletKeys: TWalletKeys; AppParams : TAppParams); Property BlockStart : Int64 read FBlockStart write SetBlockStart; @@ -230,8 +234,6 @@ interface { TBlockChainGrid } - TShowHashRateAs = (hr_Unit, hr_Kilo, hr_Mega, hr_Giga, hr_Tera, hr_Peta, hr_Exa); - TBlockChainGrid = Class(TComponent) private FBlockChainDataList : TList; @@ -283,72 +285,76 @@ implementation uses Graphics, SysUtils, UTime, UOpTransaction, UConst, + UEPasa, UEPasaDecoder, UFRMPayloadDecoder, ULog; { TAccountsGridUpdateThread } procedure TAccountsGridUpdateThread.BCExecute; Var - l : TAccountsNumbersList; - i,j, j_min, j_max : Integer; + LAccountsNumbersList : TAccountsNumbersList; + i,j, j_min : Integer; c : Cardinal; LApplyfilter : Boolean; LAccount : TAccount; LNode : TNode; + LAccountsList : TList; begin LApplyfilter := ((FAccountsGridFilter.MinBalance>0) Or ((FAccountsGridFilter.MaxBalance>=0) And (FAccountsGridFilter.MaxBalance=0) do begin LNode.bank.SafeBox.StartThreadSafe; FAccountsGridFilter.OrderedAccountsKeyList.Lock; // Protection v4 Try - l := FAccountsGridFilter.OrderedAccountsKeyList.AccountKeyList[i]; - if Assigned(l) then begin - - j_max := (j_min + 500); - if j_max>=l.Count then j_max := l.Count-1; - - for j := j_min to j_max do begin - LAccount := LNode.Bank.SafeBox.Account(l.Get(j)); - if LApplyfilter then begin - if (LAccount.balance>=FAccountsGridFilter.MinBalance) And ((FAccountsGridFilter.MaxBalance<0) Or (LAccount.balance<=FAccountsGridFilter.MaxBalance)) then begin + LAccountsNumbersList := FAccountsGridFilter.OrderedAccountsKeyList.AccountKeyList[i]; + if Assigned(LAccountsNumbersList) then begin + + LAccountsList := TList.Create; + Try + LAccountsNumbersList.FillList(j_min,50000,LAccountsList); + for j := 0 to LAccountsList.Count - 1 do begin + LAccount := LNode.Bank.SafeBox.Account(LAccountsList[j]); + + if LApplyfilter then begin + if (LAccount.balance>=FAccountsGridFilter.MinBalance) And ((FAccountsGridFilter.MaxBalance<0) Or (LAccount.balance<=FAccountsGridFilter.MaxBalance)) then begin + FProcessedList.Add(LAccount.account); + FBalance := FBalance + LAccount.balance; + end; + end else begin FProcessedList.Add(LAccount.account); FBalance := FBalance + LAccount.balance; end; - end else begin - FProcessedList.Add(LAccount.account); - FBalance := FBalance + LAccount.balance; + if Terminated then Exit; end; - if Terminated then Exit; - end; - j_min := j_max+1; - if (j_max>=(l.Count-1)) then begin - j_min := -1; - break; - end; + if LAccountsList.Count>0 then inc(j_min,LAccountsList.Count) + else break; + + Finally + LAccountsList.Free; + End; + end; finally FAccountsGridFilter.OrderedAccountsKeyList.Unlock; LNode.Bank.SafeBox.EndThreadSave; end; - if j_max>=0 then Sleep(0); - end; - inc(i); end; - end else begin + inc(i); + end; + end else begin c := 0; while (c.Create; try - DoUpdateOperationsGrid(FOperationsGrid.Node,list); + DoUpdateOperationsGrid(FOperationsGrid.Node,FOperationsGrid.WalletKeys,FOperationsGrid.Passwords,list); if (Not Terminated) then begin FOperationsGrid.FOperationsResume.Clear; for i := 0 to list.Count-1 do begin @@ -960,7 +967,8 @@ constructor TOperationsGridUpdateThread.Create(AOperationsGrid: TOperationsGrid) Suspended := False; end; -procedure TOperationsGridUpdateThread.DoUpdateOperationsGrid(ANode: TNode; var AList: TList); +procedure TOperationsGridUpdateThread.DoUpdateOperationsGrid(const ANode : TNode; const AWalleTKeys : TWalletKeys; + const APasswords : TList; var AList: TList); Var list : TList; i,j : Integer; OPR : TOperationResume; @@ -969,6 +977,7 @@ procedure TOperationsGridUpdateThread.DoUpdateOperationsGrid(ANode: TNode; var A bstart,bend : int64; LOperationsResume : TOperationsResumeList; LLockedMempool : TPCOperationsComp; + LEPasa : TEPasa; begin if Not Assigned(ANode) then exit; AList.Clear; @@ -1056,10 +1065,17 @@ procedure TOperationsGridUpdateThread.DoUpdateOperationsGrid(ANode: TNode; var A Finally list.Free; End; - ANode.GetStoredOperationsFromAccount(Self,AList,FOperationsGrid.AccountNumber,100,0,5000); + ANode.Bank.Storage.GetAccountOperations(FOperationsGrid.AccountNumber,-1,0,5000,0,AList); end; end; Finally + for i := 0 to AList.Count-1 do begin + OPR := AList[i]; + if TEPasaDecoder.TryDecodeEPASA(OPR.DestAccount,OPR.OriginalPayload,ANode,AWalleTKeys,APasswords,LEPasa) then begin + OPR.DecodedEPasaPayload := LEPasa.ToString(True); + AList[i] := OPR; + end; + end; End; end; @@ -1067,6 +1083,8 @@ procedure TOperationsGridUpdateThread.DoUpdateOperationsGrid(ANode: TNode; var A constructor TOperationsGrid.Create(AOwner: TComponent); begin + FPasswords := TList.Create; + FWalletKeys := Nil; FAccountNumber := 0; FDrawGrid := Nil; MustShowAlwaysAnAccount := false; @@ -1090,6 +1108,7 @@ destructor TOperationsGrid.Destroy; end; FOperationsResume.Free; FNodeNotifyEvents.Free; + FPasswords.Free; inherited; end; @@ -1134,8 +1153,9 @@ procedure TOperationsGrid.Notification(AComponent: TComponent; Operation: TOpera end; procedure TOperationsGrid.OnGridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); -Var s : String; +Var s, saux : String; opr : TOperationResume; + LRectLeft, LRectRight : TRect; begin DrawGrid.Canvas.Font.Color:=clWindowText; opr := CT_TOperationResume_NUL; @@ -1162,7 +1182,7 @@ procedure TOperationsGrid.OnGridDrawCell(Sender: TObject; ACol, ARow: Integer; R DrawGrid.Canvas.FillRect(Rect); InflateRect(Rect,-2,-1); if (ARow<=FOperationsResume.Count) then begin - opr := FOperationsResume.OperationResume[ARow-1]; + opr := FOperationsResume.Items[ARow-1]; If (opr.AffectedAccount=opr.SignerAccount) then begin end else begin if (gdSelected in State) or (gdFocused in State) then begin @@ -1208,7 +1228,24 @@ procedure TOperationsGrid.OnGridDrawCell(Sender: TObject; ACol, ARow: Integer; R Canvas_TextRect(DrawGrid.Canvas,Rect,s,State,[tfRight,tfVerticalCenter,tfSingleLine]); end else if ACol=7 then begin s := opr.PrintablePayload; - Canvas_TextRect(DrawGrid.Canvas,Rect,s,State,[tfLeft,tfVerticalCenter,tfSingleLine]); + LRectRight := Rect; + if opr.OriginalPayload.payload_type>0 then begin + saux := '0x'+IntToHex(opr.OriginalPayload.payload_type,2); + LRectLeft := Rect; + LRectLeft.Width := 30; + Rect.Inflate(-32,0,0,0); + DrawGrid.Canvas.Font.Color := clBlue; + DrawGrid.Canvas.Font.Style := [fsBold]; + Canvas_TextRect(DrawGrid.Canvas,LRectLeft,saux,State,[tfLeft,tfVerticalCenter,tfSingleLine]); + if opr.DecodedEPasaPayload<>'' then begin + DrawGrid.Canvas.Font.Style := [fsBold]; + s := opr.DecodedEPasaPayload + end else DrawGrid.Canvas.Font.Style := []; + end else if opr.OriginalPayload.payload_raw.ToString=s then begin + DrawGrid.Canvas.Font.Style := [fsBold]; + end; + DrawGrid.Canvas.Font.Color := clBlack; + Canvas_TextRect(DrawGrid.Canvas,Rect,s,State,[tfLeft,tfVerticalCenter,tfSingleLine]) end else begin s := '(???)'; Canvas_TextRect(DrawGrid.Canvas,Rect,s,State,[tfCenter,tfVerticalCenter,tfSingleLine]); @@ -1333,7 +1370,7 @@ function TOperationsGrid.GetSelectedOperation : TOperationResume; Result := CT_TOperationResume_NUL; exit; end; - Result := FOperationsResume.OperationResume[FDrawGrid.Row-1]; + Result := FOperationsResume.Items[FDrawGrid.Row-1]; end; procedure TOperationsGrid.ShowModalDecoder(WalletKeys: TWalletKeys; AppParams : TAppParams); @@ -1343,7 +1380,7 @@ procedure TOperationsGrid.ShowModalDecoder(WalletKeys: TWalletKeys; AppParams : begin if Not Assigned(FDrawGrid) then exit; if (FDrawGrid.Row<=0) Or (FDrawGrid.Row>FOperationsResume.Count) then exit; - opr := FOperationsResume.OperationResume[FDrawGrid.Row-1]; + opr := FOperationsResume.Items[FDrawGrid.Row-1]; FRM := TFRMPayloadDecoder.Create(FDrawGrid.Owner); try FRM.Init(opr,WalletKeys,AppParams); @@ -1427,17 +1464,16 @@ constructor TBlockChainGridUpdateThread.Create(ABlockChainGrid : TBlockChainGrid end; procedure TBlockChainGridUpdateThread.DoUpdateBlockChainGrid(ANode: TNode; var AList: TList; ABlockStart, ABlockEnd : Int64); -Var opc : TPCOperationsComp; +Var //opc : TPCOperationsComp; bcd : TBlockChainData; opb : TOperationBlock; bn : TBigNum; begin - opc := TPCOperationsComp.Create(Nil); - try - opc.bank := ANode.Bank; while (ABlockStart<=ABlockEnd) and (Not Terminated) do begin bcd := CT_TBlockChainData_NUL; - opb := ANode.Bank.SafeBox.GetBlockInfo(ABlockEnd); + if Not ANode.Bank.Storage.GetBlockInformation(ABlockEnd,opb,bcd.OperationsCount,bcd.Volume) then begin + opb := ANode.Bank.SafeBox.GetBlockInfo(ABlockEnd); + end; bcd.Block:=opb.block; bcd.Timestamp := opb.timestamp; bcd.BlockProtocolVersion := opb.protocol_version; @@ -1463,10 +1499,6 @@ procedure TBlockChainGridUpdateThread.DoUpdateBlockChainGrid(ANode: TNode; var A bcd.PoW := opb.proof_of_work; bcd.SafeBoxHash := opb.initial_safe_box_hash; if (Not Terminated) then begin - If (ANode.Bank.LoadOperations(opc,ABlockEnd)) then begin - bcd.OperationsCount := opc.Count; - bcd.Volume := opc.OperationsHashTree.TotalAmount + opc.OperationsHashTree.TotalFee; - end; bcd.TimeAverage200:=ANode.Bank.GetTargetSecondsAverage(bcd.Block,200); bcd.TimeAverage150:=ANode.Bank.GetTargetSecondsAverage(bcd.Block,150); bcd.TimeAverage100:=ANode.Bank.GetTargetSecondsAverage(bcd.Block,100); @@ -1479,9 +1511,6 @@ procedure TBlockChainGridUpdateThread.DoUpdateBlockChainGrid(ANode: TNode; var A if (ABlockEnd>0) then dec(ABlockEnd) else Break; end; end; - finally - opc.Free; - end; end; { TBlockChainGrid } diff --git a/src/gui-experimental/UCTRLWallet.lfm b/src/gui-experimental/UCTRLWallet.lfm index dd5261415..5a583ac30 100644 --- a/src/gui-experimental/UCTRLWallet.lfm +++ b/src/gui-experimental/UCTRLWallet.lfm @@ -10,7 +10,7 @@ object CTRLWallet: TCTRLWallet ClientWidth = 1151 OnCreate = FormCreate OnResize = FormResize - LCLVersion = '2.0.2.0' + LCLVersion = '2.0.10.0' object PairSplitter1: TPairSplitter Cursor = crDefault Left = 0 @@ -34,14 +34,14 @@ object CTRLWallet: TCTRLWallet Width = 344 Anchors = [akTop, akLeft, akRight] Caption = 'Overview' - ClientHeight = 85 + ClientHeight = 86 ClientWidth = 340 TabOrder = 0 object Label1: TLabel Left = 16 - Height = 15 + Height = 14 Top = 16 - Width = 58 + Width = 68 Caption = 'Total PASC' Font.Style = [fsBold] ParentColor = False @@ -49,9 +49,9 @@ object CTRLWallet: TCTRLWallet end object Label2: TLabel Left = 16 - Height = 15 + Height = 14 Top = 48 - Width = 59 + Width = 69 Caption = 'Total PASA' Font.Style = [fsBold] ParentColor = False @@ -91,16 +91,16 @@ object CTRLWallet: TCTRLWallet Width = 344 Anchors = [akTop, akLeft, akRight, akBottom] Caption = 'My Accounts' - ClientHeight = 420 + ClientHeight = 421 ClientWidth = 340 TabOrder = 1 object cbAccounts: TComboBox Left = 8 - Height = 23 + Height = 22 Top = 8 Width = 320 Anchors = [akTop, akLeft, akRight] - ItemHeight = 15 + ItemHeight = 14 ItemIndex = 0 Items.Strings = ( 'Show All' @@ -114,7 +114,7 @@ object CTRLWallet: TCTRLWallet end object paAccounts: TPanel Left = 8 - Height = 376 + Height = 377 Top = 40 Width = 320 Anchors = [akTop, akLeft, akRight, akBottom] @@ -141,12 +141,12 @@ object CTRLWallet: TCTRLWallet Width = 776 Anchors = [akTop, akLeft, akRight, akBottom] Caption = 'Recent Operations' - ClientHeight = 532 + ClientHeight = 533 ClientWidth = 772 TabOrder = 0 object paOperations: TPanel Left = 8 - Height = 512 + Height = 513 Top = 16 Width = 760 Anchors = [akTop, akLeft, akRight, akBottom] @@ -160,8 +160,8 @@ object CTRLWallet: TCTRLWallet end end object mnuAccountsPopup: TPopupMenu - left = 768 - top = 64 + Left = 768 + Top = 64 object miSendPASC: TMenuItem Caption = 'Send PASC' OnClick = miSendPASCClick @@ -198,8 +198,8 @@ object CTRLWallet: TCTRLWallet end end object mnuOperationsPopup: TPopupMenu - left = 896 - top = 64 + Left = 896 + Top = 64 object miCopyOphash: TMenuItem Caption = 'Copy OPHASH' OnClick = miCopyOphashClick @@ -213,7 +213,7 @@ object CTRLWallet: TCTRLWallet end end object mnuFirstAccountPopup: TPopupMenu - left = 1024 - top = 64 + Left = 1024 + Top = 64 end end diff --git a/src/gui-experimental/UCTRLWallet.pas b/src/gui-experimental/UCTRLWallet.pas index 266b557ca..cc1b2af5c 100644 --- a/src/gui-experimental/UCTRLWallet.pas +++ b/src/gui-experimental/UCTRLWallet.pas @@ -21,7 +21,7 @@ interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, Menus, ExtCtrls, PairSplitter, Buttons, UVisualGrid, UCommon, UCommon.UI, Generics.Collections, - ULog, UAccounts, UDataSources, UNode, UCoreObjects, UCoreUtils, UCTRLNoAccount; + ULog, UAccounts, UPCDataTypes, UDataSources, UNode, UCoreObjects, UCoreUtils, UCTRLNoAccount; type diff --git a/src/gui-experimental/UFRMAccountExplorer.lfm b/src/gui-experimental/UFRMAccountExplorer.lfm index 6e36d717c..c389b3c7d 100644 --- a/src/gui-experimental/UFRMAccountExplorer.lfm +++ b/src/gui-experimental/UFRMAccountExplorer.lfm @@ -5,16 +5,16 @@ object FRMAccountExplorer: TFRMAccountExplorer Width = 868 ActiveControl = cbMyPrivateKeys Caption = 'Accounts Explorer' - ClientHeight = 431 + ClientHeight = 432 ClientWidth = 868 Menu = meAccountExplorerMenu OnCreate = FormCreate OnDestroy = FormDestroy Position = poOwnerFormCenter - LCLVersion = '2.0.2.0' + LCLVersion = '2.0.10.0' object Splitter1: TSplitter Left = 380 - Height = 385 + Height = 366 Top = 66 Width = 5 end @@ -30,34 +30,34 @@ object FRMAccountExplorer: TFRMAccountExplorer TabOrder = 0 object Label18: TLabel Left = 11 - Height = 15 + Height = 14 Top = 40 - Width = 69 + Width = 70 Caption = 'Find account' ParentColor = False end object cbMyPrivateKeys: TComboBox Left = 308 - Height = 23 + Height = 22 Top = 5 Width = 411 - ItemHeight = 15 + ItemHeight = 14 OnChange = cbMyPrivateKeysChange Style = csDropDownList TabOrder = 0 end object cbExploreMyAccounts: TCheckBox Left = 11 - Height = 19 + Height = 18 Top = 9 - Width = 255 + Width = 268 Caption = 'Explore accounts with one of my Wallet Keys' OnChange = cbExploreMyAccountsChange TabOrder = 1 end object ebFindAccountNumber: TEdit Left = 95 - Height = 23 + Height = 22 Top = 33 Width = 83 OnChange = ebFindAccountNumberChange @@ -75,16 +75,16 @@ object FRMAccountExplorer: TFRMAccountExplorer end object cbFilterAccounts: TCheckBox Left = 308 - Height = 19 + Height = 18 Top = 35 - Width = 157 + Width = 161 Caption = 'Filter accounts by balance' OnChange = cbFilterAccountsChange TabOrder = 4 end object ebFilterAccountByBalanceMin: TEdit Left = 472 - Height = 23 + Height = 22 Hint = 'Min balance' Top = 33 Width = 83 @@ -94,7 +94,7 @@ object FRMAccountExplorer: TFRMAccountExplorer end object ebFilterAccountByBalanceMax: TEdit Left = 568 - Height = 23 + Height = 22 Hint = 'Max balance' Top = 33 Width = 83 @@ -140,17 +140,17 @@ object FRMAccountExplorer: TFRMAccountExplorer end object pnlAccounts: TPanel Left = 0 - Height = 385 + Height = 366 Top = 66 Width = 380 Align = alLeft BevelOuter = bvNone - ClientHeight = 385 + ClientHeight = 366 ClientWidth = 380 TabOrder = 1 object dgAccounts: TDrawGrid Left = 0 - Height = 351 + Height = 332 Top = 0 Width = 380 Align = alClient @@ -164,7 +164,7 @@ object FRMAccountExplorer: TFRMAccountExplorer object pnlAccountsInfo: TPanel Left = 0 Height = 34 - Top = 351 + Top = 332 Width = 380 Align = alBottom BevelOuter = bvNone @@ -173,33 +173,33 @@ object FRMAccountExplorer: TFRMAccountExplorer TabOrder = 1 object Label17: TLabel Left = 5 - Height = 15 + Height = 14 Top = 10 - Width = 53 + Width = 55 Caption = 'Accounts:' ParentColor = False end object Label19: TLabel Left = 136 - Height = 15 + Height = 14 Top = 10 - Width = 44 + Width = 45 Caption = 'Balance:' ParentColor = False end object lblAccountsCount: TLabel Left = 60 - Height = 15 + Height = 14 Top = 10 - Width = 18 + Width = 21 Caption = '000' ParentColor = False end object lblAccountsBalance: TLabel Left = 200 - Height = 15 + Height = 14 Top = 10 - Width = 18 + Width = 21 Caption = '000' ParentColor = False end @@ -245,7 +245,7 @@ object FRMAccountExplorer: TFRMAccountExplorer end object pcAccountsOptions: TPageControl Left = 385 - Height = 385 + Height = 366 Top = 66 Width = 483 ActivePage = tsAccountOperations @@ -254,11 +254,11 @@ object FRMAccountExplorer: TFRMAccountExplorer TabOrder = 2 object tsAccountOperations: TTabSheet Caption = 'Operations of selected Account' - ClientHeight = 357 + ClientHeight = 339 ClientWidth = 475 object dgAccountOperations: TDrawGrid Left = 0 - Height = 357 + Height = 339 Top = 0 Width = 475 Align = alClient @@ -471,8 +471,8 @@ object FRMAccountExplorer: TFRMAccountExplorer end end object meAccountExplorerMenu: TMainMenu - left = 240 - top = 16 + Left = 240 + Top = 16 object miTools: TMenuItem Caption = 'Tools' object miNewOperation: TMenuItem diff --git a/src/gui-experimental/UFRMAccountExplorer.pas b/src/gui-experimental/UFRMAccountExplorer.pas index 20b202ced..123939c5e 100644 --- a/src/gui-experimental/UFRMAccountExplorer.pas +++ b/src/gui-experimental/UFRMAccountExplorer.pas @@ -25,7 +25,7 @@ interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ComCtrls, ExtCtrls, StdCtrls, Buttons, Grids, Menus, - UCommon.UI, UBaseTypes, UGridUtils, UNode, UAccounts, UBlockChain; + UCommon.UI, UBaseTypes, UPCDataTypes, UGridUtils, UNode, UAccounts, UBlockChain; type diff --git a/src/gui-experimental/UFRMAccountSelect.pas b/src/gui-experimental/UFRMAccountSelect.pas index 5282d9018..de1bb581b 100644 --- a/src/gui-experimental/UFRMAccountSelect.pas +++ b/src/gui-experimental/UFRMAccountSelect.pas @@ -26,7 +26,7 @@ interface LCLIntf, LCLType, LMessages, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, UAccounts, Grids, StdCtrls, Buttons, ExtCtrls, UCommon.UI, - UWallet, UNode, UGridUtils, UFRMMemoText, UConst, UThread, UPCOrderedLists, UBaseTypes; + UWallet, UNode, UGridUtils, UFRMMemoText, UConst, UThread, UPCOrderedLists, UBaseTypes, UPCDataTypes; const CT_AS_MyAccounts = $0001; @@ -156,7 +156,7 @@ procedure TSearchThread.BCExecute; SetLength(FAccounts,0); c := 0; maxC := FSearchValues.SafeBox.AccountsCount-1; - validAccKey := TAccountComp.IsValidAccountKey(FSearchValues.inAccountKey,errors); + validAccKey := TAccountComp.IsValidAccountKey(FSearchValues.inAccountKey, FSearchValues.SafeBox.CurrentProtocol, errors); while (c<=maxC) And (Not Terminated) And (Not FDoStopSearch) do begin account := FSearchValues.SafeBox.Account(c); isValid := True; @@ -169,10 +169,10 @@ procedure TSearchThread.BCExecute; isValid := TAccountComp.IsAccountForSale(account.accountInfo); end; If IsValid and (FSearchValues.onlyForPublicSale) then begin - isValid := (TAccountComp.IsAccountForSale(account.accountInfo)) And (Not TAccountComp.IsAccountForSaleAcceptingTransactions(account.accountInfo)); + isValid := (TAccountComp.IsAccountForSale(account.accountInfo)) And (Not TAccountComp.IsAccountForSaleOrSwapAcceptingTransactions(account, FSearchValues.SafeBox.BlocksCount, FSearchValues.SafeBox.CurrentProtocol, nil)); // Skybuck: todo check/debug ! end; If IsValid and (FSearchValues.onlyForPrivateSaleToMe) then begin - isValid := (TAccountComp.IsAccountForSaleAcceptingTransactions(account.accountInfo)) And + isValid := ( TAccountComp.IsAccountForSaleOrSwapAcceptingTransactions(account,FSearchValues.SafeBox.BlocksCount, FSearchValues.SafeBox.CurrentProtocol, nil)) And // Skybuck: todo check/debug ! (Assigned(FSearchValues.inWalletKeys)) And (FSearchValues.inWalletKeys.IndexOfAccountKey(account.accountInfo.new_publicKey)>=0); end; If IsValid then begin diff --git a/src/gui-experimental/UFRMOperation.pas b/src/gui-experimental/UFRMOperation.pas index d65f7ef40..7b19b8fdd 100644 --- a/src/gui-experimental/UFRMOperation.pas +++ b/src/gui-experimental/UFRMOperation.pas @@ -27,7 +27,7 @@ interface Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, UCommon.UI, UNode, UWallet, UCrypto, Buttons, UBlockChain, UBaseTypes, - UAccounts, UFRMAccountSelect, ActnList, ComCtrls, Types, UCommon, UPCOrderedLists; + UAccounts, UFRMAccountSelect, ActnList, ComCtrls, Types, UCommon, UPCOrderedLists, UPCDataTypes; Const CM_PC_WalletKeysChanged = WM_USER + 1; @@ -143,7 +143,8 @@ TFRMOperation = class(TApplicationForm) FNode : TNode; FWalletKeys: TWalletKeys; FDefaultFee: Int64; - FEncodedPayload : TRawBytes; +// FEncodedPayload : TRawBytes; + FOperationPayload : TOperationPayload; FDisabled : Boolean; FSenderAccounts: TOrderedCardinalList; // TODO: TOrderedCardinalList should be replaced with a "TCardinalList" since signer account should be processed last procedure SetWalletKeys(const Value: TWalletKeys); @@ -178,7 +179,7 @@ implementation uses UPCEncryption, - UCoreUtils, UConst, UOpTransaction, UFRMWalletKeys, UUserInterface, UPCDataTypes; + UCoreUtils, UConst, UOpTransaction, UFRMWalletKeys, UUserInterface; {$R *.lfm} @@ -201,6 +202,11 @@ procedure TFRMOperation.actExecuteExecute(Sender: TObject); _newType : Word; _changeName, _changeType, _V2, _executeSigner : Boolean; _senderAccounts : TCardinalsArray; + LNewAccountState : TAccountState; + LAccountTarget : cardinal; + LHashLock : T32Bytes; + lChangeData : boolean; + LNewData : TRawBytes; label loop_start; begin if Not Assigned(WalletKeys) then raise Exception.Create('No wallet keys'); @@ -252,7 +258,7 @@ procedure TFRMOperation.actExecuteExecute(Sender: TObject); end; if dooperation then begin op := TOpTransaction.CreateTransaction(FNode.Bank.SafeBox.CurrentProtocol, - account.account,account.n_operation+1,destAccount.account,wk.PrivateKey,_amount,_fee,FEncodedPayload); + account.account,account.n_operation+1,destAccount.account,wk.PrivateKey,_amount,_fee,FOperationPayload); inc(_totalamount,_amount); inc(_totalfee,_fee); end; @@ -272,11 +278,11 @@ procedure TFRMOperation.actExecuteExecute(Sender: TObject); if uint64(_totalSignerFee) >= signerAccount.balance then _fee := 0 else if signerAccount.balance - uint64(_totalSignerFee) > uint64(DefaultFee) then _fee := DefaultFee else _fee := signerAccount.balance - uint64(_totalSignerFee); - op := TOpChangeKeySigned.Create(FNode.Bank.SafeBox.CurrentProtocol,signerAccount.account,signerAccount.n_operation+_signer_n_ops+1,account.account,wk.PrivateKey,_newOwnerPublicKey,_fee,FEncodedPayload); + op := TOpChangeKeySigned.Create(FNode.Bank.SafeBox.CurrentProtocol,signerAccount.account,signerAccount.n_operation+_signer_n_ops+1,account.account,wk.PrivateKey,_newOwnerPublicKey,_fee,FOperationPayload); inc(_signer_n_ops); inc(_totalSignerFee, _fee); end else begin - op := TOpChangeKey.Create(FNode.Bank.SafeBox.CurrentProtocol,account.account,account.n_operation+1,account.account,wk.PrivateKey,_newOwnerPublicKey,_fee,FEncodedPayload); + op := TOpChangeKey.Create(FNode.Bank.SafeBox.CurrentProtocol,account.account,account.n_operation+1,account.account,wk.PrivateKey,_newOwnerPublicKey,_fee,FOperationPayload); end; inc(_totalfee,_fee); operationstxt := 'Change private key to '+TAccountComp.GetECInfoTxt(_newOwnerPublicKey.EC_OpenSSL_NID); @@ -288,9 +294,11 @@ procedure TFRMOperation.actExecuteExecute(Sender: TObject); if signerAccount.balance>DefaultFee then _fee := DefaultFee else _fee := signerAccount.balance; if (rbListAccountForPublicSale.Checked) then begin - op := TOpListAccountForSale.CreateListAccountForSale(FNode.Bank.SafeBox.CurrentProtocol,signerAccount.account,signerAccount.n_operation+1+iAcc, account.account,_salePrice,_fee,destAccount.account,CT_TECDSA_Public_Nul,0,wk.PrivateKey,FEncodedPayload); + LHashLock := CT_HashLock_NUL; // Skybuck: check or debug ! LHashLock zero value array passed in function below perhaps replace with correctly filled hash array ! + // Skybuck: LNewAccountState parameter added, check or debug this later ! passed in function below ! LNewAccountState is not set yet ! + op := TOpListAccountForSaleOrSwap.CreateListAccountForSaleOrSwap(FNode.Bank.SafeBox.CurrentProtocol, LNewAccountState, signerAccount.account,signerAccount.n_operation+1+iAcc, account.account,_salePrice,_fee, destAccount.account,CT_TECDSA_Public_Nul,0,wk.PrivateKey,LHashLock, FOperationPayload); end else if (rbListAccountForPrivateSale.Checked) then begin - op := TOpListAccountForSale.CreateListAccountForSale(FNode.Bank.SafeBox.CurrentProtocol,signerAccount.account,signerAccount.n_operation+1+iAcc, account.account,_salePrice,_fee,destAccount.account,_newOwnerPublicKey,_lockedUntil,wk.PrivateKey,FEncodedPayload); + op := TOpListAccountForSaleOrSwap.CreateListAccountForSaleOrSwap(FNode.Bank.SafeBox.CurrentProtocol, LNewAccountState, signerAccount.account,signerAccount.n_operation+1+iAcc, account.account,_salePrice,_fee, destAccount.account,_newOwnerPublicKey,_lockedUntil,wk.PrivateKey,LHashLock, FOperationPayload); end else raise Exception.Create('Select Sale type'); {%endregion} end else if (PageControlOpType.ActivePage = tsDelist) then begin @@ -299,21 +307,22 @@ procedure TFRMOperation.actExecuteExecute(Sender: TObject); // Special fee account: if signerAccount.balance>DefaultFee then _fee := DefaultFee else _fee := signerAccount.balance; - op := TOpDelistAccountForSale.CreateDelistAccountForSale(FNode.Bank.SafeBox.CurrentProtocol,signerAccount.account,signerAccount.n_operation+1+iAcc,account.account,_fee,wk.PrivateKey,FEncodedPayload); + op := TOpDelistAccountForSale.CreateDelistAccountForSale(FNode.Bank.SafeBox.CurrentProtocol,signerAccount.account,signerAccount.n_operation+1+iAcc,account.account,_fee,wk.PrivateKey,FOperationPayload); {%endregion} end else if (PageControlOpType.ActivePage = tsBuyAccount) then begin {%region Operation: Buy Account} if Not UpdateOpBuyAccount(account,accountToBuy,_amount,_newOwnerPublicKey,errors) then raise Exception.Create(errors); op := TOpBuyAccount.CreateBuy(FNode.Bank.SafeBox.CurrentProtocol,account.account,account.n_operation+1,accountToBuy.account,accountToBuy.accountInfo.account_to_pay, - accountToBuy.accountInfo.price,_amount,_fee,_newOwnerPublicKey,wk.PrivateKey,FEncodedPayload); + accountToBuy.accountInfo.price,_amount,_fee,_newOwnerPublicKey,wk.PrivateKey,FOperationPayload); {%endregion} end else if (PageControlOpType.ActivePage = tsChangeInfo) then begin {%region Operation: Change Info} if not UpdateOpChangeInfo(account,signerAccount,_changeName,_newName,_changeType,_newType,errors) then raise Exception.Create(errors); if signerAccount.balance>DefaultFee then _fee := DefaultFee else _fee := signerAccount.balance; + // Skybuck: check or debug LChangeData and LNewData !! (newly added, no correct values yet set in these two variables !?!) op := TOpChangeAccountInfo.CreateChangeAccountInfo(FNode.Bank.SafeBox.CurrentProtocol,signerAccount.account,signerAccount.n_operation+1,account.account,wk.PrivateKey,false,CT_TECDSA_Public_Nul, - _changeName,_newName,_changeType,_newType,_fee,FEncodedPayload); + _changeName,_newName,_changeType,_newType,LChangeData,LNewData,_fee,FOperationPayload); {%endregion} end else begin raise Exception.Create('No operation selected'); @@ -1246,7 +1255,7 @@ function TFRMOperation.UpdatePayload(const SenderAccount: TAccount; begin valid := false; payload_encrypted := Nil; - FEncodedPayload := Nil; + FOperationPayload.payload_raw := nil; errors := 'Unknown error'; payload_u := memoPayload.Lines.Text; try @@ -1349,7 +1358,8 @@ function TFRMOperation.UpdatePayload(const SenderAccount: TAccount; lblEncryptionErrors.Caption := errors; lblPayloadLength.Caption := Format('(%db -> ?)',[length(payload_u)]); end; - FEncodedPayload := payload_encrypted; + FOperationPayload.payload_raw := payload_encrypted; + Result := valid; end; end; diff --git a/src/gui-experimental/UFRMPascalCoinWalletConfig.pas b/src/gui-experimental/UFRMPascalCoinWalletConfig.pas index e39115eb4..ce28b7142 100644 --- a/src/gui-experimental/UFRMPascalCoinWalletConfig.pas +++ b/src/gui-experimental/UFRMPascalCoinWalletConfig.pas @@ -84,7 +84,7 @@ TFRMPascalCoinWalletConfig = class(TApplicationForm) implementation -uses UConst, USettings, UAccounts, ULog, UCrypto, UFolderHelper, UWallet, UUserInterface, UCommon; +uses UConst, USettings, UAccounts, ULog, UCrypto, UFolderHelper, UWallet, UUserInterface, UCommon, UNode; {$R *.lfm} @@ -135,7 +135,13 @@ procedure TFRMPascalCoinWalletConfig.bbOkClick(Sender: TObject); procedure TFRMPascalCoinWalletConfig.bbOpenDataFolderClick(Sender: TObject); begin - OpenDocument(PChar(TFolderHelper.GetPascalCoinDataFolder)) + // Skybuck:TFolderHelper.GetPascalCoinDataFolder don't exist no more replaced with TNode.GetPascalCoinDataFolder + // OpenDocument(PChar(TFolderHelper.GetPascalCoinDataFolder)) + // Two solutions possible: + // 1: TNode.GetPascalCoinDataFolder + // 2. TFolderHelper.GetDataFolder(CT_PascalCoin_Data_Folder + // I will try TNode first if this does not work use solution 2. + OpenDocument(PChar(TNode.GetPascalCoinDataFolder)); end; procedure TFRMPascalCoinWalletConfig.bbUpdatePasswordClick(Sender: TObject); diff --git a/src/gui-experimental/UFRMPayloadDecoder.pas b/src/gui-experimental/UFRMPayloadDecoder.pas index c62e7849b..82edb04b2 100644 --- a/src/gui-experimental/UFRMPayloadDecoder.pas +++ b/src/gui-experimental/UFRMPayloadDecoder.pas @@ -330,7 +330,7 @@ procedure TFRMPayloadDecoder.SetOpResume(const Value: TOperationResume); else if Value.Fee=0 then lblFee.Font.Color := clGray else lblFee.Font.Color := clRed; ebOpHash.text := TCrypto.ToHexaString(Value.OperationHash); - memoOriginalPayloadInHexa.Lines.Text := TCrypto.ToHexaString(Value.OriginalPayload); + memoOriginalPayloadInHexa.Lines.Text := TCrypto.ToHexaString(Value.OriginalPayload.payload_raw); cbMethodPublicPayload.Checked := TSettings.AppParams.ParamByName['PayloadDecoder.notencrypted'].GetAsBoolean(true); cbUsingPrivateKeys.Checked := TSettings.AppParams.ParamByName['PayloadDecoder.usingprivatekeys'].GetAsBoolean(true); cbUsingPasswords.Checked := TSettings.AppParams.ParamByName['PayloadDecoder.usingpasswords'].GetAsBoolean(true); @@ -387,7 +387,7 @@ procedure TFRMPayloadDecoder.TryToDecode; begin ok := true; if Assigned(TWallet.Keys) then begin - raw := FOpResume.OriginalPayload; + raw := FOpResume.OriginalPayload.payload_raw; if Length(raw)>0 then begin // First try to a human readable... if (cbMethodPublicPayload.Checked) and (TCrypto.IsHumanReadable(raw)) then begin diff --git a/src/gui-experimental/UUserInterface.pas b/src/gui-experimental/UUserInterface.pas index 0b8ec90b0..3bcf39058 100644 --- a/src/gui-experimental/UUserInterface.pas +++ b/src/gui-experimental/UUserInterface.pas @@ -27,7 +27,7 @@ interface Dialogs, LCLType, UCommon, UCommon.UI, UBlockChain, UAccounts, UNode, UWallet, UConst, UFolderHelper, UGridUtils, URPC, UPoolMining, - ULog, UThread, UNetProtocol, UCrypto, UBaseTypes, + ULog, UThread, UNetProtocol, UCrypto, UBaseTypes, UPCDataTypes, UFRMMainForm, UCTRLSyncronization, UFRMAccountExplorer, UFRMOperationExplorer, UFRMPendingOperations, UFRMOperation, UFRMLogs, UFRMMessages, UFRMNodes, UFRMBlockExplorer, UFRMWalletKeys, UPCOrderedLists {$IFDEF TESTNET},UFRMRandomOperations, UAccountKeyStorage{$ENDIF}; @@ -342,8 +342,8 @@ class procedure TUserInterface.StartApplication(mainForm : TForm); FLog.SaveTypes := []; // Create data directories - If Not ForceDirectories(TFolderHelper.GetPascalCoinDataFolder) then - raise Exception.Create('Cannot create dir: '+TFolderHelper.GetPascalCoinDataFolder); + If Not ForceDirectories(TNode.GetPascalCoinDataFolder) then + raise Exception.Create('Cannot create dir: '+TNode.GetPascalCoinDataFolder); // Load settings TSettings.Load; @@ -378,7 +378,7 @@ class procedure TUserInterface.StartApplication(mainForm : TForm); // Initialise Database FNode.Bank.StorageClass := TFileStorage; - TFileStorage(FNode.Bank.Storage).DatabaseFolder := TFolderHelper.GetPascalCoinDataFolder+PathDelim+'Data'; + TFileStorage(FNode.Bank.Storage).DatabaseFolder := TNode.GetPascalCoinDataFolder+PathDelim+'Data'; TFileStorage(FNode.Bank.Storage).Initialize; // Reading database @@ -616,7 +616,7 @@ class procedure TUserInterface.OnSettingsChanged(Sender: TObject); FLog.SaveTypes := CT_TLogTypes_ALL else FLog.SaveTypes := CT_TLogTypes_DEFAULT; - FLog.FileName := TFolderHelper.GetPascalCoinDataFolder+PathDelim+'PascalCointWallet.log'; + FLog.FileName := TNode.GetPascalCoinDataFolder+PathDelim+'PascalCointWallet.log'; end else begin FLog.SaveTypes := []; FLog.FileName := ''; @@ -631,7 +631,7 @@ class procedure TUserInterface.OnSettingsChanged(Sender: TObject); finally FNode.UnlockMempoolWrite; end; - FNode.NodeLogFilename := TFolderHelper.GetPascalCoinDataFolder+PathDelim+'blocks.log'; + FNode.NodeLogFilename := TNode.GetPascalCoinDataFolder+PathDelim+'blocks.log'; end; if Assigned(FPoolMiningServer) then begin if FPoolMiningServer.Port <> TSettings.MinerServerRpcPort then begin diff --git a/src/gui-experimental/core.utils/UCoreUtils.pas b/src/gui-experimental/core.utils/UCoreUtils.pas index b082f40da..20fa07354 100644 --- a/src/gui-experimental/core.utils/UCoreUtils.pas +++ b/src/gui-experimental/core.utils/UCoreUtils.pas @@ -23,14 +23,14 @@ interface uses Classes, SysUtils, Forms, Dialogs, LCLType, UAccounts, UBlockChain, UNode, UWallet, - UBaseTypes, UCommon, UCoreObjects, UCommon.Collections, Generics.Defaults; + UBaseTypes, UCommon, UCoreObjects, UCommon.Collections, Generics.Defaults, UPCDataTypes; type { TAccountComparer } TAccountComparer = class(TComparer) - function Compare(constref ALeft, ARight: T): integer; override; + function Compare(constref ALeft, ARight: TAccount): integer; override; class function DoCompare(constref ALeft, ARight: TAccount): integer; inline; end; @@ -47,7 +47,7 @@ TAccountEqualityComparer = class(TEqualityComparer) { TAccountKeyComparer } TAccountKeyComparer = class(TComparer) - function Compare(constref ALeft, ARight: T): integer; override; + function Compare(constref ALeft, ARight: TAccountKey): integer; override; class function DoCompare(constref ALeft, ARight: TAccountKey): integer; inline; end; @@ -114,7 +114,8 @@ TWIZOperationsHelper = class private class function IsOwnerOfWallet(AAccount: TAccount; AWalletKeys: TWalletKeys; out AWalletKey: TWalletKey; var AErrorMessage: string): boolean; static; class function ValidateOperationsInput(const ASelectedAccounts: TArray; AWalletKeys: TWalletKeys; ANode: TNode; var AErrorMessage: string): boolean; static; - class function UpdatePayload(const ASenderPublicKey, ADestinationPublicKey: TAccountKey; const APayloadEncryptionMode: TPayloadEncryptionMode; const APayloadContent: string; var AEncodedPayloadBytes: TRawBytes; const APayloadEncryptionPassword: string; var AErrorMessage: string): boolean; static; + class function UpdatePayload(const ASenderPublicKey, ADestinationPublicKey: TAccountKey; const APayloadEncryptionMode: TPayloadEncryptionMode; const APayloadContent: string; var AEncodedPayloadBytes: TRawBytes; const APayloadEncryptionPassword: string; var AErrorMessage: string): boolean; static; overload; + class function UpdatePayload(const ASenderPublicKey, ADestinationPublicKey: TAccountKey; const APayloadEncryptionMode: TPayloadEncryptionMode; const APayloadContent: string; var AOperationPayload: TOperationPayload; const APayloadEncryptionPassword: string; var AErrorMessage: string): boolean; static; overload; class function SendPASCFinalizeAndDisplayMessage(const AOperationsTxt, AOperationToString: string; ANoOfOperations: integer; ATotalAmount, ATotalFee: int64; AOperationsHashTree: TOperationsHashTree; var AErrorMessage: string): boolean; static; class function OthersFinalizeAndDisplayMessage(const AOperationsTxt, AOperationToString: string; ANoOfOperations: integer; ATotalFee: int64; AOperationsHashTree: TOperationsHashTree; var AErrorMessage: string): boolean; static; public @@ -232,7 +233,7 @@ class function TCoreTool.GetUserAccounts(out Balance: TBalanceSummary; IncludePe i, j: integer; LAccs: TList; LAcc: TAccount; - LList: TOrderedCardinalList; + LList: TAccountsNumbersList; LMemPool: TPCOperationsComp; Disposables: TDisposables; begin @@ -268,7 +269,7 @@ class function TCoreTool.GetUserAccountNumbers: TArray; var i, j: integer; LAccs: TSortedList; - LList: TOrderedCardinalList; + LList: TAccountsNumbersList; Disposables: TDisposables; begin LAccs := Disposables.AddObject(TSortedList.Create) as TSortedList; @@ -478,7 +479,7 @@ function TNodeHelper.GetStoredOperationsAffectingAccounts(const AAccountNumbers: function GetAccountLastUpdateBlock(constref AAccount: TAccount): cardinal; begin - Result := AAccount.updated_block; + Result := AAccount.GetLastUpdatedBlock; end; begin @@ -496,8 +497,8 @@ function TNodeHelper.GetStoredOperationsAffectingAccounts(const AAccountNumbers: // if account is modified in block-tip LAcc := LAccounts[i]; LAccountBalances.AddOrSetValue(LAcc.account, LAcc.Balance); // track account balances - LBlockTraversal.Add(LAcc.updated_block); - MarkAccountAsScannableAtBlock(LAcc.account, LAcc.updated_block); + LBlockTraversal.Add(LAcc.GetLastUpdatedBlock); + MarkAccountAsScannableAtBlock(LAcc.account, LAcc.GetLastUpdatedBlock); end; // Traverse the set of "last updated" blocks in DESCENDING order @@ -544,7 +545,7 @@ class function TAccountEqualityComparer.AreEqual(constref ALeft, ARight: TAccoun Result := (ALeft.account = ARight.account) and (ALeft.balance = ARight.balance) and - (ALeft.updated_block = ARight.updated_block) and + (ALeft.GetLastUpdatedBlock = ARight.GetLastUpdatedBlock) and (ALeft.n_operation = ARight.n_operation) and TAccountKeyEqualityComparer.AreEqual(ALeft.accountInfo.accountKey, ARight.accountInfo.accountKey); end; @@ -556,7 +557,7 @@ class function TAccountEqualityComparer.CalcHashCode(constref AValue: TAccount): { TAccountKeyComparer } -function TAccountKeyComparer.Compare(constref ALeft, ARight: T): integer; +function TAccountKeyComparer.Compare(constref ALeft, ARight: TAccountKey): integer; begin Result := TAccountKeyComparer.DoCompare(ALeft, ARight); end; @@ -614,7 +615,8 @@ function TAccountHelper.GetInfoText(const ABank: TPCBank): utf8string; builder.Append(''); builder.Append(Format('Current balance: %s', [TAccountComp.FormatMoney(Self.balance)])); builder.Append(''); - builder.Append(Format('Updated on block: %d (%d blocks ago)', [Self.updated_block, ABank.BlocksCount - Self.updated_block])); + builder.Append(Format('Passively updated on block: %d (%d blocks ago)', [Self.updated_on_block_passive_mode, ABank.BlocksCount - Self.updated_on_block_passive_mode])); + builder.Append(Format('Actively updated on block: %d (%d blocks ago)', [Self.updated_on_block_active_mode, ABank.BlocksCount - Self.updated_on_block_active_mode])); builder.Append(Format('Public key type: %s', [TAccountComp.GetECInfoTxt(Self.accountInfo.accountKey.EC_OpenSSL_NID)])); builder.Append(Format('Base58 Public key: %s', [TAccountComp.AccountPublicKeyExport(Self.accountInfo.accountKey)])); if TAccountComp.IsAccountForSale(Self.accountInfo) then @@ -623,7 +625,9 @@ function TAccountHelper.GetInfoText(const ABank: TPCBank): utf8string; builder.Append('** Account is for sale: **'); builder.Append(Format('Price: %s', [TAccountComp.FormatMoney(Self.accountInfo.price)])); builder.Append(Format('Seller account (where to pay): %s', [TAccountComp.AccountNumberToAccountTxtNumber(Self.accountInfo.account_to_pay)])); - if TAccountComp.IsAccountForSaleAcceptingTransactions(Self.accountInfo) then +// if TAccountComp.IsAccountForSaleAcceptingTransactions(Self.accountInfo) then // Skybuck *old* + // Skybuck: funtionality partially restored, unsure of last parameter, unsure of parameter 2 and 3, needs testing and debugging + if TAccountComp.IsAccountForSaleOrSwapAcceptingTransactions(Self, ABank.SafeBox.BlocksCount, ABank.SafeBox.CurrentProtocol, nil ) then // Skybuck *new* begin builder.Append(''); builder.Append('** Private sale **'); @@ -669,12 +673,12 @@ function TOperationResumeHelper.GetInfoText(const ABank: TPCBank): utf8string; builder.Add(Format('Operation Hash (ophash): %s', [TCrypto.ToHexaString(Self.OperationHash)])); if (Self.OperationHash_OLD <> nil) then builder.Add(Format('Old Operation Hash (old_ophash): %s', [TCrypto.ToHexaString(Self.OperationHash_OLD)])); - if (Self.OriginalPayload <> nil) then + if (Self.OriginalPayload.payload_raw <> nil) then begin - builder.Add(Format('Payload length:%d', [length(Self.OriginalPayload)])); + builder.Add(Format('Payload length:%d', [length(Self.OriginalPayload.payload_raw)])); if Self.PrintablePayload <> '' then builder.Add(Format('Payload (human): %s', [Self.PrintablePayload])); - builder.Add(Format('Payload (Hexadecimal): %s', [TCrypto.ToHexaString(Self.OriginalPayload)])); + builder.Add(Format('Payload (Hexadecimal): %s', [TCrypto.ToHexaString(Self.OriginalPayload.payload_raw)])); end; if Self.Balance >= 0 then builder.Add(Format('Final balance: %s', [TAccountComp.FormatMoney(Self.Balance)])); @@ -857,6 +861,11 @@ class function TWIZOperationsHelper.UpdatePayload(const ASenderPublicKey, ADesti end; end; +class function TWIZOperationsHelper.UpdatePayload(const ASenderPublicKey, ADestinationPublicKey: TAccountKey; const APayloadEncryptionMode: TPayloadEncryptionMode; const APayloadContent: string; var AOperationPayload: TOperationPayload; const APayloadEncryptionPassword: string; var AErrorMessage: string): boolean; +begin + result := UpdatePayload( ASenderPublicKey, ADestinationPublicKey, APayloadEncryptionMode, APayloadContent, AOperationPayload.payload_raw, APayloadEncryptionPassword, AErrorMessage ); +end; + class function TWIZOperationsHelper.OthersFinalizeAndDisplayMessage(const AOperationsTxt, AOperationToString: string; ANoOfOperations: integer; ATotalFee: int64; AOperationsHashTree: TOperationsHashTree; var AErrorMessage: string): boolean; var LAuxs, LOperationsTxt: string; @@ -921,7 +930,7 @@ class function TWIZOperationsHelper.ExecuteSendPASC(const ASelectedAccounts: TAr LOperationsTxt, LOperationToString, LTemp: string; LAccountIdx, LNoOfOperations: integer; LCurrentAccount: TAccount; - LPayloadEncodedBytes: TRawBytes; + LOperationPayload : TOperationPayload; begin LWalletKeys := TWallet.Keys; @@ -951,7 +960,7 @@ class function TWIZOperationsHelper.ExecuteSendPASC(const ASelectedAccounts: TAr Exit(False); end; - if not UpdatePayload(LCurrentAccount.accountInfo.accountKey, ADestinationAccount.accountInfo.accountKey, APayloadEncryptionMode, APayloadContent, LPayloadEncodedBytes, APayloadEncryptionPassword, AErrorMessage) then + if not UpdatePayload(LCurrentAccount.accountInfo.accountKey, ADestinationAccount.accountInfo.accountKey, APayloadEncryptionMode, APayloadContent, LOperationPayload, APayloadEncryptionPassword, AErrorMessage) then begin AErrorMessage := Format('Error Encoding Payload Of Selected Account "%s. ", Specific Error Is "%s"', [LCurrentAccount.AccountString, AErrorMessage]); Exit(False); @@ -987,7 +996,7 @@ class function TWIZOperationsHelper.ExecuteSendPASC(const ASelectedAccounts: TAr if LDoOperation then begin LPCOperation := TOpTransaction.CreateTransaction( - TNode.Node.Bank.Safebox.CurrentProtocol, LCurrentAccount.account, LCurrentAccount.n_operation + 1, ADestinationAccount.account, LWalletKey.PrivateKey, LAmount, LFee, LPayloadEncodedBytes); + TNode.Node.Bank.Safebox.CurrentProtocol, LCurrentAccount.account, LCurrentAccount.n_operation + 1, ADestinationAccount.account, LWalletKey.PrivateKey, LAmount, LFee, LOperationPayload); try LTemp := Format('%d. Transfer of %s PASC from %s to %s %s', [LNoOfOperations + 1, TAccountComp.FormatMoney(LAmount), LCurrentAccount.AccountString, ADestinationAccount.AccountString, sLineBreak]); if LOperationsTxt <> '' then @@ -1036,7 +1045,7 @@ class function TWIZOperationsHelper.ExecuteChangeKey(const ASelectedAccounts: TA LOperationsTxt, LOperationToString, LTemp: string; LAccountIdx, LNoOfOperations: integer; LCurrentAccount, LSignerAccount: TAccount; - LPayloadEncodedBytes: TRawBytes; + LOperationPayload : TOperationPayload; label loop_start; begin @@ -1091,7 +1100,7 @@ class function TWIZOperationsHelper.ExecuteChangeKey(const ASelectedAccounts: TA else LSignerAccount := LCurrentAccount; - if not UpdatePayload(LCurrentAccount.accountInfo.accountKey, APublicKey, APayloadEncryptionMode, APayloadContent, LPayloadEncodedBytes, APayloadEncryptionPassword, AErrorMessage) then + if not UpdatePayload(LCurrentAccount.accountInfo.accountKey, APublicKey, APayloadEncryptionMode, APayloadContent, LOperationPayload, APayloadEncryptionPassword, AErrorMessage) then begin AErrorMessage := Format('Error Encoding Payload Of Selected Account "%s. ", Specific Error Is "%s"', [LCurrentAccount.AccountString, AErrorMessage]); Exit(False); @@ -1119,11 +1128,11 @@ class function TWIZOperationsHelper.ExecuteChangeKey(const ASelectedAccounts: TA LPCOperation := TOpChangeKeySigned.Create(LNode.Bank.Safebox.CurrentProtocol, LSignerAccount.account, LSignerAccount.n_operation + LNoOfOperations + 1, LCurrentAccount.account, - LWalletKey.PrivateKey, APublicKey, LFee, LPayloadEncodedBytes); + LWalletKey.PrivateKey, APublicKey, LFee, LOperationPayload ); end else LPCOperation := TOpChangeKey.Create(LNode.Bank.Safebox.CurrentProtocol, LCurrentAccount.account, LCurrentAccount.n_operation + - 1, LCurrentAccount.account, LWalletKey.PrivateKey, APublicKey, LFee, LPayloadEncodedBytes); + 1, LCurrentAccount.account, LWalletKey.PrivateKey, APublicKey, LFee, LOperationPayload); try LTemp := Format('%d. Change Key To %s', [LNoOfOperations + 1, TAccountComp.GetECInfoTxt(APublicKey.EC_OpenSSL_NID), sLineBreak]); @@ -1171,7 +1180,9 @@ class function TWIZOperationsHelper.ExecuteEnlistAccountForSale(const ASelectedA LOperationsTxt, LOperationToString, LTemp: string; LAccountIdx, LNoOfOperations: integer; LCurrentAccount, LSignerAccount: TAccount; - LPayloadEncodedBytes: TRawBytes; + LOperationPayload : TOperationPayload; + LANewAccountState : TAccountState; + LHashLock : T32Bytes; begin LWalletKeys := TWallet.Keys; @@ -1236,26 +1247,31 @@ class function TWIZOperationsHelper.ExecuteEnlistAccountForSale(const ASelectedA else LFee := LSignerAccount.balance; - if not UpdatePayload(LCurrentAccount.accountInfo.accountKey, LSignerAccount.accountInfo.accountKey, APayloadEncryptionMode, APayloadContent, LPayloadEncodedBytes, APayloadEncryptionPassword, AErrorMessage) then + if not UpdatePayload(LCurrentAccount.accountInfo.accountKey, LSignerAccount.accountInfo.accountKey, APayloadEncryptionMode, APayloadContent, LOperationPayload, APayloadEncryptionPassword, AErrorMessage) then begin AErrorMessage := Format('Error Encoding Payload Of Selected Account "%s. ", Specific Error Is "%s"', [LCurrentAccount.AccountString, AErrorMessage]); Exit(False); end; + LHashLock := CT_HashLock_NUL; // Skybuck: check or debug if this needs to be a parameter, calculated or if it can be a nil record. Passed below into function + case AAccountSaleMode of akaPublicSale: - - LPCOperation := TOpListAccountForSale.CreateListAccountForSale( - LNode.Bank.Safebox.CurrentProtocol, LSignerAccount.account, LSignerAccount.n_operation + 1 + LAccountIdx, + LPCOperation := TOpListAccountForSaleOrSwap.CreateListAccountForSaleOrSwap( + LNode.Bank.Safebox.CurrentProtocol, + LANewAccountState, // Skybuck: check or debug LANewAccountState, perhaps this needs to be a parameter in the above function header ?!? + LSignerAccount.account, LSignerAccount.n_operation + 1 + LAccountIdx, LCurrentAccount.account, ASalePrice, LFee, ASellerAccount.account, - APublicKey, 0, LWalletKey.PrivateKey, LPayloadEncodedBytes); + APublicKey, 0, LWalletKey.PrivateKey, LHashLock, LOperationPayload); // Skybuck: check or debug LHashLock ! Perhaps needs to be a parameter to above function header ?!? akaPrivateSale: - LPCOperation := TOpListAccountForSale.CreateListAccountForSale( - LNode.Bank.Safebox.CurrentProtocol, LSignerAccount.account, LSignerAccount.n_operation + 1 + LAccountIdx, + LPCOperation := TOpListAccountForSaleOrSwap.CreateListAccountForSaleOrSwap( + LNode.Bank.Safebox.CurrentProtocol, + LANewAccountState, // Skybuck not sure if this must be a parameter or acquired locally or left empty, for now adding to code. + LSignerAccount.account, LSignerAccount.n_operation + 1 + LAccountIdx, LCurrentAccount.account, ASalePrice, LFee, ASellerAccount.account, - APublicKey, ALockedUntilBlock, LWalletKey.PrivateKey, LPayloadEncodedBytes) + APublicKey, ALockedUntilBlock, LWalletKey.PrivateKey, CT_HashLock_NUL, LOperationPayload); // Skybuck: somebody check if hashlock can be a nil record else raise Exception.Create('Invalid Account Sale Type') end; @@ -1306,7 +1322,7 @@ class function TWIZOperationsHelper.ExecuteDelistAccountFromSale(const ASelected LOperationsTxt, LOperationToString, LTemp: string; LAccountIdx, LNoOfOperations: integer; LCurrentAccount, LSignerAccount: TAccount; - LPayloadEncodedBytes: TRawBytes; + LOperationPayload : TOperationPayload; begin LWalletKeys := TWallet.Keys; @@ -1366,7 +1382,7 @@ class function TWIZOperationsHelper.ExecuteDelistAccountFromSale(const ASelected else LFee := LSignerAccount.balance; - if not UpdatePayload(LCurrentAccount.accountInfo.accountKey, LSignerAccount.accountInfo.accountKey, APayloadEncryptionMode, APayloadContent, LPayloadEncodedBytes, APayloadEncryptionPassword, AErrorMessage) then + if not UpdatePayload(LCurrentAccount.accountInfo.accountKey, LSignerAccount.accountInfo.accountKey, APayloadEncryptionMode, APayloadContent, LOperationPayload, APayloadEncryptionPassword, AErrorMessage) then begin AErrorMessage := Format('Error Encoding Payload Of Selected Account "%s. ", Specific Error Is "%s"', [LCurrentAccount.AccountString, AErrorMessage]); Exit(False); @@ -1374,7 +1390,7 @@ class function TWIZOperationsHelper.ExecuteDelistAccountFromSale(const ASelected LPCOperation := TOpDelistAccountForSale.CreateDelistAccountForSale(LNode.Bank.Safebox.CurrentProtocol, LSignerAccount.account, LSignerAccount.n_operation + 1 + LAccountIdx, LCurrentAccount.account, LFee, LWalletKey.PrivateKey, - LPayloadEncodedBytes); + LOperationPayload); try LTemp := Format('%d. Delist Account %s From Sale %s', [LNoOfOperations + 1, LCurrentAccount.DisplayString, sLineBreak]); @@ -1424,6 +1440,9 @@ class function TWIZOperationsHelper.ExecuteChangeAccountInfo(const ASelectedAcco LCurrentAccount, LSignerAccount: TAccount; LPayloadEncodedBytes, LNewName: TRawBytes; LChangeType, LChangeName: boolean; + LChangeData : boolean; + LNewData : TRawBytes; + LOperationPayload : TOperationPayload; begin LWalletKeys := TWallet.Keys; @@ -1523,10 +1542,9 @@ class function TWIZOperationsHelper.ExecuteChangeAccountInfo(const ASelectedAcco Exit(False); end; - - LPCOperation := TOpChangeAccountInfo.CreateChangeAccountInfo(LNode.Bank.Safebox.CurrentProtocol, + LPCOperation := TOpChangeAccountInfo.CreateChangeAccountInfo( LNode.Bank.Safebox.CurrentProtocol, LSignerAccount.account, LSignerAccount.n_operation + 1, LCurrentAccount.account, LWalletKey.PrivateKey, False, CT_TECDSA_Public_Nul, - LChangeName, LNewName, LChangeType, ANewType, LFee, LPayloadEncodedBytes); + LChangeName, LNewName, LChangeType, ANewType, LChangeData, LNewData, LFee, LOperationPayload); try if (LChangeName) and (LChangeType) then @@ -1587,6 +1605,7 @@ class function TWIZOperationsHelper.ExecuteBuyAccount(const ASelectedAccounts: T LAccountIdx, LNoOfOperations, LAccNumberIndex: integer; LCurrentAccount, LSignerAccount: TAccount; LPayloadEncodedBytes, LNewName: TRawBytes; + LOperationPayload : TOperationPayload; begin LWalletKeys := TWallet.Keys; @@ -1644,8 +1663,9 @@ class function TWIZOperationsHelper.ExecuteBuyAccount(const ASelectedAccounts: T Exit(False); end; + LOperationPayload.payload_raw := LPayloadEncodedBytes; LPCOperation := TOpBuyAccount.CreateBuy(LNode.Bank.Safebox.CurrentProtocol, LCurrentAccount.account, LCurrentAccount.n_operation + 1, AAccountToBuy.account, AAccountToBuy.accountInfo.account_to_pay, - AAccountToBuy.accountInfo.price, AAmount, LFee, ANewOwnerPublicKey, LWalletKey.PrivateKey, LPayloadEncodedBytes); + AAccountToBuy.accountInfo.price, AAmount, LFee, ANewOwnerPublicKey, LWalletKey.PrivateKey, LOperationPayload); try LTemp := Format('%d. Buy Account %s for %s PASC %s', [LNoOfOperations + 1, AAccountToBuy.AccountString, TAccountComp.FormatMoney(AAmount), sLineBreak]); diff --git a/src/gui-experimental/core.utils/UDataSources.pas b/src/gui-experimental/core.utils/UDataSources.pas index e48e70d7e..97cbe26ef 100644 --- a/src/gui-experimental/core.utils/UDataSources.pas +++ b/src/gui-experimental/core.utils/UDataSources.pas @@ -21,7 +21,7 @@ interface uses Classes, SysUtils, UAccounts, UNode, UBlockchain, UCrypto, UCoreObjects, UCommon, UMemory, UConst, UCommon.Data, UCoreUtils, UBaseTypes, - UCommon.Collections, Generics.Collections, Generics.Defaults, syncobjs; + UCommon.Collections, Generics.Collections, Generics.Defaults, syncobjs, UPCDataTypes; type @@ -189,7 +189,7 @@ function TAccountsDataSourceBase.GetItemField(constref AItem: TAccount; const AB else if ABindingName = 'NOperation' then Result := AItem.n_operation else if ABindingName = 'LastUpdatedBlock' then - Result := AItem.updated_block + Result := AItem.GetLastUpdatedBlock else raise Exception.Create(Format('Field not found "%s"', [ABindingName])); end; @@ -605,7 +605,7 @@ procedure TBlockSummarySource.FetchAll(const AContainer: TList); for LIdx := LEnd downto LStart do begin LBlockChainData := CT_BlockSummary_NUL; - LOperationBlock := LNode.Bank.SafeBox.Block(LIdx).blockchainInfo; + LOperationBlock := LNode.Bank.SafeBox.GetBlock(LIdx).blockchainInfo; LBlockChainData.Block := LOperationBlock.block; LBlockChainData.Timestamp := LOperationBlock.timestamp; LBlockChainData.BlockProtocolVersion := LOperationBlock.protocol_version; @@ -623,7 +623,7 @@ procedure TBlockSummarySource.FetchAll(const AContainer: TList); LBlockChainData.MinerPayload := LOperationBlock.block_payload; LBlockChainData.PoW := LOperationBlock.proof_of_work; LBlockChainData.SafeBoxHash := LOperationBlock.initial_safe_box_hash; - LBlockChainData.AccumulatedWork := LNode.Bank.SafeBox.Block(LBlockChainData.Block).AccumulatedWork; + LBlockChainData.AccumulatedWork := LNode.Bank.SafeBox.GetBlock(LBlockChainData.Block).AccumulatedWork; if (LNode.Bank.LoadOperations(LOperationComp, LIdx)) then begin LBlockChainData.OperationsCount := LOperationComp.Count; LBlockChainData.Volume := LOperationComp.OperationsHashTree.TotalAmount + LOperationComp.OperationsHashTree.TotalFee; diff --git a/src/gui-experimental/wizards/operations/UWIZBuyAccount_Details.pas b/src/gui-experimental/wizards/operations/UWIZBuyAccount_Details.pas index 26ad5cc7e..9558cba7b 100644 --- a/src/gui-experimental/wizards/operations/UWIZBuyAccount_Details.pas +++ b/src/gui-experimental/wizards/operations/UWIZBuyAccount_Details.pas @@ -70,6 +70,7 @@ implementation UCrypto, UMemory, UAccounts, + UPCDataTypes, USettings, UCoreUtils, UBaseTypes, diff --git a/src/gui-experimental/wizards/operations/UWIZChangeAccountInfo.pas b/src/gui-experimental/wizards/operations/UWIZChangeAccountInfo.pas index 0108ea6d7..bd126b40e 100644 --- a/src/gui-experimental/wizards/operations/UWIZChangeAccountInfo.pas +++ b/src/gui-experimental/wizards/operations/UWIZChangeAccountInfo.pas @@ -43,6 +43,7 @@ implementation UWallet, UCommon, UAccounts, + UPCDataTypes, UCoreUtils, UWIZOperationSelected, UWIZChangeAccountInfo_Details, diff --git a/src/gui-experimental/wizards/operations/UWIZChangeAccountInfo_Details.lfm b/src/gui-experimental/wizards/operations/UWIZChangeAccountInfo_Details.lfm index f1140dfb6..a8a6d65d1 100644 --- a/src/gui-experimental/wizards/operations/UWIZChangeAccountInfo_Details.lfm +++ b/src/gui-experimental/wizards/operations/UWIZChangeAccountInfo_Details.lfm @@ -8,7 +8,7 @@ object WIZChangeAccountInfo_Details: TWIZChangeAccountInfo_Details Caption = 'WIZChangeAccountInfo_Details' ClientHeight = 379 ClientWidth = 450 - Visible = False + LCLVersion = '2.0.10.0' object gbName: TGroupBox Left = 8 Height = 124 @@ -16,7 +16,7 @@ object WIZChangeAccountInfo_Details: TWIZChangeAccountInfo_Details Width = 431 Anchors = [akTop, akLeft, akRight] Caption = 'Name' - ClientHeight = 104 + ClientHeight = 105 ClientWidth = 427 TabOrder = 0 object txtName: TEdit @@ -35,18 +35,18 @@ object WIZChangeAccountInfo_Details: TWIZChangeAccountInfo_Details end object lblNameNotice: TLabel Left = 16 - Height = 15 + Height = 14 Top = 8 - Width = 121 + Width = 130 Caption = 'Please enter new name' ParentColor = False ParentFont = False end object lblNameDetails: TLabel - Left = 333 - Height = 15 + Left = 329 + Height = 14 Top = 8 - Width = 74 + Width = 78 Anchors = [akTop, akRight] Caption = 'Name Details' Font.Style = [fsBold] @@ -61,7 +61,7 @@ object WIZChangeAccountInfo_Details: TWIZChangeAccountInfo_Details Width = 431 Anchors = [akTop, akLeft, akRight] Caption = 'Type' - ClientHeight = 102 + ClientHeight = 103 ClientWidth = 427 ParentFont = False TabOrder = 1 @@ -82,17 +82,17 @@ object WIZChangeAccountInfo_Details: TWIZChangeAccountInfo_Details end object lblTypeNotice: TLabel Left = 16 - Height = 15 + Height = 14 Top = 11 - Width = 114 + Width = 125 Caption = 'Please enter new type' ParentColor = False end object lblTypeDetails: TLabel - Left = 340 - Height = 15 + Left = 333 + Height = 14 Top = 8 - Width = 67 + Width = 74 Anchors = [akTop, akRight] Caption = 'Type Details' Font.Style = [fsBold] @@ -107,22 +107,22 @@ object WIZChangeAccountInfo_Details: TWIZChangeAccountInfo_Details Width = 431 Anchors = [akTop, akLeft, akRight, akBottom] Caption = 'Options' - ClientHeight = 69 + ClientHeight = 70 ClientWidth = 427 TabOrder = 2 object chkCustomFee: TCheckBox Left = 16 - Height = 19 + Height = 18 Top = 8 - Width = 164 + Width = 174 Caption = 'Allow me to choose the fee' TabOrder = 0 end object chkPayload: TCheckBox Left = 16 - Height = 19 + Height = 18 Top = 40 - Width = 158 + Width = 163 Caption = 'Attach a message payload' TabOrder = 1 end diff --git a/src/gui-experimental/wizards/operations/UWIZChangeAccountInfo_Details.pas b/src/gui-experimental/wizards/operations/UWIZChangeAccountInfo_Details.pas index 3978aff09..3742ca36e 100644 --- a/src/gui-experimental/wizards/operations/UWIZChangeAccountInfo_Details.pas +++ b/src/gui-experimental/wizards/operations/UWIZChangeAccountInfo_Details.pas @@ -64,6 +64,7 @@ implementation UCommon, UMemory, UAccounts, + UPCDataTypes, USettings, UCoreUtils, UBaseTypes, diff --git a/src/gui-experimental/wizards/operations/UWIZChangeKey.pas b/src/gui-experimental/wizards/operations/UWIZChangeKey.pas index 437d6410c..8c749ae6b 100644 --- a/src/gui-experimental/wizards/operations/UWIZChangeKey.pas +++ b/src/gui-experimental/wizards/operations/UWIZChangeKey.pas @@ -15,7 +15,7 @@ interface uses - Classes, SysUtils, Forms, Dialogs, UCrypto, UCommon, UWizard, UAccounts, UCoreObjects, UWIZOperation, LCLType; + Classes, SysUtils, Forms, Dialogs, UCrypto, UCommon, UWizard, UAccounts, UPCDataTypes, UCoreObjects, UWIZOperation, LCLType; type diff --git a/src/gui-experimental/wizards/operations/UWIZChangeKey_EnterKey.pas b/src/gui-experimental/wizards/operations/UWIZChangeKey_EnterKey.pas index 83bbf9e6e..360a6cd55 100644 --- a/src/gui-experimental/wizards/operations/UWIZChangeKey_EnterKey.pas +++ b/src/gui-experimental/wizards/operations/UWIZChangeKey_EnterKey.pas @@ -49,6 +49,7 @@ implementation uses UAccounts, + UPCDataTypes, USettings, UCoreObjects, UWIZOperationFee_Custom, diff --git a/src/gui-experimental/wizards/operations/UWIZChangeKey_SelectKey.pas b/src/gui-experimental/wizards/operations/UWIZChangeKey_SelectKey.pas index b1e06d191..1a1eb0e82 100644 --- a/src/gui-experimental/wizards/operations/UWIZChangeKey_SelectKey.pas +++ b/src/gui-experimental/wizards/operations/UWIZChangeKey_SelectKey.pas @@ -55,6 +55,7 @@ implementation UCommon, UCrypto, UAccounts, + UPCDataTypes, USettings, UCoreObjects, UWIZOperationFee_Custom, diff --git a/src/gui-experimental/wizards/operations/UWIZEnlistAccountForSale.pas b/src/gui-experimental/wizards/operations/UWIZEnlistAccountForSale.pas index fc34acd13..c93ca3d2a 100644 --- a/src/gui-experimental/wizards/operations/UWIZEnlistAccountForSale.pas +++ b/src/gui-experimental/wizards/operations/UWIZEnlistAccountForSale.pas @@ -44,6 +44,7 @@ implementation UCrypto, UWallet, UAccounts, + UPCDataTypes, UCoreUtils, UCoreObjects, UWIZOperationSelected, diff --git a/src/gui-experimental/wizards/operations/UWIZEnlistAccountForSale_EnterSeller.pas b/src/gui-experimental/wizards/operations/UWIZEnlistAccountForSale_EnterSeller.pas index 3b3fcc097..18bee230c 100644 --- a/src/gui-experimental/wizards/operations/UWIZEnlistAccountForSale_EnterSeller.pas +++ b/src/gui-experimental/wizards/operations/UWIZEnlistAccountForSale_EnterSeller.pas @@ -54,6 +54,7 @@ implementation UNode, UWallet, UAccounts, + UPCDataTypes, UCoreUtils, UBaseTypes, UFRMAccountSelect; diff --git a/src/gui-experimental/wizards/operations/UWIZOperation.pas b/src/gui-experimental/wizards/operations/UWIZOperation.pas index bcdc65259..1be9d388f 100644 --- a/src/gui-experimental/wizards/operations/UWIZOperation.pas +++ b/src/gui-experimental/wizards/operations/UWIZOperation.pas @@ -22,7 +22,7 @@ interface uses - Classes, SysUtils, UAccounts, UWallet, UBaseTypes, UCoreObjects; + Classes, SysUtils, UAccounts, UWallet, UBaseTypes, UCoreObjects, UPCDataTypes; type diff --git a/src/gui-experimental/wizards/operations/UWIZOperationConfirmation.pas b/src/gui-experimental/wizards/operations/UWIZOperationConfirmation.pas index a3d5f6a59..cf0a7ea63 100644 --- a/src/gui-experimental/wizards/operations/UWIZOperationConfirmation.pas +++ b/src/gui-experimental/wizards/operations/UWIZOperationConfirmation.pas @@ -57,6 +57,7 @@ implementation UWallet, UCommon, UAccounts, + UPCDataTypes, UCoreUtils, UCoreObjects, UCommon.UI, diff --git a/src/gui-experimental/wizards/operations/UWIZOperationFee_Custom.pas b/src/gui-experimental/wizards/operations/UWIZOperationFee_Custom.pas index 6f3729c8f..02b34b9c8 100644 --- a/src/gui-experimental/wizards/operations/UWIZOperationFee_Custom.pas +++ b/src/gui-experimental/wizards/operations/UWIZOperationFee_Custom.pas @@ -57,6 +57,7 @@ implementation uses UAccounts, + UPCDataTypes, USettings, UCoreUtils, UCoreObjects, diff --git a/src/gui-experimental/wizards/operations/UWIZOperationSelected.pas b/src/gui-experimental/wizards/operations/UWIZOperationSelected.pas index 681076b02..9a7f767f5 100644 --- a/src/gui-experimental/wizards/operations/UWIZOperationSelected.pas +++ b/src/gui-experimental/wizards/operations/UWIZOperationSelected.pas @@ -56,6 +56,7 @@ implementation UCoreObjects, UCommon.Data, UDataSources, + UPCDataTypes, Generics.Collections; type diff --git a/src/gui-experimental/wizards/operations/UWIZOperationSigner_Select.pas b/src/gui-experimental/wizards/operations/UWIZOperationSigner_Select.pas index 07019a759..8ff6027e5 100644 --- a/src/gui-experimental/wizards/operations/UWIZOperationSigner_Select.pas +++ b/src/gui-experimental/wizards/operations/UWIZOperationSigner_Select.pas @@ -51,6 +51,7 @@ implementation uses UAccounts, + UPCDataTypes, UCoreObjects; { TWIZOperationSigner_Select } diff --git a/src/gui-experimental/wizards/operations/UWIZSendPASC_Details.pas b/src/gui-experimental/wizards/operations/UWIZSendPASC_Details.pas index 70fc9474c..c83062e22 100644 --- a/src/gui-experimental/wizards/operations/UWIZSendPASC_Details.pas +++ b/src/gui-experimental/wizards/operations/UWIZSendPASC_Details.pas @@ -68,6 +68,7 @@ implementation USettings, UCoreUtils, UBaseTypes, + UPCDataTypes, UCoreObjects, UBlockChain, UFRMAccountSelect, diff --git a/src/gui-experimental/wizards/wallet/UWIZAddKey_ImportPubKey.pas b/src/gui-experimental/wizards/wallet/UWIZAddKey_ImportPubKey.pas index e3dd87ecd..b51b4d968 100644 --- a/src/gui-experimental/wizards/wallet/UWIZAddKey_ImportPubKey.pas +++ b/src/gui-experimental/wizards/wallet/UWIZAddKey_ImportPubKey.pas @@ -39,7 +39,8 @@ implementation {$R *.lfm} uses - UAccounts; + UAccounts, + UPCDataTypes; { TWIZAddKey_ImportPubKey } diff --git a/src/libraries/abstractmem/ConfigAbstractMem.inc b/src/libraries/abstractmem/ConfigAbstractMem.inc index 9131f9f32..122364bb1 100644 --- a/src/libraries/abstractmem/ConfigAbstractMem.inc +++ b/src/libraries/abstractmem/ConfigAbstractMem.inc @@ -1,7 +1,7 @@ { This file is part of AbstractMem framework - Copyright (C) 2020 Albert Molina - bpascalblockchain@gmail.com + Copyright (C) 2020-2021 Albert Molina - bpascalblockchain@gmail.com https://github.com/PascalCoinDev/ @@ -27,6 +27,9 @@ {.$define ABSTRACTMEM_ENABLE_STATS} // define this to activate some stats on objects usefull for testing +{.$define ABSTRACTMEM_CIRCULAR_SEARCH_PROTECTION} +// define this to prevent circular search on tree nodes + {$if (defined(ABSTRACTMEM_TESTING_MODE)) or (defined(ABSTRACTMEM_USE_TLOG))}{$define ABSTRACTMEM_ENABLE_STATS}{$endif} { @@ -39,9 +42,45 @@ Version 1.0 - May 2020 - Integration with PascalCoin project and final tests + + Version 1.1 - Nov 2020 + - Improve CacheMem performance using predefined size blocks by default on Cache, this increases speed (on PascalCoin tested) up to 4x vs previous version + - Added tests + - Fixed bug on CacheMem when replacing initial position of buffer + + Version 1.2 - Jan 2021 + - Added TAbstractBTree - Standard B-Tree implementation for use on AbstractMem Library - Multithread protected + - Added TAbstractMemBTreeData that implements a generic implementation for TAbstractBTree on TAbstractMem + - Added ABSTRACTMEM_CIRCULAR_SEARCH_PROTECTION compiler directive to prevent circular structures on Tree nodes + Version 1.3 - Jul 2021 + - Added TAbstractMemZoneInfo that allows to Analyze TAbstractMem using CheckConsistency and returns all blocks information + - Added TAVLCacheStats that allows to obtain stats from any TAVLCache object + + Version 1.4 - Oct 2021 + - Fixed but to allow files up to 4 Gb. Limitation is due to internal 4 bytes positioning. 4 bytes = 4 Gb maximum size + + Version 1.5 - Nov 2021 + - Allows 32 or 64 bits file (More than 4Gb limitation) + - Allows select Max allowed block size by setting units size: + - 32 bits: Fixed 1 unit = 4 bytes: Max size = ((2^24)*4) = 67108864 bytes = 64Mb + - 64 bits: Customizable: 1 unit from 4..256 bytes (multiple of 4): Max size = from ((2^32)*4) 16Gb ... ((2^32)*256) = 1099511627776 = 1Tb + + Version 1.6 - Dec 2021 + - Improved 64 bits + - Fully redo of CacheMem unit with better improvements on read/write cache + - Added BTree index on TAbstractMemBTreeData with TAbstractMemBTreeDataIndex class + - Added cache on TAbstractMemBTreeData structures + + Version 1.7 - April 2023 + - Added TMemoryBTreeData structures that allows multiple indexes via "AddIndex" method creating TMemoryBTreeDataIndex objects + + Version 1.8 - October 2023 + - Added TAbstractStorage that helps in an easy to implement AbstractMemory structs in a formal way } const - CT_ABSTRACTMEM_VERSION = 1.0; // Each revision should increase this version... + CT_ABSTRACTMEM_VERSION = 1.8; // Each revision should increase this version... + + diff --git a/src/libraries/abstractmem/UAVLCache.pas b/src/libraries/abstractmem/UAVLCache.pas index 7ff069f2e..a2205deab 100644 --- a/src/libraries/abstractmem/UAVLCache.pas +++ b/src/libraries/abstractmem/UAVLCache.pas @@ -3,7 +3,7 @@ { This file is part of AbstractMem framework - Copyright (C) 2020 Albert Molina - bpascalblockchain@gmail.com + Copyright (C) 2020-2021 Albert Molina - bpascalblockchain@gmail.com https://github.com/PascalCoinDev/ @@ -33,7 +33,7 @@ interface uses Classes, SysUtils, SyncObjs, - UAbstractBTree, UOrderedList, + UAbstractAVLTree, UOrderedList, {$IFNDEF FPC}System.Generics.Collections,System.Generics.Defaults{$ELSE}Generics.Collections,Generics.Defaults{$ENDIF}; type @@ -41,6 +41,16 @@ EAVLCache = class(Exception); { TAVLCache } + TAVLCacheStats = Record + searchesOk : Integer; + searchesFailed : Integer; + addedCount : Integer; + removedCount : Integer; + removedByOveruse : Integer; + procedure Clear; + function ToString : String; + end; + TAVLCache = Class public type @@ -87,13 +97,14 @@ TAVLCacheMemData = record function ConsistencyCheck(const AErrors : TStrings): integer; override; end; var FAVLCacheMem : TAVLCacheMem; - FDefaultMax : Integer; + FMaxRegisters : Integer; FAVLCacheLock : TCriticalSection; + FStats : TAVLCacheStats; protected procedure BeforeDelete(var AData : T); virtual; procedure ConsistencyCheck; public - Constructor Create(ADefaultMax : Integer; const AOnCompareMethod: TComparison); + Constructor Create(ADefaultMaxRegisters : Integer; const AOnCompareMethod: TComparison); Destructor Destroy; override; // function Find(const AData : T; out AFound : T) : Boolean; @@ -103,6 +114,8 @@ TAVLCacheMemData = record procedure Clear; function TreeToString: String; function ToString(const AData : T) : String; overload; virtual; + property MaxRegisters : Integer read FMaxRegisters write FMaxRegisters; + property Stats : TAVLCacheStats read FStats; End; implementation @@ -337,9 +350,12 @@ procedure TAVLCache.Add(const AData: T); New(P); P^.Clear; P^.data := AData; - FAVLCacheMem.Add(P); + if Not FAVLCacheMem.Add(P) then begin + Dispose(P); + Exit; + end; FAVLCacheMem.DoMark(P,True); - if (FDefaultMax > 0) And (FAVLCacheMem.FCount>FDefaultMax) then begin + if (FMaxRegisters > 0) And (FAVLCacheMem.FCount>FMaxRegisters) then begin // Dispose cache LnToRemove := FAVLCacheMem.FCount SHR 1; i := 1; @@ -353,9 +369,12 @@ procedure TAVLCache.Add(const AData: T); FAVLCacheMem.Delete(PToDelete); inc(i); + Inc(FStats.removedCount); + Inc(FStats.removedByOveruse); end; end; Finally + Inc(FStats.addedCount); FAVLCacheLock.Release; End; end; @@ -377,6 +396,7 @@ procedure TAVLCache.Clear; BeforeDelete(P^.data); FAVLCacheMem.DoMark(P,False); FAVLCacheMem.Delete(P); + Inc(FStats.removedCount); end; Finally FAVLCacheLock.Release; @@ -395,11 +415,12 @@ procedure TAVLCache.ConsistencyCheck; End; end; -constructor TAVLCache.Create(ADefaultMax: Integer; const AOnCompareMethod: TComparison); +constructor TAVLCache.Create(ADefaultMaxRegisters: Integer; const AOnCompareMethod: TComparison); begin FAVLCacheMem := TAVLCacheMem.Create(AOnCompareMethod,False); - FDefaultMax := ADefaultMax; + FMaxRegisters := ADefaultMaxRegisters; FAVLCacheLock := TCriticalSection.Create; + FStats.Clear; end; destructor TAVLCache.Destroy; @@ -430,7 +451,11 @@ function TAVLCache.Find(const AData: T; out AFound: T): Boolean; AFound := PFound^.data; Result := True; FAVLCacheMem.DoMark(PFound,True); - end else Result := False; + Inc(FStats.searchesOk); + end else begin + Result := False; + Inc(FStats.searchesFailed); + end; finally Dispose(P); end; @@ -453,6 +478,7 @@ procedure TAVLCache.Remove(const AData: T); BeforeDelete(PFound^.data); FAVLCacheMem.DoMark(PFound,False); FAVLCacheMem.Delete(PFound); + Inc(FStats.removedCount); end; finally Dispose(P); @@ -490,4 +516,20 @@ function TAVLCache.TAVLCacheMemData.ToString: String; Result := 'TAVLCache.TAVLCacheMemData.'+IntToStr(SizeOf(Self.data)); end; +{ TAVLCacheStats } + +procedure TAVLCacheStats.Clear; +begin + Self.searchesOk := 0; + Self.searchesFailed := 0; + Self.addedCount := 0; + Self.removedCount := 0; + Self.removedByOveruse := 0; +end; + +function TAVLCacheStats.ToString: String; +begin + Result := Format('%2.f%% of %d searches Ok. Added %d and removed %d for overuse',[Self.searchesOk*100/(Self.searchesFailed+Self.searchesFailed),Self.searchesFailed+Self.searchesFailed,Self.addedCount,Self.removedByOveruse]); +end; + end. diff --git a/src/libraries/abstractmem/UAbstractAVLTree.pas b/src/libraries/abstractmem/UAbstractAVLTree.pas new file mode 100644 index 000000000..9eaa1ec7d --- /dev/null +++ b/src/libraries/abstractmem/UAbstractAVLTree.pas @@ -0,0 +1,1011 @@ +unit UAbstractAVLTree; + +{ + This file is part of AbstractMem framework + + Copyright (C) 2020-2021 Albert Molina - bpascalblockchain@gmail.com + + https://github.com/PascalCoinDev/ + + *** BEGIN LICENSE BLOCK ***** + + The contents of this files are subject to the Mozilla Public License Version + 2.0 (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL + + Software distributed under the License is distributed on an "AS IS" basis, + WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + for the specific language governing rights and limitations under the License. + + The Initial Developer of the Original Code is Albert Molina. + + See ConfigAbstractMem.inc file for more info + + SPECIAL CONTRIBUTOR: + This unit contains TAVLAbstractTree component that + is created based on work previously made + by Mattias Gaertner at unit AVL_Tree for Free Component Library (FCL) + and Lazarus: lazarus\components\lazutils\laz_avl_tree.pp + Code object has been fully redo but algo is based on it... and on + initial algo of AVL Tree created by Adelson-Velsky and Landis + + ***** END LICENSE BLOCK ***** +} + +{$ifdef FPC} + {$mode DELPHI} +{$endif} +{$H+} + +interface + +uses + Classes, SysUtils, + // NOTE ABOUT FREEPASCAL (2020-03-10) + // Current version 3.0.4 does not contain valid support for Generics, using Generics from this: + // https://github.com/PascalCoinDev/PascalCoin/tree/master/src/libraries/generics.collections + // (Download and set folder as a "units include folder" in compiler options) + {$IFNDEF FPC}System.Generics.Collections,System.Generics.Defaults,{$ELSE}Generics.Collections,Generics.Defaults,{$ENDIF} + UOrderedList, UAbstractBTree; + +{$I ./ConfigAbstractMem.inc } + +{$IFDEF ABSTRACTMEM_TESTING_MODE} + {$DEFINE ABSTRACTMEM_CIRCULAR_SEARCH_PROTECTION} +{$ENDIF} + +type + TAVLTreePosition = (poParent, poLeft, poRight); + + EAVLAbstractTree = Class(Exception); + + { TAVLAbstractTree } + + TAVLAbstractTree = class + private + FOnCompare: TComparison; + FDisabledsCount : Integer; + FAllowDuplicates: Boolean; + procedure BalanceAfterInsert(ANode: T); + procedure BalanceAfterDelete(ANode: T); + procedure CheckNode(const ANode: T); overload; + function CheckNode(const ANode: T; ACheckedList:TOrderedList; var ALeftDepth, ARightDepth : Integer; const AErrors : TStrings): integer; overload; + procedure RotateLeft(var ANode: T); + procedure RotateRight(var ANode: T); + procedure BeginUpdate; + procedure EndUpdate; + procedure SwitchPositionWithSuccessor(aNode, aSuccessor: T); + protected + FCount: integer; + FCircularProtection : Boolean; + function GetRoot: T; virtual; abstract; + procedure SetRoot(const Value: T); virtual; abstract; + function HasPosition(const ANode : T; APosition : TAVLTreePosition) : Boolean; virtual; abstract; + function GetPosition(const ANode : T; APosition : TAVLTreePosition) : T; virtual; abstract; + procedure SetPosition(var ANode : T; APosition : TAVLTreePosition; const ANewValue : T); virtual; abstract; + procedure ClearPosition(var ANode : T; APosition : TAVLTreePosition); virtual; abstract; + function GetBalance(const ANode : T) : Integer; virtual; abstract; + procedure SetBalance(var ANode : T; ANewBalance : Integer); virtual; abstract; + function AreEquals(const ANode1, ANode2 : T) : Boolean; virtual; abstract; + procedure ClearNode(var ANode : T); virtual; abstract; + procedure DisposeNode(var ANode : T); virtual; abstract; + // + procedure UpdateFinished; virtual; + public + property AllowDuplicates : Boolean read FAllowDuplicates write FAllowDuplicates; + property DisabledsCount:Integer read FDisabledsCount; + function IsNil(const ANode : T) : Boolean; virtual; abstract; + // + property Root: T read GetRoot; + function FindInsertPos(const AData: T): T; + function Find(const AData: T): T; + function FindSuccessor(const ANode: T): T; + function FindPrecessor(const ANode: T): T; + function FindLowest: T; + function FindHighest: T; + function Add(var ANode: T) : Boolean; + procedure Delete(var ANode: T); + constructor Create(const OnCompareMethod: TComparison; AAllowDuplicates : Boolean); virtual; + function ConsistencyCheck(const AErrors : TStrings): integer; virtual; + function ToString(const ANode:T) : String; reintroduce; overload; virtual; + function ToString : String; reintroduce; overload; + property OnCompareMethod: TComparison read FOnCompare; + property CircularProtection : Boolean read FCircularProtection write FCircularProtection; + end; + + // + + PAVLPointerTreeNode = ^TAVLPointerTreeNode; + TAVLPointerTreeNode = Record + parent : PAVLPointerTreeNode; + left : PAVLPointerTreeNode; + right : PAVLPointerTreeNode; + balance : Integer; + data : Pointer; + End; + + TPAVLPointerTree = Class( TAVLAbstractTree ) + private + FRoot : PAVLPointerTreeNode; + protected + function GetRoot: PAVLPointerTreeNode; override; + procedure SetRoot(const Value: PAVLPointerTreeNode); override; + function HasPosition(const ANode : PAVLPointerTreeNode; APosition : TAVLTreePosition) : Boolean; override; + procedure SetPosition(var ANode : PAVLPointerTreeNode; APosition : TAVLTreePosition; const ANewValue : PAVLPointerTreeNode); override; + procedure ClearPosition(var ANode : PAVLPointerTreeNode; APosition : TAVLTreePosition); override; + function GetBalance(const ANode : PAVLPointerTreeNode) : Integer; override; + procedure SetBalance(var ANode : PAVLPointerTreeNode; ANewBalance : Integer); override; + function AreEquals(const ANode1, ANode2 : PAVLPointerTreeNode) : Boolean; override; + procedure ClearNode(var ANode : PAVLPointerTreeNode); override; + procedure DisposeNode(var ANode : PAVLPointerTreeNode); override; + public + function IsNil(const ANode : PAVLPointerTreeNode) : Boolean; override; + function ToString(const ANode: PAVLPointerTreeNode) : String; override; + constructor Create(const OnCompareMethod: TComparison; AAllowDuplicates : Boolean); override; + // + function GetPosition(const ANode : PAVLPointerTreeNode; APosition : TAVLTreePosition) : PAVLPointerTreeNode; override; + End; + +const + CT_TAVLPointerTreeNode_NULL : TAVLPointerTreeNode = (parent:Nil;left:Nil;right:Nil;balance:0;data:Nil); + +implementation + +{ TAVLAbstractTree } + +function TAVLAbstractTree.Add(var ANode : T) : Boolean; +var LInsertPos: T; + LInsertComp: integer; +begin + BeginUpdate; + Try + // Init T + ClearPosition(ANode,poLeft); + ClearPosition(ANode,poRight); + SetBalance(ANode,0); // Init Balance to 0 + if Not IsNil(Root) then begin + LInsertPos:=FindInsertPos(ANode); + LInsertComp:=fOnCompare(ANode,LInsertPos); + SetPosition(ANode,poParent,LInsertPos); + if LInsertComp<0 then begin + // insert to the left + SetPosition(LInsertPos,poLeft,ANode); + end else if (AllowDuplicates) Or (LInsertComp>0) then begin + // insert to the right + SetPosition(LInsertPos,poRight,ANode); + end else begin + Exit(False); + end; + BalanceAfterInsert(ANode); + end else begin + SetRoot( ANode ); + ClearPosition(ANode,poParent); + end; + inc(FCount); + Result := True; + Finally + EndUpdate; + End; +end; + +function TAVLAbstractTree.FindLowest: T; +begin + Result:=Root; + if Not IsNil(Result) then + while HasPosition(Result,poLeft) do Result := GetPosition(Result,poLeft); +end; + +function TAVLAbstractTree.FindHighest: T; +begin + Result:=Root; + if Not IsNil(Result) then + while HasPosition(Result,poRight) do Result := GetPosition(Result,poRight); +end; + +procedure TAVLAbstractTree.BalanceAfterDelete(ANode: T); +var + OldParent, OldRight, OldRightLeft, OldLeft, OldLeftRight: T; +begin + while Not IsNil(ANode) do begin + if ((GetBalance(ANode)=+1) or (GetBalance(ANode)=-1)) then exit; + OldParent:=GetPosition(ANode,poParent); + if (GetBalance(ANode)=0) then begin + // Treeheight has decreased by one + if IsNil(OldParent) then + exit; + if (AreEquals(GetPosition(OldParent,poLeft),ANode)) then + SetBalance(OldParent,GetBalance(OldParent)+1) + else + SetBalance(OldParent,GetBalance(OldParent)-1); + ANode:=OldParent; + end else if (GetBalance(ANode)=+2) then begin + // Node is overweighted to the right + OldRight:=GetPosition(ANode,poRight); + if (GetBalance(OldRight)>=0) then begin + // OldRight.Balance is 0 or +1 + // rotate ANode,OldRight left + RotateLeft(ANode); + SetBalance(ANode,(1-GetBalance(OldRight))); // toggle 0 and 1 + SetBalance(OldRight,GetBalance(OldRight)-1); + ANode:=OldRight; + end else begin + // OldRight.Balance=-1 + { double rotate + = rotate OldRightLeft,OldRight right + and then rotate ANode,OldRightLeft left + OldParent OldParent + | | + ANode OldRightLeft + \ / \ + OldRight => ANode OldRight + / \ / + OldRightLeft OldRightLeftLeft OldRightLeftRight + / \ + OldRightLeftLeft OldRightLeftRight + } + OldRightLeft:=GetPosition(OldRight,poLeft); + RotateRight(OldRight); + RotateLeft(ANode); + if (GetBalance(OldRightLeft)<=0) then + SetBalance(ANode,0) + else + SetBalance(ANode,-1); + if (GetBalance(OldRightLeft)>=0) then + SetBalance(OldRight,0) + else + SetBalance(OldRight,+1); + SetBalance(OldRightLeft,0); + ANode:=OldRightLeft; + end; + end else begin + // Node.Balance=-2 + // Node is overweighted to the left + OldLeft:=GetPosition(ANode,poLeft); + if (GetBalance(OldLeft)<=0) then begin + // rotate OldLeft,ANode right + RotateRight(ANode); + SetBalance(ANode,(-1-GetBalance(OldLeft))); // toggle 0 and -1 + SetBalance(OldLeft,GetBalance(OldLeft)+1); + ANode:=OldLeft; + end else begin + // OldLeft.Balance = 1 + { double rotate left right + = rotate OldLeft,OldLeftRight left + and then rotate OldLeft,ANode right + OldParent OldParent + | | + ANode OldLeftRight + / / \ + OldLeft => OldLeft ANode + \ \ / + OldLeftRight OldLeftRightLeft OldLeftRightRight + / \ + OldLeftRightLeft OldLeftRightRight + } + OldLeftRight:=GetPosition(OldLeft,poRight); + RotateLeft(OldLeft); + RotateRight(ANode); + if (GetBalance(OldLeftRight)>=0) then + SetBalance(ANode,0) + else + SetBalance(ANode,+1); + if (GetBalance(OldLeftRight)<=0) then + SetBalance(OldLeft,0) + else + SetBalance(OldLeft,-1); + SetBalance(OldLeftRight,0); + ANode:=OldLeftRight; + end; + end; + end; +end; + +procedure TAVLAbstractTree.BalanceAfterInsert(ANode : T); +var + OldParent, OldRight, OldLeft: T; +begin + OldParent:=GetPosition(ANode,poParent); + while Not IsNil(OldParent) do begin + if (AreEquals(GetPosition(OldParent,poLeft),ANode)) then begin + // Node is left child + SetBalance(OldParent,GetBalance(OldParent)-1); + if (GetBalance(OldParent)=0) then exit; + if (GetBalance(OldParent)=-1) then begin + ANode:=OldParent; + OldParent:=GetPosition(ANode,poParent); + continue; + end; + // OldParent.Balance=-2 + if (GetBalance(ANode)=-1) then begin + { rotate ANode,ANode.Parent right + OldParentParent OldParentParent + | | + OldParent => ANode + / \ + ANode OldParent + \ / + OldRight OldRight } + RotateRight(OldParent); + SetBalance(ANode,0); + SetBalance(OldParent,0); + end else begin + // Node.Balance = +1 + { double rotate + = rotate ANode,OldRight left and then rotate OldRight,OldParent right + OldParentParent OldParentParent + | | + OldParent OldRight + / => / \ + ANode ANode OldParent + \ \ / + OldRight OldRightLeft OldRightRight + / \ + OldRightLeft OldRightRight + } + OldRight:=GetPosition(ANode,poRight); + RotateLeft(ANode); + RotateRight(OldParent); + if (GetBalance(OldRight)<=0) then + SetBalance(ANode,0) + else + SetBalance(ANode,-1); + if (GetBalance(OldRight)=-1) then + SetBalance(OldParent,1) + else + SetBalance(OldParent,0); + SetBalance(OldRight,0); + end; + exit; + end else begin + // Node is right child + SetBalance(OldParent, GetBalance(OldParent)+1); + if (GetBalance(OldParent)=0) then exit; + if (GetBalance(OldParent)=+1) then begin + ANode:=OldParent; + OldParent:=GetPosition(ANode,poParent); + continue; + end; + // OldParent.Balance = +2 + if (GetBalance(ANode)=+1) then begin + { rotate OldParent,ANode left + OldParentParent OldParentParent + | | + OldParent => ANode + \ / + ANode OldParent + / \ + OldLeft OldLeft } + RotateLeft(OldParent); + SetBalance(ANode,0); + SetBalance(OldParent,0); + end else begin + // Node.Balance = -1 + { double rotate + = rotate OldLeft,ANode right and then rotate OldParent,OldLeft right + OldParentParent OldParentParent + | | + OldParent OldLeft + \ => / \ + ANode OldParent ANode + / \ / + OldLeft OldLeftLeft OldLeftRight + / \ + OldLeftLeft OldLeftRight + } + OldLeft:=GetPosition(ANode,poLeft); + RotateRight(ANode); + RotateLeft(OldParent); + if (GetBalance(OldLeft)>=0) then + SetBalance(ANode,0) + else + SetBalance(ANode,+1); + if (GetBalance(OldLeft)=+1) then + SetBalance(OldParent,-1) + else + SetBalance(OldParent,0); + SetBalance(OldLeft,0); + end; + exit; + end; + end; +end; + +procedure TAVLAbstractTree.BeginUpdate; +begin + inc(FDisabledsCount); +end; + +constructor TAVLAbstractTree.Create(const OnCompareMethod: TComparison; AAllowDuplicates : Boolean); +begin + inherited Create; + FOnCompare:=OnCompareMethod; + FCount:=0; + FDisabledsCount := 0; + FAllowDuplicates := AAllowDuplicates; + {$IFDEF ABSTRACTMEM_CIRCULAR_SEARCH_PROTECTION} + FCircularProtection := True; + {$ELSE} + FCircularProtection := False; + {$ENDIF} +end; + +procedure TAVLAbstractTree.Delete(var ANode: T); +var OldParent, Child, LSuccessor: T; +begin + BeginUpdate; + try + if (Not IsNil(GetPosition(ANode,poLeft))) and (Not IsNil(GetPosition(ANode,poRight))) then begin + // ANode has both: Left and Right + // Switch ANode position with Successor + // Because ANode.Right<>nil the Successor is a child of ANode + LSuccessor := FindSuccessor(ANode); + SwitchPositionWithSuccessor(ANode,LSuccessor); + end; + // left or right is nil + OldParent:=GetPosition(ANode,poParent); + ClearPosition(ANode,poParent); + if Not IsNil(GetPosition(ANode,poLeft)) then + Child:=GetPosition(ANode,poLeft) + else + Child:=GetPosition(ANode,poRight); + if Not IsNil(Child) then + SetPosition(Child,poParent,OldParent); + if Not IsNil(OldParent) then begin + // Node has parent + if (AreEquals(GetPosition(OldParent,poLeft),ANode)) then begin + // Node is left child of OldParent + SetPosition(OldParent,poLeft,Child); + SetBalance(OldParent, GetBalance(OldParent)+1); + end else begin + // Node is right child of OldParent + SetPosition(OldParent,poRight,Child); + SetBalance(OldParent, GetBalance(OldParent)-1); + end; + BalanceAfterDelete(OldParent); + end else begin + // Node was Root + SetRoot( Child ); + end; + dec(FCount); + + DisposeNode(ANode); + + finally + EndUpdate; + end; +end; + + +procedure TAVLAbstractTree.EndUpdate; +begin + if FDisabledsCount<=0 then Raise EAVLAbstractTree.Create('EndUpdate invalid'); + Dec(FDisabledsCount); + if FDisabledsCount=0 then UpdateFinished; +end; + +procedure TAVLAbstractTree.SwitchPositionWithSuccessor(aNode, aSuccessor: T); +{ called by delete, when aNode.Left<>nil and aNode.Right<>nil + Switch ANode position with Successor + Because ANode.Right<>nil the Successor is a child of ANode } +var + OldBalance: Integer; + OldParent, OldLeft, OldRight, + OldSuccParent, OldSuccLeft, OldSuccRight: T; +begin + OldBalance:=GetBalance(aNode); + SetBalance(aNode, GetBalance(aSuccessor)); + SetBalance(aSuccessor, OldBalance); + + OldParent:=GetPosition(aNode,poParent); + OldLeft:=GetPosition(aNode,poLeft); + OldRight:=GetPosition(aNode,poRight); + OldSuccParent:=GetPosition(aSuccessor,poParent); + OldSuccLeft:=GetPosition(aSuccessor,poLeft); + OldSuccRight:=GetPosition(aSuccessor,poRight); + + if Not IsNil(OldParent) then begin + if AreEquals(GetPosition(OldParent,poLeft),aNode) then + SetPosition(OldParent,poLeft,aSuccessor) + else + SetPosition(OldParent,poRight,aSuccessor); + end else + SetRoot(aSuccessor); + SetPosition(aSuccessor,poParent,OldParent); + + if Not AreEquals(OldSuccParent,aNode) then begin + if AreEquals(GetPosition(OldSuccParent,poLeft),aSuccessor) then + SetPosition(OldSuccParent,poLeft,aNode) + else + SetPosition(OldSuccParent,poRight,aNode); + SetPosition(aSuccessor,poRight,OldRight); + SetPosition(aNode,poParent,OldSuccParent); + if Not IsNil(OldRight) then + SetPosition(OldRight,poParent,aSuccessor); + end else begin + { aNode aSuccessor + \ => \ + aSuccessor aNode } + SetPosition(aSuccessor,poRight,aNode); + SetPosition(aNode,poParent,aSuccessor); + end; + + SetPosition(aNode,poLeft,OldSuccLeft); + if Not IsNil(OldSuccLeft) then + SetPosition(OldSuccLeft,poParent,aNode); + SetPosition(aNode,poRight,OldSuccRight); + if Not IsNil(OldSuccRight) then + SetPosition(OldSuccRight,poParent,aNode); + SetPosition(aSuccessor,poLeft,OldLeft); + if Not IsNil(OldLeft) then + SetPosition(OldLeft,poParent,aSuccessor); +end; + +function TAVLAbstractTree.Find(const AData: T): T; +var Comp: integer; + LPreviousSearch : TNoDuplicateData; +begin + if FCircularProtection then begin + LPreviousSearch := TNoDuplicateData.Create(FOnCompare); // Protection against circular "malformed" structure + end else LPreviousSearch := Nil; + try + Result:=Root; + while (Not IsNil(Result)) do begin + if FCircularProtection then begin + if Not LPreviousSearch.Add(Result) then raise EAVLAbstractTree.Create('Circular T structure at Find for T='+ToString(Result)+ ' searching for '+ToString(AData)); + end; + Comp:=fOnCompare(AData,Result); + if Comp=0 then exit; + if Comp<0 then begin + Result:=GetPosition(Result,poLeft); + end else begin + Result:=GetPosition(Result,poRight); + end; + end; + finally + if FCircularProtection then begin + LPreviousSearch.Free; + end; + end; +end; + +function TAVLAbstractTree.FindInsertPos(const AData: T): T; +var Comp: integer; + LPreviousSearch : TNoDuplicateData; +begin + if FCircularProtection then begin + LPreviousSearch := TNoDuplicateData.Create(FOnCompare); // Protection against circular "malformed" structure + end else LPreviousSearch := Nil; + try + Result:=Root; + while (Not IsNil(Result)) do begin + if FCircularProtection then begin + if Not LPreviousSearch.Add(Result) then raise EAVLAbstractTree.Create('Circular T structure at FindInsertPos for T='+ToString(Result)+ ' searching for '+ToString(AData)); + end; + Comp:=fOnCompare(AData,Result); + if Comp<0 then begin + if (HasPosition(Result,poLeft)) then begin + Result:=GetPosition(Result,poLeft); + end else begin + Exit; + end; + end else begin + if (HasPosition(Result,poRight)) then begin + Result:=GetPosition(Result,poRight); + end else begin + Exit; + end; + end; + end; + finally + if FCircularProtection then begin + LPreviousSearch.Free; + end; + end; +end; + +function TAVLAbstractTree.FindSuccessor(const ANode: T): T; +begin + if HasPosition(ANode,poRight) then begin + Result := GetPosition(ANode,poRight); + while (HasPosition(Result,poLeft)) do Result:=GetPosition(Result,poLeft); + end else begin + Result := ANode; + while (HasPosition(Result,poParent)) and (AreEquals(GetPosition(GetPosition(Result,poParent),poRight),Result)) do + Result:=GetPosition(Result,poParent); + Result := GetPosition(Result,poParent); + end; +end; + +function TAVLAbstractTree.ToString: String; +var i : Integer; + LStrings : TStringList; + LNode : T; +begin + LStrings := TStringList.Create; + try + i := 0; + LNode := FindLowest; + while (Not IsNil(LNode)) do begin + inc(i); + LStrings.Add(Format('Pos:%d - %s',[i,ToString(LNode)])); + LNode := FindSuccessor(LNode); + end; + LStrings.Add(Format('Total:%d',[i])); + Result := LStrings.Text; + finally + LStrings.Free; + end; +end; + +procedure TAVLAbstractTree.UpdateFinished; +{$IFDEF ABSTRACTMEM_TESTING_MODE} +var LErrors : TStrings; +{$ENDIF} +begin + // Nothing to do here. Used in inheritance classes + {$IFDEF ABSTRACTMEM_TESTING_MODE} + LErrors := TStringList.Create; + Try + if ConsistencyCheck(LErrors)<>0 then begin + raise EAVLAbstractTree.Create('CONSISTENCY ERRORS'+#10+LErrors.Text); + end; + Finally + LErrors.Free; + End; + {$ENDIF} +end; + +function TAVLAbstractTree.ToString(const ANode: T): String; +begin + Result := Format('Abstract T %d bytes',[SizeOf(T)]); +end; + +function TAVLAbstractTree.FindPrecessor(const ANode: T): T; +begin + if HasPosition(ANode,poLeft) then begin + Result := GetPosition(ANode,poLeft); + while (HasPosition(Result,poRight)) do Result:=GetPosition(Result,poRight); + end else begin + Result := ANode; + while (HasPosition(Result,poParent)) and (AreEquals(GetPosition(GetPosition(Result,poParent),poLeft),Result)) do + Result:=GetPosition(Result,poParent); + Result := GetPosition(Result,poParent); + end; +end; + +function TAVLAbstractTree.CheckNode(const ANode: T; ACheckedList : TOrderedList; var ALeftDepth, ARightDepth : Integer; const AErrors : TStrings): integer; +var i : Integer; + LLeftDepth, LRightDepth : Integer; + LParent, LLeft, LRight : T; +begin + Result := 0; + + LLeftDepth := 0; + LRightDepth := 0; + + ALeftDepth := 0; + ARightDepth := 0; + + if IsNil(ANode) then begin + exit(0); + end; + if Assigned(ACheckedList) then begin + if ACheckedList.Find(ANode,i) then begin + // Found in previous searchs... + Result := -1; + if Assigned(AErrors) then begin + AErrors.Add(Format('Error Consistency circular found at %d of %d -> %s',[i,ACheckedList.Count,ToString(ANode)])); + end; + Exit; + end; + ACheckedList.Add(ANode); + end; + + // test left son + if HasPosition(ANode,poLeft) then begin + LLeft := GetPosition(ANode,poLeft); + if Not AreEquals(GetPosition(GetPosition(ANode,poLeft),poParent),ANode) then begin + Result:=-2; + if Assigned(AErrors) then begin + AErrors.Add(Format('Error Consistency not equals in left for %s',[ToString(ANode)])); + end; + Exit; + end; + if fOnCompare(GetPosition(ANode,poLeft),ANode)>0 then begin + Result:=-3; + if Assigned(AErrors) then begin + AErrors.Add(Format('Error Consistency compare>0 in left for %s',[ToString(ANode)])); + end; + Exit; + end; + Result:=CheckNode(GetPosition(ANode,poLeft),ACheckedList,LLeftDepth,LRightDepth,AErrors); + if LLeftDepth>LRightDepth then inc(ALeftDepth,LLeftDepth+1) + else inc(ALeftDepth,LRightDepth+1); + if Result<>0 then Exit; + end else ClearNode(LLeft); + // test right son + if HasPosition(ANode,poRight) then begin + LRight := GetPosition(ANode,poRight); + if Not AreEquals(GetPosition(GetPosition(ANode,poRight),poParent),ANode) then begin + Result:=-4; + if Assigned(AErrors) then begin + AErrors.Add(Format('Error Consistency not equals in right for %s found %s at right.parent',[ToString(ANode),ToString(GetPosition(GetPosition(ANode,poRight),poParent))])); + end; + Exit; + end; + if fOnCompare(GetPosition(ANode,poRight),ANode)<0 then begin + Result:=-5; + if Assigned(AErrors) then begin + AErrors.Add(Format('Error Consistency compare>0 in right for %s',[ToString(ANode)])); + end; + Exit; + end; + Result:=CheckNode(GetPosition(ANode,poRight),ACheckedList,LLeftDepth,LRightDepth,AErrors); + if LLeftDepth>LRightDepth then inc(ARightDepth,LLeftDepth+1) + else inc(ARightDepth,LRightDepth+1); + if Result<>0 then Exit; + end else ClearNode(LRight); + + if (HasPosition(ANode,poParent)) then begin + LParent := GetPosition(ANode,poParent); + end else ClearNode(LParent); + + if Not IsNil(LParent) then begin + if AreEquals(ANode,LParent) then begin + if Assigned(AErrors) then begin + AErrors.Add(Format('Error Consistency Self=Parent for %s (Parent %s)',[ToString(ANode),ToString(LParent)])); + end; + Result := -7; + end; + end; + if Not IsNil(LLeft) then begin + if AreEquals(ANode,LLeft) then begin + if Assigned(AErrors) then begin + AErrors.Add(Format('Error Consistency Self=Left for %s (Left %s)',[ToString(ANode),ToString(LLeft)])); + end; + Result := -8; + end; + end; + if Not IsNil(LRight) then begin + if AreEquals(ANode,LRight) then begin + if Assigned(AErrors) then begin + AErrors.Add(Format('Error Consistency Self=Right for %s (Right %s)',[ToString(ANode),ToString(LRight)])); + end; + Result := -9; + end; + end; + if (Not IsNil(LParent)) and (Not IsNil(LLeft)) then begin + if AreEquals(LParent,LLeft) then begin + if Assigned(AErrors) then begin + AErrors.Add(Format('Error Consistency Parent=Left for %s (Parent %s)',[ToString(ANode),ToString(LParent)])); + end; + Result := -10; + end; + end; + if (Not IsNil(LParent)) and (Not IsNil(LRight)) then begin + if AreEquals(LParent,LRight) then begin + if Assigned(AErrors) then begin + AErrors.Add(Format('Error Consistency Parent=Right for %s (Parent %s)',[ToString(ANode),ToString(LParent)])); + end; + Result := -11; + end; + end; + if (Not IsNil(LLeft)) and (Not IsNil(LRight)) then begin + if AreEquals(LLeft,LRight) then begin + if Assigned(AErrors) then begin + AErrors.Add(Format('Error Consistency Left=Right for %s (Left %s)',[ToString(ANode),ToString(LLeft)])); + end; + Result := -12; + end; + end; + + // Check balance + if GetBalance(ANode)<>(ARightDepth - ALeftDepth) then begin + if Assigned(AErrors) then begin + AErrors.Add(Format('Error Consistency balance (%d <> Right(%d) - Left(%d)) at %s',[GetBalance(ANode),ARightDepth,ALeftDepth,ToString(ANode)])); + end; + Result := -15; + Exit; + end; +end; + +procedure TAVLAbstractTree.RotateLeft(var ANode: T); +{ Parent Parent + | | + Node => OldRight + / \ / + Left OldRight Node + / / \ + OldRightLeft Left OldRightLeft } +var + AParent, OldRight, OldRightLeft: T; +begin + OldRight:=GetPosition(aNode,poRight); + OldRightLeft:=GetPosition(OldRight,poLeft); + AParent:=GetPosition(aNode,poParent); + if Not IsNil(AParent) then begin + if AreEquals(GetPosition(AParent,poLeft),aNode) then + SetPosition(AParent,poLeft,OldRight) + else + SetPosition(AParent,poRight,OldRight); + end else + SetRoot( OldRight ); + SetPosition(OldRight,poParent,AParent); + SetPosition(aNode,poParent,OldRight); + SetPosition(aNode,poRight,OldRightLeft); + if Not IsNil(OldRightLeft) then + SetPosition(OldRightLeft,poParent,aNode); + SetPosition(OldRight,poLeft,aNode); +end; + +procedure TAVLAbstractTree.RotateRight(var ANode: T); +{ Parent Parent + | | + Node => OldLeft + / \ \ + OldLeft Right Node + \ / \ + OldLeftRight OldLeftRight Right } +var + AParent, OldLeft, OldLeftRight: T; +begin + OldLeft:=GetPosition(ANode,poLeft); + OldLeftRight:=GetPosition(OldLeft,poRight); + AParent:=GetPosition(ANode,poParent); + if Not IsNil(AParent) then begin + if AreEquals(GetPosition(AParent,poLeft),aNode) then + SetPosition(AParent,poLeft,OldLeft) + else + SetPosition(AParent,poRight,OldLeft); + end else + SetRoot( OldLeft ); + SetPosition(OldLeft,poParent,AParent); + SetPosition(aNode,poParent,OldLeft); + SetPosition(aNode,poLeft,OldLeftRight); + if Not IsNil(OldLeftRight) then + SetPosition(OldLeftRight,poParent,aNode); + SetPosition(OldLeft,poRight,aNode); +end; + +procedure TAVLAbstractTree.CheckNode(const ANode: T); +var LLeft,LRight : Integer; + LErrors : TStrings; +begin + LErrors := TStringList.Create; + try + if CheckNode(ANode,Nil,LLeft,LRight,LErrors)<>0 then + raise EAVLAbstractTree.Create('CHECK CONSISTENCY ERROR'+#10+LErrors.Text); + finally + LErrors.Free; + end; +end; + +function TAVLAbstractTree.ConsistencyCheck(const AErrors : TStrings): integer; +var LCheckedList : TOrderedList; +var LLeftDepth, LRightDepth : Integer; +begin + LCheckedList := TOrderedList.Create(False,FOnCompare); + try + LLeftDepth := 0; + LRightDepth := 0; + Result:=CheckNode(Root,LCheckedList,LLeftDepth,LRightDepth,AErrors); + finally + LCheckedList.Free; + end; +end; + +{ TPAVLPointerTree } + +function TPAVLPointerTree.AreEquals(const ANode1, ANode2: PAVLPointerTreeNode): Boolean; +begin + Result := ANode1 = ANode2; +end; + +procedure TPAVLPointerTree.ClearNode(var ANode: PAVLPointerTreeNode); +begin + ANode := Nil; +end; + +procedure TPAVLPointerTree.ClearPosition(var ANode: PAVLPointerTreeNode; APosition: TAVLTreePosition); +begin + if Not Assigned(ANode) then raise EAVLAbstractTree.Create('Cannot ClearPosition of a Nil node'); + case APosition of + poParent: ANode.parent := Nil; + poLeft: ANode.left := Nil; + poRight: ANode.right := Nil; + end; +end; + +constructor TPAVLPointerTree.Create(const OnCompareMethod: TComparison; AAllowDuplicates : Boolean); +begin + FRoot := Nil; + inherited; +end; + +procedure TPAVLPointerTree.DisposeNode(var ANode: PAVLPointerTreeNode); +begin + if Not Assigned(ANode) then Exit; + Dispose( ANode ); + ANode := Nil; +end; + +function TPAVLPointerTree.GetBalance(const ANode: PAVLPointerTreeNode): Integer; +begin + if Not Assigned(ANode) then raise EAVLAbstractTree.Create('Cannot GetBalance of a Nil node'); + Result := ANode^.balance; +end; + +function TPAVLPointerTree.GetPosition(const ANode: PAVLPointerTreeNode; + APosition: TAVLTreePosition): PAVLPointerTreeNode; +begin + if Not Assigned(ANode) then raise EAVLAbstractTree.Create('Cannot GetPosition of a Nil node'); + case APosition of + poParent: Result := ANode.parent; + poLeft: Result := ANode.left; + poRight: Result := ANode.right; + else raise EAVLAbstractTree.Create('Undefined 20200310-1'); + end; +end; + +function TPAVLPointerTree.GetRoot: PAVLPointerTreeNode; +begin + Result := FRoot; +end; + +function TPAVLPointerTree.HasPosition(const ANode: PAVLPointerTreeNode; APosition: TAVLTreePosition): Boolean; +begin + if Not Assigned(ANode) then raise EAVLAbstractTree.Create('Cannot answer HasPosition of a Nil node'); + case APosition of + poParent: Result := Assigned( ANode.parent ); + poLeft: Result := Assigned( ANode.left ); + poRight: Result := Assigned( ANode.right ); + else raise EAVLAbstractTree.Create('Undefined 20200310-2'); + end; +end; + +function TPAVLPointerTree.IsNil(const ANode: PAVLPointerTreeNode): Boolean; +begin + Result := ANode = Nil; +end; + +procedure TPAVLPointerTree.SetBalance(var ANode: PAVLPointerTreeNode; ANewBalance: Integer); +begin + if Not Assigned(ANode) then raise EAVLAbstractTree.Create('Cannot SetBalance of a Nil node'); + ANode^.balance := ANewBalance; +end; + +procedure TPAVLPointerTree.SetPosition(var ANode: PAVLPointerTreeNode; APosition: TAVLTreePosition; const ANewValue: PAVLPointerTreeNode); +begin + if Not Assigned(ANode) then raise EAVLAbstractTree.Create('Cannot SetPosition of a Nil node'); + case APosition of + poParent: ANode.parent := ANewValue; + poLeft: ANode.left := ANewValue; + poRight: ANode.right := ANewValue; + end; +end; + +procedure TPAVLPointerTree.SetRoot(const Value: PAVLPointerTreeNode); +begin + FRoot := Value; +end; + +function TPAVLPointerTree.ToString(const ANode: PAVLPointerTreeNode): String; +var LParent, LLeft, LRight : String; +begin + if Assigned(ANode) then begin + if Assigned(ANode.parent) then LParent := IntToStr(Integer(ANode.parent.data)) else LParent := 'NIL'; + if Assigned(ANode.left) then LLeft := IntToStr(Integer(ANode.left.data)) else LLeft := 'NIL'; + if Assigned(ANode.right) then LRight := IntToStr(Integer(ANode.right.data)) else LRight := 'NIL'; + + Result := Format('%d (Parent:%s Left:%s Right:%s Balance:%d)',[Integer(ANode.data),LParent,LLeft,LRight,ANode.balance]); + end else begin + Result := 'NIL'; + end; +end; + +initialization + +finalization + +end. diff --git a/src/libraries/abstractmem/UAbstractBTree.pas b/src/libraries/abstractmem/UAbstractBTree.pas index 5103d8254..87a7fc248 100644 --- a/src/libraries/abstractmem/UAbstractBTree.pas +++ b/src/libraries/abstractmem/UAbstractBTree.pas @@ -3,7 +3,7 @@ { This file is part of AbstractMem framework - Copyright (C) 2020 Albert Molina - bpascalblockchain@gmail.com + Copyright (C) 2020-2021 Albert Molina - bpascalblockchain@gmail.com https://github.com/PascalCoinDev/ @@ -22,14 +22,6 @@ See ConfigAbstractMem.inc file for more info - SPECIAL CONTRIBUTOR: - This unit contains TAVLAbstractTree component that - is created based on work previously made - by Mattias Gaertner at unit AVL_Tree for Free Component Library (FCL) - and Lazarus: lazarus\components\lazutils\laz_avl_tree.pp - Code object has been fully redo but algo is based on it... and on - initial algo of AVL Tree created by Adelson-Velsky and Landis - ***** END LICENSE BLOCK ***** } @@ -42,6 +34,7 @@ interface uses Classes, SysUtils, + SyncObjs, // NOTE ABOUT FREEPASCAL (2020-03-10) // Current version 3.0.4 does not contain valid support for Generics, using Generics from this: // https://github.com/PascalCoinDev/PascalCoin/tree/master/src/libraries/generics.collections @@ -51,934 +44,1545 @@ interface {$I ./ConfigAbstractMem.inc } -type - TAVLTreePosition = (poParent, poLeft, poRight); - - EAVLAbstractTree = Class(Exception); +{$IFDEF ABSTRACTMEM_TESTING_MODE} + {$DEFINE ABSTRACTMEM_CIRCULAR_SEARCH_PROTECTION} +{$ENDIF} - { TAVLAbstractTree } +type + EAbstractBTree = Class(Exception); - TAVLAbstractTree = class + TAbstractBTree = Class + public + type + TDataSource = TData; + TIdentifyArray = Array of TIdentify; + TDataArray = Array of TData; + TAbstractBTreeNode = record + identify : TIdentify; + parent : TIdentify; + data : TDataArray; + childs : TIdentifyArray; + function IsLeaf : Boolean; + procedure InsertData(const AData : TData; AIndex : Integer); + procedure InsertChild(const AChild : TIdentify; AIndex : Integer); + procedure RemoveInNode(AIndex : Integer); + procedure DeleteData(AIndex : Integer); + procedure DeleteChild(AChildIndex : Integer); + function Count : Integer; + end; private - FOnCompare: TComparison; - FDisabledsCount : Integer; + FOnCompareIdentify: TComparison; + FOnCompareData: TComparison; FAllowDuplicates: Boolean; - procedure BalanceAfterInsert(ANode: T); - procedure BalanceAfterDelete(ANode: T); - procedure CheckNode(const ANode: T); overload; - function CheckNode(const ANode: T; ACheckedList:TOrderedList; var ALeftDepth, ARightDepth : Integer; const AErrors : TStrings): integer; overload; - procedure RotateLeft(var ANode: T); - procedure RotateRight(var ANode: T); - procedure BeginUpdate; - procedure EndUpdate; - procedure SwitchPositionWithSuccessor(aNode, aSuccessor: T); + FOrder: Integer; + FCircularProtection : Boolean; + procedure SplitAfterInsert(var ANode : TAbstractBTreeNode; const ACircularProtectionList : TOrderedList); + procedure MoveRange(var ASourceNode, ADestNode : TAbstractBTreeNode; AFromSource, ACount, AToDest : Integer); + procedure MoveRangeBetweenSiblings(var ASourceNode, ADestNode : TAbstractBTreeNode); + procedure BTreeNodeToString(const ANode : TAbstractBTreeNode; ALevel, ALevelIndex : Integer; const AStrings : TStrings); + procedure CheckConsistencyEx(const ANode: TAbstractBTreeNode; AIsGoingDown : Boolean; AParentDataIndexLeft,AParentDataIndexRight : Integer; ADatas: TList; AIdents: TOrderedList; ACurrentLevel : Integer; var ALevels, ANodesCount, AItemsCount : Integer); + function FindPrecessorExt(const ACircularProtectionList : TOrderedList; var ANode : TAbstractBTreeNode; var iPos : Integer) : Boolean; + function FindSuccessorExt(const ACircularProtectionList : TOrderedList; var ANode : TAbstractBTreeNode; var iPos : Integer) : Boolean; + procedure EraseTreeExt(var ANode : TAbstractBTreeNode); + function FindLowestNodeExt(const ACircularProtectionList : TOrderedList): TAbstractBTreeNode; + function FindHighestNodeExt(const ACircularProtectionList : TOrderedList): TAbstractBTreeNode; protected FCount: integer; - function GetRoot: T; virtual; abstract; - procedure SetRoot(const Value: T); virtual; abstract; - function HasPosition(const ANode : T; APosition : TAVLTreePosition) : Boolean; virtual; abstract; - function GetPosition(const ANode : T; APosition : TAVLTreePosition) : T; virtual; abstract; - procedure SetPosition(var ANode : T; APosition : TAVLTreePosition; const ANewValue : T); virtual; abstract; - procedure ClearPosition(var ANode : T; APosition : TAVLTreePosition); virtual; abstract; - function GetBalance(const ANode : T) : Integer; virtual; abstract; - procedure SetBalance(var ANode : T; ANewBalance : Integer); virtual; abstract; - function AreEquals(const ANode1, ANode2 : T) : Boolean; virtual; abstract; - procedure ClearNode(var ANode : T); virtual; abstract; - procedure DisposeNode(var ANode : T); virtual; abstract; - // - procedure UpdateFinished; virtual; + FAbstractBTreeLock : TCriticalSection; + function GetRoot: TAbstractBTreeNode; virtual; abstract; + procedure SetRoot(var Value: TAbstractBTreeNode); virtual; abstract; + + procedure ClearNode(var ANode : TAbstractBTreeNode); virtual; + function NewNode : TAbstractBTreeNode; virtual; abstract; + procedure DisposeNode(var ANode : TAbstractBTreeNode); virtual; abstract; + procedure SetNil(var AIdentify : TIdentify); virtual; abstract; + function BinarySearch(const AData : TData; const ADataArray : TDataArray; out AIndex : Integer) : Boolean; virtual; + function AreEquals(const AIdentify1, AIdentify2 : TIdentify) : Boolean; + procedure SaveNode(var ANode : TAbstractBTreeNode); virtual; abstract; + function GetCount : Integer; virtual; + procedure SetCount(const ANewCount : Integer); virtual; + function GetHeight: Integer; virtual; + property Count : Integer read GetCount; + procedure CheckConsistencyFinalized(ADatas : TList; AIdents : TOrderedList; Alevels, ANodesCount, AItemsCount : Integer); virtual; + function FindChildPos(const AIdent : TIdentify; const AParent : TAbstractBTreeNode) : Integer; + procedure DisposeData(var AData : TData); virtual; + function DoCompareData(const ALeftData, ARightData: TData): Integer; virtual; + procedure DoOnFindProcessStart; virtual; + procedure DoOnFindProcessEnd; virtual; + function DoFind(const AData: TData; const ACircularProtectionList : TOrderedList; out ANode : TAbstractBTreeNode; out iPos : Integer): Boolean; virtual; public property AllowDuplicates : Boolean read FAllowDuplicates write FAllowDuplicates; - property DisabledsCount:Integer read FDisabledsCount; - function IsNil(const ANode : T) : Boolean; virtual; abstract; + function IsNil(const AIdentify : TIdentify) : Boolean; virtual; abstract; + function ToString(const ANode : TAbstractBTreeNode) : String; overload; + procedure EraseTree; // - property Root: T read GetRoot; - function FindInsertPos(const AData: T): T; - function Find(const AData: T): T; - function FindSuccessor(const ANode: T): T; - function FindPrecessor(const ANode: T): T; - function FindLowest: T; - function FindHighest: T; - function Add(var ANode: T) : Boolean; - procedure Delete(var ANode: T); - constructor Create(const OnCompareMethod: TComparison; AAllowDuplicates : Boolean); virtual; - function ConsistencyCheck(const AErrors : TStrings): integer; virtual; - function ToString(const ANode:T) : String; reintroduce; overload; virtual; - function ToString : String; reintroduce; overload; - property OnCompareMethod: TComparison read FOnCompare; - end; - - // - - PAVLPointerTreeNode = ^TAVLPointerTreeNode; - TAVLPointerTreeNode = Record - parent : PAVLPointerTreeNode; - left : PAVLPointerTreeNode; - right : PAVLPointerTreeNode; - balance : Integer; - data : Pointer; + property Root: TAbstractBTreeNode read GetRoot; + function Find(const AData: TData; out ANode : TAbstractBTreeNode; out iPos : Integer): Boolean; + function GetNode(AIdentify : TIdentify) : TAbstractBTreeNode; virtual; abstract; + function FindPrecessor(const AData : TData; out APrecessor : TData) : Boolean; + function FindSuccessor(const AData : TData; out ASuccessor : TData) : Boolean; + function FindLowestNode: TAbstractBTreeNode; + function FindLowest(out ALowest : TData) : Boolean; + function FindHighestNode: TAbstractBTreeNode; + function FindHighest(out AHighest : TData) : Boolean; + function FindIndex(AIndex : Integer; out AData : TData) : Boolean; + function FillList(AStartIndex, ACount : Integer; const AList : TList) : Integer; + function Add(const AData: TData) : Boolean; + function Delete(const AData: TData) : Boolean; + function NodeIdentifyToString(const AIdentify : TIdentify) : String; virtual; + function NodeDataToString(const AData : TData) : String; virtual; + constructor Create(const AOnCompareIdentifyMethod: TComparison; const AOnCompareDataMethod: TComparison; AAllowDuplicates : Boolean; AOrder: Integer); + destructor Destroy; override; + property OnCompareIdentifyMethod: TComparison read FOnCompareIdentify; + property OnCompareDataMethod: TComparison read FOnCompareData; + function BTreeToString : String; + property Order : Integer read FOrder; + function MaxItemsPerNode : Integer; + function MinItemsPerNode : Integer; + function MinChildrenPerNode : Integer; + function MaxChildrenPerNode : Integer; + procedure CheckConsistency; virtual; + property Height : Integer read GetHeight; + property CircularProtection : Boolean read FCircularProtection write FCircularProtection; + procedure Lock; virtual; + procedure Unlock; virtual; + function FindExt(const AData: TData; out ADataEqualOrPrecessorFound : TData; out ANode : TAbstractBTreeNode; out iPos : Integer) : Boolean; overload; + function FindExt(const AData: TData; out ADataEqualOrPrecessorFound : TData) : Boolean; overload; + function GetNullData : TData; virtual; End; - TPAVLPointerTree = Class( TAVLAbstractTree ) + TMemoryBTree = Class( TAbstractBTree ) private - FRoot : PAVLPointerTreeNode; + FBuffer : TList.TAbstractBTreeNode> ; + Froot : Integer; + FDisposed : Integer; + FDisposedMinPos : Integer; protected - function GetRoot: PAVLPointerTreeNode; override; - procedure SetRoot(const Value: PAVLPointerTreeNode); override; - function HasPosition(const ANode : PAVLPointerTreeNode; APosition : TAVLTreePosition) : Boolean; override; - procedure SetPosition(var ANode : PAVLPointerTreeNode; APosition : TAVLTreePosition; const ANewValue : PAVLPointerTreeNode); override; - procedure ClearPosition(var ANode : PAVLPointerTreeNode; APosition : TAVLTreePosition); override; - function GetBalance(const ANode : PAVLPointerTreeNode) : Integer; override; - procedure SetBalance(var ANode : PAVLPointerTreeNode; ANewBalance : Integer); override; - function AreEquals(const ANode1, ANode2 : PAVLPointerTreeNode) : Boolean; override; - procedure ClearNode(var ANode : PAVLPointerTreeNode); override; - procedure DisposeNode(var ANode : PAVLPointerTreeNode); override; + function GetRoot: TAbstractBTree.TAbstractBTreeNode; override; + procedure SetRoot(var Value: TAbstractBTree.TAbstractBTreeNode); override; + function NewNode : TAbstractBTree.TAbstractBTreeNode; override; + procedure DisposeNode(var ANode : TAbstractBTree.TAbstractBTreeNode); override; + procedure SetNil(var AIdentify : Integer); override; + procedure SaveNode(var ANode : TAbstractBTree.TAbstractBTreeNode); override; + procedure CheckConsistencyFinalized(ADatas : TList; AIdents : TOrderedList; Alevels, ANodesCount, AItemsCount : Integer); override; public - function IsNil(const ANode : PAVLPointerTreeNode) : Boolean; override; - function ToString(const ANode: PAVLPointerTreeNode) : String; override; - constructor Create(const OnCompareMethod: TComparison; AAllowDuplicates : Boolean); override; - // - function GetPosition(const ANode : PAVLPointerTreeNode; APosition : TAVLTreePosition) : PAVLPointerTreeNode; override; + function IsNil(const AIdentify : Integer) : Boolean; override; + constructor Create(const AOnCompareDataMethod: TComparison; AAllowDuplicates : Boolean; AOrder : Integer); + destructor Destroy; override; + function GetNode(AIdentify : Integer) : TAbstractBTree.TAbstractBTreeNode; override; + property Count; End; - -const - CT_TAVLPointerTreeNode_NULL : TAVLPointerTreeNode = (parent:Nil;left:Nil;right:Nil;balance:0;data:Nil); + TNoDuplicateData = Class + private + FBTree : TMemoryBTree; + public + function Add(const AData : TData) : Boolean; + constructor Create(const AOnCompareDataMethod: TComparison); + destructor Destroy; override; + End; implementation -{ TAVLAbstractTree } +{ TAbstractBTree } -function TAVLAbstractTree.Add(var ANode : T) : Boolean; -var LInsertPos: T; - LInsertComp: integer; +function TAbstractBTree.Add(const AData: TData): Boolean; +var Lnode : TAbstractBTreeNode; + iDataPos : Integer; + LCircularProtectionList : TOrderedList; begin - BeginUpdate; + FAbstractBTreeLock.Acquire; Try - // Init T - ClearPosition(ANode,poLeft); - ClearPosition(ANode,poRight); - SetBalance(ANode,0); // Init Balance to 0 - if Not IsNil(Root) then begin - LInsertPos:=FindInsertPos(ANode); - LInsertComp:=fOnCompare(ANode,LInsertPos); - SetPosition(ANode,poParent,LInsertPos); - if LInsertComp<0 then begin - // insert to the left - SetPosition(LInsertPos,poLeft,ANode); - end else if (AllowDuplicates) Or (LInsertComp>0) then begin - // insert to the right - SetPosition(LInsertPos,poRight,ANode); - end else begin - Exit(False); + if FCircularProtection then begin + LCircularProtectionList := TOrderedList.Create(False,FOnCompareIdentify); + end else LCircularProtectionList := Nil; + Try + if (DoFind(AData,LCircularProtectionList,Lnode,iDataPos)) then begin + if (Not FAllowDuplicates) then Exit(False); + // Follow childs until leaf node + while (Not Lnode.IsLeaf) do begin + Lnode := GetNode(Lnode.childs[iDataPos]); // Insert at right position + if (BinarySearch(AData,Lnode.data,iDataPos)) then begin + // + end; + end; + end else if (IsNil(Lnode.identify)) then begin + Lnode := NewNode; + SetRoot(Lnode); end; - BalanceAfterInsert(ANode); - end else begin - SetRoot( ANode ); - ClearPosition(ANode,poParent); - end; - inc(FCount); - Result := True; + Assert(Lnode.IsLeaf,'Node must be a leaf'); + // Lnode is a leaf and iDataPos is position to insert + Lnode.InsertData(Adata,iDataPos); + SaveNode(Lnode); + if Lnode.Count>MaxItemsPerNode then begin + // Split and up + if Assigned(LCircularProtectionList) then LCircularProtectionList.Clear; + SplitAfterInsert(Lnode,LCircularProtectionList); + end; + Result := True; + if (FCount>=0) then begin + SetCount(FCount+1); + end; + Finally + if Assigned(LCircularProtectionList) then + LCircularProtectionList.Free; + End; Finally - EndUpdate; + FAbstractBTreeLock.Release; End; end; -function TAVLAbstractTree.FindLowest: T; +function TAbstractBTree.AreEquals(const AIdentify1, AIdentify2: TIdentify): Boolean; begin - Result:=Root; - if Not IsNil(Result) then - while HasPosition(Result,poLeft) do Result := GetPosition(Result,poLeft); + Result := FOnCompareIdentify(AIdentify1,AIdentify2)=0; end; -function TAVLAbstractTree.FindHighest: T; +function TAbstractBTree.BinarySearch(const AData : TData; const ADataArray: TDataArray; out AIndex: Integer): Boolean; + // AIndex will be a value between 0..Count and will be the position to do a Insert if needed +var i, j, mid, cmp : integer; begin - Result:=Root; - if Not IsNil(Result) then - while HasPosition(Result,poRight) do Result := GetPosition(Result,poRight); + Result := False; + i := 0; + j := Length(ADataArray)-1; + while (i <= j) do begin + mid := (i + j) shr 1; + cmp := DoCompareData(AData,ADataArray[mid]); + if (cmp<0) then begin + j := mid - 1; + end else if (cmp>0) then begin + i := mid + 1; + end else begin + AIndex := mid; + Exit(True); + end; + end; + AIndex := i; +end; + +procedure TAbstractBTree.BTreeNodeToString(const ANode: TAbstractBTreeNode; ALevel, ALevelIndex : Integer; const AStrings: TStrings); +var i : Integer; + s : String; +begin + while (AStrings.Count<=ALevel) do AStrings.Add(''); + s := ''; + for i := 0 to ANode.Count-1 do begin + if (s<>'') then s := s + ','; + s := s + NodeDataToString(ANode.data[i]); + end; + if (AStrings.Strings[ALevel]<>'') then AStrings.Strings[ALevel] := AStrings.Strings[ALevel]+' '; + AStrings.Strings[ALevel] := AStrings.Strings[ALevel] + '['+s+']'; + for i := 0 to High(ANode.childs) do begin + BTreeNodeToString( GetNode(ANode.childs[i]), ALevel+1, ALevelIndex+i, AStrings); + end; end; -procedure TAVLAbstractTree.BalanceAfterDelete(ANode: T); +function TAbstractBTree.BTreeToString: String; +var Lsl : TStrings; + Lnode : TAbstractBTreeNode; +begin + Lsl := TStringList.Create; + FAbstractBTreeLock.Acquire; + try + Lnode := GetRoot; + if Not IsNil(Lnode.identify) then BTreeNodeToString(Lnode,0,0,Lsl); + Result := Lsl.Text; + finally + FAbstractBTreeLock.Release; + Lsl.Free; + end; +end; + +procedure TAbstractBTree.CheckConsistency; var - OldParent, OldRight, OldRightLeft, OldLeft, OldLeftRight: T; -begin - while Not IsNil(ANode) do begin - if ((GetBalance(ANode)=+1) or (GetBalance(ANode)=-1)) then exit; - OldParent:=GetPosition(ANode,poParent); - if (GetBalance(ANode)=0) then begin - // Treeheight has decreased by one - if IsNil(OldParent) then - exit; - if (AreEquals(GetPosition(OldParent,poLeft),ANode)) then - SetBalance(OldParent,GetBalance(OldParent)+1) - else - SetBalance(OldParent,GetBalance(OldParent)-1); - ANode:=OldParent; - end else if (GetBalance(ANode)=+2) then begin - // Node is overweighted to the right - OldRight:=GetPosition(ANode,poRight); - if (GetBalance(OldRight)>=0) then begin - // OldRight.Balance is 0 or +1 - // rotate ANode,OldRight left - RotateLeft(ANode); - SetBalance(ANode,(1-GetBalance(OldRight))); // toggle 0 and 1 - SetBalance(OldRight,GetBalance(OldRight)-1); - ANode:=OldRight; - end else begin - // OldRight.Balance=-1 - { double rotate - = rotate OldRightLeft,OldRight right - and then rotate ANode,OldRightLeft left - OldParent OldParent - | | - ANode OldRightLeft - \ / \ - OldRight => ANode OldRight - / \ / - OldRightLeft OldRightLeftLeft OldRightLeftRight - / \ - OldRightLeftLeft OldRightLeftRight - } - OldRightLeft:=GetPosition(OldRight,poLeft); - RotateRight(OldRight); - RotateLeft(ANode); - if (GetBalance(OldRightLeft)<=0) then - SetBalance(ANode,0) - else - SetBalance(ANode,-1); - if (GetBalance(OldRightLeft)>=0) then - SetBalance(OldRight,0) - else - SetBalance(OldRight,+1); - SetBalance(OldRightLeft,0); - ANode:=OldRightLeft; - end; - end else begin - // Node.Balance=-2 - // Node is overweighted to the left - OldLeft:=GetPosition(ANode,poLeft); - if (GetBalance(OldLeft)<=0) then begin - // rotate OldLeft,ANode right - RotateRight(ANode); - SetBalance(ANode,(-1-GetBalance(OldLeft))); // toggle 0 and -1 - SetBalance(OldLeft,GetBalance(OldLeft)+1); - ANode:=OldLeft; - end else begin - // OldLeft.Balance = 1 - { double rotate left right - = rotate OldLeft,OldLeftRight left - and then rotate OldLeft,ANode right - OldParent OldParent - | | - ANode OldLeftRight - / / \ - OldLeft => OldLeft ANode - \ \ / - OldLeftRight OldLeftRightLeft OldLeftRightRight - / \ - OldLeftRightLeft OldLeftRightRight - } - OldLeftRight:=GetPosition(OldLeft,poRight); - RotateLeft(OldLeft); - RotateRight(ANode); - if (GetBalance(OldLeftRight)>=0) then - SetBalance(ANode,0) - else - SetBalance(ANode,+1); - if (GetBalance(OldLeftRight)<=0) then - SetBalance(OldLeft,0) - else - SetBalance(OldLeft,-1); - SetBalance(OldLeftRight,0); - ANode:=OldLeftRight; - end; + FDatas : TList; + FIdents : TOrderedList; + Lnode : TAbstractBTreeNode; + Llevels, LnodesCount, LItemsCount : Integer; +begin + FIdents := TOrderedList.Create(False,FOnCompareIdentify); + FDatas := TList.Create; + FAbstractBTreeLock.Acquire; + try + Llevels := 0; + LnodesCount := 0; + LItemsCount := 0; + Lnode := GetRoot; + if Not IsNil(Lnode.identify) then begin + CheckConsistencyEx(Lnode,True,-1,-1,FDatas,FIdents,1,Llevels,LnodesCount,LItemsCount); + end; + if (FCount>=0) then begin + if LItemsCount<>FCount then raise EAbstractBTree.Create(Format('Inconsistent items count %d vs register %d',[LItemsCount,FCount])); end; + CheckConsistencyFinalized(FDatas,FIdents,Llevels,LnodesCount,LItemsCount); + finally + FAbstractBTreeLock.Release; + FDatas.Free; + FIdents.Free; end; end; -procedure TAVLAbstractTree.BalanceAfterInsert(ANode : T); -var - OldParent, OldRight, OldLeft: T; -begin - OldParent:=GetPosition(ANode,poParent); - while Not IsNil(OldParent) do begin - if (AreEquals(GetPosition(OldParent,poLeft),ANode)) then begin - // Node is left child - SetBalance(OldParent,GetBalance(OldParent)-1); - if (GetBalance(OldParent)=0) then exit; - if (GetBalance(OldParent)=-1) then begin - ANode:=OldParent; - OldParent:=GetPosition(ANode,poParent); - continue; - end; - // OldParent.Balance=-2 - if (GetBalance(ANode)=-1) then begin - { rotate ANode,ANode.Parent right - OldParentParent OldParentParent - | | - OldParent => ANode - / \ - ANode OldParent - \ / - OldRight OldRight } - RotateRight(OldParent); - SetBalance(ANode,0); - SetBalance(OldParent,0); - end else begin - // Node.Balance = +1 - { double rotate - = rotate ANode,OldRight left and then rotate OldRight,OldParent right - OldParentParent OldParentParent - | | - OldParent OldRight - / => / \ - ANode ANode OldParent - \ \ / - OldRight OldRightLeft OldRightRight - / \ - OldRightLeft OldRightRight - } - OldRight:=GetPosition(ANode,poRight); - RotateLeft(ANode); - RotateRight(OldParent); - if (GetBalance(OldRight)<=0) then - SetBalance(ANode,0) - else - SetBalance(ANode,-1); - if (GetBalance(OldRight)=-1) then - SetBalance(OldParent,1) - else - SetBalance(OldParent,0); - SetBalance(OldRight,0); - end; - exit; +procedure TAbstractBTree.CheckConsistencyEx(const ANode: TAbstractBTreeNode; AIsGoingDown : Boolean; AParentDataIndexLeft, AParentDataIndexRight : Integer; ADatas: TList; AIdents: TOrderedList; ACurrentLevel : Integer; var ALevels, ANodesCount, AItemsCount : Integer); +var Lchild : TAbstractBTreeNode; + i, Lcmp, iLeft, iRight : Integer; +begin + if (assigned(AIdents)) then begin + if (AIdents.Add(ANode.identify)<0) then raise EAbstractBTree.Create(Format('Inconsistent Identify',[])); + end; + Inc(ANodesCount); + Inc(AItemsCount,ANode.Count); + if AIsGoingDown then begin + inc(ALevels); + end; + if (ALevels < ACurrentLevel) then raise EAbstractBTree.Create(Format('Inconsistent level %d < %d',[ALevels,ACurrentLevel])); + if (ACurrentLevel>1) then begin + if (ANode.Count=0) then raise EAbstractBTree.Create(Format('Inconsistent NIL node at level %d',[ACurrentLevel])); + if (AParentDataIndexLeft>=0) then begin + // Right must be < than parent + Lcmp := DoCompareData(ADatas.Items[AParentDataIndexLeft], ANode.data[0]); + if Lcmp>0 then raise EAbstractBTree.Create(Format('Inconsistent %d data [%s] vs parent left [%s] at level %d', + [Lcmp,NodeDataToString(ANode.data[0]),NodeDataToString(ADatas.Items[AParentDataIndexLeft]), ACurrentLevel])); + end; + if (AParentDataIndexRight>=0) then begin + // Right must be < than parent + Lcmp := DoCompareData(ANode.data[ANode.Count-1],ADatas.Items[AParentDataIndexRight]); + if Lcmp>0 then raise EAbstractBTree.Create(Format('Inconsistent %d data [%s] vs parent right [%s] at level %d', + [Lcmp,NodeDataToString(ANode.data[ANode.Count-1]),NodeDataToString(ADatas.Items[AParentDataIndexRight]), ACurrentLevel])); + end; + end; + if (MinItemsPerNode>ANode.Count) or (MaxItemsPerNode0 then raise EAbstractBTree.Create(Format('Inconsistent data (%d..%d)/%d [%s] > [%s] at level %d', + [i-1,i,ANode.Count,NodeDataToString(ANode.data[i-1]),NodeDataToString(ANode.data[i]), ACurrentLevel])); + end; + + if ANode.IsLeaf then begin + if (ALevels<>ACurrentLevel) then raise EAbstractBTree.Create('Inconsistency error not balanced'); + Exit; + end; + if (Length(ANode.childs)<>(ANode.Count+1)) then raise EAbstractBTree.Create(Format('Inconsistency error %d childs vs %d items',[Length(ANode.childs),ANode.Count])); + if (ACurrentLevel>1) and ((MinChildrenPerNode>Length(ANode.childs)) or (MaxChildrenPerNode ANode - \ / - ANode OldParent - / \ - OldLeft OldLeft } - RotateLeft(OldParent); - SetBalance(ANode,0); - SetBalance(OldParent,0); - end else begin - // Node.Balance = -1 - { double rotate - = rotate OldLeft,ANode right and then rotate OldParent,OldLeft right - OldParentParent OldParentParent - | | - OldParent OldLeft - \ => / \ - ANode OldParent ANode - / \ / - OldLeft OldLeftLeft OldLeftRight - / \ - OldLeftLeft OldLeftRight - } - OldLeft:=GetPosition(ANode,poLeft); - RotateRight(ANode); - RotateLeft(OldParent); - if (GetBalance(OldLeft)>=0) then - SetBalance(ANode,0) - else - SetBalance(ANode,+1); - if (GetBalance(OldLeft)=+1) then - SetBalance(OldParent,-1) - else - SetBalance(OldParent,0); - SetBalance(OldLeft,0); - end; - exit; + iLeft := iRight; + iRight := -1; + end; + Lchild := GetNode(ANode.childs[i]); + if Not AreEquals(Lchild.parent,ANode.identify) then begin + raise EAbstractBTree.Create(Format('Inconsistent Identify child %d/%d %s invalid pointer to parent %s (%s)', + [i+1,Length(ANode.childs),ToString(Lchild),NodeIdentifyToString(ANode.identify),NodeIdentifyToString(Lchild.parent)])); end; + CheckConsistencyEx(Lchild, + ((AIsGoingDown) and (i=0)),iLeft,iRight, + ADatas,AIdents, + ACurrentLevel+1, + ALevels,ANodesCount,AItemsCount); end; + end; -procedure TAVLAbstractTree.BeginUpdate; +procedure TAbstractBTree.CheckConsistencyFinalized(ADatas: TList; AIdents: TOrderedList; Alevels, ANodesCount, AItemsCount: Integer); begin - inc(FDisabledsCount); + // +end; + +procedure TAbstractBTree.ClearNode(var ANode: TAbstractBTreeNode); +begin + SetLength(ANode.data,0); + SetLength(ANode.childs,0); + SetNil(ANode.identify); + SetNil(ANode.parent); end; -constructor TAVLAbstractTree.Create(const OnCompareMethod: TComparison; AAllowDuplicates : Boolean); +constructor TAbstractBTree.Create(const AOnCompareIdentifyMethod: TComparison; const AOnCompareDataMethod: TComparison; AAllowDuplicates : Boolean; AOrder: Integer); begin - inherited Create; - FOnCompare:=OnCompareMethod; - FCount:=0; - FDisabledsCount := 0; + FAbstractBTreeLock := TCriticalSection.Create; + FOnCompareIdentify := AOnCompareIdentifyMethod; + FOnCompareData := AOnCompareDataMethod; FAllowDuplicates := AAllowDuplicates; + FOrder := AOrder; + if FOrder<3 then FOrder := 3 // Minimum order for a BTree is 3. Order = Max childs + else if FOrder>255 then FOrder := 255; // Maximum order will be established to 255 + FCount := -1; // -1 Means there is no control + {$IFDEF ABSTRACTMEM_CIRCULAR_SEARCH_PROTECTION} + FCircularProtection := True; + {$ELSE} + FCircularProtection := False; + {$ENDIF} end; -procedure TAVLAbstractTree.Delete(var ANode: T); -var OldParent, Child, LSuccessor: T; +function TAbstractBTree.Delete(const AData: TData) : Boolean; +var Lnode, Lparent, Lparentparent : TAbstractBTreeNode; + iPos, iPosParent, iPosParentParent, j : Integer; + LmovingUp : Boolean; + Lleft, Lright : TAbstractBTreeNode; + LCircularProtectionList: TOrderedList; begin - BeginUpdate; + FAbstractBTreeLock.Acquire; try - if (Not IsNil(GetPosition(ANode,poLeft))) and (Not IsNil(GetPosition(ANode,poRight))) then begin - // ANode has both: Left and Right - // Switch ANode position with Successor - // Because ANode.Right<>nil the Successor is a child of ANode - LSuccessor := FindSuccessor(ANode); - SwitchPositionWithSuccessor(ANode,LSuccessor); + if FCircularProtection then begin + LCircularProtectionList := TOrderedList.Create(False,FOnCompareIdentify); + end else LCircularProtectionList := Nil; + try + + if Not DoFind(AData,LCircularProtectionList,Lnode,iPos) then Exit(False); + + Assert(FCount<>0,'Cannot Delete when FCount = 0'); + + if (FCount>0) then begin + SetCount(FCount-1); + end; + + LmovingUp := False; + + if (Lnode.IsLeaf) then begin + Lnode.DeleteData(iPos); end; - // left or right is nil - OldParent:=GetPosition(ANode,poParent); - ClearPosition(ANode,poParent); - if Not IsNil(GetPosition(ANode,poLeft)) then - Child:=GetPosition(ANode,poLeft) - else - Child:=GetPosition(ANode,poRight); - if Not IsNil(Child) then - SetPosition(Child,poParent,OldParent); - if Not IsNil(OldParent) then begin - // Node has parent - if (AreEquals(GetPosition(OldParent,poLeft),ANode)) then begin - // Node is left child of OldParent - SetPosition(OldParent,poLeft,Child); - SetBalance(OldParent, GetBalance(OldParent)+1); + + if Assigned(LCircularProtectionList) then LCircularProtectionList.Clear; + + repeat + if Assigned(LCircularProtectionList) then begin + if LCircularProtectionList.Add(Lnode.identify)<0 then raise EAbstractBTree.Create(ClassName+'.Delete Circular T structure at Find for T='+ToString(LNode)+ ' deleting '+NodeDataToString(AData)); + end; + if (Lnode.IsLeaf) or (LmovingUp) then begin + if (IsNil(Lnode.parent)) and (Length(Lnode.childs)=1) then begin + // child will be root + Lleft := GetNode(Lnode.childs[0]); + DisposeNode(Lnode); + SetNil(Lleft.parent); + SaveNode(Lleft); + SetRoot(Lleft); + Exit(True); + end; + + if (IsNil(Lnode.parent)) or (Lnode.Count>=MinItemsPerNode) then begin + // Deleting from root where root is single node + // or Node has more than minimum datas + SaveNode(Lnode); + Exit(True); + end; + // Can borrow from left or right? + Lparent := GetNode( Lnode.parent ); + if (Not LmovingUp) then begin + BinarySearch(AData,Lparent.data,iPosParent); + end; + if (iPosParent>0) then begin + Lleft := GetNode(Lparent.childs[iPosParent-1]); + // Use Left? + if Lleft.Count>MinItemsPerNode then begin + + // Move Tri From Left To Right=Lnode + if (Not Lleft.IsLeaf) then begin + Lright := GetNode(Lleft.childs[High(Lleft.childs)]); // Right = left sibling last child (right child) + Lright.parent := Lnode.identify; + SaveNode(Lright); + // + Lnode.InsertChild(Lright.identify,0); + Lleft.DeleteChild(High(Lleft.childs)); + end else Assert(Lnode.IsLeaf,'node must be a leaf because left sibling is a leaf'); + Lnode.InsertData(Lparent.data[iPosParent-1],0); + Lparent.DeleteData(iPosParent-1); + Lparent.InsertData(Lleft.data[Lleft.Count-1],iPosParent-1); + Lleft.DeleteData(Lleft.Count-1); + + SaveNode(Lnode); + SaveNode(Lparent); + SaveNode(Lleft); + Exit(True); + end; + end else ClearNode(Lleft); + if (iPosParentMinItemsPerNode) then begin + // Move Tri From Right To left=Lnode + if (Not Lright.IsLeaf) then begin + Lleft := GetNode(Lright.childs[0]); // Left = right sibling first child (left child) + Lleft.parent := Lnode.identify; + SaveNode(Lleft); + // + Lnode.InsertChild(Lleft.identify,Length(Lnode.childs)); + Lright.DeleteChild(0); + end else Assert(Lnode.IsLeaf,'node must be a leaf because right sibling is a leaf'); + Lnode.InsertData(Lparent.data[iPosParent],Lnode.Count); + Lparent.DeleteData(iPosParent); + Lparent.InsertData(Lright.data[0],iPosParent); + Lright.DeleteData(0); + + SaveNode(Lnode); + SaveNode(Lparent); + SaveNode(Lright); + Exit(True); + end; + end; + // Leaf but neither left or right > MinItemsPerNode + // Parent can remove 1 item and move others to childs? + if (Lnode.IsLeaf) + and + (Lparent.Count>MinItemsPerNode) + then begin + // Yes. Use parent + if (iPosParent>0) then begin + // Use Left Sibling as destination and remove Lnode + Lleft := GetNode(Lparent.childs[iPosParent-1]); + Lleft.InsertData(Lparent.data[iPosParent-1],Lleft.Count); + Lparent.DeleteData(iPosParent-1); + Lparent.DeleteChild(iPosParent); + MoveRangeBetweenSiblings(Lnode,Lleft); + DisposeNode(Lnode); + SaveNode(Lparent); + SaveNode(Lleft); + Exit(True); + end else begin + // Use right sibling (loaded before) + Lnode.InsertData(Lparent.data[iPosParent],Lnode.Count); + Lparent.DeleteData(0); + Lparent.DeleteChild(1); // 1 = Lright + SaveNode(Lparent); + for j := 0 to Lright.Count-1 do begin + Lnode.InsertData(Lright.data[j],Lnode.Count); + end; + DisposeNode(Lright); + SaveNode(Lnode); + Exit(True); + end; + end; + // Neither siblings neither parent are > MinItemsPernode + // in this case, go up in the tree using Parent as node + { + [a,c] MinItemsPerNode=2 Order=3,4 + [a1] [b1] [c1] + + } + + if (Not IsNil(Lparent.parent)) then begin + Lparentparent := GetNode(Lparent.parent); + iPosParentParent := FindChildPos(Lparent.identify,Lparentparent); + end; + + // Lnode is empty + if (iPosParent>0) then begin + // Deleting [b1] or [c1] + // Move to Left sibling and dispose Lnode + + Lleft := GetNode(Lparent.childs[iPosParent-1]); + Lleft.InsertData(Lparent.data[iPosParent-1],Lleft.Count); + + if (not AreEquals(Lnode.identify,Lleft.identify)) then begin + MoveRangeBetweenSiblings(Lnode,Lleft); + end; + if (iPosParent<=Lparent.Count) and (not AreEquals(Lnode.identify,Lparent.childs[iPosParent])) then begin + Lright := GetNode(Lparent.childs[iPosParent]); + MoveRangeBetweenSiblings(Lright,Lleft); + DisposeNode(Lright); + end; + + Lparent.DeleteData(iPosParent-1); + Lparent.DeleteChild(iPosParent); + + if (not AreEquals(Lnode.identify,Lleft.identify)) then begin + DisposeNode(Lnode); + end; + SaveNode(Lparent); + SaveNode(Lleft); + Lnode := Lparent; end else begin - // Node is right child of OldParent - SetPosition(OldParent,poRight,Child); - SetBalance(OldParent, GetBalance(OldParent)-1); + // Move from right and dispose Lright + // Lright was loaded before + Lnode.InsertData(Lparent.data[iPosParent],Lnode.Count); + + Lparent.DeleteData(iPosParent); + Lparent.DeleteChild(iPosParent+1); + + MoveRangeBetweenSiblings(Lright,Lnode); + + DisposeNode(Lright); + SaveNode(Lparent); + SaveNode(Lnode); + Lnode := Lparent; end; - BalanceAfterDelete(OldParent); + + iPosParent := iPosParentParent; + end else begin - // Node was Root - SetRoot( Child ); - end; - dec(FCount); + // Internal node + // Lnode[iPos] has not been deleted neither updated + // + // Search Indorder predecessor: + Lleft := GetNode(Lnode.childs[iPos]); + while (Not Lleft.IsLeaf) do begin + if Assigned(LCircularProtectionList) then begin + if LCircularProtectionList.Add(Lleft.childs[Lleft.Count])<0 then + raise EAbstractBTree.Create(ClassName+'.Delete Circular T structure searching for inorder precessor at '+ToString(Lleft)+' deleting '+NodeDataToString(AData)); + end; + Lleft := GetNode(Lleft.childs[Lleft.Count]); + end; + if (Lleft.Count>MinItemsPerNode) then begin + // Inorder predecessor + Lnode.data[iPos] := Lleft.data[Lleft.Count-1]; + SaveNode(Lnode); + Lleft.RemoveInNode(Lleft.Count-1); + SaveNode(Lleft); + Exit(True); + end; + // Search Indorder successor: + Lright := GetNode(Lnode.childs[iPos+1]); + while (Not Lright.IsLeaf) do begin + if Assigned(LCircularProtectionList) then begin + if LCircularProtectionList.Add(Lright.childs[0])<0 then + raise EAbstractBTree.Create(ClassName+'.Delete Circular T structure searching for inorder successor at '+ToString(Lright)+' deleting '+NodeDataToString(AData)); + end; + Lright := GetNode(Lright.childs[0]); + end; + if (Lright.Count>MinItemsPerNode) then begin + // Inorder successor + Lnode.data[iPos] := Lright.data[0]; + SaveNode(Lnode); + Lright.RemoveInNode(0); + SaveNode(Lright); + Exit(True); + end; + // Neither predecessor neither successor + Assert((Lleft.IsLeaf),'Left must be leaf'); + Assert((Lright.IsLeaf),'Right must be leaf'); + if (Lnode.Count>MinItemsPerNode) and (AreEquals(Lnode.identify,Lleft.parent)) then begin + // Both childs are = MinItemsPerNode and Lnode > MinItemsPerNode . Remove from Lnode + { + [a,b,c] <- Remove "b" + [a1,a2] [b1,b2] [c1,c2] <- MinItemsPerNode=2 + + [a,c] + [a1,a2,b1,b2] [c1,c2] + } + + Lnode.DeleteData(iPos); + Lnode.DeleteChild(iPos+1); //iPos+1 = Right sibling + MoveRangeBetweenSiblings(Lright,Lleft); + SaveNode(Lnode); + SaveNode(Lleft); + DisposeNode(Lright); + Exit(True); + end else begin + { + [a,e] <- Remove "a" or "e" - MinItemsPerNode=2 Order=3 + [a1,a2] [b1,b2] [f1,f2] - DisposeNode(ANode); + [a2,e] + [a1] [b1,b2] [f1,f2] <- Can remove "a2" or "b2", never "f1" or "f2" + } + // Set predecessor + Lnode.data[iPos] := Lleft.data[Lleft.Count-1]; + SaveNode(Lnode); + if (Not IsNil(Lleft.parent)) then begin + Lparent := GetNode(Lleft.parent); + iPosParent := FindChildPos(Lleft.identify,Lparent); + end; + + Lleft.DeleteData(Lleft.Count-1); + SaveNode(Lleft); + Lnode := Lleft; + end; + + end; + + if (Not LmovingUp) then begin + if Assigned(LCircularProtectionList) then LCircularProtectionList.Clear; + LmovingUp := True; + end; + until (False); + finally + if Assigned(LCircularProtectionList) then + LCircularProtectionList.Free; + end; finally - EndUpdate; + FAbstractBTreeLock.Release; end; end; +destructor TAbstractBTree.Destroy; +begin + FAbstractBTreeLock.Free; + inherited; +end; -procedure TAVLAbstractTree.EndUpdate; +procedure TAbstractBTree.DisposeData(var AData: TData); begin - if FDisabledsCount<=0 then Raise EAVLAbstractTree.Create('EndUpdate invalid'); - Dec(FDisabledsCount); - if FDisabledsCount=0 then UpdateFinished; + // Nothing to do end; -procedure TAVLAbstractTree.SwitchPositionWithSuccessor(aNode, aSuccessor: T); -{ called by delete, when aNode.Left<>nil and aNode.Right<>nil - Switch ANode position with Successor - Because ANode.Right<>nil the Successor is a child of ANode } -var - OldBalance: Integer; - OldParent, OldLeft, OldRight, - OldSuccParent, OldSuccLeft, OldSuccRight: T; -begin - OldBalance:=GetBalance(aNode); - SetBalance(aNode, GetBalance(aSuccessor)); - SetBalance(aSuccessor, OldBalance); - - OldParent:=GetPosition(aNode,poParent); - OldLeft:=GetPosition(aNode,poLeft); - OldRight:=GetPosition(aNode,poRight); - OldSuccParent:=GetPosition(aSuccessor,poParent); - OldSuccLeft:=GetPosition(aSuccessor,poLeft); - OldSuccRight:=GetPosition(aSuccessor,poRight); - - if Not IsNil(OldParent) then begin - if AreEquals(GetPosition(OldParent,poLeft),aNode) then - SetPosition(OldParent,poLeft,aSuccessor) - else - SetPosition(OldParent,poRight,aSuccessor); - end else - SetRoot(aSuccessor); - SetPosition(aSuccessor,poParent,OldParent); - - if Not AreEquals(OldSuccParent,aNode) then begin - if AreEquals(GetPosition(OldSuccParent,poLeft),aSuccessor) then - SetPosition(OldSuccParent,poLeft,aNode) - else - SetPosition(OldSuccParent,poRight,aNode); - SetPosition(aSuccessor,poRight,OldRight); - SetPosition(aNode,poParent,OldSuccParent); - if Not IsNil(OldRight) then - SetPosition(OldRight,poParent,aSuccessor); - end else begin - { aNode aSuccessor - \ => \ - aSuccessor aNode } - SetPosition(aSuccessor,poRight,aNode); - SetPosition(aNode,poParent,aSuccessor); +function TAbstractBTree.DoCompareData(const ALeftData, ARightData: TData): Integer; +begin + Result := FOnCompareData(ALeftData,ARightData); +end; + +function TAbstractBTree.DoFind(const AData: TData; + const ACircularProtectionList: TOrderedList; + out ANode: TAbstractBTreeNode; out iPos: Integer): Boolean; +begin + DoOnFindProcessStart; + Try + ANode := GetRoot; + iPos := 0; + repeat + if Assigned(ACircularProtectionList) then begin + if ACircularProtectionList.Add(ANode.identify)<0 then raise EAbstractBTree.Create(ClassName+'.Find Circular T structure at Find for T='+ToString(ANode)+ ' searching for '+NodeDataToString(AData)); + end; + if (BinarySearch(AData,ANode.data,iPos)) then Exit(True) + else if (Not ANode.IsLeaf) then ANode := GetNode( ANode.childs[ iPos ] ) + else Exit(False); + until False; + Finally + DoOnFindProcessEnd; + End; +end; + +procedure TAbstractBTree.DoOnFindProcessEnd; +begin + // +end; + +procedure TAbstractBTree.DoOnFindProcessStart; +begin + // +end; + +procedure TAbstractBTree.EraseTree; +var Lnode : TAbstractBTreeNode; +begin + FAbstractBTreeLock.Acquire; + try + Lnode := GetRoot; + if Not IsNil(Lnode.identify) then EraseTreeExt(Lnode); + ClearNode(Lnode); + if Fcount>0 then SetCount(0); + SetRoot(Lnode); + finally + FAbstractBTreeLock.Release; end; +end; - SetPosition(aNode,poLeft,OldSuccLeft); - if Not IsNil(OldSuccLeft) then - SetPosition(OldSuccLeft,poParent,aNode); - SetPosition(aNode,poRight,OldSuccRight); - if Not IsNil(OldSuccRight) then - SetPosition(OldSuccRight,poParent,aNode); - SetPosition(aSuccessor,poLeft,OldLeft); - if Not IsNil(OldLeft) then - SetPosition(OldLeft,poParent,aSuccessor); +procedure TAbstractBTree.EraseTreeExt(var ANode: TAbstractBTreeNode); +var i : Integer; + Lchild : TAbstractBTreeNode; +begin + if Not (ANode.IsLeaf) then begin + for i:=0 to Length(ANode.childs)-1 do begin + Lchild := GetNode(ANode.childs[i]); + EraseTreeExt(Lchild); + end; + end; + for i:=0 to Length(ANode.data)-1 do begin + DisposeData(ANode.data[i]); + end; + DisposeNode(ANode); + ClearNode(ANode); end; -function TAVLAbstractTree.Find(const AData: T): T; -var Comp: integer; - LPreviousSearch : TOrderedList; +function TAbstractBTree.FillList(AStartIndex, ACount: Integer; const AList: TList): Integer; +var Lnode : TAbstractBTreeNode; + iPos : Integer; + LCircularProtectionList: TOrderedList; begin - LPreviousSearch := TOrderedList.Create(False,FOnCompare); // Protection against circular "malformed" structure + Assert((AStartIndex>=0) and (ACount>=0),Format('Invalid start %d or count %d',[AStartIndex,ACount])); + Result := 0; + FAbstractBTreeLock.Acquire; try - Result:=Root; - while (Not IsNil(Result)) do begin - if LPreviousSearch.Add(Result)<0 then raise EAVLAbstractTree.Create('Circular T structure at Find for T='+ToString(Result)+ ' searching for '+ToString(AData)); - Comp:=fOnCompare(AData,Result); - if Comp=0 then exit; - if Comp<0 then begin - Result:=GetPosition(Result,poLeft); - end else begin - Result:=GetPosition(Result,poRight); + if FCircularProtection then begin + LCircularProtectionList := TOrderedList.Create(False,FOnCompareIdentify); + end else LCircularProtectionList := Nil; + try + if (ACount<=0) or (AStartIndex<0) then Exit; + if (FCount>=0) And (FCount-1 < AStartIndex) then Exit; + + Lnode := FindLowestNodeExt(LCircularProtectionList); + if Assigned(LCircularProtectionList) then LCircularProtectionList.Clear; + if Lnode.Count<=0 then Exit; + // + Dec(AStartIndex); + iPos := 0; + while (AStartIndex>=0) do begin + if Not FindSuccessorExt(LCircularProtectionList,Lnode,iPos) then Exit; + Dec(AStartIndex); end; + if Not ( (AStartIndex=-1) and (iPos < Lnode.Count) and (iPos>=0) ) then Exit; + // Lnode.data[iPos] = Start position + repeat + AList.Add(Lnode.data[iPos]); + Dec(ACount); + inc(Result); + until (ACount<0) or (Not FindSuccessorExt(LCircularProtectionList,Lnode,iPos)); + finally + if Assigned(LCircularProtectionList) then LCircularProtectionList.Free; end; finally - LPreviousSearch.Free; + FAbstractBTreeLock.Release; end; end; -function TAVLAbstractTree.FindInsertPos(const AData: T): T; -var Comp: integer; - LPreviousSearch : TOrderedList; +function TAbstractBTree.Find(const AData: TData; out ANode: TAbstractBTreeNode; out iPos: Integer): Boolean; +var LCircularProtectionList: TOrderedList; begin - LPreviousSearch := TOrderedList.Create(False,FOnCompare); // Protection against circular "malformed" structure + FAbstractBTreeLock.Acquire; try - Result:=Root; - while (Not IsNil(Result)) do begin - if LPreviousSearch.Add(Result)<0 then raise EAVLAbstractTree.Create('Circular T structure at FindInsertPos for T='+ToString(Result)+ ' searching for '+ToString(AData)); - Comp:=fOnCompare(AData,Result); - if Comp<0 then begin - if (HasPosition(Result,poLeft)) then begin - Result:=GetPosition(Result,poLeft); - end else begin - Exit; - end; + if FCircularProtection then begin + LCircularProtectionList := TOrderedList.Create(False,FOnCompareIdentify); + end else LCircularProtectionList := Nil; + Try + Result := DoFind(AData,LCircularProtectionList,ANode,iPos); + Finally + if Assigned(LCircularProtectionList) then LCircularProtectionList.Free; + End; + finally + FAbstractBTreeLock.Release; + end; +end; + +function TAbstractBTree.FindChildPos(const AIdent: TIdentify; const AParent: TAbstractBTreeNode): Integer; +begin + for Result := 0 to High(AParent.childs) do begin + if AreEquals(AIdent,AParent.childs[Result]) then Exit; + end; + raise EAbstractBTree.Create(Format('Child not found at %s',[ToString(AParent)])); +end; + +function TAbstractBTree.FindExt(const AData: TData; out ADataEqualOrPrecessorFound: TData): Boolean; +var LNode : TAbstractBTreeNode; + iPos : Integer; +begin + Result := FindExt(AData,ADataEqualOrPrecessorFound,LNode,iPos); +end; + +function TAbstractBTree.FindExt(const AData: TData; out ADataEqualOrPrecessorFound: TData; out ANode : TAbstractBTreeNode; out iPos : Integer): Boolean; +var + LCircularProtectionList : TOrderedList; + LPrecessorFound : Boolean; +begin + FAbstractBTreeLock.Acquire; + try + ClearNode(ANode); + iPos := 0; + if Find(AData,ANode,iPos) then begin + ADataEqualOrPrecessorFound := ANode.data[iPos]; + Result := True; + end else begin + // At this point Lnode is a leaf OR a NIL (no root available at tree) + // Lnode.Count = 0 -> NIL (no root/tree available) + if ANode.Count=0 then begin + ADataEqualOrPrecessorFound := GetNullData; + end else if ANode.Count=iPos then begin + dec(iPos); + ADataEqualOrPrecessorFound := ANode.data[iPos]; end else begin - if (HasPosition(Result,poRight)) then begin - Result:=GetPosition(Result,poRight); - end else begin - Exit; + // Will find previous valid value by climbing tree + LCircularProtectionList := TOrderedList.Create(False,FOnCompareIdentify); + try + LCircularProtectionList.Clear; + LPrecessorFound := FindPrecessorExt(LCircularProtectionList,ANode,iPos); + if LPrecessorFound then ADataEqualOrPrecessorFound := ANode.data[iPos] + else ADataEqualOrPrecessorFound := GetNullData; + finally + LCircularProtectionList.Free; end; end; + Result := False; end; finally - LPreviousSearch.Free; + FAbstractBTreeLock.Release; end; end; -function TAVLAbstractTree.FindSuccessor(const ANode: T): T; +function TAbstractBTree.FindHighest(out AHighest : TData) : Boolean; +var Lnode : TAbstractBTreeNode; begin - if HasPosition(ANode,poRight) then begin - Result := GetPosition(ANode,poRight); - while (HasPosition(Result,poLeft)) do Result:=GetPosition(Result,poLeft); - end else begin - Result := ANode; - while (HasPosition(Result,poParent)) and (AreEquals(GetPosition(GetPosition(Result,poParent),poRight),Result)) do - Result:=GetPosition(Result,poParent); - Result := GetPosition(Result,poParent); + FAbstractBTreeLock.Acquire; + try + Lnode := FindHighestNode; + if Lnode.Count>0 then begin + AHighest := Lnode.data[Lnode.Count-1]; + Result := True; + end else Result := False; + finally + FAbstractBTreeLock.Release; end; end; -function TAVLAbstractTree.ToString: String; -var i : Integer; - LStrings : TStringList; - LNode : T; +function TAbstractBTree.FindHighestNode: TAbstractBTreeNode; begin - LStrings := TStringList.Create; + Result := FindHighestNodeExt(Nil); +end; + +function TAbstractBTree.FindHighestNodeExt( + const ACircularProtectionList: TOrderedList): TAbstractBTreeNode; +begin + FAbstractBTreeLock.Acquire; try - i := 0; - LNode := FindLowest; - while (Not IsNil(LNode)) do begin - inc(i); - LStrings.Add(Format('Pos:%d - %s',[i,ToString(LNode)])); - LNode := FindSuccessor(LNode); + Result := GetRoot; + while (Not Result.IsLeaf) do begin + if Assigned(ACircularProtectionList) then begin + if ACircularProtectionList.Add(Result.childs[Result.Count])<0 then + raise EAbstractBTree.Create(ClassName+'.FindHighestNode Circular T structure for T='+ToString(Result)); + end; + Result := GetNode(Result.childs[Result.Count]); end; - LStrings.Add(Format('Total:%d',[i])); - Result := LStrings.Text; finally - LStrings.Free; + FAbstractBTreeLock.Release; end; end; -procedure TAVLAbstractTree.UpdateFinished; -{$IFDEF ABSTRACTMEM_TESTING_MODE} -var LErrors : TStrings; -{$ENDIF} +function TAbstractBTree.FindIndex(AIndex: Integer; out AData: TData): Boolean; +var Lnode : TAbstractBTreeNode; + iPos : Integer; + LCircularProtectionList: TOrderedList; begin - // Nothing to do here. Used in inheritance classes - {$IFDEF ABSTRACTMEM_TESTING_MODE} - LErrors := TStringList.Create; - Try - if ConsistencyCheck(LErrors)<>0 then begin - raise EAVLAbstractTree.Create('CONSISTENCY ERRORS'+#10+LErrors.Text); + FAbstractBTreeLock.Acquire; + try + if FCircularProtection then begin + LCircularProtectionList := TOrderedList.Create(False,FOnCompareIdentify); + end else LCircularProtectionList := Nil; + try + Lnode := FindLowestNodeExt(LCircularProtectionList); + if Assigned(LCircularProtectionList) then LCircularProtectionList.Clear; + if Lnode.Count<=0 then Exit(False); + // + Dec(AIndex); + iPos := 0; + while (AIndex>=0) do begin + if Not FindSuccessorExt(LCircularProtectionList,Lnode,iPos) then Exit(False); + Dec(AIndex); + end; + if (AIndex=-1) and (iPos < Lnode.Count) and (iPos>=0) then begin + Result := True; + AData := Lnode.data[iPos]; + end else Result := False; + finally + if Assigned(LCircularProtectionList) then LCircularProtectionList.Free; end; - Finally - LErrors.Free; - End; - {$ENDIF} + finally + FAbstractBTreeLock.Release; + end; end; -function TAVLAbstractTree.ToString(const ANode: T): String; +function TAbstractBTree.FindLowest(out ALowest : TData) : Boolean; +var Lnode : TAbstractBTreeNode; begin - Result := Format('Abstract T %d bytes',[SizeOf(T)]); + FAbstractBTreeLock.Acquire; + try + Lnode := FindLowestNode; + if Lnode.Count>0 then begin + ALowest := Lnode.data[0]; + Result := True; + end else Result := False; + finally + FAbstractBTreeLock.Release; + end; end; -function TAVLAbstractTree.FindPrecessor(const ANode: T): T; +function TAbstractBTree.FindLowestNode: TAbstractBTreeNode; begin - if HasPosition(ANode,poLeft) then begin - Result := GetPosition(ANode,poLeft); - while (HasPosition(Result,poRight)) do Result:=GetPosition(Result,poRight); - end else begin - Result := ANode; - while (HasPosition(Result,poParent)) and (AreEquals(GetPosition(GetPosition(Result,poParent),poLeft),Result)) do - Result:=GetPosition(Result,poParent); - Result := GetPosition(Result,poParent); - end; + Result := FindLowestNodeExt(Nil); end; -function TAVLAbstractTree.CheckNode(const ANode: T; ACheckedList : TOrderedList; var ALeftDepth, ARightDepth : Integer; const AErrors : TStrings): integer; -var i : Integer; - LLeftDepth, LRightDepth : Integer; - LParent, LLeft, LRight : T; +function TAbstractBTree.FindLowestNodeExt( + const ACircularProtectionList: TOrderedList): TAbstractBTreeNode; begin - Result := 0; - - LLeftDepth := 0; - LRightDepth := 0; - - ALeftDepth := 0; - ARightDepth := 0; - - if IsNil(ANode) then begin - exit(0); - end; - if Assigned(ACheckedList) then begin - if ACheckedList.Find(ANode,i) then begin - // Found in previous searchs... - Result := -1; - if Assigned(AErrors) then begin - AErrors.Add(Format('Error Consistency circular found at %d of %d -> %s',[i,ACheckedList.Count,ToString(ANode)])); + FAbstractBTreeLock.Acquire; + try + Result := GetRoot; + while (Not Result.IsLeaf) do begin + if Assigned(ACircularProtectionList) then begin + if ACircularProtectionList.Add(Result.childs[0])<0 then + raise EAbstractBTree.Create(ClassName+'.FindLowestNode Circular T structure for T='+ToString(Result)); end; - Exit; + Result := GetNode(Result.childs[0]); end; - ACheckedList.Add(ANode); + finally + FAbstractBTreeLock.Release; end; +end; - // test left son - if HasPosition(ANode,poLeft) then begin - LLeft := GetPosition(ANode,poLeft); - if Not AreEquals(GetPosition(GetPosition(ANode,poLeft),poParent),ANode) then begin - Result:=-2; - if Assigned(AErrors) then begin - AErrors.Add(Format('Error Consistency not equals in left for %s',[ToString(ANode)])); - end; - Exit; - end; - if fOnCompare(GetPosition(ANode,poLeft),ANode)>0 then begin - Result:=-3; - if Assigned(AErrors) then begin - AErrors.Add(Format('Error Consistency compare>0 in left for %s',[ToString(ANode)])); +function TAbstractBTree.FindPrecessor(const AData : TData; out APrecessor : TData) : Boolean; +var Lnode : TAbstractBTreeNode; + iPos : Integer; + LCircularProtectionList: TOrderedList; +begin + FAbstractBTreeLock.Acquire; + try + if FCircularProtection then begin + LCircularProtectionList := TOrderedList.Create(False,FOnCompareIdentify); + end else LCircularProtectionList := Nil; + Try + Result := False; + if Not DoFind(AData,LCircularProtectionList,Lnode,iPos) then Exit(False); + if Assigned(LCircularProtectionList) then LCircularProtectionList.Clear; + repeat + Result := FindPrecessorExt(LCircularProtectionList,Lnode,iPos); + if Result then begin + APrecessor := Lnode.data[iPos]; + end; + until (Not Result) or (Not FAllowDuplicates) or (DoCompareData(AData,APrecessor)>0); + Finally + if Assigned(LCircularProtectionList) then LCircularProtectionList.Free; + End; + finally + FAbstractBTreeLock.Release; + end; +end; + +function TAbstractBTree.FindPrecessorExt(const ACircularProtectionList : TOrderedList; var ANode: TAbstractBTreeNode; var iPos: Integer): Boolean; +var Lparent : TAbstractBTreeNode; + Lsecondary : TOrderedList; +begin + Result := False; + if (Not ANode.IsLeaf) then begin + ANode := GetNode(ANode.childs[iPos]); + while (Not ANode.IsLeaf) do begin + if Assigned(ACircularProtectionList) then begin + if ACircularProtectionList.Add(ANode.childs[ANode.Count])<0 then + raise EAbstractBTree.Create(ClassName+'.FindPrecessor Circular T structure at Find for T='+ToString(ANode)); end; - Exit; + ANode := GetNode(ANode.childs[ANode.Count]); end; - Result:=CheckNode(GetPosition(ANode,poLeft),ACheckedList,LLeftDepth,LRightDepth,AErrors); - if LLeftDepth>LRightDepth then inc(ALeftDepth,LLeftDepth+1) - else inc(ALeftDepth,LRightDepth+1); - if Result<>0 then Exit; - end else ClearNode(LLeft); - // test right son - if HasPosition(ANode,poRight) then begin - LRight := GetPosition(ANode,poRight); - if Not AreEquals(GetPosition(GetPosition(ANode,poRight),poParent),ANode) then begin - Result:=-4; - if Assigned(AErrors) then begin - AErrors.Add(Format('Error Consistency not equals in right for %s found %s at right.parent',[ToString(ANode),ToString(GetPosition(GetPosition(ANode,poRight),poParent))])); + iPos := ANode.Count-1; + Exit(True); + end else begin + if iPos>0 then begin + Dec(iPos); + Exit(True); + end else if (Not IsNil(ANode.parent)) then begin + // Left sibling + Lparent := GetNode(ANode.parent); + iPos := FindChildPos(ANode.identify,Lparent); + if iPos>0 then begin + Dec(iPos); + ANode := Lparent; + Exit(True); + end else begin + // Search parents until parent iPos>0 + if Assigned(ACircularProtectionList) then begin + Lsecondary := TOrderedList.Create(False,FOnCompareIdentify); + end else Lsecondary := Nil; + try + while (iPos=0) and (Not IsNil(Lparent.parent)) do begin + ANode := Lparent; + if Assigned(Lsecondary) then begin + if Lsecondary.Add(ANode.parent)<0 then + raise EAbstractBTree.Create(ClassName+'.FindPrecessor Circular T structure at Find for parent of T='+ToString(ANode)); + end; + Lparent := GetNode(ANode.parent); + iPos := FindChildPos(ANode.identify,Lparent); + end; + finally + if Assigned(Lsecondary) then Lsecondary.Free; + end; + if iPos>0 then begin + Dec(iPos); + ANode := Lparent; + Exit(True); + end; end; - Exit; end; - if fOnCompare(GetPosition(ANode,poRight),ANode)<0 then begin - Result:=-5; - if Assigned(AErrors) then begin - AErrors.Add(Format('Error Consistency compare>0 in right for %s',[ToString(ANode)])); + end; +end; + +function TAbstractBTree.FindSuccessor(const AData : TData; out ASuccessor : TData) : Boolean; +var Lnode : TAbstractBTreeNode; + iPos : Integer; + LCircularProtectionList: TOrderedList; +begin + FAbstractBTreeLock.Acquire; + try + if FCircularProtection then begin + LCircularProtectionList := TOrderedList.Create(False,FOnCompareIdentify); + end else LCircularProtectionList := Nil; + Try + Result := False; + if Not DoFind(AData,LCircularProtectionList,Lnode,iPos) then Exit(False); + if Assigned(LCircularProtectionList) then LCircularProtectionList.Clear; + repeat + Result := FindSuccessorExt(LCircularProtectionList,Lnode,iPos); + if Result then begin + ASuccessor := Lnode.data[iPos]; + end; + until (Not Result) or (Not FAllowDuplicates) or (DoCompareData(AData,ASuccessor)<0); + Finally + if Assigned(LCircularProtectionList) then LCircularProtectionList.Free; + End; + finally + FAbstractBTreeLock.Release; + end; +end; + +function TAbstractBTree.FindSuccessorExt(const ACircularProtectionList : TOrderedList; var ANode: TAbstractBTreeNode; var iPos: Integer): Boolean; +var Lparent : TAbstractBTreeNode; + Lsecondary : TOrderedList; +begin + Result := False; + if (Not ANode.IsLeaf) then begin + ANode := GetNode(ANode.childs[iPos+1]); + iPos := 0; + while (Not ANode.IsLeaf) do begin + if Assigned(ACircularProtectionList) then begin + if ACircularProtectionList.Add(ANode.childs[0])<0 then + raise EAbstractBTree.Create(ClassName+'.FindSuccessor Circular T structure at Find for T='+ToString(ANode)); end; - Exit; + ANode := GetNode(ANode.childs[0]); end; - Result:=CheckNode(GetPosition(ANode,poRight),ACheckedList,LLeftDepth,LRightDepth,AErrors); - if LLeftDepth>LRightDepth then inc(ARightDepth,LLeftDepth+1) - else inc(ARightDepth,LRightDepth+1); - if Result<>0 then Exit; - end else ClearNode(LRight); - - if (HasPosition(ANode,poParent)) then begin - LParent := GetPosition(ANode,poParent); - end else ClearNode(LParent); - - if Not IsNil(LParent) then begin - if AreEquals(ANode,LParent) then begin - if Assigned(AErrors) then begin - AErrors.Add(Format('Error Consistency Self=Parent for %s (Parent %s)',[ToString(ANode),ToString(LParent)])); + Exit(True); + end else begin + if iPos+10 + if Assigned(ACircularProtectionList) then begin + Lsecondary := TOrderedList.Create(False,FOnCompareIdentify); + end else Lsecondary := Nil; + try + while (iPos=Lparent.Count) and (Not IsNil(Lparent.parent)) do begin + ANode := Lparent; + if Assigned(Lsecondary) then begin + if Lsecondary.Add(ANode.parent)<0 then + raise EAbstractBTree.Create(ClassName+'.FindSuccessor Circular T structure at Find for parent of T='+ToString(ANode)); + end; + Lparent := GetNode(ANode.parent); + iPos := FindChildPos(ANode.identify,Lparent); + end; + finally + if Assigned(Lsecondary) then Lsecondary.Free; + end; + if iPos.GetCount: Integer; +begin + Result := FCount; +end; + +function TAbstractBTree.GetHeight: Integer; +var Lnode : TAbstractBTreeNode; +begin + FAbstractBTreeLock.Acquire; + try + Lnode := GetRoot; + if (Lnode.Count=0) or (IsNil(Lnode.identify)) then Exit(0); + Result := 1; + while (Not Lnode.IsLeaf) do begin + Lnode := GetNode(Lnode.childs[0]); + inc(Result); end; - if Not IsNil(LRight) then begin - if AreEquals(ANode,LRight) then begin - if Assigned(AErrors) then begin - AErrors.Add(Format('Error Consistency Self=Right for %s (Right %s)',[ToString(ANode),ToString(LRight)])); - end; - Result := -9; - end; + finally + FAbstractBTreeLock.Release; end; - if (Not IsNil(LParent)) and (Not IsNil(LLeft)) then begin - if AreEquals(LParent,LLeft) then begin - if Assigned(AErrors) then begin - AErrors.Add(Format('Error Consistency Parent=Left for %s (Parent %s)',[ToString(ANode),ToString(LParent)])); - end; - Result := -10; +end; + +function TAbstractBTree.GetNullData: TData; +begin + raise EAbstractBTree.Create('function '+Self.ClassName+'.GetNullData: TData; Not overrided'); +end; + +procedure TAbstractBTree.Lock; +begin + FAbstractBTreeLock.Acquire; +end; + +function TAbstractBTree.MaxChildrenPerNode: Integer; +begin + Result := FOrder; +end; + +function TAbstractBTree.MaxItemsPerNode: Integer; +begin + Result := FOrder-1; +end; + +function TAbstractBTree.MinChildrenPerNode: Integer; +begin + // Order 3 -> 1-2 items 2-3 childrens + // Order 4 -> 1-3 items 2-4 childrens + // Order 5 -> 2-4 items 3-5 childrens + // Order 6 -> 2-5 items 3-6 childrens + // Order 7 -> 3-6 items 4-7 childrens + // ... + Result := ((FOrder+1) DIV 2); +end; + +function TAbstractBTree.MinItemsPerNode: Integer; +begin + Result := ((FOrder+1) DIV 2)-1; +end; + +procedure TAbstractBTree.MoveRange(var ASourceNode, ADestNode: TAbstractBTreeNode; AFromSource, ACount, AToDest: Integer); +var i : Integer; + Lchild : TAbstractBTreeNode; +begin + // Will NOT save nodes because are passed as a variable, BUT will save child nodes! + if (ACount<=0) then Exit; // Nothing to move... + + Assert(ACount>0,'Invalid move range count'); + Assert((AFromSource>=0) and (AFromSource=0) and (AToDest<=Length(ADestNode.data)),'Invalid move range to dest'); + // MoveRange is only available to move LEFT or RIGHT of ASourceNode, never MIDDLE positions + Assert((AFromSource=0) or ((AFromSource+ACount)=ASourceNode.Count),'Invalid MIDDLE positions of node'); + Assert(((AFromSource=0) and (AToDest=ADestNode.Count)) or + ((AtoDest=0) and (AFromSource+ACount=ASourceNode.Count)) + ,Format('Invalid middle MoveRange from %d count %d to %d source.count=%d dest.count=%d',[AFromSource,ACount,AToDest,ASourceNode.Count,ADestNode.Count])); + + for i := 0 to ACount-1 do begin + ADestNode.InsertData(ASourceNode.data[AFromSource + i],AToDest+i); + if Not ASourceNode.IsLeaf then begin + Lchild := GetNode( ASourceNode.childs[AFromSource + i] ); + Lchild.parent := ADestNode.identify; + SaveNode(Lchild); + ADestNode.InsertChild( ASourceNode.childs[AFromSource + i], AToDest + i); end; end; - if (Not IsNil(LParent)) and (Not IsNil(LRight)) then begin - if AreEquals(LParent,LRight) then begin - if Assigned(AErrors) then begin - AErrors.Add(Format('Error Consistency Parent=Right for %s (Parent %s)',[ToString(ANode),ToString(LParent)])); - end; - Result := -11; - end; + if Not ASourceNode.IsLeaf then begin + Lchild := GetNode( ASourceNode.childs[(AFromSource + ACount)] ); + Lchild.parent := ADestNode.identify; + SaveNode(Lchild); + ADestNode.InsertChild( ASourceNode.childs[AFromSource + ACount], AToDest + ACount ); end; - if (Not IsNil(LLeft)) and (Not IsNil(LRight)) then begin - if AreEquals(LLeft,LRight) then begin - if Assigned(AErrors) then begin - AErrors.Add(Format('Error Consistency Left=Right for %s (Left %s)',[ToString(ANode),ToString(LLeft)])); - end; - Result := -12; + + for i := 0 to ACount-1 do begin + ASourceNode.DeleteData(AFromSource + i); + if Not ASourceNode.IsLeaf then begin + ASourceNode.DeleteChild(AFromSource + i); end; end; + if Not ASourceNode.IsLeaf then begin + ASourceNode.DeleteChild(AFromSource + ACount); + end; - // Check balance - if GetBalance(ANode)<>(ARightDepth - ALeftDepth) then begin - if Assigned(AErrors) then begin - AErrors.Add(Format('Error Consistency balance (%d <> Right(%d) - Left(%d)) at %s',[GetBalance(ANode),ARightDepth,ALeftDepth,ToString(ANode)])); - end; - Result := -15; - Exit; +end; + +procedure TAbstractBTree.MoveRangeBetweenSiblings(var ASourceNode, ADestNode: TAbstractBTreeNode); +var i, LdestStart : Integer; + Lchild : TAbstractBTreeNode; +begin + LdestStart := Length(ADestNode.data); + SetLength(ADestNode.data,Length(ADestNode.data)+Length(ASourceNode.data)); + for i := 0 to Length(ASourceNode.data)-1 do begin + ADestNode.data[LdestStart + i] := ASourceNode.data[i]; + end; + + LdestStart := Length(ADestNode.childs); + SetLength(ADestNode.childs,Length(ADestNode.childs)+Length(ASourceNode.childs)); + for i := 0 to Length(ASourceNode.childs)-1 do begin + ADestNode.childs[LdestStart + i] := ASourceNode.childs[i]; + Lchild := GetNode( ASourceNode.childs[i] ); + Lchild.parent := ADestNode.identify; + SaveNode(Lchild); end; end; -procedure TAVLAbstractTree.RotateLeft(var ANode: T); -{ Parent Parent - | | - Node => OldRight - / \ / - Left OldRight Node - / / \ - OldRightLeft Left OldRightLeft } -var - AParent, OldRight, OldRightLeft: T; -begin - OldRight:=GetPosition(aNode,poRight); - OldRightLeft:=GetPosition(OldRight,poLeft); - AParent:=GetPosition(aNode,poParent); - if Not IsNil(AParent) then begin - if AreEquals(GetPosition(AParent,poLeft),aNode) then - SetPosition(AParent,poLeft,OldRight) - else - SetPosition(AParent,poRight,OldRight); - end else - SetRoot( OldRight ); - SetPosition(OldRight,poParent,AParent); - SetPosition(aNode,poParent,OldRight); - SetPosition(aNode,poRight,OldRightLeft); - if Not IsNil(OldRightLeft) then - SetPosition(OldRightLeft,poParent,aNode); - SetPosition(OldRight,poLeft,aNode); -end; - -procedure TAVLAbstractTree.RotateRight(var ANode: T); -{ Parent Parent - | | - Node => OldLeft - / \ \ - OldLeft Right Node - \ / \ - OldLeftRight OldLeftRight Right } -var - AParent, OldLeft, OldLeftRight: T; -begin - OldLeft:=GetPosition(ANode,poLeft); - OldLeftRight:=GetPosition(OldLeft,poRight); - AParent:=GetPosition(ANode,poParent); - if Not IsNil(AParent) then begin - if AreEquals(GetPosition(AParent,poLeft),aNode) then - SetPosition(AParent,poLeft,OldLeft) - else - SetPosition(AParent,poRight,OldLeft); - end else - SetRoot( OldLeft ); - SetPosition(OldLeft,poParent,AParent); - SetPosition(aNode,poParent,OldLeft); - SetPosition(aNode,poLeft,OldLeftRight); - if Not IsNil(OldLeftRight) then - SetPosition(OldLeftRight,poParent,aNode); - SetPosition(OldLeft,poRight,aNode); -end; - -procedure TAVLAbstractTree.CheckNode(const ANode: T); -var LLeft,LRight : Integer; - LErrors : TStrings; -begin - LErrors := TStringList.Create; - try - if CheckNode(ANode,Nil,LLeft,LRight,LErrors)<>0 then - raise EAVLAbstractTree.Create('CHECK CONSISTENCY ERROR'+#10+LErrors.Text); - finally - LErrors.Free; +function TAbstractBTree.NodeDataToString(const AData: TData): String; +begin + Result := IntToStr(SizeOf(AData)); +end; + +function TAbstractBTree.NodeIdentifyToString( + const AIdentify: TIdentify): String; +begin + Result := IntToStr(SizeOf(AIdentify)); +end; + +procedure TAbstractBTree.SetCount(const ANewCount: Integer); +begin + FCount := ANewCount; +end; + +procedure TAbstractBTree.SplitAfterInsert(var ANode: TAbstractBTreeNode; const ACircularProtectionList : TOrderedList); +var iDataInsertPos : Integer; + LnewNode, Lup : TAbstractBTreeNode; +begin + Assert(ANode.Count>MaxItemsPerNode); + LnewNode := NewNode; + MoveRange(ANode,LnewNode,MinItemsPerNode+1,ANode.Count - (MinItemsPerNode+1),0); + // Put ANode[MinItemsPerNode+1] up + if IsNil(ANode.parent) then begin + // Lup will be a new root + Lup := NewNode; + end else begin + if Assigned(ACircularProtectionList) then begin + if ACircularProtectionList.Add(ANode.parent)<0 then raise EAbstractBTree.Create(ClassName+'.SplitAfterInsert Circular T structure at Find for parent of T='+ToString(ANode)); + end; + Lup := GetNode(ANode.parent); end; + if Lup.Count=0 then begin + Lup.InsertData(ANode.data[MinItemsPerNode], 0 ); + // Insert both childs because is a new root + Lup.InsertChild(ANode.identify,0); + SaveNode(LnewNode); // We need a valid identify value + Lup.InsertChild(LnewNode.identify,1); + SaveNode(Lup); + SetRoot(Lup); + end else begin + iDataInsertPos := FindChildPos(ANode.identify,Lup); + Lup.InsertData(ANode.data[MinItemsPerNode], iDataInsertPos ); + SaveNode(LnewNode); // We need a valid identify value + Lup.InsertChild(LnewNode.identify, iDataInsertPos +1 ); + SaveNode(Lup); + end; + LnewNode.parent := Lup.identify; + SaveNode(LnewNode); + ANode.parent := Lup.identify; + // Remove data&child + ANode.DeleteData(MinItemsPerNode); + SaveNode(ANode); + if Lup.Count>MaxItemsPerNode then SplitAfterInsert(Lup,ACircularProtectionList); end; -function TAVLAbstractTree.ConsistencyCheck(const AErrors : TStrings): integer; -var LCheckedList : TOrderedList; -var LLeftDepth, LRightDepth : Integer; +function TAbstractBTree.ToString(const ANode: TAbstractBTreeNode): String; +var i : Integer; begin - LCheckedList := TOrderedList.Create(False,FOnCompare); - try - LLeftDepth := 0; - LRightDepth := 0; - Result:=CheckNode(Root,LCheckedList,LLeftDepth,LRightDepth,AErrors); - finally - LCheckedList.Free; + Result := ''; + for i := 0 to ANode.Count-1 do begin + if Result<>'' then Result := Result + ','; + Result := Result + NodeDataToString(ANode.data[i]); end; + Result := NodeIdentifyToString(ANode.identify)+'@'+NodeIdentifyToString(ANode.parent)+'['+Result+']'; +end; + +procedure TAbstractBTree.Unlock; +begin + FAbstractBTreeLock.Release; end; -{ TPAVLPointerTree } +{ TAbstractBTree.TAbstractBTreeNode } -function TPAVLPointerTree.AreEquals(const ANode1, ANode2: PAVLPointerTreeNode): Boolean; +function TAbstractBTree.TAbstractBTreeNode.Count: Integer; begin - Result := ANode1 = ANode2; + Result := Length(Self.data); end; -procedure TPAVLPointerTree.ClearNode(var ANode: PAVLPointerTreeNode); +procedure TAbstractBTree.TAbstractBTreeNode.DeleteChild(AChildIndex: Integer); +var i : Integer; begin - ANode := Nil; + for i := AChildIndex to (High(Self.childs)-1) do begin + Self.childs[i] := Self.childs[i+1]; + end; + SetLength(Self.childs,Length(Self.childs)-1); end; -procedure TPAVLPointerTree.ClearPosition(var ANode: PAVLPointerTreeNode; APosition: TAVLTreePosition); +procedure TAbstractBTree.TAbstractBTreeNode.DeleteData(AIndex: Integer); +var i : Integer; begin - case APosition of - poParent: ANode.parent := Nil; - poLeft: ANode.left := Nil; - poRight: ANode.right := Nil; + for i := AIndex to (High(Self.data)-1) do begin + Self.data[i] := Self.data[i+1]; end; + SetLength(Self.data,Length(Self.data)-1); end; -constructor TPAVLPointerTree.Create(const OnCompareMethod: TComparison; AAllowDuplicates : Boolean); +procedure TAbstractBTree.TAbstractBTreeNode.InsertChild(const AChild: TIdentify; AIndex: Integer); +var i : Integer; begin - FRoot := Nil; - inherited; + if (AIndex<0) or (AIndex>Length(Self.childs)) then raise EAbstractBTree.Create('Error 20201215-3'); + SetLength(Self.childs,Length(Self.childs)+1); + for i := Length(Self.childs)-1 downto AIndex+1 do begin + Self.childs[i] := Self.childs[i-1]; + end; + Self.childs[AIndex] := AChild; end; -procedure TPAVLPointerTree.DisposeNode(var ANode: PAVLPointerTreeNode); +procedure TAbstractBTree.TAbstractBTreeNode.InsertData(const AData: TData; AIndex: Integer); +var i : Integer; begin - if Not Assigned(ANode) then Exit; - Dispose( ANode ); - ANode := Nil; + if (AIndex<0) or (AIndex>Length(Self.data)) then raise EAbstractBTree.Create('Error 20201215-4'); + SetLength(Self.data,Length(Self.data)+1); + for i := Length(Self.data)-1 downto AIndex+1 do begin + Self.data[i] := Self.data[i-1]; + end; + Self.data[AIndex] := AData; end; -function TPAVLPointerTree.GetBalance(const ANode: PAVLPointerTreeNode): Integer; +function TAbstractBTree.TAbstractBTreeNode.IsLeaf: Boolean; begin - Result := ANode^.balance; + Result := Length(Self.childs)=0; end; -function TPAVLPointerTree.GetPosition(const ANode: PAVLPointerTreeNode; - APosition: TAVLTreePosition): PAVLPointerTreeNode; +procedure TAbstractBTree.TAbstractBTreeNode.RemoveInNode(AIndex: Integer); +var i : Integer; begin - case APosition of - poParent: Result := ANode.parent; - poLeft: Result := ANode.left; - poRight: Result := ANode.right; - else raise EAVLAbstractTree.Create('Undefined 20200310-1'); + { + Can only remove LEFT or RIGHT. Not Middle positions + } + if (AIndex<0) or (AIndex>=Length(Self.data)) then raise EAbstractBTree.Create('Error 20201215-5'); + Assert((AIndex=0) or (AIndex=High(Self.data)),'Must remove first or last position'); + for i := AIndex to (High(Self.data)-1) do begin + Self.data[i] := Self.data[i+1]; + end; + SetLength(Self.data,Length(Self.data)-1); + if (Not Self.IsLeaf) then begin + if (AIndex>=Length(Self.childs)) then raise EAbstractBTree.Create('Error 20201215-6'); + if (Aindex=0) and (Length(Self.childs)>2) then begin + for i := AIndex+1 to (High(Self.childs)) do begin + Self.childs[i-1] := Self.childs[i]; + end; + end; + SetLength(Self.childs,Length(Self.childs)-1); end; end; -function TPAVLPointerTree.GetRoot: PAVLPointerTreeNode; +{ TMemoryBTree } + +procedure TMemoryBTree.CheckConsistencyFinalized(ADatas: TList; AIdents: TOrderedList; Alevels, ANodesCount, AItemsCount: Integer); +var i,iPos,nDisposed, LDisposedMinPos : Integer; begin - Result := FRoot; + inherited; + nDisposed := 0; + LDisposedMinPos := -1; + for i := 0 to FBuffer.Count-1 do begin + if (FBuffer.Items[i].identify=i) then begin + if Assigned(AIdents) then begin + if not AIdents.Find(i,iPos) then begin + raise EAbstractBTree.Create(Format('CheckConsistency ident %d not found (%d idents)',[i,FBuffer.Count])); + end; + end; + end else begin + inc(nDisposed); + if (LDisposedMinPos<0) then LDisposedMinPos := i; + end; + end; + if FDisposed<>nDisposed then raise EAbstractBTree.Create(Format('CheckConsistency Disposed %d <> %d',[FDisposed,nDisposed])); + if FDisposedMinPos>LDisposedMinPos then raise EAbstractBTree.Create(Format('CheckConsistency DisposedMinPos %d > %d',[FDisposedMinPos,LDisposedMinPos])); end; -function TPAVLPointerTree.HasPosition(const ANode: PAVLPointerTreeNode; - APosition: TAVLTreePosition): Boolean; +constructor TMemoryBTree.Create(const AOnCompareDataMethod: TComparison; AAllowDuplicates : Boolean; AOrder : Integer); begin - case APosition of - poParent: Result := Assigned( ANode.parent ); - poLeft: Result := Assigned( ANode.left ); - poRight: Result := Assigned( ANode.right ); - else raise EAVLAbstractTree.Create('Undefined 20200310-2'); - end; + FBuffer := TList.Create; + Froot := -1; + inherited Create(TComparison_Integer,AOnCompareDataMethod,AAllowDuplicates,AOrder); + FCount := 0; + FDisposed := 0; + FDisposedMinPos := -1; +end; + +destructor TMemoryBTree.Destroy; +begin + EraseTree; + FreeAndNil(FBuffer); + inherited; end; -function TPAVLPointerTree.IsNil(const ANode: PAVLPointerTreeNode): Boolean; +procedure TMemoryBTree.DisposeNode(var ANode: TAbstractBTree.TAbstractBTreeNode); +var Lpos : Integer; begin - Result := ANode = Nil; + Lpos := ANode.identify; + Assert((Lpos>=0) and (LposLpos) then FDisposedMinPos := Lpos; end; -procedure TPAVLPointerTree.SetBalance(var ANode: PAVLPointerTreeNode; - ANewBalance: Integer); +function TMemoryBTree.GetNode(AIdentify: Integer): TAbstractBTree.TAbstractBTreeNode; begin - ANode^.balance := ANewBalance; + Result := FBuffer[AIdentify]; + if (Result.identify<>AIdentify) then raise EAbstractBTree.Create(Format('Found %d Identify instead of %d',[Result.identify,AIdentify])); end; -procedure TPAVLPointerTree.SetPosition(var ANode: PAVLPointerTreeNode; - APosition: TAVLTreePosition; const ANewValue: PAVLPointerTreeNode); +function TMemoryBTree.GetRoot: TAbstractBTree.TAbstractBTreeNode; begin - case APosition of - poParent: ANode.parent := ANewValue; - poLeft: ANode.left := ANewValue; - poRight: ANode.right := ANewValue; + if (Froot<0) then begin + ClearNode(Result); + Exit; end; + Result := GetNode(Froot); end; -procedure TPAVLPointerTree.SetRoot(const Value: PAVLPointerTreeNode); +function TMemoryBTree.IsNil(const AIdentify: Integer): Boolean; begin - FRoot := Value; + Result := AIdentify<0; end; -function TPAVLPointerTree.ToString(const ANode: PAVLPointerTreeNode): String; -var LParent, LLeft, LRight : String; +function TMemoryBTree.NewNode: TAbstractBTree.TAbstractBTreeNode; begin - if Assigned(ANode) then begin - if Assigned(ANode.parent) then LParent := IntToStr(Integer(ANode.parent.data)) else LParent := 'NIL'; - if Assigned(ANode.left) then LLeft := IntToStr(Integer(ANode.left.data)) else LLeft := 'NIL'; - if Assigned(ANode.right) then LRight := IntToStr(Integer(ANode.right.data)) else LRight := 'NIL'; + ClearNode(Result); + if (FDisposed > 0) And (FDisposed > (Count DIV 5)) then begin // 20% max disposed nodes + // Reuse disposed node: + if (FDisposedMinPos<0) then FDisposedMinPos := 0; + while (FDisposedMinPos=0) and (FDisposedMinPos.SaveNode(var ANode: TAbstractBTree.TAbstractBTreeNode); +begin + if (ANode.identify<0) then begin + raise EAbstractBTree.Create('Save undefined node '+ToString(ANode)); + // New + ANode.identify := FBuffer.Count; + FBuffer.Insert(ANode.identify,ANode); end else begin - Result := 'NIL'; + FBuffer[ANode.identify] := ANode; end; end; +procedure TMemoryBTree.SetNil(var AIdentify: Integer); +begin + AIdentify := -1; +end; + +procedure TMemoryBTree.SetRoot(var Value: TAbstractBTree.TAbstractBTreeNode); +begin + Froot := Value.identify; +end; + +{ TNoDuplicateData } + +function TNoDuplicateData.Add(const AData: TData): Boolean; +begin + Result := FBTree.Add(AData); +end; + +constructor TNoDuplicateData.Create(const AOnCompareDataMethod: TComparison); +begin + FBTree := TMemoryBTree.Create(AOnCompareDataMethod,False,7); + FBTree.FCircularProtection := False; +end; + +destructor TNoDuplicateData.Destroy; +begin + FreeAndNil(FBTree); + inherited; +end; + initialization finalization diff --git a/src/libraries/abstractmem/UAbstractMem.pas b/src/libraries/abstractmem/UAbstractMem.pas index c7248671f..db0ab6335 100644 --- a/src/libraries/abstractmem/UAbstractMem.pas +++ b/src/libraries/abstractmem/UAbstractMem.pas @@ -3,7 +3,7 @@ { This file is part of AbstractMem framework - Copyright (C) 2020 Albert Molina - bpascalblockchain@gmail.com + Copyright (C) 2020-2021 Albert Molina - bpascalblockchain@gmail.com https://github.com/PascalCoinDev/ @@ -34,124 +34,158 @@ interface uses Classes, SysUtils, SyncObjs, - UAbstractBTree; + UAbstractAVLTree + {$IFNDEF FPC},System.Generics.Collections,System.Generics.Defaults{$ELSE},Generics.Collections,Generics.Defaults{$ENDIF}, + UOrderedList; {$I ./ConfigAbstractMem.inc } Type - TAbstractMemPosition = Integer; + TAbstractMemPosition = Int64; + TAbstractMemSize = Int64; TAMZone = record position : TAbstractMemPosition; - size : Integer; + size : TAbstractMemSize; procedure Clear; function ToString : String; end; EAbstractMem = Class(Exception); - TAbstractMem = Class; - - TAbstractMemMemoryLeaksComparer = function(const ABuffer1; ABufferSize1:Integer; const AData2: Integer): Integer; + TAbstractMemZoneType = (amzt_unknown, amzt_memory_leak, amzt_used); - TAbstractMemMemoryLeaksNode = record - myPosition, // Position in the AbstractMem - parentPosition, - leftPosition, - rigthPosition : TAbstractMemPosition; - balance : ShortInt; - units : Integer; // units equals to "4 bytes packet", 1=4 bytes 2=8 bytes ... - function GetSize : Integer; - procedure SetSize(ABytesSize : Integer); // ABytesSize will be converted to units - function GetPosition(APosition : TAVLTreePosition) : TAbstractMemPosition; - procedure SetPosition(APosition : TAVLTreePosition; AMemPosition : TAbstractMemPosition); - procedure ReadFromMem(AMyPosition : TAbstractMemPosition; AAbstractMem : TAbstractMem); - procedure WriteToMem(AAbstractMem : TAbstractMem); - procedure Clear; - function ToString : String; + TAbstractMemZoneInfo = record + AMZone : TAMZone; + ZoneType : TAbstractMemZoneType; end; - - TAbstractMemMemoryLeaks = Class( TAVLAbstractTree ) - private - FAbstractMem : TAbstractMem; - FRootPosition : TAbstractMemPosition; - protected - function GetRoot: TAbstractMemMemoryLeaksNode; override; - procedure SetRoot(const Value: TAbstractMemMemoryLeaksNode); override; - function HasPosition(const ANode : TAbstractMemMemoryLeaksNode; APosition : TAVLTreePosition) : Boolean; override; - function GetPosition(const ANode : TAbstractMemMemoryLeaksNode; APosition : TAVLTreePosition) : TAbstractMemMemoryLeaksNode; override; - procedure SetPosition(var ANode : TAbstractMemMemoryLeaksNode; APosition : TAVLTreePosition; const ANewValue : TAbstractMemMemoryLeaksNode); override; - procedure ClearPosition(var ANode : TAbstractMemMemoryLeaksNode; APosition : TAVLTreePosition); override; - function GetBalance(const ANode : TAbstractMemMemoryLeaksNode) : Integer; override; - procedure SetBalance(var ANode : TAbstractMemMemoryLeaksNode; ANewBalance : Integer); override; - function AreEquals(const ANode1, ANode2 : TAbstractMemMemoryLeaksNode) : Boolean; override; - procedure ClearNode(var ANode : TAbstractMemMemoryLeaksNode); override; - procedure DisposeNode(var ANode : TAbstractMemMemoryLeaksNode); override; - public - function IsNil(const ANode : TAbstractMemMemoryLeaksNode) : Boolean; override; - function ToString(const ANode: TAbstractMemMemoryLeaksNode) : String; override; - constructor Create(AAbstractMem : TAbstractMem; ARootPosition : TAbstractMemPosition); reintroduce; - destructor Destroy; override; - End; - - TAbstractMemZoneType = (amzt_unknown, amzt_memory_leak, amzt_used); - { TAbstractMem } TAbstractMem = Class + private + type + TAbstractMemMemoryLeaksNode = record + myPosition, // Position in the AbstractMem + parentPosition, + leftPosition, + rigthPosition : TAbstractMemPosition; + balance : ShortInt; + units : Integer; // units equals to "4 bytes packet", 1=4 bytes 2=8 bytes ... + function GetSize(AAbstractMem : TAbstractMem) : Int64; + procedure SetSize(AAbstractMem : TAbstractMem; ABytesSize : Int64); // ABytesSize will be converted to units + function GetPosition(APosition : TAVLTreePosition) : TAbstractMemPosition; + procedure SetPosition(APosition : TAVLTreePosition; AMemPosition : TAbstractMemPosition); + procedure ReadFromMem(AAbstractMem : TAbstractMem; AMyPosition : TAbstractMemPosition); + procedure WriteToMem(AAbstractMem : TAbstractMem); + procedure Clear; + function ToString(AAbstractMem : TAbstractMem) : String; + end; + + TAbstractMemMemoryLeaks = Class( TAVLAbstractTree ) + private + FAbstractMem : TAbstractMem; + FRootPosition : TAbstractMemPosition; + protected + function GetRoot: TAbstractMemMemoryLeaksNode; override; + procedure SetRoot(const Value: TAbstractMemMemoryLeaksNode); override; + function HasPosition(const ANode : TAbstractMemMemoryLeaksNode; APosition : TAVLTreePosition) : Boolean; override; + function GetPosition(const ANode : TAbstractMemMemoryLeaksNode; APosition : TAVLTreePosition) : TAbstractMemMemoryLeaksNode; override; + procedure SetPosition(var ANode : TAbstractMemMemoryLeaksNode; APosition : TAVLTreePosition; const ANewValue : TAbstractMemMemoryLeaksNode); override; + procedure ClearPosition(var ANode : TAbstractMemMemoryLeaksNode; APosition : TAVLTreePosition); override; + function GetBalance(const ANode : TAbstractMemMemoryLeaksNode) : Integer; override; + procedure SetBalance(var ANode : TAbstractMemMemoryLeaksNode; ANewBalance : Integer); override; + function AreEquals(const ANode1, ANode2 : TAbstractMemMemoryLeaksNode) : Boolean; override; + procedure ClearNode(var ANode : TAbstractMemMemoryLeaksNode); override; + procedure DisposeNode(var ANode : TAbstractMemMemoryLeaksNode); override; + public + function IsNil(const ANode : TAbstractMemMemoryLeaksNode) : Boolean; override; + function ToString(const ANode: TAbstractMemMemoryLeaksNode) : String; override; + constructor Create(AAbstractMem : TAbstractMem; ARootPosition : TAbstractMemPosition); reintroduce; + destructor Destroy; override; + function SizeOfMemoryLeak : TAbstractMemSize; + End; private FReadOnly : Boolean; FHeaderInitialized : Boolean; - FInitialPosition : Integer; - FNextAvailablePos : Integer; - FMaxAvailablePos : Integer; + FInitialPosition : Int64; + FNextAvailablePos : Int64; + FMaxAvailablePos : Int64; FMemLeaks : TAbstractMemMemoryLeaks; + FIs64Bits : Boolean; + FMemUnitsSize : Integer; // Multiple of 4 and >=4 and <=256 // + function RoundSize(ASize : TAbstractMemSize) : TAbstractMemSize; + function IsValidUsedSize(ASize : TAbstractMemSize) : Boolean; protected FLock : TCriticalSection; function AbsoluteWrite(const AAbsolutePosition : Int64; const ABuffer; ASize : Integer) : Integer; virtual; abstract; function AbsoluteRead(const AAbsolutePosition : Int64; var ABuffer; ASize : Integer) : Integer; virtual; abstract; - procedure DoIncreaseSize(var ANextAvailablePos, AMaxAvailablePos : Integer; ANeedSize : Integer); virtual; abstract; + procedure DoIncreaseSize(var ANextAvailablePos, AMaxAvailablePos : Int64; ANeedSize : Integer); virtual; abstract; // - function PositionToAbsolute(const APosition : Integer) : Int64; - procedure IncreaseSize(ANeedSize : Integer); + function PositionToAbsolute(const APosition : Int64) : Int64; + procedure IncreaseSize(ANeedSize : TAbstractMemSize); // function GetZoneType(APosition : TAbstractMemPosition; out AAMZone : TAMZone) : TAbstractMemZoneType; procedure CheckInitialized(AWantsToWrite : Boolean); function IsAbstractMemInfoStable : Boolean; virtual; procedure SaveHeader; public - procedure Write(const APosition : Integer; const ABuffer; ASize : Integer); overload; virtual; - function Read(const APosition : Integer; var ABuffer; ASize : Integer) : Integer; overload; virtual; + function Write(const APosition : Int64; const ABuffer; ASize : Integer) : Integer; overload; virtual; + function Read(const APosition : Int64; var ABuffer; ASize : Integer) : Integer; overload; virtual; - Constructor Create(AInitialPosition : Integer; AReadOnly : Boolean); virtual; + Constructor Create(AInitialPosition : Int64; AReadOnly : Boolean); virtual; Destructor Destroy; override; // - procedure ClearContent; + procedure ClearContent(ASetTo64Bytes : Boolean; AMemUnitsSize : Integer = 4); // - function New(AMemSize : Integer) : TAMZone; virtual; + function New(AMemSize : TAbstractMemSize) : TAMZone; virtual; procedure Dispose(const AAMZone : TAMZone); overload; procedure Dispose(const APosition : TAbstractMemPosition); overload; function GetUsedZoneInfo(const APosition : TAbstractMemPosition; ACheckForUsedZone : Boolean; out AAMZone : TAMZone) : Boolean; function ToString : String; override; - function CheckConsistency(const AStructure : TStrings; out ATotalUsedSize, ATotalUsedBlocksCount, ATotalLeaksSize, ATotalLeaksBlocksCount : Integer) : Boolean; + function CheckConsistency(const AStructure : TStrings; const AAbstractMemZoneInfoList : TList; out ATotalUsedSize, ATotalUsedBlocksCount, ATotalLeaksSize, ATotalLeaksBlocksCount : Int64) : Boolean; overload; + procedure CheckConsistency; overload; function ReadFirstData(var AFirstDataZone : TAMZone; var AFirstData : TBytes) : Boolean; class function GetAbstractMemVersion : String; property ReadOnly : Boolean read FReadOnly; procedure SaveToStream(AStream : TStream); procedure CopyFrom(ASource : TAbstractMem); + function GetStatsReport(AClearStats : Boolean) : String; virtual; + property NextAvailablePos : Int64 read FNextAvailablePos; + property MaxAvailablePos : Int64 read FMaxAvailablePos; + property HeaderInitialized : Boolean read FHeaderInitialized; + property Is64Bits : Boolean read FIs64Bits; + property MemUnitsSize : Integer read FMemUnitsSize; + function Initialize(ASetTo64Bytes : Boolean; AMemUnitsSize : Integer) : Boolean; + function HeaderSize : Integer; + function SizeOfAbstractMemPosition : TAbstractMemSize; inline; End; + { TMem } + TMem = Class(TAbstractMem) private FMem : TBytes; + FLastIncrease : Int64; protected function AbsoluteWrite(const AAbsolutePosition : Int64; const ABuffer; ASize : Integer) : Integer; override; function AbsoluteRead(const AAbsolutePosition : Int64; var ABuffer; ASize : Integer) : Integer; override; - procedure DoIncreaseSize(var ANextAvailablePos, AMaxAvailablePos : Integer; ANeedSize : Integer); override; + procedure DoIncreaseSize(var ANextAvailablePos, AMaxAvailablePos : Int64; ANeedSize : Integer); override; public - Constructor Create(AInitialPosition : Integer; AReadOnly : Boolean); override; + Constructor Create(AInitialPosition : Int64; AReadOnly : Boolean); override; + End; + + TStreamMem = Class(TAbstractMem) + private + FStream : TStream; + protected + function AbsoluteWrite(const AAbsolutePosition : Int64; const ABuffer; ASize : Integer) : Integer; override; + function AbsoluteRead(const AAbsolutePosition : Int64; var ABuffer; ASize : Integer) : Integer; override; + procedure DoIncreaseSize(var ANextAvailablePos, AMaxAvailablePos : Int64; ANeedSize : Integer); override; + public + Constructor Create(const AStream : TStream; AInitialPosition : Int64; AReadOnly : Boolean); reintroduce; + Destructor Destroy; override; End; TAbstractMemAVLTreeNodeInfo = record @@ -171,25 +205,41 @@ TAbstractMemAVLTreeNodeInfo = record class procedure SetPosition(AMyPosition : TAbstractMemPosition; AAbstractMem : TAbstractMem; APosition: TAVLTreePosition; ANewPosition : TAbstractMemPosition); class function GetBalance(AMyPosition : TAbstractMemPosition; AAbstractMem : TAbstractMem) : ShortInt; class procedure SetBalance(AMyPosition : TAbstractMemPosition; AAbstractMem : TAbstractMem; ANewBalance : ShortInt); - class function GetSize : Integer; + class function GetSize(AAbstractMem : TAbstractMem) : Integer; end; +function TComparison_TAbstractMemPosition(const ALeft, ARight: TAbstractMemPosition): Integer; implementation const CT_Magic : Array[0..5] of byte = (7,6,5,4,3,2); + CT_IsStable = 1; CT_Is_NOT_Stable = 0; - CT_Version = 1; - CT_HeaderSize = 16; // Magic(7) + Version(1) + MemLeak_root_position(4) + NextAvailable_position(4) = 16 bytes - CT_ExtraSizeForUsedZoneType = 4; + + CT_Version_32b = 1; + CT_Version_64b = 2; + + CT_HeaderSize_32b = 16; // Magic(7) + Version(1) + MemLeak_root_position(4) + NextAvailable_position(4) = 16 bytes + CT_HeaderSize_64b = 64; // Magic(7) + Version(1) + MemLeak_root_position(8) + NextAvailable_position(8) + UnitsSize(1) + NotUsed(39) = 64 bytes + +function TComparison_TAbstractMemPosition(const ALeft, ARight: TAbstractMemPosition): Integer; +begin + if ALeftARight then Result := 1 + else Result := 0; +end; { TAbstractMem } -function TAbstractMem.CheckConsistency(const AStructure: TStrings; out ATotalUsedSize, ATotalUsedBlocksCount, ATotalLeaksSize, ATotalLeaksBlocksCount : Integer) : Boolean; +function TAbstractMem.CheckConsistency(const AStructure : TStrings; const AAbstractMemZoneInfoList : TList; + out ATotalUsedSize, ATotalUsedBlocksCount, ATotalLeaksSize, ATotalLeaksBlocksCount : Int64) : Boolean; var LPosition : TAbstractMemPosition; LZone : TAMZone; + LAMZoneInfo : TAbstractMemZoneInfo; + i: Integer; + LMemLeakFound,LMemLeakToFind : TAbstractMemMemoryLeaksNode; begin // Will check since first position: FLock.Acquire; @@ -198,20 +248,30 @@ function TAbstractMem.CheckConsistency(const AStructure: TStrings; out ATotalUse ATotalUsedBlocksCount := 0; ATotalLeaksSize := 0; ATotalLeaksBlocksCount := 0; - LPosition := CT_HeaderSize; + LPosition := Self.HeaderSize; Result := True; while (Result) and (LPosition < FNextAvailablePos) do begin case GetZoneType(LPosition,LZone) of amzt_memory_leak : begin if Assigned(AStructure) then AStructure.Add( Format('%d to %d mem leak %d bytes',[LPosition,LZone.position + LZone.size,LZone.size])); - Inc(LPosition, LZone.size); - inc(ATotalLeaksSize,LZone.size); + if Assigned(AAbstractMemZoneInfoList) then begin + LAMZoneInfo.AMZone := LZone; + LAMZoneInfo.ZoneType := amzt_memory_leak; + AAbstractMemZoneInfoList.Add(LAMZoneInfo); + end; + LPosition := LPosition + LZone.size; + ATotalLeaksSize := ATotalLeaksSize + LZone.size; inc(ATotalLeaksBlocksCount); end; amzt_used : begin if Assigned(AStructure) then AStructure.Add( Format('%d to %d used %d bytes',[LPosition,LZone.position + LZone.size, LZone.size])); - inc(LPosition, LZone.size + CT_ExtraSizeForUsedZoneType); - inc(ATotalUsedSize,LZone.size + CT_ExtraSizeForUsedZoneType); + if Assigned(AAbstractMemZoneInfoList) then begin + LAMZoneInfo.AMZone := LZone; + LAMZoneInfo.ZoneType := amzt_used; + AAbstractMemZoneInfoList.Add(LAMZoneInfo); + end; + LPosition := Int64(LPosition) + Int64(LZone.size) + Int64( SizeOfAbstractMemPosition() ); + ATotalUsedSize := ATotalUsedSize + LZone.size + Int64( SizeOfAbstractMemPosition() ); inc(ATotalUsedBlocksCount); end; else @@ -219,11 +279,50 @@ function TAbstractMem.CheckConsistency(const AStructure: TStrings; out ATotalUse Result := False; end; end; + // + if Assigned(AAbstractMemZoneInfoList) then begin + // Try to find all blocks: + for i := 0 to AAbstractMemZoneInfoList.Count-1 do begin + if (AAbstractMemZoneInfoList.Items[i].ZoneType=amzt_memory_leak) then begin + // Search it: + LMemLeakToFind.Clear; + LMemLeakToFind.SetSize( Self, AAbstractMemZoneInfoList.Items[i].AMZone.size ); + LMemLeakToFind.myPosition := AAbstractMemZoneInfoList.Items[i].AMZone.position; + + LMemLeakFound := FMemLeaks.Find( LMemLeakToFind ); + if Not FMemLeaks.IsNil(LMemLeakFound) then begin + if (LMemLeakFound.myPosition<>AAbstractMemZoneInfoList.Items[i].AMZone.position) then begin + if Assigned(AStructure) then AStructure.Add( Format('MemLeak of %d bytes at %d pos not equal at %d/%d', + [LMemLeakToFind.GetSize(Self),AAbstractMemZoneInfoList.Items[i].AMZone.position,i+1,AAbstractMemZoneInfoList.Count])); + Result := False; + end; + end else begin + if Assigned(AStructure) then AStructure.Add( Format('MemLeak of %d bytes at pos %d pos not found %d/%d', + [LMemLeakToFind.GetSize(Self),AAbstractMemZoneInfoList.Items[i].AMZone.position,i+1,AAbstractMemZoneInfoList.Count])); + Result := False; + end; + + end; + end; + end; Finally FLock.Release; End; end; +procedure TAbstractMem.CheckConsistency; +var LTotalUsedSize, LTotalUsedBlocksCount, LTotalLeaksSize, LTotalLeaksBlocksCount : Int64; + LAbstractMemZoneInfoList : TList; +begin + LAbstractMemZoneInfoList := TList.Create; + Try + if Not CheckConsistency(Nil,LAbstractMemZoneInfoList,LTotalUsedSize, LTotalUsedBlocksCount, LTotalLeaksSize, LTotalLeaksBlocksCount) then + raise EAbstractMem.Create('TAbstractMem not consistent'); + Finally + LAbstractMemZoneInfoList.Free; + End; +end; + procedure TAbstractMem.CheckInitialized(AWantsToWrite : Boolean); begin if (AWantsToWrite and FReadOnly) then raise EAbstractMem.Create('Cannot write to a ReadOnly AbstractMem'); @@ -231,25 +330,27 @@ procedure TAbstractMem.CheckInitialized(AWantsToWrite : Boolean); // Needs to write if FReadOnly then raise EAbstractMem.Create('Cannot initialize a ReadOnly AbstractMem'); // - IncreaseSize(CT_HeaderSize); + IncreaseSize(HeaderSize); // Write Header: SaveHeader; end; end; -procedure TAbstractMem.ClearContent; +procedure TAbstractMem.ClearContent(ASetTo64Bytes : Boolean; AMemUnitsSize : Integer); var LNewRoot : TAbstractMemMemoryLeaksNode; begin // Will erase ALL content creating a new null header if FReadOnly then raise EAbstractMem.Create('Cannot ClearContent on a ReadOnly AbstractMem'); CheckInitialized(True); - FNextAvailablePos := CT_HeaderSize; // By Default - + FNextAvailablePos := HeaderSize; FMaxAvailablePos := 0; IncreaseSize(0); FHeaderInitialized := False; + + Initialize(ASetTo64Bytes, AMemUnitsSize); + CheckInitialized(True); LNewRoot.Clear; @@ -258,13 +359,13 @@ procedure TAbstractMem.ClearContent; procedure TAbstractMem.CopyFrom(ASource: TAbstractMem); var LBuff : TBytes; - iPos, LBuffDataCount : Integer; + iPos, LBuffDataCount : Int64; LMemLeakRelativeRootPos : TAbstractMemPosition; begin ASource.FLock.Acquire; Self.FLock.Acquire; try - ClearContent; + ClearContent(ASource.Is64Bits,ASource.FMemUnitsSize); CheckInitialized(True); IncreaseSize(ASource.FNextAvailablePos); @@ -277,7 +378,7 @@ procedure TAbstractMem.CopyFrom(ASource: TAbstractMem); if LBuffDataCount>Length(LBuff) then LBuffDataCount := Length(LBuff); ASource.Read(iPos,LBuff[0],LBuffDataCount); Self.Write(iPos,LBuff[0],LBuffDataCount); - inc(iPos,LBuffDataCount); + iPos := iPos + LBuffDataCount; end; LMemLeakRelativeRootPos := ASource.FMemLeaks.FRootPosition; @@ -291,17 +392,21 @@ procedure TAbstractMem.CopyFrom(ASource: TAbstractMem); end; end; -constructor TAbstractMem.Create(AInitialPosition: Integer; AReadOnly : Boolean); +constructor TAbstractMem.Create(AInitialPosition: Int64; AReadOnly : Boolean); var LBuffer : TBytes; - LMemLeakRelativeRootPos : TAbstractMemPosition; + LMemLeakRelativeRootPos, LNextAvailablePosAux : Int64; LOk : Boolean; + LMemUnitsSizeAux : Integer; begin FMemLeaks := Nil; FReadOnly := AReadOnly; LMemLeakRelativeRootPos := 0; FInitialPosition := AInitialPosition; + FIs64Bits := False; + FMemUnitsSize := 4; // Warning: Multiple of 4 >=4 and <=256! // - FNextAvailablePos := CT_HeaderSize; // By Default + LNextAvailablePosAux := 0; + FNextAvailablePos := CT_HeaderSize_32b; // By Default FMaxAvailablePos := 0; @@ -313,20 +418,42 @@ constructor TAbstractMem.Create(AInitialPosition: Integer; AReadOnly : Boolean); FHeaderInitialized := True; LOk := False; Try - SetLength(LBuffer,CT_HeaderSize); - if Read(0,LBuffer[0],CT_HeaderSize)=CT_HeaderSize then begin + SetLength(LBuffer,CT_HeaderSize_32b); + if Read(0,LBuffer[0],CT_HeaderSize_32b)=CT_HeaderSize_32b then begin if CompareMem(@LBuffer[0],@CT_Magic[0],6) then begin - LOk := LBuffer[6] = CT_IsStable; - if (LOk) And (LBuffer[7] = CT_Version) then begin - Move(LBuffer[8],LMemLeakRelativeRootPos,4); - Move(LBuffer[12],FNextAvailablePos,4); - // - LOk := (FNextAvailablePos >= CT_HeaderSize) and (LMemLeakRelativeRootPos= CT_HeaderSize_32b) and (LMemLeakRelativeRootPos=4) and (LMemUnitsSizeAux<256) and ((LMemUnitsSizeAux MOD 4)=0) // Multiple of 4 + and (LNextAvailablePosAux >= CT_HeaderSize_32b) and (LMemLeakRelativeRootPos 4 then raise EAbstractMem.Create('Dispose: Cannot read size'); + if Read(APosition - Int64(SizeOfAbstractMemPosition()),LZone.size,SizeOfAbstractMemPosition()) <> SizeOfAbstractMemPosition() then raise EAbstractMem.Create('Dispose: Cannot read size'); Dispose(LZone); end; procedure TAbstractMem.Dispose(const AAMZone: TAMZone); var LNewMemLeak : TAbstractMemMemoryLeaksNode; - LZoneSize : UInt32; + LZoneSize : TAbstractMemSize; begin CheckInitialized(True); + LZoneSize := 0; + LNewMemLeak.Clear; - LNewMemLeak.myPosition := AAMZone.position - 4; - LNewMemLeak.SetSize(AAMZone.size+4); + LNewMemLeak.myPosition := AAMZone.position - SizeOfAbstractMemPosition(); + LNewMemLeak.SetSize(Self, AAMZone.size+SizeOfAbstractMemPosition()); - if Read(LNewMemLeak.myPosition,LZoneSize,4)<>4 then raise EAbstractMem.Create('Dispose: Cannot read size'); - if Integer(LZoneSize)<>AAMZone.size then raise EAbstractMem.Create(Format('Dispose: Invalid size %d (expected %d) at position %d',[LZoneSize,AAMZone.size,AAMZone.position])); + if Read(LNewMemLeak.myPosition,LZoneSize,SizeOfAbstractMemPosition())<>SizeOfAbstractMemPosition() then raise EAbstractMem.Create('Dispose: Cannot read size'); + if (LZoneSize<>AAMZone.size) then raise EAbstractMem.Create(Format('Dispose: Invalid size %d (expected %d) at position %d',[LZoneSize,AAMZone.size,AAMZone.position])); // Check valid units based on size - if (LNewMemLeak.GetSize<>AAMZone.size+4) then raise EAbstractMem.Create(Format('Dispose: Invalid size %d at position %d',[AAMZone.size,AAMZone.position])); + if (LNewMemLeak.GetSize(Self)<>AAMZone.size+SizeOfAbstractMemPosition()) then raise EAbstractMem.Create(Format('Dispose: Invalid size %d (Found %d) at position %d',[AAMZone.size,LNewMemLeak.GetSize(Self),AAMZone.position])); FLock.Acquire; Try // Save mem leak to mem @@ -379,15 +509,21 @@ class function TAbstractMem.GetAbstractMemVersion: String; Result := ClassName+' v'+FloatToStr(CT_ABSTRACTMEM_VERSION); end; +function TAbstractMem.GetStatsReport(AClearStats: Boolean): String; +begin + Result := ''; +end; + function TAbstractMem.GetUsedZoneInfo(const APosition: TAbstractMemPosition; ACheckForUsedZone: Boolean; out AAMZone: TAMZone): Boolean; begin if (ACheckForUsedZone) then begin - if GetZoneType(APosition - CT_ExtraSizeForUsedZoneType,AAMZone)<>amzt_used then Exit(False) + if GetZoneType(APosition - SizeOfAbstractMemPosition(),AAMZone)<>amzt_used then Exit(False) else Exit(True); end else begin + AAMZone.Clear; AAMZone.position := APosition; - if Read(APosition - CT_ExtraSizeForUsedZoneType,AAMZone.size,4)<>4 then Exit(False); // This is the CT_ExtraSizeForUsedZoneType = 4 bytes for size indicator - Result := (AAMZone.position + AAMZone.size <= FNextAvailablePos) And ( ((((AAMZone.size-1) DIV 4)+1)*4) = AAMZone.size ); + if Read(APosition - Int64(SizeOfAbstractMemPosition()),AAMZone.size,SizeOfAbstractMemPosition())<>SizeOfAbstractMemPosition() then Exit(False); + Result := (AAMZone.position + AAMZone.size <= FNextAvailablePos) And (IsValidUsedSize(AAMZone.size)); end; end; @@ -396,38 +532,59 @@ function TAbstractMem.GetZoneType(APosition: TAbstractMemPosition; out AAMZone : LMemLeak, LSearchedMemLeak : TAbstractMemMemoryLeaksNode; begin Result := amzt_unknown; + AAMZone.Clear; AAMZone.position := APosition; AAMZone.size := 0; - LZone.position := (((APosition-1) DIV 4)+1)*4; - if (LZone.position <> APosition) or (LZone.position=FNextAvailablePos) then Exit; + if APosition<0 then Exit; + LZone.position := RoundSize(APosition); + LZone.size := 0; + if (LZone.position <> APosition) or (LZone.position=FNextAvailablePos) then Exit; // Check if Memory leak LMemLeak.myPosition := LZone.position; - LMemLeak.ReadFromMem(LMemLeak.myPosition,Self); + LMemLeak.ReadFromMem(Self,LMemLeak.myPosition); LSearchedMemLeak := FMemLeaks.Find(LMemLeak); if FMemLeaks.IsNil(LSearchedMemLeak) then begin - if Read(APosition,LZone.size,4)<>4 then Exit; // This is the CT_ExtraSizeForUsedZoneType = 4 bytes for size indicator - if (LZone.position + CT_ExtraSizeForUsedZoneType + LZone.size <= FNextAvailablePos) - And ( ((((LZone.size-1) DIV 4)+1)*4) = LZone.size ) then begin + if Read(APosition,LZone.size,SizeOfAbstractMemPosition())<>SizeOfAbstractMemPosition() then Exit; + if (LZone.position + SizeOfAbstractMemPosition() + LZone.size <= FNextAvailablePos) + And (IsValidUsedSize(LZone.size)) then begin Result := amzt_used; - AAMZone.position := LZone.position + CT_ExtraSizeForUsedZoneType; + AAMZone.position := LZone.position + SizeOfAbstractMemPosition(); AAMZone.size := LZone.size; end; end else begin - AAMZone.size := LSearchedMemLeak.GetSize; + AAMZone.size := LSearchedMemLeak.GetSize(Self); Result := amzt_memory_leak; end; end; -procedure TAbstractMem.IncreaseSize(ANeedSize: Integer); +function TAbstractMem.HeaderSize: Integer; +begin + if Fis64Bits then Result := CT_HeaderSize_64b + else Result := CT_HeaderSize_32b; + Result := RoundSize(Result); +end; + +procedure TAbstractMem.IncreaseSize(ANeedSize: TAbstractMemSize); // This will guarantee at the end that FMaxAvailablePos-FNextAvailablePos+1 >= ANeededSize -var LTmpNextAvailablePos, LTmpMaxAvailablePos : Integer; +var LTmpNextAvailablePos, LTmpMaxAvailablePos : Int64; begin if FMaxAvailablePos-FNextAvailablePos+1 >= ANeedSize then Exit; + + if Not Fis64Bits then begin + // Max 32 bits memory (4 Gb) + if Int64(FNextAvailablePos + Int64(ANeedSize)) >= Int64($FFFFFFFF) then begin + raise EAbstractMem.Create(Format('Cannot increase more size (Max 4Gb) current %d (max %d) needed %d overflow 0x%s', + [FNextAvailablePos,FMaxAvailablePos, ANeedSize,IntToHex(Int64(FNextAvailablePos + Int64(ANeedSize)),16)])); + end; + end; + LTmpNextAvailablePos := FNextAvailablePos; LTmpMaxAvailablePos := FMaxAvailablePos; + DoIncreaseSize(LTmpNextAvailablePos,LTmpMaxAvailablePos,ANeedSize); // Check - if (LTmpNextAvailablePos + LTmpMaxAvailablePos + 1 < ANeedSize) then raise EAbstractMem.Create(FormaT('IncreaseSize error. Needed %d obtained from %d to %d = %d', + if ((LTmpMaxAvailablePos-LTmpNextAvailablePos)+1 < ANeedSize) and (ANeedSize>0) then raise EAbstractMem.Create(FormaT('IncreaseSize error. Needed %d obtained from %d to %d = %d', [ANeedSize,LTmpNextAvailablePos,LTmpMaxAvailablePos,(LTmpMaxAvailablePos-LTmpNextAvailablePos+1)])); // FNextAvailablePos := LTmpNextAvailablePos; @@ -435,57 +592,89 @@ procedure TAbstractMem.IncreaseSize(ANeedSize: Integer); if ANeedSize>0 then SaveHeader; end; +function TAbstractMem.Initialize(ASetTo64Bytes: Boolean; AMemUnitsSize: Integer): Boolean; +begin + Result := False; + if ReadOnly then raise EAbstractMem.Create('Cannot initialize a Readonly AbstractMem'); + if HeaderInitialized then Exit; + Fis64Bits := ASetTo64Bytes; + FMemUnitsSize := 4; // By Default + if Fis64Bits then begin + if (AMemUnitsSize>=4) and (AMemUnitsSize<256) and ((AMemUnitsSize MOD 4)=0) then begin + FMemUnitsSize := AMemUnitsSize; + end; + Result := True; + end else begin + Result := True; + end; + FNextAvailablePos := HeaderSize; +end; + function TAbstractMem.IsAbstractMemInfoStable: Boolean; begin Result := True; end; -function TAbstractMem.New(AMemSize: Integer): TAMZone; -var LNeededMemSize : Integer; +function TAbstractMem.IsValidUsedSize(ASize: TAbstractMemSize): Boolean; +begin + Result := RoundSize(ASize + SizeOfAbstractMemPosition) = (ASize + SizeOfAbstractMemPosition); +end; + +function TAbstractMem.New(AMemSize: TAbstractMemSize): TAMZone; +var LNeededMemSize : TAbstractMemSize; LMemLeakToFind, LMemLeakFound : TAbstractMemMemoryLeaksNode; + LMaxMemSizePerUnits : TAbstractMemSize; begin CheckInitialized(True); - // AMemSize must be a value stored in 3 bytes (24 bits) where each value is a "unit" of 4 bytes, so: - // (AMemSize > 0) and (AMemSize <= ((((2^24)-1)*4) - 4) ) - if (AMemSize<=0) or (AMemSize>=67108860) then raise EAbstractMem.Create('Invalid new size: '+IntToStr(AMemSize)); + + // In 32 bits: + // AMemSize must be a value stored in 3 bytes (24 bits) where each value is a "unit" of 4 bytes (FMemUnitsSize = 4) + // In 64 bits: + // AMemSize must be a value stored in 4 bytes (32 bits) where each value is a "unit" of FMemUnitsSize bytes (FMemUnitsSize is multiple of 4 between 4..256) + // + LMaxMemSizePerUnits := Int64(256 * 256 * 256) * Int64(FMemUnitsSize); // 2^24 * FMemUnitsSize + if Fis64Bits then begin + LMaxMemSizePerUnits := LMaxMemSizePerUnits * 256; // On 64 bits is stored in 32 bits instead of 24 bits + end; + if (AMemSize<=0) or (AMemSize>(LMaxMemSizePerUnits - SizeOfAbstractMemPosition())) then raise EAbstractMem.Create('Invalid new size: '+AMemSize.ToString+' Max:'+LMaxMemSizePerUnits.ToString); FLock.Acquire; Try - // First 4 bytes will be "how many units" - LNeededMemSize := AMemSize + 4; + // First bytes will be "how many units" + LNeededMemSize := AMemSize + SizeOfAbstractMemPosition(); // Minimum size is always 16 bytes (Mem needed for a mem leak = 4 * 4 bytes) - if LNeededMemSize<16 then LNeededMemSize := 16 + if LNeededMemSizeLength(LBuffer)) then i := Length(LBuffer); Read(LNextStart,LBuffer[0],i); AStream.Write(LBuffer[0],i); - inc(LNextStart,i); + LNextStart := LNextStart + i; end; Finally FLock.Release; End; end; +function TAbstractMem.SizeOfAbstractMemPosition: TAbstractMemSize; +begin + if Fis64Bits then Result := 8 + else Result := 4; +end; + function TAbstractMem.ToString: String; var LAnalize : TStrings; - LTotalUsedSize, LTotalUsedBlocksCount, LTotalLeaksSize, LTotalLeaksBlocksCount : Integer; + LTotalUsedSize, LTotalUsedBlocksCount, LTotalLeaksSize, LTotalLeaksBlocksCount : Int64; begin LAnalize := TStringList.Create; try - if Not CheckConsistency(LAnalize,LTotalUsedSize, LTotalUsedBlocksCount, LTotalLeaksSize, LTotalLeaksBlocksCount) then begin + if Not CheckConsistency(LAnalize, Nil, LTotalUsedSize, LTotalUsedBlocksCount, LTotalLeaksSize, LTotalLeaksBlocksCount) then begin LAnalize.Add('CONSISTENCY ERROR FOUND'); end else begin LAnalize.Clear; @@ -554,7 +768,7 @@ function TAbstractMem.ToString: String; end; end; -function TAbstractMem.Read(const APosition: Integer; var ABuffer; ASize: Integer): Integer; +function TAbstractMem.Read(const APosition: Int64; var ABuffer; ASize: Integer): Integer; begin FLock.Acquire; try @@ -568,10 +782,11 @@ function TAbstractMem.Read(const APosition: Integer; var ABuffer; ASize: Integer function TAbstractMem.ReadFirstData(var AFirstDataZone: TAMZone; var AFirstData: TBytes): Boolean; var LPosition : TAbstractMemPosition; begin - LPosition := CT_HeaderSize; Result := False; AFirstDataZone.Clear; SetLength(AFirstData,0); + if Not HeaderInitialized then Exit; + LPosition := HeaderSize; if (LPosition < FNextAvailablePos) then begin case GetZoneType(LPosition,AFirstDataZone) of amzt_used : begin @@ -582,20 +797,28 @@ function TAbstractMem.ReadFirstData(var AFirstDataZone: TAMZone; var AFirstData: end; end; -procedure TAbstractMem.Write(const APosition: Integer; const ABuffer; ASize: Integer); +function TAbstractMem.RoundSize(ASize: TAbstractMemSize): TAbstractMemSize; +// Rounds ASize to a FMemUnitsSize valid value +begin + Assert(ASize>=0,Format('Invalid size:%d',[ASize])); + Result := ((((ASize-1) DIV Int64(FMemUnitsSize))+1)*FMemUnitsSize); +end; + +function TAbstractMem.Write(const APosition: Int64; const ABuffer; ASize: Integer) : Integer; begin FLock.Acquire; Try CheckInitialized(True); if AbsoluteWrite(PositionToAbsolute(APosition),ABuffer,ASize)<>ASize then raise EAbstractMem.Create('Cannot write expected size'); + Result := ASize; Finally FLock.Release; End; end; -{ TAbstractMemMemoryLeaksNode } +{ TAbstractMem.TAbstractMemMemoryLeaksNode } -procedure TAbstractMemMemoryLeaksNode.Clear; +procedure TAbstractMem.TAbstractMemMemoryLeaksNode.Clear; begin Self.myPosition := 0; Self.parentPosition := 0; @@ -605,7 +828,7 @@ procedure TAbstractMemMemoryLeaksNode.Clear; Self.units := 0; end; -function TAbstractMemMemoryLeaksNode.GetPosition(APosition: TAVLTreePosition): TAbstractMemPosition; +function TAbstractMem.TAbstractMemMemoryLeaksNode.GetPosition(APosition: TAVLTreePosition): TAbstractMemPosition; begin case APosition of poParent: Result := Self.parentPosition; @@ -615,27 +838,37 @@ function TAbstractMemMemoryLeaksNode.GetPosition(APosition: TAVLTreePosition): T end; end; -function TAbstractMemMemoryLeaksNode.GetSize: Integer; +function TAbstractMem.TAbstractMemMemoryLeaksNode.GetSize(AAbstractMem : TAbstractMem): Int64; begin - Result := Self.units * 4; + Result := Int64(Self.units) * Int64(AAbstractMem.FMemUnitsSize); end; -procedure TAbstractMemMemoryLeaksNode.ReadFromMem(AMyPosition: TAbstractMemPosition; AAbstractMem: TAbstractMem); +procedure TAbstractMem.TAbstractMemMemoryLeaksNode.ReadFromMem(AAbstractMem : TAbstractMem; AMyPosition: TAbstractMemPosition); var LBuff : TBytes; begin Self.Clear; Self.myPosition := AMyPosition; if Self.myPosition<=0 then Exit; - SetLength(LBuff,16); - AAbstractMem.Read(AMyPosition,LBuff[0],16); - Move(LBuff[0],Self.parentPosition,4); - Move(LBuff[4],Self.leftPosition,4); - Move(LBuff[8],Self.rigthPosition,4); - Move(LBuff[12],Self.balance,1); - Move(LBuff[13],Self.units,3); + if AAbstractMem.Is64Bits then begin + SetLength(LBuff,32); + AAbstractMem.Read(AMyPosition,LBuff[0],32); + Move(LBuff[0],Self.parentPosition,8); + Move(LBuff[8],Self.leftPosition,8); + Move(LBuff[16],Self.rigthPosition,8); + Move(LBuff[24],Self.units,4); + Move(LBuff[28],Self.balance,1); + end else begin + SetLength(LBuff,16); + AAbstractMem.Read(AMyPosition,LBuff[0],16); + Move(LBuff[0],Self.parentPosition,4); + Move(LBuff[4],Self.leftPosition,4); + Move(LBuff[8],Self.rigthPosition,4); + Move(LBuff[12],Self.balance,1); + Move(LBuff[13],Self.units,3); + end; end; -procedure TAbstractMemMemoryLeaksNode.SetPosition(APosition: TAVLTreePosition; AMemPosition: TAbstractMemPosition); +procedure TAbstractMem.TAbstractMemMemoryLeaksNode.SetPosition(APosition: TAVLTreePosition; AMemPosition: TAbstractMemPosition); begin case APosition of poParent: Self.parentPosition := AMemPosition; @@ -645,35 +878,44 @@ procedure TAbstractMemMemoryLeaksNode.SetPosition(APosition: TAVLTreePosition; A end; end; -procedure TAbstractMemMemoryLeaksNode.SetSize(ABytesSize: Integer); +procedure TAbstractMem.TAbstractMemMemoryLeaksNode.SetSize(AAbstractMem : TAbstractMem; ABytesSize: Int64); begin - Self.units := (((ABytesSize-1) DIV 4)+1); + Self.units := (((ABytesSize-1) DIV AAbstractMem.FMemUnitsSize)+1); end; -function TAbstractMemMemoryLeaksNode.ToString: String; +function TAbstractMem.TAbstractMemMemoryLeaksNode.ToString(AAbstractMem : TAbstractMem): String; begin Result := Format('%d Bytes at %d with p:%d l:%d r:%d b:%d u:%d', - [Self.GetSize, + [Self.GetSize(AAbstractMem), Self.myPosition,Self.parentPosition,Self.leftPosition,Self.rigthPosition, Self.balance,Self.units]); end; -procedure TAbstractMemMemoryLeaksNode.WriteToMem(AAbstractMem: TAbstractMem); +procedure TAbstractMem.TAbstractMemMemoryLeaksNode.WriteToMem(AAbstractMem: TAbstractMem); var LBuff : TBytes; begin if Self.myPosition<=0 then Exit; - SetLength(LBuff,16); - Move(Self.parentPosition,LBuff[0],4); - Move(Self.leftPosition,LBuff[4],4); - Move(Self.rigthPosition,LBuff[8],4); - Move(Self.balance,LBuff[12],1); - Move(Self.units,LBuff[13],3); - AAbstractMem.Write(Self.myPosition,LBuff[0],16); + if (AAbstractMem.is64Bits) then begin + SetLength(LBuff,32); + Move(Self.parentPosition,LBuff[0],8); + Move(Self.leftPosition,LBuff[8],8); + Move(Self.rigthPosition,LBuff[16],8); + Move(Self.units,LBuff[24],4); + Move(Self.balance,LBuff[28],1); + end else begin + SetLength(LBuff,16); + Move(Self.parentPosition,LBuff[0],4); + Move(Self.leftPosition,LBuff[4],4); + Move(Self.rigthPosition,LBuff[8],4); + Move(Self.balance,LBuff[12],1); + Move(Self.units,LBuff[13],3); + end; + AAbstractMem.Write(Self.myPosition,LBuff[0],Length(LBuff)); end; -{ TAbstractMemMemoryLeaks } +{ TAbstractMem.TAbstractMemMemoryLeaks } -function _TAbstractMemMemoryLeaksNode_CompareByUnits(const Left, Right: TAbstractMemMemoryLeaksNode): Integer; +function _TAbstractMemMemoryLeaksNode_CompareByUnits(const Left, Right: TAbstractMem.TAbstractMemMemoryLeaksNode): Integer; begin Result := Left.units - Right.units; if (Result=0) and (Left.myPosition>0) and (Right.myPosition>0) then begin @@ -682,17 +924,17 @@ function _TAbstractMemMemoryLeaksNode_CompareByUnits(const Left, Right: TAbstrac end; end; -function TAbstractMemMemoryLeaks.AreEquals(const ANode1, ANode2: TAbstractMemMemoryLeaksNode): Boolean; +function TAbstractMem.TAbstractMemMemoryLeaks.AreEquals(const ANode1, ANode2: TAbstractMemMemoryLeaksNode): Boolean; begin Result := (ANode1.myPosition = ANode2.myPosition); end; -procedure TAbstractMemMemoryLeaks.ClearNode(var ANode: TAbstractMemMemoryLeaksNode); +procedure TAbstractMem.TAbstractMemMemoryLeaks.ClearNode(var ANode: TAbstractMemMemoryLeaksNode); begin ANode.Clear; end; -procedure TAbstractMemMemoryLeaks.ClearPosition(var ANode: TAbstractMemMemoryLeaksNode; APosition: TAVLTreePosition); +procedure TAbstractMem.TAbstractMemMemoryLeaks.ClearPosition(var ANode: TAbstractMemMemoryLeaksNode; APosition: TAVLTreePosition); begin ANode.SetPosition(APosition,0); if ANode.myPosition>0 then begin @@ -700,14 +942,14 @@ procedure TAbstractMemMemoryLeaks.ClearPosition(var ANode: TAbstractMemMemoryLea end; end; -constructor TAbstractMemMemoryLeaks.Create(AAbstractMem: TAbstractMem; ARootPosition: TAbstractMemPosition); +constructor TAbstractMem.TAbstractMemMemoryLeaks.Create(AAbstractMem: TAbstractMem; ARootPosition: TAbstractMemPosition); begin FRootPosition := ARootPosition; FAbstractMem := AAbstractMem; inherited Create(_TAbstractMemMemoryLeaksNode_CompareByUnits,False); end; -destructor TAbstractMemMemoryLeaks.Destroy; +destructor TAbstractMem.TAbstractMemMemoryLeaks.Destroy; var LTmp : TAbstractMemMemoryLeaksNode; begin LTmp := Root; @@ -715,84 +957,90 @@ destructor TAbstractMemMemoryLeaks.Destroy; inherited; end; -procedure TAbstractMemMemoryLeaks.DisposeNode(var ANode: TAbstractMemMemoryLeaksNode); +procedure TAbstractMem.TAbstractMemMemoryLeaks.DisposeNode(var ANode: TAbstractMemMemoryLeaksNode); begin // ANode.Clear; end; -function TAbstractMemMemoryLeaks.GetBalance(const ANode: TAbstractMemMemoryLeaksNode): Integer; +function TAbstractMem.TAbstractMemMemoryLeaks.GetBalance(const ANode: TAbstractMemMemoryLeaksNode): Integer; begin - if ANode.myPosition>0 then ANode.ReadFromMem(ANode.myPosition,Self.FAbstractMem); + if ANode.myPosition>0 then ANode.ReadFromMem(Self.FAbstractMem,ANode.myPosition); Result := ANode.balance; end; -function TAbstractMemMemoryLeaks.GetPosition(const ANode: TAbstractMemMemoryLeaksNode; +function TAbstractMem.TAbstractMemMemoryLeaks.GetPosition(const ANode: TAbstractMemMemoryLeaksNode; APosition: TAVLTreePosition): TAbstractMemMemoryLeaksNode; var LPos : TAbstractMemPosition; begin - if ANode.myPosition>0 then ANode.ReadFromMem(ANode.myPosition,Self.FAbstractMem); + if ANode.myPosition>0 then ANode.ReadFromMem(Self.FAbstractMem,ANode.myPosition); LPos := ANode.GetPosition(APosition); if LPos>0 then begin - Result.ReadFromMem(LPos,FAbstractMem); + Result.ReadFromMem(Self.FAbstractMem,LPos); end else Result.Clear; end; -function TAbstractMemMemoryLeaks.GetRoot: TAbstractMemMemoryLeaksNode; +function TAbstractMem.TAbstractMemMemoryLeaks.GetRoot: TAbstractMemMemoryLeaksNode; begin if FRootPosition>0 then begin - Result.ReadFromMem(FRootPosition,FAbstractMem); + Result.ReadFromMem(Self.FAbstractMem,FRootPosition); end else Result.Clear; end; -function TAbstractMemMemoryLeaks.HasPosition(const ANode: TAbstractMemMemoryLeaksNode; +function TAbstractMem.TAbstractMemMemoryLeaks.HasPosition(const ANode: TAbstractMemMemoryLeaksNode; APosition: TAVLTreePosition): Boolean; begin - if ANode.myPosition>0 then ANode.ReadFromMem(ANode.myPosition,Self.FAbstractMem); + if ANode.myPosition>0 then ANode.ReadFromMem(Self.FAbstractMem,ANode.myPosition); Result := ANode.GetPosition(APosition) > 0; end; -function TAbstractMemMemoryLeaks.IsNil(const ANode: TAbstractMemMemoryLeaksNode): Boolean; +function TAbstractMem.TAbstractMemMemoryLeaks.IsNil(const ANode: TAbstractMemMemoryLeaksNode): Boolean; begin Result := ANode.myPosition = 0; end; -procedure TAbstractMemMemoryLeaks.SetBalance(var ANode: TAbstractMemMemoryLeaksNode; ANewBalance: Integer); +procedure TAbstractMem.TAbstractMemMemoryLeaks.SetBalance(var ANode: TAbstractMemMemoryLeaksNode; ANewBalance: Integer); begin - if ANode.myPosition>0 then ANode.ReadFromMem(ANode.myPosition,Self.FAbstractMem); + if ANode.myPosition>0 then ANode.ReadFromMem(Self.FAbstractMem,ANode.myPosition); ANode.balance := ANewBalance; if ANode.myPosition>0 then begin ANode.WriteToMem(FAbstractMem); end; end; -procedure TAbstractMemMemoryLeaks.SetPosition(var ANode: TAbstractMemMemoryLeaksNode; +procedure TAbstractMem.TAbstractMemMemoryLeaks.SetPosition(var ANode: TAbstractMemMemoryLeaksNode; APosition: TAVLTreePosition; const ANewValue: TAbstractMemMemoryLeaksNode); begin - if ANode.myPosition>0 then ANode.ReadFromMem(ANode.myPosition,Self.FAbstractMem); + if ANode.myPosition>0 then ANode.ReadFromMem(Self.FAbstractMem,ANode.myPosition); ANode.SetPosition(APosition,ANewValue.myPosition); if ANode.myPosition>0 then begin ANode.WriteToMem(FAbstractMem); end; end; -procedure TAbstractMemMemoryLeaks.SetRoot(const Value: TAbstractMemMemoryLeaksNode); +procedure TAbstractMem.TAbstractMemMemoryLeaks.SetRoot(const Value: TAbstractMemMemoryLeaksNode); begin FRootPosition := Value.myPosition; // Save to header info FAbstractMem.SaveHeader; end; -function TAbstractMemMemoryLeaks.ToString(const ANode: TAbstractMemMemoryLeaksNode): String; +function TAbstractMem.TAbstractMemMemoryLeaks.SizeOfMemoryLeak: TAbstractMemSize; +begin + if FAbstractMem.is64Bits then Result := 32 + else Result := 16; +end; + +function TAbstractMem.TAbstractMemMemoryLeaks.ToString(const ANode: TAbstractMemMemoryLeaksNode): String; begin - Result := ANode.ToString; + Result := ANode.ToString(Self.FAbstractMem); end; { TMem } function TMem.AbsoluteRead(const AAbsolutePosition: Int64; var ABuffer; ASize: Integer): Integer; begin - if AAbsolutePosition>=Length(FMem) then Exit(0) + if (AAbsolutePosition>=Length(FMem)) or (AAbsolutePosition<0) then Exit(0) else begin if AAbsolutePosition + ASize > Length(FMem) then Result := Length(FMem) - AAbsolutePosition else Result := ASize; @@ -803,20 +1051,21 @@ function TMem.AbsoluteRead(const AAbsolutePosition: Int64; var ABuffer; ASize: I function TMem.AbsoluteWrite(const AAbsolutePosition: Int64; const ABuffer; ASize: Integer): Integer; begin if ASize=0 then Exit(0); - if (AAbsolutePosition + ASize > Length(FMem)) or (ASize<0) then + if (AAbsolutePosition + ASize > Length(FMem)) or (ASize<0) or (AAbsolutePosition<0) then raise EAbstractMem.Create(Format('Write out of mem range from %d to %d (max %d)', [AAbsolutePosition,AAbsolutePosition+ASize,High(FMem)])); Move(ABuffer,FMem[AAbsolutePosition],ASize); Result := ASize; end; -constructor TMem.Create(AInitialPosition: Integer; AReadOnly: Boolean); +constructor TMem.Create(AInitialPosition: Int64; AReadOnly: Boolean); begin SetLength(FMem,0); + FLastIncrease := 0; inherited; end; -procedure TMem.DoIncreaseSize(var ANextAvailablePos, AMaxAvailablePos: Integer; ANeedSize: Integer); +procedure TMem.DoIncreaseSize(var ANextAvailablePos, AMaxAvailablePos: Int64; ANeedSize: Integer); begin if (ANeedSize<=0) And (AMaxAvailablePos<=0) then begin SetLength(FMem,0); // Reset @@ -825,10 +1074,10 @@ procedure TMem.DoIncreaseSize(var ANextAvailablePos, AMaxAvailablePos: Integer; AMaxAvailablePos := Length(FMem); if (AMaxAvailablePos-ANextAvailablePos+1 >= ANeedSize) then Exit; - ANeedSize := (((ANeedSize-1) DIV 256)+1)*256; - + ANeedSize := RoundSize( ((((ANeedSize + FLastIncrease)-1) DIV 256)+1)*256 ); + FLastIncrease := ANeedSize; SetLength(FMem, AMaxAvailablePos + ANeedSize); - Inc(AMaxAvailablePos,ANeedSize); + AMaxAvailablePos := AMaxAvailablePos + ANeedSize; // end; @@ -897,9 +1146,9 @@ class function TAbstractMemAVLTreeNodeInfoClass.GetPosition( end; end; -class function TAbstractMemAVLTreeNodeInfoClass.GetSize: Integer; +class function TAbstractMemAVLTreeNodeInfoClass.GetSize(AAbstractMem : TAbstractMem): Integer; begin - Result := 13; // 4*3 + 1 (balance) + Result := (AAbstractMem.SizeOfAbstractMemPosition*3)+1; end; class function TAbstractMemAVLTreeNodeInfoClass.ReadFromMem( @@ -907,14 +1156,14 @@ class function TAbstractMemAVLTreeNodeInfoClass.ReadFromMem( AAbstractMem: TAbstractMem): TAbstractMemAVLTreeNodeInfo; var LBytes : TBytes; begin - if (AMyPosition>=CT_HeaderSize) then begin + if (AMyPosition>=AAbstractMem.HeaderSize) then begin Result.Clear; - SetLength(LBytes,Self.GetSize); + SetLength(LBytes,Self.GetSize(AAbstractMem)); if AAbstractMem.Read(AMyPosition,LBytes[0],Length(LBytes))<>Length(LBytes) then raise EAbstractMem.Create(Format('Not enough data to read TreeNodeInfo at %d',[AMyPosition])); - Move(LBytes[0],Result.parentPosition,4); - Move(LBytes[4],Result.leftPosition,4); - Move(LBytes[8],Result.rigthPosition,4); - Move(LBytes[12],Result.balance,1); + Move(LBytes[0],Result.parentPosition,AAbstractMem.SizeOfAbstractMemPosition); + Move(LBytes[AAbstractMem.SizeOfAbstractMemPosition ],Result.leftPosition,AAbstractMem.SizeOfAbstractMemPosition); + Move(LBytes[AAbstractMem.SizeOfAbstractMemPosition*2],Result.rigthPosition,AAbstractMem.SizeOfAbstractMemPosition); + Move(LBytes[AAbstractMem.SizeOfAbstractMemPosition*3],Result.balance,1); end else raise EAbstractMem.Create(Format('Invalid position read TAbstractMemAVLTreeNodeInfo.ReadFromMem(%d)',[AMyPosition])); end; @@ -947,14 +1196,70 @@ class procedure TAbstractMemAVLTreeNodeInfoClass.WriteToMem( const ANodeInfo: TAbstractMemAVLTreeNodeInfo); var LBytes : TBytes; begin - if (AMyPosition>=CT_HeaderSize) then begin - SetLength(LBytes,Self.GetSize); - Move(ANodeInfo.parentPosition,LBytes[0],4); - Move(ANodeInfo.leftPosition,LBytes[4],4); - Move(ANodeInfo.rigthPosition,LBytes[8],4); - Move(ANodeInfo.balance,LBytes[12],1); + if (AMyPosition>=AAbstractMem.HeaderSize) then begin + SetLength(LBytes,Self.GetSize(AAbstractMem)); + Move(ANodeInfo.parentPosition,LBytes[0],AAbstractMem.SizeOfAbstractMemPosition); + Move(ANodeInfo.leftPosition, LBytes[AAbstractMem.SizeOfAbstractMemPosition*1],AAbstractMem.SizeOfAbstractMemPosition); + Move(ANodeInfo.rigthPosition, LBytes[AAbstractMem.SizeOfAbstractMemPosition*2],AAbstractMem.SizeOfAbstractMemPosition); + Move(ANodeInfo.balance, LBytes[AAbstractMem.SizeOfAbstractMemPosition*3],1); AAbstractMem.Write(AMyPosition,LBytes[0],Length(LBytes)); end else raise EAbstractMem.Create(Format('Invalid position write TAbstractMemAVLTreeNodeInfo.WriteToMem(%d) for %s',[AMyPosition,ANodeInfo.ToString])); end; +{ TStreamMem } + +function TStreamMem.AbsoluteRead(const AAbsolutePosition: Int64; var ABuffer; + ASize: Integer): Integer; +begin + FStream.Position := AAbsolutePosition; + Result := FStream.Read(ABuffer,ASize); +end; + +function TStreamMem.AbsoluteWrite(const AAbsolutePosition: Int64; const ABuffer; + ASize: Integer): Integer; +begin + FStream.Position := AAbsolutePosition; + Result := FStream.Write(ABuffer,ASize); +end; + +constructor TStreamMem.Create(const AStream : TStream; AInitialPosition : Int64; AReadOnly : Boolean); +begin + FStream := AStream; + inherited Create(AInitialPosition,AReadOnly); +end; + +destructor TStreamMem.Destroy; +begin + inherited; + FStream := Nil; +end; + +procedure TStreamMem.DoIncreaseSize(var ANextAvailablePos, + AMaxAvailablePos: Int64; ANeedSize: Integer); +var LBuff : TBytes; +begin + if (ANeedSize<=0) And (AMaxAvailablePos<=0) then begin + FStream.Seek(0,soFromEnd); + FStream.Size := 0; + Exit; + end; + + FStream.Seek(0,soFromEnd); + // GoTo ANextAvailablePos + if (FStream.Position ) + // BTree implementation on AbstractMem will use TIdentify and TData as a TAbstractMemPosition (aka pointer inside AbstractMem) + // Internal search process will convert TData pointer to final TData value for + // comparisions + public + type + TAVLABTreeCache = Class(TAVLCache.TAbstractBTreeNode>) + end; + private + const + CT_AbstractMemBTree_Magic = 'AMBT'; // DO NOT LOCALIZE MUST BE 4 BYTES LENGTH + var + FrootPosition : TAbstractMemPosition; + FBTreeCache : TAVLABTreeCache; + procedure SaveHeader; + Procedure CheckInitialized; + procedure LoadNodeHeader(const APosition : TAbstractMemPosition; var ANode : TAbstractBTree.TAbstractBTreeNode; var AChildsCount : Integer; var AChildsPosition : TAbstractMemPosition); + procedure SaveNodeHeader(const ANode : TAbstractBTree.TAbstractBTreeNode; const AChildsPosition : TAbstractMemPosition); + function GetNodeHeaderSize : Integer; + function CacheCompareBTree(const ALeft,ARight : TAVLCache.TAbstractBTreeNode>.PAVLCacheMemData) : Integer; + function OnGetCopyDataMethod(Const AData : TAbstractBTree.TAbstractBTreeNode) : TAbstractBTree.TAbstractBTreeNode; + protected + FInitialZone : TAMZone; + FAbstractMem : TAbstractMem; + function GetRoot: TAbstractBTree.TAbstractBTreeNode; override; + procedure SetRoot(var Value: TAbstractBTree.TAbstractBTreeNode); override; + function NewNode : TAbstractBTree.TAbstractBTreeNode; override; + procedure DisposeNode(var ANode : TAbstractBTree.TAbstractBTreeNode); override; + procedure SetNil(var AIdentify : TAbstractMemPosition); override; + procedure SaveNode(var ANode : TAbstractBTree.TAbstractBTreeNode); override; + procedure SetCount(const ANewCount : Integer); override; + // + // NOTE: inherited classes will need to override DoCompareData function in order to properly compare: + // function DoCompareData(const ALeftData, ARightData: TAbstractMemPosition): Integer; override; + // + public + function IsNil(const AIdentify : TAbstractMemPosition) : Boolean; override; + constructor Create(AAbstractMem : TAbstractMem; const AInitialZone: TAMZone; AAllowDuplicates : Boolean; AOrder : Integer); virtual; + destructor Destroy; override; + function GetNode(AIdentify : TAbstractMemPosition) : TAbstractBTree.TAbstractBTreeNode; override; + class function MinAbstractMemInitialPositionSize(AAbstractMem : TAbstractMem) : Integer; + property AbstractMem : TAbstractMem read FAbstractMem; + property Count; + function NodeDataToString(const AData : TAbstractMemPosition) : String; override; + function NodeIdentifyToString(const AIdentify : TAbstractMemPosition) : String; override; + property InitialZone : TAMZone read FInitialZone; + function GetNullData : TAbstractMemPosition; override; + property BTreeCache : TAVLABTreeCache read FBTreeCache; + class function GetInfo(AAbstractMem : TAbstractMem; AInitialZone: TAMZone; out AAllowDuplicates : Boolean; out AOrder, ACount : Integer): Boolean; + End; + + {$IFnDEF FPC} + TAbstractMemBTreeDataIndex = Class; + {$ENDIF} + + TAbstractMemBTreeDataAbstract = Class(TAbstractMemBTree) + private + var + // FLeft_ and FRight_ will be used as a cache for improvement calls on DoCompareData + FLeft_Pos, FRight_Pos : TAbstractMemPosition; + FLeft_Data, FRight_Data : TBTreeData; + FSearchTarget : TBTreeData; + FOnCompareAbstractMemData: TComparison; + protected + function DoCompareData(const ALefTBTreeData, ARighTBTreeData: TAbstractMemPosition): Integer; override; + // + function LoadData(const APosition : TAbstractMemPosition) : TBTreeData; virtual; abstract; + function SaveData(const AData : TBTreeData) : TAMZone; virtual; abstract; + function GetCopyOfData(Const AData : TBTreeData) : TBTreeData; virtual; + procedure DoOnFindProcessStart; override; + procedure DoOnFindProcessEnd; override; + // + function GetData(const APosition : TAbstractMemPosition) : TBTreeData; virtual; + function AddInherited(const AAbstractMemPosition: TAbstractMemPosition) : Boolean; + function DeleteInherited(const AAbstractMemPosition: TAbstractMemPosition) : Boolean; + public + constructor Create(AAbstractMem : TAbstractMem; const AInitialZone: TAMZone; AAllowDuplicates : Boolean; AOrder : Integer; + const AOnCompareAbstractMemDataMethod: TComparison); reintroduce; + destructor Destroy; override; + procedure Add(); reintroduce; + procedure Delete(); reintroduce; + function FindData(const AData: TBTreeData; out ADataEqualOrPrecessorFound : TAbstractMemPosition; var AFoundData : TBTreeData) : Boolean; overload; + function FindData(const AData: TBTreeData; var AFoundData : TBTreeData) : Boolean; overload; + function FindDataPos(const AData: TBTreeData; out ADataEqualOrPrecessorFound : TAbstractMemPosition) : Boolean; overload; + function FindDataPos(const AData: TBTreeData; out ADataEqualOrPrecessorFound : TAbstractMemPosition; out ANode : TAbstractBTree.TAbstractBTreeNode; out iPos : Integer) : Boolean; overload; + function FindDataPrecessor(const AData : TBTreeData; var APrecessor : TBTreeData) : Boolean; + function FindDataSuccessor(const AData : TBTreeData; var ASuccessor : TBTreeData) : Boolean; + function FindDataLowest(out ALowest : TBTreeData) : Boolean; + function FindDataHighest(out AHighest : TBTreeData) : Boolean; + End; + + TAbstractMemBTreeData = Class(TAbstractMemBTreeDataAbstract) + public + type + TAVLABTreeDataCacheData = record + position : TAbstractMemPosition; + data : TBTreeData; + end; + TAVLABTreeDataCache = Class(TAVLCache) + protected + public + function ToString(const AData : TAVLABTreeDataCacheData) : String; override; + end; + private + // Ref: 20211111-1 -- TODO + // FreePascal issue: Does not allow recursive Generics... + // due to this issue (on Delphi is allowed) then I must use TList< TOjbect > instead + // last FreePascal version with this issue: 3.2.0 (will need to check on future versions) + {$IFDEF FPC} + FIndexes : TList< TObject >; + {$ELSE} + // Ref: 20211111-1 I can't use this... in Delphi it works! Not in FreePascal... SHIT! + FIndexes : TList< TAbstractMemBTreeDataIndex >; + {$ENDIF} + FBTreeDataCache : TAVLABTreeDataCache; + function CacheCompareBTreeData(const ALeft,ARight : TAVLCache.PAVLCacheMemData) : Integer; + protected + function GetData(const APosition : TAbstractMemPosition) : TBTreeData; override; + procedure DisposeData(var AData : TAbstractMemPosition); override; + procedure DeletedData(const AData: TBTreeData); virtual; + public + constructor Create(AAbstractMem : TAbstractMem; const AInitialZone: TAMZone; AAllowDuplicates : Boolean; AOrder : Integer; + const AOnCompareAbstractMemDataMethod: TComparison); + destructor Destroy; override; + function CanAddData(const AData: TBTreeData) : Boolean; + function AddData(const AData: TBTreeData) : Boolean; + function DeleteData(const AData: TBTreeData) : Boolean; + function IndexesCount : Integer; + // See ref: 20211111-1 + {$IFDEF FPC} + function GetIndex(AIndex : Integer) : TObject; + {$ELSE} + function GetIndex(AIndex : Integer) : TAbstractMemBTreeDataIndex; + {$ENDIF} + procedure CheckConsistency; override; + property BTreeDataCache : TAVLABTreeDataCache read FBTreeDataCache; + End; + + TAbstractMemBTreeDataIndex = Class(TAbstractMemBTreeDataAbstract) + private + FIndexed : TAbstractMemBTreeData; + FCompareModeInsertingOrDeleting : Boolean; + protected + function DoCompareData(const ALefTBTreeData, ARighTBTreeData: TAbstractMemPosition): Integer; override; + function LoadData(const APosition : TAbstractMemPosition) : TBTreeData; override; + function SaveData(const AData : TBTreeData) : TAMZone; override; + public + constructor Create(AAbstractMemBTreeData : TAbstractMemBTreeData; + AInitialZone: TAMZone; + AAllowDuplicates : Boolean; AOrder : Integer; + const AOnCompareAbstractMemDataMethod: TComparison); + destructor Destroy; override; + procedure CheckConsistency; override; + procedure Lock; override; + procedure Unlock; override; + End; + +implementation + +{ TAbstractMemBTree } + +function TAbstractMemBTree.CacheCompareBTree(const ALeft, + ARight: TAVLCache.TAbstractBTreeNode>.PAVLCacheMemData): Integer; +begin + if ALeft.data.identifyARight.data.identify then Result := 1 + else Result := 0; +end; + +procedure TAbstractMemBTree.CheckInitialized; +begin + if (FInitialZone.position=0) then raise EAbstractMemBTree.Create(Format('%s initial position not initialized',[ClassName])); +end; + +constructor TAbstractMemBTree.Create(AAbstractMem : TAbstractMem; const AInitialZone: TAMZone; AAllowDuplicates: Boolean; AOrder: Integer); +var LBuff : TBytes; + i : Integer; + LOrder : Integer; +begin + FAbstractMem := AAbstractMem; + FrootPosition := 0; + + inherited Create(TComparison_TAbstractMemPosition,TComparison_TAbstractMemPosition,AAllowDuplicates,AOrder); + FCount := 0; + // + if Not FAbstractMem.GetUsedZoneInfo(AInitialZone.position,False,FInitialZone) then begin + if FAbstractMem.ReadOnly then begin + // Is not initialized and is Read Only + FInitialZone.Clear; + Exit; + end; + raise EAbstractMemBTree.Create('Cannot capture zone info for initialize'); + end else begin + if FInitialZone.position=0 then Exit; + end; + if (FInitialZone.sizeOrd(CT_AbstractMemBTree_Magic.Chars[i]) then Exit; + end; + Move(LBuff[4],FrootPosition,FAbstractMem.SizeOfAbstractMemPosition); + Move(LBuff[4+FAbstractMem.SizeOfAbstractMemPosition],FCount,4); + LOrder := 0; + Move(LBuff[8+FAbstractMem.SizeOfAbstractMemPosition],LOrder,4); + if LOrder<>Order then raise EAbstractMemBTree.Create(Format('Invalid Order %d expected %d',[LOrder,Order])); + if (((FrootPosition=0) and (FCount>0))) then raise EAbstractMemBTree.Create(Format('Invalid initial root %d vs count %d',[FrootPosition,FCount])); + finally + end; + // + {$IFDEF FPC} + // Ref: 20211126-2 -- TODO + // FPC (Tested on 3.2.0) does not allow use "CacheCompareBTree" for problems withs generics... + // Nedd to deeply search why or to test on futures releases... + FBTreeCache := Nil; + {$ELSE} + FBTreeCache := TAVLABTreeCache.Create(100000,CacheCompareBTree); + {$ENDIF} +end; + +destructor TAbstractMemBTree.Destroy; +begin + // + FreeAndNil(FBTreeCache); + inherited; +end; + +procedure TAbstractMemBTree.DisposeNode(var ANode: TAbstractBTree.TAbstractBTreeNode); +var LOld : TAbstractBTree.TAbstractBTreeNode; + LChildsCount : Integer; + LChildsPosition : TAbstractMemPosition; +begin + if Assigned(FBTreeCache) then begin + FBTreeCache.Remove(ANode); + end; + LoadNodeHeader(ANode.identify,LOld,LChildsCount,LChildsPosition); + FAbstractMem.Dispose( ANode.identify ); + ClearNode(ANode); + Assert(((LChildsCount=0) and (LChildsPosition=0)) + or ((LChildsCount<>0) and (LChildsPosition<>0)),Format('Invalid Childs count %d and position %d',[LChildsCount,LChildsPosition])); + if LChildsCount>0 then begin + FAbstractMem.Dispose( LChildsPosition ); + end; +end; + +class function TAbstractMemBTree.GetInfo(AAbstractMem: TAbstractMem; + AInitialZone: TAMZone; out AAllowDuplicates: Boolean; + out AOrder, ACount: Integer): Boolean; +var LBuff : TBytes; + i : Integer; + amz : TAMZone; + ii : UInt64; +begin + AAllowDuplicates := false; + AOrder := 0; + Result := False; + // + if Not AAbstractMem.GetUsedZoneInfo(AInitialZone.position,False,amz) then Exit(False); + if amz.position=0 then Exit(False); + if (amz.sizeOrd(CT_AbstractMemBTree_Magic.Chars[i]) then Exit; + end; + Move(LBuff[4],ii,AAbstractMem.SizeOfAbstractMemPosition); + Move(LBuff[4+AAbstractMem.SizeOfAbstractMemPosition],ACount,4); + Move(LBuff[8+AAbstractMem.SizeOfAbstractMemPosition],AOrder,4); + Result := (AOrder>=3) and (ACount>=0); +end; + +function TAbstractMemBTree.GetNode(AIdentify: TAbstractMemPosition): TAbstractBTree.TAbstractBTreeNode; +var LBuff : TBytes; + i, LChildsCount : Integer; + LChildsPosition : TAbstractMemPosition; + LSearch,LFound : TAbstractBTree.TAbstractBTreeNode; +begin + if Assigned(FBTreeCache) then begin + LSearch.identify := AIdentify; + if FBTreeCache.Find(LSearch,LFound) then begin + Result := LFound; + Exit; + end; + end; + LoadNodeHeader(AIdentify,Result,LChildsCount,LChildsPosition); + if LChildsCount>0 then begin + SetLength(Result.childs,LChildsCount); + if (LChildsCount>MaxChildrenPerNode) then raise EAbstractMemBTree.Create(Format('Childrens in node %d out of range [0..%d]',[LChildsCount,MaxChildrenPerNode])); + SetLength(LBuff,(MaxChildrenPerNode*FAbstractMem.SizeOfAbstractMemPosition)); + FAbstractMem.Read(LChildsPosition,LBuff[0],Length(LBuff)); + for i := 0 to LChildsCount-1 do begin + Move(LBuff[i*FAbstractMem.SizeOfAbstractMemPosition],Result.childs[i],FAbstractMem.SizeOfAbstractMemPosition); + end; + end; + if ((Result.Count=0) and (Result.parent=0) and (LChildsCount=0)) then begin + // root without data + end else begin + if (Result.parent=0) then begin + if ((Result.Count<1) or (Result.Count>MaxItemsPerNode)) then + raise EAbstractMemBTree.Create(Format('Root Node items %d not in range [%d..%d]',[Result.Count,MinItemsPerNode,MaxItemsPerNode])); + end else begin + if ((Result.CountMaxItemsPerNode)) then + raise EAbstractMemBTree.Create(Format('Node items %d not in range [%d..%d]',[Result.Count,MinItemsPerNode,MaxItemsPerNode])); + end; + if ((LChildsCount<>0) and (LChildsCount<>(Result.Count+1))) then + raise EAbstractMemBTree.Create(Format('Node childrens %d not %d+1 in range [%d..%d]',[LChildsCount,Result.Count,MinChildrenPerNode,MaxChildrenPerNode])); + end; + if Assigned(FBTreeCache) then begin + FBTreeCache.Add(Result); + end; +end; + +function TAbstractMemBTree.GetNodeHeaderSize: Integer; +begin + Result := ((FAbstractMem.SizeOfAbstractMemPosition*2)+4) + (FAbstractMem.SizeOfAbstractMemPosition*MaxItemsPerNode); +end; + +function TAbstractMemBTree.GetNullData: TAbstractMemPosition; +begin + Result := 0; +end; + +function TAbstractMemBTree.GetRoot: TAbstractBTree.TAbstractBTreeNode; +begin + if FrootPosition>0 then begin + Result := GetNode(FrootPosition); + end else ClearNode(Result); +end; + +function TAbstractMemBTree.IsNil(const AIdentify: TAbstractMemPosition): Boolean; +begin + Result := AIdentify=0; +end; + +procedure TAbstractMemBTree.LoadNodeHeader( + const APosition : TAbstractMemPosition; var ANode : TAbstractBTree.TAbstractBTreeNode; var AChildsCount : Integer; var AChildsPosition : TAbstractMemPosition); +var LBuff : TBytes; + i, LItemsCount : Integer; +begin + // Node is stored in zone 2 positions: + // + // In 32 bits + // Zone 1: Header + // Size = (4+2+2+4) + (4*MaxItemsPerNode) + // 4 Bytes [0..3] : Parent + // 1 Byte [4] : Used items (0..255) + // 1 Byte [5] : Used childs (0 (leaf) or Used Items+1) + // 2 Bytes [6..7] : 0 (unusued) + // 4 Bytes [8..11]: Zone 2 position ( If is a leaf must be 0 ) + // For each item: + // 4 Bytes : data (AbstractMemPosition or Data using 4 bytes) + // + // Zone 2: OPTIONAL Only if NOT a leaf + // For each children: + // 4 Bytes : Children AbstractMem position + // + // In 64 bits + // Same but using 8 bytes (instead of 4) for position + // Size = (8+2+2+8) + (8*MaxItemsPerNode) + // + // Use FAbstractMem.SizeOfAbstractMemPosition (will return 4 or 8) + // Size = ((FAbstractMem.SizeOfAbstractMemPosition*2)+4) + (FAbstractMem.SizeOfAbstractMemPosition*MaxItemsPerNode) + // + SetLength(LBuff,GetNodeHeaderSize); + + FAbstractMem.Read(APosition,LBuff[0],Length(LBuff)); + ClearNode(ANode); + LItemsCount := 0; + AChildsCount := 0; + AChildsPosition := 0; + ANode.identify := APosition; + Move(LBuff[0],ANode.parent , FAbstractMem.SizeOfAbstractMemPosition); + Move(LBuff[FAbstractMem.SizeOfAbstractMemPosition],LItemsCount,1); + Move(LBuff[FAbstractMem.SizeOfAbstractMemPosition+1],AChildsCount,1); + Move(LBuff[FAbstractMem.SizeOfAbstractMemPosition+4],AChildsPosition,FAbstractMem.SizeOfAbstractMemPosition); + SetLength(ANode.data,LItemsCount); + for i := 0 to LItemsCount-1 do begin + Move(LBuff[(FAbstractMem.SizeOfAbstractMemPosition*2)+4 + (i*FAbstractMem.SizeOfAbstractMemPosition)], + ANode.data[i], FAbstractMem.SizeOfAbstractMemPosition); + end; +end; + +class function TAbstractMemBTree.MinAbstractMemInitialPositionSize(AAbstractMem : TAbstractMem) : Integer; +begin + Result := (AAbstractMem.SizeOfAbstractMemPosition) + 12 ; +end; + +function TAbstractMemBTree.NewNode: TAbstractBTree.TAbstractBTreeNode; +begin + CheckInitialized; + ClearNode(Result); + Result.identify := FAbstractMem.New( GetNodeHeaderSize ).position; + SaveNodeHeader(Result,0); +end; + +function TAbstractMemBTree.NodeDataToString(const AData: TAbstractMemPosition): String; +begin + Result := '0x'+AData.ToHexString; +end; + +function TAbstractMemBTree.NodeIdentifyToString( + const AIdentify: TAbstractMemPosition): String; +begin + Result := '0x'+AIdentify.ToHexString; +end; + +function TAbstractMemBTree.OnGetCopyDataMethod( + const AData: TAbstractBTree.TAbstractBTreeNode): TAbstractBTree.TAbstractBTreeNode; +begin + Result.identify := AData.identify; + Result.parent := AData.parent; + Result.data := Copy(AData.data); + Result.childs := Copy(AData.childs); +end; + +procedure TAbstractMemBTree.SaveHeader; +var LBuff : TBytes; + i : Integer; + LOrder : Integer; +begin + CheckInitialized; + SetLength(LBuff,MinAbstractMemInitialPositionSize(FAbstractMem)); + for i := 0 to CT_AbstractMemBTree_Magic.Length-1 do begin + LBuff[i] := Byte(Ord(CT_AbstractMemBTree_Magic.Chars[i])); + end; + Move(FrootPosition,LBuff[4],FAbstractMem.SizeOfAbstractMemPosition); + Move(FCount,LBuff[4+FAbstractMem.SizeOfAbstractMemPosition],4); + LOrder := Order; + Move(LOrder,LBuff[8+FAbstractMem.SizeOfAbstractMemPosition],4); + FAbstractMem.Write(FInitialZone.position,LBuff[0],Length(LBuff)); +end; + +procedure TAbstractMemBTree.SaveNode(var ANode: TAbstractBTree.TAbstractBTreeNode); +var LBuff : TBytes; + i, LChildsCount : Integer; + LOld : TAbstractBTree.TAbstractBTreeNode; + LChildsPosition : TAbstractMemPosition; + LZone : TAMZone; +begin + CheckInitialized; + if Assigned(FBTreeCache) then begin + FBTreeCache.Remove(ANode); + end; + if ((ANode.Count)>MaxItemsPerNode) or (Length(ANode.childs)>MaxChildrenPerNode) then begin + // Protection against saving temporal Node info with extra datas or childs + Exit; + end; + LoadNodeHeader(ANode.identify,LOld,LChildsCount,LChildsPosition); + // + if (LChildsCount>0) And (ANode.IsLeaf) then begin + // Node wasn't a leaf previously + Assert(LChildsPosition<>0,'Old childs position<>0'); + FAbstractMem.Dispose(LChildsPosition); + LChildsPosition := 0; + end else if (LChildsCount=0) And (Not ANode.IsLeaf) then begin + // Node was a leaf previously, now not + LZone := FAbstractMem.New( MaxChildrenPerNode * FAbstractMem.SizeOfAbstractMemPosition ); + LChildsPosition := LZone.position; + end; + LChildsCount := Length(ANode.childs); + // + SaveNodeHeader(ANode,LChildsPosition); + // + if LChildsCount>0 then begin + SetLength(LBuff, MaxChildrenPerNode * FAbstractMem.SizeOfAbstractMemPosition ); + FillChar(LBuff[0],Length(LBuff),0); + for i := 0 to LChildsCount-1 do begin + Move(ANode.childs[i],LBuff[i*FAbstractMem.SizeOfAbstractMemPosition],FAbstractMem.SizeOfAbstractMemPosition); + end; + FAbstractMem.Write(LChildsPosition,LBuff[0],LChildsCount*FAbstractMem.SizeOfAbstractMemPosition); + end; + if Assigned(FBTreeCache) then begin + FBTreeCache.Add(ANode); + end; +end; + +procedure TAbstractMemBTree.SaveNodeHeader( + const ANode: TAbstractBTree.TAbstractBTreeNode; const AChildsPosition : TAbstractMemPosition); +var LBuff : TBytes; + i, LItemsCount, LChildsCount: Integer; +begin + SetLength(LBuff, GetNodeHeaderSize ); + + FillChar(LBuff[0],Length(LBuff),0); + Move(ANode.parent,LBuff[0],FAbstractMem.SizeOfAbstractMemPosition); + LItemsCount := ANode.Count; + Move(LItemsCount,LBuff[FAbstractMem.SizeOfAbstractMemPosition],1); + LChildsCount := Length(ANode.childs); + Move(LChildsCount,LBuff[FAbstractMem.SizeOfAbstractMemPosition+1],1); + Move(AChildsPosition,LBuff[FAbstractMem.SizeOfAbstractMemPosition+4],FAbstractMem.SizeOfAbstractMemPosition); + for i := 0 to LItemsCount-1 do begin + Move(ANode.data[i], LBuff[(FAbstractMem.SizeOfAbstractMemPosition*2)+4 + (i*FAbstractMem.SizeOfAbstractMemPosition)], + FAbstractMem.SizeOfAbstractMemPosition); + end; + FAbstractMem.Write(ANode.identify,LBuff[0],Length(LBuff)); +end; + +procedure TAbstractMemBTree.SetCount(const ANewCount: Integer); +begin + inherited; + SaveHeader; +end; + +procedure TAbstractMemBTree.SetNil(var AIdentify: TAbstractMemPosition); +begin + inherited; + AIdentify := 0; +end; + +procedure TAbstractMemBTree.SetRoot(var Value: TAbstractBTree.TAbstractBTreeNode); +begin + CheckInitialized; + inherited; + FrootPosition := Value.identify; + SaveHeader; +end; + +{ TAbstractMemBTreeDataAbstract } + +procedure TAbstractMemBTreeDataAbstract.Add; +begin + raise EAbstractMemBTree.Create('Invalid use of Abstract function '+ClassName+'.Add'); +end; + +function TAbstractMemBTreeDataAbstract.AddInherited( + const AAbstractMemPosition: TAbstractMemPosition): Boolean; +begin + Result := inherited Add(AAbstractMemPosition); +end; + +constructor TAbstractMemBTreeDataAbstract.Create( + AAbstractMem: TAbstractMem; const AInitialZone: TAMZone; + AAllowDuplicates: Boolean; AOrder: Integer; + const AOnCompareAbstractMemDataMethod: TComparison); +begin + inherited Create(AAbstractMem,AInitialZone,AAllowDuplicates,AOrder); + FOnCompareAbstractMemData := AOnCompareAbstractMemDataMethod; + FLeft_Pos := 0; + FRight_Pos := 0; +end; + +procedure TAbstractMemBTreeDataAbstract.Delete; +begin + raise EAbstractMemBTree.Create('Invalid use of Abstract function '+ClassName+'.Delete'); +end; + +function TAbstractMemBTreeDataAbstract.DeleteInherited( + const AAbstractMemPosition: TAbstractMemPosition): Boolean; +begin + Result := Inherited Delete(AAbstractMemPosition); +end; + +destructor TAbstractMemBTreeDataAbstract.Destroy; +begin + inherited; +end; + +function TAbstractMemBTreeDataAbstract.DoCompareData(const ALefTBTreeData, + ARighTBTreeData: TAbstractMemPosition): Integer; +var Ltmp : TBTreeData; +begin + Assert((ALefTBTreeData<>0) and (ARighTBTreeData<>0) and (ARighTBTreeData<>1),Format('DoCompareData: Invalid Left %d or Right %d (data cannot be 0 neither 1)',[ALefTBTreeData,ARighTBTreeData])); + if (ALefTBTreeData=ARighTBTreeData) then begin + // Comparing same data because stored on same position + Exit(0); + end; + Assert(ALefTBTreeData<>ARighTBTreeData,Format('DoCompareData: Left (%d) and Right (%d) are equals',[ALefTBTreeData,ARighTBTreeData])); + if (ALefTBTreeData=1) then begin + if (FRight_Pos=0) or (FRight_Pos<>ARighTBTreeData) then begin + if (FLeft_Pos=ARighTBTreeData) then begin + Result := FOnCompareAbstractMemData(FSearchTarget,FLeft_Data); + Exit; + end; + FRight_Pos := ARighTBTreeData; + FRight_Data := GetData(ARighTBTreeData); + end; + Result := FOnCompareAbstractMemData(FSearchTarget,FRight_Data); + end else begin + if (FLeft_Pos=0) or (FLeft_Pos<>ALefTBTreeData) then begin + if (FRight_Pos=ALefTBTreeData) then begin + // Use right as left + if (FLeft_Pos<>ARighTBTreeData) then begin + // Left is not right, reload + FLeft_Pos := ARighTBTreeData; + FLeft_Data := GetData(ARighTBTreeData); + end; + Result := FOnCompareAbstractMemData(FRight_Data,FLeft_Data); + Exit; + end; + FLeft_Pos := ALefTBTreeData; + FLeft_Data := GetData(ALefTBTreeData); + end; + if (FRight_Pos=0) or (FRight_Pos<>ARighTBTreeData) then begin + FRight_Pos := ARighTBTreeData; + FRight_data := GetData(ARighTBTreeData); + end; + Result := FOnCompareAbstractMemData(FLeft_data,FRight_data); + end; +end; + +procedure TAbstractMemBTreeDataAbstract.DoOnFindProcessEnd; +begin + inherited; + FLeft_Pos := 0; + FRight_Pos := 0; +end; + +procedure TAbstractMemBTreeDataAbstract.DoOnFindProcessStart; +begin + inherited; + FLeft_Pos := 0; + FRight_Pos := 0; +end; + +function TAbstractMemBTreeDataAbstract.FindData(const AData: TBTreeData; + out ADataEqualOrPrecessorFound : TAbstractMemPosition; var AFoundData : TBTreeData): Boolean; +begin + if FindDataPos(AData,ADataEqualOrPrecessorFound) then begin + Result := True; + AFoundData := GetData(ADataEqualOrPrecessorFound); + end else begin + if IsNil(ADataEqualOrPrecessorFound) then FindDataLowest(AFoundData) + else AFoundData := GetData(ADataEqualOrPrecessorFound); + Result := False; + end; +end; + +function TAbstractMemBTreeDataAbstract.FindData( + const AData: TBTreeData; var AFoundData: TBTreeData): Boolean; +var LPos : TAbstractMemPosition; +begin + Result := FindData(AData,LPos,AFoundData); +end; + +function TAbstractMemBTreeDataAbstract.FindDataHighest( + out AHighest: TBTreeData): Boolean; +var Lpos : TAbstractMemPosition; +begin + if FindHighest(Lpos) then begin + Result := True; + AHighest := GetData(Lpos); + end else Result := False; +end; + +function TAbstractMemBTreeDataAbstract.FindDataLowest( + out ALowest: TBTreeData): Boolean; +var Lpos : TAbstractMemPosition; +begin + if FindLowest(Lpos) then begin + Result := True; + ALowest := GetData(Lpos); + end else Result := False; +end; + +function TAbstractMemBTreeDataAbstract.FindDataPos( + const AData: TBTreeData; out ADataEqualOrPrecessorFound : TAbstractMemPosition): Boolean; +var LNode: TAbstractBTree.TAbstractBTreeNode; + iPos : Integer; +begin + Result := FindDataPos(AData,ADataEqualOrPrecessorFound,LNode,iPos); +end; + +function TAbstractMemBTreeDataAbstract.FindDataPos( + const AData: TBTreeData; out ADataEqualOrPrecessorFound: TAbstractMemPosition; + out ANode: TAbstractBTree.TAbstractBTreeNode; + out iPos: Integer): Boolean; +begin + Lock; + try + FSearchTarget := AData; + Result := FindExt(1,ADataEqualOrPrecessorFound,ANode,iPos); + finally + Unlock; + end; +end; + +function TAbstractMemBTreeDataAbstract.FindDataPrecessor( + const AData: TBTreeData; var APrecessor: TBTreeData): Boolean; +var Lnode : TAbstractBTree.TAbstractBTreeNode; + LiPosNode : Integer; + Lpos : TAbstractMemPosition; +begin + Lock; + try + FSearchTarget := AData; + if inherited Find(1,Lnode,LiPosNode) then begin + if FindPrecessor(Lnode.data[LiPosNode],Lpos) then begin + Result := True; + APrecessor := GetData(Lpos); + end else Result := False; + end else Result := False; + finally + Unlock; + end; +end; + +function TAbstractMemBTreeDataAbstract.FindDataSuccessor( + const AData: TBTreeData; var ASuccessor: TBTreeData): Boolean; +var Lnode : TAbstractBTree.TAbstractBTreeNode; + LiPosNode : Integer; + Lpos : TAbstractMemPosition; +begin + Lock; + try + FSearchTarget := AData; + if inherited Find(1,Lnode,LiPosNode) then begin + if FindSuccessor(Lnode.data[LiPosNode],Lpos) then begin + Result := True; + ASuccessor := GetData(Lpos); + end else Result := False; + end else Result := False; + finally + Unlock; + end; +end; + +function TAbstractMemBTreeDataAbstract.GetCopyOfData(const AData: TBTreeData): TBTreeData; +begin + Result := AData; +end; + +function TAbstractMemBTreeDataAbstract.GetData(const APosition: TAbstractMemPosition): TBTreeData; +begin + Result := GetCopyOfData(LoadData(APosition)); +end; + +{ TAbstractMemBTreeData } + +function TAbstractMemBTreeData.AddData(const AData: TBTreeData): Boolean; +var Lzone : TAMZone; + i : Integer; + LIndexPosition : TAbstractMemPosition; + LBTreeIndex : TAbstractMemBTreeDataIndex; + LCache : TAVLABTreeDataCacheData; +begin + Lock; + Try + Result := True; + i := 0; + while (Result) and (i(FIndexes.Items[i]); + if (Not LBTreeIndex.AllowDuplicates) then begin + Result := Not LBTreeIndex.FindDataPos(AData,LIndexPosition); + end; + inc(i); + end; + if Result then begin + Lzone := SaveData(AData); + Try + Result := AddInherited(Lzone.position); + if Result then begin + for i := 0 to FIndexes.Count-1 do begin + LBTreeIndex := TAbstractMemBTreeDataIndex(FIndexes.Items[i]); + Try + LBTreeIndex.FCompareModeInsertingOrDeleting := True; + if Not LBTreeIndex.AddInherited(LZone.position) then begin + raise EAbstractMemBTree.Create(Format('Fatal error adding index %d/%d with data at %s', + [i+1,FIndexes.Count,Lzone.ToString])); + end; + Finally + LBTreeIndex.FCompareModeInsertingOrDeleting := False; + End; + end; + end; + Finally + if Not Result then begin + // Dispose + FAbstractMem.Dispose(Lzone); + If Assigned(FBTreeDataCache) then begin + LCache.position := Lzone.position; + FBTreeDataCache.Remove(LCache); + end; + end; + End; + end; + Finally + Unlock; + End; +end; + +function TAbstractMemBTreeData.CacheCompareBTreeData( + const ALeft, ARight: TAVLCache.PAVLCacheMemData): Integer; +begin + if ALeft.data.positionARight.data.position then Result := 1 + else Result := 0; +end; + +function TAbstractMemBTreeData.CanAddData( + const AData: TBTreeData): Boolean; +var i : Integer; + LIndexPosition : TAbstractMemPosition; + LBTreeIndex : TAbstractMemBTreeDataIndex; +begin + // Check in indexes + Result := True; + i := 0; + while (Result) and (i(FIndexes.Items[i]); + if (Not LBTreeIndex.AllowDuplicates) then begin + Result := Not (LBTreeIndex.FindDataPos(AData,LIndexPosition)); + end; + inc(i); + end; + if (Result) And (Not AllowDuplicates) then begin + Result := Not FindDataPos(AData,LIndexPosition); + end; +end; + +procedure TAbstractMemBTreeData.CheckConsistency; +var i, nCount : Integer; + LBTreeIndex : TAbstractMemBTreeDataIndex; + LSearch,LFound : TBTreeData; +begin + inherited; + nCount := 0; + if FindDataLowest(LFound) then begin + inc(nCount); + for i := 0 to FIndexes.Count-1 do begin + LBTreeIndex := TAbstractMemBTreeDataIndex(FIndexes.Items[i]); + if Not LBTreeIndex.FindData(LFound,LSearch) then raise EAbstractMemBTree.Create(Format('Consistency error data %d not found on index %d/%d',[nCount, i+1,FIndexes.Count])); + end; + while FindDataSuccessor(LSearch,LFound) do begin + inc(nCount); + for i := 0 to FIndexes.Count-1 do begin + LBTreeIndex := TAbstractMemBTreeDataIndex(FIndexes.Items[i]); + if Not LBTreeIndex.FindData(LFound,LSearch) then raise EAbstractMemBTree.Create(Format('Consistency error data %d not found on index %d/%d',[nCount, i+1,FIndexes.Count])); + end; + end; + end; + for i := 0 to FIndexes.Count-1 do begin + LBTreeIndex := TAbstractMemBTreeDataIndex(FIndexes.Items[i]); + if (LBTreeIndex.Count > Self.Count) then raise EAbstractMemBTree.Create(Format('Consistency error on index %d/%d count %d > %d',[i+1,FIndexes.Count,LBTreeIndex.Count,Self.Count])); + LBTreeIndex.CheckConsistency; + end; +end; + +constructor TAbstractMemBTreeData.Create(AAbstractMem: TAbstractMem; + const AInitialZone: TAMZone; AAllowDuplicates: Boolean; AOrder: Integer; + const AOnCompareAbstractMemDataMethod: TComparison); +begin + {$IFDEF FPC} + FIndexes := TList< TObject >.Create; + {$ELSE} + FIndexes := TList< TAbstractMemBTreeDataIndex >.Create; + {$ENDIF} + inherited Create(AAbstractMem,AInitialZone,AAllowDuplicates,AOrder,AOnCompareAbstractMemDataMethod); + {$IFDEF FPC} + // Ref: 20211126-1 -- TODO + // FPC (Tested on 3.2.0) does not allow use "CacheCompareBTreeData" for problems withs generics... + // Nedd to deeply search why or to test on futures releases... + FBTreeDataCache := Nil; + {$ELSE} + FBTreeDataCache := TAVLABTreeDataCache.Create(100000,CacheCompareBTreeData); + {$ENDIF} +end; + +function TAbstractMemBTreeData.DeleteData(const AData: TBTreeData): Boolean; +var LAbstractMemPos, LindexPosition : TAbstractMemPosition; + i : Integer; + LBTreeIndex : TAbstractMemBTreeDataIndex; + LCache : TAVLABTreeDataCacheData; +begin + Lock; + Try + if FindDataPos(AData,LAbstractMemPos) then begin + // Delete from indexes + for i := 0 to FIndexes.Count-1 do begin + LBTreeIndex := TAbstractMemBTreeDataIndex(FIndexes.Items[i]); + try + LBTreeIndex.FCompareModeInsertingOrDeleting := True; + if Not LBTreeIndex.FindExt(LAbstractMemPos,LIndexPosition) then begin + // Fatal error. Not found + raise EAbstractMemBTree.Create(Format('Fatal error Data not found in index %d/%d to Delete from pos 0x%s',[i+1,Findexes.Count,LAbstractMemPos.ToHexString])); + end; + if not LBTreeIndex.DeleteInherited(LindexPosition) then begin + raise EAbstractMemBTree.Create(Format('Fatal error Data not deleted in index %d/%d from pos 0x%s at pos 0x%s',[i+1,Findexes.Count,LAbstractMemPos.ToHexString,LindexPosition.ToHexString])); + end; + finally + LBTreeIndex.FCompareModeInsertingOrDeleting := False; + end; + end; + // + DeleteInherited(LAbstractMemPos); + FAbstractMem.Dispose(LAbstractMemPos); + Result := True; + if FLeft_Pos=LAbstractMemPos then FLeft_Pos := 0; + if FRight_Pos=LAbstractMemPos then FRight_Pos := 0; + // + If Assigned(FBTreeDataCache) then begin + LCache.position := LAbstractMemPos; + FBTreeDataCache.Remove(LCache); + end; + // + DeletedData(AData); + End else Result := False; + Finally + Unlock; + End; +end; + +procedure TAbstractMemBTreeData.DeletedData( + const AData: TBTreeData); +begin + // +end; + +destructor TAbstractMemBTreeData.Destroy; +var i : Integer; + LBTreeIndex : TAbstractMemBTreeDataIndex; +begin + for i := 0 to FIndexes.Count-1 do begin + LBTreeIndex := TAbstractMemBTreeDataIndex(FIndexes.Items[i]); + LBTreeIndex.FIndexed := Nil; + end; + FreeAndNil(Findexes); + FreeAndNil(FBTreeDataCache); + inherited; +end; + +procedure TAbstractMemBTreeData.DisposeData( + var AData: TAbstractMemPosition); +begin + inherited; + // Will be called on EraseTreeEx + FAbstractMem.Dispose(AData); +end; + +function TAbstractMemBTreeData.GetData( + const APosition: TAbstractMemPosition): TBTreeData; +var LSearch,LFound : TAVLABTreeDataCacheData; +begin + if (Assigned(FBTreeDataCache)) then begin + LSearch.position := APosition; + if FBTreeDataCache.Find(LSearch,LFound) then begin + Result := GetCopyOfData( LFound.data ); + end else begin + LSearch.data := LoadData(APosition); + FBTreeDataCache.Add(LSearch); + Result := GetCopyOfData( LSearch.data ); + end; + end else begin + Result := inherited GetData(APosition); + end; +end; + +{$IFDEF FPC} +function TAbstractMemBTreeData.GetIndex(AIndex: Integer): TObject; +begin + Result := FIndexes.Items[AIndex]; +end; +{$ELSE} +function TAbstractMemBTreeData.GetIndex( + AIndex: Integer): TAbstractMemBTreeDataIndex; +begin + Result := FIndexes.Items[AIndex]; +end; +{$ENDIF} + +function TAbstractMemBTreeData.IndexesCount: Integer; +begin + Result := FIndexes.Count; +end; + +{ TAbstractMemBTreeDataIndex } + +procedure TAbstractMemBTreeDataIndex.CheckConsistency; +var i, nCount : Integer; + APreviousData, ACurrentData : TBTreeData; +begin + inherited; + nCount := 0; + if FindDataLowest(APreviousData) then begin + nCount := 1; + while FindDataSuccessor(APreviousData,ACurrentData) do begin + inc(nCount); + i := FOnCompareAbstractMemData(APreviousData,ACurrentData); + if ((Not AllowDuplicates) and (i>=0)) or (i>=0) then raise EAbstractMemBTree.Create(Format('Invalid consistency on Index comparing pos %d and %d result %d',[nCount-1,nCount,i])); + APreviousData := ACurrentData; + end; + end; +end; + +constructor TAbstractMemBTreeDataIndex.Create( + AAbstractMemBTreeData: TAbstractMemBTreeData; + AInitialZone: TAMZone; + AAllowDuplicates: Boolean; AOrder: Integer; + const AOnCompareAbstractMemDataMethod: TComparison); +begin + FIndexed := AAbstractMemBTreeData; + FIndexed.FIndexes.Add(Self); + FOnCompareAbstractMemData := AOnCompareAbstractMemDataMethod; + FCompareModeInsertingOrDeleting := False; + inherited Create(FIndexed.FAbstractMem,AInitialZone,AAllowDuplicates,AOrder,AOnCompareAbstractMemDataMethod); +end; + +destructor TAbstractMemBTreeDataIndex.Destroy; +begin + if Assigned(FIndexed) then begin + FIndexed.FIndexes.Remove(Self); + end; + inherited; +end; + +function TAbstractMemBTreeDataIndex.DoCompareData( + const ALefTBTreeData, ARighTBTreeData: TAbstractMemPosition): Integer; +begin + Result := inherited DoCompareData(ALeftBTreeData,ARightBTreeData); + if (FCompareModeInsertingOrDeleting) and (Result=0) then begin + if ALefTBTreeDataARighTBTreeData then Result := 1 + else Result := 0; + end; +end; + +function TAbstractMemBTreeDataIndex.LoadData(const APosition: TAbstractMemPosition): TBTreeData; +begin + Result := FIndexed.GetData(APosition); +end; + +procedure TAbstractMemBTreeDataIndex.Lock; +begin + FIndexed.Lock; + Try + inherited; + Except + FIndexed.Unlock; + raise; + End; +end; + +function TAbstractMemBTreeDataIndex.SaveData(const AData: TBTreeData): TAMZone; +begin + // This is an index, never suposed to be called this function + raise EAbstractMemBTree.Create('ERROR DEV 20211130-01'); +end; + +procedure TAbstractMemBTreeDataIndex.Unlock; +begin + inherited; + FIndexed.Unlock; +end; + +{ TAbstractMemBTreeData.TAVLABTreeDataCache } + +function TAbstractMemBTreeData.TAVLABTreeDataCache.ToString( + const AData: TAVLABTreeDataCacheData): String; +begin + inherited; + Result := Format('p:%d sizeof:%d',[AData.position,SizeOf(AData.data)]); +end; + +initialization + +finalization + +end. diff --git a/src/libraries/abstractmem/UAbstractMemTList.pas b/src/libraries/abstractmem/UAbstractMemTList.pas index b68a8d2b6..17b8e8fe6 100644 --- a/src/libraries/abstractmem/UAbstractMemTList.pas +++ b/src/libraries/abstractmem/UAbstractMemTList.pas @@ -3,7 +3,7 @@ { This file is part of AbstractMem framework - Copyright (C) 2020 Albert Molina - bpascalblockchain@gmail.com + Copyright (C) 2020-2021 Albert Molina - bpascalblockchain@gmail.com https://github.com/PascalCoinDev/ @@ -40,7 +40,8 @@ interface // Current version 3.0.4 does not contain valid support for Generics, using Generics from this: // https://github.com/PascalCoinDev/PascalCoin/tree/master/src/libraries/generics.collections // (Download and set folder as a "units include folder" in compiler options) - {$IFNDEF FPC}System.Generics.Collections,System.Generics.Defaults{$ELSE}Generics.Collections,Generics.Defaults{$ENDIF}; + {$IFNDEF FPC}System.Generics.Collections,System.Generics.Defaults{$ELSE}Generics.Collections,Generics.Defaults{$ENDIF}, + UOrderedList; {$I ./ConfigAbstractMem.inc } @@ -54,38 +55,41 @@ interface FElementsOfEachBlock : Integer; FFirstBlockPointer : TAbstractMemPosition; - FNextElementPosition : Integer; + FNextElementIndex : Integer; FUseCache : Boolean; + FUseCacheAuto : Boolean; FCacheData : TBytes; FCacheUpdated : Boolean; + FCacheDataLoaded : Boolean; + FCacheDataUsedBytes : Integer; function GetPosition(AIndex: Integer): TAbstractMemPosition; procedure SetPosition(AIndex: Integer; const Value: TAbstractMemPosition); + function UseCacheData(AWillUpdateData : Boolean) : Boolean; Procedure CheckInitialized; procedure GetPointerTo(AIndex : Integer; AAllowIncrease : Boolean; out APreviousBlockPointer, ABlockPointer : TAbstractMemPosition; out AIndexInBlock : Integer); procedure AddRange(AIndexStart, AInsertCount : Integer); procedure RemoveRange(AIndexStart, ARemoveCount : Integer); procedure LoadElements(AIndexStart : Integer; var AElements : TBytes); procedure SetUseCache(const Value: Boolean); + procedure Initialize(const AInitialZone : TAMZone; ADefaultElementsPerBlock : Integer); protected FAbstractMemTListLock : TCriticalSection; public - Constructor Create(AAbstractMem : TAbstractMem; const AInitialZone : TAMZone; ADefaultElementsPerBlock : Integer); virtual; + Constructor Create(AAbstractMem : TAbstractMem; const AInitialZone : TAMZone; ADefaultElementsPerBlock : Integer; AUseCache : Boolean); virtual; destructor Destroy; override; procedure FlushCache; - procedure Initialize(const AInitialZone : TAMZone; ADefaultElementsPerBlock : Integer); - - Function Add(const APosition : TAbstractMemPosition) : Integer; //virtual; + Function Add(const APosition : TAbstractMemPosition) : Integer; - Procedure Clear; //virtual; + Procedure Clear; Procedure Dispose; - Procedure Delete(index : Integer); //virtual; - Procedure Insert(AIndex : Integer; const APosition : TAbstractMemPosition); //virtual; + Procedure Delete(index : Integer); + Procedure Insert(AIndex : Integer; const APosition : TAbstractMemPosition); property Position[AIndex : Integer] : TAbstractMemPosition read GetPosition write SetPosition; @@ -93,14 +97,18 @@ interface property AbstractMem : TAbstractMem read FAbstractMem; property InitialiZone : TAMZone read FInitialZone; property UseCache : Boolean read FUseCache write SetUseCache; + property UseCacheAuto : Boolean read FUseCacheAuto write FUseCacheAuto; procedure LockList; procedure UnlockList; + class function MinAbstractMemTListHeaderSize(AAbstractMem : TAbstractMem) : Integer; End; TAbstractMemTListBaseAbstract = Class private FAbstractMem: TAbstractMem; function GetInitialZone: TAMZone; + function GetUseCache : Boolean; + procedure SetUseCache(const Value: Boolean); protected FList : TAbstractMemTList; // POSSIBLE OVERRIDE METHODS @@ -111,7 +119,7 @@ interface procedure LoadFrom(const ABytes : TBytes; var AItem : T); virtual; abstract; procedure SaveTo(const AItem : T; AIsAddingItem : Boolean; var ABytes : TBytes); virtual; abstract; public - Constructor Create(AAbstractMem : TAbstractMem; const AInitialZone : TAMZone; ADefaultElementsPerBlock : Integer); virtual; + Constructor Create(AAbstractMem : TAbstractMem; const AInitialZone : TAMZone; ADefaultElementsPerBlock : Integer; AUseCache : Boolean); virtual; Destructor Destroy; override; Function Add(const AItem : T) : Integer; virtual; @@ -124,6 +132,7 @@ interface Procedure Dispose; property AbstractMem : TAbstractMem read FAbstractMem; property InitialiZone : TAMZone read GetInitialZone; + property UseCache : Boolean read GetUseCache write SetUseCache; End; @@ -141,7 +150,7 @@ interface // ABSTRACT METHODS NEED TO OVERRIDE function Compare(const ALeft, ARight : T) : Integer; virtual; abstract; public - Constructor Create(AAbstractMem : TAbstractMem; const AInitialZone : TAMZone; ADefaultElementsPerBlock : Integer; AAllowDuplicates : Boolean); reintroduce; + Constructor Create(AAbstractMem : TAbstractMem; const AInitialZone : TAMZone; ADefaultElementsPerBlock : Integer; AAllowDuplicates, AUseCache : Boolean); reintroduce; function Find(const AItemToFind : T; out AIndex : Integer) : Boolean; Function Add(const AItem : T) : Integer; reintroduce; property Item[index : Integer] : T read GetItem; @@ -150,13 +159,6 @@ interface function Get(index : Integer) : T; End; -const - CT_AbstractMemTList_HeaderSize = 16; - // [0] 4 for magic - // [4] 4 for elements of each block - // [8] 4 for next element (counter) - // [12] 4 for first block position - implementation { TAbstractMemTList } @@ -168,8 +170,8 @@ function TAbstractMemTList.Add(const APosition: TAbstractMemPosition): Integer; begin FAbstractMemTListLock.Acquire; Try - Result := FNextElementPosition; - Insert(FNextElementPosition,APosition); + Result := FNextElementIndex; + Insert(FNextElementIndex,APosition); Finally FAbstractMemTListLock.Release; End; @@ -181,12 +183,20 @@ procedure TAbstractMemTList.AddRange(AIndexStart, AInsertCount: Integer); LIndexInBlock, i, j, n : Integer; begin CheckInitialized; - if (AIndexStart<0) or (AInsertCount<=0) or (AIndexStart>FNextElementPosition) then raise EAbstractMemTList.Create(Format('%s AddRange %d..%d out of range 0..%d',[ClassName,AIndexStart,AIndexStart+AInsertCount,FNextElementPosition-1])); - if (FUseCache) then begin + if (AIndexStart<0) or (AInsertCount<=0) or (AIndexStart>FNextElementIndex) then raise EAbstractMemTList.Create(Format('%s AddRange %d..%d out of range 0..%d',[ClassName,AIndexStart,AIndexStart+AInsertCount,FNextElementIndex-1])); + if (UseCacheData(True)) then begin + if (Length(FCacheData)-FCacheDataUsedBytes)< (AInsertCount*FAbstractMem.SizeOfAbstractMemPosition) then begin + // Increase + if (FElementsOfEachBlock>AInsertCount) then i := FElementsOfEachBlock + else i := AInsertCount; + SetLength(FCacheData,Length(FCacheData) + (i * FAbstractMem.SizeOfAbstractMemPosition)); + end; FCacheUpdated := True; - SetLength(FCacheData,Length(FCacheData)+(AInsertCount*4)); - Move(FCacheData[AIndexStart*4],FCacheData[(AIndexStart+AInsertCount)*4],Length(FCacheData)-((AIndexStart+AInsertCount)*4)); - Inc(FNextElementPosition,AInsertCount); + Inc(FCacheDataUsedBytes,(AInsertCount*FAbstractMem.SizeOfAbstractMemPosition)); + Move(FCacheData[AIndexStart*FAbstractMem.SizeOfAbstractMemPosition], + FCacheData[(AIndexStart+AInsertCount)*FAbstractMem.SizeOfAbstractMemPosition], + FCacheDataUsedBytes-((AIndexStart+AInsertCount)*FAbstractMem.SizeOfAbstractMemPosition)); + Inc(FNextElementIndex,AInsertCount); Exit; end; // @@ -199,13 +209,14 @@ procedure TAbstractMemTList.AddRange(AIndexStart, AInsertCount: Integer); GetPointerTo(i,True,LPreviousBlockPointer,LBlockPointer,LIndexInBlock); // Move from LIndexInBlock to FElementsOfEachBlock-1 in this block j := FElementsOfEachBlock - (LIndexInBlock); // j = Elements to move right on this block - if ((n+j)*4>Length(LElements)) then j := (Length(LElements) DIV 4)-n; - FAbstractMem.Write( LBlockPointer + (LIndexInBlock*4), LElements[ n*4 ], j*4 ); + if ((n+j)*FAbstractMem.SizeOfAbstractMemPosition>Length(LElements)) then j := (Length(LElements) DIV FAbstractMem.SizeOfAbstractMemPosition)-n; + FAbstractMem.Write( LBlockPointer + (LIndexInBlock*FAbstractMem.SizeOfAbstractMemPosition), + LElements[ n*FAbstractMem.SizeOfAbstractMemPosition ], j*FAbstractMem.SizeOfAbstractMemPosition ); inc(n,j); inc(i,j); - until (i >= FNextElementPosition + AInsertCount) or (j=0); - Inc(FNextElementPosition,AInsertCount); - FAbstractMem.Write( FInitialZone.position + 8, FNextElementPosition, 4 ); + until (i >= FNextElementIndex + AInsertCount) or (j=0); + Inc(FNextElementIndex,AInsertCount); + FAbstractMem.Write( FInitialZone.position + 8, FNextElementIndex, 4 ); end; procedure TAbstractMemTList.CheckInitialized; @@ -222,17 +233,18 @@ procedure TAbstractMemTList.Clear; // Free mem LBlockPointer := FFirstBlockPointer; FFirstBlockPointer := 0; - FNextElementPosition := 0; - FAbstractMem.Write( FInitialZone.position + 12, FFirstBlockPointer, 4 ); + FNextElementIndex := 0; + FAbstractMem.Write( FInitialZone.position + 12, FFirstBlockPointer, FAbstractMem.SizeOfAbstractMemPosition ); while (LBlockPointer>0) do begin // Read next - FAbstractMem.Read( LBlockPointer + (FElementsOfEachBlock * 4), LNext, 4); + FAbstractMem.Read( LBlockPointer + (FElementsOfEachBlock * FAbstractMem.SizeOfAbstractMemPosition), LNext, FAbstractMem.SizeOfAbstractMemPosition); FAbstractMem.Dispose(LBlockPointer); LBlockPointer := LNext; end; SetLength(FCacheData,0); FCacheUpdated := False; + FCacheDataUsedBytes := 0; Finally FAbstractMemTListLock.Release; End; @@ -240,21 +252,24 @@ procedure TAbstractMemTList.Clear; function TAbstractMemTList.Count: Integer; begin - Result := FNextElementPosition; + Result := FNextElementIndex; end; -constructor TAbstractMemTList.Create(AAbstractMem: TAbstractMem; const AInitialZone: TAMZone; ADefaultElementsPerBlock : Integer); +constructor TAbstractMemTList.Create(AAbstractMem: TAbstractMem; const AInitialZone: TAMZone; ADefaultElementsPerBlock : Integer; AUseCache : Boolean); begin SetLength(FCacheData,0); - FUseCache := True; + FUseCache := AUseCache; FCacheUpdated := False; + FCacheDataLoaded := False; + FCacheDataUsedBytes := 0; + FUseCacheAuto := True; FAbstractMem := AAbstractMem; FInitialZone.Clear; FElementsOfEachBlock := 0; FFirstBlockPointer := 0; - FNextElementPosition := 0; + FNextElementIndex := 0; FAbstractMemTListLock := TCriticalSection.Create; @@ -305,34 +320,34 @@ procedure TAbstractMemTList.FlushCache; LNext := 0; // Save full: i := 0; - while ((i*4) < (Length(FCacheData))) do begin + while ((i*FAbstractMem.SizeOfAbstractMemPosition) < (FCacheDataUsedBytes)) do begin GetPointerTo(i,True,LPreviousBlockPointer,LBlockPointer,LIndexInBlock); - if (i+FElementsOfEachBlock-1 >= FNextElementPosition) then begin - LElements := FNextElementPosition - i; + if (i+FElementsOfEachBlock-1 >= FNextElementIndex) then begin + LElements := FNextElementIndex - i; end else LElements := FElementsOfEachBlock; - FAbstractMem.Write(LBlockPointer,FCacheData[i*4],(LElements*4)); + FAbstractMem.Write(LBlockPointer,FCacheData[i*FAbstractMem.SizeOfAbstractMemPosition],(LElements*FAbstractMem.SizeOfAbstractMemPosition)); inc(i,LElements); - FAbstractMem.Read( LBlockPointer + (FElementsOfEachBlock * 4), LNext, 4); + FAbstractMem.Read( LBlockPointer + (FElementsOfEachBlock * FAbstractMem.SizeOfAbstractMemPosition), LNext, FAbstractMem.SizeOfAbstractMemPosition); LPreviousBlockPointer := LBlockPointer; end; // Save Header: - FAbstractMem.Write( FInitialZone.position + 8, FNextElementPosition, 4 ); + FAbstractMem.Write( FInitialZone.position + 8, FNextElementIndex, 4 ); // Free unused blocks: - if (FNextElementPosition=0) And (FFirstBlockPointer>0) then begin + if (FNextElementIndex=0) And (FFirstBlockPointer>0) then begin // This is first block pointer LNext := FFirstBlockPointer; FFirstBlockPointer := 0; - FAbstractMem.Write( FInitialZone.position + 12, FFirstBlockPointer, 4 ); + FAbstractMem.Write( FInitialZone.position + 12, FFirstBlockPointer, FAbstractMem.SizeOfAbstractMemPosition ); LPreviousBlockPointer := 0; end; while (LNext>0) do begin if LPreviousBlockPointer>0 then begin LZero := 0; - FAbstractMem.Write( LPreviousBlockPointer + (FElementsOfEachBlock * 4), LZero, 4); + FAbstractMem.Write( LPreviousBlockPointer + (FElementsOfEachBlock * FAbstractMem.SizeOfAbstractMemPosition), LZero, FAbstractMem.SizeOfAbstractMemPosition); end; LPreviousBlockPointer := LBlockPointer; LBlockPointer := LNext; - FAbstractMem.Read( LBlockPointer + (FElementsOfEachBlock * 4), LNext, 4); + FAbstractMem.Read( LBlockPointer + (FElementsOfEachBlock * FAbstractMem.SizeOfAbstractMemPosition), LNext, FAbstractMem.SizeOfAbstractMemPosition); FAbstractMem.Dispose(LBlockPointer); end; // @@ -346,10 +361,10 @@ procedure TAbstractMemTList.GetPointerTo(AIndex: Integer; AAllowIncrease : Boole var LBlockIndex : Integer; i : Integer; LNewBlock : TAMZone; - LZero : Integer; + LZero : TAbstractMemPosition; begin CheckInitialized; - if (AIndex<0) or ((Not AAllowIncrease) And (AIndex>=FNextElementPosition)) then raise EAbstractMemTList.Create(Format('%s index %d out of range 0..%d',[ClassName,AIndex,FNextElementPosition-1])); + if (AIndex<0) or ((Not AAllowIncrease) And (AIndex>=FNextElementIndex)) then raise EAbstractMemTList.Create(Format('%s index %d out of range 0..%d',[ClassName,AIndex,FNextElementIndex-1])); // Search ABlockPointer LBlockIndex := AIndex DIV FElementsOfEachBlock; @@ -361,26 +376,26 @@ procedure TAbstractMemTList.GetPointerTo(AIndex: Integer; AAllowIncrease : Boole repeat if (ABlockPointer<=0) then begin // Create - LNewBlock := FAbstractMem.New( 4 + (FElementsOfEachBlock * 4) ); + LNewBlock := FAbstractMem.New( FAbstractMem.SizeOfAbstractMemPosition + (FElementsOfEachBlock * FAbstractMem.SizeOfAbstractMemPosition) ); ABlockPointer := LNewBlock.position; // Save this pointer if (i=0) then begin // This is FFirstBlockPointer FFirstBlockPointer := LNewBlock.position; // Save header: - FAbstractMem.Write( FInitialZone.position + 12, FFirstBlockPointer, 4 ); + FAbstractMem.Write( FInitialZone.position + 12, FFirstBlockPointer, FAbstractMem.SizeOfAbstractMemPosition ); end else begin // This is previous block - FAbstractMem.Write( APreviousBlockPointer + (FElementsOfEachBlock*4), LNewBlock.position, 4 ); + FAbstractMem.Write( APreviousBlockPointer + (FElementsOfEachBlock*FAbstractMem.SizeOfAbstractMemPosition), LNewBlock.position, FAbstractMem.SizeOfAbstractMemPosition ); end; // Clear next LZero := 0; - FAbstractMem.Write( ABlockPointer + (FElementsOfEachBlock*4), LZero, 4 ); + FAbstractMem.Write( ABlockPointer + (FElementsOfEachBlock*FAbstractMem.SizeOfAbstractMemPosition), LZero, FAbstractMem.SizeOfAbstractMemPosition ); end; if (i LBlockIndex); @@ -393,12 +408,12 @@ function TAbstractMemTList.GetPosition(AIndex: Integer): TAbstractMemPosition; Result := 0; FAbstractMemTListLock.Acquire; try - if FUseCache then begin - if (AIndex<0) or (AIndex>=FNextElementPosition) then raise EAbstractMemTList.Create(Format('%s index %d out of range 0..%d',[ClassName,AIndex,FNextElementPosition-1])); - Move( FCacheData[AIndex*4], Result, 4); + if (UseCacheData(False)) then begin + if (AIndex<0) or (AIndex>=FNextElementIndex) then raise EAbstractMemTList.Create(Format('%s index %d out of range 0..%d',[ClassName,AIndex,FNextElementIndex-1])); + Move( FCacheData[AIndex*FAbstractMem.SizeOfAbstractMemPosition], Result, FAbstractMem.SizeOfAbstractMemPosition); end else begin GetPointerTo(AIndex,False,LPreviousBlockPointer,LBlockPointer,LIndexInBlock); - FAbstractMem.Read( LBlockPointer + (LIndexInBlock*4), Result, 4); + FAbstractMem.Read( LBlockPointer + (LIndexInBlock*FAbstractMem.SizeOfAbstractMemPosition), Result, FAbstractMem.SizeOfAbstractMemPosition); end; finally FAbstractMemTListLock.Release; @@ -413,11 +428,11 @@ procedure TAbstractMemTList.Initialize(const AInitialZone: TAMZone; ADefaultElem // Try to read FElementsOfEachBlock := 0; FFirstBlockPointer := 0; - FNextElementPosition := 0; - SetLength(LBytes,CT_AbstractMemTList_HeaderSize); + FNextElementIndex := 0; + SetLength(LBytes,MinAbstractMemTListHeaderSize(FAbstractMem)); try - if (FInitialZone.position>0) And ((FInitialZone.size=0) or (FInitialZone.size>=CT_AbstractMemTList_HeaderSize)) then begin - FAbstractMem.Read(FInitialZone.position,LBytes[0],CT_AbstractMemTList_HeaderSize); + if (FInitialZone.position>0) And ((FInitialZone.size=0) or (FInitialZone.size>=MinAbstractMemTListHeaderSize(FAbstractMem))) then begin + FAbstractMem.Read(FInitialZone.position,LBytes[0],MinAbstractMemTListHeaderSize(FAbstractMem)); if Length(CT_AbstractMemTList_Magic)<>4 then raise EAbstractMemTList.Create('Invalid CT_AbstractMemTList_Magic size!'); // Check magic for i := 0 to CT_AbstractMemTList_Magic.Length-1 do begin @@ -425,17 +440,17 @@ procedure TAbstractMemTList.Initialize(const AInitialZone: TAMZone; ADefaultElem end; // Capture Size Move(LBytes[4],FElementsOfEachBlock,4); - Move(LBytes[8],FNextElementPosition,4); - Move(LBytes[12],FFirstBlockPointer,4); + Move(LBytes[8],FNextElementIndex,4); + Move(LBytes[12],FFirstBlockPointer,FAbstractMem.SizeOfAbstractMemPosition); if (FElementsOfEachBlock<=0) then begin // Not valid FElementsOfEachBlock := 0; FFirstBlockPointer := 0; - FNextElementPosition := 0; + FNextElementIndex := 0; end; end; finally - if (FInitialZone.position>0) and (FElementsOfEachBlock<=0) and ((FInitialZone.size=0) or (FInitialZone.size>=CT_AbstractMemTList_HeaderSize)) then begin + if (FInitialZone.position>0) and (FElementsOfEachBlock<=0) and ((FInitialZone.size=0) or (FInitialZone.size>=MinAbstractMemTListHeaderSize(FAbstractMem))) then begin // Need to initialize and save FElementsOfEachBlock := ADefaultElementsPerBlock; if FElementsOfEachBlock<=0 then raise EAbstractMemTList.Create('Invalid Default Elements per block'); @@ -444,18 +459,12 @@ procedure TAbstractMemTList.Initialize(const AInitialZone: TAMZone; ADefaultElem LBytes[i] := Byte(Ord(CT_AbstractMemTList_Magic.Chars[i])); end; Move(FElementsOfEachBlock,LBytes[4],4); - Move(FNextElementPosition,LBytes[8],4); - Move(FFirstBlockPointer,LBytes[12],4); + Move(FNextElementIndex,LBytes[8],4); + Move(FFirstBlockPointer,LBytes[12],FAbstractMem.SizeOfAbstractMemPosition); // Save header FAbstractMem.Write( FInitialZone.position, LBytes[0], Length(LBytes) ); end; end; - if (FUseCache) then begin - if (FElementsOfEachBlock>0) then begin - LoadElements(0,FCacheData); - end; - FCacheUpdated := False; - end; end; procedure TAbstractMemTList.Insert(AIndex: Integer; const APosition: TAbstractMemPosition); @@ -465,12 +474,12 @@ procedure TAbstractMemTList.Insert(AIndex: Integer; const APosition: TAbstractMe FAbstractMemTListLock.Acquire; try AddRange(AIndex,1); - if FUseCache then begin - Move(APosition, FCacheData[AIndex*4], 4); + if (UseCacheData(True)) then begin + Move(APosition, FCacheData[AIndex*FAbstractMem.SizeOfAbstractMemPosition], FAbstractMem.SizeOfAbstractMemPosition); FCacheUpdated := True; end else begin GetPointerTo(AIndex,False,LPreviousBlockPointer,LBlockPointer,LIndexInBlock); - FAbstractMem.Write( LBlockPointer + (LIndexInBlock*4), APosition, 4 ); + FAbstractMem.Write( LBlockPointer + (LIndexInBlock*FAbstractMem.SizeOfAbstractMemPosition), APosition, FAbstractMem.SizeOfAbstractMemPosition ); end; finally FAbstractMemTListLock.Release; @@ -482,18 +491,19 @@ procedure TAbstractMemTList.LoadElements(AIndexStart: Integer; var AElements: TB LIndexInBlock, i, j : Integer; begin CheckInitialized; - if (AIndexStart<0) or (AIndexStart>FNextElementPosition) then raise EAbstractMemTList.Create(Format('%s LoadElements out of range %d in 0..%d',[ClassName,AIndexStart,FNextElementPosition-1])); + if (AIndexStart<0) or (AIndexStart>FNextElementIndex) then raise EAbstractMemTList.Create(Format('%s LoadElements out of range %d in 0..%d',[ClassName,AIndexStart,FNextElementIndex-1])); - SetLength(AElements, (FNextElementPosition - AIndexStart)*4); + SetLength(AElements, (FNextElementIndex - AIndexStart)*FAbstractMem.SizeOfAbstractMemPosition); i := AIndexStart; - while (i= FNextElementPosition then j := FNextElementPosition - i; + if (i + j -1) >= FNextElementIndex then j := FNextElementIndex - i; - FAbstractMem.Read(LBlockPointer + (LindexInBlock * 4), AElements[ (i-AIndexStart)*4 ], (j)*4 ); + FAbstractMem.Read(LBlockPointer + (LindexInBlock * FAbstractMem.SizeOfAbstractMemPosition), + AElements[ (i-AIndexStart)*FAbstractMem.SizeOfAbstractMemPosition ], (j)*FAbstractMem.SizeOfAbstractMemPosition ); inc(i,j); end; @@ -504,6 +514,16 @@ procedure TAbstractMemTList.LockList; FAbstractMemTListLock.Acquire; end; +class function TAbstractMemTList.MinAbstractMemTListHeaderSize(AAbstractMem: TAbstractMem): Integer; +begin + // + Result := 4 + 4 + 4 + AAbstractMem.SizeOfAbstractMemPosition; + // [0] 4 for magic + // [4] 4 for elements of each block + // [8] 4 for next element (counter) + // [12] 4 or 8 for first block position +end; + procedure TAbstractMemTList.RemoveRange(AIndexStart, ARemoveCount: Integer); var LBlockPointer, LPreviousBlockPointer, LNext : TAbstractMemPosition; LIndexInBlock, i, j, n : Integer; @@ -513,22 +533,21 @@ procedure TAbstractMemTList.RemoveRange(AIndexStart, ARemoveCount: Integer); FAbstractMemTListLock.Acquire; try if (ARemoveCount<=0) then raise EAbstractMemTList.Create(Format('%s remove count %d',[ClassName,ARemoveCount])); - if (AIndexStart+ARemoveCount-1>=FNextElementPosition) then begin - if (FNextElementPosition>0) then - raise EAbstractMemTList.Create(Format('%s remove %d..%d out of range 0..%d',[ClassName,AIndexStart,AIndexStart + ARemoveCount -1, FNextElementPosition-1])) + if (AIndexStart+ARemoveCount-1>=FNextElementIndex) then begin + if (FNextElementIndex>0) then + raise EAbstractMemTList.Create(Format('%s remove %d..%d out of range 0..%d',[ClassName,AIndexStart,AIndexStart + ARemoveCount -1, FNextElementIndex-1])) else raise EAbstractMemTList.Create(Format('%s remove %d..%d out of range (NO ELEMENTS)',[ClassName,AIndexStart,AIndexStart + ARemoveCount -1])) end; - if FUseCache then begin - if (AIndexStart+ARemoveCount < FNextElementPosition) then begin - Move(FCacheData[(AIndexStart + ARemoveCount) *4], - FCacheData[(AIndexStart) *4], - Length(FCacheData)-((AIndexStart + ARemoveCount)*4)); - + if (UseCacheData(True)) then begin + if (AIndexStart+ARemoveCount < FNextElementIndex) then begin + Move(FCacheData[(AIndexStart + ARemoveCount) *FAbstractMem.SizeOfAbstractMemPosition], + FCacheData[(AIndexStart) *FAbstractMem.SizeOfAbstractMemPosition], + FCacheDataUsedBytes-((AIndexStart + ARemoveCount)*FAbstractMem.SizeOfAbstractMemPosition)); end; - SetLength(FCacheData,Length(FCacheData) - (ARemoveCount*4)); + Dec(FCacheDataUsedBytes,(ARemoveCount*FAbstractMem.SizeOfAbstractMemPosition)); FCacheUpdated := True; - Dec(FNextElementPosition,ARemoveCount); + Dec(FNextElementIndex,ARemoveCount); Exit; end; @@ -542,37 +561,37 @@ procedure TAbstractMemTList.RemoveRange(AIndexStart, ARemoveCount: Integer); GetPointerTo(i,False,LPreviousBlockPointer,LBlockPointer,LIndexInBlock); // Move from LIndexInBlock to FElementsOfEachBlock-1 in this block j := FElementsOfEachBlock - (LIndexInBlock); - if ((n+j)*4>Length(LElements)) then j := (Length(LElements) DIV 4)-n; - FAbstractMem.Write( LBlockPointer + (LIndexInBlock*4), LElements[ n*4 ], j*4 ); + if ((n+j)*FAbstractMem.SizeOfAbstractMemPosition>Length(LElements)) then j := (Length(LElements) DIV FAbstractMem.SizeOfAbstractMemPosition)-n; + FAbstractMem.Write( LBlockPointer + (LIndexInBlock*FAbstractMem.SizeOfAbstractMemPosition), LElements[ n*FAbstractMem.SizeOfAbstractMemPosition ], j*FAbstractMem.SizeOfAbstractMemPosition ); inc(n,j); inc(i,j); - until (i >= FNextElementPosition - ARemoveCount);// or (j=0); + until (i >= FNextElementIndex - ARemoveCount);// or (j=0); - LBlocksBefore := ((FNextElementPosition DIV FElementsOfEachBlock)+1); - LBlocksAfter := (((FNextElementPosition-ARemoveCount) DIV FElementsOfEachBlock)+1); + LBlocksBefore := ((FNextElementIndex DIV FElementsOfEachBlock)+1); + LBlocksAfter := (((FNextElementIndex-ARemoveCount) DIV FElementsOfEachBlock)+1); if (LBlocksBefore0) do begin - FAbstractMem.Read( LBlockPointer + (FElementsOfEachBlock * 4), LNext, 4); + FAbstractMem.Read( LBlockPointer + (FElementsOfEachBlock * FAbstractMem.SizeOfAbstractMemPosition), LNext, FAbstractMem.SizeOfAbstractMemPosition); FAbstractMem.Dispose(LBlockPointer); LBlockPointer := LNext; // if LPreviousBlockPointer>0 then begin LNext := 0; - FAbstractMem.Write( LPreviousBlockPointer + (FElementsOfEachBlock * 4), LNext, 4); + FAbstractMem.Write( LPreviousBlockPointer + (FElementsOfEachBlock * FAbstractMem.SizeOfAbstractMemPosition), LNext, FAbstractMem.SizeOfAbstractMemPosition); end else begin // This is first block pointer FFirstBlockPointer := 0; - FAbstractMem.Write( FInitialZone.position + 12, FFirstBlockPointer, 4 ); + FAbstractMem.Write( FInitialZone.position + 12, FFirstBlockPointer, FAbstractMem.SizeOfAbstractMemPosition ); end; end; end; // Save to header - Dec(FNextElementPosition,ARemoveCount); - FAbstractMem.Write( FInitialZone.position + 8, FNextElementPosition, 4 ); + Dec(FNextElementIndex,ARemoveCount); + FAbstractMem.Write( FInitialZone.position + 8, FNextElementIndex, 4 ); finally FAbstractMemTListLock.Release; end; @@ -584,12 +603,12 @@ procedure TAbstractMemTList.SetPosition(AIndex: Integer; const Value: TAbstractM begin FAbstractMemTListLock.Acquire; try - if FUseCache then begin - Move( Value, FCacheData[AIndex*4], 4); + if (UseCacheData(True)) then begin + Move( Value, FCacheData[AIndex*FAbstractMem.SizeOfAbstractMemPosition], FAbstractMem.SizeOfAbstractMemPosition); FCacheUpdated := True; end else begin GetPointerTo(AIndex,False,LPreviousBlockPointer,LBlockPointer,LIndexInBlock); - FAbstractMem.Write( LBlockPointer + (LIndexInBlock*4), Value, 4); + FAbstractMem.Write( LBlockPointer + (LIndexInBlock*FAbstractMem.SizeOfAbstractMemPosition), Value, FAbstractMem.SizeOfAbstractMemPosition); end; finally FAbstractMemTListLock.Release; @@ -602,9 +621,12 @@ procedure TAbstractMemTList.SetUseCache(const Value: Boolean); if (FUseCache) then begin FlushCache; SetLength(FCacheData,0); + FCacheDataUsedBytes := 0; end else begin - LoadElements(0,FCacheData); + SetLength(FCacheData,0); + FCacheDataLoaded := False; FCacheUpdated := False; + FCacheDataUsedBytes := 0; end; FUseCache := Value; end; @@ -614,6 +636,19 @@ procedure TAbstractMemTList.UnlockList; FAbstractMemTListLock.Release; end; +function TAbstractMemTList.UseCacheData(AWillUpdateData : Boolean): Boolean; +begin + if (FUseCache) or ((AWillUpdateData) and (FUseCacheAuto)) then begin + FUseCache := True; + Result := True; + if Not FCacheDataLoaded then begin + FCacheDataLoaded := True; + LoadElements(0,FCacheData); + FCacheDataUsedBytes := Length(FCacheData); + end; + end else Result := False; +end; + { TAbstractMemTListBaseAbstract } function TAbstractMemTListBaseAbstract.Add(const AItem: T): Integer; @@ -657,10 +692,10 @@ function TAbstractMemTListBaseAbstract.Count: Integer; end; constructor TAbstractMemTListBaseAbstract.Create(AAbstractMem: TAbstractMem; - const AInitialZone: TAMZone; ADefaultElementsPerBlock: Integer); + const AInitialZone: TAMZone; ADefaultElementsPerBlock: Integer; AUseCache : Boolean); begin FAbstractMem := AAbstractMem; - FList := TAbstractMemTList.Create(AAbstractMem,AInitialZone,ADefaultElementsPerBlock); + FList := TAbstractMemTList.Create(AAbstractMem,AInitialZone,ADefaultElementsPerBlock,AUseCache); end; procedure TAbstractMemTListBaseAbstract.Delete(index: Integer); @@ -720,6 +755,16 @@ function TAbstractMemTListBaseAbstract.GetItem(index: Integer): T; end; end; +function TAbstractMemTListBaseAbstract.GetUseCache: Boolean; +begin + FList.LockList; + try + Result := FList.UseCache; + finally + FList.UnlockList; + end; +end; + procedure TAbstractMemTListBaseAbstract.SetItem(index: Integer; const AItem: T); var @@ -765,6 +810,16 @@ procedure TAbstractMemTListBaseAbstract.SetItem(index: Integer; end; end; +procedure TAbstractMemTListBaseAbstract.SetUseCache(const Value: Boolean); +begin + FList.LockList; + try + FList.UseCache := Value; + finally + FList.UnlockList; + end; +end; + function TAbstractMemTListBaseAbstract.ToString(const AItem: T): String; begin Result := Self.ClassName+'.T '+IntToStr(SizeOf(AItem)); @@ -797,9 +852,9 @@ function TAbstractMemOrderedTList.Add(const AItem: T): Integer; constructor TAbstractMemOrderedTList.Create(AAbstractMem: TAbstractMem; const AInitialZone: TAMZone; ADefaultElementsPerBlock: Integer; - AAllowDuplicates: Boolean); + AAllowDuplicates, AUseCache: Boolean); begin - inherited Create(AAbstractMem, AInitialZone, ADefaultElementsPerBlock); + inherited Create(AAbstractMem, AInitialZone, ADefaultElementsPerBlock, AUseCache); FAllowDuplicates := AAllowDuplicates; end; diff --git a/src/libraries/abstractmem/UAbstractStorage.pas b/src/libraries/abstractmem/UAbstractStorage.pas new file mode 100644 index 000000000..eaeaf71c5 --- /dev/null +++ b/src/libraries/abstractmem/UAbstractStorage.pas @@ -0,0 +1,581 @@ +unit UAbstractStorage; + +{ + This file is part of AbstractMem framework + + Copyright (C) 2023 Albert Molina - bpascalblockchain@gmail.com + + https://github.com/PascalCoinDev/ + + *** BEGIN LICENSE BLOCK ***** + + The contents of this files are subject to the Mozilla Public License Version + 2.0 (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL + + Software distributed under the License is distributed on an "AS IS" basis, + WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + for the specific language governing rights and limitations under the License. + + The Initial Developer of the Original Code is Albert Molina. + + See ConfigAbstractMem.inc file for more info + + ***** END LICENSE BLOCK ***** +} + +{$IFDEF FPC} + {$MODE DELPHI} +{$ENDIF} + +interface + +uses + Classes, SysUtils, + SyncObjs, + UAbstractMem, + UFileMem, + UAbstractMemTList, + UAbstractMemBTree; + +{$I ./ConfigAbstractMem.inc } + +type + EAbstractStorage = Class(Exception); + + TStorageStructType = ( + ss_Unknown, + ss_Buffer, + ss_TAbstractMemBTree, + ss_TAbstractMemBTreeData, + ss_TAbstractMemBTreeDataIndex, + ss_TAbstractMemTList, + ss_TAbstractMemTListT, + ss_TAbstractMemOrderedTListT + ); + + TStorageStructInfo = record + Name : String; + AMPosition : TAbstractMemPosition; + StructType : TStorageStructType; + ClassName : String; + procedure Clear; + function GetInformation(const AAbstractMem : TAbstractMem; out ACount : Integer; out AInfo : String) : Boolean; + end; + + TAbstractStorage = Class + public + type + TIsStorage = (is_not_initialized, is_empty, is_initialized, is_not); + TOnInitalizeStorage = procedure(ASender : TAbstractStorage; ACurrentVersion, AUpdateToVersion : Integer) of object; + TStorageStructInformation = Class(TAbstractMemBTreeData) + protected + function LoadData(const APosition : TAbstractMemPosition) : TStorageStructInfo; override; + function SaveData(const AData : TStorageStructInfo) : TAMZone; override; + public + procedure AddStorageStruct(const AName : String; AAMPosition : TAbstractMemPosition; AStructType : TStorageStructType; AObject : TObject); + function GetStorageStruct(const AName : String) : TStorageStructInfo; + function GetStorageStructAMZone(const AName : String) : TAMZone; + function HasStorageStruct(const AName : String; out AStorageStruct : TStorageStructInfo) : Boolean; + End; + private + FFileName : String; + FAbstractMem : TAbstractMem; + FStorageVersion: Integer; + FStorageName: String; + FStorageStructPosition : TAbstractMemPosition; + FStorageStructInformation : TStorageStructInformation; + FIsStorage : TIsStorage; + protected + procedure DoInitialize(AClearContent : Boolean; const ANewStorageName : String; ANewStorageVersion : Integer; AIs64Bits : Boolean; AMemUnitsSize : Integer; AOnInitalizeStorage : TOnInitalizeStorage); + public + Constructor Create(const AFileName : String; AReadOnly : Boolean; const AStorageName : String; const AStorageVersion : Integer; AOnInitalizeStorage : TOnInitalizeStorage); + Destructor Destroy; override; + property AbstractMem : TAbstractMem read FAbstractMem; + property StorageName : String read FStorageName; + property StorageVersion : Integer read FStorageVersion; + procedure Init(const AStorageName : String; AStorageVersion : Integer; AIs64Bits : Boolean; AMemUnitsSize : Integer; AOnInitalizeStorage : TOnInitalizeStorage); + property StorageStructInformation : TStorageStructInformation read FStorageStructInformation; + procedure Analize(const AInfo : TStrings); + End; + + TBytesStorage = Class + private + FBytes: TBytes; + FPosition : Integer; + procedure CheckRead(ASize : Integer); + function CanRead(ASize : Integer) : Boolean; + procedure NeedWrite(AAmount : Integer); + public + Constructor Create(ALength : Integer); overload; + Constructor Create(ABytes : TBytes); overload; + Class Function Load(const AAbstractMem : TAbstractMem; const APosition : TAbstractMemPosition) : TBytesStorage; + Class Function ReadFirstData(const AAbstractMem : TAbstractMem) : TBytesStorage; + property Bytes : TBytes read FBytes; + property Position : Integer read FPosition write FPosition; + function Size : Integer; + // + function ReadString : String; + function ReadByte : Byte; + function ReadUInt16 : UInt16; + function ReadUInt32 : UInt32; + function ReadUInt64 : UInt64; + function ReadStringDef(const ADefault : String) : String; + function ReadIntDef(ABytesCount : Integer; ADefault : Int64) : Int64; + function ReadUIntDef(ABytesCount : Integer; ADefault : UInt64) : UInt64; + // + function WriteString(const AValue : String) : TBytesStorage; + function WriteByte(const AValue : Byte) : TBytesStorage; + function WriteUInt16(const AValue : UInt16) : TBytesStorage; + function WriteUInt32(const AValue : UInt32) : TBytesStorage; + function WriteUInt64(const AValue : UInt64) : TBytesStorage; + function Save(const AAbstractMem : TAbstractMem) : TAMZone; + End; + +implementation + +function TStorageStructInformation_Comparer(const ALeft, ARight: TStorageStructInfo): Integer; +begin + Result := AnsiCompareText(ALeft.Name.Trim,ARight.Name.Trim); +end; + +{ TAbstractStorage } + +procedure TAbstractStorage.Analize(const AInfo: TStrings); +var s : string; + i : Integer; + ss, ssOld : TStorageStructInfo; +begin + AInfo.BeginUpdate; + try + AInfo.Add(Format('%s name:"%s" version:%d',[ClassName,Self.StorageName,Self.StorageVersion])); + if AbstractMem.Is64Bits then s:='64bits' else s:='32bits'; + AInfo.Add(Format('AbstractMem %s %d bytes per unit total size %d',[s,AbstractMem.MemUnitsSize,AbstractMem.MaxAvailablePos])); + AInfo.Add(Format('StorageStructs: %d',[StorageStructInformation.Count])); + if StorageStructInformation.FindDataLowest(ss) then begin + repeat + if ss.GetInformation(AbstractMem,i,s) then begin + AInfo.Add(Format('StorageStruct: %s class %s count %d %s',[ss.Name,ss.ClassName,i,s])); + end; + ssOld := ss; + until not StorageStructInformation.FindDataSuccessor(ssOld,ss); + end; + finally + AInfo.EndUpdate; + end; +end; + +constructor TAbstractStorage.Create(const AFileName : String; AReadOnly : Boolean; + const AStorageName : String; const AStorageVersion : Integer; AOnInitalizeStorage : TOnInitalizeStorage); +begin + FIsStorage := is_not_initialized; + FAbstractMem := Nil; + FFileName := AFileName; + FStorageVersion := 0; + FStorageName := ''; + FStorageStructPosition := 0; + FStorageStructInformation := Nil; + if (FFileName<>'') then begin + FAbstractMem := TFileMem.Create(FFileName,AReadOnly); + end else FAbstractMem := TMem.Create(0,AReadOnly); + DoInitialize(False,AStorageName,AStorageVersion,False,0,AOnInitalizeStorage); +end; + +destructor TAbstractStorage.Destroy; +begin + FStorageStructInformation.Free; + FAbstractMem.Free; + inherited; +end; + +procedure TAbstractStorage.DoInitialize(AClearContent : Boolean; const ANewStorageName : String; ANewStorageVersion : Integer; + AIs64Bits : Boolean; AMemUnitsSize : Integer; AOnInitalizeStorage : TOnInitalizeStorage); +const + CT_HEADER = 'TAbstractStorage'; + CT_VERSION = 1; + +var LfdZone, LssZone : TAMZone; + i : Integer; + LBytesStorage : TBytesStorage; + s : String; +begin + if AClearContent then begin + FreeAndNil(FStorageStructInformation); + AbstractMem.ClearContent(AIs64Bits,AMemUnitsSize); + // + LfdZone := AbstractMem.New(Length(CT_HEADER)+Length(ANewStorageName)+50); + LssZone := AbstractMem.New(TStorageStructInformation.MinAbstractMemInitialPositionSize(AbstractMem)); + FStorageStructPosition := LssZone.position; + LBytesStorage := TBytesStorage.Create(LfdZone.size); + try + LBytesStorage.WriteString(CT_HEADER).WriteUInt32(CT_VERSION).WriteUInt64(FStorageStructPosition). + WriteString(ANewStorageName).WriteUInt32(ANewStorageVersion); + AbstractMem.Write(LfdZone.position,LBytesStorage.Bytes[0],LBytesStorage.Size); + finally + LBytesStorage.Free; + end; + FStorageStructInformation := TStorageStructInformation.Create(AbstractMem,LssZone,False,7,TStorageStructInformation_Comparer); + FStorageStructInformation.AddStorageStruct(FStorageStructInformation.ClassName,FStorageStructPosition,ss_TAbstractMemBTreeData,FStorageStructInformation); + if Assigned(AOnInitalizeStorage) then begin + AOnInitalizeStorage(Self,0,ANewStorageVersion); + end; + end; + // + FreeAndNil(FStorageStructInformation); + // + FIsStorage := is_not_initialized; + LBytesStorage := TBytesStorage.ReadFirstData(AbstractMem); + Try + if LBytesStorage.Size>0 then begin + FIsStorage := is_not; + s := LBytesStorage.ReadStringDef(''); + i := LBytesStorage.ReadIntDef(4,0); + FIsStorage := is_not; + if (s=CT_HEADER) and (i = CT_VERSION) then begin + FStorageStructPosition := LBytesStorage.ReadUInt64; + if FAbstractMem.GetUsedZoneInfo(FStorageStructPosition,True,LfdZone) then begin + FStorageName := LBytesStorage.ReadString; + FStorageVersion := LBytesStorage.ReadUInt32; + FStorageStructInformation := TStorageStructInformation.Create(FAbstractMem,LfdZone,False,7, + TStorageStructInformation_Comparer); + FIsStorage := is_initialized; + if Assigned(AOnInitalizeStorage) and (Not AbstractMem.ReadOnly) and (FStorageName=ANewStorageName) and (FStorageVersion.Create(AAbstractMem,amz,3,false); + try + ACount := TAbstractMemTListBaseAbstract(obj).Count; + Result := True; + finally + obj.Free; + end; + end + end; + +end; + +{ TBytesStorage } + +function TBytesStorage.CanRead(ASize: Integer): Boolean; +begin + Result := (ASize>=0) and ((FPosition + ASize)Length(FBytes)) then raise EAbstractStorage.Create(Format('Canot %s.Read %d bytes (pos %d/%d)',[Self.ClassName,ASize,FPosition,Length(FBytes)])); +end; + +constructor TBytesStorage.Create(ABytes: TBytes); +begin + SetLength(FBytes,Length(ABytes)); + FPosition := 0; + Move(ABytes[0],FBytes[0],Length(ABytes)); +end; + +constructor TBytesStorage.Create(ALength : Integer); +begin + if ALength<0 then ALength := 0; + SetLength(FBytes,ALength); + FPosition := 0; +end; + +class function TBytesStorage.Load(const AAbstractMem: TAbstractMem; + const APosition: TAbstractMemPosition): TBytesStorage; +var LZone : TAMZone; +begin + if Not AAbstractMem.GetUsedZoneInfo( APosition, False, LZone) then + raise EAbstractStorage.Create(Format('%s.Load Inconsistency error used zone info not found at pos %d',[Self.ClassName,APosition])); + Result := TBytesStorage.Create(LZone.size); + Try + if AAbstractMem.Read(LZone.position, Result.FBytes[0], LZone.size )<>LZone.size then + raise EAbstractStorage.Create(Format('%s.Load Inconsistency error cannot read %d bytes at pos %d',[Self.ClassName,LZone.size,APosition])); + Except + Result.Free; + Raise; + End; +end; + +procedure TBytesStorage.NeedWrite(AAmount: Integer); +begin + if FPosition+AAmount > Length(FBytes) then begin + SetLength(FBytes,FPosition+AAmount); + end; +end; + +function TBytesStorage.ReadByte: Byte; +begin + Result := 0; + CheckRead(1); + Move(FBytes[FPosition],Result,1); + inc(FPosition,1); +end; + +class function TBytesStorage.ReadFirstData( + const AAbstractMem: TAbstractMem): TBytesStorage; +var LfdZone : TAMZone; +begin + Result := TBytesStorage.Create(0); + if not AAbstractMem.ReadFirstData(LfdZone,Result.FBytes) then Exit; +end; + +function TBytesStorage.ReadIntDef(ABytesCount: Integer; + ADefault: Int64): Int64; +begin + if CanRead(ABytesCount) then begin + Result := 0; + Move(FBytes[FPosition],Result,ABytesCount); + inc(FPosition,ABytesCount); + end else Result := ADefault; +end; + +function TBytesStorage.ReadString: String; +var LPos : Integer; + l : Integer; +begin + LPos := FPosition; + try + l := ReadUInt16; + if (l<0) then raise EAbstractStorage.Create(Format('%s.ReadString Invalid Length %d for String',[Self.ClassName, l])); + CheckRead(l); + Result := TEncoding.ANSI.GetString(FBytes,FPosition,l); + inc(FPosition,l); + Except + FPosition := LPos; + Raise; + end; +end; + +function TBytesStorage.ReadStringDef(const ADefault: String): String; +var LPos : Integer; + l : Int64; +begin + LPos := FPosition; + l := Integer(ReadIntDef(2,-1)); + if (l<0) or (Not CanRead(l)) then begin + Result := ADefault; + FPosition := LPos; + end else begin + Result := TEncoding.ANSI.GetString(FBytes,FPosition,Integer(l)); + inc(FPosition,Integer(l)); + end; +end; + +function TBytesStorage.ReadUInt16: UInt16; +begin + Result := 0; + CheckRead(2); + Move(FBytes[FPosition],Result,2); + inc(FPosition,2); +end; + +function TBytesStorage.ReadUInt32: UInt32; +begin + Result := 0; + CheckRead(4); + Move(FBytes[FPosition],Result,4); + inc(FPosition,4); +end; + +function TBytesStorage.Save(const AAbstractMem: TAbstractMem): TAMZone; +begin + Result := AAbstractMem.New(Self.Size); + AAbstractMem.Write(Result.position,Self.FBytes[0],Self.Size); +end; + +function TBytesStorage.Size: Integer; +begin + Result := Length(FBytes); +end; + +function TBytesStorage.ReadUInt64: UInt64; +begin + Result := 0; + CheckRead(8); + Move(FBytes[FPosition],Result,8); + inc(FPosition,8); +end; + +function TBytesStorage.ReadUIntDef(ABytesCount: Integer; + ADefault: UInt64): UInt64; +begin + Result := ReadIntDef(ABytesCount,ADefault); +end; + +function TBytesStorage.WriteByte(const AValue: Byte) : TBytesStorage; +begin + NeedWrite(1); + Move(AValue,FBytes[FPosition],1); + inc(FPosition,1); + Result := Self; +end; + +function TBytesStorage.WriteString(const AValue: String) : TBytesStorage; +var Lb : TBytes; +begin + WriteUInt16(AValue.Length); + if Length(AValue)>0 then begin + NeedWrite(Length(AValue)); + Lb := TEncoding.ANSI.GetBytes(AValue); + Move(Lb[0],FBytes[FPosition],Length(AValue)); + inc(FPosition,Length(AValue)); + end; + Result := Self; +end; + +function TBytesStorage.WriteUInt16(const AValue: UInt16) : TBytesStorage; +begin + NeedWrite(2); + Move(AValue,FBytes[FPosition],2); + inc(FPosition,2); + Result := Self; +end; + +function TBytesStorage.WriteUInt32(const AValue: UInt32) : TBytesStorage; +begin + NeedWrite(4); + Move(AValue,FBytes[FPosition],4); + inc(FPosition,4); + Result := Self; +end; + +function TBytesStorage.WriteUInt64(const AValue: UInt64) : TBytesStorage; +begin + NeedWrite(8); + Move(AValue,FBytes[FPosition],8); + inc(FPosition,8); + Result := Self; +end; + +end. diff --git a/src/libraries/abstractmem/UCacheMem.pas b/src/libraries/abstractmem/UCacheMem.pas index 81dd1a877..87780bc9f 100644 --- a/src/libraries/abstractmem/UCacheMem.pas +++ b/src/libraries/abstractmem/UCacheMem.pas @@ -1,9 +1,9 @@ -unit UCacheMem; +unit UCacheMem; { This file is part of AbstractMem framework - Copyright (C) 2020 Albert Molina - bpascalblockchain@gmail.com + Copyright (C) 2020-2021 Albert Molina - bpascalblockchain@gmail.com https://github.com/PascalCoinDev/ @@ -34,7 +34,7 @@ interface uses Classes, SysUtils, {$IFNDEF FPC}{$IFDEF MSWINDOWS}windows,{$ENDIF}{$ENDIF} - UAbstractBTree, UOrderedList; + UAbstractAVLTree, UOrderedList; {$I ./ConfigAbstractMem.inc } @@ -52,12 +52,12 @@ TCacheMemData = record balance : Integer; // buffer : TBytes; - startPos : Integer; + startPos : Int64; used_previous : PCacheMemData; used_next : PCacheMemData; pendingToSave : Boolean; function GetSize : Integer; - function GetEndPos : Integer; + function GetEndPos : Int64; procedure Clear; function ToString : String; procedure DoMark(const ACacheMem : TCacheMem; AMySelfPointer : PCacheMemData; AAddToList : Boolean); @@ -103,16 +103,26 @@ TCacheMemStats = record flushSize : Integer; flushElapsedMillis : Int64; freememCount : Integer; - freememSize : Integer; + freememSize : Int64; + freememBlocksCount : Int64; freememElaspedMillis : Int64; - maxUsedCacheSize : Integer; + needDataCallsCount : Integer; + needDataCallsBytes : Int64; + needDataCallsMillis : Int64; + saveDataCallsCount : Integer; + saveDataCallsBytes : Int64; + saveDataCallsMillis : Int64; + deletedBlocksCount : Integer; procedure Clear; function ToString : String; end; {$ENDIF} - TOnNeedDataProc = function(var ABuffer; AStartPos : Integer; ASize : Integer) : Boolean of object; - TOnSaveDataProc = function(const ABuffer; AStartPos : Integer; ASize : Integer) : Boolean of object; + TOnNeedDataProc = function(var ABuffer; AStartPos : Int64; ASize: Integer): Integer of object; + TOnSaveDataProc = function(const ABuffer; AStartPos : Int64; ASize: Integer): Integer of object; + TOnNeedsTotalSizeProc = function(const ABuffer; AStartPos : Int64; ASize: Integer): Integer of object; + TOnFinalizedCacheProc = procedure(const ASender : TCacheMem; const AProcessDesc : String; AElapsedMilis: Int64) of object; + TOnLog = procedure(ASender : TObject; const ALog : String) of object; ECacheMem = Class(Exception); @@ -124,46 +134,58 @@ TCacheMemStats = record FOldestUsed : PCacheMemData; FNewestUsed : PCacheMemData; FCacheData : TCacheMemDataTree; - FPendingToSaveBytes : Integer; - FCacheDataBlocks : Integer; - FCacheDataSize : Integer; + FPendingToSaveBytes : Int64; + FCacheDataBlocks : Int64; + FCacheDataSize : Int64; FOnNeedDataProc : TOnNeedDataProc; FOnSaveDataProc : TOnSaveDataProc; - FMaxCacheSize: Integer; - FMaxCacheDataBlocks: Integer; - function FindCacheMemDataByPosition(APosition : Integer; out APCacheMemData : PCacheMemData) : Boolean; + FMaxCacheSize: Int64; + FMaxCacheDataBlocks: Int64; + FDefaultCacheDataBlocksSize : Int64; + FGridCache : Boolean; + FOnFlushedCache: TOnFinalizedCacheProc; + FOnLog: TOnLog; + function FindCacheMemDataByPosition(APosition : Int64; out APCacheMemData : PCacheMemData) : Boolean; procedure Delete(var APCacheMemData : PCacheMemData); overload; function FlushCache(const AFlushCacheList : TOrderedList) : Boolean; overload; procedure CheckMaxMemUsage; + function ForceCreatePCacheMemData(AStartPos : Int64; ASize : Integer; const ALoadIfDataNotFound : Boolean) : PCacheMemData; + function LoadDataExt(var ABuffer; AStartPos : Int64; ASize : Integer) : Integer; + procedure SaveToCacheExt(const ABuffer; ASize : Integer; AStartPos : Int64; AMarkAsPendingToSave : Boolean); public Constructor Create(AOnNeedDataProc : TOnNeedDataProc; AOnSaveDataProc : TOnSaveDataProc); Destructor Destroy; override; // procedure Clear; - procedure SaveToCache(const ABuffer; ASize, AStartPos : Integer; AMarkAsPendingToSave : Boolean); overload; - procedure SaveToCache(const ABuffer : TBytes; AStartPos : Integer; AMarkAsPendingToSave : Boolean); overload; - function LoadData(var ABuffer; const AStartPos, ASize : Integer) : Boolean; + procedure SaveToCache(const ABuffer; ASize : Integer; AStartPos : Int64; AMarkAsPendingToSave : Boolean); overload; + procedure SaveToCache(const ABuffer : TBytes; AStartPos : Int64; AMarkAsPendingToSave : Boolean); overload; + function LoadData(var ABuffer; AStartPos : Int64; ASize : Integer) : Boolean; function ToString : String; reintroduce; function FlushCache : Boolean; overload; - function FreeMem(const AMaxMemSize, AMaxBlocks : Integer) : Boolean; + function FreeMem(const AMaxMemSize, AMaxBlocks : Int64) : Boolean; procedure ConsistencyCheck; - property CacheDataSize : Integer read FCacheDataSize; + property CacheDataSize : Int64 read FCacheDataSize; // Bytes in cache - property PendingToSaveSize : Integer read FPendingToSaveBytes; + property PendingToSaveSize : Int64 read FPendingToSaveBytes; // Bytes in cache pending to flush - property CacheDataBlocks : Integer read FCacheDataBlocks; + property CacheDataBlocks : Int64 read FCacheDataBlocks; // Blocks in cache - property MaxCacheSize : Integer read FMaxCacheSize write FMaxCacheSize; - property MaxCacheDataBlocks : Integer read FMaxCacheDataBlocks write FMaxCacheDataBlocks; + property MaxCacheSize : Int64 read FMaxCacheSize write FMaxCacheSize; + property MaxCacheDataBlocks : Int64 read FMaxCacheDataBlocks write FMaxCacheDataBlocks; + property DefaultCacheDataBlocksSize : Int64 read FDefaultCacheDataBlocksSize write FDefaultCacheDataBlocksSize; + property GridCache : Boolean read FGridCache write FGridCache; {$IFDEF ABSTRACTMEM_ENABLE_STATS} procedure ClearStats; property CacheMemStats : TCacheMemStats read FCacheMemStats; {$ENDIF} + function GetStatsReport(AClearStats : Boolean) : String; + property OnFlushedCache : TOnFinalizedCacheProc read FOnFlushedCache write FOnFlushedCache; + property OnLog : TOnLog read FOnLog write FOnLog; End; implementation @@ -206,23 +228,41 @@ function TBytesHelper.ToString: String; { TCacheMem } -function _CacheMem_CacheData_Comparer(const Left, Right: PCacheMemData): Integer; +function _TCacheMemDataTree_Compare(const Left, Right: PCacheMemData): Integer; begin - Result := Integer(Left^.startPos) - Integer(Right^.startPos); + if Left^.startPos < Right^.startPos then Result := -1 + else if Left^.startPos > Right^.startPos then Result := 1 + else Result := 0; end; procedure TCacheMem.CheckMaxMemUsage; +var LTick : TTickCount; + LMillis, + LOldCacheDataBlocks, + LOldCacheDataSize : Int64; begin if ((FMaxCacheSize < 0) or (FCacheDataSize<=FMaxCacheSize)) and ((FMaxCacheDataBlocks < 0) or (FCacheDataBlocks<=FMaxCacheDataBlocks)) then Exit; - // When calling FreeMem will increase call in order to speed - FreeMem((FMaxCacheSize-1) SHR 1, (FMaxCacheDataBlocks-1) SHR 1); + LOldCacheDataBlocks := FCacheDataBlocks; + LOldCacheDataSize := FCacheDataSize; + LTick := TPlatform.GetTickCount; + try + // When calling FreeMem will increase call in order to speed + if not FreeMem((FMaxCacheSize-1) SHR 1, (FMaxCacheDataBlocks-1) SHR 1) then begin + raise ECacheMem.Create(Format('FreeMem(%d -> %d,%d -> %d)=False',[FCacheDataSize,(FMaxCacheSize-1) SHR 1,FCacheDataBlocks,(FMaxCacheDataBlocks-1) SHR 1])); + end; + finally + LMillis := TPlatform.GetElapsedMilliseconds(LTick); + if Assigned(FOnFlushedCache) then begin + FOnFlushedCache(Self,Format('CheckedMaxMemUsage from %d bytes / %d blocks to %d bytes / %d blocks in %d millis', + [LOldCacheDataSize,LOldCacheDataBlocks,FCacheDataSize,FCacheDataBlocks,LMillis]),LMillis); + end; + end; end; procedure TCacheMem.Clear; var P, PCurr : PCacheMemData; - i : Integer; begin PCurr := FCacheData.FindLowest; while (Assigned(PCurr)) do begin @@ -277,7 +317,7 @@ procedure TCacheMem.ConsistencyCheck; if LTotalSize<>FCacheDataSize then raise ECacheMem.Create(Format('Cache size %d <> %d',[LTotalSize,FCacheDataSize])); if LTotalPendingSize<>FPendingToSaveBytes then raise ECacheMem.Create(Format('Total pending size %d <> %d',[LTotalPendingSize,FPendingToSaveBytes])); - LOrder := TOrderedList.Create(False,_CacheMem_CacheData_Comparer); + LOrder := TOrderedList.Create(False,_TCacheMemDataTree_Compare); try PLast := Nil; PCurrent := FOldestUsed; @@ -316,24 +356,31 @@ constructor TCacheMem.Create(AOnNeedDataProc : TOnNeedDataProc; AOnSaveDataProc FCacheDataBlocks := 0; FPendingToSaveBytes := 0; FCacheDataSize := 0; + FDefaultCacheDataBlocksSize := 9000; + FGridCache := False; FOnNeedDataProc := AOnNeedDataProc; FOnSaveDataProc := AOnSaveDataProc; FOldestUsed := Nil; FNewestUsed := Nil; + FOnFlushedCache := Nil; + FOnLog := Nil; end; procedure TCacheMem.Delete(var APCacheMemData : PCacheMemData); var LConsistency : PCacheMemData; begin if not FindCacheMemDataByPosition(APCacheMemData^.startPos,LConsistency) then Raise ECacheMem.Create(Format('Delete not found for %s',[APCacheMemData^.ToString])); - Dec(FCacheDataSize,APCacheMemData.GetSize); + Dec(FCacheDataSize,Int64(APCacheMemData.GetSize)); if APCacheMemData^.pendingToSave then begin - Dec(FPendingToSaveBytes,APCacheMemData^.GetSize); + FPendingToSaveBytes := FPendingToSaveBytes - Int64(APCacheMemData^.GetSize); end; SetLength(APCacheMemData^.buffer,0); APCacheMemData^.UnMark(Self,APCacheMemData); FCacheData.Delete(APCacheMemData); Dec(FCacheDataBlocks); + {$IFDEF ABSTRACTMEM_ENABLE_STATS} + inc(FCacheMemStats.deletedBlocksCount); + {$ENDIF} end; destructor TCacheMem.Destroy; @@ -344,9 +391,9 @@ destructor TCacheMem.Destroy; inherited; end; -function TCacheMem.FindCacheMemDataByPosition(APosition: Integer; out APCacheMemData: PCacheMemData): Boolean; - // Will return FCacheData index at AiCacheDataPos that contains APosition - // When returning FALSE, AiCacheDataPos will be index of previous FCacheData position to use +function TCacheMem.FindCacheMemDataByPosition(APosition: Int64; out APCacheMemData: PCacheMemData): Boolean; + // Will return APCacheMemData that contains APosition + // When returning FALSE, APCacheMemData.startPos will be < APosition (or NIL) var PSearch : PCacheMemData; begin APCacheMemData := Nil; @@ -375,18 +422,16 @@ function TCacheMem.FindCacheMemDataByPosition(APosition: Integer; out APCacheMem end; function TCacheMem.FlushCache(const AFlushCacheList : TOrderedList) : Boolean; -var i : Integer; +var i, LCount : Integer; PToCurrent, PToNext : PCacheMemData; - LTotalBytesSaved, LTotalBytesError : Integer; - {$IFDEF ABSTRACTMEM_ENABLE_STATS} + LTotalBytesSaved, LTotalBytesError, LMillis, LInitialPendingBytes : Int64; LTickCount : TTickCount; - {$ENDIF} begin - {$IFDEF ABSTRACTMEM_ENABLE_STATS} LTickCount := TPlatform.GetTickCount; - {$ENDIF} LTotalBytesSaved := 0; LTotalBytesError := 0; + LInitialPendingBytes := FPendingToSaveBytes; + LCount := 0; Result := True; if (FPendingToSaveBytes<=0) then Exit; @@ -405,26 +450,40 @@ function TCacheMem.FlushCache(const AFlushCacheList : TOrderedListPToCurrent^.GetSize then begin Result := False; - inc(LTotalBytesError,PToCurrent^.GetSize); + inc(LTotalBytesError,Int64(PToCurrent^.GetSize)); end else begin - inc(LTotalBytesSaved,PToCurrent^.GetSize); + inc(LTotalBytesSaved,Int64(PToCurrent^.GetSize)); PToCurrent^.pendingToSave := False; - Dec(FPendingToSaveBytes,PToCurrent^.GetSize); + FPendingToSaveBytes := FPendingToSaveBytes - Int64(PToCurrent^.GetSize); end; end; PToNext := PToCurrent^.used_next; end; until Not Assigned(PToCurrent); if (LTotalBytesSaved>0) or (LTotalBytesError>0) then begin + LMillis := TPlatform.GetElapsedMilliseconds(LTickCount); {$IFDEF ABSTRACTMEM_ENABLE_STATS} Inc(FCacheMemStats.flushCount); Inc(FCacheMemStats.flushSize,LTotalBytesSaved); - Inc(FCacheMemStats.flushElapsedMillis,TPlatform.GetElapsedMilliseconds(LTickCount)); + Inc(FCacheMemStats.flushElapsedMillis,LMillis); + Inc(FCacheMemStats.saveDataCallsMillis,LMillis); {$ENDIF} + if Assigned(FOnFlushedCache) then begin + FOnFlushedCache(Self,Format('Flushed %d cells with %d bytes in %d millis',[LCount,LTotalBytesSaved,LMillis]),LMillis); + end; end; - if (LTotalBytesError=0) and (Not Assigned(AFlushCacheList)) and (FPendingToSaveBytes<>0) then raise ECacheMem.Create(Format('Flush Inconsistency error Saved:%d Pending:%d',[LTotalBytesSaved,FPendingToSaveBytes])); + if (LInitialPendingBytes - LTotalBytesSaved <> FPendingToSaveBytes) then begin + raise ECacheMem.Create(Format('Flush Inconsistency error -> Initial:%d Saved:%d Pending:%d',[LInitialPendingBytes,LTotalBytesSaved,FPendingToSaveBytes])); + end; + + if (LTotalBytesError=0) and (Not Assigned(AFlushCacheList)) and (FPendingToSaveBytes<>0) then raise ECacheMem.Create(Format('Flush Inconsistency error Initial:%d Saved:%d Pending:%d',[LInitialPendingBytes,LTotalBytesSaved,FPendingToSaveBytes])); end; @@ -433,13 +492,15 @@ function TCacheMem.FlushCache: Boolean; Result := FlushCache(Nil); // FlushCache without a list, without order end; -function TCacheMem.FreeMem(const AMaxMemSize, AMaxBlocks: Integer) : Boolean; +function TCacheMem.FreeMem(const AMaxMemSize, AMaxBlocks: Int64) : Boolean; var - i, LPreviousCacheDataSize, LTempCacheDataSize, - LFinalMaxMemSize, LMaxPendingRounds : Integer; + i, LTotalRemovedBlocks : Integer; + LTempCacheDataSize, LAuxCacheDataSize, + LFinalMaxMemSize, LMaxPendingRounds : Int64; PToRemove, PToNext : PCacheMemData; LListToFlush : TOrderedList; {$IFDEF ABSTRACTMEM_ENABLE_STATS} + LPreviousCacheDataSize, LPreviousCacheDataBlocks : Int64; LTickCount : TTickCount; {$ENDIF} begin @@ -449,28 +510,39 @@ function TCacheMem.FreeMem(const AMaxMemSize, AMaxBlocks: Integer) : Boolean; ((AMaxBlocks < 0) or (FCacheDataBlocks<=AMaxBlocks)) then Exit(True); {$IFDEF ABSTRACTMEM_ENABLE_STATS} LTickCount := TPlatform.GetTickCount; - {$ENDIF} LPreviousCacheDataSize := FCacheDataSize; + LPreviousCacheDataBlocks := FCacheDataBlocks; + try + {$ENDIF} + if Assigned(FOnLog) then begin + FOnLog(Self,Format('%s.FreeMem(MaxMem:%d,MaxBlocks:%d) Mem:%d Blocks:%d',[Self.ClassName,AMaxMemSize,AMaxBlocks,FCacheDataSize,FCacheDataBlocks])); + end; if (AMaxMemSize<0) then LFinalMaxMemSize := FCacheDataSize else LFinalMaxMemSize := AMaxMemSize; if (AMaxBlocks<0) then LMaxPendingRounds := 0 else LMaxPendingRounds := FCacheDataBlocks - AMaxBlocks; // + LTotalRemovedBlocks := 0; PToRemove := FOldestUsed; - LListToFlush := TOrderedList.Create(False,_CacheMem_CacheData_Comparer); + LListToFlush := TOrderedList.Create(False,_TCacheMemDataTree_Compare); try LTempCacheDataSize := FCacheDataSize; + LAuxCacheDataSize := 0; while (Assigned(PToRemove)) and // Both conditions must be true ((LTempCacheDataSize > LFinalMaxMemSize) or (LMaxPendingRounds>0)) do begin + inc(LTotalRemovedBlocks); Dec(LMaxPendingRounds); PToNext := PToRemove^.used_next; // Capture now to avoid future PToRemove updates - Dec(LTempCacheDataSize, PToRemove^.GetSize); + Dec(LTempCacheDataSize, Int64(PToRemove^.GetSize)); if (PToRemove^.pendingToSave) then begin + inc(LAuxCacheDataSize,Int64(PToRemove^.GetSize)); // Add to list to flush - LListToFlush.Add(PToRemove); + if LListToFlush.Add(PToRemove)<0 then begin + raise ECacheMem.Create(Format('Inconsistent error on Freemem cannot add pending to save: %s',[PToRemove.ToString])); + end; end else Delete(PToRemove); PToRemove := PToNext; // Point to next used end; @@ -479,148 +551,318 @@ function TCacheMem.FreeMem(const AMaxMemSize, AMaxBlocks: Integer) : Boolean; // Delete not deleted previously for i:=0 to LListToFlush.Count-1 do begin PToRemove := LListToFlush.Get(i); + + Dec(LAuxCacheDataSize,Int64(PToRemove^.GetSize)); + Delete( PToRemove ); end; + // + if (Result) and (LAuxCacheDataSize<>0) then raise ECacheMem.Create(Format('Inconsistent error on FreeMem Removed size %d<>0 with CacheDataSize %d (save list %d)',[LAuxCacheDataSize,FCacheDataSize,LListToFlush.Count])); + if (Result) and (LTempCacheDataSize > FCacheDataSize) then raise ECacheMem.Create(Format('Inconsistent error on FreeMem Expected Cache size is Higher (%d > obtained %d) (save list %d)',[LTempCacheDataSize,FCacheDataSize,LListToFlush.Count])); + if (Result) and (LMaxPendingRounds>0) then raise ECacheMem.Create(Format('Inconsistent error on FreeMem Expected Max Blocks %d <> obtained %d',[AMaxBlocks,FCacheDataBlocks])); + if Assigned(FOnLog) then begin + FOnLog(Self,Format('Final %s.FreeMem(MaxMem:%d,MaxBlocks:%d) Mem:%d (=Temporal Mem:%d) Blocks:%d Removed:%d Flushed:%d', + [Self.ClassName,AMaxMemSize,AMaxBlocks,FCacheDataSize,LTempCacheDataSize,FCacheDataBlocks,LTotalRemovedBlocks,LListToFlush.Count])); + end; finally LListToFlush.Free; end; - if (Result) and (LTempCacheDataSize <> FCacheDataSize) then raise ECacheMem.Create(Format('Inconsistent error on FreeMem Expected size %d <> obtained %d',[LTempCacheDataSize,FCacheDataSize])); - if (Result) and (LMaxPendingRounds>0) then raise ECacheMem.Create(Format('Inconsistent error on FreeMem Expected Max Blocks %d <> obtained %d',[AMaxBlocks,FCacheDataBlocks])); - Result := (Result) And (FCacheDataSize <= AMaxMemSize); {$IFDEF ABSTRACTMEM_ENABLE_STATS} + finally Inc(FCacheMemStats.freememCount); Inc(FCacheMemStats.freememSize,LPreviousCacheDataSize - FCacheDataSize); + Inc(FCacheMemStats.freememBlocksCount,LPreviousCacheDataBlocks - FCacheDataBlocks); Inc(FCacheMemStats.freememElaspedMillis,TPlatform.GetElapsedMilliseconds(LTickCount)); + end; + {$ENDIF} +end; + +function TCacheMem.GetStatsReport(AClearStats: Boolean): String; +begin + {$IFDEF ABSTRACTMEM_ENABLE_STATS} + Result := FCacheMemStats.ToString; + if AClearStats then ClearStats; + {$ELSE} + Result := ''; {$ENDIF} end; -function TCacheMem.LoadData(var ABuffer; const AStartPos, ASize: Integer): Boolean; - // Will return a Pointer to AStartPos +function TCacheMem.LoadData(var ABuffer; AStartPos : Int64; ASize: Integer): Boolean; +begin + Result := LoadDataExt(ABuffer,AStartPos,ASize) = ASize; +end; - function _CaptureDataFromOnNeedDataProc(ACapturePosStart, ACaptureSize : Integer; var ACapturedData : TBytes) : Boolean; +function TCacheMem.ForceCreatePCacheMemData(AStartPos : Int64; ASize : Integer; const ALoadIfDataNotFound : Boolean) : PCacheMemData; + function CreateFromOnNeedDataProc(ACapturePosStart : Int64; ACaptureSize : Integer; out ANewPCacheMemData : PCacheMemData) : Boolean; {$IFDEF ABSTRACTMEM_TESTING_MODE}var i : integer;{$ENDIF} + {$IFDEF ABSTRACTMEM_ENABLE_STATS}var LTC : TTickCount;{$ENDIF} + var LCapturedSize : Integer; begin - SetLength(ACapturedData,ACaptureSize); - if Not Assigned(FOnNeedDataProc) then begin - FillChar(ACapturedData[0],Length(ACapturedData),0); - {$IFDEF ABSTRACTMEM_TESTING_MODE} - // TESTING PURPOSE TESTING ONLY - for i := 0 to High(ACapturedData) do begin - ACapturedData[i] := Byte(ACapturePosStart + i); - end; - // END TESTING PURPOSE - {$ENDIF} - Exit(False); + New(ANewPCacheMemData); + Try + ANewPCacheMemData.Clear; + ANewPCacheMemData.startPos := ACapturePosStart; + SetLength(ANewPCacheMemData.buffer,ACaptureSize); + ANewPCacheMemData.pendingToSave := False; + // Check if needs to be loaded based on ALoadIfDataNotFound and also + // if Position is a chunk BEFORE of AFTER the chunk searching for + // that we can know using AStartPos vs ACapturePosStart + // and ASize vs ACaptureSize + if (ALoadIfDataNotFound) + or (ACapturePosStart < AStartPos) // BEFORE + or (AStartPos+ASize < ACapturePosStart + ACaptureSize) // AFTER + then begin + {$IFDEF ABSTRACTMEM_ENABLE_STATS} + Inc(Self.FCacheMemStats.needDataCallsCount); + inc(Self.FCacheMemStats.needDataCallsBytes,ACaptureSize); + LTC := TPlatform.GetTickCount; + {$ENDIF} + if Not Assigned(FOnNeedDataProc) then begin + FillChar(ANewPCacheMemData.buffer[0],Length(ANewPCacheMemData.buffer),0); + {$IFDEF ABSTRACTMEM_TESTING_MODE} + // TESTING PURPOSE TESTING ONLY + for i := 0 to High(ACapturedData) do begin + ACapturedData[i] := Byte(ACapturePosStart + i); + end; + // END TESTING PURPOSE + {$ENDIF} + Result := False; + end else begin + LCapturedSize := FOnNeedDataProc(ANewPCacheMemData.buffer[0],ACapturePosStart,ACaptureSize); + if LCapturedSize0) then begin + // Save new + if Not FCacheData.Add( ANewPCacheMemData ) then raise ECacheMem.Create(Format('Inconsistent ForceLoadData CacheData duplicate for %s',[ANewPCacheMemData^.ToString])); + Inc(FCacheDataSize,Int64(ANewPCacheMemData.GetSize)); + Inc(FCacheDataBlocks); + end else begin + ANewPCacheMemData.Clear; + Dispose(ANewPCacheMemData); + ANewPCacheMemData := Nil; + Result := False; end; - Result := FOnNeedDataProc(ACapturedData[0],ACapturePosStart,ACaptureSize); end; + function GetNewPCacheMemData(ACapturePosStart : Int64; ACaptureSize : Integer; ARightPCacheMemData : PCacheMemData; out ANewPCacheMemData : PCacheMemData) : Boolean; + var LNewP : PCacheMemData; + LChunkSize : Integer; + begin + ANewPCacheMemData := Nil; + repeat + if (FDefaultCacheDataBlocksSize>0) then begin + if FGridCache then begin + // Small chunks + LChunkSize := FDefaultCacheDataBlocksSize - ((ACapturePosStart) MOD FDefaultCacheDataBlocksSize); + end else begin + // + LChunkSize := FDefaultCacheDataBlocksSize; + end; + end else begin + // Single chunk + LChunkSize := ACaptureSize; + end; + + if (Assigned(ARightPCacheMemData)) and (ACapturePosStart + Int64(LChunkSize) >= ARightPCacheMemData.startPos) then begin + LChunkSize := Int64(Int64(ARightPCacheMemData.startPos) - Int64(ACapturePosStart)) + end; + + Result := CreateFromOnNeedDataProc(ACapturePosStart,LChunkSize,LNewP); + if ANewPCacheMemData=Nil then ANewPCacheMemData := LNewP; // First one + if (Assigned(LNewP)) then begin + Dec(ACaptureSize,LNewP.GetSize); + Inc(ACapturePosStart,LNewP.GetSize); + end else begin + // No PCacheMemData available... + end; + until (Not Result) or (ACaptureSize<=0) or + ( (Assigned(ARightPCacheMemData)) and (Assigned(LNewP)) and (ARightPCacheMemData.startPos <= (LNewP.GetEndPos+1)) ) ; + // + if (Not Result) and (Assigned(LNewP)) and (LNewP.GetEndPos>=(ACapturePosStart + ACaptureSize)) then Result := True; + end; var - LNewP, PCurrent, PToDelete : PCacheMemData; - LLastAddedPosition, LBytesCount, LSizeToStore : Integer; + PCurrent, PRight : PCacheMemData; + LNewStartPos, LPendingSize : Int64; + LLastAddedPosition, LBytesCount, LSizeToStore, LSizeOfChunk, LOffset : Int64; LTempData : TBytes; - LTmpResult : Boolean; + LTempCapturedSize, nLoop : Integer; + LContinue : Boolean; begin + Result := Nil; + PRight := Nil; if ASize<0 then raise ECacheMem.Create(Format('Invalid load size %d',[ASize])); - if ASize=0 then Exit(True); + if ASize=0 then Exit(0); + if (FindCacheMemDataByPosition(AStartPos,PCurrent)) then begin - if (PCurrent^.GetSize - (AStartPos - PCurrent^.startPos)) >= ASize then begin - // PStart has all needed info - Move(PCurrent^.buffer[ AStartPos-PCurrent^.startPos ],ABuffer,ASize); - PCurrent^.MarkAsUsed(Self,PCurrent); - Result := True; + if (PCurrent^.GetEndPos >= (AStartPos + ASize -1)) then begin + // PCurrent has all needed info + Result := PCurrent; Exit; end; + end else if Not Assigned(PCurrent) then begin + PRight := FCacheData.FindLowest; + if Assigned(PRight) and (PRight.startPos<=AStartPos) then raise ECacheMem.Create('ERROR DEV 20211202-01'); end; - // Will need to create a new "linar struct" because not found a linear struct previously - New( LNewP ); - try - LNewP.Clear; - - LSizeToStore := ASize; - SetLength(LNewP^.buffer, LSizeToStore); - - LNewP.startPos := AStartPos; - - Result := True; - - LLastAddedPosition := AStartPos - 1; - while (Assigned(PCurrent)) and ( (LLastAddedPosition) < (LNewP^.GetEndPos) ) do begin - if (PCurrent^.GetEndPos <= LLastAddedPosition) then PCurrent := FCacheData.FindSuccessor(PCurrent) - else if (PCurrent^.startPos > LNewP^.GetEndPos) then break - else begin - // PCurrent will be used: - // - if (PCurrent^.startPos <= LLastAddedPosition) then begin - // PCurrent start before, increase buffer and set startPos - SetLength(LNewP^.buffer ,Length(LNewP^.buffer) + (LLastAddedPosition - PCurrent^.startPos + 1)); - LNewP.startPos := PCurrent^.startPos; - LLastAddedPosition := PCurrent^.startPos-1; - end else if (PCurrent^.startPos > LLastAddedPosition+1) then begin - // Need data "between" - LBytesCount := PCurrent^.startPos - (LLastAddedPosition+1); - LTmpResult := _CaptureDataFromOnNeedDataProc(LLastAddedPosition+1,LBytesCount,LTempData); - Result := Result and LTmpResult; - Move(LTempData[0],LNewP^.buffer[ (LLastAddedPosition+1) - LNewP^.startPos ], LBytesCount); - inc(LLastAddedPosition,LBytesCount); - end; - // At this point (LLastAddedPosition+1 = PCurrent^.startPos) - // Add available data - if PCurrent^.GetEndPos>(LNewP^.GetEndPos) then begin - // Will need to increase buffer size: - SetLength( LNewP^.buffer , LNewP^.GetSize + (PCurrent^.GetEndPos - LNewP^.GetEndPos)); - end; - LBytesCount := PCurrent^.GetEndPos - LLastAddedPosition; - Move(PCurrent^.buffer[ 0 ],LNewP^.buffer[ (LLastAddedPosition+1) - LNewP^.startPos ], LBytesCount); - inc(LLastAddedPosition,LBytesCount); - // Has been used, delete - LNewP.pendingToSave := (LNewP^.pendingToSave) or (PCurrent^.pendingToSave); - PToDelete := PCurrent; - PCurrent := FCacheData.FindSuccessor(PCurrent); - Delete( PToDelete ); + if (FDefaultCacheDataBlocksSize>0) and (FGridCache) and (Not Assigned(PCurrent)) then begin + LNewStartPos := (((AStartPos) DIV FDefaultCacheDataBlocksSize)) * FDefaultCacheDataBlocksSize; + end else LNewStartPos := AStartPos; + LPendingSize := ASize; + + while Assigned(PCurrent) And (PCurrent.GetEndPos < LNewStartPos) do PCurrent := FCacheData.FindSuccessor(PCurrent); + if Assigned(PCurrent) And (PCurrent.startPos>LNewStartPos) then begin + // PCurrent = PRight + if (Assigned(PRight) and (PCurrent<>PRight)) then raise ECacheMem.Create('ERROR DEV 20211202-02'); + PRight := PCurrent; + PCurrent := Nil; + end; + // Pre: PCurrent = NIL or PCurrent.GetEndPos>=AStartPos + Result := PCurrent; + + LContinue := True; + nLoop:=0; + repeat + inc(nLoop); + if Not Assigned(PCurrent) then begin + if nLoop=1 then begin + LContinue := GetNewPCacheMemData(LNewStartPos,LPendingSize + (AStartPos - LNewStartPos),PRight,PCurrent); + end else begin + LContinue := GetNewPCacheMemData(LNewStartPos,LPendingSize,PRight,PCurrent); + end; + // + if (Not Assigned(PCurrent)) then begin + Exit; end; end; - if (LLastAddedPosition) < (LNewP^.GetEndPos) then begin - // That means there is no data available at cache - LBytesCount := LNewP^.GetSize - (LLastAddedPosition - LNewP^.startPos +1); - LTmpResult := _CaptureDataFromOnNeedDataProc(LLastAddedPosition+1,LBytesCount,LTempData); - Result := Result and LTmpResult; - Move(LTempData[0],LNewP^.buffer[ (LLastAddedPosition+1) - LNewP^.startPos ], LBytesCount); - end; - Except - on E:Exception do begin - LNewP.Clear; - Dispose(LNewP); - Raise; + if Not Assigned(Result) then Result := PCurrent; // This was the first block + + Dec(LPendingSize,PCurrent.GetSize - (LNewStartPos - PCurrent.startPos)); + + LNewStartPos := PCurrent.GetEndPos + 1; + + if (LContinue) And (LPendingSize>0) then begin + if Assigned(PRight) and (PRight.startPos = LNewStartPos) then begin + PCurrent := PRight; + PRight := FCacheData.FindSuccessor(PCurrent); + end else begin + PCurrent := FCacheData.FindSuccessor(PCurrent); + end; + + if Assigned(PCurrent) And (PCurrent.startPos>LNewStartPos) then begin + PRight := PCurrent; + PCurrent := Nil; + end; end; - end; + until (Not LContinue) or (LPendingSize<=0); +end; - // Save new - LNewP^.MarkAsUsed(Self,LNewP); - if Not FCacheData.Add( LNewP ) then raise ECacheMem.Create(Format('Inconsistent LoadData CacheData duplicate for %s',[LNewP^.ToString])); - Inc(FCacheDataSize,Length(LNewP^.buffer)); - Inc(FCacheDataBlocks); - // - if (LNewP^.pendingToSave) then begin - inc(FPendingToSaveBytes,LNewP^.GetSize); +function TCacheMem.LoadDataExt(var ABuffer; AStartPos : Int64; ASize: Integer): Integer; +var + PCurrent : PCacheMemData; + LNextStartPos, i64, LNextSize : Int64; + nBufferOffset : Int64; + PToBuffer : PByte; + nLoops : Integer; +begin + Result := 0; + + PToBuffer := @ABuffer; + PCurrent := ForceCreatePCacheMemData(AStartPos,ASize,True); + if Not Assigned(PCurrent) then begin + Exit; end; + // PCurrent + nLoops := 0; + LNextStartPos := AStartPos; + repeat + inc(nLoops); - Move(LNewP^.buffer[ AStartPos-LNewP^.startPos ],ABuffer,ASize); + nBufferOffset := (LNextStartPos - PCurrent.startPos); + LNextSize := PCurrent.GetSize - nBufferOffset; + if (LNextStartPos + LNextSize)>(AStartPos + ASize) then begin + LNextSize := (AStartPos + ASize) - LNextStartPos; + end; + Move(PCurrent.buffer[nBufferOffset],PToBuffer^,LNextSize); + PCurrent.MarkAsUsed(Self,PCurrent); + inc(Result,Integer(LNextSize)); + inc(LNextStartPos,PCurrent.GetSize - nBufferOffset); + inc(PToBuffer,LNextSize); + if (PCurrent.GetEndPos<(AStartPos + Int64(ASize) -1)) then begin + PCurrent := FCacheData.FindSuccessor(PCurrent); + end else PCurrent := Nil; // End + until (Not Assigned(PCurrent)); CheckMaxMemUsage; end; -procedure TCacheMem.SaveToCache(const ABuffer: TBytes; AStartPos: Integer; AMarkAsPendingToSave : Boolean); +procedure TCacheMem.SaveToCacheExt(const ABuffer; ASize: Integer; AStartPos: Int64; AMarkAsPendingToSave : Boolean); +var + PCurrent : PCacheMemData; + LNextStartPos, i64, LNextSize : Int64; + nBufferOffset : Int64; + PToBuffer : PByte; + nLoops : Integer; +begin + PToBuffer := @ABuffer; + PCurrent := ForceCreatePCacheMemData(AStartPos,ASize,False); + if Not Assigned(PCurrent) then raise ECacheMem.Create('ERROR DEV 20211208-01'); + // PCurrent + nLoops := 0; + LNextStartPos := AStartPos; + repeat + inc(nLoops); + + nBufferOffset := (LNextStartPos - PCurrent.startPos); + LNextSize := PCurrent.GetSize - nBufferOffset; + if (LNextStartPos + LNextSize)>(AStartPos + ASize) then begin + LNextSize := (AStartPos + ASize) - LNextStartPos; + end; + + Move(PToBuffer^,PCurrent.buffer[nBufferOffset],LNextSize); + PCurrent.MarkAsUsed(Self,PCurrent); + if (not PCurrent^.pendingToSave) and (AMarkAsPendingToSave) then begin + PCurrent^.pendingToSave := True; + FPendingToSaveBytes := FPendingToSaveBytes + Int64(PCurrent^.GetSize); + end; + inc(LNextStartPos,PCurrent.GetSize - nBufferOffset); + inc(PToBuffer,LNextSize); + if (PCurrent.GetEndPos<(AStartPos + Int64(ASize) -1)) then begin + PCurrent := FCacheData.FindSuccessor(PCurrent); + end else PCurrent := Nil; // End + until (Not Assigned(PCurrent)); + CheckMaxMemUsage; +end; + +procedure TCacheMem.SaveToCache(const ABuffer: TBytes; AStartPos: Int64; AMarkAsPendingToSave : Boolean); begin SaveToCache(ABuffer[0],Length(ABuffer),AStartPos,AMarkAsPendingToSave); end; +procedure TCacheMem.SaveToCache(const ABuffer; ASize: Integer; AStartPos: Int64; AMarkAsPendingToSave: Boolean); +begin + SaveToCacheExt(ABuffer,ASize,AStartPos,AMarkAsPendingToSave); +end; + function TCacheMem.ToString: String; -var i : Integer; +var LLines : TStrings; LPct : Double; PCurrent : PCacheMemData; @@ -642,86 +884,6 @@ function TCacheMem.ToString: String; end; end; -procedure TCacheMem.SaveToCache(const ABuffer; ASize, AStartPos: Integer; AMarkAsPendingToSave : Boolean); -var - LNewP, PCurrent, PToDelete : PCacheMemData; - LLastAddedPosition, LBytesCount : Integer; -begin - if ASize<0 then raise ECacheMem.Create(Format('Invalid save size %d',[ASize])); - if ASize=0 then Exit; - - if (FindCacheMemDataByPosition(AStartPos,PCurrent)) then begin - if (PCurrent^.GetSize - (AStartPos - PCurrent^.startPos)) >= ASize then begin - // PStart has all needed info - Move(ABuffer,PCurrent^.buffer[ AStartPos - PCurrent^.startPos ], ASize); - if (Not PCurrent^.pendingToSave) and (AMarkAsPendingToSave) then begin - PCurrent^.pendingToSave := True; - inc(FPendingToSaveBytes,PCurrent^.GetSize); - end; - PCurrent^.MarkAsUsed(Self,PCurrent); - Exit; - end; - end; - - // Will need to create a new "linar struct" because not found a linear struct previously - New( LNewP ); - try - LNewP.Clear; - SetLength(LNewP^.buffer, ASize); - LNewP.startPos := AStartPos; - LNewP^.pendingToSave := AMarkAsPendingToSave; - - LLastAddedPosition := AStartPos - 1; - while (Assigned(PCurrent)) and ( (LLastAddedPosition+1) < (LNewP^.GetEndPos) ) do begin - if (PCurrent^.GetEndPos <= LLastAddedPosition) then PCurrent := FCacheData.FindSuccessor( PCurrent ) - else if (PCurrent^.startPos > LNewP^.GetEndPos) then break - else begin - // PCurrent will be used: - if (PCurrent^.startPos <= LLastAddedPosition) then begin - // PCurrent start before, increase buffer and set startPos - SetLength(LNewP^.buffer ,Length(LNewP^.buffer) + (LLastAddedPosition - PCurrent^.startPos + 1)); - LNewP.startPos := PCurrent^.startPos; - Move(PCurrent^.buffer[ 0 ],LNewP^.buffer[ 0 ], (LLastAddedPosition - PCurrent^.startPos +1)); - end; - // At this point (LLastAddedPosition+1 = PCurrent^.startPos) - // Add available data - if PCurrent^.GetEndPos>(LNewP^.GetEndPos) then begin - // Will need to increase buffer size: - LBytesCount := (PCurrent^.GetEndPos - LNewP^.GetEndPos); - SetLength( LNewP^.buffer , LNewP^.GetSize + LBytesCount ); - Move(PCurrent^.buffer[ PCurrent^.GetSize - LBytesCount ],LNewP^.buffer[ LNewP^.GetSize - LBytesCount ], LBytesCount); - end; - - // Has been used, delete - LNewP.pendingToSave := (LNewP^.pendingToSave) or (PCurrent^.pendingToSave); - PToDelete := PCurrent; - PCurrent := FCacheData.FindSuccessor(PCurrent); - Delete( PToDelete ); - end; - end; - // At this point LNewP^.buffer startPos <= AStartPos and LNewP^.buffer Size >= ASize - Move( ABuffer, LNewP^.buffer[ (LLastAddedPosition+1) - LNewP^.startPos ], ASize ); - Except - on E:Exception do begin - LNewP.Clear; - Dispose(LNewP); - Raise; - end; - end; - - // Save new - LNewP^.MarkAsUsed(Self,LNewP); - if Not FCacheData.Add(LNewP) then raise ECacheMem.Create(Format('Inconsistent SaveToCache CacheData duplicate for %s',[LNewP^.ToString])); - Inc(FCacheDataSize,Length(LNewP^.buffer)); - Inc(FCacheDataBlocks); - // - if (LNewP^.pendingToSave) then begin - inc(FPendingToSaveBytes,LNewP^.GetSize); - end; - - CheckMaxMemUsage; -end; - { TCacheMemData } procedure TCacheMemData.Clear; @@ -814,9 +976,9 @@ procedure TCacheMemData.DoMark(const ACacheMem: TCacheMem; AMySelfPointer: PCach end; -function TCacheMemData.GetEndPos: Integer; +function TCacheMemData.GetEndPos: Int64; begin - Result := Self.startPos + Self.GetSize - 1; + Result := Self.startPos + Int64(Self.GetSize) - 1; end; function TCacheMemData.GetSize: Integer; @@ -860,22 +1022,31 @@ procedure TCacheMemStats.Clear; flushElapsedMillis := 0; freememCount := 0; freememSize := 0; + freememBlocksCount := 0; freememElaspedMillis := 0; + needDataCallsCount := 0; + needDataCallsBytes := 0; + needDataCallsMillis := 0; + saveDataCallsCount := 0; + saveDataCallsBytes := 0; + saveDataCallsMillis := 0; + deletedBlocksCount := 0; end; function TCacheMemStats.ToString: String; begin - Result := Format('CacheMemStats Flush:%d %d bytes %d millis - FreeMem:%d %d bytes %d millis',[Self.flushCount,Self.flushSize,Self.flushElapsedMillis,Self.freememCount,Self.freememSize,Self.freememElaspedMillis]); + Result := Format('CacheMemStats Reads:%d (%d bytes in %d millis) Writes:%d (%d bytes in %d millis) Deleteds:%d - Flush:%d (%d bytes) %d millis - FreeMem:%d (%d bytes %d blocks) %d millis', + [Self.needDataCallsCount, Self.needDataCallsBytes, Self.needDataCallsMillis, + Self.saveDataCallsCount, Self.saveDataCallsBytes, Self.saveDataCallsMillis, + Self.deletedBlocksCount, + Self.flushCount,Self.flushSize,Self.flushElapsedMillis, + Self.freememCount,Self.freememSize,Self.freememBlocksCount, + Self.freememElaspedMillis]); end; {$ENDIF} { TCacheMemDataTree } -function _TCacheMemDataTree_Compare(const Left, Right: PCacheMemData): Integer; -begin - Result := Left^.startPos - Right^.startPos; -end; - function TCacheMemDataTree.AreEquals(const ANode1, ANode2: PCacheMemData): Boolean; begin Result := ANode1 = ANode2; diff --git a/src/libraries/abstractmem/UFileMem.pas b/src/libraries/abstractmem/UFileMem.pas index 29e207716..43348b97a 100644 --- a/src/libraries/abstractmem/UFileMem.pas +++ b/src/libraries/abstractmem/UFileMem.pas @@ -3,7 +3,7 @@ { This file is part of AbstractMem framework - Copyright (C) 2020 Albert Molina - bpascalblockchain@gmail.com + Copyright (C) 2020-2021 Albert Molina - bpascalblockchain@gmail.com https://github.com/PascalCoinDev/ @@ -34,13 +34,26 @@ interface uses Classes, SysUtils, SyncObjs, - UAbstractBTree, UAbstractMem, UCacheMem; + UAbstractMem, UCacheMem; {$I ./ConfigAbstractMem.inc } type EFileMem = Class(Exception); + {$IFDEF ABSTRACTMEM_ENABLE_STATS} + TFileMemStats = record + ReadsCount : Integer; + WriteCount : Integer; + ReadsBytesCount : Integer; + WriteBytesCount : Integer; + IncreaseSizeCount : Integer; + IncreaseSizeBytesCount : Integer; + function ToString : String; + procedure Clear; + end; + {$ENDIF} + TFileMem = Class(TAbstractMem) private FFileStream : TFileStream; @@ -48,52 +61,104 @@ interface FFileName: String; FIsStableCache: Boolean; FIsFlushingCache : Boolean; - function OnCacheNeedDataProc(var ABuffer; AStartPos : Integer; ASize : Integer) : Boolean; - function OnCacheSaveDataProc(const ABuffer; AStartPos : Integer; ASize : Integer) : Boolean; - procedure SetMaxCacheSize(const Value: Integer); - function GetMaxCacheSize: Integer; - function GetMaxCacheDataBlocks: Integer; - procedure SetMaxCacheDataBlocks(const Value: Integer); + FIncreaseFileBytes: Int64; + {$IFDEF ABSTRACTMEM_ENABLE_STATS} + FStats : TFileMemStats; + {$ENDIF} + function OnCacheNeedDataProc(var ABuffer; AStartPos : Int64; ASize: Integer): Integer; + function OnCacheSaveDataProc(const ABuffer; AStartPos : Int64; ASize: Integer): Integer; + procedure SetMaxCacheSize(const Value: Int64); + function GetMaxCacheSize: Int64; + function GetMaxCacheDataBlocks: Int64; + procedure SetMaxCacheDataBlocks(const Value: Int64); procedure CacheIsNOTStable; inline; + function GetUseCache: Boolean; + procedure SetUseCache(const Value: Boolean); + procedure SetIncreaseFileBytes(const Value: Int64); + function GetGridCache: Boolean; + procedure SetDefaultCacheDataBlocksSize(const Value: Int64); + procedure SetGridCache(const Value: Boolean); + function GetDefaultCacheDataBlocksSize: Int64; protected function AbsoluteWrite(const AAbsolutePosition : Int64; const ABuffer; ASize : Integer) : Integer; override; function AbsoluteRead(const AAbsolutePosition : Int64; var ABuffer; ASize : Integer) : Integer; override; - procedure DoIncreaseSize(var ANextAvailablePos, AMaxAvailablePos : Integer; ANeedSize : Integer); override; + procedure DoIncreaseSize(var ANextAvailablePos, AMaxAvailablePos : Int64; ANeedSize : Integer); override; function IsAbstractMemInfoStable : Boolean; override; public Constructor Create(const AFileName : String; AReadOnly : Boolean); reintroduce; Destructor Destroy; override; - function New(AMemSize : Integer) : TAMZone; override; - procedure Write(const APosition : Integer; const ABuffer; ASize : Integer); overload; override; - function Read(const APosition : Integer; var ABuffer; ASize : Integer) : Integer; overload; override; + function New(AMemSize : TAbstractMemSize) : TAMZone; override; + function Write(const APosition : Int64; const ABuffer; ASize : Integer) : Integer; overload; override; + function Read(const APosition : Int64; var ABuffer; ASize : Integer) : Integer; overload; override; {$IFDEF ABSTRACTMEM_TESTING_MODE} // Warning: Accessing Cache is not Safe Thread protected, use LockCache/UnlockCache instead property Cache : TCacheMem read FCache; {$ENDIF} - property MaxCacheSize : Integer read GetMaxCacheSize write SetMaxCacheSize; - property MaxCacheDataBlocks : Integer read GetMaxCacheDataBlocks write SetMaxCacheDataBlocks; + procedure SetCachePerformance(AGridCache : Boolean; ADefaultCacheDataBlocksSize, AMaxCacheSize, AMaxCacheDataBlocks : Int64); + property GridCache : Boolean read GetGridCache write SetGridCache; + property DefaultCacheDataBlocksSize : Int64 read GetDefaultCacheDataBlocksSize write SetDefaultCacheDataBlocksSize; + property MaxCacheSize : Int64 read GetMaxCacheSize write SetMaxCacheSize; + property MaxCacheDataBlocks : Int64 read GetMaxCacheDataBlocks write SetMaxCacheDataBlocks; Function FlushCache : Boolean; // function LockCache : TCacheMem; procedure UnlockCache; property FileName : String read FFileName; + property UseCache : Boolean read GetUseCache write SetUseCache; + {$IFDEF ABSTRACTMEM_ENABLE_STATS} + function GetStatsReport(AClearStats : Boolean) : String; override; + {$ENDIF} + property IncreaseFileBytes : Int64 read FIncreaseFileBytes write SetIncreaseFileBytes; End; implementation +{$IFDEF ABSTRACTMEM_ENABLE_STATS} +{ TFileMemStats } + +function TFileMemStats.ToString: String; +begin + Result := Format('FileMemStats Reads:%d (%d b) Writes:%d (%d b) Increases:%d (%d b)', + [Self.ReadsCount,Self.ReadsBytesCount, + Self.WriteCount,Self.WriteBytesCount, + Self.IncreaseSizeCount,Self.IncreaseSizeBytesCount + ]); +end; + +procedure TFileMemStats.Clear; +begin + Self.ReadsCount := 0; + Self.WriteCount := 0; + Self.ReadsBytesCount := 0; + Self.WriteBytesCount := 0; + Self.IncreaseSizeCount := 0; + Self.IncreaseSizeBytesCount := 0; +end; +{$ENDIF} + { TFileMem } function TFileMem.AbsoluteRead(const AAbsolutePosition: Int64; var ABuffer; ASize: Integer): Integer; begin - FFileStream.Seek(AAbsolutePosition,soFromBeginning); + if (AAbsolutePosition<0) then raise EFileMem.Create(Format('%s.AbsoluteRead out of range %d size %d',[ClassName,AAbsolutePosition,ASize])); + FFileStream.Position := AAbsolutePosition; Result := FFileStream.Read(ABuffer,ASize); + {$IFDEF ABSTRACTMEM_ENABLE_STATS} + inc(FStats.ReadsCount); + inc(FStats.ReadsBytesCount,ASize); + {$ENDIF} end; function TFileMem.AbsoluteWrite(const AAbsolutePosition: Int64; const ABuffer; ASize: Integer): Integer; begin - FFileStream.Seek(AAbsolutePosition,soFromBeginning); + if (AAbsolutePosition<0) then raise EFileMem.Create(Format('%s.AbsoluteWrite out of range %d size %d',[ClassName,AAbsolutePosition,ASize])); + FFileStream.Position := AAbsolutePosition; Result := FFileStream.Write(ABuffer,ASize); CacheIsNOTStable; + {$IFDEF ABSTRACTMEM_ENABLE_STATS} + inc(FStats.WriteCount); + inc(FStats.WriteBytesCount,ASize); + {$ENDIF} end; procedure TFileMem.CacheIsNOTStable; @@ -110,9 +175,19 @@ constructor TFileMem.Create(const AFileName: String; AReadOnly: Boolean); var LFileMode : Integer; LReadOnly : Boolean; begin + {$IFDEF ABSTRACTMEM_ENABLE_STATS} + FStats.Clear; + FStats.ReadsCount := 0; + FStats.WriteCount := 0; + FStats.ReadsBytesCount := 0; + FStats.WriteBytesCount := 0; + FStats.IncreaseSizeCount := 0; + FStats.IncreaseSizeBytesCount := 0; + {$ENDIF} FIsStableCache := True; FIsFlushingCache := False; FFileName := AFileName; + FIncreaseFileBytes := 1024*4; // 4K by default if AReadOnly then LFileMode := fmOpenRead + fmShareDenyNone else begin if FileExists(AFileName) then LFileMode := fmOpenReadWrite else LFileMode := fmCreate; @@ -138,30 +213,43 @@ destructor TFileMem.Destroy; FreeAndNil(FCache); end; -procedure TFileMem.DoIncreaseSize(var ANextAvailablePos, AMaxAvailablePos: Integer; ANeedSize: Integer); +procedure TFileMem.DoIncreaseSize(var ANextAvailablePos, AMaxAvailablePos: Int64; ANeedSize: Integer); var LBuff : TBytes; begin if (ANeedSize<=0) And (AMaxAvailablePos<=0) then begin - FCache.Clear; + If Assigned(FCache) then FCache.Clear; FFileStream.Seek(0,soFromEnd); FFileStream.Size := 0; Exit; end; + {$IFDEF ABSTRACTMEM_ENABLE_STATS} + inc(FStats.IncreaseSizeCount); + {$ENDIF} FFileStream.Seek(0,soFromEnd); // GoTo ANextAvailablePos if (FFileStream.Position0 then begin + AMaxAvailablePos := ((((AMaxAvailablePos - 1) DIV FIncreaseFileBytes)+1) * FIncreaseFileBytes); + end; + if (FFileStream.Size(1024*1024*100)) then FIncreaseFileBytes := 0 + else FIncreaseFileBytes := Value; +end; + +procedure TFileMem.SetMaxCacheDataBlocks(const Value: Int64); begin if Not Assigned(FCache) then Exit; FLock.Acquire; @@ -261,7 +411,7 @@ procedure TFileMem.SetMaxCacheDataBlocks(const Value: Integer); End; end; -procedure TFileMem.SetMaxCacheSize(const Value: Integer); +procedure TFileMem.SetMaxCacheSize(const Value: Int64); begin if Not Assigned(FCache) then Exit; FLock.Acquire; @@ -272,12 +422,27 @@ procedure TFileMem.SetMaxCacheSize(const Value: Integer); End; end; +procedure TFileMem.SetUseCache(const Value: Boolean); +begin + FLock.Acquire; + Try + if Not Value then begin + If Not ReadOnly then FlushCache; + FreeAndNil(FCache); + end else if Not Assigned(FCache) then begin + FCache := TCacheMem.Create(OnCacheNeedDataProc,OnCacheSaveDataProc); + end; + Finally + FLock.Release; + End; +end; + procedure TFileMem.UnlockCache; begin FLock.Release; end; -procedure TFileMem.Write(const APosition: Integer; const ABuffer; ASize: Integer); +function TFileMem.Write(const APosition: Int64; const ABuffer; ASize: Integer) : Integer; begin if (Not Assigned(FCache)) Or (FIsFlushingCache) then begin inherited; diff --git a/src/libraries/abstractmem/UMemoryBTreeData.pas b/src/libraries/abstractmem/UMemoryBTreeData.pas new file mode 100644 index 000000000..2dbb8766e --- /dev/null +++ b/src/libraries/abstractmem/UMemoryBTreeData.pas @@ -0,0 +1,479 @@ +unit UMemoryBTreeData; + +{ + This file is part of AbstractMem framework + + Copyright (C) 2020-2023 Albert Molina - bpascalblockchain@gmail.com + + https://github.com/PascalCoinDev/ + + *** BEGIN LICENSE BLOCK ***** + + The contents of this files are subject to the Mozilla Public License Version + 2.0 (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL + + Software distributed under the License is distributed on an "AS IS" basis, + WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + for the specific language governing rights and limitations under the License. + + The Initial Developer of the Original Code is Albert Molina. + + See ConfigAbstractMem.inc file for more info + + ***** END LICENSE BLOCK ***** +} + +{$ifdef FPC} + {$mode DELPHI} +{$endif} +{$H+} + +interface + +uses + Classes, SysUtils, + SyncObjs, + // NOTE ABOUT FREEPASCAL (2020-03-10) + // Current version 3.0.4 does not contain valid support for Generics, using Generics from this: + // https://github.com/PascalCoinDev/PascalCoin/tree/master/src/libraries/generics.collections + // (Download and set folder as a "units include folder" in compiler options) + {$IFNDEF FPC}System.Generics.Collections,System.Generics.Defaults,{$ELSE}Generics.Collections,Generics.Defaults,{$ENDIF} + UOrderedList, UAbstractBTree; + +{$I ./ConfigAbstractMem.inc } + +{$IFDEF ABSTRACTMEM_TESTING_MODE} + {$DEFINE ABSTRACTMEM_CIRCULAR_SEARCH_PROTECTION} +{$ENDIF} + +type + EMemoryBTreeData = Class(EAbstractBTree); + + TMemoryBTreeDataAbstract = Class(TMemoryBTree) + public + type PBTreeData = ^TBTreeData; + private + var + FOnCompareBTreeDataMethod: TComparison; + protected + function DoCompareData(const ALefTBTreeData, ARighTBTreeData: Pointer): Integer; override; + // + function AddInherited(const AData: PBTreeData) : Boolean; + function DeleteInherited(const AData: PBTreeData) : Boolean; + public + constructor Create(const AOnCompareBTreeDataMethod: TComparison; AAllowDuplicates : Boolean; AOrder : Integer); reintroduce; + procedure Add(); reintroduce; + procedure Delete(); reintroduce; + function FindData(const AData: TBTreeData; var AFoundData : TBTreeData) : Boolean; overload; + function FindData(const AData: TBTreeData; var AFoundData : PBTreeData) : Boolean; overload; + function FindDataPos(const AData: TBTreeData; out ANode : TAbstractBTree.TAbstractBTreeNode; out iPos : Integer) : Boolean; overload; + function FindDataPrecessor(const AData : TBTreeData; var APrecessor : TBTreeData) : Boolean; + function FindDataSuccessor(const AData : TBTreeData; var ASuccessor : TBTreeData) : Boolean; + function FindDataLowest(out ALowest : TBTreeData) : Boolean; + function FindDataHighest(out AHighest : TBTreeData) : Boolean; + End; + + {$IFnDEF FPC} + TMemoryBTreeDataIndex = Class; + {$ENDIF} + + TMemoryBTreeData = Class(TMemoryBTreeDataAbstract) + public + private + // Ref: 20211111-1 -- TODO + // FreePascal issue: Does not allow recursive Generics... + // due to this issue (on Delphi is allowed) then I must use TList< TOjbect > instead + // last FreePascal version with this issue: 3.2.0 (will need to check on future versions) + {$IFDEF FPC} + FIndexes : TList< TObject >; + {$ELSE} + // Ref: 20211111-1 I can't use this... in Delphi it works! Not in FreePascal... SHIT! + FIndexes : TList< TMemoryBTreeDataIndex >; + {$ENDIF} + protected + procedure DisposeData(var AData : Pointer); override; + public + constructor Create(const AOnCompareBTreeDataMethod: TComparison; AAllowDuplicates : Boolean; AOrder : Integer); + destructor Destroy; override; + function CanAddData(const AData: TBTreeData) : Boolean; + function AddData(const AData: TBTreeData) : Boolean; + function DeleteData(const AData: TBTreeData) : Boolean; + function IndexesCount : Integer; + // See ref: 20211111-1 + {$IFDEF FPC} + function GetIndex(AIndex : Integer) : TObject; + {$ELSE} + function GetIndex(AIndex : Integer) : TMemoryBTreeDataIndex; + {$ENDIF} + procedure CheckConsistency; override; + procedure AddIndex(const AOnCompareBTreeDataMethod: TComparison; AAllowDuplicates : Boolean); + End; + + TMemoryBTreeDataIndex = Class(TMemoryBTreeDataAbstract) + private + FOwner : TMemoryBTreeData; + protected + public + Property Owner : TMemoryBTreeData read FOwner; + constructor Create(AOwner : TMemoryBTreeData; + const AOnCompareBTreeDataMethod: TComparison; AAllowDuplicates : Boolean); + destructor Destroy; override; + End; + + +implementation + +uses UAbstractMem; + +{ TMemoryBTreeDataAbstract } + +procedure TMemoryBTreeDataAbstract.Add; +begin + raise EMemoryBTreeData.Create('Invalid use of Abstract function '+ClassName+'.Add'); +end; + +function TMemoryBTreeDataAbstract.AddInherited(const AData: PBTreeData): Boolean; +begin + Result := inherited Add(AData); +end; + +constructor TMemoryBTreeDataAbstract.Create( + const AOnCompareBTreeDataMethod: TComparison; + AAllowDuplicates: Boolean; AOrder: Integer); +begin + FOnCompareBTreeDataMethod := AOnCompareBTreeDataMethod; + inherited Create(OnCompareDataMethod,AAllowDuplicates,AOrder); +end; + +procedure TMemoryBTreeDataAbstract.Delete; +begin + raise EMemoryBTreeData.Create('Invalid use of Abstract function '+ClassName+'.Delete'); +end; + +function TMemoryBTreeDataAbstract.DeleteInherited( + const AData: PBTreeData): Boolean; +begin + Result := inherited Delete(AData); +end; + +function TMemoryBTreeDataAbstract.DoCompareData( + const ALefTBTreeData, ARighTBTreeData: Pointer): Integer; +begin + if ALefTBTreeData=ARighTBTreeData then Result := 0 + else Result := FOnCompareBTreeDataMethod(PBTreeData(ALefTBTreeData)^,PBTreeData(ARighTBTreeData)^); +end; + +function TMemoryBTreeDataAbstract.FindData(const AData: TBTreeData; + var AFoundData: PBTreeData): Boolean; +var P : PBTreeData; + node : TAbstractBTreeNode; + iPos : Integer; +begin + new(P); + try + P^ := AData; + if Find(P,node,iPos) then begin + Result := True; + AFoundData := PBTreeData(node.data[iPos]); + end else Result := False; + finally + Dispose(P); + end; +end; + +function TMemoryBTreeDataAbstract.FindData(const AData: TBTreeData; + var AFoundData: TBTreeData): Boolean; +var P : PBTreeData; +begin + if FindData(AData,P) then begin + AFoundData := P^; + Result := True; + end else Result := False; +end; + +function TMemoryBTreeDataAbstract.FindDataHighest( + out AHighest: TBTreeData): Boolean; +var P : Pointer; +begin + if FindHighest(P) then begin + Result := True; + AHighest := PBTreeData(P)^; + end else Result := False; +end; + +function TMemoryBTreeDataAbstract.FindDataLowest( + out ALowest: TBTreeData): Boolean; +var P : Pointer; +begin + if FindLowest(P) then begin + Result := True; + ALowest := PBTreeData(P)^; + end else Result := False; +end; + +function TMemoryBTreeDataAbstract.FindDataPos( + const AData: TBTreeData; + out ANode: TAbstractBTree.TAbstractBTreeNode; + out iPos: Integer): Boolean; +var P : PBTreeData; +begin + new(P); + try + P^ := AData; + Result := Find(P,ANode,iPos); + finally + Dispose(P); + end; +end; + +function TMemoryBTreeDataAbstract.FindDataPrecessor( + const AData: TBTreeData; var APrecessor: TBTreeData): Boolean; +var P : PBTreeData; + PFound : Pointer; +begin + new(P); + try + P^ := AData; + Result := FindPrecessor(P,PFound); + if Result then APrecessor := PBTreeData(PFound)^; + finally + Dispose(P); + end; +end; + +function TMemoryBTreeDataAbstract.FindDataSuccessor( + const AData: TBTreeData; var ASuccessor: TBTreeData): Boolean; +var P : PBTreeData; + PFound : Pointer; +begin + new(P); + try + P^ := AData; + Result := FindSuccessor(P,PFound); + if Result then ASuccessor := PBTreeData(PFound)^; + finally + Dispose(P); + end; +end; + +{ TMemoryBTreeData } + +function TMemoryBTreeData.AddData(const AData: TBTreeData): Boolean; +var iPos : Integer; + LNode : TAbstractBTreeNode; + i : Integer; + LBTreeIndex : TMemoryBTreeDataIndex; + P : PBTreeData; +begin + Lock; + Try + Result := True; + New(P); + Try + P^ := AData; + i := 0; + while (Result) and (i(FIndexes.Items[i]); + if (Not LBTreeIndex.AllowDuplicates) then begin + Result := Not LBTreeIndex.Find(P,LNode,iPos); + end; + inc(i); + end; + if Result then begin + Result := AddInherited(P); + if Result then begin + for i := 0 to FIndexes.Count-1 do begin + LBTreeIndex := TMemoryBTreeDataIndex(FIndexes.Items[i]); + if Not LBTreeIndex.AddInherited(P) then begin + raise EMemoryBTreeData.Create(Format('Fatal error adding index %d/%d', + [i+1,FIndexes.Count])); + end; + end; + end; + end; + Finally + if Not Result then begin + // Dispose + Dispose(P); + end; + End; + Finally + Unlock; + End; +end; + +procedure TMemoryBTreeData.AddIndex( + const AOnCompareBTreeDataMethod: TComparison; + AAllowDuplicates: Boolean); +var Lindex : TMemoryBTreeDataIndex; +begin + Lock; + try + Lindex := TMemoryBTreeDataIndex.Create(Self,AOnCompareBTreeDataMethod,AAllowDuplicates); + finally + Unlock; + end; +end; + +function TMemoryBTreeData.CanAddData( + const AData: TBTreeData): Boolean; +var iPos : Integer; + LNode : TAbstractBTreeNode; + i : Integer; + LBTreeIndex : TMemoryBTreeDataIndex; + P : PBTreeData; +begin + Result := True; + New(P); + Try + P^ := AData; + i := 0; + while (Result) and (i(FIndexes.Items[i]); + if (Not LBTreeIndex.AllowDuplicates) then begin + Result := Not LBTreeIndex.Find(P,LNode,iPos); + end; + inc(i); + end; + if (Result) And (Not AllowDuplicates) then begin + Result := Not Find(P,LNode,iPos); + end; + Finally + Dispose(P); + End; +end; + +procedure TMemoryBTreeData.CheckConsistency; +var i, nCount : Integer; + LBTreeIndex : TMemoryBTreeDataIndex; + LSearch : PBTreeData; + LFound : TBTreeData; +begin + inherited; + nCount := 0; + if FindDataLowest(LFound) then begin + inc(nCount); + for i := 0 to FIndexes.Count-1 do begin + LBTreeIndex := TMemoryBTreeDataIndex(FIndexes.Items[i]); + if Not LBTreeIndex.FindData(LFound,LSearch) then raise EMemoryBTreeData.Create(Format('Consistency error data %d not found on index %d/%d',[nCount, i+1,FIndexes.Count])); + end; + while FindDataSuccessor(LSearch^,LFound) do begin + inc(nCount); + for i := 0 to FIndexes.Count-1 do begin + LBTreeIndex := TMemoryBTreeDataIndex(FIndexes.Items[i]); + if Not LBTreeIndex.FindData(LFound,LSearch) then raise EMemoryBTreeData.Create(Format('Consistency error data %d not found on index %d/%d',[nCount, i+1,FIndexes.Count])); + end; + end; + end; + for i := 0 to FIndexes.Count-1 do begin + LBTreeIndex := TMemoryBTreeDataIndex(FIndexes.Items[i]); + if (LBTreeIndex.Count > Self.Count) then raise EMemoryBTreeData.Create(Format('Consistency error on index %d/%d count %d > %d',[i+1,FIndexes.Count,LBTreeIndex.Count,Self.Count])); + LBTreeIndex.CheckConsistency; + end; + +end; + +constructor TMemoryBTreeData.Create( + const AOnCompareBTreeDataMethod: TComparison; + AAllowDuplicates: Boolean; AOrder: Integer); +begin + {$IFDEF FPC} + FIndexes := TList< TObject >.Create; + {$ELSE} + FIndexes := TList< TMemoryBTreeDataIndex >.Create; + {$ENDIF} + inherited Create(AOnCompareBTreeDataMethod,AAllowDuplicates,AOrder); +end; + +function TMemoryBTreeData.DeleteData( + const AData: TBTreeData): Boolean; +var i : Integer; + LBTreeIndex : TMemoryBTreeDataIndex; + PIndex : Pointer; + PBData : PBTreeData; +begin + Lock; + Try + if FindData(AData,PBData) then begin + // Delete from indexes + for i := 0 to FIndexes.Count-1 do begin + LBTreeIndex := TMemoryBTreeDataIndex(FIndexes.Items[i]); + if Not LBTreeIndex.FindExt(PBData,PIndex) then begin + // Fatal error. Not found + raise EMemoryBTreeData.Create(Format('Fatal error Data not found in index %d/%d to Delete',[i+1,Findexes.Count])); + end; + if not LBTreeIndex.DeleteInherited(PIndex) then begin + raise EMemoryBTreeData.Create(Format('Fatal error Data not deleted in index %d/%d',[i+1,Findexes.Count])); + end; + end; + // + DeleteInherited(PBData); + Dispose(PBData); + Result := True; + End else Result := False; + Finally + Unlock; + End; +end; + +destructor TMemoryBTreeData.Destroy; +var i : Integer; + LBTreeIndex : TMemoryBTreeDataIndex; +begin + EraseTree; + for i := FIndexes.Count-1 downto 0 do begin + LBTreeIndex := TMemoryBTreeDataIndex(FIndexes.Items[i]); + LBTreeIndex.Free; + end; + FreeAndNil(FIndexes); + inherited; +end; + +procedure TMemoryBTreeData.DisposeData(var AData: Pointer); +var P : PBTreeData; +begin + inherited; + P := AData; + Dispose(P); + AData := Nil; +end; + +{$IFDEF FPC} +function TMemoryBTreeData.GetIndex(AIndex : Integer) : TObject; +{$ELSE} +function TMemoryBTreeData.GetIndex(AIndex : Integer) : TMemoryBTreeDataIndex; +{$ENDIF} +begin + Result := FIndexes.Items[AIndex]; +end; + +function TMemoryBTreeData.IndexesCount: Integer; +begin + Result := FIndexes.Count; +end; + +{ TMemoryBTreeDataIndex } + +constructor TMemoryBTreeDataIndex.Create( + AOwner: TMemoryBTreeData; + const AOnCompareBTreeDataMethod: TComparison; + AAllowDuplicates: Boolean); +begin + FOwner := AOwner; + AOwner.FIndexes.Add(Self); + inherited Create(AOnCompareBTreeDataMethod,AAllowDuplicates,AOwner.Order); +end; + +destructor TMemoryBTreeDataIndex.Destroy; +begin + FOwner.FIndexes.Remove(Self); + inherited; +end; + +initialization + +finalization + +end. diff --git a/src/libraries/abstractmem/UOrderedList.pas b/src/libraries/abstractmem/UOrderedList.pas index abe35b6ea..b198d16f3 100644 --- a/src/libraries/abstractmem/UOrderedList.pas +++ b/src/libraries/abstractmem/UOrderedList.pas @@ -3,7 +3,7 @@ { This file is part of AbstractMem framework - Copyright (C) 2020 Albert Molina - bpascalblockchain@gmail.com + Copyright (C) 2020-2021 Albert Molina - bpascalblockchain@gmail.com https://github.com/PascalCoinDev/ @@ -42,7 +42,6 @@ interface {$I ./ConfigAbstractMem.inc } - type {$IFDEF FPC} TComparison = function(const Left, Right: T): Integer; @@ -70,6 +69,7 @@ interface Function IndexOf(const AValue: T) : Integer; property AllowDuplicates : Boolean read FAllowDuplicates; property OnComparer : TComparison read FOnCompare; + property Items[index:Integer] : T read Get; default; End; // Default Ordered functions @@ -234,3 +234,9 @@ initialization finalization end. + + + + + + diff --git a/src/libraries/abstractmem/tests/AbstractMem.Tests.dpr b/src/libraries/abstractmem/tests/AbstractMem.Tests.dpr new file mode 100644 index 000000000..4b97c7917 --- /dev/null +++ b/src/libraries/abstractmem/tests/AbstractMem.Tests.dpr @@ -0,0 +1,81 @@ +program AbstractMem.Tests; + +{$IFDEF FPC} + {$MODE Delphi} +{$ENDIF} + +// Enable for Console tests +{.$DEFINE CONSOLE_TESTRUNNER} + +{$IFDEF CONSOLE_TESTRUNNER} + {$APPTYPE CONSOLE} +{$ENDIF} + +uses + {$IFDEF FPC} + {$IFDEF CONSOLE_TESTRUNNER} + Classes, + {$ELSE} + Interfaces, + Forms, GuiTestRunner, + {$ENDIF } + {$ELSE} + Forms, + TestFramework, + GUITestRunner, + TextTestRunner, + {$ENDIF } + UAbstractAVLTree in '..\UAbstractAVLTree.pas', + UAbstractBTree in '..\UAbstractBTree.pas', + UAbstractMem in '..\UAbstractMem.pas', + UAbstractMemBTree in '..\UAbstractMemBTree.pas', + UAbstractMemTList in '..\UAbstractMemTList.pas', + UMemoryBTreeData in '..\UMemoryBTreeData.pas', + UAVLCache in '..\UAVLCache.pas', + UCacheMem in '..\UCacheMem.pas', + UFileMem in '..\UFileMem.pas', + UOrderedList in '..\UOrderedList.pas', + UAbstractStorage in '..\UAbstractStorage.pas', + UCacheMem.Tests in 'src\UCacheMem.Tests.pas', + UAbstractMem.Tests in 'src\UAbstractMem.Tests.pas', + UAbstractBTree.Tests in 'src\UAbstractBTree.Tests.pas', + UAbstractMemBTree.Tests in 'src\UAbstractMemBTree.Tests.pas', + UAbstractMemTList.Tests in 'src\UAbstractMemTList.Tests.pas', + UFileMem.Tests in 'src\UFileMem.Tests.pas', + UAbstractStorage.Tests in 'src\UAbstractStorage.Tests.pas', + UMemoryBTreeData.Tests in 'src\UMemoryBTreeData.Tests.pas'; + +{$IF Defined(FPC) and (Defined(CONSOLE_TESTRUNNER))} +type + TFreePascalConsoleRunner = class(TTestRunner) + protected + end; +var + Application : TFreePascalConsoleRunner; +{$ENDIF} + +begin + {$IFNDEF FPC} + System.ReportMemoryLeaksOnShutdown := True; + {$ENDIF} + + {$IF Defined(FPC) and (Defined(CONSOLE_TESTRUNNER))} + Application := TFreePascalConsoleRunner.Create(nil); + {$ENDIF} + + Application.Title:='Test'; + Application.Initialize; + {$IFDEF FPC} + {$IF Not Defined(CONSOLE_TESTRUNNER)} + Application.CreateForm(TGuiTestRunner, TestRunner); + {$ENDIF} + Application.Run; + {$ELSE} + if IsConsole then + TextTestRunner.RunRegisteredTests + else + GUITestRunner.RunRegisteredTests; + {$ENDIF} +end. + + diff --git a/src/libraries/abstractmem/tests/AbstractMem.Tests.lpi b/src/libraries/abstractmem/tests/AbstractMem.Tests.lpi new file mode 100644 index 000000000..f8e0d66d1 --- /dev/null +++ b/src/libraries/abstractmem/tests/AbstractMem.Tests.lpi @@ -0,0 +1,149 @@ + + + + + + + + + + + + <ResourceType Value="res"/> + <UseXPManifest Value="True"/> + </General> + <BuildModes Count="1"> + <Item1 Name="Default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + <UseFileFilters Value="True"/> + </PublishOptions> + <RunParams> + <FormatVersion Value="2"/> + </RunParams> + <RequiredPackages Count="3"> + <Item1> + <PackageName Value="fpcunittestrunner"/> + </Item1> + <Item2> + <PackageName Value="LCL"/> + </Item2> + <Item3> + <PackageName Value="FCL"/> + </Item3> + </RequiredPackages> + <Units Count="18"> + <Unit0> + <Filename Value="AbstractMem.Tests.dpr"/> + <IsPartOfProject Value="True"/> + </Unit0> + <Unit1> + <Filename Value="..\UAbstractAVLTree.pas"/> + <IsPartOfProject Value="True"/> + </Unit1> + <Unit2> + <Filename Value="..\UAbstractBTree.pas"/> + <IsPartOfProject Value="True"/> + </Unit2> + <Unit3> + <Filename Value="..\UAbstractMem.pas"/> + <IsPartOfProject Value="True"/> + </Unit3> + <Unit4> + <Filename Value="..\UAbstractMemBTree.pas"/> + <IsPartOfProject Value="True"/> + </Unit4> + <Unit5> + <Filename Value="..\UAbstractMemTList.pas"/> + <IsPartOfProject Value="True"/> + </Unit5> + <Unit6> + <Filename Value="..\UAVLCache.pas"/> + <IsPartOfProject Value="True"/> + </Unit6> + <Unit7> + <Filename Value="..\UCacheMem.pas"/> + <IsPartOfProject Value="True"/> + </Unit7> + <Unit8> + <Filename Value="..\UFileMem.pas"/> + <IsPartOfProject Value="True"/> + </Unit8> + <Unit9> + <Filename Value="..\UOrderedList.pas"/> + <IsPartOfProject Value="True"/> + </Unit9> + <Unit10> + <Filename Value="src\UCacheMem.Tests.pas"/> + <IsPartOfProject Value="True"/> + </Unit10> + <Unit11> + <Filename Value="src\UAbstractMem.Tests.pas"/> + <IsPartOfProject Value="True"/> + </Unit11> + <Unit12> + <Filename Value="src\UAbstractBTree.Tests.pas"/> + <IsPartOfProject Value="True"/> + </Unit12> + <Unit13> + <Filename Value="src\UAbstractMemBTree.Tests.pas"/> + <IsPartOfProject Value="True"/> + </Unit13> + <Unit14> + <Filename Value="src\UFileMem.Tests.pas"/> + <IsPartOfProject Value="True"/> + </Unit14> + <Unit15> + <Filename Value="src\UAbstractMemTList.Tests.pas"/> + <IsPartOfProject Value="True"/> + </Unit15> + <Unit16> + <Filename Value="..\UMemoryBTreeData.pas"/> + <IsPartOfProject Value="True"/> + </Unit16> + <Unit17> + <Filename Value="src\UMemoryBTreeData.Tests.pas"/> + <IsPartOfProject Value="True"/> + </Unit17> + </Units> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <SearchPaths> + <IncludeFiles Value="..;src;$(ProjOutDir)"/> + <OtherUnitFiles Value="..;src"/> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Parsing> + <SyntaxOptions> + <SyntaxMode Value="Delphi"/> + <IncludeAssertionCode Value="True"/> + </SyntaxOptions> + </Parsing> + <Linking> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + <Other> + <CustomOptions Value="-dBorland -dVer150 -dDelphi7 -dCompiler6_Up -dPUREPASCAL"/> + </Other> + </CompilerOptions> + <Debugging> + <Exceptions Count="3"> + <Item1> + <Name Value="EAbort"/> + </Item1> + <Item2> + <Name Value="ECodetoolError"/> + </Item2> + <Item3> + <Name Value="EFOpenError"/> + </Item3> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/src/libraries/abstractmem/tests/src/UAbstractBTree.Tests.pas b/src/libraries/abstractmem/tests/src/UAbstractBTree.Tests.pas new file mode 100644 index 000000000..cb8dab665 --- /dev/null +++ b/src/libraries/abstractmem/tests/src/UAbstractBTree.Tests.pas @@ -0,0 +1,396 @@ +unit UAbstractBTree.Tests; + +{$IFDEF FPC} + {$MODE Delphi} +{$ENDIF} + +interface + +uses + SysUtils, + {$IFDEF FPC} + fpcunit, testutils, testregistry, + {$ELSE} + TestFramework, + {$ENDIF} + UAbstractBTree, UOrderedList, UAbstractMem; + +type + + TIntegerBTree = Class( TMemoryBTree<Integer> ) + private + protected + public + constructor Create(AAllowDuplicates : Boolean; AOrder: Integer); + function NodeDataToString(const AData : Integer) : String; override; + End; + + + TestTAbstractBTree = class(TTestCase) + strict private + public + procedure SetUp; override; + procedure TearDown; override; + procedure TestInfinite(AOrder : Integer); + published + procedure Test_duplicate; + procedure TestInsert; + procedure TestDelete; + procedure TestInfiniteOrder_3; + procedure TestInfiniteOrder_4; + procedure TestInfiniteOrder_5; + procedure TestInfiniteOrder_6; + procedure TestInfiniteOrder_7; + procedure TestPrecessorSuccessor; + procedure TestPrecessorSuccessor_Duplicates; + end; + +implementation + +{ TIntegerBTree } + +constructor TIntegerBTree.Create(AAllowDuplicates: Boolean; AOrder: Integer); +begin + inherited Create(TComparison_Integer,AAllowDuplicates,AOrder); +end; + +function TIntegerBTree.NodeDataToString(const AData: Integer): String; +begin + Result := AData.ToString; +end; + +{ TestTAbstractBTree } + +procedure TestTAbstractBTree.SetUp; +begin +end; + +procedure TestTAbstractBTree.TearDown; +begin +end; + +procedure TestTAbstractBTree.TestInfinite(AOrder : Integer); +var Lbt : TIntegerBTree; + intValue, nRounds, nAdds, nDeletes, i : Integer; + Lnode : TIntegerBTree.TAbstractBTreeNode; +begin + {$IFDEF FPC} + Randomize; + {$ELSE} + RandomizeProc(0); + {$ENDIF} + nRounds := 0; + nAdds := 0; + nDeletes := 0; + Lbt := TIntegerBTree.Create(True,AOrder); + try + Lbt.CircularProtection := (AOrder MOD 2)=0; + repeat + inc(nRounds); + intValue := Random(AOrder * 100); + if Random(2)=0 then begin + if (Lbt.Add(intValue)) then begin + inc(nAdds); + end; + end else begin + if Lbt.Delete(intValue) then begin + inc(nDeletes); + end; + end; + if Random(100)=0 then begin + Lbt.CheckConsistency; + end; + until (nRounds>=AOrder * 10000); + Lbt.CheckConsistency; + // Delete mode + while Lbt.Count>0 do begin + Lnode := Lbt.Root; + while (Not Lnode.IsLeaf) and (Random(5)>0) do begin + Lnode := Lbt.GetNode(Lnode.childs[Random(Lnode.Count)+1]); + end; + Lbt.Delete(Lnode.data[Random(Lnode.Count)]); + if Random(100)=0 then begin + Lbt.CheckConsistency; + end; + end; + Lbt.CheckConsistency; + // Try to re-use + for i := 1 to AOrder do begin + intValue := Random(AOrder * 100); + Assert(Lbt.Add(intValue),Format('Cannot re-use %d/%d and add %d',[i,AOrder,intValue])); + Lbt.CheckConsistency; + end; + finally + Lbt.Free; + end; + +end; + +procedure TestTAbstractBTree.TestInfiniteOrder_3; +begin + TestInfinite(3); +end; + +procedure TestTAbstractBTree.TestInfiniteOrder_4; +begin + TestInfinite(4); +end; + +procedure TestTAbstractBTree.TestInfiniteOrder_5; +begin + TestInfinite(5); +end; + +procedure TestTAbstractBTree.TestInfiniteOrder_6; +begin + TestInfinite(6); +end; + +procedure TestTAbstractBTree.TestInfiniteOrder_7; +begin + TestInfinite(7); +end; + +procedure TestTAbstractBTree.TestInsert; +var Lbt : TIntegerBTree; + Lorder, i, intValue : Integer; +begin + for Lorder := 3 to 5 do begin + Lbt := TIntegerBTree.Create(False,Lorder); + try + i := 1; + repeat + intValue := i; + inc(i); + Lbt.Add(intValue); + Lbt.CheckConsistency; + until Lbt.Height>6; + finally + Lbt.Free; + end; + end; + for Lorder := 3 to 5 do begin + Lbt := TIntegerBTree.Create(False,Lorder); + try + i := 10000; + repeat + intValue := i; + dec(i); + Lbt.Add(intValue); + Lbt.CheckConsistency; + until Lbt.Height>6; + finally + Lbt.Free; + end; + end; + for Lorder := 3 to 5 do begin + Lbt := TIntegerBTree.Create(False,Lorder); + try + repeat + intValue := Random(50000); + Lbt.Add(intValue); + Lbt.CheckConsistency; + until Lbt.Height>6; + finally + Lbt.Free; + end; + end; +end; + +procedure TestTAbstractBTree.TestPrecessorSuccessor; +var Lbt : TIntegerBTree; + Lorder : Integer; + i, intValue, valMin, valMax, Lregs : Integer; + +begin + for Lorder := 3 to 7 do begin + Lbt := TIntegerBTree.Create(False,Lorder); + try + Lbt.CircularProtection := (Lorder MOD 2)=0; + valMin := 1; + intValue :=valMin; + Lregs := 0; + while Lbt.Height<Lorder+1 do begin + Lbt.Add(intValue); + valMax := intValue; + inc(intValue); + inc(Lregs); + end; + Assert(Lbt.FindLowest(i),'Find lowest'); + Assert(i=valMin,Format('Lowest <> %d',[valMin])); + Assert(Lbt.FindHighest(i),'Find highest'); + Assert(i=valMax,Format('Highest <> %d',[valMax])); + Lbt.FindLowest(intValue); + i := 1; + while (Lbt.FindSuccessor(intValue,intValue)) do begin + inc(i); + end; + Assert(intValue=valMax,Format('Successor %d<>%d',[intValue,valMax])); + Assert(i=Lregs,Format('Succcessor count %d %d',[i,Lregs])); + Lbt.FindHighest(intValue); + i := 1; + while (Lbt.FindPrecessor(intValue,intValue)) do begin + inc(i); + end; + Assert(intValue=valMin,Format('Precessor %d<>%d',[intValue,valMin])); + Assert(i=Lregs,Format('Precessor count %d %d',[i,Lregs])); + + finally + Lbt.Free; + end; + + end; +end; + +procedure TestTAbstractBTree.TestPrecessorSuccessor_Duplicates; +var Lbt : TIntegerBTree; + Lorder, + i, intValue, valMin, valMax, Lregs : Integer; +begin + for Lorder := 3 to 7 do begin + Lbt := TIntegerBTree.Create(True,Lorder); + try + Lbt.CircularProtection := (Lorder MOD 2)=0; + valMin := 1; + intValue :=valMin; + Lregs := 0; + while Lbt.Height<Lorder+1 do begin + Lbt.Add(intValue); + valMax := intValue; + if (Lregs MOD Lorder)=0 then inc(intValue); + inc(Lregs); + end; + Assert(Lbt.FindLowest(i),'Find lowest'); + Assert(i=valMin,Format('Lowest <> %d',[valMin])); + Assert(Lbt.FindHighest(i),'Find highest'); + Assert(i=valMax,Format('Highest <> %d',[valMax])); + Lbt.FindLowest(intValue); + i := 1; + while (Lbt.FindSuccessor(intValue,intValue)) do begin + inc(i); + end; + Assert(intValue=valMax,Format('Successor %d<>%d',[intValue,valMax])); + Lbt.FindHighest(intValue); + i := 1; + while (Lbt.FindPrecessor(intValue,intValue)) do begin + inc(i); + end; + Assert(intValue=valMin,Format('Precessor %d<>%d',[intValue,valMin])); + finally + Lbt.Free; + end; + + end; +end; + +procedure TestTAbstractBTree.Test_duplicate; +var Lbt : TIntegerBTree; + Lorder, i, intValue : Integer; + LLastTree,LCurrentTree : String; + + procedure DoInsert(AValue : Integer); + begin + Lbt.Add(AValue); + end; + + procedure DoDelete(AValue : Integer); + begin + Lbt.Delete(AValue); + end; + +begin + {$IFDEF FPC} + Randomize; + {$ELSE} + RandomizeProc(0); + {$ENDIF} + for Lorder := 3 to 7 do begin + Lbt := TIntegerBTree.Create(True,Lorder); + try + LLastTree := ''; + LCurrentTree := ''; + i :=1; + while Lbt.Height<Lorder+1 do begin + intValue := Random(100); + DoInsert(intValue); + inc(i); + end; + + LCurrentTree := Lbt.BTreeToString; + Lbt.CheckConsistency; + + i := 0; + + // Tree is ready to delete + while (Lbt.Count>0) do begin + Lbt.FindHighest(i); + intValue := Random(i+1); + DoDelete(intValue); + end; + LCurrentTree := Lbt.BTreeToString; + Lbt.CheckConsistency; + finally + Lbt.Free; + end; + + end; +end; + +procedure TestTAbstractBTree.TestDelete; +var Lbt : TIntegerBTree; + Lorder, i, intValue : Integer; + LLastTree, LCurrentTree : String; + + procedure DoDelete(AValue : Integer); + begin + Lbt.Delete(AValue); + LCurrentTree := Lbt.BTreeToString; + Lbt.CheckConsistency; + LLastTree := LCurrentTree; + end; + +begin + for Lorder := 3 to 6 do begin + Lbt := TIntegerBTree.Create(False,Lorder); + try + LLastTree := ''; + LCurrentTree := ''; + i :=1; + while Lbt.Height<Lorder+1 do begin + intValue := i; + Lbt.Add(intValue); + inc(i); + end; + + LCurrentTree := Lbt.BTreeToString; + Lbt.CheckConsistency; + i := 0; + + DoDelete(1); + DoDelete(13); + DoDelete(8); + DoDelete(4); + DoDelete(6); + DoDelete(5); + DoDelete(12); + DoDelete(14); + DoDelete(9); + + // Tree is ready to delete + while (Lbt.Count>0) do begin + inc(i); + Lbt.FindHighest(intValue); + intValue := Random(intValue)+1; + DoDelete(intValue); + end; + finally + Lbt.Free; + end; + + end; +end; + + +initialization + RegisterTest(TestTAbstractBTree{$IFNDEF FPC}.Suite{$ENDIF}); +end. diff --git a/src/libraries/abstractmem/tests/src/UAbstractMem.Tests.pas b/src/libraries/abstractmem/tests/src/UAbstractMem.Tests.pas new file mode 100644 index 000000000..6551d9ee5 --- /dev/null +++ b/src/libraries/abstractmem/tests/src/UAbstractMem.Tests.pas @@ -0,0 +1,104 @@ +unit UAbstractMem.Tests; + +{$IFDEF FPC} + {$MODE Delphi} +{$ENDIF} + +interface + + uses + SysUtils, classes, + {$IFDEF FPC} + fpcunit, testutils, testregistry, + {$ELSE} + TestFramework, + {$ENDIF} + UCacheMem, UFileMem, UAbstractMem, UAbstractBTree, UAbstractMemTList, + UOrderedList + {$IFNDEF FPC},System.Generics.Collections,System.Generics.Defaults{$ELSE},Generics.Collections,Generics.Defaults{$ENDIF}; + type + // Test methods for class TCalc + TestTAbstractMem = class(TTestCase) + strict private + public + procedure SetUp; override; + procedure TearDown; override; + procedure Test_MemLeaks(AAbstractMem: TAbstractMem); + published + procedure Test_ClearContent; + procedure Test_MemLeaksReuse; + end; + +implementation + +procedure TestTAbstractMem.SetUp; +begin +end; + +procedure TestTAbstractMem.TearDown; +begin +end; + +procedure TestTAbstractMem.Test_ClearContent; +var LAM : TAbstractMem; +begin + LAM := TMem.Create(0,False); + try + LAM.ClearContent(False,4); // Init + LAM.ClearContent(True,16); // Init + LAM.CheckConsistency; + finally + LAM.Free; + end; +end; + + +procedure TestTAbstractMem.Test_MemLeaks(AAbstractMem: TAbstractMem); +var + LAMs : TList<TAMZone>; + i,j, loops : Integer; +begin + LAMs := TList<TAMZone>.Create; + Try + for loops := 1 to 2 do begin + + LAMs.Clear; + + for j := 1 to 10000 do begin + LAMs.Add( AAbstractMem.New(Random(1000)+10) ); + end; + + // + for i := 0 to LAMs.Count-1 do begin + AAbstractMem.Dispose( LAMs.Items[i] ); + end; + + AAbstractMem.CheckConsistency; + end; + + Finally + LAMs.Free; + End; +end; + +procedure TestTAbstractMem.Test_MemLeaksReuse; +var LAM : TAbstractMem; +begin + RandSeed := 0; + LAM := TMem.Create(0,False); + try + LAM.Initialize(False,4); + Test_MemLeaks(LAM); + LAM.Initialize(True,4); + Test_MemLeaks(LAM); + LAM.Initialize(True,160); + Test_MemLeaks(LAM); + LAM.Initialize(True,256); + finally + LAM.Free; + end; +end; + +initialization + RegisterTest(TestTAbstractMem{$IFNDEF FPC}.Suite{$ENDIF}); +end. diff --git a/src/libraries/abstractmem/tests/src/UAbstractMemBTree.Tests.pas b/src/libraries/abstractmem/tests/src/UAbstractMemBTree.Tests.pas new file mode 100644 index 000000000..a738ea676 --- /dev/null +++ b/src/libraries/abstractmem/tests/src/UAbstractMemBTree.Tests.pas @@ -0,0 +1,657 @@ +unit UAbstractMemBTree.Tests; + +{$IFDEF FPC} + {$MODE Delphi} +{$ENDIF} + +interface + +uses + SysUtils, Classes, + {$IFDEF FPC} + fpcunit, testutils, testregistry, + {$ELSE} + TestFramework, + {$ENDIF} + {$IFNDEF FPC}System.Generics.Collections,System.Generics.Defaults,{$ELSE}Generics.Collections,Generics.Defaults,{$ENDIF} + UAbstractMem, UAbstractBTree.Tests, + UAbstractBTree, UOrderedList, UAbstractMemBTree; + +type + TAbstractMemBTreeExampleInteger = Class(TAbstractMemBTree) + protected + procedure DisposeData(var AData : TAbstractMemPosition); override; + public + function NodeDataToString(const AData : TAbstractMemPosition) : String; override; + End; + + TAbstractMemBTreeExampleString = Class(TAbstractMemBTreeData<String>) + protected + function LoadData(const APosition : TAbstractMemPosition) : String; override; + function SaveData(const AData : String) : TAMZone; override; + function GetCopyOfData(Const AData : String) : String; override; + public + function NodeDataToString(const AData : TAbstractMemPosition) : String; override; + End; + + TAbstractMemBTreeDataExampleInteger = Class(TAbstractMemBTreeData<Integer>) + protected + function LoadData(const APosition : TAbstractMemPosition) : Integer; override; + function SaveData(const AData : Integer) : TAMZone; override; + public + function NodeDataToString(const AData : TAbstractMemPosition) : String; override; + End; + + TestTAbstractMemBTree = class(TTestCase) + strict private + public + procedure SetUp; override; + procedure TearDown; override; + procedure TestInfiniteExt(AMemUnitsSize, AOrder : Integer; AAllowDuplicates : Boolean; A64Bits : Boolean); + procedure TestInfinite_Integer(AMemUnitsSize, AOrder: Integer; AAllowDuplicates : Boolean; A64Bits : Boolean); + procedure DoCheckAbstractMem(AAbstractMem : TAbstractMem; AUsedBytes : Integer); + published + procedure TestInfinite_TAbstractMemBTree; + procedure TestInfinite_TAbstractMemBTreeData; + procedure Test_FindExt_TAbstractMemBTree; + procedure Test_FindData_TAbstractMemBTreeData; + end; + +implementation + +{ TAbstractMemBTreeExampleInteger } + +procedure TAbstractMemBTreeExampleInteger.DisposeData(var AData: TAbstractMemPosition); +begin + // NOTE: Nothing to do NEITHER to inherit from ancestor +end; + +function TAbstractMemBTreeExampleInteger.NodeDataToString(const AData: TAbstractMemPosition): String; +begin + Result := IntToStr(AData); +end; + +{ TAbstractMemBTreeExampleString } + +function TAbstractMemBTreeExampleString.GetCopyOfData(const AData: String): String; +begin + Result := Copy(AData,0,Length(AData)); +end; + +function TAbstractMemBTreeExampleString.LoadData(const APosition: TAbstractMemPosition): String; +var i : Integer; + wLength : Word; + Lbuff : TBytes; +begin + Result := ''; + wLength := 0; + FAbstractMem.Read(APosition,wLength,2); + if wLength<=0 then Exit; + SetLength(Lbuff,wLength); + FAbstractMem.Read(APosition+2,LBuff[0],wLength); + for i:=0 to wLength-1 do begin + Result := Result + Char(LBuff[i]); + end; +end; + +function TAbstractMemBTreeExampleString.NodeDataToString(const AData: TAbstractMemPosition): String; +begin + Result := LoadData(AData); +end; + +function TAbstractMemBTreeExampleString.SaveData(const AData: String): TAMZone; +var i : Integer; + wLength : Word; + Lbuff : TBytes; +begin + wLength := Length(AData); + Result := FAbstractMem.New( wLength+2 ); + SetLength(Lbuff,wLength+2); + Move(wLength,Lbuff[0],2); + for i:=0 to AData.Length-1 do begin + Lbuff[2 + i] := Byte(Char(AData.Chars[i])); + end; + FAbstractMem.Write(Result.position,Lbuff[0],Length(Lbuff)); +end; + +{ TestTAbstractMemBTree } + +procedure TestTAbstractMemBTree.DoCheckAbstractMem(AAbstractMem: TAbstractMem; AUsedBytes: Integer); +var + LTotalUsedSize, LTotalUsedBlocksCount, LTotalLeaksSize, LTotalLeaksBlocksCount : TAbstractMemPosition; +begin + Assert(AAbstractMem.CheckConsistency(Nil,Nil,LTotalUsedSize, LTotalUsedBlocksCount, LTotalLeaksSize, LTotalLeaksBlocksCount)); + Assert(LTotalUsedSize=AUsedBytes,Format('Total used %d bytes (%d blocks) different from expected %d bytes - Total free %d bytes (%d blocks)', + [LTotalUsedSize, LTotalUsedBlocksCount, AUsedBytes, LTotalLeaksSize, LTotalLeaksBlocksCount])); +end; + +procedure TestTAbstractMemBTree.SetUp; +begin +end; + +procedure TestTAbstractMemBTree.TearDown; +begin +end; + +function TComparison_SumChars(const ALeft, ARight: String): Integer; + function SumChars(const AString : string) : Integer; + var i : Integer; + begin + Result := 0; + for i := 0 to AString.Length-1 do inc(Result,Ord(AString.Chars[i])); + end; +begin + Result := SumChars(ALeft) - SumChars(ARight); + ALeft.GetHashCode +end; + +function TComparison_HashCode(const ALeft, ARight: String): Integer; +begin + Result := ALeft.GetHashCode - ARight.GetHashCode; +end; + +procedure TestTAbstractMemBTree.TestInfinite_TAbstractMemBTree; +var LOrder, LMemUnitsSize, LInitialRandSeed : Integer; + L64Bits, LAllowDuplicates : Boolean; + s64Bits, sAllowDuplicates : String; +begin + LInitialRandSeed := RandSeed; + LOrder := 3; + LMemUnitsSize := 4; + L64Bits := False; + LAllowDuplicates := False; + try + repeat + LMemUnitsSize := ((Random(255) DIV 4)*4)+4; + LAllowDuplicates := Random(2)=0; + L64Bits := Random(2)=0; + TestInfinite_Integer(LMemUnitsSize,LOrder,LAllowDuplicates,L64Bits); + inc(LOrder); + until (LOrder>11); + Except + On E:Exception do begin + if L64Bits then s64Bits := '64bits' else s64Bits := '32bits'; + if LAllowDuplicates then sAllowDuplicates := 'Duplicates' else sAllowDuplicates := 'Unique'; + + E.Message := Format('Seed:%d Order:%d MUS:%d %s %s Error(%s):%s',[LInitialRandSeed,LOrder,LMemUnitsSize,s64Bits,sAllowDuplicates,E.ClassName,E.Message]); + Raise; + end; + end; +end; + +procedure TestTAbstractMemBTree.TestInfinite_TAbstractMemBTreeData; +var LOrder, LMemUnitsSize, LInitialRandSeed : Integer; + L64Bits, LAllowDuplicates : Boolean; + s64Bits, sAllowDuplicates : String; +begin + RandSeed := 0; + LInitialRandSeed := RandSeed; + LOrder := 3; + LMemUnitsSize := 4; + L64Bits := False; + LAllowDuplicates := False; + try + repeat + LMemUnitsSize := ((Random(255) DIV 4)*4)+4; + LAllowDuplicates := Random(2)=0; + L64Bits := Random(2)=0; + TestInfiniteExt(LMemUnitsSize,LOrder,LAllowDuplicates,L64Bits); + inc(LOrder); + until (LOrder>11); + Except + On E:Exception do begin + if L64Bits then s64Bits := '64bits' else s64Bits := '32bits'; + if LAllowDuplicates then sAllowDuplicates := 'Duplicates' else sAllowDuplicates := 'Unique'; + + E.Message := Format('Seed:%d Order:%d MUS:%d %s %s Error(%s):%s',[LInitialRandSeed,LOrder,LMemUnitsSize,s64Bits,sAllowDuplicates,E.ClassName,E.Message]); + Raise; + end; + end; +end; + +procedure TestTAbstractMemBTree.Test_FindData_TAbstractMemBTreeData; +var LAM : TMem; + LBTree : TAbstractMemBTreeDataExampleInteger; + LZone : TAMZone; + LValue : Int64; + LValueStr : String; + + Function CheckSearch(ASearching : Integer; AExpectedFound : Integer; var AOut : String) : Boolean; + var LMemPos : TAbstractMemPosition; + LValueFound : Integer; + begin + AOut := ''; + Result := False; + if LBTree.FindData(ASearching,LMemPos,LValueFound) then begin + if AExpectedFound=LValueFound then begin + AOut := Format('OK-FOUND Search %d and Found %d as expected %d',[ASearching,LValueFound,AExpectedFound]); + Exit(True); + end else begin + AOut := Format('ERR-FOUND Search %d but Found %d and expected %d',[ASearching,LValueFound,AExpectedFound]); + Exit(False); + end; + end else begin + if (LValueFound = AExpectedFound) then begin + AOut := Format('OK Found Search %d and Found %d as expected %d',[ASearching,LValueFound,AExpectedFound]); + Exit(True); + end else begin + AOut := Format('ERR Search %d Found %d but expected %d',[ASearching,LValueFound,AExpectedFound]); + Exit(False); + end; + end; + end; + + Procedure Search(ASearching : Integer; AExpectedFound : Integer); + var LMsg : String; + begin + if Not CheckSearch(ASearching,AExpectedFound,LMsg) then raise Exception.Create(LMsg); + end; + +begin + LAM := TMem.Create(0,False); + Try + LAM.Initialize(True,4); + LZone := LAM.New(TAbstractMemBTree.MinAbstractMemInitialPositionSize(LAM)); + Try + LBTree := TAbstractMemBTreeDataExampleInteger.Create(LAM,LZone,False,3,TComparison_Integer); + Try + LBtree.AddData(100); + LBtree.AddData(150); + LBtree.AddData(200); + LBtree.AddData(250); + LBtree.AddData(300); + LBtree.AddData(350); + LBtree.AddData(400); + + LBtree.AddData(125); + LBtree.AddData(225); + LBtree.AddData(325); + LBtree.AddData(425); + + LBtree.AddData(175); + LBtree.AddData(275); + LBtree.AddData(375); + LBtree.AddData(475); + + Search(328,325); + Search(480,475); + Search(450,425); + Search(410,400); + Search(310,300); + Search(210,200); + Search(160,150); + Search(355,350); + Search(255,250); + Search(101,100); + Search(100,100); + Search(300,300); + Search(200,200); + Search(250,250); + Search(350,350); + Search(99,100); // Returns LOWEST + + Finally + LBTree.Free; + End; + Finally + LAM.Dispose(LZone); + End; + Finally + LAM.Free; + End; +end; + +procedure TestTAbstractMemBTree.Test_FindExt_TAbstractMemBTree; +var LAM : TMem; + LBTree : TAbstractMemBTree; + LZone : TAMZone; + LValue : Int64; + LValueStr : String; + + Function CheckSearch(ASearching : Int64; AExpectedFound : Int64; var AOut : String) : Boolean; + var LFound : TAbstractMemBTree.TAbstractBTreeNode; + LiPosNode : Integer; + LValueFound : Int64; + begin + AOut := ''; + Result := False; + if LBTree.FindExt(ASearching,LValueFound) then begin + if AExpectedFound=LValueFound then begin + AOut := Format('OK-FOUND Search %d and Found %d as expected %d',[ASearching,LValueFound,AExpectedFound]); + Exit(True); + end else begin + AOut := Format('ERR-FOUND Search %d but Found %d and expected %d',[ASearching,LValueFound,AExpectedFound]); + Exit(False); + end; + end else begin + if (LValueFound = AExpectedFound) then begin + AOut := Format('OK Found Search %d and Found %d as expected %d',[ASearching,LValueFound,AExpectedFound]); + Exit(True); + end else begin + AOut := Format('ERR Search %d Found %d but expected %d',[ASearching,LValueFound,AExpectedFound]); + Exit(False); + end; + end; + end; + + Procedure Search(ASearching : Int64; AExpectedFound : Int64); + var LMsg : String; + begin + if Not CheckSearch(ASearching,AExpectedFound,LMsg) then raise Exception.Create(LMsg); + end; + +begin + LAM := TMem.Create(0,False); + Try + LAM.Initialize(True,4); + LZone := LAM.New(TAbstractMemBTree.MinAbstractMemInitialPositionSize(LAM)); + Try + LBTree := TAbstractMemBTree.Create(LAM,LZone,False,3); + Try + LBtree.Add(100); + LBtree.Add(150); + LBtree.Add(200); + LBtree.Add(250); + LBtree.Add(300); + LBtree.Add(350); + LBtree.Add(400); + + LBtree.Add(125); + LBtree.Add(225); + LBtree.Add(325); + LBtree.Add(425); + + LBtree.Add(175); + LBtree.Add(275); + LBtree.Add(375); + LBtree.Add(475); + + Search(328,325); + Search(480,475); + Search(450,425); + Search(410,400); + Search(310,300); + Search(210,200); + Search(160,150); + Search(355,350); + Search(255,250); + Search(101,100); + Search(100,100); + Search(300,300); + Search(200,200); + Search(250,250); + Search(350,350); + Search(99,LBTree.GetNullData); // Returns NULL + + Finally + LBTree.Free; + End; + Finally + LAM.Dispose(LZone); + End; + Finally + LAM.Free; + End; +end; + +procedure TestTAbstractMemBTree.TestInfiniteExt(AMemUnitsSize, AOrder: Integer; AAllowDuplicates, A64Bits: Boolean); +var + Lbt : TAbstractMemBTreeExampleString; + + procedure AddN(ATotalRounds : Integer); + var nRounds, intValue : Integer; + LFound : String; + begin + nRounds := 0; intValue := 0; + repeat + inc(intValue);// := Random(AOrder * 100); + if (Lbt.AddData(intValue.ToString)) then inc(nRounds); + Lbt.CheckConsistency; + until (nRounds>=ATotalRounds); + try + if not Lbt.FindDataHighest(LFound) then exit; + repeat + if not Lbt.DeleteData(LFound) then raise Exception.Create('ERR 20211129-01'); + dec(nRounds); + Lbt.CheckConsistency; + until Not Lbt.FindDataHighest(LFound) ; + Assert(nRounds=0,'No valid rounds values'); + finally + end; + end; + + procedure ProcessTree(ATotalRounds : Integer); + var LzoneIndex : TAMZone; + j : TAbstractMemPosition; + intValue, nRounds, nAdds, nDeletes, i, intAux : Integer; + LCurr, LnextCurr : String; + begin + nRounds := 0; nAdds := 0; nDeletes := 0; + repeat + inc(nRounds); + intValue := Random(AOrder * 100); + if Random(5)>0 then begin + if (Lbt.AddData(intValue.ToString)) then begin + inc(nAdds); + end; + end else begin + if Lbt.DeleteData(intValue.ToString) then begin + inc(nDeletes); + end; + end; + until (nRounds>=ATotalRounds); + Lbt.CheckConsistency; + // Delete mode + while Lbt.Count>0 do begin + if not Lbt.FindDataLowest(LCurr) then raise Exception.Create('Cannot fint lowest but Count>0'); + if not Lbt.FindDataPos(LCurr,LzoneIndex.position) then raise Exception.Create(Format('"%s" Not Found %d',[LCurr,Lbt.Count])); + while (Random(50)>0) do begin + if Random(3)=0 then begin + if not Lbt.FindDataPrecessor(Lcurr,LnextCurr) then begin + break; + end; + LCurr := LnextCurr; + end else if Random(2)=0 then begin + if not Lbt.FindDataSuccessor(LCurr,LnextCurr) then begin + break; + end; + LCurr := LnextCurr; + end; + end; + If Not Lbt.DeleteData(LCurr) then raise Exception.Create(Format('"%s" Not Found to delete! %d',[LCurr,Lbt.Count])); + end; + Lbt.CheckConsistency; + // Try to re-use + i := 0; + intValue := 10; + repeat + inc(intValue); + if (Lbt.CanAddData(intValue.ToString)) then begin + inc(i); + Assert(Lbt.AddData(intValue.ToString),Format('Cannot re-use (round %d on order %d) and add %d',[i,AOrder,intValue])); + Assert(Lbt.FindIndex(i-1,j),Format('Cannot find %d on index %d on order %d',[intValue,i-1,AOrder])); + Assert(Not Lbt.FindIndex(i,j),Format('Found %d on index %d on order %d',[j,i-1,AOrder])); + end; + until Lbt.Count>(AOrder * 10); + end; + + procedure ProcessSaveToStream(AAbstractMem : TAbstractMem); + var LStream : TStream; + LStreamMem : TStreamMem; + begin + LStream := TMemoryStream.Create; + Try + AAbstractMem.SaveToStream(LStream); + // + LStreamMem := TStreamMem.Create(LStream,0,True); + Try + Assert( LStreamMem.HeaderInitialized , 'No valid Stream'); + LStreamMem.CheckConsistency; + Finally + LStreamMem.Free; + End; + Finally + LStream.Free; + End; + end; + + +var + LzoneData, + LzoneIndex : TAMZone; + Lmem : TAbstractMem; + i : Integer; + LBTreeIndex : TAbstractMemBTreeDataIndex<String>; +begin + Lmem := TMem.Create(0,False); + Try + LMem.Initialize(A64Bits,AMemUnitsSize); + LzoneData := Lmem.New(TAbstractMemBTree.MinAbstractMemInitialPositionSize(Lmem)); + try + Lbt := TAbstractMemBTreeExampleString.Create(Lmem,LzoneData,AAllowDuplicates,AOrder,TComparison_String); + try + + TAbstractMemBTreeDataIndex<String>.Create(Lbt, + Lmem.New(TAbstractMemBTree.MinAbstractMemInitialPositionSize(Lmem)),False, + AOrder+1,TComparison_SumChars); + TAbstractMemBTreeDataIndex<String>.Create(Lbt, + Lmem.New(TAbstractMemBTree.MinAbstractMemInitialPositionSize(Lmem)),True, + AOrder+1,TComparison_HashCode); + + ProcessTree(AOrder * 1000); + //AddN(100); + + Lbt.CheckConsistency; + finally + // Dispose indexes + for i := Lbt.IndexesCount-1 downto 0 do begin + LBTreeIndex := TAbstractMemBTreeDataIndex<String>(Lbt.GetIndex(i)); + LzoneIndex := LBTreeIndex.InitialZone; + LBTreeIndex.EraseTree; + LBTreeIndex.Free; + Lmem.Dispose( LzoneIndex ); + end; + Lbt.Free; + end; + Lbt := TAbstractMemBTreeExampleString.Create(Lmem,LzoneData,AAllowDuplicates,AOrder,TComparison_String); + try + Lbt.CheckConsistency; + Lbt.EraseTree; + Lbt.CheckConsistency; + finally + Lbt.Free; + end; + finally + Lmem.Dispose(LzoneData); + end; + // + DoCheckAbstractMem(Lmem,0); + // + ProcessSaveToStream(Lmem); + Finally + Lmem.Free; + End; +end; + +procedure TestTAbstractMemBTree.TestInfinite_Integer(AMemUnitsSize, AOrder: Integer; AAllowDuplicates : Boolean; A64Bits : Boolean); +var Lbt : TAbstractMemBTreeExampleInteger; + Lzone : TAMZone; + intValue, nRounds, nAdds, nDeletes, i, intAux : Integer; + j : TAbstractMemPosition; + Lnode : TAbstractMemBTreeExampleInteger.TAbstractBTreeNode; + Lmem : TAbstractMem; + LCurr : String; +begin + Lmem := TMem.Create(0,False); + Try + LMem.Initialize(A64Bits,AMemUnitsSize); + nRounds := 0; + nAdds := 0; + nDeletes := 0; + Lzone := Lmem.New(TAbstractMemBTree.MinAbstractMemInitialPositionSize(Lmem)); + try + Lbt := TAbstractMemBTreeExampleInteger.Create(Lmem,Lzone,AAllowDuplicates,AOrder); + try + repeat + inc(nRounds); + intValue := Random(AOrder * 100); + if Random(2)=0 then begin + if (Lbt.Add(intValue)) then begin + inc(nAdds); + end; + end else begin + if Lbt.Delete(intValue) then begin + inc(nDeletes); + end; + end; + until (nRounds>=AOrder * 1000); + Lbt.CheckConsistency; + // Delete mode + while Lbt.Count>0 do begin + Lnode := Lbt.Root; + while (Not Lnode.IsLeaf) and (Random(5)>0) do begin + Lnode := Lbt.GetNode(Lnode.childs[Random(Lnode.Count)+1]); + end; + If Not Lbt.Delete(Lnode.data[Random(Lnode.Count)]) then raise Exception.Create('Not Found to delete!'); + end; + Lbt.CheckConsistency; + // Try to re-use + i := 0; + repeat + intValue := Random(AOrder * 100); + if (not Lbt.Find(intValue,Lnode,intAux)) or (AAllowDuplicates) then begin + inc(i); + Assert(Lbt.Add(intValue),Format('Cannot re-use %d/%d and add %d',[i,AOrder,intValue])); + Assert(Lbt.FindIndex(i-1,j),Format('Cannot find %d on index %d on order %d',[intValue,i-1,AOrder])); + Assert(Not Lbt.FindIndex(i,j),Format('Found %d on index %d on order %d',[j,i-1,AOrder])); + end; + until Lbt.Count>(AOrder * 10); + finally + Lbt.Free; + end; + Lbt := TAbstractMemBTreeExampleInteger.Create(Lmem,Lzone,AAllowDuplicates,AOrder); + try + Lbt.CheckConsistency; + Lbt.EraseTree; + Lbt.CheckConsistency; + finally + Lbt.Free; + end; + finally + Lmem.Dispose(Lzone); + end; + DoCheckAbstractMem(Lmem,0); + Finally + Lmem.Free; + End; +end; + + +{ TAbstractMemBTreeDataExampleInteger } + +function TAbstractMemBTreeDataExampleInteger.LoadData( + const APosition: TAbstractMemPosition): Integer; +begin + Result := 0; + FAbstractMem.Read(APosition,Result,4); +end; + +function TAbstractMemBTreeDataExampleInteger.NodeDataToString( + const AData: TAbstractMemPosition): String; +begin + if AData<=0 then Result := 'Nil '+AData.ToString + else begin + Result := LoadData(AData).ToString; + end; +end; + +function TAbstractMemBTreeDataExampleInteger.SaveData( + const AData: Integer): TAMZone; +begin + Result := AbstractMem.New(4); + FAbstractMem.Write(Result.position,AData,4); +end; + +initialization + RegisterTest(TestTAbstractMemBTree{$IFNDEF FPC}.Suite{$ENDIF}); +end. diff --git a/src/libraries/abstractmem/tests/src/UAbstractMemTList.Tests.pas b/src/libraries/abstractmem/tests/src/UAbstractMemTList.Tests.pas new file mode 100644 index 000000000..c79138d14 --- /dev/null +++ b/src/libraries/abstractmem/tests/src/UAbstractMemTList.Tests.pas @@ -0,0 +1,283 @@ +unit UAbstractMemTList.Tests; + +{$IFDEF FPC} + {$MODE Delphi} +{$ENDIF} + +interface + +uses + SysUtils, + {$IFDEF FPC} + fpcunit, testutils, testregistry, + {$ELSE} + TestFramework, + {$ENDIF} + {$IFNDEF FPC}System.Generics.Collections,System.Generics.Defaults,{$ELSE}Generics.Collections,Generics.Defaults,{$ENDIF} + UAbstractMem, + UAbstractMemTList; + +type + TTestRecord = record + i : Integer; + s : String; + procedure Clear; + procedure RandomData; + end; + + TAbstractMemTList_TTestRecord = class(TAbstractMemTList<TTestRecord>) + protected + procedure LoadFrom(const ABytes : TBytes; var AItem : TTestRecord); override; + procedure SaveTo(const AItem : TTestRecord; AIsAddingItem : Boolean; var ABytes : TBytes); override; + public + procedure AddRandom; + procedure AddValues(i : Integer; s : String); + end; + + TAbstractMemOrderedTList_TTestRecord = class(TAbstractMemOrderedTList<TTestRecord>) + protected + procedure LoadFrom(const ABytes : TBytes; var AItem : TTestRecord); override; + procedure SaveTo(const AItem : TTestRecord; AIsAddingItem : Boolean; var ABytes : TBytes); override; + function Compare(const ALeft, ARight : TTestRecord) : Integer; override; + public + procedure AddRandom; + procedure AddValues(i : Integer; s : String); + end; + + TestTAbstractMemTList = class(TTestCase) + strict private + public + procedure SetUp; override; + procedure TearDown; override; + procedure TestInfinite(A64Bytes : Boolean; AUseCache, AUseCacheAuto : Boolean; AElementsPerBlock : Integer); + published + procedure Test_32b_NoCache; + procedure Test_32b_Cache; + procedure Test_64b_NoCache; + procedure Test_64b_Cache; + procedure Test_TTestRecord; + end; + +implementation + +uses UAbstractStorage; + +{ TestTAbstractMemTList } + +procedure TestTAbstractMemTList.SetUp; +begin + inherited; +end; + +procedure TestTAbstractMemTList.TearDown; +begin + inherited; +end; + +procedure TestTAbstractMemTList.TestInfinite(A64Bytes, AUseCache, + AUseCacheAuto: Boolean; AElementsPerBlock: Integer); +var LMem : TMem; + LAMList : TAbstractMemTList; + LAMList_TR : TAbstractMemTList_TTestRecord; + LAMZone : TAMZone; + i : Integer; + LTR : TTestRecord; +begin + RandSeed:=0; + LMem := TMem.Create(0,False); + Try + LMem.Initialize(A64Bytes,4); + LAMZone := LMem.New(TAbstractMemTList.MinAbstractMemTListHeaderSize(LMem)); + LAMList := TAbstractMemTList.Create(LMem,LAMZone,AElementsPerBlock,AUseCache); + LAMList_TR := TAbstractMemTList_TTestRecord.Create(LMem,LMem.New(TAbstractMemTList.MinAbstractMemTListHeaderSize(LMem)),5,True); + Try + LAMList.UseCacheAuto := AUseCacheAuto; + // Start process + repeat + LTR.RandomData; + LAMList_TR.Add(LTR); + // + LAMList.Add(LMem.New((Random(50)+1)*4).position); + if (Random(5)=0) and (LAMList.Count>0) then begin + i := Random(LAMList.Count); + LAMZone.position := LAMList.Position[i]; + LAMList.Delete(i); + LMem.Dispose(LAMZone.position); + end; + if Random(100)=0 then + LAMList.FlushCache; + until LAMList.Count>(AElementsPerBlock*200); + // + LAMList.FlushCache; + // + while (LAMList.Count>0) do begin + i := Random(LAMList.Count); + LAMZone.position := LAMList.Position[i]; + LAMList.Delete(i); + LMem.Dispose(LAMZone.position); + if Random(100)=0 then + LAMList.FlushCache; + end; + LAMList.FlushCache; + LMem.CheckConsistency(); + // + Finally + LAMList.Free; + LAMList_TR.Free; + End; + Finally + LMem.Free; + End; +end; + +procedure TestTAbstractMemTList.Test_32b_Cache; +begin + TestInfinite(False,True,True,10); +end; + +procedure TestTAbstractMemTList.Test_32b_NoCache; +begin + TestInfinite(False,False,False,10); +end; + +procedure TestTAbstractMemTList.Test_64b_Cache; +begin + TestInfinite(True,True,True,10); +end; + +procedure TestTAbstractMemTList.Test_64b_NoCache; +begin + TestInfinite(True,False,False,10); +end; + +procedure TestTAbstractMemTList.Test_TTestRecord; +begin + +end; + +{ TTestRecord } + +procedure TTestRecord.Clear; +begin + Self.i := 0; + Self.s := ''; +end; + +procedure TTestRecord.RandomData; +var i,j : Integer; +begin + Self.s := ''; + Self.i := Random(100000); + j := Random(25)+5; + for i := 1 to j do begin + Self.s := Self.s + Char(Random(ord('Z')-ord('A'))+ord('A')); + end; +end; + +{ TAbstractMemTList_TTestRecord } + +procedure TAbstractMemTList_TTestRecord.AddRandom; +var tr : TTestRecord; +begin + tr.Clear; + tr.RandomData; + Add(tr); +end; + +procedure TAbstractMemTList_TTestRecord.AddValues(i: Integer; s: String); +var tr : TTestRecord; +begin + tr.Clear; + tr.i := i; + tr.s := s; + Add(tr); +end; + +procedure TAbstractMemTList_TTestRecord.LoadFrom(const ABytes: TBytes; + var AItem: TTestRecord); +var bs : TBytesStorage; +begin + bs := TBytesStorage.Create(ABytes); + try + AItem.Clear; + AItem.i := bs.ReadUInt32; + AItem.s := bs.ReadString; + finally + bs.Free; + end; +end; + +procedure TAbstractMemTList_TTestRecord.SaveTo(const AItem: TTestRecord; + AIsAddingItem: Boolean; var ABytes: TBytes); +var bs : TBytesStorage; +begin + bs := TBytesStorage.Create(0); + try + bs.WriteUInt32(AItem.i); + bs.WriteString(AItem.s); + ABytes := Copy(bs.Bytes,0,bs.Size); + finally + bs.Free; + end; +end; + +{ TAbstractMemOrderedTList_TTestRecord } + +procedure TAbstractMemOrderedTList_TTestRecord.AddRandom; +var tr : TTestRecord; +begin + tr.Clear; + tr.RandomData; + Add(tr); +end; + +procedure TAbstractMemOrderedTList_TTestRecord.AddValues(i: Integer; + s: String); +var tr : TTestRecord; +begin + tr.Clear; + tr.i := i; + tr.s := s; + Add(tr); +end; + +function TAbstractMemOrderedTList_TTestRecord.Compare(const ALeft, + ARight: TTestRecord): Integer; +begin + Result := ALeft.i - ARight.i; + if (Result=0) then begin + Result := AnsiCompareStr(ALeft.s,ARight.s); + end; +end; + +procedure TAbstractMemOrderedTList_TTestRecord.LoadFrom(const ABytes: TBytes; + var AItem: TTestRecord); +var bs : TBytesStorage; +begin + bs := TBytesStorage.Create(ABytes); + try + AItem.Clear; + AItem.i := bs.ReadUInt32; + AItem.s := bs.ReadString; + finally + bs.Free; + end; +end; + +procedure TAbstractMemOrderedTList_TTestRecord.SaveTo(const AItem: TTestRecord; + AIsAddingItem: Boolean; var ABytes: TBytes); +var bs : TBytesStorage; +begin + bs := TBytesStorage.Create(0); + try + bs.WriteUInt32(AItem.i); + bs.WriteString(AItem.s); + ABytes := Copy(bs.Bytes,0,bs.Size); + finally + bs.Free; + end; +end; + +initialization + RegisterTest(TestTAbstractMemTList{$IFNDEF FPC}.Suite{$ENDIF}); +end. diff --git a/src/libraries/abstractmem/tests/src/UAbstractStorage.Tests.pas b/src/libraries/abstractmem/tests/src/UAbstractStorage.Tests.pas new file mode 100644 index 000000000..c2e1a7ebb --- /dev/null +++ b/src/libraries/abstractmem/tests/src/UAbstractStorage.Tests.pas @@ -0,0 +1,199 @@ +unit UAbstractStorage.Tests; + +{$IFDEF FPC} + {$MODE Delphi} +{$ENDIF} + +interface + + uses + SysUtils, Classes, + {$IFDEF FPC} + fpcunit, testutils, testregistry, + {$ELSE} + TestFramework, + System.IOUtils, + {$ENDIF} + {$IFNDEF FPC}System.Generics.Collections,System.Generics.Defaults,{$ELSE}Generics.Collections,Generics.Defaults,{$ENDIF} + UAbstractStorage, UAbstractMem, UAbstractMemBTree, UAbstractMemTList; + +{$I ./../../ConfigAbstractMem.inc } + +type + TestTAbstractStorage = class(TTestCase) + strict private + private + procedure InitializeStorage(ASender : TAbstractStorage; ACurrentVersion, AUpdateToVersion : Integer); + procedure AddData(ASender: TAbstractStorage); + procedure CheckAddedData(ASender: TAbstractStorage); + public + procedure SetUp; override; + procedure TearDown; override; + published + procedure Test_TAbstractStorage; + end; + +implementation + +uses UOrderedList, UAbstractMemTList.Tests, UAbstractMemBTree.Tests; + +{ TestTAbstractStorage } + +procedure TestTAbstractStorage.AddData(ASender: TAbstractStorage); +var i : Integer; + aml_1 : TAbstractMemTList; + aml_int : TAbstractMemTList_TTestRecord; + aml_int_ord : TAbstractMemOrderedTList_TTestRecord; + ambt_1 : TAbstractMemBTree; + ambt_int : TAbstractMemBTreeDataExampleInteger; + ambt_index : TAbstractMemBTreeDataIndex<Integer>; +begin + aml_1 := TAbstractMemTList.Create(ASender.AbstractMem,ASender.StorageStructInformation.GetStorageStructAMZone('TAbstractMemTList'),5,True); + aml_int := TAbstractMemTList_TTestRecord.Create(ASender.AbstractMem,ASender.StorageStructInformation.GetStorageStructAMZone('TAbstractMemTList<>'),5,True); + aml_int_ord := TAbstractMemOrderedTList_TTestRecord.Create(ASender.AbstractMem,ASender.StorageStructInformation.GetStorageStructAMZone('TAbstractMemOrderedTList<>'),5,True,True); + ambt_1 := TAbstractMemBTree.Create(ASender.AbstractMem,ASender.StorageStructInformation.GetStorageStructAMZone('TAbstractMemBTree'),False,5); + ambt_int := TAbstractMemBTreeDataExampleInteger.Create(ASender.AbstractMem,ASender.StorageStructInformation.GetStorageStructAMZone('TAbstractMemBTreeData<Integer>'),False,5,TComparison_Integer); + ambt_index := TAbstractMemBTreeDataIndex<Integer>.Create(ambt_int,ASender.StorageStructInformation.GetStorageStructAMZone('TAbstractMemBTreeDataAbstract<Integer>'),False,5,TComparison_Integer); + try + for i := 1 to 100 do begin + aml_1.Add(ASender.AbstractMem.New(50).position); + aml_int.AddRandom; + aml_int_ord.AddRandom; + ambt_1.Add(ASender.AbstractMem.New(50).position); + ambt_int.AddData(Random(5000)); + end; + finally + aml_1.Free; + aml_int.Free; + aml_int_ord.Free; + ambt_1.Free; + ambt_int.Free; + ambt_index.Free; + end; +end; + +procedure TestTAbstractStorage.CheckAddedData(ASender: TAbstractStorage); +var i : Integer; + aml_1 : TAbstractMemTList; + aml_int : TAbstractMemTList_TTestRecord; + aml_int_ord : TAbstractMemOrderedTList_TTestRecord; + ambt_1 : TAbstractMemBTree; + ambt_int : TAbstractMemBTreeDataExampleInteger; + ambt_index : TAbstractMemBTreeDataIndex<Integer>; +begin + aml_1 := TAbstractMemTList.Create(ASender.AbstractMem,ASender.StorageStructInformation.GetStorageStructAMZone('TAbstractMemTList'),5,True); + aml_int := TAbstractMemTList_TTestRecord.Create(ASender.AbstractMem,ASender.StorageStructInformation.GetStorageStructAMZone('TAbstractMemTList<>'),5,True); + aml_int_ord := TAbstractMemOrderedTList_TTestRecord.Create(ASender.AbstractMem,ASender.StorageStructInformation.GetStorageStructAMZone('TAbstractMemOrderedTList<>'),5,True,True); + ambt_1 := TAbstractMemBTree.Create(ASender.AbstractMem,ASender.StorageStructInformation.GetStorageStructAMZone('TAbstractMemBTree'),False,5); + ambt_int := TAbstractMemBTreeDataExampleInteger.Create(ASender.AbstractMem,ASender.StorageStructInformation.GetStorageStructAMZone('TAbstractMemBTreeData<Integer>'),False,5,TComparison_Integer); + ambt_index := TAbstractMemBTreeDataIndex<Integer>.Create(ambt_int,ASender.StorageStructInformation.GetStorageStructAMZone('TAbstractMemBTreeDataAbstract<Integer>'),False,5,TComparison_Integer); + try + Assert(aml_1.Count=100); + Assert(aml_int.Count=100); + Assert(aml_int_ord.Count=100); + Assert(ambt_1.Count=100); + Assert(ambt_int.Count=100); + Assert(ambt_index.Count=100); + finally + aml_1.Free; + aml_int.Free; + aml_int_ord.Free; + ambt_1.Free; + ambt_int.Free; + ambt_index.Free; + end; +end; + +procedure TestTAbstractStorage.InitializeStorage(ASender: TAbstractStorage; ACurrentVersion, AUpdateToVersion: Integer); +var amz : TAMZone; + aml_1 : TAbstractMemTList; + aml_int : TAbstractMemTList_TTestRecord; + aml_int_ord : TAbstractMemOrderedTList_TTestRecord; + ambt_1 : TAbstractMemBTree; + ambt_int : TAbstractMemBTreeDataExampleInteger; + ambt_index : TAbstractMemBTreeDataIndex<Integer>; + i : Integer; +begin + if ACurrentVersion>=AUpdateToVersion then raise EAbstractStorage.Create('Invalid update version'); + aml_1 := Nil; + aml_int := Nil; + aml_int_ord := Nil; + ambt_1 := Nil; + ambt_int := Nil; + ambt_index := Nil; + try + if ACurrentVersion<1 then begin + amz := ASender.AbstractMem.New(TAbstractMemTList.MinAbstractMemTListHeaderSize(ASender.AbstractMem)); + aml_1 := TAbstractMemTList.Create(ASender.AbstractMem,amz,5,True); + ASender.StorageStructInformation.AddStorageStruct('TAbstractMemTList',amz.position,ss_TAbstractMemTList,aml_1); + // + amz := ASender.AbstractMem.New(TAbstractMemTList.MinAbstractMemTListHeaderSize(ASender.AbstractMem)); + aml_int := TAbstractMemTList_TTestRecord.Create(ASender.AbstractMem,amz,5,True); + ASender.StorageStructInformation.AddStorageStruct('TAbstractMemTList<>',amz.position,ss_TAbstractMemTListT,aml_int); + // + amz := ASender.AbstractMem.New(TAbstractMemTList.MinAbstractMemTListHeaderSize(ASender.AbstractMem)); + aml_int_ord := TAbstractMemOrderedTList_TTestRecord.Create(ASender.AbstractMem,amz,5,True,True); + ASender.StorageStructInformation.AddStorageStruct('TAbstractMemOrderedTList<>',amz.position,ss_TAbstractMemOrderedTListT,aml_int_ord); + // + amz := ASender.AbstractMem.New(TAbstractMemBTree.MinAbstractMemInitialPositionSize(ASender.AbstractMem)); + ambt_1 := TAbstractMemBTree.Create(ASender.AbstractMem,amz,False,5); + ASender.StorageStructInformation.AddStorageStruct('TAbstractMemBTree',amz.position,ss_TAbstractMemBTree,ambt_1); + // + amz := ASender.AbstractMem.New(TAbstractMemBTreeDataAbstract<Integer>.MinAbstractMemInitialPositionSize(ASender.AbstractMem)); + ambt_int := TAbstractMemBTreeDataExampleInteger.Create(ASender.AbstractMem,amz,False,5,TComparison_Integer); + ASender.StorageStructInformation.AddStorageStruct('TAbstractMemBTreeData<Integer>',amz.position,ss_TAbstractMemBTree,ambt_int); + // + amz := ASender.AbstractMem.New(TAbstractMemBTreeDataAbstract<Integer>.MinAbstractMemInitialPositionSize(ASender.AbstractMem)); + ambt_index := TAbstractMemBTreeDataIndex<Integer>.Create(ambt_int,amz,False,5,TComparison_Integer); + ASender.StorageStructInformation.AddStorageStruct('TAbstractMemBTreeDataAbstract<Integer>',amz.position,ss_TAbstractMemBTree,ambt_index); + end; + finally + aml_1.Free; + aml_int.Free; + aml_int_ord.Free; + ambt_1.Free; + ambt_int.Free; + ambt_index.Free; + end; + +end; + +procedure TestTAbstractStorage.SetUp; +begin + inherited; + +end; + +procedure TestTAbstractStorage.TearDown; +begin + inherited; + +end; + +procedure TestTAbstractStorage.Test_TAbstractStorage; +var Las : TAbstractStorage; + lines: TStrings; + s : String; +begin + Las := TAbstractStorage.Create('',False,'TEST',1,InitializeStorage); + try + Las.Init('TEST',2,Las.AbstractMem.Is64Bits,Las.AbstractMem.MemUnitsSize,InitializeStorage); + lines := TStringList.Create; + try + AddData(Las); + Las.Analize(lines); + CheckAddedData(Las); + s := lines.Text; + if s='' then Abort; + + finally + lines.Free; + end; + finally + Las.Free; + end; +end; + +initialization + RegisterTest(TestTAbstractStorage{$IFNDEF FPC}.Suite{$ENDIF}); +end. diff --git a/src/libraries/abstractmem/tests/src/UCacheMem.Tests.pas b/src/libraries/abstractmem/tests/src/UCacheMem.Tests.pas new file mode 100644 index 000000000..976eb3ded --- /dev/null +++ b/src/libraries/abstractmem/tests/src/UCacheMem.Tests.pas @@ -0,0 +1,337 @@ +unit UCacheMem.Tests; + +{$IFDEF FPC} + {$MODE Delphi} +{$ENDIF} + +interface + + uses + SysUtils, + {$IFDEF FPC} + fpcunit, testutils, testregistry, + {$ELSE} + TestFramework, + {$ENDIF} + UCacheMem; + type + // Test methods for class TCalc + TestTCacheMem = class(TTestCase) + strict private + FCurrentMem : TBytes; + FReadCount, FSaveCount, FReadBytes, FSaveBytes : Int64; + function OnNeedDataProc(var ABuffer; AStartPos : Int64; ASize : Integer) : Integer; + function OnSaveDataProc(const ABuffer; AStartPos : Int64; ASize : Integer) : Integer; + function OnNeedDataProc_BlackHole(var ABuffer; AStartPos : Int64; ASize : Integer) : Integer; + function OnSaveDataProc_BlackHole(const ABuffer; AStartPos : Int64; ASize : Integer) : Integer; + procedure CheckBytes(const ABytes : TBytes; ALoadedStartPos, ASize : Integer); + procedure InitCurrentMem(ASize : Integer); + public + procedure SetUp; override; + procedure TearDown; override; + procedure TestCacheMem_Randomly(ASeed : Integer; ARounds : Integer; AMaxCacheSize : Int64; AMaxCacheDataBlocks : Int64; ADefaultCacheDataBlocksSize : Int64; AGridCache : Boolean); + class function PosData(APosition : Int64) : Byte; + published + procedure TestCacheMem_1; + procedure TestCacheMem; + procedure TestCacheMem_64bits; + end; + + implementation + +procedure TestTCacheMem.CheckBytes(const ABytes: TBytes; ALoadedStartPos, ASize: Integer); +var i : Integer; +begin + if ASize<=0 then ASize := Length(ABytes) + else if ASize > Length(ABytes) then ASize := Length(ABytes); + + for i := 0 to ASize-1 do begin + if (ABytes[i] <> (PosData(ALoadedStartPos+i))) then begin + raise {$IFDEF FPC}Exception{$ELSE}ETestFailure{$ENDIF}.Create(Format('Value at pos %d (item %d) should be %d instead of %d',[ALoadedStartPos+i,i,PosData(ALoadedStartPos+i),ABytes[i]])); + end; + + end; + +end; + +procedure TestTCacheMem.InitCurrentMem(ASize: Integer); +var i : Integer; +begin + SetLength(FCurrentMem,ASize); + for i :=0 to High(FCurrentMem) do begin + FCurrentMem[i] := PosData(i) + end; + FReadCount := 0; + FSaveCount := 0; + FReadBytes := 0; + FSaveBytes := 0; +end; + +function TestTCacheMem.OnNeedDataProc(var ABuffer; AStartPos: Int64; ASize: Integer): Integer; +begin + inc(FReadCount); + inc(FReadBytes,ASize); + if (Length(FCurrentMem) >= AStartPos + ASize) then begin + Result := ASize; + Move(FCurrentMem[AStartPos],ABuffer,ASize); + end else begin + Result := Length(FCurrentMem) - AStartPos; + if Result>0 then begin + Move(FCurrentMem[AStartPos],ABuffer,Result); + end; + end; +end; + +function TestTCacheMem.OnNeedDataProc_BlackHole(var ABuffer; AStartPos: Int64; + ASize: Integer): Integer; +var LBuffer : TBytes; +begin + // Just fill Buffer with 0 bytes + FillChar(ABuffer,ASize,0); + inc(FReadCount); + inc(FReadBytes,ASize); + Result := ASize; +end; + +function TestTCacheMem.OnSaveDataProc(const ABuffer; AStartPos: Int64; ASize: Integer): Integer; +begin + inc(FSaveCount); + inc(FSaveBytes,ASize); + if (Length(FCurrentMem) >= AStartPos + ASize) then begin + Result := ASize; + Move(ABuffer,FCurrentMem[AStartPos],ASize); + end else begin + Result := Length(FCurrentMem) - AStartPos; + if Result>0 then begin + Move(ABuffer,FCurrentMem[AStartPos],Result); + end; + end; +end; + +function TestTCacheMem.OnSaveDataProc_BlackHole(const ABuffer; AStartPos: Int64; + ASize: Integer): Integer; +begin + inc(FSaveCount); + inc(FSaveBytes,ASize); + Result := ASize; +end; + +class function TestTCacheMem.PosData(APosition: Int64): Byte; +begin + Result := 10+((APosition+1) MOD 89); +end; + +procedure TestTCacheMem.SetUp; +begin + SetLength(FCurrentMem,0); + FReadCount := 0; + FSaveCount := 0; + FReadBytes := 0; + FSaveBytes := 0; +end; + +procedure TestTCacheMem.TearDown; +begin + SetLength(FCurrentMem,0); +end; + +procedure TestTCacheMem.TestCacheMem; +Var LCMem : TCacheMem; + LBuff : TBytes; + i : Integer; +begin + LCMem := TCacheMem.Create(OnNeedDataProc,OnSaveDataProc); + Try + InitCurrentMem(22); + SetLength(LBuff,Length(FCurrentMem)); + + LCMem.DefaultCacheDataBlocksSize :=5; + LCMem.GridCache := True; + // Check replacing initial position of buffer on Load + LCMem.Clear; + + FillChar(LBuff[0],Length(LBuff),0); + CheckTrue( LCMem.LoadData(LBuff[0],3,3) ); + CheckBytes(LBuff,3,3); + + FillChar(LBuff[0],Length(LBuff),0); + CheckTrue( LCMem.LoadData(LBuff[0],1,9) ); + CheckBytes(LBuff,1,9); + + FillChar(LBuff[0],Length(LBuff),0); + CheckTrue( LCMem.LoadData(LBuff[0],9,2) ); + CheckBytes(LBuff,9,2); + + FillChar(LBuff[0],Length(LBuff),0); + CheckTrue( LCMem.LoadData(LBuff[0],8,3) ); + CheckBytes(LBuff,8,3); + + // Check false and load final data + FillChar(LBuff[0],Length(LBuff),0); + CheckFalse( LCMem.LoadData(LBuff[0],Length(FCurrentMem)-3,4) ); + CheckBytes(LBuff,Length(FCurrentMem)-3,3); + LCMem.ConsistencyCheck; + + // Load all to LBuff + CheckTrue( LCMem.LoadData(LBuff[0],0,Length(LBuff)) ); + // Check replacing initial position of buffer on Save + LCMem.Clear; + LCMem.SaveToCache(LBuff[0],3,3,True); + LCMem.SaveToCache(LBuff[0],7,0,True); + + // Check saving chunks + LCMem.Clear; + LCMem.DefaultCacheDataBlocksSize := 5; + LCMem.GridCache := False; + LCMem.SaveToCache(LBuff[2],5,2,True); + LCMem.SaveToCache(LBuff[1],15,1,True); + CheckTrue( LCMem.CacheDataBlocks=4, Format('3 Cache blocks: %d',[LCMem.CacheDataBlocks])); + LCMem.Clear; + LCMem.GridCache := True; + LCMem.SaveToCache(LBuff[2],5,2,True); + LCMem.SaveToCache(LBuff[1],15,1,True); + CheckTrue( LCMem.CacheDataBlocks=4, Format('4 Cache blocks: %d',[LCMem.CacheDataBlocks])); + LCMem.Clear; + + // Clear FCurrentMem + LCMem.Clear; + FillChar(FCurrentMem[0],Length(FCurrentMem),0); + // Save from LBuff + LCMem.SaveToCache(LBuff,0,True); + LCMem.FlushCache; + LCMem.ConsistencyCheck; + + LCMem.Clear; + InitCurrentMem(100); + SetLength(LBuff,Length(FCurrentMem)); + + // Save 3 blocks + LCMem.LoadData(LBuff[0],2,2*LCMem.DefaultCacheDataBlocksSize); + LCMem.Clear; + LCMem.SaveToCache(LBuff[0], 2*LCMem.DefaultCacheDataBlocksSize , 2,True); + CheckTrue( LCMem.CacheDataBlocks=3, '3 Cache blocks'); + + LCMem.ConsistencyCheck; + + CheckTrue( LCMem.LoadData(LBuff[0],1,98) ); + // Incremental round + i := 1; + while (i+i < High(FCurrentMem)) do begin + CheckTrue( LCMem.LoadData(LBuff[0],i-1,i) ); + CheckBytes(LBuff,i-1,i); + inc(i); + end; + CheckFalse( LCMem.LoadData( LBuff[0],i+1,i) ); + + LCMem.ConsistencyCheck; + Finally + LCMem.Free; + End; +end; + +procedure TestTCacheMem.TestCacheMem_1; +Var + iPos, nSize, nRounds, i : Integer; +begin + TestCacheMem_Randomly(0,20000,1024*1024*100,5000,0,False); + TestCacheMem_Randomly(0,20000,1024*1024*100,5000,500,False); + TestCacheMem_Randomly(0,20000,1024*1024*100,5000,50,True); +end; + +procedure TestTCacheMem.TestCacheMem_64bits; +Var LCMem : TCacheMem; + LBuff : TBytes; + i : Integer; + LStartPos , LEndPos : Int64; + +begin + InitCurrentMem(0); + SetLength(LBuff,256*200); + LCMem := TCacheMem.Create(OnNeedDataProc_BlackHole,OnSaveDataProc_BlackHole); + Try + LCMem.GridCache := False; + LCMem.DefaultCacheDataBlocksSize := -1; + LCMem.MaxCacheSize := 1024*1024 * 1; + LCMem.MaxCacheDataBlocks := 500; + Try + LStartPos := (256*256*256)-(1024*10); + LEndPos := (LStartPos * 256) + Length(LBuff) + 1024; + i := 0; + repeat + inc(i); + Inc(LStartPos,Length(LBuff)); + LCMem.LoadData(LBuff[0],LStartPos,Length(LBuff)); + if (i MOD 2)=0 then begin + LCMem.SaveToCache(LBuff,LStartPos,True); + end; + + until LStartPos > LEndPos; + Except + on E:Exception do begin + E.Message := Format('Round %d StartPos:%d %s (%s):%s',[i, LStartPos,LStartPos.ToHexString, E.ClassName,E.Message]); + Raise; + end; + End; + // Check replacing initial position of buffer on Load + LCMem.Clear; + Finally + LCMem.Free; + End; +end; + +procedure TestTCacheMem.TestCacheMem_Randomly(ASeed, ARounds: Integer; + AMaxCacheSize, AMaxCacheDataBlocks, ADefaultCacheDataBlocksSize: Int64; + AGridCache: Boolean); +Var LCMem : TCacheMem; + LBuff : TBytes; + iPos, nSize, nRounds, i : Integer; +begin + if ASeed>=0 then RandSeed := ASeed; + + LCMem := TCacheMem.Create(OnNeedDataProc,OnSaveDataProc); + Try + LCMem.MaxCacheSize := AMaxCacheSize; + LCMem.MaxCacheDataBlocks := AMaxCacheDataBlocks; + LCMem.DefaultCacheDataBlocksSize := ADefaultCacheDataBlocksSize; + LCMem.GridCache := AGridCache; + // + InitCurrentMem(10000000); + SetLength(LBuff,Length(FCurrentMem)); + nRounds := 0; + // + repeat + inc(nRounds); + iPos := Random(Length(FCurrentMem) - 1000); + nSize := Random( (Length(FCurrentMem)-iPos) DIV 100000 )+1; + if (Random(2)=0) then begin + Assert(LCMem.LoadData(LBuff[0],iPos,nSize),Format('(Round %d) Cannot load data ad Pos %d size %d',[nRounds,iPos,nSize])); + for i := 0 to nSize-1 do begin + Assert(LBuff[i]=PosData(i+iPos),Format('(Round %d) Pos data %d (%d + %d) is %d not %d',[nRounds,i+iPos,i,iPos,LBuff[i],PosData(i+iPos)])); + LBuff[i] := 0; // For future use + end; + end else begin + // SAVE DATA TEST + for i := 0 to nSize-1 do begin + LBuff[i]:=PosData(i+iPos); + end; + LCMem.SaveToCache(LBuff[0],nSize,iPos,Random(2)=0); + + // CHECK this saved data + Assert(LCMem.LoadData(LBuff[0],iPos,nSize),Format('(Round %d) Cannot load saved data ad Pos %d size %d',[nRounds,iPos,nSize])); + for i := 0 to nSize-1 do begin + Assert(LBuff[i]=PosData(i+iPos),Format('(Round %d) Pos saved data %d (%d + %d) is %d not %d',[nRounds,i+iPos,i,iPos,LBuff[i],PosData(i+iPos)])); + LBuff[i] := 0; // For future use + end; + end; + // Check + if (Random(100)=0) then LCMem.ConsistencyCheck; + until (nRounds>ARounds); + LCMem.ConsistencyCheck; + Finally + LCMem.Free; + End; +end; + +initialization + RegisterTest(TestTCacheMem{$IFNDEF FPC}.Suite{$ENDIF}); +end. diff --git a/src/libraries/abstractmem/tests/src/UFileMem.Tests.pas b/src/libraries/abstractmem/tests/src/UFileMem.Tests.pas new file mode 100644 index 000000000..5067746ad --- /dev/null +++ b/src/libraries/abstractmem/tests/src/UFileMem.Tests.pas @@ -0,0 +1,226 @@ +unit UFileMem.Tests; + +{$IFDEF FPC} + {$MODE Delphi} +{$ENDIF} + +interface + + uses + SysUtils, Classes, + {$IFDEF FPC} + fpcunit, testutils, testregistry, + {$ELSE} + TestFramework, + System.IOUtils, + {$ENDIF} + {$IFNDEF FPC}System.Generics.Collections,System.Generics.Defaults,{$ELSE}Generics.Collections,Generics.Defaults,{$ENDIF} + UFileMem, UAbstractMem, UCacheMem, UOrderedList; + +{$I ./../../ConfigAbstractMem.inc } + + + type + // Test methods for class TCalc + + { TestTFileMem } + + TestTFileMem = class(TTestCase) + strict private + private + public + procedure SetUp; override; + procedure TearDown; override; + procedure Test_FileMem_Aux(AUseCache : Boolean); + procedure Test_AbstractMem_Aux(AAbstractMem : TAbstractMem; AStrings : TStrings; ACreateBlocks : Integer); + {$IFDEF FPC} + function ElapsedTestTime : Integer; + {$ENDIF} + function GetFullFileName(AFileName : String) : String; + procedure CheckConsistency(const AAbstractMem : TAbstractMem); + published + procedure Test_FileMem_Cache; + procedure Test_FileMem_No_Cache; + procedure Test_FileMame_MaxSize; + end; + + implementation + + +{$IFDEF FPC} +function TestTFileMem.ElapsedTestTime: Integer; +begin + Result := 0; +end; +{$ENDIF} + +procedure TestTFileMem.CheckConsistency(const AAbstractMem: TAbstractMem); +var LStructure : TStrings; + LAbstractMemZoneInfoList : TList<TAbstractMemZoneInfo>; + LTotalUsedSize, LTotalUsedBlocksCount, LTotalLeaksSize, LTotalLeaksBlocksCount : TAbstractMemPosition; +begin + LStructure := TStringList.Create; + Try + IF Not AAbstractMem.CheckConsistency(LStructure,Nil,LTotalUsedSize, LTotalUsedBlocksCount, LTotalLeaksSize, LTotalLeaksBlocksCount) then begin + raise Exception.Create(LStructure.Text); + end; + Finally + LStructure.Free; + End; +end; + +function TestTFileMem.GetFullFileName(AFileName: String): String; +begin + {$IFDEF FPC} + Result := GetTempDir+PathDelim+AFileName; + {$ELSE} + Result := System.IOUtils.TPath.GetTempPath+PathDelim+AFileName; + {$ENDIF} +end; + +procedure TestTFileMem.SetUp; +begin +end; + +procedure TestTFileMem.TearDown; +begin +end; + +procedure TestTFileMem.Test_AbstractMem_Aux(AAbstractMem: TAbstractMem; AStrings : TStrings; ACreateBlocks: Integer); +var LAMs : TList<TAMZone>; + i, j, k : integer; + LData : TBytes; +begin + if ACreateBlocks<=0 then Exit; + Randomize; + LAMs := TList<TAMZone>.Create; + try + SetLength(LData,10000); + for i := 0 to Length(LData)-1 do begin + LData[i] := Byte(i+1); + end; + for i := 0 to ACreateBlocks do begin + LAMs.Add( AAbstractMem.New(20*(Random(15)+1)) ); + AAbstractMem.Write(LAMs.Items[i].position,LData[0],LAMs.Items[i].size); + end; + + AStrings.Add(Format('Create %d blocks with max %d bytes ET %d',[ACreateBlocks,Length(LData),ElapsedTestTime])); + // Blocks created + // Play with them + for i := 0 to ACreateBlocks*4 do begin + // Read randomly + j := Random(LAMs.Count DIV 10); + AAbstractMem.Read(LAMs.Items[j].position,LData[0],LAMs.Items[j].size); + end; + AStrings.Add(Format('Read %d blocks randomly ET %d',[ACreateBlocks,ElapsedTestTime])); + // + for i := 0 to ACreateBlocks*4 do begin + // Write randomly + j := Random(LAMs.Count DIV 10); + AAbstractMem.Write(LAMs.Items[j].position,LData[0],LAMs.Items[j].size); + end; + AStrings.Add(Format('Write %d blocks randomly ET %d',[ACreateBlocks,ElapsedTestTime])); + + finally + LAMs.Free; + end; +end; + +procedure TestTFileMem.Test_FileMame_MaxSize; +var Lfm : TFileMem; + LTotalSize : Int64; + Lfile : TFileStream; + s : String; + LData : TBytes; + i : Integer; +var LAMs : TList<TAMZone>; +begin + Lfm := TFileMem.Create(GetFullFileName('test_FileMem_Maxsize.am'),False); + LAMs := TList<TAMZone>.Create; + try + Lfm.UseCache := False; + CheckConsistency(Lfm); + // + SetLength(LData,50000000); + for i := 0 to Length(LData)-1 do begin + LData[i] := Byte(i+1); + end; + LTotalSize := Lfm.NextAvailablePos; + i := 0; + while Lfm.NextAvailablePos<((Int64(2147483648)*2) + (Length(LData)*2)) do begin + LAMs.Add( Lfm.New(Length(LData)) ); + inc(LTotalSize, Int64(Length(LData)) ); + inc(i); + Lfm.FlushCache; + if Lfm.NextAvailablePos>MaxInt then begin + CheckConsistency(Lfm); + end; + end; + + finally + LAMs.Free; + Lfm.Free; + end; +end; + +procedure TestTFileMem.Test_FileMem_Aux(AUseCache: Boolean); +var Lfm : TFileMem; + Ltc : Int64; + Lfs : TStrings; + Lfile : TFileStream; + s : String; +begin + Lfm := TFileMem.Create(GetFullFileName('test_FileMem_Aux.am'),False); + Lfs := TStringList.Create; + try + Lfm.ClearContent(False,4); + Lfm.UseCache := AUseCache; + if AUseCache then begin + Lfm.MaxCacheSize := 1024 * 1024 * 2; // 2 Mb + Lfm.MaxCacheDataBlocks := 10000; // 10 K + Lfs.Add(Format('Use cache with MaxCacheSize:%d and MaxCacheDataBlocks:%d',[Lfm.MaxCacheSize,Lfm.MaxCacheDataBlocks])); + end else begin + Lfs.Add('NO use cache'); + end; + // + Test_AbstractMem_Aux(Lfm,Lfs,50000); + Lfm.FlushCache; + + {$IFDEF ABSTRACTMEM_ENABLE_STATS} + if AUseCache then begin + Lfs.Add( Lfm.LockCache.CacheMemStats.ToString ); + Lfm.UnlockCache; + end; + {$ENDIF} + + Lfs.Add(Format('Elapsed time %d',[ElapsedTestTime])); + Lfs.Add(''); + + s := ExtractFileDir(ParamStr(0))+PathDelim+'test_FileMem_Aux.log'; + if FileExists(s) then Lfile := TFileStream.Create(s,fmOpenReadWrite) + else Lfile := TFileStream.Create(s,fmCreate); + try + Lfile.Seek(0,soFromEnd); + Lfs.SaveToStream(lfile); + finally + Lfile.Free; + end; + finally + Lfs.Free; + Lfm.Free; + end; +end; + +procedure TestTFileMem.Test_FileMem_Cache; +begin + Test_FileMem_Aux(True); +end; + +procedure TestTFileMem.Test_FileMem_No_Cache; +begin + Test_FileMem_Aux(False); +end; + +initialization + RegisterTest(TestTFileMem{$IFNDEF FPC}.Suite{$ENDIF}); +end. diff --git a/src/libraries/abstractmem/tests/src/UMemoryBTreeData.Tests.pas b/src/libraries/abstractmem/tests/src/UMemoryBTreeData.Tests.pas new file mode 100644 index 000000000..1c177be3b --- /dev/null +++ b/src/libraries/abstractmem/tests/src/UMemoryBTreeData.Tests.pas @@ -0,0 +1,87 @@ +unit UMemoryBTreeData.Tests; + +{$IFDEF FPC} + {$MODE Delphi} +{$ENDIF} + +interface + +uses + SysUtils, Classes, + {$IFDEF FPC} + fpcunit, testutils, testregistry, + {$ELSE} + TestFramework, + {$ENDIF} + {$IFNDEF FPC}System.Generics.Collections,System.Generics.Defaults,{$ELSE}Generics.Collections,Generics.Defaults,{$ENDIF} + UMemoryBTreeData, + UOrderedList; + +type + TestTMemoryBTreeData = class(TTestCase) + strict private + public + Type TTestData = record + a : Integer; + b : String; + end; + published + procedure Test_Integer; + procedure Test_Record; + end; + +implementation + + +{ TestTMemoryBTreeData } + +function CompareTTestData(const ALeft, ARight: TestTMemoryBTreeData.TTestData): Integer; +begin + Result := ALeft.a - ARight.a; + if Result=0 then Result := TComparison_String(ALeft.b,ARight.b); +end; + +procedure TestTMemoryBTreeData.Test_Integer; +var Lbt : TMemoryBTreeData<Integer>; + i, intValue : Integer; +begin + Lbt := TMemoryBTreeData<Integer>.Create(TComparison_Integer,True,7); + try + for i:=1 to Lbt.Order do Lbt.AddIndex(TComparison_Integer,False); + i := 1; + repeat + intValue := (i DIV 2); + inc(i); + Lbt.AddData(intValue); + if (i MOD Lbt.Order)=0 then Lbt.DeleteData(intValue); + until Lbt.Height>6; + Lbt.CheckConsistency; + finally + Lbt.Free; + end; +end; + +procedure TestTMemoryBTreeData.Test_Record; +var Lbt : TMemoryBTreeData<TTestData>; + i : Integer; + d : TTestData; +begin + Lbt := TMemoryBTreeData<TTestData>.Create(CompareTTestData,True,7); + try + for i:=1 to Lbt.Order do Lbt.AddIndex(CompareTTestData,False); + repeat + d.a := (i DIV 2); + d.b := IntToStr(d.a); + inc(i); + Lbt.AddData(d); + if (i MOD Lbt.Order)=0 then Lbt.DeleteData(d); + until Lbt.Height>6; + Lbt.CheckConsistency; + finally + Lbt.Free; + end; +end; + +initialization + RegisterTest(TestTMemoryBTreeData{$IFNDEF FPC}.Suite{$ENDIF}); +end. diff --git a/src/libraries/gnugettext/gnugettext.pas b/src/libraries/gnugettext/gnugettext.pas new file mode 100644 index 000000000..d4cb39a33 --- /dev/null +++ b/src/libraries/gnugettext/gnugettext.pas @@ -0,0 +1,4307 @@ +{*------------------------------------------------------------------------------ + GNU gettext translation system for Delphi, Kylix, C++ Builder and others. + All parts of the translation system are kept in this unit. + + @author Lars B. Dybdahl and others + @version $LastChangedRevision: 220 $ + @see http://dybdahl.dk/dxgettext/ +-------------------------------------------------------------------------------} +unit gnugettext; + +(**************************************************************) +(* *) +(* (C) Copyright by Lars B. Dybdahl and others *) +(* E-mail: Lars@dybdahl.dk, phone +45 70201241 *) +(* *) +(* Contributors: Peter Thornqvist, Troy Wolbrink, *) +(* Frank Andreas de Groot, Igor Siticov, *) +(* Jacques Garcia Vazquez, Igor Gitman, *) +(* Arvid Winkelsdorf, *) +(* Thomas Mueller (dummzeuch) *) +(* Olivier Sannier (obones) *) +(* *) +(* See http://dybdahl.dk/dxgettext/ for more information *) +(* *) +(**************************************************************) + +// Information about this file: +// $LastChangedDate: 2010-08-25 15:40:17 +0200 (on, 25 aug 2010) $ +// $LastChangedRevision: 220 $ +// $HeadURL: http://svn.berlios.de/svnroot/repos/dxgettext/trunk/dxgettext/sample/gnugettext.pas $ + +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// The names of any contributor may not be used to endorse or promote +// products derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// fvd +// 2020-03-26 Added DebugLogToString +// 2020-03-26 Lazarus support improved +// 2020-03-26 Added language code to native name routine +// + +interface + +// If the conditional define DXGETTEXTDEBUG is defined, debugging log is activated. +// Use DefaultInstance.DebugLogToFile() to write the log to a file. +{.$define DXGETTEXTDEBUG} + +{$IFDEF FPC} +//{$mode objfpc}{$H+} + {$mode delphi} +{$ENDIF} + +// ### LO - Workaround aka hack for programs compiled with German Delphi +// +// If the current OS Language is not German, immediately add a Delphi RTL domain +// to the resource domains and bind the text domain to a fixed German->English +// translation. +// Using a fixed German->English translation because the OS +// Language may not be one of the installed translations. +// Otherwise the German RTL resourcestrings will not be translated. +// This results in German menu shortcuts 'Strg+', 'Umsch+' instead of +// 'Ctrl+', 'Shift+' and so on. +// +// Since there is no way to automatically determine whether the compiling version +// is German, you must enable the following conditional define to enable it. +// Be warned: This has not been thoroughly tested. +// Default is turned off. +{.$define dx_German_Delphi_fix} + +// if the conditional define dx_SupportsResources is defined the .mo files +// can also be added to the executable as Windows resources +// Be warned: This has not been thoroughly tested. +// Default is turned off. +{.$define dx_SupportsResources} + +{$ifdef VER140} + // Delphi 6 + {$DEFINE dx_Hinstance_is_Integer} + {$DEFINE dx_NativeInt_is_Integer} + {$DEFINE dx_NativeUInt_is_Cardinal} +{$endif} +{$ifdef VER150} + // Delphi 7 + {$DEFINE dx_has_Unsafe_Warnings} + {$DEFINE dx_Hinstance_is_Integer} + {$DEFINE dx_NativeInt_is_Integer} + {$DEFINE dx_NativeUInt_is_Cardinal} +{$endif} +{$ifdef VER160} + // Delphi 8 + {$DEFINE dx_has_Unsafe_Warnings} + {$DEFINE dx_has_WideStrings} + {$DEFINE dx_Hinstance_is_Integer} + {$DEFINE dx_NativeInt_is_Integer} + {$DEFINE dx_NativeUInt_is_Cardinal} +{$endif} +{$ifdef VER170} + // Delphi 2005 + {$DEFINE dx_has_Unsafe_Warnings} + {$DEFINE dx_has_WideStrings} + {$DEFINE dx_Hinstance_is_Integer} + {$DEFINE dx_NativeInt_is_Integer} + {$DEFINE dx_NativeUInt_is_Cardinal} +{$endif} +{$ifdef VER180} + {$ifndef VER185} + // Delphi 2006 + {$DEFINE dx_has_Unsafe_Warnings} + {$DEFINE dx_has_WideStrings} + {$DEFINE dx_Hinstance_is_Integer} + {$DEFINE dx_NativeInt_is_Integer} + {$DEFINE dx_NativeUInt_is_Cardinal} + {$DEFINE dx_has_Inline} + {$endif} +{$endif} +{$ifdef VER185} + // Delphi 2007 + {$DEFINE dx_has_Unsafe_Warnings} + {$DEFINE dx_has_WideStrings} + {$DEFINE dx_Hinstance_is_Integer} + {$DEFINE dx_NativeInt_is_Integer} + {$DEFINE dx_NativeUInt_is_Cardinal} + {$DEFINE dx_has_Inline} +{$endif} +// there was no VER190 ?? +{$ifdef VER200} + // Delphi 2009, first version with Unicode + {$DEFINE dx_has_Unsafe_Warnings} + {$DEFINE dx_has_WideStrings} + {$DEFINE dx_Hinstance_is_Integer} + {$DEFINE dx_NativeInt_is_Integer} + {$DEFINE dx_NativeUInt_is_Cardinal} + {$DEFINE dx_has_Inline} + {$DEFINE dx_StringList_has_OwnsObjects} + {$DEFINE dx_has_LpVoid} +{$endif} +{$ifdef VER210} + // Delphi 2010 + {$DEFINE dx_has_Unsafe_Warnings} + {$DEFINE dx_has_WideStrings} + {$DEFINE dx_Hinstance_is_Integer} + {$DEFINE dx_NativeInt_is_Integer} + {$DEFINE dx_NativeUInt_is_Cardinal} + {$DEFINE dx_has_Inline} + {$DEFINE dx_StringList_has_OwnsObjects} + {$DEFINE dx_has_LpVoid} +{$endif} +{$ifdef VER220} + // Delphi 2011/XE + {$DEFINE dx_has_Unsafe_Warnings} + {$DEFINE dx_has_WideStrings} + {$DEFINE dx_Hinstance_is_Integer} + {$DEFINE dx_NativeInt_is_Integer} + {$DEFINE dx_NativeUInt_is_Cardinal} + {$DEFINE dx_has_Inline} + {$DEFINE dx_has_LpVoid} + {$DEFINE dx_StringList_has_OwnsObjects} +{$endif} +{$ifdef VER230} + // Delphi 2012/XE2 + {$DEFINE dx_has_Unsafe_Warnings} + {$DEFINE dx_has_WideStrings} + {$DEFINE dx_StringList_has_OwnsObjects} + {$DEFINE dx_has_Inline} + {$DEFINE dx_has_LpVoid} + {$DEFINE dx_has_VclThemes} +{$endif} +{$ifdef VER240} + // Delphi 2013/XE3 + {$DEFINE dx_has_Unsafe_Warnings} + {$DEFINE dx_has_WideStrings} + {$DEFINE dx_StringList_has_OwnsObjects} + {$DEFINE dx_GetStrProp_reads_unicode} + {$DEFINE dx_has_Inline} + {$DEFINE dx_has_LpVoid} + {$DEFINE dx_has_VclThemes} +{$endif} +{$IFNDEF FPC} +{$if CompilerVersion > 24} + // Delphi XE4, XE5, XE6, XE7 (and newer) + {$DEFINE dx_has_Unsafe_Warnings} + {$DEFINE dx_has_WideStrings} + {$DEFINE dx_StringList_has_OwnsObjects} + {$DEFINE dx_GetStrProp_reads_unicode} + {$DEFINE dx_has_Inline} + {$DEFINE dx_has_LpVoid} + {$DEFINE dx_has_VclThemes} + {$DEFINE dx_midstr_in_AnsiStrings} +{$ifend} +{$ENDIF} + +{$ifdef dx_has_Unsafe_Warnings} + {$WARN UNSAFE_TYPE OFF} + {$WARN UNSAFE_CODE OFF} + {$WARN UNSAFE_CAST OFF} +{$endif dx_has_Unsafe_Warnings} + +uses +{$ifdef MSWINDOWS} + Windows, +{$else} + Libc, +{$ifdef FPC} + CWString, +{$endif} +{$endif} +{$IFDEF dx_midstr_in_AnsiStrings} + System.AnsiStrings, +{$ENDIF dx_midstr_in_AnsiStrings} +{$IFDEF dx_has_WideStrings} + WideStrings, +{$ENDIF dx_has_WideStrings} + Types, Classes, StrUtils, SysUtils, TypInfo; + +(*****************************************************************************) +(* *) +(* MAIN API *) +(* *) +(*****************************************************************************) +const + LanguageCodeArr : array [0..4,0..1] of string = + ( + ('en','English'), + ('fr','français'), + ('nl','Nederlands'), + ('de','Deutsch'), + ('es','español') + ); + +type + {$IFNDEF UNICODE} + UnicodeString=WideString; + RawUtf8String=AnsiString; + RawByteString=AnsiString; + {$ELSE} + RawUtf8String=RawByteString; + {$ENDIF} + DomainString=string; + LanguageString=string; + ComponentNameString=string; + FilenameString=string; + MsgIdString=UnicodeString; + TranslatedUnicodeString=UnicodeString; + +// Main GNU gettext functions. See documentation for instructions on how to use them. +function _(const szMsgId: MsgIdString): TranslatedUnicodeString; +function gettext(const szMsgId: MsgIdString): TranslatedUnicodeString; +function gettext_NoExtract(const szMsgId: MsgIdString): TranslatedUnicodeString; +function gettext_NoOp(const szMsgId: MsgIdString): TranslatedUnicodeString; +function dgettext(const szDomain: DomainString; const szMsgId: MsgIdString): TranslatedUnicodeString; +function dgettext_NoExtract(const szDomain: DomainString; const szMsgId: MsgIdString): TranslatedUnicodeString; +function dgettext_NoOp(const szDomain: DomainString; const szMsgId: MsgIdString): TranslatedUnicodeString; +function dngettext(const szDomain: DomainString; const singular,plural: MsgIdString; Number:longint): TranslatedUnicodeString; +function ngettext(const singular,plural: MsgIdString; Number:longint): TranslatedUnicodeString; +function ngettext_NoExtract(const singular,plural: MsgIdString; Number:longint): TranslatedUnicodeString; +procedure textdomain(const szDomain: DomainString); +function getcurrenttextdomain: DomainString; +procedure bindtextdomain(const szDomain: DomainString; const szDirectory: FilenameString); + +// Set language to use +procedure UseLanguage(LanguageCode: LanguageString); +function GetCurrentLanguage:LanguageString; + +// language code to native language +function CodeToNativeLanguage(LanguageCode:LanguageString):String; +// native language to language code +function NativeLanguageToCode(NativeLanguage:String):LanguageString; + +// Translates a component (form, frame etc.) to the currently selected language. +// Put TranslateComponent(self) in the OnCreate event of all your forms. +// See the manual for documentation on these functions +type + TTranslator=procedure (obj:TObject) of object; + +procedure TP_Ignore(AnObject:TObject; const name:ComponentNameString); +procedure TP_IgnoreClass (IgnClass:TClass); +procedure TP_IgnoreClassProperty (IgnClass:TClass;const propertyname:ComponentNameString); +procedure TP_GlobalIgnoreClass (IgnClass:TClass); +function TP_TryGlobalIgnoreClass (IgnClass:TClass): boolean; +procedure TP_GlobalIgnoreClassProperty (IgnClass:TClass;const propertyname:ComponentNameString); +procedure TP_GlobalHandleClass (HClass:TClass;Handler:TTranslator); +procedure TP_Remember(AnObject: TObject; PropName:ComponentNameString; OldValue:TranslatedUnicodeString); +procedure TranslateComponent(AnObject: TComponent; const TextDomain:DomainString=''); +procedure RetranslateComponent(AnObject: TComponent; const TextDomain:DomainString=''); + +// Add more domains that resourcestrings can be extracted from. If a translation +// is not found in the default domain, this domain will be searched, too. +// This is useful for adding mo files for certain runtime libraries and 3rd +// party component libraries +procedure AddDomainForResourceString (const domain:DomainString); +procedure RemoveDomainForResourceString (const domain:DomainString); + +// Add more domains that component strings can be extracted from. If a translation +// is not found in the default domain, this domain will be searched, too. +// This is useful when an application inherits components from a 3rd +// party component libraries +procedure AddDomainForComponent (const domain:DomainString); +procedure RemoveDomainForComponent (const domain:DomainString); + +// Unicode-enabled way to get resourcestrings, automatically translated +// Use like this: ws:=LoadResStringW(@NameOfResourceString); +{$IFNDEF FPC} +function LoadResString(ResStringRec: PResStringRec): widestring; +function LoadResStringW(ResStringRec: PResStringRec): UnicodeString; +{$ENDIF} + +// This returns an empty string if not translated or translator name is not specified. +function GetTranslatorNameAndEmail:TranslatedUnicodeString; + + +(*****************************************************************************) +(* *) +(* ADVANCED FUNCTIONALITY *) +(* *) +(*****************************************************************************) + +const + DefaultTextDomain = 'default'; + +var + ExecutableFilename: FilenameString; // This is set to paramstr(0) or the name of the DLL you are creating. + +const + PreferExternal = False; // Set to true, to prefer external *.mo over embedded translation + UseMemoryMappedFiles = True; // Set to False, to use the mo-file as independent copy in memory (you can update the file while it is in use) + ReReadMoFileOnSameLanguage = False; // Set to True, to reread mo-file if the current language is selected again + +const + // Subversion source code version control version information + VCSVersion='$LastChangedRevision: 220 $'; + +type + EGnuGettext=class(Exception); + EGGProgrammingError=class(EGnuGettext); + EGGComponentError=class(EGnuGettext); + EGGIOError=class(EGnuGettext); + EGGAnsi2WideConvError=class(EGnuGettext); + +// This function will turn resourcestring hooks on or off, eventually with BPL file support. +// Please do not activate BPL file support when the package is in design mode. +const AutoCreateHooks=true; +procedure HookIntoResourceStrings (enabled:boolean=true; SupportPackages:boolean=false); + + + + +(*****************************************************************************) +(* *) +(* CLASS based implementation. *) +(* Use TGnuGettextInstance to have more than one language *) +(* in your application at the same time *) +(* *) +(*****************************************************************************) + +type + TOnDebugLine = Procedure (Sender: TObject; const Line: String; var Discard: Boolean) of Object; // Set Discard to false if output should still go to ordinary debug log + TGetPluralForm=function (Number:Longint):Integer; + TDebugLogger=procedure (line: ansistring) of object; + +{*------------------------------------------------------------------------------ + Handles .mo files, in separate files or inside the exe file. + Don't use this class. It's for internal use. +-------------------------------------------------------------------------------} + TMoFile= + class /// Threadsafe. Only constructor and destructor are writing to memory + private + doswap: boolean; + public + Users:Integer; /// Reference count. If it reaches zero, this object should be destroyed. + constructor Create (const filename: FilenameString; + const Offset: int64; Size: int64; + const xUseMemoryMappedFiles: Boolean; + const ResName: string); + destructor Destroy; override; + function gettext(const msgid: RawUtf8String;var found:boolean): RawUtf8String; // uses mo file and utf-8 + property isSwappedArchitecture:boolean read doswap; + private + N, O, T: Cardinal; /// Values defined at http://www.linuxselfhelp.com/gnu/gettext/html_chapter/gettext_6.html + startindex,startstep:integer; + FUseMemoryMappedFiles: Boolean; + mo: THandle; + momapping: THandle; + momemoryHandle:PAnsiChar; + momemory: PAnsiChar; + function autoswap32(i: cardinal): cardinal; + function CardinalInMem(baseptr: PAnsiChar; Offset: Cardinal): Cardinal; + end; + +{*------------------------------------------------------------------------------ + Handles all issues regarding a specific domain. + Don't use this class. It's for internal use. +-------------------------------------------------------------------------------} + TDomain= + class + private + Enabled:boolean; + vDirectory: FilenameString; + procedure setDirectory(const dir: FilenameString); + public + DebugLogger:TDebugLogger; + Domain: DomainString; + property Directory: FilenameString read vDirectory write setDirectory; + constructor Create; + destructor Destroy; override; + // Set parameters + procedure SetLanguageCode (const langcode:LanguageString); + procedure SetFilename (const filename:FilenameString); // Bind this domain to a specific file + // Get information + procedure GetListOfLanguages(list:TStrings); + function GetTranslationProperty(Propertyname: ComponentNameString): TranslatedUnicodeString; + function gettext(const msgid: RawUtf8String): RawUtf8String; // uses mo file and utf-8 + private + mofile:TMoFile; + SpecificFilename:FilenameString; + curlang: LanguageString; + OpenHasFailedBefore: boolean; + procedure OpenMoFile; + procedure CloseMoFile; + end; + +{*------------------------------------------------------------------------------ + Helper class for invoking events. +-------------------------------------------------------------------------------} + TExecutable= + class + procedure Execute; virtual; abstract; + end; + +{*------------------------------------------------------------------------------ + Interface to implement if you want to register as a language change listener +-------------------------------------------------------------------------------} + IGnuGettextInstanceWhenNewLanguageListener = interface + procedure WhenNewLanguage (const LanguageID:LanguageString); + end; + +{*------------------------------------------------------------------------------ + The main translation engine. +-------------------------------------------------------------------------------} + TGnuGettextInstance= + class + private + fOnDebugLine:TOnDebugLine; + public + Enabled:Boolean; /// Set this to false to disable translations + DesignTimeCodePage:Integer; /// See MultiByteToWideChar() in Win32 API for documentation + SearchAllDomains: Boolean; /// Should gettext and ngettext look in all other known domains after the current one + + constructor Create; + destructor Destroy; override; + procedure UseLanguage(LanguageCode: LanguageString); + procedure GetListOfLanguages (const domain:DomainString; list:TStrings); // Puts list of language codes, for which there are translations in the specified domain, into list + {$ifndef UNICODE} + function gettext(const szMsgId: ansistring): TranslatedUnicodeString; overload; virtual; + function ngettext(const singular,plural:ansistring;Number:longint):TranslatedUnicodeString; overload; virtual; + {$endif} + function gettext(const szMsgId: MsgIdString): TranslatedUnicodeString; overload; virtual; + function gettext_NoExtract(const szMsgId: MsgIdString): TranslatedUnicodeString; + function gettext_NoOp(const szMsgId: MsgIdString): TranslatedUnicodeString; + function ngettext(const singular,plural:MsgIdString;Number:longint):TranslatedUnicodeString; overload; virtual; + function ngettext_NoExtract(const singular,plural:MsgIdString;Number:longint):TranslatedUnicodeString; + function GetCurrentLanguage:LanguageString; + function GetTranslationProperty (const Propertyname:ComponentNameString):TranslatedUnicodeString; + function GetTranslatorNameAndEmail:TranslatedUnicodeString; + + // Form translation tools, these are not threadsafe. All TP_ procs must be called just before TranslateProperites() + procedure TP_Ignore(AnObject:TObject; const name:ComponentNameString); + procedure TP_IgnoreClass (IgnClass:TClass); + procedure TP_IgnoreClassProperty (IgnClass:TClass;propertyname:ComponentNameString); + function TP_TryGlobalIgnoreClass (IgnClass:TClass): boolean; + procedure TP_GlobalIgnoreClass (IgnClass:TClass); + procedure TP_GlobalIgnoreClassProperty (IgnClass:TClass;propertyname:ComponentNameString); + procedure TP_GlobalHandleClass (HClass:TClass;Handler:TTranslator); + procedure TP_Remember(AnObject: TObject; PropName:ComponentNameString; OldValue:TranslatedUnicodeString); + procedure TranslateProperties(AnObject: TObject; textdomain:DomainString=''); + procedure TranslateComponent(AnObject: TComponent; const TextDomain:DomainString=''); + procedure RetranslateComponent(AnObject: TComponent; const TextDomain:DomainString=''); + + // Multi-domain functions + {$ifndef UNICODE} + function dgettext(const szDomain: DomainString; const szMsgId: ansistring): TranslatedUnicodeString; overload; virtual; + function dngettext(const szDomain: DomainString; const singular,plural:ansistring;Number:longint):TranslatedUnicodeString; overload; virtual; + {$endif} + function dgettext(const szDomain: DomainString; const szMsgId: MsgIdString): TranslatedUnicodeString; overload; virtual; + function dgettext_NoExtract(const szDomain: DomainString; const szMsgId: MsgIdString): TranslatedUnicodeString; + function dgettext_NoOp(const szDomain: DomainString; const szMsgId: MsgIdString): TranslatedUnicodeString; + function dngettext(const szDomain: DomainString; const singular,plural:MsgIdString;Number:longint):TranslatedUnicodeString; overload; virtual; + function dngettext_NoExtract(const szDomain: DomainString; const singular,plural:MsgIdString;Number:longint):TranslatedUnicodeString; + procedure txtdomain(const szDomain: DomainString); + function getcurrenttextdomain: DomainString; + procedure bindtextdomain(const szDomain: DomainString; const szDirectory: FilenameString); + procedure bindtextdomainToFile (const szDomain: DomainString; const filename: FilenameString); // Also works with files embedded in exe file + + // Windows API functions + {$IFNDEF FPC} + function LoadResString(ResStringRec: PResStringRec): UnicodeString; + {$ENDIF} + + // Output all log info to this file. This may only be called once. + procedure DebugLogToFile (const filename:FilenameString; append:boolean=false); + procedure DebugLogPause (PauseEnabled:boolean); + property OnDebugLine: TOnDebugLine read fOnDebugLine write fOnDebugLine; // If set, all debug output goes here + function DebugLogToString(Empty:Boolean = true):String; + {$ifndef UNICODE} + // Conversion according to design-time character set + function ansi2wideDTCP (const s:AnsiString):MsgIdString; // Convert using Design Time Code Page + {$endif} + + procedure RegisterWhenNewLanguageListener(Listener: IGnuGettextInstanceWhenNewLanguageListener); + procedure UnregisterWhenNewLanguageListener(Listener: IGnuGettextInstanceWhenNewLanguageListener); + protected + procedure TranslateStrings (sl:TStrings;const TextDomain:DomainString); + {$IFDEF dx_has_WideStrings} + procedure TranslateWideStrings (sl: TWideStrings;const TextDomain:DomainString); + {$ENDIF dx_has_WideStrings} + + // Override these three, if you want to inherited from this class + // to create a new class that handles other domain and language dependent + // issues + procedure WhenNewLanguage (const LanguageID:LanguageString); virtual; // Override to know when language changes + procedure WhenNewDomain (const TextDomain:DomainString); virtual; // Override to know when text domain changes. Directory is purely informational + procedure WhenNewDomainDirectory (const TextDomain:DomainString;const Directory:FilenameString); virtual; // Override to know when any text domain's directory changes. It won't be called if a domain is fixed to a specific file. + private + curlang: LanguageString; + curGetPluralForm:TGetPluralForm; + curmsgdomain: DomainString; + savefileCS: TMultiReadExclusiveWriteSynchronizer; + savefile: TextFile; + savememory: TStringList; + DefaultDomainDirectory:FilenameString; + domainlist: TStringList; /// List of domain names. Objects are TDomain. + TP_IgnoreList:TStringList; /// Temporary list, reset each time TranslateProperties is called + TP_ClassHandling:TList; /// Items are TClassMode. If a is derived from b, a comes first + TP_GlobalClassHandling:TList; /// Items are TClassMode. If a is derived from b, a comes first + TP_Retranslator:TExecutable; /// Cast this to TTP_Retranslator + fWhenNewLanguageListeners: TInterfaceList; /// List of all registered WhenNewLanguage listeners + {$ifdef DXGETTEXTDEBUG} + DebugLogCS:TMultiReadExclusiveWriteSynchronizer; + DebugLog:TStream; + DebugLogOutputPaused:Boolean; + {$endif} + function TP_CreateRetranslator:TExecutable; // Must be freed by caller! + procedure FreeTP_ClassHandlingItems; + function ClassIsIgnored(AClass:TClass): Boolean; + {$ifdef DXGETTEXTDEBUG} + procedure DebugWriteln(line: ansistring); + {$endif} + procedure TranslateProperty(AnObject: TObject; PropInfo: PPropInfo; + TodoList: TStrings; const TextDomain:DomainString); + function Getdomain(const domain:DomainString; const sDefaultDomainDirectory:FilenameString; const sCurLang: LanguageString): TDomain; // Translates a single property of an object + end; + +const + LOCALE_SISO639LANGNAME = $59; // Used by Lazarus software development tool + LOCALE_SISO3166CTRYNAME = $5A; // Used by Lazarus software development tool + +var + DefaultInstance:TGnuGettextInstance; /// Default instance of the main API for singlethreaded applications. + +implementation + +{$ifdef dx_has_VclThemes} +uses + Vcl.Themes; +{$endif dx_has_VclThemes} + +{$ifndef MSWINDOWS} +{$ifndef LINUX} + 'This version of gnugettext.pas is only meant to be compiled with Kylix 3,' + 'Delphi 6, Delphi 7 and later versions. If you use other versions, please' + 'get the gnugettext.pas version from the Delphi 5 directory.' +{$endif} +{$endif} + +{$ifdef dx_NativeUInt_is_Cardinal} +type + NativeUInt = cardinal; +{$endif} + +(**************************************************************************) +// Some comments on the implementation: +// This unit should be independent of other units where possible. +// It should have a small footprint in any way. +(**************************************************************************) +// TMultiReadExclusiveWriteSynchronizer is used instead of TCriticalSection +// because it makes this unit independent of the SyncObjs unit +(**************************************************************************) + +{$B-,R+,I+,Q+} + +type + TTP_RetranslatorItem= + class + obj:TObject; + Propname:ComponentNameString; + OldValue:TranslatedUnicodeString; + end; + TTP_Retranslator= + class (TExecutable) + TextDomain:DomainString; + Instance:TGnuGettextInstance; + constructor Create; + destructor Destroy; override; + procedure Remember (obj:TObject; PropName:ComponentNameString; OldValue:TranslatedUnicodeString); + procedure Execute; override; + private + list:TList; + end; + TEmbeddedFileInfo= + class + offset,size:int64; + end; +{$IFDEF dx_SupportsResources} + TResourceFileInfo = class + public + ResourceName: string; + constructor Create(const _ResourceName: string); + end; +{$ENDIF dx_SupportsResources} + TFileLocator= + class // This class finds files even when embedded inside executable + constructor Create; + destructor Destroy; override; + function FindSignaturePos(const signature: RawByteString; str: TFileStream): Int64; + procedure Analyze; // List files embedded inside executable + function FileExists (filename:FilenameString):boolean; + function GetMoFile (filename:FilenameString;DebugLogger:TDebugLogger):TMoFile; + procedure ReleaseMoFile (mofile:TMoFile); + private + basedirectory:FilenameString; + filelist:TStringList; //Objects are TEmbeddedFileInfo. Filenames are relative to .exe file +{$IFDEF dx_SupportsResources} + FResourceList: TStringList; // Objects are TResourceFileInfo, Filenames are relative to .exe file +{$ENDIF dx_SupportsResources} + MoFilesCS:TMultiReadExclusiveWriteSynchronizer; + MoFiles:TStringList; // Objects are filenames+offset, objects are TMoFile + function ReadInt64 (str:TStream):int64; + end; + TGnuGettextComponentMarker= + class (TComponent) + public + LastLanguage:LanguageString; + Retranslator:TExecutable; + destructor Destroy; override; + end; + TClassMode= + class + HClass:TClass; + SpecialHandler:TTranslator; + PropertiesToIgnore:TStringList; // This is ignored if Handler is set + constructor Create; + destructor Destroy; override; + end; + TRStrinfo = record + strlength, stroffset: cardinal; + end; + TStrInfoArr = array[0..10000000] of TRStrinfo; + PStrInfoArr = ^TStrInfoArr; + TCharArray5=array[0..4] of ansichar; + THook= // Replaces a runtime library procedure with a custom procedure + class + public + constructor Create (OldProcedure, NewProcedure: pointer; FollowJump:boolean=false); + destructor Destroy; override; // Restores unhooked state + procedure Reset (FollowJump:boolean=false); // Disables and picks up patch points again + procedure Disable; + procedure Enable; + private + oldproc,newproc:Pointer; + Patch:TCharArray5; + Original:TCharArray5; + PatchPosition:PAnsiChar; + procedure Shutdown; // Same as destroy, except that object is not destroyed + end; + + PProxyClassData = ^TProxyClassData; + TProxyClassData = record + SelfPtr: TClass; + IntfTable: Pointer; + AutoTable: Pointer; + InitTable: Pointer; + TypeInfo: PTypeInfo; + FieldTable: Pointer; + MethodTable: Pointer; + DynamicTable: Pointer; + ClassName: PShortString; + InstanceSize: Integer; + Parent: ^TClass; + end; + + THookedObjects= + class(TList) + private + interceptorClassDatas:TList; + + function findInterceptorClassData(aClass:TClass):Pointer; + + procedure BeforeDestructionHook; + function GetBeforeDestructionHookAddress: Pointer; + public + constructor Create; + destructor Destroy; override; + + procedure Proxify(obj:TObject); + procedure Unproxify(obj:TObject); + end; + +var + // System information + Win32PlatformIsUnicode:boolean=False; + + // Information about files embedded inside .exe file + FileLocator:TFileLocator; + + // Hooks into runtime library functions + ResourceStringDomainListCS:TMultiReadExclusiveWriteSynchronizer; + ResourceStringDomainList:TStringList; + ComponentDomainListCS:TMultiReadExclusiveWriteSynchronizer; + ComponentDomainList:TStringList; + HookLoadResString:THook; + HookLoadStr:THook; + HookFmtLoadStr:THook; + HookedObjects:THookedObjects; + KnownRetranslators:TList; + +{$IFDEF LINUX} +function GGGetEnvironmentVariable (name : AnsiString):string; +begin + Result:=SysUtils.GetEnvironmentVariable(name); +end; +{$ELSE} +function GGGetEnvironmentVariable(const Name:widestring):widestring; +var + Len: integer; + W : WideString; +begin + Result := ''; + SetLength(W,1); + Len := Windows.GetEnvironmentVariableW(PWideChar(Name), PWideChar(W), 1); + if Len > 0 then begin + SetLength(Result, Len - 1); + Windows.GetEnvironmentVariableW(PWideChar(Name), PWideChar(Result), Len); + end; +end; +{$ENDIF} + +{$IFDEF FPC} +Function gnutrans(Name,Value : AnsiString; Hash : Longint; arg:pointer) : AnsiString; +var + s: widestring; +begin + S:=DefaultInstance.gettext(value); + result := Utf8ToAnsi(s); +end; + +procedure TranslateAllResourceStrings; +var I,J : Longint; + S : WideString; +begin + {$ifdef DXGETTEXTDEBUG} +// DefaultInstance.DebugWriteln('TranslateAllResourceStrings (ResourceStringTableCount='+IntToStr(ResourceStringTable.Count)+')'); + {$endif} + SetResourceStrings(@gnuTrans,nil); +{ + for I:=0 to ResourceStringTableCount-1 do + begin + for J:=0 to ResourceStringCount(i)-1 do + begin + S:=DefaultInstance.gettext(GetResourceStringDefaultValue(I,J)); + SetResourceStringValue(I,J,S); + end; + end; +} +end; +{$ENDIF} + +function StripCRRawMsgId (s:RawUtf8String):RawUtf8String; +var + i:integer; +begin + i:=1; + while i<=length(s) do begin + if s[i]=#13 then delete (s,i,1) else inc (i); + end; + Result:=s; +end; + +{$ifdef dx_midstr_in_AnsiStrings} +function MidStr(const AText: RawUtf8String; const AStart, ACount: Integer): RawUtf8String; overload; inline; +begin + Result := System.AnsiStrings.MidStr(AText, AStart, ACount); +end; +{$endif dx_midstr_in_AnsiStrings} + +function EnsureLineBreakInTranslatedString (s:RawUtf8String):RawUtf8String; +{$ifdef MSWINDOWS} +var + i:integer; +{$endif} +begin + {$ifdef MSWINDOWS} + Assert (sLinebreak=ansistring(#13#10)); + i:=1; + while i<=length(s) do begin + if (s[i]=#10) and (MidStr(s,i-1,1)<>#13) then begin + insert (#13,s,i); + inc (i,2); + end else + inc (i); + end; + {$endif} + Result:=s; +end; + +function IsWriteProp(Info: PPropInfo): Boolean; +begin + Result := Assigned(Info) and (Info^.SetProc <> nil); +end; + +function ResourceStringGettext(MsgId: MsgIdString): TranslatedUnicodeString; +var + i:integer; +begin + if (MsgID='') or (ResourceStringDomainListCS=nil) then begin + // This only happens during very complicated program startups that fail, + // or when Msgid='' + Result:=MsgId; + exit; + end; + ResourceStringDomainListCS.BeginRead; + try + for i:=0 to ResourceStringDomainList.Count-1 do begin + Result:=dgettext(ResourceStringDomainList.Strings[i], MsgId); + if Result<>MsgId then + break; + end; + finally + ResourceStringDomainListCS.EndRead; + end; +end; + +function ComponentGettext(MsgId: MsgIdString; Instance: TGnuGettextInstance = nil): TranslatedUnicodeString; +var + i:integer; +begin + if (MsgID='') or (ComponentDomainListCS=nil) then begin + // This only happens during very complicated program startups that fail, + // or when Msgid='' + Result:=MsgId; + exit; + end; + + // First, get the value from the default domain + if Assigned(Instance) then + Result:=Instance.dgettext(Instance.curmsgdomain, MsgId) + else + Result:=dgettext(DefaultInstance.curmsgdomain, MsgId); + if Result<>MsgId then + exit; + + // If it was not in the default domain, then go through the others + ComponentDomainListCS.BeginRead; + try + for i:=0 to ComponentDomainList.Count-1 do begin + if Assigned(Instance) then + Result:=Instance.dgettext(ComponentDomainList.Strings[i], MsgId) + else + Result:=dgettext(ComponentDomainList.Strings[i], MsgId); + if Result<>MsgId then + break; + end; + finally + ComponentDomainListCS.EndRead; + end; +end; + +function gettext(const szMsgId: MsgIdString): TranslatedUnicodeString; +begin + Result := DefaultInstance.gettext(szMsgId); +end; + +function gettext_NoExtract(const szMsgId: MsgIdString): TranslatedUnicodeString; +begin + // This one is very useful for translating text in variables. + // This can sometimes be necessary, and by using this function, + // the source code scanner will not trigger warnings. + Result := gettext(szMsgId); +end; + +function gettext_NoOp(const szMsgId: MsgIdString): TranslatedUnicodeString; +begin + //*** With this function Strings can be added to the po-file without beeing + // ResourceStrings (dxgettext will add the string and this function will + // return it without a change) + // see gettext manual + // 4.7 - Special Cases of Translatable Strings + // http://www.gnu.org/software/hello/manual/gettext/Special-cases.html#Special-cases + Result := DefaultInstance.gettext_NoOp(szMsgId); +end; + +{*------------------------------------------------------------------------------ + This is the main translation procedure used in programs. It takes a parameter, + looks it up in the translation dictionary, and returns the translation. + If no translation is found, the parameter is returned. + + @param szMsgId The text, that should be displayed if no translation is found. +-------------------------------------------------------------------------------} +function _(const szMsgId: MsgIdString): TranslatedUnicodeString; +begin + Result:=DefaultInstance.gettext(szMsgId); +end; + +{*------------------------------------------------------------------------------ + Translates a text, using a specified translation domain. + If no translation is found, the parameter is returned. + + @param szDomain Which translation domain that should be searched for a translation. + @param szMsgId The text, that should be displayed if no translation is found. +-------------------------------------------------------------------------------} +function dgettext(const szDomain: DomainString; const szMsgId: MsgIdString): TranslatedUnicodeString; +begin + Result:=DefaultInstance.dgettext(szDomain, szMsgId); +end; + +function dgettext_NoExtract(const szDomain: DomainString; const szMsgId: MsgIdString): TranslatedUnicodeString; +begin + // This one is very useful for translating text in variables. + // This can sometimes be necessary, and by using this function, + // the source code scanner will not trigger warnings. + Result := dgettext(szDomain, szMsgId); +end; + +function dgettext_NoOp(const szDomain: DomainString; const szMsgId: MsgIdString): TranslatedUnicodeString; +begin + //*** With this function Strings can be added to the po-file without beeing + // ResourceStrings (dxgettext will add the string and this function will + // return it without a change) + // see gettext manual + // 4.7 - Special Cases of Translatable Strings + // http://www.gnu.org/software/hello/manual/gettext/Special-cases.html#Special-cases + Result := DefaultInstance.dgettext_NoOp(szDomain, szMsgId); +end; + +function dngettext(const szDomain: DomainString; const singular,plural: MsgIdString; Number:longint): TranslatedUnicodeString; +begin + Result:=DefaultInstance.dngettext(szDomain,singular,plural,Number); +end; + +function ngettext(const singular,plural: MsgIdString; Number:longint): TranslatedUnicodeString; +begin + Result:=DefaultInstance.ngettext(singular,plural,Number); +end; + +function ngettext_NoExtract(const singular,plural: MsgIdString; Number:longint): TranslatedUnicodeString; +begin + // This one is very useful for translating text in variables. + // This can sometimes be necessary, and by using this function, + // the source code scanner will not trigger warnings. + Result := ngettext(singular, plural, Number); +end; + +procedure textdomain(const szDomain: Domainstring); +begin + DefaultInstance.txtdomain(szDomain); +end; + +procedure SetGettextEnabled (enabled:boolean); +begin + DefaultInstance.Enabled:=enabled; +end; + +function getcurrenttextdomain: DomainString; +begin + Result:=DefaultInstance.getcurrenttextdomain; +end; + +procedure bindtextdomain(const szDomain: DomainString; const szDirectory: FilenameString); +begin + DefaultInstance.bindtextdomain(szDomain, szDirectory); +end; + +procedure TP_Ignore(AnObject:TObject; const name:FilenameString); +begin + DefaultInstance.TP_Ignore(AnObject, name); +end; + +procedure TP_GlobalIgnoreClass (IgnClass:TClass); +begin + DefaultInstance.TP_GlobalIgnoreClass(IgnClass); +end; + +function TP_TryGlobalIgnoreClass (IgnClass:TClass): boolean; +begin + Result := DefaultInstance.TP_TryGlobalIgnoreClass (IgnClass); +end; + +procedure TP_IgnoreClass (IgnClass:TClass); +begin + DefaultInstance.TP_IgnoreClass(IgnClass); +end; + +procedure TP_IgnoreClassProperty (IgnClass:TClass;const propertyname:ComponentNameString); +begin + DefaultInstance.TP_IgnoreClassProperty(IgnClass,propertyname); +end; + +procedure TP_GlobalIgnoreClassProperty (IgnClass:TClass;const propertyname:ComponentNameString); +begin + DefaultInstance.TP_GlobalIgnoreClassProperty(IgnClass,propertyname); +end; + +procedure TP_GlobalHandleClass (HClass:TClass;Handler:TTranslator); +begin + DefaultInstance.TP_GlobalHandleClass (HClass, Handler); +end; + +procedure TP_Remember(AnObject: TObject; PropName:ComponentNameString; OldValue:TranslatedUnicodeString); +begin + DefaultInstance.TP_Remember(AnObject, PropName, OldValue); +end; + +procedure TranslateComponent(AnObject: TComponent; const TextDomain:DomainString=''); +begin + DefaultInstance.TranslateComponent(AnObject, TextDomain); +end; + +procedure RetranslateComponent(AnObject: TComponent; const TextDomain:DomainString=''); +begin + DefaultInstance.RetranslateComponent(AnObject, TextDomain); +end; + +{$ifdef MSWINDOWS} + +// These constants are only used in Windows 95 +// Thanks to Frank Andreas de Groot for this table +const + IDAfrikaans = $0436; IDAlbanian = $041C; + IDArabicAlgeria = $1401; IDArabicBahrain = $3C01; + IDArabicEgypt = $0C01; IDArabicIraq = $0801; + IDArabicJordan = $2C01; IDArabicKuwait = $3401; + IDArabicLebanon = $3001; IDArabicLibya = $1001; + IDArabicMorocco = $1801; IDArabicOman = $2001; + IDArabicQatar = $4001; IDArabic = $0401; + IDArabicSyria = $2801; IDArabicTunisia = $1C01; + IDArabicUAE = $3801; IDArabicYemen = $2401; + IDArmenian = $042B; IDAssamese = $044D; + IDAzeriCyrillic = $082C; IDAzeriLatin = $042C; + IDBasque = $042D; IDByelorussian = $0423; + IDBengali = $0445; IDBulgarian = $0402; + IDBurmese = $0455; IDCatalan = $0403; + IDChineseHongKong = $0C04; IDChineseMacao = $1404; + IDSimplifiedChinese = $0804; IDChineseSingapore = $1004; + IDTraditionalChinese = $0404; IDCroatian = $041A; + IDCzech = $0405; IDDanish = $0406; + IDBelgianDutch = $0813; IDDutch = $0413; + IDEnglishAUS = $0C09; IDEnglishBelize = $2809; + IDEnglishCanadian = $1009; IDEnglishCaribbean = $2409; + IDEnglishIreland = $1809; IDEnglishJamaica = $2009; + IDEnglishNewZealand = $1409; IDEnglishPhilippines = $3409; + IDEnglishSouthAfrica = $1C09; IDEnglishTrinidad = $2C09; + IDEnglishUK = $0809; IDEnglishUS = $0409; + IDEnglishZimbabwe = $3009; IDEstonian = $0425; + IDFaeroese = $0438; IDFarsi = $0429; + IDFinnish = $040B; IDBelgianFrench = $080C; + IDFrenchCameroon = $2C0C; IDFrenchCanadian = $0C0C; + IDFrenchCotedIvoire = $300C; IDFrench = $040C; + IDFrenchLuxembourg = $140C; IDFrenchMali = $340C; + IDFrenchMonaco = $180C; IDFrenchReunion = $200C; + IDFrenchSenegal = $280C; IDSwissFrench = $100C; + IDFrenchWestIndies = $1C0C; IDFrenchZaire = $240C; + IDFrisianNetherlands = $0462; IDGaelicIreland = $083C; + IDGaelicScotland = $043C; IDGalician = $0456; + IDGeorgian = $0437; IDGermanAustria = $0C07; + IDGerman = $0407; IDGermanLiechtenstein = $1407; + IDGermanLuxembourg = $1007; IDSwissGerman = $0807; + IDGreek = $0408; IDGujarati = $0447; + IDHebrew = $040D; IDHindi = $0439; + IDHungarian = $040E; IDIcelandic = $040F; + IDIndonesian = $0421; IDItalian = $0410; + IDSwissItalian = $0810; IDJapanese = $0411; + IDKannada = $044B; IDKashmiri = $0460; + IDKazakh = $043F; IDKhmer = $0453; + IDKirghiz = $0440; IDKonkani = $0457; + IDKorean = $0412; IDLao = $0454; + IDLatvian = $0426; IDLithuanian = $0427; + IDMacedonian = $042F; IDMalaysian = $043E; + IDMalayBruneiDarussalam = $083E; IDMalayalam = $044C; + IDMaltese = $043A; IDManipuri = $0458; + IDMarathi = $044E; IDMongolian = $0450; + IDNepali = $0461; IDNorwegianBokmol = $0414; + IDNorwegianNynorsk = $0814; IDOriya = $0448; + IDPolish = $0415; IDBrazilianPortuguese = $0416; + IDPortuguese = $0816; IDPunjabi = $0446; + IDRhaetoRomanic = $0417; IDRomanianMoldova = $0818; + IDRomanian = $0418; IDRussianMoldova = $0819; + IDRussian = $0419; IDSamiLappish = $043B; + IDSanskrit = $044F; IDSerbianCyrillic = $0C1A; + IDSerbianLatin = $081A; IDSesotho = $0430; + IDSindhi = $0459; IDSlovak = $041B; + IDSlovenian = $0424; IDSorbian = $042E; + IDSpanishArgentina = $2C0A; IDSpanishBolivia = $400A; + IDSpanishChile = $340A; IDSpanishColombia = $240A; + IDSpanishCostaRica = $140A; IDSpanishDominicanRepublic = $1C0A; + IDSpanishEcuador = $300A; IDSpanishElSalvador = $440A; + IDSpanishGuatemala = $100A; IDSpanishHonduras = $480A; + IDMexicanSpanish = $080A; IDSpanishNicaragua = $4C0A; + IDSpanishPanama = $180A; IDSpanishParaguay = $3C0A; + IDSpanishPeru = $280A; IDSpanishPuertoRico = $500A; + IDSpanishModernSort = $0C0A; IDSpanish = $040A; + IDSpanishUruguay = $380A; IDSpanishVenezuela = $200A; + IDSutu = $0430; IDSwahili = $0441; + IDSwedishFinland = $081D; IDSwedish = $041D; + IDTajik = $0428; IDTamil = $0449; + IDTatar = $0444; IDTelugu = $044A; + IDThai = $041E; IDTibetan = $0451; + IDTsonga = $0431; IDTswana = $0432; + IDTurkish = $041F; IDTurkmen = $0442; + IDUkrainian = $0422; IDUrdu = $0420; + IDUzbekCyrillic = $0843; IDUzbekLatin = $0443; + IDVenda = $0433; IDVietnamese = $042A; + IDWelsh = $0452; IDXhosa = $0434; + IDZulu = $0435; + +function GetWindowsLanguage: WideString; +var + langid: Cardinal; + langcode: WideString; + CountryName: array[0..4] of widechar; + LanguageName: array[0..4] of widechar; + works: boolean; +begin + // The return value of GetLocaleInfo is compared with 3 = 2 characters and a zero + works := 3 = GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SISO639LANGNAME, LanguageName, SizeOf(LanguageName)); + works := works and (3 = GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SISO3166CTRYNAME, CountryName, SizeOf(CountryName))); + if works then begin + // Windows 98, Me, NT4, 2000, XP and newer + LangCode := PWideChar(@(LanguageName[0])); + if lowercase(LangCode)='no' then LangCode:='nb'; + LangCode:=LangCode + '_' + PWideChar(@CountryName[0]); + end else begin + // This part should only happen on Windows 95. + langid := GetThreadLocale; + case langid of + IDBelgianDutch: langcode := 'nl_BE'; + IDBelgianFrench: langcode := 'fr_BE'; + IDBrazilianPortuguese: langcode := 'pt_BR'; + IDDanish: langcode := 'da_DK'; + IDDutch: langcode := 'nl_NL'; + IDEnglishUK: langcode := 'en_GB'; + IDEnglishUS: langcode := 'en_US'; + IDFinnish: langcode := 'fi_FI'; + IDFrench: langcode := 'fr_FR'; + IDFrenchCanadian: langcode := 'fr_CA'; + IDGerman: langcode := 'de_DE'; + IDGermanLuxembourg: langcode := 'de_LU'; + IDGreek: langcode := 'el_GR'; + IDIcelandic: langcode := 'is_IS'; + IDItalian: langcode := 'it_IT'; + IDKorean: langcode := 'ko_KO'; + IDNorwegianBokmol: langcode := 'nb_NO'; + IDNorwegianNynorsk: langcode := 'nn_NO'; + IDPolish: langcode := 'pl_PL'; + IDPortuguese: langcode := 'pt_PT'; + IDRussian: langcode := 'ru_RU'; + IDSpanish, IDSpanishModernSort: langcode := 'es_ES'; + IDSwedish: langcode := 'sv_SE'; + IDSwedishFinland: langcode := 'sv_FI'; + else + langcode := 'C'; + end; + end; + Result := langcode; +end; +{$endif} + +// find the native language full name from the languagecode +function CodeToNativeLanguage(LanguageCode:LanguageString):String; +var + I : Integer; +begin + result := LanguageCode; + For i:=Low(LanguageCodeArr) to High(LanguageCodeArr) do + if LanguageCode=LanguageCodeArr[i,0] then + begin + result := LanguageCodeArr[i,1]; + break; + end; +end; + +// find the langauge code from native language full name +function NativeLanguageToCode(NativeLanguage:String):LanguageString; +var + I : Integer; +begin + result := NativeLanguage; + For i:=Low(LanguageCodeArr) to High(LanguageCodeArr) do + if NativeLanguage=LanguageCodeArr[i,1] then + begin + result := LanguageCodeArr[i,0]; + break; + end; +end; + +{$IFNDEF FPC} +{$ifndef UNICODE} +function LoadResStringA(ResStringRec: PResStringRec): ansistring; +begin + Result:=DefaultInstance.LoadResString(ResStringRec); +end; +{$endif} +{$ENDIF} + +function GetTranslatorNameAndEmail:TranslatedUnicodeString; +begin + Result:=DefaultInstance.GetTranslatorNameAndEmail; +end; + +procedure UseLanguage(LanguageCode: LanguageString); +begin + DefaultInstance.UseLanguage(LanguageCode); +end; + +type +{$ifdef dx_Hinstance_is_Integer} + THInstanceType = Integer; +{$else dx_Hinstance_is_Integer} + THInstanceType = NativeInt; +{$endif dx_Hinstance_is_Integer} + +{$ifdef dx_NativeInt_is_Integer} + TNativeInt = Integer; +{$else dx_NativeInt_is_Integer} + TNativeInt = NativeInt; +{$endif dx_NativeInt_is_Integer} + +type + PStrData = ^TStrData; + TStrData = record + Ident: TNativeInt; + Str: String; + end; + +{$IFNDEF FPC} +function SysUtilsEnumStringModules(Instance: THInstanceType; Data: Pointer): Boolean; +{$IFDEF MSWINDOWS} +var + Buffer: array [0..1023] of Char; // WideChar in Delphi 2009, AnsiChar before that +begin + with PStrData(Data)^ do begin + SetString(Str, Buffer, + LoadString(Instance, Ident, @Buffer[0], sizeof(Buffer))); + Result := Str = ''; + end; +end; +{$ENDIF} +{$IFDEF LINUX} +var + rs:TResStringRec; + Module:HModule; +begin + Module:=Instance; + rs.Module:=@Module; + with PStrData(Data)^ do begin + rs.Identifier:=Ident; + Str:=System.LoadResString(@rs); + Result:=Str=''; + end; +end; +{$ENDIF} + +function SysUtilsFindStringResource(Ident: TNativeInt): string; +var + StrData: TStrData; +begin + StrData.Ident := Ident; + StrData.Str := ''; + EnumResourceModules(SysUtilsEnumStringModules, @StrData); + Result := StrData.Str; +end; + +function SysUtilsLoadStr(Ident: Integer): string; +begin + {$ifdef DXGETTEXTDEBUG} + DefaultInstance.DebugWriteln ('Sysutils.LoadRes('+IntToStr(ident)+') called'); + {$endif} + Result := ResourceStringGettext(SysUtilsFindStringResource(Ident)); +end; + +function SysUtilsFmtLoadStr(Ident: Integer; const Args: array of const): string; +begin + {$ifdef DXGETTEXTDEBUG} + DefaultInstance.DebugWriteln ('Sysutils.FmtLoadRes('+IntToStr(ident)+',Args) called'); + {$endif} + FmtStr(Result, ResourceStringGettext(SysUtilsFindStringResource(Ident)),Args); +end; + +function LoadResString(ResStringRec: PResStringRec): widestring; +begin + Result:=DefaultInstance.LoadResString(ResStringRec); +end; + +function LoadResStringW(ResStringRec: PResStringRec): UnicodeString; +begin + Result:=DefaultInstance.LoadResString(ResStringRec); +end; +{$ENDIF} + + +function GetCurrentLanguage:LanguageString; +begin + Result:=DefaultInstance.GetCurrentLanguage; +end; + +{ TDomain } + +procedure TDomain.CloseMoFile; +begin + if mofile<>nil then begin + FileLocator.ReleaseMoFile(mofile); + mofile:=nil; + end; + OpenHasFailedBefore:=False; +end; + +destructor TDomain.Destroy; +begin + CloseMoFile; + inherited; +end; + +{$ifdef mswindows} +function GetLastWinError:widestring; +var + errcode:Cardinal; +begin + SetLength (Result,2000); + errcode:=GetLastError(); + Windows.FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM,nil,errcode,0,PWideChar(Result),2000,nil); + Result:=PWideChar(Result); +end; +{$endif} + +procedure TDomain.OpenMoFile; +var + filename: FilenameString; +begin + // Check if it is already open + if mofile<>nil then + exit; + + // Check if it has been attempted to open the file before + if OpenHasFailedBefore then + exit; + + if SpecificFilename<>'' then begin + filename:=SpecificFilename; + {$ifdef DXGETTEXTDEBUG} + DebugLogger ('Domain '+domain+' is bound to specific file '+filename); + {$endif} + end else begin + filename := Directory + curlang + PathDelim + 'LC_MESSAGES' + PathDelim + domain + '.mo'; + if (not FileLocator.FileExists(filename)) and (not fileexists(filename)) then begin + {$ifdef DXGETTEXTDEBUG} + DebugLogger ('Domain '+domain+': File does not exist, neither embedded or in file system: '+filename); + {$endif} + filename := Directory + MidStr(curlang, 1, 2) + PathDelim + 'LC_MESSAGES' + PathDelim + domain + '.mo'; + {$ifdef DXGETTEXTDEBUG} + DebugLogger ('Domain '+domain+' will attempt to use this file: '+filename); + {$endif} + end else begin + {$ifdef DXGETTEXTDEBUG} + if FileLocator.FileExists(filename) then + DebugLogger ('Domain '+domain+' will attempt to use this embedded file: '+filename) + else + DebugLogger ('Domain '+domain+' will attempt to use this file that was found on the file system: '+filename); + {$endif} + end; + end; + if (not FileLocator.FileExists(filename)) and (not fileexists(filename)) then begin + {$ifdef DXGETTEXTDEBUG} + DebugLogger ('Domain '+domain+' failed to locate the file: '+filename); + {$endif} + OpenHasFailedBefore:=True; + exit; + end; + {$ifdef DXGETTEXTDEBUG} + DebugLogger ('Domain '+domain+' now accesses the file.'); + {$endif} + mofile:=FileLocator.GetMoFile(filename, DebugLogger); + + {$ifdef DXGETTEXTDEBUG} + if mofile.isSwappedArchitecture then + DebugLogger ('.mo file is swapped (comes from another CPU architecture)'); + {$endif} + + // Check, that the contents of the file is utf-8 + if pos('CHARSET=UTF-8',uppercase(GetTranslationProperty('Content-Type')))=0 then begin + CloseMoFile; + {$ifdef DXGETTEXTDEBUG} + DebugLogger ('The translation for the language code '+curlang+' (in '+filename+') does not have charset=utf-8 in its Content-Type. Translations are turned off.'); + {$endif} + {$ifdef MSWINDOWS} + MessageBoxW(0,PWideChar(widestring('The translation for the language code '+curlang+' (in '+filename+') does not have charset=utf-8 in its Content-Type. Translations are turned off.')),'Localization problem',MB_OK); + {$else} + writeln (stderr,'The translation for the language code '+curlang+' (in '+filename+') does not have charset=utf-8 in its Content-Type. Translations are turned off.'); + {$endif} + Enabled:=False; + end; +end; + +{$IFDEF UNICODE} +function utf8decode (s:RawByteString):UnicodeString; {$ifdef dx_has_Inline}inline;{$endif} +begin + Result:=UTF8ToWideString(s); +end; +{$endif} + +function TDomain.GetTranslationProperty( + Propertyname: ComponentNameString): TranslatedUnicodeString; +var + sl:TStringList; + i:integer; + s:string; +begin + Propertyname:=uppercase(Propertyname)+': '; + sl:=TStringList.Create; + try + sl.Text:=utf8decode(gettext('')); + for i:=0 to sl.Count-1 do begin + s:=sl.Strings[i]; + if uppercase(MidStr(s,1,length(Propertyname)))=Propertyname then begin + Result:=trim(MidStr(s,length(PropertyName)+1,maxint)); + + {$ifdef DXGETTEXTDEBUG} + DebugLogger ('GetTranslationProperty('+PropertyName+') returns '''+Result+'''.'); + {$endif} + exit; + end; + end; + finally + FreeAndNil (sl); + end; + Result:=''; + {$ifdef DXGETTEXTDEBUG} + DebugLogger ('GetTranslationProperty('+PropertyName+') did not find any value. An empty string is returned.'); + {$endif} +end; + +procedure TDomain.setDirectory(const dir: FilenameString); +begin + vDirectory := IncludeTrailingPathDelimiter(dir); + SpecificFilename:=''; + CloseMoFile; +end; + +procedure AddDomainForResourceString (const domain:DomainString); +begin + {$ifdef DXGETTEXTDEBUG} + DefaultInstance.DebugWriteln ('Extra domain for resourcestring: '+domain); + {$endif} + ResourceStringDomainListCS.BeginWrite; + try + if ResourceStringDomainList.IndexOf(domain)=-1 then + ResourceStringDomainList.Add (domain); + finally + ResourceStringDomainListCS.EndWrite; + end; +end; + +procedure RemoveDomainForResourceString (const domain:DomainString); +var + i:integer; +begin + {$ifdef DXGETTEXTDEBUG} + DefaultInstance.DebugWriteln ('Remove domain for resourcestring: '+domain); + {$endif} + ResourceStringDomainListCS.BeginWrite; + try + i:=ResourceStringDomainList.IndexOf(domain); + if i<>-1 then + ResourceStringDomainList.Delete (i); + finally + ResourceStringDomainListCS.EndWrite; + end; +end; + +procedure AddDomainForComponent (const domain:DomainString); +begin + {$ifdef DXGETTEXTDEBUG} + DefaultInstance.DebugWriteln ('Extra domain for component: '+domain); + {$endif} + ComponentDomainListCS.BeginWrite; + try + if ComponentDomainList.IndexOf(domain)=-1 then + ComponentDomainList.Add (domain); + finally + ComponentDomainListCS.EndWrite; + end; +end; + +procedure RemoveDomainForComponent (const domain:DomainString); +var + i:integer; +begin + {$ifdef DXGETTEXTDEBUG} + DefaultInstance.DebugWriteln ('Remove domain for component: '+domain); + {$endif} + ComponentDomainListCS.BeginWrite; + try + i:=ComponentDomainList.IndexOf(domain); + if i<>-1 then + ComponentDomainList.Delete (i); + finally + ComponentDomainListCS.EndWrite; + end; +end; + +procedure TDomain.SetLanguageCode(const langcode: LanguageString); +begin + CloseMoFile; + curlang:=langcode; +end; + +function GetPluralForm2EN(Number: Integer): Integer; +begin + Number:=abs(Number); + if Number=1 then Result:=0 else Result:=1; +end; + +function GetPluralForm1(Number: Integer): Integer; +begin + Result:=0; +end; + +function GetPluralForm2FR(Number: Integer): Integer; +begin + Number:=abs(Number); + if (Number=1) or (Number=0) then Result:=0 else Result:=1; +end; + +function GetPluralForm3LV(Number: Integer): Integer; +begin + Number:=abs(Number); + if (Number mod 10=1) and (Number mod 100<>11) then + Result:=0 + else + if Number<>0 then Result:=1 + else Result:=2; +end; + +function GetPluralForm3GA(Number: Integer): Integer; +begin + Number:=abs(Number); + if Number=1 then Result:=0 + else if Number=2 then Result:=1 + else Result:=2; +end; + +function GetPluralForm3LT(Number: Integer): Integer; +var + n1,n2:byte; +begin + Number:=abs(Number); + n1:=Number mod 10; + n2:=Number mod 100; + if (n1=1) and (n2<>11) then + Result:=0 + else + if (n1>=2) and ((n2<10) or (n2>=20)) then Result:=1 + else Result:=2; +end; + +function GetPluralForm3PL(Number: Integer): Integer; +var + n1,n2:byte; +begin + Number:=abs(Number); + n1:=Number mod 10; + n2:=Number mod 100; + + if Number=1 then Result:=0 + else if (n1>=2) and (n1<=4) and ((n2<10) or (n2>=20)) then Result:=1 + else Result:=2; +end; + +function GetPluralForm3RU(Number: Integer): Integer; +var + n1,n2:byte; +begin + Number:=abs(Number); + n1:=Number mod 10; + n2:=Number mod 100; + if (n1=1) and (n2<>11) then + Result:=0 + else + if (n1>=2) and (n1<=4) and ((n2<10) or (n2>=20)) then Result:=1 + else Result:=2; +end; + +function GetPluralForm3SK(Number: Integer): Integer; +begin + Number:=abs(Number); + if number=1 then Result:=0 + else if (number<5) and (number<>0) then Result:=1 + else Result:=2; +end; + +function GetPluralForm4SL(Number: Integer): Integer; +var + n2:byte; +begin + Number:=abs(Number); + n2:=Number mod 100; + if n2=1 then Result:=0 + else + if n2=2 then Result:=1 + else + if (n2=3) or (n2=4) then Result:=2 + else + Result:=3; +end; + +procedure TDomain.GetListOfLanguages(list: TStrings); +var + sr:TSearchRec; + more:boolean; + filename, path:FilenameString; + langcode:LanguageString; + i, j:integer; +begin + list.Clear; + + // Iterate through filesystem + more:=FindFirst (Directory+'*',faAnyFile,sr)=0; + try + while more do begin + if (sr.Attr and faDirectory<>0) and (sr.name<>'.') and (sr.name<>'..') then begin + filename := Directory + sr.Name + PathDelim + 'LC_MESSAGES' + PathDelim + domain + '.mo'; + if fileexists(filename) then begin + langcode:=lowercase(sr.name); + if list.IndexOf(langcode)=-1 then + list.Add(langcode); + end; + end; + more:=FindNext (sr)=0; + end; + finally + FindClose (sr); + end; + + // Iterate through embedded files + for i:=0 to FileLocator.filelist.Count-1 do begin + filename:=FileLocator.basedirectory+FileLocator.filelist.Strings[i]; + path:=Directory; + {$ifdef MSWINDOWS} + path:=uppercase(path); + filename:=uppercase(filename); + {$endif} + j:=length(path); + if MidStr(filename,1,j)=path then begin + path:=PathDelim + 'LC_MESSAGES' + PathDelim + domain + '.mo'; + {$ifdef MSWINDOWS} + path:=uppercase(path); + {$endif} + if MidStr(filename,length(filename)-length(path)+1,length(path))=path then begin + langcode:=lowercase(MidStr(filename,j+1,length(filename)-length(path)-j)); + langcode:=LeftStr(langcode,3)+uppercase(MidStr(langcode,4,maxint)); + if list.IndexOf(langcode)=-1 then + list.Add(langcode); + end; + end; + end; +end; + +procedure TDomain.SetFilename(const filename: FilenameString); +begin + CloseMoFile; + vDirectory := ''; + SpecificFilename:=filename; +end; + +function TDomain.gettext(const msgid: RawUtf8String): RawUtf8String; +var + found:boolean; +begin + if not Enabled then begin + Result:=msgid; + exit; + end; + if (mofile=nil) and (not OpenHasFailedBefore) then + OpenMoFile; + if mofile=nil then begin + {$ifdef DXGETTEXTDEBUG} + DebugLogger('.mo file is not open. Not translating "'+msgid+'"'); + {$endif} + Result := msgid; + end else begin + Result:=mofile.gettext(msgid,found); + {$ifdef DXGETTEXTDEBUG} + if found then + DebugLogger ('Found in .mo ('+Domain+'): "'+utf8encode(msgid)+'"->"'+utf8encode(Result)+'"') + else + DebugLogger ('Translation not found in .mo file ('+Domain+') : "'+utf8encode(msgid)+'"'); + {$endif} + end; +end; + +constructor TDomain.Create; +begin + inherited Create; + Enabled:=True; +end; + +{ TGnuGettextInstance } + +procedure TGnuGettextInstance.bindtextdomain(const szDomain:DomainString; + const szDirectory: FilenameString); +var + dir:FilenameString; +begin + dir:=IncludeTrailingPathDelimiter(szDirectory); + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('Text domain "'+szDomain+'" is now located at "'+dir+'"'); + {$endif} + getdomain(szDomain,DefaultDomainDirectory,CurLang).Directory := dir; + WhenNewDomainDirectory (szDomain, szDirectory); +end; + +constructor TGnuGettextInstance.Create; +begin + {$ifdef MSWindows} + DesignTimeCodePage:=CP_ACP; + {$endif} + {$ifdef DXGETTEXTDEBUG} + DebugLogCS:=TMultiReadExclusiveWriteSynchronizer.Create; + DebugLog:=TMemoryStream.Create; + DebugWriteln('Debug log started '+DateTimeToStr(Now)); + DebugWriteln('GNU gettext module version: '+VCSVersion); + DebugWriteln(''); + {$endif} + {$IFDEF FPC} + curGetPluralForm:=@GetPluralForm2EN; + {$ELSE} + curGetPluralForm:=GetPluralForm2EN; + {$ENDIF} + Enabled:=True; + SearchAllDomains:=False; + curmsgdomain:=DefaultTextDomain; + savefileCS := TMultiReadExclusiveWriteSynchronizer.Create; + domainlist := TStringList.Create; + TP_IgnoreList:=TStringList.Create; + TP_IgnoreList.Sorted:=True; + TP_GlobalClassHandling:=TList.Create; + TP_ClassHandling:=TList.Create; + fWhenNewLanguageListeners := TInterfaceList.Create; + + // Set some settings + DefaultDomainDirectory := IncludeTrailingPathDelimiter(extractfilepath(ExecutableFilename))+'locale'; + + UseLanguage(''); + + bindtextdomain(DefaultTextDomain, DefaultDomainDirectory); + txtdomain(DefaultTextDomain); + + // Add default properties to ignore + TP_GlobalIgnoreClassProperty(TComponent,'Name'); + TP_GlobalIgnoreClassProperty(TCollection,'PropName'); +end; + +destructor TGnuGettextInstance.Destroy; +begin + if savememory <> nil then begin + savefileCS.BeginWrite; + try + CloseFile(savefile); + finally + savefileCS.EndWrite; + end; + FreeAndNil(savememory); + end; + FreeAndNil (savefileCS); + FreeAndNil (TP_IgnoreList); + while TP_GlobalClassHandling.Count<>0 do begin + TObject(TP_GlobalClassHandling.Items[0]).Free; + TP_GlobalClassHandling.Delete(0); + end; + FreeAndNil (TP_GlobalClassHandling); + FreeTP_ClassHandlingItems; + FreeAndNil (TP_ClassHandling); + while domainlist.Count <> 0 do begin + domainlist.Objects[0].Free; + domainlist.Delete(0); + end; + FreeAndNil(domainlist); + fWhenNewLanguageListeners.Free; + {$ifdef DXGETTEXTDEBUG} + FreeAndNil (DebugLog); + FreeAndNil (DebugLogCS); + {$endif} + inherited; +end; + +{$ifndef UNICODE} +function TGnuGettextInstance.dgettext(const szDomain: DomainString; const szMsgId: ansistring): TranslatedUnicodeString; +begin + Result:=dgettext(szDomain, ansi2wideDTCP(szMsgId)); +end; +{$endif} + +function TGnuGettextInstance.dgettext(const szDomain: DomainString; + const szMsgId: MsgIdString): TranslatedUnicodeString; +begin + if not Enabled then begin + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('Translation has been disabled. Text is not being translated: '+szMsgid); + {$endif} + Result:=szMsgId; + end else begin + Result:=UTF8Decode(EnsureLineBreakInTranslatedString(getdomain(szDomain,DefaultDomainDirectory,CurLang).gettext(StripCRRawMsgId(utf8encode(szMsgId))))); + + {$ifdef DXGETTEXTDEBUG} + if (szMsgId<>'') and (Result='') then + DebugWriteln (Format('Error: Translation of %s was an empty string. This may never occur.',[szMsgId])); + {$endif} + end; +end; + +function TGnuGettextInstance.dgettext_NoExtract(const szDomain: DomainString; + const szMsgId: MsgIdString): TranslatedUnicodeString; +begin + // This one is very useful for translating text in variables. + // This can sometimes be necessary, and by using this function, + // the source code scanner will not trigger warnings. + Result:=dgettext(szDomain,szMsgId); +end; + +function TGnuGettextInstance.dgettext_NoOp(const szDomain: DomainString; const szMsgId: MsgIdString): TranslatedUnicodeString; +begin + Result := gettext_NoOp( szMsgId); +end; + +function TGnuGettextInstance.GetCurrentLanguage: LanguageString; +begin + Result:=curlang; +end; + +function TGnuGettextInstance.getcurrenttextdomain: DomainString; +begin + Result := curmsgdomain; +end; + +{$ifndef UNICODE} +function TGnuGettextInstance.gettext( + const szMsgId: ansistring): TranslatedUnicodeString; +var + domain: DomainString; + domainIndex: Integer; +begin + Result := dgettext(curmsgdomain, szMsgId); + if SearchAllDomains then begin + domainIndex := 0; + while (Result = szMsgId) and (domainIndex < domainlist.count) do begin + domain := domainlist[domainIndex]; + Result := dgettext(domain, szMsgId); + Inc(domainIndex); + end; + end; +end; +{$endif} + +function TGnuGettextInstance.gettext( + const szMsgId: MsgIdString): TranslatedUnicodeString; +var + domain: DomainString; + domainIndex: Integer; +begin + Result := dgettext(curmsgdomain, szMsgId); + if SearchAllDomains then begin + domainIndex := 0; + while (Result = szMsgId) and (domainIndex < domainlist.count) do begin + domain := domainlist[domainIndex]; + Result := dgettext(domain, szMsgId); + Inc(domainIndex); + end; + end; +end; + +function TGnuGettextInstance.gettext_NoExtract( + const szMsgId: MsgIdString): TranslatedUnicodeString; +begin + // This one is very useful for translating text in variables. + // This can sometimes be necessary, and by using this function, + // the source code scanner will not trigger warnings. + Result:=gettext (szMsgId); +end; + +function TGnuGettextInstance.gettext_NoOp(const szMsgId: MsgIdString): TranslatedUnicodeString; +begin + //*** With this function Strings can be added to the po-file without beeing + // ResourceStrings (dxgettext will add the string and this function will + // return it without a change) + // see gettext manual + // 4.7 - Special Cases of Translatable Strings + // http://www.gnu.org/software/hello/manual/gettext/Special-cases.html#Special-cases + Result := TranslatedUnicodeString(szMsgId); +end; + +procedure TGnuGettextInstance.txtdomain(const szDomain: DomainString); +begin + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('Changed text domain to "'+szDomain+'"'); + {$endif} + curmsgdomain := szDomain; + WhenNewDomain (szDomain); +end; + +function TGnuGettextInstance.TP_CreateRetranslator : TExecutable; +var + ttpr:TTP_Retranslator; +begin + ttpr:=TTP_Retranslator.Create; + ttpr.Instance:=self; + TP_Retranslator:=ttpr; + Result:=ttpr; + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('A retranslator was created.'); + {$endif} +end; + +procedure TGnuGettextInstance.TP_GlobalHandleClass(HClass: TClass; + Handler: TTranslator); +var + cm:TClassMode; + i:integer; +begin + for i:=0 to TP_GlobalClassHandling.Count-1 do begin + cm:=TObject(TP_GlobalClassHandling.Items[i]) as TClassMode; + if cm.HClass=HClass then + raise EGGProgrammingError.Create ('You cannot set a handler for a class that has already been assigned otherwise.'); + if HClass.InheritsFrom(cm.HClass) then begin + // This is the place to insert this class + cm:=TClassMode.Create; + cm.HClass:=HClass; + cm.SpecialHandler:=Handler; + TP_GlobalClassHandling.Insert(i,cm); + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('A handler was set for class '+HClass.ClassName+'.'); + {$endif} + exit; + end; + end; + cm:=TClassMode.Create; + cm.HClass:=HClass; + cm.SpecialHandler:=Handler; + TP_GlobalClassHandling.Add(cm); + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('A handler was set for class '+HClass.ClassName+'.'); + {$endif} +end; + +function TGnuGettextInstance.TP_TryGlobalIgnoreClass (IgnClass:TClass): boolean; +var + cm:TClassMode; + i:integer; +begin + Result := false; + for i:=0 to TP_GlobalClassHandling.Count-1 do begin + cm:=TObject(TP_GlobalClassHandling.Items[i]) as TClassMode; + if cm.HClass=IgnClass then + exit; // class already in ignore list + if IgnClass.InheritsFrom(cm.HClass) then begin + // This is the place to insert this class + cm:=TClassMode.Create; + cm.HClass:=IgnClass; + TP_GlobalClassHandling.Insert(i,cm); + Result := true; + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('Globally, class '+IgnClass.ClassName+' is being ignored.'); + {$endif} + exit; + end; + end; + cm:=TClassMode.Create; + cm.HClass:=IgnClass; + TP_GlobalClassHandling.Add(cm); + Result := true; + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('Globally, class '+IgnClass.ClassName+' is being ignored.'); + {$endif} +end; + +procedure TGnuGettextInstance.TP_GlobalIgnoreClass(IgnClass: TClass); +begin + if not TP_TryGlobalIgnoreClass(IgnClass) then + raise EGGProgrammingError.Create ('You cannot add a class to the ignore list that is already on that list: '+IgnClass.ClassName+'. You should keep all TP_Global functions in one place in your source code.'); +end; + +procedure TGnuGettextInstance.TP_GlobalIgnoreClassProperty( + IgnClass: TClass; propertyname: ComponentNameString); +var + cm:TClassMode; + i,idx:integer; +begin + propertyname:=uppercase(propertyname); + for i:=0 to TP_GlobalClassHandling.Count-1 do begin + cm:=TObject(TP_GlobalClassHandling.Items[i]) as TClassMode; + if cm.HClass=IgnClass then begin + if Assigned(cm.SpecialHandler) then + raise EGGProgrammingError.Create ('You cannot ignore a class property for a class that has a handler set.'); + if not cm.PropertiesToIgnore.Find(propertyname,idx) then + cm.PropertiesToIgnore.Add(propertyname); + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('Globally, the '+propertyname+' property of class '+IgnClass.ClassName+' is being ignored.'); + {$endif} + exit; + end; + if IgnClass.InheritsFrom(cm.HClass) then begin + // This is the place to insert this class + cm:=TClassMode.Create; + cm.HClass:=IgnClass; + cm.PropertiesToIgnore.Add(propertyname); + TP_GlobalClassHandling.Insert(i,cm); + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('Globally, the '+propertyname+' property of class '+IgnClass.ClassName+' is being ignored.'); + {$endif} + exit; + end; + end; + cm:=TClassMode.Create; + cm.HClass:=IgnClass; + cm.PropertiesToIgnore.Add(propertyname); + TP_GlobalClassHandling.Add(cm); + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('Globally, the '+propertyname+' property of class '+IgnClass.ClassName+' is being ignored.'); + {$endif} +end; + +procedure TGnuGettextInstance.TP_Ignore(AnObject: TObject; + const name: ComponentNameString); +begin + TP_IgnoreList.Add(uppercase(name)); + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('On object with class name '+AnObject.ClassName+', ignore is set on '+name); + {$endif} +end; + +procedure TGnuGettextInstance.TranslateComponent(AnObject: TComponent; + const TextDomain: DomainString); +var + comp:TGnuGettextComponentMarker; +begin + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('======================================================================'); + DebugWriteln ('TranslateComponent() was called for a component with name '+AnObject.Name+'.'); + {$endif} + comp:=AnObject.FindComponent('GNUgettextMarker') as TGnuGettextComponentMarker; + if comp=nil then begin + comp:=TGnuGettextComponentMarker.Create (nil); + comp.Name:='GNUgettextMarker'; + comp.Retranslator:=TP_CreateRetranslator; + TranslateProperties (AnObject, TextDomain); + AnObject.InsertComponent(comp); + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('This is the first time, that this component has been translated. A retranslator component has been created for this component.'); + {$endif} + end else begin + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('This is not the first time, that this component has been translated.'); + {$endif} + if comp.LastLanguage<>curlang then begin + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('ERROR: TranslateComponent() was called twice with different languages. This indicates an attempt to switch language at runtime, but by using TranslateComponent every time. This API has changed - please use RetranslateComponent() instead.'); + {$endif} + {$ifdef mswindows} + MessageBox (0,'This application tried to switch the language, but in an incorrect way. The programmer needs to replace a call to TranslateComponent with a call to RetranslateComponent(). The programmer should see the changelog of gnugettext.pas for more information.','Error',MB_OK); + {$else} + writeln (stderr,'This application tried to switch the language, but in an incorrect way. The programmer needs to replace a call to TranslateComponent with a call to RetranslateComponent(). The programmer should see the changelog of gnugettext.pas for more information.'); + {$endif} + end else begin + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('ERROR: TranslateComponent has been called twice, but with the same language chosen. This is a mistake, but in order to prevent that the application breaks, no exception is raised.'); + {$endif} + end; + end; + comp.LastLanguage:=curlang; + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('======================================================================'); + {$endif} +end; + +procedure TGnuGettextInstance.TranslateProperty (AnObject:TObject; PropInfo:PPropInfo; TodoList:TStrings; const TextDomain:DomainString); +var + ppi:PPropInfo; + ws: TranslatedUnicodeString; + old: TranslatedUnicodeString; + compmarker:TComponent; + obj:TObject; + Propname:ComponentNameString; +begin + PropName:=string(PropInfo^.Name); + try + // Translate certain types of properties + case PropInfo^.PropType^.Kind of + {$IFDEF UNICODE} + // All dfm files returning tkUString + tkString, tkLString, tkWString, tkUString: + {$ELSE} + tkString, {$ifdef FPC}tkAString,{$endif} tkLString, tkWString: + {$ENDIF} + begin + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('Translating '+AnObject.ClassName+'.'+PropName); + {$endif} + case PropInfo^.PropType^.Kind of + tkString, {$ifdef FPC}tkAString,{$endif} tkLString : + old := GetStrProp(AnObject, PropName); + tkWString : + old := + {$IFDEF dx_GetStrProp_reads_unicode}GetStrProp{$ELSE}GetWideStrProp{$ENDIF} + (AnObject, PropName); + {$IFDEF UNICODE} + tkUString : + old := + {$IFDEF dx_GetStrProp_reads_unicode}GetStrProp{$ELSE}GetUnicodeStrProp{$ENDIF} + (AnObject, PropName); + {$ENDIF} + else + raise Exception.Create ('Internal error: Illegal property type. This problem needs to be solved by a programmer, try to find a workaround.'); + end; + {$ifdef DXGETTEXTDEBUG} + if old='' then + DebugWriteln ('(Empty, not translated)') + else + DebugWriteln ('Old value: "'+old+'"'); + {$endif} + if (old <> '') and (IsWriteProp(PropInfo)) then begin + if TP_Retranslator<>nil then + (TP_Retranslator as TTP_Retranslator).Remember(AnObject, PropName, old); + if textdomain = '' then + ws := ComponentGettext(old, Self) + else + ws := dgettext(textdomain,old); + if ws <> old then begin + ppi:=GetPropInfo(AnObject, Propname); + if ppi<>nil then begin + SetWideStrProp(AnObject, ppi, ws); + end else begin + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('ERROR: Property disappeared: '+Propname+' for object of type '+AnObject.ClassName); + {$endif} + end; + end; + end; + end { case item }; + tkClass: + begin + obj:=GetObjectProp(AnObject, PropName); + if obj<>nil then begin + if obj is TComponent then begin + compmarker := TComponent(obj).FindComponent('GNUgettextMarker'); + if Assigned(compmarker) then + exit; + end; + TodoList.AddObject ('',obj); + end; + end { case item }; + end { case }; + except + on E:Exception do + raise EGGComponentError.Create ('Property cannot be translated.'+sLineBreak+ + 'Add TP_GlobalIgnoreClassProperty('+AnObject.ClassName+','''+PropName+''') to your source code or use'+sLineBreak+ + 'TP_Ignore (self,''.'+PropName+''') to prevent this message.'+sLineBreak+ + 'Reason: '+e.Message); + end; +end; + +function ObjectHasAssignedAction(AnObject: TObject; PropList: PPropList; Count: Integer; var ActionProperty: TObject): Boolean; +var + I: Integer; + PropInfo: PPropInfo; + Obj: TObject; +begin + Result := False; + I := 0; + while not Result and (I < Count) do + begin + PropInfo := PropList^[I]; + if (PropInfo^.PropType^.Kind = tkClass) then + begin + Obj := GetObjectProp(AnObject, string(PropInfo^.Name)); + Result := Obj is TBasicAction; + if Result then + ActionProperty := Obj; + end; + + Inc(I); + end; +end; + +function TGnuGettextInstance.ClassIsIgnored(AClass:TClass): Boolean; +var + cm:TClassMode; + i:integer; +begin + for i:=0 to TP_GlobalClassHandling.Count-1 do begin + cm:=TObject(TP_GlobalClassHandling.Items[i]) as TClassMode; + if AClass.InheritsFrom(cm.HClass) and (cm.PropertiesToIgnore.Count = 0) then + begin + Result := True; + exit; + end; + end; + for i:=0 to TP_ClassHandling.Count-1 do begin + cm:=TObject(TP_ClassHandling.Items[i]) as TClassMode; + if AClass.InheritsFrom(cm.HClass) then + begin + Result := True; + exit; + end; + end; + Result := False; +end; + +procedure TGnuGettextInstance.TranslateProperties(AnObject: TObject; textdomain:DomainString=''); +var + TodoList:TStringList; // List of Name/TObject's that is to be processed + DoneList:TStringList; // List of hex codes representing pointers to objects that have been done + i, j, Count: integer; + PropList: PPropList; + UPropName: ComponentNameString; + PropInfo: PPropInfo; + compmarker, + comp:TComponent; + cm, + currentcm:TClassMode; // currentcm is nil or contains special information about how to handle the current object + ObjectPropertyIgnoreList:TStringList; + objid:string; + Name:ComponentNameString; + ActionProperty:TObject; +begin + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('----------------------------------------------------------------------'); + DebugWriteln ('TranslateProperties() was called for an object of class '+AnObject.ClassName+' with domain "'+textdomain+'".'); + {$endif} + + if TP_Retranslator<>nil then + if textdomain = '' then + (TP_Retranslator as TTP_Retranslator).TextDomain:=curmsgdomain + else + (TP_Retranslator as TTP_Retranslator).TextDomain:=textdomain; +// {$ifdef FPC} +// DoneList:=TCSStringList.Create; +// TodoList:=TCSStringList.Create; +// ObjectPropertyIgnoreList:=TCSStringList.Create; +// {$else} + DoneList:=TStringList.Create; + TodoList:=TStringList.Create; + ObjectPropertyIgnoreList:=TStringList.Create; +// {$endif} + try + TodoList.AddObject('', AnObject); + DoneList.Sorted:=True; + ObjectPropertyIgnoreList.Sorted:=True; + ObjectPropertyIgnoreList.Duplicates:=dupIgnore; + ObjectPropertyIgnoreList.CaseSensitive:=False; + DoneList.Duplicates:=dupError; + DoneList.CaseSensitive:=True; + + while TodoList.Count<>0 do begin + AnObject:=TodoList.Objects[0]; + Name:=TodoList.Strings[0]; + TodoList.Delete(0); + if (AnObject<>nil) and (AnObject is TPersistent) then begin + // Make sure each object is only translated once + Assert (sizeof({$IFDEF CPUx64}NativeInt{$ELSE}Integer{$ENDIF CPUx64})=sizeof(TObject)); + objid:=IntToHex({$IFDEF CPUx64}NativeInt{$ELSE}Integer{$ENDIF CPUx64}(AnObject),8); + if DoneList.Find(objid,i) then begin + continue; + end else begin + DoneList.Add(objid); + end; + + ObjectPropertyIgnoreList.Clear; + + // Find out if there is special handling of this object + currentcm:=nil; + // First check the local handling instructions + for j:=0 to TP_ClassHandling.Count-1 do begin + cm:=TObject(TP_ClassHandling.Items[j]) as TClassMode; + if AnObject.InheritsFrom(cm.HClass) then begin + if cm.PropertiesToIgnore.Count<>0 then begin + ObjectPropertyIgnoreList.AddStrings(cm.PropertiesToIgnore); + end else begin + // Ignore the entire class + currentcm:=cm; + break; + end; + end; + end; + // Then check the global handling instructions + if currentcm=nil then + for j:=0 to TP_GlobalClassHandling.Count-1 do begin + cm:=TObject(TP_GlobalClassHandling.Items[j]) as TClassMode; + if AnObject.InheritsFrom(cm.HClass) then begin + if cm.PropertiesToIgnore.Count<>0 then begin + ObjectPropertyIgnoreList.AddStrings(cm.PropertiesToIgnore); + end else begin + // Ignore the entire class + currentcm:=cm; + break; + end; + end; + end; + if currentcm<>nil then begin + ObjectPropertyIgnoreList.Clear; + // Ignore or use special handler + if Assigned(currentcm.SpecialHandler) then begin + currentcm.SpecialHandler (AnObject); + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('Special handler activated for '+AnObject.ClassName); + {$endif} + end else begin + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('Ignoring object '+AnObject.ClassName); + {$endif} + end; + continue; + end; + + Count := GetPropList(AnObject, PropList); + try + if ObjectHasAssignedAction(AnObject, PropList, Count, ActionProperty) and not ClassIsIgnored(ActionProperty.ClassType) then + Continue; + + for j := 0 to Count - 1 do begin + PropInfo := PropList^[j]; + {$IFDEF UNICODE} + if not (PropInfo^.PropType^.Kind in [tkString, tkLString, tkWString, tkClass, tkUString]) then + {$ELSE} + if not (PropInfo^.PropType^.Kind in [tkString, {$ifdef FPC}tkAString,{$endif} tkLString, tkWString, tkClass]) then + {$ENDIF} + continue; + UPropName:=uppercase(string(PropInfo^.Name)); + // Ignore properties that are meant to be ignored + if ((currentcm=nil) or (not currentcm.PropertiesToIgnore.Find(UPropName,i))) and + (not TP_IgnoreList.Find(Name+'.'+UPropName,i)) and + (not ObjectPropertyIgnoreList.Find(UPropName,i)) then begin + TranslateProperty (AnObject,PropInfo,TodoList,TextDomain); + end; // if + end; // for + finally + if Count<>0 then + FreeMem (PropList); + end; + {$IFDEF dx_has_WideStrings} + if AnObject is TWideStrings then begin + if ((AnObject as TWideStrings).Text<>'') and (TP_Retranslator<>nil) then + (TP_Retranslator as TTP_Retranslator).Remember(AnObject, 'Text', (AnObject as TWideStrings).Text); + TranslateWideStrings (AnObject as TWideStrings,TextDomain); + end; + {$ENDIF dx_has_WideStrings} + if AnObject is TStrings then begin + if ((AnObject as TStrings).Text<>'') and (TP_Retranslator<>nil) then + (TP_Retranslator as TTP_Retranslator).Remember(AnObject, 'Text', (AnObject as TStrings).Text); + TranslateStrings (AnObject as TStrings,TextDomain); + end; + // Check for TCollection + if AnObject is TCollection then begin + for i := 0 to (AnObject as TCollection).Count - 1 do begin + // Only add the object if it's not totally ignored already + if not Assigned(currentcm) or not AnObject.InheritsFrom(currentcm.HClass) then + TodoList.AddObject('',(AnObject as TCollection).Items[i]); + end; + end; + if AnObject is TComponent then begin + for i := 0 to TComponent(AnObject).ComponentCount - 1 do begin + comp:=TComponent(AnObject).Components[i]; + if (not TP_IgnoreList.Find(uppercase(comp.Name),j)) then begin + // Only add the object if it's not totally ignored or translated already + if not Assigned(currentcm) or not AnObject.InheritsFrom(currentcm.HClass) then begin + compmarker := comp.FindComponent('GNUgettextMarker'); + if not Assigned(compmarker) then + TodoList.AddObject(uppercase(comp.Name),comp); + end; + end; + end; + end; + end { if AnObject<>nil }; + end { while todolist.count<>0 }; + finally + FreeAndNil (todolist); + FreeAndNil (ObjectPropertyIgnoreList); + FreeAndNil (DoneList); + end; + FreeTP_ClassHandlingItems; + TP_IgnoreList.Clear; + TP_Retranslator:=nil; + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('----------------------------------------------------------------------'); + {$endif} +end; + +procedure TGnuGettextInstance.UnregisterWhenNewLanguageListener( + Listener: IGnuGettextInstanceWhenNewLanguageListener); +begin + fWhenNewLanguageListeners.Remove(Listener); +end; + +procedure TGnuGettextInstance.UseLanguage(LanguageCode: LanguageString); +var + i,p:integer; + dom:TDomain; + l2:string; +begin + {$ifdef DXGETTEXTDEBUG} + DebugWriteln('UseLanguage('''+LanguageCode+'''); called'); + {$endif} + + if LanguageCode='' then begin + LanguageCode:=GGGetEnvironmentVariable('LANG'); + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('LANG env variable is '''+LanguageCode+'''.'); + {$endif} + {$ifdef MSWINDOWS} + if LanguageCode='' then begin + LanguageCode:=GetWindowsLanguage; + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('Found Windows language code to be '''+LanguageCode+'''.'); + {$endif} + end; + {$endif} + p:=pos('.',LanguageCode); + if p<>0 then + LanguageCode:=LeftStr(LanguageCode,p-1); + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('Language code that will be set is '''+LanguageCode+'''.'); + {$endif} + end; + + curlang := LanguageCode; + for i:=0 to domainlist.Count-1 do begin + dom:=domainlist.Objects[i] as TDomain; + dom.SetLanguageCode (curlang); + end; + + l2:=lowercase(LeftStr(curlang,2)); + {$IFDEF FPC} + if (l2='en') or (l2='de') then curGetPluralForm:=@GetPluralForm2EN else + if (l2='hu') or (l2='ko') or (l2='zh') or (l2='ja') or (l2='tr') then curGetPluralForm:=@GetPluralForm1 else + if (l2='fr') or (l2='fa') or (lowercase(curlang)='pt_br') then curGetPluralForm:=@GetPluralForm2FR else + if (l2='lv') then curGetPluralForm:=@GetPluralForm3LV else + if (l2='ga') then curGetPluralForm:=@GetPluralForm3GA else + if (l2='lt') then curGetPluralForm:=@GetPluralForm3LT else + if (l2='ru') or (l2='uk') or (l2='hr') then curGetPluralForm:=@GetPluralForm3RU else + if (l2='cs') or (l2='sk') then curGetPluralForm:=@GetPluralForm3SK else + if (l2='pl') then curGetPluralForm:=@GetPluralForm3PL else + if (l2='sl') then curGetPluralForm:=@GetPluralForm4SL else begin + curGetPluralForm:=@GetPluralForm2EN; + {$ELSE} + if (l2='en') or (l2='de') then curGetPluralForm:=GetPluralForm2EN else + if (l2='hu') or (l2='ko') or (l2='zh') or (l2='ja') or (l2='tr') then curGetPluralForm:=GetPluralForm1 else + if (l2='fr') or (l2='fa') or (lowercase(curlang)='pt_br') then curGetPluralForm:=GetPluralForm2FR else + if (l2='lv') then curGetPluralForm:=GetPluralForm3LV else + if (l2='ga') then curGetPluralForm:=GetPluralForm3GA else + if (l2='lt') then curGetPluralForm:=GetPluralForm3LT else + if (l2='ru') or (l2='uk') or (l2='hr') then curGetPluralForm:=GetPluralForm3RU else + if (l2='cs') or (l2='sk') then curGetPluralForm:=GetPluralForm3SK else + if (l2='pl') then curGetPluralForm:=GetPluralForm3PL else + if (l2='sl') then curGetPluralForm:=GetPluralForm4SL else begin + curGetPluralForm:=GetPluralForm2EN; + {$ENDIF} + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('Plural form for the language was not found. English plurality system assumed.'); + {$endif} + end; + + WhenNewLanguage (curlang); + + {$ifdef DXGETTEXTDEBUG} + DebugWriteln(''); + {$endif} +end; + +procedure TGnuGettextInstance.TranslateStrings(sl: TStrings;const TextDomain:DomainString); +var + line: string; + i: integer; + tempSL: TStringList; + slAsTStringList:TStringList; + {$ifdef dx_StringList_has_OwnsObjects} + originalOwnsObjects: Boolean; + {$endif dx_StringList_has_OwnsObjects} +begin + if sl.Count > 0 then begin + {$ifdef dx_StringList_has_OwnsObjects} + // From D2009 onward, the TStringList class has an OwnsObjects property, just like + // TObjectList has. This means that if we call Clear on the given + // list in the sl parameter, we could destroy the objects it contains. + // To avoid this we must disable OwnsObjects while we replace the strings, but + // only if sl is a TStringList instance and if using Delphi 2009 or later. + originalOwnsObjects := False; // avoid warning + {$endif dx_StringList_has_OwnsObjects} + if sl is TStringList then + slAsTStringList := TStringList(sl) + else + slAsTStringList := nil; + + sl.BeginUpdate; + try + tempSL:=TStringList.Create; + try + // don't use Assign here as it will propagate the Sorted property (among others) + // in versions of Delphi from Delphi XE onward + tempSL.AddStrings(sl); + + for i:=0 to tempSL.Count-1 do begin + line:=tempSL.Strings[i]; + if line<>'' then + if TextDomain = '' then + tempSL.Strings[i]:=ComponentGettext(line, Self) + else + tempSL.Strings[i]:=dgettext(TextDomain,line); + end; + + //DH Fix 2013-09-19: Only refill sl if changed + if sl.Text<>tempSL.Text then + begin + {$ifdef dx_StringList_has_OwnsObjects} + if Assigned(slAsTStringList) then begin + originalOwnsObjects := slAsTStringList.OwnsObjects; + slAsTStringList.OwnsObjects := False; + end; + {$endif dx_StringList_has_OwnsObjects} + try + if Assigned(slAsTStringList) and slAsTStringList.Sorted then + begin + // TStringList doesn't release the objects in PutObject, so we use this to get + // sl.Clear to not destroy the objects in classes that inherit from TStringList + // but do a ClearObject in Clear. + // + // todo: Check whether this should be + // if sl is TStringList then + // instead. + if sl.ClassType <> TStringList then + for I := 0 to sl.Count - 1 do + sl.Objects[I] := nil; + + // same here, we don't use assign because we don't want to modify the properties of the orignal string list + sl.Clear; + sl.AddStrings(tempSL); + end + else + begin + for i := 0 to sl.Count - 1 do + sl[i] := tempSL[i]; + end; + finally + {$ifdef dx_StringList_has_OwnsObjects} + if Assigned(slAsTStringList) then + slAsTStringList.OwnsObjects := originalOwnsObjects; + {$endif dx_StringList_has_OwnsObjects} + end; + end; + finally + FreeAndNil (tempSL); + end; + finally + sl.EndUpdate; + end; + end; +end; + +{$IFDEF dx_has_WideStrings} +procedure TGnuGettextInstance.TranslateWideStrings(sl: TWideStrings; + const TextDomain: DomainString); +var + line: string; + i: integer; + tempSL:TWideStringList; + slAsTWideStringList:TWideStringList; + {$ifdef dx_StringList_has_OwnsObjects} + originalOwnsObjects: Boolean; + {$endif dx_StringList_has_OwnsObjects} +begin + if sl.Count > 0 then begin + {$ifdef dx_StringList_has_OwnsObjects} + // From D2009 onward, the TWideStringList class has an OwnsObjects property, just like + // TObjectList has. This means that if we call Clear on the given + // list in the sl parameter, we could destroy the objects it contains. + // To avoid this we must disable OwnsObjects while we replace the strings, but + // only if sl is a TWideStringList instance and if using Delphi 2009 or later. + originalOwnsObjects := False; // avoid warning + {$endif dx_StringList_has_OwnsObjects} + if sl is TWideStringList then + slAsTWideStringList := TWideStringList(sl) + else + slAsTWideStringList := nil; + + sl.BeginUpdate; + try + tempSL:=TWideStringList.Create; + try + // don't use Assign here as it will propagate the Sorted property (among others) + // in versions of Delphi from Delphi XE ownard + tempSL.AddStrings(sl); + + for i:=0 to tempSL.Count-1 do begin + line:=tempSL.Strings[i]; + if line<>'' then + if TextDomain = '' then + tempSL.Strings[i]:=ComponentGettext(line, Self) + else + tempSL.Strings[i]:=dgettext(TextDomain,line); + end; + + //DH Fix 2013-09-19: Only refill sl if changed + if sl.Text<>tempSL.Text then + begin + {$ifdef dx_StringList_has_OwnsObjects} + if Assigned(slAsTWideStringList) then begin + originalOwnsObjects := slAsTWideStringList.OwnsObjects; + slAsTWideStringList.OwnsObjects := False; + end; + {$endif dx_StringList_has_OwnsObjects} + try + if Assigned(slAsTWideStringList) and slAsTWideStringList.Sorted then + begin + // TWideStringList doesn't release the objects in PutObject, so we use this to get + // sl.Clear to not destroy the objects in classes that inherit from TWideStringList + // but do a ClearObject in Clear. + // + // todo: Check whether this should be + // if sl is TWideStringList then + // instead. + if sl.ClassType <> TWideStringList then + for I := 0 to sl.Count - 1 do + sl.Objects[I] := nil; + + // same here, we don't use assign because we don't want to modify the properties of the orignal string list + sl.Clear; + sl.AddStrings(tempSL); + end + else + begin + for i := 0 to sl.Count - 1 do + sl[i] := tempSL[i]; + end; + finally + {$ifdef dx_StringList_has_OwnsObjects} + if Assigned(slAsTWideStringList) then + slAsTWideStringList.OwnsObjects := originalOwnsObjects; + {$endif dx_StringList_has_OwnsObjects} + end; + end; + finally + FreeAndNil (tempSL); + end; + finally + sl.EndUpdate; + end; + end; +end; +{$ENDIF dx_has_WideStrings} + +function TGnuGettextInstance.GetTranslatorNameAndEmail: TranslatedUnicodeString; +begin + Result:=GetTranslationProperty('LAST-TRANSLATOR'); +end; + +function TGnuGettextInstance.GetTranslationProperty( + const Propertyname: ComponentNameString): TranslatedUnicodeString; +begin + Result:=getdomain(curmsgdomain,DefaultDomainDirectory,CurLang).GetTranslationProperty (Propertyname); +end; + +function TGnuGettextInstance.dngettext(const szDomain: DomainString; const singular, plural: MsgIdString; + Number: Integer): TranslatedUnicodeString; +var + org:MsgIdString; + trans:TranslatedUnicodeString; + idx:integer; + p:integer; +begin + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('dngettext translation (domain '+szDomain+', number is '+IntTostr(Number)+') of '+singular+'/'+plural); + {$endif} + org:=singular+#0+plural; + trans:=dgettext(szDomain,org); + if org=trans then begin + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('Translation was equal to english version. English plural forms assumed.'); + {$endif} + idx:=GetPluralForm2EN(Number) + end else + idx:=curGetPluralForm(Number); + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('Index '+IntToStr(idx)+' will be used'); + {$endif} + while true do begin + p:=pos(#0,trans); + if p=0 then begin + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('Last translation used: '+utf8encode(trans)); + {$endif} + Result:=trans; + exit; + end; + if idx=0 then begin + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('Translation found: '+utf8encode(trans)); + {$endif} + Result:=LeftStr(trans,p-1); + exit; + end; + delete (trans,1,p); + dec (idx); + end; +end; + +function TGnuGettextInstance.dngettext_NoExtract(const szDomain: DomainString; + const singular, plural: MsgIdString; + Number: Integer): TranslatedUnicodeString; +begin + // This one is very useful for translating text in variables. + // This can sometimes be necessary, and by using this function, + // the source code scanner will not trigger warnings. + Result:=dngettext(szDomain,singular,plural,Number); +end; + +{$ifndef UNICODE} +function TGnuGettextInstance.ngettext(const singular, plural: ansistring; + Number: Integer): TranslatedUnicodeString; +var + domain: DomainString; + domainIndex: Integer; +begin + Result := dngettext(curmsgdomain, singular, plural, Number); + if SearchAllDomains then begin + domainIndex := 0; + while (Result <> singular) and (Result <> plural) and (domainIndex < domainlist.count) do begin + domain := domainlist[domainIndex]; + Result := dngettext(domain, singular, plural, Number); + Inc(domainIndex); + end; + end; +end; +{$endif} + +function TGnuGettextInstance.ngettext(const singular, plural: MsgIdString; + Number: Integer): TranslatedUnicodeString; +var + domain: DomainString; + domainIndex: Integer; +begin + Result := dngettext(curmsgdomain, singular, plural, Number); + if SearchAllDomains then begin + domainIndex := 0; + while (Result <> singular) and (Result <> plural) and (domainIndex < domainlist.count) do begin + domain := domainlist[domainIndex]; + Result := dngettext(domain, singular, plural, Number); + Inc(domainIndex); + end; + end; +end; + +function TGnuGettextInstance.ngettext_NoExtract(const singular, + plural: MsgIdString; Number: Integer): TranslatedUnicodeString; +begin + // This one is very useful for translating text in variables. + // This can sometimes be necessary, and by using this function, + // the source code scanner will not trigger warnings. + Result:=ngettext(singular,plural,Number); +end; + +procedure TGnuGettextInstance.WhenNewDomain(const TextDomain: DomainString); +begin + // This is meant to be empty. +end; + +procedure TGnuGettextInstance.WhenNewLanguage(const LanguageID: LanguageString); +var + I: Integer; +begin + for I := 0 to fWhenNewLanguageListeners.Count - 1 do + IGnuGettextInstanceWhenNewLanguageListener(fWhenNewLanguageListeners[I]).WhenNewLanguage(LanguageID); +end; + +procedure TGnuGettextInstance.WhenNewDomainDirectory(const TextDomain:DomainString; const Directory: FilenameString); +begin + // This is meant to be empty. +end; + +procedure TGnuGettextInstance.GetListOfLanguages(const domain: DomainString; + list: TStrings); +begin + getdomain(Domain,DefaultDomainDirectory,CurLang).GetListOfLanguages(list); +end; + +procedure TGnuGettextInstance.bindtextdomainToFile(const szDomain:DomainString; const filename: FilenameString); +begin + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('Text domain "'+szDomain+'" is now bound to file named "'+filename+'"'); + {$endif} + getdomain(szDomain,DefaultDomainDirectory,CurLang).SetFilename (filename); +end; + +procedure TGnuGettextInstance.DebugLogPause(PauseEnabled: boolean); +begin + {$ifdef DXGETTEXTDEBUG} + DebugLogOutputPaused:=PauseEnabled; + {$endif} +end; + +function TGnuGettextInstance.DebugLogToString(Empty:Boolean=true):String; +begin + {$ifdef DXGETTEXTDEBUG} +// SetString(Result, PChar(TMemoryStream(DebugLog).Memory), DebugLog.Size div SizeOf(Char)); + SetString(Result, PAnsiChar(TMemoryStream(DebugLog).Memory), DebugLog.Size); + If Empty then Debuglog.size :=0; + {$endif} +end; + +procedure TGnuGettextInstance.DebugLogToFile(const filename: FilenameString; append:boolean=false); +{$ifdef DXGETTEXTDEBUG} +var + fs:TFileStream; + marker:ansistring; +{$endif} +begin + {$ifdef DXGETTEXTDEBUG} + // Create the file if needed + if (not fileexists(filename)) or (not append) then + fileclose (filecreate (filename)); + + // Open file + fs:=TFileStream.Create (filename,fmOpenWrite or fmShareDenyWrite); + if append then + fs.Seek(0,soFromEnd); + + // Write header if appending + if fs.Position<>0 then begin + marker:=sLineBreak+'==========================================================================='+sLineBreak; + fs.WriteBuffer(marker[1],length(marker)); + end; + + // Copy the memorystream contents to the file + if DebugLog <> nil then + begin + DebugLog.Seek(0,soFromBeginning); + fs.CopyFrom(DebugLog,0); + end; + + // Make DebugLog point to the filestream + FreeAndNil (DebugLog); + DebugLog:=fs; + {$endif} +end; + +{$ifdef DXGETTEXTDEBUG} +procedure TGnuGettextInstance.DebugWriteln(line: ansistring); +Var + Discard: Boolean; +begin + Assert (DebugLogCS<>nil); + Assert (DebugLog<>nil); + + DebugLogCS.BeginWrite; + try + if DebugLogOutputPaused then + exit; + + if Assigned (fOnDebugLine) then begin + Discard := True; + fOnDebugLine (Self, Line, Discard); + If Discard then Exit; + end; + + line:=line+sLineBreak; + + // Ensure that memory usage doesn't get too big. + if (DebugLog is TMemoryStream) and (DebugLog.Position>1000000) then begin + line:=sLineBreak+sLineBreak+sLineBreak+sLineBreak+sLineBreak+ + 'Debug log halted because memory usage grew too much.'+sLineBreak+ + 'Specify a filename to store the debug log in or disable debug loggin in gnugettext.pas.'+ + sLineBreak+sLineBreak+sLineBreak+sLineBreak+sLineBreak; + DebugLogOutputPaused:=True; + end; + DebugLog.WriteBuffer(line[1],length(line)); + finally + DebugLogCS.EndWrite; + end; +end; +{$endif} + +function TGnuGettextInstance.Getdomain(const domain:DomainString; const sDefaultDomainDirectory:FilenameString; const sCurLang: LanguageString): TDomain; +// Retrieves the TDomain object for the specified domain. +// Creates one, if none there, yet. +var + idx: integer; +begin + idx := domainlist.IndexOf(Domain); + if idx = -1 then begin + Result := TDomain.Create; + {$ifdef DXGETTEXTDEBUG} +// Result.DebugLogger:={$ifdef FPC}@{$endif}DebugWriteln; + Result.DebugLogger:=DebugWriteln; + {$endif} + Result.Domain := Domain; + Result.Directory := sDefaultDomainDirectory; + Result.SetLanguageCode(scurlang); + domainlist.AddObject(Domain, Result); + end else begin + Result := domainlist.Objects[idx] as TDomain; + end; +end; + +{$IFNDEF FPC} +function TGnuGettextInstance.LoadResString( + ResStringRec: PResStringRec): UnicodeString; +{$ifdef MSWINDOWS} +var + Len: Integer; + {$IFDEF UNICODE} + Buffer: array [0..1023] of widechar; + {$else} + Buffer: array [0..1023] of ansichar; + {$endif} +{$endif} +{$ifdef LINUX } +const + ResStringTableLen = 16; +type + ResStringTable = array [0..ResStringTableLen-1] of LongWord; +var + Handle: TResourceHandle; + Tab: ^ResStringTable; + ResMod: HMODULE; +{$endif } +begin + if ResStringRec=nil then + exit; + if ResStringRec.Identifier>=64*1024 then begin + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('LoadResString was given an invalid ResStringRec.Identifier'); + {$endif} + Result:='ERROR'; + exit; + end else begin + {$ifdef LINUX} + // This works with Unicode if the Linux has utf-8 character set + // Result:=System.LoadResString(ResStringRec); + ResMod:=FindResourceHInstance(ResStringRec^.Module^); + Handle:=FindResource(ResMod, + PAnsiChar(ResStringRec^.Identifier div ResStringTableLen), PAnsiChar(6)); // RT_STRING + Tab:=Pointer(LoadResource(ResMod, Handle)); + if Tab=nil then + Result:='' + else + Result:=PWideChar(PAnsiChar(Tab)+Tab[ResStringRec^.Identifier mod ResStringTableLen]); + {$endif} + {$ifdef MSWINDOWS} + if not Win32PlatformIsUnicode then begin + SetString(Result, Buffer, + LoadString(FindResourceHInstance(ResStringRec.Module^), + ResStringRec.Identifier, Buffer, SizeOf(Buffer))) + end else begin + Result := ''; + Len := 0; + While Length(Result)<=Len+1 do begin + if Length(Result) = 0 then + SetLength(Result, 1024) + else + SetLength(Result, Length(Result) * 2); + Len := LoadStringW(FindResourceHInstance(ResStringRec.Module^), + ResStringRec.Identifier, PWideChar(Result), Length(Result)); + end; + SetLength(Result, Len); + end; + {$endif} + end; + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('Loaded resourcestring: '+utf8encode(Result)); + {$endif} + Result:=ResourceStringGettext(Result); +end; +{$ENDIF} + +procedure TGnuGettextInstance.RegisterWhenNewLanguageListener( + Listener: IGnuGettextInstanceWhenNewLanguageListener); +begin + fWhenNewLanguageListeners.Add(Listener); +end; + +procedure TGnuGettextInstance.RetranslateComponent(AnObject: TComponent; + const TextDomain: DomainString); +var + comp:TGnuGettextComponentMarker; +begin + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('======================================================================'); + DebugWriteln ('RetranslateComponent() was called for a component with name '+AnObject.Name+'.'); + {$endif} + comp:=AnObject.FindComponent('GNUgettextMarker') as TGnuGettextComponentMarker; + if comp=nil then + begin + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('Retranslate was called on an object that has not been translated before. An Exception is being raised.'); + {$endif} + raise EGGProgrammingError.Create ('Retranslate was called on an object that has not been translated before. Please use TranslateComponent() before RetranslateComponent().'); + end + else + begin + //*** if param ReReadMoFileOnSameLanguage is set, use the ReTranslate + // function nevertheless if the current language is the same like the + // new (-> reread the current .mo-file from the file system). + if ReReadMoFileOnSameLanguage or + (comp.LastLanguage <> curlang) then + begin + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('The retranslator is being executed.'); + {$endif} + comp.Retranslator.Execute; + end + else + begin + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('The language has not changed. The retranslator is not executed.'); + {$endif} + end; + end; + comp.LastLanguage:=curlang; + + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('======================================================================'); + {$endif} +end; + +procedure TGnuGettextInstance.TP_IgnoreClass(IgnClass: TClass); +var + cm:TClassMode; + i:integer; +begin + for i:=0 to TP_ClassHandling.Count-1 do begin + cm:=TObject(TP_ClassHandling.Items[i]) as TClassMode; + if cm.HClass=IgnClass then + raise EGGProgrammingError.Create ('You cannot add a class to the ignore list that is already on that list: '+IgnClass.ClassName+'.'); + if IgnClass.InheritsFrom(cm.HClass) then begin + // This is the place to insert this class + cm:=TClassMode.Create; + cm.HClass:=IgnClass; + TP_ClassHandling.Insert(i,cm); + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('Locally, class '+IgnClass.ClassName+' is being ignored.'); + {$endif} + exit; + end; + end; + cm:=TClassMode.Create; + cm.HClass:=IgnClass; + TP_ClassHandling.Add(cm); + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('Locally, class '+IgnClass.ClassName+' is being ignored.'); + {$endif} +end; + +procedure TGnuGettextInstance.TP_IgnoreClassProperty(IgnClass: TClass; + propertyname: ComponentNameString); +var + cm:TClassMode; + i:integer; +begin + propertyname:=uppercase(propertyname); + for i:=0 to TP_ClassHandling.Count-1 do begin + cm:=TObject(TP_ClassHandling.Items[i]) as TClassMode; + if cm.HClass=IgnClass then begin + if Assigned(cm.SpecialHandler) then + raise EGGProgrammingError.Create ('You cannot ignore a class property for a class that has a handler set.'); + cm.PropertiesToIgnore.Add(propertyname); + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('Globally, the '+propertyname+' property of class '+IgnClass.ClassName+' is being ignored.'); + {$endif} + exit; + end; + if IgnClass.InheritsFrom(cm.HClass) then begin + // This is the place to insert this class + cm:=TClassMode.Create; + cm.HClass:=IgnClass; + cm.PropertiesToIgnore.Add(propertyname); + TP_ClassHandling.Insert(i,cm); + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('Locally, the '+propertyname+' property of class '+IgnClass.ClassName+' is being ignored.'); + {$endif} + exit; + end; + end; + cm:=TClassMode.Create; + cm.HClass:=IgnClass; + cm.PropertiesToIgnore.Add(propertyname); + TP_GlobalClassHandling.Add(cm); + {$ifdef DXGETTEXTDEBUG} + DebugWriteln ('Locally, the '+propertyname+' property of class '+IgnClass.ClassName+' is being ignored.'); + {$endif} +end; + +procedure TGnuGettextInstance.TP_Remember(AnObject: TObject; + PropName: ComponentNameString; OldValue: TranslatedUnicodeString); +begin + if Assigned(TP_Retranslator) then + (TP_Retranslator as TTP_Retranslator).Remember(AnObject, PropName, OldValue) + else + raise EGGProgrammingError.Create ('You can only call TP_Remember when doing the initial translation (TP_Retranslator is not set).'); +end; + +procedure TGnuGettextInstance.FreeTP_ClassHandlingItems; +begin + while TP_ClassHandling.Count<>0 do begin + TObject(TP_ClassHandling.Items[0]).Free; + TP_ClassHandling.Delete(0); + end; +end; + +{$ifndef UNICODE} +function TGnuGettextInstance.ansi2wideDTCP(const s: ansistring): MsgIdString; +{$ifdef MSWindows} +var + len:integer; +{$endif} +begin +{$ifdef MSWindows} + if DesignTimeCodePage=CP_ACP then begin + // No design-time codepage specified. Using runtime codepage instead. +{$endif} + Result:=s; +{$ifdef MSWindows} + end else begin + len:=length(s); + if len=0 then + Result:='' + else begin + SetLength (Result,len); + len:=MultiByteToWideChar(DesignTimeCodePage,0,pansichar(s),len,pwidechar(Result),len); + if len=0 then + raise EGGAnsi2WideConvError.Create ('Cannot convert string to widestring:'+sLineBreak+s); + SetLength (Result,len); + end; + end; +{$endif} +end; +{$endif} + +{$ifndef UNICODE} +function TGnuGettextInstance.dngettext(const szDomain: DomainString; const singular, + plural: ansistring; Number: Integer): TranslatedUnicodeString; +begin + Result:=dngettext (szDomain, ansi2wideDTCP(singular), ansi2wideDTCP(plural), Number); +end; +{$endif} + +{ TClassMode } + +constructor TClassMode.Create; +begin + PropertiesToIgnore:=TStringList.Create; + PropertiesToIgnore.Sorted:=True; + PropertiesToIgnore.Duplicates:=dupError; + PropertiesToIgnore.CaseSensitive:=False; +end; + +destructor TClassMode.Destroy; +begin + FreeAndNil (PropertiesToIgnore); + inherited; +end; + +{ TFileLocator } + +function TFileLocator.FindSignaturePos(const signature: RawByteString; + str: TFileStream): Int64; +// Finds the position of signature in the file. +const + bufsize=100000; +var + a:RawByteString; + b:RawByteString; + offset:integer; + rd,p:Integer; +begin + if signature='' then + begin + Result := 0; + Exit; + end; + + offset:=0; + str.Seek(0, soFromBeginning); + + SetLength (a, bufsize); + SetLength (b, bufsize); + str.Read(a[1],bufsize); + + while true do begin + rd:=str.Read(b[1],bufsize); + p:=pos(signature,a+b); + if (p<>0) then begin // do not check p < bufsize+100 here! + Result:=offset+p-1; + exit; + end; + if rd<>bufsize then begin + // Prematurely ended without finding anything + Result:=0; + exit; + end; + a:=b; + offset:=offset+bufsize; + end; + Result:=0; +end; + +procedure TFileLocator.Analyze; +var + HeaderSize, + PrefixSize: Integer; + dummysig, + headerpre, + headerbeg, + headerend:RawByteString; + i:integer; + headerbeginpos, + headerendpos:integer; + offset, + tableoffset:int64; + fs:TFileStream; + fi:TEmbeddedFileInfo; + filename:FilenameString; + filename8bit:RawByteString; +const +{ + // DetectionSignature: used solely to detect gnugettext usage by assemble + DetectionSignature: array[0..35] of AnsiChar='2E23E563-31FA-4C24-B7B3-90BE720C6B1A'; + // Embedded Header Begin Signature (without dynamic prefix written by assemble) + BeginHeaderSignature: array[0..35] of AnsiChar='BD7F1BE4-9FCF-4E3A-ABA7-3443D11AB362'; + // Embedded Header End Signature (without dynamic prefix written by assemble) + EndHeaderSignature: array[0..35] of AnsiChar='1C58841C-D8A0-4457-BF54-D8315D4CF49D'; + // Assemble Prefix (do not put before the Header Signatures!) + SignaturePrefix: array[0..2] of AnsiChar='DXG'; // written from assemble +} + //fvd found soltion http://neftali.clubdelphi.com/aplicacion-multiidioma-con-gnu-gettext/ + //DetectionSignature: used solely to detect gnugettext usage by assemble + DetectionSignature: array[0..35] of AnsiChar='6637DB2E-62E1-4A60-AC19-C23867046A89'; + // Embedded Header Begin Signature (without dynamic prefix written by assemble) + BeginHeaderSignature: array[0..35] of AnsiChar=''; + // Embedded Header End Signature (without dynamic prefix written by assemble) + EndHeaderSignature: array[0..35] of AnsiChar=''; + // Assemble Prefix (do not put before the Header Signatures!) + SignaturePrefix: array[0..16] of AnsiChar='#0#0#0#0#0#0#0#0';//'DXG'; // written from assemble + + + +begin + // Attn: Ensure all Signatures have the same size! + HeaderSize := High(BeginHeaderSignature) - Low(BeginHeaderSignature) + 1; + PrefixSize := High(SignaturePrefix) - Low(SignaturePrefix) + 1; + + // dummy usage of DetectionSignature (otherwise not compiled into exe) + SetLength(dummysig, HeaderSize); + for i := 0 to HeaderSize-1 do + dummysig[i+1] := DetectionSignature[i]; + + // copy byte by byte (D2009+ compatible) + SetLength(headerpre, PrefixSize); + for i:= 0 to PrefixSize-1 do + headerpre[i+1] := SignaturePrefix[i]; + + SetLength(headerbeg, HeaderSize); + for i:= 0 to HeaderSize-1 do + headerbeg[i+1] := BeginHeaderSignature[i]; + + SetLength(headerend, HeaderSize); + for i:= 0 to HeaderSize-1 do + headerend[i+1] := EndHeaderSignature[i]; + + BaseDirectory:=ExtractFilePath(ExecutableFilename); + try + fs:=TFileStream.Create(ExecutableFilename,fmOpenRead or fmShareDenyNone); + try + // try to find new header begin and end signatures + headerbeginpos := FindSignaturePos(headerpre+headerbeg, fs); + headerendpos := FindSignaturePos(headerpre+headerend, fs); + + if (headerbeginpos > 0) and (headerendpos > 0) then + begin + // adjust positions (to the end of each signature) + headerbeginpos := headerbeginpos + HeaderSize + PrefixSize; + + // get file table offset (8 byte, stored directly before the end header) + fs.Seek(headerendpos - 8, soFromBeginning); + // get relative offset and convert to absolute offset during runtime + tableoffset := headerbeginpos + ReadInt64(fs); + + // go to beginning of embedded block + fs.Seek(headerbeginpos, soFromBeginning); + + offset := tableoffset; + Assert(sizeof(offset)=8); + while (true) and (fs.Position<headerendpos) do begin + fs.Position := offset; + offset:=ReadInt64(fs); + if offset=0 then + exit; + offset:=headerbeginpos+offset; + fi:=TEmbeddedFileInfo.Create; + try + // get embedded file info (adjusting dynamic to real offsets now) + fi.Offset:=headerbeginpos+ReadInt64(fs); + fi.Size:=ReadInt64(fs); + SetLength (filename8bit, offset-fs.position); + fs.ReadBuffer (filename8bit[1], offset-fs.position); + filename:=trim(utf8decode(filename8bit)); + if PreferExternal and sysutils.fileexists(basedirectory+filename) then begin + // Disregard the internal version and use the external version instead + FreeAndNil (fi); + end else + filelist.AddObject(filename,fi); + except + FreeAndNil (fi); + raise; + end; + end; + end; + finally + FreeAndNil (fs); + end; + except + {$ifdef DXGETTEXTDEBUG} + raise; + {$endif} + end; +end; + +constructor TFileLocator.Create; +begin + MoFilesCS:=TMultiReadExclusiveWriteSynchronizer.Create; + MoFiles:=TStringList.Create; + filelist:=TStringList.Create; + {$ifdef LINUX} + filelist.Duplicates:=dupError; + filelist.CaseSensitive:=True; + {$endif} + MoFiles.Sorted:=True; + MoFiles.Duplicates:=dupError; + MoFiles.CaseSensitive:=False; + {$ifdef MSWINDOWS} + filelist.Duplicates:=dupError; + filelist.CaseSensitive:=False; + {$endif} + filelist.Sorted:=True; +{$IFDEF dx_SupportsResources} + FResourceList := TStringList.Create; + FResourceList.Duplicates := dupError; + FResourceList.CaseSensitive := False; + FResourceList.Sorted := True; +{$ENDIF dx_SupportsResources} +end; + +destructor TFileLocator.Destroy; +var + Idx: integer; +begin +{$IFDEF dx_SupportsResources} + if Assigned(FResourceList) then begin + while FResourceList.Count > 0 do begin + Idx := FResourceList.Count - 1; + FResourceList.Objects[Idx].Free; + FResourceList.Delete(Idx); + end; + FreeAndNil(FResourceList); + end; +{$ENDIF dx_SupportsResources} + + while filelist.count > 0 do begin + Idx := filelist.Count - 1; + filelist.Objects[Idx].Free; + filelist.Delete (Idx); + end; + FreeAndNil (filelist); + + FreeAndNil (MoFiles); + FreeAndNil (MoFilesCS); + inherited; +end; + +function TFileLocator.FileExists(filename: FilenameString): boolean; +var + idx:integer; +{$IFDEF dx_SupportsResources} + ResName: string; + HResInfo: HRSRC; +{$ENDIF dx_SupportsResources} +begin + if LeftStr(filename,length(basedirectory))=basedirectory then begin + // Cut off basedirectory if the file is located beneath that base directory + filename:=MidStr(filename,length(basedirectory)+1,maxint); + end; + Result:=filelist.Find(filename,idx); + +{$IFDEF dx_SupportsResources} + if not Result then begin + Result := FResourceList.Find(filename, Idx); + if not Result then begin + ResName := UpperCase(filename); + ResName := StringReplace(ResName, '/', '_', [rfReplaceAll]); + ResName := StringReplace(ResName, '\', '_', [rfReplaceAll]); + ResName := StringReplace(ResName, '_LC_MESSAGES_', '_', [rfReplaceAll]); + ResName := StringReplace(ResName, '.MO', '', [rfReplaceAll]); + HResInfo := FindResource(hInstance, PChar(ResName), RT_RCDATA); + Result := (HResInfo <> 0); + if Result then + FResourceList.AddObject(filename, TResourceFileInfo.Create(ResName)); + end; + end; +{$ENDIF dx_SupportsResources} +end; + +function TFileLocator.GetMoFile(filename: FilenameString; DebugLogger:TDebugLogger): TMoFile; +var + fi:TEmbeddedFileInfo; + idx:integer; + idxname:FilenameString; + Offset, Size: Int64; + realfilename:FilenameString; + ResName: string; +begin + // Find real filename + offset:=0; + size:=0; + Resname := ''; + realfilename:=filename; + if LeftStr(filename,length(basedirectory))=basedirectory then begin + filename:=MidStr(filename,length(basedirectory)+1,maxint); + idx:=filelist.IndexOf(filename); + if idx<>-1 then begin + fi:=filelist.Objects[idx] as TEmbeddedFileInfo; + realfilename:=ExecutableFilename; + offset:=fi.offset; + size:=fi.size; + {$ifdef DXGETTEXTDEBUG} + DebugLogger ('Instead of '+filename+', using '+realfilename+' from offset '+IntTostr(offset)+', size '+IntToStr(size)); + {$endif} + end +{$IFDEF dx_SupportsResources} + else begin + Idx := FResourceList.IndexOf(filename); + if Idx <> -1 then begin + realfilename := ExecutableFilename; + ResName := (FResourceList.Objects[Idx] as TResourceFileInfo).ResourceName; + {$ifdef DXGETTEXTDEBUG} + DebugLogger ('Instead of '+filename+', using resource '+ResName+' from '+realfilename); + {$endif} + end; + end; +{$ENDIF dx_SupportsResources} + end; + + + {$ifdef DXGETTEXTDEBUG} + DebugLogger ('Reading .mo data from file '''+filename+''''); + {$endif} + + // Find TMoFile object + MoFilesCS.BeginWrite; + try +{$IFDEF dx_SupportsResources} + if ResName <> '' then begin + idxname := realfilename + ' //\\ ' + ResName; + end else +{$ENDIF dx_SupportsResources} + idxname:=realfilename+' //\\ '+IntToStr(offset); + if MoFiles.Find(idxname, idx) then begin + Result:=MoFiles.Objects[idx] as TMoFile; + end else begin + Result:=TMoFile.Create (realfilename, Offset, Size, UseMemoryMappedFiles, ResName); + MoFiles.AddObject(idxname, Result); + end; + Inc (Result.Users); + finally + MoFilesCS.EndWrite; + end; +end; + +function TFileLocator.ReadInt64(str: TStream): int64; +begin + Assert (sizeof(Result)=8); + str.ReadBuffer(Result,8); +end; + +procedure TFileLocator.ReleaseMoFile(mofile: TMoFile); +var + i:integer; +begin + Assert (mofile<>nil); + + MoFilesCS.BeginWrite; + try + dec (mofile.Users); + if mofile.Users<=0 then begin + i:=MoFiles.Count-1; + while i>=0 do begin + if MoFiles.Objects[i]=mofile then begin + MoFiles.Delete(i); + FreeAndNil (mofile); + break; + end; + dec (i); + end; + end; + finally + MoFilesCS.EndWrite; + end; +end; + +{ TTP_Retranslator } + +constructor TTP_Retranslator.Create; +begin + list:=TList.Create; + KnownRetranslators.Add(Self); +end; + +destructor TTP_Retranslator.Destroy; +var + i:integer; +begin + for i:=0 to list.Count-1 do + TObject(list.Items[i]).Free; + FreeAndNil (list); + + // some times, we are finalized before the main form's unit + if Assigned(KnownRetranslators) then + KnownRetranslators.Remove(Self); + + inherited; +end; + +procedure RemoveFromKnowRetranslators(obj: TObject); {$ifdef dx_has_Inline}inline;{$endif} +var + retranslatorIndex:Integer; + retranslator:TTP_Retranslator; + itemIndex:Integer; + item:TTP_RetranslatorItem; +begin + for retranslatorIndex:=0 to KnownRetranslators.Count-1 do + begin + retranslator:=TTP_Retranslator(KnownRetranslators.List{$IFDEF FPC}^{$ENDIF}[retranslatorIndex]); + itemIndex:=0; + while itemIndex<retranslator.list.Count do + begin + item:=TTP_RetranslatorItem(retranslator.list.List{$IFDEF FPC}^{$ENDIF}[itemIndex]); + if item.obj=obj then + begin + item.Free; + retranslator.list.delete(itemIndex); + end + else + begin + inc(itemIndex); + end; + end; + end; +end; + +procedure TTP_Retranslator.Execute; +var + i:integer; + sl:TStrings; + item:TTP_RetranslatorItem; + newvalue:TranslatedUnicodeString; + comp:TGnuGettextComponentMarker; + ppi:PPropInfo; + // + oInstance: tobject; + PropName: string; +begin + for i:=0 to list.Count-1 do begin + item:=TObject(list.items[i]) as TTP_RetranslatorItem; + if item.obj is TComponent then begin + comp:=TComponent(item.obj).FindComponent('GNUgettextMarker') as TGnuGettextComponentMarker; + if Assigned(comp) and (self<>comp.Retranslator) then begin + comp.Retranslator.Execute; + Continue; + end; + end; + if item.obj is TStrings then begin + // Since we don't know the order of items in sl, and don't have + // the original .Objects[] anywhere, we cannot anticipate anything + // about the current sl.Strings[] and sl.Objects[] values. We therefore + // have to discard both values. We can, however, set the original .Strings[] + // value into the list and retranslate that. + sl:=TStringList.Create; + try + sl.Text:=item.OldValue; + Instance.TranslateStrings(sl,textdomain); + (item.obj as TStrings).BeginUpdate; + try + (item.obj as TStrings).Text:=sl.Text; + finally + (item.obj as TStrings).EndUpdate; + end; + finally + FreeAndNil (sl); + end; + end else begin + if (textdomain = '') or (textdomain = DefaultTextDomain) then + newValue := ComponentGettext(item.OldValue, instance) + else + newValue := instance.dgettext(textdomain,item.OldValue); +// try +// ppi:=GetPropInfo(item.obj as tobject, item.Propname); +// except +// end; + ppi:=GetPropInfo(item.obj, item.Propname); + if ppi<>nil then begin + SetWideStrProp(item.obj, ppi, newValue); + end else begin + {$ifdef DXGETTEXTDEBUG} + Instance.DebugWriteln ('ERROR: On retranslation, property disappeared: '+item.Propname+' for object of type '+item.obj.ClassName); + {$endif} + end; + end; + end; +end; + +procedure TTP_Retranslator.Remember(obj: TObject; PropName: ComponentNameString; + OldValue: TranslatedUnicodeString); +var + item:TTP_RetranslatorItem; +begin + item:=TTP_RetranslatorItem.Create; + item.obj:=obj; + item.Propname:=Propname; + item.OldValue:=OldValue; + list.Add(item); + + // As we are storing a reference to an object in our list, we must be notified + // when that object is deleted. + // The only way to do that for any instance of TObject is to hook into + // BeforeDestruction via the virtual method table. + {$IFNDEF FPC} + HookedObjects.Proxify(obj); + {$ENDIF} +end; + +{ TGnuGettextComponentMarker } + +destructor TGnuGettextComponentMarker.Destroy; +begin + FreeAndNil (Retranslator); + inherited; +end; + +{ THook } + +constructor THook.Create(OldProcedure, NewProcedure: pointer; FollowJump:boolean=false); +{ Idea and original code from Igor Siticov } +{ Modified by Jacques Garcia Vazquez and Lars Dybdahl } +begin + {$ifndef CPU386} + {$ifndef CPUx64} + raise Exception.Create ('This procedure only works on Intel i386 or x64 compatible processors.'); + {$endif} + {$endif} + + oldproc:=OldProcedure; + newproc:=NewProcedure; + + Reset (FollowJump); +end; + +destructor THook.Destroy; +begin + Shutdown; + inherited; +end; + +procedure THook.Disable; +begin + Assert (PatchPosition<>nil,'Patch position in THook was nil when Disable was called'); + PatchPosition[0]:=Original[0]; + PatchPosition[1]:=Original[1]; + PatchPosition[2]:=Original[2]; + PatchPosition[3]:=Original[3]; + PatchPosition[4]:=Original[4]; +end; + +procedure THook.Enable; +begin + Assert (PatchPosition<>nil,'Patch position in THook was nil when Enable was called'); + PatchPosition[0]:=Patch[0]; + PatchPosition[1]:=Patch[1]; + PatchPosition[2]:=Patch[2]; + PatchPosition[3]:=Patch[3]; + PatchPosition[4]:=Patch[4]; +end; + +procedure THook.Reset(FollowJump: boolean); +var + offset:integer; + {$ifdef LINUX} + p:pointer; + pagesize:integer; + {$endif} + {$ifdef MSWindows} + ov: cardinal; + {$endif} +begin + if PatchPosition<>nil then + Shutdown; + + patchPosition := OldProc; + if FollowJump and (Word(OldProc^) = $25FF) then begin + // This finds the correct procedure if a virtual jump has been inserted + // at the procedure address + Inc(patchPosition, 2); // skip the jump + patchPosition := pansiChar(Pointer(pointer(patchPosition)^)^); + end; + offset:=integer(NewProc)-integer(pointer(patchPosition))-5; + + Patch[0] := ansichar($E9); + Patch[1] := ansichar(offset and 255); + Patch[2] := ansichar((offset shr 8) and 255); + Patch[3] := ansichar((offset shr 16) and 255); + Patch[4] := ansichar((offset shr 24) and 255); + + Original[0]:=PatchPosition[0]; + Original[1]:=PatchPosition[1]; + Original[2]:=PatchPosition[2]; + Original[3]:=PatchPosition[3]; + Original[4]:=PatchPosition[4]; + + {$ifdef MSWINDOWS} + if not VirtualProtect(Pointer(PatchPosition), 5, PAGE_EXECUTE_READWRITE, @ov) then + RaiseLastOSError; + {$endif} + {$ifdef LINUX} + pageSize:=sysconf (_SC_PAGE_SIZE); + p:=pointer(PatchPosition); + p:=pointer((integer(p) + PAGESIZE-1) and not (PAGESIZE-1) - pageSize); + if mprotect (p, pageSize, PROT_READ + PROT_WRITE + PROT_EXEC) <> 0 then + RaiseLastOSError; + {$endif} +end; + +procedure THook.Shutdown; +begin + Disable; + PatchPosition:=nil; +end; + +procedure HookIntoResourceStrings (enabled:boolean=true; SupportPackages:boolean=false); +begin + HookLoadResString.Reset (SupportPackages); + HookLoadStr.Reset (SupportPackages); + HookFmtLoadStr.Reset (SupportPackages); + if enabled then begin + HookLoadResString.Enable; + HookLoadStr.Enable; + HookFmtLoadStr.Enable; + end; +end; + +{ TMoFile } + +function TMoFile.autoswap32(i: cardinal): cardinal; +var + cnv1, cnv2: + record + case integer of + 0: (arr: array[0..3] of byte); + 1: (int: cardinal); + end; +begin + if doswap then begin + cnv1.int := i; + cnv2.arr[0] := cnv1.arr[3]; + cnv2.arr[1] := cnv1.arr[2]; + cnv2.arr[2] := cnv1.arr[1]; + cnv2.arr[3] := cnv1.arr[0]; + Result := cnv2.int; + end else + Result := i; +end; + +function TMoFile.CardinalInMem(baseptr: PansiChar; Offset: Cardinal): Cardinal; +var pc:^Cardinal; +begin + inc (baseptr,offset); + pc:=Pointer(baseptr); + Result:=pc^; + if doswap then + autoswap32(Result); +end; + +constructor TMoFile.Create(const filename: FilenameString; + const Offset: int64; Size: int64; + const xUseMemoryMappedFiles: Boolean; + const ResName: string); +var + i:cardinal; + nn:integer; + mofile:TStream; +begin + if sizeof(i) <> 4 then + raise EGGProgrammingError.Create('TDomain in gnugettext is written for an architecture that has 32 bit integers.'); + + {$ifdef mswindows} + FUseMemoryMappedFiles := xUseMemoryMappedFiles; + {$endif} + + {$ifdef linux} + FUseMemoryMappedFiles := False; + {$endif} + +{$IFDEF dx_SupportsResources} + if ResName <> '' then begin + // Read the whole file into memory + mofile:=TResourceStream.Create(HInstance, ResName, RT_RCDATA); + try + size := mofile.Size; + Getmem (momemoryHandle, size); + momemory := momemoryHandle; + mofile.ReadBuffer(momemory^, size); + finally + FreeAndNil(mofile); + end; + end else +{$endif dx_SupportsResources} + if FUseMemoryMappedFiles then + begin + // Map the mo file into memory and let the operating system decide how to cache + mo:=createfile (PChar(filename),GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING,0,0); + if mo=INVALID_HANDLE_VALUE then + raise EGGIOError.Create ('Cannot open file '+filename); + momapping:=CreateFileMapping (mo, nil, PAGE_READONLY, 0, 0, nil); + if momapping=0 then + raise EGGIOError.Create ('Cannot create memory map on file '+filename); + momemoryHandle:=MapViewOfFile (momapping,FILE_MAP_READ,0,0,0); + if momemoryHandle=nil then begin + raise EGGIOError.Create ('Cannot map file '+filename+' into memory. Reason: '+GetLastWinError); + end; + momemory:=momemoryHandle+offset; + end + else + begin + // Read the whole file into memory + mofile:=TFileStream.Create (filename, fmOpenRead or fmShareDenyNone); + try + if (size = 0) then + size := mofile.Size; + Getmem (momemoryHandle, size); + momemory := momemoryHandle; + mofile.Position := offset; + mofile.ReadBuffer(momemory^, size); + finally + FreeAndNil(mofile); + end; + end; + + // Check the magic number + doswap:=False; + i:=CardinalInMem(momemory,0); + if (i <> $950412DE) and (i <> $DE120495) then + raise EGGIOError.Create('This file is not a valid GNU gettext mo file: ' + filename); + doswap := (i = $DE120495); + + + // Find the positions in the file according to the file format spec + CardinalInMem(momemory,4); // Read the version number, but don't use it for anything. + N:=CardinalInMem(momemory,8); // Get string count + O:=CardinalInMem(momemory,12); // Get offset of original strings + T:=CardinalInMem(momemory,16); // Get offset of translated strings + + // Calculate start conditions for a binary search + nn := N; + startindex := 1; + while nn <> 0 do begin + nn := nn shr 1; + startindex := startindex shl 1; + end; + startindex := startindex shr 1; + startstep := startindex shr 1; +end; + +destructor TMoFile.Destroy; +begin + if FUseMemoryMappedFiles then + begin + UnMapViewOfFile (momemoryHandle); + CloseHandle (momapping); + CloseHandle (mo); + end + else + begin + FreeMem (momemoryHandle); + end; + + inherited; +end; + +function TMoFile.gettext(const msgid: RawUtf8String;var found:boolean): RawUtf8String; +var + i, step: cardinal; + offset, pos: cardinal; + CompareResult:integer; + msgidptr,a,b:PAnsiChar; + abidx:integer; + size, msgidsize:integer; +begin + found:=false; + msgidptr:=PAnsiChar(msgid); + msgidsize:=length(msgid); + + // Do binary search + i:=startindex; + step:=startstep; + while true do begin + // Get string for index i + pos:=O+8*(i-1); + offset:=CardinalInMem (momemory,pos+4); + size:=CardinalInMem (momemory,pos); + a:=msgidptr; + b:=momemory+offset; + abidx:=size; + if msgidsize<abidx then + abidx:=msgidsize; + CompareResult:=0; + while abidx<>0 do begin + CompareResult:=integer(byte(a^))-integer(byte(b^)); + if CompareResult<>0 then + break; + dec (abidx); + inc (a); + inc (b); + end; + if CompareResult=0 then + CompareResult:=msgidsize-size; + if CompareResult=0 then begin // msgid=s + // Found the msgid + pos:=T+8*(i-1); + offset:=CardinalInMem (momemory,pos+4); + size:=CardinalInMem (momemory,pos); + SetString (Result,momemory+offset,size); + found:=True; + break; + end; + if step=0 then begin + // Not found + Result:=msgid; + break; + end; + if CompareResult<0 then begin // msgid<s + if i < 1+step then + i := 1 + else + i := i - step; + step := step shr 1; + end else begin // msgid>s + i := i + step; + if i > N then + i := N; + step := step shr 1; + end; + end; +end; + +{ THookedObjects } + +{$IFDEF VER90}{$DEFINE NO_vmtSelfPtr}{$ENDIF} +{$IFDEF FPC}{$DEFINE NO_vmtSelfPtr}{$ENDIF} + +function getClassData(aClass:TClass):PProxyClassData; overload; {$ifdef dx_has_Inline}inline;{$endif} +begin + Result:=PProxyClassData((PAnsiChar(aClass) + {$IFDEF NO_vmtSelfPtr}-48{$ELSE}vmtSelfPtr{$ENDIF})); +end; + +function getClassData(obj:TObject):PProxyClassData; overload; {$ifdef dx_has_Inline}inline;{$endif} +begin + Result:=getClassData(obj.ClassType); +end; + +function GetBeforeDestructionVmtAddress(AClass: TClass): PPointer; overload; +{$IFDEF FPC} +begin +{$ASMMODE intel} +{$ENDIF} +asm + {$IFDEF CPU386} +// lea eax, eax + VMTOFFSET TObject.BeforeDestruction TO-DO + {$ENDIF CPU386} + {$IFDEF CPUx64} + lea rax, rcx + VMTOFFSET TObject.BeforeDestruction + {$ENDIF CPUx64} + {$IFDEF FPC} + end + {$ENDIF} +end; + +procedure THookedObjects.BeforeDestructionHook; +type + TOriginalBeforeDestruction = procedure of object; +var + method:TMethod; +begin + // NOTE: this method is declared inside inside THookedObjects to have access + // to Self, but because it is used as a hook for other classes' BeforeDestruction, + // Self will not be an instance of THookedObjects but one of the hooked class. + + // remove ourselves from known retranslators + RemoveFromKnowRetranslators(Self); + + // call the inherited BeforeDestruction + // we must do it via the parent class type because simply writing + // inherited BeforeDestruction will be resolved at compile time to + // TObject.BeforeDestruction which is not what we want + method.Code:=GetBeforeDestructionVmtAddress(getClassData(ClassType)^.Parent^)^; + method.Data:=Self; + TOriginalBeforeDestruction(method); + + // Remove from hooked objects (Remember, Self is not a THookedObjects instance) + HookedObjects.Remove(Self); +end; + +constructor THookedObjects.Create; +begin + inherited Create; + + interceptorClassDatas:=TList.Create; +end; + +destructor THookedObjects.Destroy; +var + i:Integer; +begin + for i:=0 to Count-1 do + Unproxify(TObject(Items[i])); + + for i:=0 to interceptorClassDatas.Count-1 do + FreeMem(interceptorClassDatas[i]); + interceptorClassDatas.Free; + + inherited Destroy; +end; + +function THookedObjects.GetBeforeDestructionHookAddress: Pointer; +type + TBeforeDestructionHook=procedure of object; +var + m:TBeforeDestructionHook; +begin +// m:={$IFDEF FPC}@{$ENDIF}BeforeDestructionHook; + m:=BeforeDestructionHook; + Result:=TMethod(m).Code; +end; + +function THookedObjects.findInterceptorClassData(aClass:TClass):Pointer; +var + i:Integer; + proxyClassData:Pointer; +begin + i:=0; + Result:=nil; + while (i<interceptorClassDatas.Count) and (Result=nil) do + begin + proxyClassData:=interceptorClassDatas[i]; + if (PProxyClassData(proxyClassData)^.Parent^=aClass) or (PProxyClassData(proxyClassData)^.SelfPtr=aClass) then + Result:=proxyClassData; + + Inc(i); + end; +end; + +{$ifdef dx_has_VclThemes} +type + TCustomStyleEngineAccess= + class(TCustomStyleEngine) + public + class property RegisteredStyleHooks; + end; +{$endif dx_has_VclThemes} + +procedure THookedObjects.Proxify(obj:TObject); +const + growthCapacity=50; +var + proxyClass:TClass; + proxyClassData:Pointer; + objClassData:PProxyClassData; + size,classOfs:Integer; + beforeDestructionVmtAddr:PPointer; + hookedClassNameLength:Cardinal; +begin + if IndexOf(obj)<0 then + begin + classOfs:=- {$IFDEF NO_vmtSelfPtr}-48{$ELSE}vmtSelfPtr{$ENDIF}; + proxyClassData:=findInterceptorClassData(obj.ClassType); + if proxyClassData=nil then + begin + // According to Allen Bauer, we know that the ClassName is stored right after the + // virtual method pointers. + // So to figure out the size, we take the difference between the start of the VMT + // and the location of ClassName. + // See the following link for reference: + // http://stackoverflow.com/questions/760513/where-can-i-find-information-on-the-structure-of-the-delphi-vmt + objClassData:=getClassData(obj.ClassType); + hookedClassNameLength:=Length(objClassData^.ClassName^)+3; + if hookedClassNameLength>255 then + hookedClassNameLength:=255; + size:=NativeUInt(objClassData^.ClassName)-NativeUInt(objClassData)+hookedClassNameLength+2; + + proxyClassData:=AllocMem(size); + interceptorClassDatas.Add(proxyClassData); + + proxyClass:=TClass(PAnsiChar(proxyClassData) + classOfs); + + // Copy everything from the original class data then do the following adjustments: + // - Parent points to the address of the original data SelfPtr. + // - SelfPtr points to ourselves + // - ClassName points at the end of our structure to respect compiler layout (see above) + // - ClassName gets a suffix as it helps when debugging + System.Move(objClassData^, proxyClassData^, size); + PProxyClassData(proxyClassData)^.Parent:=@(objClassData^.SelfPtr); + PProxyClassData(proxyClassData)^.SelfPtr:=proxyClass; + PProxyClassData(proxyClassData)^.ClassName:=PShortString(PAnsiChar(proxyClassData)+size-hookedClassNameLength-2); + SetLength(PProxyClassData(proxyClassData)^.ClassName^,hookedClassNameLength); + System.Move(AnsiString('!dx'#0),(PAnsiChar(PProxyClassData(proxyClassData)^.ClassName)+hookedClassNameLength+1-3)^,4); + + // Place our BeforeDestruction virtual method in the metaclass VMT + beforeDestructionVmtAddr:=GetBeforeDestructionVmtAddress(proxyClass); + beforeDestructionVmtAddr^:=GetBeforeDestructionHookAddress; + + {$ifdef dx_has_VclThemes} + // As we replace the metaclass for the object, the style engine will not + // know about our new metaclass, and thus we must tell it it exists. + if TCustomStyleEngineAccess.RegisteredStyleHooks.ContainsKey(obj.ClassType) and + not TCustomStyleEngineAccess.RegisteredStyleHooks.ContainsKey(proxyClass) then + TCustomStyleEngine.RegisterStyleHook(proxyClass, TCustomStyleEngineAccess.RegisteredStyleHooks[obj.ClassType].Last); + {$endif dx_has_VclThemes} + end + else + begin + proxyClass:=TClass(PAnsiChar(proxyClassData) + classOfs); + end; + + PPointer(obj)^:=proxyClass; + Add(obj); + end; +end; + +procedure THookedObjects.Unproxify(obj:TObject); +begin + PPointer(obj)^:=getClassData(obj)^.Parent^; +end; + +{$ifdef dx_German_Delphi_fix} + // ### LO - Workaround for programs compiled with German Delphi + // + // If the current OS Language is not German, immediately add a Delphi RTL domain + // to the resource domains and bind the text domain to a fixed German->English + // translation. + // Using a fixed German->English translation because the OS + // Language may not be one of the installed translations. + // Otherwise the German RTL resourcestrings will not be translated. + // This results in German menu shortcuts 'Strg+', 'Umsch+' instead of + // 'Ctrl+', 'Shift+' and so on. + +procedure CheckForGermanDelphi; +const + DefaultRTLDomain = 'delphi'; // German to English translation of Delphi RTL strings + DefaultShortcuts = 'shortcuts'; // German to English translation of ressource strings + + procedure AddAndBindDomain(szDomain: DomainString); + begin + AddDomainForResourceString(szDomain); + with DefaultInstance do + bindtextdomainToFile(szDomain, DefaultDomainDirectory + '\' + szDomain + '.mo'); + end; + +begin + if not AnsiStartsText('de', GetCurrentLanguage) then begin + AddAndBindDomain(DefaultShortcuts); + AddAndBindDomain(DefaultRTLDomain); + end; +end; +{$endif dx_German_Delphi_fix} + + +{$IFDEF dx_SupportsResources} +{ TResourceFileInfo } + +constructor TResourceFileInfo.Create(const _ResourceName: string); +begin + inherited Create; + ResourceName := _ResourceName; +end; +{$ENDIF dx_SupportsResources} + +var + param0:string; + +initialization + {$ifdef DXGETTEXTDEBUG} + {$ifdef MSWINDOWS} + MessageBox (0,'gnugettext.pas debugging is enabled. Turn it off before releasing this piece of software.','Information',MB_OK); + {$endif} + {$ifdef LINUX} + writeln (stderr,'gnugettext.pas debugging is enabled. Turn it off before releasing this piece of software.'); + {$endif} + {$endif} + {$ifdef FPC} + {$ifdef LINUX} + SetLocale(LC_ALL, ''); + SetCWidestringManager; + {$endif LINUX} + {$endif FPC} + // Get DLL/shared object filename + SetLength(ExecutableFilename, 300); // MAX_PATH ? + {$ifdef MSWINDOWS} + SetLength(ExecutableFilename, GetModuleFileName(HInstance, + PChar(ExecutableFilename), Length(ExecutableFilename))); + {$endif} + {$ifdef LINUX} + if ModuleIsLib or ModuleIsPackage then + begin + // This line has not been tested on Linux, yet, but should work. + SetLength(ExecutableFilename, GetModuleFileName(0, PChar(ExecutableFilename), + Length(ExecutableFilename))); + end else + ExecutableFilename:=Paramstr(0); + {$endif} + FileLocator:=TFileLocator.Create; + FileLocator.Analyze; + ResourceStringDomainList:=TStringList.Create; + ResourceStringDomainList.Add(DefaultTextDomain); + ResourceStringDomainListCS:=TMultiReadExclusiveWriteSynchronizer.Create; + ComponentDomainList:=TStringList.Create; + ComponentDomainList.Add(DefaultTextDomain); + ComponentDomainListCS:=TMultiReadExclusiveWriteSynchronizer.Create; + DefaultInstance:=TGnuGettextInstance.Create; + {$ifdef MSWINDOWS} + Win32PlatformIsUnicode := (Win32Platform = VER_PLATFORM_WIN32_NT); + {$endif} + + {$IFNDEF FPC} + // replace Borlands LoadResString with gettext enabled version: + {$ifdef UNICODE} + HookLoadResString:=THook.Create (@system.LoadResString, @LoadResStringW); + {$else} + HookLoadResString:=THook.Create (@system.LoadResString, @LoadResStringA); + {$endif} + HookLoadStr:=THook.Create (@sysutils.LoadStr, @SysUtilsLoadStr); + HookFmtLoadStr:=THook.Create (@sysutils.FmtLoadStr, @SysUtilsFmtLoadStr); + param0:=lowercase(extractfilename(paramstr(0))); + if (param0<>'delphi32.exe') and (param0<>'kylix') and (param0<>'bds.exe') then + HookIntoResourceStrings (AutoCreateHooks,false); + HookedObjects:=THookedObjects.Create; + {$ELSE} + TranslateAllResourceStrings; + {$ENDIF} + param0:=''; + + KnownRetranslators:=TList.Create; + +{$ifdef dx_German_Delphi_fix} + CheckForGermanDelphi; +{$endif dx_German_Delphi_fix} + +finalization + FreeAndNil (DefaultInstance); + FreeAndNil (ResourceStringDomainListCS); + FreeAndNil (ResourceStringDomainList); + FreeAndNil (ComponentDomainListCS); + FreeAndNil (ComponentDomainList); + + {$IFNDEF FPC} + FreeAndNil (HookFmtLoadStr); + FreeAndNil (HookLoadStr); + FreeAndNil (HookLoadResString); + FreeAndNil (HookedObjects); + {$ENDIF} + + FreeAndNil (FileLocator); + FreeAndNil (KnownRetranslators); + +end. + + + diff --git a/src/libraries/pascalcoin/UAppParams.pas b/src/libraries/pascalcoin/UAppParams.pas index 37e65a039..3d2aec1bd 100644 --- a/src/libraries/pascalcoin/UAppParams.pas +++ b/src/libraries/pascalcoin/UAppParams.pas @@ -57,6 +57,7 @@ interface Procedure SetAsCardinal(CardValue : Cardinal); Procedure SetAsString(StringValue : String); Procedure SetAsInt64(Int64Value : Int64); + Procedure SetAsUInt64(UInt64Value : UInt64); Procedure SetAsBoolean(BoolValue : Boolean); Procedure SetAsStream(Stream : TStream); Procedure SetAsTBytes(Bytes : TBytes); @@ -65,6 +66,7 @@ interface function GetAsBoolean(Const DefValue : Boolean): Boolean; function GetAsInteger(Const DefValue : Integer): Integer; function GetAsInt64(Const DefValue : Int64): Int64; + function GetAsUInt64(Const DefValue : UInt64): UInt64; function GetAsStream(Stream : TStream) : Integer; function GetAsTBytes(Const DefValue : TBytes) : TBytes; End; @@ -186,6 +188,18 @@ function TAppParam.GetAsInt64(const DefValue: Int64): Int64; end; end; +function TAppParam.GetAsUInt64(const DefValue: UInt64): UInt64; +begin + if IsNull then Result := DefValue + else begin + Try + Result := FValue; + Except + Result := DefValue; + End; + end; +end; + function TAppParam.GetAsInteger(const DefValue: Integer): Integer; begin if IsNull then Result := DefValue @@ -357,6 +371,13 @@ procedure TAppParam.SetAsInt64(Int64Value: Int64); If Assigned(FAppParams) then FAppParams.Save; end; +procedure TAppParam.SetAsUInt64(UInt64Value: UInt64); +begin + FParamType := ptInt64; + FValue := UInt64Value; + If Assigned(FAppParams) then FAppParams.Save; +end; + procedure TAppParam.SetAsInteger(IntValue: Integer); begin FParamType := ptInteger; diff --git a/src/libraries/pascalcoin/UJSONFunctions.pas b/src/libraries/pascalcoin/UJSONFunctions.pas index b9e12f61a..ec38c8bc4 100644 --- a/src/libraries/pascalcoin/UJSONFunctions.pas +++ b/src/libraries/pascalcoin/UJSONFunctions.pas @@ -27,6 +27,11 @@ interface {$DEFINE DELPHIXE} {$ENDIF} +{$IFnDEF FPC} +{$DEFINE USE_BTREE} +{$ENDIF} +{$DEFINE JSONOBJECTS_NAMES_CASE_SENSITIVITY} + {$IFDEF FPC} fpjson, jsonparser, {$ELSE} @@ -35,7 +40,8 @@ interface {$ENDIF} DBXJSON, {$ENDIF} - SysUtils, DateUtils, Variants, Classes, ULog, + SysUtils, DateUtils, Variants, Classes, + {$IFDEF USE_BTREE}UAbstractBTree,{$ENDIF} {$IFNDEF FPC}System.Generics.Collections{$ELSE}Generics.Collections{$ENDIF}; Type @@ -76,6 +82,7 @@ interface Function ToJSONFormatted(pretty:Boolean;const prefix : String) : String; override; public Constructor Create; override; + Constructor CreateFromVariant(const Value: Variant); Constructor CreateFromJSONValue(JSONValue : TJSONValue); Property Value : Variant read FValue write SetValue; Function AsString(DefValue : String) : String; @@ -87,6 +94,11 @@ interface Function AsCurrency(DefValue : Currency) : Currency; Function AsCardinal(DefValue : Cardinal) : Cardinal; Function IsNull : Boolean; + Function IncrementAsInteger(AIncrement : Integer) : TPCJSONVariantValue; + Function IncrementAsInt64(AIncrement : Int64) : TPCJSONVariantValue; + Function IncrementAsDouble(AIncrement : Double) : TPCJSONVariantValue; + Function IncrementAsCurrency(AIncrement : Currency) : TPCJSONVariantValue; + Function IncrementAsCardinal(AIncrement : Cardinal) : TPCJSONVariantValue; End; TPCJSONNameValue = Class(TPCJSONData) @@ -121,10 +133,10 @@ TPCJSONArray = class; Constructor Create; override; Destructor Destroy; override; Property Items[Index:Integer] : TPCJSONData read GetItems write SetItems; - Procedure Insert(Index:Integer; PCJSONData:TPCJSONData); - Procedure Delete(index : Integer); + Procedure Insert(Index:Integer; PCJSONData:TPCJSONData); virtual; + Procedure Delete(index : Integer); virtual; function Count : Integer; - Procedure Clear; + Procedure Clear; virtual; End; TPCJSONArray = class(TPCJSONList) @@ -146,6 +158,11 @@ TPCJSONArray = class(TPCJSONList) TPCJSONObject = Class(TPCJSONList) private + {$IFDEF USE_BTREE} + FSearchingValue : String; + FOrderedByName : TMemoryBTree<Integer>; + function CompareBTree(const Left, Right: Integer): Integer; + {$ENDIF} Function GetIndexOrCreateName(Name : String) : Integer; Function GetByName(Name : String) : TPCJSONNameValue; protected @@ -158,6 +175,8 @@ TPCJSONArray = class(TPCJSONList) Destructor Destroy; override; Function FindName(Name : String) : TPCJSONNameValue; Function IndexOfName(Name : String) : Integer; + Function HasName(Name: String): Boolean; + Function HasValue(const AParamName : String) : Boolean; Procedure DeleteName(Name : String); Function GetAsVariant(Name : String) : TPCJSONVariantValue; Function GetAsObject(Name : String) : TPCJSONObject; @@ -172,9 +191,14 @@ TPCJSONArray = class(TPCJSONList) Function AsCurrency(ParamName : String; DefValue : Currency) : Currency; Function SaveAsStream(ParamName : String; Stream : TStream) : Integer; Function LoadAsStream(ParamName : String; Stream : TStream) : Integer; - Function GetNameValue(index : Integer) : TPCJSONNameValue; + Function GetNameValue(index : Integer) : TPCJSONNameValue; overload; + Function GetNameValue(Name : String) : TPCJSONNameValue; overload; Function IsNull(ParamName : String) : Boolean; Procedure SetAs(Name : String; Value : TPCJSONData); + Procedure Delete(index : Integer); override; + Procedure Clear; override; + Procedure Insert(Index:Integer; PCJSONData:TPCJSONData); override; + procedure CheckConsistency; End; EPCParametresError = Class(Exception); @@ -292,7 +316,7 @@ procedure TPCJSONArray.GrowToIndex(index: Integer); function TPCJSONArray.ToJSONFormatted(pretty: Boolean; const prefix: String): String; Var i : Integer; begin - If pretty then Result := prefix+'[' + if pretty then Result := '['+#10+prefix else Result := '['; for i := 0 to Count - 1 do begin if (i>0) then begin @@ -419,7 +443,8 @@ procedure TPCJSONList.SetItems(Index: Integer; const Value: TPCJSONData); function TPCJSONVariantValue.AsBoolean(DefValue: Boolean): Boolean; begin try - Result := VarAsType(Value,varBoolean); + if VarIsNull(Value) then Result := DefValue + else Result := VarAsType(Value,varBoolean); except Result := DefValue; end; @@ -428,7 +453,8 @@ function TPCJSONVariantValue.AsBoolean(DefValue: Boolean): Boolean; function TPCJSONVariantValue.AsCurrency(DefValue: Currency): Currency; begin try - Result := VariantToDouble(Value); + if VarIsNull(Value) then Result := DefValue + else Result := VariantToDouble(Value); except Result := DefValue; end; @@ -436,13 +462,15 @@ function TPCJSONVariantValue.AsCurrency(DefValue: Currency): Currency; function TPCJSONVariantValue.AsCardinal(DefValue: Cardinal): Cardinal; begin - Result := Cardinal( StrToIntDef(VarToStrDef(Value,''),DefValue) ); + if VarIsNull(Value) then Result := DefValue + else Result := Cardinal( StrToIntDef(VarToStrDef(Value,''),DefValue) ); end; function TPCJSONVariantValue.AsDateTime(DefValue: TDateTime): TDateTime; begin try - Result := VarAsType(Value,varDate); + if VarIsNull(Value) then Result := DefValue + else Result := VarAsType(Value,varDate); except Result := DefValue; end; @@ -451,7 +479,8 @@ function TPCJSONVariantValue.AsDateTime(DefValue: TDateTime): TDateTime; function TPCJSONVariantValue.AsDouble(DefValue: Double): Double; begin try - Result := VariantToDouble(Value); + if VarIsNull(Value) then Result := DefValue + else Result := VariantToDouble(Value); except Result := DefValue; end; @@ -459,12 +488,14 @@ function TPCJSONVariantValue.AsDouble(DefValue: Double): Double; function TPCJSONVariantValue.AsInt64(DefValue: Int64): Int64; begin - Result := StrToInt64Def(VarToStrDef(Value,''),DefValue); + if VarIsNull(Value) then Result := DefValue + else Result := StrToInt64Def(VarToStrDef(Value,''),DefValue); end; function TPCJSONVariantValue.AsInteger(DefValue: Integer): Integer; begin - Result := StrToIntDef(VarToStrDef(Value,''),DefValue); + if VarIsNull(Value) then Result := DefValue + else Result := StrToIntDef(VarToStrDef(Value,''),DefValue); end; function TPCJSONVariantValue.AsString(DefValue: String): String; @@ -496,6 +527,12 @@ constructor TPCJSONVariantValue.Create; FWritable := False; end; +Constructor TPCJSONVariantValue.CreateFromVariant(const Value: Variant); +begin + Create; + SetValue(Value); +end; + constructor TPCJSONVariantValue.CreateFromJSONValue(JSONValue: TJSONValue); {$IFnDEF FPC} Var d : Double; @@ -530,6 +567,36 @@ constructor TPCJSONVariantValue.CreateFromJSONValue(JSONValue: TJSONValue); {$ENDIF} end; +function TPCJSONVariantValue.IncrementAsCardinal(AIncrement: Cardinal): TPCJSONVariantValue; +begin + Value := AsCardinal(0) + AIncrement; + Result := Self; +end; + +function TPCJSONVariantValue.IncrementAsCurrency(AIncrement: Currency): TPCJSONVariantValue; +begin + Value := AsCurrency(0) + AIncrement; + Result := Self; +end; + +function TPCJSONVariantValue.IncrementAsDouble(AIncrement: Double): TPCJSONVariantValue; +begin + Value := AsDouble(0) + AIncrement; + Result := Self; +end; + +function TPCJSONVariantValue.IncrementAsInt64(AIncrement: Int64): TPCJSONVariantValue; +begin + Value := AsInt64(0) + AIncrement; + Result := Self; +end; + +function TPCJSONVariantValue.IncrementAsInteger(AIncrement: Integer): TPCJSONVariantValue; +begin + Value := AsInteger(0) + AIncrement; + Result := Self; +end; + function TPCJSONVariantValue.IsNull: Boolean; begin Result := VarIsNull(FValue) or VarIsEmpty(FValue); @@ -578,7 +645,7 @@ function TPCJSONObject.AsBoolean(ParamName: String; DefValue: Boolean): Boolean; Result := DefValue; Exit; end; - v := GetAsVariant(ParamName).Value; + v := VV.Value; try if VarIsNull(v) then Result := DefValue else Result := VarAsType(v,varBoolean); @@ -601,7 +668,7 @@ function TPCJSONObject.AsCurrency(ParamName: String; DefValue: Currency): Curren Result := DefValue; Exit; end; - v := GetAsVariant(ParamName).Value; + v := VV.Value; try if VarIsNull(v) then Result := DefValue else Result := VariantToDouble(v); @@ -620,7 +687,7 @@ function TPCJSONObject.AsDateTime(ParamName: String; Result := DefValue; Exit; end; - v := GetAsVariant(ParamName).Value; + v := VV.Value; try if VarIsNull(v) then Result := DefValue else Result := VarAsType(v,varDate); @@ -638,7 +705,7 @@ function TPCJSONObject.AsDouble(ParamName: String; DefValue: Double): Double; Result := DefValue; Exit; end; - v := GetAsVariant(ParamName).Value; + v := VV.Value; try if VarIsNull(v) then Result := DefValue else Result := VariantToDouble(v); @@ -656,7 +723,7 @@ function TPCJSONObject.AsInt64(ParamName: String; DefValue: Int64): Int64; Result := DefValue; Exit; end; - v := GetAsVariant(ParamName).Value; + v := VV.Value; try if VarIsNull(v) then Result := DefValue else Result := StrToInt64Def(VarToStrDef(v,''),DefValue); @@ -674,7 +741,7 @@ function TPCJSONObject.AsInteger(ParamName: String; DefValue: Integer): Integer; Result := DefValue; Exit; end; - v := GetAsVariant(ParamName).Value; + v := VV.Value; try if VarIsNull(v) then Result := DefValue else Result := StrToIntDef(VarToStrDef(v,''),DefValue); @@ -692,7 +759,7 @@ function TPCJSONObject.AsString(ParamName: String; DefValue: String): String; Result := DefValue; Exit; end; - v := GetAsVariant(ParamName).Value; + v := VV.Value; try Case VarType(V) of varNull : Result := ''; @@ -720,6 +787,14 @@ procedure TPCJSONObject.CheckCanInsert(Index: Integer; PCJSONData: TPCJSONData); if Not (PCJSONData is TPCJSONNameValue) then raise Exception.Create('Object inside a '+TPCJSONData.ClassName+' must be a '+TPCJSONNameValue.ClassName+' (currently '+PCJSONData.ClassName+')'); end; +procedure TPCJSONObject.CheckConsistency; +begin + {$IFDEF USE_BTREE} + FOrderedByName.CheckConsistency; + if FOrderedByName.Count<>Count then raise EPCParametresError.Create('Not valid counters'); + {$ENDIF} +end; + procedure TPCJSONObject.CheckValidName(Name: String); Var i : Integer; begin @@ -732,9 +807,20 @@ procedure TPCJSONObject.CheckValidName(Name: String); end; end; +procedure TPCJSONObject.Clear; +begin + inherited; + {$IFDEF USE_BTREE} + FOrderedByName.EraseTree; + {$ENDIF} +end; + constructor TPCJSONObject.Create; begin inherited; + {$IFDEF USE_BTREE} + FOrderedByName := TMemoryBTree<Integer>.Create(CompareBTree,False,7); + {$ENDIF} end; constructor TPCJSONObject.CreateFromJSONObject(JSONObject: TJSONObject); @@ -770,6 +856,34 @@ constructor TPCJSONObject.CreateFromJSONObject(JSONObject: TJSONObject); {$ENDIF} end; +{$IFDEF USE_BTREE} +function TPCJSONObject.CompareBTree(const Left, Right: Integer): Integer; +var sLeft,sRight : String; +begin + if Left=-1 then sLeft := FSearchingValue + else if (Left>=0) and (Left<FList.Count) and (Assigned(FList.Items[Left])) And (TObject(FList.Items[Left]) is TPCJSONNameValue) then sLeft := TPCJSONNameValue( FList.Items[Left] ).Name + else raise EPCParametresError.Create('Invalid JSON left index '+Left.ToString); + if Right=-1 then sRight := FSearchingValue + else if (Right>=0) and (Right<FList.Count) and (Assigned(FList.Items[Right])) And (TObject(FList.Items[Right]) is TPCJSONNameValue) then sRight := TPCJSONNameValue( FList.Items[Right] ).Name + else raise EPCParametresError.Create('Invalid JSON right index '+Right.ToString); + {$IFDEF JSONOBJECTS_NAMES_CASE_SENSITIVITY} + // NOTE: CompareStr is case sensitivity + Result := CompareStr(sLeft,sRight); + {$ELSE} + Result := CompareText(sLeft,sRight); + {$ENDIF} +end; +{$ENDIF} + +procedure TPCJSONObject.Delete(index: Integer); +begin + {$IFDEF USE_BTREE} + if (index<0) or (index>=FList.Count) then raise EPCParametresError.Create('Invalid delete index '+index.ToString+'/'+FList.Count.ToString); + FSearchingValue := TPCJSONNameValue( FList.Items[index] ).Name; + FOrderedByName.Delete(-1); + {$ENDIF} + inherited; +end; procedure TPCJSONObject.DeleteName(Name: String); Var i : Integer; @@ -782,8 +896,10 @@ procedure TPCJSONObject.DeleteName(Name: String); destructor TPCJSONObject.Destroy; begin - inherited; + {$IFDEF USE_BTREE} + FOrderedByName.Free; + {$ENDIF} end; function TPCJSONObject.FindName(Name: String): TPCJSONNameValue; @@ -842,10 +958,16 @@ function TPCJSONObject.GetIndexOrCreateName(Name: String): Integer; if (Result<0) then begin CheckValidName(Name); NV := TPCJSONNameValue.Create(Name); - Result := FList.Add(NV); + Result := FList.Count; + Insert(Result,NV); end; end; +function TPCJSONObject.GetNameValue(Name: String): TPCJSONNameValue; +begin + Result := Items[GetIndexOrCreateName(Name)] as TPCJSONNameValue; +end; + function TPCJSONObject.GetNameValue(index: Integer): TPCJSONNameValue; begin Result := Items[index] as TPCJSONNameValue; @@ -867,17 +989,55 @@ function TPCJSONObject.IsNull(ParamName: String): Boolean; end; function TPCJSONObject.IndexOfName(Name: String): Integer; +{$IFDEF USE_BTREE} +var bnode : TMemoryBTree<Integer>.TAbstractBTreeNode; + i : Integer; +{$ENDIF} begin + {$IFDEF USE_BTREE} + FSearchingValue := Name; + if FOrderedByName.Find(-1,bnode,i) then begin + Result := bnode.data[i]; + end else Result := -1; + {$ELSE} for Result := 0 to FList.Count - 1 do begin if (Assigned(FList.Items[Result])) And (TObject(FList.Items[Result]) is TPCJSONNameValue) then begin - If TPCJSONNameValue( FList.Items[Result] ).Name = Name then begin - exit; + {$IFDEF JSONOBJECTS_NAMES_CASE_SENSITIVITY} + // NOTE: CompareStr is case sensitivity + If CompareStr(TPCJSONNameValue( FList.Items[Result] ).Name, Name)=0 then begin + Exit; end; + {$ELSE} + if CompareText(TPCJSONNameValue( FList.Items[Result] ).Name, Name)=0 then begin + Exit; + end; + {$ENDIF} end; end; Result := -1; + {$ENDIF} end; +procedure TPCJSONObject.Insert(Index: Integer; PCJSONData: TPCJSONData); +begin + inherited; + {$IFDEF USE_BTREE} + FSearchingValue := TPCJSONNameValue(PCJSONData).Name; + if not FOrderedByName.Add( Index ) then raise EPCParametresError.Create('Error adding "'+FSearchingValue+'" index '+Index.ToString+' on BTree'); + {$ENDIF} +end; + +function TPCJSONObject.HasName(Name: String): Boolean; +begin + Result := IndexOfName(Name) >= 0; +end; + +Function TPCJSONObject.HasValue(const AParamName : String) : Boolean; +begin + Result := HasName(AParamName) AND (NOT AsString(AParamName, String.Empty).IsEmpty); +end; + + function TPCJSONObject.LoadAsStream(ParamName: String; Stream: TStream): Integer; Var s : RawByteString; begin @@ -912,7 +1072,7 @@ procedure TPCJSONObject.SetAs(Name: String; Value: TPCJSONData); function TPCJSONObject.ToJSONFormatted(pretty: Boolean; const prefix: String): String; Var i : Integer; begin - if pretty then Result := prefix+'{' + if pretty then Result := '{'+#10+prefix else Result := '{'; for i := 0 to Count - 1 do begin if (i>0) then Begin @@ -1026,17 +1186,11 @@ class function TPCJSONData.ParseJSONValue(const JSONObject: TBytes JS := GetJSON(jss); Except On E:Exception do begin - TLog.NewLog(ltDebug,ClassName,'Error processing JSON: '+E.Message); + // Nothing to do... end; end; {$ELSE} - Try - JS := TJSONObject.ParseJSONValue(JSONObject,0); - Except - On E:Exception do begin - TLog.NewLog(ltDebug,ClassName,'Error processing JSON: '+E.Message); - end; - End; + JS := TJSONObject.ParseJSONValue(JSONObject,0); {$ENDIF} if Not Assigned(JS) then exit; Try diff --git a/src/libraries/pascalcoin/tests/JSONFunctions.Tests.dpr b/src/libraries/pascalcoin/tests/JSONFunctions.Tests.dpr new file mode 100644 index 000000000..5aac447d3 --- /dev/null +++ b/src/libraries/pascalcoin/tests/JSONFunctions.Tests.dpr @@ -0,0 +1,66 @@ +program JSONFunctions.Tests; + +{$IFDEF FPC} + {$MODE Delphi} +{$ENDIF} + +// Enable for Console tests +{.$DEFINE CONSOLE_TESTRUNNER} + +{$IFDEF CONSOLE_TESTRUNNER} + {$APPTYPE CONSOLE} +{$ENDIF} + +uses + {$IFDEF FPC} + {$IFDEF CONSOLE_TESTRUNNER} + Classes, + {$ELSE} + Interfaces, + Forms, GuiTestRunner, + {$ENDIF } + {$ELSE} + Forms, + TestFramework, + GUITestRunner, + TextTestRunner, + {$ENDIF } + UAbstractBTree in '..\..\abstractmem\UAbstractBTree.pas', + UOrderedList in '..\..\abstractmem\UOrderedList.pas', + UJSONFunctions in '..\UJSONFunctions.pas', + UJSONFunctions.Tests in 'src\UJSONFunctions.Tests.pas'; + +{$IF Defined(FPC) and (Defined(CONSOLE_TESTRUNNER))} +type + TFreePascalConsoleRunner = class(TTestRunner) + protected + end; +var + Application : TFreePascalConsoleRunner; +{$ENDIF} + +begin + {$IFNDEF FPC} + System.ReportMemoryLeaksOnShutdown := True; + {$ENDIF} + + {$IF Defined(FPC) and (Defined(CONSOLE_TESTRUNNER))} + Application := TFreePascalConsoleRunner.Create(nil); + {$ENDIF} + + Application.Title:='Test'; + Application.Initialize; + {$IFDEF FPC} + {$IF Not Defined(CONSOLE_TESTRUNNER)} + Application.CreateForm(TGuiTestRunner, TestRunner); + {$ENDIF} + Application.Run; + {$ELSE} + if IsConsole then + TextTestRunner.RunRegisteredTests + else + GUITestRunner.RunRegisteredTests; + {$ENDIF} +end. + + diff --git a/src/libraries/pascalcoin/tests/src/UJSONFunctions.Tests.pas b/src/libraries/pascalcoin/tests/src/UJSONFunctions.Tests.pas new file mode 100644 index 000000000..37aa48695 --- /dev/null +++ b/src/libraries/pascalcoin/tests/src/UJSONFunctions.Tests.pas @@ -0,0 +1,76 @@ +unit UJSONFunctions.Tests; + +{$IFDEF FPC} + {$MODE Delphi} +{$ENDIF} + +interface + +uses + SysUtils, + {$IFDEF FPC} + fpcunit, testutils, testregistry, + {$ELSE} + TestFramework, + {$ENDIF} + UJSONFunctions, + UAbstractBTree, UOrderedList; + +type + TestJSONFunctions = class(TTestCase) + strict private + public + procedure SetUp; override; + procedure TearDown; override; + published + procedure Test_JSON; + end; + +implementation + + + + +{ TestJSONFunctions } + +procedure TestJSONFunctions.SetUp; +begin + inherited; + +end; + +procedure TestJSONFunctions.TearDown; +begin + inherited; + +end; + +procedure TestJSONFunctions.Test_JSON; +var j : TPCJSONObject; +begin + j := TPCJSONObject.ParseJSONValue('{"a":[1,2,3,4,7],"d":null,"b":null,"C":null,"m":null,"J":"j"}') as TPCJSONObject; + try + j.AsInteger('j',1); + j.AsInteger('J',2); + assert(j.HasName('a'),'Not found'); + assert(j.HasName('b'),'Not found'); + assert(j.HasName('C'),'Not found'); + assert(j.HasName('d'),'Not found'); + assert(j.HasName('m'),'Not found'); + assert(j.HasName('j'),'Not found'); + assert(j.HasName('J'),'Not found'); + j.CheckConsistency; + while j.Count>0 do begin + j.DeleteName(j.GetNameValue(j.Count-1).Name); + j.CheckConsistency; + end; + + + finally + j.Free; + end; +end; + +initialization + RegisterTest(TestJSONFunctions{$IFNDEF FPC}.Suite{$ENDIF}); +end. diff --git a/src/libraries/regex/HyperLinksDecorator.pas b/src/libraries/regex/HyperLinksDecorator.pas new file mode 100644 index 000000000..903f476b4 --- /dev/null +++ b/src/libraries/regex/HyperLinksDecorator.pas @@ -0,0 +1,167 @@ +{$B-} +unit HyperLinksDecorator; + +{$IFDEF FPC} + {$MODE Delphi} +{$ENDIF} + +{ + + Functions to 'decorate' hyper-links + (search for URLs and e-mails and replace + them with appropriate HTML-links). + Uses TRegExpr library. + + (c) 2002 Andrey V. Sorokin, Saint Petersburg, Russia + https://sorokin.engineer/ + andrey@sorokin.engineer + + v. 0.101 2002.08.30 + -=- (-) Missed closing tag </a> + + Note: + This functions have to be optimized - they construct result strings + with step by step concatenation that can take a lot of resources while + processing big input texts with many hyper links. + +} + +interface + +uses + regexpr; + +type +TDecorateURLsFlags = ( + // describes, which parts of hyper-link must be included + // into VISIBLE part of the link: + durlProto, // Protocol (like 'ftp://' or 'http://') + durlAddr, // TCP address or domain name (like 'sorokin.engineer') + durlPort, // Port number if specified (like ':8080') + durlPath, // Path to document (like 'index.html') + durlBMark, // Book mark (like '#mark') + durlParam // URL params (like '?ID=2&User=13') + ); + +TDecorateURLsFlagSet = set of TDecorateURLsFlags; + + +function DecorateURLs ( + // can find hyper links like 'http://...' or 'ftp://..' + // as well as links without protocol, but start with 'www.' + + const AText : string; + // Input text to find hyper-links + + AFlags : TDecorateURLsFlagSet = [durlAddr, durlPath] + // Which part of hyper-links found must be included into visible + // part of URL, for example if [durlAddr] then hyper link + // 'https://sorokin.engineer/en/index.html' will be decorated as + // '<a href="https://sorokin.engineer/en/index.html">https://sorokin.engineer</a>' + + ) : string; + // Returns input text with decorated hyper links + + +function DecorateEMails ( + // Replaces all syntax correct e-mails + // with '<a href="mailto:ADDR">ADDR</a>' + // For example, replaces 'anso@mail.ru' + // with '<a href="mailto:anso@mail.ru">anso@mail.ru</a>'. + + const AText : string + // Input text to find e-mails + + ) : string; + // Returns input text with decorated e-mails + + +implementation + +uses + SysUtils; // we are using AnsiCompareText + +function DecorateURLs (const AText : string; + AFlags : TDecorateURLsFlagSet = [durlAddr, durlPath] + ) : string; +const + URLTemplate = + '(?i)' + + '(' + + '(FTP|HTTP)://' // Protocol + + '|www\.)' // trick to catch links without + // protocol - by detecting of starting 'www.' + + '([\w\d\-]+(\.[\w\d\-]+)+)' // TCP addr or domain name + + '(:\d\d?\d?\d?\d?)?' // port number + + '(((/[%+\w\d\-\\\.]*)+)*)' // unix path + + '(\?[^\s=&]+=[^\s=&]+(&[^\s=&]+=[^\s=&]+)*)?' + // request (GET) params + + '(#[\w\d\-%+]+)?'; // bookmark +var + PrevPos : integer; + s, Proto, Addr, HRef : string; +begin + Result := ''; + PrevPos := 1; + with TRegExpr.Create do try + Expression := URLTemplate; + if Exec (AText) then + REPEAT + s := ''; + if AnsiCompareText (Match [1], 'www.') = 0 then begin + Proto := 'http://'; + Addr := Match [1] + Match [3]; + HRef := Proto + Match [0]; + end + else begin + Proto := Match [1]; + Addr := Match [3]; + HRef := Match [0]; + end; + if durlProto in AFlags + then s := s + Proto; + if durlAddr in AFlags + then s := s + Addr; + if durlPort in AFlags + then s := s + Match [5]; + if durlPath in AFlags + then s := s + Match [6]; + if durlParam in AFlags + then s := s + Match [9]; + if durlBMark in AFlags + then s := s + Match [11]; + Result := Result + System.Copy (AText, PrevPos, + MatchPos [0] - PrevPos) + '<a href="' + HRef + '">' + s + '</a>'; //###0.101 + PrevPos := MatchPos [0] + MatchLen [0]; + UNTIL not ExecNext; + Result := Result + System.Copy (AText, PrevPos, MaxInt); // Tail + finally Free; + end; +end; { of function DecorateURLs +--------------------------------------------------------------} + +function DecorateEMails (const AText : string) : string; + const + MailTemplate = + '[_a-zA-Z\d\-\.]+@[_a-zA-Z\d\-]+(\.[_a-zA-Z\d\-]+)+'; + var + PrevPos : integer; + begin + Result := ''; + PrevPos := 1; + with TRegExpr.Create do try + Expression := MailTemplate; + if Exec (AText) then + REPEAT + Result := Result + System.Copy (AText, PrevPos, + MatchPos [0] - PrevPos) + '<a href="mailto:' + Match [0] + '">' + Match [0] + '</a>'; + PrevPos := MatchPos [0] + MatchLen [0]; + UNTIL not ExecNext; + Result := Result + System.Copy (AText, PrevPos, MaxInt); // Tail + finally Free; + end; + end; { of function DecorateEMails +--------------------------------------------------------------} + + +end. diff --git a/src/libraries/regex/regexpr_compilers.inc b/src/libraries/regex/regexpr_compilers.inc new file mode 100644 index 000000000..8072878e5 --- /dev/null +++ b/src/libraries/regex/regexpr_compilers.inc @@ -0,0 +1,366 @@ +{$IFDEF VER90} + {$DEFINE D2} +{$ENDIF} // D2 + +{$IFDEF VER93} + {$DEFINE D2} +{$ENDIF} // CPPB 1 + +{$IFDEF VER100} + {$DEFINE D3} + {$DEFINE D2} +{$ENDIF} // D3 + +{$IFDEF VER110} + {$DEFINE D4} + {$DEFINE D3} + {$DEFINE D2} +{$ENDIF} // CPPB 3 + +{$IFDEF VER120} + {$DEFINE D4} + {$DEFINE D3} + {$DEFINE D2} +{$ENDIF} // D4 + +{$IFDEF VER130} + {$DEFINE D5} + {$DEFINE D4} + {$DEFINE D3} + {$DEFINE D2} +{$ENDIF} // D5 + +{$IFDEF VER140} + {$DEFINE D6} + {$DEFINE D5} + {$DEFINE D4} + {$DEFINE D3} + {$DEFINE D2} +{$ENDIF} // D6 + +{$IFDEF VER150} + {$DEFINE D7} + {$DEFINE D6} + {$DEFINE D5} + {$DEFINE D4} + {$DEFINE D3} + {$DEFINE D2} +{$ENDIF} // D7 + +{$IFDEF VER160} + {$DEFINE D8} + {$DEFINE D7} + {$DEFINE D6} + {$DEFINE D5} + {$DEFINE D4} + {$DEFINE D3} + {$DEFINE D2} +{$ENDIF} // D7 + +{$IFDEF VER200} + {$DEFINE D2009} + {$DEFINE D8} + {$DEFINE D7} + {$DEFINE D6} + {$DEFINE D5} + {$DEFINE D4} + {$DEFINE D3} + {$DEFINE D2} +{$ENDIF} // D2009 + +{$IFDEF VER210} + {$DEFINE D2010} + {$DEFINE D2009} + {$DEFINE D8} + {$DEFINE D7} + {$DEFINE D6} + {$DEFINE D5} + {$DEFINE D4} + {$DEFINE D3} + {$DEFINE D2} +{$ENDIF} // D2010 + +{$IFDEF VER220} + {$DEFINE D_XE} + {$DEFINE D2010} + {$DEFINE D2009} + {$DEFINE D8} + {$DEFINE D7} + {$DEFINE D6} + {$DEFINE D5} + {$DEFINE D4} + {$DEFINE D3} + {$DEFINE D2} +{$ENDIF} // D XE + +{$IFDEF VER230} + {$DEFINE D_XE2} + {$DEFINE D_XE} + {$DEFINE D2010} + {$DEFINE D2009} + {$DEFINE D8} + {$DEFINE D7} + {$DEFINE D6} + {$DEFINE D5} + {$DEFINE D4} + {$DEFINE D3} + {$DEFINE D2} +{$ENDIF} // D XE2 + +{$IFDEF VER240} + {$DEFINE D_XE3} + {$DEFINE D_XE2} + {$DEFINE D_XE} + {$DEFINE D2010} + {$DEFINE D2009} + {$DEFINE D8} + {$DEFINE D7} + {$DEFINE D6} + {$DEFINE D5} + {$DEFINE D4} + {$DEFINE D3} + {$DEFINE D2} +{$ENDIF} // D XE3 + +{$IFDEF VER250} + {$DEFINE D_XE4} + {$DEFINE D_XE3} + {$DEFINE D_XE2} + {$DEFINE D_XE} + {$DEFINE D2010} + {$DEFINE D2009} + {$DEFINE D8} + {$DEFINE D7} + {$DEFINE D6} + {$DEFINE D5} + {$DEFINE D4} + {$DEFINE D3} + {$DEFINE D2} +{$ENDIF} // D XE4 + +{$IFDEF VER260} + {$DEFINE D_XE5} + {$DEFINE D_XE4} + {$DEFINE D_XE3} + {$DEFINE D_XE2} + {$DEFINE D_XE} + {$DEFINE D2010} + {$DEFINE D2009} + {$DEFINE D8} + {$DEFINE D7} + {$DEFINE D6} + {$DEFINE D5} + {$DEFINE D4} + {$DEFINE D3} + {$DEFINE D2} +{$ENDIF} // D XE5 + +{$IFDEF VER270} + {$DEFINE D_XE6} + {$DEFINE D_XE5} + {$DEFINE D_XE4} + {$DEFINE D_XE3} + {$DEFINE D_XE2} + {$DEFINE D_XE} + {$DEFINE D2010} + {$DEFINE D2009} + {$DEFINE D8} + {$DEFINE D7} + {$DEFINE D6} + {$DEFINE D5} + {$DEFINE D4} + {$DEFINE D3} + {$DEFINE D2} +{$ENDIF} // D XE6 + +{$IFDEF VER280} + {$DEFINE D_XE7} + {$DEFINE D_XE6} + {$DEFINE D_XE5} + {$DEFINE D_XE4} + {$DEFINE D_XE3} + {$DEFINE D_XE2} + {$DEFINE D_XE} + {$DEFINE D2010} + {$DEFINE D2009} + {$DEFINE D8} + {$DEFINE D7} + {$DEFINE D6} + {$DEFINE D5} + {$DEFINE D4} + {$DEFINE D3} + {$DEFINE D2} +{$ENDIF} // D XE7 + +{$IFDEF VER290} + {$DEFINE D_XE8} + {$DEFINE D_XE7} + {$DEFINE D_XE6} + {$DEFINE D_XE5} + {$DEFINE D_XE4} + {$DEFINE D_XE3} + {$DEFINE D_XE2} + {$DEFINE D_XE} + {$DEFINE D2010} + {$DEFINE D2009} + {$DEFINE D8} + {$DEFINE D7} + {$DEFINE D6} + {$DEFINE D5} + {$DEFINE D4} + {$DEFINE D3} + {$DEFINE D2} +{$ENDIF} // D XE8 + +{$IFDEF VER300} + {$DEFINE D_100} + {$DEFINE D_XE8} + {$DEFINE D_XE7} + {$DEFINE D_XE6} + {$DEFINE D_XE5} + {$DEFINE D_XE4} + {$DEFINE D_XE3} + {$DEFINE D_XE2} + {$DEFINE D_XE} + {$DEFINE D2010} + {$DEFINE D2009} + {$DEFINE D8} + {$DEFINE D7} + {$DEFINE D6} + {$DEFINE D5} + {$DEFINE D4} + {$DEFINE D3} + {$DEFINE D2} +{$ENDIF} // D 10 + +{$IFDEF VER310} + {$DEFINE D_101} + {$DEFINE D_100} + {$DEFINE D_XE8} + {$DEFINE D_XE7} + {$DEFINE D_XE6} + {$DEFINE D_XE5} + {$DEFINE D_XE4} + {$DEFINE D_XE3} + {$DEFINE D_XE2} + {$DEFINE D_XE} + {$DEFINE D2010} + {$DEFINE D2009} + {$DEFINE D8} + {$DEFINE D7} + {$DEFINE D6} + {$DEFINE D5} + {$DEFINE D4} + {$DEFINE D3} + {$DEFINE D2} +{$ENDIF} // D 10.1 + +{$IFDEF VER320} + {$DEFINE D_102} + {$DEFINE D_101} + {$DEFINE D_100} + {$DEFINE D_XE8} + {$DEFINE D_XE7} + {$DEFINE D_XE6} + {$DEFINE D_XE5} + {$DEFINE D_XE4} + {$DEFINE D_XE3} + {$DEFINE D_XE2} + {$DEFINE D_XE} + {$DEFINE D2010} + {$DEFINE D2009} + {$DEFINE D8} + {$DEFINE D7} + {$DEFINE D6} + {$DEFINE D5} + {$DEFINE D4} + {$DEFINE D3} + {$DEFINE D2} +{$ENDIF} // D 10.2 + +{$IFDEF VER330} + {$DEFINE D_103} + {$DEFINE D_102} + {$DEFINE D_101} + {$DEFINE D_100} + {$DEFINE D_XE8} + {$DEFINE D_XE7} + {$DEFINE D_XE6} + {$DEFINE D_XE5} + {$DEFINE D_XE4} + {$DEFINE D_XE3} + {$DEFINE D_XE2} + {$DEFINE D_XE} + {$DEFINE D2010} + {$DEFINE D2009} + {$DEFINE D8} + {$DEFINE D7} + {$DEFINE D6} + {$DEFINE D5} + {$DEFINE D4} + {$DEFINE D3} + {$DEFINE D2} +{$ENDIF} // D 10.3 + +{$IFDEF VER340} + {$DEFINE D_104} + {$DEFINE D_103} + {$DEFINE D_102} + {$DEFINE D_101} + {$DEFINE D_100} + {$DEFINE D_XE8} + {$DEFINE D_XE7} + {$DEFINE D_XE6} + {$DEFINE D_XE5} + {$DEFINE D_XE4} + {$DEFINE D_XE3} + {$DEFINE D_XE2} + {$DEFINE D_XE} + {$DEFINE D2010} + {$DEFINE D2009} + {$DEFINE D8} + {$DEFINE D7} + {$DEFINE D6} + {$DEFINE D5} + {$DEFINE D4} + {$DEFINE D3} + {$DEFINE D2} +{$ENDIF} // D 10.4 + +{$IFDEF VER350} + {$DEFINE D_105} + {$DEFINE D_104} + {$DEFINE D_103} + {$DEFINE D_102} + {$DEFINE D_101} + {$DEFINE D_100} + {$DEFINE D_XE8} + {$DEFINE D_XE7} + {$DEFINE D_XE6} + {$DEFINE D_XE5} + {$DEFINE D_XE4} + {$DEFINE D_XE3} + {$DEFINE D_XE2} + {$DEFINE D_XE} + {$DEFINE D2010} + {$DEFINE D2009} + {$DEFINE D8} + {$DEFINE D7} + {$DEFINE D6} + {$DEFINE D5} + {$DEFINE D4} + {$DEFINE D3} + {$DEFINE D2} +{$ENDIF} // D 10.5 + + +{$IFDEF D6} + {$WARN SYMBOL_PLATFORM OFF} // Suppress .Net warnings +{$ENDIF} + +{$IFDEF D7} + {$WARN UNSAFE_CAST OFF} // Suppress .Net warnings + {$WARN UNSAFE_TYPE OFF} // Suppress .Net warnings + {$WARN UNSAFE_CODE OFF} // Suppress .Net warnings +{$ENDIF} + diff --git a/src/libraries/regex/regexpr_unicodedata.pas b/src/libraries/regex/regexpr_unicodedata.pas new file mode 100644 index 000000000..01036df9a --- /dev/null +++ b/src/libraries/regex/regexpr_unicodedata.pas @@ -0,0 +1,196624 @@ +unit regexpr_unicodedata; +interface + +const + //bit 7: is word char; bits 0..6: category value from UnicodeData unit + CharCategoryArray: packed array[0..$FFFF] of byte = ( + 25, // $0000 + 25, // $0001 + 25, // $0002 + 25, // $0003 + 25, // $0004 + 25, // $0005 + 25, // $0006 + 25, // $0007 + 25, // $0008 + 25, // $0009 + 25, // $000A + 25, // $000B + 25, // $000C + 25, // $000D + 25, // $000E + 25, // $000F + 25, // $0010 + 25, // $0011 + 25, // $0012 + 25, // $0013 + 25, // $0014 + 25, // $0015 + 25, // $0016 + 25, // $0017 + 25, // $0018 + 25, // $0019 + 25, // $001A + 25, // $001B + 25, // $001C + 25, // $001D + 25, // $001E + 25, // $001F + 22, // $0020 + 17, // $0021 + 17, // $0022 + 17, // $0023 + 19, // $0024 + 17, // $0025 + 17, // $0026 + 17, // $0027 + 13, // $0028 + 14, // $0029 + 17, // $002A + 18, // $002B + 17, // $002C + 12, // $002D + 17, // $002E + 17, // $002F + 136, // $0030 + 136, // $0031 + 136, // $0032 + 136, // $0033 + 136, // $0034 + 136, // $0035 + 136, // $0036 + 136, // $0037 + 136, // $0038 + 136, // $0039 + 17, // $003A + 17, // $003B + 18, // $003C + 18, // $003D + 18, // $003E + 17, // $003F + 17, // $0040 + 128, // $0041 + 128, // $0042 + 128, // $0043 + 128, // $0044 + 128, // $0045 + 128, // $0046 + 128, // $0047 + 128, // $0048 + 128, // $0049 + 128, // $004A + 128, // $004B + 128, // $004C + 128, // $004D + 128, // $004E + 128, // $004F + 128, // $0050 + 128, // $0051 + 128, // $0052 + 128, // $0053 + 128, // $0054 + 128, // $0055 + 128, // $0056 + 128, // $0057 + 128, // $0058 + 128, // $0059 + 128, // $005A + 13, // $005B + 17, // $005C + 14, // $005D + 20, // $005E + 139, // $005F + 20, // $0060 + 129, // $0061 + 129, // $0062 + 129, // $0063 + 129, // $0064 + 129, // $0065 + 129, // $0066 + 129, // $0067 + 129, // $0068 + 129, // $0069 + 129, // $006A + 129, // $006B + 129, // $006C + 129, // $006D + 129, // $006E + 129, // $006F + 129, // $0070 + 129, // $0071 + 129, // $0072 + 129, // $0073 + 129, // $0074 + 129, // $0075 + 129, // $0076 + 129, // $0077 + 129, // $0078 + 129, // $0079 + 129, // $007A + 13, // $007B + 18, // $007C + 14, // $007D + 18, // $007E + 25, // $007F + 25, // $0080 + 25, // $0081 + 25, // $0082 + 25, // $0083 + 25, // $0084 + 25, // $0085 + 25, // $0086 + 25, // $0087 + 25, // $0088 + 25, // $0089 + 25, // $008A + 25, // $008B + 25, // $008C + 25, // $008D + 25, // $008E + 25, // $008F + 25, // $0090 + 25, // $0091 + 25, // $0092 + 25, // $0093 + 25, // $0094 + 25, // $0095 + 25, // $0096 + 25, // $0097 + 25, // $0098 + 25, // $0099 + 25, // $009A + 25, // $009B + 25, // $009C + 25, // $009D + 25, // $009E + 25, // $009F + 22, // $00A0 + 17, // $00A1 + 19, // $00A2 + 19, // $00A3 + 19, // $00A4 + 19, // $00A5 + 21, // $00A6 + 17, // $00A7 + 20, // $00A8 + 21, // $00A9 + 132, // $00AA + 15, // $00AB + 18, // $00AC + 26, // $00AD + 21, // $00AE + 20, // $00AF + 21, // $00B0 + 18, // $00B1 + 138, // $00B2 + 138, // $00B3 + 20, // $00B4 + 129, // $00B5 + 17, // $00B6 + 17, // $00B7 + 20, // $00B8 + 138, // $00B9 + 132, // $00BA + 16, // $00BB + 138, // $00BC + 138, // $00BD + 138, // $00BE + 17, // $00BF + 128, // $00C0 + 128, // $00C1 + 128, // $00C2 + 128, // $00C3 + 128, // $00C4 + 128, // $00C5 + 128, // $00C6 + 128, // $00C7 + 128, // $00C8 + 128, // $00C9 + 128, // $00CA + 128, // $00CB + 128, // $00CC + 128, // $00CD + 128, // $00CE + 128, // $00CF + 128, // $00D0 + 128, // $00D1 + 128, // $00D2 + 128, // $00D3 + 128, // $00D4 + 128, // $00D5 + 128, // $00D6 + 18, // $00D7 + 128, // $00D8 + 128, // $00D9 + 128, // $00DA + 128, // $00DB + 128, // $00DC + 128, // $00DD + 128, // $00DE + 129, // $00DF + 129, // $00E0 + 129, // $00E1 + 129, // $00E2 + 129, // $00E3 + 129, // $00E4 + 129, // $00E5 + 129, // $00E6 + 129, // $00E7 + 129, // $00E8 + 129, // $00E9 + 129, // $00EA + 129, // $00EB + 129, // $00EC + 129, // $00ED + 129, // $00EE + 129, // $00EF + 129, // $00F0 + 129, // $00F1 + 129, // $00F2 + 129, // $00F3 + 129, // $00F4 + 129, // $00F5 + 129, // $00F6 + 18, // $00F7 + 129, // $00F8 + 129, // $00F9 + 129, // $00FA + 129, // $00FB + 129, // $00FC + 129, // $00FD + 129, // $00FE + 129, // $00FF + 128, // $0100 + 129, // $0101 + 128, // $0102 + 129, // $0103 + 128, // $0104 + 129, // $0105 + 128, // $0106 + 129, // $0107 + 128, // $0108 + 129, // $0109 + 128, // $010A + 129, // $010B + 128, // $010C + 129, // $010D + 128, // $010E + 129, // $010F + 128, // $0110 + 129, // $0111 + 128, // $0112 + 129, // $0113 + 128, // $0114 + 129, // $0115 + 128, // $0116 + 129, // $0117 + 128, // $0118 + 129, // $0119 + 128, // $011A + 129, // $011B + 128, // $011C + 129, // $011D + 128, // $011E + 129, // $011F + 128, // $0120 + 129, // $0121 + 128, // $0122 + 129, // $0123 + 128, // $0124 + 129, // $0125 + 128, // $0126 + 129, // $0127 + 128, // $0128 + 129, // $0129 + 128, // $012A + 129, // $012B + 128, // $012C + 129, // $012D + 128, // $012E + 129, // $012F + 128, // $0130 + 129, // $0131 + 128, // $0132 + 129, // $0133 + 128, // $0134 + 129, // $0135 + 128, // $0136 + 129, // $0137 + 129, // $0138 + 128, // $0139 + 129, // $013A + 128, // $013B + 129, // $013C + 128, // $013D + 129, // $013E + 128, // $013F + 129, // $0140 + 128, // $0141 + 129, // $0142 + 128, // $0143 + 129, // $0144 + 128, // $0145 + 129, // $0146 + 128, // $0147 + 129, // $0148 + 129, // $0149 + 128, // $014A + 129, // $014B + 128, // $014C + 129, // $014D + 128, // $014E + 129, // $014F + 128, // $0150 + 129, // $0151 + 128, // $0152 + 129, // $0153 + 128, // $0154 + 129, // $0155 + 128, // $0156 + 129, // $0157 + 128, // $0158 + 129, // $0159 + 128, // $015A + 129, // $015B + 128, // $015C + 129, // $015D + 128, // $015E + 129, // $015F + 128, // $0160 + 129, // $0161 + 128, // $0162 + 129, // $0163 + 128, // $0164 + 129, // $0165 + 128, // $0166 + 129, // $0167 + 128, // $0168 + 129, // $0169 + 128, // $016A + 129, // $016B + 128, // $016C + 129, // $016D + 128, // $016E + 129, // $016F + 128, // $0170 + 129, // $0171 + 128, // $0172 + 129, // $0173 + 128, // $0174 + 129, // $0175 + 128, // $0176 + 129, // $0177 + 128, // $0178 + 128, // $0179 + 129, // $017A + 128, // $017B + 129, // $017C + 128, // $017D + 129, // $017E + 129, // $017F + 129, // $0180 + 128, // $0181 + 128, // $0182 + 129, // $0183 + 128, // $0184 + 129, // $0185 + 128, // $0186 + 128, // $0187 + 129, // $0188 + 128, // $0189 + 128, // $018A + 128, // $018B + 129, // $018C + 129, // $018D + 128, // $018E + 128, // $018F + 128, // $0190 + 128, // $0191 + 129, // $0192 + 128, // $0193 + 128, // $0194 + 129, // $0195 + 128, // $0196 + 128, // $0197 + 128, // $0198 + 129, // $0199 + 129, // $019A + 129, // $019B + 128, // $019C + 128, // $019D + 129, // $019E + 128, // $019F + 128, // $01A0 + 129, // $01A1 + 128, // $01A2 + 129, // $01A3 + 128, // $01A4 + 129, // $01A5 + 128, // $01A6 + 128, // $01A7 + 129, // $01A8 + 128, // $01A9 + 129, // $01AA + 129, // $01AB + 128, // $01AC + 129, // $01AD + 128, // $01AE + 128, // $01AF + 129, // $01B0 + 128, // $01B1 + 128, // $01B2 + 128, // $01B3 + 129, // $01B4 + 128, // $01B5 + 129, // $01B6 + 128, // $01B7 + 128, // $01B8 + 129, // $01B9 + 129, // $01BA + 132, // $01BB + 128, // $01BC + 129, // $01BD + 129, // $01BE + 129, // $01BF + 132, // $01C0 + 132, // $01C1 + 132, // $01C2 + 132, // $01C3 + 128, // $01C4 + 130, // $01C5 + 129, // $01C6 + 128, // $01C7 + 130, // $01C8 + 129, // $01C9 + 128, // $01CA + 130, // $01CB + 129, // $01CC + 128, // $01CD + 129, // $01CE + 128, // $01CF + 129, // $01D0 + 128, // $01D1 + 129, // $01D2 + 128, // $01D3 + 129, // $01D4 + 128, // $01D5 + 129, // $01D6 + 128, // $01D7 + 129, // $01D8 + 128, // $01D9 + 129, // $01DA + 128, // $01DB + 129, // $01DC + 129, // $01DD + 128, // $01DE + 129, // $01DF + 128, // $01E0 + 129, // $01E1 + 128, // $01E2 + 129, // $01E3 + 128, // $01E4 + 129, // $01E5 + 128, // $01E6 + 129, // $01E7 + 128, // $01E8 + 129, // $01E9 + 128, // $01EA + 129, // $01EB + 128, // $01EC + 129, // $01ED + 128, // $01EE + 129, // $01EF + 129, // $01F0 + 128, // $01F1 + 130, // $01F2 + 129, // $01F3 + 128, // $01F4 + 129, // $01F5 + 128, // $01F6 + 128, // $01F7 + 128, // $01F8 + 129, // $01F9 + 128, // $01FA + 129, // $01FB + 128, // $01FC + 129, // $01FD + 128, // $01FE + 129, // $01FF + 128, // $0200 + 129, // $0201 + 128, // $0202 + 129, // $0203 + 128, // $0204 + 129, // $0205 + 128, // $0206 + 129, // $0207 + 128, // $0208 + 129, // $0209 + 128, // $020A + 129, // $020B + 128, // $020C + 129, // $020D + 128, // $020E + 129, // $020F + 128, // $0210 + 129, // $0211 + 128, // $0212 + 129, // $0213 + 128, // $0214 + 129, // $0215 + 128, // $0216 + 129, // $0217 + 128, // $0218 + 129, // $0219 + 128, // $021A + 129, // $021B + 128, // $021C + 129, // $021D + 128, // $021E + 129, // $021F + 128, // $0220 + 129, // $0221 + 128, // $0222 + 129, // $0223 + 128, // $0224 + 129, // $0225 + 128, // $0226 + 129, // $0227 + 128, // $0228 + 129, // $0229 + 128, // $022A + 129, // $022B + 128, // $022C + 129, // $022D + 128, // $022E + 129, // $022F + 128, // $0230 + 129, // $0231 + 128, // $0232 + 129, // $0233 + 129, // $0234 + 129, // $0235 + 129, // $0236 + 129, // $0237 + 129, // $0238 + 129, // $0239 + 128, // $023A + 128, // $023B + 129, // $023C + 128, // $023D + 128, // $023E + 129, // $023F + 129, // $0240 + 128, // $0241 + 129, // $0242 + 128, // $0243 + 128, // $0244 + 128, // $0245 + 128, // $0246 + 129, // $0247 + 128, // $0248 + 129, // $0249 + 128, // $024A + 129, // $024B + 128, // $024C + 129, // $024D + 128, // $024E + 129, // $024F + 129, // $0250 + 129, // $0251 + 129, // $0252 + 129, // $0253 + 129, // $0254 + 129, // $0255 + 129, // $0256 + 129, // $0257 + 129, // $0258 + 129, // $0259 + 129, // $025A + 129, // $025B + 129, // $025C + 129, // $025D + 129, // $025E + 129, // $025F + 129, // $0260 + 129, // $0261 + 129, // $0262 + 129, // $0263 + 129, // $0264 + 129, // $0265 + 129, // $0266 + 129, // $0267 + 129, // $0268 + 129, // $0269 + 129, // $026A + 129, // $026B + 129, // $026C + 129, // $026D + 129, // $026E + 129, // $026F + 129, // $0270 + 129, // $0271 + 129, // $0272 + 129, // $0273 + 129, // $0274 + 129, // $0275 + 129, // $0276 + 129, // $0277 + 129, // $0278 + 129, // $0279 + 129, // $027A + 129, // $027B + 129, // $027C + 129, // $027D + 129, // $027E + 129, // $027F + 129, // $0280 + 129, // $0281 + 129, // $0282 + 129, // $0283 + 129, // $0284 + 129, // $0285 + 129, // $0286 + 129, // $0287 + 129, // $0288 + 129, // $0289 + 129, // $028A + 129, // $028B + 129, // $028C + 129, // $028D + 129, // $028E + 129, // $028F + 129, // $0290 + 129, // $0291 + 129, // $0292 + 129, // $0293 + 132, // $0294 + 129, // $0295 + 129, // $0296 + 129, // $0297 + 129, // $0298 + 129, // $0299 + 129, // $029A + 129, // $029B + 129, // $029C + 129, // $029D + 129, // $029E + 129, // $029F + 129, // $02A0 + 129, // $02A1 + 129, // $02A2 + 129, // $02A3 + 129, // $02A4 + 129, // $02A5 + 129, // $02A6 + 129, // $02A7 + 129, // $02A8 + 129, // $02A9 + 129, // $02AA + 129, // $02AB + 129, // $02AC + 129, // $02AD + 129, // $02AE + 129, // $02AF + 131, // $02B0 + 131, // $02B1 + 131, // $02B2 + 131, // $02B3 + 131, // $02B4 + 131, // $02B5 + 131, // $02B6 + 131, // $02B7 + 131, // $02B8 + 131, // $02B9 + 131, // $02BA + 131, // $02BB + 131, // $02BC + 131, // $02BD + 131, // $02BE + 131, // $02BF + 131, // $02C0 + 131, // $02C1 + 20, // $02C2 + 20, // $02C3 + 20, // $02C4 + 20, // $02C5 + 131, // $02C6 + 131, // $02C7 + 131, // $02C8 + 131, // $02C9 + 131, // $02CA + 131, // $02CB + 131, // $02CC + 131, // $02CD + 131, // $02CE + 131, // $02CF + 131, // $02D0 + 131, // $02D1 + 20, // $02D2 + 20, // $02D3 + 20, // $02D4 + 20, // $02D5 + 20, // $02D6 + 20, // $02D7 + 20, // $02D8 + 20, // $02D9 + 20, // $02DA + 20, // $02DB + 20, // $02DC + 20, // $02DD + 20, // $02DE + 20, // $02DF + 131, // $02E0 + 131, // $02E1 + 131, // $02E2 + 131, // $02E3 + 131, // $02E4 + 20, // $02E5 + 20, // $02E6 + 20, // $02E7 + 20, // $02E8 + 20, // $02E9 + 20, // $02EA + 20, // $02EB + 131, // $02EC + 20, // $02ED + 131, // $02EE + 20, // $02EF + 20, // $02F0 + 20, // $02F1 + 20, // $02F2 + 20, // $02F3 + 20, // $02F4 + 20, // $02F5 + 20, // $02F6 + 20, // $02F7 + 20, // $02F8 + 20, // $02F9 + 20, // $02FA + 20, // $02FB + 20, // $02FC + 20, // $02FD + 20, // $02FE + 20, // $02FF + 133, // $0300 + 133, // $0301 + 133, // $0302 + 133, // $0303 + 133, // $0304 + 133, // $0305 + 133, // $0306 + 133, // $0307 + 133, // $0308 + 133, // $0309 + 133, // $030A + 133, // $030B + 133, // $030C + 133, // $030D + 133, // $030E + 133, // $030F + 133, // $0310 + 133, // $0311 + 133, // $0312 + 133, // $0313 + 133, // $0314 + 133, // $0315 + 133, // $0316 + 133, // $0317 + 133, // $0318 + 133, // $0319 + 133, // $031A + 133, // $031B + 133, // $031C + 133, // $031D + 133, // $031E + 133, // $031F + 133, // $0320 + 133, // $0321 + 133, // $0322 + 133, // $0323 + 133, // $0324 + 133, // $0325 + 133, // $0326 + 133, // $0327 + 133, // $0328 + 133, // $0329 + 133, // $032A + 133, // $032B + 133, // $032C + 133, // $032D + 133, // $032E + 133, // $032F + 133, // $0330 + 133, // $0331 + 133, // $0332 + 133, // $0333 + 133, // $0334 + 133, // $0335 + 133, // $0336 + 133, // $0337 + 133, // $0338 + 133, // $0339 + 133, // $033A + 133, // $033B + 133, // $033C + 133, // $033D + 133, // $033E + 133, // $033F + 133, // $0340 + 133, // $0341 + 133, // $0342 + 133, // $0343 + 133, // $0344 + 133, // $0345 + 133, // $0346 + 133, // $0347 + 133, // $0348 + 133, // $0349 + 133, // $034A + 133, // $034B + 133, // $034C + 133, // $034D + 133, // $034E + 133, // $034F + 133, // $0350 + 133, // $0351 + 133, // $0352 + 133, // $0353 + 133, // $0354 + 133, // $0355 + 133, // $0356 + 133, // $0357 + 133, // $0358 + 133, // $0359 + 133, // $035A + 133, // $035B + 133, // $035C + 133, // $035D + 133, // $035E + 133, // $035F + 133, // $0360 + 133, // $0361 + 133, // $0362 + 133, // $0363 + 133, // $0364 + 133, // $0365 + 133, // $0366 + 133, // $0367 + 133, // $0368 + 133, // $0369 + 133, // $036A + 133, // $036B + 133, // $036C + 133, // $036D + 133, // $036E + 133, // $036F + 128, // $0370 + 129, // $0371 + 128, // $0372 + 129, // $0373 + 131, // $0374 + 20, // $0375 + 128, // $0376 + 129, // $0377 + 29, // $0378 + 29, // $0379 + 131, // $037A + 129, // $037B + 129, // $037C + 129, // $037D + 17, // $037E + 128, // $037F + 29, // $0380 + 29, // $0381 + 29, // $0382 + 29, // $0383 + 20, // $0384 + 20, // $0385 + 128, // $0386 + 17, // $0387 + 128, // $0388 + 128, // $0389 + 128, // $038A + 29, // $038B + 128, // $038C + 29, // $038D + 128, // $038E + 128, // $038F + 129, // $0390 + 128, // $0391 + 128, // $0392 + 128, // $0393 + 128, // $0394 + 128, // $0395 + 128, // $0396 + 128, // $0397 + 128, // $0398 + 128, // $0399 + 128, // $039A + 128, // $039B + 128, // $039C + 128, // $039D + 128, // $039E + 128, // $039F + 128, // $03A0 + 128, // $03A1 + 29, // $03A2 + 128, // $03A3 + 128, // $03A4 + 128, // $03A5 + 128, // $03A6 + 128, // $03A7 + 128, // $03A8 + 128, // $03A9 + 128, // $03AA + 128, // $03AB + 129, // $03AC + 129, // $03AD + 129, // $03AE + 129, // $03AF + 129, // $03B0 + 129, // $03B1 + 129, // $03B2 + 129, // $03B3 + 129, // $03B4 + 129, // $03B5 + 129, // $03B6 + 129, // $03B7 + 129, // $03B8 + 129, // $03B9 + 129, // $03BA + 129, // $03BB + 129, // $03BC + 129, // $03BD + 129, // $03BE + 129, // $03BF + 129, // $03C0 + 129, // $03C1 + 129, // $03C2 + 129, // $03C3 + 129, // $03C4 + 129, // $03C5 + 129, // $03C6 + 129, // $03C7 + 129, // $03C8 + 129, // $03C9 + 129, // $03CA + 129, // $03CB + 129, // $03CC + 129, // $03CD + 129, // $03CE + 128, // $03CF + 129, // $03D0 + 129, // $03D1 + 128, // $03D2 + 128, // $03D3 + 128, // $03D4 + 129, // $03D5 + 129, // $03D6 + 129, // $03D7 + 128, // $03D8 + 129, // $03D9 + 128, // $03DA + 129, // $03DB + 128, // $03DC + 129, // $03DD + 128, // $03DE + 129, // $03DF + 128, // $03E0 + 129, // $03E1 + 128, // $03E2 + 129, // $03E3 + 128, // $03E4 + 129, // $03E5 + 128, // $03E6 + 129, // $03E7 + 128, // $03E8 + 129, // $03E9 + 128, // $03EA + 129, // $03EB + 128, // $03EC + 129, // $03ED + 128, // $03EE + 129, // $03EF + 129, // $03F0 + 129, // $03F1 + 129, // $03F2 + 129, // $03F3 + 128, // $03F4 + 129, // $03F5 + 18, // $03F6 + 128, // $03F7 + 129, // $03F8 + 128, // $03F9 + 128, // $03FA + 129, // $03FB + 129, // $03FC + 128, // $03FD + 128, // $03FE + 128, // $03FF + 128, // $0400 + 128, // $0401 + 128, // $0402 + 128, // $0403 + 128, // $0404 + 128, // $0405 + 128, // $0406 + 128, // $0407 + 128, // $0408 + 128, // $0409 + 128, // $040A + 128, // $040B + 128, // $040C + 128, // $040D + 128, // $040E + 128, // $040F + 128, // $0410 + 128, // $0411 + 128, // $0412 + 128, // $0413 + 128, // $0414 + 128, // $0415 + 128, // $0416 + 128, // $0417 + 128, // $0418 + 128, // $0419 + 128, // $041A + 128, // $041B + 128, // $041C + 128, // $041D + 128, // $041E + 128, // $041F + 128, // $0420 + 128, // $0421 + 128, // $0422 + 128, // $0423 + 128, // $0424 + 128, // $0425 + 128, // $0426 + 128, // $0427 + 128, // $0428 + 128, // $0429 + 128, // $042A + 128, // $042B + 128, // $042C + 128, // $042D + 128, // $042E + 128, // $042F + 129, // $0430 + 129, // $0431 + 129, // $0432 + 129, // $0433 + 129, // $0434 + 129, // $0435 + 129, // $0436 + 129, // $0437 + 129, // $0438 + 129, // $0439 + 129, // $043A + 129, // $043B + 129, // $043C + 129, // $043D + 129, // $043E + 129, // $043F + 129, // $0440 + 129, // $0441 + 129, // $0442 + 129, // $0443 + 129, // $0444 + 129, // $0445 + 129, // $0446 + 129, // $0447 + 129, // $0448 + 129, // $0449 + 129, // $044A + 129, // $044B + 129, // $044C + 129, // $044D + 129, // $044E + 129, // $044F + 129, // $0450 + 129, // $0451 + 129, // $0452 + 129, // $0453 + 129, // $0454 + 129, // $0455 + 129, // $0456 + 129, // $0457 + 129, // $0458 + 129, // $0459 + 129, // $045A + 129, // $045B + 129, // $045C + 129, // $045D + 129, // $045E + 129, // $045F + 128, // $0460 + 129, // $0461 + 128, // $0462 + 129, // $0463 + 128, // $0464 + 129, // $0465 + 128, // $0466 + 129, // $0467 + 128, // $0468 + 129, // $0469 + 128, // $046A + 129, // $046B + 128, // $046C + 129, // $046D + 128, // $046E + 129, // $046F + 128, // $0470 + 129, // $0471 + 128, // $0472 + 129, // $0473 + 128, // $0474 + 129, // $0475 + 128, // $0476 + 129, // $0477 + 128, // $0478 + 129, // $0479 + 128, // $047A + 129, // $047B + 128, // $047C + 129, // $047D + 128, // $047E + 129, // $047F + 128, // $0480 + 129, // $0481 + 21, // $0482 + 133, // $0483 + 133, // $0484 + 133, // $0485 + 133, // $0486 + 133, // $0487 + 135, // $0488 + 135, // $0489 + 128, // $048A + 129, // $048B + 128, // $048C + 129, // $048D + 128, // $048E + 129, // $048F + 128, // $0490 + 129, // $0491 + 128, // $0492 + 129, // $0493 + 128, // $0494 + 129, // $0495 + 128, // $0496 + 129, // $0497 + 128, // $0498 + 129, // $0499 + 128, // $049A + 129, // $049B + 128, // $049C + 129, // $049D + 128, // $049E + 129, // $049F + 128, // $04A0 + 129, // $04A1 + 128, // $04A2 + 129, // $04A3 + 128, // $04A4 + 129, // $04A5 + 128, // $04A6 + 129, // $04A7 + 128, // $04A8 + 129, // $04A9 + 128, // $04AA + 129, // $04AB + 128, // $04AC + 129, // $04AD + 128, // $04AE + 129, // $04AF + 128, // $04B0 + 129, // $04B1 + 128, // $04B2 + 129, // $04B3 + 128, // $04B4 + 129, // $04B5 + 128, // $04B6 + 129, // $04B7 + 128, // $04B8 + 129, // $04B9 + 128, // $04BA + 129, // $04BB + 128, // $04BC + 129, // $04BD + 128, // $04BE + 129, // $04BF + 128, // $04C0 + 128, // $04C1 + 129, // $04C2 + 128, // $04C3 + 129, // $04C4 + 128, // $04C5 + 129, // $04C6 + 128, // $04C7 + 129, // $04C8 + 128, // $04C9 + 129, // $04CA + 128, // $04CB + 129, // $04CC + 128, // $04CD + 129, // $04CE + 129, // $04CF + 128, // $04D0 + 129, // $04D1 + 128, // $04D2 + 129, // $04D3 + 128, // $04D4 + 129, // $04D5 + 128, // $04D6 + 129, // $04D7 + 128, // $04D8 + 129, // $04D9 + 128, // $04DA + 129, // $04DB + 128, // $04DC + 129, // $04DD + 128, // $04DE + 129, // $04DF + 128, // $04E0 + 129, // $04E1 + 128, // $04E2 + 129, // $04E3 + 128, // $04E4 + 129, // $04E5 + 128, // $04E6 + 129, // $04E7 + 128, // $04E8 + 129, // $04E9 + 128, // $04EA + 129, // $04EB + 128, // $04EC + 129, // $04ED + 128, // $04EE + 129, // $04EF + 128, // $04F0 + 129, // $04F1 + 128, // $04F2 + 129, // $04F3 + 128, // $04F4 + 129, // $04F5 + 128, // $04F6 + 129, // $04F7 + 128, // $04F8 + 129, // $04F9 + 128, // $04FA + 129, // $04FB + 128, // $04FC + 129, // $04FD + 128, // $04FE + 129, // $04FF + 128, // $0500 + 129, // $0501 + 128, // $0502 + 129, // $0503 + 128, // $0504 + 129, // $0505 + 128, // $0506 + 129, // $0507 + 128, // $0508 + 129, // $0509 + 128, // $050A + 129, // $050B + 128, // $050C + 129, // $050D + 128, // $050E + 129, // $050F + 128, // $0510 + 129, // $0511 + 128, // $0512 + 129, // $0513 + 128, // $0514 + 129, // $0515 + 128, // $0516 + 129, // $0517 + 128, // $0518 + 129, // $0519 + 128, // $051A + 129, // $051B + 128, // $051C + 129, // $051D + 128, // $051E + 129, // $051F + 128, // $0520 + 129, // $0521 + 128, // $0522 + 129, // $0523 + 128, // $0524 + 129, // $0525 + 128, // $0526 + 129, // $0527 + 128, // $0528 + 129, // $0529 + 128, // $052A + 129, // $052B + 128, // $052C + 129, // $052D + 128, // $052E + 129, // $052F + 29, // $0530 + 128, // $0531 + 128, // $0532 + 128, // $0533 + 128, // $0534 + 128, // $0535 + 128, // $0536 + 128, // $0537 + 128, // $0538 + 128, // $0539 + 128, // $053A + 128, // $053B + 128, // $053C + 128, // $053D + 128, // $053E + 128, // $053F + 128, // $0540 + 128, // $0541 + 128, // $0542 + 128, // $0543 + 128, // $0544 + 128, // $0545 + 128, // $0546 + 128, // $0547 + 128, // $0548 + 128, // $0549 + 128, // $054A + 128, // $054B + 128, // $054C + 128, // $054D + 128, // $054E + 128, // $054F + 128, // $0550 + 128, // $0551 + 128, // $0552 + 128, // $0553 + 128, // $0554 + 128, // $0555 + 128, // $0556 + 29, // $0557 + 29, // $0558 + 131, // $0559 + 17, // $055A + 17, // $055B + 17, // $055C + 17, // $055D + 17, // $055E + 17, // $055F + 29, // $0560 + 129, // $0561 + 129, // $0562 + 129, // $0563 + 129, // $0564 + 129, // $0565 + 129, // $0566 + 129, // $0567 + 129, // $0568 + 129, // $0569 + 129, // $056A + 129, // $056B + 129, // $056C + 129, // $056D + 129, // $056E + 129, // $056F + 129, // $0570 + 129, // $0571 + 129, // $0572 + 129, // $0573 + 129, // $0574 + 129, // $0575 + 129, // $0576 + 129, // $0577 + 129, // $0578 + 129, // $0579 + 129, // $057A + 129, // $057B + 129, // $057C + 129, // $057D + 129, // $057E + 129, // $057F + 129, // $0580 + 129, // $0581 + 129, // $0582 + 129, // $0583 + 129, // $0584 + 129, // $0585 + 129, // $0586 + 129, // $0587 + 29, // $0588 + 17, // $0589 + 12, // $058A + 29, // $058B + 29, // $058C + 21, // $058D + 21, // $058E + 19, // $058F + 29, // $0590 + 133, // $0591 + 133, // $0592 + 133, // $0593 + 133, // $0594 + 133, // $0595 + 133, // $0596 + 133, // $0597 + 133, // $0598 + 133, // $0599 + 133, // $059A + 133, // $059B + 133, // $059C + 133, // $059D + 133, // $059E + 133, // $059F + 133, // $05A0 + 133, // $05A1 + 133, // $05A2 + 133, // $05A3 + 133, // $05A4 + 133, // $05A5 + 133, // $05A6 + 133, // $05A7 + 133, // $05A8 + 133, // $05A9 + 133, // $05AA + 133, // $05AB + 133, // $05AC + 133, // $05AD + 133, // $05AE + 133, // $05AF + 133, // $05B0 + 133, // $05B1 + 133, // $05B2 + 133, // $05B3 + 133, // $05B4 + 133, // $05B5 + 133, // $05B6 + 133, // $05B7 + 133, // $05B8 + 133, // $05B9 + 133, // $05BA + 133, // $05BB + 133, // $05BC + 133, // $05BD + 12, // $05BE + 133, // $05BF + 17, // $05C0 + 133, // $05C1 + 133, // $05C2 + 17, // $05C3 + 133, // $05C4 + 133, // $05C5 + 17, // $05C6 + 133, // $05C7 + 29, // $05C8 + 29, // $05C9 + 29, // $05CA + 29, // $05CB + 29, // $05CC + 29, // $05CD + 29, // $05CE + 29, // $05CF + 132, // $05D0 + 132, // $05D1 + 132, // $05D2 + 132, // $05D3 + 132, // $05D4 + 132, // $05D5 + 132, // $05D6 + 132, // $05D7 + 132, // $05D8 + 132, // $05D9 + 132, // $05DA + 132, // $05DB + 132, // $05DC + 132, // $05DD + 132, // $05DE + 132, // $05DF + 132, // $05E0 + 132, // $05E1 + 132, // $05E2 + 132, // $05E3 + 132, // $05E4 + 132, // $05E5 + 132, // $05E6 + 132, // $05E7 + 132, // $05E8 + 132, // $05E9 + 132, // $05EA + 29, // $05EB + 29, // $05EC + 29, // $05ED + 29, // $05EE + 29, // $05EF + 132, // $05F0 + 132, // $05F1 + 132, // $05F2 + 17, // $05F3 + 17, // $05F4 + 29, // $05F5 + 29, // $05F6 + 29, // $05F7 + 29, // $05F8 + 29, // $05F9 + 29, // $05FA + 29, // $05FB + 29, // $05FC + 29, // $05FD + 29, // $05FE + 29, // $05FF + 26, // $0600 + 26, // $0601 + 26, // $0602 + 26, // $0603 + 26, // $0604 + 26, // $0605 + 18, // $0606 + 18, // $0607 + 18, // $0608 + 17, // $0609 + 17, // $060A + 19, // $060B + 17, // $060C + 17, // $060D + 21, // $060E + 21, // $060F + 133, // $0610 + 133, // $0611 + 133, // $0612 + 133, // $0613 + 133, // $0614 + 133, // $0615 + 133, // $0616 + 133, // $0617 + 133, // $0618 + 133, // $0619 + 133, // $061A + 17, // $061B + 26, // $061C + 29, // $061D + 17, // $061E + 17, // $061F + 132, // $0620 + 132, // $0621 + 132, // $0622 + 132, // $0623 + 132, // $0624 + 132, // $0625 + 132, // $0626 + 132, // $0627 + 132, // $0628 + 132, // $0629 + 132, // $062A + 132, // $062B + 132, // $062C + 132, // $062D + 132, // $062E + 132, // $062F + 132, // $0630 + 132, // $0631 + 132, // $0632 + 132, // $0633 + 132, // $0634 + 132, // $0635 + 132, // $0636 + 132, // $0637 + 132, // $0638 + 132, // $0639 + 132, // $063A + 132, // $063B + 132, // $063C + 132, // $063D + 132, // $063E + 132, // $063F + 131, // $0640 + 132, // $0641 + 132, // $0642 + 132, // $0643 + 132, // $0644 + 132, // $0645 + 132, // $0646 + 132, // $0647 + 132, // $0648 + 132, // $0649 + 132, // $064A + 133, // $064B + 133, // $064C + 133, // $064D + 133, // $064E + 133, // $064F + 133, // $0650 + 133, // $0651 + 133, // $0652 + 133, // $0653 + 133, // $0654 + 133, // $0655 + 133, // $0656 + 133, // $0657 + 133, // $0658 + 133, // $0659 + 133, // $065A + 133, // $065B + 133, // $065C + 133, // $065D + 133, // $065E + 133, // $065F + 136, // $0660 + 136, // $0661 + 136, // $0662 + 136, // $0663 + 136, // $0664 + 136, // $0665 + 136, // $0666 + 136, // $0667 + 136, // $0668 + 136, // $0669 + 17, // $066A + 17, // $066B + 17, // $066C + 17, // $066D + 132, // $066E + 132, // $066F + 133, // $0670 + 132, // $0671 + 132, // $0672 + 132, // $0673 + 132, // $0674 + 132, // $0675 + 132, // $0676 + 132, // $0677 + 132, // $0678 + 132, // $0679 + 132, // $067A + 132, // $067B + 132, // $067C + 132, // $067D + 132, // $067E + 132, // $067F + 132, // $0680 + 132, // $0681 + 132, // $0682 + 132, // $0683 + 132, // $0684 + 132, // $0685 + 132, // $0686 + 132, // $0687 + 132, // $0688 + 132, // $0689 + 132, // $068A + 132, // $068B + 132, // $068C + 132, // $068D + 132, // $068E + 132, // $068F + 132, // $0690 + 132, // $0691 + 132, // $0692 + 132, // $0693 + 132, // $0694 + 132, // $0695 + 132, // $0696 + 132, // $0697 + 132, // $0698 + 132, // $0699 + 132, // $069A + 132, // $069B + 132, // $069C + 132, // $069D + 132, // $069E + 132, // $069F + 132, // $06A0 + 132, // $06A1 + 132, // $06A2 + 132, // $06A3 + 132, // $06A4 + 132, // $06A5 + 132, // $06A6 + 132, // $06A7 + 132, // $06A8 + 132, // $06A9 + 132, // $06AA + 132, // $06AB + 132, // $06AC + 132, // $06AD + 132, // $06AE + 132, // $06AF + 132, // $06B0 + 132, // $06B1 + 132, // $06B2 + 132, // $06B3 + 132, // $06B4 + 132, // $06B5 + 132, // $06B6 + 132, // $06B7 + 132, // $06B8 + 132, // $06B9 + 132, // $06BA + 132, // $06BB + 132, // $06BC + 132, // $06BD + 132, // $06BE + 132, // $06BF + 132, // $06C0 + 132, // $06C1 + 132, // $06C2 + 132, // $06C3 + 132, // $06C4 + 132, // $06C5 + 132, // $06C6 + 132, // $06C7 + 132, // $06C8 + 132, // $06C9 + 132, // $06CA + 132, // $06CB + 132, // $06CC + 132, // $06CD + 132, // $06CE + 132, // $06CF + 132, // $06D0 + 132, // $06D1 + 132, // $06D2 + 132, // $06D3 + 17, // $06D4 + 132, // $06D5 + 133, // $06D6 + 133, // $06D7 + 133, // $06D8 + 133, // $06D9 + 133, // $06DA + 133, // $06DB + 133, // $06DC + 26, // $06DD + 21, // $06DE + 133, // $06DF + 133, // $06E0 + 133, // $06E1 + 133, // $06E2 + 133, // $06E3 + 133, // $06E4 + 131, // $06E5 + 131, // $06E6 + 133, // $06E7 + 133, // $06E8 + 21, // $06E9 + 133, // $06EA + 133, // $06EB + 133, // $06EC + 133, // $06ED + 132, // $06EE + 132, // $06EF + 136, // $06F0 + 136, // $06F1 + 136, // $06F2 + 136, // $06F3 + 136, // $06F4 + 136, // $06F5 + 136, // $06F6 + 136, // $06F7 + 136, // $06F8 + 136, // $06F9 + 132, // $06FA + 132, // $06FB + 132, // $06FC + 21, // $06FD + 21, // $06FE + 132, // $06FF + 17, // $0700 + 17, // $0701 + 17, // $0702 + 17, // $0703 + 17, // $0704 + 17, // $0705 + 17, // $0706 + 17, // $0707 + 17, // $0708 + 17, // $0709 + 17, // $070A + 17, // $070B + 17, // $070C + 17, // $070D + 29, // $070E + 26, // $070F + 132, // $0710 + 133, // $0711 + 132, // $0712 + 132, // $0713 + 132, // $0714 + 132, // $0715 + 132, // $0716 + 132, // $0717 + 132, // $0718 + 132, // $0719 + 132, // $071A + 132, // $071B + 132, // $071C + 132, // $071D + 132, // $071E + 132, // $071F + 132, // $0720 + 132, // $0721 + 132, // $0722 + 132, // $0723 + 132, // $0724 + 132, // $0725 + 132, // $0726 + 132, // $0727 + 132, // $0728 + 132, // $0729 + 132, // $072A + 132, // $072B + 132, // $072C + 132, // $072D + 132, // $072E + 132, // $072F + 133, // $0730 + 133, // $0731 + 133, // $0732 + 133, // $0733 + 133, // $0734 + 133, // $0735 + 133, // $0736 + 133, // $0737 + 133, // $0738 + 133, // $0739 + 133, // $073A + 133, // $073B + 133, // $073C + 133, // $073D + 133, // $073E + 133, // $073F + 133, // $0740 + 133, // $0741 + 133, // $0742 + 133, // $0743 + 133, // $0744 + 133, // $0745 + 133, // $0746 + 133, // $0747 + 133, // $0748 + 133, // $0749 + 133, // $074A + 29, // $074B + 29, // $074C + 132, // $074D + 132, // $074E + 132, // $074F + 132, // $0750 + 132, // $0751 + 132, // $0752 + 132, // $0753 + 132, // $0754 + 132, // $0755 + 132, // $0756 + 132, // $0757 + 132, // $0758 + 132, // $0759 + 132, // $075A + 132, // $075B + 132, // $075C + 132, // $075D + 132, // $075E + 132, // $075F + 132, // $0760 + 132, // $0761 + 132, // $0762 + 132, // $0763 + 132, // $0764 + 132, // $0765 + 132, // $0766 + 132, // $0767 + 132, // $0768 + 132, // $0769 + 132, // $076A + 132, // $076B + 132, // $076C + 132, // $076D + 132, // $076E + 132, // $076F + 132, // $0770 + 132, // $0771 + 132, // $0772 + 132, // $0773 + 132, // $0774 + 132, // $0775 + 132, // $0776 + 132, // $0777 + 132, // $0778 + 132, // $0779 + 132, // $077A + 132, // $077B + 132, // $077C + 132, // $077D + 132, // $077E + 132, // $077F + 132, // $0780 + 132, // $0781 + 132, // $0782 + 132, // $0783 + 132, // $0784 + 132, // $0785 + 132, // $0786 + 132, // $0787 + 132, // $0788 + 132, // $0789 + 132, // $078A + 132, // $078B + 132, // $078C + 132, // $078D + 132, // $078E + 132, // $078F + 132, // $0790 + 132, // $0791 + 132, // $0792 + 132, // $0793 + 132, // $0794 + 132, // $0795 + 132, // $0796 + 132, // $0797 + 132, // $0798 + 132, // $0799 + 132, // $079A + 132, // $079B + 132, // $079C + 132, // $079D + 132, // $079E + 132, // $079F + 132, // $07A0 + 132, // $07A1 + 132, // $07A2 + 132, // $07A3 + 132, // $07A4 + 132, // $07A5 + 133, // $07A6 + 133, // $07A7 + 133, // $07A8 + 133, // $07A9 + 133, // $07AA + 133, // $07AB + 133, // $07AC + 133, // $07AD + 133, // $07AE + 133, // $07AF + 133, // $07B0 + 132, // $07B1 + 29, // $07B2 + 29, // $07B3 + 29, // $07B4 + 29, // $07B5 + 29, // $07B6 + 29, // $07B7 + 29, // $07B8 + 29, // $07B9 + 29, // $07BA + 29, // $07BB + 29, // $07BC + 29, // $07BD + 29, // $07BE + 29, // $07BF + 136, // $07C0 + 136, // $07C1 + 136, // $07C2 + 136, // $07C3 + 136, // $07C4 + 136, // $07C5 + 136, // $07C6 + 136, // $07C7 + 136, // $07C8 + 136, // $07C9 + 132, // $07CA + 132, // $07CB + 132, // $07CC + 132, // $07CD + 132, // $07CE + 132, // $07CF + 132, // $07D0 + 132, // $07D1 + 132, // $07D2 + 132, // $07D3 + 132, // $07D4 + 132, // $07D5 + 132, // $07D6 + 132, // $07D7 + 132, // $07D8 + 132, // $07D9 + 132, // $07DA + 132, // $07DB + 132, // $07DC + 132, // $07DD + 132, // $07DE + 132, // $07DF + 132, // $07E0 + 132, // $07E1 + 132, // $07E2 + 132, // $07E3 + 132, // $07E4 + 132, // $07E5 + 132, // $07E6 + 132, // $07E7 + 132, // $07E8 + 132, // $07E9 + 132, // $07EA + 133, // $07EB + 133, // $07EC + 133, // $07ED + 133, // $07EE + 133, // $07EF + 133, // $07F0 + 133, // $07F1 + 133, // $07F2 + 133, // $07F3 + 131, // $07F4 + 131, // $07F5 + 21, // $07F6 + 17, // $07F7 + 17, // $07F8 + 17, // $07F9 + 131, // $07FA + 29, // $07FB + 29, // $07FC + 29, // $07FD + 29, // $07FE + 29, // $07FF + 132, // $0800 + 132, // $0801 + 132, // $0802 + 132, // $0803 + 132, // $0804 + 132, // $0805 + 132, // $0806 + 132, // $0807 + 132, // $0808 + 132, // $0809 + 132, // $080A + 132, // $080B + 132, // $080C + 132, // $080D + 132, // $080E + 132, // $080F + 132, // $0810 + 132, // $0811 + 132, // $0812 + 132, // $0813 + 132, // $0814 + 132, // $0815 + 133, // $0816 + 133, // $0817 + 133, // $0818 + 133, // $0819 + 131, // $081A + 133, // $081B + 133, // $081C + 133, // $081D + 133, // $081E + 133, // $081F + 133, // $0820 + 133, // $0821 + 133, // $0822 + 133, // $0823 + 131, // $0824 + 133, // $0825 + 133, // $0826 + 133, // $0827 + 131, // $0828 + 133, // $0829 + 133, // $082A + 133, // $082B + 133, // $082C + 133, // $082D + 29, // $082E + 29, // $082F + 17, // $0830 + 17, // $0831 + 17, // $0832 + 17, // $0833 + 17, // $0834 + 17, // $0835 + 17, // $0836 + 17, // $0837 + 17, // $0838 + 17, // $0839 + 17, // $083A + 17, // $083B + 17, // $083C + 17, // $083D + 17, // $083E + 29, // $083F + 132, // $0840 + 132, // $0841 + 132, // $0842 + 132, // $0843 + 132, // $0844 + 132, // $0845 + 132, // $0846 + 132, // $0847 + 132, // $0848 + 132, // $0849 + 132, // $084A + 132, // $084B + 132, // $084C + 132, // $084D + 132, // $084E + 132, // $084F + 132, // $0850 + 132, // $0851 + 132, // $0852 + 132, // $0853 + 132, // $0854 + 132, // $0855 + 132, // $0856 + 132, // $0857 + 132, // $0858 + 133, // $0859 + 133, // $085A + 133, // $085B + 29, // $085C + 29, // $085D + 17, // $085E + 29, // $085F + 29, // $0860 + 29, // $0861 + 29, // $0862 + 29, // $0863 + 29, // $0864 + 29, // $0865 + 29, // $0866 + 29, // $0867 + 29, // $0868 + 29, // $0869 + 29, // $086A + 29, // $086B + 29, // $086C + 29, // $086D + 29, // $086E + 29, // $086F + 29, // $0870 + 29, // $0871 + 29, // $0872 + 29, // $0873 + 29, // $0874 + 29, // $0875 + 29, // $0876 + 29, // $0877 + 29, // $0878 + 29, // $0879 + 29, // $087A + 29, // $087B + 29, // $087C + 29, // $087D + 29, // $087E + 29, // $087F + 29, // $0880 + 29, // $0881 + 29, // $0882 + 29, // $0883 + 29, // $0884 + 29, // $0885 + 29, // $0886 + 29, // $0887 + 29, // $0888 + 29, // $0889 + 29, // $088A + 29, // $088B + 29, // $088C + 29, // $088D + 29, // $088E + 29, // $088F + 29, // $0890 + 29, // $0891 + 29, // $0892 + 29, // $0893 + 29, // $0894 + 29, // $0895 + 29, // $0896 + 29, // $0897 + 29, // $0898 + 29, // $0899 + 29, // $089A + 29, // $089B + 29, // $089C + 29, // $089D + 29, // $089E + 29, // $089F + 132, // $08A0 + 132, // $08A1 + 132, // $08A2 + 132, // $08A3 + 132, // $08A4 + 132, // $08A5 + 132, // $08A6 + 132, // $08A7 + 132, // $08A8 + 132, // $08A9 + 132, // $08AA + 132, // $08AB + 132, // $08AC + 132, // $08AD + 132, // $08AE + 132, // $08AF + 132, // $08B0 + 132, // $08B1 + 132, // $08B2 + 132, // $08B3 + 132, // $08B4 + 29, // $08B5 + 132, // $08B6 + 132, // $08B7 + 132, // $08B8 + 132, // $08B9 + 132, // $08BA + 132, // $08BB + 132, // $08BC + 132, // $08BD + 29, // $08BE + 29, // $08BF + 29, // $08C0 + 29, // $08C1 + 29, // $08C2 + 29, // $08C3 + 29, // $08C4 + 29, // $08C5 + 29, // $08C6 + 29, // $08C7 + 29, // $08C8 + 29, // $08C9 + 29, // $08CA + 29, // $08CB + 29, // $08CC + 29, // $08CD + 29, // $08CE + 29, // $08CF + 29, // $08D0 + 29, // $08D1 + 29, // $08D2 + 29, // $08D3 + 133, // $08D4 + 133, // $08D5 + 133, // $08D6 + 133, // $08D7 + 133, // $08D8 + 133, // $08D9 + 133, // $08DA + 133, // $08DB + 133, // $08DC + 133, // $08DD + 133, // $08DE + 133, // $08DF + 133, // $08E0 + 133, // $08E1 + 26, // $08E2 + 133, // $08E3 + 133, // $08E4 + 133, // $08E5 + 133, // $08E6 + 133, // $08E7 + 133, // $08E8 + 133, // $08E9 + 133, // $08EA + 133, // $08EB + 133, // $08EC + 133, // $08ED + 133, // $08EE + 133, // $08EF + 133, // $08F0 + 133, // $08F1 + 133, // $08F2 + 133, // $08F3 + 133, // $08F4 + 133, // $08F5 + 133, // $08F6 + 133, // $08F7 + 133, // $08F8 + 133, // $08F9 + 133, // $08FA + 133, // $08FB + 133, // $08FC + 133, // $08FD + 133, // $08FE + 133, // $08FF + 133, // $0900 + 133, // $0901 + 133, // $0902 + 134, // $0903 + 132, // $0904 + 132, // $0905 + 132, // $0906 + 132, // $0907 + 132, // $0908 + 132, // $0909 + 132, // $090A + 132, // $090B + 132, // $090C + 132, // $090D + 132, // $090E + 132, // $090F + 132, // $0910 + 132, // $0911 + 132, // $0912 + 132, // $0913 + 132, // $0914 + 132, // $0915 + 132, // $0916 + 132, // $0917 + 132, // $0918 + 132, // $0919 + 132, // $091A + 132, // $091B + 132, // $091C + 132, // $091D + 132, // $091E + 132, // $091F + 132, // $0920 + 132, // $0921 + 132, // $0922 + 132, // $0923 + 132, // $0924 + 132, // $0925 + 132, // $0926 + 132, // $0927 + 132, // $0928 + 132, // $0929 + 132, // $092A + 132, // $092B + 132, // $092C + 132, // $092D + 132, // $092E + 132, // $092F + 132, // $0930 + 132, // $0931 + 132, // $0932 + 132, // $0933 + 132, // $0934 + 132, // $0935 + 132, // $0936 + 132, // $0937 + 132, // $0938 + 132, // $0939 + 133, // $093A + 134, // $093B + 133, // $093C + 132, // $093D + 134, // $093E + 134, // $093F + 134, // $0940 + 133, // $0941 + 133, // $0942 + 133, // $0943 + 133, // $0944 + 133, // $0945 + 133, // $0946 + 133, // $0947 + 133, // $0948 + 134, // $0949 + 134, // $094A + 134, // $094B + 134, // $094C + 133, // $094D + 134, // $094E + 134, // $094F + 132, // $0950 + 133, // $0951 + 133, // $0952 + 133, // $0953 + 133, // $0954 + 133, // $0955 + 133, // $0956 + 133, // $0957 + 132, // $0958 + 132, // $0959 + 132, // $095A + 132, // $095B + 132, // $095C + 132, // $095D + 132, // $095E + 132, // $095F + 132, // $0960 + 132, // $0961 + 133, // $0962 + 133, // $0963 + 17, // $0964 + 17, // $0965 + 136, // $0966 + 136, // $0967 + 136, // $0968 + 136, // $0969 + 136, // $096A + 136, // $096B + 136, // $096C + 136, // $096D + 136, // $096E + 136, // $096F + 17, // $0970 + 131, // $0971 + 132, // $0972 + 132, // $0973 + 132, // $0974 + 132, // $0975 + 132, // $0976 + 132, // $0977 + 132, // $0978 + 132, // $0979 + 132, // $097A + 132, // $097B + 132, // $097C + 132, // $097D + 132, // $097E + 132, // $097F + 132, // $0980 + 133, // $0981 + 134, // $0982 + 134, // $0983 + 29, // $0984 + 132, // $0985 + 132, // $0986 + 132, // $0987 + 132, // $0988 + 132, // $0989 + 132, // $098A + 132, // $098B + 132, // $098C + 29, // $098D + 29, // $098E + 132, // $098F + 132, // $0990 + 29, // $0991 + 29, // $0992 + 132, // $0993 + 132, // $0994 + 132, // $0995 + 132, // $0996 + 132, // $0997 + 132, // $0998 + 132, // $0999 + 132, // $099A + 132, // $099B + 132, // $099C + 132, // $099D + 132, // $099E + 132, // $099F + 132, // $09A0 + 132, // $09A1 + 132, // $09A2 + 132, // $09A3 + 132, // $09A4 + 132, // $09A5 + 132, // $09A6 + 132, // $09A7 + 132, // $09A8 + 29, // $09A9 + 132, // $09AA + 132, // $09AB + 132, // $09AC + 132, // $09AD + 132, // $09AE + 132, // $09AF + 132, // $09B0 + 29, // $09B1 + 132, // $09B2 + 29, // $09B3 + 29, // $09B4 + 29, // $09B5 + 132, // $09B6 + 132, // $09B7 + 132, // $09B8 + 132, // $09B9 + 29, // $09BA + 29, // $09BB + 133, // $09BC + 132, // $09BD + 134, // $09BE + 134, // $09BF + 134, // $09C0 + 133, // $09C1 + 133, // $09C2 + 133, // $09C3 + 133, // $09C4 + 29, // $09C5 + 29, // $09C6 + 134, // $09C7 + 134, // $09C8 + 29, // $09C9 + 29, // $09CA + 134, // $09CB + 134, // $09CC + 133, // $09CD + 132, // $09CE + 29, // $09CF + 29, // $09D0 + 29, // $09D1 + 29, // $09D2 + 29, // $09D3 + 29, // $09D4 + 29, // $09D5 + 29, // $09D6 + 134, // $09D7 + 29, // $09D8 + 29, // $09D9 + 29, // $09DA + 29, // $09DB + 132, // $09DC + 132, // $09DD + 29, // $09DE + 132, // $09DF + 132, // $09E0 + 132, // $09E1 + 133, // $09E2 + 133, // $09E3 + 29, // $09E4 + 29, // $09E5 + 136, // $09E6 + 136, // $09E7 + 136, // $09E8 + 136, // $09E9 + 136, // $09EA + 136, // $09EB + 136, // $09EC + 136, // $09ED + 136, // $09EE + 136, // $09EF + 132, // $09F0 + 132, // $09F1 + 19, // $09F2 + 19, // $09F3 + 138, // $09F4 + 138, // $09F5 + 138, // $09F6 + 138, // $09F7 + 138, // $09F8 + 138, // $09F9 + 21, // $09FA + 19, // $09FB + 29, // $09FC + 29, // $09FD + 29, // $09FE + 29, // $09FF + 29, // $0A00 + 133, // $0A01 + 133, // $0A02 + 134, // $0A03 + 29, // $0A04 + 132, // $0A05 + 132, // $0A06 + 132, // $0A07 + 132, // $0A08 + 132, // $0A09 + 132, // $0A0A + 29, // $0A0B + 29, // $0A0C + 29, // $0A0D + 29, // $0A0E + 132, // $0A0F + 132, // $0A10 + 29, // $0A11 + 29, // $0A12 + 132, // $0A13 + 132, // $0A14 + 132, // $0A15 + 132, // $0A16 + 132, // $0A17 + 132, // $0A18 + 132, // $0A19 + 132, // $0A1A + 132, // $0A1B + 132, // $0A1C + 132, // $0A1D + 132, // $0A1E + 132, // $0A1F + 132, // $0A20 + 132, // $0A21 + 132, // $0A22 + 132, // $0A23 + 132, // $0A24 + 132, // $0A25 + 132, // $0A26 + 132, // $0A27 + 132, // $0A28 + 29, // $0A29 + 132, // $0A2A + 132, // $0A2B + 132, // $0A2C + 132, // $0A2D + 132, // $0A2E + 132, // $0A2F + 132, // $0A30 + 29, // $0A31 + 132, // $0A32 + 132, // $0A33 + 29, // $0A34 + 132, // $0A35 + 132, // $0A36 + 29, // $0A37 + 132, // $0A38 + 132, // $0A39 + 29, // $0A3A + 29, // $0A3B + 133, // $0A3C + 29, // $0A3D + 134, // $0A3E + 134, // $0A3F + 134, // $0A40 + 133, // $0A41 + 133, // $0A42 + 29, // $0A43 + 29, // $0A44 + 29, // $0A45 + 29, // $0A46 + 133, // $0A47 + 133, // $0A48 + 29, // $0A49 + 29, // $0A4A + 133, // $0A4B + 133, // $0A4C + 133, // $0A4D + 29, // $0A4E + 29, // $0A4F + 29, // $0A50 + 133, // $0A51 + 29, // $0A52 + 29, // $0A53 + 29, // $0A54 + 29, // $0A55 + 29, // $0A56 + 29, // $0A57 + 29, // $0A58 + 132, // $0A59 + 132, // $0A5A + 132, // $0A5B + 132, // $0A5C + 29, // $0A5D + 132, // $0A5E + 29, // $0A5F + 29, // $0A60 + 29, // $0A61 + 29, // $0A62 + 29, // $0A63 + 29, // $0A64 + 29, // $0A65 + 136, // $0A66 + 136, // $0A67 + 136, // $0A68 + 136, // $0A69 + 136, // $0A6A + 136, // $0A6B + 136, // $0A6C + 136, // $0A6D + 136, // $0A6E + 136, // $0A6F + 133, // $0A70 + 133, // $0A71 + 132, // $0A72 + 132, // $0A73 + 132, // $0A74 + 133, // $0A75 + 29, // $0A76 + 29, // $0A77 + 29, // $0A78 + 29, // $0A79 + 29, // $0A7A + 29, // $0A7B + 29, // $0A7C + 29, // $0A7D + 29, // $0A7E + 29, // $0A7F + 29, // $0A80 + 133, // $0A81 + 133, // $0A82 + 134, // $0A83 + 29, // $0A84 + 132, // $0A85 + 132, // $0A86 + 132, // $0A87 + 132, // $0A88 + 132, // $0A89 + 132, // $0A8A + 132, // $0A8B + 132, // $0A8C + 132, // $0A8D + 29, // $0A8E + 132, // $0A8F + 132, // $0A90 + 132, // $0A91 + 29, // $0A92 + 132, // $0A93 + 132, // $0A94 + 132, // $0A95 + 132, // $0A96 + 132, // $0A97 + 132, // $0A98 + 132, // $0A99 + 132, // $0A9A + 132, // $0A9B + 132, // $0A9C + 132, // $0A9D + 132, // $0A9E + 132, // $0A9F + 132, // $0AA0 + 132, // $0AA1 + 132, // $0AA2 + 132, // $0AA3 + 132, // $0AA4 + 132, // $0AA5 + 132, // $0AA6 + 132, // $0AA7 + 132, // $0AA8 + 29, // $0AA9 + 132, // $0AAA + 132, // $0AAB + 132, // $0AAC + 132, // $0AAD + 132, // $0AAE + 132, // $0AAF + 132, // $0AB0 + 29, // $0AB1 + 132, // $0AB2 + 132, // $0AB3 + 29, // $0AB4 + 132, // $0AB5 + 132, // $0AB6 + 132, // $0AB7 + 132, // $0AB8 + 132, // $0AB9 + 29, // $0ABA + 29, // $0ABB + 133, // $0ABC + 132, // $0ABD + 134, // $0ABE + 134, // $0ABF + 134, // $0AC0 + 133, // $0AC1 + 133, // $0AC2 + 133, // $0AC3 + 133, // $0AC4 + 133, // $0AC5 + 29, // $0AC6 + 133, // $0AC7 + 133, // $0AC8 + 134, // $0AC9 + 29, // $0ACA + 134, // $0ACB + 134, // $0ACC + 133, // $0ACD + 29, // $0ACE + 29, // $0ACF + 132, // $0AD0 + 29, // $0AD1 + 29, // $0AD2 + 29, // $0AD3 + 29, // $0AD4 + 29, // $0AD5 + 29, // $0AD6 + 29, // $0AD7 + 29, // $0AD8 + 29, // $0AD9 + 29, // $0ADA + 29, // $0ADB + 29, // $0ADC + 29, // $0ADD + 29, // $0ADE + 29, // $0ADF + 132, // $0AE0 + 132, // $0AE1 + 133, // $0AE2 + 133, // $0AE3 + 29, // $0AE4 + 29, // $0AE5 + 136, // $0AE6 + 136, // $0AE7 + 136, // $0AE8 + 136, // $0AE9 + 136, // $0AEA + 136, // $0AEB + 136, // $0AEC + 136, // $0AED + 136, // $0AEE + 136, // $0AEF + 17, // $0AF0 + 19, // $0AF1 + 29, // $0AF2 + 29, // $0AF3 + 29, // $0AF4 + 29, // $0AF5 + 29, // $0AF6 + 29, // $0AF7 + 29, // $0AF8 + 132, // $0AF9 + 29, // $0AFA + 29, // $0AFB + 29, // $0AFC + 29, // $0AFD + 29, // $0AFE + 29, // $0AFF + 29, // $0B00 + 133, // $0B01 + 134, // $0B02 + 134, // $0B03 + 29, // $0B04 + 132, // $0B05 + 132, // $0B06 + 132, // $0B07 + 132, // $0B08 + 132, // $0B09 + 132, // $0B0A + 132, // $0B0B + 132, // $0B0C + 29, // $0B0D + 29, // $0B0E + 132, // $0B0F + 132, // $0B10 + 29, // $0B11 + 29, // $0B12 + 132, // $0B13 + 132, // $0B14 + 132, // $0B15 + 132, // $0B16 + 132, // $0B17 + 132, // $0B18 + 132, // $0B19 + 132, // $0B1A + 132, // $0B1B + 132, // $0B1C + 132, // $0B1D + 132, // $0B1E + 132, // $0B1F + 132, // $0B20 + 132, // $0B21 + 132, // $0B22 + 132, // $0B23 + 132, // $0B24 + 132, // $0B25 + 132, // $0B26 + 132, // $0B27 + 132, // $0B28 + 29, // $0B29 + 132, // $0B2A + 132, // $0B2B + 132, // $0B2C + 132, // $0B2D + 132, // $0B2E + 132, // $0B2F + 132, // $0B30 + 29, // $0B31 + 132, // $0B32 + 132, // $0B33 + 29, // $0B34 + 132, // $0B35 + 132, // $0B36 + 132, // $0B37 + 132, // $0B38 + 132, // $0B39 + 29, // $0B3A + 29, // $0B3B + 133, // $0B3C + 132, // $0B3D + 134, // $0B3E + 133, // $0B3F + 134, // $0B40 + 133, // $0B41 + 133, // $0B42 + 133, // $0B43 + 133, // $0B44 + 29, // $0B45 + 29, // $0B46 + 134, // $0B47 + 134, // $0B48 + 29, // $0B49 + 29, // $0B4A + 134, // $0B4B + 134, // $0B4C + 133, // $0B4D + 29, // $0B4E + 29, // $0B4F + 29, // $0B50 + 29, // $0B51 + 29, // $0B52 + 29, // $0B53 + 29, // $0B54 + 29, // $0B55 + 133, // $0B56 + 134, // $0B57 + 29, // $0B58 + 29, // $0B59 + 29, // $0B5A + 29, // $0B5B + 132, // $0B5C + 132, // $0B5D + 29, // $0B5E + 132, // $0B5F + 132, // $0B60 + 132, // $0B61 + 133, // $0B62 + 133, // $0B63 + 29, // $0B64 + 29, // $0B65 + 136, // $0B66 + 136, // $0B67 + 136, // $0B68 + 136, // $0B69 + 136, // $0B6A + 136, // $0B6B + 136, // $0B6C + 136, // $0B6D + 136, // $0B6E + 136, // $0B6F + 21, // $0B70 + 132, // $0B71 + 138, // $0B72 + 138, // $0B73 + 138, // $0B74 + 138, // $0B75 + 138, // $0B76 + 138, // $0B77 + 29, // $0B78 + 29, // $0B79 + 29, // $0B7A + 29, // $0B7B + 29, // $0B7C + 29, // $0B7D + 29, // $0B7E + 29, // $0B7F + 29, // $0B80 + 29, // $0B81 + 133, // $0B82 + 132, // $0B83 + 29, // $0B84 + 132, // $0B85 + 132, // $0B86 + 132, // $0B87 + 132, // $0B88 + 132, // $0B89 + 132, // $0B8A + 29, // $0B8B + 29, // $0B8C + 29, // $0B8D + 132, // $0B8E + 132, // $0B8F + 132, // $0B90 + 29, // $0B91 + 132, // $0B92 + 132, // $0B93 + 132, // $0B94 + 132, // $0B95 + 29, // $0B96 + 29, // $0B97 + 29, // $0B98 + 132, // $0B99 + 132, // $0B9A + 29, // $0B9B + 132, // $0B9C + 29, // $0B9D + 132, // $0B9E + 132, // $0B9F + 29, // $0BA0 + 29, // $0BA1 + 29, // $0BA2 + 132, // $0BA3 + 132, // $0BA4 + 29, // $0BA5 + 29, // $0BA6 + 29, // $0BA7 + 132, // $0BA8 + 132, // $0BA9 + 132, // $0BAA + 29, // $0BAB + 29, // $0BAC + 29, // $0BAD + 132, // $0BAE + 132, // $0BAF + 132, // $0BB0 + 132, // $0BB1 + 132, // $0BB2 + 132, // $0BB3 + 132, // $0BB4 + 132, // $0BB5 + 132, // $0BB6 + 132, // $0BB7 + 132, // $0BB8 + 132, // $0BB9 + 29, // $0BBA + 29, // $0BBB + 29, // $0BBC + 29, // $0BBD + 134, // $0BBE + 134, // $0BBF + 133, // $0BC0 + 134, // $0BC1 + 134, // $0BC2 + 29, // $0BC3 + 29, // $0BC4 + 29, // $0BC5 + 134, // $0BC6 + 134, // $0BC7 + 134, // $0BC8 + 29, // $0BC9 + 134, // $0BCA + 134, // $0BCB + 134, // $0BCC + 133, // $0BCD + 29, // $0BCE + 29, // $0BCF + 132, // $0BD0 + 29, // $0BD1 + 29, // $0BD2 + 29, // $0BD3 + 29, // $0BD4 + 29, // $0BD5 + 29, // $0BD6 + 134, // $0BD7 + 29, // $0BD8 + 29, // $0BD9 + 29, // $0BDA + 29, // $0BDB + 29, // $0BDC + 29, // $0BDD + 29, // $0BDE + 29, // $0BDF + 29, // $0BE0 + 29, // $0BE1 + 29, // $0BE2 + 29, // $0BE3 + 29, // $0BE4 + 29, // $0BE5 + 136, // $0BE6 + 136, // $0BE7 + 136, // $0BE8 + 136, // $0BE9 + 136, // $0BEA + 136, // $0BEB + 136, // $0BEC + 136, // $0BED + 136, // $0BEE + 136, // $0BEF + 138, // $0BF0 + 138, // $0BF1 + 138, // $0BF2 + 21, // $0BF3 + 21, // $0BF4 + 21, // $0BF5 + 21, // $0BF6 + 21, // $0BF7 + 21, // $0BF8 + 19, // $0BF9 + 21, // $0BFA + 29, // $0BFB + 29, // $0BFC + 29, // $0BFD + 29, // $0BFE + 29, // $0BFF + 133, // $0C00 + 134, // $0C01 + 134, // $0C02 + 134, // $0C03 + 29, // $0C04 + 132, // $0C05 + 132, // $0C06 + 132, // $0C07 + 132, // $0C08 + 132, // $0C09 + 132, // $0C0A + 132, // $0C0B + 132, // $0C0C + 29, // $0C0D + 132, // $0C0E + 132, // $0C0F + 132, // $0C10 + 29, // $0C11 + 132, // $0C12 + 132, // $0C13 + 132, // $0C14 + 132, // $0C15 + 132, // $0C16 + 132, // $0C17 + 132, // $0C18 + 132, // $0C19 + 132, // $0C1A + 132, // $0C1B + 132, // $0C1C + 132, // $0C1D + 132, // $0C1E + 132, // $0C1F + 132, // $0C20 + 132, // $0C21 + 132, // $0C22 + 132, // $0C23 + 132, // $0C24 + 132, // $0C25 + 132, // $0C26 + 132, // $0C27 + 132, // $0C28 + 29, // $0C29 + 132, // $0C2A + 132, // $0C2B + 132, // $0C2C + 132, // $0C2D + 132, // $0C2E + 132, // $0C2F + 132, // $0C30 + 132, // $0C31 + 132, // $0C32 + 132, // $0C33 + 132, // $0C34 + 132, // $0C35 + 132, // $0C36 + 132, // $0C37 + 132, // $0C38 + 132, // $0C39 + 29, // $0C3A + 29, // $0C3B + 29, // $0C3C + 132, // $0C3D + 133, // $0C3E + 133, // $0C3F + 133, // $0C40 + 134, // $0C41 + 134, // $0C42 + 134, // $0C43 + 134, // $0C44 + 29, // $0C45 + 133, // $0C46 + 133, // $0C47 + 133, // $0C48 + 29, // $0C49 + 133, // $0C4A + 133, // $0C4B + 133, // $0C4C + 133, // $0C4D + 29, // $0C4E + 29, // $0C4F + 29, // $0C50 + 29, // $0C51 + 29, // $0C52 + 29, // $0C53 + 29, // $0C54 + 133, // $0C55 + 133, // $0C56 + 29, // $0C57 + 132, // $0C58 + 132, // $0C59 + 132, // $0C5A + 29, // $0C5B + 29, // $0C5C + 29, // $0C5D + 29, // $0C5E + 29, // $0C5F + 132, // $0C60 + 132, // $0C61 + 133, // $0C62 + 133, // $0C63 + 29, // $0C64 + 29, // $0C65 + 136, // $0C66 + 136, // $0C67 + 136, // $0C68 + 136, // $0C69 + 136, // $0C6A + 136, // $0C6B + 136, // $0C6C + 136, // $0C6D + 136, // $0C6E + 136, // $0C6F + 29, // $0C70 + 29, // $0C71 + 29, // $0C72 + 29, // $0C73 + 29, // $0C74 + 29, // $0C75 + 29, // $0C76 + 29, // $0C77 + 138, // $0C78 + 138, // $0C79 + 138, // $0C7A + 138, // $0C7B + 138, // $0C7C + 138, // $0C7D + 138, // $0C7E + 21, // $0C7F + 132, // $0C80 + 133, // $0C81 + 134, // $0C82 + 134, // $0C83 + 29, // $0C84 + 132, // $0C85 + 132, // $0C86 + 132, // $0C87 + 132, // $0C88 + 132, // $0C89 + 132, // $0C8A + 132, // $0C8B + 132, // $0C8C + 29, // $0C8D + 132, // $0C8E + 132, // $0C8F + 132, // $0C90 + 29, // $0C91 + 132, // $0C92 + 132, // $0C93 + 132, // $0C94 + 132, // $0C95 + 132, // $0C96 + 132, // $0C97 + 132, // $0C98 + 132, // $0C99 + 132, // $0C9A + 132, // $0C9B + 132, // $0C9C + 132, // $0C9D + 132, // $0C9E + 132, // $0C9F + 132, // $0CA0 + 132, // $0CA1 + 132, // $0CA2 + 132, // $0CA3 + 132, // $0CA4 + 132, // $0CA5 + 132, // $0CA6 + 132, // $0CA7 + 132, // $0CA8 + 29, // $0CA9 + 132, // $0CAA + 132, // $0CAB + 132, // $0CAC + 132, // $0CAD + 132, // $0CAE + 132, // $0CAF + 132, // $0CB0 + 132, // $0CB1 + 132, // $0CB2 + 132, // $0CB3 + 29, // $0CB4 + 132, // $0CB5 + 132, // $0CB6 + 132, // $0CB7 + 132, // $0CB8 + 132, // $0CB9 + 29, // $0CBA + 29, // $0CBB + 133, // $0CBC + 132, // $0CBD + 134, // $0CBE + 133, // $0CBF + 134, // $0CC0 + 134, // $0CC1 + 134, // $0CC2 + 134, // $0CC3 + 134, // $0CC4 + 29, // $0CC5 + 133, // $0CC6 + 134, // $0CC7 + 134, // $0CC8 + 29, // $0CC9 + 134, // $0CCA + 134, // $0CCB + 133, // $0CCC + 133, // $0CCD + 29, // $0CCE + 29, // $0CCF + 29, // $0CD0 + 29, // $0CD1 + 29, // $0CD2 + 29, // $0CD3 + 29, // $0CD4 + 134, // $0CD5 + 134, // $0CD6 + 29, // $0CD7 + 29, // $0CD8 + 29, // $0CD9 + 29, // $0CDA + 29, // $0CDB + 29, // $0CDC + 29, // $0CDD + 132, // $0CDE + 29, // $0CDF + 132, // $0CE0 + 132, // $0CE1 + 133, // $0CE2 + 133, // $0CE3 + 29, // $0CE4 + 29, // $0CE5 + 136, // $0CE6 + 136, // $0CE7 + 136, // $0CE8 + 136, // $0CE9 + 136, // $0CEA + 136, // $0CEB + 136, // $0CEC + 136, // $0CED + 136, // $0CEE + 136, // $0CEF + 29, // $0CF0 + 132, // $0CF1 + 132, // $0CF2 + 29, // $0CF3 + 29, // $0CF4 + 29, // $0CF5 + 29, // $0CF6 + 29, // $0CF7 + 29, // $0CF8 + 29, // $0CF9 + 29, // $0CFA + 29, // $0CFB + 29, // $0CFC + 29, // $0CFD + 29, // $0CFE + 29, // $0CFF + 29, // $0D00 + 133, // $0D01 + 134, // $0D02 + 134, // $0D03 + 29, // $0D04 + 132, // $0D05 + 132, // $0D06 + 132, // $0D07 + 132, // $0D08 + 132, // $0D09 + 132, // $0D0A + 132, // $0D0B + 132, // $0D0C + 29, // $0D0D + 132, // $0D0E + 132, // $0D0F + 132, // $0D10 + 29, // $0D11 + 132, // $0D12 + 132, // $0D13 + 132, // $0D14 + 132, // $0D15 + 132, // $0D16 + 132, // $0D17 + 132, // $0D18 + 132, // $0D19 + 132, // $0D1A + 132, // $0D1B + 132, // $0D1C + 132, // $0D1D + 132, // $0D1E + 132, // $0D1F + 132, // $0D20 + 132, // $0D21 + 132, // $0D22 + 132, // $0D23 + 132, // $0D24 + 132, // $0D25 + 132, // $0D26 + 132, // $0D27 + 132, // $0D28 + 132, // $0D29 + 132, // $0D2A + 132, // $0D2B + 132, // $0D2C + 132, // $0D2D + 132, // $0D2E + 132, // $0D2F + 132, // $0D30 + 132, // $0D31 + 132, // $0D32 + 132, // $0D33 + 132, // $0D34 + 132, // $0D35 + 132, // $0D36 + 132, // $0D37 + 132, // $0D38 + 132, // $0D39 + 132, // $0D3A + 29, // $0D3B + 29, // $0D3C + 132, // $0D3D + 134, // $0D3E + 134, // $0D3F + 134, // $0D40 + 133, // $0D41 + 133, // $0D42 + 133, // $0D43 + 133, // $0D44 + 29, // $0D45 + 134, // $0D46 + 134, // $0D47 + 134, // $0D48 + 29, // $0D49 + 134, // $0D4A + 134, // $0D4B + 134, // $0D4C + 133, // $0D4D + 132, // $0D4E + 21, // $0D4F + 29, // $0D50 + 29, // $0D51 + 29, // $0D52 + 29, // $0D53 + 132, // $0D54 + 132, // $0D55 + 132, // $0D56 + 134, // $0D57 + 138, // $0D58 + 138, // $0D59 + 138, // $0D5A + 138, // $0D5B + 138, // $0D5C + 138, // $0D5D + 138, // $0D5E + 132, // $0D5F + 132, // $0D60 + 132, // $0D61 + 133, // $0D62 + 133, // $0D63 + 29, // $0D64 + 29, // $0D65 + 136, // $0D66 + 136, // $0D67 + 136, // $0D68 + 136, // $0D69 + 136, // $0D6A + 136, // $0D6B + 136, // $0D6C + 136, // $0D6D + 136, // $0D6E + 136, // $0D6F + 138, // $0D70 + 138, // $0D71 + 138, // $0D72 + 138, // $0D73 + 138, // $0D74 + 138, // $0D75 + 138, // $0D76 + 138, // $0D77 + 138, // $0D78 + 21, // $0D79 + 132, // $0D7A + 132, // $0D7B + 132, // $0D7C + 132, // $0D7D + 132, // $0D7E + 132, // $0D7F + 29, // $0D80 + 29, // $0D81 + 134, // $0D82 + 134, // $0D83 + 29, // $0D84 + 132, // $0D85 + 132, // $0D86 + 132, // $0D87 + 132, // $0D88 + 132, // $0D89 + 132, // $0D8A + 132, // $0D8B + 132, // $0D8C + 132, // $0D8D + 132, // $0D8E + 132, // $0D8F + 132, // $0D90 + 132, // $0D91 + 132, // $0D92 + 132, // $0D93 + 132, // $0D94 + 132, // $0D95 + 132, // $0D96 + 29, // $0D97 + 29, // $0D98 + 29, // $0D99 + 132, // $0D9A + 132, // $0D9B + 132, // $0D9C + 132, // $0D9D + 132, // $0D9E + 132, // $0D9F + 132, // $0DA0 + 132, // $0DA1 + 132, // $0DA2 + 132, // $0DA3 + 132, // $0DA4 + 132, // $0DA5 + 132, // $0DA6 + 132, // $0DA7 + 132, // $0DA8 + 132, // $0DA9 + 132, // $0DAA + 132, // $0DAB + 132, // $0DAC + 132, // $0DAD + 132, // $0DAE + 132, // $0DAF + 132, // $0DB0 + 132, // $0DB1 + 29, // $0DB2 + 132, // $0DB3 + 132, // $0DB4 + 132, // $0DB5 + 132, // $0DB6 + 132, // $0DB7 + 132, // $0DB8 + 132, // $0DB9 + 132, // $0DBA + 132, // $0DBB + 29, // $0DBC + 132, // $0DBD + 29, // $0DBE + 29, // $0DBF + 132, // $0DC0 + 132, // $0DC1 + 132, // $0DC2 + 132, // $0DC3 + 132, // $0DC4 + 132, // $0DC5 + 132, // $0DC6 + 29, // $0DC7 + 29, // $0DC8 + 29, // $0DC9 + 133, // $0DCA + 29, // $0DCB + 29, // $0DCC + 29, // $0DCD + 29, // $0DCE + 134, // $0DCF + 134, // $0DD0 + 134, // $0DD1 + 133, // $0DD2 + 133, // $0DD3 + 133, // $0DD4 + 29, // $0DD5 + 133, // $0DD6 + 29, // $0DD7 + 134, // $0DD8 + 134, // $0DD9 + 134, // $0DDA + 134, // $0DDB + 134, // $0DDC + 134, // $0DDD + 134, // $0DDE + 134, // $0DDF + 29, // $0DE0 + 29, // $0DE1 + 29, // $0DE2 + 29, // $0DE3 + 29, // $0DE4 + 29, // $0DE5 + 136, // $0DE6 + 136, // $0DE7 + 136, // $0DE8 + 136, // $0DE9 + 136, // $0DEA + 136, // $0DEB + 136, // $0DEC + 136, // $0DED + 136, // $0DEE + 136, // $0DEF + 29, // $0DF0 + 29, // $0DF1 + 134, // $0DF2 + 134, // $0DF3 + 17, // $0DF4 + 29, // $0DF5 + 29, // $0DF6 + 29, // $0DF7 + 29, // $0DF8 + 29, // $0DF9 + 29, // $0DFA + 29, // $0DFB + 29, // $0DFC + 29, // $0DFD + 29, // $0DFE + 29, // $0DFF + 29, // $0E00 + 132, // $0E01 + 132, // $0E02 + 132, // $0E03 + 132, // $0E04 + 132, // $0E05 + 132, // $0E06 + 132, // $0E07 + 132, // $0E08 + 132, // $0E09 + 132, // $0E0A + 132, // $0E0B + 132, // $0E0C + 132, // $0E0D + 132, // $0E0E + 132, // $0E0F + 132, // $0E10 + 132, // $0E11 + 132, // $0E12 + 132, // $0E13 + 132, // $0E14 + 132, // $0E15 + 132, // $0E16 + 132, // $0E17 + 132, // $0E18 + 132, // $0E19 + 132, // $0E1A + 132, // $0E1B + 132, // $0E1C + 132, // $0E1D + 132, // $0E1E + 132, // $0E1F + 132, // $0E20 + 132, // $0E21 + 132, // $0E22 + 132, // $0E23 + 132, // $0E24 + 132, // $0E25 + 132, // $0E26 + 132, // $0E27 + 132, // $0E28 + 132, // $0E29 + 132, // $0E2A + 132, // $0E2B + 132, // $0E2C + 132, // $0E2D + 132, // $0E2E + 132, // $0E2F + 132, // $0E30 + 133, // $0E31 + 132, // $0E32 + 132, // $0E33 + 133, // $0E34 + 133, // $0E35 + 133, // $0E36 + 133, // $0E37 + 133, // $0E38 + 133, // $0E39 + 133, // $0E3A + 29, // $0E3B + 29, // $0E3C + 29, // $0E3D + 29, // $0E3E + 19, // $0E3F + 132, // $0E40 + 132, // $0E41 + 132, // $0E42 + 132, // $0E43 + 132, // $0E44 + 132, // $0E45 + 131, // $0E46 + 133, // $0E47 + 133, // $0E48 + 133, // $0E49 + 133, // $0E4A + 133, // $0E4B + 133, // $0E4C + 133, // $0E4D + 133, // $0E4E + 17, // $0E4F + 136, // $0E50 + 136, // $0E51 + 136, // $0E52 + 136, // $0E53 + 136, // $0E54 + 136, // $0E55 + 136, // $0E56 + 136, // $0E57 + 136, // $0E58 + 136, // $0E59 + 17, // $0E5A + 17, // $0E5B + 29, // $0E5C + 29, // $0E5D + 29, // $0E5E + 29, // $0E5F + 29, // $0E60 + 29, // $0E61 + 29, // $0E62 + 29, // $0E63 + 29, // $0E64 + 29, // $0E65 + 29, // $0E66 + 29, // $0E67 + 29, // $0E68 + 29, // $0E69 + 29, // $0E6A + 29, // $0E6B + 29, // $0E6C + 29, // $0E6D + 29, // $0E6E + 29, // $0E6F + 29, // $0E70 + 29, // $0E71 + 29, // $0E72 + 29, // $0E73 + 29, // $0E74 + 29, // $0E75 + 29, // $0E76 + 29, // $0E77 + 29, // $0E78 + 29, // $0E79 + 29, // $0E7A + 29, // $0E7B + 29, // $0E7C + 29, // $0E7D + 29, // $0E7E + 29, // $0E7F + 29, // $0E80 + 132, // $0E81 + 132, // $0E82 + 29, // $0E83 + 132, // $0E84 + 29, // $0E85 + 29, // $0E86 + 132, // $0E87 + 132, // $0E88 + 29, // $0E89 + 132, // $0E8A + 29, // $0E8B + 29, // $0E8C + 132, // $0E8D + 29, // $0E8E + 29, // $0E8F + 29, // $0E90 + 29, // $0E91 + 29, // $0E92 + 29, // $0E93 + 132, // $0E94 + 132, // $0E95 + 132, // $0E96 + 132, // $0E97 + 29, // $0E98 + 132, // $0E99 + 132, // $0E9A + 132, // $0E9B + 132, // $0E9C + 132, // $0E9D + 132, // $0E9E + 132, // $0E9F + 29, // $0EA0 + 132, // $0EA1 + 132, // $0EA2 + 132, // $0EA3 + 29, // $0EA4 + 132, // $0EA5 + 29, // $0EA6 + 132, // $0EA7 + 29, // $0EA8 + 29, // $0EA9 + 132, // $0EAA + 132, // $0EAB + 29, // $0EAC + 132, // $0EAD + 132, // $0EAE + 132, // $0EAF + 132, // $0EB0 + 133, // $0EB1 + 132, // $0EB2 + 132, // $0EB3 + 133, // $0EB4 + 133, // $0EB5 + 133, // $0EB6 + 133, // $0EB7 + 133, // $0EB8 + 133, // $0EB9 + 29, // $0EBA + 133, // $0EBB + 133, // $0EBC + 132, // $0EBD + 29, // $0EBE + 29, // $0EBF + 132, // $0EC0 + 132, // $0EC1 + 132, // $0EC2 + 132, // $0EC3 + 132, // $0EC4 + 29, // $0EC5 + 131, // $0EC6 + 29, // $0EC7 + 133, // $0EC8 + 133, // $0EC9 + 133, // $0ECA + 133, // $0ECB + 133, // $0ECC + 133, // $0ECD + 29, // $0ECE + 29, // $0ECF + 136, // $0ED0 + 136, // $0ED1 + 136, // $0ED2 + 136, // $0ED3 + 136, // $0ED4 + 136, // $0ED5 + 136, // $0ED6 + 136, // $0ED7 + 136, // $0ED8 + 136, // $0ED9 + 29, // $0EDA + 29, // $0EDB + 132, // $0EDC + 132, // $0EDD + 132, // $0EDE + 132, // $0EDF + 29, // $0EE0 + 29, // $0EE1 + 29, // $0EE2 + 29, // $0EE3 + 29, // $0EE4 + 29, // $0EE5 + 29, // $0EE6 + 29, // $0EE7 + 29, // $0EE8 + 29, // $0EE9 + 29, // $0EEA + 29, // $0EEB + 29, // $0EEC + 29, // $0EED + 29, // $0EEE + 29, // $0EEF + 29, // $0EF0 + 29, // $0EF1 + 29, // $0EF2 + 29, // $0EF3 + 29, // $0EF4 + 29, // $0EF5 + 29, // $0EF6 + 29, // $0EF7 + 29, // $0EF8 + 29, // $0EF9 + 29, // $0EFA + 29, // $0EFB + 29, // $0EFC + 29, // $0EFD + 29, // $0EFE + 29, // $0EFF + 132, // $0F00 + 21, // $0F01 + 21, // $0F02 + 21, // $0F03 + 17, // $0F04 + 17, // $0F05 + 17, // $0F06 + 17, // $0F07 + 17, // $0F08 + 17, // $0F09 + 17, // $0F0A + 17, // $0F0B + 17, // $0F0C + 17, // $0F0D + 17, // $0F0E + 17, // $0F0F + 17, // $0F10 + 17, // $0F11 + 17, // $0F12 + 21, // $0F13 + 17, // $0F14 + 21, // $0F15 + 21, // $0F16 + 21, // $0F17 + 133, // $0F18 + 133, // $0F19 + 21, // $0F1A + 21, // $0F1B + 21, // $0F1C + 21, // $0F1D + 21, // $0F1E + 21, // $0F1F + 136, // $0F20 + 136, // $0F21 + 136, // $0F22 + 136, // $0F23 + 136, // $0F24 + 136, // $0F25 + 136, // $0F26 + 136, // $0F27 + 136, // $0F28 + 136, // $0F29 + 138, // $0F2A + 138, // $0F2B + 138, // $0F2C + 138, // $0F2D + 138, // $0F2E + 138, // $0F2F + 138, // $0F30 + 138, // $0F31 + 138, // $0F32 + 138, // $0F33 + 21, // $0F34 + 133, // $0F35 + 21, // $0F36 + 133, // $0F37 + 21, // $0F38 + 133, // $0F39 + 13, // $0F3A + 14, // $0F3B + 13, // $0F3C + 14, // $0F3D + 134, // $0F3E + 134, // $0F3F + 132, // $0F40 + 132, // $0F41 + 132, // $0F42 + 132, // $0F43 + 132, // $0F44 + 132, // $0F45 + 132, // $0F46 + 132, // $0F47 + 29, // $0F48 + 132, // $0F49 + 132, // $0F4A + 132, // $0F4B + 132, // $0F4C + 132, // $0F4D + 132, // $0F4E + 132, // $0F4F + 132, // $0F50 + 132, // $0F51 + 132, // $0F52 + 132, // $0F53 + 132, // $0F54 + 132, // $0F55 + 132, // $0F56 + 132, // $0F57 + 132, // $0F58 + 132, // $0F59 + 132, // $0F5A + 132, // $0F5B + 132, // $0F5C + 132, // $0F5D + 132, // $0F5E + 132, // $0F5F + 132, // $0F60 + 132, // $0F61 + 132, // $0F62 + 132, // $0F63 + 132, // $0F64 + 132, // $0F65 + 132, // $0F66 + 132, // $0F67 + 132, // $0F68 + 132, // $0F69 + 132, // $0F6A + 132, // $0F6B + 132, // $0F6C + 29, // $0F6D + 29, // $0F6E + 29, // $0F6F + 29, // $0F70 + 133, // $0F71 + 133, // $0F72 + 133, // $0F73 + 133, // $0F74 + 133, // $0F75 + 133, // $0F76 + 133, // $0F77 + 133, // $0F78 + 133, // $0F79 + 133, // $0F7A + 133, // $0F7B + 133, // $0F7C + 133, // $0F7D + 133, // $0F7E + 134, // $0F7F + 133, // $0F80 + 133, // $0F81 + 133, // $0F82 + 133, // $0F83 + 133, // $0F84 + 17, // $0F85 + 133, // $0F86 + 133, // $0F87 + 132, // $0F88 + 132, // $0F89 + 132, // $0F8A + 132, // $0F8B + 132, // $0F8C + 133, // $0F8D + 133, // $0F8E + 133, // $0F8F + 133, // $0F90 + 133, // $0F91 + 133, // $0F92 + 133, // $0F93 + 133, // $0F94 + 133, // $0F95 + 133, // $0F96 + 133, // $0F97 + 29, // $0F98 + 133, // $0F99 + 133, // $0F9A + 133, // $0F9B + 133, // $0F9C + 133, // $0F9D + 133, // $0F9E + 133, // $0F9F + 133, // $0FA0 + 133, // $0FA1 + 133, // $0FA2 + 133, // $0FA3 + 133, // $0FA4 + 133, // $0FA5 + 133, // $0FA6 + 133, // $0FA7 + 133, // $0FA8 + 133, // $0FA9 + 133, // $0FAA + 133, // $0FAB + 133, // $0FAC + 133, // $0FAD + 133, // $0FAE + 133, // $0FAF + 133, // $0FB0 + 133, // $0FB1 + 133, // $0FB2 + 133, // $0FB3 + 133, // $0FB4 + 133, // $0FB5 + 133, // $0FB6 + 133, // $0FB7 + 133, // $0FB8 + 133, // $0FB9 + 133, // $0FBA + 133, // $0FBB + 133, // $0FBC + 29, // $0FBD + 21, // $0FBE + 21, // $0FBF + 21, // $0FC0 + 21, // $0FC1 + 21, // $0FC2 + 21, // $0FC3 + 21, // $0FC4 + 21, // $0FC5 + 133, // $0FC6 + 21, // $0FC7 + 21, // $0FC8 + 21, // $0FC9 + 21, // $0FCA + 21, // $0FCB + 21, // $0FCC + 29, // $0FCD + 21, // $0FCE + 21, // $0FCF + 17, // $0FD0 + 17, // $0FD1 + 17, // $0FD2 + 17, // $0FD3 + 17, // $0FD4 + 21, // $0FD5 + 21, // $0FD6 + 21, // $0FD7 + 21, // $0FD8 + 17, // $0FD9 + 17, // $0FDA + 29, // $0FDB + 29, // $0FDC + 29, // $0FDD + 29, // $0FDE + 29, // $0FDF + 29, // $0FE0 + 29, // $0FE1 + 29, // $0FE2 + 29, // $0FE3 + 29, // $0FE4 + 29, // $0FE5 + 29, // $0FE6 + 29, // $0FE7 + 29, // $0FE8 + 29, // $0FE9 + 29, // $0FEA + 29, // $0FEB + 29, // $0FEC + 29, // $0FED + 29, // $0FEE + 29, // $0FEF + 29, // $0FF0 + 29, // $0FF1 + 29, // $0FF2 + 29, // $0FF3 + 29, // $0FF4 + 29, // $0FF5 + 29, // $0FF6 + 29, // $0FF7 + 29, // $0FF8 + 29, // $0FF9 + 29, // $0FFA + 29, // $0FFB + 29, // $0FFC + 29, // $0FFD + 29, // $0FFE + 29, // $0FFF + 132, // $1000 + 132, // $1001 + 132, // $1002 + 132, // $1003 + 132, // $1004 + 132, // $1005 + 132, // $1006 + 132, // $1007 + 132, // $1008 + 132, // $1009 + 132, // $100A + 132, // $100B + 132, // $100C + 132, // $100D + 132, // $100E + 132, // $100F + 132, // $1010 + 132, // $1011 + 132, // $1012 + 132, // $1013 + 132, // $1014 + 132, // $1015 + 132, // $1016 + 132, // $1017 + 132, // $1018 + 132, // $1019 + 132, // $101A + 132, // $101B + 132, // $101C + 132, // $101D + 132, // $101E + 132, // $101F + 132, // $1020 + 132, // $1021 + 132, // $1022 + 132, // $1023 + 132, // $1024 + 132, // $1025 + 132, // $1026 + 132, // $1027 + 132, // $1028 + 132, // $1029 + 132, // $102A + 134, // $102B + 134, // $102C + 133, // $102D + 133, // $102E + 133, // $102F + 133, // $1030 + 134, // $1031 + 133, // $1032 + 133, // $1033 + 133, // $1034 + 133, // $1035 + 133, // $1036 + 133, // $1037 + 134, // $1038 + 133, // $1039 + 133, // $103A + 134, // $103B + 134, // $103C + 133, // $103D + 133, // $103E + 132, // $103F + 136, // $1040 + 136, // $1041 + 136, // $1042 + 136, // $1043 + 136, // $1044 + 136, // $1045 + 136, // $1046 + 136, // $1047 + 136, // $1048 + 136, // $1049 + 17, // $104A + 17, // $104B + 17, // $104C + 17, // $104D + 17, // $104E + 17, // $104F + 132, // $1050 + 132, // $1051 + 132, // $1052 + 132, // $1053 + 132, // $1054 + 132, // $1055 + 134, // $1056 + 134, // $1057 + 133, // $1058 + 133, // $1059 + 132, // $105A + 132, // $105B + 132, // $105C + 132, // $105D + 133, // $105E + 133, // $105F + 133, // $1060 + 132, // $1061 + 134, // $1062 + 134, // $1063 + 134, // $1064 + 132, // $1065 + 132, // $1066 + 134, // $1067 + 134, // $1068 + 134, // $1069 + 134, // $106A + 134, // $106B + 134, // $106C + 134, // $106D + 132, // $106E + 132, // $106F + 132, // $1070 + 133, // $1071 + 133, // $1072 + 133, // $1073 + 133, // $1074 + 132, // $1075 + 132, // $1076 + 132, // $1077 + 132, // $1078 + 132, // $1079 + 132, // $107A + 132, // $107B + 132, // $107C + 132, // $107D + 132, // $107E + 132, // $107F + 132, // $1080 + 132, // $1081 + 133, // $1082 + 134, // $1083 + 134, // $1084 + 133, // $1085 + 133, // $1086 + 134, // $1087 + 134, // $1088 + 134, // $1089 + 134, // $108A + 134, // $108B + 134, // $108C + 133, // $108D + 132, // $108E + 134, // $108F + 136, // $1090 + 136, // $1091 + 136, // $1092 + 136, // $1093 + 136, // $1094 + 136, // $1095 + 136, // $1096 + 136, // $1097 + 136, // $1098 + 136, // $1099 + 134, // $109A + 134, // $109B + 134, // $109C + 133, // $109D + 21, // $109E + 21, // $109F + 128, // $10A0 + 128, // $10A1 + 128, // $10A2 + 128, // $10A3 + 128, // $10A4 + 128, // $10A5 + 128, // $10A6 + 128, // $10A7 + 128, // $10A8 + 128, // $10A9 + 128, // $10AA + 128, // $10AB + 128, // $10AC + 128, // $10AD + 128, // $10AE + 128, // $10AF + 128, // $10B0 + 128, // $10B1 + 128, // $10B2 + 128, // $10B3 + 128, // $10B4 + 128, // $10B5 + 128, // $10B6 + 128, // $10B7 + 128, // $10B8 + 128, // $10B9 + 128, // $10BA + 128, // $10BB + 128, // $10BC + 128, // $10BD + 128, // $10BE + 128, // $10BF + 128, // $10C0 + 128, // $10C1 + 128, // $10C2 + 128, // $10C3 + 128, // $10C4 + 128, // $10C5 + 29, // $10C6 + 128, // $10C7 + 29, // $10C8 + 29, // $10C9 + 29, // $10CA + 29, // $10CB + 29, // $10CC + 128, // $10CD + 29, // $10CE + 29, // $10CF + 132, // $10D0 + 132, // $10D1 + 132, // $10D2 + 132, // $10D3 + 132, // $10D4 + 132, // $10D5 + 132, // $10D6 + 132, // $10D7 + 132, // $10D8 + 132, // $10D9 + 132, // $10DA + 132, // $10DB + 132, // $10DC + 132, // $10DD + 132, // $10DE + 132, // $10DF + 132, // $10E0 + 132, // $10E1 + 132, // $10E2 + 132, // $10E3 + 132, // $10E4 + 132, // $10E5 + 132, // $10E6 + 132, // $10E7 + 132, // $10E8 + 132, // $10E9 + 132, // $10EA + 132, // $10EB + 132, // $10EC + 132, // $10ED + 132, // $10EE + 132, // $10EF + 132, // $10F0 + 132, // $10F1 + 132, // $10F2 + 132, // $10F3 + 132, // $10F4 + 132, // $10F5 + 132, // $10F6 + 132, // $10F7 + 132, // $10F8 + 132, // $10F9 + 132, // $10FA + 17, // $10FB + 131, // $10FC + 132, // $10FD + 132, // $10FE + 132, // $10FF + 132, // $1100 + 132, // $1101 + 132, // $1102 + 132, // $1103 + 132, // $1104 + 132, // $1105 + 132, // $1106 + 132, // $1107 + 132, // $1108 + 132, // $1109 + 132, // $110A + 132, // $110B + 132, // $110C + 132, // $110D + 132, // $110E + 132, // $110F + 132, // $1110 + 132, // $1111 + 132, // $1112 + 132, // $1113 + 132, // $1114 + 132, // $1115 + 132, // $1116 + 132, // $1117 + 132, // $1118 + 132, // $1119 + 132, // $111A + 132, // $111B + 132, // $111C + 132, // $111D + 132, // $111E + 132, // $111F + 132, // $1120 + 132, // $1121 + 132, // $1122 + 132, // $1123 + 132, // $1124 + 132, // $1125 + 132, // $1126 + 132, // $1127 + 132, // $1128 + 132, // $1129 + 132, // $112A + 132, // $112B + 132, // $112C + 132, // $112D + 132, // $112E + 132, // $112F + 132, // $1130 + 132, // $1131 + 132, // $1132 + 132, // $1133 + 132, // $1134 + 132, // $1135 + 132, // $1136 + 132, // $1137 + 132, // $1138 + 132, // $1139 + 132, // $113A + 132, // $113B + 132, // $113C + 132, // $113D + 132, // $113E + 132, // $113F + 132, // $1140 + 132, // $1141 + 132, // $1142 + 132, // $1143 + 132, // $1144 + 132, // $1145 + 132, // $1146 + 132, // $1147 + 132, // $1148 + 132, // $1149 + 132, // $114A + 132, // $114B + 132, // $114C + 132, // $114D + 132, // $114E + 132, // $114F + 132, // $1150 + 132, // $1151 + 132, // $1152 + 132, // $1153 + 132, // $1154 + 132, // $1155 + 132, // $1156 + 132, // $1157 + 132, // $1158 + 132, // $1159 + 132, // $115A + 132, // $115B + 132, // $115C + 132, // $115D + 132, // $115E + 132, // $115F + 132, // $1160 + 132, // $1161 + 132, // $1162 + 132, // $1163 + 132, // $1164 + 132, // $1165 + 132, // $1166 + 132, // $1167 + 132, // $1168 + 132, // $1169 + 132, // $116A + 132, // $116B + 132, // $116C + 132, // $116D + 132, // $116E + 132, // $116F + 132, // $1170 + 132, // $1171 + 132, // $1172 + 132, // $1173 + 132, // $1174 + 132, // $1175 + 132, // $1176 + 132, // $1177 + 132, // $1178 + 132, // $1179 + 132, // $117A + 132, // $117B + 132, // $117C + 132, // $117D + 132, // $117E + 132, // $117F + 132, // $1180 + 132, // $1181 + 132, // $1182 + 132, // $1183 + 132, // $1184 + 132, // $1185 + 132, // $1186 + 132, // $1187 + 132, // $1188 + 132, // $1189 + 132, // $118A + 132, // $118B + 132, // $118C + 132, // $118D + 132, // $118E + 132, // $118F + 132, // $1190 + 132, // $1191 + 132, // $1192 + 132, // $1193 + 132, // $1194 + 132, // $1195 + 132, // $1196 + 132, // $1197 + 132, // $1198 + 132, // $1199 + 132, // $119A + 132, // $119B + 132, // $119C + 132, // $119D + 132, // $119E + 132, // $119F + 132, // $11A0 + 132, // $11A1 + 132, // $11A2 + 132, // $11A3 + 132, // $11A4 + 132, // $11A5 + 132, // $11A6 + 132, // $11A7 + 132, // $11A8 + 132, // $11A9 + 132, // $11AA + 132, // $11AB + 132, // $11AC + 132, // $11AD + 132, // $11AE + 132, // $11AF + 132, // $11B0 + 132, // $11B1 + 132, // $11B2 + 132, // $11B3 + 132, // $11B4 + 132, // $11B5 + 132, // $11B6 + 132, // $11B7 + 132, // $11B8 + 132, // $11B9 + 132, // $11BA + 132, // $11BB + 132, // $11BC + 132, // $11BD + 132, // $11BE + 132, // $11BF + 132, // $11C0 + 132, // $11C1 + 132, // $11C2 + 132, // $11C3 + 132, // $11C4 + 132, // $11C5 + 132, // $11C6 + 132, // $11C7 + 132, // $11C8 + 132, // $11C9 + 132, // $11CA + 132, // $11CB + 132, // $11CC + 132, // $11CD + 132, // $11CE + 132, // $11CF + 132, // $11D0 + 132, // $11D1 + 132, // $11D2 + 132, // $11D3 + 132, // $11D4 + 132, // $11D5 + 132, // $11D6 + 132, // $11D7 + 132, // $11D8 + 132, // $11D9 + 132, // $11DA + 132, // $11DB + 132, // $11DC + 132, // $11DD + 132, // $11DE + 132, // $11DF + 132, // $11E0 + 132, // $11E1 + 132, // $11E2 + 132, // $11E3 + 132, // $11E4 + 132, // $11E5 + 132, // $11E6 + 132, // $11E7 + 132, // $11E8 + 132, // $11E9 + 132, // $11EA + 132, // $11EB + 132, // $11EC + 132, // $11ED + 132, // $11EE + 132, // $11EF + 132, // $11F0 + 132, // $11F1 + 132, // $11F2 + 132, // $11F3 + 132, // $11F4 + 132, // $11F5 + 132, // $11F6 + 132, // $11F7 + 132, // $11F8 + 132, // $11F9 + 132, // $11FA + 132, // $11FB + 132, // $11FC + 132, // $11FD + 132, // $11FE + 132, // $11FF + 132, // $1200 + 132, // $1201 + 132, // $1202 + 132, // $1203 + 132, // $1204 + 132, // $1205 + 132, // $1206 + 132, // $1207 + 132, // $1208 + 132, // $1209 + 132, // $120A + 132, // $120B + 132, // $120C + 132, // $120D + 132, // $120E + 132, // $120F + 132, // $1210 + 132, // $1211 + 132, // $1212 + 132, // $1213 + 132, // $1214 + 132, // $1215 + 132, // $1216 + 132, // $1217 + 132, // $1218 + 132, // $1219 + 132, // $121A + 132, // $121B + 132, // $121C + 132, // $121D + 132, // $121E + 132, // $121F + 132, // $1220 + 132, // $1221 + 132, // $1222 + 132, // $1223 + 132, // $1224 + 132, // $1225 + 132, // $1226 + 132, // $1227 + 132, // $1228 + 132, // $1229 + 132, // $122A + 132, // $122B + 132, // $122C + 132, // $122D + 132, // $122E + 132, // $122F + 132, // $1230 + 132, // $1231 + 132, // $1232 + 132, // $1233 + 132, // $1234 + 132, // $1235 + 132, // $1236 + 132, // $1237 + 132, // $1238 + 132, // $1239 + 132, // $123A + 132, // $123B + 132, // $123C + 132, // $123D + 132, // $123E + 132, // $123F + 132, // $1240 + 132, // $1241 + 132, // $1242 + 132, // $1243 + 132, // $1244 + 132, // $1245 + 132, // $1246 + 132, // $1247 + 132, // $1248 + 29, // $1249 + 132, // $124A + 132, // $124B + 132, // $124C + 132, // $124D + 29, // $124E + 29, // $124F + 132, // $1250 + 132, // $1251 + 132, // $1252 + 132, // $1253 + 132, // $1254 + 132, // $1255 + 132, // $1256 + 29, // $1257 + 132, // $1258 + 29, // $1259 + 132, // $125A + 132, // $125B + 132, // $125C + 132, // $125D + 29, // $125E + 29, // $125F + 132, // $1260 + 132, // $1261 + 132, // $1262 + 132, // $1263 + 132, // $1264 + 132, // $1265 + 132, // $1266 + 132, // $1267 + 132, // $1268 + 132, // $1269 + 132, // $126A + 132, // $126B + 132, // $126C + 132, // $126D + 132, // $126E + 132, // $126F + 132, // $1270 + 132, // $1271 + 132, // $1272 + 132, // $1273 + 132, // $1274 + 132, // $1275 + 132, // $1276 + 132, // $1277 + 132, // $1278 + 132, // $1279 + 132, // $127A + 132, // $127B + 132, // $127C + 132, // $127D + 132, // $127E + 132, // $127F + 132, // $1280 + 132, // $1281 + 132, // $1282 + 132, // $1283 + 132, // $1284 + 132, // $1285 + 132, // $1286 + 132, // $1287 + 132, // $1288 + 29, // $1289 + 132, // $128A + 132, // $128B + 132, // $128C + 132, // $128D + 29, // $128E + 29, // $128F + 132, // $1290 + 132, // $1291 + 132, // $1292 + 132, // $1293 + 132, // $1294 + 132, // $1295 + 132, // $1296 + 132, // $1297 + 132, // $1298 + 132, // $1299 + 132, // $129A + 132, // $129B + 132, // $129C + 132, // $129D + 132, // $129E + 132, // $129F + 132, // $12A0 + 132, // $12A1 + 132, // $12A2 + 132, // $12A3 + 132, // $12A4 + 132, // $12A5 + 132, // $12A6 + 132, // $12A7 + 132, // $12A8 + 132, // $12A9 + 132, // $12AA + 132, // $12AB + 132, // $12AC + 132, // $12AD + 132, // $12AE + 132, // $12AF + 132, // $12B0 + 29, // $12B1 + 132, // $12B2 + 132, // $12B3 + 132, // $12B4 + 132, // $12B5 + 29, // $12B6 + 29, // $12B7 + 132, // $12B8 + 132, // $12B9 + 132, // $12BA + 132, // $12BB + 132, // $12BC + 132, // $12BD + 132, // $12BE + 29, // $12BF + 132, // $12C0 + 29, // $12C1 + 132, // $12C2 + 132, // $12C3 + 132, // $12C4 + 132, // $12C5 + 29, // $12C6 + 29, // $12C7 + 132, // $12C8 + 132, // $12C9 + 132, // $12CA + 132, // $12CB + 132, // $12CC + 132, // $12CD + 132, // $12CE + 132, // $12CF + 132, // $12D0 + 132, // $12D1 + 132, // $12D2 + 132, // $12D3 + 132, // $12D4 + 132, // $12D5 + 132, // $12D6 + 29, // $12D7 + 132, // $12D8 + 132, // $12D9 + 132, // $12DA + 132, // $12DB + 132, // $12DC + 132, // $12DD + 132, // $12DE + 132, // $12DF + 132, // $12E0 + 132, // $12E1 + 132, // $12E2 + 132, // $12E3 + 132, // $12E4 + 132, // $12E5 + 132, // $12E6 + 132, // $12E7 + 132, // $12E8 + 132, // $12E9 + 132, // $12EA + 132, // $12EB + 132, // $12EC + 132, // $12ED + 132, // $12EE + 132, // $12EF + 132, // $12F0 + 132, // $12F1 + 132, // $12F2 + 132, // $12F3 + 132, // $12F4 + 132, // $12F5 + 132, // $12F6 + 132, // $12F7 + 132, // $12F8 + 132, // $12F9 + 132, // $12FA + 132, // $12FB + 132, // $12FC + 132, // $12FD + 132, // $12FE + 132, // $12FF + 132, // $1300 + 132, // $1301 + 132, // $1302 + 132, // $1303 + 132, // $1304 + 132, // $1305 + 132, // $1306 + 132, // $1307 + 132, // $1308 + 132, // $1309 + 132, // $130A + 132, // $130B + 132, // $130C + 132, // $130D + 132, // $130E + 132, // $130F + 132, // $1310 + 29, // $1311 + 132, // $1312 + 132, // $1313 + 132, // $1314 + 132, // $1315 + 29, // $1316 + 29, // $1317 + 132, // $1318 + 132, // $1319 + 132, // $131A + 132, // $131B + 132, // $131C + 132, // $131D + 132, // $131E + 132, // $131F + 132, // $1320 + 132, // $1321 + 132, // $1322 + 132, // $1323 + 132, // $1324 + 132, // $1325 + 132, // $1326 + 132, // $1327 + 132, // $1328 + 132, // $1329 + 132, // $132A + 132, // $132B + 132, // $132C + 132, // $132D + 132, // $132E + 132, // $132F + 132, // $1330 + 132, // $1331 + 132, // $1332 + 132, // $1333 + 132, // $1334 + 132, // $1335 + 132, // $1336 + 132, // $1337 + 132, // $1338 + 132, // $1339 + 132, // $133A + 132, // $133B + 132, // $133C + 132, // $133D + 132, // $133E + 132, // $133F + 132, // $1340 + 132, // $1341 + 132, // $1342 + 132, // $1343 + 132, // $1344 + 132, // $1345 + 132, // $1346 + 132, // $1347 + 132, // $1348 + 132, // $1349 + 132, // $134A + 132, // $134B + 132, // $134C + 132, // $134D + 132, // $134E + 132, // $134F + 132, // $1350 + 132, // $1351 + 132, // $1352 + 132, // $1353 + 132, // $1354 + 132, // $1355 + 132, // $1356 + 132, // $1357 + 132, // $1358 + 132, // $1359 + 132, // $135A + 29, // $135B + 29, // $135C + 133, // $135D + 133, // $135E + 133, // $135F + 17, // $1360 + 17, // $1361 + 17, // $1362 + 17, // $1363 + 17, // $1364 + 17, // $1365 + 17, // $1366 + 17, // $1367 + 17, // $1368 + 138, // $1369 + 138, // $136A + 138, // $136B + 138, // $136C + 138, // $136D + 138, // $136E + 138, // $136F + 138, // $1370 + 138, // $1371 + 138, // $1372 + 138, // $1373 + 138, // $1374 + 138, // $1375 + 138, // $1376 + 138, // $1377 + 138, // $1378 + 138, // $1379 + 138, // $137A + 138, // $137B + 138, // $137C + 29, // $137D + 29, // $137E + 29, // $137F + 132, // $1380 + 132, // $1381 + 132, // $1382 + 132, // $1383 + 132, // $1384 + 132, // $1385 + 132, // $1386 + 132, // $1387 + 132, // $1388 + 132, // $1389 + 132, // $138A + 132, // $138B + 132, // $138C + 132, // $138D + 132, // $138E + 132, // $138F + 21, // $1390 + 21, // $1391 + 21, // $1392 + 21, // $1393 + 21, // $1394 + 21, // $1395 + 21, // $1396 + 21, // $1397 + 21, // $1398 + 21, // $1399 + 29, // $139A + 29, // $139B + 29, // $139C + 29, // $139D + 29, // $139E + 29, // $139F + 128, // $13A0 + 128, // $13A1 + 128, // $13A2 + 128, // $13A3 + 128, // $13A4 + 128, // $13A5 + 128, // $13A6 + 128, // $13A7 + 128, // $13A8 + 128, // $13A9 + 128, // $13AA + 128, // $13AB + 128, // $13AC + 128, // $13AD + 128, // $13AE + 128, // $13AF + 128, // $13B0 + 128, // $13B1 + 128, // $13B2 + 128, // $13B3 + 128, // $13B4 + 128, // $13B5 + 128, // $13B6 + 128, // $13B7 + 128, // $13B8 + 128, // $13B9 + 128, // $13BA + 128, // $13BB + 128, // $13BC + 128, // $13BD + 128, // $13BE + 128, // $13BF + 128, // $13C0 + 128, // $13C1 + 128, // $13C2 + 128, // $13C3 + 128, // $13C4 + 128, // $13C5 + 128, // $13C6 + 128, // $13C7 + 128, // $13C8 + 128, // $13C9 + 128, // $13CA + 128, // $13CB + 128, // $13CC + 128, // $13CD + 128, // $13CE + 128, // $13CF + 128, // $13D0 + 128, // $13D1 + 128, // $13D2 + 128, // $13D3 + 128, // $13D4 + 128, // $13D5 + 128, // $13D6 + 128, // $13D7 + 128, // $13D8 + 128, // $13D9 + 128, // $13DA + 128, // $13DB + 128, // $13DC + 128, // $13DD + 128, // $13DE + 128, // $13DF + 128, // $13E0 + 128, // $13E1 + 128, // $13E2 + 128, // $13E3 + 128, // $13E4 + 128, // $13E5 + 128, // $13E6 + 128, // $13E7 + 128, // $13E8 + 128, // $13E9 + 128, // $13EA + 128, // $13EB + 128, // $13EC + 128, // $13ED + 128, // $13EE + 128, // $13EF + 128, // $13F0 + 128, // $13F1 + 128, // $13F2 + 128, // $13F3 + 128, // $13F4 + 128, // $13F5 + 29, // $13F6 + 29, // $13F7 + 129, // $13F8 + 129, // $13F9 + 129, // $13FA + 129, // $13FB + 129, // $13FC + 129, // $13FD + 29, // $13FE + 29, // $13FF + 12, // $1400 + 132, // $1401 + 132, // $1402 + 132, // $1403 + 132, // $1404 + 132, // $1405 + 132, // $1406 + 132, // $1407 + 132, // $1408 + 132, // $1409 + 132, // $140A + 132, // $140B + 132, // $140C + 132, // $140D + 132, // $140E + 132, // $140F + 132, // $1410 + 132, // $1411 + 132, // $1412 + 132, // $1413 + 132, // $1414 + 132, // $1415 + 132, // $1416 + 132, // $1417 + 132, // $1418 + 132, // $1419 + 132, // $141A + 132, // $141B + 132, // $141C + 132, // $141D + 132, // $141E + 132, // $141F + 132, // $1420 + 132, // $1421 + 132, // $1422 + 132, // $1423 + 132, // $1424 + 132, // $1425 + 132, // $1426 + 132, // $1427 + 132, // $1428 + 132, // $1429 + 132, // $142A + 132, // $142B + 132, // $142C + 132, // $142D + 132, // $142E + 132, // $142F + 132, // $1430 + 132, // $1431 + 132, // $1432 + 132, // $1433 + 132, // $1434 + 132, // $1435 + 132, // $1436 + 132, // $1437 + 132, // $1438 + 132, // $1439 + 132, // $143A + 132, // $143B + 132, // $143C + 132, // $143D + 132, // $143E + 132, // $143F + 132, // $1440 + 132, // $1441 + 132, // $1442 + 132, // $1443 + 132, // $1444 + 132, // $1445 + 132, // $1446 + 132, // $1447 + 132, // $1448 + 132, // $1449 + 132, // $144A + 132, // $144B + 132, // $144C + 132, // $144D + 132, // $144E + 132, // $144F + 132, // $1450 + 132, // $1451 + 132, // $1452 + 132, // $1453 + 132, // $1454 + 132, // $1455 + 132, // $1456 + 132, // $1457 + 132, // $1458 + 132, // $1459 + 132, // $145A + 132, // $145B + 132, // $145C + 132, // $145D + 132, // $145E + 132, // $145F + 132, // $1460 + 132, // $1461 + 132, // $1462 + 132, // $1463 + 132, // $1464 + 132, // $1465 + 132, // $1466 + 132, // $1467 + 132, // $1468 + 132, // $1469 + 132, // $146A + 132, // $146B + 132, // $146C + 132, // $146D + 132, // $146E + 132, // $146F + 132, // $1470 + 132, // $1471 + 132, // $1472 + 132, // $1473 + 132, // $1474 + 132, // $1475 + 132, // $1476 + 132, // $1477 + 132, // $1478 + 132, // $1479 + 132, // $147A + 132, // $147B + 132, // $147C + 132, // $147D + 132, // $147E + 132, // $147F + 132, // $1480 + 132, // $1481 + 132, // $1482 + 132, // $1483 + 132, // $1484 + 132, // $1485 + 132, // $1486 + 132, // $1487 + 132, // $1488 + 132, // $1489 + 132, // $148A + 132, // $148B + 132, // $148C + 132, // $148D + 132, // $148E + 132, // $148F + 132, // $1490 + 132, // $1491 + 132, // $1492 + 132, // $1493 + 132, // $1494 + 132, // $1495 + 132, // $1496 + 132, // $1497 + 132, // $1498 + 132, // $1499 + 132, // $149A + 132, // $149B + 132, // $149C + 132, // $149D + 132, // $149E + 132, // $149F + 132, // $14A0 + 132, // $14A1 + 132, // $14A2 + 132, // $14A3 + 132, // $14A4 + 132, // $14A5 + 132, // $14A6 + 132, // $14A7 + 132, // $14A8 + 132, // $14A9 + 132, // $14AA + 132, // $14AB + 132, // $14AC + 132, // $14AD + 132, // $14AE + 132, // $14AF + 132, // $14B0 + 132, // $14B1 + 132, // $14B2 + 132, // $14B3 + 132, // $14B4 + 132, // $14B5 + 132, // $14B6 + 132, // $14B7 + 132, // $14B8 + 132, // $14B9 + 132, // $14BA + 132, // $14BB + 132, // $14BC + 132, // $14BD + 132, // $14BE + 132, // $14BF + 132, // $14C0 + 132, // $14C1 + 132, // $14C2 + 132, // $14C3 + 132, // $14C4 + 132, // $14C5 + 132, // $14C6 + 132, // $14C7 + 132, // $14C8 + 132, // $14C9 + 132, // $14CA + 132, // $14CB + 132, // $14CC + 132, // $14CD + 132, // $14CE + 132, // $14CF + 132, // $14D0 + 132, // $14D1 + 132, // $14D2 + 132, // $14D3 + 132, // $14D4 + 132, // $14D5 + 132, // $14D6 + 132, // $14D7 + 132, // $14D8 + 132, // $14D9 + 132, // $14DA + 132, // $14DB + 132, // $14DC + 132, // $14DD + 132, // $14DE + 132, // $14DF + 132, // $14E0 + 132, // $14E1 + 132, // $14E2 + 132, // $14E3 + 132, // $14E4 + 132, // $14E5 + 132, // $14E6 + 132, // $14E7 + 132, // $14E8 + 132, // $14E9 + 132, // $14EA + 132, // $14EB + 132, // $14EC + 132, // $14ED + 132, // $14EE + 132, // $14EF + 132, // $14F0 + 132, // $14F1 + 132, // $14F2 + 132, // $14F3 + 132, // $14F4 + 132, // $14F5 + 132, // $14F6 + 132, // $14F7 + 132, // $14F8 + 132, // $14F9 + 132, // $14FA + 132, // $14FB + 132, // $14FC + 132, // $14FD + 132, // $14FE + 132, // $14FF + 132, // $1500 + 132, // $1501 + 132, // $1502 + 132, // $1503 + 132, // $1504 + 132, // $1505 + 132, // $1506 + 132, // $1507 + 132, // $1508 + 132, // $1509 + 132, // $150A + 132, // $150B + 132, // $150C + 132, // $150D + 132, // $150E + 132, // $150F + 132, // $1510 + 132, // $1511 + 132, // $1512 + 132, // $1513 + 132, // $1514 + 132, // $1515 + 132, // $1516 + 132, // $1517 + 132, // $1518 + 132, // $1519 + 132, // $151A + 132, // $151B + 132, // $151C + 132, // $151D + 132, // $151E + 132, // $151F + 132, // $1520 + 132, // $1521 + 132, // $1522 + 132, // $1523 + 132, // $1524 + 132, // $1525 + 132, // $1526 + 132, // $1527 + 132, // $1528 + 132, // $1529 + 132, // $152A + 132, // $152B + 132, // $152C + 132, // $152D + 132, // $152E + 132, // $152F + 132, // $1530 + 132, // $1531 + 132, // $1532 + 132, // $1533 + 132, // $1534 + 132, // $1535 + 132, // $1536 + 132, // $1537 + 132, // $1538 + 132, // $1539 + 132, // $153A + 132, // $153B + 132, // $153C + 132, // $153D + 132, // $153E + 132, // $153F + 132, // $1540 + 132, // $1541 + 132, // $1542 + 132, // $1543 + 132, // $1544 + 132, // $1545 + 132, // $1546 + 132, // $1547 + 132, // $1548 + 132, // $1549 + 132, // $154A + 132, // $154B + 132, // $154C + 132, // $154D + 132, // $154E + 132, // $154F + 132, // $1550 + 132, // $1551 + 132, // $1552 + 132, // $1553 + 132, // $1554 + 132, // $1555 + 132, // $1556 + 132, // $1557 + 132, // $1558 + 132, // $1559 + 132, // $155A + 132, // $155B + 132, // $155C + 132, // $155D + 132, // $155E + 132, // $155F + 132, // $1560 + 132, // $1561 + 132, // $1562 + 132, // $1563 + 132, // $1564 + 132, // $1565 + 132, // $1566 + 132, // $1567 + 132, // $1568 + 132, // $1569 + 132, // $156A + 132, // $156B + 132, // $156C + 132, // $156D + 132, // $156E + 132, // $156F + 132, // $1570 + 132, // $1571 + 132, // $1572 + 132, // $1573 + 132, // $1574 + 132, // $1575 + 132, // $1576 + 132, // $1577 + 132, // $1578 + 132, // $1579 + 132, // $157A + 132, // $157B + 132, // $157C + 132, // $157D + 132, // $157E + 132, // $157F + 132, // $1580 + 132, // $1581 + 132, // $1582 + 132, // $1583 + 132, // $1584 + 132, // $1585 + 132, // $1586 + 132, // $1587 + 132, // $1588 + 132, // $1589 + 132, // $158A + 132, // $158B + 132, // $158C + 132, // $158D + 132, // $158E + 132, // $158F + 132, // $1590 + 132, // $1591 + 132, // $1592 + 132, // $1593 + 132, // $1594 + 132, // $1595 + 132, // $1596 + 132, // $1597 + 132, // $1598 + 132, // $1599 + 132, // $159A + 132, // $159B + 132, // $159C + 132, // $159D + 132, // $159E + 132, // $159F + 132, // $15A0 + 132, // $15A1 + 132, // $15A2 + 132, // $15A3 + 132, // $15A4 + 132, // $15A5 + 132, // $15A6 + 132, // $15A7 + 132, // $15A8 + 132, // $15A9 + 132, // $15AA + 132, // $15AB + 132, // $15AC + 132, // $15AD + 132, // $15AE + 132, // $15AF + 132, // $15B0 + 132, // $15B1 + 132, // $15B2 + 132, // $15B3 + 132, // $15B4 + 132, // $15B5 + 132, // $15B6 + 132, // $15B7 + 132, // $15B8 + 132, // $15B9 + 132, // $15BA + 132, // $15BB + 132, // $15BC + 132, // $15BD + 132, // $15BE + 132, // $15BF + 132, // $15C0 + 132, // $15C1 + 132, // $15C2 + 132, // $15C3 + 132, // $15C4 + 132, // $15C5 + 132, // $15C6 + 132, // $15C7 + 132, // $15C8 + 132, // $15C9 + 132, // $15CA + 132, // $15CB + 132, // $15CC + 132, // $15CD + 132, // $15CE + 132, // $15CF + 132, // $15D0 + 132, // $15D1 + 132, // $15D2 + 132, // $15D3 + 132, // $15D4 + 132, // $15D5 + 132, // $15D6 + 132, // $15D7 + 132, // $15D8 + 132, // $15D9 + 132, // $15DA + 132, // $15DB + 132, // $15DC + 132, // $15DD + 132, // $15DE + 132, // $15DF + 132, // $15E0 + 132, // $15E1 + 132, // $15E2 + 132, // $15E3 + 132, // $15E4 + 132, // $15E5 + 132, // $15E6 + 132, // $15E7 + 132, // $15E8 + 132, // $15E9 + 132, // $15EA + 132, // $15EB + 132, // $15EC + 132, // $15ED + 132, // $15EE + 132, // $15EF + 132, // $15F0 + 132, // $15F1 + 132, // $15F2 + 132, // $15F3 + 132, // $15F4 + 132, // $15F5 + 132, // $15F6 + 132, // $15F7 + 132, // $15F8 + 132, // $15F9 + 132, // $15FA + 132, // $15FB + 132, // $15FC + 132, // $15FD + 132, // $15FE + 132, // $15FF + 132, // $1600 + 132, // $1601 + 132, // $1602 + 132, // $1603 + 132, // $1604 + 132, // $1605 + 132, // $1606 + 132, // $1607 + 132, // $1608 + 132, // $1609 + 132, // $160A + 132, // $160B + 132, // $160C + 132, // $160D + 132, // $160E + 132, // $160F + 132, // $1610 + 132, // $1611 + 132, // $1612 + 132, // $1613 + 132, // $1614 + 132, // $1615 + 132, // $1616 + 132, // $1617 + 132, // $1618 + 132, // $1619 + 132, // $161A + 132, // $161B + 132, // $161C + 132, // $161D + 132, // $161E + 132, // $161F + 132, // $1620 + 132, // $1621 + 132, // $1622 + 132, // $1623 + 132, // $1624 + 132, // $1625 + 132, // $1626 + 132, // $1627 + 132, // $1628 + 132, // $1629 + 132, // $162A + 132, // $162B + 132, // $162C + 132, // $162D + 132, // $162E + 132, // $162F + 132, // $1630 + 132, // $1631 + 132, // $1632 + 132, // $1633 + 132, // $1634 + 132, // $1635 + 132, // $1636 + 132, // $1637 + 132, // $1638 + 132, // $1639 + 132, // $163A + 132, // $163B + 132, // $163C + 132, // $163D + 132, // $163E + 132, // $163F + 132, // $1640 + 132, // $1641 + 132, // $1642 + 132, // $1643 + 132, // $1644 + 132, // $1645 + 132, // $1646 + 132, // $1647 + 132, // $1648 + 132, // $1649 + 132, // $164A + 132, // $164B + 132, // $164C + 132, // $164D + 132, // $164E + 132, // $164F + 132, // $1650 + 132, // $1651 + 132, // $1652 + 132, // $1653 + 132, // $1654 + 132, // $1655 + 132, // $1656 + 132, // $1657 + 132, // $1658 + 132, // $1659 + 132, // $165A + 132, // $165B + 132, // $165C + 132, // $165D + 132, // $165E + 132, // $165F + 132, // $1660 + 132, // $1661 + 132, // $1662 + 132, // $1663 + 132, // $1664 + 132, // $1665 + 132, // $1666 + 132, // $1667 + 132, // $1668 + 132, // $1669 + 132, // $166A + 132, // $166B + 132, // $166C + 17, // $166D + 17, // $166E + 132, // $166F + 132, // $1670 + 132, // $1671 + 132, // $1672 + 132, // $1673 + 132, // $1674 + 132, // $1675 + 132, // $1676 + 132, // $1677 + 132, // $1678 + 132, // $1679 + 132, // $167A + 132, // $167B + 132, // $167C + 132, // $167D + 132, // $167E + 132, // $167F + 22, // $1680 + 132, // $1681 + 132, // $1682 + 132, // $1683 + 132, // $1684 + 132, // $1685 + 132, // $1686 + 132, // $1687 + 132, // $1688 + 132, // $1689 + 132, // $168A + 132, // $168B + 132, // $168C + 132, // $168D + 132, // $168E + 132, // $168F + 132, // $1690 + 132, // $1691 + 132, // $1692 + 132, // $1693 + 132, // $1694 + 132, // $1695 + 132, // $1696 + 132, // $1697 + 132, // $1698 + 132, // $1699 + 132, // $169A + 13, // $169B + 14, // $169C + 29, // $169D + 29, // $169E + 29, // $169F + 132, // $16A0 + 132, // $16A1 + 132, // $16A2 + 132, // $16A3 + 132, // $16A4 + 132, // $16A5 + 132, // $16A6 + 132, // $16A7 + 132, // $16A8 + 132, // $16A9 + 132, // $16AA + 132, // $16AB + 132, // $16AC + 132, // $16AD + 132, // $16AE + 132, // $16AF + 132, // $16B0 + 132, // $16B1 + 132, // $16B2 + 132, // $16B3 + 132, // $16B4 + 132, // $16B5 + 132, // $16B6 + 132, // $16B7 + 132, // $16B8 + 132, // $16B9 + 132, // $16BA + 132, // $16BB + 132, // $16BC + 132, // $16BD + 132, // $16BE + 132, // $16BF + 132, // $16C0 + 132, // $16C1 + 132, // $16C2 + 132, // $16C3 + 132, // $16C4 + 132, // $16C5 + 132, // $16C6 + 132, // $16C7 + 132, // $16C8 + 132, // $16C9 + 132, // $16CA + 132, // $16CB + 132, // $16CC + 132, // $16CD + 132, // $16CE + 132, // $16CF + 132, // $16D0 + 132, // $16D1 + 132, // $16D2 + 132, // $16D3 + 132, // $16D4 + 132, // $16D5 + 132, // $16D6 + 132, // $16D7 + 132, // $16D8 + 132, // $16D9 + 132, // $16DA + 132, // $16DB + 132, // $16DC + 132, // $16DD + 132, // $16DE + 132, // $16DF + 132, // $16E0 + 132, // $16E1 + 132, // $16E2 + 132, // $16E3 + 132, // $16E4 + 132, // $16E5 + 132, // $16E6 + 132, // $16E7 + 132, // $16E8 + 132, // $16E9 + 132, // $16EA + 17, // $16EB + 17, // $16EC + 17, // $16ED + 137, // $16EE + 137, // $16EF + 137, // $16F0 + 132, // $16F1 + 132, // $16F2 + 132, // $16F3 + 132, // $16F4 + 132, // $16F5 + 132, // $16F6 + 132, // $16F7 + 132, // $16F8 + 29, // $16F9 + 29, // $16FA + 29, // $16FB + 29, // $16FC + 29, // $16FD + 29, // $16FE + 29, // $16FF + 132, // $1700 + 132, // $1701 + 132, // $1702 + 132, // $1703 + 132, // $1704 + 132, // $1705 + 132, // $1706 + 132, // $1707 + 132, // $1708 + 132, // $1709 + 132, // $170A + 132, // $170B + 132, // $170C + 29, // $170D + 132, // $170E + 132, // $170F + 132, // $1710 + 132, // $1711 + 133, // $1712 + 133, // $1713 + 133, // $1714 + 29, // $1715 + 29, // $1716 + 29, // $1717 + 29, // $1718 + 29, // $1719 + 29, // $171A + 29, // $171B + 29, // $171C + 29, // $171D + 29, // $171E + 29, // $171F + 132, // $1720 + 132, // $1721 + 132, // $1722 + 132, // $1723 + 132, // $1724 + 132, // $1725 + 132, // $1726 + 132, // $1727 + 132, // $1728 + 132, // $1729 + 132, // $172A + 132, // $172B + 132, // $172C + 132, // $172D + 132, // $172E + 132, // $172F + 132, // $1730 + 132, // $1731 + 133, // $1732 + 133, // $1733 + 133, // $1734 + 17, // $1735 + 17, // $1736 + 29, // $1737 + 29, // $1738 + 29, // $1739 + 29, // $173A + 29, // $173B + 29, // $173C + 29, // $173D + 29, // $173E + 29, // $173F + 132, // $1740 + 132, // $1741 + 132, // $1742 + 132, // $1743 + 132, // $1744 + 132, // $1745 + 132, // $1746 + 132, // $1747 + 132, // $1748 + 132, // $1749 + 132, // $174A + 132, // $174B + 132, // $174C + 132, // $174D + 132, // $174E + 132, // $174F + 132, // $1750 + 132, // $1751 + 133, // $1752 + 133, // $1753 + 29, // $1754 + 29, // $1755 + 29, // $1756 + 29, // $1757 + 29, // $1758 + 29, // $1759 + 29, // $175A + 29, // $175B + 29, // $175C + 29, // $175D + 29, // $175E + 29, // $175F + 132, // $1760 + 132, // $1761 + 132, // $1762 + 132, // $1763 + 132, // $1764 + 132, // $1765 + 132, // $1766 + 132, // $1767 + 132, // $1768 + 132, // $1769 + 132, // $176A + 132, // $176B + 132, // $176C + 29, // $176D + 132, // $176E + 132, // $176F + 132, // $1770 + 29, // $1771 + 133, // $1772 + 133, // $1773 + 29, // $1774 + 29, // $1775 + 29, // $1776 + 29, // $1777 + 29, // $1778 + 29, // $1779 + 29, // $177A + 29, // $177B + 29, // $177C + 29, // $177D + 29, // $177E + 29, // $177F + 132, // $1780 + 132, // $1781 + 132, // $1782 + 132, // $1783 + 132, // $1784 + 132, // $1785 + 132, // $1786 + 132, // $1787 + 132, // $1788 + 132, // $1789 + 132, // $178A + 132, // $178B + 132, // $178C + 132, // $178D + 132, // $178E + 132, // $178F + 132, // $1790 + 132, // $1791 + 132, // $1792 + 132, // $1793 + 132, // $1794 + 132, // $1795 + 132, // $1796 + 132, // $1797 + 132, // $1798 + 132, // $1799 + 132, // $179A + 132, // $179B + 132, // $179C + 132, // $179D + 132, // $179E + 132, // $179F + 132, // $17A0 + 132, // $17A1 + 132, // $17A2 + 132, // $17A3 + 132, // $17A4 + 132, // $17A5 + 132, // $17A6 + 132, // $17A7 + 132, // $17A8 + 132, // $17A9 + 132, // $17AA + 132, // $17AB + 132, // $17AC + 132, // $17AD + 132, // $17AE + 132, // $17AF + 132, // $17B0 + 132, // $17B1 + 132, // $17B2 + 132, // $17B3 + 133, // $17B4 + 133, // $17B5 + 134, // $17B6 + 133, // $17B7 + 133, // $17B8 + 133, // $17B9 + 133, // $17BA + 133, // $17BB + 133, // $17BC + 133, // $17BD + 134, // $17BE + 134, // $17BF + 134, // $17C0 + 134, // $17C1 + 134, // $17C2 + 134, // $17C3 + 134, // $17C4 + 134, // $17C5 + 133, // $17C6 + 134, // $17C7 + 134, // $17C8 + 133, // $17C9 + 133, // $17CA + 133, // $17CB + 133, // $17CC + 133, // $17CD + 133, // $17CE + 133, // $17CF + 133, // $17D0 + 133, // $17D1 + 133, // $17D2 + 133, // $17D3 + 17, // $17D4 + 17, // $17D5 + 17, // $17D6 + 131, // $17D7 + 17, // $17D8 + 17, // $17D9 + 17, // $17DA + 19, // $17DB + 132, // $17DC + 133, // $17DD + 29, // $17DE + 29, // $17DF + 136, // $17E0 + 136, // $17E1 + 136, // $17E2 + 136, // $17E3 + 136, // $17E4 + 136, // $17E5 + 136, // $17E6 + 136, // $17E7 + 136, // $17E8 + 136, // $17E9 + 29, // $17EA + 29, // $17EB + 29, // $17EC + 29, // $17ED + 29, // $17EE + 29, // $17EF + 138, // $17F0 + 138, // $17F1 + 138, // $17F2 + 138, // $17F3 + 138, // $17F4 + 138, // $17F5 + 138, // $17F6 + 138, // $17F7 + 138, // $17F8 + 138, // $17F9 + 29, // $17FA + 29, // $17FB + 29, // $17FC + 29, // $17FD + 29, // $17FE + 29, // $17FF + 17, // $1800 + 17, // $1801 + 17, // $1802 + 17, // $1803 + 17, // $1804 + 17, // $1805 + 12, // $1806 + 17, // $1807 + 17, // $1808 + 17, // $1809 + 17, // $180A + 133, // $180B + 133, // $180C + 133, // $180D + 26, // $180E + 29, // $180F + 136, // $1810 + 136, // $1811 + 136, // $1812 + 136, // $1813 + 136, // $1814 + 136, // $1815 + 136, // $1816 + 136, // $1817 + 136, // $1818 + 136, // $1819 + 29, // $181A + 29, // $181B + 29, // $181C + 29, // $181D + 29, // $181E + 29, // $181F + 132, // $1820 + 132, // $1821 + 132, // $1822 + 132, // $1823 + 132, // $1824 + 132, // $1825 + 132, // $1826 + 132, // $1827 + 132, // $1828 + 132, // $1829 + 132, // $182A + 132, // $182B + 132, // $182C + 132, // $182D + 132, // $182E + 132, // $182F + 132, // $1830 + 132, // $1831 + 132, // $1832 + 132, // $1833 + 132, // $1834 + 132, // $1835 + 132, // $1836 + 132, // $1837 + 132, // $1838 + 132, // $1839 + 132, // $183A + 132, // $183B + 132, // $183C + 132, // $183D + 132, // $183E + 132, // $183F + 132, // $1840 + 132, // $1841 + 132, // $1842 + 131, // $1843 + 132, // $1844 + 132, // $1845 + 132, // $1846 + 132, // $1847 + 132, // $1848 + 132, // $1849 + 132, // $184A + 132, // $184B + 132, // $184C + 132, // $184D + 132, // $184E + 132, // $184F + 132, // $1850 + 132, // $1851 + 132, // $1852 + 132, // $1853 + 132, // $1854 + 132, // $1855 + 132, // $1856 + 132, // $1857 + 132, // $1858 + 132, // $1859 + 132, // $185A + 132, // $185B + 132, // $185C + 132, // $185D + 132, // $185E + 132, // $185F + 132, // $1860 + 132, // $1861 + 132, // $1862 + 132, // $1863 + 132, // $1864 + 132, // $1865 + 132, // $1866 + 132, // $1867 + 132, // $1868 + 132, // $1869 + 132, // $186A + 132, // $186B + 132, // $186C + 132, // $186D + 132, // $186E + 132, // $186F + 132, // $1870 + 132, // $1871 + 132, // $1872 + 132, // $1873 + 132, // $1874 + 132, // $1875 + 132, // $1876 + 132, // $1877 + 29, // $1878 + 29, // $1879 + 29, // $187A + 29, // $187B + 29, // $187C + 29, // $187D + 29, // $187E + 29, // $187F + 132, // $1880 + 132, // $1881 + 132, // $1882 + 132, // $1883 + 132, // $1884 + 133, // $1885 + 133, // $1886 + 132, // $1887 + 132, // $1888 + 132, // $1889 + 132, // $188A + 132, // $188B + 132, // $188C + 132, // $188D + 132, // $188E + 132, // $188F + 132, // $1890 + 132, // $1891 + 132, // $1892 + 132, // $1893 + 132, // $1894 + 132, // $1895 + 132, // $1896 + 132, // $1897 + 132, // $1898 + 132, // $1899 + 132, // $189A + 132, // $189B + 132, // $189C + 132, // $189D + 132, // $189E + 132, // $189F + 132, // $18A0 + 132, // $18A1 + 132, // $18A2 + 132, // $18A3 + 132, // $18A4 + 132, // $18A5 + 132, // $18A6 + 132, // $18A7 + 132, // $18A8 + 133, // $18A9 + 132, // $18AA + 29, // $18AB + 29, // $18AC + 29, // $18AD + 29, // $18AE + 29, // $18AF + 132, // $18B0 + 132, // $18B1 + 132, // $18B2 + 132, // $18B3 + 132, // $18B4 + 132, // $18B5 + 132, // $18B6 + 132, // $18B7 + 132, // $18B8 + 132, // $18B9 + 132, // $18BA + 132, // $18BB + 132, // $18BC + 132, // $18BD + 132, // $18BE + 132, // $18BF + 132, // $18C0 + 132, // $18C1 + 132, // $18C2 + 132, // $18C3 + 132, // $18C4 + 132, // $18C5 + 132, // $18C6 + 132, // $18C7 + 132, // $18C8 + 132, // $18C9 + 132, // $18CA + 132, // $18CB + 132, // $18CC + 132, // $18CD + 132, // $18CE + 132, // $18CF + 132, // $18D0 + 132, // $18D1 + 132, // $18D2 + 132, // $18D3 + 132, // $18D4 + 132, // $18D5 + 132, // $18D6 + 132, // $18D7 + 132, // $18D8 + 132, // $18D9 + 132, // $18DA + 132, // $18DB + 132, // $18DC + 132, // $18DD + 132, // $18DE + 132, // $18DF + 132, // $18E0 + 132, // $18E1 + 132, // $18E2 + 132, // $18E3 + 132, // $18E4 + 132, // $18E5 + 132, // $18E6 + 132, // $18E7 + 132, // $18E8 + 132, // $18E9 + 132, // $18EA + 132, // $18EB + 132, // $18EC + 132, // $18ED + 132, // $18EE + 132, // $18EF + 132, // $18F0 + 132, // $18F1 + 132, // $18F2 + 132, // $18F3 + 132, // $18F4 + 132, // $18F5 + 29, // $18F6 + 29, // $18F7 + 29, // $18F8 + 29, // $18F9 + 29, // $18FA + 29, // $18FB + 29, // $18FC + 29, // $18FD + 29, // $18FE + 29, // $18FF + 132, // $1900 + 132, // $1901 + 132, // $1902 + 132, // $1903 + 132, // $1904 + 132, // $1905 + 132, // $1906 + 132, // $1907 + 132, // $1908 + 132, // $1909 + 132, // $190A + 132, // $190B + 132, // $190C + 132, // $190D + 132, // $190E + 132, // $190F + 132, // $1910 + 132, // $1911 + 132, // $1912 + 132, // $1913 + 132, // $1914 + 132, // $1915 + 132, // $1916 + 132, // $1917 + 132, // $1918 + 132, // $1919 + 132, // $191A + 132, // $191B + 132, // $191C + 132, // $191D + 132, // $191E + 29, // $191F + 133, // $1920 + 133, // $1921 + 133, // $1922 + 134, // $1923 + 134, // $1924 + 134, // $1925 + 134, // $1926 + 133, // $1927 + 133, // $1928 + 134, // $1929 + 134, // $192A + 134, // $192B + 29, // $192C + 29, // $192D + 29, // $192E + 29, // $192F + 134, // $1930 + 134, // $1931 + 133, // $1932 + 134, // $1933 + 134, // $1934 + 134, // $1935 + 134, // $1936 + 134, // $1937 + 134, // $1938 + 133, // $1939 + 133, // $193A + 133, // $193B + 29, // $193C + 29, // $193D + 29, // $193E + 29, // $193F + 21, // $1940 + 29, // $1941 + 29, // $1942 + 29, // $1943 + 17, // $1944 + 17, // $1945 + 136, // $1946 + 136, // $1947 + 136, // $1948 + 136, // $1949 + 136, // $194A + 136, // $194B + 136, // $194C + 136, // $194D + 136, // $194E + 136, // $194F + 132, // $1950 + 132, // $1951 + 132, // $1952 + 132, // $1953 + 132, // $1954 + 132, // $1955 + 132, // $1956 + 132, // $1957 + 132, // $1958 + 132, // $1959 + 132, // $195A + 132, // $195B + 132, // $195C + 132, // $195D + 132, // $195E + 132, // $195F + 132, // $1960 + 132, // $1961 + 132, // $1962 + 132, // $1963 + 132, // $1964 + 132, // $1965 + 132, // $1966 + 132, // $1967 + 132, // $1968 + 132, // $1969 + 132, // $196A + 132, // $196B + 132, // $196C + 132, // $196D + 29, // $196E + 29, // $196F + 132, // $1970 + 132, // $1971 + 132, // $1972 + 132, // $1973 + 132, // $1974 + 29, // $1975 + 29, // $1976 + 29, // $1977 + 29, // $1978 + 29, // $1979 + 29, // $197A + 29, // $197B + 29, // $197C + 29, // $197D + 29, // $197E + 29, // $197F + 132, // $1980 + 132, // $1981 + 132, // $1982 + 132, // $1983 + 132, // $1984 + 132, // $1985 + 132, // $1986 + 132, // $1987 + 132, // $1988 + 132, // $1989 + 132, // $198A + 132, // $198B + 132, // $198C + 132, // $198D + 132, // $198E + 132, // $198F + 132, // $1990 + 132, // $1991 + 132, // $1992 + 132, // $1993 + 132, // $1994 + 132, // $1995 + 132, // $1996 + 132, // $1997 + 132, // $1998 + 132, // $1999 + 132, // $199A + 132, // $199B + 132, // $199C + 132, // $199D + 132, // $199E + 132, // $199F + 132, // $19A0 + 132, // $19A1 + 132, // $19A2 + 132, // $19A3 + 132, // $19A4 + 132, // $19A5 + 132, // $19A6 + 132, // $19A7 + 132, // $19A8 + 132, // $19A9 + 132, // $19AA + 132, // $19AB + 29, // $19AC + 29, // $19AD + 29, // $19AE + 29, // $19AF + 132, // $19B0 + 132, // $19B1 + 132, // $19B2 + 132, // $19B3 + 132, // $19B4 + 132, // $19B5 + 132, // $19B6 + 132, // $19B7 + 132, // $19B8 + 132, // $19B9 + 132, // $19BA + 132, // $19BB + 132, // $19BC + 132, // $19BD + 132, // $19BE + 132, // $19BF + 132, // $19C0 + 132, // $19C1 + 132, // $19C2 + 132, // $19C3 + 132, // $19C4 + 132, // $19C5 + 132, // $19C6 + 132, // $19C7 + 132, // $19C8 + 132, // $19C9 + 29, // $19CA + 29, // $19CB + 29, // $19CC + 29, // $19CD + 29, // $19CE + 29, // $19CF + 136, // $19D0 + 136, // $19D1 + 136, // $19D2 + 136, // $19D3 + 136, // $19D4 + 136, // $19D5 + 136, // $19D6 + 136, // $19D7 + 136, // $19D8 + 136, // $19D9 + 138, // $19DA + 29, // $19DB + 29, // $19DC + 29, // $19DD + 21, // $19DE + 21, // $19DF + 21, // $19E0 + 21, // $19E1 + 21, // $19E2 + 21, // $19E3 + 21, // $19E4 + 21, // $19E5 + 21, // $19E6 + 21, // $19E7 + 21, // $19E8 + 21, // $19E9 + 21, // $19EA + 21, // $19EB + 21, // $19EC + 21, // $19ED + 21, // $19EE + 21, // $19EF + 21, // $19F0 + 21, // $19F1 + 21, // $19F2 + 21, // $19F3 + 21, // $19F4 + 21, // $19F5 + 21, // $19F6 + 21, // $19F7 + 21, // $19F8 + 21, // $19F9 + 21, // $19FA + 21, // $19FB + 21, // $19FC + 21, // $19FD + 21, // $19FE + 21, // $19FF + 132, // $1A00 + 132, // $1A01 + 132, // $1A02 + 132, // $1A03 + 132, // $1A04 + 132, // $1A05 + 132, // $1A06 + 132, // $1A07 + 132, // $1A08 + 132, // $1A09 + 132, // $1A0A + 132, // $1A0B + 132, // $1A0C + 132, // $1A0D + 132, // $1A0E + 132, // $1A0F + 132, // $1A10 + 132, // $1A11 + 132, // $1A12 + 132, // $1A13 + 132, // $1A14 + 132, // $1A15 + 132, // $1A16 + 133, // $1A17 + 133, // $1A18 + 134, // $1A19 + 134, // $1A1A + 133, // $1A1B + 29, // $1A1C + 29, // $1A1D + 17, // $1A1E + 17, // $1A1F + 132, // $1A20 + 132, // $1A21 + 132, // $1A22 + 132, // $1A23 + 132, // $1A24 + 132, // $1A25 + 132, // $1A26 + 132, // $1A27 + 132, // $1A28 + 132, // $1A29 + 132, // $1A2A + 132, // $1A2B + 132, // $1A2C + 132, // $1A2D + 132, // $1A2E + 132, // $1A2F + 132, // $1A30 + 132, // $1A31 + 132, // $1A32 + 132, // $1A33 + 132, // $1A34 + 132, // $1A35 + 132, // $1A36 + 132, // $1A37 + 132, // $1A38 + 132, // $1A39 + 132, // $1A3A + 132, // $1A3B + 132, // $1A3C + 132, // $1A3D + 132, // $1A3E + 132, // $1A3F + 132, // $1A40 + 132, // $1A41 + 132, // $1A42 + 132, // $1A43 + 132, // $1A44 + 132, // $1A45 + 132, // $1A46 + 132, // $1A47 + 132, // $1A48 + 132, // $1A49 + 132, // $1A4A + 132, // $1A4B + 132, // $1A4C + 132, // $1A4D + 132, // $1A4E + 132, // $1A4F + 132, // $1A50 + 132, // $1A51 + 132, // $1A52 + 132, // $1A53 + 132, // $1A54 + 134, // $1A55 + 133, // $1A56 + 134, // $1A57 + 133, // $1A58 + 133, // $1A59 + 133, // $1A5A + 133, // $1A5B + 133, // $1A5C + 133, // $1A5D + 133, // $1A5E + 29, // $1A5F + 133, // $1A60 + 134, // $1A61 + 133, // $1A62 + 134, // $1A63 + 134, // $1A64 + 133, // $1A65 + 133, // $1A66 + 133, // $1A67 + 133, // $1A68 + 133, // $1A69 + 133, // $1A6A + 133, // $1A6B + 133, // $1A6C + 134, // $1A6D + 134, // $1A6E + 134, // $1A6F + 134, // $1A70 + 134, // $1A71 + 134, // $1A72 + 133, // $1A73 + 133, // $1A74 + 133, // $1A75 + 133, // $1A76 + 133, // $1A77 + 133, // $1A78 + 133, // $1A79 + 133, // $1A7A + 133, // $1A7B + 133, // $1A7C + 29, // $1A7D + 29, // $1A7E + 133, // $1A7F + 136, // $1A80 + 136, // $1A81 + 136, // $1A82 + 136, // $1A83 + 136, // $1A84 + 136, // $1A85 + 136, // $1A86 + 136, // $1A87 + 136, // $1A88 + 136, // $1A89 + 29, // $1A8A + 29, // $1A8B + 29, // $1A8C + 29, // $1A8D + 29, // $1A8E + 29, // $1A8F + 136, // $1A90 + 136, // $1A91 + 136, // $1A92 + 136, // $1A93 + 136, // $1A94 + 136, // $1A95 + 136, // $1A96 + 136, // $1A97 + 136, // $1A98 + 136, // $1A99 + 29, // $1A9A + 29, // $1A9B + 29, // $1A9C + 29, // $1A9D + 29, // $1A9E + 29, // $1A9F + 17, // $1AA0 + 17, // $1AA1 + 17, // $1AA2 + 17, // $1AA3 + 17, // $1AA4 + 17, // $1AA5 + 17, // $1AA6 + 131, // $1AA7 + 17, // $1AA8 + 17, // $1AA9 + 17, // $1AAA + 17, // $1AAB + 17, // $1AAC + 17, // $1AAD + 29, // $1AAE + 29, // $1AAF + 133, // $1AB0 + 133, // $1AB1 + 133, // $1AB2 + 133, // $1AB3 + 133, // $1AB4 + 133, // $1AB5 + 133, // $1AB6 + 133, // $1AB7 + 133, // $1AB8 + 133, // $1AB9 + 133, // $1ABA + 133, // $1ABB + 133, // $1ABC + 133, // $1ABD + 135, // $1ABE + 29, // $1ABF + 29, // $1AC0 + 29, // $1AC1 + 29, // $1AC2 + 29, // $1AC3 + 29, // $1AC4 + 29, // $1AC5 + 29, // $1AC6 + 29, // $1AC7 + 29, // $1AC8 + 29, // $1AC9 + 29, // $1ACA + 29, // $1ACB + 29, // $1ACC + 29, // $1ACD + 29, // $1ACE + 29, // $1ACF + 29, // $1AD0 + 29, // $1AD1 + 29, // $1AD2 + 29, // $1AD3 + 29, // $1AD4 + 29, // $1AD5 + 29, // $1AD6 + 29, // $1AD7 + 29, // $1AD8 + 29, // $1AD9 + 29, // $1ADA + 29, // $1ADB + 29, // $1ADC + 29, // $1ADD + 29, // $1ADE + 29, // $1ADF + 29, // $1AE0 + 29, // $1AE1 + 29, // $1AE2 + 29, // $1AE3 + 29, // $1AE4 + 29, // $1AE5 + 29, // $1AE6 + 29, // $1AE7 + 29, // $1AE8 + 29, // $1AE9 + 29, // $1AEA + 29, // $1AEB + 29, // $1AEC + 29, // $1AED + 29, // $1AEE + 29, // $1AEF + 29, // $1AF0 + 29, // $1AF1 + 29, // $1AF2 + 29, // $1AF3 + 29, // $1AF4 + 29, // $1AF5 + 29, // $1AF6 + 29, // $1AF7 + 29, // $1AF8 + 29, // $1AF9 + 29, // $1AFA + 29, // $1AFB + 29, // $1AFC + 29, // $1AFD + 29, // $1AFE + 29, // $1AFF + 133, // $1B00 + 133, // $1B01 + 133, // $1B02 + 133, // $1B03 + 134, // $1B04 + 132, // $1B05 + 132, // $1B06 + 132, // $1B07 + 132, // $1B08 + 132, // $1B09 + 132, // $1B0A + 132, // $1B0B + 132, // $1B0C + 132, // $1B0D + 132, // $1B0E + 132, // $1B0F + 132, // $1B10 + 132, // $1B11 + 132, // $1B12 + 132, // $1B13 + 132, // $1B14 + 132, // $1B15 + 132, // $1B16 + 132, // $1B17 + 132, // $1B18 + 132, // $1B19 + 132, // $1B1A + 132, // $1B1B + 132, // $1B1C + 132, // $1B1D + 132, // $1B1E + 132, // $1B1F + 132, // $1B20 + 132, // $1B21 + 132, // $1B22 + 132, // $1B23 + 132, // $1B24 + 132, // $1B25 + 132, // $1B26 + 132, // $1B27 + 132, // $1B28 + 132, // $1B29 + 132, // $1B2A + 132, // $1B2B + 132, // $1B2C + 132, // $1B2D + 132, // $1B2E + 132, // $1B2F + 132, // $1B30 + 132, // $1B31 + 132, // $1B32 + 132, // $1B33 + 133, // $1B34 + 134, // $1B35 + 133, // $1B36 + 133, // $1B37 + 133, // $1B38 + 133, // $1B39 + 133, // $1B3A + 134, // $1B3B + 133, // $1B3C + 134, // $1B3D + 134, // $1B3E + 134, // $1B3F + 134, // $1B40 + 134, // $1B41 + 133, // $1B42 + 134, // $1B43 + 134, // $1B44 + 132, // $1B45 + 132, // $1B46 + 132, // $1B47 + 132, // $1B48 + 132, // $1B49 + 132, // $1B4A + 132, // $1B4B + 29, // $1B4C + 29, // $1B4D + 29, // $1B4E + 29, // $1B4F + 136, // $1B50 + 136, // $1B51 + 136, // $1B52 + 136, // $1B53 + 136, // $1B54 + 136, // $1B55 + 136, // $1B56 + 136, // $1B57 + 136, // $1B58 + 136, // $1B59 + 17, // $1B5A + 17, // $1B5B + 17, // $1B5C + 17, // $1B5D + 17, // $1B5E + 17, // $1B5F + 17, // $1B60 + 21, // $1B61 + 21, // $1B62 + 21, // $1B63 + 21, // $1B64 + 21, // $1B65 + 21, // $1B66 + 21, // $1B67 + 21, // $1B68 + 21, // $1B69 + 21, // $1B6A + 133, // $1B6B + 133, // $1B6C + 133, // $1B6D + 133, // $1B6E + 133, // $1B6F + 133, // $1B70 + 133, // $1B71 + 133, // $1B72 + 133, // $1B73 + 21, // $1B74 + 21, // $1B75 + 21, // $1B76 + 21, // $1B77 + 21, // $1B78 + 21, // $1B79 + 21, // $1B7A + 21, // $1B7B + 21, // $1B7C + 29, // $1B7D + 29, // $1B7E + 29, // $1B7F + 133, // $1B80 + 133, // $1B81 + 134, // $1B82 + 132, // $1B83 + 132, // $1B84 + 132, // $1B85 + 132, // $1B86 + 132, // $1B87 + 132, // $1B88 + 132, // $1B89 + 132, // $1B8A + 132, // $1B8B + 132, // $1B8C + 132, // $1B8D + 132, // $1B8E + 132, // $1B8F + 132, // $1B90 + 132, // $1B91 + 132, // $1B92 + 132, // $1B93 + 132, // $1B94 + 132, // $1B95 + 132, // $1B96 + 132, // $1B97 + 132, // $1B98 + 132, // $1B99 + 132, // $1B9A + 132, // $1B9B + 132, // $1B9C + 132, // $1B9D + 132, // $1B9E + 132, // $1B9F + 132, // $1BA0 + 134, // $1BA1 + 133, // $1BA2 + 133, // $1BA3 + 133, // $1BA4 + 133, // $1BA5 + 134, // $1BA6 + 134, // $1BA7 + 133, // $1BA8 + 133, // $1BA9 + 134, // $1BAA + 133, // $1BAB + 133, // $1BAC + 133, // $1BAD + 132, // $1BAE + 132, // $1BAF + 136, // $1BB0 + 136, // $1BB1 + 136, // $1BB2 + 136, // $1BB3 + 136, // $1BB4 + 136, // $1BB5 + 136, // $1BB6 + 136, // $1BB7 + 136, // $1BB8 + 136, // $1BB9 + 132, // $1BBA + 132, // $1BBB + 132, // $1BBC + 132, // $1BBD + 132, // $1BBE + 132, // $1BBF + 132, // $1BC0 + 132, // $1BC1 + 132, // $1BC2 + 132, // $1BC3 + 132, // $1BC4 + 132, // $1BC5 + 132, // $1BC6 + 132, // $1BC7 + 132, // $1BC8 + 132, // $1BC9 + 132, // $1BCA + 132, // $1BCB + 132, // $1BCC + 132, // $1BCD + 132, // $1BCE + 132, // $1BCF + 132, // $1BD0 + 132, // $1BD1 + 132, // $1BD2 + 132, // $1BD3 + 132, // $1BD4 + 132, // $1BD5 + 132, // $1BD6 + 132, // $1BD7 + 132, // $1BD8 + 132, // $1BD9 + 132, // $1BDA + 132, // $1BDB + 132, // $1BDC + 132, // $1BDD + 132, // $1BDE + 132, // $1BDF + 132, // $1BE0 + 132, // $1BE1 + 132, // $1BE2 + 132, // $1BE3 + 132, // $1BE4 + 132, // $1BE5 + 133, // $1BE6 + 134, // $1BE7 + 133, // $1BE8 + 133, // $1BE9 + 134, // $1BEA + 134, // $1BEB + 134, // $1BEC + 133, // $1BED + 134, // $1BEE + 133, // $1BEF + 133, // $1BF0 + 133, // $1BF1 + 134, // $1BF2 + 134, // $1BF3 + 29, // $1BF4 + 29, // $1BF5 + 29, // $1BF6 + 29, // $1BF7 + 29, // $1BF8 + 29, // $1BF9 + 29, // $1BFA + 29, // $1BFB + 17, // $1BFC + 17, // $1BFD + 17, // $1BFE + 17, // $1BFF + 132, // $1C00 + 132, // $1C01 + 132, // $1C02 + 132, // $1C03 + 132, // $1C04 + 132, // $1C05 + 132, // $1C06 + 132, // $1C07 + 132, // $1C08 + 132, // $1C09 + 132, // $1C0A + 132, // $1C0B + 132, // $1C0C + 132, // $1C0D + 132, // $1C0E + 132, // $1C0F + 132, // $1C10 + 132, // $1C11 + 132, // $1C12 + 132, // $1C13 + 132, // $1C14 + 132, // $1C15 + 132, // $1C16 + 132, // $1C17 + 132, // $1C18 + 132, // $1C19 + 132, // $1C1A + 132, // $1C1B + 132, // $1C1C + 132, // $1C1D + 132, // $1C1E + 132, // $1C1F + 132, // $1C20 + 132, // $1C21 + 132, // $1C22 + 132, // $1C23 + 134, // $1C24 + 134, // $1C25 + 134, // $1C26 + 134, // $1C27 + 134, // $1C28 + 134, // $1C29 + 134, // $1C2A + 134, // $1C2B + 133, // $1C2C + 133, // $1C2D + 133, // $1C2E + 133, // $1C2F + 133, // $1C30 + 133, // $1C31 + 133, // $1C32 + 133, // $1C33 + 134, // $1C34 + 134, // $1C35 + 133, // $1C36 + 133, // $1C37 + 29, // $1C38 + 29, // $1C39 + 29, // $1C3A + 17, // $1C3B + 17, // $1C3C + 17, // $1C3D + 17, // $1C3E + 17, // $1C3F + 136, // $1C40 + 136, // $1C41 + 136, // $1C42 + 136, // $1C43 + 136, // $1C44 + 136, // $1C45 + 136, // $1C46 + 136, // $1C47 + 136, // $1C48 + 136, // $1C49 + 29, // $1C4A + 29, // $1C4B + 29, // $1C4C + 132, // $1C4D + 132, // $1C4E + 132, // $1C4F + 136, // $1C50 + 136, // $1C51 + 136, // $1C52 + 136, // $1C53 + 136, // $1C54 + 136, // $1C55 + 136, // $1C56 + 136, // $1C57 + 136, // $1C58 + 136, // $1C59 + 132, // $1C5A + 132, // $1C5B + 132, // $1C5C + 132, // $1C5D + 132, // $1C5E + 132, // $1C5F + 132, // $1C60 + 132, // $1C61 + 132, // $1C62 + 132, // $1C63 + 132, // $1C64 + 132, // $1C65 + 132, // $1C66 + 132, // $1C67 + 132, // $1C68 + 132, // $1C69 + 132, // $1C6A + 132, // $1C6B + 132, // $1C6C + 132, // $1C6D + 132, // $1C6E + 132, // $1C6F + 132, // $1C70 + 132, // $1C71 + 132, // $1C72 + 132, // $1C73 + 132, // $1C74 + 132, // $1C75 + 132, // $1C76 + 132, // $1C77 + 131, // $1C78 + 131, // $1C79 + 131, // $1C7A + 131, // $1C7B + 131, // $1C7C + 131, // $1C7D + 17, // $1C7E + 17, // $1C7F + 129, // $1C80 + 129, // $1C81 + 129, // $1C82 + 129, // $1C83 + 129, // $1C84 + 129, // $1C85 + 129, // $1C86 + 129, // $1C87 + 129, // $1C88 + 29, // $1C89 + 29, // $1C8A + 29, // $1C8B + 29, // $1C8C + 29, // $1C8D + 29, // $1C8E + 29, // $1C8F + 29, // $1C90 + 29, // $1C91 + 29, // $1C92 + 29, // $1C93 + 29, // $1C94 + 29, // $1C95 + 29, // $1C96 + 29, // $1C97 + 29, // $1C98 + 29, // $1C99 + 29, // $1C9A + 29, // $1C9B + 29, // $1C9C + 29, // $1C9D + 29, // $1C9E + 29, // $1C9F + 29, // $1CA0 + 29, // $1CA1 + 29, // $1CA2 + 29, // $1CA3 + 29, // $1CA4 + 29, // $1CA5 + 29, // $1CA6 + 29, // $1CA7 + 29, // $1CA8 + 29, // $1CA9 + 29, // $1CAA + 29, // $1CAB + 29, // $1CAC + 29, // $1CAD + 29, // $1CAE + 29, // $1CAF + 29, // $1CB0 + 29, // $1CB1 + 29, // $1CB2 + 29, // $1CB3 + 29, // $1CB4 + 29, // $1CB5 + 29, // $1CB6 + 29, // $1CB7 + 29, // $1CB8 + 29, // $1CB9 + 29, // $1CBA + 29, // $1CBB + 29, // $1CBC + 29, // $1CBD + 29, // $1CBE + 29, // $1CBF + 17, // $1CC0 + 17, // $1CC1 + 17, // $1CC2 + 17, // $1CC3 + 17, // $1CC4 + 17, // $1CC5 + 17, // $1CC6 + 17, // $1CC7 + 29, // $1CC8 + 29, // $1CC9 + 29, // $1CCA + 29, // $1CCB + 29, // $1CCC + 29, // $1CCD + 29, // $1CCE + 29, // $1CCF + 133, // $1CD0 + 133, // $1CD1 + 133, // $1CD2 + 17, // $1CD3 + 133, // $1CD4 + 133, // $1CD5 + 133, // $1CD6 + 133, // $1CD7 + 133, // $1CD8 + 133, // $1CD9 + 133, // $1CDA + 133, // $1CDB + 133, // $1CDC + 133, // $1CDD + 133, // $1CDE + 133, // $1CDF + 133, // $1CE0 + 134, // $1CE1 + 133, // $1CE2 + 133, // $1CE3 + 133, // $1CE4 + 133, // $1CE5 + 133, // $1CE6 + 133, // $1CE7 + 133, // $1CE8 + 132, // $1CE9 + 132, // $1CEA + 132, // $1CEB + 132, // $1CEC + 133, // $1CED + 132, // $1CEE + 132, // $1CEF + 132, // $1CF0 + 132, // $1CF1 + 134, // $1CF2 + 134, // $1CF3 + 133, // $1CF4 + 132, // $1CF5 + 132, // $1CF6 + 29, // $1CF7 + 133, // $1CF8 + 133, // $1CF9 + 29, // $1CFA + 29, // $1CFB + 29, // $1CFC + 29, // $1CFD + 29, // $1CFE + 29, // $1CFF + 129, // $1D00 + 129, // $1D01 + 129, // $1D02 + 129, // $1D03 + 129, // $1D04 + 129, // $1D05 + 129, // $1D06 + 129, // $1D07 + 129, // $1D08 + 129, // $1D09 + 129, // $1D0A + 129, // $1D0B + 129, // $1D0C + 129, // $1D0D + 129, // $1D0E + 129, // $1D0F + 129, // $1D10 + 129, // $1D11 + 129, // $1D12 + 129, // $1D13 + 129, // $1D14 + 129, // $1D15 + 129, // $1D16 + 129, // $1D17 + 129, // $1D18 + 129, // $1D19 + 129, // $1D1A + 129, // $1D1B + 129, // $1D1C + 129, // $1D1D + 129, // $1D1E + 129, // $1D1F + 129, // $1D20 + 129, // $1D21 + 129, // $1D22 + 129, // $1D23 + 129, // $1D24 + 129, // $1D25 + 129, // $1D26 + 129, // $1D27 + 129, // $1D28 + 129, // $1D29 + 129, // $1D2A + 129, // $1D2B + 131, // $1D2C + 131, // $1D2D + 131, // $1D2E + 131, // $1D2F + 131, // $1D30 + 131, // $1D31 + 131, // $1D32 + 131, // $1D33 + 131, // $1D34 + 131, // $1D35 + 131, // $1D36 + 131, // $1D37 + 131, // $1D38 + 131, // $1D39 + 131, // $1D3A + 131, // $1D3B + 131, // $1D3C + 131, // $1D3D + 131, // $1D3E + 131, // $1D3F + 131, // $1D40 + 131, // $1D41 + 131, // $1D42 + 131, // $1D43 + 131, // $1D44 + 131, // $1D45 + 131, // $1D46 + 131, // $1D47 + 131, // $1D48 + 131, // $1D49 + 131, // $1D4A + 131, // $1D4B + 131, // $1D4C + 131, // $1D4D + 131, // $1D4E + 131, // $1D4F + 131, // $1D50 + 131, // $1D51 + 131, // $1D52 + 131, // $1D53 + 131, // $1D54 + 131, // $1D55 + 131, // $1D56 + 131, // $1D57 + 131, // $1D58 + 131, // $1D59 + 131, // $1D5A + 131, // $1D5B + 131, // $1D5C + 131, // $1D5D + 131, // $1D5E + 131, // $1D5F + 131, // $1D60 + 131, // $1D61 + 131, // $1D62 + 131, // $1D63 + 131, // $1D64 + 131, // $1D65 + 131, // $1D66 + 131, // $1D67 + 131, // $1D68 + 131, // $1D69 + 131, // $1D6A + 129, // $1D6B + 129, // $1D6C + 129, // $1D6D + 129, // $1D6E + 129, // $1D6F + 129, // $1D70 + 129, // $1D71 + 129, // $1D72 + 129, // $1D73 + 129, // $1D74 + 129, // $1D75 + 129, // $1D76 + 129, // $1D77 + 131, // $1D78 + 129, // $1D79 + 129, // $1D7A + 129, // $1D7B + 129, // $1D7C + 129, // $1D7D + 129, // $1D7E + 129, // $1D7F + 129, // $1D80 + 129, // $1D81 + 129, // $1D82 + 129, // $1D83 + 129, // $1D84 + 129, // $1D85 + 129, // $1D86 + 129, // $1D87 + 129, // $1D88 + 129, // $1D89 + 129, // $1D8A + 129, // $1D8B + 129, // $1D8C + 129, // $1D8D + 129, // $1D8E + 129, // $1D8F + 129, // $1D90 + 129, // $1D91 + 129, // $1D92 + 129, // $1D93 + 129, // $1D94 + 129, // $1D95 + 129, // $1D96 + 129, // $1D97 + 129, // $1D98 + 129, // $1D99 + 129, // $1D9A + 131, // $1D9B + 131, // $1D9C + 131, // $1D9D + 131, // $1D9E + 131, // $1D9F + 131, // $1DA0 + 131, // $1DA1 + 131, // $1DA2 + 131, // $1DA3 + 131, // $1DA4 + 131, // $1DA5 + 131, // $1DA6 + 131, // $1DA7 + 131, // $1DA8 + 131, // $1DA9 + 131, // $1DAA + 131, // $1DAB + 131, // $1DAC + 131, // $1DAD + 131, // $1DAE + 131, // $1DAF + 131, // $1DB0 + 131, // $1DB1 + 131, // $1DB2 + 131, // $1DB3 + 131, // $1DB4 + 131, // $1DB5 + 131, // $1DB6 + 131, // $1DB7 + 131, // $1DB8 + 131, // $1DB9 + 131, // $1DBA + 131, // $1DBB + 131, // $1DBC + 131, // $1DBD + 131, // $1DBE + 131, // $1DBF + 133, // $1DC0 + 133, // $1DC1 + 133, // $1DC2 + 133, // $1DC3 + 133, // $1DC4 + 133, // $1DC5 + 133, // $1DC6 + 133, // $1DC7 + 133, // $1DC8 + 133, // $1DC9 + 133, // $1DCA + 133, // $1DCB + 133, // $1DCC + 133, // $1DCD + 133, // $1DCE + 133, // $1DCF + 133, // $1DD0 + 133, // $1DD1 + 133, // $1DD2 + 133, // $1DD3 + 133, // $1DD4 + 133, // $1DD5 + 133, // $1DD6 + 133, // $1DD7 + 133, // $1DD8 + 133, // $1DD9 + 133, // $1DDA + 133, // $1DDB + 133, // $1DDC + 133, // $1DDD + 133, // $1DDE + 133, // $1DDF + 133, // $1DE0 + 133, // $1DE1 + 133, // $1DE2 + 133, // $1DE3 + 133, // $1DE4 + 133, // $1DE5 + 133, // $1DE6 + 133, // $1DE7 + 133, // $1DE8 + 133, // $1DE9 + 133, // $1DEA + 133, // $1DEB + 133, // $1DEC + 133, // $1DED + 133, // $1DEE + 133, // $1DEF + 133, // $1DF0 + 133, // $1DF1 + 133, // $1DF2 + 133, // $1DF3 + 133, // $1DF4 + 133, // $1DF5 + 29, // $1DF6 + 29, // $1DF7 + 29, // $1DF8 + 29, // $1DF9 + 29, // $1DFA + 133, // $1DFB + 133, // $1DFC + 133, // $1DFD + 133, // $1DFE + 133, // $1DFF + 128, // $1E00 + 129, // $1E01 + 128, // $1E02 + 129, // $1E03 + 128, // $1E04 + 129, // $1E05 + 128, // $1E06 + 129, // $1E07 + 128, // $1E08 + 129, // $1E09 + 128, // $1E0A + 129, // $1E0B + 128, // $1E0C + 129, // $1E0D + 128, // $1E0E + 129, // $1E0F + 128, // $1E10 + 129, // $1E11 + 128, // $1E12 + 129, // $1E13 + 128, // $1E14 + 129, // $1E15 + 128, // $1E16 + 129, // $1E17 + 128, // $1E18 + 129, // $1E19 + 128, // $1E1A + 129, // $1E1B + 128, // $1E1C + 129, // $1E1D + 128, // $1E1E + 129, // $1E1F + 128, // $1E20 + 129, // $1E21 + 128, // $1E22 + 129, // $1E23 + 128, // $1E24 + 129, // $1E25 + 128, // $1E26 + 129, // $1E27 + 128, // $1E28 + 129, // $1E29 + 128, // $1E2A + 129, // $1E2B + 128, // $1E2C + 129, // $1E2D + 128, // $1E2E + 129, // $1E2F + 128, // $1E30 + 129, // $1E31 + 128, // $1E32 + 129, // $1E33 + 128, // $1E34 + 129, // $1E35 + 128, // $1E36 + 129, // $1E37 + 128, // $1E38 + 129, // $1E39 + 128, // $1E3A + 129, // $1E3B + 128, // $1E3C + 129, // $1E3D + 128, // $1E3E + 129, // $1E3F + 128, // $1E40 + 129, // $1E41 + 128, // $1E42 + 129, // $1E43 + 128, // $1E44 + 129, // $1E45 + 128, // $1E46 + 129, // $1E47 + 128, // $1E48 + 129, // $1E49 + 128, // $1E4A + 129, // $1E4B + 128, // $1E4C + 129, // $1E4D + 128, // $1E4E + 129, // $1E4F + 128, // $1E50 + 129, // $1E51 + 128, // $1E52 + 129, // $1E53 + 128, // $1E54 + 129, // $1E55 + 128, // $1E56 + 129, // $1E57 + 128, // $1E58 + 129, // $1E59 + 128, // $1E5A + 129, // $1E5B + 128, // $1E5C + 129, // $1E5D + 128, // $1E5E + 129, // $1E5F + 128, // $1E60 + 129, // $1E61 + 128, // $1E62 + 129, // $1E63 + 128, // $1E64 + 129, // $1E65 + 128, // $1E66 + 129, // $1E67 + 128, // $1E68 + 129, // $1E69 + 128, // $1E6A + 129, // $1E6B + 128, // $1E6C + 129, // $1E6D + 128, // $1E6E + 129, // $1E6F + 128, // $1E70 + 129, // $1E71 + 128, // $1E72 + 129, // $1E73 + 128, // $1E74 + 129, // $1E75 + 128, // $1E76 + 129, // $1E77 + 128, // $1E78 + 129, // $1E79 + 128, // $1E7A + 129, // $1E7B + 128, // $1E7C + 129, // $1E7D + 128, // $1E7E + 129, // $1E7F + 128, // $1E80 + 129, // $1E81 + 128, // $1E82 + 129, // $1E83 + 128, // $1E84 + 129, // $1E85 + 128, // $1E86 + 129, // $1E87 + 128, // $1E88 + 129, // $1E89 + 128, // $1E8A + 129, // $1E8B + 128, // $1E8C + 129, // $1E8D + 128, // $1E8E + 129, // $1E8F + 128, // $1E90 + 129, // $1E91 + 128, // $1E92 + 129, // $1E93 + 128, // $1E94 + 129, // $1E95 + 129, // $1E96 + 129, // $1E97 + 129, // $1E98 + 129, // $1E99 + 129, // $1E9A + 129, // $1E9B + 129, // $1E9C + 129, // $1E9D + 128, // $1E9E + 129, // $1E9F + 128, // $1EA0 + 129, // $1EA1 + 128, // $1EA2 + 129, // $1EA3 + 128, // $1EA4 + 129, // $1EA5 + 128, // $1EA6 + 129, // $1EA7 + 128, // $1EA8 + 129, // $1EA9 + 128, // $1EAA + 129, // $1EAB + 128, // $1EAC + 129, // $1EAD + 128, // $1EAE + 129, // $1EAF + 128, // $1EB0 + 129, // $1EB1 + 128, // $1EB2 + 129, // $1EB3 + 128, // $1EB4 + 129, // $1EB5 + 128, // $1EB6 + 129, // $1EB7 + 128, // $1EB8 + 129, // $1EB9 + 128, // $1EBA + 129, // $1EBB + 128, // $1EBC + 129, // $1EBD + 128, // $1EBE + 129, // $1EBF + 128, // $1EC0 + 129, // $1EC1 + 128, // $1EC2 + 129, // $1EC3 + 128, // $1EC4 + 129, // $1EC5 + 128, // $1EC6 + 129, // $1EC7 + 128, // $1EC8 + 129, // $1EC9 + 128, // $1ECA + 129, // $1ECB + 128, // $1ECC + 129, // $1ECD + 128, // $1ECE + 129, // $1ECF + 128, // $1ED0 + 129, // $1ED1 + 128, // $1ED2 + 129, // $1ED3 + 128, // $1ED4 + 129, // $1ED5 + 128, // $1ED6 + 129, // $1ED7 + 128, // $1ED8 + 129, // $1ED9 + 128, // $1EDA + 129, // $1EDB + 128, // $1EDC + 129, // $1EDD + 128, // $1EDE + 129, // $1EDF + 128, // $1EE0 + 129, // $1EE1 + 128, // $1EE2 + 129, // $1EE3 + 128, // $1EE4 + 129, // $1EE5 + 128, // $1EE6 + 129, // $1EE7 + 128, // $1EE8 + 129, // $1EE9 + 128, // $1EEA + 129, // $1EEB + 128, // $1EEC + 129, // $1EED + 128, // $1EEE + 129, // $1EEF + 128, // $1EF0 + 129, // $1EF1 + 128, // $1EF2 + 129, // $1EF3 + 128, // $1EF4 + 129, // $1EF5 + 128, // $1EF6 + 129, // $1EF7 + 128, // $1EF8 + 129, // $1EF9 + 128, // $1EFA + 129, // $1EFB + 128, // $1EFC + 129, // $1EFD + 128, // $1EFE + 129, // $1EFF + 129, // $1F00 + 129, // $1F01 + 129, // $1F02 + 129, // $1F03 + 129, // $1F04 + 129, // $1F05 + 129, // $1F06 + 129, // $1F07 + 128, // $1F08 + 128, // $1F09 + 128, // $1F0A + 128, // $1F0B + 128, // $1F0C + 128, // $1F0D + 128, // $1F0E + 128, // $1F0F + 129, // $1F10 + 129, // $1F11 + 129, // $1F12 + 129, // $1F13 + 129, // $1F14 + 129, // $1F15 + 29, // $1F16 + 29, // $1F17 + 128, // $1F18 + 128, // $1F19 + 128, // $1F1A + 128, // $1F1B + 128, // $1F1C + 128, // $1F1D + 29, // $1F1E + 29, // $1F1F + 129, // $1F20 + 129, // $1F21 + 129, // $1F22 + 129, // $1F23 + 129, // $1F24 + 129, // $1F25 + 129, // $1F26 + 129, // $1F27 + 128, // $1F28 + 128, // $1F29 + 128, // $1F2A + 128, // $1F2B + 128, // $1F2C + 128, // $1F2D + 128, // $1F2E + 128, // $1F2F + 129, // $1F30 + 129, // $1F31 + 129, // $1F32 + 129, // $1F33 + 129, // $1F34 + 129, // $1F35 + 129, // $1F36 + 129, // $1F37 + 128, // $1F38 + 128, // $1F39 + 128, // $1F3A + 128, // $1F3B + 128, // $1F3C + 128, // $1F3D + 128, // $1F3E + 128, // $1F3F + 129, // $1F40 + 129, // $1F41 + 129, // $1F42 + 129, // $1F43 + 129, // $1F44 + 129, // $1F45 + 29, // $1F46 + 29, // $1F47 + 128, // $1F48 + 128, // $1F49 + 128, // $1F4A + 128, // $1F4B + 128, // $1F4C + 128, // $1F4D + 29, // $1F4E + 29, // $1F4F + 129, // $1F50 + 129, // $1F51 + 129, // $1F52 + 129, // $1F53 + 129, // $1F54 + 129, // $1F55 + 129, // $1F56 + 129, // $1F57 + 29, // $1F58 + 128, // $1F59 + 29, // $1F5A + 128, // $1F5B + 29, // $1F5C + 128, // $1F5D + 29, // $1F5E + 128, // $1F5F + 129, // $1F60 + 129, // $1F61 + 129, // $1F62 + 129, // $1F63 + 129, // $1F64 + 129, // $1F65 + 129, // $1F66 + 129, // $1F67 + 128, // $1F68 + 128, // $1F69 + 128, // $1F6A + 128, // $1F6B + 128, // $1F6C + 128, // $1F6D + 128, // $1F6E + 128, // $1F6F + 129, // $1F70 + 129, // $1F71 + 129, // $1F72 + 129, // $1F73 + 129, // $1F74 + 129, // $1F75 + 129, // $1F76 + 129, // $1F77 + 129, // $1F78 + 129, // $1F79 + 129, // $1F7A + 129, // $1F7B + 129, // $1F7C + 129, // $1F7D + 29, // $1F7E + 29, // $1F7F + 129, // $1F80 + 129, // $1F81 + 129, // $1F82 + 129, // $1F83 + 129, // $1F84 + 129, // $1F85 + 129, // $1F86 + 129, // $1F87 + 130, // $1F88 + 130, // $1F89 + 130, // $1F8A + 130, // $1F8B + 130, // $1F8C + 130, // $1F8D + 130, // $1F8E + 130, // $1F8F + 129, // $1F90 + 129, // $1F91 + 129, // $1F92 + 129, // $1F93 + 129, // $1F94 + 129, // $1F95 + 129, // $1F96 + 129, // $1F97 + 130, // $1F98 + 130, // $1F99 + 130, // $1F9A + 130, // $1F9B + 130, // $1F9C + 130, // $1F9D + 130, // $1F9E + 130, // $1F9F + 129, // $1FA0 + 129, // $1FA1 + 129, // $1FA2 + 129, // $1FA3 + 129, // $1FA4 + 129, // $1FA5 + 129, // $1FA6 + 129, // $1FA7 + 130, // $1FA8 + 130, // $1FA9 + 130, // $1FAA + 130, // $1FAB + 130, // $1FAC + 130, // $1FAD + 130, // $1FAE + 130, // $1FAF + 129, // $1FB0 + 129, // $1FB1 + 129, // $1FB2 + 129, // $1FB3 + 129, // $1FB4 + 29, // $1FB5 + 129, // $1FB6 + 129, // $1FB7 + 128, // $1FB8 + 128, // $1FB9 + 128, // $1FBA + 128, // $1FBB + 130, // $1FBC + 20, // $1FBD + 129, // $1FBE + 20, // $1FBF + 20, // $1FC0 + 20, // $1FC1 + 129, // $1FC2 + 129, // $1FC3 + 129, // $1FC4 + 29, // $1FC5 + 129, // $1FC6 + 129, // $1FC7 + 128, // $1FC8 + 128, // $1FC9 + 128, // $1FCA + 128, // $1FCB + 130, // $1FCC + 20, // $1FCD + 20, // $1FCE + 20, // $1FCF + 129, // $1FD0 + 129, // $1FD1 + 129, // $1FD2 + 129, // $1FD3 + 29, // $1FD4 + 29, // $1FD5 + 129, // $1FD6 + 129, // $1FD7 + 128, // $1FD8 + 128, // $1FD9 + 128, // $1FDA + 128, // $1FDB + 29, // $1FDC + 20, // $1FDD + 20, // $1FDE + 20, // $1FDF + 129, // $1FE0 + 129, // $1FE1 + 129, // $1FE2 + 129, // $1FE3 + 129, // $1FE4 + 129, // $1FE5 + 129, // $1FE6 + 129, // $1FE7 + 128, // $1FE8 + 128, // $1FE9 + 128, // $1FEA + 128, // $1FEB + 128, // $1FEC + 20, // $1FED + 20, // $1FEE + 20, // $1FEF + 29, // $1FF0 + 29, // $1FF1 + 129, // $1FF2 + 129, // $1FF3 + 129, // $1FF4 + 29, // $1FF5 + 129, // $1FF6 + 129, // $1FF7 + 128, // $1FF8 + 128, // $1FF9 + 128, // $1FFA + 128, // $1FFB + 130, // $1FFC + 20, // $1FFD + 20, // $1FFE + 29, // $1FFF + 22, // $2000 + 22, // $2001 + 22, // $2002 + 22, // $2003 + 22, // $2004 + 22, // $2005 + 22, // $2006 + 22, // $2007 + 22, // $2008 + 22, // $2009 + 22, // $200A + 26, // $200B + 26, // $200C + 26, // $200D + 26, // $200E + 26, // $200F + 12, // $2010 + 12, // $2011 + 12, // $2012 + 12, // $2013 + 12, // $2014 + 12, // $2015 + 17, // $2016 + 17, // $2017 + 15, // $2018 + 16, // $2019 + 13, // $201A + 15, // $201B + 15, // $201C + 16, // $201D + 13, // $201E + 15, // $201F + 17, // $2020 + 17, // $2021 + 17, // $2022 + 17, // $2023 + 17, // $2024 + 17, // $2025 + 17, // $2026 + 17, // $2027 + 23, // $2028 + 24, // $2029 + 26, // $202A + 26, // $202B + 26, // $202C + 26, // $202D + 26, // $202E + 22, // $202F + 17, // $2030 + 17, // $2031 + 17, // $2032 + 17, // $2033 + 17, // $2034 + 17, // $2035 + 17, // $2036 + 17, // $2037 + 17, // $2038 + 15, // $2039 + 16, // $203A + 17, // $203B + 17, // $203C + 17, // $203D + 17, // $203E + 11, // $203F + 11, // $2040 + 17, // $2041 + 17, // $2042 + 17, // $2043 + 18, // $2044 + 13, // $2045 + 14, // $2046 + 17, // $2047 + 17, // $2048 + 17, // $2049 + 17, // $204A + 17, // $204B + 17, // $204C + 17, // $204D + 17, // $204E + 17, // $204F + 17, // $2050 + 17, // $2051 + 18, // $2052 + 17, // $2053 + 11, // $2054 + 17, // $2055 + 17, // $2056 + 17, // $2057 + 17, // $2058 + 17, // $2059 + 17, // $205A + 17, // $205B + 17, // $205C + 17, // $205D + 17, // $205E + 22, // $205F + 26, // $2060 + 26, // $2061 + 26, // $2062 + 26, // $2063 + 26, // $2064 + 29, // $2065 + 26, // $2066 + 26, // $2067 + 26, // $2068 + 26, // $2069 + 26, // $206A + 26, // $206B + 26, // $206C + 26, // $206D + 26, // $206E + 26, // $206F + 138, // $2070 + 131, // $2071 + 29, // $2072 + 29, // $2073 + 138, // $2074 + 138, // $2075 + 138, // $2076 + 138, // $2077 + 138, // $2078 + 138, // $2079 + 18, // $207A + 18, // $207B + 18, // $207C + 13, // $207D + 14, // $207E + 131, // $207F + 138, // $2080 + 138, // $2081 + 138, // $2082 + 138, // $2083 + 138, // $2084 + 138, // $2085 + 138, // $2086 + 138, // $2087 + 138, // $2088 + 138, // $2089 + 18, // $208A + 18, // $208B + 18, // $208C + 13, // $208D + 14, // $208E + 29, // $208F + 131, // $2090 + 131, // $2091 + 131, // $2092 + 131, // $2093 + 131, // $2094 + 131, // $2095 + 131, // $2096 + 131, // $2097 + 131, // $2098 + 131, // $2099 + 131, // $209A + 131, // $209B + 131, // $209C + 29, // $209D + 29, // $209E + 29, // $209F + 19, // $20A0 + 19, // $20A1 + 19, // $20A2 + 19, // $20A3 + 19, // $20A4 + 19, // $20A5 + 19, // $20A6 + 19, // $20A7 + 19, // $20A8 + 19, // $20A9 + 19, // $20AA + 19, // $20AB + 19, // $20AC + 19, // $20AD + 19, // $20AE + 19, // $20AF + 19, // $20B0 + 19, // $20B1 + 19, // $20B2 + 19, // $20B3 + 19, // $20B4 + 19, // $20B5 + 19, // $20B6 + 19, // $20B7 + 19, // $20B8 + 19, // $20B9 + 19, // $20BA + 19, // $20BB + 19, // $20BC + 19, // $20BD + 19, // $20BE + 29, // $20BF + 29, // $20C0 + 29, // $20C1 + 29, // $20C2 + 29, // $20C3 + 29, // $20C4 + 29, // $20C5 + 29, // $20C6 + 29, // $20C7 + 29, // $20C8 + 29, // $20C9 + 29, // $20CA + 29, // $20CB + 29, // $20CC + 29, // $20CD + 29, // $20CE + 29, // $20CF + 133, // $20D0 + 133, // $20D1 + 133, // $20D2 + 133, // $20D3 + 133, // $20D4 + 133, // $20D5 + 133, // $20D6 + 133, // $20D7 + 133, // $20D8 + 133, // $20D9 + 133, // $20DA + 133, // $20DB + 133, // $20DC + 135, // $20DD + 135, // $20DE + 135, // $20DF + 135, // $20E0 + 133, // $20E1 + 135, // $20E2 + 135, // $20E3 + 135, // $20E4 + 133, // $20E5 + 133, // $20E6 + 133, // $20E7 + 133, // $20E8 + 133, // $20E9 + 133, // $20EA + 133, // $20EB + 133, // $20EC + 133, // $20ED + 133, // $20EE + 133, // $20EF + 133, // $20F0 + 29, // $20F1 + 29, // $20F2 + 29, // $20F3 + 29, // $20F4 + 29, // $20F5 + 29, // $20F6 + 29, // $20F7 + 29, // $20F8 + 29, // $20F9 + 29, // $20FA + 29, // $20FB + 29, // $20FC + 29, // $20FD + 29, // $20FE + 29, // $20FF + 21, // $2100 + 21, // $2101 + 128, // $2102 + 21, // $2103 + 21, // $2104 + 21, // $2105 + 21, // $2106 + 128, // $2107 + 21, // $2108 + 21, // $2109 + 129, // $210A + 128, // $210B + 128, // $210C + 128, // $210D + 129, // $210E + 129, // $210F + 128, // $2110 + 128, // $2111 + 128, // $2112 + 129, // $2113 + 21, // $2114 + 128, // $2115 + 21, // $2116 + 21, // $2117 + 18, // $2118 + 128, // $2119 + 128, // $211A + 128, // $211B + 128, // $211C + 128, // $211D + 21, // $211E + 21, // $211F + 21, // $2120 + 21, // $2121 + 21, // $2122 + 21, // $2123 + 128, // $2124 + 21, // $2125 + 128, // $2126 + 21, // $2127 + 128, // $2128 + 21, // $2129 + 128, // $212A + 128, // $212B + 128, // $212C + 128, // $212D + 21, // $212E + 129, // $212F + 128, // $2130 + 128, // $2131 + 128, // $2132 + 128, // $2133 + 129, // $2134 + 132, // $2135 + 132, // $2136 + 132, // $2137 + 132, // $2138 + 129, // $2139 + 21, // $213A + 21, // $213B + 129, // $213C + 129, // $213D + 128, // $213E + 128, // $213F + 18, // $2140 + 18, // $2141 + 18, // $2142 + 18, // $2143 + 18, // $2144 + 128, // $2145 + 129, // $2146 + 129, // $2147 + 129, // $2148 + 129, // $2149 + 21, // $214A + 18, // $214B + 21, // $214C + 21, // $214D + 129, // $214E + 21, // $214F + 138, // $2150 + 138, // $2151 + 138, // $2152 + 138, // $2153 + 138, // $2154 + 138, // $2155 + 138, // $2156 + 138, // $2157 + 138, // $2158 + 138, // $2159 + 138, // $215A + 138, // $215B + 138, // $215C + 138, // $215D + 138, // $215E + 138, // $215F + 137, // $2160 + 137, // $2161 + 137, // $2162 + 137, // $2163 + 137, // $2164 + 137, // $2165 + 137, // $2166 + 137, // $2167 + 137, // $2168 + 137, // $2169 + 137, // $216A + 137, // $216B + 137, // $216C + 137, // $216D + 137, // $216E + 137, // $216F + 137, // $2170 + 137, // $2171 + 137, // $2172 + 137, // $2173 + 137, // $2174 + 137, // $2175 + 137, // $2176 + 137, // $2177 + 137, // $2178 + 137, // $2179 + 137, // $217A + 137, // $217B + 137, // $217C + 137, // $217D + 137, // $217E + 137, // $217F + 137, // $2180 + 137, // $2181 + 137, // $2182 + 128, // $2183 + 129, // $2184 + 137, // $2185 + 137, // $2186 + 137, // $2187 + 137, // $2188 + 138, // $2189 + 21, // $218A + 21, // $218B + 29, // $218C + 29, // $218D + 29, // $218E + 29, // $218F + 18, // $2190 + 18, // $2191 + 18, // $2192 + 18, // $2193 + 18, // $2194 + 21, // $2195 + 21, // $2196 + 21, // $2197 + 21, // $2198 + 21, // $2199 + 18, // $219A + 18, // $219B + 21, // $219C + 21, // $219D + 21, // $219E + 21, // $219F + 18, // $21A0 + 21, // $21A1 + 21, // $21A2 + 18, // $21A3 + 21, // $21A4 + 21, // $21A5 + 18, // $21A6 + 21, // $21A7 + 21, // $21A8 + 21, // $21A9 + 21, // $21AA + 21, // $21AB + 21, // $21AC + 21, // $21AD + 18, // $21AE + 21, // $21AF + 21, // $21B0 + 21, // $21B1 + 21, // $21B2 + 21, // $21B3 + 21, // $21B4 + 21, // $21B5 + 21, // $21B6 + 21, // $21B7 + 21, // $21B8 + 21, // $21B9 + 21, // $21BA + 21, // $21BB + 21, // $21BC + 21, // $21BD + 21, // $21BE + 21, // $21BF + 21, // $21C0 + 21, // $21C1 + 21, // $21C2 + 21, // $21C3 + 21, // $21C4 + 21, // $21C5 + 21, // $21C6 + 21, // $21C7 + 21, // $21C8 + 21, // $21C9 + 21, // $21CA + 21, // $21CB + 21, // $21CC + 21, // $21CD + 18, // $21CE + 18, // $21CF + 21, // $21D0 + 21, // $21D1 + 18, // $21D2 + 21, // $21D3 + 18, // $21D4 + 21, // $21D5 + 21, // $21D6 + 21, // $21D7 + 21, // $21D8 + 21, // $21D9 + 21, // $21DA + 21, // $21DB + 21, // $21DC + 21, // $21DD + 21, // $21DE + 21, // $21DF + 21, // $21E0 + 21, // $21E1 + 21, // $21E2 + 21, // $21E3 + 21, // $21E4 + 21, // $21E5 + 21, // $21E6 + 21, // $21E7 + 21, // $21E8 + 21, // $21E9 + 21, // $21EA + 21, // $21EB + 21, // $21EC + 21, // $21ED + 21, // $21EE + 21, // $21EF + 21, // $21F0 + 21, // $21F1 + 21, // $21F2 + 21, // $21F3 + 18, // $21F4 + 18, // $21F5 + 18, // $21F6 + 18, // $21F7 + 18, // $21F8 + 18, // $21F9 + 18, // $21FA + 18, // $21FB + 18, // $21FC + 18, // $21FD + 18, // $21FE + 18, // $21FF + 18, // $2200 + 18, // $2201 + 18, // $2202 + 18, // $2203 + 18, // $2204 + 18, // $2205 + 18, // $2206 + 18, // $2207 + 18, // $2208 + 18, // $2209 + 18, // $220A + 18, // $220B + 18, // $220C + 18, // $220D + 18, // $220E + 18, // $220F + 18, // $2210 + 18, // $2211 + 18, // $2212 + 18, // $2213 + 18, // $2214 + 18, // $2215 + 18, // $2216 + 18, // $2217 + 18, // $2218 + 18, // $2219 + 18, // $221A + 18, // $221B + 18, // $221C + 18, // $221D + 18, // $221E + 18, // $221F + 18, // $2220 + 18, // $2221 + 18, // $2222 + 18, // $2223 + 18, // $2224 + 18, // $2225 + 18, // $2226 + 18, // $2227 + 18, // $2228 + 18, // $2229 + 18, // $222A + 18, // $222B + 18, // $222C + 18, // $222D + 18, // $222E + 18, // $222F + 18, // $2230 + 18, // $2231 + 18, // $2232 + 18, // $2233 + 18, // $2234 + 18, // $2235 + 18, // $2236 + 18, // $2237 + 18, // $2238 + 18, // $2239 + 18, // $223A + 18, // $223B + 18, // $223C + 18, // $223D + 18, // $223E + 18, // $223F + 18, // $2240 + 18, // $2241 + 18, // $2242 + 18, // $2243 + 18, // $2244 + 18, // $2245 + 18, // $2246 + 18, // $2247 + 18, // $2248 + 18, // $2249 + 18, // $224A + 18, // $224B + 18, // $224C + 18, // $224D + 18, // $224E + 18, // $224F + 18, // $2250 + 18, // $2251 + 18, // $2252 + 18, // $2253 + 18, // $2254 + 18, // $2255 + 18, // $2256 + 18, // $2257 + 18, // $2258 + 18, // $2259 + 18, // $225A + 18, // $225B + 18, // $225C + 18, // $225D + 18, // $225E + 18, // $225F + 18, // $2260 + 18, // $2261 + 18, // $2262 + 18, // $2263 + 18, // $2264 + 18, // $2265 + 18, // $2266 + 18, // $2267 + 18, // $2268 + 18, // $2269 + 18, // $226A + 18, // $226B + 18, // $226C + 18, // $226D + 18, // $226E + 18, // $226F + 18, // $2270 + 18, // $2271 + 18, // $2272 + 18, // $2273 + 18, // $2274 + 18, // $2275 + 18, // $2276 + 18, // $2277 + 18, // $2278 + 18, // $2279 + 18, // $227A + 18, // $227B + 18, // $227C + 18, // $227D + 18, // $227E + 18, // $227F + 18, // $2280 + 18, // $2281 + 18, // $2282 + 18, // $2283 + 18, // $2284 + 18, // $2285 + 18, // $2286 + 18, // $2287 + 18, // $2288 + 18, // $2289 + 18, // $228A + 18, // $228B + 18, // $228C + 18, // $228D + 18, // $228E + 18, // $228F + 18, // $2290 + 18, // $2291 + 18, // $2292 + 18, // $2293 + 18, // $2294 + 18, // $2295 + 18, // $2296 + 18, // $2297 + 18, // $2298 + 18, // $2299 + 18, // $229A + 18, // $229B + 18, // $229C + 18, // $229D + 18, // $229E + 18, // $229F + 18, // $22A0 + 18, // $22A1 + 18, // $22A2 + 18, // $22A3 + 18, // $22A4 + 18, // $22A5 + 18, // $22A6 + 18, // $22A7 + 18, // $22A8 + 18, // $22A9 + 18, // $22AA + 18, // $22AB + 18, // $22AC + 18, // $22AD + 18, // $22AE + 18, // $22AF + 18, // $22B0 + 18, // $22B1 + 18, // $22B2 + 18, // $22B3 + 18, // $22B4 + 18, // $22B5 + 18, // $22B6 + 18, // $22B7 + 18, // $22B8 + 18, // $22B9 + 18, // $22BA + 18, // $22BB + 18, // $22BC + 18, // $22BD + 18, // $22BE + 18, // $22BF + 18, // $22C0 + 18, // $22C1 + 18, // $22C2 + 18, // $22C3 + 18, // $22C4 + 18, // $22C5 + 18, // $22C6 + 18, // $22C7 + 18, // $22C8 + 18, // $22C9 + 18, // $22CA + 18, // $22CB + 18, // $22CC + 18, // $22CD + 18, // $22CE + 18, // $22CF + 18, // $22D0 + 18, // $22D1 + 18, // $22D2 + 18, // $22D3 + 18, // $22D4 + 18, // $22D5 + 18, // $22D6 + 18, // $22D7 + 18, // $22D8 + 18, // $22D9 + 18, // $22DA + 18, // $22DB + 18, // $22DC + 18, // $22DD + 18, // $22DE + 18, // $22DF + 18, // $22E0 + 18, // $22E1 + 18, // $22E2 + 18, // $22E3 + 18, // $22E4 + 18, // $22E5 + 18, // $22E6 + 18, // $22E7 + 18, // $22E8 + 18, // $22E9 + 18, // $22EA + 18, // $22EB + 18, // $22EC + 18, // $22ED + 18, // $22EE + 18, // $22EF + 18, // $22F0 + 18, // $22F1 + 18, // $22F2 + 18, // $22F3 + 18, // $22F4 + 18, // $22F5 + 18, // $22F6 + 18, // $22F7 + 18, // $22F8 + 18, // $22F9 + 18, // $22FA + 18, // $22FB + 18, // $22FC + 18, // $22FD + 18, // $22FE + 18, // $22FF + 21, // $2300 + 21, // $2301 + 21, // $2302 + 21, // $2303 + 21, // $2304 + 21, // $2305 + 21, // $2306 + 21, // $2307 + 13, // $2308 + 14, // $2309 + 13, // $230A + 14, // $230B + 21, // $230C + 21, // $230D + 21, // $230E + 21, // $230F + 21, // $2310 + 21, // $2311 + 21, // $2312 + 21, // $2313 + 21, // $2314 + 21, // $2315 + 21, // $2316 + 21, // $2317 + 21, // $2318 + 21, // $2319 + 21, // $231A + 21, // $231B + 21, // $231C + 21, // $231D + 21, // $231E + 21, // $231F + 18, // $2320 + 18, // $2321 + 21, // $2322 + 21, // $2323 + 21, // $2324 + 21, // $2325 + 21, // $2326 + 21, // $2327 + 21, // $2328 + 13, // $2329 + 14, // $232A + 21, // $232B + 21, // $232C + 21, // $232D + 21, // $232E + 21, // $232F + 21, // $2330 + 21, // $2331 + 21, // $2332 + 21, // $2333 + 21, // $2334 + 21, // $2335 + 21, // $2336 + 21, // $2337 + 21, // $2338 + 21, // $2339 + 21, // $233A + 21, // $233B + 21, // $233C + 21, // $233D + 21, // $233E + 21, // $233F + 21, // $2340 + 21, // $2341 + 21, // $2342 + 21, // $2343 + 21, // $2344 + 21, // $2345 + 21, // $2346 + 21, // $2347 + 21, // $2348 + 21, // $2349 + 21, // $234A + 21, // $234B + 21, // $234C + 21, // $234D + 21, // $234E + 21, // $234F + 21, // $2350 + 21, // $2351 + 21, // $2352 + 21, // $2353 + 21, // $2354 + 21, // $2355 + 21, // $2356 + 21, // $2357 + 21, // $2358 + 21, // $2359 + 21, // $235A + 21, // $235B + 21, // $235C + 21, // $235D + 21, // $235E + 21, // $235F + 21, // $2360 + 21, // $2361 + 21, // $2362 + 21, // $2363 + 21, // $2364 + 21, // $2365 + 21, // $2366 + 21, // $2367 + 21, // $2368 + 21, // $2369 + 21, // $236A + 21, // $236B + 21, // $236C + 21, // $236D + 21, // $236E + 21, // $236F + 21, // $2370 + 21, // $2371 + 21, // $2372 + 21, // $2373 + 21, // $2374 + 21, // $2375 + 21, // $2376 + 21, // $2377 + 21, // $2378 + 21, // $2379 + 21, // $237A + 21, // $237B + 18, // $237C + 21, // $237D + 21, // $237E + 21, // $237F + 21, // $2380 + 21, // $2381 + 21, // $2382 + 21, // $2383 + 21, // $2384 + 21, // $2385 + 21, // $2386 + 21, // $2387 + 21, // $2388 + 21, // $2389 + 21, // $238A + 21, // $238B + 21, // $238C + 21, // $238D + 21, // $238E + 21, // $238F + 21, // $2390 + 21, // $2391 + 21, // $2392 + 21, // $2393 + 21, // $2394 + 21, // $2395 + 21, // $2396 + 21, // $2397 + 21, // $2398 + 21, // $2399 + 21, // $239A + 18, // $239B + 18, // $239C + 18, // $239D + 18, // $239E + 18, // $239F + 18, // $23A0 + 18, // $23A1 + 18, // $23A2 + 18, // $23A3 + 18, // $23A4 + 18, // $23A5 + 18, // $23A6 + 18, // $23A7 + 18, // $23A8 + 18, // $23A9 + 18, // $23AA + 18, // $23AB + 18, // $23AC + 18, // $23AD + 18, // $23AE + 18, // $23AF + 18, // $23B0 + 18, // $23B1 + 18, // $23B2 + 18, // $23B3 + 21, // $23B4 + 21, // $23B5 + 21, // $23B6 + 21, // $23B7 + 21, // $23B8 + 21, // $23B9 + 21, // $23BA + 21, // $23BB + 21, // $23BC + 21, // $23BD + 21, // $23BE + 21, // $23BF + 21, // $23C0 + 21, // $23C1 + 21, // $23C2 + 21, // $23C3 + 21, // $23C4 + 21, // $23C5 + 21, // $23C6 + 21, // $23C7 + 21, // $23C8 + 21, // $23C9 + 21, // $23CA + 21, // $23CB + 21, // $23CC + 21, // $23CD + 21, // $23CE + 21, // $23CF + 21, // $23D0 + 21, // $23D1 + 21, // $23D2 + 21, // $23D3 + 21, // $23D4 + 21, // $23D5 + 21, // $23D6 + 21, // $23D7 + 21, // $23D8 + 21, // $23D9 + 21, // $23DA + 21, // $23DB + 18, // $23DC + 18, // $23DD + 18, // $23DE + 18, // $23DF + 18, // $23E0 + 18, // $23E1 + 21, // $23E2 + 21, // $23E3 + 21, // $23E4 + 21, // $23E5 + 21, // $23E6 + 21, // $23E7 + 21, // $23E8 + 21, // $23E9 + 21, // $23EA + 21, // $23EB + 21, // $23EC + 21, // $23ED + 21, // $23EE + 21, // $23EF + 21, // $23F0 + 21, // $23F1 + 21, // $23F2 + 21, // $23F3 + 21, // $23F4 + 21, // $23F5 + 21, // $23F6 + 21, // $23F7 + 21, // $23F8 + 21, // $23F9 + 21, // $23FA + 21, // $23FB + 21, // $23FC + 21, // $23FD + 21, // $23FE + 29, // $23FF + 21, // $2400 + 21, // $2401 + 21, // $2402 + 21, // $2403 + 21, // $2404 + 21, // $2405 + 21, // $2406 + 21, // $2407 + 21, // $2408 + 21, // $2409 + 21, // $240A + 21, // $240B + 21, // $240C + 21, // $240D + 21, // $240E + 21, // $240F + 21, // $2410 + 21, // $2411 + 21, // $2412 + 21, // $2413 + 21, // $2414 + 21, // $2415 + 21, // $2416 + 21, // $2417 + 21, // $2418 + 21, // $2419 + 21, // $241A + 21, // $241B + 21, // $241C + 21, // $241D + 21, // $241E + 21, // $241F + 21, // $2420 + 21, // $2421 + 21, // $2422 + 21, // $2423 + 21, // $2424 + 21, // $2425 + 21, // $2426 + 29, // $2427 + 29, // $2428 + 29, // $2429 + 29, // $242A + 29, // $242B + 29, // $242C + 29, // $242D + 29, // $242E + 29, // $242F + 29, // $2430 + 29, // $2431 + 29, // $2432 + 29, // $2433 + 29, // $2434 + 29, // $2435 + 29, // $2436 + 29, // $2437 + 29, // $2438 + 29, // $2439 + 29, // $243A + 29, // $243B + 29, // $243C + 29, // $243D + 29, // $243E + 29, // $243F + 21, // $2440 + 21, // $2441 + 21, // $2442 + 21, // $2443 + 21, // $2444 + 21, // $2445 + 21, // $2446 + 21, // $2447 + 21, // $2448 + 21, // $2449 + 21, // $244A + 29, // $244B + 29, // $244C + 29, // $244D + 29, // $244E + 29, // $244F + 29, // $2450 + 29, // $2451 + 29, // $2452 + 29, // $2453 + 29, // $2454 + 29, // $2455 + 29, // $2456 + 29, // $2457 + 29, // $2458 + 29, // $2459 + 29, // $245A + 29, // $245B + 29, // $245C + 29, // $245D + 29, // $245E + 29, // $245F + 138, // $2460 + 138, // $2461 + 138, // $2462 + 138, // $2463 + 138, // $2464 + 138, // $2465 + 138, // $2466 + 138, // $2467 + 138, // $2468 + 138, // $2469 + 138, // $246A + 138, // $246B + 138, // $246C + 138, // $246D + 138, // $246E + 138, // $246F + 138, // $2470 + 138, // $2471 + 138, // $2472 + 138, // $2473 + 138, // $2474 + 138, // $2475 + 138, // $2476 + 138, // $2477 + 138, // $2478 + 138, // $2479 + 138, // $247A + 138, // $247B + 138, // $247C + 138, // $247D + 138, // $247E + 138, // $247F + 138, // $2480 + 138, // $2481 + 138, // $2482 + 138, // $2483 + 138, // $2484 + 138, // $2485 + 138, // $2486 + 138, // $2487 + 138, // $2488 + 138, // $2489 + 138, // $248A + 138, // $248B + 138, // $248C + 138, // $248D + 138, // $248E + 138, // $248F + 138, // $2490 + 138, // $2491 + 138, // $2492 + 138, // $2493 + 138, // $2494 + 138, // $2495 + 138, // $2496 + 138, // $2497 + 138, // $2498 + 138, // $2499 + 138, // $249A + 138, // $249B + 21, // $249C + 21, // $249D + 21, // $249E + 21, // $249F + 21, // $24A0 + 21, // $24A1 + 21, // $24A2 + 21, // $24A3 + 21, // $24A4 + 21, // $24A5 + 21, // $24A6 + 21, // $24A7 + 21, // $24A8 + 21, // $24A9 + 21, // $24AA + 21, // $24AB + 21, // $24AC + 21, // $24AD + 21, // $24AE + 21, // $24AF + 21, // $24B0 + 21, // $24B1 + 21, // $24B2 + 21, // $24B3 + 21, // $24B4 + 21, // $24B5 + 21, // $24B6 + 21, // $24B7 + 21, // $24B8 + 21, // $24B9 + 21, // $24BA + 21, // $24BB + 21, // $24BC + 21, // $24BD + 21, // $24BE + 21, // $24BF + 21, // $24C0 + 21, // $24C1 + 21, // $24C2 + 21, // $24C3 + 21, // $24C4 + 21, // $24C5 + 21, // $24C6 + 21, // $24C7 + 21, // $24C8 + 21, // $24C9 + 21, // $24CA + 21, // $24CB + 21, // $24CC + 21, // $24CD + 21, // $24CE + 21, // $24CF + 21, // $24D0 + 21, // $24D1 + 21, // $24D2 + 21, // $24D3 + 21, // $24D4 + 21, // $24D5 + 21, // $24D6 + 21, // $24D7 + 21, // $24D8 + 21, // $24D9 + 21, // $24DA + 21, // $24DB + 21, // $24DC + 21, // $24DD + 21, // $24DE + 21, // $24DF + 21, // $24E0 + 21, // $24E1 + 21, // $24E2 + 21, // $24E3 + 21, // $24E4 + 21, // $24E5 + 21, // $24E6 + 21, // $24E7 + 21, // $24E8 + 21, // $24E9 + 138, // $24EA + 138, // $24EB + 138, // $24EC + 138, // $24ED + 138, // $24EE + 138, // $24EF + 138, // $24F0 + 138, // $24F1 + 138, // $24F2 + 138, // $24F3 + 138, // $24F4 + 138, // $24F5 + 138, // $24F6 + 138, // $24F7 + 138, // $24F8 + 138, // $24F9 + 138, // $24FA + 138, // $24FB + 138, // $24FC + 138, // $24FD + 138, // $24FE + 138, // $24FF + 21, // $2500 + 21, // $2501 + 21, // $2502 + 21, // $2503 + 21, // $2504 + 21, // $2505 + 21, // $2506 + 21, // $2507 + 21, // $2508 + 21, // $2509 + 21, // $250A + 21, // $250B + 21, // $250C + 21, // $250D + 21, // $250E + 21, // $250F + 21, // $2510 + 21, // $2511 + 21, // $2512 + 21, // $2513 + 21, // $2514 + 21, // $2515 + 21, // $2516 + 21, // $2517 + 21, // $2518 + 21, // $2519 + 21, // $251A + 21, // $251B + 21, // $251C + 21, // $251D + 21, // $251E + 21, // $251F + 21, // $2520 + 21, // $2521 + 21, // $2522 + 21, // $2523 + 21, // $2524 + 21, // $2525 + 21, // $2526 + 21, // $2527 + 21, // $2528 + 21, // $2529 + 21, // $252A + 21, // $252B + 21, // $252C + 21, // $252D + 21, // $252E + 21, // $252F + 21, // $2530 + 21, // $2531 + 21, // $2532 + 21, // $2533 + 21, // $2534 + 21, // $2535 + 21, // $2536 + 21, // $2537 + 21, // $2538 + 21, // $2539 + 21, // $253A + 21, // $253B + 21, // $253C + 21, // $253D + 21, // $253E + 21, // $253F + 21, // $2540 + 21, // $2541 + 21, // $2542 + 21, // $2543 + 21, // $2544 + 21, // $2545 + 21, // $2546 + 21, // $2547 + 21, // $2548 + 21, // $2549 + 21, // $254A + 21, // $254B + 21, // $254C + 21, // $254D + 21, // $254E + 21, // $254F + 21, // $2550 + 21, // $2551 + 21, // $2552 + 21, // $2553 + 21, // $2554 + 21, // $2555 + 21, // $2556 + 21, // $2557 + 21, // $2558 + 21, // $2559 + 21, // $255A + 21, // $255B + 21, // $255C + 21, // $255D + 21, // $255E + 21, // $255F + 21, // $2560 + 21, // $2561 + 21, // $2562 + 21, // $2563 + 21, // $2564 + 21, // $2565 + 21, // $2566 + 21, // $2567 + 21, // $2568 + 21, // $2569 + 21, // $256A + 21, // $256B + 21, // $256C + 21, // $256D + 21, // $256E + 21, // $256F + 21, // $2570 + 21, // $2571 + 21, // $2572 + 21, // $2573 + 21, // $2574 + 21, // $2575 + 21, // $2576 + 21, // $2577 + 21, // $2578 + 21, // $2579 + 21, // $257A + 21, // $257B + 21, // $257C + 21, // $257D + 21, // $257E + 21, // $257F + 21, // $2580 + 21, // $2581 + 21, // $2582 + 21, // $2583 + 21, // $2584 + 21, // $2585 + 21, // $2586 + 21, // $2587 + 21, // $2588 + 21, // $2589 + 21, // $258A + 21, // $258B + 21, // $258C + 21, // $258D + 21, // $258E + 21, // $258F + 21, // $2590 + 21, // $2591 + 21, // $2592 + 21, // $2593 + 21, // $2594 + 21, // $2595 + 21, // $2596 + 21, // $2597 + 21, // $2598 + 21, // $2599 + 21, // $259A + 21, // $259B + 21, // $259C + 21, // $259D + 21, // $259E + 21, // $259F + 21, // $25A0 + 21, // $25A1 + 21, // $25A2 + 21, // $25A3 + 21, // $25A4 + 21, // $25A5 + 21, // $25A6 + 21, // $25A7 + 21, // $25A8 + 21, // $25A9 + 21, // $25AA + 21, // $25AB + 21, // $25AC + 21, // $25AD + 21, // $25AE + 21, // $25AF + 21, // $25B0 + 21, // $25B1 + 21, // $25B2 + 21, // $25B3 + 21, // $25B4 + 21, // $25B5 + 21, // $25B6 + 18, // $25B7 + 21, // $25B8 + 21, // $25B9 + 21, // $25BA + 21, // $25BB + 21, // $25BC + 21, // $25BD + 21, // $25BE + 21, // $25BF + 21, // $25C0 + 18, // $25C1 + 21, // $25C2 + 21, // $25C3 + 21, // $25C4 + 21, // $25C5 + 21, // $25C6 + 21, // $25C7 + 21, // $25C8 + 21, // $25C9 + 21, // $25CA + 21, // $25CB + 21, // $25CC + 21, // $25CD + 21, // $25CE + 21, // $25CF + 21, // $25D0 + 21, // $25D1 + 21, // $25D2 + 21, // $25D3 + 21, // $25D4 + 21, // $25D5 + 21, // $25D6 + 21, // $25D7 + 21, // $25D8 + 21, // $25D9 + 21, // $25DA + 21, // $25DB + 21, // $25DC + 21, // $25DD + 21, // $25DE + 21, // $25DF + 21, // $25E0 + 21, // $25E1 + 21, // $25E2 + 21, // $25E3 + 21, // $25E4 + 21, // $25E5 + 21, // $25E6 + 21, // $25E7 + 21, // $25E8 + 21, // $25E9 + 21, // $25EA + 21, // $25EB + 21, // $25EC + 21, // $25ED + 21, // $25EE + 21, // $25EF + 21, // $25F0 + 21, // $25F1 + 21, // $25F2 + 21, // $25F3 + 21, // $25F4 + 21, // $25F5 + 21, // $25F6 + 21, // $25F7 + 18, // $25F8 + 18, // $25F9 + 18, // $25FA + 18, // $25FB + 18, // $25FC + 18, // $25FD + 18, // $25FE + 18, // $25FF + 21, // $2600 + 21, // $2601 + 21, // $2602 + 21, // $2603 + 21, // $2604 + 21, // $2605 + 21, // $2606 + 21, // $2607 + 21, // $2608 + 21, // $2609 + 21, // $260A + 21, // $260B + 21, // $260C + 21, // $260D + 21, // $260E + 21, // $260F + 21, // $2610 + 21, // $2611 + 21, // $2612 + 21, // $2613 + 21, // $2614 + 21, // $2615 + 21, // $2616 + 21, // $2617 + 21, // $2618 + 21, // $2619 + 21, // $261A + 21, // $261B + 21, // $261C + 21, // $261D + 21, // $261E + 21, // $261F + 21, // $2620 + 21, // $2621 + 21, // $2622 + 21, // $2623 + 21, // $2624 + 21, // $2625 + 21, // $2626 + 21, // $2627 + 21, // $2628 + 21, // $2629 + 21, // $262A + 21, // $262B + 21, // $262C + 21, // $262D + 21, // $262E + 21, // $262F + 21, // $2630 + 21, // $2631 + 21, // $2632 + 21, // $2633 + 21, // $2634 + 21, // $2635 + 21, // $2636 + 21, // $2637 + 21, // $2638 + 21, // $2639 + 21, // $263A + 21, // $263B + 21, // $263C + 21, // $263D + 21, // $263E + 21, // $263F + 21, // $2640 + 21, // $2641 + 21, // $2642 + 21, // $2643 + 21, // $2644 + 21, // $2645 + 21, // $2646 + 21, // $2647 + 21, // $2648 + 21, // $2649 + 21, // $264A + 21, // $264B + 21, // $264C + 21, // $264D + 21, // $264E + 21, // $264F + 21, // $2650 + 21, // $2651 + 21, // $2652 + 21, // $2653 + 21, // $2654 + 21, // $2655 + 21, // $2656 + 21, // $2657 + 21, // $2658 + 21, // $2659 + 21, // $265A + 21, // $265B + 21, // $265C + 21, // $265D + 21, // $265E + 21, // $265F + 21, // $2660 + 21, // $2661 + 21, // $2662 + 21, // $2663 + 21, // $2664 + 21, // $2665 + 21, // $2666 + 21, // $2667 + 21, // $2668 + 21, // $2669 + 21, // $266A + 21, // $266B + 21, // $266C + 21, // $266D + 21, // $266E + 18, // $266F + 21, // $2670 + 21, // $2671 + 21, // $2672 + 21, // $2673 + 21, // $2674 + 21, // $2675 + 21, // $2676 + 21, // $2677 + 21, // $2678 + 21, // $2679 + 21, // $267A + 21, // $267B + 21, // $267C + 21, // $267D + 21, // $267E + 21, // $267F + 21, // $2680 + 21, // $2681 + 21, // $2682 + 21, // $2683 + 21, // $2684 + 21, // $2685 + 21, // $2686 + 21, // $2687 + 21, // $2688 + 21, // $2689 + 21, // $268A + 21, // $268B + 21, // $268C + 21, // $268D + 21, // $268E + 21, // $268F + 21, // $2690 + 21, // $2691 + 21, // $2692 + 21, // $2693 + 21, // $2694 + 21, // $2695 + 21, // $2696 + 21, // $2697 + 21, // $2698 + 21, // $2699 + 21, // $269A + 21, // $269B + 21, // $269C + 21, // $269D + 21, // $269E + 21, // $269F + 21, // $26A0 + 21, // $26A1 + 21, // $26A2 + 21, // $26A3 + 21, // $26A4 + 21, // $26A5 + 21, // $26A6 + 21, // $26A7 + 21, // $26A8 + 21, // $26A9 + 21, // $26AA + 21, // $26AB + 21, // $26AC + 21, // $26AD + 21, // $26AE + 21, // $26AF + 21, // $26B0 + 21, // $26B1 + 21, // $26B2 + 21, // $26B3 + 21, // $26B4 + 21, // $26B5 + 21, // $26B6 + 21, // $26B7 + 21, // $26B8 + 21, // $26B9 + 21, // $26BA + 21, // $26BB + 21, // $26BC + 21, // $26BD + 21, // $26BE + 21, // $26BF + 21, // $26C0 + 21, // $26C1 + 21, // $26C2 + 21, // $26C3 + 21, // $26C4 + 21, // $26C5 + 21, // $26C6 + 21, // $26C7 + 21, // $26C8 + 21, // $26C9 + 21, // $26CA + 21, // $26CB + 21, // $26CC + 21, // $26CD + 21, // $26CE + 21, // $26CF + 21, // $26D0 + 21, // $26D1 + 21, // $26D2 + 21, // $26D3 + 21, // $26D4 + 21, // $26D5 + 21, // $26D6 + 21, // $26D7 + 21, // $26D8 + 21, // $26D9 + 21, // $26DA + 21, // $26DB + 21, // $26DC + 21, // $26DD + 21, // $26DE + 21, // $26DF + 21, // $26E0 + 21, // $26E1 + 21, // $26E2 + 21, // $26E3 + 21, // $26E4 + 21, // $26E5 + 21, // $26E6 + 21, // $26E7 + 21, // $26E8 + 21, // $26E9 + 21, // $26EA + 21, // $26EB + 21, // $26EC + 21, // $26ED + 21, // $26EE + 21, // $26EF + 21, // $26F0 + 21, // $26F1 + 21, // $26F2 + 21, // $26F3 + 21, // $26F4 + 21, // $26F5 + 21, // $26F6 + 21, // $26F7 + 21, // $26F8 + 21, // $26F9 + 21, // $26FA + 21, // $26FB + 21, // $26FC + 21, // $26FD + 21, // $26FE + 21, // $26FF + 21, // $2700 + 21, // $2701 + 21, // $2702 + 21, // $2703 + 21, // $2704 + 21, // $2705 + 21, // $2706 + 21, // $2707 + 21, // $2708 + 21, // $2709 + 21, // $270A + 21, // $270B + 21, // $270C + 21, // $270D + 21, // $270E + 21, // $270F + 21, // $2710 + 21, // $2711 + 21, // $2712 + 21, // $2713 + 21, // $2714 + 21, // $2715 + 21, // $2716 + 21, // $2717 + 21, // $2718 + 21, // $2719 + 21, // $271A + 21, // $271B + 21, // $271C + 21, // $271D + 21, // $271E + 21, // $271F + 21, // $2720 + 21, // $2721 + 21, // $2722 + 21, // $2723 + 21, // $2724 + 21, // $2725 + 21, // $2726 + 21, // $2727 + 21, // $2728 + 21, // $2729 + 21, // $272A + 21, // $272B + 21, // $272C + 21, // $272D + 21, // $272E + 21, // $272F + 21, // $2730 + 21, // $2731 + 21, // $2732 + 21, // $2733 + 21, // $2734 + 21, // $2735 + 21, // $2736 + 21, // $2737 + 21, // $2738 + 21, // $2739 + 21, // $273A + 21, // $273B + 21, // $273C + 21, // $273D + 21, // $273E + 21, // $273F + 21, // $2740 + 21, // $2741 + 21, // $2742 + 21, // $2743 + 21, // $2744 + 21, // $2745 + 21, // $2746 + 21, // $2747 + 21, // $2748 + 21, // $2749 + 21, // $274A + 21, // $274B + 21, // $274C + 21, // $274D + 21, // $274E + 21, // $274F + 21, // $2750 + 21, // $2751 + 21, // $2752 + 21, // $2753 + 21, // $2754 + 21, // $2755 + 21, // $2756 + 21, // $2757 + 21, // $2758 + 21, // $2759 + 21, // $275A + 21, // $275B + 21, // $275C + 21, // $275D + 21, // $275E + 21, // $275F + 21, // $2760 + 21, // $2761 + 21, // $2762 + 21, // $2763 + 21, // $2764 + 21, // $2765 + 21, // $2766 + 21, // $2767 + 13, // $2768 + 14, // $2769 + 13, // $276A + 14, // $276B + 13, // $276C + 14, // $276D + 13, // $276E + 14, // $276F + 13, // $2770 + 14, // $2771 + 13, // $2772 + 14, // $2773 + 13, // $2774 + 14, // $2775 + 138, // $2776 + 138, // $2777 + 138, // $2778 + 138, // $2779 + 138, // $277A + 138, // $277B + 138, // $277C + 138, // $277D + 138, // $277E + 138, // $277F + 138, // $2780 + 138, // $2781 + 138, // $2782 + 138, // $2783 + 138, // $2784 + 138, // $2785 + 138, // $2786 + 138, // $2787 + 138, // $2788 + 138, // $2789 + 138, // $278A + 138, // $278B + 138, // $278C + 138, // $278D + 138, // $278E + 138, // $278F + 138, // $2790 + 138, // $2791 + 138, // $2792 + 138, // $2793 + 21, // $2794 + 21, // $2795 + 21, // $2796 + 21, // $2797 + 21, // $2798 + 21, // $2799 + 21, // $279A + 21, // $279B + 21, // $279C + 21, // $279D + 21, // $279E + 21, // $279F + 21, // $27A0 + 21, // $27A1 + 21, // $27A2 + 21, // $27A3 + 21, // $27A4 + 21, // $27A5 + 21, // $27A6 + 21, // $27A7 + 21, // $27A8 + 21, // $27A9 + 21, // $27AA + 21, // $27AB + 21, // $27AC + 21, // $27AD + 21, // $27AE + 21, // $27AF + 21, // $27B0 + 21, // $27B1 + 21, // $27B2 + 21, // $27B3 + 21, // $27B4 + 21, // $27B5 + 21, // $27B6 + 21, // $27B7 + 21, // $27B8 + 21, // $27B9 + 21, // $27BA + 21, // $27BB + 21, // $27BC + 21, // $27BD + 21, // $27BE + 21, // $27BF + 18, // $27C0 + 18, // $27C1 + 18, // $27C2 + 18, // $27C3 + 18, // $27C4 + 13, // $27C5 + 14, // $27C6 + 18, // $27C7 + 18, // $27C8 + 18, // $27C9 + 18, // $27CA + 18, // $27CB + 18, // $27CC + 18, // $27CD + 18, // $27CE + 18, // $27CF + 18, // $27D0 + 18, // $27D1 + 18, // $27D2 + 18, // $27D3 + 18, // $27D4 + 18, // $27D5 + 18, // $27D6 + 18, // $27D7 + 18, // $27D8 + 18, // $27D9 + 18, // $27DA + 18, // $27DB + 18, // $27DC + 18, // $27DD + 18, // $27DE + 18, // $27DF + 18, // $27E0 + 18, // $27E1 + 18, // $27E2 + 18, // $27E3 + 18, // $27E4 + 18, // $27E5 + 13, // $27E6 + 14, // $27E7 + 13, // $27E8 + 14, // $27E9 + 13, // $27EA + 14, // $27EB + 13, // $27EC + 14, // $27ED + 13, // $27EE + 14, // $27EF + 18, // $27F0 + 18, // $27F1 + 18, // $27F2 + 18, // $27F3 + 18, // $27F4 + 18, // $27F5 + 18, // $27F6 + 18, // $27F7 + 18, // $27F8 + 18, // $27F9 + 18, // $27FA + 18, // $27FB + 18, // $27FC + 18, // $27FD + 18, // $27FE + 18, // $27FF + 21, // $2800 + 21, // $2801 + 21, // $2802 + 21, // $2803 + 21, // $2804 + 21, // $2805 + 21, // $2806 + 21, // $2807 + 21, // $2808 + 21, // $2809 + 21, // $280A + 21, // $280B + 21, // $280C + 21, // $280D + 21, // $280E + 21, // $280F + 21, // $2810 + 21, // $2811 + 21, // $2812 + 21, // $2813 + 21, // $2814 + 21, // $2815 + 21, // $2816 + 21, // $2817 + 21, // $2818 + 21, // $2819 + 21, // $281A + 21, // $281B + 21, // $281C + 21, // $281D + 21, // $281E + 21, // $281F + 21, // $2820 + 21, // $2821 + 21, // $2822 + 21, // $2823 + 21, // $2824 + 21, // $2825 + 21, // $2826 + 21, // $2827 + 21, // $2828 + 21, // $2829 + 21, // $282A + 21, // $282B + 21, // $282C + 21, // $282D + 21, // $282E + 21, // $282F + 21, // $2830 + 21, // $2831 + 21, // $2832 + 21, // $2833 + 21, // $2834 + 21, // $2835 + 21, // $2836 + 21, // $2837 + 21, // $2838 + 21, // $2839 + 21, // $283A + 21, // $283B + 21, // $283C + 21, // $283D + 21, // $283E + 21, // $283F + 21, // $2840 + 21, // $2841 + 21, // $2842 + 21, // $2843 + 21, // $2844 + 21, // $2845 + 21, // $2846 + 21, // $2847 + 21, // $2848 + 21, // $2849 + 21, // $284A + 21, // $284B + 21, // $284C + 21, // $284D + 21, // $284E + 21, // $284F + 21, // $2850 + 21, // $2851 + 21, // $2852 + 21, // $2853 + 21, // $2854 + 21, // $2855 + 21, // $2856 + 21, // $2857 + 21, // $2858 + 21, // $2859 + 21, // $285A + 21, // $285B + 21, // $285C + 21, // $285D + 21, // $285E + 21, // $285F + 21, // $2860 + 21, // $2861 + 21, // $2862 + 21, // $2863 + 21, // $2864 + 21, // $2865 + 21, // $2866 + 21, // $2867 + 21, // $2868 + 21, // $2869 + 21, // $286A + 21, // $286B + 21, // $286C + 21, // $286D + 21, // $286E + 21, // $286F + 21, // $2870 + 21, // $2871 + 21, // $2872 + 21, // $2873 + 21, // $2874 + 21, // $2875 + 21, // $2876 + 21, // $2877 + 21, // $2878 + 21, // $2879 + 21, // $287A + 21, // $287B + 21, // $287C + 21, // $287D + 21, // $287E + 21, // $287F + 21, // $2880 + 21, // $2881 + 21, // $2882 + 21, // $2883 + 21, // $2884 + 21, // $2885 + 21, // $2886 + 21, // $2887 + 21, // $2888 + 21, // $2889 + 21, // $288A + 21, // $288B + 21, // $288C + 21, // $288D + 21, // $288E + 21, // $288F + 21, // $2890 + 21, // $2891 + 21, // $2892 + 21, // $2893 + 21, // $2894 + 21, // $2895 + 21, // $2896 + 21, // $2897 + 21, // $2898 + 21, // $2899 + 21, // $289A + 21, // $289B + 21, // $289C + 21, // $289D + 21, // $289E + 21, // $289F + 21, // $28A0 + 21, // $28A1 + 21, // $28A2 + 21, // $28A3 + 21, // $28A4 + 21, // $28A5 + 21, // $28A6 + 21, // $28A7 + 21, // $28A8 + 21, // $28A9 + 21, // $28AA + 21, // $28AB + 21, // $28AC + 21, // $28AD + 21, // $28AE + 21, // $28AF + 21, // $28B0 + 21, // $28B1 + 21, // $28B2 + 21, // $28B3 + 21, // $28B4 + 21, // $28B5 + 21, // $28B6 + 21, // $28B7 + 21, // $28B8 + 21, // $28B9 + 21, // $28BA + 21, // $28BB + 21, // $28BC + 21, // $28BD + 21, // $28BE + 21, // $28BF + 21, // $28C0 + 21, // $28C1 + 21, // $28C2 + 21, // $28C3 + 21, // $28C4 + 21, // $28C5 + 21, // $28C6 + 21, // $28C7 + 21, // $28C8 + 21, // $28C9 + 21, // $28CA + 21, // $28CB + 21, // $28CC + 21, // $28CD + 21, // $28CE + 21, // $28CF + 21, // $28D0 + 21, // $28D1 + 21, // $28D2 + 21, // $28D3 + 21, // $28D4 + 21, // $28D5 + 21, // $28D6 + 21, // $28D7 + 21, // $28D8 + 21, // $28D9 + 21, // $28DA + 21, // $28DB + 21, // $28DC + 21, // $28DD + 21, // $28DE + 21, // $28DF + 21, // $28E0 + 21, // $28E1 + 21, // $28E2 + 21, // $28E3 + 21, // $28E4 + 21, // $28E5 + 21, // $28E6 + 21, // $28E7 + 21, // $28E8 + 21, // $28E9 + 21, // $28EA + 21, // $28EB + 21, // $28EC + 21, // $28ED + 21, // $28EE + 21, // $28EF + 21, // $28F0 + 21, // $28F1 + 21, // $28F2 + 21, // $28F3 + 21, // $28F4 + 21, // $28F5 + 21, // $28F6 + 21, // $28F7 + 21, // $28F8 + 21, // $28F9 + 21, // $28FA + 21, // $28FB + 21, // $28FC + 21, // $28FD + 21, // $28FE + 21, // $28FF + 18, // $2900 + 18, // $2901 + 18, // $2902 + 18, // $2903 + 18, // $2904 + 18, // $2905 + 18, // $2906 + 18, // $2907 + 18, // $2908 + 18, // $2909 + 18, // $290A + 18, // $290B + 18, // $290C + 18, // $290D + 18, // $290E + 18, // $290F + 18, // $2910 + 18, // $2911 + 18, // $2912 + 18, // $2913 + 18, // $2914 + 18, // $2915 + 18, // $2916 + 18, // $2917 + 18, // $2918 + 18, // $2919 + 18, // $291A + 18, // $291B + 18, // $291C + 18, // $291D + 18, // $291E + 18, // $291F + 18, // $2920 + 18, // $2921 + 18, // $2922 + 18, // $2923 + 18, // $2924 + 18, // $2925 + 18, // $2926 + 18, // $2927 + 18, // $2928 + 18, // $2929 + 18, // $292A + 18, // $292B + 18, // $292C + 18, // $292D + 18, // $292E + 18, // $292F + 18, // $2930 + 18, // $2931 + 18, // $2932 + 18, // $2933 + 18, // $2934 + 18, // $2935 + 18, // $2936 + 18, // $2937 + 18, // $2938 + 18, // $2939 + 18, // $293A + 18, // $293B + 18, // $293C + 18, // $293D + 18, // $293E + 18, // $293F + 18, // $2940 + 18, // $2941 + 18, // $2942 + 18, // $2943 + 18, // $2944 + 18, // $2945 + 18, // $2946 + 18, // $2947 + 18, // $2948 + 18, // $2949 + 18, // $294A + 18, // $294B + 18, // $294C + 18, // $294D + 18, // $294E + 18, // $294F + 18, // $2950 + 18, // $2951 + 18, // $2952 + 18, // $2953 + 18, // $2954 + 18, // $2955 + 18, // $2956 + 18, // $2957 + 18, // $2958 + 18, // $2959 + 18, // $295A + 18, // $295B + 18, // $295C + 18, // $295D + 18, // $295E + 18, // $295F + 18, // $2960 + 18, // $2961 + 18, // $2962 + 18, // $2963 + 18, // $2964 + 18, // $2965 + 18, // $2966 + 18, // $2967 + 18, // $2968 + 18, // $2969 + 18, // $296A + 18, // $296B + 18, // $296C + 18, // $296D + 18, // $296E + 18, // $296F + 18, // $2970 + 18, // $2971 + 18, // $2972 + 18, // $2973 + 18, // $2974 + 18, // $2975 + 18, // $2976 + 18, // $2977 + 18, // $2978 + 18, // $2979 + 18, // $297A + 18, // $297B + 18, // $297C + 18, // $297D + 18, // $297E + 18, // $297F + 18, // $2980 + 18, // $2981 + 18, // $2982 + 13, // $2983 + 14, // $2984 + 13, // $2985 + 14, // $2986 + 13, // $2987 + 14, // $2988 + 13, // $2989 + 14, // $298A + 13, // $298B + 14, // $298C + 13, // $298D + 14, // $298E + 13, // $298F + 14, // $2990 + 13, // $2991 + 14, // $2992 + 13, // $2993 + 14, // $2994 + 13, // $2995 + 14, // $2996 + 13, // $2997 + 14, // $2998 + 18, // $2999 + 18, // $299A + 18, // $299B + 18, // $299C + 18, // $299D + 18, // $299E + 18, // $299F + 18, // $29A0 + 18, // $29A1 + 18, // $29A2 + 18, // $29A3 + 18, // $29A4 + 18, // $29A5 + 18, // $29A6 + 18, // $29A7 + 18, // $29A8 + 18, // $29A9 + 18, // $29AA + 18, // $29AB + 18, // $29AC + 18, // $29AD + 18, // $29AE + 18, // $29AF + 18, // $29B0 + 18, // $29B1 + 18, // $29B2 + 18, // $29B3 + 18, // $29B4 + 18, // $29B5 + 18, // $29B6 + 18, // $29B7 + 18, // $29B8 + 18, // $29B9 + 18, // $29BA + 18, // $29BB + 18, // $29BC + 18, // $29BD + 18, // $29BE + 18, // $29BF + 18, // $29C0 + 18, // $29C1 + 18, // $29C2 + 18, // $29C3 + 18, // $29C4 + 18, // $29C5 + 18, // $29C6 + 18, // $29C7 + 18, // $29C8 + 18, // $29C9 + 18, // $29CA + 18, // $29CB + 18, // $29CC + 18, // $29CD + 18, // $29CE + 18, // $29CF + 18, // $29D0 + 18, // $29D1 + 18, // $29D2 + 18, // $29D3 + 18, // $29D4 + 18, // $29D5 + 18, // $29D6 + 18, // $29D7 + 13, // $29D8 + 14, // $29D9 + 13, // $29DA + 14, // $29DB + 18, // $29DC + 18, // $29DD + 18, // $29DE + 18, // $29DF + 18, // $29E0 + 18, // $29E1 + 18, // $29E2 + 18, // $29E3 + 18, // $29E4 + 18, // $29E5 + 18, // $29E6 + 18, // $29E7 + 18, // $29E8 + 18, // $29E9 + 18, // $29EA + 18, // $29EB + 18, // $29EC + 18, // $29ED + 18, // $29EE + 18, // $29EF + 18, // $29F0 + 18, // $29F1 + 18, // $29F2 + 18, // $29F3 + 18, // $29F4 + 18, // $29F5 + 18, // $29F6 + 18, // $29F7 + 18, // $29F8 + 18, // $29F9 + 18, // $29FA + 18, // $29FB + 13, // $29FC + 14, // $29FD + 18, // $29FE + 18, // $29FF + 18, // $2A00 + 18, // $2A01 + 18, // $2A02 + 18, // $2A03 + 18, // $2A04 + 18, // $2A05 + 18, // $2A06 + 18, // $2A07 + 18, // $2A08 + 18, // $2A09 + 18, // $2A0A + 18, // $2A0B + 18, // $2A0C + 18, // $2A0D + 18, // $2A0E + 18, // $2A0F + 18, // $2A10 + 18, // $2A11 + 18, // $2A12 + 18, // $2A13 + 18, // $2A14 + 18, // $2A15 + 18, // $2A16 + 18, // $2A17 + 18, // $2A18 + 18, // $2A19 + 18, // $2A1A + 18, // $2A1B + 18, // $2A1C + 18, // $2A1D + 18, // $2A1E + 18, // $2A1F + 18, // $2A20 + 18, // $2A21 + 18, // $2A22 + 18, // $2A23 + 18, // $2A24 + 18, // $2A25 + 18, // $2A26 + 18, // $2A27 + 18, // $2A28 + 18, // $2A29 + 18, // $2A2A + 18, // $2A2B + 18, // $2A2C + 18, // $2A2D + 18, // $2A2E + 18, // $2A2F + 18, // $2A30 + 18, // $2A31 + 18, // $2A32 + 18, // $2A33 + 18, // $2A34 + 18, // $2A35 + 18, // $2A36 + 18, // $2A37 + 18, // $2A38 + 18, // $2A39 + 18, // $2A3A + 18, // $2A3B + 18, // $2A3C + 18, // $2A3D + 18, // $2A3E + 18, // $2A3F + 18, // $2A40 + 18, // $2A41 + 18, // $2A42 + 18, // $2A43 + 18, // $2A44 + 18, // $2A45 + 18, // $2A46 + 18, // $2A47 + 18, // $2A48 + 18, // $2A49 + 18, // $2A4A + 18, // $2A4B + 18, // $2A4C + 18, // $2A4D + 18, // $2A4E + 18, // $2A4F + 18, // $2A50 + 18, // $2A51 + 18, // $2A52 + 18, // $2A53 + 18, // $2A54 + 18, // $2A55 + 18, // $2A56 + 18, // $2A57 + 18, // $2A58 + 18, // $2A59 + 18, // $2A5A + 18, // $2A5B + 18, // $2A5C + 18, // $2A5D + 18, // $2A5E + 18, // $2A5F + 18, // $2A60 + 18, // $2A61 + 18, // $2A62 + 18, // $2A63 + 18, // $2A64 + 18, // $2A65 + 18, // $2A66 + 18, // $2A67 + 18, // $2A68 + 18, // $2A69 + 18, // $2A6A + 18, // $2A6B + 18, // $2A6C + 18, // $2A6D + 18, // $2A6E + 18, // $2A6F + 18, // $2A70 + 18, // $2A71 + 18, // $2A72 + 18, // $2A73 + 18, // $2A74 + 18, // $2A75 + 18, // $2A76 + 18, // $2A77 + 18, // $2A78 + 18, // $2A79 + 18, // $2A7A + 18, // $2A7B + 18, // $2A7C + 18, // $2A7D + 18, // $2A7E + 18, // $2A7F + 18, // $2A80 + 18, // $2A81 + 18, // $2A82 + 18, // $2A83 + 18, // $2A84 + 18, // $2A85 + 18, // $2A86 + 18, // $2A87 + 18, // $2A88 + 18, // $2A89 + 18, // $2A8A + 18, // $2A8B + 18, // $2A8C + 18, // $2A8D + 18, // $2A8E + 18, // $2A8F + 18, // $2A90 + 18, // $2A91 + 18, // $2A92 + 18, // $2A93 + 18, // $2A94 + 18, // $2A95 + 18, // $2A96 + 18, // $2A97 + 18, // $2A98 + 18, // $2A99 + 18, // $2A9A + 18, // $2A9B + 18, // $2A9C + 18, // $2A9D + 18, // $2A9E + 18, // $2A9F + 18, // $2AA0 + 18, // $2AA1 + 18, // $2AA2 + 18, // $2AA3 + 18, // $2AA4 + 18, // $2AA5 + 18, // $2AA6 + 18, // $2AA7 + 18, // $2AA8 + 18, // $2AA9 + 18, // $2AAA + 18, // $2AAB + 18, // $2AAC + 18, // $2AAD + 18, // $2AAE + 18, // $2AAF + 18, // $2AB0 + 18, // $2AB1 + 18, // $2AB2 + 18, // $2AB3 + 18, // $2AB4 + 18, // $2AB5 + 18, // $2AB6 + 18, // $2AB7 + 18, // $2AB8 + 18, // $2AB9 + 18, // $2ABA + 18, // $2ABB + 18, // $2ABC + 18, // $2ABD + 18, // $2ABE + 18, // $2ABF + 18, // $2AC0 + 18, // $2AC1 + 18, // $2AC2 + 18, // $2AC3 + 18, // $2AC4 + 18, // $2AC5 + 18, // $2AC6 + 18, // $2AC7 + 18, // $2AC8 + 18, // $2AC9 + 18, // $2ACA + 18, // $2ACB + 18, // $2ACC + 18, // $2ACD + 18, // $2ACE + 18, // $2ACF + 18, // $2AD0 + 18, // $2AD1 + 18, // $2AD2 + 18, // $2AD3 + 18, // $2AD4 + 18, // $2AD5 + 18, // $2AD6 + 18, // $2AD7 + 18, // $2AD8 + 18, // $2AD9 + 18, // $2ADA + 18, // $2ADB + 18, // $2ADC + 18, // $2ADD + 18, // $2ADE + 18, // $2ADF + 18, // $2AE0 + 18, // $2AE1 + 18, // $2AE2 + 18, // $2AE3 + 18, // $2AE4 + 18, // $2AE5 + 18, // $2AE6 + 18, // $2AE7 + 18, // $2AE8 + 18, // $2AE9 + 18, // $2AEA + 18, // $2AEB + 18, // $2AEC + 18, // $2AED + 18, // $2AEE + 18, // $2AEF + 18, // $2AF0 + 18, // $2AF1 + 18, // $2AF2 + 18, // $2AF3 + 18, // $2AF4 + 18, // $2AF5 + 18, // $2AF6 + 18, // $2AF7 + 18, // $2AF8 + 18, // $2AF9 + 18, // $2AFA + 18, // $2AFB + 18, // $2AFC + 18, // $2AFD + 18, // $2AFE + 18, // $2AFF + 21, // $2B00 + 21, // $2B01 + 21, // $2B02 + 21, // $2B03 + 21, // $2B04 + 21, // $2B05 + 21, // $2B06 + 21, // $2B07 + 21, // $2B08 + 21, // $2B09 + 21, // $2B0A + 21, // $2B0B + 21, // $2B0C + 21, // $2B0D + 21, // $2B0E + 21, // $2B0F + 21, // $2B10 + 21, // $2B11 + 21, // $2B12 + 21, // $2B13 + 21, // $2B14 + 21, // $2B15 + 21, // $2B16 + 21, // $2B17 + 21, // $2B18 + 21, // $2B19 + 21, // $2B1A + 21, // $2B1B + 21, // $2B1C + 21, // $2B1D + 21, // $2B1E + 21, // $2B1F + 21, // $2B20 + 21, // $2B21 + 21, // $2B22 + 21, // $2B23 + 21, // $2B24 + 21, // $2B25 + 21, // $2B26 + 21, // $2B27 + 21, // $2B28 + 21, // $2B29 + 21, // $2B2A + 21, // $2B2B + 21, // $2B2C + 21, // $2B2D + 21, // $2B2E + 21, // $2B2F + 18, // $2B30 + 18, // $2B31 + 18, // $2B32 + 18, // $2B33 + 18, // $2B34 + 18, // $2B35 + 18, // $2B36 + 18, // $2B37 + 18, // $2B38 + 18, // $2B39 + 18, // $2B3A + 18, // $2B3B + 18, // $2B3C + 18, // $2B3D + 18, // $2B3E + 18, // $2B3F + 18, // $2B40 + 18, // $2B41 + 18, // $2B42 + 18, // $2B43 + 18, // $2B44 + 21, // $2B45 + 21, // $2B46 + 18, // $2B47 + 18, // $2B48 + 18, // $2B49 + 18, // $2B4A + 18, // $2B4B + 18, // $2B4C + 21, // $2B4D + 21, // $2B4E + 21, // $2B4F + 21, // $2B50 + 21, // $2B51 + 21, // $2B52 + 21, // $2B53 + 21, // $2B54 + 21, // $2B55 + 21, // $2B56 + 21, // $2B57 + 21, // $2B58 + 21, // $2B59 + 21, // $2B5A + 21, // $2B5B + 21, // $2B5C + 21, // $2B5D + 21, // $2B5E + 21, // $2B5F + 21, // $2B60 + 21, // $2B61 + 21, // $2B62 + 21, // $2B63 + 21, // $2B64 + 21, // $2B65 + 21, // $2B66 + 21, // $2B67 + 21, // $2B68 + 21, // $2B69 + 21, // $2B6A + 21, // $2B6B + 21, // $2B6C + 21, // $2B6D + 21, // $2B6E + 21, // $2B6F + 21, // $2B70 + 21, // $2B71 + 21, // $2B72 + 21, // $2B73 + 29, // $2B74 + 29, // $2B75 + 21, // $2B76 + 21, // $2B77 + 21, // $2B78 + 21, // $2B79 + 21, // $2B7A + 21, // $2B7B + 21, // $2B7C + 21, // $2B7D + 21, // $2B7E + 21, // $2B7F + 21, // $2B80 + 21, // $2B81 + 21, // $2B82 + 21, // $2B83 + 21, // $2B84 + 21, // $2B85 + 21, // $2B86 + 21, // $2B87 + 21, // $2B88 + 21, // $2B89 + 21, // $2B8A + 21, // $2B8B + 21, // $2B8C + 21, // $2B8D + 21, // $2B8E + 21, // $2B8F + 21, // $2B90 + 21, // $2B91 + 21, // $2B92 + 21, // $2B93 + 21, // $2B94 + 21, // $2B95 + 29, // $2B96 + 29, // $2B97 + 21, // $2B98 + 21, // $2B99 + 21, // $2B9A + 21, // $2B9B + 21, // $2B9C + 21, // $2B9D + 21, // $2B9E + 21, // $2B9F + 21, // $2BA0 + 21, // $2BA1 + 21, // $2BA2 + 21, // $2BA3 + 21, // $2BA4 + 21, // $2BA5 + 21, // $2BA6 + 21, // $2BA7 + 21, // $2BA8 + 21, // $2BA9 + 21, // $2BAA + 21, // $2BAB + 21, // $2BAC + 21, // $2BAD + 21, // $2BAE + 21, // $2BAF + 21, // $2BB0 + 21, // $2BB1 + 21, // $2BB2 + 21, // $2BB3 + 21, // $2BB4 + 21, // $2BB5 + 21, // $2BB6 + 21, // $2BB7 + 21, // $2BB8 + 21, // $2BB9 + 29, // $2BBA + 29, // $2BBB + 29, // $2BBC + 21, // $2BBD + 21, // $2BBE + 21, // $2BBF + 21, // $2BC0 + 21, // $2BC1 + 21, // $2BC2 + 21, // $2BC3 + 21, // $2BC4 + 21, // $2BC5 + 21, // $2BC6 + 21, // $2BC7 + 21, // $2BC8 + 29, // $2BC9 + 21, // $2BCA + 21, // $2BCB + 21, // $2BCC + 21, // $2BCD + 21, // $2BCE + 21, // $2BCF + 21, // $2BD0 + 21, // $2BD1 + 29, // $2BD2 + 29, // $2BD3 + 29, // $2BD4 + 29, // $2BD5 + 29, // $2BD6 + 29, // $2BD7 + 29, // $2BD8 + 29, // $2BD9 + 29, // $2BDA + 29, // $2BDB + 29, // $2BDC + 29, // $2BDD + 29, // $2BDE + 29, // $2BDF + 29, // $2BE0 + 29, // $2BE1 + 29, // $2BE2 + 29, // $2BE3 + 29, // $2BE4 + 29, // $2BE5 + 29, // $2BE6 + 29, // $2BE7 + 29, // $2BE8 + 29, // $2BE9 + 29, // $2BEA + 29, // $2BEB + 21, // $2BEC + 21, // $2BED + 21, // $2BEE + 21, // $2BEF + 29, // $2BF0 + 29, // $2BF1 + 29, // $2BF2 + 29, // $2BF3 + 29, // $2BF4 + 29, // $2BF5 + 29, // $2BF6 + 29, // $2BF7 + 29, // $2BF8 + 29, // $2BF9 + 29, // $2BFA + 29, // $2BFB + 29, // $2BFC + 29, // $2BFD + 29, // $2BFE + 29, // $2BFF + 128, // $2C00 + 128, // $2C01 + 128, // $2C02 + 128, // $2C03 + 128, // $2C04 + 128, // $2C05 + 128, // $2C06 + 128, // $2C07 + 128, // $2C08 + 128, // $2C09 + 128, // $2C0A + 128, // $2C0B + 128, // $2C0C + 128, // $2C0D + 128, // $2C0E + 128, // $2C0F + 128, // $2C10 + 128, // $2C11 + 128, // $2C12 + 128, // $2C13 + 128, // $2C14 + 128, // $2C15 + 128, // $2C16 + 128, // $2C17 + 128, // $2C18 + 128, // $2C19 + 128, // $2C1A + 128, // $2C1B + 128, // $2C1C + 128, // $2C1D + 128, // $2C1E + 128, // $2C1F + 128, // $2C20 + 128, // $2C21 + 128, // $2C22 + 128, // $2C23 + 128, // $2C24 + 128, // $2C25 + 128, // $2C26 + 128, // $2C27 + 128, // $2C28 + 128, // $2C29 + 128, // $2C2A + 128, // $2C2B + 128, // $2C2C + 128, // $2C2D + 128, // $2C2E + 29, // $2C2F + 129, // $2C30 + 129, // $2C31 + 129, // $2C32 + 129, // $2C33 + 129, // $2C34 + 129, // $2C35 + 129, // $2C36 + 129, // $2C37 + 129, // $2C38 + 129, // $2C39 + 129, // $2C3A + 129, // $2C3B + 129, // $2C3C + 129, // $2C3D + 129, // $2C3E + 129, // $2C3F + 129, // $2C40 + 129, // $2C41 + 129, // $2C42 + 129, // $2C43 + 129, // $2C44 + 129, // $2C45 + 129, // $2C46 + 129, // $2C47 + 129, // $2C48 + 129, // $2C49 + 129, // $2C4A + 129, // $2C4B + 129, // $2C4C + 129, // $2C4D + 129, // $2C4E + 129, // $2C4F + 129, // $2C50 + 129, // $2C51 + 129, // $2C52 + 129, // $2C53 + 129, // $2C54 + 129, // $2C55 + 129, // $2C56 + 129, // $2C57 + 129, // $2C58 + 129, // $2C59 + 129, // $2C5A + 129, // $2C5B + 129, // $2C5C + 129, // $2C5D + 129, // $2C5E + 29, // $2C5F + 128, // $2C60 + 129, // $2C61 + 128, // $2C62 + 128, // $2C63 + 128, // $2C64 + 129, // $2C65 + 129, // $2C66 + 128, // $2C67 + 129, // $2C68 + 128, // $2C69 + 129, // $2C6A + 128, // $2C6B + 129, // $2C6C + 128, // $2C6D + 128, // $2C6E + 128, // $2C6F + 128, // $2C70 + 129, // $2C71 + 128, // $2C72 + 129, // $2C73 + 129, // $2C74 + 128, // $2C75 + 129, // $2C76 + 129, // $2C77 + 129, // $2C78 + 129, // $2C79 + 129, // $2C7A + 129, // $2C7B + 131, // $2C7C + 131, // $2C7D + 128, // $2C7E + 128, // $2C7F + 128, // $2C80 + 129, // $2C81 + 128, // $2C82 + 129, // $2C83 + 128, // $2C84 + 129, // $2C85 + 128, // $2C86 + 129, // $2C87 + 128, // $2C88 + 129, // $2C89 + 128, // $2C8A + 129, // $2C8B + 128, // $2C8C + 129, // $2C8D + 128, // $2C8E + 129, // $2C8F + 128, // $2C90 + 129, // $2C91 + 128, // $2C92 + 129, // $2C93 + 128, // $2C94 + 129, // $2C95 + 128, // $2C96 + 129, // $2C97 + 128, // $2C98 + 129, // $2C99 + 128, // $2C9A + 129, // $2C9B + 128, // $2C9C + 129, // $2C9D + 128, // $2C9E + 129, // $2C9F + 128, // $2CA0 + 129, // $2CA1 + 128, // $2CA2 + 129, // $2CA3 + 128, // $2CA4 + 129, // $2CA5 + 128, // $2CA6 + 129, // $2CA7 + 128, // $2CA8 + 129, // $2CA9 + 128, // $2CAA + 129, // $2CAB + 128, // $2CAC + 129, // $2CAD + 128, // $2CAE + 129, // $2CAF + 128, // $2CB0 + 129, // $2CB1 + 128, // $2CB2 + 129, // $2CB3 + 128, // $2CB4 + 129, // $2CB5 + 128, // $2CB6 + 129, // $2CB7 + 128, // $2CB8 + 129, // $2CB9 + 128, // $2CBA + 129, // $2CBB + 128, // $2CBC + 129, // $2CBD + 128, // $2CBE + 129, // $2CBF + 128, // $2CC0 + 129, // $2CC1 + 128, // $2CC2 + 129, // $2CC3 + 128, // $2CC4 + 129, // $2CC5 + 128, // $2CC6 + 129, // $2CC7 + 128, // $2CC8 + 129, // $2CC9 + 128, // $2CCA + 129, // $2CCB + 128, // $2CCC + 129, // $2CCD + 128, // $2CCE + 129, // $2CCF + 128, // $2CD0 + 129, // $2CD1 + 128, // $2CD2 + 129, // $2CD3 + 128, // $2CD4 + 129, // $2CD5 + 128, // $2CD6 + 129, // $2CD7 + 128, // $2CD8 + 129, // $2CD9 + 128, // $2CDA + 129, // $2CDB + 128, // $2CDC + 129, // $2CDD + 128, // $2CDE + 129, // $2CDF + 128, // $2CE0 + 129, // $2CE1 + 128, // $2CE2 + 129, // $2CE3 + 129, // $2CE4 + 21, // $2CE5 + 21, // $2CE6 + 21, // $2CE7 + 21, // $2CE8 + 21, // $2CE9 + 21, // $2CEA + 128, // $2CEB + 129, // $2CEC + 128, // $2CED + 129, // $2CEE + 133, // $2CEF + 133, // $2CF0 + 133, // $2CF1 + 128, // $2CF2 + 129, // $2CF3 + 29, // $2CF4 + 29, // $2CF5 + 29, // $2CF6 + 29, // $2CF7 + 29, // $2CF8 + 17, // $2CF9 + 17, // $2CFA + 17, // $2CFB + 17, // $2CFC + 138, // $2CFD + 17, // $2CFE + 17, // $2CFF + 129, // $2D00 + 129, // $2D01 + 129, // $2D02 + 129, // $2D03 + 129, // $2D04 + 129, // $2D05 + 129, // $2D06 + 129, // $2D07 + 129, // $2D08 + 129, // $2D09 + 129, // $2D0A + 129, // $2D0B + 129, // $2D0C + 129, // $2D0D + 129, // $2D0E + 129, // $2D0F + 129, // $2D10 + 129, // $2D11 + 129, // $2D12 + 129, // $2D13 + 129, // $2D14 + 129, // $2D15 + 129, // $2D16 + 129, // $2D17 + 129, // $2D18 + 129, // $2D19 + 129, // $2D1A + 129, // $2D1B + 129, // $2D1C + 129, // $2D1D + 129, // $2D1E + 129, // $2D1F + 129, // $2D20 + 129, // $2D21 + 129, // $2D22 + 129, // $2D23 + 129, // $2D24 + 129, // $2D25 + 29, // $2D26 + 129, // $2D27 + 29, // $2D28 + 29, // $2D29 + 29, // $2D2A + 29, // $2D2B + 29, // $2D2C + 129, // $2D2D + 29, // $2D2E + 29, // $2D2F + 132, // $2D30 + 132, // $2D31 + 132, // $2D32 + 132, // $2D33 + 132, // $2D34 + 132, // $2D35 + 132, // $2D36 + 132, // $2D37 + 132, // $2D38 + 132, // $2D39 + 132, // $2D3A + 132, // $2D3B + 132, // $2D3C + 132, // $2D3D + 132, // $2D3E + 132, // $2D3F + 132, // $2D40 + 132, // $2D41 + 132, // $2D42 + 132, // $2D43 + 132, // $2D44 + 132, // $2D45 + 132, // $2D46 + 132, // $2D47 + 132, // $2D48 + 132, // $2D49 + 132, // $2D4A + 132, // $2D4B + 132, // $2D4C + 132, // $2D4D + 132, // $2D4E + 132, // $2D4F + 132, // $2D50 + 132, // $2D51 + 132, // $2D52 + 132, // $2D53 + 132, // $2D54 + 132, // $2D55 + 132, // $2D56 + 132, // $2D57 + 132, // $2D58 + 132, // $2D59 + 132, // $2D5A + 132, // $2D5B + 132, // $2D5C + 132, // $2D5D + 132, // $2D5E + 132, // $2D5F + 132, // $2D60 + 132, // $2D61 + 132, // $2D62 + 132, // $2D63 + 132, // $2D64 + 132, // $2D65 + 132, // $2D66 + 132, // $2D67 + 29, // $2D68 + 29, // $2D69 + 29, // $2D6A + 29, // $2D6B + 29, // $2D6C + 29, // $2D6D + 29, // $2D6E + 131, // $2D6F + 17, // $2D70 + 29, // $2D71 + 29, // $2D72 + 29, // $2D73 + 29, // $2D74 + 29, // $2D75 + 29, // $2D76 + 29, // $2D77 + 29, // $2D78 + 29, // $2D79 + 29, // $2D7A + 29, // $2D7B + 29, // $2D7C + 29, // $2D7D + 29, // $2D7E + 133, // $2D7F + 132, // $2D80 + 132, // $2D81 + 132, // $2D82 + 132, // $2D83 + 132, // $2D84 + 132, // $2D85 + 132, // $2D86 + 132, // $2D87 + 132, // $2D88 + 132, // $2D89 + 132, // $2D8A + 132, // $2D8B + 132, // $2D8C + 132, // $2D8D + 132, // $2D8E + 132, // $2D8F + 132, // $2D90 + 132, // $2D91 + 132, // $2D92 + 132, // $2D93 + 132, // $2D94 + 132, // $2D95 + 132, // $2D96 + 29, // $2D97 + 29, // $2D98 + 29, // $2D99 + 29, // $2D9A + 29, // $2D9B + 29, // $2D9C + 29, // $2D9D + 29, // $2D9E + 29, // $2D9F + 132, // $2DA0 + 132, // $2DA1 + 132, // $2DA2 + 132, // $2DA3 + 132, // $2DA4 + 132, // $2DA5 + 132, // $2DA6 + 29, // $2DA7 + 132, // $2DA8 + 132, // $2DA9 + 132, // $2DAA + 132, // $2DAB + 132, // $2DAC + 132, // $2DAD + 132, // $2DAE + 29, // $2DAF + 132, // $2DB0 + 132, // $2DB1 + 132, // $2DB2 + 132, // $2DB3 + 132, // $2DB4 + 132, // $2DB5 + 132, // $2DB6 + 29, // $2DB7 + 132, // $2DB8 + 132, // $2DB9 + 132, // $2DBA + 132, // $2DBB + 132, // $2DBC + 132, // $2DBD + 132, // $2DBE + 29, // $2DBF + 132, // $2DC0 + 132, // $2DC1 + 132, // $2DC2 + 132, // $2DC3 + 132, // $2DC4 + 132, // $2DC5 + 132, // $2DC6 + 29, // $2DC7 + 132, // $2DC8 + 132, // $2DC9 + 132, // $2DCA + 132, // $2DCB + 132, // $2DCC + 132, // $2DCD + 132, // $2DCE + 29, // $2DCF + 132, // $2DD0 + 132, // $2DD1 + 132, // $2DD2 + 132, // $2DD3 + 132, // $2DD4 + 132, // $2DD5 + 132, // $2DD6 + 29, // $2DD7 + 132, // $2DD8 + 132, // $2DD9 + 132, // $2DDA + 132, // $2DDB + 132, // $2DDC + 132, // $2DDD + 132, // $2DDE + 29, // $2DDF + 133, // $2DE0 + 133, // $2DE1 + 133, // $2DE2 + 133, // $2DE3 + 133, // $2DE4 + 133, // $2DE5 + 133, // $2DE6 + 133, // $2DE7 + 133, // $2DE8 + 133, // $2DE9 + 133, // $2DEA + 133, // $2DEB + 133, // $2DEC + 133, // $2DED + 133, // $2DEE + 133, // $2DEF + 133, // $2DF0 + 133, // $2DF1 + 133, // $2DF2 + 133, // $2DF3 + 133, // $2DF4 + 133, // $2DF5 + 133, // $2DF6 + 133, // $2DF7 + 133, // $2DF8 + 133, // $2DF9 + 133, // $2DFA + 133, // $2DFB + 133, // $2DFC + 133, // $2DFD + 133, // $2DFE + 133, // $2DFF + 17, // $2E00 + 17, // $2E01 + 15, // $2E02 + 16, // $2E03 + 15, // $2E04 + 16, // $2E05 + 17, // $2E06 + 17, // $2E07 + 17, // $2E08 + 15, // $2E09 + 16, // $2E0A + 17, // $2E0B + 15, // $2E0C + 16, // $2E0D + 17, // $2E0E + 17, // $2E0F + 17, // $2E10 + 17, // $2E11 + 17, // $2E12 + 17, // $2E13 + 17, // $2E14 + 17, // $2E15 + 17, // $2E16 + 12, // $2E17 + 17, // $2E18 + 17, // $2E19 + 12, // $2E1A + 17, // $2E1B + 15, // $2E1C + 16, // $2E1D + 17, // $2E1E + 17, // $2E1F + 15, // $2E20 + 16, // $2E21 + 13, // $2E22 + 14, // $2E23 + 13, // $2E24 + 14, // $2E25 + 13, // $2E26 + 14, // $2E27 + 13, // $2E28 + 14, // $2E29 + 17, // $2E2A + 17, // $2E2B + 17, // $2E2C + 17, // $2E2D + 17, // $2E2E + 131, // $2E2F + 17, // $2E30 + 17, // $2E31 + 17, // $2E32 + 17, // $2E33 + 17, // $2E34 + 17, // $2E35 + 17, // $2E36 + 17, // $2E37 + 17, // $2E38 + 17, // $2E39 + 12, // $2E3A + 12, // $2E3B + 17, // $2E3C + 17, // $2E3D + 17, // $2E3E + 17, // $2E3F + 12, // $2E40 + 17, // $2E41 + 13, // $2E42 + 17, // $2E43 + 17, // $2E44 + 29, // $2E45 + 29, // $2E46 + 29, // $2E47 + 29, // $2E48 + 29, // $2E49 + 29, // $2E4A + 29, // $2E4B + 29, // $2E4C + 29, // $2E4D + 29, // $2E4E + 29, // $2E4F + 29, // $2E50 + 29, // $2E51 + 29, // $2E52 + 29, // $2E53 + 29, // $2E54 + 29, // $2E55 + 29, // $2E56 + 29, // $2E57 + 29, // $2E58 + 29, // $2E59 + 29, // $2E5A + 29, // $2E5B + 29, // $2E5C + 29, // $2E5D + 29, // $2E5E + 29, // $2E5F + 29, // $2E60 + 29, // $2E61 + 29, // $2E62 + 29, // $2E63 + 29, // $2E64 + 29, // $2E65 + 29, // $2E66 + 29, // $2E67 + 29, // $2E68 + 29, // $2E69 + 29, // $2E6A + 29, // $2E6B + 29, // $2E6C + 29, // $2E6D + 29, // $2E6E + 29, // $2E6F + 29, // $2E70 + 29, // $2E71 + 29, // $2E72 + 29, // $2E73 + 29, // $2E74 + 29, // $2E75 + 29, // $2E76 + 29, // $2E77 + 29, // $2E78 + 29, // $2E79 + 29, // $2E7A + 29, // $2E7B + 29, // $2E7C + 29, // $2E7D + 29, // $2E7E + 29, // $2E7F + 21, // $2E80 + 21, // $2E81 + 21, // $2E82 + 21, // $2E83 + 21, // $2E84 + 21, // $2E85 + 21, // $2E86 + 21, // $2E87 + 21, // $2E88 + 21, // $2E89 + 21, // $2E8A + 21, // $2E8B + 21, // $2E8C + 21, // $2E8D + 21, // $2E8E + 21, // $2E8F + 21, // $2E90 + 21, // $2E91 + 21, // $2E92 + 21, // $2E93 + 21, // $2E94 + 21, // $2E95 + 21, // $2E96 + 21, // $2E97 + 21, // $2E98 + 21, // $2E99 + 29, // $2E9A + 21, // $2E9B + 21, // $2E9C + 21, // $2E9D + 21, // $2E9E + 21, // $2E9F + 21, // $2EA0 + 21, // $2EA1 + 21, // $2EA2 + 21, // $2EA3 + 21, // $2EA4 + 21, // $2EA5 + 21, // $2EA6 + 21, // $2EA7 + 21, // $2EA8 + 21, // $2EA9 + 21, // $2EAA + 21, // $2EAB + 21, // $2EAC + 21, // $2EAD + 21, // $2EAE + 21, // $2EAF + 21, // $2EB0 + 21, // $2EB1 + 21, // $2EB2 + 21, // $2EB3 + 21, // $2EB4 + 21, // $2EB5 + 21, // $2EB6 + 21, // $2EB7 + 21, // $2EB8 + 21, // $2EB9 + 21, // $2EBA + 21, // $2EBB + 21, // $2EBC + 21, // $2EBD + 21, // $2EBE + 21, // $2EBF + 21, // $2EC0 + 21, // $2EC1 + 21, // $2EC2 + 21, // $2EC3 + 21, // $2EC4 + 21, // $2EC5 + 21, // $2EC6 + 21, // $2EC7 + 21, // $2EC8 + 21, // $2EC9 + 21, // $2ECA + 21, // $2ECB + 21, // $2ECC + 21, // $2ECD + 21, // $2ECE + 21, // $2ECF + 21, // $2ED0 + 21, // $2ED1 + 21, // $2ED2 + 21, // $2ED3 + 21, // $2ED4 + 21, // $2ED5 + 21, // $2ED6 + 21, // $2ED7 + 21, // $2ED8 + 21, // $2ED9 + 21, // $2EDA + 21, // $2EDB + 21, // $2EDC + 21, // $2EDD + 21, // $2EDE + 21, // $2EDF + 21, // $2EE0 + 21, // $2EE1 + 21, // $2EE2 + 21, // $2EE3 + 21, // $2EE4 + 21, // $2EE5 + 21, // $2EE6 + 21, // $2EE7 + 21, // $2EE8 + 21, // $2EE9 + 21, // $2EEA + 21, // $2EEB + 21, // $2EEC + 21, // $2EED + 21, // $2EEE + 21, // $2EEF + 21, // $2EF0 + 21, // $2EF1 + 21, // $2EF2 + 21, // $2EF3 + 29, // $2EF4 + 29, // $2EF5 + 29, // $2EF6 + 29, // $2EF7 + 29, // $2EF8 + 29, // $2EF9 + 29, // $2EFA + 29, // $2EFB + 29, // $2EFC + 29, // $2EFD + 29, // $2EFE + 29, // $2EFF + 21, // $2F00 + 21, // $2F01 + 21, // $2F02 + 21, // $2F03 + 21, // $2F04 + 21, // $2F05 + 21, // $2F06 + 21, // $2F07 + 21, // $2F08 + 21, // $2F09 + 21, // $2F0A + 21, // $2F0B + 21, // $2F0C + 21, // $2F0D + 21, // $2F0E + 21, // $2F0F + 21, // $2F10 + 21, // $2F11 + 21, // $2F12 + 21, // $2F13 + 21, // $2F14 + 21, // $2F15 + 21, // $2F16 + 21, // $2F17 + 21, // $2F18 + 21, // $2F19 + 21, // $2F1A + 21, // $2F1B + 21, // $2F1C + 21, // $2F1D + 21, // $2F1E + 21, // $2F1F + 21, // $2F20 + 21, // $2F21 + 21, // $2F22 + 21, // $2F23 + 21, // $2F24 + 21, // $2F25 + 21, // $2F26 + 21, // $2F27 + 21, // $2F28 + 21, // $2F29 + 21, // $2F2A + 21, // $2F2B + 21, // $2F2C + 21, // $2F2D + 21, // $2F2E + 21, // $2F2F + 21, // $2F30 + 21, // $2F31 + 21, // $2F32 + 21, // $2F33 + 21, // $2F34 + 21, // $2F35 + 21, // $2F36 + 21, // $2F37 + 21, // $2F38 + 21, // $2F39 + 21, // $2F3A + 21, // $2F3B + 21, // $2F3C + 21, // $2F3D + 21, // $2F3E + 21, // $2F3F + 21, // $2F40 + 21, // $2F41 + 21, // $2F42 + 21, // $2F43 + 21, // $2F44 + 21, // $2F45 + 21, // $2F46 + 21, // $2F47 + 21, // $2F48 + 21, // $2F49 + 21, // $2F4A + 21, // $2F4B + 21, // $2F4C + 21, // $2F4D + 21, // $2F4E + 21, // $2F4F + 21, // $2F50 + 21, // $2F51 + 21, // $2F52 + 21, // $2F53 + 21, // $2F54 + 21, // $2F55 + 21, // $2F56 + 21, // $2F57 + 21, // $2F58 + 21, // $2F59 + 21, // $2F5A + 21, // $2F5B + 21, // $2F5C + 21, // $2F5D + 21, // $2F5E + 21, // $2F5F + 21, // $2F60 + 21, // $2F61 + 21, // $2F62 + 21, // $2F63 + 21, // $2F64 + 21, // $2F65 + 21, // $2F66 + 21, // $2F67 + 21, // $2F68 + 21, // $2F69 + 21, // $2F6A + 21, // $2F6B + 21, // $2F6C + 21, // $2F6D + 21, // $2F6E + 21, // $2F6F + 21, // $2F70 + 21, // $2F71 + 21, // $2F72 + 21, // $2F73 + 21, // $2F74 + 21, // $2F75 + 21, // $2F76 + 21, // $2F77 + 21, // $2F78 + 21, // $2F79 + 21, // $2F7A + 21, // $2F7B + 21, // $2F7C + 21, // $2F7D + 21, // $2F7E + 21, // $2F7F + 21, // $2F80 + 21, // $2F81 + 21, // $2F82 + 21, // $2F83 + 21, // $2F84 + 21, // $2F85 + 21, // $2F86 + 21, // $2F87 + 21, // $2F88 + 21, // $2F89 + 21, // $2F8A + 21, // $2F8B + 21, // $2F8C + 21, // $2F8D + 21, // $2F8E + 21, // $2F8F + 21, // $2F90 + 21, // $2F91 + 21, // $2F92 + 21, // $2F93 + 21, // $2F94 + 21, // $2F95 + 21, // $2F96 + 21, // $2F97 + 21, // $2F98 + 21, // $2F99 + 21, // $2F9A + 21, // $2F9B + 21, // $2F9C + 21, // $2F9D + 21, // $2F9E + 21, // $2F9F + 21, // $2FA0 + 21, // $2FA1 + 21, // $2FA2 + 21, // $2FA3 + 21, // $2FA4 + 21, // $2FA5 + 21, // $2FA6 + 21, // $2FA7 + 21, // $2FA8 + 21, // $2FA9 + 21, // $2FAA + 21, // $2FAB + 21, // $2FAC + 21, // $2FAD + 21, // $2FAE + 21, // $2FAF + 21, // $2FB0 + 21, // $2FB1 + 21, // $2FB2 + 21, // $2FB3 + 21, // $2FB4 + 21, // $2FB5 + 21, // $2FB6 + 21, // $2FB7 + 21, // $2FB8 + 21, // $2FB9 + 21, // $2FBA + 21, // $2FBB + 21, // $2FBC + 21, // $2FBD + 21, // $2FBE + 21, // $2FBF + 21, // $2FC0 + 21, // $2FC1 + 21, // $2FC2 + 21, // $2FC3 + 21, // $2FC4 + 21, // $2FC5 + 21, // $2FC6 + 21, // $2FC7 + 21, // $2FC8 + 21, // $2FC9 + 21, // $2FCA + 21, // $2FCB + 21, // $2FCC + 21, // $2FCD + 21, // $2FCE + 21, // $2FCF + 21, // $2FD0 + 21, // $2FD1 + 21, // $2FD2 + 21, // $2FD3 + 21, // $2FD4 + 21, // $2FD5 + 29, // $2FD6 + 29, // $2FD7 + 29, // $2FD8 + 29, // $2FD9 + 29, // $2FDA + 29, // $2FDB + 29, // $2FDC + 29, // $2FDD + 29, // $2FDE + 29, // $2FDF + 29, // $2FE0 + 29, // $2FE1 + 29, // $2FE2 + 29, // $2FE3 + 29, // $2FE4 + 29, // $2FE5 + 29, // $2FE6 + 29, // $2FE7 + 29, // $2FE8 + 29, // $2FE9 + 29, // $2FEA + 29, // $2FEB + 29, // $2FEC + 29, // $2FED + 29, // $2FEE + 29, // $2FEF + 21, // $2FF0 + 21, // $2FF1 + 21, // $2FF2 + 21, // $2FF3 + 21, // $2FF4 + 21, // $2FF5 + 21, // $2FF6 + 21, // $2FF7 + 21, // $2FF8 + 21, // $2FF9 + 21, // $2FFA + 21, // $2FFB + 29, // $2FFC + 29, // $2FFD + 29, // $2FFE + 29, // $2FFF + 22, // $3000 + 17, // $3001 + 17, // $3002 + 17, // $3003 + 21, // $3004 + 131, // $3005 + 132, // $3006 + 137, // $3007 + 13, // $3008 + 14, // $3009 + 13, // $300A + 14, // $300B + 13, // $300C + 14, // $300D + 13, // $300E + 14, // $300F + 13, // $3010 + 14, // $3011 + 21, // $3012 + 21, // $3013 + 13, // $3014 + 14, // $3015 + 13, // $3016 + 14, // $3017 + 13, // $3018 + 14, // $3019 + 13, // $301A + 14, // $301B + 12, // $301C + 13, // $301D + 14, // $301E + 14, // $301F + 21, // $3020 + 137, // $3021 + 137, // $3022 + 137, // $3023 + 137, // $3024 + 137, // $3025 + 137, // $3026 + 137, // $3027 + 137, // $3028 + 137, // $3029 + 133, // $302A + 133, // $302B + 133, // $302C + 133, // $302D + 134, // $302E + 134, // $302F + 12, // $3030 + 131, // $3031 + 131, // $3032 + 131, // $3033 + 131, // $3034 + 131, // $3035 + 21, // $3036 + 21, // $3037 + 137, // $3038 + 137, // $3039 + 137, // $303A + 131, // $303B + 132, // $303C + 17, // $303D + 21, // $303E + 21, // $303F + 29, // $3040 + 132, // $3041 + 132, // $3042 + 132, // $3043 + 132, // $3044 + 132, // $3045 + 132, // $3046 + 132, // $3047 + 132, // $3048 + 132, // $3049 + 132, // $304A + 132, // $304B + 132, // $304C + 132, // $304D + 132, // $304E + 132, // $304F + 132, // $3050 + 132, // $3051 + 132, // $3052 + 132, // $3053 + 132, // $3054 + 132, // $3055 + 132, // $3056 + 132, // $3057 + 132, // $3058 + 132, // $3059 + 132, // $305A + 132, // $305B + 132, // $305C + 132, // $305D + 132, // $305E + 132, // $305F + 132, // $3060 + 132, // $3061 + 132, // $3062 + 132, // $3063 + 132, // $3064 + 132, // $3065 + 132, // $3066 + 132, // $3067 + 132, // $3068 + 132, // $3069 + 132, // $306A + 132, // $306B + 132, // $306C + 132, // $306D + 132, // $306E + 132, // $306F + 132, // $3070 + 132, // $3071 + 132, // $3072 + 132, // $3073 + 132, // $3074 + 132, // $3075 + 132, // $3076 + 132, // $3077 + 132, // $3078 + 132, // $3079 + 132, // $307A + 132, // $307B + 132, // $307C + 132, // $307D + 132, // $307E + 132, // $307F + 132, // $3080 + 132, // $3081 + 132, // $3082 + 132, // $3083 + 132, // $3084 + 132, // $3085 + 132, // $3086 + 132, // $3087 + 132, // $3088 + 132, // $3089 + 132, // $308A + 132, // $308B + 132, // $308C + 132, // $308D + 132, // $308E + 132, // $308F + 132, // $3090 + 132, // $3091 + 132, // $3092 + 132, // $3093 + 132, // $3094 + 132, // $3095 + 132, // $3096 + 29, // $3097 + 29, // $3098 + 133, // $3099 + 133, // $309A + 20, // $309B + 20, // $309C + 131, // $309D + 131, // $309E + 132, // $309F + 12, // $30A0 + 132, // $30A1 + 132, // $30A2 + 132, // $30A3 + 132, // $30A4 + 132, // $30A5 + 132, // $30A6 + 132, // $30A7 + 132, // $30A8 + 132, // $30A9 + 132, // $30AA + 132, // $30AB + 132, // $30AC + 132, // $30AD + 132, // $30AE + 132, // $30AF + 132, // $30B0 + 132, // $30B1 + 132, // $30B2 + 132, // $30B3 + 132, // $30B4 + 132, // $30B5 + 132, // $30B6 + 132, // $30B7 + 132, // $30B8 + 132, // $30B9 + 132, // $30BA + 132, // $30BB + 132, // $30BC + 132, // $30BD + 132, // $30BE + 132, // $30BF + 132, // $30C0 + 132, // $30C1 + 132, // $30C2 + 132, // $30C3 + 132, // $30C4 + 132, // $30C5 + 132, // $30C6 + 132, // $30C7 + 132, // $30C8 + 132, // $30C9 + 132, // $30CA + 132, // $30CB + 132, // $30CC + 132, // $30CD + 132, // $30CE + 132, // $30CF + 132, // $30D0 + 132, // $30D1 + 132, // $30D2 + 132, // $30D3 + 132, // $30D4 + 132, // $30D5 + 132, // $30D6 + 132, // $30D7 + 132, // $30D8 + 132, // $30D9 + 132, // $30DA + 132, // $30DB + 132, // $30DC + 132, // $30DD + 132, // $30DE + 132, // $30DF + 132, // $30E0 + 132, // $30E1 + 132, // $30E2 + 132, // $30E3 + 132, // $30E4 + 132, // $30E5 + 132, // $30E6 + 132, // $30E7 + 132, // $30E8 + 132, // $30E9 + 132, // $30EA + 132, // $30EB + 132, // $30EC + 132, // $30ED + 132, // $30EE + 132, // $30EF + 132, // $30F0 + 132, // $30F1 + 132, // $30F2 + 132, // $30F3 + 132, // $30F4 + 132, // $30F5 + 132, // $30F6 + 132, // $30F7 + 132, // $30F8 + 132, // $30F9 + 132, // $30FA + 17, // $30FB + 131, // $30FC + 131, // $30FD + 131, // $30FE + 132, // $30FF + 29, // $3100 + 29, // $3101 + 29, // $3102 + 29, // $3103 + 29, // $3104 + 132, // $3105 + 132, // $3106 + 132, // $3107 + 132, // $3108 + 132, // $3109 + 132, // $310A + 132, // $310B + 132, // $310C + 132, // $310D + 132, // $310E + 132, // $310F + 132, // $3110 + 132, // $3111 + 132, // $3112 + 132, // $3113 + 132, // $3114 + 132, // $3115 + 132, // $3116 + 132, // $3117 + 132, // $3118 + 132, // $3119 + 132, // $311A + 132, // $311B + 132, // $311C + 132, // $311D + 132, // $311E + 132, // $311F + 132, // $3120 + 132, // $3121 + 132, // $3122 + 132, // $3123 + 132, // $3124 + 132, // $3125 + 132, // $3126 + 132, // $3127 + 132, // $3128 + 132, // $3129 + 132, // $312A + 132, // $312B + 132, // $312C + 132, // $312D + 29, // $312E + 29, // $312F + 29, // $3130 + 132, // $3131 + 132, // $3132 + 132, // $3133 + 132, // $3134 + 132, // $3135 + 132, // $3136 + 132, // $3137 + 132, // $3138 + 132, // $3139 + 132, // $313A + 132, // $313B + 132, // $313C + 132, // $313D + 132, // $313E + 132, // $313F + 132, // $3140 + 132, // $3141 + 132, // $3142 + 132, // $3143 + 132, // $3144 + 132, // $3145 + 132, // $3146 + 132, // $3147 + 132, // $3148 + 132, // $3149 + 132, // $314A + 132, // $314B + 132, // $314C + 132, // $314D + 132, // $314E + 132, // $314F + 132, // $3150 + 132, // $3151 + 132, // $3152 + 132, // $3153 + 132, // $3154 + 132, // $3155 + 132, // $3156 + 132, // $3157 + 132, // $3158 + 132, // $3159 + 132, // $315A + 132, // $315B + 132, // $315C + 132, // $315D + 132, // $315E + 132, // $315F + 132, // $3160 + 132, // $3161 + 132, // $3162 + 132, // $3163 + 132, // $3164 + 132, // $3165 + 132, // $3166 + 132, // $3167 + 132, // $3168 + 132, // $3169 + 132, // $316A + 132, // $316B + 132, // $316C + 132, // $316D + 132, // $316E + 132, // $316F + 132, // $3170 + 132, // $3171 + 132, // $3172 + 132, // $3173 + 132, // $3174 + 132, // $3175 + 132, // $3176 + 132, // $3177 + 132, // $3178 + 132, // $3179 + 132, // $317A + 132, // $317B + 132, // $317C + 132, // $317D + 132, // $317E + 132, // $317F + 132, // $3180 + 132, // $3181 + 132, // $3182 + 132, // $3183 + 132, // $3184 + 132, // $3185 + 132, // $3186 + 132, // $3187 + 132, // $3188 + 132, // $3189 + 132, // $318A + 132, // $318B + 132, // $318C + 132, // $318D + 132, // $318E + 29, // $318F + 21, // $3190 + 21, // $3191 + 138, // $3192 + 138, // $3193 + 138, // $3194 + 138, // $3195 + 21, // $3196 + 21, // $3197 + 21, // $3198 + 21, // $3199 + 21, // $319A + 21, // $319B + 21, // $319C + 21, // $319D + 21, // $319E + 21, // $319F + 132, // $31A0 + 132, // $31A1 + 132, // $31A2 + 132, // $31A3 + 132, // $31A4 + 132, // $31A5 + 132, // $31A6 + 132, // $31A7 + 132, // $31A8 + 132, // $31A9 + 132, // $31AA + 132, // $31AB + 132, // $31AC + 132, // $31AD + 132, // $31AE + 132, // $31AF + 132, // $31B0 + 132, // $31B1 + 132, // $31B2 + 132, // $31B3 + 132, // $31B4 + 132, // $31B5 + 132, // $31B6 + 132, // $31B7 + 132, // $31B8 + 132, // $31B9 + 132, // $31BA + 29, // $31BB + 29, // $31BC + 29, // $31BD + 29, // $31BE + 29, // $31BF + 21, // $31C0 + 21, // $31C1 + 21, // $31C2 + 21, // $31C3 + 21, // $31C4 + 21, // $31C5 + 21, // $31C6 + 21, // $31C7 + 21, // $31C8 + 21, // $31C9 + 21, // $31CA + 21, // $31CB + 21, // $31CC + 21, // $31CD + 21, // $31CE + 21, // $31CF + 21, // $31D0 + 21, // $31D1 + 21, // $31D2 + 21, // $31D3 + 21, // $31D4 + 21, // $31D5 + 21, // $31D6 + 21, // $31D7 + 21, // $31D8 + 21, // $31D9 + 21, // $31DA + 21, // $31DB + 21, // $31DC + 21, // $31DD + 21, // $31DE + 21, // $31DF + 21, // $31E0 + 21, // $31E1 + 21, // $31E2 + 21, // $31E3 + 29, // $31E4 + 29, // $31E5 + 29, // $31E6 + 29, // $31E7 + 29, // $31E8 + 29, // $31E9 + 29, // $31EA + 29, // $31EB + 29, // $31EC + 29, // $31ED + 29, // $31EE + 29, // $31EF + 132, // $31F0 + 132, // $31F1 + 132, // $31F2 + 132, // $31F3 + 132, // $31F4 + 132, // $31F5 + 132, // $31F6 + 132, // $31F7 + 132, // $31F8 + 132, // $31F9 + 132, // $31FA + 132, // $31FB + 132, // $31FC + 132, // $31FD + 132, // $31FE + 132, // $31FF + 21, // $3200 + 21, // $3201 + 21, // $3202 + 21, // $3203 + 21, // $3204 + 21, // $3205 + 21, // $3206 + 21, // $3207 + 21, // $3208 + 21, // $3209 + 21, // $320A + 21, // $320B + 21, // $320C + 21, // $320D + 21, // $320E + 21, // $320F + 21, // $3210 + 21, // $3211 + 21, // $3212 + 21, // $3213 + 21, // $3214 + 21, // $3215 + 21, // $3216 + 21, // $3217 + 21, // $3218 + 21, // $3219 + 21, // $321A + 21, // $321B + 21, // $321C + 21, // $321D + 21, // $321E + 29, // $321F + 138, // $3220 + 138, // $3221 + 138, // $3222 + 138, // $3223 + 138, // $3224 + 138, // $3225 + 138, // $3226 + 138, // $3227 + 138, // $3228 + 138, // $3229 + 21, // $322A + 21, // $322B + 21, // $322C + 21, // $322D + 21, // $322E + 21, // $322F + 21, // $3230 + 21, // $3231 + 21, // $3232 + 21, // $3233 + 21, // $3234 + 21, // $3235 + 21, // $3236 + 21, // $3237 + 21, // $3238 + 21, // $3239 + 21, // $323A + 21, // $323B + 21, // $323C + 21, // $323D + 21, // $323E + 21, // $323F + 21, // $3240 + 21, // $3241 + 21, // $3242 + 21, // $3243 + 21, // $3244 + 21, // $3245 + 21, // $3246 + 21, // $3247 + 138, // $3248 + 138, // $3249 + 138, // $324A + 138, // $324B + 138, // $324C + 138, // $324D + 138, // $324E + 138, // $324F + 21, // $3250 + 138, // $3251 + 138, // $3252 + 138, // $3253 + 138, // $3254 + 138, // $3255 + 138, // $3256 + 138, // $3257 + 138, // $3258 + 138, // $3259 + 138, // $325A + 138, // $325B + 138, // $325C + 138, // $325D + 138, // $325E + 138, // $325F + 21, // $3260 + 21, // $3261 + 21, // $3262 + 21, // $3263 + 21, // $3264 + 21, // $3265 + 21, // $3266 + 21, // $3267 + 21, // $3268 + 21, // $3269 + 21, // $326A + 21, // $326B + 21, // $326C + 21, // $326D + 21, // $326E + 21, // $326F + 21, // $3270 + 21, // $3271 + 21, // $3272 + 21, // $3273 + 21, // $3274 + 21, // $3275 + 21, // $3276 + 21, // $3277 + 21, // $3278 + 21, // $3279 + 21, // $327A + 21, // $327B + 21, // $327C + 21, // $327D + 21, // $327E + 21, // $327F + 138, // $3280 + 138, // $3281 + 138, // $3282 + 138, // $3283 + 138, // $3284 + 138, // $3285 + 138, // $3286 + 138, // $3287 + 138, // $3288 + 138, // $3289 + 21, // $328A + 21, // $328B + 21, // $328C + 21, // $328D + 21, // $328E + 21, // $328F + 21, // $3290 + 21, // $3291 + 21, // $3292 + 21, // $3293 + 21, // $3294 + 21, // $3295 + 21, // $3296 + 21, // $3297 + 21, // $3298 + 21, // $3299 + 21, // $329A + 21, // $329B + 21, // $329C + 21, // $329D + 21, // $329E + 21, // $329F + 21, // $32A0 + 21, // $32A1 + 21, // $32A2 + 21, // $32A3 + 21, // $32A4 + 21, // $32A5 + 21, // $32A6 + 21, // $32A7 + 21, // $32A8 + 21, // $32A9 + 21, // $32AA + 21, // $32AB + 21, // $32AC + 21, // $32AD + 21, // $32AE + 21, // $32AF + 21, // $32B0 + 138, // $32B1 + 138, // $32B2 + 138, // $32B3 + 138, // $32B4 + 138, // $32B5 + 138, // $32B6 + 138, // $32B7 + 138, // $32B8 + 138, // $32B9 + 138, // $32BA + 138, // $32BB + 138, // $32BC + 138, // $32BD + 138, // $32BE + 138, // $32BF + 21, // $32C0 + 21, // $32C1 + 21, // $32C2 + 21, // $32C3 + 21, // $32C4 + 21, // $32C5 + 21, // $32C6 + 21, // $32C7 + 21, // $32C8 + 21, // $32C9 + 21, // $32CA + 21, // $32CB + 21, // $32CC + 21, // $32CD + 21, // $32CE + 21, // $32CF + 21, // $32D0 + 21, // $32D1 + 21, // $32D2 + 21, // $32D3 + 21, // $32D4 + 21, // $32D5 + 21, // $32D6 + 21, // $32D7 + 21, // $32D8 + 21, // $32D9 + 21, // $32DA + 21, // $32DB + 21, // $32DC + 21, // $32DD + 21, // $32DE + 21, // $32DF + 21, // $32E0 + 21, // $32E1 + 21, // $32E2 + 21, // $32E3 + 21, // $32E4 + 21, // $32E5 + 21, // $32E6 + 21, // $32E7 + 21, // $32E8 + 21, // $32E9 + 21, // $32EA + 21, // $32EB + 21, // $32EC + 21, // $32ED + 21, // $32EE + 21, // $32EF + 21, // $32F0 + 21, // $32F1 + 21, // $32F2 + 21, // $32F3 + 21, // $32F4 + 21, // $32F5 + 21, // $32F6 + 21, // $32F7 + 21, // $32F8 + 21, // $32F9 + 21, // $32FA + 21, // $32FB + 21, // $32FC + 21, // $32FD + 21, // $32FE + 29, // $32FF + 21, // $3300 + 21, // $3301 + 21, // $3302 + 21, // $3303 + 21, // $3304 + 21, // $3305 + 21, // $3306 + 21, // $3307 + 21, // $3308 + 21, // $3309 + 21, // $330A + 21, // $330B + 21, // $330C + 21, // $330D + 21, // $330E + 21, // $330F + 21, // $3310 + 21, // $3311 + 21, // $3312 + 21, // $3313 + 21, // $3314 + 21, // $3315 + 21, // $3316 + 21, // $3317 + 21, // $3318 + 21, // $3319 + 21, // $331A + 21, // $331B + 21, // $331C + 21, // $331D + 21, // $331E + 21, // $331F + 21, // $3320 + 21, // $3321 + 21, // $3322 + 21, // $3323 + 21, // $3324 + 21, // $3325 + 21, // $3326 + 21, // $3327 + 21, // $3328 + 21, // $3329 + 21, // $332A + 21, // $332B + 21, // $332C + 21, // $332D + 21, // $332E + 21, // $332F + 21, // $3330 + 21, // $3331 + 21, // $3332 + 21, // $3333 + 21, // $3334 + 21, // $3335 + 21, // $3336 + 21, // $3337 + 21, // $3338 + 21, // $3339 + 21, // $333A + 21, // $333B + 21, // $333C + 21, // $333D + 21, // $333E + 21, // $333F + 21, // $3340 + 21, // $3341 + 21, // $3342 + 21, // $3343 + 21, // $3344 + 21, // $3345 + 21, // $3346 + 21, // $3347 + 21, // $3348 + 21, // $3349 + 21, // $334A + 21, // $334B + 21, // $334C + 21, // $334D + 21, // $334E + 21, // $334F + 21, // $3350 + 21, // $3351 + 21, // $3352 + 21, // $3353 + 21, // $3354 + 21, // $3355 + 21, // $3356 + 21, // $3357 + 21, // $3358 + 21, // $3359 + 21, // $335A + 21, // $335B + 21, // $335C + 21, // $335D + 21, // $335E + 21, // $335F + 21, // $3360 + 21, // $3361 + 21, // $3362 + 21, // $3363 + 21, // $3364 + 21, // $3365 + 21, // $3366 + 21, // $3367 + 21, // $3368 + 21, // $3369 + 21, // $336A + 21, // $336B + 21, // $336C + 21, // $336D + 21, // $336E + 21, // $336F + 21, // $3370 + 21, // $3371 + 21, // $3372 + 21, // $3373 + 21, // $3374 + 21, // $3375 + 21, // $3376 + 21, // $3377 + 21, // $3378 + 21, // $3379 + 21, // $337A + 21, // $337B + 21, // $337C + 21, // $337D + 21, // $337E + 21, // $337F + 21, // $3380 + 21, // $3381 + 21, // $3382 + 21, // $3383 + 21, // $3384 + 21, // $3385 + 21, // $3386 + 21, // $3387 + 21, // $3388 + 21, // $3389 + 21, // $338A + 21, // $338B + 21, // $338C + 21, // $338D + 21, // $338E + 21, // $338F + 21, // $3390 + 21, // $3391 + 21, // $3392 + 21, // $3393 + 21, // $3394 + 21, // $3395 + 21, // $3396 + 21, // $3397 + 21, // $3398 + 21, // $3399 + 21, // $339A + 21, // $339B + 21, // $339C + 21, // $339D + 21, // $339E + 21, // $339F + 21, // $33A0 + 21, // $33A1 + 21, // $33A2 + 21, // $33A3 + 21, // $33A4 + 21, // $33A5 + 21, // $33A6 + 21, // $33A7 + 21, // $33A8 + 21, // $33A9 + 21, // $33AA + 21, // $33AB + 21, // $33AC + 21, // $33AD + 21, // $33AE + 21, // $33AF + 21, // $33B0 + 21, // $33B1 + 21, // $33B2 + 21, // $33B3 + 21, // $33B4 + 21, // $33B5 + 21, // $33B6 + 21, // $33B7 + 21, // $33B8 + 21, // $33B9 + 21, // $33BA + 21, // $33BB + 21, // $33BC + 21, // $33BD + 21, // $33BE + 21, // $33BF + 21, // $33C0 + 21, // $33C1 + 21, // $33C2 + 21, // $33C3 + 21, // $33C4 + 21, // $33C5 + 21, // $33C6 + 21, // $33C7 + 21, // $33C8 + 21, // $33C9 + 21, // $33CA + 21, // $33CB + 21, // $33CC + 21, // $33CD + 21, // $33CE + 21, // $33CF + 21, // $33D0 + 21, // $33D1 + 21, // $33D2 + 21, // $33D3 + 21, // $33D4 + 21, // $33D5 + 21, // $33D6 + 21, // $33D7 + 21, // $33D8 + 21, // $33D9 + 21, // $33DA + 21, // $33DB + 21, // $33DC + 21, // $33DD + 21, // $33DE + 21, // $33DF + 21, // $33E0 + 21, // $33E1 + 21, // $33E2 + 21, // $33E3 + 21, // $33E4 + 21, // $33E5 + 21, // $33E6 + 21, // $33E7 + 21, // $33E8 + 21, // $33E9 + 21, // $33EA + 21, // $33EB + 21, // $33EC + 21, // $33ED + 21, // $33EE + 21, // $33EF + 21, // $33F0 + 21, // $33F1 + 21, // $33F2 + 21, // $33F3 + 21, // $33F4 + 21, // $33F5 + 21, // $33F6 + 21, // $33F7 + 21, // $33F8 + 21, // $33F9 + 21, // $33FA + 21, // $33FB + 21, // $33FC + 21, // $33FD + 21, // $33FE + 21, // $33FF + 132, // $3400 + 132, // $3401 + 132, // $3402 + 132, // $3403 + 132, // $3404 + 132, // $3405 + 132, // $3406 + 132, // $3407 + 132, // $3408 + 132, // $3409 + 132, // $340A + 132, // $340B + 132, // $340C + 132, // $340D + 132, // $340E + 132, // $340F + 132, // $3410 + 132, // $3411 + 132, // $3412 + 132, // $3413 + 132, // $3414 + 132, // $3415 + 132, // $3416 + 132, // $3417 + 132, // $3418 + 132, // $3419 + 132, // $341A + 132, // $341B + 132, // $341C + 132, // $341D + 132, // $341E + 132, // $341F + 132, // $3420 + 132, // $3421 + 132, // $3422 + 132, // $3423 + 132, // $3424 + 132, // $3425 + 132, // $3426 + 132, // $3427 + 132, // $3428 + 132, // $3429 + 132, // $342A + 132, // $342B + 132, // $342C + 132, // $342D + 132, // $342E + 132, // $342F + 132, // $3430 + 132, // $3431 + 132, // $3432 + 132, // $3433 + 132, // $3434 + 132, // $3435 + 132, // $3436 + 132, // $3437 + 132, // $3438 + 132, // $3439 + 132, // $343A + 132, // $343B + 132, // $343C + 132, // $343D + 132, // $343E + 132, // $343F + 132, // $3440 + 132, // $3441 + 132, // $3442 + 132, // $3443 + 132, // $3444 + 132, // $3445 + 132, // $3446 + 132, // $3447 + 132, // $3448 + 132, // $3449 + 132, // $344A + 132, // $344B + 132, // $344C + 132, // $344D + 132, // $344E + 132, // $344F + 132, // $3450 + 132, // $3451 + 132, // $3452 + 132, // $3453 + 132, // $3454 + 132, // $3455 + 132, // $3456 + 132, // $3457 + 132, // $3458 + 132, // $3459 + 132, // $345A + 132, // $345B + 132, // $345C + 132, // $345D + 132, // $345E + 132, // $345F + 132, // $3460 + 132, // $3461 + 132, // $3462 + 132, // $3463 + 132, // $3464 + 132, // $3465 + 132, // $3466 + 132, // $3467 + 132, // $3468 + 132, // $3469 + 132, // $346A + 132, // $346B + 132, // $346C + 132, // $346D + 132, // $346E + 132, // $346F + 132, // $3470 + 132, // $3471 + 132, // $3472 + 132, // $3473 + 132, // $3474 + 132, // $3475 + 132, // $3476 + 132, // $3477 + 132, // $3478 + 132, // $3479 + 132, // $347A + 132, // $347B + 132, // $347C + 132, // $347D + 132, // $347E + 132, // $347F + 132, // $3480 + 132, // $3481 + 132, // $3482 + 132, // $3483 + 132, // $3484 + 132, // $3485 + 132, // $3486 + 132, // $3487 + 132, // $3488 + 132, // $3489 + 132, // $348A + 132, // $348B + 132, // $348C + 132, // $348D + 132, // $348E + 132, // $348F + 132, // $3490 + 132, // $3491 + 132, // $3492 + 132, // $3493 + 132, // $3494 + 132, // $3495 + 132, // $3496 + 132, // $3497 + 132, // $3498 + 132, // $3499 + 132, // $349A + 132, // $349B + 132, // $349C + 132, // $349D + 132, // $349E + 132, // $349F + 132, // $34A0 + 132, // $34A1 + 132, // $34A2 + 132, // $34A3 + 132, // $34A4 + 132, // $34A5 + 132, // $34A6 + 132, // $34A7 + 132, // $34A8 + 132, // $34A9 + 132, // $34AA + 132, // $34AB + 132, // $34AC + 132, // $34AD + 132, // $34AE + 132, // $34AF + 132, // $34B0 + 132, // $34B1 + 132, // $34B2 + 132, // $34B3 + 132, // $34B4 + 132, // $34B5 + 132, // $34B6 + 132, // $34B7 + 132, // $34B8 + 132, // $34B9 + 132, // $34BA + 132, // $34BB + 132, // $34BC + 132, // $34BD + 132, // $34BE + 132, // $34BF + 132, // $34C0 + 132, // $34C1 + 132, // $34C2 + 132, // $34C3 + 132, // $34C4 + 132, // $34C5 + 132, // $34C6 + 132, // $34C7 + 132, // $34C8 + 132, // $34C9 + 132, // $34CA + 132, // $34CB + 132, // $34CC + 132, // $34CD + 132, // $34CE + 132, // $34CF + 132, // $34D0 + 132, // $34D1 + 132, // $34D2 + 132, // $34D3 + 132, // $34D4 + 132, // $34D5 + 132, // $34D6 + 132, // $34D7 + 132, // $34D8 + 132, // $34D9 + 132, // $34DA + 132, // $34DB + 132, // $34DC + 132, // $34DD + 132, // $34DE + 132, // $34DF + 132, // $34E0 + 132, // $34E1 + 132, // $34E2 + 132, // $34E3 + 132, // $34E4 + 132, // $34E5 + 132, // $34E6 + 132, // $34E7 + 132, // $34E8 + 132, // $34E9 + 132, // $34EA + 132, // $34EB + 132, // $34EC + 132, // $34ED + 132, // $34EE + 132, // $34EF + 132, // $34F0 + 132, // $34F1 + 132, // $34F2 + 132, // $34F3 + 132, // $34F4 + 132, // $34F5 + 132, // $34F6 + 132, // $34F7 + 132, // $34F8 + 132, // $34F9 + 132, // $34FA + 132, // $34FB + 132, // $34FC + 132, // $34FD + 132, // $34FE + 132, // $34FF + 132, // $3500 + 132, // $3501 + 132, // $3502 + 132, // $3503 + 132, // $3504 + 132, // $3505 + 132, // $3506 + 132, // $3507 + 132, // $3508 + 132, // $3509 + 132, // $350A + 132, // $350B + 132, // $350C + 132, // $350D + 132, // $350E + 132, // $350F + 132, // $3510 + 132, // $3511 + 132, // $3512 + 132, // $3513 + 132, // $3514 + 132, // $3515 + 132, // $3516 + 132, // $3517 + 132, // $3518 + 132, // $3519 + 132, // $351A + 132, // $351B + 132, // $351C + 132, // $351D + 132, // $351E + 132, // $351F + 132, // $3520 + 132, // $3521 + 132, // $3522 + 132, // $3523 + 132, // $3524 + 132, // $3525 + 132, // $3526 + 132, // $3527 + 132, // $3528 + 132, // $3529 + 132, // $352A + 132, // $352B + 132, // $352C + 132, // $352D + 132, // $352E + 132, // $352F + 132, // $3530 + 132, // $3531 + 132, // $3532 + 132, // $3533 + 132, // $3534 + 132, // $3535 + 132, // $3536 + 132, // $3537 + 132, // $3538 + 132, // $3539 + 132, // $353A + 132, // $353B + 132, // $353C + 132, // $353D + 132, // $353E + 132, // $353F + 132, // $3540 + 132, // $3541 + 132, // $3542 + 132, // $3543 + 132, // $3544 + 132, // $3545 + 132, // $3546 + 132, // $3547 + 132, // $3548 + 132, // $3549 + 132, // $354A + 132, // $354B + 132, // $354C + 132, // $354D + 132, // $354E + 132, // $354F + 132, // $3550 + 132, // $3551 + 132, // $3552 + 132, // $3553 + 132, // $3554 + 132, // $3555 + 132, // $3556 + 132, // $3557 + 132, // $3558 + 132, // $3559 + 132, // $355A + 132, // $355B + 132, // $355C + 132, // $355D + 132, // $355E + 132, // $355F + 132, // $3560 + 132, // $3561 + 132, // $3562 + 132, // $3563 + 132, // $3564 + 132, // $3565 + 132, // $3566 + 132, // $3567 + 132, // $3568 + 132, // $3569 + 132, // $356A + 132, // $356B + 132, // $356C + 132, // $356D + 132, // $356E + 132, // $356F + 132, // $3570 + 132, // $3571 + 132, // $3572 + 132, // $3573 + 132, // $3574 + 132, // $3575 + 132, // $3576 + 132, // $3577 + 132, // $3578 + 132, // $3579 + 132, // $357A + 132, // $357B + 132, // $357C + 132, // $357D + 132, // $357E + 132, // $357F + 132, // $3580 + 132, // $3581 + 132, // $3582 + 132, // $3583 + 132, // $3584 + 132, // $3585 + 132, // $3586 + 132, // $3587 + 132, // $3588 + 132, // $3589 + 132, // $358A + 132, // $358B + 132, // $358C + 132, // $358D + 132, // $358E + 132, // $358F + 132, // $3590 + 132, // $3591 + 132, // $3592 + 132, // $3593 + 132, // $3594 + 132, // $3595 + 132, // $3596 + 132, // $3597 + 132, // $3598 + 132, // $3599 + 132, // $359A + 132, // $359B + 132, // $359C + 132, // $359D + 132, // $359E + 132, // $359F + 132, // $35A0 + 132, // $35A1 + 132, // $35A2 + 132, // $35A3 + 132, // $35A4 + 132, // $35A5 + 132, // $35A6 + 132, // $35A7 + 132, // $35A8 + 132, // $35A9 + 132, // $35AA + 132, // $35AB + 132, // $35AC + 132, // $35AD + 132, // $35AE + 132, // $35AF + 132, // $35B0 + 132, // $35B1 + 132, // $35B2 + 132, // $35B3 + 132, // $35B4 + 132, // $35B5 + 132, // $35B6 + 132, // $35B7 + 132, // $35B8 + 132, // $35B9 + 132, // $35BA + 132, // $35BB + 132, // $35BC + 132, // $35BD + 132, // $35BE + 132, // $35BF + 132, // $35C0 + 132, // $35C1 + 132, // $35C2 + 132, // $35C3 + 132, // $35C4 + 132, // $35C5 + 132, // $35C6 + 132, // $35C7 + 132, // $35C8 + 132, // $35C9 + 132, // $35CA + 132, // $35CB + 132, // $35CC + 132, // $35CD + 132, // $35CE + 132, // $35CF + 132, // $35D0 + 132, // $35D1 + 132, // $35D2 + 132, // $35D3 + 132, // $35D4 + 132, // $35D5 + 132, // $35D6 + 132, // $35D7 + 132, // $35D8 + 132, // $35D9 + 132, // $35DA + 132, // $35DB + 132, // $35DC + 132, // $35DD + 132, // $35DE + 132, // $35DF + 132, // $35E0 + 132, // $35E1 + 132, // $35E2 + 132, // $35E3 + 132, // $35E4 + 132, // $35E5 + 132, // $35E6 + 132, // $35E7 + 132, // $35E8 + 132, // $35E9 + 132, // $35EA + 132, // $35EB + 132, // $35EC + 132, // $35ED + 132, // $35EE + 132, // $35EF + 132, // $35F0 + 132, // $35F1 + 132, // $35F2 + 132, // $35F3 + 132, // $35F4 + 132, // $35F5 + 132, // $35F6 + 132, // $35F7 + 132, // $35F8 + 132, // $35F9 + 132, // $35FA + 132, // $35FB + 132, // $35FC + 132, // $35FD + 132, // $35FE + 132, // $35FF + 132, // $3600 + 132, // $3601 + 132, // $3602 + 132, // $3603 + 132, // $3604 + 132, // $3605 + 132, // $3606 + 132, // $3607 + 132, // $3608 + 132, // $3609 + 132, // $360A + 132, // $360B + 132, // $360C + 132, // $360D + 132, // $360E + 132, // $360F + 132, // $3610 + 132, // $3611 + 132, // $3612 + 132, // $3613 + 132, // $3614 + 132, // $3615 + 132, // $3616 + 132, // $3617 + 132, // $3618 + 132, // $3619 + 132, // $361A + 132, // $361B + 132, // $361C + 132, // $361D + 132, // $361E + 132, // $361F + 132, // $3620 + 132, // $3621 + 132, // $3622 + 132, // $3623 + 132, // $3624 + 132, // $3625 + 132, // $3626 + 132, // $3627 + 132, // $3628 + 132, // $3629 + 132, // $362A + 132, // $362B + 132, // $362C + 132, // $362D + 132, // $362E + 132, // $362F + 132, // $3630 + 132, // $3631 + 132, // $3632 + 132, // $3633 + 132, // $3634 + 132, // $3635 + 132, // $3636 + 132, // $3637 + 132, // $3638 + 132, // $3639 + 132, // $363A + 132, // $363B + 132, // $363C + 132, // $363D + 132, // $363E + 132, // $363F + 132, // $3640 + 132, // $3641 + 132, // $3642 + 132, // $3643 + 132, // $3644 + 132, // $3645 + 132, // $3646 + 132, // $3647 + 132, // $3648 + 132, // $3649 + 132, // $364A + 132, // $364B + 132, // $364C + 132, // $364D + 132, // $364E + 132, // $364F + 132, // $3650 + 132, // $3651 + 132, // $3652 + 132, // $3653 + 132, // $3654 + 132, // $3655 + 132, // $3656 + 132, // $3657 + 132, // $3658 + 132, // $3659 + 132, // $365A + 132, // $365B + 132, // $365C + 132, // $365D + 132, // $365E + 132, // $365F + 132, // $3660 + 132, // $3661 + 132, // $3662 + 132, // $3663 + 132, // $3664 + 132, // $3665 + 132, // $3666 + 132, // $3667 + 132, // $3668 + 132, // $3669 + 132, // $366A + 132, // $366B + 132, // $366C + 132, // $366D + 132, // $366E + 132, // $366F + 132, // $3670 + 132, // $3671 + 132, // $3672 + 132, // $3673 + 132, // $3674 + 132, // $3675 + 132, // $3676 + 132, // $3677 + 132, // $3678 + 132, // $3679 + 132, // $367A + 132, // $367B + 132, // $367C + 132, // $367D + 132, // $367E + 132, // $367F + 132, // $3680 + 132, // $3681 + 132, // $3682 + 132, // $3683 + 132, // $3684 + 132, // $3685 + 132, // $3686 + 132, // $3687 + 132, // $3688 + 132, // $3689 + 132, // $368A + 132, // $368B + 132, // $368C + 132, // $368D + 132, // $368E + 132, // $368F + 132, // $3690 + 132, // $3691 + 132, // $3692 + 132, // $3693 + 132, // $3694 + 132, // $3695 + 132, // $3696 + 132, // $3697 + 132, // $3698 + 132, // $3699 + 132, // $369A + 132, // $369B + 132, // $369C + 132, // $369D + 132, // $369E + 132, // $369F + 132, // $36A0 + 132, // $36A1 + 132, // $36A2 + 132, // $36A3 + 132, // $36A4 + 132, // $36A5 + 132, // $36A6 + 132, // $36A7 + 132, // $36A8 + 132, // $36A9 + 132, // $36AA + 132, // $36AB + 132, // $36AC + 132, // $36AD + 132, // $36AE + 132, // $36AF + 132, // $36B0 + 132, // $36B1 + 132, // $36B2 + 132, // $36B3 + 132, // $36B4 + 132, // $36B5 + 132, // $36B6 + 132, // $36B7 + 132, // $36B8 + 132, // $36B9 + 132, // $36BA + 132, // $36BB + 132, // $36BC + 132, // $36BD + 132, // $36BE + 132, // $36BF + 132, // $36C0 + 132, // $36C1 + 132, // $36C2 + 132, // $36C3 + 132, // $36C4 + 132, // $36C5 + 132, // $36C6 + 132, // $36C7 + 132, // $36C8 + 132, // $36C9 + 132, // $36CA + 132, // $36CB + 132, // $36CC + 132, // $36CD + 132, // $36CE + 132, // $36CF + 132, // $36D0 + 132, // $36D1 + 132, // $36D2 + 132, // $36D3 + 132, // $36D4 + 132, // $36D5 + 132, // $36D6 + 132, // $36D7 + 132, // $36D8 + 132, // $36D9 + 132, // $36DA + 132, // $36DB + 132, // $36DC + 132, // $36DD + 132, // $36DE + 132, // $36DF + 132, // $36E0 + 132, // $36E1 + 132, // $36E2 + 132, // $36E3 + 132, // $36E4 + 132, // $36E5 + 132, // $36E6 + 132, // $36E7 + 132, // $36E8 + 132, // $36E9 + 132, // $36EA + 132, // $36EB + 132, // $36EC + 132, // $36ED + 132, // $36EE + 132, // $36EF + 132, // $36F0 + 132, // $36F1 + 132, // $36F2 + 132, // $36F3 + 132, // $36F4 + 132, // $36F5 + 132, // $36F6 + 132, // $36F7 + 132, // $36F8 + 132, // $36F9 + 132, // $36FA + 132, // $36FB + 132, // $36FC + 132, // $36FD + 132, // $36FE + 132, // $36FF + 132, // $3700 + 132, // $3701 + 132, // $3702 + 132, // $3703 + 132, // $3704 + 132, // $3705 + 132, // $3706 + 132, // $3707 + 132, // $3708 + 132, // $3709 + 132, // $370A + 132, // $370B + 132, // $370C + 132, // $370D + 132, // $370E + 132, // $370F + 132, // $3710 + 132, // $3711 + 132, // $3712 + 132, // $3713 + 132, // $3714 + 132, // $3715 + 132, // $3716 + 132, // $3717 + 132, // $3718 + 132, // $3719 + 132, // $371A + 132, // $371B + 132, // $371C + 132, // $371D + 132, // $371E + 132, // $371F + 132, // $3720 + 132, // $3721 + 132, // $3722 + 132, // $3723 + 132, // $3724 + 132, // $3725 + 132, // $3726 + 132, // $3727 + 132, // $3728 + 132, // $3729 + 132, // $372A + 132, // $372B + 132, // $372C + 132, // $372D + 132, // $372E + 132, // $372F + 132, // $3730 + 132, // $3731 + 132, // $3732 + 132, // $3733 + 132, // $3734 + 132, // $3735 + 132, // $3736 + 132, // $3737 + 132, // $3738 + 132, // $3739 + 132, // $373A + 132, // $373B + 132, // $373C + 132, // $373D + 132, // $373E + 132, // $373F + 132, // $3740 + 132, // $3741 + 132, // $3742 + 132, // $3743 + 132, // $3744 + 132, // $3745 + 132, // $3746 + 132, // $3747 + 132, // $3748 + 132, // $3749 + 132, // $374A + 132, // $374B + 132, // $374C + 132, // $374D + 132, // $374E + 132, // $374F + 132, // $3750 + 132, // $3751 + 132, // $3752 + 132, // $3753 + 132, // $3754 + 132, // $3755 + 132, // $3756 + 132, // $3757 + 132, // $3758 + 132, // $3759 + 132, // $375A + 132, // $375B + 132, // $375C + 132, // $375D + 132, // $375E + 132, // $375F + 132, // $3760 + 132, // $3761 + 132, // $3762 + 132, // $3763 + 132, // $3764 + 132, // $3765 + 132, // $3766 + 132, // $3767 + 132, // $3768 + 132, // $3769 + 132, // $376A + 132, // $376B + 132, // $376C + 132, // $376D + 132, // $376E + 132, // $376F + 132, // $3770 + 132, // $3771 + 132, // $3772 + 132, // $3773 + 132, // $3774 + 132, // $3775 + 132, // $3776 + 132, // $3777 + 132, // $3778 + 132, // $3779 + 132, // $377A + 132, // $377B + 132, // $377C + 132, // $377D + 132, // $377E + 132, // $377F + 132, // $3780 + 132, // $3781 + 132, // $3782 + 132, // $3783 + 132, // $3784 + 132, // $3785 + 132, // $3786 + 132, // $3787 + 132, // $3788 + 132, // $3789 + 132, // $378A + 132, // $378B + 132, // $378C + 132, // $378D + 132, // $378E + 132, // $378F + 132, // $3790 + 132, // $3791 + 132, // $3792 + 132, // $3793 + 132, // $3794 + 132, // $3795 + 132, // $3796 + 132, // $3797 + 132, // $3798 + 132, // $3799 + 132, // $379A + 132, // $379B + 132, // $379C + 132, // $379D + 132, // $379E + 132, // $379F + 132, // $37A0 + 132, // $37A1 + 132, // $37A2 + 132, // $37A3 + 132, // $37A4 + 132, // $37A5 + 132, // $37A6 + 132, // $37A7 + 132, // $37A8 + 132, // $37A9 + 132, // $37AA + 132, // $37AB + 132, // $37AC + 132, // $37AD + 132, // $37AE + 132, // $37AF + 132, // $37B0 + 132, // $37B1 + 132, // $37B2 + 132, // $37B3 + 132, // $37B4 + 132, // $37B5 + 132, // $37B6 + 132, // $37B7 + 132, // $37B8 + 132, // $37B9 + 132, // $37BA + 132, // $37BB + 132, // $37BC + 132, // $37BD + 132, // $37BE + 132, // $37BF + 132, // $37C0 + 132, // $37C1 + 132, // $37C2 + 132, // $37C3 + 132, // $37C4 + 132, // $37C5 + 132, // $37C6 + 132, // $37C7 + 132, // $37C8 + 132, // $37C9 + 132, // $37CA + 132, // $37CB + 132, // $37CC + 132, // $37CD + 132, // $37CE + 132, // $37CF + 132, // $37D0 + 132, // $37D1 + 132, // $37D2 + 132, // $37D3 + 132, // $37D4 + 132, // $37D5 + 132, // $37D6 + 132, // $37D7 + 132, // $37D8 + 132, // $37D9 + 132, // $37DA + 132, // $37DB + 132, // $37DC + 132, // $37DD + 132, // $37DE + 132, // $37DF + 132, // $37E0 + 132, // $37E1 + 132, // $37E2 + 132, // $37E3 + 132, // $37E4 + 132, // $37E5 + 132, // $37E6 + 132, // $37E7 + 132, // $37E8 + 132, // $37E9 + 132, // $37EA + 132, // $37EB + 132, // $37EC + 132, // $37ED + 132, // $37EE + 132, // $37EF + 132, // $37F0 + 132, // $37F1 + 132, // $37F2 + 132, // $37F3 + 132, // $37F4 + 132, // $37F5 + 132, // $37F6 + 132, // $37F7 + 132, // $37F8 + 132, // $37F9 + 132, // $37FA + 132, // $37FB + 132, // $37FC + 132, // $37FD + 132, // $37FE + 132, // $37FF + 132, // $3800 + 132, // $3801 + 132, // $3802 + 132, // $3803 + 132, // $3804 + 132, // $3805 + 132, // $3806 + 132, // $3807 + 132, // $3808 + 132, // $3809 + 132, // $380A + 132, // $380B + 132, // $380C + 132, // $380D + 132, // $380E + 132, // $380F + 132, // $3810 + 132, // $3811 + 132, // $3812 + 132, // $3813 + 132, // $3814 + 132, // $3815 + 132, // $3816 + 132, // $3817 + 132, // $3818 + 132, // $3819 + 132, // $381A + 132, // $381B + 132, // $381C + 132, // $381D + 132, // $381E + 132, // $381F + 132, // $3820 + 132, // $3821 + 132, // $3822 + 132, // $3823 + 132, // $3824 + 132, // $3825 + 132, // $3826 + 132, // $3827 + 132, // $3828 + 132, // $3829 + 132, // $382A + 132, // $382B + 132, // $382C + 132, // $382D + 132, // $382E + 132, // $382F + 132, // $3830 + 132, // $3831 + 132, // $3832 + 132, // $3833 + 132, // $3834 + 132, // $3835 + 132, // $3836 + 132, // $3837 + 132, // $3838 + 132, // $3839 + 132, // $383A + 132, // $383B + 132, // $383C + 132, // $383D + 132, // $383E + 132, // $383F + 132, // $3840 + 132, // $3841 + 132, // $3842 + 132, // $3843 + 132, // $3844 + 132, // $3845 + 132, // $3846 + 132, // $3847 + 132, // $3848 + 132, // $3849 + 132, // $384A + 132, // $384B + 132, // $384C + 132, // $384D + 132, // $384E + 132, // $384F + 132, // $3850 + 132, // $3851 + 132, // $3852 + 132, // $3853 + 132, // $3854 + 132, // $3855 + 132, // $3856 + 132, // $3857 + 132, // $3858 + 132, // $3859 + 132, // $385A + 132, // $385B + 132, // $385C + 132, // $385D + 132, // $385E + 132, // $385F + 132, // $3860 + 132, // $3861 + 132, // $3862 + 132, // $3863 + 132, // $3864 + 132, // $3865 + 132, // $3866 + 132, // $3867 + 132, // $3868 + 132, // $3869 + 132, // $386A + 132, // $386B + 132, // $386C + 132, // $386D + 132, // $386E + 132, // $386F + 132, // $3870 + 132, // $3871 + 132, // $3872 + 132, // $3873 + 132, // $3874 + 132, // $3875 + 132, // $3876 + 132, // $3877 + 132, // $3878 + 132, // $3879 + 132, // $387A + 132, // $387B + 132, // $387C + 132, // $387D + 132, // $387E + 132, // $387F + 132, // $3880 + 132, // $3881 + 132, // $3882 + 132, // $3883 + 132, // $3884 + 132, // $3885 + 132, // $3886 + 132, // $3887 + 132, // $3888 + 132, // $3889 + 132, // $388A + 132, // $388B + 132, // $388C + 132, // $388D + 132, // $388E + 132, // $388F + 132, // $3890 + 132, // $3891 + 132, // $3892 + 132, // $3893 + 132, // $3894 + 132, // $3895 + 132, // $3896 + 132, // $3897 + 132, // $3898 + 132, // $3899 + 132, // $389A + 132, // $389B + 132, // $389C + 132, // $389D + 132, // $389E + 132, // $389F + 132, // $38A0 + 132, // $38A1 + 132, // $38A2 + 132, // $38A3 + 132, // $38A4 + 132, // $38A5 + 132, // $38A6 + 132, // $38A7 + 132, // $38A8 + 132, // $38A9 + 132, // $38AA + 132, // $38AB + 132, // $38AC + 132, // $38AD + 132, // $38AE + 132, // $38AF + 132, // $38B0 + 132, // $38B1 + 132, // $38B2 + 132, // $38B3 + 132, // $38B4 + 132, // $38B5 + 132, // $38B6 + 132, // $38B7 + 132, // $38B8 + 132, // $38B9 + 132, // $38BA + 132, // $38BB + 132, // $38BC + 132, // $38BD + 132, // $38BE + 132, // $38BF + 132, // $38C0 + 132, // $38C1 + 132, // $38C2 + 132, // $38C3 + 132, // $38C4 + 132, // $38C5 + 132, // $38C6 + 132, // $38C7 + 132, // $38C8 + 132, // $38C9 + 132, // $38CA + 132, // $38CB + 132, // $38CC + 132, // $38CD + 132, // $38CE + 132, // $38CF + 132, // $38D0 + 132, // $38D1 + 132, // $38D2 + 132, // $38D3 + 132, // $38D4 + 132, // $38D5 + 132, // $38D6 + 132, // $38D7 + 132, // $38D8 + 132, // $38D9 + 132, // $38DA + 132, // $38DB + 132, // $38DC + 132, // $38DD + 132, // $38DE + 132, // $38DF + 132, // $38E0 + 132, // $38E1 + 132, // $38E2 + 132, // $38E3 + 132, // $38E4 + 132, // $38E5 + 132, // $38E6 + 132, // $38E7 + 132, // $38E8 + 132, // $38E9 + 132, // $38EA + 132, // $38EB + 132, // $38EC + 132, // $38ED + 132, // $38EE + 132, // $38EF + 132, // $38F0 + 132, // $38F1 + 132, // $38F2 + 132, // $38F3 + 132, // $38F4 + 132, // $38F5 + 132, // $38F6 + 132, // $38F7 + 132, // $38F8 + 132, // $38F9 + 132, // $38FA + 132, // $38FB + 132, // $38FC + 132, // $38FD + 132, // $38FE + 132, // $38FF + 132, // $3900 + 132, // $3901 + 132, // $3902 + 132, // $3903 + 132, // $3904 + 132, // $3905 + 132, // $3906 + 132, // $3907 + 132, // $3908 + 132, // $3909 + 132, // $390A + 132, // $390B + 132, // $390C + 132, // $390D + 132, // $390E + 132, // $390F + 132, // $3910 + 132, // $3911 + 132, // $3912 + 132, // $3913 + 132, // $3914 + 132, // $3915 + 132, // $3916 + 132, // $3917 + 132, // $3918 + 132, // $3919 + 132, // $391A + 132, // $391B + 132, // $391C + 132, // $391D + 132, // $391E + 132, // $391F + 132, // $3920 + 132, // $3921 + 132, // $3922 + 132, // $3923 + 132, // $3924 + 132, // $3925 + 132, // $3926 + 132, // $3927 + 132, // $3928 + 132, // $3929 + 132, // $392A + 132, // $392B + 132, // $392C + 132, // $392D + 132, // $392E + 132, // $392F + 132, // $3930 + 132, // $3931 + 132, // $3932 + 132, // $3933 + 132, // $3934 + 132, // $3935 + 132, // $3936 + 132, // $3937 + 132, // $3938 + 132, // $3939 + 132, // $393A + 132, // $393B + 132, // $393C + 132, // $393D + 132, // $393E + 132, // $393F + 132, // $3940 + 132, // $3941 + 132, // $3942 + 132, // $3943 + 132, // $3944 + 132, // $3945 + 132, // $3946 + 132, // $3947 + 132, // $3948 + 132, // $3949 + 132, // $394A + 132, // $394B + 132, // $394C + 132, // $394D + 132, // $394E + 132, // $394F + 132, // $3950 + 132, // $3951 + 132, // $3952 + 132, // $3953 + 132, // $3954 + 132, // $3955 + 132, // $3956 + 132, // $3957 + 132, // $3958 + 132, // $3959 + 132, // $395A + 132, // $395B + 132, // $395C + 132, // $395D + 132, // $395E + 132, // $395F + 132, // $3960 + 132, // $3961 + 132, // $3962 + 132, // $3963 + 132, // $3964 + 132, // $3965 + 132, // $3966 + 132, // $3967 + 132, // $3968 + 132, // $3969 + 132, // $396A + 132, // $396B + 132, // $396C + 132, // $396D + 132, // $396E + 132, // $396F + 132, // $3970 + 132, // $3971 + 132, // $3972 + 132, // $3973 + 132, // $3974 + 132, // $3975 + 132, // $3976 + 132, // $3977 + 132, // $3978 + 132, // $3979 + 132, // $397A + 132, // $397B + 132, // $397C + 132, // $397D + 132, // $397E + 132, // $397F + 132, // $3980 + 132, // $3981 + 132, // $3982 + 132, // $3983 + 132, // $3984 + 132, // $3985 + 132, // $3986 + 132, // $3987 + 132, // $3988 + 132, // $3989 + 132, // $398A + 132, // $398B + 132, // $398C + 132, // $398D + 132, // $398E + 132, // $398F + 132, // $3990 + 132, // $3991 + 132, // $3992 + 132, // $3993 + 132, // $3994 + 132, // $3995 + 132, // $3996 + 132, // $3997 + 132, // $3998 + 132, // $3999 + 132, // $399A + 132, // $399B + 132, // $399C + 132, // $399D + 132, // $399E + 132, // $399F + 132, // $39A0 + 132, // $39A1 + 132, // $39A2 + 132, // $39A3 + 132, // $39A4 + 132, // $39A5 + 132, // $39A6 + 132, // $39A7 + 132, // $39A8 + 132, // $39A9 + 132, // $39AA + 132, // $39AB + 132, // $39AC + 132, // $39AD + 132, // $39AE + 132, // $39AF + 132, // $39B0 + 132, // $39B1 + 132, // $39B2 + 132, // $39B3 + 132, // $39B4 + 132, // $39B5 + 132, // $39B6 + 132, // $39B7 + 132, // $39B8 + 132, // $39B9 + 132, // $39BA + 132, // $39BB + 132, // $39BC + 132, // $39BD + 132, // $39BE + 132, // $39BF + 132, // $39C0 + 132, // $39C1 + 132, // $39C2 + 132, // $39C3 + 132, // $39C4 + 132, // $39C5 + 132, // $39C6 + 132, // $39C7 + 132, // $39C8 + 132, // $39C9 + 132, // $39CA + 132, // $39CB + 132, // $39CC + 132, // $39CD + 132, // $39CE + 132, // $39CF + 132, // $39D0 + 132, // $39D1 + 132, // $39D2 + 132, // $39D3 + 132, // $39D4 + 132, // $39D5 + 132, // $39D6 + 132, // $39D7 + 132, // $39D8 + 132, // $39D9 + 132, // $39DA + 132, // $39DB + 132, // $39DC + 132, // $39DD + 132, // $39DE + 132, // $39DF + 132, // $39E0 + 132, // $39E1 + 132, // $39E2 + 132, // $39E3 + 132, // $39E4 + 132, // $39E5 + 132, // $39E6 + 132, // $39E7 + 132, // $39E8 + 132, // $39E9 + 132, // $39EA + 132, // $39EB + 132, // $39EC + 132, // $39ED + 132, // $39EE + 132, // $39EF + 132, // $39F0 + 132, // $39F1 + 132, // $39F2 + 132, // $39F3 + 132, // $39F4 + 132, // $39F5 + 132, // $39F6 + 132, // $39F7 + 132, // $39F8 + 132, // $39F9 + 132, // $39FA + 132, // $39FB + 132, // $39FC + 132, // $39FD + 132, // $39FE + 132, // $39FF + 132, // $3A00 + 132, // $3A01 + 132, // $3A02 + 132, // $3A03 + 132, // $3A04 + 132, // $3A05 + 132, // $3A06 + 132, // $3A07 + 132, // $3A08 + 132, // $3A09 + 132, // $3A0A + 132, // $3A0B + 132, // $3A0C + 132, // $3A0D + 132, // $3A0E + 132, // $3A0F + 132, // $3A10 + 132, // $3A11 + 132, // $3A12 + 132, // $3A13 + 132, // $3A14 + 132, // $3A15 + 132, // $3A16 + 132, // $3A17 + 132, // $3A18 + 132, // $3A19 + 132, // $3A1A + 132, // $3A1B + 132, // $3A1C + 132, // $3A1D + 132, // $3A1E + 132, // $3A1F + 132, // $3A20 + 132, // $3A21 + 132, // $3A22 + 132, // $3A23 + 132, // $3A24 + 132, // $3A25 + 132, // $3A26 + 132, // $3A27 + 132, // $3A28 + 132, // $3A29 + 132, // $3A2A + 132, // $3A2B + 132, // $3A2C + 132, // $3A2D + 132, // $3A2E + 132, // $3A2F + 132, // $3A30 + 132, // $3A31 + 132, // $3A32 + 132, // $3A33 + 132, // $3A34 + 132, // $3A35 + 132, // $3A36 + 132, // $3A37 + 132, // $3A38 + 132, // $3A39 + 132, // $3A3A + 132, // $3A3B + 132, // $3A3C + 132, // $3A3D + 132, // $3A3E + 132, // $3A3F + 132, // $3A40 + 132, // $3A41 + 132, // $3A42 + 132, // $3A43 + 132, // $3A44 + 132, // $3A45 + 132, // $3A46 + 132, // $3A47 + 132, // $3A48 + 132, // $3A49 + 132, // $3A4A + 132, // $3A4B + 132, // $3A4C + 132, // $3A4D + 132, // $3A4E + 132, // $3A4F + 132, // $3A50 + 132, // $3A51 + 132, // $3A52 + 132, // $3A53 + 132, // $3A54 + 132, // $3A55 + 132, // $3A56 + 132, // $3A57 + 132, // $3A58 + 132, // $3A59 + 132, // $3A5A + 132, // $3A5B + 132, // $3A5C + 132, // $3A5D + 132, // $3A5E + 132, // $3A5F + 132, // $3A60 + 132, // $3A61 + 132, // $3A62 + 132, // $3A63 + 132, // $3A64 + 132, // $3A65 + 132, // $3A66 + 132, // $3A67 + 132, // $3A68 + 132, // $3A69 + 132, // $3A6A + 132, // $3A6B + 132, // $3A6C + 132, // $3A6D + 132, // $3A6E + 132, // $3A6F + 132, // $3A70 + 132, // $3A71 + 132, // $3A72 + 132, // $3A73 + 132, // $3A74 + 132, // $3A75 + 132, // $3A76 + 132, // $3A77 + 132, // $3A78 + 132, // $3A79 + 132, // $3A7A + 132, // $3A7B + 132, // $3A7C + 132, // $3A7D + 132, // $3A7E + 132, // $3A7F + 132, // $3A80 + 132, // $3A81 + 132, // $3A82 + 132, // $3A83 + 132, // $3A84 + 132, // $3A85 + 132, // $3A86 + 132, // $3A87 + 132, // $3A88 + 132, // $3A89 + 132, // $3A8A + 132, // $3A8B + 132, // $3A8C + 132, // $3A8D + 132, // $3A8E + 132, // $3A8F + 132, // $3A90 + 132, // $3A91 + 132, // $3A92 + 132, // $3A93 + 132, // $3A94 + 132, // $3A95 + 132, // $3A96 + 132, // $3A97 + 132, // $3A98 + 132, // $3A99 + 132, // $3A9A + 132, // $3A9B + 132, // $3A9C + 132, // $3A9D + 132, // $3A9E + 132, // $3A9F + 132, // $3AA0 + 132, // $3AA1 + 132, // $3AA2 + 132, // $3AA3 + 132, // $3AA4 + 132, // $3AA5 + 132, // $3AA6 + 132, // $3AA7 + 132, // $3AA8 + 132, // $3AA9 + 132, // $3AAA + 132, // $3AAB + 132, // $3AAC + 132, // $3AAD + 132, // $3AAE + 132, // $3AAF + 132, // $3AB0 + 132, // $3AB1 + 132, // $3AB2 + 132, // $3AB3 + 132, // $3AB4 + 132, // $3AB5 + 132, // $3AB6 + 132, // $3AB7 + 132, // $3AB8 + 132, // $3AB9 + 132, // $3ABA + 132, // $3ABB + 132, // $3ABC + 132, // $3ABD + 132, // $3ABE + 132, // $3ABF + 132, // $3AC0 + 132, // $3AC1 + 132, // $3AC2 + 132, // $3AC3 + 132, // $3AC4 + 132, // $3AC5 + 132, // $3AC6 + 132, // $3AC7 + 132, // $3AC8 + 132, // $3AC9 + 132, // $3ACA + 132, // $3ACB + 132, // $3ACC + 132, // $3ACD + 132, // $3ACE + 132, // $3ACF + 132, // $3AD0 + 132, // $3AD1 + 132, // $3AD2 + 132, // $3AD3 + 132, // $3AD4 + 132, // $3AD5 + 132, // $3AD6 + 132, // $3AD7 + 132, // $3AD8 + 132, // $3AD9 + 132, // $3ADA + 132, // $3ADB + 132, // $3ADC + 132, // $3ADD + 132, // $3ADE + 132, // $3ADF + 132, // $3AE0 + 132, // $3AE1 + 132, // $3AE2 + 132, // $3AE3 + 132, // $3AE4 + 132, // $3AE5 + 132, // $3AE6 + 132, // $3AE7 + 132, // $3AE8 + 132, // $3AE9 + 132, // $3AEA + 132, // $3AEB + 132, // $3AEC + 132, // $3AED + 132, // $3AEE + 132, // $3AEF + 132, // $3AF0 + 132, // $3AF1 + 132, // $3AF2 + 132, // $3AF3 + 132, // $3AF4 + 132, // $3AF5 + 132, // $3AF6 + 132, // $3AF7 + 132, // $3AF8 + 132, // $3AF9 + 132, // $3AFA + 132, // $3AFB + 132, // $3AFC + 132, // $3AFD + 132, // $3AFE + 132, // $3AFF + 132, // $3B00 + 132, // $3B01 + 132, // $3B02 + 132, // $3B03 + 132, // $3B04 + 132, // $3B05 + 132, // $3B06 + 132, // $3B07 + 132, // $3B08 + 132, // $3B09 + 132, // $3B0A + 132, // $3B0B + 132, // $3B0C + 132, // $3B0D + 132, // $3B0E + 132, // $3B0F + 132, // $3B10 + 132, // $3B11 + 132, // $3B12 + 132, // $3B13 + 132, // $3B14 + 132, // $3B15 + 132, // $3B16 + 132, // $3B17 + 132, // $3B18 + 132, // $3B19 + 132, // $3B1A + 132, // $3B1B + 132, // $3B1C + 132, // $3B1D + 132, // $3B1E + 132, // $3B1F + 132, // $3B20 + 132, // $3B21 + 132, // $3B22 + 132, // $3B23 + 132, // $3B24 + 132, // $3B25 + 132, // $3B26 + 132, // $3B27 + 132, // $3B28 + 132, // $3B29 + 132, // $3B2A + 132, // $3B2B + 132, // $3B2C + 132, // $3B2D + 132, // $3B2E + 132, // $3B2F + 132, // $3B30 + 132, // $3B31 + 132, // $3B32 + 132, // $3B33 + 132, // $3B34 + 132, // $3B35 + 132, // $3B36 + 132, // $3B37 + 132, // $3B38 + 132, // $3B39 + 132, // $3B3A + 132, // $3B3B + 132, // $3B3C + 132, // $3B3D + 132, // $3B3E + 132, // $3B3F + 132, // $3B40 + 132, // $3B41 + 132, // $3B42 + 132, // $3B43 + 132, // $3B44 + 132, // $3B45 + 132, // $3B46 + 132, // $3B47 + 132, // $3B48 + 132, // $3B49 + 132, // $3B4A + 132, // $3B4B + 132, // $3B4C + 132, // $3B4D + 132, // $3B4E + 132, // $3B4F + 132, // $3B50 + 132, // $3B51 + 132, // $3B52 + 132, // $3B53 + 132, // $3B54 + 132, // $3B55 + 132, // $3B56 + 132, // $3B57 + 132, // $3B58 + 132, // $3B59 + 132, // $3B5A + 132, // $3B5B + 132, // $3B5C + 132, // $3B5D + 132, // $3B5E + 132, // $3B5F + 132, // $3B60 + 132, // $3B61 + 132, // $3B62 + 132, // $3B63 + 132, // $3B64 + 132, // $3B65 + 132, // $3B66 + 132, // $3B67 + 132, // $3B68 + 132, // $3B69 + 132, // $3B6A + 132, // $3B6B + 132, // $3B6C + 132, // $3B6D + 132, // $3B6E + 132, // $3B6F + 132, // $3B70 + 132, // $3B71 + 132, // $3B72 + 132, // $3B73 + 132, // $3B74 + 132, // $3B75 + 132, // $3B76 + 132, // $3B77 + 132, // $3B78 + 132, // $3B79 + 132, // $3B7A + 132, // $3B7B + 132, // $3B7C + 132, // $3B7D + 132, // $3B7E + 132, // $3B7F + 132, // $3B80 + 132, // $3B81 + 132, // $3B82 + 132, // $3B83 + 132, // $3B84 + 132, // $3B85 + 132, // $3B86 + 132, // $3B87 + 132, // $3B88 + 132, // $3B89 + 132, // $3B8A + 132, // $3B8B + 132, // $3B8C + 132, // $3B8D + 132, // $3B8E + 132, // $3B8F + 132, // $3B90 + 132, // $3B91 + 132, // $3B92 + 132, // $3B93 + 132, // $3B94 + 132, // $3B95 + 132, // $3B96 + 132, // $3B97 + 132, // $3B98 + 132, // $3B99 + 132, // $3B9A + 132, // $3B9B + 132, // $3B9C + 132, // $3B9D + 132, // $3B9E + 132, // $3B9F + 132, // $3BA0 + 132, // $3BA1 + 132, // $3BA2 + 132, // $3BA3 + 132, // $3BA4 + 132, // $3BA5 + 132, // $3BA6 + 132, // $3BA7 + 132, // $3BA8 + 132, // $3BA9 + 132, // $3BAA + 132, // $3BAB + 132, // $3BAC + 132, // $3BAD + 132, // $3BAE + 132, // $3BAF + 132, // $3BB0 + 132, // $3BB1 + 132, // $3BB2 + 132, // $3BB3 + 132, // $3BB4 + 132, // $3BB5 + 132, // $3BB6 + 132, // $3BB7 + 132, // $3BB8 + 132, // $3BB9 + 132, // $3BBA + 132, // $3BBB + 132, // $3BBC + 132, // $3BBD + 132, // $3BBE + 132, // $3BBF + 132, // $3BC0 + 132, // $3BC1 + 132, // $3BC2 + 132, // $3BC3 + 132, // $3BC4 + 132, // $3BC5 + 132, // $3BC6 + 132, // $3BC7 + 132, // $3BC8 + 132, // $3BC9 + 132, // $3BCA + 132, // $3BCB + 132, // $3BCC + 132, // $3BCD + 132, // $3BCE + 132, // $3BCF + 132, // $3BD0 + 132, // $3BD1 + 132, // $3BD2 + 132, // $3BD3 + 132, // $3BD4 + 132, // $3BD5 + 132, // $3BD6 + 132, // $3BD7 + 132, // $3BD8 + 132, // $3BD9 + 132, // $3BDA + 132, // $3BDB + 132, // $3BDC + 132, // $3BDD + 132, // $3BDE + 132, // $3BDF + 132, // $3BE0 + 132, // $3BE1 + 132, // $3BE2 + 132, // $3BE3 + 132, // $3BE4 + 132, // $3BE5 + 132, // $3BE6 + 132, // $3BE7 + 132, // $3BE8 + 132, // $3BE9 + 132, // $3BEA + 132, // $3BEB + 132, // $3BEC + 132, // $3BED + 132, // $3BEE + 132, // $3BEF + 132, // $3BF0 + 132, // $3BF1 + 132, // $3BF2 + 132, // $3BF3 + 132, // $3BF4 + 132, // $3BF5 + 132, // $3BF6 + 132, // $3BF7 + 132, // $3BF8 + 132, // $3BF9 + 132, // $3BFA + 132, // $3BFB + 132, // $3BFC + 132, // $3BFD + 132, // $3BFE + 132, // $3BFF + 132, // $3C00 + 132, // $3C01 + 132, // $3C02 + 132, // $3C03 + 132, // $3C04 + 132, // $3C05 + 132, // $3C06 + 132, // $3C07 + 132, // $3C08 + 132, // $3C09 + 132, // $3C0A + 132, // $3C0B + 132, // $3C0C + 132, // $3C0D + 132, // $3C0E + 132, // $3C0F + 132, // $3C10 + 132, // $3C11 + 132, // $3C12 + 132, // $3C13 + 132, // $3C14 + 132, // $3C15 + 132, // $3C16 + 132, // $3C17 + 132, // $3C18 + 132, // $3C19 + 132, // $3C1A + 132, // $3C1B + 132, // $3C1C + 132, // $3C1D + 132, // $3C1E + 132, // $3C1F + 132, // $3C20 + 132, // $3C21 + 132, // $3C22 + 132, // $3C23 + 132, // $3C24 + 132, // $3C25 + 132, // $3C26 + 132, // $3C27 + 132, // $3C28 + 132, // $3C29 + 132, // $3C2A + 132, // $3C2B + 132, // $3C2C + 132, // $3C2D + 132, // $3C2E + 132, // $3C2F + 132, // $3C30 + 132, // $3C31 + 132, // $3C32 + 132, // $3C33 + 132, // $3C34 + 132, // $3C35 + 132, // $3C36 + 132, // $3C37 + 132, // $3C38 + 132, // $3C39 + 132, // $3C3A + 132, // $3C3B + 132, // $3C3C + 132, // $3C3D + 132, // $3C3E + 132, // $3C3F + 132, // $3C40 + 132, // $3C41 + 132, // $3C42 + 132, // $3C43 + 132, // $3C44 + 132, // $3C45 + 132, // $3C46 + 132, // $3C47 + 132, // $3C48 + 132, // $3C49 + 132, // $3C4A + 132, // $3C4B + 132, // $3C4C + 132, // $3C4D + 132, // $3C4E + 132, // $3C4F + 132, // $3C50 + 132, // $3C51 + 132, // $3C52 + 132, // $3C53 + 132, // $3C54 + 132, // $3C55 + 132, // $3C56 + 132, // $3C57 + 132, // $3C58 + 132, // $3C59 + 132, // $3C5A + 132, // $3C5B + 132, // $3C5C + 132, // $3C5D + 132, // $3C5E + 132, // $3C5F + 132, // $3C60 + 132, // $3C61 + 132, // $3C62 + 132, // $3C63 + 132, // $3C64 + 132, // $3C65 + 132, // $3C66 + 132, // $3C67 + 132, // $3C68 + 132, // $3C69 + 132, // $3C6A + 132, // $3C6B + 132, // $3C6C + 132, // $3C6D + 132, // $3C6E + 132, // $3C6F + 132, // $3C70 + 132, // $3C71 + 132, // $3C72 + 132, // $3C73 + 132, // $3C74 + 132, // $3C75 + 132, // $3C76 + 132, // $3C77 + 132, // $3C78 + 132, // $3C79 + 132, // $3C7A + 132, // $3C7B + 132, // $3C7C + 132, // $3C7D + 132, // $3C7E + 132, // $3C7F + 132, // $3C80 + 132, // $3C81 + 132, // $3C82 + 132, // $3C83 + 132, // $3C84 + 132, // $3C85 + 132, // $3C86 + 132, // $3C87 + 132, // $3C88 + 132, // $3C89 + 132, // $3C8A + 132, // $3C8B + 132, // $3C8C + 132, // $3C8D + 132, // $3C8E + 132, // $3C8F + 132, // $3C90 + 132, // $3C91 + 132, // $3C92 + 132, // $3C93 + 132, // $3C94 + 132, // $3C95 + 132, // $3C96 + 132, // $3C97 + 132, // $3C98 + 132, // $3C99 + 132, // $3C9A + 132, // $3C9B + 132, // $3C9C + 132, // $3C9D + 132, // $3C9E + 132, // $3C9F + 132, // $3CA0 + 132, // $3CA1 + 132, // $3CA2 + 132, // $3CA3 + 132, // $3CA4 + 132, // $3CA5 + 132, // $3CA6 + 132, // $3CA7 + 132, // $3CA8 + 132, // $3CA9 + 132, // $3CAA + 132, // $3CAB + 132, // $3CAC + 132, // $3CAD + 132, // $3CAE + 132, // $3CAF + 132, // $3CB0 + 132, // $3CB1 + 132, // $3CB2 + 132, // $3CB3 + 132, // $3CB4 + 132, // $3CB5 + 132, // $3CB6 + 132, // $3CB7 + 132, // $3CB8 + 132, // $3CB9 + 132, // $3CBA + 132, // $3CBB + 132, // $3CBC + 132, // $3CBD + 132, // $3CBE + 132, // $3CBF + 132, // $3CC0 + 132, // $3CC1 + 132, // $3CC2 + 132, // $3CC3 + 132, // $3CC4 + 132, // $3CC5 + 132, // $3CC6 + 132, // $3CC7 + 132, // $3CC8 + 132, // $3CC9 + 132, // $3CCA + 132, // $3CCB + 132, // $3CCC + 132, // $3CCD + 132, // $3CCE + 132, // $3CCF + 132, // $3CD0 + 132, // $3CD1 + 132, // $3CD2 + 132, // $3CD3 + 132, // $3CD4 + 132, // $3CD5 + 132, // $3CD6 + 132, // $3CD7 + 132, // $3CD8 + 132, // $3CD9 + 132, // $3CDA + 132, // $3CDB + 132, // $3CDC + 132, // $3CDD + 132, // $3CDE + 132, // $3CDF + 132, // $3CE0 + 132, // $3CE1 + 132, // $3CE2 + 132, // $3CE3 + 132, // $3CE4 + 132, // $3CE5 + 132, // $3CE6 + 132, // $3CE7 + 132, // $3CE8 + 132, // $3CE9 + 132, // $3CEA + 132, // $3CEB + 132, // $3CEC + 132, // $3CED + 132, // $3CEE + 132, // $3CEF + 132, // $3CF0 + 132, // $3CF1 + 132, // $3CF2 + 132, // $3CF3 + 132, // $3CF4 + 132, // $3CF5 + 132, // $3CF6 + 132, // $3CF7 + 132, // $3CF8 + 132, // $3CF9 + 132, // $3CFA + 132, // $3CFB + 132, // $3CFC + 132, // $3CFD + 132, // $3CFE + 132, // $3CFF + 132, // $3D00 + 132, // $3D01 + 132, // $3D02 + 132, // $3D03 + 132, // $3D04 + 132, // $3D05 + 132, // $3D06 + 132, // $3D07 + 132, // $3D08 + 132, // $3D09 + 132, // $3D0A + 132, // $3D0B + 132, // $3D0C + 132, // $3D0D + 132, // $3D0E + 132, // $3D0F + 132, // $3D10 + 132, // $3D11 + 132, // $3D12 + 132, // $3D13 + 132, // $3D14 + 132, // $3D15 + 132, // $3D16 + 132, // $3D17 + 132, // $3D18 + 132, // $3D19 + 132, // $3D1A + 132, // $3D1B + 132, // $3D1C + 132, // $3D1D + 132, // $3D1E + 132, // $3D1F + 132, // $3D20 + 132, // $3D21 + 132, // $3D22 + 132, // $3D23 + 132, // $3D24 + 132, // $3D25 + 132, // $3D26 + 132, // $3D27 + 132, // $3D28 + 132, // $3D29 + 132, // $3D2A + 132, // $3D2B + 132, // $3D2C + 132, // $3D2D + 132, // $3D2E + 132, // $3D2F + 132, // $3D30 + 132, // $3D31 + 132, // $3D32 + 132, // $3D33 + 132, // $3D34 + 132, // $3D35 + 132, // $3D36 + 132, // $3D37 + 132, // $3D38 + 132, // $3D39 + 132, // $3D3A + 132, // $3D3B + 132, // $3D3C + 132, // $3D3D + 132, // $3D3E + 132, // $3D3F + 132, // $3D40 + 132, // $3D41 + 132, // $3D42 + 132, // $3D43 + 132, // $3D44 + 132, // $3D45 + 132, // $3D46 + 132, // $3D47 + 132, // $3D48 + 132, // $3D49 + 132, // $3D4A + 132, // $3D4B + 132, // $3D4C + 132, // $3D4D + 132, // $3D4E + 132, // $3D4F + 132, // $3D50 + 132, // $3D51 + 132, // $3D52 + 132, // $3D53 + 132, // $3D54 + 132, // $3D55 + 132, // $3D56 + 132, // $3D57 + 132, // $3D58 + 132, // $3D59 + 132, // $3D5A + 132, // $3D5B + 132, // $3D5C + 132, // $3D5D + 132, // $3D5E + 132, // $3D5F + 132, // $3D60 + 132, // $3D61 + 132, // $3D62 + 132, // $3D63 + 132, // $3D64 + 132, // $3D65 + 132, // $3D66 + 132, // $3D67 + 132, // $3D68 + 132, // $3D69 + 132, // $3D6A + 132, // $3D6B + 132, // $3D6C + 132, // $3D6D + 132, // $3D6E + 132, // $3D6F + 132, // $3D70 + 132, // $3D71 + 132, // $3D72 + 132, // $3D73 + 132, // $3D74 + 132, // $3D75 + 132, // $3D76 + 132, // $3D77 + 132, // $3D78 + 132, // $3D79 + 132, // $3D7A + 132, // $3D7B + 132, // $3D7C + 132, // $3D7D + 132, // $3D7E + 132, // $3D7F + 132, // $3D80 + 132, // $3D81 + 132, // $3D82 + 132, // $3D83 + 132, // $3D84 + 132, // $3D85 + 132, // $3D86 + 132, // $3D87 + 132, // $3D88 + 132, // $3D89 + 132, // $3D8A + 132, // $3D8B + 132, // $3D8C + 132, // $3D8D + 132, // $3D8E + 132, // $3D8F + 132, // $3D90 + 132, // $3D91 + 132, // $3D92 + 132, // $3D93 + 132, // $3D94 + 132, // $3D95 + 132, // $3D96 + 132, // $3D97 + 132, // $3D98 + 132, // $3D99 + 132, // $3D9A + 132, // $3D9B + 132, // $3D9C + 132, // $3D9D + 132, // $3D9E + 132, // $3D9F + 132, // $3DA0 + 132, // $3DA1 + 132, // $3DA2 + 132, // $3DA3 + 132, // $3DA4 + 132, // $3DA5 + 132, // $3DA6 + 132, // $3DA7 + 132, // $3DA8 + 132, // $3DA9 + 132, // $3DAA + 132, // $3DAB + 132, // $3DAC + 132, // $3DAD + 132, // $3DAE + 132, // $3DAF + 132, // $3DB0 + 132, // $3DB1 + 132, // $3DB2 + 132, // $3DB3 + 132, // $3DB4 + 132, // $3DB5 + 132, // $3DB6 + 132, // $3DB7 + 132, // $3DB8 + 132, // $3DB9 + 132, // $3DBA + 132, // $3DBB + 132, // $3DBC + 132, // $3DBD + 132, // $3DBE + 132, // $3DBF + 132, // $3DC0 + 132, // $3DC1 + 132, // $3DC2 + 132, // $3DC3 + 132, // $3DC4 + 132, // $3DC5 + 132, // $3DC6 + 132, // $3DC7 + 132, // $3DC8 + 132, // $3DC9 + 132, // $3DCA + 132, // $3DCB + 132, // $3DCC + 132, // $3DCD + 132, // $3DCE + 132, // $3DCF + 132, // $3DD0 + 132, // $3DD1 + 132, // $3DD2 + 132, // $3DD3 + 132, // $3DD4 + 132, // $3DD5 + 132, // $3DD6 + 132, // $3DD7 + 132, // $3DD8 + 132, // $3DD9 + 132, // $3DDA + 132, // $3DDB + 132, // $3DDC + 132, // $3DDD + 132, // $3DDE + 132, // $3DDF + 132, // $3DE0 + 132, // $3DE1 + 132, // $3DE2 + 132, // $3DE3 + 132, // $3DE4 + 132, // $3DE5 + 132, // $3DE6 + 132, // $3DE7 + 132, // $3DE8 + 132, // $3DE9 + 132, // $3DEA + 132, // $3DEB + 132, // $3DEC + 132, // $3DED + 132, // $3DEE + 132, // $3DEF + 132, // $3DF0 + 132, // $3DF1 + 132, // $3DF2 + 132, // $3DF3 + 132, // $3DF4 + 132, // $3DF5 + 132, // $3DF6 + 132, // $3DF7 + 132, // $3DF8 + 132, // $3DF9 + 132, // $3DFA + 132, // $3DFB + 132, // $3DFC + 132, // $3DFD + 132, // $3DFE + 132, // $3DFF + 132, // $3E00 + 132, // $3E01 + 132, // $3E02 + 132, // $3E03 + 132, // $3E04 + 132, // $3E05 + 132, // $3E06 + 132, // $3E07 + 132, // $3E08 + 132, // $3E09 + 132, // $3E0A + 132, // $3E0B + 132, // $3E0C + 132, // $3E0D + 132, // $3E0E + 132, // $3E0F + 132, // $3E10 + 132, // $3E11 + 132, // $3E12 + 132, // $3E13 + 132, // $3E14 + 132, // $3E15 + 132, // $3E16 + 132, // $3E17 + 132, // $3E18 + 132, // $3E19 + 132, // $3E1A + 132, // $3E1B + 132, // $3E1C + 132, // $3E1D + 132, // $3E1E + 132, // $3E1F + 132, // $3E20 + 132, // $3E21 + 132, // $3E22 + 132, // $3E23 + 132, // $3E24 + 132, // $3E25 + 132, // $3E26 + 132, // $3E27 + 132, // $3E28 + 132, // $3E29 + 132, // $3E2A + 132, // $3E2B + 132, // $3E2C + 132, // $3E2D + 132, // $3E2E + 132, // $3E2F + 132, // $3E30 + 132, // $3E31 + 132, // $3E32 + 132, // $3E33 + 132, // $3E34 + 132, // $3E35 + 132, // $3E36 + 132, // $3E37 + 132, // $3E38 + 132, // $3E39 + 132, // $3E3A + 132, // $3E3B + 132, // $3E3C + 132, // $3E3D + 132, // $3E3E + 132, // $3E3F + 132, // $3E40 + 132, // $3E41 + 132, // $3E42 + 132, // $3E43 + 132, // $3E44 + 132, // $3E45 + 132, // $3E46 + 132, // $3E47 + 132, // $3E48 + 132, // $3E49 + 132, // $3E4A + 132, // $3E4B + 132, // $3E4C + 132, // $3E4D + 132, // $3E4E + 132, // $3E4F + 132, // $3E50 + 132, // $3E51 + 132, // $3E52 + 132, // $3E53 + 132, // $3E54 + 132, // $3E55 + 132, // $3E56 + 132, // $3E57 + 132, // $3E58 + 132, // $3E59 + 132, // $3E5A + 132, // $3E5B + 132, // $3E5C + 132, // $3E5D + 132, // $3E5E + 132, // $3E5F + 132, // $3E60 + 132, // $3E61 + 132, // $3E62 + 132, // $3E63 + 132, // $3E64 + 132, // $3E65 + 132, // $3E66 + 132, // $3E67 + 132, // $3E68 + 132, // $3E69 + 132, // $3E6A + 132, // $3E6B + 132, // $3E6C + 132, // $3E6D + 132, // $3E6E + 132, // $3E6F + 132, // $3E70 + 132, // $3E71 + 132, // $3E72 + 132, // $3E73 + 132, // $3E74 + 132, // $3E75 + 132, // $3E76 + 132, // $3E77 + 132, // $3E78 + 132, // $3E79 + 132, // $3E7A + 132, // $3E7B + 132, // $3E7C + 132, // $3E7D + 132, // $3E7E + 132, // $3E7F + 132, // $3E80 + 132, // $3E81 + 132, // $3E82 + 132, // $3E83 + 132, // $3E84 + 132, // $3E85 + 132, // $3E86 + 132, // $3E87 + 132, // $3E88 + 132, // $3E89 + 132, // $3E8A + 132, // $3E8B + 132, // $3E8C + 132, // $3E8D + 132, // $3E8E + 132, // $3E8F + 132, // $3E90 + 132, // $3E91 + 132, // $3E92 + 132, // $3E93 + 132, // $3E94 + 132, // $3E95 + 132, // $3E96 + 132, // $3E97 + 132, // $3E98 + 132, // $3E99 + 132, // $3E9A + 132, // $3E9B + 132, // $3E9C + 132, // $3E9D + 132, // $3E9E + 132, // $3E9F + 132, // $3EA0 + 132, // $3EA1 + 132, // $3EA2 + 132, // $3EA3 + 132, // $3EA4 + 132, // $3EA5 + 132, // $3EA6 + 132, // $3EA7 + 132, // $3EA8 + 132, // $3EA9 + 132, // $3EAA + 132, // $3EAB + 132, // $3EAC + 132, // $3EAD + 132, // $3EAE + 132, // $3EAF + 132, // $3EB0 + 132, // $3EB1 + 132, // $3EB2 + 132, // $3EB3 + 132, // $3EB4 + 132, // $3EB5 + 132, // $3EB6 + 132, // $3EB7 + 132, // $3EB8 + 132, // $3EB9 + 132, // $3EBA + 132, // $3EBB + 132, // $3EBC + 132, // $3EBD + 132, // $3EBE + 132, // $3EBF + 132, // $3EC0 + 132, // $3EC1 + 132, // $3EC2 + 132, // $3EC3 + 132, // $3EC4 + 132, // $3EC5 + 132, // $3EC6 + 132, // $3EC7 + 132, // $3EC8 + 132, // $3EC9 + 132, // $3ECA + 132, // $3ECB + 132, // $3ECC + 132, // $3ECD + 132, // $3ECE + 132, // $3ECF + 132, // $3ED0 + 132, // $3ED1 + 132, // $3ED2 + 132, // $3ED3 + 132, // $3ED4 + 132, // $3ED5 + 132, // $3ED6 + 132, // $3ED7 + 132, // $3ED8 + 132, // $3ED9 + 132, // $3EDA + 132, // $3EDB + 132, // $3EDC + 132, // $3EDD + 132, // $3EDE + 132, // $3EDF + 132, // $3EE0 + 132, // $3EE1 + 132, // $3EE2 + 132, // $3EE3 + 132, // $3EE4 + 132, // $3EE5 + 132, // $3EE6 + 132, // $3EE7 + 132, // $3EE8 + 132, // $3EE9 + 132, // $3EEA + 132, // $3EEB + 132, // $3EEC + 132, // $3EED + 132, // $3EEE + 132, // $3EEF + 132, // $3EF0 + 132, // $3EF1 + 132, // $3EF2 + 132, // $3EF3 + 132, // $3EF4 + 132, // $3EF5 + 132, // $3EF6 + 132, // $3EF7 + 132, // $3EF8 + 132, // $3EF9 + 132, // $3EFA + 132, // $3EFB + 132, // $3EFC + 132, // $3EFD + 132, // $3EFE + 132, // $3EFF + 132, // $3F00 + 132, // $3F01 + 132, // $3F02 + 132, // $3F03 + 132, // $3F04 + 132, // $3F05 + 132, // $3F06 + 132, // $3F07 + 132, // $3F08 + 132, // $3F09 + 132, // $3F0A + 132, // $3F0B + 132, // $3F0C + 132, // $3F0D + 132, // $3F0E + 132, // $3F0F + 132, // $3F10 + 132, // $3F11 + 132, // $3F12 + 132, // $3F13 + 132, // $3F14 + 132, // $3F15 + 132, // $3F16 + 132, // $3F17 + 132, // $3F18 + 132, // $3F19 + 132, // $3F1A + 132, // $3F1B + 132, // $3F1C + 132, // $3F1D + 132, // $3F1E + 132, // $3F1F + 132, // $3F20 + 132, // $3F21 + 132, // $3F22 + 132, // $3F23 + 132, // $3F24 + 132, // $3F25 + 132, // $3F26 + 132, // $3F27 + 132, // $3F28 + 132, // $3F29 + 132, // $3F2A + 132, // $3F2B + 132, // $3F2C + 132, // $3F2D + 132, // $3F2E + 132, // $3F2F + 132, // $3F30 + 132, // $3F31 + 132, // $3F32 + 132, // $3F33 + 132, // $3F34 + 132, // $3F35 + 132, // $3F36 + 132, // $3F37 + 132, // $3F38 + 132, // $3F39 + 132, // $3F3A + 132, // $3F3B + 132, // $3F3C + 132, // $3F3D + 132, // $3F3E + 132, // $3F3F + 132, // $3F40 + 132, // $3F41 + 132, // $3F42 + 132, // $3F43 + 132, // $3F44 + 132, // $3F45 + 132, // $3F46 + 132, // $3F47 + 132, // $3F48 + 132, // $3F49 + 132, // $3F4A + 132, // $3F4B + 132, // $3F4C + 132, // $3F4D + 132, // $3F4E + 132, // $3F4F + 132, // $3F50 + 132, // $3F51 + 132, // $3F52 + 132, // $3F53 + 132, // $3F54 + 132, // $3F55 + 132, // $3F56 + 132, // $3F57 + 132, // $3F58 + 132, // $3F59 + 132, // $3F5A + 132, // $3F5B + 132, // $3F5C + 132, // $3F5D + 132, // $3F5E + 132, // $3F5F + 132, // $3F60 + 132, // $3F61 + 132, // $3F62 + 132, // $3F63 + 132, // $3F64 + 132, // $3F65 + 132, // $3F66 + 132, // $3F67 + 132, // $3F68 + 132, // $3F69 + 132, // $3F6A + 132, // $3F6B + 132, // $3F6C + 132, // $3F6D + 132, // $3F6E + 132, // $3F6F + 132, // $3F70 + 132, // $3F71 + 132, // $3F72 + 132, // $3F73 + 132, // $3F74 + 132, // $3F75 + 132, // $3F76 + 132, // $3F77 + 132, // $3F78 + 132, // $3F79 + 132, // $3F7A + 132, // $3F7B + 132, // $3F7C + 132, // $3F7D + 132, // $3F7E + 132, // $3F7F + 132, // $3F80 + 132, // $3F81 + 132, // $3F82 + 132, // $3F83 + 132, // $3F84 + 132, // $3F85 + 132, // $3F86 + 132, // $3F87 + 132, // $3F88 + 132, // $3F89 + 132, // $3F8A + 132, // $3F8B + 132, // $3F8C + 132, // $3F8D + 132, // $3F8E + 132, // $3F8F + 132, // $3F90 + 132, // $3F91 + 132, // $3F92 + 132, // $3F93 + 132, // $3F94 + 132, // $3F95 + 132, // $3F96 + 132, // $3F97 + 132, // $3F98 + 132, // $3F99 + 132, // $3F9A + 132, // $3F9B + 132, // $3F9C + 132, // $3F9D + 132, // $3F9E + 132, // $3F9F + 132, // $3FA0 + 132, // $3FA1 + 132, // $3FA2 + 132, // $3FA3 + 132, // $3FA4 + 132, // $3FA5 + 132, // $3FA6 + 132, // $3FA7 + 132, // $3FA8 + 132, // $3FA9 + 132, // $3FAA + 132, // $3FAB + 132, // $3FAC + 132, // $3FAD + 132, // $3FAE + 132, // $3FAF + 132, // $3FB0 + 132, // $3FB1 + 132, // $3FB2 + 132, // $3FB3 + 132, // $3FB4 + 132, // $3FB5 + 132, // $3FB6 + 132, // $3FB7 + 132, // $3FB8 + 132, // $3FB9 + 132, // $3FBA + 132, // $3FBB + 132, // $3FBC + 132, // $3FBD + 132, // $3FBE + 132, // $3FBF + 132, // $3FC0 + 132, // $3FC1 + 132, // $3FC2 + 132, // $3FC3 + 132, // $3FC4 + 132, // $3FC5 + 132, // $3FC6 + 132, // $3FC7 + 132, // $3FC8 + 132, // $3FC9 + 132, // $3FCA + 132, // $3FCB + 132, // $3FCC + 132, // $3FCD + 132, // $3FCE + 132, // $3FCF + 132, // $3FD0 + 132, // $3FD1 + 132, // $3FD2 + 132, // $3FD3 + 132, // $3FD4 + 132, // $3FD5 + 132, // $3FD6 + 132, // $3FD7 + 132, // $3FD8 + 132, // $3FD9 + 132, // $3FDA + 132, // $3FDB + 132, // $3FDC + 132, // $3FDD + 132, // $3FDE + 132, // $3FDF + 132, // $3FE0 + 132, // $3FE1 + 132, // $3FE2 + 132, // $3FE3 + 132, // $3FE4 + 132, // $3FE5 + 132, // $3FE6 + 132, // $3FE7 + 132, // $3FE8 + 132, // $3FE9 + 132, // $3FEA + 132, // $3FEB + 132, // $3FEC + 132, // $3FED + 132, // $3FEE + 132, // $3FEF + 132, // $3FF0 + 132, // $3FF1 + 132, // $3FF2 + 132, // $3FF3 + 132, // $3FF4 + 132, // $3FF5 + 132, // $3FF6 + 132, // $3FF7 + 132, // $3FF8 + 132, // $3FF9 + 132, // $3FFA + 132, // $3FFB + 132, // $3FFC + 132, // $3FFD + 132, // $3FFE + 132, // $3FFF + 132, // $4000 + 132, // $4001 + 132, // $4002 + 132, // $4003 + 132, // $4004 + 132, // $4005 + 132, // $4006 + 132, // $4007 + 132, // $4008 + 132, // $4009 + 132, // $400A + 132, // $400B + 132, // $400C + 132, // $400D + 132, // $400E + 132, // $400F + 132, // $4010 + 132, // $4011 + 132, // $4012 + 132, // $4013 + 132, // $4014 + 132, // $4015 + 132, // $4016 + 132, // $4017 + 132, // $4018 + 132, // $4019 + 132, // $401A + 132, // $401B + 132, // $401C + 132, // $401D + 132, // $401E + 132, // $401F + 132, // $4020 + 132, // $4021 + 132, // $4022 + 132, // $4023 + 132, // $4024 + 132, // $4025 + 132, // $4026 + 132, // $4027 + 132, // $4028 + 132, // $4029 + 132, // $402A + 132, // $402B + 132, // $402C + 132, // $402D + 132, // $402E + 132, // $402F + 132, // $4030 + 132, // $4031 + 132, // $4032 + 132, // $4033 + 132, // $4034 + 132, // $4035 + 132, // $4036 + 132, // $4037 + 132, // $4038 + 132, // $4039 + 132, // $403A + 132, // $403B + 132, // $403C + 132, // $403D + 132, // $403E + 132, // $403F + 132, // $4040 + 132, // $4041 + 132, // $4042 + 132, // $4043 + 132, // $4044 + 132, // $4045 + 132, // $4046 + 132, // $4047 + 132, // $4048 + 132, // $4049 + 132, // $404A + 132, // $404B + 132, // $404C + 132, // $404D + 132, // $404E + 132, // $404F + 132, // $4050 + 132, // $4051 + 132, // $4052 + 132, // $4053 + 132, // $4054 + 132, // $4055 + 132, // $4056 + 132, // $4057 + 132, // $4058 + 132, // $4059 + 132, // $405A + 132, // $405B + 132, // $405C + 132, // $405D + 132, // $405E + 132, // $405F + 132, // $4060 + 132, // $4061 + 132, // $4062 + 132, // $4063 + 132, // $4064 + 132, // $4065 + 132, // $4066 + 132, // $4067 + 132, // $4068 + 132, // $4069 + 132, // $406A + 132, // $406B + 132, // $406C + 132, // $406D + 132, // $406E + 132, // $406F + 132, // $4070 + 132, // $4071 + 132, // $4072 + 132, // $4073 + 132, // $4074 + 132, // $4075 + 132, // $4076 + 132, // $4077 + 132, // $4078 + 132, // $4079 + 132, // $407A + 132, // $407B + 132, // $407C + 132, // $407D + 132, // $407E + 132, // $407F + 132, // $4080 + 132, // $4081 + 132, // $4082 + 132, // $4083 + 132, // $4084 + 132, // $4085 + 132, // $4086 + 132, // $4087 + 132, // $4088 + 132, // $4089 + 132, // $408A + 132, // $408B + 132, // $408C + 132, // $408D + 132, // $408E + 132, // $408F + 132, // $4090 + 132, // $4091 + 132, // $4092 + 132, // $4093 + 132, // $4094 + 132, // $4095 + 132, // $4096 + 132, // $4097 + 132, // $4098 + 132, // $4099 + 132, // $409A + 132, // $409B + 132, // $409C + 132, // $409D + 132, // $409E + 132, // $409F + 132, // $40A0 + 132, // $40A1 + 132, // $40A2 + 132, // $40A3 + 132, // $40A4 + 132, // $40A5 + 132, // $40A6 + 132, // $40A7 + 132, // $40A8 + 132, // $40A9 + 132, // $40AA + 132, // $40AB + 132, // $40AC + 132, // $40AD + 132, // $40AE + 132, // $40AF + 132, // $40B0 + 132, // $40B1 + 132, // $40B2 + 132, // $40B3 + 132, // $40B4 + 132, // $40B5 + 132, // $40B6 + 132, // $40B7 + 132, // $40B8 + 132, // $40B9 + 132, // $40BA + 132, // $40BB + 132, // $40BC + 132, // $40BD + 132, // $40BE + 132, // $40BF + 132, // $40C0 + 132, // $40C1 + 132, // $40C2 + 132, // $40C3 + 132, // $40C4 + 132, // $40C5 + 132, // $40C6 + 132, // $40C7 + 132, // $40C8 + 132, // $40C9 + 132, // $40CA + 132, // $40CB + 132, // $40CC + 132, // $40CD + 132, // $40CE + 132, // $40CF + 132, // $40D0 + 132, // $40D1 + 132, // $40D2 + 132, // $40D3 + 132, // $40D4 + 132, // $40D5 + 132, // $40D6 + 132, // $40D7 + 132, // $40D8 + 132, // $40D9 + 132, // $40DA + 132, // $40DB + 132, // $40DC + 132, // $40DD + 132, // $40DE + 132, // $40DF + 132, // $40E0 + 132, // $40E1 + 132, // $40E2 + 132, // $40E3 + 132, // $40E4 + 132, // $40E5 + 132, // $40E6 + 132, // $40E7 + 132, // $40E8 + 132, // $40E9 + 132, // $40EA + 132, // $40EB + 132, // $40EC + 132, // $40ED + 132, // $40EE + 132, // $40EF + 132, // $40F0 + 132, // $40F1 + 132, // $40F2 + 132, // $40F3 + 132, // $40F4 + 132, // $40F5 + 132, // $40F6 + 132, // $40F7 + 132, // $40F8 + 132, // $40F9 + 132, // $40FA + 132, // $40FB + 132, // $40FC + 132, // $40FD + 132, // $40FE + 132, // $40FF + 132, // $4100 + 132, // $4101 + 132, // $4102 + 132, // $4103 + 132, // $4104 + 132, // $4105 + 132, // $4106 + 132, // $4107 + 132, // $4108 + 132, // $4109 + 132, // $410A + 132, // $410B + 132, // $410C + 132, // $410D + 132, // $410E + 132, // $410F + 132, // $4110 + 132, // $4111 + 132, // $4112 + 132, // $4113 + 132, // $4114 + 132, // $4115 + 132, // $4116 + 132, // $4117 + 132, // $4118 + 132, // $4119 + 132, // $411A + 132, // $411B + 132, // $411C + 132, // $411D + 132, // $411E + 132, // $411F + 132, // $4120 + 132, // $4121 + 132, // $4122 + 132, // $4123 + 132, // $4124 + 132, // $4125 + 132, // $4126 + 132, // $4127 + 132, // $4128 + 132, // $4129 + 132, // $412A + 132, // $412B + 132, // $412C + 132, // $412D + 132, // $412E + 132, // $412F + 132, // $4130 + 132, // $4131 + 132, // $4132 + 132, // $4133 + 132, // $4134 + 132, // $4135 + 132, // $4136 + 132, // $4137 + 132, // $4138 + 132, // $4139 + 132, // $413A + 132, // $413B + 132, // $413C + 132, // $413D + 132, // $413E + 132, // $413F + 132, // $4140 + 132, // $4141 + 132, // $4142 + 132, // $4143 + 132, // $4144 + 132, // $4145 + 132, // $4146 + 132, // $4147 + 132, // $4148 + 132, // $4149 + 132, // $414A + 132, // $414B + 132, // $414C + 132, // $414D + 132, // $414E + 132, // $414F + 132, // $4150 + 132, // $4151 + 132, // $4152 + 132, // $4153 + 132, // $4154 + 132, // $4155 + 132, // $4156 + 132, // $4157 + 132, // $4158 + 132, // $4159 + 132, // $415A + 132, // $415B + 132, // $415C + 132, // $415D + 132, // $415E + 132, // $415F + 132, // $4160 + 132, // $4161 + 132, // $4162 + 132, // $4163 + 132, // $4164 + 132, // $4165 + 132, // $4166 + 132, // $4167 + 132, // $4168 + 132, // $4169 + 132, // $416A + 132, // $416B + 132, // $416C + 132, // $416D + 132, // $416E + 132, // $416F + 132, // $4170 + 132, // $4171 + 132, // $4172 + 132, // $4173 + 132, // $4174 + 132, // $4175 + 132, // $4176 + 132, // $4177 + 132, // $4178 + 132, // $4179 + 132, // $417A + 132, // $417B + 132, // $417C + 132, // $417D + 132, // $417E + 132, // $417F + 132, // $4180 + 132, // $4181 + 132, // $4182 + 132, // $4183 + 132, // $4184 + 132, // $4185 + 132, // $4186 + 132, // $4187 + 132, // $4188 + 132, // $4189 + 132, // $418A + 132, // $418B + 132, // $418C + 132, // $418D + 132, // $418E + 132, // $418F + 132, // $4190 + 132, // $4191 + 132, // $4192 + 132, // $4193 + 132, // $4194 + 132, // $4195 + 132, // $4196 + 132, // $4197 + 132, // $4198 + 132, // $4199 + 132, // $419A + 132, // $419B + 132, // $419C + 132, // $419D + 132, // $419E + 132, // $419F + 132, // $41A0 + 132, // $41A1 + 132, // $41A2 + 132, // $41A3 + 132, // $41A4 + 132, // $41A5 + 132, // $41A6 + 132, // $41A7 + 132, // $41A8 + 132, // $41A9 + 132, // $41AA + 132, // $41AB + 132, // $41AC + 132, // $41AD + 132, // $41AE + 132, // $41AF + 132, // $41B0 + 132, // $41B1 + 132, // $41B2 + 132, // $41B3 + 132, // $41B4 + 132, // $41B5 + 132, // $41B6 + 132, // $41B7 + 132, // $41B8 + 132, // $41B9 + 132, // $41BA + 132, // $41BB + 132, // $41BC + 132, // $41BD + 132, // $41BE + 132, // $41BF + 132, // $41C0 + 132, // $41C1 + 132, // $41C2 + 132, // $41C3 + 132, // $41C4 + 132, // $41C5 + 132, // $41C6 + 132, // $41C7 + 132, // $41C8 + 132, // $41C9 + 132, // $41CA + 132, // $41CB + 132, // $41CC + 132, // $41CD + 132, // $41CE + 132, // $41CF + 132, // $41D0 + 132, // $41D1 + 132, // $41D2 + 132, // $41D3 + 132, // $41D4 + 132, // $41D5 + 132, // $41D6 + 132, // $41D7 + 132, // $41D8 + 132, // $41D9 + 132, // $41DA + 132, // $41DB + 132, // $41DC + 132, // $41DD + 132, // $41DE + 132, // $41DF + 132, // $41E0 + 132, // $41E1 + 132, // $41E2 + 132, // $41E3 + 132, // $41E4 + 132, // $41E5 + 132, // $41E6 + 132, // $41E7 + 132, // $41E8 + 132, // $41E9 + 132, // $41EA + 132, // $41EB + 132, // $41EC + 132, // $41ED + 132, // $41EE + 132, // $41EF + 132, // $41F0 + 132, // $41F1 + 132, // $41F2 + 132, // $41F3 + 132, // $41F4 + 132, // $41F5 + 132, // $41F6 + 132, // $41F7 + 132, // $41F8 + 132, // $41F9 + 132, // $41FA + 132, // $41FB + 132, // $41FC + 132, // $41FD + 132, // $41FE + 132, // $41FF + 132, // $4200 + 132, // $4201 + 132, // $4202 + 132, // $4203 + 132, // $4204 + 132, // $4205 + 132, // $4206 + 132, // $4207 + 132, // $4208 + 132, // $4209 + 132, // $420A + 132, // $420B + 132, // $420C + 132, // $420D + 132, // $420E + 132, // $420F + 132, // $4210 + 132, // $4211 + 132, // $4212 + 132, // $4213 + 132, // $4214 + 132, // $4215 + 132, // $4216 + 132, // $4217 + 132, // $4218 + 132, // $4219 + 132, // $421A + 132, // $421B + 132, // $421C + 132, // $421D + 132, // $421E + 132, // $421F + 132, // $4220 + 132, // $4221 + 132, // $4222 + 132, // $4223 + 132, // $4224 + 132, // $4225 + 132, // $4226 + 132, // $4227 + 132, // $4228 + 132, // $4229 + 132, // $422A + 132, // $422B + 132, // $422C + 132, // $422D + 132, // $422E + 132, // $422F + 132, // $4230 + 132, // $4231 + 132, // $4232 + 132, // $4233 + 132, // $4234 + 132, // $4235 + 132, // $4236 + 132, // $4237 + 132, // $4238 + 132, // $4239 + 132, // $423A + 132, // $423B + 132, // $423C + 132, // $423D + 132, // $423E + 132, // $423F + 132, // $4240 + 132, // $4241 + 132, // $4242 + 132, // $4243 + 132, // $4244 + 132, // $4245 + 132, // $4246 + 132, // $4247 + 132, // $4248 + 132, // $4249 + 132, // $424A + 132, // $424B + 132, // $424C + 132, // $424D + 132, // $424E + 132, // $424F + 132, // $4250 + 132, // $4251 + 132, // $4252 + 132, // $4253 + 132, // $4254 + 132, // $4255 + 132, // $4256 + 132, // $4257 + 132, // $4258 + 132, // $4259 + 132, // $425A + 132, // $425B + 132, // $425C + 132, // $425D + 132, // $425E + 132, // $425F + 132, // $4260 + 132, // $4261 + 132, // $4262 + 132, // $4263 + 132, // $4264 + 132, // $4265 + 132, // $4266 + 132, // $4267 + 132, // $4268 + 132, // $4269 + 132, // $426A + 132, // $426B + 132, // $426C + 132, // $426D + 132, // $426E + 132, // $426F + 132, // $4270 + 132, // $4271 + 132, // $4272 + 132, // $4273 + 132, // $4274 + 132, // $4275 + 132, // $4276 + 132, // $4277 + 132, // $4278 + 132, // $4279 + 132, // $427A + 132, // $427B + 132, // $427C + 132, // $427D + 132, // $427E + 132, // $427F + 132, // $4280 + 132, // $4281 + 132, // $4282 + 132, // $4283 + 132, // $4284 + 132, // $4285 + 132, // $4286 + 132, // $4287 + 132, // $4288 + 132, // $4289 + 132, // $428A + 132, // $428B + 132, // $428C + 132, // $428D + 132, // $428E + 132, // $428F + 132, // $4290 + 132, // $4291 + 132, // $4292 + 132, // $4293 + 132, // $4294 + 132, // $4295 + 132, // $4296 + 132, // $4297 + 132, // $4298 + 132, // $4299 + 132, // $429A + 132, // $429B + 132, // $429C + 132, // $429D + 132, // $429E + 132, // $429F + 132, // $42A0 + 132, // $42A1 + 132, // $42A2 + 132, // $42A3 + 132, // $42A4 + 132, // $42A5 + 132, // $42A6 + 132, // $42A7 + 132, // $42A8 + 132, // $42A9 + 132, // $42AA + 132, // $42AB + 132, // $42AC + 132, // $42AD + 132, // $42AE + 132, // $42AF + 132, // $42B0 + 132, // $42B1 + 132, // $42B2 + 132, // $42B3 + 132, // $42B4 + 132, // $42B5 + 132, // $42B6 + 132, // $42B7 + 132, // $42B8 + 132, // $42B9 + 132, // $42BA + 132, // $42BB + 132, // $42BC + 132, // $42BD + 132, // $42BE + 132, // $42BF + 132, // $42C0 + 132, // $42C1 + 132, // $42C2 + 132, // $42C3 + 132, // $42C4 + 132, // $42C5 + 132, // $42C6 + 132, // $42C7 + 132, // $42C8 + 132, // $42C9 + 132, // $42CA + 132, // $42CB + 132, // $42CC + 132, // $42CD + 132, // $42CE + 132, // $42CF + 132, // $42D0 + 132, // $42D1 + 132, // $42D2 + 132, // $42D3 + 132, // $42D4 + 132, // $42D5 + 132, // $42D6 + 132, // $42D7 + 132, // $42D8 + 132, // $42D9 + 132, // $42DA + 132, // $42DB + 132, // $42DC + 132, // $42DD + 132, // $42DE + 132, // $42DF + 132, // $42E0 + 132, // $42E1 + 132, // $42E2 + 132, // $42E3 + 132, // $42E4 + 132, // $42E5 + 132, // $42E6 + 132, // $42E7 + 132, // $42E8 + 132, // $42E9 + 132, // $42EA + 132, // $42EB + 132, // $42EC + 132, // $42ED + 132, // $42EE + 132, // $42EF + 132, // $42F0 + 132, // $42F1 + 132, // $42F2 + 132, // $42F3 + 132, // $42F4 + 132, // $42F5 + 132, // $42F6 + 132, // $42F7 + 132, // $42F8 + 132, // $42F9 + 132, // $42FA + 132, // $42FB + 132, // $42FC + 132, // $42FD + 132, // $42FE + 132, // $42FF + 132, // $4300 + 132, // $4301 + 132, // $4302 + 132, // $4303 + 132, // $4304 + 132, // $4305 + 132, // $4306 + 132, // $4307 + 132, // $4308 + 132, // $4309 + 132, // $430A + 132, // $430B + 132, // $430C + 132, // $430D + 132, // $430E + 132, // $430F + 132, // $4310 + 132, // $4311 + 132, // $4312 + 132, // $4313 + 132, // $4314 + 132, // $4315 + 132, // $4316 + 132, // $4317 + 132, // $4318 + 132, // $4319 + 132, // $431A + 132, // $431B + 132, // $431C + 132, // $431D + 132, // $431E + 132, // $431F + 132, // $4320 + 132, // $4321 + 132, // $4322 + 132, // $4323 + 132, // $4324 + 132, // $4325 + 132, // $4326 + 132, // $4327 + 132, // $4328 + 132, // $4329 + 132, // $432A + 132, // $432B + 132, // $432C + 132, // $432D + 132, // $432E + 132, // $432F + 132, // $4330 + 132, // $4331 + 132, // $4332 + 132, // $4333 + 132, // $4334 + 132, // $4335 + 132, // $4336 + 132, // $4337 + 132, // $4338 + 132, // $4339 + 132, // $433A + 132, // $433B + 132, // $433C + 132, // $433D + 132, // $433E + 132, // $433F + 132, // $4340 + 132, // $4341 + 132, // $4342 + 132, // $4343 + 132, // $4344 + 132, // $4345 + 132, // $4346 + 132, // $4347 + 132, // $4348 + 132, // $4349 + 132, // $434A + 132, // $434B + 132, // $434C + 132, // $434D + 132, // $434E + 132, // $434F + 132, // $4350 + 132, // $4351 + 132, // $4352 + 132, // $4353 + 132, // $4354 + 132, // $4355 + 132, // $4356 + 132, // $4357 + 132, // $4358 + 132, // $4359 + 132, // $435A + 132, // $435B + 132, // $435C + 132, // $435D + 132, // $435E + 132, // $435F + 132, // $4360 + 132, // $4361 + 132, // $4362 + 132, // $4363 + 132, // $4364 + 132, // $4365 + 132, // $4366 + 132, // $4367 + 132, // $4368 + 132, // $4369 + 132, // $436A + 132, // $436B + 132, // $436C + 132, // $436D + 132, // $436E + 132, // $436F + 132, // $4370 + 132, // $4371 + 132, // $4372 + 132, // $4373 + 132, // $4374 + 132, // $4375 + 132, // $4376 + 132, // $4377 + 132, // $4378 + 132, // $4379 + 132, // $437A + 132, // $437B + 132, // $437C + 132, // $437D + 132, // $437E + 132, // $437F + 132, // $4380 + 132, // $4381 + 132, // $4382 + 132, // $4383 + 132, // $4384 + 132, // $4385 + 132, // $4386 + 132, // $4387 + 132, // $4388 + 132, // $4389 + 132, // $438A + 132, // $438B + 132, // $438C + 132, // $438D + 132, // $438E + 132, // $438F + 132, // $4390 + 132, // $4391 + 132, // $4392 + 132, // $4393 + 132, // $4394 + 132, // $4395 + 132, // $4396 + 132, // $4397 + 132, // $4398 + 132, // $4399 + 132, // $439A + 132, // $439B + 132, // $439C + 132, // $439D + 132, // $439E + 132, // $439F + 132, // $43A0 + 132, // $43A1 + 132, // $43A2 + 132, // $43A3 + 132, // $43A4 + 132, // $43A5 + 132, // $43A6 + 132, // $43A7 + 132, // $43A8 + 132, // $43A9 + 132, // $43AA + 132, // $43AB + 132, // $43AC + 132, // $43AD + 132, // $43AE + 132, // $43AF + 132, // $43B0 + 132, // $43B1 + 132, // $43B2 + 132, // $43B3 + 132, // $43B4 + 132, // $43B5 + 132, // $43B6 + 132, // $43B7 + 132, // $43B8 + 132, // $43B9 + 132, // $43BA + 132, // $43BB + 132, // $43BC + 132, // $43BD + 132, // $43BE + 132, // $43BF + 132, // $43C0 + 132, // $43C1 + 132, // $43C2 + 132, // $43C3 + 132, // $43C4 + 132, // $43C5 + 132, // $43C6 + 132, // $43C7 + 132, // $43C8 + 132, // $43C9 + 132, // $43CA + 132, // $43CB + 132, // $43CC + 132, // $43CD + 132, // $43CE + 132, // $43CF + 132, // $43D0 + 132, // $43D1 + 132, // $43D2 + 132, // $43D3 + 132, // $43D4 + 132, // $43D5 + 132, // $43D6 + 132, // $43D7 + 132, // $43D8 + 132, // $43D9 + 132, // $43DA + 132, // $43DB + 132, // $43DC + 132, // $43DD + 132, // $43DE + 132, // $43DF + 132, // $43E0 + 132, // $43E1 + 132, // $43E2 + 132, // $43E3 + 132, // $43E4 + 132, // $43E5 + 132, // $43E6 + 132, // $43E7 + 132, // $43E8 + 132, // $43E9 + 132, // $43EA + 132, // $43EB + 132, // $43EC + 132, // $43ED + 132, // $43EE + 132, // $43EF + 132, // $43F0 + 132, // $43F1 + 132, // $43F2 + 132, // $43F3 + 132, // $43F4 + 132, // $43F5 + 132, // $43F6 + 132, // $43F7 + 132, // $43F8 + 132, // $43F9 + 132, // $43FA + 132, // $43FB + 132, // $43FC + 132, // $43FD + 132, // $43FE + 132, // $43FF + 132, // $4400 + 132, // $4401 + 132, // $4402 + 132, // $4403 + 132, // $4404 + 132, // $4405 + 132, // $4406 + 132, // $4407 + 132, // $4408 + 132, // $4409 + 132, // $440A + 132, // $440B + 132, // $440C + 132, // $440D + 132, // $440E + 132, // $440F + 132, // $4410 + 132, // $4411 + 132, // $4412 + 132, // $4413 + 132, // $4414 + 132, // $4415 + 132, // $4416 + 132, // $4417 + 132, // $4418 + 132, // $4419 + 132, // $441A + 132, // $441B + 132, // $441C + 132, // $441D + 132, // $441E + 132, // $441F + 132, // $4420 + 132, // $4421 + 132, // $4422 + 132, // $4423 + 132, // $4424 + 132, // $4425 + 132, // $4426 + 132, // $4427 + 132, // $4428 + 132, // $4429 + 132, // $442A + 132, // $442B + 132, // $442C + 132, // $442D + 132, // $442E + 132, // $442F + 132, // $4430 + 132, // $4431 + 132, // $4432 + 132, // $4433 + 132, // $4434 + 132, // $4435 + 132, // $4436 + 132, // $4437 + 132, // $4438 + 132, // $4439 + 132, // $443A + 132, // $443B + 132, // $443C + 132, // $443D + 132, // $443E + 132, // $443F + 132, // $4440 + 132, // $4441 + 132, // $4442 + 132, // $4443 + 132, // $4444 + 132, // $4445 + 132, // $4446 + 132, // $4447 + 132, // $4448 + 132, // $4449 + 132, // $444A + 132, // $444B + 132, // $444C + 132, // $444D + 132, // $444E + 132, // $444F + 132, // $4450 + 132, // $4451 + 132, // $4452 + 132, // $4453 + 132, // $4454 + 132, // $4455 + 132, // $4456 + 132, // $4457 + 132, // $4458 + 132, // $4459 + 132, // $445A + 132, // $445B + 132, // $445C + 132, // $445D + 132, // $445E + 132, // $445F + 132, // $4460 + 132, // $4461 + 132, // $4462 + 132, // $4463 + 132, // $4464 + 132, // $4465 + 132, // $4466 + 132, // $4467 + 132, // $4468 + 132, // $4469 + 132, // $446A + 132, // $446B + 132, // $446C + 132, // $446D + 132, // $446E + 132, // $446F + 132, // $4470 + 132, // $4471 + 132, // $4472 + 132, // $4473 + 132, // $4474 + 132, // $4475 + 132, // $4476 + 132, // $4477 + 132, // $4478 + 132, // $4479 + 132, // $447A + 132, // $447B + 132, // $447C + 132, // $447D + 132, // $447E + 132, // $447F + 132, // $4480 + 132, // $4481 + 132, // $4482 + 132, // $4483 + 132, // $4484 + 132, // $4485 + 132, // $4486 + 132, // $4487 + 132, // $4488 + 132, // $4489 + 132, // $448A + 132, // $448B + 132, // $448C + 132, // $448D + 132, // $448E + 132, // $448F + 132, // $4490 + 132, // $4491 + 132, // $4492 + 132, // $4493 + 132, // $4494 + 132, // $4495 + 132, // $4496 + 132, // $4497 + 132, // $4498 + 132, // $4499 + 132, // $449A + 132, // $449B + 132, // $449C + 132, // $449D + 132, // $449E + 132, // $449F + 132, // $44A0 + 132, // $44A1 + 132, // $44A2 + 132, // $44A3 + 132, // $44A4 + 132, // $44A5 + 132, // $44A6 + 132, // $44A7 + 132, // $44A8 + 132, // $44A9 + 132, // $44AA + 132, // $44AB + 132, // $44AC + 132, // $44AD + 132, // $44AE + 132, // $44AF + 132, // $44B0 + 132, // $44B1 + 132, // $44B2 + 132, // $44B3 + 132, // $44B4 + 132, // $44B5 + 132, // $44B6 + 132, // $44B7 + 132, // $44B8 + 132, // $44B9 + 132, // $44BA + 132, // $44BB + 132, // $44BC + 132, // $44BD + 132, // $44BE + 132, // $44BF + 132, // $44C0 + 132, // $44C1 + 132, // $44C2 + 132, // $44C3 + 132, // $44C4 + 132, // $44C5 + 132, // $44C6 + 132, // $44C7 + 132, // $44C8 + 132, // $44C9 + 132, // $44CA + 132, // $44CB + 132, // $44CC + 132, // $44CD + 132, // $44CE + 132, // $44CF + 132, // $44D0 + 132, // $44D1 + 132, // $44D2 + 132, // $44D3 + 132, // $44D4 + 132, // $44D5 + 132, // $44D6 + 132, // $44D7 + 132, // $44D8 + 132, // $44D9 + 132, // $44DA + 132, // $44DB + 132, // $44DC + 132, // $44DD + 132, // $44DE + 132, // $44DF + 132, // $44E0 + 132, // $44E1 + 132, // $44E2 + 132, // $44E3 + 132, // $44E4 + 132, // $44E5 + 132, // $44E6 + 132, // $44E7 + 132, // $44E8 + 132, // $44E9 + 132, // $44EA + 132, // $44EB + 132, // $44EC + 132, // $44ED + 132, // $44EE + 132, // $44EF + 132, // $44F0 + 132, // $44F1 + 132, // $44F2 + 132, // $44F3 + 132, // $44F4 + 132, // $44F5 + 132, // $44F6 + 132, // $44F7 + 132, // $44F8 + 132, // $44F9 + 132, // $44FA + 132, // $44FB + 132, // $44FC + 132, // $44FD + 132, // $44FE + 132, // $44FF + 132, // $4500 + 132, // $4501 + 132, // $4502 + 132, // $4503 + 132, // $4504 + 132, // $4505 + 132, // $4506 + 132, // $4507 + 132, // $4508 + 132, // $4509 + 132, // $450A + 132, // $450B + 132, // $450C + 132, // $450D + 132, // $450E + 132, // $450F + 132, // $4510 + 132, // $4511 + 132, // $4512 + 132, // $4513 + 132, // $4514 + 132, // $4515 + 132, // $4516 + 132, // $4517 + 132, // $4518 + 132, // $4519 + 132, // $451A + 132, // $451B + 132, // $451C + 132, // $451D + 132, // $451E + 132, // $451F + 132, // $4520 + 132, // $4521 + 132, // $4522 + 132, // $4523 + 132, // $4524 + 132, // $4525 + 132, // $4526 + 132, // $4527 + 132, // $4528 + 132, // $4529 + 132, // $452A + 132, // $452B + 132, // $452C + 132, // $452D + 132, // $452E + 132, // $452F + 132, // $4530 + 132, // $4531 + 132, // $4532 + 132, // $4533 + 132, // $4534 + 132, // $4535 + 132, // $4536 + 132, // $4537 + 132, // $4538 + 132, // $4539 + 132, // $453A + 132, // $453B + 132, // $453C + 132, // $453D + 132, // $453E + 132, // $453F + 132, // $4540 + 132, // $4541 + 132, // $4542 + 132, // $4543 + 132, // $4544 + 132, // $4545 + 132, // $4546 + 132, // $4547 + 132, // $4548 + 132, // $4549 + 132, // $454A + 132, // $454B + 132, // $454C + 132, // $454D + 132, // $454E + 132, // $454F + 132, // $4550 + 132, // $4551 + 132, // $4552 + 132, // $4553 + 132, // $4554 + 132, // $4555 + 132, // $4556 + 132, // $4557 + 132, // $4558 + 132, // $4559 + 132, // $455A + 132, // $455B + 132, // $455C + 132, // $455D + 132, // $455E + 132, // $455F + 132, // $4560 + 132, // $4561 + 132, // $4562 + 132, // $4563 + 132, // $4564 + 132, // $4565 + 132, // $4566 + 132, // $4567 + 132, // $4568 + 132, // $4569 + 132, // $456A + 132, // $456B + 132, // $456C + 132, // $456D + 132, // $456E + 132, // $456F + 132, // $4570 + 132, // $4571 + 132, // $4572 + 132, // $4573 + 132, // $4574 + 132, // $4575 + 132, // $4576 + 132, // $4577 + 132, // $4578 + 132, // $4579 + 132, // $457A + 132, // $457B + 132, // $457C + 132, // $457D + 132, // $457E + 132, // $457F + 132, // $4580 + 132, // $4581 + 132, // $4582 + 132, // $4583 + 132, // $4584 + 132, // $4585 + 132, // $4586 + 132, // $4587 + 132, // $4588 + 132, // $4589 + 132, // $458A + 132, // $458B + 132, // $458C + 132, // $458D + 132, // $458E + 132, // $458F + 132, // $4590 + 132, // $4591 + 132, // $4592 + 132, // $4593 + 132, // $4594 + 132, // $4595 + 132, // $4596 + 132, // $4597 + 132, // $4598 + 132, // $4599 + 132, // $459A + 132, // $459B + 132, // $459C + 132, // $459D + 132, // $459E + 132, // $459F + 132, // $45A0 + 132, // $45A1 + 132, // $45A2 + 132, // $45A3 + 132, // $45A4 + 132, // $45A5 + 132, // $45A6 + 132, // $45A7 + 132, // $45A8 + 132, // $45A9 + 132, // $45AA + 132, // $45AB + 132, // $45AC + 132, // $45AD + 132, // $45AE + 132, // $45AF + 132, // $45B0 + 132, // $45B1 + 132, // $45B2 + 132, // $45B3 + 132, // $45B4 + 132, // $45B5 + 132, // $45B6 + 132, // $45B7 + 132, // $45B8 + 132, // $45B9 + 132, // $45BA + 132, // $45BB + 132, // $45BC + 132, // $45BD + 132, // $45BE + 132, // $45BF + 132, // $45C0 + 132, // $45C1 + 132, // $45C2 + 132, // $45C3 + 132, // $45C4 + 132, // $45C5 + 132, // $45C6 + 132, // $45C7 + 132, // $45C8 + 132, // $45C9 + 132, // $45CA + 132, // $45CB + 132, // $45CC + 132, // $45CD + 132, // $45CE + 132, // $45CF + 132, // $45D0 + 132, // $45D1 + 132, // $45D2 + 132, // $45D3 + 132, // $45D4 + 132, // $45D5 + 132, // $45D6 + 132, // $45D7 + 132, // $45D8 + 132, // $45D9 + 132, // $45DA + 132, // $45DB + 132, // $45DC + 132, // $45DD + 132, // $45DE + 132, // $45DF + 132, // $45E0 + 132, // $45E1 + 132, // $45E2 + 132, // $45E3 + 132, // $45E4 + 132, // $45E5 + 132, // $45E6 + 132, // $45E7 + 132, // $45E8 + 132, // $45E9 + 132, // $45EA + 132, // $45EB + 132, // $45EC + 132, // $45ED + 132, // $45EE + 132, // $45EF + 132, // $45F0 + 132, // $45F1 + 132, // $45F2 + 132, // $45F3 + 132, // $45F4 + 132, // $45F5 + 132, // $45F6 + 132, // $45F7 + 132, // $45F8 + 132, // $45F9 + 132, // $45FA + 132, // $45FB + 132, // $45FC + 132, // $45FD + 132, // $45FE + 132, // $45FF + 132, // $4600 + 132, // $4601 + 132, // $4602 + 132, // $4603 + 132, // $4604 + 132, // $4605 + 132, // $4606 + 132, // $4607 + 132, // $4608 + 132, // $4609 + 132, // $460A + 132, // $460B + 132, // $460C + 132, // $460D + 132, // $460E + 132, // $460F + 132, // $4610 + 132, // $4611 + 132, // $4612 + 132, // $4613 + 132, // $4614 + 132, // $4615 + 132, // $4616 + 132, // $4617 + 132, // $4618 + 132, // $4619 + 132, // $461A + 132, // $461B + 132, // $461C + 132, // $461D + 132, // $461E + 132, // $461F + 132, // $4620 + 132, // $4621 + 132, // $4622 + 132, // $4623 + 132, // $4624 + 132, // $4625 + 132, // $4626 + 132, // $4627 + 132, // $4628 + 132, // $4629 + 132, // $462A + 132, // $462B + 132, // $462C + 132, // $462D + 132, // $462E + 132, // $462F + 132, // $4630 + 132, // $4631 + 132, // $4632 + 132, // $4633 + 132, // $4634 + 132, // $4635 + 132, // $4636 + 132, // $4637 + 132, // $4638 + 132, // $4639 + 132, // $463A + 132, // $463B + 132, // $463C + 132, // $463D + 132, // $463E + 132, // $463F + 132, // $4640 + 132, // $4641 + 132, // $4642 + 132, // $4643 + 132, // $4644 + 132, // $4645 + 132, // $4646 + 132, // $4647 + 132, // $4648 + 132, // $4649 + 132, // $464A + 132, // $464B + 132, // $464C + 132, // $464D + 132, // $464E + 132, // $464F + 132, // $4650 + 132, // $4651 + 132, // $4652 + 132, // $4653 + 132, // $4654 + 132, // $4655 + 132, // $4656 + 132, // $4657 + 132, // $4658 + 132, // $4659 + 132, // $465A + 132, // $465B + 132, // $465C + 132, // $465D + 132, // $465E + 132, // $465F + 132, // $4660 + 132, // $4661 + 132, // $4662 + 132, // $4663 + 132, // $4664 + 132, // $4665 + 132, // $4666 + 132, // $4667 + 132, // $4668 + 132, // $4669 + 132, // $466A + 132, // $466B + 132, // $466C + 132, // $466D + 132, // $466E + 132, // $466F + 132, // $4670 + 132, // $4671 + 132, // $4672 + 132, // $4673 + 132, // $4674 + 132, // $4675 + 132, // $4676 + 132, // $4677 + 132, // $4678 + 132, // $4679 + 132, // $467A + 132, // $467B + 132, // $467C + 132, // $467D + 132, // $467E + 132, // $467F + 132, // $4680 + 132, // $4681 + 132, // $4682 + 132, // $4683 + 132, // $4684 + 132, // $4685 + 132, // $4686 + 132, // $4687 + 132, // $4688 + 132, // $4689 + 132, // $468A + 132, // $468B + 132, // $468C + 132, // $468D + 132, // $468E + 132, // $468F + 132, // $4690 + 132, // $4691 + 132, // $4692 + 132, // $4693 + 132, // $4694 + 132, // $4695 + 132, // $4696 + 132, // $4697 + 132, // $4698 + 132, // $4699 + 132, // $469A + 132, // $469B + 132, // $469C + 132, // $469D + 132, // $469E + 132, // $469F + 132, // $46A0 + 132, // $46A1 + 132, // $46A2 + 132, // $46A3 + 132, // $46A4 + 132, // $46A5 + 132, // $46A6 + 132, // $46A7 + 132, // $46A8 + 132, // $46A9 + 132, // $46AA + 132, // $46AB + 132, // $46AC + 132, // $46AD + 132, // $46AE + 132, // $46AF + 132, // $46B0 + 132, // $46B1 + 132, // $46B2 + 132, // $46B3 + 132, // $46B4 + 132, // $46B5 + 132, // $46B6 + 132, // $46B7 + 132, // $46B8 + 132, // $46B9 + 132, // $46BA + 132, // $46BB + 132, // $46BC + 132, // $46BD + 132, // $46BE + 132, // $46BF + 132, // $46C0 + 132, // $46C1 + 132, // $46C2 + 132, // $46C3 + 132, // $46C4 + 132, // $46C5 + 132, // $46C6 + 132, // $46C7 + 132, // $46C8 + 132, // $46C9 + 132, // $46CA + 132, // $46CB + 132, // $46CC + 132, // $46CD + 132, // $46CE + 132, // $46CF + 132, // $46D0 + 132, // $46D1 + 132, // $46D2 + 132, // $46D3 + 132, // $46D4 + 132, // $46D5 + 132, // $46D6 + 132, // $46D7 + 132, // $46D8 + 132, // $46D9 + 132, // $46DA + 132, // $46DB + 132, // $46DC + 132, // $46DD + 132, // $46DE + 132, // $46DF + 132, // $46E0 + 132, // $46E1 + 132, // $46E2 + 132, // $46E3 + 132, // $46E4 + 132, // $46E5 + 132, // $46E6 + 132, // $46E7 + 132, // $46E8 + 132, // $46E9 + 132, // $46EA + 132, // $46EB + 132, // $46EC + 132, // $46ED + 132, // $46EE + 132, // $46EF + 132, // $46F0 + 132, // $46F1 + 132, // $46F2 + 132, // $46F3 + 132, // $46F4 + 132, // $46F5 + 132, // $46F6 + 132, // $46F7 + 132, // $46F8 + 132, // $46F9 + 132, // $46FA + 132, // $46FB + 132, // $46FC + 132, // $46FD + 132, // $46FE + 132, // $46FF + 132, // $4700 + 132, // $4701 + 132, // $4702 + 132, // $4703 + 132, // $4704 + 132, // $4705 + 132, // $4706 + 132, // $4707 + 132, // $4708 + 132, // $4709 + 132, // $470A + 132, // $470B + 132, // $470C + 132, // $470D + 132, // $470E + 132, // $470F + 132, // $4710 + 132, // $4711 + 132, // $4712 + 132, // $4713 + 132, // $4714 + 132, // $4715 + 132, // $4716 + 132, // $4717 + 132, // $4718 + 132, // $4719 + 132, // $471A + 132, // $471B + 132, // $471C + 132, // $471D + 132, // $471E + 132, // $471F + 132, // $4720 + 132, // $4721 + 132, // $4722 + 132, // $4723 + 132, // $4724 + 132, // $4725 + 132, // $4726 + 132, // $4727 + 132, // $4728 + 132, // $4729 + 132, // $472A + 132, // $472B + 132, // $472C + 132, // $472D + 132, // $472E + 132, // $472F + 132, // $4730 + 132, // $4731 + 132, // $4732 + 132, // $4733 + 132, // $4734 + 132, // $4735 + 132, // $4736 + 132, // $4737 + 132, // $4738 + 132, // $4739 + 132, // $473A + 132, // $473B + 132, // $473C + 132, // $473D + 132, // $473E + 132, // $473F + 132, // $4740 + 132, // $4741 + 132, // $4742 + 132, // $4743 + 132, // $4744 + 132, // $4745 + 132, // $4746 + 132, // $4747 + 132, // $4748 + 132, // $4749 + 132, // $474A + 132, // $474B + 132, // $474C + 132, // $474D + 132, // $474E + 132, // $474F + 132, // $4750 + 132, // $4751 + 132, // $4752 + 132, // $4753 + 132, // $4754 + 132, // $4755 + 132, // $4756 + 132, // $4757 + 132, // $4758 + 132, // $4759 + 132, // $475A + 132, // $475B + 132, // $475C + 132, // $475D + 132, // $475E + 132, // $475F + 132, // $4760 + 132, // $4761 + 132, // $4762 + 132, // $4763 + 132, // $4764 + 132, // $4765 + 132, // $4766 + 132, // $4767 + 132, // $4768 + 132, // $4769 + 132, // $476A + 132, // $476B + 132, // $476C + 132, // $476D + 132, // $476E + 132, // $476F + 132, // $4770 + 132, // $4771 + 132, // $4772 + 132, // $4773 + 132, // $4774 + 132, // $4775 + 132, // $4776 + 132, // $4777 + 132, // $4778 + 132, // $4779 + 132, // $477A + 132, // $477B + 132, // $477C + 132, // $477D + 132, // $477E + 132, // $477F + 132, // $4780 + 132, // $4781 + 132, // $4782 + 132, // $4783 + 132, // $4784 + 132, // $4785 + 132, // $4786 + 132, // $4787 + 132, // $4788 + 132, // $4789 + 132, // $478A + 132, // $478B + 132, // $478C + 132, // $478D + 132, // $478E + 132, // $478F + 132, // $4790 + 132, // $4791 + 132, // $4792 + 132, // $4793 + 132, // $4794 + 132, // $4795 + 132, // $4796 + 132, // $4797 + 132, // $4798 + 132, // $4799 + 132, // $479A + 132, // $479B + 132, // $479C + 132, // $479D + 132, // $479E + 132, // $479F + 132, // $47A0 + 132, // $47A1 + 132, // $47A2 + 132, // $47A3 + 132, // $47A4 + 132, // $47A5 + 132, // $47A6 + 132, // $47A7 + 132, // $47A8 + 132, // $47A9 + 132, // $47AA + 132, // $47AB + 132, // $47AC + 132, // $47AD + 132, // $47AE + 132, // $47AF + 132, // $47B0 + 132, // $47B1 + 132, // $47B2 + 132, // $47B3 + 132, // $47B4 + 132, // $47B5 + 132, // $47B6 + 132, // $47B7 + 132, // $47B8 + 132, // $47B9 + 132, // $47BA + 132, // $47BB + 132, // $47BC + 132, // $47BD + 132, // $47BE + 132, // $47BF + 132, // $47C0 + 132, // $47C1 + 132, // $47C2 + 132, // $47C3 + 132, // $47C4 + 132, // $47C5 + 132, // $47C6 + 132, // $47C7 + 132, // $47C8 + 132, // $47C9 + 132, // $47CA + 132, // $47CB + 132, // $47CC + 132, // $47CD + 132, // $47CE + 132, // $47CF + 132, // $47D0 + 132, // $47D1 + 132, // $47D2 + 132, // $47D3 + 132, // $47D4 + 132, // $47D5 + 132, // $47D6 + 132, // $47D7 + 132, // $47D8 + 132, // $47D9 + 132, // $47DA + 132, // $47DB + 132, // $47DC + 132, // $47DD + 132, // $47DE + 132, // $47DF + 132, // $47E0 + 132, // $47E1 + 132, // $47E2 + 132, // $47E3 + 132, // $47E4 + 132, // $47E5 + 132, // $47E6 + 132, // $47E7 + 132, // $47E8 + 132, // $47E9 + 132, // $47EA + 132, // $47EB + 132, // $47EC + 132, // $47ED + 132, // $47EE + 132, // $47EF + 132, // $47F0 + 132, // $47F1 + 132, // $47F2 + 132, // $47F3 + 132, // $47F4 + 132, // $47F5 + 132, // $47F6 + 132, // $47F7 + 132, // $47F8 + 132, // $47F9 + 132, // $47FA + 132, // $47FB + 132, // $47FC + 132, // $47FD + 132, // $47FE + 132, // $47FF + 132, // $4800 + 132, // $4801 + 132, // $4802 + 132, // $4803 + 132, // $4804 + 132, // $4805 + 132, // $4806 + 132, // $4807 + 132, // $4808 + 132, // $4809 + 132, // $480A + 132, // $480B + 132, // $480C + 132, // $480D + 132, // $480E + 132, // $480F + 132, // $4810 + 132, // $4811 + 132, // $4812 + 132, // $4813 + 132, // $4814 + 132, // $4815 + 132, // $4816 + 132, // $4817 + 132, // $4818 + 132, // $4819 + 132, // $481A + 132, // $481B + 132, // $481C + 132, // $481D + 132, // $481E + 132, // $481F + 132, // $4820 + 132, // $4821 + 132, // $4822 + 132, // $4823 + 132, // $4824 + 132, // $4825 + 132, // $4826 + 132, // $4827 + 132, // $4828 + 132, // $4829 + 132, // $482A + 132, // $482B + 132, // $482C + 132, // $482D + 132, // $482E + 132, // $482F + 132, // $4830 + 132, // $4831 + 132, // $4832 + 132, // $4833 + 132, // $4834 + 132, // $4835 + 132, // $4836 + 132, // $4837 + 132, // $4838 + 132, // $4839 + 132, // $483A + 132, // $483B + 132, // $483C + 132, // $483D + 132, // $483E + 132, // $483F + 132, // $4840 + 132, // $4841 + 132, // $4842 + 132, // $4843 + 132, // $4844 + 132, // $4845 + 132, // $4846 + 132, // $4847 + 132, // $4848 + 132, // $4849 + 132, // $484A + 132, // $484B + 132, // $484C + 132, // $484D + 132, // $484E + 132, // $484F + 132, // $4850 + 132, // $4851 + 132, // $4852 + 132, // $4853 + 132, // $4854 + 132, // $4855 + 132, // $4856 + 132, // $4857 + 132, // $4858 + 132, // $4859 + 132, // $485A + 132, // $485B + 132, // $485C + 132, // $485D + 132, // $485E + 132, // $485F + 132, // $4860 + 132, // $4861 + 132, // $4862 + 132, // $4863 + 132, // $4864 + 132, // $4865 + 132, // $4866 + 132, // $4867 + 132, // $4868 + 132, // $4869 + 132, // $486A + 132, // $486B + 132, // $486C + 132, // $486D + 132, // $486E + 132, // $486F + 132, // $4870 + 132, // $4871 + 132, // $4872 + 132, // $4873 + 132, // $4874 + 132, // $4875 + 132, // $4876 + 132, // $4877 + 132, // $4878 + 132, // $4879 + 132, // $487A + 132, // $487B + 132, // $487C + 132, // $487D + 132, // $487E + 132, // $487F + 132, // $4880 + 132, // $4881 + 132, // $4882 + 132, // $4883 + 132, // $4884 + 132, // $4885 + 132, // $4886 + 132, // $4887 + 132, // $4888 + 132, // $4889 + 132, // $488A + 132, // $488B + 132, // $488C + 132, // $488D + 132, // $488E + 132, // $488F + 132, // $4890 + 132, // $4891 + 132, // $4892 + 132, // $4893 + 132, // $4894 + 132, // $4895 + 132, // $4896 + 132, // $4897 + 132, // $4898 + 132, // $4899 + 132, // $489A + 132, // $489B + 132, // $489C + 132, // $489D + 132, // $489E + 132, // $489F + 132, // $48A0 + 132, // $48A1 + 132, // $48A2 + 132, // $48A3 + 132, // $48A4 + 132, // $48A5 + 132, // $48A6 + 132, // $48A7 + 132, // $48A8 + 132, // $48A9 + 132, // $48AA + 132, // $48AB + 132, // $48AC + 132, // $48AD + 132, // $48AE + 132, // $48AF + 132, // $48B0 + 132, // $48B1 + 132, // $48B2 + 132, // $48B3 + 132, // $48B4 + 132, // $48B5 + 132, // $48B6 + 132, // $48B7 + 132, // $48B8 + 132, // $48B9 + 132, // $48BA + 132, // $48BB + 132, // $48BC + 132, // $48BD + 132, // $48BE + 132, // $48BF + 132, // $48C0 + 132, // $48C1 + 132, // $48C2 + 132, // $48C3 + 132, // $48C4 + 132, // $48C5 + 132, // $48C6 + 132, // $48C7 + 132, // $48C8 + 132, // $48C9 + 132, // $48CA + 132, // $48CB + 132, // $48CC + 132, // $48CD + 132, // $48CE + 132, // $48CF + 132, // $48D0 + 132, // $48D1 + 132, // $48D2 + 132, // $48D3 + 132, // $48D4 + 132, // $48D5 + 132, // $48D6 + 132, // $48D7 + 132, // $48D8 + 132, // $48D9 + 132, // $48DA + 132, // $48DB + 132, // $48DC + 132, // $48DD + 132, // $48DE + 132, // $48DF + 132, // $48E0 + 132, // $48E1 + 132, // $48E2 + 132, // $48E3 + 132, // $48E4 + 132, // $48E5 + 132, // $48E6 + 132, // $48E7 + 132, // $48E8 + 132, // $48E9 + 132, // $48EA + 132, // $48EB + 132, // $48EC + 132, // $48ED + 132, // $48EE + 132, // $48EF + 132, // $48F0 + 132, // $48F1 + 132, // $48F2 + 132, // $48F3 + 132, // $48F4 + 132, // $48F5 + 132, // $48F6 + 132, // $48F7 + 132, // $48F8 + 132, // $48F9 + 132, // $48FA + 132, // $48FB + 132, // $48FC + 132, // $48FD + 132, // $48FE + 132, // $48FF + 132, // $4900 + 132, // $4901 + 132, // $4902 + 132, // $4903 + 132, // $4904 + 132, // $4905 + 132, // $4906 + 132, // $4907 + 132, // $4908 + 132, // $4909 + 132, // $490A + 132, // $490B + 132, // $490C + 132, // $490D + 132, // $490E + 132, // $490F + 132, // $4910 + 132, // $4911 + 132, // $4912 + 132, // $4913 + 132, // $4914 + 132, // $4915 + 132, // $4916 + 132, // $4917 + 132, // $4918 + 132, // $4919 + 132, // $491A + 132, // $491B + 132, // $491C + 132, // $491D + 132, // $491E + 132, // $491F + 132, // $4920 + 132, // $4921 + 132, // $4922 + 132, // $4923 + 132, // $4924 + 132, // $4925 + 132, // $4926 + 132, // $4927 + 132, // $4928 + 132, // $4929 + 132, // $492A + 132, // $492B + 132, // $492C + 132, // $492D + 132, // $492E + 132, // $492F + 132, // $4930 + 132, // $4931 + 132, // $4932 + 132, // $4933 + 132, // $4934 + 132, // $4935 + 132, // $4936 + 132, // $4937 + 132, // $4938 + 132, // $4939 + 132, // $493A + 132, // $493B + 132, // $493C + 132, // $493D + 132, // $493E + 132, // $493F + 132, // $4940 + 132, // $4941 + 132, // $4942 + 132, // $4943 + 132, // $4944 + 132, // $4945 + 132, // $4946 + 132, // $4947 + 132, // $4948 + 132, // $4949 + 132, // $494A + 132, // $494B + 132, // $494C + 132, // $494D + 132, // $494E + 132, // $494F + 132, // $4950 + 132, // $4951 + 132, // $4952 + 132, // $4953 + 132, // $4954 + 132, // $4955 + 132, // $4956 + 132, // $4957 + 132, // $4958 + 132, // $4959 + 132, // $495A + 132, // $495B + 132, // $495C + 132, // $495D + 132, // $495E + 132, // $495F + 132, // $4960 + 132, // $4961 + 132, // $4962 + 132, // $4963 + 132, // $4964 + 132, // $4965 + 132, // $4966 + 132, // $4967 + 132, // $4968 + 132, // $4969 + 132, // $496A + 132, // $496B + 132, // $496C + 132, // $496D + 132, // $496E + 132, // $496F + 132, // $4970 + 132, // $4971 + 132, // $4972 + 132, // $4973 + 132, // $4974 + 132, // $4975 + 132, // $4976 + 132, // $4977 + 132, // $4978 + 132, // $4979 + 132, // $497A + 132, // $497B + 132, // $497C + 132, // $497D + 132, // $497E + 132, // $497F + 132, // $4980 + 132, // $4981 + 132, // $4982 + 132, // $4983 + 132, // $4984 + 132, // $4985 + 132, // $4986 + 132, // $4987 + 132, // $4988 + 132, // $4989 + 132, // $498A + 132, // $498B + 132, // $498C + 132, // $498D + 132, // $498E + 132, // $498F + 132, // $4990 + 132, // $4991 + 132, // $4992 + 132, // $4993 + 132, // $4994 + 132, // $4995 + 132, // $4996 + 132, // $4997 + 132, // $4998 + 132, // $4999 + 132, // $499A + 132, // $499B + 132, // $499C + 132, // $499D + 132, // $499E + 132, // $499F + 132, // $49A0 + 132, // $49A1 + 132, // $49A2 + 132, // $49A3 + 132, // $49A4 + 132, // $49A5 + 132, // $49A6 + 132, // $49A7 + 132, // $49A8 + 132, // $49A9 + 132, // $49AA + 132, // $49AB + 132, // $49AC + 132, // $49AD + 132, // $49AE + 132, // $49AF + 132, // $49B0 + 132, // $49B1 + 132, // $49B2 + 132, // $49B3 + 132, // $49B4 + 132, // $49B5 + 132, // $49B6 + 132, // $49B7 + 132, // $49B8 + 132, // $49B9 + 132, // $49BA + 132, // $49BB + 132, // $49BC + 132, // $49BD + 132, // $49BE + 132, // $49BF + 132, // $49C0 + 132, // $49C1 + 132, // $49C2 + 132, // $49C3 + 132, // $49C4 + 132, // $49C5 + 132, // $49C6 + 132, // $49C7 + 132, // $49C8 + 132, // $49C9 + 132, // $49CA + 132, // $49CB + 132, // $49CC + 132, // $49CD + 132, // $49CE + 132, // $49CF + 132, // $49D0 + 132, // $49D1 + 132, // $49D2 + 132, // $49D3 + 132, // $49D4 + 132, // $49D5 + 132, // $49D6 + 132, // $49D7 + 132, // $49D8 + 132, // $49D9 + 132, // $49DA + 132, // $49DB + 132, // $49DC + 132, // $49DD + 132, // $49DE + 132, // $49DF + 132, // $49E0 + 132, // $49E1 + 132, // $49E2 + 132, // $49E3 + 132, // $49E4 + 132, // $49E5 + 132, // $49E6 + 132, // $49E7 + 132, // $49E8 + 132, // $49E9 + 132, // $49EA + 132, // $49EB + 132, // $49EC + 132, // $49ED + 132, // $49EE + 132, // $49EF + 132, // $49F0 + 132, // $49F1 + 132, // $49F2 + 132, // $49F3 + 132, // $49F4 + 132, // $49F5 + 132, // $49F6 + 132, // $49F7 + 132, // $49F8 + 132, // $49F9 + 132, // $49FA + 132, // $49FB + 132, // $49FC + 132, // $49FD + 132, // $49FE + 132, // $49FF + 132, // $4A00 + 132, // $4A01 + 132, // $4A02 + 132, // $4A03 + 132, // $4A04 + 132, // $4A05 + 132, // $4A06 + 132, // $4A07 + 132, // $4A08 + 132, // $4A09 + 132, // $4A0A + 132, // $4A0B + 132, // $4A0C + 132, // $4A0D + 132, // $4A0E + 132, // $4A0F + 132, // $4A10 + 132, // $4A11 + 132, // $4A12 + 132, // $4A13 + 132, // $4A14 + 132, // $4A15 + 132, // $4A16 + 132, // $4A17 + 132, // $4A18 + 132, // $4A19 + 132, // $4A1A + 132, // $4A1B + 132, // $4A1C + 132, // $4A1D + 132, // $4A1E + 132, // $4A1F + 132, // $4A20 + 132, // $4A21 + 132, // $4A22 + 132, // $4A23 + 132, // $4A24 + 132, // $4A25 + 132, // $4A26 + 132, // $4A27 + 132, // $4A28 + 132, // $4A29 + 132, // $4A2A + 132, // $4A2B + 132, // $4A2C + 132, // $4A2D + 132, // $4A2E + 132, // $4A2F + 132, // $4A30 + 132, // $4A31 + 132, // $4A32 + 132, // $4A33 + 132, // $4A34 + 132, // $4A35 + 132, // $4A36 + 132, // $4A37 + 132, // $4A38 + 132, // $4A39 + 132, // $4A3A + 132, // $4A3B + 132, // $4A3C + 132, // $4A3D + 132, // $4A3E + 132, // $4A3F + 132, // $4A40 + 132, // $4A41 + 132, // $4A42 + 132, // $4A43 + 132, // $4A44 + 132, // $4A45 + 132, // $4A46 + 132, // $4A47 + 132, // $4A48 + 132, // $4A49 + 132, // $4A4A + 132, // $4A4B + 132, // $4A4C + 132, // $4A4D + 132, // $4A4E + 132, // $4A4F + 132, // $4A50 + 132, // $4A51 + 132, // $4A52 + 132, // $4A53 + 132, // $4A54 + 132, // $4A55 + 132, // $4A56 + 132, // $4A57 + 132, // $4A58 + 132, // $4A59 + 132, // $4A5A + 132, // $4A5B + 132, // $4A5C + 132, // $4A5D + 132, // $4A5E + 132, // $4A5F + 132, // $4A60 + 132, // $4A61 + 132, // $4A62 + 132, // $4A63 + 132, // $4A64 + 132, // $4A65 + 132, // $4A66 + 132, // $4A67 + 132, // $4A68 + 132, // $4A69 + 132, // $4A6A + 132, // $4A6B + 132, // $4A6C + 132, // $4A6D + 132, // $4A6E + 132, // $4A6F + 132, // $4A70 + 132, // $4A71 + 132, // $4A72 + 132, // $4A73 + 132, // $4A74 + 132, // $4A75 + 132, // $4A76 + 132, // $4A77 + 132, // $4A78 + 132, // $4A79 + 132, // $4A7A + 132, // $4A7B + 132, // $4A7C + 132, // $4A7D + 132, // $4A7E + 132, // $4A7F + 132, // $4A80 + 132, // $4A81 + 132, // $4A82 + 132, // $4A83 + 132, // $4A84 + 132, // $4A85 + 132, // $4A86 + 132, // $4A87 + 132, // $4A88 + 132, // $4A89 + 132, // $4A8A + 132, // $4A8B + 132, // $4A8C + 132, // $4A8D + 132, // $4A8E + 132, // $4A8F + 132, // $4A90 + 132, // $4A91 + 132, // $4A92 + 132, // $4A93 + 132, // $4A94 + 132, // $4A95 + 132, // $4A96 + 132, // $4A97 + 132, // $4A98 + 132, // $4A99 + 132, // $4A9A + 132, // $4A9B + 132, // $4A9C + 132, // $4A9D + 132, // $4A9E + 132, // $4A9F + 132, // $4AA0 + 132, // $4AA1 + 132, // $4AA2 + 132, // $4AA3 + 132, // $4AA4 + 132, // $4AA5 + 132, // $4AA6 + 132, // $4AA7 + 132, // $4AA8 + 132, // $4AA9 + 132, // $4AAA + 132, // $4AAB + 132, // $4AAC + 132, // $4AAD + 132, // $4AAE + 132, // $4AAF + 132, // $4AB0 + 132, // $4AB1 + 132, // $4AB2 + 132, // $4AB3 + 132, // $4AB4 + 132, // $4AB5 + 132, // $4AB6 + 132, // $4AB7 + 132, // $4AB8 + 132, // $4AB9 + 132, // $4ABA + 132, // $4ABB + 132, // $4ABC + 132, // $4ABD + 132, // $4ABE + 132, // $4ABF + 132, // $4AC0 + 132, // $4AC1 + 132, // $4AC2 + 132, // $4AC3 + 132, // $4AC4 + 132, // $4AC5 + 132, // $4AC6 + 132, // $4AC7 + 132, // $4AC8 + 132, // $4AC9 + 132, // $4ACA + 132, // $4ACB + 132, // $4ACC + 132, // $4ACD + 132, // $4ACE + 132, // $4ACF + 132, // $4AD0 + 132, // $4AD1 + 132, // $4AD2 + 132, // $4AD3 + 132, // $4AD4 + 132, // $4AD5 + 132, // $4AD6 + 132, // $4AD7 + 132, // $4AD8 + 132, // $4AD9 + 132, // $4ADA + 132, // $4ADB + 132, // $4ADC + 132, // $4ADD + 132, // $4ADE + 132, // $4ADF + 132, // $4AE0 + 132, // $4AE1 + 132, // $4AE2 + 132, // $4AE3 + 132, // $4AE4 + 132, // $4AE5 + 132, // $4AE6 + 132, // $4AE7 + 132, // $4AE8 + 132, // $4AE9 + 132, // $4AEA + 132, // $4AEB + 132, // $4AEC + 132, // $4AED + 132, // $4AEE + 132, // $4AEF + 132, // $4AF0 + 132, // $4AF1 + 132, // $4AF2 + 132, // $4AF3 + 132, // $4AF4 + 132, // $4AF5 + 132, // $4AF6 + 132, // $4AF7 + 132, // $4AF8 + 132, // $4AF9 + 132, // $4AFA + 132, // $4AFB + 132, // $4AFC + 132, // $4AFD + 132, // $4AFE + 132, // $4AFF + 132, // $4B00 + 132, // $4B01 + 132, // $4B02 + 132, // $4B03 + 132, // $4B04 + 132, // $4B05 + 132, // $4B06 + 132, // $4B07 + 132, // $4B08 + 132, // $4B09 + 132, // $4B0A + 132, // $4B0B + 132, // $4B0C + 132, // $4B0D + 132, // $4B0E + 132, // $4B0F + 132, // $4B10 + 132, // $4B11 + 132, // $4B12 + 132, // $4B13 + 132, // $4B14 + 132, // $4B15 + 132, // $4B16 + 132, // $4B17 + 132, // $4B18 + 132, // $4B19 + 132, // $4B1A + 132, // $4B1B + 132, // $4B1C + 132, // $4B1D + 132, // $4B1E + 132, // $4B1F + 132, // $4B20 + 132, // $4B21 + 132, // $4B22 + 132, // $4B23 + 132, // $4B24 + 132, // $4B25 + 132, // $4B26 + 132, // $4B27 + 132, // $4B28 + 132, // $4B29 + 132, // $4B2A + 132, // $4B2B + 132, // $4B2C + 132, // $4B2D + 132, // $4B2E + 132, // $4B2F + 132, // $4B30 + 132, // $4B31 + 132, // $4B32 + 132, // $4B33 + 132, // $4B34 + 132, // $4B35 + 132, // $4B36 + 132, // $4B37 + 132, // $4B38 + 132, // $4B39 + 132, // $4B3A + 132, // $4B3B + 132, // $4B3C + 132, // $4B3D + 132, // $4B3E + 132, // $4B3F + 132, // $4B40 + 132, // $4B41 + 132, // $4B42 + 132, // $4B43 + 132, // $4B44 + 132, // $4B45 + 132, // $4B46 + 132, // $4B47 + 132, // $4B48 + 132, // $4B49 + 132, // $4B4A + 132, // $4B4B + 132, // $4B4C + 132, // $4B4D + 132, // $4B4E + 132, // $4B4F + 132, // $4B50 + 132, // $4B51 + 132, // $4B52 + 132, // $4B53 + 132, // $4B54 + 132, // $4B55 + 132, // $4B56 + 132, // $4B57 + 132, // $4B58 + 132, // $4B59 + 132, // $4B5A + 132, // $4B5B + 132, // $4B5C + 132, // $4B5D + 132, // $4B5E + 132, // $4B5F + 132, // $4B60 + 132, // $4B61 + 132, // $4B62 + 132, // $4B63 + 132, // $4B64 + 132, // $4B65 + 132, // $4B66 + 132, // $4B67 + 132, // $4B68 + 132, // $4B69 + 132, // $4B6A + 132, // $4B6B + 132, // $4B6C + 132, // $4B6D + 132, // $4B6E + 132, // $4B6F + 132, // $4B70 + 132, // $4B71 + 132, // $4B72 + 132, // $4B73 + 132, // $4B74 + 132, // $4B75 + 132, // $4B76 + 132, // $4B77 + 132, // $4B78 + 132, // $4B79 + 132, // $4B7A + 132, // $4B7B + 132, // $4B7C + 132, // $4B7D + 132, // $4B7E + 132, // $4B7F + 132, // $4B80 + 132, // $4B81 + 132, // $4B82 + 132, // $4B83 + 132, // $4B84 + 132, // $4B85 + 132, // $4B86 + 132, // $4B87 + 132, // $4B88 + 132, // $4B89 + 132, // $4B8A + 132, // $4B8B + 132, // $4B8C + 132, // $4B8D + 132, // $4B8E + 132, // $4B8F + 132, // $4B90 + 132, // $4B91 + 132, // $4B92 + 132, // $4B93 + 132, // $4B94 + 132, // $4B95 + 132, // $4B96 + 132, // $4B97 + 132, // $4B98 + 132, // $4B99 + 132, // $4B9A + 132, // $4B9B + 132, // $4B9C + 132, // $4B9D + 132, // $4B9E + 132, // $4B9F + 132, // $4BA0 + 132, // $4BA1 + 132, // $4BA2 + 132, // $4BA3 + 132, // $4BA4 + 132, // $4BA5 + 132, // $4BA6 + 132, // $4BA7 + 132, // $4BA8 + 132, // $4BA9 + 132, // $4BAA + 132, // $4BAB + 132, // $4BAC + 132, // $4BAD + 132, // $4BAE + 132, // $4BAF + 132, // $4BB0 + 132, // $4BB1 + 132, // $4BB2 + 132, // $4BB3 + 132, // $4BB4 + 132, // $4BB5 + 132, // $4BB6 + 132, // $4BB7 + 132, // $4BB8 + 132, // $4BB9 + 132, // $4BBA + 132, // $4BBB + 132, // $4BBC + 132, // $4BBD + 132, // $4BBE + 132, // $4BBF + 132, // $4BC0 + 132, // $4BC1 + 132, // $4BC2 + 132, // $4BC3 + 132, // $4BC4 + 132, // $4BC5 + 132, // $4BC6 + 132, // $4BC7 + 132, // $4BC8 + 132, // $4BC9 + 132, // $4BCA + 132, // $4BCB + 132, // $4BCC + 132, // $4BCD + 132, // $4BCE + 132, // $4BCF + 132, // $4BD0 + 132, // $4BD1 + 132, // $4BD2 + 132, // $4BD3 + 132, // $4BD4 + 132, // $4BD5 + 132, // $4BD6 + 132, // $4BD7 + 132, // $4BD8 + 132, // $4BD9 + 132, // $4BDA + 132, // $4BDB + 132, // $4BDC + 132, // $4BDD + 132, // $4BDE + 132, // $4BDF + 132, // $4BE0 + 132, // $4BE1 + 132, // $4BE2 + 132, // $4BE3 + 132, // $4BE4 + 132, // $4BE5 + 132, // $4BE6 + 132, // $4BE7 + 132, // $4BE8 + 132, // $4BE9 + 132, // $4BEA + 132, // $4BEB + 132, // $4BEC + 132, // $4BED + 132, // $4BEE + 132, // $4BEF + 132, // $4BF0 + 132, // $4BF1 + 132, // $4BF2 + 132, // $4BF3 + 132, // $4BF4 + 132, // $4BF5 + 132, // $4BF6 + 132, // $4BF7 + 132, // $4BF8 + 132, // $4BF9 + 132, // $4BFA + 132, // $4BFB + 132, // $4BFC + 132, // $4BFD + 132, // $4BFE + 132, // $4BFF + 132, // $4C00 + 132, // $4C01 + 132, // $4C02 + 132, // $4C03 + 132, // $4C04 + 132, // $4C05 + 132, // $4C06 + 132, // $4C07 + 132, // $4C08 + 132, // $4C09 + 132, // $4C0A + 132, // $4C0B + 132, // $4C0C + 132, // $4C0D + 132, // $4C0E + 132, // $4C0F + 132, // $4C10 + 132, // $4C11 + 132, // $4C12 + 132, // $4C13 + 132, // $4C14 + 132, // $4C15 + 132, // $4C16 + 132, // $4C17 + 132, // $4C18 + 132, // $4C19 + 132, // $4C1A + 132, // $4C1B + 132, // $4C1C + 132, // $4C1D + 132, // $4C1E + 132, // $4C1F + 132, // $4C20 + 132, // $4C21 + 132, // $4C22 + 132, // $4C23 + 132, // $4C24 + 132, // $4C25 + 132, // $4C26 + 132, // $4C27 + 132, // $4C28 + 132, // $4C29 + 132, // $4C2A + 132, // $4C2B + 132, // $4C2C + 132, // $4C2D + 132, // $4C2E + 132, // $4C2F + 132, // $4C30 + 132, // $4C31 + 132, // $4C32 + 132, // $4C33 + 132, // $4C34 + 132, // $4C35 + 132, // $4C36 + 132, // $4C37 + 132, // $4C38 + 132, // $4C39 + 132, // $4C3A + 132, // $4C3B + 132, // $4C3C + 132, // $4C3D + 132, // $4C3E + 132, // $4C3F + 132, // $4C40 + 132, // $4C41 + 132, // $4C42 + 132, // $4C43 + 132, // $4C44 + 132, // $4C45 + 132, // $4C46 + 132, // $4C47 + 132, // $4C48 + 132, // $4C49 + 132, // $4C4A + 132, // $4C4B + 132, // $4C4C + 132, // $4C4D + 132, // $4C4E + 132, // $4C4F + 132, // $4C50 + 132, // $4C51 + 132, // $4C52 + 132, // $4C53 + 132, // $4C54 + 132, // $4C55 + 132, // $4C56 + 132, // $4C57 + 132, // $4C58 + 132, // $4C59 + 132, // $4C5A + 132, // $4C5B + 132, // $4C5C + 132, // $4C5D + 132, // $4C5E + 132, // $4C5F + 132, // $4C60 + 132, // $4C61 + 132, // $4C62 + 132, // $4C63 + 132, // $4C64 + 132, // $4C65 + 132, // $4C66 + 132, // $4C67 + 132, // $4C68 + 132, // $4C69 + 132, // $4C6A + 132, // $4C6B + 132, // $4C6C + 132, // $4C6D + 132, // $4C6E + 132, // $4C6F + 132, // $4C70 + 132, // $4C71 + 132, // $4C72 + 132, // $4C73 + 132, // $4C74 + 132, // $4C75 + 132, // $4C76 + 132, // $4C77 + 132, // $4C78 + 132, // $4C79 + 132, // $4C7A + 132, // $4C7B + 132, // $4C7C + 132, // $4C7D + 132, // $4C7E + 132, // $4C7F + 132, // $4C80 + 132, // $4C81 + 132, // $4C82 + 132, // $4C83 + 132, // $4C84 + 132, // $4C85 + 132, // $4C86 + 132, // $4C87 + 132, // $4C88 + 132, // $4C89 + 132, // $4C8A + 132, // $4C8B + 132, // $4C8C + 132, // $4C8D + 132, // $4C8E + 132, // $4C8F + 132, // $4C90 + 132, // $4C91 + 132, // $4C92 + 132, // $4C93 + 132, // $4C94 + 132, // $4C95 + 132, // $4C96 + 132, // $4C97 + 132, // $4C98 + 132, // $4C99 + 132, // $4C9A + 132, // $4C9B + 132, // $4C9C + 132, // $4C9D + 132, // $4C9E + 132, // $4C9F + 132, // $4CA0 + 132, // $4CA1 + 132, // $4CA2 + 132, // $4CA3 + 132, // $4CA4 + 132, // $4CA5 + 132, // $4CA6 + 132, // $4CA7 + 132, // $4CA8 + 132, // $4CA9 + 132, // $4CAA + 132, // $4CAB + 132, // $4CAC + 132, // $4CAD + 132, // $4CAE + 132, // $4CAF + 132, // $4CB0 + 132, // $4CB1 + 132, // $4CB2 + 132, // $4CB3 + 132, // $4CB4 + 132, // $4CB5 + 132, // $4CB6 + 132, // $4CB7 + 132, // $4CB8 + 132, // $4CB9 + 132, // $4CBA + 132, // $4CBB + 132, // $4CBC + 132, // $4CBD + 132, // $4CBE + 132, // $4CBF + 132, // $4CC0 + 132, // $4CC1 + 132, // $4CC2 + 132, // $4CC3 + 132, // $4CC4 + 132, // $4CC5 + 132, // $4CC6 + 132, // $4CC7 + 132, // $4CC8 + 132, // $4CC9 + 132, // $4CCA + 132, // $4CCB + 132, // $4CCC + 132, // $4CCD + 132, // $4CCE + 132, // $4CCF + 132, // $4CD0 + 132, // $4CD1 + 132, // $4CD2 + 132, // $4CD3 + 132, // $4CD4 + 132, // $4CD5 + 132, // $4CD6 + 132, // $4CD7 + 132, // $4CD8 + 132, // $4CD9 + 132, // $4CDA + 132, // $4CDB + 132, // $4CDC + 132, // $4CDD + 132, // $4CDE + 132, // $4CDF + 132, // $4CE0 + 132, // $4CE1 + 132, // $4CE2 + 132, // $4CE3 + 132, // $4CE4 + 132, // $4CE5 + 132, // $4CE6 + 132, // $4CE7 + 132, // $4CE8 + 132, // $4CE9 + 132, // $4CEA + 132, // $4CEB + 132, // $4CEC + 132, // $4CED + 132, // $4CEE + 132, // $4CEF + 132, // $4CF0 + 132, // $4CF1 + 132, // $4CF2 + 132, // $4CF3 + 132, // $4CF4 + 132, // $4CF5 + 132, // $4CF6 + 132, // $4CF7 + 132, // $4CF8 + 132, // $4CF9 + 132, // $4CFA + 132, // $4CFB + 132, // $4CFC + 132, // $4CFD + 132, // $4CFE + 132, // $4CFF + 132, // $4D00 + 132, // $4D01 + 132, // $4D02 + 132, // $4D03 + 132, // $4D04 + 132, // $4D05 + 132, // $4D06 + 132, // $4D07 + 132, // $4D08 + 132, // $4D09 + 132, // $4D0A + 132, // $4D0B + 132, // $4D0C + 132, // $4D0D + 132, // $4D0E + 132, // $4D0F + 132, // $4D10 + 132, // $4D11 + 132, // $4D12 + 132, // $4D13 + 132, // $4D14 + 132, // $4D15 + 132, // $4D16 + 132, // $4D17 + 132, // $4D18 + 132, // $4D19 + 132, // $4D1A + 132, // $4D1B + 132, // $4D1C + 132, // $4D1D + 132, // $4D1E + 132, // $4D1F + 132, // $4D20 + 132, // $4D21 + 132, // $4D22 + 132, // $4D23 + 132, // $4D24 + 132, // $4D25 + 132, // $4D26 + 132, // $4D27 + 132, // $4D28 + 132, // $4D29 + 132, // $4D2A + 132, // $4D2B + 132, // $4D2C + 132, // $4D2D + 132, // $4D2E + 132, // $4D2F + 132, // $4D30 + 132, // $4D31 + 132, // $4D32 + 132, // $4D33 + 132, // $4D34 + 132, // $4D35 + 132, // $4D36 + 132, // $4D37 + 132, // $4D38 + 132, // $4D39 + 132, // $4D3A + 132, // $4D3B + 132, // $4D3C + 132, // $4D3D + 132, // $4D3E + 132, // $4D3F + 132, // $4D40 + 132, // $4D41 + 132, // $4D42 + 132, // $4D43 + 132, // $4D44 + 132, // $4D45 + 132, // $4D46 + 132, // $4D47 + 132, // $4D48 + 132, // $4D49 + 132, // $4D4A + 132, // $4D4B + 132, // $4D4C + 132, // $4D4D + 132, // $4D4E + 132, // $4D4F + 132, // $4D50 + 132, // $4D51 + 132, // $4D52 + 132, // $4D53 + 132, // $4D54 + 132, // $4D55 + 132, // $4D56 + 132, // $4D57 + 132, // $4D58 + 132, // $4D59 + 132, // $4D5A + 132, // $4D5B + 132, // $4D5C + 132, // $4D5D + 132, // $4D5E + 132, // $4D5F + 132, // $4D60 + 132, // $4D61 + 132, // $4D62 + 132, // $4D63 + 132, // $4D64 + 132, // $4D65 + 132, // $4D66 + 132, // $4D67 + 132, // $4D68 + 132, // $4D69 + 132, // $4D6A + 132, // $4D6B + 132, // $4D6C + 132, // $4D6D + 132, // $4D6E + 132, // $4D6F + 132, // $4D70 + 132, // $4D71 + 132, // $4D72 + 132, // $4D73 + 132, // $4D74 + 132, // $4D75 + 132, // $4D76 + 132, // $4D77 + 132, // $4D78 + 132, // $4D79 + 132, // $4D7A + 132, // $4D7B + 132, // $4D7C + 132, // $4D7D + 132, // $4D7E + 132, // $4D7F + 132, // $4D80 + 132, // $4D81 + 132, // $4D82 + 132, // $4D83 + 132, // $4D84 + 132, // $4D85 + 132, // $4D86 + 132, // $4D87 + 132, // $4D88 + 132, // $4D89 + 132, // $4D8A + 132, // $4D8B + 132, // $4D8C + 132, // $4D8D + 132, // $4D8E + 132, // $4D8F + 132, // $4D90 + 132, // $4D91 + 132, // $4D92 + 132, // $4D93 + 132, // $4D94 + 132, // $4D95 + 132, // $4D96 + 132, // $4D97 + 132, // $4D98 + 132, // $4D99 + 132, // $4D9A + 132, // $4D9B + 132, // $4D9C + 132, // $4D9D + 132, // $4D9E + 132, // $4D9F + 132, // $4DA0 + 132, // $4DA1 + 132, // $4DA2 + 132, // $4DA3 + 132, // $4DA4 + 132, // $4DA5 + 132, // $4DA6 + 132, // $4DA7 + 132, // $4DA8 + 132, // $4DA9 + 132, // $4DAA + 132, // $4DAB + 132, // $4DAC + 132, // $4DAD + 132, // $4DAE + 132, // $4DAF + 132, // $4DB0 + 132, // $4DB1 + 132, // $4DB2 + 132, // $4DB3 + 132, // $4DB4 + 132, // $4DB5 + 29, // $4DB6 + 29, // $4DB7 + 29, // $4DB8 + 29, // $4DB9 + 29, // $4DBA + 29, // $4DBB + 29, // $4DBC + 29, // $4DBD + 29, // $4DBE + 29, // $4DBF + 21, // $4DC0 + 21, // $4DC1 + 21, // $4DC2 + 21, // $4DC3 + 21, // $4DC4 + 21, // $4DC5 + 21, // $4DC6 + 21, // $4DC7 + 21, // $4DC8 + 21, // $4DC9 + 21, // $4DCA + 21, // $4DCB + 21, // $4DCC + 21, // $4DCD + 21, // $4DCE + 21, // $4DCF + 21, // $4DD0 + 21, // $4DD1 + 21, // $4DD2 + 21, // $4DD3 + 21, // $4DD4 + 21, // $4DD5 + 21, // $4DD6 + 21, // $4DD7 + 21, // $4DD8 + 21, // $4DD9 + 21, // $4DDA + 21, // $4DDB + 21, // $4DDC + 21, // $4DDD + 21, // $4DDE + 21, // $4DDF + 21, // $4DE0 + 21, // $4DE1 + 21, // $4DE2 + 21, // $4DE3 + 21, // $4DE4 + 21, // $4DE5 + 21, // $4DE6 + 21, // $4DE7 + 21, // $4DE8 + 21, // $4DE9 + 21, // $4DEA + 21, // $4DEB + 21, // $4DEC + 21, // $4DED + 21, // $4DEE + 21, // $4DEF + 21, // $4DF0 + 21, // $4DF1 + 21, // $4DF2 + 21, // $4DF3 + 21, // $4DF4 + 21, // $4DF5 + 21, // $4DF6 + 21, // $4DF7 + 21, // $4DF8 + 21, // $4DF9 + 21, // $4DFA + 21, // $4DFB + 21, // $4DFC + 21, // $4DFD + 21, // $4DFE + 21, // $4DFF + 132, // $4E00 + 132, // $4E01 + 132, // $4E02 + 132, // $4E03 + 132, // $4E04 + 132, // $4E05 + 132, // $4E06 + 132, // $4E07 + 132, // $4E08 + 132, // $4E09 + 132, // $4E0A + 132, // $4E0B + 132, // $4E0C + 132, // $4E0D + 132, // $4E0E + 132, // $4E0F + 132, // $4E10 + 132, // $4E11 + 132, // $4E12 + 132, // $4E13 + 132, // $4E14 + 132, // $4E15 + 132, // $4E16 + 132, // $4E17 + 132, // $4E18 + 132, // $4E19 + 132, // $4E1A + 132, // $4E1B + 132, // $4E1C + 132, // $4E1D + 132, // $4E1E + 132, // $4E1F + 132, // $4E20 + 132, // $4E21 + 132, // $4E22 + 132, // $4E23 + 132, // $4E24 + 132, // $4E25 + 132, // $4E26 + 132, // $4E27 + 132, // $4E28 + 132, // $4E29 + 132, // $4E2A + 132, // $4E2B + 132, // $4E2C + 132, // $4E2D + 132, // $4E2E + 132, // $4E2F + 132, // $4E30 + 132, // $4E31 + 132, // $4E32 + 132, // $4E33 + 132, // $4E34 + 132, // $4E35 + 132, // $4E36 + 132, // $4E37 + 132, // $4E38 + 132, // $4E39 + 132, // $4E3A + 132, // $4E3B + 132, // $4E3C + 132, // $4E3D + 132, // $4E3E + 132, // $4E3F + 132, // $4E40 + 132, // $4E41 + 132, // $4E42 + 132, // $4E43 + 132, // $4E44 + 132, // $4E45 + 132, // $4E46 + 132, // $4E47 + 132, // $4E48 + 132, // $4E49 + 132, // $4E4A + 132, // $4E4B + 132, // $4E4C + 132, // $4E4D + 132, // $4E4E + 132, // $4E4F + 132, // $4E50 + 132, // $4E51 + 132, // $4E52 + 132, // $4E53 + 132, // $4E54 + 132, // $4E55 + 132, // $4E56 + 132, // $4E57 + 132, // $4E58 + 132, // $4E59 + 132, // $4E5A + 132, // $4E5B + 132, // $4E5C + 132, // $4E5D + 132, // $4E5E + 132, // $4E5F + 132, // $4E60 + 132, // $4E61 + 132, // $4E62 + 132, // $4E63 + 132, // $4E64 + 132, // $4E65 + 132, // $4E66 + 132, // $4E67 + 132, // $4E68 + 132, // $4E69 + 132, // $4E6A + 132, // $4E6B + 132, // $4E6C + 132, // $4E6D + 132, // $4E6E + 132, // $4E6F + 132, // $4E70 + 132, // $4E71 + 132, // $4E72 + 132, // $4E73 + 132, // $4E74 + 132, // $4E75 + 132, // $4E76 + 132, // $4E77 + 132, // $4E78 + 132, // $4E79 + 132, // $4E7A + 132, // $4E7B + 132, // $4E7C + 132, // $4E7D + 132, // $4E7E + 132, // $4E7F + 132, // $4E80 + 132, // $4E81 + 132, // $4E82 + 132, // $4E83 + 132, // $4E84 + 132, // $4E85 + 132, // $4E86 + 132, // $4E87 + 132, // $4E88 + 132, // $4E89 + 132, // $4E8A + 132, // $4E8B + 132, // $4E8C + 132, // $4E8D + 132, // $4E8E + 132, // $4E8F + 132, // $4E90 + 132, // $4E91 + 132, // $4E92 + 132, // $4E93 + 132, // $4E94 + 132, // $4E95 + 132, // $4E96 + 132, // $4E97 + 132, // $4E98 + 132, // $4E99 + 132, // $4E9A + 132, // $4E9B + 132, // $4E9C + 132, // $4E9D + 132, // $4E9E + 132, // $4E9F + 132, // $4EA0 + 132, // $4EA1 + 132, // $4EA2 + 132, // $4EA3 + 132, // $4EA4 + 132, // $4EA5 + 132, // $4EA6 + 132, // $4EA7 + 132, // $4EA8 + 132, // $4EA9 + 132, // $4EAA + 132, // $4EAB + 132, // $4EAC + 132, // $4EAD + 132, // $4EAE + 132, // $4EAF + 132, // $4EB0 + 132, // $4EB1 + 132, // $4EB2 + 132, // $4EB3 + 132, // $4EB4 + 132, // $4EB5 + 132, // $4EB6 + 132, // $4EB7 + 132, // $4EB8 + 132, // $4EB9 + 132, // $4EBA + 132, // $4EBB + 132, // $4EBC + 132, // $4EBD + 132, // $4EBE + 132, // $4EBF + 132, // $4EC0 + 132, // $4EC1 + 132, // $4EC2 + 132, // $4EC3 + 132, // $4EC4 + 132, // $4EC5 + 132, // $4EC6 + 132, // $4EC7 + 132, // $4EC8 + 132, // $4EC9 + 132, // $4ECA + 132, // $4ECB + 132, // $4ECC + 132, // $4ECD + 132, // $4ECE + 132, // $4ECF + 132, // $4ED0 + 132, // $4ED1 + 132, // $4ED2 + 132, // $4ED3 + 132, // $4ED4 + 132, // $4ED5 + 132, // $4ED6 + 132, // $4ED7 + 132, // $4ED8 + 132, // $4ED9 + 132, // $4EDA + 132, // $4EDB + 132, // $4EDC + 132, // $4EDD + 132, // $4EDE + 132, // $4EDF + 132, // $4EE0 + 132, // $4EE1 + 132, // $4EE2 + 132, // $4EE3 + 132, // $4EE4 + 132, // $4EE5 + 132, // $4EE6 + 132, // $4EE7 + 132, // $4EE8 + 132, // $4EE9 + 132, // $4EEA + 132, // $4EEB + 132, // $4EEC + 132, // $4EED + 132, // $4EEE + 132, // $4EEF + 132, // $4EF0 + 132, // $4EF1 + 132, // $4EF2 + 132, // $4EF3 + 132, // $4EF4 + 132, // $4EF5 + 132, // $4EF6 + 132, // $4EF7 + 132, // $4EF8 + 132, // $4EF9 + 132, // $4EFA + 132, // $4EFB + 132, // $4EFC + 132, // $4EFD + 132, // $4EFE + 132, // $4EFF + 132, // $4F00 + 132, // $4F01 + 132, // $4F02 + 132, // $4F03 + 132, // $4F04 + 132, // $4F05 + 132, // $4F06 + 132, // $4F07 + 132, // $4F08 + 132, // $4F09 + 132, // $4F0A + 132, // $4F0B + 132, // $4F0C + 132, // $4F0D + 132, // $4F0E + 132, // $4F0F + 132, // $4F10 + 132, // $4F11 + 132, // $4F12 + 132, // $4F13 + 132, // $4F14 + 132, // $4F15 + 132, // $4F16 + 132, // $4F17 + 132, // $4F18 + 132, // $4F19 + 132, // $4F1A + 132, // $4F1B + 132, // $4F1C + 132, // $4F1D + 132, // $4F1E + 132, // $4F1F + 132, // $4F20 + 132, // $4F21 + 132, // $4F22 + 132, // $4F23 + 132, // $4F24 + 132, // $4F25 + 132, // $4F26 + 132, // $4F27 + 132, // $4F28 + 132, // $4F29 + 132, // $4F2A + 132, // $4F2B + 132, // $4F2C + 132, // $4F2D + 132, // $4F2E + 132, // $4F2F + 132, // $4F30 + 132, // $4F31 + 132, // $4F32 + 132, // $4F33 + 132, // $4F34 + 132, // $4F35 + 132, // $4F36 + 132, // $4F37 + 132, // $4F38 + 132, // $4F39 + 132, // $4F3A + 132, // $4F3B + 132, // $4F3C + 132, // $4F3D + 132, // $4F3E + 132, // $4F3F + 132, // $4F40 + 132, // $4F41 + 132, // $4F42 + 132, // $4F43 + 132, // $4F44 + 132, // $4F45 + 132, // $4F46 + 132, // $4F47 + 132, // $4F48 + 132, // $4F49 + 132, // $4F4A + 132, // $4F4B + 132, // $4F4C + 132, // $4F4D + 132, // $4F4E + 132, // $4F4F + 132, // $4F50 + 132, // $4F51 + 132, // $4F52 + 132, // $4F53 + 132, // $4F54 + 132, // $4F55 + 132, // $4F56 + 132, // $4F57 + 132, // $4F58 + 132, // $4F59 + 132, // $4F5A + 132, // $4F5B + 132, // $4F5C + 132, // $4F5D + 132, // $4F5E + 132, // $4F5F + 132, // $4F60 + 132, // $4F61 + 132, // $4F62 + 132, // $4F63 + 132, // $4F64 + 132, // $4F65 + 132, // $4F66 + 132, // $4F67 + 132, // $4F68 + 132, // $4F69 + 132, // $4F6A + 132, // $4F6B + 132, // $4F6C + 132, // $4F6D + 132, // $4F6E + 132, // $4F6F + 132, // $4F70 + 132, // $4F71 + 132, // $4F72 + 132, // $4F73 + 132, // $4F74 + 132, // $4F75 + 132, // $4F76 + 132, // $4F77 + 132, // $4F78 + 132, // $4F79 + 132, // $4F7A + 132, // $4F7B + 132, // $4F7C + 132, // $4F7D + 132, // $4F7E + 132, // $4F7F + 132, // $4F80 + 132, // $4F81 + 132, // $4F82 + 132, // $4F83 + 132, // $4F84 + 132, // $4F85 + 132, // $4F86 + 132, // $4F87 + 132, // $4F88 + 132, // $4F89 + 132, // $4F8A + 132, // $4F8B + 132, // $4F8C + 132, // $4F8D + 132, // $4F8E + 132, // $4F8F + 132, // $4F90 + 132, // $4F91 + 132, // $4F92 + 132, // $4F93 + 132, // $4F94 + 132, // $4F95 + 132, // $4F96 + 132, // $4F97 + 132, // $4F98 + 132, // $4F99 + 132, // $4F9A + 132, // $4F9B + 132, // $4F9C + 132, // $4F9D + 132, // $4F9E + 132, // $4F9F + 132, // $4FA0 + 132, // $4FA1 + 132, // $4FA2 + 132, // $4FA3 + 132, // $4FA4 + 132, // $4FA5 + 132, // $4FA6 + 132, // $4FA7 + 132, // $4FA8 + 132, // $4FA9 + 132, // $4FAA + 132, // $4FAB + 132, // $4FAC + 132, // $4FAD + 132, // $4FAE + 132, // $4FAF + 132, // $4FB0 + 132, // $4FB1 + 132, // $4FB2 + 132, // $4FB3 + 132, // $4FB4 + 132, // $4FB5 + 132, // $4FB6 + 132, // $4FB7 + 132, // $4FB8 + 132, // $4FB9 + 132, // $4FBA + 132, // $4FBB + 132, // $4FBC + 132, // $4FBD + 132, // $4FBE + 132, // $4FBF + 132, // $4FC0 + 132, // $4FC1 + 132, // $4FC2 + 132, // $4FC3 + 132, // $4FC4 + 132, // $4FC5 + 132, // $4FC6 + 132, // $4FC7 + 132, // $4FC8 + 132, // $4FC9 + 132, // $4FCA + 132, // $4FCB + 132, // $4FCC + 132, // $4FCD + 132, // $4FCE + 132, // $4FCF + 132, // $4FD0 + 132, // $4FD1 + 132, // $4FD2 + 132, // $4FD3 + 132, // $4FD4 + 132, // $4FD5 + 132, // $4FD6 + 132, // $4FD7 + 132, // $4FD8 + 132, // $4FD9 + 132, // $4FDA + 132, // $4FDB + 132, // $4FDC + 132, // $4FDD + 132, // $4FDE + 132, // $4FDF + 132, // $4FE0 + 132, // $4FE1 + 132, // $4FE2 + 132, // $4FE3 + 132, // $4FE4 + 132, // $4FE5 + 132, // $4FE6 + 132, // $4FE7 + 132, // $4FE8 + 132, // $4FE9 + 132, // $4FEA + 132, // $4FEB + 132, // $4FEC + 132, // $4FED + 132, // $4FEE + 132, // $4FEF + 132, // $4FF0 + 132, // $4FF1 + 132, // $4FF2 + 132, // $4FF3 + 132, // $4FF4 + 132, // $4FF5 + 132, // $4FF6 + 132, // $4FF7 + 132, // $4FF8 + 132, // $4FF9 + 132, // $4FFA + 132, // $4FFB + 132, // $4FFC + 132, // $4FFD + 132, // $4FFE + 132, // $4FFF + 132, // $5000 + 132, // $5001 + 132, // $5002 + 132, // $5003 + 132, // $5004 + 132, // $5005 + 132, // $5006 + 132, // $5007 + 132, // $5008 + 132, // $5009 + 132, // $500A + 132, // $500B + 132, // $500C + 132, // $500D + 132, // $500E + 132, // $500F + 132, // $5010 + 132, // $5011 + 132, // $5012 + 132, // $5013 + 132, // $5014 + 132, // $5015 + 132, // $5016 + 132, // $5017 + 132, // $5018 + 132, // $5019 + 132, // $501A + 132, // $501B + 132, // $501C + 132, // $501D + 132, // $501E + 132, // $501F + 132, // $5020 + 132, // $5021 + 132, // $5022 + 132, // $5023 + 132, // $5024 + 132, // $5025 + 132, // $5026 + 132, // $5027 + 132, // $5028 + 132, // $5029 + 132, // $502A + 132, // $502B + 132, // $502C + 132, // $502D + 132, // $502E + 132, // $502F + 132, // $5030 + 132, // $5031 + 132, // $5032 + 132, // $5033 + 132, // $5034 + 132, // $5035 + 132, // $5036 + 132, // $5037 + 132, // $5038 + 132, // $5039 + 132, // $503A + 132, // $503B + 132, // $503C + 132, // $503D + 132, // $503E + 132, // $503F + 132, // $5040 + 132, // $5041 + 132, // $5042 + 132, // $5043 + 132, // $5044 + 132, // $5045 + 132, // $5046 + 132, // $5047 + 132, // $5048 + 132, // $5049 + 132, // $504A + 132, // $504B + 132, // $504C + 132, // $504D + 132, // $504E + 132, // $504F + 132, // $5050 + 132, // $5051 + 132, // $5052 + 132, // $5053 + 132, // $5054 + 132, // $5055 + 132, // $5056 + 132, // $5057 + 132, // $5058 + 132, // $5059 + 132, // $505A + 132, // $505B + 132, // $505C + 132, // $505D + 132, // $505E + 132, // $505F + 132, // $5060 + 132, // $5061 + 132, // $5062 + 132, // $5063 + 132, // $5064 + 132, // $5065 + 132, // $5066 + 132, // $5067 + 132, // $5068 + 132, // $5069 + 132, // $506A + 132, // $506B + 132, // $506C + 132, // $506D + 132, // $506E + 132, // $506F + 132, // $5070 + 132, // $5071 + 132, // $5072 + 132, // $5073 + 132, // $5074 + 132, // $5075 + 132, // $5076 + 132, // $5077 + 132, // $5078 + 132, // $5079 + 132, // $507A + 132, // $507B + 132, // $507C + 132, // $507D + 132, // $507E + 132, // $507F + 132, // $5080 + 132, // $5081 + 132, // $5082 + 132, // $5083 + 132, // $5084 + 132, // $5085 + 132, // $5086 + 132, // $5087 + 132, // $5088 + 132, // $5089 + 132, // $508A + 132, // $508B + 132, // $508C + 132, // $508D + 132, // $508E + 132, // $508F + 132, // $5090 + 132, // $5091 + 132, // $5092 + 132, // $5093 + 132, // $5094 + 132, // $5095 + 132, // $5096 + 132, // $5097 + 132, // $5098 + 132, // $5099 + 132, // $509A + 132, // $509B + 132, // $509C + 132, // $509D + 132, // $509E + 132, // $509F + 132, // $50A0 + 132, // $50A1 + 132, // $50A2 + 132, // $50A3 + 132, // $50A4 + 132, // $50A5 + 132, // $50A6 + 132, // $50A7 + 132, // $50A8 + 132, // $50A9 + 132, // $50AA + 132, // $50AB + 132, // $50AC + 132, // $50AD + 132, // $50AE + 132, // $50AF + 132, // $50B0 + 132, // $50B1 + 132, // $50B2 + 132, // $50B3 + 132, // $50B4 + 132, // $50B5 + 132, // $50B6 + 132, // $50B7 + 132, // $50B8 + 132, // $50B9 + 132, // $50BA + 132, // $50BB + 132, // $50BC + 132, // $50BD + 132, // $50BE + 132, // $50BF + 132, // $50C0 + 132, // $50C1 + 132, // $50C2 + 132, // $50C3 + 132, // $50C4 + 132, // $50C5 + 132, // $50C6 + 132, // $50C7 + 132, // $50C8 + 132, // $50C9 + 132, // $50CA + 132, // $50CB + 132, // $50CC + 132, // $50CD + 132, // $50CE + 132, // $50CF + 132, // $50D0 + 132, // $50D1 + 132, // $50D2 + 132, // $50D3 + 132, // $50D4 + 132, // $50D5 + 132, // $50D6 + 132, // $50D7 + 132, // $50D8 + 132, // $50D9 + 132, // $50DA + 132, // $50DB + 132, // $50DC + 132, // $50DD + 132, // $50DE + 132, // $50DF + 132, // $50E0 + 132, // $50E1 + 132, // $50E2 + 132, // $50E3 + 132, // $50E4 + 132, // $50E5 + 132, // $50E6 + 132, // $50E7 + 132, // $50E8 + 132, // $50E9 + 132, // $50EA + 132, // $50EB + 132, // $50EC + 132, // $50ED + 132, // $50EE + 132, // $50EF + 132, // $50F0 + 132, // $50F1 + 132, // $50F2 + 132, // $50F3 + 132, // $50F4 + 132, // $50F5 + 132, // $50F6 + 132, // $50F7 + 132, // $50F8 + 132, // $50F9 + 132, // $50FA + 132, // $50FB + 132, // $50FC + 132, // $50FD + 132, // $50FE + 132, // $50FF + 132, // $5100 + 132, // $5101 + 132, // $5102 + 132, // $5103 + 132, // $5104 + 132, // $5105 + 132, // $5106 + 132, // $5107 + 132, // $5108 + 132, // $5109 + 132, // $510A + 132, // $510B + 132, // $510C + 132, // $510D + 132, // $510E + 132, // $510F + 132, // $5110 + 132, // $5111 + 132, // $5112 + 132, // $5113 + 132, // $5114 + 132, // $5115 + 132, // $5116 + 132, // $5117 + 132, // $5118 + 132, // $5119 + 132, // $511A + 132, // $511B + 132, // $511C + 132, // $511D + 132, // $511E + 132, // $511F + 132, // $5120 + 132, // $5121 + 132, // $5122 + 132, // $5123 + 132, // $5124 + 132, // $5125 + 132, // $5126 + 132, // $5127 + 132, // $5128 + 132, // $5129 + 132, // $512A + 132, // $512B + 132, // $512C + 132, // $512D + 132, // $512E + 132, // $512F + 132, // $5130 + 132, // $5131 + 132, // $5132 + 132, // $5133 + 132, // $5134 + 132, // $5135 + 132, // $5136 + 132, // $5137 + 132, // $5138 + 132, // $5139 + 132, // $513A + 132, // $513B + 132, // $513C + 132, // $513D + 132, // $513E + 132, // $513F + 132, // $5140 + 132, // $5141 + 132, // $5142 + 132, // $5143 + 132, // $5144 + 132, // $5145 + 132, // $5146 + 132, // $5147 + 132, // $5148 + 132, // $5149 + 132, // $514A + 132, // $514B + 132, // $514C + 132, // $514D + 132, // $514E + 132, // $514F + 132, // $5150 + 132, // $5151 + 132, // $5152 + 132, // $5153 + 132, // $5154 + 132, // $5155 + 132, // $5156 + 132, // $5157 + 132, // $5158 + 132, // $5159 + 132, // $515A + 132, // $515B + 132, // $515C + 132, // $515D + 132, // $515E + 132, // $515F + 132, // $5160 + 132, // $5161 + 132, // $5162 + 132, // $5163 + 132, // $5164 + 132, // $5165 + 132, // $5166 + 132, // $5167 + 132, // $5168 + 132, // $5169 + 132, // $516A + 132, // $516B + 132, // $516C + 132, // $516D + 132, // $516E + 132, // $516F + 132, // $5170 + 132, // $5171 + 132, // $5172 + 132, // $5173 + 132, // $5174 + 132, // $5175 + 132, // $5176 + 132, // $5177 + 132, // $5178 + 132, // $5179 + 132, // $517A + 132, // $517B + 132, // $517C + 132, // $517D + 132, // $517E + 132, // $517F + 132, // $5180 + 132, // $5181 + 132, // $5182 + 132, // $5183 + 132, // $5184 + 132, // $5185 + 132, // $5186 + 132, // $5187 + 132, // $5188 + 132, // $5189 + 132, // $518A + 132, // $518B + 132, // $518C + 132, // $518D + 132, // $518E + 132, // $518F + 132, // $5190 + 132, // $5191 + 132, // $5192 + 132, // $5193 + 132, // $5194 + 132, // $5195 + 132, // $5196 + 132, // $5197 + 132, // $5198 + 132, // $5199 + 132, // $519A + 132, // $519B + 132, // $519C + 132, // $519D + 132, // $519E + 132, // $519F + 132, // $51A0 + 132, // $51A1 + 132, // $51A2 + 132, // $51A3 + 132, // $51A4 + 132, // $51A5 + 132, // $51A6 + 132, // $51A7 + 132, // $51A8 + 132, // $51A9 + 132, // $51AA + 132, // $51AB + 132, // $51AC + 132, // $51AD + 132, // $51AE + 132, // $51AF + 132, // $51B0 + 132, // $51B1 + 132, // $51B2 + 132, // $51B3 + 132, // $51B4 + 132, // $51B5 + 132, // $51B6 + 132, // $51B7 + 132, // $51B8 + 132, // $51B9 + 132, // $51BA + 132, // $51BB + 132, // $51BC + 132, // $51BD + 132, // $51BE + 132, // $51BF + 132, // $51C0 + 132, // $51C1 + 132, // $51C2 + 132, // $51C3 + 132, // $51C4 + 132, // $51C5 + 132, // $51C6 + 132, // $51C7 + 132, // $51C8 + 132, // $51C9 + 132, // $51CA + 132, // $51CB + 132, // $51CC + 132, // $51CD + 132, // $51CE + 132, // $51CF + 132, // $51D0 + 132, // $51D1 + 132, // $51D2 + 132, // $51D3 + 132, // $51D4 + 132, // $51D5 + 132, // $51D6 + 132, // $51D7 + 132, // $51D8 + 132, // $51D9 + 132, // $51DA + 132, // $51DB + 132, // $51DC + 132, // $51DD + 132, // $51DE + 132, // $51DF + 132, // $51E0 + 132, // $51E1 + 132, // $51E2 + 132, // $51E3 + 132, // $51E4 + 132, // $51E5 + 132, // $51E6 + 132, // $51E7 + 132, // $51E8 + 132, // $51E9 + 132, // $51EA + 132, // $51EB + 132, // $51EC + 132, // $51ED + 132, // $51EE + 132, // $51EF + 132, // $51F0 + 132, // $51F1 + 132, // $51F2 + 132, // $51F3 + 132, // $51F4 + 132, // $51F5 + 132, // $51F6 + 132, // $51F7 + 132, // $51F8 + 132, // $51F9 + 132, // $51FA + 132, // $51FB + 132, // $51FC + 132, // $51FD + 132, // $51FE + 132, // $51FF + 132, // $5200 + 132, // $5201 + 132, // $5202 + 132, // $5203 + 132, // $5204 + 132, // $5205 + 132, // $5206 + 132, // $5207 + 132, // $5208 + 132, // $5209 + 132, // $520A + 132, // $520B + 132, // $520C + 132, // $520D + 132, // $520E + 132, // $520F + 132, // $5210 + 132, // $5211 + 132, // $5212 + 132, // $5213 + 132, // $5214 + 132, // $5215 + 132, // $5216 + 132, // $5217 + 132, // $5218 + 132, // $5219 + 132, // $521A + 132, // $521B + 132, // $521C + 132, // $521D + 132, // $521E + 132, // $521F + 132, // $5220 + 132, // $5221 + 132, // $5222 + 132, // $5223 + 132, // $5224 + 132, // $5225 + 132, // $5226 + 132, // $5227 + 132, // $5228 + 132, // $5229 + 132, // $522A + 132, // $522B + 132, // $522C + 132, // $522D + 132, // $522E + 132, // $522F + 132, // $5230 + 132, // $5231 + 132, // $5232 + 132, // $5233 + 132, // $5234 + 132, // $5235 + 132, // $5236 + 132, // $5237 + 132, // $5238 + 132, // $5239 + 132, // $523A + 132, // $523B + 132, // $523C + 132, // $523D + 132, // $523E + 132, // $523F + 132, // $5240 + 132, // $5241 + 132, // $5242 + 132, // $5243 + 132, // $5244 + 132, // $5245 + 132, // $5246 + 132, // $5247 + 132, // $5248 + 132, // $5249 + 132, // $524A + 132, // $524B + 132, // $524C + 132, // $524D + 132, // $524E + 132, // $524F + 132, // $5250 + 132, // $5251 + 132, // $5252 + 132, // $5253 + 132, // $5254 + 132, // $5255 + 132, // $5256 + 132, // $5257 + 132, // $5258 + 132, // $5259 + 132, // $525A + 132, // $525B + 132, // $525C + 132, // $525D + 132, // $525E + 132, // $525F + 132, // $5260 + 132, // $5261 + 132, // $5262 + 132, // $5263 + 132, // $5264 + 132, // $5265 + 132, // $5266 + 132, // $5267 + 132, // $5268 + 132, // $5269 + 132, // $526A + 132, // $526B + 132, // $526C + 132, // $526D + 132, // $526E + 132, // $526F + 132, // $5270 + 132, // $5271 + 132, // $5272 + 132, // $5273 + 132, // $5274 + 132, // $5275 + 132, // $5276 + 132, // $5277 + 132, // $5278 + 132, // $5279 + 132, // $527A + 132, // $527B + 132, // $527C + 132, // $527D + 132, // $527E + 132, // $527F + 132, // $5280 + 132, // $5281 + 132, // $5282 + 132, // $5283 + 132, // $5284 + 132, // $5285 + 132, // $5286 + 132, // $5287 + 132, // $5288 + 132, // $5289 + 132, // $528A + 132, // $528B + 132, // $528C + 132, // $528D + 132, // $528E + 132, // $528F + 132, // $5290 + 132, // $5291 + 132, // $5292 + 132, // $5293 + 132, // $5294 + 132, // $5295 + 132, // $5296 + 132, // $5297 + 132, // $5298 + 132, // $5299 + 132, // $529A + 132, // $529B + 132, // $529C + 132, // $529D + 132, // $529E + 132, // $529F + 132, // $52A0 + 132, // $52A1 + 132, // $52A2 + 132, // $52A3 + 132, // $52A4 + 132, // $52A5 + 132, // $52A6 + 132, // $52A7 + 132, // $52A8 + 132, // $52A9 + 132, // $52AA + 132, // $52AB + 132, // $52AC + 132, // $52AD + 132, // $52AE + 132, // $52AF + 132, // $52B0 + 132, // $52B1 + 132, // $52B2 + 132, // $52B3 + 132, // $52B4 + 132, // $52B5 + 132, // $52B6 + 132, // $52B7 + 132, // $52B8 + 132, // $52B9 + 132, // $52BA + 132, // $52BB + 132, // $52BC + 132, // $52BD + 132, // $52BE + 132, // $52BF + 132, // $52C0 + 132, // $52C1 + 132, // $52C2 + 132, // $52C3 + 132, // $52C4 + 132, // $52C5 + 132, // $52C6 + 132, // $52C7 + 132, // $52C8 + 132, // $52C9 + 132, // $52CA + 132, // $52CB + 132, // $52CC + 132, // $52CD + 132, // $52CE + 132, // $52CF + 132, // $52D0 + 132, // $52D1 + 132, // $52D2 + 132, // $52D3 + 132, // $52D4 + 132, // $52D5 + 132, // $52D6 + 132, // $52D7 + 132, // $52D8 + 132, // $52D9 + 132, // $52DA + 132, // $52DB + 132, // $52DC + 132, // $52DD + 132, // $52DE + 132, // $52DF + 132, // $52E0 + 132, // $52E1 + 132, // $52E2 + 132, // $52E3 + 132, // $52E4 + 132, // $52E5 + 132, // $52E6 + 132, // $52E7 + 132, // $52E8 + 132, // $52E9 + 132, // $52EA + 132, // $52EB + 132, // $52EC + 132, // $52ED + 132, // $52EE + 132, // $52EF + 132, // $52F0 + 132, // $52F1 + 132, // $52F2 + 132, // $52F3 + 132, // $52F4 + 132, // $52F5 + 132, // $52F6 + 132, // $52F7 + 132, // $52F8 + 132, // $52F9 + 132, // $52FA + 132, // $52FB + 132, // $52FC + 132, // $52FD + 132, // $52FE + 132, // $52FF + 132, // $5300 + 132, // $5301 + 132, // $5302 + 132, // $5303 + 132, // $5304 + 132, // $5305 + 132, // $5306 + 132, // $5307 + 132, // $5308 + 132, // $5309 + 132, // $530A + 132, // $530B + 132, // $530C + 132, // $530D + 132, // $530E + 132, // $530F + 132, // $5310 + 132, // $5311 + 132, // $5312 + 132, // $5313 + 132, // $5314 + 132, // $5315 + 132, // $5316 + 132, // $5317 + 132, // $5318 + 132, // $5319 + 132, // $531A + 132, // $531B + 132, // $531C + 132, // $531D + 132, // $531E + 132, // $531F + 132, // $5320 + 132, // $5321 + 132, // $5322 + 132, // $5323 + 132, // $5324 + 132, // $5325 + 132, // $5326 + 132, // $5327 + 132, // $5328 + 132, // $5329 + 132, // $532A + 132, // $532B + 132, // $532C + 132, // $532D + 132, // $532E + 132, // $532F + 132, // $5330 + 132, // $5331 + 132, // $5332 + 132, // $5333 + 132, // $5334 + 132, // $5335 + 132, // $5336 + 132, // $5337 + 132, // $5338 + 132, // $5339 + 132, // $533A + 132, // $533B + 132, // $533C + 132, // $533D + 132, // $533E + 132, // $533F + 132, // $5340 + 132, // $5341 + 132, // $5342 + 132, // $5343 + 132, // $5344 + 132, // $5345 + 132, // $5346 + 132, // $5347 + 132, // $5348 + 132, // $5349 + 132, // $534A + 132, // $534B + 132, // $534C + 132, // $534D + 132, // $534E + 132, // $534F + 132, // $5350 + 132, // $5351 + 132, // $5352 + 132, // $5353 + 132, // $5354 + 132, // $5355 + 132, // $5356 + 132, // $5357 + 132, // $5358 + 132, // $5359 + 132, // $535A + 132, // $535B + 132, // $535C + 132, // $535D + 132, // $535E + 132, // $535F + 132, // $5360 + 132, // $5361 + 132, // $5362 + 132, // $5363 + 132, // $5364 + 132, // $5365 + 132, // $5366 + 132, // $5367 + 132, // $5368 + 132, // $5369 + 132, // $536A + 132, // $536B + 132, // $536C + 132, // $536D + 132, // $536E + 132, // $536F + 132, // $5370 + 132, // $5371 + 132, // $5372 + 132, // $5373 + 132, // $5374 + 132, // $5375 + 132, // $5376 + 132, // $5377 + 132, // $5378 + 132, // $5379 + 132, // $537A + 132, // $537B + 132, // $537C + 132, // $537D + 132, // $537E + 132, // $537F + 132, // $5380 + 132, // $5381 + 132, // $5382 + 132, // $5383 + 132, // $5384 + 132, // $5385 + 132, // $5386 + 132, // $5387 + 132, // $5388 + 132, // $5389 + 132, // $538A + 132, // $538B + 132, // $538C + 132, // $538D + 132, // $538E + 132, // $538F + 132, // $5390 + 132, // $5391 + 132, // $5392 + 132, // $5393 + 132, // $5394 + 132, // $5395 + 132, // $5396 + 132, // $5397 + 132, // $5398 + 132, // $5399 + 132, // $539A + 132, // $539B + 132, // $539C + 132, // $539D + 132, // $539E + 132, // $539F + 132, // $53A0 + 132, // $53A1 + 132, // $53A2 + 132, // $53A3 + 132, // $53A4 + 132, // $53A5 + 132, // $53A6 + 132, // $53A7 + 132, // $53A8 + 132, // $53A9 + 132, // $53AA + 132, // $53AB + 132, // $53AC + 132, // $53AD + 132, // $53AE + 132, // $53AF + 132, // $53B0 + 132, // $53B1 + 132, // $53B2 + 132, // $53B3 + 132, // $53B4 + 132, // $53B5 + 132, // $53B6 + 132, // $53B7 + 132, // $53B8 + 132, // $53B9 + 132, // $53BA + 132, // $53BB + 132, // $53BC + 132, // $53BD + 132, // $53BE + 132, // $53BF + 132, // $53C0 + 132, // $53C1 + 132, // $53C2 + 132, // $53C3 + 132, // $53C4 + 132, // $53C5 + 132, // $53C6 + 132, // $53C7 + 132, // $53C8 + 132, // $53C9 + 132, // $53CA + 132, // $53CB + 132, // $53CC + 132, // $53CD + 132, // $53CE + 132, // $53CF + 132, // $53D0 + 132, // $53D1 + 132, // $53D2 + 132, // $53D3 + 132, // $53D4 + 132, // $53D5 + 132, // $53D6 + 132, // $53D7 + 132, // $53D8 + 132, // $53D9 + 132, // $53DA + 132, // $53DB + 132, // $53DC + 132, // $53DD + 132, // $53DE + 132, // $53DF + 132, // $53E0 + 132, // $53E1 + 132, // $53E2 + 132, // $53E3 + 132, // $53E4 + 132, // $53E5 + 132, // $53E6 + 132, // $53E7 + 132, // $53E8 + 132, // $53E9 + 132, // $53EA + 132, // $53EB + 132, // $53EC + 132, // $53ED + 132, // $53EE + 132, // $53EF + 132, // $53F0 + 132, // $53F1 + 132, // $53F2 + 132, // $53F3 + 132, // $53F4 + 132, // $53F5 + 132, // $53F6 + 132, // $53F7 + 132, // $53F8 + 132, // $53F9 + 132, // $53FA + 132, // $53FB + 132, // $53FC + 132, // $53FD + 132, // $53FE + 132, // $53FF + 132, // $5400 + 132, // $5401 + 132, // $5402 + 132, // $5403 + 132, // $5404 + 132, // $5405 + 132, // $5406 + 132, // $5407 + 132, // $5408 + 132, // $5409 + 132, // $540A + 132, // $540B + 132, // $540C + 132, // $540D + 132, // $540E + 132, // $540F + 132, // $5410 + 132, // $5411 + 132, // $5412 + 132, // $5413 + 132, // $5414 + 132, // $5415 + 132, // $5416 + 132, // $5417 + 132, // $5418 + 132, // $5419 + 132, // $541A + 132, // $541B + 132, // $541C + 132, // $541D + 132, // $541E + 132, // $541F + 132, // $5420 + 132, // $5421 + 132, // $5422 + 132, // $5423 + 132, // $5424 + 132, // $5425 + 132, // $5426 + 132, // $5427 + 132, // $5428 + 132, // $5429 + 132, // $542A + 132, // $542B + 132, // $542C + 132, // $542D + 132, // $542E + 132, // $542F + 132, // $5430 + 132, // $5431 + 132, // $5432 + 132, // $5433 + 132, // $5434 + 132, // $5435 + 132, // $5436 + 132, // $5437 + 132, // $5438 + 132, // $5439 + 132, // $543A + 132, // $543B + 132, // $543C + 132, // $543D + 132, // $543E + 132, // $543F + 132, // $5440 + 132, // $5441 + 132, // $5442 + 132, // $5443 + 132, // $5444 + 132, // $5445 + 132, // $5446 + 132, // $5447 + 132, // $5448 + 132, // $5449 + 132, // $544A + 132, // $544B + 132, // $544C + 132, // $544D + 132, // $544E + 132, // $544F + 132, // $5450 + 132, // $5451 + 132, // $5452 + 132, // $5453 + 132, // $5454 + 132, // $5455 + 132, // $5456 + 132, // $5457 + 132, // $5458 + 132, // $5459 + 132, // $545A + 132, // $545B + 132, // $545C + 132, // $545D + 132, // $545E + 132, // $545F + 132, // $5460 + 132, // $5461 + 132, // $5462 + 132, // $5463 + 132, // $5464 + 132, // $5465 + 132, // $5466 + 132, // $5467 + 132, // $5468 + 132, // $5469 + 132, // $546A + 132, // $546B + 132, // $546C + 132, // $546D + 132, // $546E + 132, // $546F + 132, // $5470 + 132, // $5471 + 132, // $5472 + 132, // $5473 + 132, // $5474 + 132, // $5475 + 132, // $5476 + 132, // $5477 + 132, // $5478 + 132, // $5479 + 132, // $547A + 132, // $547B + 132, // $547C + 132, // $547D + 132, // $547E + 132, // $547F + 132, // $5480 + 132, // $5481 + 132, // $5482 + 132, // $5483 + 132, // $5484 + 132, // $5485 + 132, // $5486 + 132, // $5487 + 132, // $5488 + 132, // $5489 + 132, // $548A + 132, // $548B + 132, // $548C + 132, // $548D + 132, // $548E + 132, // $548F + 132, // $5490 + 132, // $5491 + 132, // $5492 + 132, // $5493 + 132, // $5494 + 132, // $5495 + 132, // $5496 + 132, // $5497 + 132, // $5498 + 132, // $5499 + 132, // $549A + 132, // $549B + 132, // $549C + 132, // $549D + 132, // $549E + 132, // $549F + 132, // $54A0 + 132, // $54A1 + 132, // $54A2 + 132, // $54A3 + 132, // $54A4 + 132, // $54A5 + 132, // $54A6 + 132, // $54A7 + 132, // $54A8 + 132, // $54A9 + 132, // $54AA + 132, // $54AB + 132, // $54AC + 132, // $54AD + 132, // $54AE + 132, // $54AF + 132, // $54B0 + 132, // $54B1 + 132, // $54B2 + 132, // $54B3 + 132, // $54B4 + 132, // $54B5 + 132, // $54B6 + 132, // $54B7 + 132, // $54B8 + 132, // $54B9 + 132, // $54BA + 132, // $54BB + 132, // $54BC + 132, // $54BD + 132, // $54BE + 132, // $54BF + 132, // $54C0 + 132, // $54C1 + 132, // $54C2 + 132, // $54C3 + 132, // $54C4 + 132, // $54C5 + 132, // $54C6 + 132, // $54C7 + 132, // $54C8 + 132, // $54C9 + 132, // $54CA + 132, // $54CB + 132, // $54CC + 132, // $54CD + 132, // $54CE + 132, // $54CF + 132, // $54D0 + 132, // $54D1 + 132, // $54D2 + 132, // $54D3 + 132, // $54D4 + 132, // $54D5 + 132, // $54D6 + 132, // $54D7 + 132, // $54D8 + 132, // $54D9 + 132, // $54DA + 132, // $54DB + 132, // $54DC + 132, // $54DD + 132, // $54DE + 132, // $54DF + 132, // $54E0 + 132, // $54E1 + 132, // $54E2 + 132, // $54E3 + 132, // $54E4 + 132, // $54E5 + 132, // $54E6 + 132, // $54E7 + 132, // $54E8 + 132, // $54E9 + 132, // $54EA + 132, // $54EB + 132, // $54EC + 132, // $54ED + 132, // $54EE + 132, // $54EF + 132, // $54F0 + 132, // $54F1 + 132, // $54F2 + 132, // $54F3 + 132, // $54F4 + 132, // $54F5 + 132, // $54F6 + 132, // $54F7 + 132, // $54F8 + 132, // $54F9 + 132, // $54FA + 132, // $54FB + 132, // $54FC + 132, // $54FD + 132, // $54FE + 132, // $54FF + 132, // $5500 + 132, // $5501 + 132, // $5502 + 132, // $5503 + 132, // $5504 + 132, // $5505 + 132, // $5506 + 132, // $5507 + 132, // $5508 + 132, // $5509 + 132, // $550A + 132, // $550B + 132, // $550C + 132, // $550D + 132, // $550E + 132, // $550F + 132, // $5510 + 132, // $5511 + 132, // $5512 + 132, // $5513 + 132, // $5514 + 132, // $5515 + 132, // $5516 + 132, // $5517 + 132, // $5518 + 132, // $5519 + 132, // $551A + 132, // $551B + 132, // $551C + 132, // $551D + 132, // $551E + 132, // $551F + 132, // $5520 + 132, // $5521 + 132, // $5522 + 132, // $5523 + 132, // $5524 + 132, // $5525 + 132, // $5526 + 132, // $5527 + 132, // $5528 + 132, // $5529 + 132, // $552A + 132, // $552B + 132, // $552C + 132, // $552D + 132, // $552E + 132, // $552F + 132, // $5530 + 132, // $5531 + 132, // $5532 + 132, // $5533 + 132, // $5534 + 132, // $5535 + 132, // $5536 + 132, // $5537 + 132, // $5538 + 132, // $5539 + 132, // $553A + 132, // $553B + 132, // $553C + 132, // $553D + 132, // $553E + 132, // $553F + 132, // $5540 + 132, // $5541 + 132, // $5542 + 132, // $5543 + 132, // $5544 + 132, // $5545 + 132, // $5546 + 132, // $5547 + 132, // $5548 + 132, // $5549 + 132, // $554A + 132, // $554B + 132, // $554C + 132, // $554D + 132, // $554E + 132, // $554F + 132, // $5550 + 132, // $5551 + 132, // $5552 + 132, // $5553 + 132, // $5554 + 132, // $5555 + 132, // $5556 + 132, // $5557 + 132, // $5558 + 132, // $5559 + 132, // $555A + 132, // $555B + 132, // $555C + 132, // $555D + 132, // $555E + 132, // $555F + 132, // $5560 + 132, // $5561 + 132, // $5562 + 132, // $5563 + 132, // $5564 + 132, // $5565 + 132, // $5566 + 132, // $5567 + 132, // $5568 + 132, // $5569 + 132, // $556A + 132, // $556B + 132, // $556C + 132, // $556D + 132, // $556E + 132, // $556F + 132, // $5570 + 132, // $5571 + 132, // $5572 + 132, // $5573 + 132, // $5574 + 132, // $5575 + 132, // $5576 + 132, // $5577 + 132, // $5578 + 132, // $5579 + 132, // $557A + 132, // $557B + 132, // $557C + 132, // $557D + 132, // $557E + 132, // $557F + 132, // $5580 + 132, // $5581 + 132, // $5582 + 132, // $5583 + 132, // $5584 + 132, // $5585 + 132, // $5586 + 132, // $5587 + 132, // $5588 + 132, // $5589 + 132, // $558A + 132, // $558B + 132, // $558C + 132, // $558D + 132, // $558E + 132, // $558F + 132, // $5590 + 132, // $5591 + 132, // $5592 + 132, // $5593 + 132, // $5594 + 132, // $5595 + 132, // $5596 + 132, // $5597 + 132, // $5598 + 132, // $5599 + 132, // $559A + 132, // $559B + 132, // $559C + 132, // $559D + 132, // $559E + 132, // $559F + 132, // $55A0 + 132, // $55A1 + 132, // $55A2 + 132, // $55A3 + 132, // $55A4 + 132, // $55A5 + 132, // $55A6 + 132, // $55A7 + 132, // $55A8 + 132, // $55A9 + 132, // $55AA + 132, // $55AB + 132, // $55AC + 132, // $55AD + 132, // $55AE + 132, // $55AF + 132, // $55B0 + 132, // $55B1 + 132, // $55B2 + 132, // $55B3 + 132, // $55B4 + 132, // $55B5 + 132, // $55B6 + 132, // $55B7 + 132, // $55B8 + 132, // $55B9 + 132, // $55BA + 132, // $55BB + 132, // $55BC + 132, // $55BD + 132, // $55BE + 132, // $55BF + 132, // $55C0 + 132, // $55C1 + 132, // $55C2 + 132, // $55C3 + 132, // $55C4 + 132, // $55C5 + 132, // $55C6 + 132, // $55C7 + 132, // $55C8 + 132, // $55C9 + 132, // $55CA + 132, // $55CB + 132, // $55CC + 132, // $55CD + 132, // $55CE + 132, // $55CF + 132, // $55D0 + 132, // $55D1 + 132, // $55D2 + 132, // $55D3 + 132, // $55D4 + 132, // $55D5 + 132, // $55D6 + 132, // $55D7 + 132, // $55D8 + 132, // $55D9 + 132, // $55DA + 132, // $55DB + 132, // $55DC + 132, // $55DD + 132, // $55DE + 132, // $55DF + 132, // $55E0 + 132, // $55E1 + 132, // $55E2 + 132, // $55E3 + 132, // $55E4 + 132, // $55E5 + 132, // $55E6 + 132, // $55E7 + 132, // $55E8 + 132, // $55E9 + 132, // $55EA + 132, // $55EB + 132, // $55EC + 132, // $55ED + 132, // $55EE + 132, // $55EF + 132, // $55F0 + 132, // $55F1 + 132, // $55F2 + 132, // $55F3 + 132, // $55F4 + 132, // $55F5 + 132, // $55F6 + 132, // $55F7 + 132, // $55F8 + 132, // $55F9 + 132, // $55FA + 132, // $55FB + 132, // $55FC + 132, // $55FD + 132, // $55FE + 132, // $55FF + 132, // $5600 + 132, // $5601 + 132, // $5602 + 132, // $5603 + 132, // $5604 + 132, // $5605 + 132, // $5606 + 132, // $5607 + 132, // $5608 + 132, // $5609 + 132, // $560A + 132, // $560B + 132, // $560C + 132, // $560D + 132, // $560E + 132, // $560F + 132, // $5610 + 132, // $5611 + 132, // $5612 + 132, // $5613 + 132, // $5614 + 132, // $5615 + 132, // $5616 + 132, // $5617 + 132, // $5618 + 132, // $5619 + 132, // $561A + 132, // $561B + 132, // $561C + 132, // $561D + 132, // $561E + 132, // $561F + 132, // $5620 + 132, // $5621 + 132, // $5622 + 132, // $5623 + 132, // $5624 + 132, // $5625 + 132, // $5626 + 132, // $5627 + 132, // $5628 + 132, // $5629 + 132, // $562A + 132, // $562B + 132, // $562C + 132, // $562D + 132, // $562E + 132, // $562F + 132, // $5630 + 132, // $5631 + 132, // $5632 + 132, // $5633 + 132, // $5634 + 132, // $5635 + 132, // $5636 + 132, // $5637 + 132, // $5638 + 132, // $5639 + 132, // $563A + 132, // $563B + 132, // $563C + 132, // $563D + 132, // $563E + 132, // $563F + 132, // $5640 + 132, // $5641 + 132, // $5642 + 132, // $5643 + 132, // $5644 + 132, // $5645 + 132, // $5646 + 132, // $5647 + 132, // $5648 + 132, // $5649 + 132, // $564A + 132, // $564B + 132, // $564C + 132, // $564D + 132, // $564E + 132, // $564F + 132, // $5650 + 132, // $5651 + 132, // $5652 + 132, // $5653 + 132, // $5654 + 132, // $5655 + 132, // $5656 + 132, // $5657 + 132, // $5658 + 132, // $5659 + 132, // $565A + 132, // $565B + 132, // $565C + 132, // $565D + 132, // $565E + 132, // $565F + 132, // $5660 + 132, // $5661 + 132, // $5662 + 132, // $5663 + 132, // $5664 + 132, // $5665 + 132, // $5666 + 132, // $5667 + 132, // $5668 + 132, // $5669 + 132, // $566A + 132, // $566B + 132, // $566C + 132, // $566D + 132, // $566E + 132, // $566F + 132, // $5670 + 132, // $5671 + 132, // $5672 + 132, // $5673 + 132, // $5674 + 132, // $5675 + 132, // $5676 + 132, // $5677 + 132, // $5678 + 132, // $5679 + 132, // $567A + 132, // $567B + 132, // $567C + 132, // $567D + 132, // $567E + 132, // $567F + 132, // $5680 + 132, // $5681 + 132, // $5682 + 132, // $5683 + 132, // $5684 + 132, // $5685 + 132, // $5686 + 132, // $5687 + 132, // $5688 + 132, // $5689 + 132, // $568A + 132, // $568B + 132, // $568C + 132, // $568D + 132, // $568E + 132, // $568F + 132, // $5690 + 132, // $5691 + 132, // $5692 + 132, // $5693 + 132, // $5694 + 132, // $5695 + 132, // $5696 + 132, // $5697 + 132, // $5698 + 132, // $5699 + 132, // $569A + 132, // $569B + 132, // $569C + 132, // $569D + 132, // $569E + 132, // $569F + 132, // $56A0 + 132, // $56A1 + 132, // $56A2 + 132, // $56A3 + 132, // $56A4 + 132, // $56A5 + 132, // $56A6 + 132, // $56A7 + 132, // $56A8 + 132, // $56A9 + 132, // $56AA + 132, // $56AB + 132, // $56AC + 132, // $56AD + 132, // $56AE + 132, // $56AF + 132, // $56B0 + 132, // $56B1 + 132, // $56B2 + 132, // $56B3 + 132, // $56B4 + 132, // $56B5 + 132, // $56B6 + 132, // $56B7 + 132, // $56B8 + 132, // $56B9 + 132, // $56BA + 132, // $56BB + 132, // $56BC + 132, // $56BD + 132, // $56BE + 132, // $56BF + 132, // $56C0 + 132, // $56C1 + 132, // $56C2 + 132, // $56C3 + 132, // $56C4 + 132, // $56C5 + 132, // $56C6 + 132, // $56C7 + 132, // $56C8 + 132, // $56C9 + 132, // $56CA + 132, // $56CB + 132, // $56CC + 132, // $56CD + 132, // $56CE + 132, // $56CF + 132, // $56D0 + 132, // $56D1 + 132, // $56D2 + 132, // $56D3 + 132, // $56D4 + 132, // $56D5 + 132, // $56D6 + 132, // $56D7 + 132, // $56D8 + 132, // $56D9 + 132, // $56DA + 132, // $56DB + 132, // $56DC + 132, // $56DD + 132, // $56DE + 132, // $56DF + 132, // $56E0 + 132, // $56E1 + 132, // $56E2 + 132, // $56E3 + 132, // $56E4 + 132, // $56E5 + 132, // $56E6 + 132, // $56E7 + 132, // $56E8 + 132, // $56E9 + 132, // $56EA + 132, // $56EB + 132, // $56EC + 132, // $56ED + 132, // $56EE + 132, // $56EF + 132, // $56F0 + 132, // $56F1 + 132, // $56F2 + 132, // $56F3 + 132, // $56F4 + 132, // $56F5 + 132, // $56F6 + 132, // $56F7 + 132, // $56F8 + 132, // $56F9 + 132, // $56FA + 132, // $56FB + 132, // $56FC + 132, // $56FD + 132, // $56FE + 132, // $56FF + 132, // $5700 + 132, // $5701 + 132, // $5702 + 132, // $5703 + 132, // $5704 + 132, // $5705 + 132, // $5706 + 132, // $5707 + 132, // $5708 + 132, // $5709 + 132, // $570A + 132, // $570B + 132, // $570C + 132, // $570D + 132, // $570E + 132, // $570F + 132, // $5710 + 132, // $5711 + 132, // $5712 + 132, // $5713 + 132, // $5714 + 132, // $5715 + 132, // $5716 + 132, // $5717 + 132, // $5718 + 132, // $5719 + 132, // $571A + 132, // $571B + 132, // $571C + 132, // $571D + 132, // $571E + 132, // $571F + 132, // $5720 + 132, // $5721 + 132, // $5722 + 132, // $5723 + 132, // $5724 + 132, // $5725 + 132, // $5726 + 132, // $5727 + 132, // $5728 + 132, // $5729 + 132, // $572A + 132, // $572B + 132, // $572C + 132, // $572D + 132, // $572E + 132, // $572F + 132, // $5730 + 132, // $5731 + 132, // $5732 + 132, // $5733 + 132, // $5734 + 132, // $5735 + 132, // $5736 + 132, // $5737 + 132, // $5738 + 132, // $5739 + 132, // $573A + 132, // $573B + 132, // $573C + 132, // $573D + 132, // $573E + 132, // $573F + 132, // $5740 + 132, // $5741 + 132, // $5742 + 132, // $5743 + 132, // $5744 + 132, // $5745 + 132, // $5746 + 132, // $5747 + 132, // $5748 + 132, // $5749 + 132, // $574A + 132, // $574B + 132, // $574C + 132, // $574D + 132, // $574E + 132, // $574F + 132, // $5750 + 132, // $5751 + 132, // $5752 + 132, // $5753 + 132, // $5754 + 132, // $5755 + 132, // $5756 + 132, // $5757 + 132, // $5758 + 132, // $5759 + 132, // $575A + 132, // $575B + 132, // $575C + 132, // $575D + 132, // $575E + 132, // $575F + 132, // $5760 + 132, // $5761 + 132, // $5762 + 132, // $5763 + 132, // $5764 + 132, // $5765 + 132, // $5766 + 132, // $5767 + 132, // $5768 + 132, // $5769 + 132, // $576A + 132, // $576B + 132, // $576C + 132, // $576D + 132, // $576E + 132, // $576F + 132, // $5770 + 132, // $5771 + 132, // $5772 + 132, // $5773 + 132, // $5774 + 132, // $5775 + 132, // $5776 + 132, // $5777 + 132, // $5778 + 132, // $5779 + 132, // $577A + 132, // $577B + 132, // $577C + 132, // $577D + 132, // $577E + 132, // $577F + 132, // $5780 + 132, // $5781 + 132, // $5782 + 132, // $5783 + 132, // $5784 + 132, // $5785 + 132, // $5786 + 132, // $5787 + 132, // $5788 + 132, // $5789 + 132, // $578A + 132, // $578B + 132, // $578C + 132, // $578D + 132, // $578E + 132, // $578F + 132, // $5790 + 132, // $5791 + 132, // $5792 + 132, // $5793 + 132, // $5794 + 132, // $5795 + 132, // $5796 + 132, // $5797 + 132, // $5798 + 132, // $5799 + 132, // $579A + 132, // $579B + 132, // $579C + 132, // $579D + 132, // $579E + 132, // $579F + 132, // $57A0 + 132, // $57A1 + 132, // $57A2 + 132, // $57A3 + 132, // $57A4 + 132, // $57A5 + 132, // $57A6 + 132, // $57A7 + 132, // $57A8 + 132, // $57A9 + 132, // $57AA + 132, // $57AB + 132, // $57AC + 132, // $57AD + 132, // $57AE + 132, // $57AF + 132, // $57B0 + 132, // $57B1 + 132, // $57B2 + 132, // $57B3 + 132, // $57B4 + 132, // $57B5 + 132, // $57B6 + 132, // $57B7 + 132, // $57B8 + 132, // $57B9 + 132, // $57BA + 132, // $57BB + 132, // $57BC + 132, // $57BD + 132, // $57BE + 132, // $57BF + 132, // $57C0 + 132, // $57C1 + 132, // $57C2 + 132, // $57C3 + 132, // $57C4 + 132, // $57C5 + 132, // $57C6 + 132, // $57C7 + 132, // $57C8 + 132, // $57C9 + 132, // $57CA + 132, // $57CB + 132, // $57CC + 132, // $57CD + 132, // $57CE + 132, // $57CF + 132, // $57D0 + 132, // $57D1 + 132, // $57D2 + 132, // $57D3 + 132, // $57D4 + 132, // $57D5 + 132, // $57D6 + 132, // $57D7 + 132, // $57D8 + 132, // $57D9 + 132, // $57DA + 132, // $57DB + 132, // $57DC + 132, // $57DD + 132, // $57DE + 132, // $57DF + 132, // $57E0 + 132, // $57E1 + 132, // $57E2 + 132, // $57E3 + 132, // $57E4 + 132, // $57E5 + 132, // $57E6 + 132, // $57E7 + 132, // $57E8 + 132, // $57E9 + 132, // $57EA + 132, // $57EB + 132, // $57EC + 132, // $57ED + 132, // $57EE + 132, // $57EF + 132, // $57F0 + 132, // $57F1 + 132, // $57F2 + 132, // $57F3 + 132, // $57F4 + 132, // $57F5 + 132, // $57F6 + 132, // $57F7 + 132, // $57F8 + 132, // $57F9 + 132, // $57FA + 132, // $57FB + 132, // $57FC + 132, // $57FD + 132, // $57FE + 132, // $57FF + 132, // $5800 + 132, // $5801 + 132, // $5802 + 132, // $5803 + 132, // $5804 + 132, // $5805 + 132, // $5806 + 132, // $5807 + 132, // $5808 + 132, // $5809 + 132, // $580A + 132, // $580B + 132, // $580C + 132, // $580D + 132, // $580E + 132, // $580F + 132, // $5810 + 132, // $5811 + 132, // $5812 + 132, // $5813 + 132, // $5814 + 132, // $5815 + 132, // $5816 + 132, // $5817 + 132, // $5818 + 132, // $5819 + 132, // $581A + 132, // $581B + 132, // $581C + 132, // $581D + 132, // $581E + 132, // $581F + 132, // $5820 + 132, // $5821 + 132, // $5822 + 132, // $5823 + 132, // $5824 + 132, // $5825 + 132, // $5826 + 132, // $5827 + 132, // $5828 + 132, // $5829 + 132, // $582A + 132, // $582B + 132, // $582C + 132, // $582D + 132, // $582E + 132, // $582F + 132, // $5830 + 132, // $5831 + 132, // $5832 + 132, // $5833 + 132, // $5834 + 132, // $5835 + 132, // $5836 + 132, // $5837 + 132, // $5838 + 132, // $5839 + 132, // $583A + 132, // $583B + 132, // $583C + 132, // $583D + 132, // $583E + 132, // $583F + 132, // $5840 + 132, // $5841 + 132, // $5842 + 132, // $5843 + 132, // $5844 + 132, // $5845 + 132, // $5846 + 132, // $5847 + 132, // $5848 + 132, // $5849 + 132, // $584A + 132, // $584B + 132, // $584C + 132, // $584D + 132, // $584E + 132, // $584F + 132, // $5850 + 132, // $5851 + 132, // $5852 + 132, // $5853 + 132, // $5854 + 132, // $5855 + 132, // $5856 + 132, // $5857 + 132, // $5858 + 132, // $5859 + 132, // $585A + 132, // $585B + 132, // $585C + 132, // $585D + 132, // $585E + 132, // $585F + 132, // $5860 + 132, // $5861 + 132, // $5862 + 132, // $5863 + 132, // $5864 + 132, // $5865 + 132, // $5866 + 132, // $5867 + 132, // $5868 + 132, // $5869 + 132, // $586A + 132, // $586B + 132, // $586C + 132, // $586D + 132, // $586E + 132, // $586F + 132, // $5870 + 132, // $5871 + 132, // $5872 + 132, // $5873 + 132, // $5874 + 132, // $5875 + 132, // $5876 + 132, // $5877 + 132, // $5878 + 132, // $5879 + 132, // $587A + 132, // $587B + 132, // $587C + 132, // $587D + 132, // $587E + 132, // $587F + 132, // $5880 + 132, // $5881 + 132, // $5882 + 132, // $5883 + 132, // $5884 + 132, // $5885 + 132, // $5886 + 132, // $5887 + 132, // $5888 + 132, // $5889 + 132, // $588A + 132, // $588B + 132, // $588C + 132, // $588D + 132, // $588E + 132, // $588F + 132, // $5890 + 132, // $5891 + 132, // $5892 + 132, // $5893 + 132, // $5894 + 132, // $5895 + 132, // $5896 + 132, // $5897 + 132, // $5898 + 132, // $5899 + 132, // $589A + 132, // $589B + 132, // $589C + 132, // $589D + 132, // $589E + 132, // $589F + 132, // $58A0 + 132, // $58A1 + 132, // $58A2 + 132, // $58A3 + 132, // $58A4 + 132, // $58A5 + 132, // $58A6 + 132, // $58A7 + 132, // $58A8 + 132, // $58A9 + 132, // $58AA + 132, // $58AB + 132, // $58AC + 132, // $58AD + 132, // $58AE + 132, // $58AF + 132, // $58B0 + 132, // $58B1 + 132, // $58B2 + 132, // $58B3 + 132, // $58B4 + 132, // $58B5 + 132, // $58B6 + 132, // $58B7 + 132, // $58B8 + 132, // $58B9 + 132, // $58BA + 132, // $58BB + 132, // $58BC + 132, // $58BD + 132, // $58BE + 132, // $58BF + 132, // $58C0 + 132, // $58C1 + 132, // $58C2 + 132, // $58C3 + 132, // $58C4 + 132, // $58C5 + 132, // $58C6 + 132, // $58C7 + 132, // $58C8 + 132, // $58C9 + 132, // $58CA + 132, // $58CB + 132, // $58CC + 132, // $58CD + 132, // $58CE + 132, // $58CF + 132, // $58D0 + 132, // $58D1 + 132, // $58D2 + 132, // $58D3 + 132, // $58D4 + 132, // $58D5 + 132, // $58D6 + 132, // $58D7 + 132, // $58D8 + 132, // $58D9 + 132, // $58DA + 132, // $58DB + 132, // $58DC + 132, // $58DD + 132, // $58DE + 132, // $58DF + 132, // $58E0 + 132, // $58E1 + 132, // $58E2 + 132, // $58E3 + 132, // $58E4 + 132, // $58E5 + 132, // $58E6 + 132, // $58E7 + 132, // $58E8 + 132, // $58E9 + 132, // $58EA + 132, // $58EB + 132, // $58EC + 132, // $58ED + 132, // $58EE + 132, // $58EF + 132, // $58F0 + 132, // $58F1 + 132, // $58F2 + 132, // $58F3 + 132, // $58F4 + 132, // $58F5 + 132, // $58F6 + 132, // $58F7 + 132, // $58F8 + 132, // $58F9 + 132, // $58FA + 132, // $58FB + 132, // $58FC + 132, // $58FD + 132, // $58FE + 132, // $58FF + 132, // $5900 + 132, // $5901 + 132, // $5902 + 132, // $5903 + 132, // $5904 + 132, // $5905 + 132, // $5906 + 132, // $5907 + 132, // $5908 + 132, // $5909 + 132, // $590A + 132, // $590B + 132, // $590C + 132, // $590D + 132, // $590E + 132, // $590F + 132, // $5910 + 132, // $5911 + 132, // $5912 + 132, // $5913 + 132, // $5914 + 132, // $5915 + 132, // $5916 + 132, // $5917 + 132, // $5918 + 132, // $5919 + 132, // $591A + 132, // $591B + 132, // $591C + 132, // $591D + 132, // $591E + 132, // $591F + 132, // $5920 + 132, // $5921 + 132, // $5922 + 132, // $5923 + 132, // $5924 + 132, // $5925 + 132, // $5926 + 132, // $5927 + 132, // $5928 + 132, // $5929 + 132, // $592A + 132, // $592B + 132, // $592C + 132, // $592D + 132, // $592E + 132, // $592F + 132, // $5930 + 132, // $5931 + 132, // $5932 + 132, // $5933 + 132, // $5934 + 132, // $5935 + 132, // $5936 + 132, // $5937 + 132, // $5938 + 132, // $5939 + 132, // $593A + 132, // $593B + 132, // $593C + 132, // $593D + 132, // $593E + 132, // $593F + 132, // $5940 + 132, // $5941 + 132, // $5942 + 132, // $5943 + 132, // $5944 + 132, // $5945 + 132, // $5946 + 132, // $5947 + 132, // $5948 + 132, // $5949 + 132, // $594A + 132, // $594B + 132, // $594C + 132, // $594D + 132, // $594E + 132, // $594F + 132, // $5950 + 132, // $5951 + 132, // $5952 + 132, // $5953 + 132, // $5954 + 132, // $5955 + 132, // $5956 + 132, // $5957 + 132, // $5958 + 132, // $5959 + 132, // $595A + 132, // $595B + 132, // $595C + 132, // $595D + 132, // $595E + 132, // $595F + 132, // $5960 + 132, // $5961 + 132, // $5962 + 132, // $5963 + 132, // $5964 + 132, // $5965 + 132, // $5966 + 132, // $5967 + 132, // $5968 + 132, // $5969 + 132, // $596A + 132, // $596B + 132, // $596C + 132, // $596D + 132, // $596E + 132, // $596F + 132, // $5970 + 132, // $5971 + 132, // $5972 + 132, // $5973 + 132, // $5974 + 132, // $5975 + 132, // $5976 + 132, // $5977 + 132, // $5978 + 132, // $5979 + 132, // $597A + 132, // $597B + 132, // $597C + 132, // $597D + 132, // $597E + 132, // $597F + 132, // $5980 + 132, // $5981 + 132, // $5982 + 132, // $5983 + 132, // $5984 + 132, // $5985 + 132, // $5986 + 132, // $5987 + 132, // $5988 + 132, // $5989 + 132, // $598A + 132, // $598B + 132, // $598C + 132, // $598D + 132, // $598E + 132, // $598F + 132, // $5990 + 132, // $5991 + 132, // $5992 + 132, // $5993 + 132, // $5994 + 132, // $5995 + 132, // $5996 + 132, // $5997 + 132, // $5998 + 132, // $5999 + 132, // $599A + 132, // $599B + 132, // $599C + 132, // $599D + 132, // $599E + 132, // $599F + 132, // $59A0 + 132, // $59A1 + 132, // $59A2 + 132, // $59A3 + 132, // $59A4 + 132, // $59A5 + 132, // $59A6 + 132, // $59A7 + 132, // $59A8 + 132, // $59A9 + 132, // $59AA + 132, // $59AB + 132, // $59AC + 132, // $59AD + 132, // $59AE + 132, // $59AF + 132, // $59B0 + 132, // $59B1 + 132, // $59B2 + 132, // $59B3 + 132, // $59B4 + 132, // $59B5 + 132, // $59B6 + 132, // $59B7 + 132, // $59B8 + 132, // $59B9 + 132, // $59BA + 132, // $59BB + 132, // $59BC + 132, // $59BD + 132, // $59BE + 132, // $59BF + 132, // $59C0 + 132, // $59C1 + 132, // $59C2 + 132, // $59C3 + 132, // $59C4 + 132, // $59C5 + 132, // $59C6 + 132, // $59C7 + 132, // $59C8 + 132, // $59C9 + 132, // $59CA + 132, // $59CB + 132, // $59CC + 132, // $59CD + 132, // $59CE + 132, // $59CF + 132, // $59D0 + 132, // $59D1 + 132, // $59D2 + 132, // $59D3 + 132, // $59D4 + 132, // $59D5 + 132, // $59D6 + 132, // $59D7 + 132, // $59D8 + 132, // $59D9 + 132, // $59DA + 132, // $59DB + 132, // $59DC + 132, // $59DD + 132, // $59DE + 132, // $59DF + 132, // $59E0 + 132, // $59E1 + 132, // $59E2 + 132, // $59E3 + 132, // $59E4 + 132, // $59E5 + 132, // $59E6 + 132, // $59E7 + 132, // $59E8 + 132, // $59E9 + 132, // $59EA + 132, // $59EB + 132, // $59EC + 132, // $59ED + 132, // $59EE + 132, // $59EF + 132, // $59F0 + 132, // $59F1 + 132, // $59F2 + 132, // $59F3 + 132, // $59F4 + 132, // $59F5 + 132, // $59F6 + 132, // $59F7 + 132, // $59F8 + 132, // $59F9 + 132, // $59FA + 132, // $59FB + 132, // $59FC + 132, // $59FD + 132, // $59FE + 132, // $59FF + 132, // $5A00 + 132, // $5A01 + 132, // $5A02 + 132, // $5A03 + 132, // $5A04 + 132, // $5A05 + 132, // $5A06 + 132, // $5A07 + 132, // $5A08 + 132, // $5A09 + 132, // $5A0A + 132, // $5A0B + 132, // $5A0C + 132, // $5A0D + 132, // $5A0E + 132, // $5A0F + 132, // $5A10 + 132, // $5A11 + 132, // $5A12 + 132, // $5A13 + 132, // $5A14 + 132, // $5A15 + 132, // $5A16 + 132, // $5A17 + 132, // $5A18 + 132, // $5A19 + 132, // $5A1A + 132, // $5A1B + 132, // $5A1C + 132, // $5A1D + 132, // $5A1E + 132, // $5A1F + 132, // $5A20 + 132, // $5A21 + 132, // $5A22 + 132, // $5A23 + 132, // $5A24 + 132, // $5A25 + 132, // $5A26 + 132, // $5A27 + 132, // $5A28 + 132, // $5A29 + 132, // $5A2A + 132, // $5A2B + 132, // $5A2C + 132, // $5A2D + 132, // $5A2E + 132, // $5A2F + 132, // $5A30 + 132, // $5A31 + 132, // $5A32 + 132, // $5A33 + 132, // $5A34 + 132, // $5A35 + 132, // $5A36 + 132, // $5A37 + 132, // $5A38 + 132, // $5A39 + 132, // $5A3A + 132, // $5A3B + 132, // $5A3C + 132, // $5A3D + 132, // $5A3E + 132, // $5A3F + 132, // $5A40 + 132, // $5A41 + 132, // $5A42 + 132, // $5A43 + 132, // $5A44 + 132, // $5A45 + 132, // $5A46 + 132, // $5A47 + 132, // $5A48 + 132, // $5A49 + 132, // $5A4A + 132, // $5A4B + 132, // $5A4C + 132, // $5A4D + 132, // $5A4E + 132, // $5A4F + 132, // $5A50 + 132, // $5A51 + 132, // $5A52 + 132, // $5A53 + 132, // $5A54 + 132, // $5A55 + 132, // $5A56 + 132, // $5A57 + 132, // $5A58 + 132, // $5A59 + 132, // $5A5A + 132, // $5A5B + 132, // $5A5C + 132, // $5A5D + 132, // $5A5E + 132, // $5A5F + 132, // $5A60 + 132, // $5A61 + 132, // $5A62 + 132, // $5A63 + 132, // $5A64 + 132, // $5A65 + 132, // $5A66 + 132, // $5A67 + 132, // $5A68 + 132, // $5A69 + 132, // $5A6A + 132, // $5A6B + 132, // $5A6C + 132, // $5A6D + 132, // $5A6E + 132, // $5A6F + 132, // $5A70 + 132, // $5A71 + 132, // $5A72 + 132, // $5A73 + 132, // $5A74 + 132, // $5A75 + 132, // $5A76 + 132, // $5A77 + 132, // $5A78 + 132, // $5A79 + 132, // $5A7A + 132, // $5A7B + 132, // $5A7C + 132, // $5A7D + 132, // $5A7E + 132, // $5A7F + 132, // $5A80 + 132, // $5A81 + 132, // $5A82 + 132, // $5A83 + 132, // $5A84 + 132, // $5A85 + 132, // $5A86 + 132, // $5A87 + 132, // $5A88 + 132, // $5A89 + 132, // $5A8A + 132, // $5A8B + 132, // $5A8C + 132, // $5A8D + 132, // $5A8E + 132, // $5A8F + 132, // $5A90 + 132, // $5A91 + 132, // $5A92 + 132, // $5A93 + 132, // $5A94 + 132, // $5A95 + 132, // $5A96 + 132, // $5A97 + 132, // $5A98 + 132, // $5A99 + 132, // $5A9A + 132, // $5A9B + 132, // $5A9C + 132, // $5A9D + 132, // $5A9E + 132, // $5A9F + 132, // $5AA0 + 132, // $5AA1 + 132, // $5AA2 + 132, // $5AA3 + 132, // $5AA4 + 132, // $5AA5 + 132, // $5AA6 + 132, // $5AA7 + 132, // $5AA8 + 132, // $5AA9 + 132, // $5AAA + 132, // $5AAB + 132, // $5AAC + 132, // $5AAD + 132, // $5AAE + 132, // $5AAF + 132, // $5AB0 + 132, // $5AB1 + 132, // $5AB2 + 132, // $5AB3 + 132, // $5AB4 + 132, // $5AB5 + 132, // $5AB6 + 132, // $5AB7 + 132, // $5AB8 + 132, // $5AB9 + 132, // $5ABA + 132, // $5ABB + 132, // $5ABC + 132, // $5ABD + 132, // $5ABE + 132, // $5ABF + 132, // $5AC0 + 132, // $5AC1 + 132, // $5AC2 + 132, // $5AC3 + 132, // $5AC4 + 132, // $5AC5 + 132, // $5AC6 + 132, // $5AC7 + 132, // $5AC8 + 132, // $5AC9 + 132, // $5ACA + 132, // $5ACB + 132, // $5ACC + 132, // $5ACD + 132, // $5ACE + 132, // $5ACF + 132, // $5AD0 + 132, // $5AD1 + 132, // $5AD2 + 132, // $5AD3 + 132, // $5AD4 + 132, // $5AD5 + 132, // $5AD6 + 132, // $5AD7 + 132, // $5AD8 + 132, // $5AD9 + 132, // $5ADA + 132, // $5ADB + 132, // $5ADC + 132, // $5ADD + 132, // $5ADE + 132, // $5ADF + 132, // $5AE0 + 132, // $5AE1 + 132, // $5AE2 + 132, // $5AE3 + 132, // $5AE4 + 132, // $5AE5 + 132, // $5AE6 + 132, // $5AE7 + 132, // $5AE8 + 132, // $5AE9 + 132, // $5AEA + 132, // $5AEB + 132, // $5AEC + 132, // $5AED + 132, // $5AEE + 132, // $5AEF + 132, // $5AF0 + 132, // $5AF1 + 132, // $5AF2 + 132, // $5AF3 + 132, // $5AF4 + 132, // $5AF5 + 132, // $5AF6 + 132, // $5AF7 + 132, // $5AF8 + 132, // $5AF9 + 132, // $5AFA + 132, // $5AFB + 132, // $5AFC + 132, // $5AFD + 132, // $5AFE + 132, // $5AFF + 132, // $5B00 + 132, // $5B01 + 132, // $5B02 + 132, // $5B03 + 132, // $5B04 + 132, // $5B05 + 132, // $5B06 + 132, // $5B07 + 132, // $5B08 + 132, // $5B09 + 132, // $5B0A + 132, // $5B0B + 132, // $5B0C + 132, // $5B0D + 132, // $5B0E + 132, // $5B0F + 132, // $5B10 + 132, // $5B11 + 132, // $5B12 + 132, // $5B13 + 132, // $5B14 + 132, // $5B15 + 132, // $5B16 + 132, // $5B17 + 132, // $5B18 + 132, // $5B19 + 132, // $5B1A + 132, // $5B1B + 132, // $5B1C + 132, // $5B1D + 132, // $5B1E + 132, // $5B1F + 132, // $5B20 + 132, // $5B21 + 132, // $5B22 + 132, // $5B23 + 132, // $5B24 + 132, // $5B25 + 132, // $5B26 + 132, // $5B27 + 132, // $5B28 + 132, // $5B29 + 132, // $5B2A + 132, // $5B2B + 132, // $5B2C + 132, // $5B2D + 132, // $5B2E + 132, // $5B2F + 132, // $5B30 + 132, // $5B31 + 132, // $5B32 + 132, // $5B33 + 132, // $5B34 + 132, // $5B35 + 132, // $5B36 + 132, // $5B37 + 132, // $5B38 + 132, // $5B39 + 132, // $5B3A + 132, // $5B3B + 132, // $5B3C + 132, // $5B3D + 132, // $5B3E + 132, // $5B3F + 132, // $5B40 + 132, // $5B41 + 132, // $5B42 + 132, // $5B43 + 132, // $5B44 + 132, // $5B45 + 132, // $5B46 + 132, // $5B47 + 132, // $5B48 + 132, // $5B49 + 132, // $5B4A + 132, // $5B4B + 132, // $5B4C + 132, // $5B4D + 132, // $5B4E + 132, // $5B4F + 132, // $5B50 + 132, // $5B51 + 132, // $5B52 + 132, // $5B53 + 132, // $5B54 + 132, // $5B55 + 132, // $5B56 + 132, // $5B57 + 132, // $5B58 + 132, // $5B59 + 132, // $5B5A + 132, // $5B5B + 132, // $5B5C + 132, // $5B5D + 132, // $5B5E + 132, // $5B5F + 132, // $5B60 + 132, // $5B61 + 132, // $5B62 + 132, // $5B63 + 132, // $5B64 + 132, // $5B65 + 132, // $5B66 + 132, // $5B67 + 132, // $5B68 + 132, // $5B69 + 132, // $5B6A + 132, // $5B6B + 132, // $5B6C + 132, // $5B6D + 132, // $5B6E + 132, // $5B6F + 132, // $5B70 + 132, // $5B71 + 132, // $5B72 + 132, // $5B73 + 132, // $5B74 + 132, // $5B75 + 132, // $5B76 + 132, // $5B77 + 132, // $5B78 + 132, // $5B79 + 132, // $5B7A + 132, // $5B7B + 132, // $5B7C + 132, // $5B7D + 132, // $5B7E + 132, // $5B7F + 132, // $5B80 + 132, // $5B81 + 132, // $5B82 + 132, // $5B83 + 132, // $5B84 + 132, // $5B85 + 132, // $5B86 + 132, // $5B87 + 132, // $5B88 + 132, // $5B89 + 132, // $5B8A + 132, // $5B8B + 132, // $5B8C + 132, // $5B8D + 132, // $5B8E + 132, // $5B8F + 132, // $5B90 + 132, // $5B91 + 132, // $5B92 + 132, // $5B93 + 132, // $5B94 + 132, // $5B95 + 132, // $5B96 + 132, // $5B97 + 132, // $5B98 + 132, // $5B99 + 132, // $5B9A + 132, // $5B9B + 132, // $5B9C + 132, // $5B9D + 132, // $5B9E + 132, // $5B9F + 132, // $5BA0 + 132, // $5BA1 + 132, // $5BA2 + 132, // $5BA3 + 132, // $5BA4 + 132, // $5BA5 + 132, // $5BA6 + 132, // $5BA7 + 132, // $5BA8 + 132, // $5BA9 + 132, // $5BAA + 132, // $5BAB + 132, // $5BAC + 132, // $5BAD + 132, // $5BAE + 132, // $5BAF + 132, // $5BB0 + 132, // $5BB1 + 132, // $5BB2 + 132, // $5BB3 + 132, // $5BB4 + 132, // $5BB5 + 132, // $5BB6 + 132, // $5BB7 + 132, // $5BB8 + 132, // $5BB9 + 132, // $5BBA + 132, // $5BBB + 132, // $5BBC + 132, // $5BBD + 132, // $5BBE + 132, // $5BBF + 132, // $5BC0 + 132, // $5BC1 + 132, // $5BC2 + 132, // $5BC3 + 132, // $5BC4 + 132, // $5BC5 + 132, // $5BC6 + 132, // $5BC7 + 132, // $5BC8 + 132, // $5BC9 + 132, // $5BCA + 132, // $5BCB + 132, // $5BCC + 132, // $5BCD + 132, // $5BCE + 132, // $5BCF + 132, // $5BD0 + 132, // $5BD1 + 132, // $5BD2 + 132, // $5BD3 + 132, // $5BD4 + 132, // $5BD5 + 132, // $5BD6 + 132, // $5BD7 + 132, // $5BD8 + 132, // $5BD9 + 132, // $5BDA + 132, // $5BDB + 132, // $5BDC + 132, // $5BDD + 132, // $5BDE + 132, // $5BDF + 132, // $5BE0 + 132, // $5BE1 + 132, // $5BE2 + 132, // $5BE3 + 132, // $5BE4 + 132, // $5BE5 + 132, // $5BE6 + 132, // $5BE7 + 132, // $5BE8 + 132, // $5BE9 + 132, // $5BEA + 132, // $5BEB + 132, // $5BEC + 132, // $5BED + 132, // $5BEE + 132, // $5BEF + 132, // $5BF0 + 132, // $5BF1 + 132, // $5BF2 + 132, // $5BF3 + 132, // $5BF4 + 132, // $5BF5 + 132, // $5BF6 + 132, // $5BF7 + 132, // $5BF8 + 132, // $5BF9 + 132, // $5BFA + 132, // $5BFB + 132, // $5BFC + 132, // $5BFD + 132, // $5BFE + 132, // $5BFF + 132, // $5C00 + 132, // $5C01 + 132, // $5C02 + 132, // $5C03 + 132, // $5C04 + 132, // $5C05 + 132, // $5C06 + 132, // $5C07 + 132, // $5C08 + 132, // $5C09 + 132, // $5C0A + 132, // $5C0B + 132, // $5C0C + 132, // $5C0D + 132, // $5C0E + 132, // $5C0F + 132, // $5C10 + 132, // $5C11 + 132, // $5C12 + 132, // $5C13 + 132, // $5C14 + 132, // $5C15 + 132, // $5C16 + 132, // $5C17 + 132, // $5C18 + 132, // $5C19 + 132, // $5C1A + 132, // $5C1B + 132, // $5C1C + 132, // $5C1D + 132, // $5C1E + 132, // $5C1F + 132, // $5C20 + 132, // $5C21 + 132, // $5C22 + 132, // $5C23 + 132, // $5C24 + 132, // $5C25 + 132, // $5C26 + 132, // $5C27 + 132, // $5C28 + 132, // $5C29 + 132, // $5C2A + 132, // $5C2B + 132, // $5C2C + 132, // $5C2D + 132, // $5C2E + 132, // $5C2F + 132, // $5C30 + 132, // $5C31 + 132, // $5C32 + 132, // $5C33 + 132, // $5C34 + 132, // $5C35 + 132, // $5C36 + 132, // $5C37 + 132, // $5C38 + 132, // $5C39 + 132, // $5C3A + 132, // $5C3B + 132, // $5C3C + 132, // $5C3D + 132, // $5C3E + 132, // $5C3F + 132, // $5C40 + 132, // $5C41 + 132, // $5C42 + 132, // $5C43 + 132, // $5C44 + 132, // $5C45 + 132, // $5C46 + 132, // $5C47 + 132, // $5C48 + 132, // $5C49 + 132, // $5C4A + 132, // $5C4B + 132, // $5C4C + 132, // $5C4D + 132, // $5C4E + 132, // $5C4F + 132, // $5C50 + 132, // $5C51 + 132, // $5C52 + 132, // $5C53 + 132, // $5C54 + 132, // $5C55 + 132, // $5C56 + 132, // $5C57 + 132, // $5C58 + 132, // $5C59 + 132, // $5C5A + 132, // $5C5B + 132, // $5C5C + 132, // $5C5D + 132, // $5C5E + 132, // $5C5F + 132, // $5C60 + 132, // $5C61 + 132, // $5C62 + 132, // $5C63 + 132, // $5C64 + 132, // $5C65 + 132, // $5C66 + 132, // $5C67 + 132, // $5C68 + 132, // $5C69 + 132, // $5C6A + 132, // $5C6B + 132, // $5C6C + 132, // $5C6D + 132, // $5C6E + 132, // $5C6F + 132, // $5C70 + 132, // $5C71 + 132, // $5C72 + 132, // $5C73 + 132, // $5C74 + 132, // $5C75 + 132, // $5C76 + 132, // $5C77 + 132, // $5C78 + 132, // $5C79 + 132, // $5C7A + 132, // $5C7B + 132, // $5C7C + 132, // $5C7D + 132, // $5C7E + 132, // $5C7F + 132, // $5C80 + 132, // $5C81 + 132, // $5C82 + 132, // $5C83 + 132, // $5C84 + 132, // $5C85 + 132, // $5C86 + 132, // $5C87 + 132, // $5C88 + 132, // $5C89 + 132, // $5C8A + 132, // $5C8B + 132, // $5C8C + 132, // $5C8D + 132, // $5C8E + 132, // $5C8F + 132, // $5C90 + 132, // $5C91 + 132, // $5C92 + 132, // $5C93 + 132, // $5C94 + 132, // $5C95 + 132, // $5C96 + 132, // $5C97 + 132, // $5C98 + 132, // $5C99 + 132, // $5C9A + 132, // $5C9B + 132, // $5C9C + 132, // $5C9D + 132, // $5C9E + 132, // $5C9F + 132, // $5CA0 + 132, // $5CA1 + 132, // $5CA2 + 132, // $5CA3 + 132, // $5CA4 + 132, // $5CA5 + 132, // $5CA6 + 132, // $5CA7 + 132, // $5CA8 + 132, // $5CA9 + 132, // $5CAA + 132, // $5CAB + 132, // $5CAC + 132, // $5CAD + 132, // $5CAE + 132, // $5CAF + 132, // $5CB0 + 132, // $5CB1 + 132, // $5CB2 + 132, // $5CB3 + 132, // $5CB4 + 132, // $5CB5 + 132, // $5CB6 + 132, // $5CB7 + 132, // $5CB8 + 132, // $5CB9 + 132, // $5CBA + 132, // $5CBB + 132, // $5CBC + 132, // $5CBD + 132, // $5CBE + 132, // $5CBF + 132, // $5CC0 + 132, // $5CC1 + 132, // $5CC2 + 132, // $5CC3 + 132, // $5CC4 + 132, // $5CC5 + 132, // $5CC6 + 132, // $5CC7 + 132, // $5CC8 + 132, // $5CC9 + 132, // $5CCA + 132, // $5CCB + 132, // $5CCC + 132, // $5CCD + 132, // $5CCE + 132, // $5CCF + 132, // $5CD0 + 132, // $5CD1 + 132, // $5CD2 + 132, // $5CD3 + 132, // $5CD4 + 132, // $5CD5 + 132, // $5CD6 + 132, // $5CD7 + 132, // $5CD8 + 132, // $5CD9 + 132, // $5CDA + 132, // $5CDB + 132, // $5CDC + 132, // $5CDD + 132, // $5CDE + 132, // $5CDF + 132, // $5CE0 + 132, // $5CE1 + 132, // $5CE2 + 132, // $5CE3 + 132, // $5CE4 + 132, // $5CE5 + 132, // $5CE6 + 132, // $5CE7 + 132, // $5CE8 + 132, // $5CE9 + 132, // $5CEA + 132, // $5CEB + 132, // $5CEC + 132, // $5CED + 132, // $5CEE + 132, // $5CEF + 132, // $5CF0 + 132, // $5CF1 + 132, // $5CF2 + 132, // $5CF3 + 132, // $5CF4 + 132, // $5CF5 + 132, // $5CF6 + 132, // $5CF7 + 132, // $5CF8 + 132, // $5CF9 + 132, // $5CFA + 132, // $5CFB + 132, // $5CFC + 132, // $5CFD + 132, // $5CFE + 132, // $5CFF + 132, // $5D00 + 132, // $5D01 + 132, // $5D02 + 132, // $5D03 + 132, // $5D04 + 132, // $5D05 + 132, // $5D06 + 132, // $5D07 + 132, // $5D08 + 132, // $5D09 + 132, // $5D0A + 132, // $5D0B + 132, // $5D0C + 132, // $5D0D + 132, // $5D0E + 132, // $5D0F + 132, // $5D10 + 132, // $5D11 + 132, // $5D12 + 132, // $5D13 + 132, // $5D14 + 132, // $5D15 + 132, // $5D16 + 132, // $5D17 + 132, // $5D18 + 132, // $5D19 + 132, // $5D1A + 132, // $5D1B + 132, // $5D1C + 132, // $5D1D + 132, // $5D1E + 132, // $5D1F + 132, // $5D20 + 132, // $5D21 + 132, // $5D22 + 132, // $5D23 + 132, // $5D24 + 132, // $5D25 + 132, // $5D26 + 132, // $5D27 + 132, // $5D28 + 132, // $5D29 + 132, // $5D2A + 132, // $5D2B + 132, // $5D2C + 132, // $5D2D + 132, // $5D2E + 132, // $5D2F + 132, // $5D30 + 132, // $5D31 + 132, // $5D32 + 132, // $5D33 + 132, // $5D34 + 132, // $5D35 + 132, // $5D36 + 132, // $5D37 + 132, // $5D38 + 132, // $5D39 + 132, // $5D3A + 132, // $5D3B + 132, // $5D3C + 132, // $5D3D + 132, // $5D3E + 132, // $5D3F + 132, // $5D40 + 132, // $5D41 + 132, // $5D42 + 132, // $5D43 + 132, // $5D44 + 132, // $5D45 + 132, // $5D46 + 132, // $5D47 + 132, // $5D48 + 132, // $5D49 + 132, // $5D4A + 132, // $5D4B + 132, // $5D4C + 132, // $5D4D + 132, // $5D4E + 132, // $5D4F + 132, // $5D50 + 132, // $5D51 + 132, // $5D52 + 132, // $5D53 + 132, // $5D54 + 132, // $5D55 + 132, // $5D56 + 132, // $5D57 + 132, // $5D58 + 132, // $5D59 + 132, // $5D5A + 132, // $5D5B + 132, // $5D5C + 132, // $5D5D + 132, // $5D5E + 132, // $5D5F + 132, // $5D60 + 132, // $5D61 + 132, // $5D62 + 132, // $5D63 + 132, // $5D64 + 132, // $5D65 + 132, // $5D66 + 132, // $5D67 + 132, // $5D68 + 132, // $5D69 + 132, // $5D6A + 132, // $5D6B + 132, // $5D6C + 132, // $5D6D + 132, // $5D6E + 132, // $5D6F + 132, // $5D70 + 132, // $5D71 + 132, // $5D72 + 132, // $5D73 + 132, // $5D74 + 132, // $5D75 + 132, // $5D76 + 132, // $5D77 + 132, // $5D78 + 132, // $5D79 + 132, // $5D7A + 132, // $5D7B + 132, // $5D7C + 132, // $5D7D + 132, // $5D7E + 132, // $5D7F + 132, // $5D80 + 132, // $5D81 + 132, // $5D82 + 132, // $5D83 + 132, // $5D84 + 132, // $5D85 + 132, // $5D86 + 132, // $5D87 + 132, // $5D88 + 132, // $5D89 + 132, // $5D8A + 132, // $5D8B + 132, // $5D8C + 132, // $5D8D + 132, // $5D8E + 132, // $5D8F + 132, // $5D90 + 132, // $5D91 + 132, // $5D92 + 132, // $5D93 + 132, // $5D94 + 132, // $5D95 + 132, // $5D96 + 132, // $5D97 + 132, // $5D98 + 132, // $5D99 + 132, // $5D9A + 132, // $5D9B + 132, // $5D9C + 132, // $5D9D + 132, // $5D9E + 132, // $5D9F + 132, // $5DA0 + 132, // $5DA1 + 132, // $5DA2 + 132, // $5DA3 + 132, // $5DA4 + 132, // $5DA5 + 132, // $5DA6 + 132, // $5DA7 + 132, // $5DA8 + 132, // $5DA9 + 132, // $5DAA + 132, // $5DAB + 132, // $5DAC + 132, // $5DAD + 132, // $5DAE + 132, // $5DAF + 132, // $5DB0 + 132, // $5DB1 + 132, // $5DB2 + 132, // $5DB3 + 132, // $5DB4 + 132, // $5DB5 + 132, // $5DB6 + 132, // $5DB7 + 132, // $5DB8 + 132, // $5DB9 + 132, // $5DBA + 132, // $5DBB + 132, // $5DBC + 132, // $5DBD + 132, // $5DBE + 132, // $5DBF + 132, // $5DC0 + 132, // $5DC1 + 132, // $5DC2 + 132, // $5DC3 + 132, // $5DC4 + 132, // $5DC5 + 132, // $5DC6 + 132, // $5DC7 + 132, // $5DC8 + 132, // $5DC9 + 132, // $5DCA + 132, // $5DCB + 132, // $5DCC + 132, // $5DCD + 132, // $5DCE + 132, // $5DCF + 132, // $5DD0 + 132, // $5DD1 + 132, // $5DD2 + 132, // $5DD3 + 132, // $5DD4 + 132, // $5DD5 + 132, // $5DD6 + 132, // $5DD7 + 132, // $5DD8 + 132, // $5DD9 + 132, // $5DDA + 132, // $5DDB + 132, // $5DDC + 132, // $5DDD + 132, // $5DDE + 132, // $5DDF + 132, // $5DE0 + 132, // $5DE1 + 132, // $5DE2 + 132, // $5DE3 + 132, // $5DE4 + 132, // $5DE5 + 132, // $5DE6 + 132, // $5DE7 + 132, // $5DE8 + 132, // $5DE9 + 132, // $5DEA + 132, // $5DEB + 132, // $5DEC + 132, // $5DED + 132, // $5DEE + 132, // $5DEF + 132, // $5DF0 + 132, // $5DF1 + 132, // $5DF2 + 132, // $5DF3 + 132, // $5DF4 + 132, // $5DF5 + 132, // $5DF6 + 132, // $5DF7 + 132, // $5DF8 + 132, // $5DF9 + 132, // $5DFA + 132, // $5DFB + 132, // $5DFC + 132, // $5DFD + 132, // $5DFE + 132, // $5DFF + 132, // $5E00 + 132, // $5E01 + 132, // $5E02 + 132, // $5E03 + 132, // $5E04 + 132, // $5E05 + 132, // $5E06 + 132, // $5E07 + 132, // $5E08 + 132, // $5E09 + 132, // $5E0A + 132, // $5E0B + 132, // $5E0C + 132, // $5E0D + 132, // $5E0E + 132, // $5E0F + 132, // $5E10 + 132, // $5E11 + 132, // $5E12 + 132, // $5E13 + 132, // $5E14 + 132, // $5E15 + 132, // $5E16 + 132, // $5E17 + 132, // $5E18 + 132, // $5E19 + 132, // $5E1A + 132, // $5E1B + 132, // $5E1C + 132, // $5E1D + 132, // $5E1E + 132, // $5E1F + 132, // $5E20 + 132, // $5E21 + 132, // $5E22 + 132, // $5E23 + 132, // $5E24 + 132, // $5E25 + 132, // $5E26 + 132, // $5E27 + 132, // $5E28 + 132, // $5E29 + 132, // $5E2A + 132, // $5E2B + 132, // $5E2C + 132, // $5E2D + 132, // $5E2E + 132, // $5E2F + 132, // $5E30 + 132, // $5E31 + 132, // $5E32 + 132, // $5E33 + 132, // $5E34 + 132, // $5E35 + 132, // $5E36 + 132, // $5E37 + 132, // $5E38 + 132, // $5E39 + 132, // $5E3A + 132, // $5E3B + 132, // $5E3C + 132, // $5E3D + 132, // $5E3E + 132, // $5E3F + 132, // $5E40 + 132, // $5E41 + 132, // $5E42 + 132, // $5E43 + 132, // $5E44 + 132, // $5E45 + 132, // $5E46 + 132, // $5E47 + 132, // $5E48 + 132, // $5E49 + 132, // $5E4A + 132, // $5E4B + 132, // $5E4C + 132, // $5E4D + 132, // $5E4E + 132, // $5E4F + 132, // $5E50 + 132, // $5E51 + 132, // $5E52 + 132, // $5E53 + 132, // $5E54 + 132, // $5E55 + 132, // $5E56 + 132, // $5E57 + 132, // $5E58 + 132, // $5E59 + 132, // $5E5A + 132, // $5E5B + 132, // $5E5C + 132, // $5E5D + 132, // $5E5E + 132, // $5E5F + 132, // $5E60 + 132, // $5E61 + 132, // $5E62 + 132, // $5E63 + 132, // $5E64 + 132, // $5E65 + 132, // $5E66 + 132, // $5E67 + 132, // $5E68 + 132, // $5E69 + 132, // $5E6A + 132, // $5E6B + 132, // $5E6C + 132, // $5E6D + 132, // $5E6E + 132, // $5E6F + 132, // $5E70 + 132, // $5E71 + 132, // $5E72 + 132, // $5E73 + 132, // $5E74 + 132, // $5E75 + 132, // $5E76 + 132, // $5E77 + 132, // $5E78 + 132, // $5E79 + 132, // $5E7A + 132, // $5E7B + 132, // $5E7C + 132, // $5E7D + 132, // $5E7E + 132, // $5E7F + 132, // $5E80 + 132, // $5E81 + 132, // $5E82 + 132, // $5E83 + 132, // $5E84 + 132, // $5E85 + 132, // $5E86 + 132, // $5E87 + 132, // $5E88 + 132, // $5E89 + 132, // $5E8A + 132, // $5E8B + 132, // $5E8C + 132, // $5E8D + 132, // $5E8E + 132, // $5E8F + 132, // $5E90 + 132, // $5E91 + 132, // $5E92 + 132, // $5E93 + 132, // $5E94 + 132, // $5E95 + 132, // $5E96 + 132, // $5E97 + 132, // $5E98 + 132, // $5E99 + 132, // $5E9A + 132, // $5E9B + 132, // $5E9C + 132, // $5E9D + 132, // $5E9E + 132, // $5E9F + 132, // $5EA0 + 132, // $5EA1 + 132, // $5EA2 + 132, // $5EA3 + 132, // $5EA4 + 132, // $5EA5 + 132, // $5EA6 + 132, // $5EA7 + 132, // $5EA8 + 132, // $5EA9 + 132, // $5EAA + 132, // $5EAB + 132, // $5EAC + 132, // $5EAD + 132, // $5EAE + 132, // $5EAF + 132, // $5EB0 + 132, // $5EB1 + 132, // $5EB2 + 132, // $5EB3 + 132, // $5EB4 + 132, // $5EB5 + 132, // $5EB6 + 132, // $5EB7 + 132, // $5EB8 + 132, // $5EB9 + 132, // $5EBA + 132, // $5EBB + 132, // $5EBC + 132, // $5EBD + 132, // $5EBE + 132, // $5EBF + 132, // $5EC0 + 132, // $5EC1 + 132, // $5EC2 + 132, // $5EC3 + 132, // $5EC4 + 132, // $5EC5 + 132, // $5EC6 + 132, // $5EC7 + 132, // $5EC8 + 132, // $5EC9 + 132, // $5ECA + 132, // $5ECB + 132, // $5ECC + 132, // $5ECD + 132, // $5ECE + 132, // $5ECF + 132, // $5ED0 + 132, // $5ED1 + 132, // $5ED2 + 132, // $5ED3 + 132, // $5ED4 + 132, // $5ED5 + 132, // $5ED6 + 132, // $5ED7 + 132, // $5ED8 + 132, // $5ED9 + 132, // $5EDA + 132, // $5EDB + 132, // $5EDC + 132, // $5EDD + 132, // $5EDE + 132, // $5EDF + 132, // $5EE0 + 132, // $5EE1 + 132, // $5EE2 + 132, // $5EE3 + 132, // $5EE4 + 132, // $5EE5 + 132, // $5EE6 + 132, // $5EE7 + 132, // $5EE8 + 132, // $5EE9 + 132, // $5EEA + 132, // $5EEB + 132, // $5EEC + 132, // $5EED + 132, // $5EEE + 132, // $5EEF + 132, // $5EF0 + 132, // $5EF1 + 132, // $5EF2 + 132, // $5EF3 + 132, // $5EF4 + 132, // $5EF5 + 132, // $5EF6 + 132, // $5EF7 + 132, // $5EF8 + 132, // $5EF9 + 132, // $5EFA + 132, // $5EFB + 132, // $5EFC + 132, // $5EFD + 132, // $5EFE + 132, // $5EFF + 132, // $5F00 + 132, // $5F01 + 132, // $5F02 + 132, // $5F03 + 132, // $5F04 + 132, // $5F05 + 132, // $5F06 + 132, // $5F07 + 132, // $5F08 + 132, // $5F09 + 132, // $5F0A + 132, // $5F0B + 132, // $5F0C + 132, // $5F0D + 132, // $5F0E + 132, // $5F0F + 132, // $5F10 + 132, // $5F11 + 132, // $5F12 + 132, // $5F13 + 132, // $5F14 + 132, // $5F15 + 132, // $5F16 + 132, // $5F17 + 132, // $5F18 + 132, // $5F19 + 132, // $5F1A + 132, // $5F1B + 132, // $5F1C + 132, // $5F1D + 132, // $5F1E + 132, // $5F1F + 132, // $5F20 + 132, // $5F21 + 132, // $5F22 + 132, // $5F23 + 132, // $5F24 + 132, // $5F25 + 132, // $5F26 + 132, // $5F27 + 132, // $5F28 + 132, // $5F29 + 132, // $5F2A + 132, // $5F2B + 132, // $5F2C + 132, // $5F2D + 132, // $5F2E + 132, // $5F2F + 132, // $5F30 + 132, // $5F31 + 132, // $5F32 + 132, // $5F33 + 132, // $5F34 + 132, // $5F35 + 132, // $5F36 + 132, // $5F37 + 132, // $5F38 + 132, // $5F39 + 132, // $5F3A + 132, // $5F3B + 132, // $5F3C + 132, // $5F3D + 132, // $5F3E + 132, // $5F3F + 132, // $5F40 + 132, // $5F41 + 132, // $5F42 + 132, // $5F43 + 132, // $5F44 + 132, // $5F45 + 132, // $5F46 + 132, // $5F47 + 132, // $5F48 + 132, // $5F49 + 132, // $5F4A + 132, // $5F4B + 132, // $5F4C + 132, // $5F4D + 132, // $5F4E + 132, // $5F4F + 132, // $5F50 + 132, // $5F51 + 132, // $5F52 + 132, // $5F53 + 132, // $5F54 + 132, // $5F55 + 132, // $5F56 + 132, // $5F57 + 132, // $5F58 + 132, // $5F59 + 132, // $5F5A + 132, // $5F5B + 132, // $5F5C + 132, // $5F5D + 132, // $5F5E + 132, // $5F5F + 132, // $5F60 + 132, // $5F61 + 132, // $5F62 + 132, // $5F63 + 132, // $5F64 + 132, // $5F65 + 132, // $5F66 + 132, // $5F67 + 132, // $5F68 + 132, // $5F69 + 132, // $5F6A + 132, // $5F6B + 132, // $5F6C + 132, // $5F6D + 132, // $5F6E + 132, // $5F6F + 132, // $5F70 + 132, // $5F71 + 132, // $5F72 + 132, // $5F73 + 132, // $5F74 + 132, // $5F75 + 132, // $5F76 + 132, // $5F77 + 132, // $5F78 + 132, // $5F79 + 132, // $5F7A + 132, // $5F7B + 132, // $5F7C + 132, // $5F7D + 132, // $5F7E + 132, // $5F7F + 132, // $5F80 + 132, // $5F81 + 132, // $5F82 + 132, // $5F83 + 132, // $5F84 + 132, // $5F85 + 132, // $5F86 + 132, // $5F87 + 132, // $5F88 + 132, // $5F89 + 132, // $5F8A + 132, // $5F8B + 132, // $5F8C + 132, // $5F8D + 132, // $5F8E + 132, // $5F8F + 132, // $5F90 + 132, // $5F91 + 132, // $5F92 + 132, // $5F93 + 132, // $5F94 + 132, // $5F95 + 132, // $5F96 + 132, // $5F97 + 132, // $5F98 + 132, // $5F99 + 132, // $5F9A + 132, // $5F9B + 132, // $5F9C + 132, // $5F9D + 132, // $5F9E + 132, // $5F9F + 132, // $5FA0 + 132, // $5FA1 + 132, // $5FA2 + 132, // $5FA3 + 132, // $5FA4 + 132, // $5FA5 + 132, // $5FA6 + 132, // $5FA7 + 132, // $5FA8 + 132, // $5FA9 + 132, // $5FAA + 132, // $5FAB + 132, // $5FAC + 132, // $5FAD + 132, // $5FAE + 132, // $5FAF + 132, // $5FB0 + 132, // $5FB1 + 132, // $5FB2 + 132, // $5FB3 + 132, // $5FB4 + 132, // $5FB5 + 132, // $5FB6 + 132, // $5FB7 + 132, // $5FB8 + 132, // $5FB9 + 132, // $5FBA + 132, // $5FBB + 132, // $5FBC + 132, // $5FBD + 132, // $5FBE + 132, // $5FBF + 132, // $5FC0 + 132, // $5FC1 + 132, // $5FC2 + 132, // $5FC3 + 132, // $5FC4 + 132, // $5FC5 + 132, // $5FC6 + 132, // $5FC7 + 132, // $5FC8 + 132, // $5FC9 + 132, // $5FCA + 132, // $5FCB + 132, // $5FCC + 132, // $5FCD + 132, // $5FCE + 132, // $5FCF + 132, // $5FD0 + 132, // $5FD1 + 132, // $5FD2 + 132, // $5FD3 + 132, // $5FD4 + 132, // $5FD5 + 132, // $5FD6 + 132, // $5FD7 + 132, // $5FD8 + 132, // $5FD9 + 132, // $5FDA + 132, // $5FDB + 132, // $5FDC + 132, // $5FDD + 132, // $5FDE + 132, // $5FDF + 132, // $5FE0 + 132, // $5FE1 + 132, // $5FE2 + 132, // $5FE3 + 132, // $5FE4 + 132, // $5FE5 + 132, // $5FE6 + 132, // $5FE7 + 132, // $5FE8 + 132, // $5FE9 + 132, // $5FEA + 132, // $5FEB + 132, // $5FEC + 132, // $5FED + 132, // $5FEE + 132, // $5FEF + 132, // $5FF0 + 132, // $5FF1 + 132, // $5FF2 + 132, // $5FF3 + 132, // $5FF4 + 132, // $5FF5 + 132, // $5FF6 + 132, // $5FF7 + 132, // $5FF8 + 132, // $5FF9 + 132, // $5FFA + 132, // $5FFB + 132, // $5FFC + 132, // $5FFD + 132, // $5FFE + 132, // $5FFF + 132, // $6000 + 132, // $6001 + 132, // $6002 + 132, // $6003 + 132, // $6004 + 132, // $6005 + 132, // $6006 + 132, // $6007 + 132, // $6008 + 132, // $6009 + 132, // $600A + 132, // $600B + 132, // $600C + 132, // $600D + 132, // $600E + 132, // $600F + 132, // $6010 + 132, // $6011 + 132, // $6012 + 132, // $6013 + 132, // $6014 + 132, // $6015 + 132, // $6016 + 132, // $6017 + 132, // $6018 + 132, // $6019 + 132, // $601A + 132, // $601B + 132, // $601C + 132, // $601D + 132, // $601E + 132, // $601F + 132, // $6020 + 132, // $6021 + 132, // $6022 + 132, // $6023 + 132, // $6024 + 132, // $6025 + 132, // $6026 + 132, // $6027 + 132, // $6028 + 132, // $6029 + 132, // $602A + 132, // $602B + 132, // $602C + 132, // $602D + 132, // $602E + 132, // $602F + 132, // $6030 + 132, // $6031 + 132, // $6032 + 132, // $6033 + 132, // $6034 + 132, // $6035 + 132, // $6036 + 132, // $6037 + 132, // $6038 + 132, // $6039 + 132, // $603A + 132, // $603B + 132, // $603C + 132, // $603D + 132, // $603E + 132, // $603F + 132, // $6040 + 132, // $6041 + 132, // $6042 + 132, // $6043 + 132, // $6044 + 132, // $6045 + 132, // $6046 + 132, // $6047 + 132, // $6048 + 132, // $6049 + 132, // $604A + 132, // $604B + 132, // $604C + 132, // $604D + 132, // $604E + 132, // $604F + 132, // $6050 + 132, // $6051 + 132, // $6052 + 132, // $6053 + 132, // $6054 + 132, // $6055 + 132, // $6056 + 132, // $6057 + 132, // $6058 + 132, // $6059 + 132, // $605A + 132, // $605B + 132, // $605C + 132, // $605D + 132, // $605E + 132, // $605F + 132, // $6060 + 132, // $6061 + 132, // $6062 + 132, // $6063 + 132, // $6064 + 132, // $6065 + 132, // $6066 + 132, // $6067 + 132, // $6068 + 132, // $6069 + 132, // $606A + 132, // $606B + 132, // $606C + 132, // $606D + 132, // $606E + 132, // $606F + 132, // $6070 + 132, // $6071 + 132, // $6072 + 132, // $6073 + 132, // $6074 + 132, // $6075 + 132, // $6076 + 132, // $6077 + 132, // $6078 + 132, // $6079 + 132, // $607A + 132, // $607B + 132, // $607C + 132, // $607D + 132, // $607E + 132, // $607F + 132, // $6080 + 132, // $6081 + 132, // $6082 + 132, // $6083 + 132, // $6084 + 132, // $6085 + 132, // $6086 + 132, // $6087 + 132, // $6088 + 132, // $6089 + 132, // $608A + 132, // $608B + 132, // $608C + 132, // $608D + 132, // $608E + 132, // $608F + 132, // $6090 + 132, // $6091 + 132, // $6092 + 132, // $6093 + 132, // $6094 + 132, // $6095 + 132, // $6096 + 132, // $6097 + 132, // $6098 + 132, // $6099 + 132, // $609A + 132, // $609B + 132, // $609C + 132, // $609D + 132, // $609E + 132, // $609F + 132, // $60A0 + 132, // $60A1 + 132, // $60A2 + 132, // $60A3 + 132, // $60A4 + 132, // $60A5 + 132, // $60A6 + 132, // $60A7 + 132, // $60A8 + 132, // $60A9 + 132, // $60AA + 132, // $60AB + 132, // $60AC + 132, // $60AD + 132, // $60AE + 132, // $60AF + 132, // $60B0 + 132, // $60B1 + 132, // $60B2 + 132, // $60B3 + 132, // $60B4 + 132, // $60B5 + 132, // $60B6 + 132, // $60B7 + 132, // $60B8 + 132, // $60B9 + 132, // $60BA + 132, // $60BB + 132, // $60BC + 132, // $60BD + 132, // $60BE + 132, // $60BF + 132, // $60C0 + 132, // $60C1 + 132, // $60C2 + 132, // $60C3 + 132, // $60C4 + 132, // $60C5 + 132, // $60C6 + 132, // $60C7 + 132, // $60C8 + 132, // $60C9 + 132, // $60CA + 132, // $60CB + 132, // $60CC + 132, // $60CD + 132, // $60CE + 132, // $60CF + 132, // $60D0 + 132, // $60D1 + 132, // $60D2 + 132, // $60D3 + 132, // $60D4 + 132, // $60D5 + 132, // $60D6 + 132, // $60D7 + 132, // $60D8 + 132, // $60D9 + 132, // $60DA + 132, // $60DB + 132, // $60DC + 132, // $60DD + 132, // $60DE + 132, // $60DF + 132, // $60E0 + 132, // $60E1 + 132, // $60E2 + 132, // $60E3 + 132, // $60E4 + 132, // $60E5 + 132, // $60E6 + 132, // $60E7 + 132, // $60E8 + 132, // $60E9 + 132, // $60EA + 132, // $60EB + 132, // $60EC + 132, // $60ED + 132, // $60EE + 132, // $60EF + 132, // $60F0 + 132, // $60F1 + 132, // $60F2 + 132, // $60F3 + 132, // $60F4 + 132, // $60F5 + 132, // $60F6 + 132, // $60F7 + 132, // $60F8 + 132, // $60F9 + 132, // $60FA + 132, // $60FB + 132, // $60FC + 132, // $60FD + 132, // $60FE + 132, // $60FF + 132, // $6100 + 132, // $6101 + 132, // $6102 + 132, // $6103 + 132, // $6104 + 132, // $6105 + 132, // $6106 + 132, // $6107 + 132, // $6108 + 132, // $6109 + 132, // $610A + 132, // $610B + 132, // $610C + 132, // $610D + 132, // $610E + 132, // $610F + 132, // $6110 + 132, // $6111 + 132, // $6112 + 132, // $6113 + 132, // $6114 + 132, // $6115 + 132, // $6116 + 132, // $6117 + 132, // $6118 + 132, // $6119 + 132, // $611A + 132, // $611B + 132, // $611C + 132, // $611D + 132, // $611E + 132, // $611F + 132, // $6120 + 132, // $6121 + 132, // $6122 + 132, // $6123 + 132, // $6124 + 132, // $6125 + 132, // $6126 + 132, // $6127 + 132, // $6128 + 132, // $6129 + 132, // $612A + 132, // $612B + 132, // $612C + 132, // $612D + 132, // $612E + 132, // $612F + 132, // $6130 + 132, // $6131 + 132, // $6132 + 132, // $6133 + 132, // $6134 + 132, // $6135 + 132, // $6136 + 132, // $6137 + 132, // $6138 + 132, // $6139 + 132, // $613A + 132, // $613B + 132, // $613C + 132, // $613D + 132, // $613E + 132, // $613F + 132, // $6140 + 132, // $6141 + 132, // $6142 + 132, // $6143 + 132, // $6144 + 132, // $6145 + 132, // $6146 + 132, // $6147 + 132, // $6148 + 132, // $6149 + 132, // $614A + 132, // $614B + 132, // $614C + 132, // $614D + 132, // $614E + 132, // $614F + 132, // $6150 + 132, // $6151 + 132, // $6152 + 132, // $6153 + 132, // $6154 + 132, // $6155 + 132, // $6156 + 132, // $6157 + 132, // $6158 + 132, // $6159 + 132, // $615A + 132, // $615B + 132, // $615C + 132, // $615D + 132, // $615E + 132, // $615F + 132, // $6160 + 132, // $6161 + 132, // $6162 + 132, // $6163 + 132, // $6164 + 132, // $6165 + 132, // $6166 + 132, // $6167 + 132, // $6168 + 132, // $6169 + 132, // $616A + 132, // $616B + 132, // $616C + 132, // $616D + 132, // $616E + 132, // $616F + 132, // $6170 + 132, // $6171 + 132, // $6172 + 132, // $6173 + 132, // $6174 + 132, // $6175 + 132, // $6176 + 132, // $6177 + 132, // $6178 + 132, // $6179 + 132, // $617A + 132, // $617B + 132, // $617C + 132, // $617D + 132, // $617E + 132, // $617F + 132, // $6180 + 132, // $6181 + 132, // $6182 + 132, // $6183 + 132, // $6184 + 132, // $6185 + 132, // $6186 + 132, // $6187 + 132, // $6188 + 132, // $6189 + 132, // $618A + 132, // $618B + 132, // $618C + 132, // $618D + 132, // $618E + 132, // $618F + 132, // $6190 + 132, // $6191 + 132, // $6192 + 132, // $6193 + 132, // $6194 + 132, // $6195 + 132, // $6196 + 132, // $6197 + 132, // $6198 + 132, // $6199 + 132, // $619A + 132, // $619B + 132, // $619C + 132, // $619D + 132, // $619E + 132, // $619F + 132, // $61A0 + 132, // $61A1 + 132, // $61A2 + 132, // $61A3 + 132, // $61A4 + 132, // $61A5 + 132, // $61A6 + 132, // $61A7 + 132, // $61A8 + 132, // $61A9 + 132, // $61AA + 132, // $61AB + 132, // $61AC + 132, // $61AD + 132, // $61AE + 132, // $61AF + 132, // $61B0 + 132, // $61B1 + 132, // $61B2 + 132, // $61B3 + 132, // $61B4 + 132, // $61B5 + 132, // $61B6 + 132, // $61B7 + 132, // $61B8 + 132, // $61B9 + 132, // $61BA + 132, // $61BB + 132, // $61BC + 132, // $61BD + 132, // $61BE + 132, // $61BF + 132, // $61C0 + 132, // $61C1 + 132, // $61C2 + 132, // $61C3 + 132, // $61C4 + 132, // $61C5 + 132, // $61C6 + 132, // $61C7 + 132, // $61C8 + 132, // $61C9 + 132, // $61CA + 132, // $61CB + 132, // $61CC + 132, // $61CD + 132, // $61CE + 132, // $61CF + 132, // $61D0 + 132, // $61D1 + 132, // $61D2 + 132, // $61D3 + 132, // $61D4 + 132, // $61D5 + 132, // $61D6 + 132, // $61D7 + 132, // $61D8 + 132, // $61D9 + 132, // $61DA + 132, // $61DB + 132, // $61DC + 132, // $61DD + 132, // $61DE + 132, // $61DF + 132, // $61E0 + 132, // $61E1 + 132, // $61E2 + 132, // $61E3 + 132, // $61E4 + 132, // $61E5 + 132, // $61E6 + 132, // $61E7 + 132, // $61E8 + 132, // $61E9 + 132, // $61EA + 132, // $61EB + 132, // $61EC + 132, // $61ED + 132, // $61EE + 132, // $61EF + 132, // $61F0 + 132, // $61F1 + 132, // $61F2 + 132, // $61F3 + 132, // $61F4 + 132, // $61F5 + 132, // $61F6 + 132, // $61F7 + 132, // $61F8 + 132, // $61F9 + 132, // $61FA + 132, // $61FB + 132, // $61FC + 132, // $61FD + 132, // $61FE + 132, // $61FF + 132, // $6200 + 132, // $6201 + 132, // $6202 + 132, // $6203 + 132, // $6204 + 132, // $6205 + 132, // $6206 + 132, // $6207 + 132, // $6208 + 132, // $6209 + 132, // $620A + 132, // $620B + 132, // $620C + 132, // $620D + 132, // $620E + 132, // $620F + 132, // $6210 + 132, // $6211 + 132, // $6212 + 132, // $6213 + 132, // $6214 + 132, // $6215 + 132, // $6216 + 132, // $6217 + 132, // $6218 + 132, // $6219 + 132, // $621A + 132, // $621B + 132, // $621C + 132, // $621D + 132, // $621E + 132, // $621F + 132, // $6220 + 132, // $6221 + 132, // $6222 + 132, // $6223 + 132, // $6224 + 132, // $6225 + 132, // $6226 + 132, // $6227 + 132, // $6228 + 132, // $6229 + 132, // $622A + 132, // $622B + 132, // $622C + 132, // $622D + 132, // $622E + 132, // $622F + 132, // $6230 + 132, // $6231 + 132, // $6232 + 132, // $6233 + 132, // $6234 + 132, // $6235 + 132, // $6236 + 132, // $6237 + 132, // $6238 + 132, // $6239 + 132, // $623A + 132, // $623B + 132, // $623C + 132, // $623D + 132, // $623E + 132, // $623F + 132, // $6240 + 132, // $6241 + 132, // $6242 + 132, // $6243 + 132, // $6244 + 132, // $6245 + 132, // $6246 + 132, // $6247 + 132, // $6248 + 132, // $6249 + 132, // $624A + 132, // $624B + 132, // $624C + 132, // $624D + 132, // $624E + 132, // $624F + 132, // $6250 + 132, // $6251 + 132, // $6252 + 132, // $6253 + 132, // $6254 + 132, // $6255 + 132, // $6256 + 132, // $6257 + 132, // $6258 + 132, // $6259 + 132, // $625A + 132, // $625B + 132, // $625C + 132, // $625D + 132, // $625E + 132, // $625F + 132, // $6260 + 132, // $6261 + 132, // $6262 + 132, // $6263 + 132, // $6264 + 132, // $6265 + 132, // $6266 + 132, // $6267 + 132, // $6268 + 132, // $6269 + 132, // $626A + 132, // $626B + 132, // $626C + 132, // $626D + 132, // $626E + 132, // $626F + 132, // $6270 + 132, // $6271 + 132, // $6272 + 132, // $6273 + 132, // $6274 + 132, // $6275 + 132, // $6276 + 132, // $6277 + 132, // $6278 + 132, // $6279 + 132, // $627A + 132, // $627B + 132, // $627C + 132, // $627D + 132, // $627E + 132, // $627F + 132, // $6280 + 132, // $6281 + 132, // $6282 + 132, // $6283 + 132, // $6284 + 132, // $6285 + 132, // $6286 + 132, // $6287 + 132, // $6288 + 132, // $6289 + 132, // $628A + 132, // $628B + 132, // $628C + 132, // $628D + 132, // $628E + 132, // $628F + 132, // $6290 + 132, // $6291 + 132, // $6292 + 132, // $6293 + 132, // $6294 + 132, // $6295 + 132, // $6296 + 132, // $6297 + 132, // $6298 + 132, // $6299 + 132, // $629A + 132, // $629B + 132, // $629C + 132, // $629D + 132, // $629E + 132, // $629F + 132, // $62A0 + 132, // $62A1 + 132, // $62A2 + 132, // $62A3 + 132, // $62A4 + 132, // $62A5 + 132, // $62A6 + 132, // $62A7 + 132, // $62A8 + 132, // $62A9 + 132, // $62AA + 132, // $62AB + 132, // $62AC + 132, // $62AD + 132, // $62AE + 132, // $62AF + 132, // $62B0 + 132, // $62B1 + 132, // $62B2 + 132, // $62B3 + 132, // $62B4 + 132, // $62B5 + 132, // $62B6 + 132, // $62B7 + 132, // $62B8 + 132, // $62B9 + 132, // $62BA + 132, // $62BB + 132, // $62BC + 132, // $62BD + 132, // $62BE + 132, // $62BF + 132, // $62C0 + 132, // $62C1 + 132, // $62C2 + 132, // $62C3 + 132, // $62C4 + 132, // $62C5 + 132, // $62C6 + 132, // $62C7 + 132, // $62C8 + 132, // $62C9 + 132, // $62CA + 132, // $62CB + 132, // $62CC + 132, // $62CD + 132, // $62CE + 132, // $62CF + 132, // $62D0 + 132, // $62D1 + 132, // $62D2 + 132, // $62D3 + 132, // $62D4 + 132, // $62D5 + 132, // $62D6 + 132, // $62D7 + 132, // $62D8 + 132, // $62D9 + 132, // $62DA + 132, // $62DB + 132, // $62DC + 132, // $62DD + 132, // $62DE + 132, // $62DF + 132, // $62E0 + 132, // $62E1 + 132, // $62E2 + 132, // $62E3 + 132, // $62E4 + 132, // $62E5 + 132, // $62E6 + 132, // $62E7 + 132, // $62E8 + 132, // $62E9 + 132, // $62EA + 132, // $62EB + 132, // $62EC + 132, // $62ED + 132, // $62EE + 132, // $62EF + 132, // $62F0 + 132, // $62F1 + 132, // $62F2 + 132, // $62F3 + 132, // $62F4 + 132, // $62F5 + 132, // $62F6 + 132, // $62F7 + 132, // $62F8 + 132, // $62F9 + 132, // $62FA + 132, // $62FB + 132, // $62FC + 132, // $62FD + 132, // $62FE + 132, // $62FF + 132, // $6300 + 132, // $6301 + 132, // $6302 + 132, // $6303 + 132, // $6304 + 132, // $6305 + 132, // $6306 + 132, // $6307 + 132, // $6308 + 132, // $6309 + 132, // $630A + 132, // $630B + 132, // $630C + 132, // $630D + 132, // $630E + 132, // $630F + 132, // $6310 + 132, // $6311 + 132, // $6312 + 132, // $6313 + 132, // $6314 + 132, // $6315 + 132, // $6316 + 132, // $6317 + 132, // $6318 + 132, // $6319 + 132, // $631A + 132, // $631B + 132, // $631C + 132, // $631D + 132, // $631E + 132, // $631F + 132, // $6320 + 132, // $6321 + 132, // $6322 + 132, // $6323 + 132, // $6324 + 132, // $6325 + 132, // $6326 + 132, // $6327 + 132, // $6328 + 132, // $6329 + 132, // $632A + 132, // $632B + 132, // $632C + 132, // $632D + 132, // $632E + 132, // $632F + 132, // $6330 + 132, // $6331 + 132, // $6332 + 132, // $6333 + 132, // $6334 + 132, // $6335 + 132, // $6336 + 132, // $6337 + 132, // $6338 + 132, // $6339 + 132, // $633A + 132, // $633B + 132, // $633C + 132, // $633D + 132, // $633E + 132, // $633F + 132, // $6340 + 132, // $6341 + 132, // $6342 + 132, // $6343 + 132, // $6344 + 132, // $6345 + 132, // $6346 + 132, // $6347 + 132, // $6348 + 132, // $6349 + 132, // $634A + 132, // $634B + 132, // $634C + 132, // $634D + 132, // $634E + 132, // $634F + 132, // $6350 + 132, // $6351 + 132, // $6352 + 132, // $6353 + 132, // $6354 + 132, // $6355 + 132, // $6356 + 132, // $6357 + 132, // $6358 + 132, // $6359 + 132, // $635A + 132, // $635B + 132, // $635C + 132, // $635D + 132, // $635E + 132, // $635F + 132, // $6360 + 132, // $6361 + 132, // $6362 + 132, // $6363 + 132, // $6364 + 132, // $6365 + 132, // $6366 + 132, // $6367 + 132, // $6368 + 132, // $6369 + 132, // $636A + 132, // $636B + 132, // $636C + 132, // $636D + 132, // $636E + 132, // $636F + 132, // $6370 + 132, // $6371 + 132, // $6372 + 132, // $6373 + 132, // $6374 + 132, // $6375 + 132, // $6376 + 132, // $6377 + 132, // $6378 + 132, // $6379 + 132, // $637A + 132, // $637B + 132, // $637C + 132, // $637D + 132, // $637E + 132, // $637F + 132, // $6380 + 132, // $6381 + 132, // $6382 + 132, // $6383 + 132, // $6384 + 132, // $6385 + 132, // $6386 + 132, // $6387 + 132, // $6388 + 132, // $6389 + 132, // $638A + 132, // $638B + 132, // $638C + 132, // $638D + 132, // $638E + 132, // $638F + 132, // $6390 + 132, // $6391 + 132, // $6392 + 132, // $6393 + 132, // $6394 + 132, // $6395 + 132, // $6396 + 132, // $6397 + 132, // $6398 + 132, // $6399 + 132, // $639A + 132, // $639B + 132, // $639C + 132, // $639D + 132, // $639E + 132, // $639F + 132, // $63A0 + 132, // $63A1 + 132, // $63A2 + 132, // $63A3 + 132, // $63A4 + 132, // $63A5 + 132, // $63A6 + 132, // $63A7 + 132, // $63A8 + 132, // $63A9 + 132, // $63AA + 132, // $63AB + 132, // $63AC + 132, // $63AD + 132, // $63AE + 132, // $63AF + 132, // $63B0 + 132, // $63B1 + 132, // $63B2 + 132, // $63B3 + 132, // $63B4 + 132, // $63B5 + 132, // $63B6 + 132, // $63B7 + 132, // $63B8 + 132, // $63B9 + 132, // $63BA + 132, // $63BB + 132, // $63BC + 132, // $63BD + 132, // $63BE + 132, // $63BF + 132, // $63C0 + 132, // $63C1 + 132, // $63C2 + 132, // $63C3 + 132, // $63C4 + 132, // $63C5 + 132, // $63C6 + 132, // $63C7 + 132, // $63C8 + 132, // $63C9 + 132, // $63CA + 132, // $63CB + 132, // $63CC + 132, // $63CD + 132, // $63CE + 132, // $63CF + 132, // $63D0 + 132, // $63D1 + 132, // $63D2 + 132, // $63D3 + 132, // $63D4 + 132, // $63D5 + 132, // $63D6 + 132, // $63D7 + 132, // $63D8 + 132, // $63D9 + 132, // $63DA + 132, // $63DB + 132, // $63DC + 132, // $63DD + 132, // $63DE + 132, // $63DF + 132, // $63E0 + 132, // $63E1 + 132, // $63E2 + 132, // $63E3 + 132, // $63E4 + 132, // $63E5 + 132, // $63E6 + 132, // $63E7 + 132, // $63E8 + 132, // $63E9 + 132, // $63EA + 132, // $63EB + 132, // $63EC + 132, // $63ED + 132, // $63EE + 132, // $63EF + 132, // $63F0 + 132, // $63F1 + 132, // $63F2 + 132, // $63F3 + 132, // $63F4 + 132, // $63F5 + 132, // $63F6 + 132, // $63F7 + 132, // $63F8 + 132, // $63F9 + 132, // $63FA + 132, // $63FB + 132, // $63FC + 132, // $63FD + 132, // $63FE + 132, // $63FF + 132, // $6400 + 132, // $6401 + 132, // $6402 + 132, // $6403 + 132, // $6404 + 132, // $6405 + 132, // $6406 + 132, // $6407 + 132, // $6408 + 132, // $6409 + 132, // $640A + 132, // $640B + 132, // $640C + 132, // $640D + 132, // $640E + 132, // $640F + 132, // $6410 + 132, // $6411 + 132, // $6412 + 132, // $6413 + 132, // $6414 + 132, // $6415 + 132, // $6416 + 132, // $6417 + 132, // $6418 + 132, // $6419 + 132, // $641A + 132, // $641B + 132, // $641C + 132, // $641D + 132, // $641E + 132, // $641F + 132, // $6420 + 132, // $6421 + 132, // $6422 + 132, // $6423 + 132, // $6424 + 132, // $6425 + 132, // $6426 + 132, // $6427 + 132, // $6428 + 132, // $6429 + 132, // $642A + 132, // $642B + 132, // $642C + 132, // $642D + 132, // $642E + 132, // $642F + 132, // $6430 + 132, // $6431 + 132, // $6432 + 132, // $6433 + 132, // $6434 + 132, // $6435 + 132, // $6436 + 132, // $6437 + 132, // $6438 + 132, // $6439 + 132, // $643A + 132, // $643B + 132, // $643C + 132, // $643D + 132, // $643E + 132, // $643F + 132, // $6440 + 132, // $6441 + 132, // $6442 + 132, // $6443 + 132, // $6444 + 132, // $6445 + 132, // $6446 + 132, // $6447 + 132, // $6448 + 132, // $6449 + 132, // $644A + 132, // $644B + 132, // $644C + 132, // $644D + 132, // $644E + 132, // $644F + 132, // $6450 + 132, // $6451 + 132, // $6452 + 132, // $6453 + 132, // $6454 + 132, // $6455 + 132, // $6456 + 132, // $6457 + 132, // $6458 + 132, // $6459 + 132, // $645A + 132, // $645B + 132, // $645C + 132, // $645D + 132, // $645E + 132, // $645F + 132, // $6460 + 132, // $6461 + 132, // $6462 + 132, // $6463 + 132, // $6464 + 132, // $6465 + 132, // $6466 + 132, // $6467 + 132, // $6468 + 132, // $6469 + 132, // $646A + 132, // $646B + 132, // $646C + 132, // $646D + 132, // $646E + 132, // $646F + 132, // $6470 + 132, // $6471 + 132, // $6472 + 132, // $6473 + 132, // $6474 + 132, // $6475 + 132, // $6476 + 132, // $6477 + 132, // $6478 + 132, // $6479 + 132, // $647A + 132, // $647B + 132, // $647C + 132, // $647D + 132, // $647E + 132, // $647F + 132, // $6480 + 132, // $6481 + 132, // $6482 + 132, // $6483 + 132, // $6484 + 132, // $6485 + 132, // $6486 + 132, // $6487 + 132, // $6488 + 132, // $6489 + 132, // $648A + 132, // $648B + 132, // $648C + 132, // $648D + 132, // $648E + 132, // $648F + 132, // $6490 + 132, // $6491 + 132, // $6492 + 132, // $6493 + 132, // $6494 + 132, // $6495 + 132, // $6496 + 132, // $6497 + 132, // $6498 + 132, // $6499 + 132, // $649A + 132, // $649B + 132, // $649C + 132, // $649D + 132, // $649E + 132, // $649F + 132, // $64A0 + 132, // $64A1 + 132, // $64A2 + 132, // $64A3 + 132, // $64A4 + 132, // $64A5 + 132, // $64A6 + 132, // $64A7 + 132, // $64A8 + 132, // $64A9 + 132, // $64AA + 132, // $64AB + 132, // $64AC + 132, // $64AD + 132, // $64AE + 132, // $64AF + 132, // $64B0 + 132, // $64B1 + 132, // $64B2 + 132, // $64B3 + 132, // $64B4 + 132, // $64B5 + 132, // $64B6 + 132, // $64B7 + 132, // $64B8 + 132, // $64B9 + 132, // $64BA + 132, // $64BB + 132, // $64BC + 132, // $64BD + 132, // $64BE + 132, // $64BF + 132, // $64C0 + 132, // $64C1 + 132, // $64C2 + 132, // $64C3 + 132, // $64C4 + 132, // $64C5 + 132, // $64C6 + 132, // $64C7 + 132, // $64C8 + 132, // $64C9 + 132, // $64CA + 132, // $64CB + 132, // $64CC + 132, // $64CD + 132, // $64CE + 132, // $64CF + 132, // $64D0 + 132, // $64D1 + 132, // $64D2 + 132, // $64D3 + 132, // $64D4 + 132, // $64D5 + 132, // $64D6 + 132, // $64D7 + 132, // $64D8 + 132, // $64D9 + 132, // $64DA + 132, // $64DB + 132, // $64DC + 132, // $64DD + 132, // $64DE + 132, // $64DF + 132, // $64E0 + 132, // $64E1 + 132, // $64E2 + 132, // $64E3 + 132, // $64E4 + 132, // $64E5 + 132, // $64E6 + 132, // $64E7 + 132, // $64E8 + 132, // $64E9 + 132, // $64EA + 132, // $64EB + 132, // $64EC + 132, // $64ED + 132, // $64EE + 132, // $64EF + 132, // $64F0 + 132, // $64F1 + 132, // $64F2 + 132, // $64F3 + 132, // $64F4 + 132, // $64F5 + 132, // $64F6 + 132, // $64F7 + 132, // $64F8 + 132, // $64F9 + 132, // $64FA + 132, // $64FB + 132, // $64FC + 132, // $64FD + 132, // $64FE + 132, // $64FF + 132, // $6500 + 132, // $6501 + 132, // $6502 + 132, // $6503 + 132, // $6504 + 132, // $6505 + 132, // $6506 + 132, // $6507 + 132, // $6508 + 132, // $6509 + 132, // $650A + 132, // $650B + 132, // $650C + 132, // $650D + 132, // $650E + 132, // $650F + 132, // $6510 + 132, // $6511 + 132, // $6512 + 132, // $6513 + 132, // $6514 + 132, // $6515 + 132, // $6516 + 132, // $6517 + 132, // $6518 + 132, // $6519 + 132, // $651A + 132, // $651B + 132, // $651C + 132, // $651D + 132, // $651E + 132, // $651F + 132, // $6520 + 132, // $6521 + 132, // $6522 + 132, // $6523 + 132, // $6524 + 132, // $6525 + 132, // $6526 + 132, // $6527 + 132, // $6528 + 132, // $6529 + 132, // $652A + 132, // $652B + 132, // $652C + 132, // $652D + 132, // $652E + 132, // $652F + 132, // $6530 + 132, // $6531 + 132, // $6532 + 132, // $6533 + 132, // $6534 + 132, // $6535 + 132, // $6536 + 132, // $6537 + 132, // $6538 + 132, // $6539 + 132, // $653A + 132, // $653B + 132, // $653C + 132, // $653D + 132, // $653E + 132, // $653F + 132, // $6540 + 132, // $6541 + 132, // $6542 + 132, // $6543 + 132, // $6544 + 132, // $6545 + 132, // $6546 + 132, // $6547 + 132, // $6548 + 132, // $6549 + 132, // $654A + 132, // $654B + 132, // $654C + 132, // $654D + 132, // $654E + 132, // $654F + 132, // $6550 + 132, // $6551 + 132, // $6552 + 132, // $6553 + 132, // $6554 + 132, // $6555 + 132, // $6556 + 132, // $6557 + 132, // $6558 + 132, // $6559 + 132, // $655A + 132, // $655B + 132, // $655C + 132, // $655D + 132, // $655E + 132, // $655F + 132, // $6560 + 132, // $6561 + 132, // $6562 + 132, // $6563 + 132, // $6564 + 132, // $6565 + 132, // $6566 + 132, // $6567 + 132, // $6568 + 132, // $6569 + 132, // $656A + 132, // $656B + 132, // $656C + 132, // $656D + 132, // $656E + 132, // $656F + 132, // $6570 + 132, // $6571 + 132, // $6572 + 132, // $6573 + 132, // $6574 + 132, // $6575 + 132, // $6576 + 132, // $6577 + 132, // $6578 + 132, // $6579 + 132, // $657A + 132, // $657B + 132, // $657C + 132, // $657D + 132, // $657E + 132, // $657F + 132, // $6580 + 132, // $6581 + 132, // $6582 + 132, // $6583 + 132, // $6584 + 132, // $6585 + 132, // $6586 + 132, // $6587 + 132, // $6588 + 132, // $6589 + 132, // $658A + 132, // $658B + 132, // $658C + 132, // $658D + 132, // $658E + 132, // $658F + 132, // $6590 + 132, // $6591 + 132, // $6592 + 132, // $6593 + 132, // $6594 + 132, // $6595 + 132, // $6596 + 132, // $6597 + 132, // $6598 + 132, // $6599 + 132, // $659A + 132, // $659B + 132, // $659C + 132, // $659D + 132, // $659E + 132, // $659F + 132, // $65A0 + 132, // $65A1 + 132, // $65A2 + 132, // $65A3 + 132, // $65A4 + 132, // $65A5 + 132, // $65A6 + 132, // $65A7 + 132, // $65A8 + 132, // $65A9 + 132, // $65AA + 132, // $65AB + 132, // $65AC + 132, // $65AD + 132, // $65AE + 132, // $65AF + 132, // $65B0 + 132, // $65B1 + 132, // $65B2 + 132, // $65B3 + 132, // $65B4 + 132, // $65B5 + 132, // $65B6 + 132, // $65B7 + 132, // $65B8 + 132, // $65B9 + 132, // $65BA + 132, // $65BB + 132, // $65BC + 132, // $65BD + 132, // $65BE + 132, // $65BF + 132, // $65C0 + 132, // $65C1 + 132, // $65C2 + 132, // $65C3 + 132, // $65C4 + 132, // $65C5 + 132, // $65C6 + 132, // $65C7 + 132, // $65C8 + 132, // $65C9 + 132, // $65CA + 132, // $65CB + 132, // $65CC + 132, // $65CD + 132, // $65CE + 132, // $65CF + 132, // $65D0 + 132, // $65D1 + 132, // $65D2 + 132, // $65D3 + 132, // $65D4 + 132, // $65D5 + 132, // $65D6 + 132, // $65D7 + 132, // $65D8 + 132, // $65D9 + 132, // $65DA + 132, // $65DB + 132, // $65DC + 132, // $65DD + 132, // $65DE + 132, // $65DF + 132, // $65E0 + 132, // $65E1 + 132, // $65E2 + 132, // $65E3 + 132, // $65E4 + 132, // $65E5 + 132, // $65E6 + 132, // $65E7 + 132, // $65E8 + 132, // $65E9 + 132, // $65EA + 132, // $65EB + 132, // $65EC + 132, // $65ED + 132, // $65EE + 132, // $65EF + 132, // $65F0 + 132, // $65F1 + 132, // $65F2 + 132, // $65F3 + 132, // $65F4 + 132, // $65F5 + 132, // $65F6 + 132, // $65F7 + 132, // $65F8 + 132, // $65F9 + 132, // $65FA + 132, // $65FB + 132, // $65FC + 132, // $65FD + 132, // $65FE + 132, // $65FF + 132, // $6600 + 132, // $6601 + 132, // $6602 + 132, // $6603 + 132, // $6604 + 132, // $6605 + 132, // $6606 + 132, // $6607 + 132, // $6608 + 132, // $6609 + 132, // $660A + 132, // $660B + 132, // $660C + 132, // $660D + 132, // $660E + 132, // $660F + 132, // $6610 + 132, // $6611 + 132, // $6612 + 132, // $6613 + 132, // $6614 + 132, // $6615 + 132, // $6616 + 132, // $6617 + 132, // $6618 + 132, // $6619 + 132, // $661A + 132, // $661B + 132, // $661C + 132, // $661D + 132, // $661E + 132, // $661F + 132, // $6620 + 132, // $6621 + 132, // $6622 + 132, // $6623 + 132, // $6624 + 132, // $6625 + 132, // $6626 + 132, // $6627 + 132, // $6628 + 132, // $6629 + 132, // $662A + 132, // $662B + 132, // $662C + 132, // $662D + 132, // $662E + 132, // $662F + 132, // $6630 + 132, // $6631 + 132, // $6632 + 132, // $6633 + 132, // $6634 + 132, // $6635 + 132, // $6636 + 132, // $6637 + 132, // $6638 + 132, // $6639 + 132, // $663A + 132, // $663B + 132, // $663C + 132, // $663D + 132, // $663E + 132, // $663F + 132, // $6640 + 132, // $6641 + 132, // $6642 + 132, // $6643 + 132, // $6644 + 132, // $6645 + 132, // $6646 + 132, // $6647 + 132, // $6648 + 132, // $6649 + 132, // $664A + 132, // $664B + 132, // $664C + 132, // $664D + 132, // $664E + 132, // $664F + 132, // $6650 + 132, // $6651 + 132, // $6652 + 132, // $6653 + 132, // $6654 + 132, // $6655 + 132, // $6656 + 132, // $6657 + 132, // $6658 + 132, // $6659 + 132, // $665A + 132, // $665B + 132, // $665C + 132, // $665D + 132, // $665E + 132, // $665F + 132, // $6660 + 132, // $6661 + 132, // $6662 + 132, // $6663 + 132, // $6664 + 132, // $6665 + 132, // $6666 + 132, // $6667 + 132, // $6668 + 132, // $6669 + 132, // $666A + 132, // $666B + 132, // $666C + 132, // $666D + 132, // $666E + 132, // $666F + 132, // $6670 + 132, // $6671 + 132, // $6672 + 132, // $6673 + 132, // $6674 + 132, // $6675 + 132, // $6676 + 132, // $6677 + 132, // $6678 + 132, // $6679 + 132, // $667A + 132, // $667B + 132, // $667C + 132, // $667D + 132, // $667E + 132, // $667F + 132, // $6680 + 132, // $6681 + 132, // $6682 + 132, // $6683 + 132, // $6684 + 132, // $6685 + 132, // $6686 + 132, // $6687 + 132, // $6688 + 132, // $6689 + 132, // $668A + 132, // $668B + 132, // $668C + 132, // $668D + 132, // $668E + 132, // $668F + 132, // $6690 + 132, // $6691 + 132, // $6692 + 132, // $6693 + 132, // $6694 + 132, // $6695 + 132, // $6696 + 132, // $6697 + 132, // $6698 + 132, // $6699 + 132, // $669A + 132, // $669B + 132, // $669C + 132, // $669D + 132, // $669E + 132, // $669F + 132, // $66A0 + 132, // $66A1 + 132, // $66A2 + 132, // $66A3 + 132, // $66A4 + 132, // $66A5 + 132, // $66A6 + 132, // $66A7 + 132, // $66A8 + 132, // $66A9 + 132, // $66AA + 132, // $66AB + 132, // $66AC + 132, // $66AD + 132, // $66AE + 132, // $66AF + 132, // $66B0 + 132, // $66B1 + 132, // $66B2 + 132, // $66B3 + 132, // $66B4 + 132, // $66B5 + 132, // $66B6 + 132, // $66B7 + 132, // $66B8 + 132, // $66B9 + 132, // $66BA + 132, // $66BB + 132, // $66BC + 132, // $66BD + 132, // $66BE + 132, // $66BF + 132, // $66C0 + 132, // $66C1 + 132, // $66C2 + 132, // $66C3 + 132, // $66C4 + 132, // $66C5 + 132, // $66C6 + 132, // $66C7 + 132, // $66C8 + 132, // $66C9 + 132, // $66CA + 132, // $66CB + 132, // $66CC + 132, // $66CD + 132, // $66CE + 132, // $66CF + 132, // $66D0 + 132, // $66D1 + 132, // $66D2 + 132, // $66D3 + 132, // $66D4 + 132, // $66D5 + 132, // $66D6 + 132, // $66D7 + 132, // $66D8 + 132, // $66D9 + 132, // $66DA + 132, // $66DB + 132, // $66DC + 132, // $66DD + 132, // $66DE + 132, // $66DF + 132, // $66E0 + 132, // $66E1 + 132, // $66E2 + 132, // $66E3 + 132, // $66E4 + 132, // $66E5 + 132, // $66E6 + 132, // $66E7 + 132, // $66E8 + 132, // $66E9 + 132, // $66EA + 132, // $66EB + 132, // $66EC + 132, // $66ED + 132, // $66EE + 132, // $66EF + 132, // $66F0 + 132, // $66F1 + 132, // $66F2 + 132, // $66F3 + 132, // $66F4 + 132, // $66F5 + 132, // $66F6 + 132, // $66F7 + 132, // $66F8 + 132, // $66F9 + 132, // $66FA + 132, // $66FB + 132, // $66FC + 132, // $66FD + 132, // $66FE + 132, // $66FF + 132, // $6700 + 132, // $6701 + 132, // $6702 + 132, // $6703 + 132, // $6704 + 132, // $6705 + 132, // $6706 + 132, // $6707 + 132, // $6708 + 132, // $6709 + 132, // $670A + 132, // $670B + 132, // $670C + 132, // $670D + 132, // $670E + 132, // $670F + 132, // $6710 + 132, // $6711 + 132, // $6712 + 132, // $6713 + 132, // $6714 + 132, // $6715 + 132, // $6716 + 132, // $6717 + 132, // $6718 + 132, // $6719 + 132, // $671A + 132, // $671B + 132, // $671C + 132, // $671D + 132, // $671E + 132, // $671F + 132, // $6720 + 132, // $6721 + 132, // $6722 + 132, // $6723 + 132, // $6724 + 132, // $6725 + 132, // $6726 + 132, // $6727 + 132, // $6728 + 132, // $6729 + 132, // $672A + 132, // $672B + 132, // $672C + 132, // $672D + 132, // $672E + 132, // $672F + 132, // $6730 + 132, // $6731 + 132, // $6732 + 132, // $6733 + 132, // $6734 + 132, // $6735 + 132, // $6736 + 132, // $6737 + 132, // $6738 + 132, // $6739 + 132, // $673A + 132, // $673B + 132, // $673C + 132, // $673D + 132, // $673E + 132, // $673F + 132, // $6740 + 132, // $6741 + 132, // $6742 + 132, // $6743 + 132, // $6744 + 132, // $6745 + 132, // $6746 + 132, // $6747 + 132, // $6748 + 132, // $6749 + 132, // $674A + 132, // $674B + 132, // $674C + 132, // $674D + 132, // $674E + 132, // $674F + 132, // $6750 + 132, // $6751 + 132, // $6752 + 132, // $6753 + 132, // $6754 + 132, // $6755 + 132, // $6756 + 132, // $6757 + 132, // $6758 + 132, // $6759 + 132, // $675A + 132, // $675B + 132, // $675C + 132, // $675D + 132, // $675E + 132, // $675F + 132, // $6760 + 132, // $6761 + 132, // $6762 + 132, // $6763 + 132, // $6764 + 132, // $6765 + 132, // $6766 + 132, // $6767 + 132, // $6768 + 132, // $6769 + 132, // $676A + 132, // $676B + 132, // $676C + 132, // $676D + 132, // $676E + 132, // $676F + 132, // $6770 + 132, // $6771 + 132, // $6772 + 132, // $6773 + 132, // $6774 + 132, // $6775 + 132, // $6776 + 132, // $6777 + 132, // $6778 + 132, // $6779 + 132, // $677A + 132, // $677B + 132, // $677C + 132, // $677D + 132, // $677E + 132, // $677F + 132, // $6780 + 132, // $6781 + 132, // $6782 + 132, // $6783 + 132, // $6784 + 132, // $6785 + 132, // $6786 + 132, // $6787 + 132, // $6788 + 132, // $6789 + 132, // $678A + 132, // $678B + 132, // $678C + 132, // $678D + 132, // $678E + 132, // $678F + 132, // $6790 + 132, // $6791 + 132, // $6792 + 132, // $6793 + 132, // $6794 + 132, // $6795 + 132, // $6796 + 132, // $6797 + 132, // $6798 + 132, // $6799 + 132, // $679A + 132, // $679B + 132, // $679C + 132, // $679D + 132, // $679E + 132, // $679F + 132, // $67A0 + 132, // $67A1 + 132, // $67A2 + 132, // $67A3 + 132, // $67A4 + 132, // $67A5 + 132, // $67A6 + 132, // $67A7 + 132, // $67A8 + 132, // $67A9 + 132, // $67AA + 132, // $67AB + 132, // $67AC + 132, // $67AD + 132, // $67AE + 132, // $67AF + 132, // $67B0 + 132, // $67B1 + 132, // $67B2 + 132, // $67B3 + 132, // $67B4 + 132, // $67B5 + 132, // $67B6 + 132, // $67B7 + 132, // $67B8 + 132, // $67B9 + 132, // $67BA + 132, // $67BB + 132, // $67BC + 132, // $67BD + 132, // $67BE + 132, // $67BF + 132, // $67C0 + 132, // $67C1 + 132, // $67C2 + 132, // $67C3 + 132, // $67C4 + 132, // $67C5 + 132, // $67C6 + 132, // $67C7 + 132, // $67C8 + 132, // $67C9 + 132, // $67CA + 132, // $67CB + 132, // $67CC + 132, // $67CD + 132, // $67CE + 132, // $67CF + 132, // $67D0 + 132, // $67D1 + 132, // $67D2 + 132, // $67D3 + 132, // $67D4 + 132, // $67D5 + 132, // $67D6 + 132, // $67D7 + 132, // $67D8 + 132, // $67D9 + 132, // $67DA + 132, // $67DB + 132, // $67DC + 132, // $67DD + 132, // $67DE + 132, // $67DF + 132, // $67E0 + 132, // $67E1 + 132, // $67E2 + 132, // $67E3 + 132, // $67E4 + 132, // $67E5 + 132, // $67E6 + 132, // $67E7 + 132, // $67E8 + 132, // $67E9 + 132, // $67EA + 132, // $67EB + 132, // $67EC + 132, // $67ED + 132, // $67EE + 132, // $67EF + 132, // $67F0 + 132, // $67F1 + 132, // $67F2 + 132, // $67F3 + 132, // $67F4 + 132, // $67F5 + 132, // $67F6 + 132, // $67F7 + 132, // $67F8 + 132, // $67F9 + 132, // $67FA + 132, // $67FB + 132, // $67FC + 132, // $67FD + 132, // $67FE + 132, // $67FF + 132, // $6800 + 132, // $6801 + 132, // $6802 + 132, // $6803 + 132, // $6804 + 132, // $6805 + 132, // $6806 + 132, // $6807 + 132, // $6808 + 132, // $6809 + 132, // $680A + 132, // $680B + 132, // $680C + 132, // $680D + 132, // $680E + 132, // $680F + 132, // $6810 + 132, // $6811 + 132, // $6812 + 132, // $6813 + 132, // $6814 + 132, // $6815 + 132, // $6816 + 132, // $6817 + 132, // $6818 + 132, // $6819 + 132, // $681A + 132, // $681B + 132, // $681C + 132, // $681D + 132, // $681E + 132, // $681F + 132, // $6820 + 132, // $6821 + 132, // $6822 + 132, // $6823 + 132, // $6824 + 132, // $6825 + 132, // $6826 + 132, // $6827 + 132, // $6828 + 132, // $6829 + 132, // $682A + 132, // $682B + 132, // $682C + 132, // $682D + 132, // $682E + 132, // $682F + 132, // $6830 + 132, // $6831 + 132, // $6832 + 132, // $6833 + 132, // $6834 + 132, // $6835 + 132, // $6836 + 132, // $6837 + 132, // $6838 + 132, // $6839 + 132, // $683A + 132, // $683B + 132, // $683C + 132, // $683D + 132, // $683E + 132, // $683F + 132, // $6840 + 132, // $6841 + 132, // $6842 + 132, // $6843 + 132, // $6844 + 132, // $6845 + 132, // $6846 + 132, // $6847 + 132, // $6848 + 132, // $6849 + 132, // $684A + 132, // $684B + 132, // $684C + 132, // $684D + 132, // $684E + 132, // $684F + 132, // $6850 + 132, // $6851 + 132, // $6852 + 132, // $6853 + 132, // $6854 + 132, // $6855 + 132, // $6856 + 132, // $6857 + 132, // $6858 + 132, // $6859 + 132, // $685A + 132, // $685B + 132, // $685C + 132, // $685D + 132, // $685E + 132, // $685F + 132, // $6860 + 132, // $6861 + 132, // $6862 + 132, // $6863 + 132, // $6864 + 132, // $6865 + 132, // $6866 + 132, // $6867 + 132, // $6868 + 132, // $6869 + 132, // $686A + 132, // $686B + 132, // $686C + 132, // $686D + 132, // $686E + 132, // $686F + 132, // $6870 + 132, // $6871 + 132, // $6872 + 132, // $6873 + 132, // $6874 + 132, // $6875 + 132, // $6876 + 132, // $6877 + 132, // $6878 + 132, // $6879 + 132, // $687A + 132, // $687B + 132, // $687C + 132, // $687D + 132, // $687E + 132, // $687F + 132, // $6880 + 132, // $6881 + 132, // $6882 + 132, // $6883 + 132, // $6884 + 132, // $6885 + 132, // $6886 + 132, // $6887 + 132, // $6888 + 132, // $6889 + 132, // $688A + 132, // $688B + 132, // $688C + 132, // $688D + 132, // $688E + 132, // $688F + 132, // $6890 + 132, // $6891 + 132, // $6892 + 132, // $6893 + 132, // $6894 + 132, // $6895 + 132, // $6896 + 132, // $6897 + 132, // $6898 + 132, // $6899 + 132, // $689A + 132, // $689B + 132, // $689C + 132, // $689D + 132, // $689E + 132, // $689F + 132, // $68A0 + 132, // $68A1 + 132, // $68A2 + 132, // $68A3 + 132, // $68A4 + 132, // $68A5 + 132, // $68A6 + 132, // $68A7 + 132, // $68A8 + 132, // $68A9 + 132, // $68AA + 132, // $68AB + 132, // $68AC + 132, // $68AD + 132, // $68AE + 132, // $68AF + 132, // $68B0 + 132, // $68B1 + 132, // $68B2 + 132, // $68B3 + 132, // $68B4 + 132, // $68B5 + 132, // $68B6 + 132, // $68B7 + 132, // $68B8 + 132, // $68B9 + 132, // $68BA + 132, // $68BB + 132, // $68BC + 132, // $68BD + 132, // $68BE + 132, // $68BF + 132, // $68C0 + 132, // $68C1 + 132, // $68C2 + 132, // $68C3 + 132, // $68C4 + 132, // $68C5 + 132, // $68C6 + 132, // $68C7 + 132, // $68C8 + 132, // $68C9 + 132, // $68CA + 132, // $68CB + 132, // $68CC + 132, // $68CD + 132, // $68CE + 132, // $68CF + 132, // $68D0 + 132, // $68D1 + 132, // $68D2 + 132, // $68D3 + 132, // $68D4 + 132, // $68D5 + 132, // $68D6 + 132, // $68D7 + 132, // $68D8 + 132, // $68D9 + 132, // $68DA + 132, // $68DB + 132, // $68DC + 132, // $68DD + 132, // $68DE + 132, // $68DF + 132, // $68E0 + 132, // $68E1 + 132, // $68E2 + 132, // $68E3 + 132, // $68E4 + 132, // $68E5 + 132, // $68E6 + 132, // $68E7 + 132, // $68E8 + 132, // $68E9 + 132, // $68EA + 132, // $68EB + 132, // $68EC + 132, // $68ED + 132, // $68EE + 132, // $68EF + 132, // $68F0 + 132, // $68F1 + 132, // $68F2 + 132, // $68F3 + 132, // $68F4 + 132, // $68F5 + 132, // $68F6 + 132, // $68F7 + 132, // $68F8 + 132, // $68F9 + 132, // $68FA + 132, // $68FB + 132, // $68FC + 132, // $68FD + 132, // $68FE + 132, // $68FF + 132, // $6900 + 132, // $6901 + 132, // $6902 + 132, // $6903 + 132, // $6904 + 132, // $6905 + 132, // $6906 + 132, // $6907 + 132, // $6908 + 132, // $6909 + 132, // $690A + 132, // $690B + 132, // $690C + 132, // $690D + 132, // $690E + 132, // $690F + 132, // $6910 + 132, // $6911 + 132, // $6912 + 132, // $6913 + 132, // $6914 + 132, // $6915 + 132, // $6916 + 132, // $6917 + 132, // $6918 + 132, // $6919 + 132, // $691A + 132, // $691B + 132, // $691C + 132, // $691D + 132, // $691E + 132, // $691F + 132, // $6920 + 132, // $6921 + 132, // $6922 + 132, // $6923 + 132, // $6924 + 132, // $6925 + 132, // $6926 + 132, // $6927 + 132, // $6928 + 132, // $6929 + 132, // $692A + 132, // $692B + 132, // $692C + 132, // $692D + 132, // $692E + 132, // $692F + 132, // $6930 + 132, // $6931 + 132, // $6932 + 132, // $6933 + 132, // $6934 + 132, // $6935 + 132, // $6936 + 132, // $6937 + 132, // $6938 + 132, // $6939 + 132, // $693A + 132, // $693B + 132, // $693C + 132, // $693D + 132, // $693E + 132, // $693F + 132, // $6940 + 132, // $6941 + 132, // $6942 + 132, // $6943 + 132, // $6944 + 132, // $6945 + 132, // $6946 + 132, // $6947 + 132, // $6948 + 132, // $6949 + 132, // $694A + 132, // $694B + 132, // $694C + 132, // $694D + 132, // $694E + 132, // $694F + 132, // $6950 + 132, // $6951 + 132, // $6952 + 132, // $6953 + 132, // $6954 + 132, // $6955 + 132, // $6956 + 132, // $6957 + 132, // $6958 + 132, // $6959 + 132, // $695A + 132, // $695B + 132, // $695C + 132, // $695D + 132, // $695E + 132, // $695F + 132, // $6960 + 132, // $6961 + 132, // $6962 + 132, // $6963 + 132, // $6964 + 132, // $6965 + 132, // $6966 + 132, // $6967 + 132, // $6968 + 132, // $6969 + 132, // $696A + 132, // $696B + 132, // $696C + 132, // $696D + 132, // $696E + 132, // $696F + 132, // $6970 + 132, // $6971 + 132, // $6972 + 132, // $6973 + 132, // $6974 + 132, // $6975 + 132, // $6976 + 132, // $6977 + 132, // $6978 + 132, // $6979 + 132, // $697A + 132, // $697B + 132, // $697C + 132, // $697D + 132, // $697E + 132, // $697F + 132, // $6980 + 132, // $6981 + 132, // $6982 + 132, // $6983 + 132, // $6984 + 132, // $6985 + 132, // $6986 + 132, // $6987 + 132, // $6988 + 132, // $6989 + 132, // $698A + 132, // $698B + 132, // $698C + 132, // $698D + 132, // $698E + 132, // $698F + 132, // $6990 + 132, // $6991 + 132, // $6992 + 132, // $6993 + 132, // $6994 + 132, // $6995 + 132, // $6996 + 132, // $6997 + 132, // $6998 + 132, // $6999 + 132, // $699A + 132, // $699B + 132, // $699C + 132, // $699D + 132, // $699E + 132, // $699F + 132, // $69A0 + 132, // $69A1 + 132, // $69A2 + 132, // $69A3 + 132, // $69A4 + 132, // $69A5 + 132, // $69A6 + 132, // $69A7 + 132, // $69A8 + 132, // $69A9 + 132, // $69AA + 132, // $69AB + 132, // $69AC + 132, // $69AD + 132, // $69AE + 132, // $69AF + 132, // $69B0 + 132, // $69B1 + 132, // $69B2 + 132, // $69B3 + 132, // $69B4 + 132, // $69B5 + 132, // $69B6 + 132, // $69B7 + 132, // $69B8 + 132, // $69B9 + 132, // $69BA + 132, // $69BB + 132, // $69BC + 132, // $69BD + 132, // $69BE + 132, // $69BF + 132, // $69C0 + 132, // $69C1 + 132, // $69C2 + 132, // $69C3 + 132, // $69C4 + 132, // $69C5 + 132, // $69C6 + 132, // $69C7 + 132, // $69C8 + 132, // $69C9 + 132, // $69CA + 132, // $69CB + 132, // $69CC + 132, // $69CD + 132, // $69CE + 132, // $69CF + 132, // $69D0 + 132, // $69D1 + 132, // $69D2 + 132, // $69D3 + 132, // $69D4 + 132, // $69D5 + 132, // $69D6 + 132, // $69D7 + 132, // $69D8 + 132, // $69D9 + 132, // $69DA + 132, // $69DB + 132, // $69DC + 132, // $69DD + 132, // $69DE + 132, // $69DF + 132, // $69E0 + 132, // $69E1 + 132, // $69E2 + 132, // $69E3 + 132, // $69E4 + 132, // $69E5 + 132, // $69E6 + 132, // $69E7 + 132, // $69E8 + 132, // $69E9 + 132, // $69EA + 132, // $69EB + 132, // $69EC + 132, // $69ED + 132, // $69EE + 132, // $69EF + 132, // $69F0 + 132, // $69F1 + 132, // $69F2 + 132, // $69F3 + 132, // $69F4 + 132, // $69F5 + 132, // $69F6 + 132, // $69F7 + 132, // $69F8 + 132, // $69F9 + 132, // $69FA + 132, // $69FB + 132, // $69FC + 132, // $69FD + 132, // $69FE + 132, // $69FF + 132, // $6A00 + 132, // $6A01 + 132, // $6A02 + 132, // $6A03 + 132, // $6A04 + 132, // $6A05 + 132, // $6A06 + 132, // $6A07 + 132, // $6A08 + 132, // $6A09 + 132, // $6A0A + 132, // $6A0B + 132, // $6A0C + 132, // $6A0D + 132, // $6A0E + 132, // $6A0F + 132, // $6A10 + 132, // $6A11 + 132, // $6A12 + 132, // $6A13 + 132, // $6A14 + 132, // $6A15 + 132, // $6A16 + 132, // $6A17 + 132, // $6A18 + 132, // $6A19 + 132, // $6A1A + 132, // $6A1B + 132, // $6A1C + 132, // $6A1D + 132, // $6A1E + 132, // $6A1F + 132, // $6A20 + 132, // $6A21 + 132, // $6A22 + 132, // $6A23 + 132, // $6A24 + 132, // $6A25 + 132, // $6A26 + 132, // $6A27 + 132, // $6A28 + 132, // $6A29 + 132, // $6A2A + 132, // $6A2B + 132, // $6A2C + 132, // $6A2D + 132, // $6A2E + 132, // $6A2F + 132, // $6A30 + 132, // $6A31 + 132, // $6A32 + 132, // $6A33 + 132, // $6A34 + 132, // $6A35 + 132, // $6A36 + 132, // $6A37 + 132, // $6A38 + 132, // $6A39 + 132, // $6A3A + 132, // $6A3B + 132, // $6A3C + 132, // $6A3D + 132, // $6A3E + 132, // $6A3F + 132, // $6A40 + 132, // $6A41 + 132, // $6A42 + 132, // $6A43 + 132, // $6A44 + 132, // $6A45 + 132, // $6A46 + 132, // $6A47 + 132, // $6A48 + 132, // $6A49 + 132, // $6A4A + 132, // $6A4B + 132, // $6A4C + 132, // $6A4D + 132, // $6A4E + 132, // $6A4F + 132, // $6A50 + 132, // $6A51 + 132, // $6A52 + 132, // $6A53 + 132, // $6A54 + 132, // $6A55 + 132, // $6A56 + 132, // $6A57 + 132, // $6A58 + 132, // $6A59 + 132, // $6A5A + 132, // $6A5B + 132, // $6A5C + 132, // $6A5D + 132, // $6A5E + 132, // $6A5F + 132, // $6A60 + 132, // $6A61 + 132, // $6A62 + 132, // $6A63 + 132, // $6A64 + 132, // $6A65 + 132, // $6A66 + 132, // $6A67 + 132, // $6A68 + 132, // $6A69 + 132, // $6A6A + 132, // $6A6B + 132, // $6A6C + 132, // $6A6D + 132, // $6A6E + 132, // $6A6F + 132, // $6A70 + 132, // $6A71 + 132, // $6A72 + 132, // $6A73 + 132, // $6A74 + 132, // $6A75 + 132, // $6A76 + 132, // $6A77 + 132, // $6A78 + 132, // $6A79 + 132, // $6A7A + 132, // $6A7B + 132, // $6A7C + 132, // $6A7D + 132, // $6A7E + 132, // $6A7F + 132, // $6A80 + 132, // $6A81 + 132, // $6A82 + 132, // $6A83 + 132, // $6A84 + 132, // $6A85 + 132, // $6A86 + 132, // $6A87 + 132, // $6A88 + 132, // $6A89 + 132, // $6A8A + 132, // $6A8B + 132, // $6A8C + 132, // $6A8D + 132, // $6A8E + 132, // $6A8F + 132, // $6A90 + 132, // $6A91 + 132, // $6A92 + 132, // $6A93 + 132, // $6A94 + 132, // $6A95 + 132, // $6A96 + 132, // $6A97 + 132, // $6A98 + 132, // $6A99 + 132, // $6A9A + 132, // $6A9B + 132, // $6A9C + 132, // $6A9D + 132, // $6A9E + 132, // $6A9F + 132, // $6AA0 + 132, // $6AA1 + 132, // $6AA2 + 132, // $6AA3 + 132, // $6AA4 + 132, // $6AA5 + 132, // $6AA6 + 132, // $6AA7 + 132, // $6AA8 + 132, // $6AA9 + 132, // $6AAA + 132, // $6AAB + 132, // $6AAC + 132, // $6AAD + 132, // $6AAE + 132, // $6AAF + 132, // $6AB0 + 132, // $6AB1 + 132, // $6AB2 + 132, // $6AB3 + 132, // $6AB4 + 132, // $6AB5 + 132, // $6AB6 + 132, // $6AB7 + 132, // $6AB8 + 132, // $6AB9 + 132, // $6ABA + 132, // $6ABB + 132, // $6ABC + 132, // $6ABD + 132, // $6ABE + 132, // $6ABF + 132, // $6AC0 + 132, // $6AC1 + 132, // $6AC2 + 132, // $6AC3 + 132, // $6AC4 + 132, // $6AC5 + 132, // $6AC6 + 132, // $6AC7 + 132, // $6AC8 + 132, // $6AC9 + 132, // $6ACA + 132, // $6ACB + 132, // $6ACC + 132, // $6ACD + 132, // $6ACE + 132, // $6ACF + 132, // $6AD0 + 132, // $6AD1 + 132, // $6AD2 + 132, // $6AD3 + 132, // $6AD4 + 132, // $6AD5 + 132, // $6AD6 + 132, // $6AD7 + 132, // $6AD8 + 132, // $6AD9 + 132, // $6ADA + 132, // $6ADB + 132, // $6ADC + 132, // $6ADD + 132, // $6ADE + 132, // $6ADF + 132, // $6AE0 + 132, // $6AE1 + 132, // $6AE2 + 132, // $6AE3 + 132, // $6AE4 + 132, // $6AE5 + 132, // $6AE6 + 132, // $6AE7 + 132, // $6AE8 + 132, // $6AE9 + 132, // $6AEA + 132, // $6AEB + 132, // $6AEC + 132, // $6AED + 132, // $6AEE + 132, // $6AEF + 132, // $6AF0 + 132, // $6AF1 + 132, // $6AF2 + 132, // $6AF3 + 132, // $6AF4 + 132, // $6AF5 + 132, // $6AF6 + 132, // $6AF7 + 132, // $6AF8 + 132, // $6AF9 + 132, // $6AFA + 132, // $6AFB + 132, // $6AFC + 132, // $6AFD + 132, // $6AFE + 132, // $6AFF + 132, // $6B00 + 132, // $6B01 + 132, // $6B02 + 132, // $6B03 + 132, // $6B04 + 132, // $6B05 + 132, // $6B06 + 132, // $6B07 + 132, // $6B08 + 132, // $6B09 + 132, // $6B0A + 132, // $6B0B + 132, // $6B0C + 132, // $6B0D + 132, // $6B0E + 132, // $6B0F + 132, // $6B10 + 132, // $6B11 + 132, // $6B12 + 132, // $6B13 + 132, // $6B14 + 132, // $6B15 + 132, // $6B16 + 132, // $6B17 + 132, // $6B18 + 132, // $6B19 + 132, // $6B1A + 132, // $6B1B + 132, // $6B1C + 132, // $6B1D + 132, // $6B1E + 132, // $6B1F + 132, // $6B20 + 132, // $6B21 + 132, // $6B22 + 132, // $6B23 + 132, // $6B24 + 132, // $6B25 + 132, // $6B26 + 132, // $6B27 + 132, // $6B28 + 132, // $6B29 + 132, // $6B2A + 132, // $6B2B + 132, // $6B2C + 132, // $6B2D + 132, // $6B2E + 132, // $6B2F + 132, // $6B30 + 132, // $6B31 + 132, // $6B32 + 132, // $6B33 + 132, // $6B34 + 132, // $6B35 + 132, // $6B36 + 132, // $6B37 + 132, // $6B38 + 132, // $6B39 + 132, // $6B3A + 132, // $6B3B + 132, // $6B3C + 132, // $6B3D + 132, // $6B3E + 132, // $6B3F + 132, // $6B40 + 132, // $6B41 + 132, // $6B42 + 132, // $6B43 + 132, // $6B44 + 132, // $6B45 + 132, // $6B46 + 132, // $6B47 + 132, // $6B48 + 132, // $6B49 + 132, // $6B4A + 132, // $6B4B + 132, // $6B4C + 132, // $6B4D + 132, // $6B4E + 132, // $6B4F + 132, // $6B50 + 132, // $6B51 + 132, // $6B52 + 132, // $6B53 + 132, // $6B54 + 132, // $6B55 + 132, // $6B56 + 132, // $6B57 + 132, // $6B58 + 132, // $6B59 + 132, // $6B5A + 132, // $6B5B + 132, // $6B5C + 132, // $6B5D + 132, // $6B5E + 132, // $6B5F + 132, // $6B60 + 132, // $6B61 + 132, // $6B62 + 132, // $6B63 + 132, // $6B64 + 132, // $6B65 + 132, // $6B66 + 132, // $6B67 + 132, // $6B68 + 132, // $6B69 + 132, // $6B6A + 132, // $6B6B + 132, // $6B6C + 132, // $6B6D + 132, // $6B6E + 132, // $6B6F + 132, // $6B70 + 132, // $6B71 + 132, // $6B72 + 132, // $6B73 + 132, // $6B74 + 132, // $6B75 + 132, // $6B76 + 132, // $6B77 + 132, // $6B78 + 132, // $6B79 + 132, // $6B7A + 132, // $6B7B + 132, // $6B7C + 132, // $6B7D + 132, // $6B7E + 132, // $6B7F + 132, // $6B80 + 132, // $6B81 + 132, // $6B82 + 132, // $6B83 + 132, // $6B84 + 132, // $6B85 + 132, // $6B86 + 132, // $6B87 + 132, // $6B88 + 132, // $6B89 + 132, // $6B8A + 132, // $6B8B + 132, // $6B8C + 132, // $6B8D + 132, // $6B8E + 132, // $6B8F + 132, // $6B90 + 132, // $6B91 + 132, // $6B92 + 132, // $6B93 + 132, // $6B94 + 132, // $6B95 + 132, // $6B96 + 132, // $6B97 + 132, // $6B98 + 132, // $6B99 + 132, // $6B9A + 132, // $6B9B + 132, // $6B9C + 132, // $6B9D + 132, // $6B9E + 132, // $6B9F + 132, // $6BA0 + 132, // $6BA1 + 132, // $6BA2 + 132, // $6BA3 + 132, // $6BA4 + 132, // $6BA5 + 132, // $6BA6 + 132, // $6BA7 + 132, // $6BA8 + 132, // $6BA9 + 132, // $6BAA + 132, // $6BAB + 132, // $6BAC + 132, // $6BAD + 132, // $6BAE + 132, // $6BAF + 132, // $6BB0 + 132, // $6BB1 + 132, // $6BB2 + 132, // $6BB3 + 132, // $6BB4 + 132, // $6BB5 + 132, // $6BB6 + 132, // $6BB7 + 132, // $6BB8 + 132, // $6BB9 + 132, // $6BBA + 132, // $6BBB + 132, // $6BBC + 132, // $6BBD + 132, // $6BBE + 132, // $6BBF + 132, // $6BC0 + 132, // $6BC1 + 132, // $6BC2 + 132, // $6BC3 + 132, // $6BC4 + 132, // $6BC5 + 132, // $6BC6 + 132, // $6BC7 + 132, // $6BC8 + 132, // $6BC9 + 132, // $6BCA + 132, // $6BCB + 132, // $6BCC + 132, // $6BCD + 132, // $6BCE + 132, // $6BCF + 132, // $6BD0 + 132, // $6BD1 + 132, // $6BD2 + 132, // $6BD3 + 132, // $6BD4 + 132, // $6BD5 + 132, // $6BD6 + 132, // $6BD7 + 132, // $6BD8 + 132, // $6BD9 + 132, // $6BDA + 132, // $6BDB + 132, // $6BDC + 132, // $6BDD + 132, // $6BDE + 132, // $6BDF + 132, // $6BE0 + 132, // $6BE1 + 132, // $6BE2 + 132, // $6BE3 + 132, // $6BE4 + 132, // $6BE5 + 132, // $6BE6 + 132, // $6BE7 + 132, // $6BE8 + 132, // $6BE9 + 132, // $6BEA + 132, // $6BEB + 132, // $6BEC + 132, // $6BED + 132, // $6BEE + 132, // $6BEF + 132, // $6BF0 + 132, // $6BF1 + 132, // $6BF2 + 132, // $6BF3 + 132, // $6BF4 + 132, // $6BF5 + 132, // $6BF6 + 132, // $6BF7 + 132, // $6BF8 + 132, // $6BF9 + 132, // $6BFA + 132, // $6BFB + 132, // $6BFC + 132, // $6BFD + 132, // $6BFE + 132, // $6BFF + 132, // $6C00 + 132, // $6C01 + 132, // $6C02 + 132, // $6C03 + 132, // $6C04 + 132, // $6C05 + 132, // $6C06 + 132, // $6C07 + 132, // $6C08 + 132, // $6C09 + 132, // $6C0A + 132, // $6C0B + 132, // $6C0C + 132, // $6C0D + 132, // $6C0E + 132, // $6C0F + 132, // $6C10 + 132, // $6C11 + 132, // $6C12 + 132, // $6C13 + 132, // $6C14 + 132, // $6C15 + 132, // $6C16 + 132, // $6C17 + 132, // $6C18 + 132, // $6C19 + 132, // $6C1A + 132, // $6C1B + 132, // $6C1C + 132, // $6C1D + 132, // $6C1E + 132, // $6C1F + 132, // $6C20 + 132, // $6C21 + 132, // $6C22 + 132, // $6C23 + 132, // $6C24 + 132, // $6C25 + 132, // $6C26 + 132, // $6C27 + 132, // $6C28 + 132, // $6C29 + 132, // $6C2A + 132, // $6C2B + 132, // $6C2C + 132, // $6C2D + 132, // $6C2E + 132, // $6C2F + 132, // $6C30 + 132, // $6C31 + 132, // $6C32 + 132, // $6C33 + 132, // $6C34 + 132, // $6C35 + 132, // $6C36 + 132, // $6C37 + 132, // $6C38 + 132, // $6C39 + 132, // $6C3A + 132, // $6C3B + 132, // $6C3C + 132, // $6C3D + 132, // $6C3E + 132, // $6C3F + 132, // $6C40 + 132, // $6C41 + 132, // $6C42 + 132, // $6C43 + 132, // $6C44 + 132, // $6C45 + 132, // $6C46 + 132, // $6C47 + 132, // $6C48 + 132, // $6C49 + 132, // $6C4A + 132, // $6C4B + 132, // $6C4C + 132, // $6C4D + 132, // $6C4E + 132, // $6C4F + 132, // $6C50 + 132, // $6C51 + 132, // $6C52 + 132, // $6C53 + 132, // $6C54 + 132, // $6C55 + 132, // $6C56 + 132, // $6C57 + 132, // $6C58 + 132, // $6C59 + 132, // $6C5A + 132, // $6C5B + 132, // $6C5C + 132, // $6C5D + 132, // $6C5E + 132, // $6C5F + 132, // $6C60 + 132, // $6C61 + 132, // $6C62 + 132, // $6C63 + 132, // $6C64 + 132, // $6C65 + 132, // $6C66 + 132, // $6C67 + 132, // $6C68 + 132, // $6C69 + 132, // $6C6A + 132, // $6C6B + 132, // $6C6C + 132, // $6C6D + 132, // $6C6E + 132, // $6C6F + 132, // $6C70 + 132, // $6C71 + 132, // $6C72 + 132, // $6C73 + 132, // $6C74 + 132, // $6C75 + 132, // $6C76 + 132, // $6C77 + 132, // $6C78 + 132, // $6C79 + 132, // $6C7A + 132, // $6C7B + 132, // $6C7C + 132, // $6C7D + 132, // $6C7E + 132, // $6C7F + 132, // $6C80 + 132, // $6C81 + 132, // $6C82 + 132, // $6C83 + 132, // $6C84 + 132, // $6C85 + 132, // $6C86 + 132, // $6C87 + 132, // $6C88 + 132, // $6C89 + 132, // $6C8A + 132, // $6C8B + 132, // $6C8C + 132, // $6C8D + 132, // $6C8E + 132, // $6C8F + 132, // $6C90 + 132, // $6C91 + 132, // $6C92 + 132, // $6C93 + 132, // $6C94 + 132, // $6C95 + 132, // $6C96 + 132, // $6C97 + 132, // $6C98 + 132, // $6C99 + 132, // $6C9A + 132, // $6C9B + 132, // $6C9C + 132, // $6C9D + 132, // $6C9E + 132, // $6C9F + 132, // $6CA0 + 132, // $6CA1 + 132, // $6CA2 + 132, // $6CA3 + 132, // $6CA4 + 132, // $6CA5 + 132, // $6CA6 + 132, // $6CA7 + 132, // $6CA8 + 132, // $6CA9 + 132, // $6CAA + 132, // $6CAB + 132, // $6CAC + 132, // $6CAD + 132, // $6CAE + 132, // $6CAF + 132, // $6CB0 + 132, // $6CB1 + 132, // $6CB2 + 132, // $6CB3 + 132, // $6CB4 + 132, // $6CB5 + 132, // $6CB6 + 132, // $6CB7 + 132, // $6CB8 + 132, // $6CB9 + 132, // $6CBA + 132, // $6CBB + 132, // $6CBC + 132, // $6CBD + 132, // $6CBE + 132, // $6CBF + 132, // $6CC0 + 132, // $6CC1 + 132, // $6CC2 + 132, // $6CC3 + 132, // $6CC4 + 132, // $6CC5 + 132, // $6CC6 + 132, // $6CC7 + 132, // $6CC8 + 132, // $6CC9 + 132, // $6CCA + 132, // $6CCB + 132, // $6CCC + 132, // $6CCD + 132, // $6CCE + 132, // $6CCF + 132, // $6CD0 + 132, // $6CD1 + 132, // $6CD2 + 132, // $6CD3 + 132, // $6CD4 + 132, // $6CD5 + 132, // $6CD6 + 132, // $6CD7 + 132, // $6CD8 + 132, // $6CD9 + 132, // $6CDA + 132, // $6CDB + 132, // $6CDC + 132, // $6CDD + 132, // $6CDE + 132, // $6CDF + 132, // $6CE0 + 132, // $6CE1 + 132, // $6CE2 + 132, // $6CE3 + 132, // $6CE4 + 132, // $6CE5 + 132, // $6CE6 + 132, // $6CE7 + 132, // $6CE8 + 132, // $6CE9 + 132, // $6CEA + 132, // $6CEB + 132, // $6CEC + 132, // $6CED + 132, // $6CEE + 132, // $6CEF + 132, // $6CF0 + 132, // $6CF1 + 132, // $6CF2 + 132, // $6CF3 + 132, // $6CF4 + 132, // $6CF5 + 132, // $6CF6 + 132, // $6CF7 + 132, // $6CF8 + 132, // $6CF9 + 132, // $6CFA + 132, // $6CFB + 132, // $6CFC + 132, // $6CFD + 132, // $6CFE + 132, // $6CFF + 132, // $6D00 + 132, // $6D01 + 132, // $6D02 + 132, // $6D03 + 132, // $6D04 + 132, // $6D05 + 132, // $6D06 + 132, // $6D07 + 132, // $6D08 + 132, // $6D09 + 132, // $6D0A + 132, // $6D0B + 132, // $6D0C + 132, // $6D0D + 132, // $6D0E + 132, // $6D0F + 132, // $6D10 + 132, // $6D11 + 132, // $6D12 + 132, // $6D13 + 132, // $6D14 + 132, // $6D15 + 132, // $6D16 + 132, // $6D17 + 132, // $6D18 + 132, // $6D19 + 132, // $6D1A + 132, // $6D1B + 132, // $6D1C + 132, // $6D1D + 132, // $6D1E + 132, // $6D1F + 132, // $6D20 + 132, // $6D21 + 132, // $6D22 + 132, // $6D23 + 132, // $6D24 + 132, // $6D25 + 132, // $6D26 + 132, // $6D27 + 132, // $6D28 + 132, // $6D29 + 132, // $6D2A + 132, // $6D2B + 132, // $6D2C + 132, // $6D2D + 132, // $6D2E + 132, // $6D2F + 132, // $6D30 + 132, // $6D31 + 132, // $6D32 + 132, // $6D33 + 132, // $6D34 + 132, // $6D35 + 132, // $6D36 + 132, // $6D37 + 132, // $6D38 + 132, // $6D39 + 132, // $6D3A + 132, // $6D3B + 132, // $6D3C + 132, // $6D3D + 132, // $6D3E + 132, // $6D3F + 132, // $6D40 + 132, // $6D41 + 132, // $6D42 + 132, // $6D43 + 132, // $6D44 + 132, // $6D45 + 132, // $6D46 + 132, // $6D47 + 132, // $6D48 + 132, // $6D49 + 132, // $6D4A + 132, // $6D4B + 132, // $6D4C + 132, // $6D4D + 132, // $6D4E + 132, // $6D4F + 132, // $6D50 + 132, // $6D51 + 132, // $6D52 + 132, // $6D53 + 132, // $6D54 + 132, // $6D55 + 132, // $6D56 + 132, // $6D57 + 132, // $6D58 + 132, // $6D59 + 132, // $6D5A + 132, // $6D5B + 132, // $6D5C + 132, // $6D5D + 132, // $6D5E + 132, // $6D5F + 132, // $6D60 + 132, // $6D61 + 132, // $6D62 + 132, // $6D63 + 132, // $6D64 + 132, // $6D65 + 132, // $6D66 + 132, // $6D67 + 132, // $6D68 + 132, // $6D69 + 132, // $6D6A + 132, // $6D6B + 132, // $6D6C + 132, // $6D6D + 132, // $6D6E + 132, // $6D6F + 132, // $6D70 + 132, // $6D71 + 132, // $6D72 + 132, // $6D73 + 132, // $6D74 + 132, // $6D75 + 132, // $6D76 + 132, // $6D77 + 132, // $6D78 + 132, // $6D79 + 132, // $6D7A + 132, // $6D7B + 132, // $6D7C + 132, // $6D7D + 132, // $6D7E + 132, // $6D7F + 132, // $6D80 + 132, // $6D81 + 132, // $6D82 + 132, // $6D83 + 132, // $6D84 + 132, // $6D85 + 132, // $6D86 + 132, // $6D87 + 132, // $6D88 + 132, // $6D89 + 132, // $6D8A + 132, // $6D8B + 132, // $6D8C + 132, // $6D8D + 132, // $6D8E + 132, // $6D8F + 132, // $6D90 + 132, // $6D91 + 132, // $6D92 + 132, // $6D93 + 132, // $6D94 + 132, // $6D95 + 132, // $6D96 + 132, // $6D97 + 132, // $6D98 + 132, // $6D99 + 132, // $6D9A + 132, // $6D9B + 132, // $6D9C + 132, // $6D9D + 132, // $6D9E + 132, // $6D9F + 132, // $6DA0 + 132, // $6DA1 + 132, // $6DA2 + 132, // $6DA3 + 132, // $6DA4 + 132, // $6DA5 + 132, // $6DA6 + 132, // $6DA7 + 132, // $6DA8 + 132, // $6DA9 + 132, // $6DAA + 132, // $6DAB + 132, // $6DAC + 132, // $6DAD + 132, // $6DAE + 132, // $6DAF + 132, // $6DB0 + 132, // $6DB1 + 132, // $6DB2 + 132, // $6DB3 + 132, // $6DB4 + 132, // $6DB5 + 132, // $6DB6 + 132, // $6DB7 + 132, // $6DB8 + 132, // $6DB9 + 132, // $6DBA + 132, // $6DBB + 132, // $6DBC + 132, // $6DBD + 132, // $6DBE + 132, // $6DBF + 132, // $6DC0 + 132, // $6DC1 + 132, // $6DC2 + 132, // $6DC3 + 132, // $6DC4 + 132, // $6DC5 + 132, // $6DC6 + 132, // $6DC7 + 132, // $6DC8 + 132, // $6DC9 + 132, // $6DCA + 132, // $6DCB + 132, // $6DCC + 132, // $6DCD + 132, // $6DCE + 132, // $6DCF + 132, // $6DD0 + 132, // $6DD1 + 132, // $6DD2 + 132, // $6DD3 + 132, // $6DD4 + 132, // $6DD5 + 132, // $6DD6 + 132, // $6DD7 + 132, // $6DD8 + 132, // $6DD9 + 132, // $6DDA + 132, // $6DDB + 132, // $6DDC + 132, // $6DDD + 132, // $6DDE + 132, // $6DDF + 132, // $6DE0 + 132, // $6DE1 + 132, // $6DE2 + 132, // $6DE3 + 132, // $6DE4 + 132, // $6DE5 + 132, // $6DE6 + 132, // $6DE7 + 132, // $6DE8 + 132, // $6DE9 + 132, // $6DEA + 132, // $6DEB + 132, // $6DEC + 132, // $6DED + 132, // $6DEE + 132, // $6DEF + 132, // $6DF0 + 132, // $6DF1 + 132, // $6DF2 + 132, // $6DF3 + 132, // $6DF4 + 132, // $6DF5 + 132, // $6DF6 + 132, // $6DF7 + 132, // $6DF8 + 132, // $6DF9 + 132, // $6DFA + 132, // $6DFB + 132, // $6DFC + 132, // $6DFD + 132, // $6DFE + 132, // $6DFF + 132, // $6E00 + 132, // $6E01 + 132, // $6E02 + 132, // $6E03 + 132, // $6E04 + 132, // $6E05 + 132, // $6E06 + 132, // $6E07 + 132, // $6E08 + 132, // $6E09 + 132, // $6E0A + 132, // $6E0B + 132, // $6E0C + 132, // $6E0D + 132, // $6E0E + 132, // $6E0F + 132, // $6E10 + 132, // $6E11 + 132, // $6E12 + 132, // $6E13 + 132, // $6E14 + 132, // $6E15 + 132, // $6E16 + 132, // $6E17 + 132, // $6E18 + 132, // $6E19 + 132, // $6E1A + 132, // $6E1B + 132, // $6E1C + 132, // $6E1D + 132, // $6E1E + 132, // $6E1F + 132, // $6E20 + 132, // $6E21 + 132, // $6E22 + 132, // $6E23 + 132, // $6E24 + 132, // $6E25 + 132, // $6E26 + 132, // $6E27 + 132, // $6E28 + 132, // $6E29 + 132, // $6E2A + 132, // $6E2B + 132, // $6E2C + 132, // $6E2D + 132, // $6E2E + 132, // $6E2F + 132, // $6E30 + 132, // $6E31 + 132, // $6E32 + 132, // $6E33 + 132, // $6E34 + 132, // $6E35 + 132, // $6E36 + 132, // $6E37 + 132, // $6E38 + 132, // $6E39 + 132, // $6E3A + 132, // $6E3B + 132, // $6E3C + 132, // $6E3D + 132, // $6E3E + 132, // $6E3F + 132, // $6E40 + 132, // $6E41 + 132, // $6E42 + 132, // $6E43 + 132, // $6E44 + 132, // $6E45 + 132, // $6E46 + 132, // $6E47 + 132, // $6E48 + 132, // $6E49 + 132, // $6E4A + 132, // $6E4B + 132, // $6E4C + 132, // $6E4D + 132, // $6E4E + 132, // $6E4F + 132, // $6E50 + 132, // $6E51 + 132, // $6E52 + 132, // $6E53 + 132, // $6E54 + 132, // $6E55 + 132, // $6E56 + 132, // $6E57 + 132, // $6E58 + 132, // $6E59 + 132, // $6E5A + 132, // $6E5B + 132, // $6E5C + 132, // $6E5D + 132, // $6E5E + 132, // $6E5F + 132, // $6E60 + 132, // $6E61 + 132, // $6E62 + 132, // $6E63 + 132, // $6E64 + 132, // $6E65 + 132, // $6E66 + 132, // $6E67 + 132, // $6E68 + 132, // $6E69 + 132, // $6E6A + 132, // $6E6B + 132, // $6E6C + 132, // $6E6D + 132, // $6E6E + 132, // $6E6F + 132, // $6E70 + 132, // $6E71 + 132, // $6E72 + 132, // $6E73 + 132, // $6E74 + 132, // $6E75 + 132, // $6E76 + 132, // $6E77 + 132, // $6E78 + 132, // $6E79 + 132, // $6E7A + 132, // $6E7B + 132, // $6E7C + 132, // $6E7D + 132, // $6E7E + 132, // $6E7F + 132, // $6E80 + 132, // $6E81 + 132, // $6E82 + 132, // $6E83 + 132, // $6E84 + 132, // $6E85 + 132, // $6E86 + 132, // $6E87 + 132, // $6E88 + 132, // $6E89 + 132, // $6E8A + 132, // $6E8B + 132, // $6E8C + 132, // $6E8D + 132, // $6E8E + 132, // $6E8F + 132, // $6E90 + 132, // $6E91 + 132, // $6E92 + 132, // $6E93 + 132, // $6E94 + 132, // $6E95 + 132, // $6E96 + 132, // $6E97 + 132, // $6E98 + 132, // $6E99 + 132, // $6E9A + 132, // $6E9B + 132, // $6E9C + 132, // $6E9D + 132, // $6E9E + 132, // $6E9F + 132, // $6EA0 + 132, // $6EA1 + 132, // $6EA2 + 132, // $6EA3 + 132, // $6EA4 + 132, // $6EA5 + 132, // $6EA6 + 132, // $6EA7 + 132, // $6EA8 + 132, // $6EA9 + 132, // $6EAA + 132, // $6EAB + 132, // $6EAC + 132, // $6EAD + 132, // $6EAE + 132, // $6EAF + 132, // $6EB0 + 132, // $6EB1 + 132, // $6EB2 + 132, // $6EB3 + 132, // $6EB4 + 132, // $6EB5 + 132, // $6EB6 + 132, // $6EB7 + 132, // $6EB8 + 132, // $6EB9 + 132, // $6EBA + 132, // $6EBB + 132, // $6EBC + 132, // $6EBD + 132, // $6EBE + 132, // $6EBF + 132, // $6EC0 + 132, // $6EC1 + 132, // $6EC2 + 132, // $6EC3 + 132, // $6EC4 + 132, // $6EC5 + 132, // $6EC6 + 132, // $6EC7 + 132, // $6EC8 + 132, // $6EC9 + 132, // $6ECA + 132, // $6ECB + 132, // $6ECC + 132, // $6ECD + 132, // $6ECE + 132, // $6ECF + 132, // $6ED0 + 132, // $6ED1 + 132, // $6ED2 + 132, // $6ED3 + 132, // $6ED4 + 132, // $6ED5 + 132, // $6ED6 + 132, // $6ED7 + 132, // $6ED8 + 132, // $6ED9 + 132, // $6EDA + 132, // $6EDB + 132, // $6EDC + 132, // $6EDD + 132, // $6EDE + 132, // $6EDF + 132, // $6EE0 + 132, // $6EE1 + 132, // $6EE2 + 132, // $6EE3 + 132, // $6EE4 + 132, // $6EE5 + 132, // $6EE6 + 132, // $6EE7 + 132, // $6EE8 + 132, // $6EE9 + 132, // $6EEA + 132, // $6EEB + 132, // $6EEC + 132, // $6EED + 132, // $6EEE + 132, // $6EEF + 132, // $6EF0 + 132, // $6EF1 + 132, // $6EF2 + 132, // $6EF3 + 132, // $6EF4 + 132, // $6EF5 + 132, // $6EF6 + 132, // $6EF7 + 132, // $6EF8 + 132, // $6EF9 + 132, // $6EFA + 132, // $6EFB + 132, // $6EFC + 132, // $6EFD + 132, // $6EFE + 132, // $6EFF + 132, // $6F00 + 132, // $6F01 + 132, // $6F02 + 132, // $6F03 + 132, // $6F04 + 132, // $6F05 + 132, // $6F06 + 132, // $6F07 + 132, // $6F08 + 132, // $6F09 + 132, // $6F0A + 132, // $6F0B + 132, // $6F0C + 132, // $6F0D + 132, // $6F0E + 132, // $6F0F + 132, // $6F10 + 132, // $6F11 + 132, // $6F12 + 132, // $6F13 + 132, // $6F14 + 132, // $6F15 + 132, // $6F16 + 132, // $6F17 + 132, // $6F18 + 132, // $6F19 + 132, // $6F1A + 132, // $6F1B + 132, // $6F1C + 132, // $6F1D + 132, // $6F1E + 132, // $6F1F + 132, // $6F20 + 132, // $6F21 + 132, // $6F22 + 132, // $6F23 + 132, // $6F24 + 132, // $6F25 + 132, // $6F26 + 132, // $6F27 + 132, // $6F28 + 132, // $6F29 + 132, // $6F2A + 132, // $6F2B + 132, // $6F2C + 132, // $6F2D + 132, // $6F2E + 132, // $6F2F + 132, // $6F30 + 132, // $6F31 + 132, // $6F32 + 132, // $6F33 + 132, // $6F34 + 132, // $6F35 + 132, // $6F36 + 132, // $6F37 + 132, // $6F38 + 132, // $6F39 + 132, // $6F3A + 132, // $6F3B + 132, // $6F3C + 132, // $6F3D + 132, // $6F3E + 132, // $6F3F + 132, // $6F40 + 132, // $6F41 + 132, // $6F42 + 132, // $6F43 + 132, // $6F44 + 132, // $6F45 + 132, // $6F46 + 132, // $6F47 + 132, // $6F48 + 132, // $6F49 + 132, // $6F4A + 132, // $6F4B + 132, // $6F4C + 132, // $6F4D + 132, // $6F4E + 132, // $6F4F + 132, // $6F50 + 132, // $6F51 + 132, // $6F52 + 132, // $6F53 + 132, // $6F54 + 132, // $6F55 + 132, // $6F56 + 132, // $6F57 + 132, // $6F58 + 132, // $6F59 + 132, // $6F5A + 132, // $6F5B + 132, // $6F5C + 132, // $6F5D + 132, // $6F5E + 132, // $6F5F + 132, // $6F60 + 132, // $6F61 + 132, // $6F62 + 132, // $6F63 + 132, // $6F64 + 132, // $6F65 + 132, // $6F66 + 132, // $6F67 + 132, // $6F68 + 132, // $6F69 + 132, // $6F6A + 132, // $6F6B + 132, // $6F6C + 132, // $6F6D + 132, // $6F6E + 132, // $6F6F + 132, // $6F70 + 132, // $6F71 + 132, // $6F72 + 132, // $6F73 + 132, // $6F74 + 132, // $6F75 + 132, // $6F76 + 132, // $6F77 + 132, // $6F78 + 132, // $6F79 + 132, // $6F7A + 132, // $6F7B + 132, // $6F7C + 132, // $6F7D + 132, // $6F7E + 132, // $6F7F + 132, // $6F80 + 132, // $6F81 + 132, // $6F82 + 132, // $6F83 + 132, // $6F84 + 132, // $6F85 + 132, // $6F86 + 132, // $6F87 + 132, // $6F88 + 132, // $6F89 + 132, // $6F8A + 132, // $6F8B + 132, // $6F8C + 132, // $6F8D + 132, // $6F8E + 132, // $6F8F + 132, // $6F90 + 132, // $6F91 + 132, // $6F92 + 132, // $6F93 + 132, // $6F94 + 132, // $6F95 + 132, // $6F96 + 132, // $6F97 + 132, // $6F98 + 132, // $6F99 + 132, // $6F9A + 132, // $6F9B + 132, // $6F9C + 132, // $6F9D + 132, // $6F9E + 132, // $6F9F + 132, // $6FA0 + 132, // $6FA1 + 132, // $6FA2 + 132, // $6FA3 + 132, // $6FA4 + 132, // $6FA5 + 132, // $6FA6 + 132, // $6FA7 + 132, // $6FA8 + 132, // $6FA9 + 132, // $6FAA + 132, // $6FAB + 132, // $6FAC + 132, // $6FAD + 132, // $6FAE + 132, // $6FAF + 132, // $6FB0 + 132, // $6FB1 + 132, // $6FB2 + 132, // $6FB3 + 132, // $6FB4 + 132, // $6FB5 + 132, // $6FB6 + 132, // $6FB7 + 132, // $6FB8 + 132, // $6FB9 + 132, // $6FBA + 132, // $6FBB + 132, // $6FBC + 132, // $6FBD + 132, // $6FBE + 132, // $6FBF + 132, // $6FC0 + 132, // $6FC1 + 132, // $6FC2 + 132, // $6FC3 + 132, // $6FC4 + 132, // $6FC5 + 132, // $6FC6 + 132, // $6FC7 + 132, // $6FC8 + 132, // $6FC9 + 132, // $6FCA + 132, // $6FCB + 132, // $6FCC + 132, // $6FCD + 132, // $6FCE + 132, // $6FCF + 132, // $6FD0 + 132, // $6FD1 + 132, // $6FD2 + 132, // $6FD3 + 132, // $6FD4 + 132, // $6FD5 + 132, // $6FD6 + 132, // $6FD7 + 132, // $6FD8 + 132, // $6FD9 + 132, // $6FDA + 132, // $6FDB + 132, // $6FDC + 132, // $6FDD + 132, // $6FDE + 132, // $6FDF + 132, // $6FE0 + 132, // $6FE1 + 132, // $6FE2 + 132, // $6FE3 + 132, // $6FE4 + 132, // $6FE5 + 132, // $6FE6 + 132, // $6FE7 + 132, // $6FE8 + 132, // $6FE9 + 132, // $6FEA + 132, // $6FEB + 132, // $6FEC + 132, // $6FED + 132, // $6FEE + 132, // $6FEF + 132, // $6FF0 + 132, // $6FF1 + 132, // $6FF2 + 132, // $6FF3 + 132, // $6FF4 + 132, // $6FF5 + 132, // $6FF6 + 132, // $6FF7 + 132, // $6FF8 + 132, // $6FF9 + 132, // $6FFA + 132, // $6FFB + 132, // $6FFC + 132, // $6FFD + 132, // $6FFE + 132, // $6FFF + 132, // $7000 + 132, // $7001 + 132, // $7002 + 132, // $7003 + 132, // $7004 + 132, // $7005 + 132, // $7006 + 132, // $7007 + 132, // $7008 + 132, // $7009 + 132, // $700A + 132, // $700B + 132, // $700C + 132, // $700D + 132, // $700E + 132, // $700F + 132, // $7010 + 132, // $7011 + 132, // $7012 + 132, // $7013 + 132, // $7014 + 132, // $7015 + 132, // $7016 + 132, // $7017 + 132, // $7018 + 132, // $7019 + 132, // $701A + 132, // $701B + 132, // $701C + 132, // $701D + 132, // $701E + 132, // $701F + 132, // $7020 + 132, // $7021 + 132, // $7022 + 132, // $7023 + 132, // $7024 + 132, // $7025 + 132, // $7026 + 132, // $7027 + 132, // $7028 + 132, // $7029 + 132, // $702A + 132, // $702B + 132, // $702C + 132, // $702D + 132, // $702E + 132, // $702F + 132, // $7030 + 132, // $7031 + 132, // $7032 + 132, // $7033 + 132, // $7034 + 132, // $7035 + 132, // $7036 + 132, // $7037 + 132, // $7038 + 132, // $7039 + 132, // $703A + 132, // $703B + 132, // $703C + 132, // $703D + 132, // $703E + 132, // $703F + 132, // $7040 + 132, // $7041 + 132, // $7042 + 132, // $7043 + 132, // $7044 + 132, // $7045 + 132, // $7046 + 132, // $7047 + 132, // $7048 + 132, // $7049 + 132, // $704A + 132, // $704B + 132, // $704C + 132, // $704D + 132, // $704E + 132, // $704F + 132, // $7050 + 132, // $7051 + 132, // $7052 + 132, // $7053 + 132, // $7054 + 132, // $7055 + 132, // $7056 + 132, // $7057 + 132, // $7058 + 132, // $7059 + 132, // $705A + 132, // $705B + 132, // $705C + 132, // $705D + 132, // $705E + 132, // $705F + 132, // $7060 + 132, // $7061 + 132, // $7062 + 132, // $7063 + 132, // $7064 + 132, // $7065 + 132, // $7066 + 132, // $7067 + 132, // $7068 + 132, // $7069 + 132, // $706A + 132, // $706B + 132, // $706C + 132, // $706D + 132, // $706E + 132, // $706F + 132, // $7070 + 132, // $7071 + 132, // $7072 + 132, // $7073 + 132, // $7074 + 132, // $7075 + 132, // $7076 + 132, // $7077 + 132, // $7078 + 132, // $7079 + 132, // $707A + 132, // $707B + 132, // $707C + 132, // $707D + 132, // $707E + 132, // $707F + 132, // $7080 + 132, // $7081 + 132, // $7082 + 132, // $7083 + 132, // $7084 + 132, // $7085 + 132, // $7086 + 132, // $7087 + 132, // $7088 + 132, // $7089 + 132, // $708A + 132, // $708B + 132, // $708C + 132, // $708D + 132, // $708E + 132, // $708F + 132, // $7090 + 132, // $7091 + 132, // $7092 + 132, // $7093 + 132, // $7094 + 132, // $7095 + 132, // $7096 + 132, // $7097 + 132, // $7098 + 132, // $7099 + 132, // $709A + 132, // $709B + 132, // $709C + 132, // $709D + 132, // $709E + 132, // $709F + 132, // $70A0 + 132, // $70A1 + 132, // $70A2 + 132, // $70A3 + 132, // $70A4 + 132, // $70A5 + 132, // $70A6 + 132, // $70A7 + 132, // $70A8 + 132, // $70A9 + 132, // $70AA + 132, // $70AB + 132, // $70AC + 132, // $70AD + 132, // $70AE + 132, // $70AF + 132, // $70B0 + 132, // $70B1 + 132, // $70B2 + 132, // $70B3 + 132, // $70B4 + 132, // $70B5 + 132, // $70B6 + 132, // $70B7 + 132, // $70B8 + 132, // $70B9 + 132, // $70BA + 132, // $70BB + 132, // $70BC + 132, // $70BD + 132, // $70BE + 132, // $70BF + 132, // $70C0 + 132, // $70C1 + 132, // $70C2 + 132, // $70C3 + 132, // $70C4 + 132, // $70C5 + 132, // $70C6 + 132, // $70C7 + 132, // $70C8 + 132, // $70C9 + 132, // $70CA + 132, // $70CB + 132, // $70CC + 132, // $70CD + 132, // $70CE + 132, // $70CF + 132, // $70D0 + 132, // $70D1 + 132, // $70D2 + 132, // $70D3 + 132, // $70D4 + 132, // $70D5 + 132, // $70D6 + 132, // $70D7 + 132, // $70D8 + 132, // $70D9 + 132, // $70DA + 132, // $70DB + 132, // $70DC + 132, // $70DD + 132, // $70DE + 132, // $70DF + 132, // $70E0 + 132, // $70E1 + 132, // $70E2 + 132, // $70E3 + 132, // $70E4 + 132, // $70E5 + 132, // $70E6 + 132, // $70E7 + 132, // $70E8 + 132, // $70E9 + 132, // $70EA + 132, // $70EB + 132, // $70EC + 132, // $70ED + 132, // $70EE + 132, // $70EF + 132, // $70F0 + 132, // $70F1 + 132, // $70F2 + 132, // $70F3 + 132, // $70F4 + 132, // $70F5 + 132, // $70F6 + 132, // $70F7 + 132, // $70F8 + 132, // $70F9 + 132, // $70FA + 132, // $70FB + 132, // $70FC + 132, // $70FD + 132, // $70FE + 132, // $70FF + 132, // $7100 + 132, // $7101 + 132, // $7102 + 132, // $7103 + 132, // $7104 + 132, // $7105 + 132, // $7106 + 132, // $7107 + 132, // $7108 + 132, // $7109 + 132, // $710A + 132, // $710B + 132, // $710C + 132, // $710D + 132, // $710E + 132, // $710F + 132, // $7110 + 132, // $7111 + 132, // $7112 + 132, // $7113 + 132, // $7114 + 132, // $7115 + 132, // $7116 + 132, // $7117 + 132, // $7118 + 132, // $7119 + 132, // $711A + 132, // $711B + 132, // $711C + 132, // $711D + 132, // $711E + 132, // $711F + 132, // $7120 + 132, // $7121 + 132, // $7122 + 132, // $7123 + 132, // $7124 + 132, // $7125 + 132, // $7126 + 132, // $7127 + 132, // $7128 + 132, // $7129 + 132, // $712A + 132, // $712B + 132, // $712C + 132, // $712D + 132, // $712E + 132, // $712F + 132, // $7130 + 132, // $7131 + 132, // $7132 + 132, // $7133 + 132, // $7134 + 132, // $7135 + 132, // $7136 + 132, // $7137 + 132, // $7138 + 132, // $7139 + 132, // $713A + 132, // $713B + 132, // $713C + 132, // $713D + 132, // $713E + 132, // $713F + 132, // $7140 + 132, // $7141 + 132, // $7142 + 132, // $7143 + 132, // $7144 + 132, // $7145 + 132, // $7146 + 132, // $7147 + 132, // $7148 + 132, // $7149 + 132, // $714A + 132, // $714B + 132, // $714C + 132, // $714D + 132, // $714E + 132, // $714F + 132, // $7150 + 132, // $7151 + 132, // $7152 + 132, // $7153 + 132, // $7154 + 132, // $7155 + 132, // $7156 + 132, // $7157 + 132, // $7158 + 132, // $7159 + 132, // $715A + 132, // $715B + 132, // $715C + 132, // $715D + 132, // $715E + 132, // $715F + 132, // $7160 + 132, // $7161 + 132, // $7162 + 132, // $7163 + 132, // $7164 + 132, // $7165 + 132, // $7166 + 132, // $7167 + 132, // $7168 + 132, // $7169 + 132, // $716A + 132, // $716B + 132, // $716C + 132, // $716D + 132, // $716E + 132, // $716F + 132, // $7170 + 132, // $7171 + 132, // $7172 + 132, // $7173 + 132, // $7174 + 132, // $7175 + 132, // $7176 + 132, // $7177 + 132, // $7178 + 132, // $7179 + 132, // $717A + 132, // $717B + 132, // $717C + 132, // $717D + 132, // $717E + 132, // $717F + 132, // $7180 + 132, // $7181 + 132, // $7182 + 132, // $7183 + 132, // $7184 + 132, // $7185 + 132, // $7186 + 132, // $7187 + 132, // $7188 + 132, // $7189 + 132, // $718A + 132, // $718B + 132, // $718C + 132, // $718D + 132, // $718E + 132, // $718F + 132, // $7190 + 132, // $7191 + 132, // $7192 + 132, // $7193 + 132, // $7194 + 132, // $7195 + 132, // $7196 + 132, // $7197 + 132, // $7198 + 132, // $7199 + 132, // $719A + 132, // $719B + 132, // $719C + 132, // $719D + 132, // $719E + 132, // $719F + 132, // $71A0 + 132, // $71A1 + 132, // $71A2 + 132, // $71A3 + 132, // $71A4 + 132, // $71A5 + 132, // $71A6 + 132, // $71A7 + 132, // $71A8 + 132, // $71A9 + 132, // $71AA + 132, // $71AB + 132, // $71AC + 132, // $71AD + 132, // $71AE + 132, // $71AF + 132, // $71B0 + 132, // $71B1 + 132, // $71B2 + 132, // $71B3 + 132, // $71B4 + 132, // $71B5 + 132, // $71B6 + 132, // $71B7 + 132, // $71B8 + 132, // $71B9 + 132, // $71BA + 132, // $71BB + 132, // $71BC + 132, // $71BD + 132, // $71BE + 132, // $71BF + 132, // $71C0 + 132, // $71C1 + 132, // $71C2 + 132, // $71C3 + 132, // $71C4 + 132, // $71C5 + 132, // $71C6 + 132, // $71C7 + 132, // $71C8 + 132, // $71C9 + 132, // $71CA + 132, // $71CB + 132, // $71CC + 132, // $71CD + 132, // $71CE + 132, // $71CF + 132, // $71D0 + 132, // $71D1 + 132, // $71D2 + 132, // $71D3 + 132, // $71D4 + 132, // $71D5 + 132, // $71D6 + 132, // $71D7 + 132, // $71D8 + 132, // $71D9 + 132, // $71DA + 132, // $71DB + 132, // $71DC + 132, // $71DD + 132, // $71DE + 132, // $71DF + 132, // $71E0 + 132, // $71E1 + 132, // $71E2 + 132, // $71E3 + 132, // $71E4 + 132, // $71E5 + 132, // $71E6 + 132, // $71E7 + 132, // $71E8 + 132, // $71E9 + 132, // $71EA + 132, // $71EB + 132, // $71EC + 132, // $71ED + 132, // $71EE + 132, // $71EF + 132, // $71F0 + 132, // $71F1 + 132, // $71F2 + 132, // $71F3 + 132, // $71F4 + 132, // $71F5 + 132, // $71F6 + 132, // $71F7 + 132, // $71F8 + 132, // $71F9 + 132, // $71FA + 132, // $71FB + 132, // $71FC + 132, // $71FD + 132, // $71FE + 132, // $71FF + 132, // $7200 + 132, // $7201 + 132, // $7202 + 132, // $7203 + 132, // $7204 + 132, // $7205 + 132, // $7206 + 132, // $7207 + 132, // $7208 + 132, // $7209 + 132, // $720A + 132, // $720B + 132, // $720C + 132, // $720D + 132, // $720E + 132, // $720F + 132, // $7210 + 132, // $7211 + 132, // $7212 + 132, // $7213 + 132, // $7214 + 132, // $7215 + 132, // $7216 + 132, // $7217 + 132, // $7218 + 132, // $7219 + 132, // $721A + 132, // $721B + 132, // $721C + 132, // $721D + 132, // $721E + 132, // $721F + 132, // $7220 + 132, // $7221 + 132, // $7222 + 132, // $7223 + 132, // $7224 + 132, // $7225 + 132, // $7226 + 132, // $7227 + 132, // $7228 + 132, // $7229 + 132, // $722A + 132, // $722B + 132, // $722C + 132, // $722D + 132, // $722E + 132, // $722F + 132, // $7230 + 132, // $7231 + 132, // $7232 + 132, // $7233 + 132, // $7234 + 132, // $7235 + 132, // $7236 + 132, // $7237 + 132, // $7238 + 132, // $7239 + 132, // $723A + 132, // $723B + 132, // $723C + 132, // $723D + 132, // $723E + 132, // $723F + 132, // $7240 + 132, // $7241 + 132, // $7242 + 132, // $7243 + 132, // $7244 + 132, // $7245 + 132, // $7246 + 132, // $7247 + 132, // $7248 + 132, // $7249 + 132, // $724A + 132, // $724B + 132, // $724C + 132, // $724D + 132, // $724E + 132, // $724F + 132, // $7250 + 132, // $7251 + 132, // $7252 + 132, // $7253 + 132, // $7254 + 132, // $7255 + 132, // $7256 + 132, // $7257 + 132, // $7258 + 132, // $7259 + 132, // $725A + 132, // $725B + 132, // $725C + 132, // $725D + 132, // $725E + 132, // $725F + 132, // $7260 + 132, // $7261 + 132, // $7262 + 132, // $7263 + 132, // $7264 + 132, // $7265 + 132, // $7266 + 132, // $7267 + 132, // $7268 + 132, // $7269 + 132, // $726A + 132, // $726B + 132, // $726C + 132, // $726D + 132, // $726E + 132, // $726F + 132, // $7270 + 132, // $7271 + 132, // $7272 + 132, // $7273 + 132, // $7274 + 132, // $7275 + 132, // $7276 + 132, // $7277 + 132, // $7278 + 132, // $7279 + 132, // $727A + 132, // $727B + 132, // $727C + 132, // $727D + 132, // $727E + 132, // $727F + 132, // $7280 + 132, // $7281 + 132, // $7282 + 132, // $7283 + 132, // $7284 + 132, // $7285 + 132, // $7286 + 132, // $7287 + 132, // $7288 + 132, // $7289 + 132, // $728A + 132, // $728B + 132, // $728C + 132, // $728D + 132, // $728E + 132, // $728F + 132, // $7290 + 132, // $7291 + 132, // $7292 + 132, // $7293 + 132, // $7294 + 132, // $7295 + 132, // $7296 + 132, // $7297 + 132, // $7298 + 132, // $7299 + 132, // $729A + 132, // $729B + 132, // $729C + 132, // $729D + 132, // $729E + 132, // $729F + 132, // $72A0 + 132, // $72A1 + 132, // $72A2 + 132, // $72A3 + 132, // $72A4 + 132, // $72A5 + 132, // $72A6 + 132, // $72A7 + 132, // $72A8 + 132, // $72A9 + 132, // $72AA + 132, // $72AB + 132, // $72AC + 132, // $72AD + 132, // $72AE + 132, // $72AF + 132, // $72B0 + 132, // $72B1 + 132, // $72B2 + 132, // $72B3 + 132, // $72B4 + 132, // $72B5 + 132, // $72B6 + 132, // $72B7 + 132, // $72B8 + 132, // $72B9 + 132, // $72BA + 132, // $72BB + 132, // $72BC + 132, // $72BD + 132, // $72BE + 132, // $72BF + 132, // $72C0 + 132, // $72C1 + 132, // $72C2 + 132, // $72C3 + 132, // $72C4 + 132, // $72C5 + 132, // $72C6 + 132, // $72C7 + 132, // $72C8 + 132, // $72C9 + 132, // $72CA + 132, // $72CB + 132, // $72CC + 132, // $72CD + 132, // $72CE + 132, // $72CF + 132, // $72D0 + 132, // $72D1 + 132, // $72D2 + 132, // $72D3 + 132, // $72D4 + 132, // $72D5 + 132, // $72D6 + 132, // $72D7 + 132, // $72D8 + 132, // $72D9 + 132, // $72DA + 132, // $72DB + 132, // $72DC + 132, // $72DD + 132, // $72DE + 132, // $72DF + 132, // $72E0 + 132, // $72E1 + 132, // $72E2 + 132, // $72E3 + 132, // $72E4 + 132, // $72E5 + 132, // $72E6 + 132, // $72E7 + 132, // $72E8 + 132, // $72E9 + 132, // $72EA + 132, // $72EB + 132, // $72EC + 132, // $72ED + 132, // $72EE + 132, // $72EF + 132, // $72F0 + 132, // $72F1 + 132, // $72F2 + 132, // $72F3 + 132, // $72F4 + 132, // $72F5 + 132, // $72F6 + 132, // $72F7 + 132, // $72F8 + 132, // $72F9 + 132, // $72FA + 132, // $72FB + 132, // $72FC + 132, // $72FD + 132, // $72FE + 132, // $72FF + 132, // $7300 + 132, // $7301 + 132, // $7302 + 132, // $7303 + 132, // $7304 + 132, // $7305 + 132, // $7306 + 132, // $7307 + 132, // $7308 + 132, // $7309 + 132, // $730A + 132, // $730B + 132, // $730C + 132, // $730D + 132, // $730E + 132, // $730F + 132, // $7310 + 132, // $7311 + 132, // $7312 + 132, // $7313 + 132, // $7314 + 132, // $7315 + 132, // $7316 + 132, // $7317 + 132, // $7318 + 132, // $7319 + 132, // $731A + 132, // $731B + 132, // $731C + 132, // $731D + 132, // $731E + 132, // $731F + 132, // $7320 + 132, // $7321 + 132, // $7322 + 132, // $7323 + 132, // $7324 + 132, // $7325 + 132, // $7326 + 132, // $7327 + 132, // $7328 + 132, // $7329 + 132, // $732A + 132, // $732B + 132, // $732C + 132, // $732D + 132, // $732E + 132, // $732F + 132, // $7330 + 132, // $7331 + 132, // $7332 + 132, // $7333 + 132, // $7334 + 132, // $7335 + 132, // $7336 + 132, // $7337 + 132, // $7338 + 132, // $7339 + 132, // $733A + 132, // $733B + 132, // $733C + 132, // $733D + 132, // $733E + 132, // $733F + 132, // $7340 + 132, // $7341 + 132, // $7342 + 132, // $7343 + 132, // $7344 + 132, // $7345 + 132, // $7346 + 132, // $7347 + 132, // $7348 + 132, // $7349 + 132, // $734A + 132, // $734B + 132, // $734C + 132, // $734D + 132, // $734E + 132, // $734F + 132, // $7350 + 132, // $7351 + 132, // $7352 + 132, // $7353 + 132, // $7354 + 132, // $7355 + 132, // $7356 + 132, // $7357 + 132, // $7358 + 132, // $7359 + 132, // $735A + 132, // $735B + 132, // $735C + 132, // $735D + 132, // $735E + 132, // $735F + 132, // $7360 + 132, // $7361 + 132, // $7362 + 132, // $7363 + 132, // $7364 + 132, // $7365 + 132, // $7366 + 132, // $7367 + 132, // $7368 + 132, // $7369 + 132, // $736A + 132, // $736B + 132, // $736C + 132, // $736D + 132, // $736E + 132, // $736F + 132, // $7370 + 132, // $7371 + 132, // $7372 + 132, // $7373 + 132, // $7374 + 132, // $7375 + 132, // $7376 + 132, // $7377 + 132, // $7378 + 132, // $7379 + 132, // $737A + 132, // $737B + 132, // $737C + 132, // $737D + 132, // $737E + 132, // $737F + 132, // $7380 + 132, // $7381 + 132, // $7382 + 132, // $7383 + 132, // $7384 + 132, // $7385 + 132, // $7386 + 132, // $7387 + 132, // $7388 + 132, // $7389 + 132, // $738A + 132, // $738B + 132, // $738C + 132, // $738D + 132, // $738E + 132, // $738F + 132, // $7390 + 132, // $7391 + 132, // $7392 + 132, // $7393 + 132, // $7394 + 132, // $7395 + 132, // $7396 + 132, // $7397 + 132, // $7398 + 132, // $7399 + 132, // $739A + 132, // $739B + 132, // $739C + 132, // $739D + 132, // $739E + 132, // $739F + 132, // $73A0 + 132, // $73A1 + 132, // $73A2 + 132, // $73A3 + 132, // $73A4 + 132, // $73A5 + 132, // $73A6 + 132, // $73A7 + 132, // $73A8 + 132, // $73A9 + 132, // $73AA + 132, // $73AB + 132, // $73AC + 132, // $73AD + 132, // $73AE + 132, // $73AF + 132, // $73B0 + 132, // $73B1 + 132, // $73B2 + 132, // $73B3 + 132, // $73B4 + 132, // $73B5 + 132, // $73B6 + 132, // $73B7 + 132, // $73B8 + 132, // $73B9 + 132, // $73BA + 132, // $73BB + 132, // $73BC + 132, // $73BD + 132, // $73BE + 132, // $73BF + 132, // $73C0 + 132, // $73C1 + 132, // $73C2 + 132, // $73C3 + 132, // $73C4 + 132, // $73C5 + 132, // $73C6 + 132, // $73C7 + 132, // $73C8 + 132, // $73C9 + 132, // $73CA + 132, // $73CB + 132, // $73CC + 132, // $73CD + 132, // $73CE + 132, // $73CF + 132, // $73D0 + 132, // $73D1 + 132, // $73D2 + 132, // $73D3 + 132, // $73D4 + 132, // $73D5 + 132, // $73D6 + 132, // $73D7 + 132, // $73D8 + 132, // $73D9 + 132, // $73DA + 132, // $73DB + 132, // $73DC + 132, // $73DD + 132, // $73DE + 132, // $73DF + 132, // $73E0 + 132, // $73E1 + 132, // $73E2 + 132, // $73E3 + 132, // $73E4 + 132, // $73E5 + 132, // $73E6 + 132, // $73E7 + 132, // $73E8 + 132, // $73E9 + 132, // $73EA + 132, // $73EB + 132, // $73EC + 132, // $73ED + 132, // $73EE + 132, // $73EF + 132, // $73F0 + 132, // $73F1 + 132, // $73F2 + 132, // $73F3 + 132, // $73F4 + 132, // $73F5 + 132, // $73F6 + 132, // $73F7 + 132, // $73F8 + 132, // $73F9 + 132, // $73FA + 132, // $73FB + 132, // $73FC + 132, // $73FD + 132, // $73FE + 132, // $73FF + 132, // $7400 + 132, // $7401 + 132, // $7402 + 132, // $7403 + 132, // $7404 + 132, // $7405 + 132, // $7406 + 132, // $7407 + 132, // $7408 + 132, // $7409 + 132, // $740A + 132, // $740B + 132, // $740C + 132, // $740D + 132, // $740E + 132, // $740F + 132, // $7410 + 132, // $7411 + 132, // $7412 + 132, // $7413 + 132, // $7414 + 132, // $7415 + 132, // $7416 + 132, // $7417 + 132, // $7418 + 132, // $7419 + 132, // $741A + 132, // $741B + 132, // $741C + 132, // $741D + 132, // $741E + 132, // $741F + 132, // $7420 + 132, // $7421 + 132, // $7422 + 132, // $7423 + 132, // $7424 + 132, // $7425 + 132, // $7426 + 132, // $7427 + 132, // $7428 + 132, // $7429 + 132, // $742A + 132, // $742B + 132, // $742C + 132, // $742D + 132, // $742E + 132, // $742F + 132, // $7430 + 132, // $7431 + 132, // $7432 + 132, // $7433 + 132, // $7434 + 132, // $7435 + 132, // $7436 + 132, // $7437 + 132, // $7438 + 132, // $7439 + 132, // $743A + 132, // $743B + 132, // $743C + 132, // $743D + 132, // $743E + 132, // $743F + 132, // $7440 + 132, // $7441 + 132, // $7442 + 132, // $7443 + 132, // $7444 + 132, // $7445 + 132, // $7446 + 132, // $7447 + 132, // $7448 + 132, // $7449 + 132, // $744A + 132, // $744B + 132, // $744C + 132, // $744D + 132, // $744E + 132, // $744F + 132, // $7450 + 132, // $7451 + 132, // $7452 + 132, // $7453 + 132, // $7454 + 132, // $7455 + 132, // $7456 + 132, // $7457 + 132, // $7458 + 132, // $7459 + 132, // $745A + 132, // $745B + 132, // $745C + 132, // $745D + 132, // $745E + 132, // $745F + 132, // $7460 + 132, // $7461 + 132, // $7462 + 132, // $7463 + 132, // $7464 + 132, // $7465 + 132, // $7466 + 132, // $7467 + 132, // $7468 + 132, // $7469 + 132, // $746A + 132, // $746B + 132, // $746C + 132, // $746D + 132, // $746E + 132, // $746F + 132, // $7470 + 132, // $7471 + 132, // $7472 + 132, // $7473 + 132, // $7474 + 132, // $7475 + 132, // $7476 + 132, // $7477 + 132, // $7478 + 132, // $7479 + 132, // $747A + 132, // $747B + 132, // $747C + 132, // $747D + 132, // $747E + 132, // $747F + 132, // $7480 + 132, // $7481 + 132, // $7482 + 132, // $7483 + 132, // $7484 + 132, // $7485 + 132, // $7486 + 132, // $7487 + 132, // $7488 + 132, // $7489 + 132, // $748A + 132, // $748B + 132, // $748C + 132, // $748D + 132, // $748E + 132, // $748F + 132, // $7490 + 132, // $7491 + 132, // $7492 + 132, // $7493 + 132, // $7494 + 132, // $7495 + 132, // $7496 + 132, // $7497 + 132, // $7498 + 132, // $7499 + 132, // $749A + 132, // $749B + 132, // $749C + 132, // $749D + 132, // $749E + 132, // $749F + 132, // $74A0 + 132, // $74A1 + 132, // $74A2 + 132, // $74A3 + 132, // $74A4 + 132, // $74A5 + 132, // $74A6 + 132, // $74A7 + 132, // $74A8 + 132, // $74A9 + 132, // $74AA + 132, // $74AB + 132, // $74AC + 132, // $74AD + 132, // $74AE + 132, // $74AF + 132, // $74B0 + 132, // $74B1 + 132, // $74B2 + 132, // $74B3 + 132, // $74B4 + 132, // $74B5 + 132, // $74B6 + 132, // $74B7 + 132, // $74B8 + 132, // $74B9 + 132, // $74BA + 132, // $74BB + 132, // $74BC + 132, // $74BD + 132, // $74BE + 132, // $74BF + 132, // $74C0 + 132, // $74C1 + 132, // $74C2 + 132, // $74C3 + 132, // $74C4 + 132, // $74C5 + 132, // $74C6 + 132, // $74C7 + 132, // $74C8 + 132, // $74C9 + 132, // $74CA + 132, // $74CB + 132, // $74CC + 132, // $74CD + 132, // $74CE + 132, // $74CF + 132, // $74D0 + 132, // $74D1 + 132, // $74D2 + 132, // $74D3 + 132, // $74D4 + 132, // $74D5 + 132, // $74D6 + 132, // $74D7 + 132, // $74D8 + 132, // $74D9 + 132, // $74DA + 132, // $74DB + 132, // $74DC + 132, // $74DD + 132, // $74DE + 132, // $74DF + 132, // $74E0 + 132, // $74E1 + 132, // $74E2 + 132, // $74E3 + 132, // $74E4 + 132, // $74E5 + 132, // $74E6 + 132, // $74E7 + 132, // $74E8 + 132, // $74E9 + 132, // $74EA + 132, // $74EB + 132, // $74EC + 132, // $74ED + 132, // $74EE + 132, // $74EF + 132, // $74F0 + 132, // $74F1 + 132, // $74F2 + 132, // $74F3 + 132, // $74F4 + 132, // $74F5 + 132, // $74F6 + 132, // $74F7 + 132, // $74F8 + 132, // $74F9 + 132, // $74FA + 132, // $74FB + 132, // $74FC + 132, // $74FD + 132, // $74FE + 132, // $74FF + 132, // $7500 + 132, // $7501 + 132, // $7502 + 132, // $7503 + 132, // $7504 + 132, // $7505 + 132, // $7506 + 132, // $7507 + 132, // $7508 + 132, // $7509 + 132, // $750A + 132, // $750B + 132, // $750C + 132, // $750D + 132, // $750E + 132, // $750F + 132, // $7510 + 132, // $7511 + 132, // $7512 + 132, // $7513 + 132, // $7514 + 132, // $7515 + 132, // $7516 + 132, // $7517 + 132, // $7518 + 132, // $7519 + 132, // $751A + 132, // $751B + 132, // $751C + 132, // $751D + 132, // $751E + 132, // $751F + 132, // $7520 + 132, // $7521 + 132, // $7522 + 132, // $7523 + 132, // $7524 + 132, // $7525 + 132, // $7526 + 132, // $7527 + 132, // $7528 + 132, // $7529 + 132, // $752A + 132, // $752B + 132, // $752C + 132, // $752D + 132, // $752E + 132, // $752F + 132, // $7530 + 132, // $7531 + 132, // $7532 + 132, // $7533 + 132, // $7534 + 132, // $7535 + 132, // $7536 + 132, // $7537 + 132, // $7538 + 132, // $7539 + 132, // $753A + 132, // $753B + 132, // $753C + 132, // $753D + 132, // $753E + 132, // $753F + 132, // $7540 + 132, // $7541 + 132, // $7542 + 132, // $7543 + 132, // $7544 + 132, // $7545 + 132, // $7546 + 132, // $7547 + 132, // $7548 + 132, // $7549 + 132, // $754A + 132, // $754B + 132, // $754C + 132, // $754D + 132, // $754E + 132, // $754F + 132, // $7550 + 132, // $7551 + 132, // $7552 + 132, // $7553 + 132, // $7554 + 132, // $7555 + 132, // $7556 + 132, // $7557 + 132, // $7558 + 132, // $7559 + 132, // $755A + 132, // $755B + 132, // $755C + 132, // $755D + 132, // $755E + 132, // $755F + 132, // $7560 + 132, // $7561 + 132, // $7562 + 132, // $7563 + 132, // $7564 + 132, // $7565 + 132, // $7566 + 132, // $7567 + 132, // $7568 + 132, // $7569 + 132, // $756A + 132, // $756B + 132, // $756C + 132, // $756D + 132, // $756E + 132, // $756F + 132, // $7570 + 132, // $7571 + 132, // $7572 + 132, // $7573 + 132, // $7574 + 132, // $7575 + 132, // $7576 + 132, // $7577 + 132, // $7578 + 132, // $7579 + 132, // $757A + 132, // $757B + 132, // $757C + 132, // $757D + 132, // $757E + 132, // $757F + 132, // $7580 + 132, // $7581 + 132, // $7582 + 132, // $7583 + 132, // $7584 + 132, // $7585 + 132, // $7586 + 132, // $7587 + 132, // $7588 + 132, // $7589 + 132, // $758A + 132, // $758B + 132, // $758C + 132, // $758D + 132, // $758E + 132, // $758F + 132, // $7590 + 132, // $7591 + 132, // $7592 + 132, // $7593 + 132, // $7594 + 132, // $7595 + 132, // $7596 + 132, // $7597 + 132, // $7598 + 132, // $7599 + 132, // $759A + 132, // $759B + 132, // $759C + 132, // $759D + 132, // $759E + 132, // $759F + 132, // $75A0 + 132, // $75A1 + 132, // $75A2 + 132, // $75A3 + 132, // $75A4 + 132, // $75A5 + 132, // $75A6 + 132, // $75A7 + 132, // $75A8 + 132, // $75A9 + 132, // $75AA + 132, // $75AB + 132, // $75AC + 132, // $75AD + 132, // $75AE + 132, // $75AF + 132, // $75B0 + 132, // $75B1 + 132, // $75B2 + 132, // $75B3 + 132, // $75B4 + 132, // $75B5 + 132, // $75B6 + 132, // $75B7 + 132, // $75B8 + 132, // $75B9 + 132, // $75BA + 132, // $75BB + 132, // $75BC + 132, // $75BD + 132, // $75BE + 132, // $75BF + 132, // $75C0 + 132, // $75C1 + 132, // $75C2 + 132, // $75C3 + 132, // $75C4 + 132, // $75C5 + 132, // $75C6 + 132, // $75C7 + 132, // $75C8 + 132, // $75C9 + 132, // $75CA + 132, // $75CB + 132, // $75CC + 132, // $75CD + 132, // $75CE + 132, // $75CF + 132, // $75D0 + 132, // $75D1 + 132, // $75D2 + 132, // $75D3 + 132, // $75D4 + 132, // $75D5 + 132, // $75D6 + 132, // $75D7 + 132, // $75D8 + 132, // $75D9 + 132, // $75DA + 132, // $75DB + 132, // $75DC + 132, // $75DD + 132, // $75DE + 132, // $75DF + 132, // $75E0 + 132, // $75E1 + 132, // $75E2 + 132, // $75E3 + 132, // $75E4 + 132, // $75E5 + 132, // $75E6 + 132, // $75E7 + 132, // $75E8 + 132, // $75E9 + 132, // $75EA + 132, // $75EB + 132, // $75EC + 132, // $75ED + 132, // $75EE + 132, // $75EF + 132, // $75F0 + 132, // $75F1 + 132, // $75F2 + 132, // $75F3 + 132, // $75F4 + 132, // $75F5 + 132, // $75F6 + 132, // $75F7 + 132, // $75F8 + 132, // $75F9 + 132, // $75FA + 132, // $75FB + 132, // $75FC + 132, // $75FD + 132, // $75FE + 132, // $75FF + 132, // $7600 + 132, // $7601 + 132, // $7602 + 132, // $7603 + 132, // $7604 + 132, // $7605 + 132, // $7606 + 132, // $7607 + 132, // $7608 + 132, // $7609 + 132, // $760A + 132, // $760B + 132, // $760C + 132, // $760D + 132, // $760E + 132, // $760F + 132, // $7610 + 132, // $7611 + 132, // $7612 + 132, // $7613 + 132, // $7614 + 132, // $7615 + 132, // $7616 + 132, // $7617 + 132, // $7618 + 132, // $7619 + 132, // $761A + 132, // $761B + 132, // $761C + 132, // $761D + 132, // $761E + 132, // $761F + 132, // $7620 + 132, // $7621 + 132, // $7622 + 132, // $7623 + 132, // $7624 + 132, // $7625 + 132, // $7626 + 132, // $7627 + 132, // $7628 + 132, // $7629 + 132, // $762A + 132, // $762B + 132, // $762C + 132, // $762D + 132, // $762E + 132, // $762F + 132, // $7630 + 132, // $7631 + 132, // $7632 + 132, // $7633 + 132, // $7634 + 132, // $7635 + 132, // $7636 + 132, // $7637 + 132, // $7638 + 132, // $7639 + 132, // $763A + 132, // $763B + 132, // $763C + 132, // $763D + 132, // $763E + 132, // $763F + 132, // $7640 + 132, // $7641 + 132, // $7642 + 132, // $7643 + 132, // $7644 + 132, // $7645 + 132, // $7646 + 132, // $7647 + 132, // $7648 + 132, // $7649 + 132, // $764A + 132, // $764B + 132, // $764C + 132, // $764D + 132, // $764E + 132, // $764F + 132, // $7650 + 132, // $7651 + 132, // $7652 + 132, // $7653 + 132, // $7654 + 132, // $7655 + 132, // $7656 + 132, // $7657 + 132, // $7658 + 132, // $7659 + 132, // $765A + 132, // $765B + 132, // $765C + 132, // $765D + 132, // $765E + 132, // $765F + 132, // $7660 + 132, // $7661 + 132, // $7662 + 132, // $7663 + 132, // $7664 + 132, // $7665 + 132, // $7666 + 132, // $7667 + 132, // $7668 + 132, // $7669 + 132, // $766A + 132, // $766B + 132, // $766C + 132, // $766D + 132, // $766E + 132, // $766F + 132, // $7670 + 132, // $7671 + 132, // $7672 + 132, // $7673 + 132, // $7674 + 132, // $7675 + 132, // $7676 + 132, // $7677 + 132, // $7678 + 132, // $7679 + 132, // $767A + 132, // $767B + 132, // $767C + 132, // $767D + 132, // $767E + 132, // $767F + 132, // $7680 + 132, // $7681 + 132, // $7682 + 132, // $7683 + 132, // $7684 + 132, // $7685 + 132, // $7686 + 132, // $7687 + 132, // $7688 + 132, // $7689 + 132, // $768A + 132, // $768B + 132, // $768C + 132, // $768D + 132, // $768E + 132, // $768F + 132, // $7690 + 132, // $7691 + 132, // $7692 + 132, // $7693 + 132, // $7694 + 132, // $7695 + 132, // $7696 + 132, // $7697 + 132, // $7698 + 132, // $7699 + 132, // $769A + 132, // $769B + 132, // $769C + 132, // $769D + 132, // $769E + 132, // $769F + 132, // $76A0 + 132, // $76A1 + 132, // $76A2 + 132, // $76A3 + 132, // $76A4 + 132, // $76A5 + 132, // $76A6 + 132, // $76A7 + 132, // $76A8 + 132, // $76A9 + 132, // $76AA + 132, // $76AB + 132, // $76AC + 132, // $76AD + 132, // $76AE + 132, // $76AF + 132, // $76B0 + 132, // $76B1 + 132, // $76B2 + 132, // $76B3 + 132, // $76B4 + 132, // $76B5 + 132, // $76B6 + 132, // $76B7 + 132, // $76B8 + 132, // $76B9 + 132, // $76BA + 132, // $76BB + 132, // $76BC + 132, // $76BD + 132, // $76BE + 132, // $76BF + 132, // $76C0 + 132, // $76C1 + 132, // $76C2 + 132, // $76C3 + 132, // $76C4 + 132, // $76C5 + 132, // $76C6 + 132, // $76C7 + 132, // $76C8 + 132, // $76C9 + 132, // $76CA + 132, // $76CB + 132, // $76CC + 132, // $76CD + 132, // $76CE + 132, // $76CF + 132, // $76D0 + 132, // $76D1 + 132, // $76D2 + 132, // $76D3 + 132, // $76D4 + 132, // $76D5 + 132, // $76D6 + 132, // $76D7 + 132, // $76D8 + 132, // $76D9 + 132, // $76DA + 132, // $76DB + 132, // $76DC + 132, // $76DD + 132, // $76DE + 132, // $76DF + 132, // $76E0 + 132, // $76E1 + 132, // $76E2 + 132, // $76E3 + 132, // $76E4 + 132, // $76E5 + 132, // $76E6 + 132, // $76E7 + 132, // $76E8 + 132, // $76E9 + 132, // $76EA + 132, // $76EB + 132, // $76EC + 132, // $76ED + 132, // $76EE + 132, // $76EF + 132, // $76F0 + 132, // $76F1 + 132, // $76F2 + 132, // $76F3 + 132, // $76F4 + 132, // $76F5 + 132, // $76F6 + 132, // $76F7 + 132, // $76F8 + 132, // $76F9 + 132, // $76FA + 132, // $76FB + 132, // $76FC + 132, // $76FD + 132, // $76FE + 132, // $76FF + 132, // $7700 + 132, // $7701 + 132, // $7702 + 132, // $7703 + 132, // $7704 + 132, // $7705 + 132, // $7706 + 132, // $7707 + 132, // $7708 + 132, // $7709 + 132, // $770A + 132, // $770B + 132, // $770C + 132, // $770D + 132, // $770E + 132, // $770F + 132, // $7710 + 132, // $7711 + 132, // $7712 + 132, // $7713 + 132, // $7714 + 132, // $7715 + 132, // $7716 + 132, // $7717 + 132, // $7718 + 132, // $7719 + 132, // $771A + 132, // $771B + 132, // $771C + 132, // $771D + 132, // $771E + 132, // $771F + 132, // $7720 + 132, // $7721 + 132, // $7722 + 132, // $7723 + 132, // $7724 + 132, // $7725 + 132, // $7726 + 132, // $7727 + 132, // $7728 + 132, // $7729 + 132, // $772A + 132, // $772B + 132, // $772C + 132, // $772D + 132, // $772E + 132, // $772F + 132, // $7730 + 132, // $7731 + 132, // $7732 + 132, // $7733 + 132, // $7734 + 132, // $7735 + 132, // $7736 + 132, // $7737 + 132, // $7738 + 132, // $7739 + 132, // $773A + 132, // $773B + 132, // $773C + 132, // $773D + 132, // $773E + 132, // $773F + 132, // $7740 + 132, // $7741 + 132, // $7742 + 132, // $7743 + 132, // $7744 + 132, // $7745 + 132, // $7746 + 132, // $7747 + 132, // $7748 + 132, // $7749 + 132, // $774A + 132, // $774B + 132, // $774C + 132, // $774D + 132, // $774E + 132, // $774F + 132, // $7750 + 132, // $7751 + 132, // $7752 + 132, // $7753 + 132, // $7754 + 132, // $7755 + 132, // $7756 + 132, // $7757 + 132, // $7758 + 132, // $7759 + 132, // $775A + 132, // $775B + 132, // $775C + 132, // $775D + 132, // $775E + 132, // $775F + 132, // $7760 + 132, // $7761 + 132, // $7762 + 132, // $7763 + 132, // $7764 + 132, // $7765 + 132, // $7766 + 132, // $7767 + 132, // $7768 + 132, // $7769 + 132, // $776A + 132, // $776B + 132, // $776C + 132, // $776D + 132, // $776E + 132, // $776F + 132, // $7770 + 132, // $7771 + 132, // $7772 + 132, // $7773 + 132, // $7774 + 132, // $7775 + 132, // $7776 + 132, // $7777 + 132, // $7778 + 132, // $7779 + 132, // $777A + 132, // $777B + 132, // $777C + 132, // $777D + 132, // $777E + 132, // $777F + 132, // $7780 + 132, // $7781 + 132, // $7782 + 132, // $7783 + 132, // $7784 + 132, // $7785 + 132, // $7786 + 132, // $7787 + 132, // $7788 + 132, // $7789 + 132, // $778A + 132, // $778B + 132, // $778C + 132, // $778D + 132, // $778E + 132, // $778F + 132, // $7790 + 132, // $7791 + 132, // $7792 + 132, // $7793 + 132, // $7794 + 132, // $7795 + 132, // $7796 + 132, // $7797 + 132, // $7798 + 132, // $7799 + 132, // $779A + 132, // $779B + 132, // $779C + 132, // $779D + 132, // $779E + 132, // $779F + 132, // $77A0 + 132, // $77A1 + 132, // $77A2 + 132, // $77A3 + 132, // $77A4 + 132, // $77A5 + 132, // $77A6 + 132, // $77A7 + 132, // $77A8 + 132, // $77A9 + 132, // $77AA + 132, // $77AB + 132, // $77AC + 132, // $77AD + 132, // $77AE + 132, // $77AF + 132, // $77B0 + 132, // $77B1 + 132, // $77B2 + 132, // $77B3 + 132, // $77B4 + 132, // $77B5 + 132, // $77B6 + 132, // $77B7 + 132, // $77B8 + 132, // $77B9 + 132, // $77BA + 132, // $77BB + 132, // $77BC + 132, // $77BD + 132, // $77BE + 132, // $77BF + 132, // $77C0 + 132, // $77C1 + 132, // $77C2 + 132, // $77C3 + 132, // $77C4 + 132, // $77C5 + 132, // $77C6 + 132, // $77C7 + 132, // $77C8 + 132, // $77C9 + 132, // $77CA + 132, // $77CB + 132, // $77CC + 132, // $77CD + 132, // $77CE + 132, // $77CF + 132, // $77D0 + 132, // $77D1 + 132, // $77D2 + 132, // $77D3 + 132, // $77D4 + 132, // $77D5 + 132, // $77D6 + 132, // $77D7 + 132, // $77D8 + 132, // $77D9 + 132, // $77DA + 132, // $77DB + 132, // $77DC + 132, // $77DD + 132, // $77DE + 132, // $77DF + 132, // $77E0 + 132, // $77E1 + 132, // $77E2 + 132, // $77E3 + 132, // $77E4 + 132, // $77E5 + 132, // $77E6 + 132, // $77E7 + 132, // $77E8 + 132, // $77E9 + 132, // $77EA + 132, // $77EB + 132, // $77EC + 132, // $77ED + 132, // $77EE + 132, // $77EF + 132, // $77F0 + 132, // $77F1 + 132, // $77F2 + 132, // $77F3 + 132, // $77F4 + 132, // $77F5 + 132, // $77F6 + 132, // $77F7 + 132, // $77F8 + 132, // $77F9 + 132, // $77FA + 132, // $77FB + 132, // $77FC + 132, // $77FD + 132, // $77FE + 132, // $77FF + 132, // $7800 + 132, // $7801 + 132, // $7802 + 132, // $7803 + 132, // $7804 + 132, // $7805 + 132, // $7806 + 132, // $7807 + 132, // $7808 + 132, // $7809 + 132, // $780A + 132, // $780B + 132, // $780C + 132, // $780D + 132, // $780E + 132, // $780F + 132, // $7810 + 132, // $7811 + 132, // $7812 + 132, // $7813 + 132, // $7814 + 132, // $7815 + 132, // $7816 + 132, // $7817 + 132, // $7818 + 132, // $7819 + 132, // $781A + 132, // $781B + 132, // $781C + 132, // $781D + 132, // $781E + 132, // $781F + 132, // $7820 + 132, // $7821 + 132, // $7822 + 132, // $7823 + 132, // $7824 + 132, // $7825 + 132, // $7826 + 132, // $7827 + 132, // $7828 + 132, // $7829 + 132, // $782A + 132, // $782B + 132, // $782C + 132, // $782D + 132, // $782E + 132, // $782F + 132, // $7830 + 132, // $7831 + 132, // $7832 + 132, // $7833 + 132, // $7834 + 132, // $7835 + 132, // $7836 + 132, // $7837 + 132, // $7838 + 132, // $7839 + 132, // $783A + 132, // $783B + 132, // $783C + 132, // $783D + 132, // $783E + 132, // $783F + 132, // $7840 + 132, // $7841 + 132, // $7842 + 132, // $7843 + 132, // $7844 + 132, // $7845 + 132, // $7846 + 132, // $7847 + 132, // $7848 + 132, // $7849 + 132, // $784A + 132, // $784B + 132, // $784C + 132, // $784D + 132, // $784E + 132, // $784F + 132, // $7850 + 132, // $7851 + 132, // $7852 + 132, // $7853 + 132, // $7854 + 132, // $7855 + 132, // $7856 + 132, // $7857 + 132, // $7858 + 132, // $7859 + 132, // $785A + 132, // $785B + 132, // $785C + 132, // $785D + 132, // $785E + 132, // $785F + 132, // $7860 + 132, // $7861 + 132, // $7862 + 132, // $7863 + 132, // $7864 + 132, // $7865 + 132, // $7866 + 132, // $7867 + 132, // $7868 + 132, // $7869 + 132, // $786A + 132, // $786B + 132, // $786C + 132, // $786D + 132, // $786E + 132, // $786F + 132, // $7870 + 132, // $7871 + 132, // $7872 + 132, // $7873 + 132, // $7874 + 132, // $7875 + 132, // $7876 + 132, // $7877 + 132, // $7878 + 132, // $7879 + 132, // $787A + 132, // $787B + 132, // $787C + 132, // $787D + 132, // $787E + 132, // $787F + 132, // $7880 + 132, // $7881 + 132, // $7882 + 132, // $7883 + 132, // $7884 + 132, // $7885 + 132, // $7886 + 132, // $7887 + 132, // $7888 + 132, // $7889 + 132, // $788A + 132, // $788B + 132, // $788C + 132, // $788D + 132, // $788E + 132, // $788F + 132, // $7890 + 132, // $7891 + 132, // $7892 + 132, // $7893 + 132, // $7894 + 132, // $7895 + 132, // $7896 + 132, // $7897 + 132, // $7898 + 132, // $7899 + 132, // $789A + 132, // $789B + 132, // $789C + 132, // $789D + 132, // $789E + 132, // $789F + 132, // $78A0 + 132, // $78A1 + 132, // $78A2 + 132, // $78A3 + 132, // $78A4 + 132, // $78A5 + 132, // $78A6 + 132, // $78A7 + 132, // $78A8 + 132, // $78A9 + 132, // $78AA + 132, // $78AB + 132, // $78AC + 132, // $78AD + 132, // $78AE + 132, // $78AF + 132, // $78B0 + 132, // $78B1 + 132, // $78B2 + 132, // $78B3 + 132, // $78B4 + 132, // $78B5 + 132, // $78B6 + 132, // $78B7 + 132, // $78B8 + 132, // $78B9 + 132, // $78BA + 132, // $78BB + 132, // $78BC + 132, // $78BD + 132, // $78BE + 132, // $78BF + 132, // $78C0 + 132, // $78C1 + 132, // $78C2 + 132, // $78C3 + 132, // $78C4 + 132, // $78C5 + 132, // $78C6 + 132, // $78C7 + 132, // $78C8 + 132, // $78C9 + 132, // $78CA + 132, // $78CB + 132, // $78CC + 132, // $78CD + 132, // $78CE + 132, // $78CF + 132, // $78D0 + 132, // $78D1 + 132, // $78D2 + 132, // $78D3 + 132, // $78D4 + 132, // $78D5 + 132, // $78D6 + 132, // $78D7 + 132, // $78D8 + 132, // $78D9 + 132, // $78DA + 132, // $78DB + 132, // $78DC + 132, // $78DD + 132, // $78DE + 132, // $78DF + 132, // $78E0 + 132, // $78E1 + 132, // $78E2 + 132, // $78E3 + 132, // $78E4 + 132, // $78E5 + 132, // $78E6 + 132, // $78E7 + 132, // $78E8 + 132, // $78E9 + 132, // $78EA + 132, // $78EB + 132, // $78EC + 132, // $78ED + 132, // $78EE + 132, // $78EF + 132, // $78F0 + 132, // $78F1 + 132, // $78F2 + 132, // $78F3 + 132, // $78F4 + 132, // $78F5 + 132, // $78F6 + 132, // $78F7 + 132, // $78F8 + 132, // $78F9 + 132, // $78FA + 132, // $78FB + 132, // $78FC + 132, // $78FD + 132, // $78FE + 132, // $78FF + 132, // $7900 + 132, // $7901 + 132, // $7902 + 132, // $7903 + 132, // $7904 + 132, // $7905 + 132, // $7906 + 132, // $7907 + 132, // $7908 + 132, // $7909 + 132, // $790A + 132, // $790B + 132, // $790C + 132, // $790D + 132, // $790E + 132, // $790F + 132, // $7910 + 132, // $7911 + 132, // $7912 + 132, // $7913 + 132, // $7914 + 132, // $7915 + 132, // $7916 + 132, // $7917 + 132, // $7918 + 132, // $7919 + 132, // $791A + 132, // $791B + 132, // $791C + 132, // $791D + 132, // $791E + 132, // $791F + 132, // $7920 + 132, // $7921 + 132, // $7922 + 132, // $7923 + 132, // $7924 + 132, // $7925 + 132, // $7926 + 132, // $7927 + 132, // $7928 + 132, // $7929 + 132, // $792A + 132, // $792B + 132, // $792C + 132, // $792D + 132, // $792E + 132, // $792F + 132, // $7930 + 132, // $7931 + 132, // $7932 + 132, // $7933 + 132, // $7934 + 132, // $7935 + 132, // $7936 + 132, // $7937 + 132, // $7938 + 132, // $7939 + 132, // $793A + 132, // $793B + 132, // $793C + 132, // $793D + 132, // $793E + 132, // $793F + 132, // $7940 + 132, // $7941 + 132, // $7942 + 132, // $7943 + 132, // $7944 + 132, // $7945 + 132, // $7946 + 132, // $7947 + 132, // $7948 + 132, // $7949 + 132, // $794A + 132, // $794B + 132, // $794C + 132, // $794D + 132, // $794E + 132, // $794F + 132, // $7950 + 132, // $7951 + 132, // $7952 + 132, // $7953 + 132, // $7954 + 132, // $7955 + 132, // $7956 + 132, // $7957 + 132, // $7958 + 132, // $7959 + 132, // $795A + 132, // $795B + 132, // $795C + 132, // $795D + 132, // $795E + 132, // $795F + 132, // $7960 + 132, // $7961 + 132, // $7962 + 132, // $7963 + 132, // $7964 + 132, // $7965 + 132, // $7966 + 132, // $7967 + 132, // $7968 + 132, // $7969 + 132, // $796A + 132, // $796B + 132, // $796C + 132, // $796D + 132, // $796E + 132, // $796F + 132, // $7970 + 132, // $7971 + 132, // $7972 + 132, // $7973 + 132, // $7974 + 132, // $7975 + 132, // $7976 + 132, // $7977 + 132, // $7978 + 132, // $7979 + 132, // $797A + 132, // $797B + 132, // $797C + 132, // $797D + 132, // $797E + 132, // $797F + 132, // $7980 + 132, // $7981 + 132, // $7982 + 132, // $7983 + 132, // $7984 + 132, // $7985 + 132, // $7986 + 132, // $7987 + 132, // $7988 + 132, // $7989 + 132, // $798A + 132, // $798B + 132, // $798C + 132, // $798D + 132, // $798E + 132, // $798F + 132, // $7990 + 132, // $7991 + 132, // $7992 + 132, // $7993 + 132, // $7994 + 132, // $7995 + 132, // $7996 + 132, // $7997 + 132, // $7998 + 132, // $7999 + 132, // $799A + 132, // $799B + 132, // $799C + 132, // $799D + 132, // $799E + 132, // $799F + 132, // $79A0 + 132, // $79A1 + 132, // $79A2 + 132, // $79A3 + 132, // $79A4 + 132, // $79A5 + 132, // $79A6 + 132, // $79A7 + 132, // $79A8 + 132, // $79A9 + 132, // $79AA + 132, // $79AB + 132, // $79AC + 132, // $79AD + 132, // $79AE + 132, // $79AF + 132, // $79B0 + 132, // $79B1 + 132, // $79B2 + 132, // $79B3 + 132, // $79B4 + 132, // $79B5 + 132, // $79B6 + 132, // $79B7 + 132, // $79B8 + 132, // $79B9 + 132, // $79BA + 132, // $79BB + 132, // $79BC + 132, // $79BD + 132, // $79BE + 132, // $79BF + 132, // $79C0 + 132, // $79C1 + 132, // $79C2 + 132, // $79C3 + 132, // $79C4 + 132, // $79C5 + 132, // $79C6 + 132, // $79C7 + 132, // $79C8 + 132, // $79C9 + 132, // $79CA + 132, // $79CB + 132, // $79CC + 132, // $79CD + 132, // $79CE + 132, // $79CF + 132, // $79D0 + 132, // $79D1 + 132, // $79D2 + 132, // $79D3 + 132, // $79D4 + 132, // $79D5 + 132, // $79D6 + 132, // $79D7 + 132, // $79D8 + 132, // $79D9 + 132, // $79DA + 132, // $79DB + 132, // $79DC + 132, // $79DD + 132, // $79DE + 132, // $79DF + 132, // $79E0 + 132, // $79E1 + 132, // $79E2 + 132, // $79E3 + 132, // $79E4 + 132, // $79E5 + 132, // $79E6 + 132, // $79E7 + 132, // $79E8 + 132, // $79E9 + 132, // $79EA + 132, // $79EB + 132, // $79EC + 132, // $79ED + 132, // $79EE + 132, // $79EF + 132, // $79F0 + 132, // $79F1 + 132, // $79F2 + 132, // $79F3 + 132, // $79F4 + 132, // $79F5 + 132, // $79F6 + 132, // $79F7 + 132, // $79F8 + 132, // $79F9 + 132, // $79FA + 132, // $79FB + 132, // $79FC + 132, // $79FD + 132, // $79FE + 132, // $79FF + 132, // $7A00 + 132, // $7A01 + 132, // $7A02 + 132, // $7A03 + 132, // $7A04 + 132, // $7A05 + 132, // $7A06 + 132, // $7A07 + 132, // $7A08 + 132, // $7A09 + 132, // $7A0A + 132, // $7A0B + 132, // $7A0C + 132, // $7A0D + 132, // $7A0E + 132, // $7A0F + 132, // $7A10 + 132, // $7A11 + 132, // $7A12 + 132, // $7A13 + 132, // $7A14 + 132, // $7A15 + 132, // $7A16 + 132, // $7A17 + 132, // $7A18 + 132, // $7A19 + 132, // $7A1A + 132, // $7A1B + 132, // $7A1C + 132, // $7A1D + 132, // $7A1E + 132, // $7A1F + 132, // $7A20 + 132, // $7A21 + 132, // $7A22 + 132, // $7A23 + 132, // $7A24 + 132, // $7A25 + 132, // $7A26 + 132, // $7A27 + 132, // $7A28 + 132, // $7A29 + 132, // $7A2A + 132, // $7A2B + 132, // $7A2C + 132, // $7A2D + 132, // $7A2E + 132, // $7A2F + 132, // $7A30 + 132, // $7A31 + 132, // $7A32 + 132, // $7A33 + 132, // $7A34 + 132, // $7A35 + 132, // $7A36 + 132, // $7A37 + 132, // $7A38 + 132, // $7A39 + 132, // $7A3A + 132, // $7A3B + 132, // $7A3C + 132, // $7A3D + 132, // $7A3E + 132, // $7A3F + 132, // $7A40 + 132, // $7A41 + 132, // $7A42 + 132, // $7A43 + 132, // $7A44 + 132, // $7A45 + 132, // $7A46 + 132, // $7A47 + 132, // $7A48 + 132, // $7A49 + 132, // $7A4A + 132, // $7A4B + 132, // $7A4C + 132, // $7A4D + 132, // $7A4E + 132, // $7A4F + 132, // $7A50 + 132, // $7A51 + 132, // $7A52 + 132, // $7A53 + 132, // $7A54 + 132, // $7A55 + 132, // $7A56 + 132, // $7A57 + 132, // $7A58 + 132, // $7A59 + 132, // $7A5A + 132, // $7A5B + 132, // $7A5C + 132, // $7A5D + 132, // $7A5E + 132, // $7A5F + 132, // $7A60 + 132, // $7A61 + 132, // $7A62 + 132, // $7A63 + 132, // $7A64 + 132, // $7A65 + 132, // $7A66 + 132, // $7A67 + 132, // $7A68 + 132, // $7A69 + 132, // $7A6A + 132, // $7A6B + 132, // $7A6C + 132, // $7A6D + 132, // $7A6E + 132, // $7A6F + 132, // $7A70 + 132, // $7A71 + 132, // $7A72 + 132, // $7A73 + 132, // $7A74 + 132, // $7A75 + 132, // $7A76 + 132, // $7A77 + 132, // $7A78 + 132, // $7A79 + 132, // $7A7A + 132, // $7A7B + 132, // $7A7C + 132, // $7A7D + 132, // $7A7E + 132, // $7A7F + 132, // $7A80 + 132, // $7A81 + 132, // $7A82 + 132, // $7A83 + 132, // $7A84 + 132, // $7A85 + 132, // $7A86 + 132, // $7A87 + 132, // $7A88 + 132, // $7A89 + 132, // $7A8A + 132, // $7A8B + 132, // $7A8C + 132, // $7A8D + 132, // $7A8E + 132, // $7A8F + 132, // $7A90 + 132, // $7A91 + 132, // $7A92 + 132, // $7A93 + 132, // $7A94 + 132, // $7A95 + 132, // $7A96 + 132, // $7A97 + 132, // $7A98 + 132, // $7A99 + 132, // $7A9A + 132, // $7A9B + 132, // $7A9C + 132, // $7A9D + 132, // $7A9E + 132, // $7A9F + 132, // $7AA0 + 132, // $7AA1 + 132, // $7AA2 + 132, // $7AA3 + 132, // $7AA4 + 132, // $7AA5 + 132, // $7AA6 + 132, // $7AA7 + 132, // $7AA8 + 132, // $7AA9 + 132, // $7AAA + 132, // $7AAB + 132, // $7AAC + 132, // $7AAD + 132, // $7AAE + 132, // $7AAF + 132, // $7AB0 + 132, // $7AB1 + 132, // $7AB2 + 132, // $7AB3 + 132, // $7AB4 + 132, // $7AB5 + 132, // $7AB6 + 132, // $7AB7 + 132, // $7AB8 + 132, // $7AB9 + 132, // $7ABA + 132, // $7ABB + 132, // $7ABC + 132, // $7ABD + 132, // $7ABE + 132, // $7ABF + 132, // $7AC0 + 132, // $7AC1 + 132, // $7AC2 + 132, // $7AC3 + 132, // $7AC4 + 132, // $7AC5 + 132, // $7AC6 + 132, // $7AC7 + 132, // $7AC8 + 132, // $7AC9 + 132, // $7ACA + 132, // $7ACB + 132, // $7ACC + 132, // $7ACD + 132, // $7ACE + 132, // $7ACF + 132, // $7AD0 + 132, // $7AD1 + 132, // $7AD2 + 132, // $7AD3 + 132, // $7AD4 + 132, // $7AD5 + 132, // $7AD6 + 132, // $7AD7 + 132, // $7AD8 + 132, // $7AD9 + 132, // $7ADA + 132, // $7ADB + 132, // $7ADC + 132, // $7ADD + 132, // $7ADE + 132, // $7ADF + 132, // $7AE0 + 132, // $7AE1 + 132, // $7AE2 + 132, // $7AE3 + 132, // $7AE4 + 132, // $7AE5 + 132, // $7AE6 + 132, // $7AE7 + 132, // $7AE8 + 132, // $7AE9 + 132, // $7AEA + 132, // $7AEB + 132, // $7AEC + 132, // $7AED + 132, // $7AEE + 132, // $7AEF + 132, // $7AF0 + 132, // $7AF1 + 132, // $7AF2 + 132, // $7AF3 + 132, // $7AF4 + 132, // $7AF5 + 132, // $7AF6 + 132, // $7AF7 + 132, // $7AF8 + 132, // $7AF9 + 132, // $7AFA + 132, // $7AFB + 132, // $7AFC + 132, // $7AFD + 132, // $7AFE + 132, // $7AFF + 132, // $7B00 + 132, // $7B01 + 132, // $7B02 + 132, // $7B03 + 132, // $7B04 + 132, // $7B05 + 132, // $7B06 + 132, // $7B07 + 132, // $7B08 + 132, // $7B09 + 132, // $7B0A + 132, // $7B0B + 132, // $7B0C + 132, // $7B0D + 132, // $7B0E + 132, // $7B0F + 132, // $7B10 + 132, // $7B11 + 132, // $7B12 + 132, // $7B13 + 132, // $7B14 + 132, // $7B15 + 132, // $7B16 + 132, // $7B17 + 132, // $7B18 + 132, // $7B19 + 132, // $7B1A + 132, // $7B1B + 132, // $7B1C + 132, // $7B1D + 132, // $7B1E + 132, // $7B1F + 132, // $7B20 + 132, // $7B21 + 132, // $7B22 + 132, // $7B23 + 132, // $7B24 + 132, // $7B25 + 132, // $7B26 + 132, // $7B27 + 132, // $7B28 + 132, // $7B29 + 132, // $7B2A + 132, // $7B2B + 132, // $7B2C + 132, // $7B2D + 132, // $7B2E + 132, // $7B2F + 132, // $7B30 + 132, // $7B31 + 132, // $7B32 + 132, // $7B33 + 132, // $7B34 + 132, // $7B35 + 132, // $7B36 + 132, // $7B37 + 132, // $7B38 + 132, // $7B39 + 132, // $7B3A + 132, // $7B3B + 132, // $7B3C + 132, // $7B3D + 132, // $7B3E + 132, // $7B3F + 132, // $7B40 + 132, // $7B41 + 132, // $7B42 + 132, // $7B43 + 132, // $7B44 + 132, // $7B45 + 132, // $7B46 + 132, // $7B47 + 132, // $7B48 + 132, // $7B49 + 132, // $7B4A + 132, // $7B4B + 132, // $7B4C + 132, // $7B4D + 132, // $7B4E + 132, // $7B4F + 132, // $7B50 + 132, // $7B51 + 132, // $7B52 + 132, // $7B53 + 132, // $7B54 + 132, // $7B55 + 132, // $7B56 + 132, // $7B57 + 132, // $7B58 + 132, // $7B59 + 132, // $7B5A + 132, // $7B5B + 132, // $7B5C + 132, // $7B5D + 132, // $7B5E + 132, // $7B5F + 132, // $7B60 + 132, // $7B61 + 132, // $7B62 + 132, // $7B63 + 132, // $7B64 + 132, // $7B65 + 132, // $7B66 + 132, // $7B67 + 132, // $7B68 + 132, // $7B69 + 132, // $7B6A + 132, // $7B6B + 132, // $7B6C + 132, // $7B6D + 132, // $7B6E + 132, // $7B6F + 132, // $7B70 + 132, // $7B71 + 132, // $7B72 + 132, // $7B73 + 132, // $7B74 + 132, // $7B75 + 132, // $7B76 + 132, // $7B77 + 132, // $7B78 + 132, // $7B79 + 132, // $7B7A + 132, // $7B7B + 132, // $7B7C + 132, // $7B7D + 132, // $7B7E + 132, // $7B7F + 132, // $7B80 + 132, // $7B81 + 132, // $7B82 + 132, // $7B83 + 132, // $7B84 + 132, // $7B85 + 132, // $7B86 + 132, // $7B87 + 132, // $7B88 + 132, // $7B89 + 132, // $7B8A + 132, // $7B8B + 132, // $7B8C + 132, // $7B8D + 132, // $7B8E + 132, // $7B8F + 132, // $7B90 + 132, // $7B91 + 132, // $7B92 + 132, // $7B93 + 132, // $7B94 + 132, // $7B95 + 132, // $7B96 + 132, // $7B97 + 132, // $7B98 + 132, // $7B99 + 132, // $7B9A + 132, // $7B9B + 132, // $7B9C + 132, // $7B9D + 132, // $7B9E + 132, // $7B9F + 132, // $7BA0 + 132, // $7BA1 + 132, // $7BA2 + 132, // $7BA3 + 132, // $7BA4 + 132, // $7BA5 + 132, // $7BA6 + 132, // $7BA7 + 132, // $7BA8 + 132, // $7BA9 + 132, // $7BAA + 132, // $7BAB + 132, // $7BAC + 132, // $7BAD + 132, // $7BAE + 132, // $7BAF + 132, // $7BB0 + 132, // $7BB1 + 132, // $7BB2 + 132, // $7BB3 + 132, // $7BB4 + 132, // $7BB5 + 132, // $7BB6 + 132, // $7BB7 + 132, // $7BB8 + 132, // $7BB9 + 132, // $7BBA + 132, // $7BBB + 132, // $7BBC + 132, // $7BBD + 132, // $7BBE + 132, // $7BBF + 132, // $7BC0 + 132, // $7BC1 + 132, // $7BC2 + 132, // $7BC3 + 132, // $7BC4 + 132, // $7BC5 + 132, // $7BC6 + 132, // $7BC7 + 132, // $7BC8 + 132, // $7BC9 + 132, // $7BCA + 132, // $7BCB + 132, // $7BCC + 132, // $7BCD + 132, // $7BCE + 132, // $7BCF + 132, // $7BD0 + 132, // $7BD1 + 132, // $7BD2 + 132, // $7BD3 + 132, // $7BD4 + 132, // $7BD5 + 132, // $7BD6 + 132, // $7BD7 + 132, // $7BD8 + 132, // $7BD9 + 132, // $7BDA + 132, // $7BDB + 132, // $7BDC + 132, // $7BDD + 132, // $7BDE + 132, // $7BDF + 132, // $7BE0 + 132, // $7BE1 + 132, // $7BE2 + 132, // $7BE3 + 132, // $7BE4 + 132, // $7BE5 + 132, // $7BE6 + 132, // $7BE7 + 132, // $7BE8 + 132, // $7BE9 + 132, // $7BEA + 132, // $7BEB + 132, // $7BEC + 132, // $7BED + 132, // $7BEE + 132, // $7BEF + 132, // $7BF0 + 132, // $7BF1 + 132, // $7BF2 + 132, // $7BF3 + 132, // $7BF4 + 132, // $7BF5 + 132, // $7BF6 + 132, // $7BF7 + 132, // $7BF8 + 132, // $7BF9 + 132, // $7BFA + 132, // $7BFB + 132, // $7BFC + 132, // $7BFD + 132, // $7BFE + 132, // $7BFF + 132, // $7C00 + 132, // $7C01 + 132, // $7C02 + 132, // $7C03 + 132, // $7C04 + 132, // $7C05 + 132, // $7C06 + 132, // $7C07 + 132, // $7C08 + 132, // $7C09 + 132, // $7C0A + 132, // $7C0B + 132, // $7C0C + 132, // $7C0D + 132, // $7C0E + 132, // $7C0F + 132, // $7C10 + 132, // $7C11 + 132, // $7C12 + 132, // $7C13 + 132, // $7C14 + 132, // $7C15 + 132, // $7C16 + 132, // $7C17 + 132, // $7C18 + 132, // $7C19 + 132, // $7C1A + 132, // $7C1B + 132, // $7C1C + 132, // $7C1D + 132, // $7C1E + 132, // $7C1F + 132, // $7C20 + 132, // $7C21 + 132, // $7C22 + 132, // $7C23 + 132, // $7C24 + 132, // $7C25 + 132, // $7C26 + 132, // $7C27 + 132, // $7C28 + 132, // $7C29 + 132, // $7C2A + 132, // $7C2B + 132, // $7C2C + 132, // $7C2D + 132, // $7C2E + 132, // $7C2F + 132, // $7C30 + 132, // $7C31 + 132, // $7C32 + 132, // $7C33 + 132, // $7C34 + 132, // $7C35 + 132, // $7C36 + 132, // $7C37 + 132, // $7C38 + 132, // $7C39 + 132, // $7C3A + 132, // $7C3B + 132, // $7C3C + 132, // $7C3D + 132, // $7C3E + 132, // $7C3F + 132, // $7C40 + 132, // $7C41 + 132, // $7C42 + 132, // $7C43 + 132, // $7C44 + 132, // $7C45 + 132, // $7C46 + 132, // $7C47 + 132, // $7C48 + 132, // $7C49 + 132, // $7C4A + 132, // $7C4B + 132, // $7C4C + 132, // $7C4D + 132, // $7C4E + 132, // $7C4F + 132, // $7C50 + 132, // $7C51 + 132, // $7C52 + 132, // $7C53 + 132, // $7C54 + 132, // $7C55 + 132, // $7C56 + 132, // $7C57 + 132, // $7C58 + 132, // $7C59 + 132, // $7C5A + 132, // $7C5B + 132, // $7C5C + 132, // $7C5D + 132, // $7C5E + 132, // $7C5F + 132, // $7C60 + 132, // $7C61 + 132, // $7C62 + 132, // $7C63 + 132, // $7C64 + 132, // $7C65 + 132, // $7C66 + 132, // $7C67 + 132, // $7C68 + 132, // $7C69 + 132, // $7C6A + 132, // $7C6B + 132, // $7C6C + 132, // $7C6D + 132, // $7C6E + 132, // $7C6F + 132, // $7C70 + 132, // $7C71 + 132, // $7C72 + 132, // $7C73 + 132, // $7C74 + 132, // $7C75 + 132, // $7C76 + 132, // $7C77 + 132, // $7C78 + 132, // $7C79 + 132, // $7C7A + 132, // $7C7B + 132, // $7C7C + 132, // $7C7D + 132, // $7C7E + 132, // $7C7F + 132, // $7C80 + 132, // $7C81 + 132, // $7C82 + 132, // $7C83 + 132, // $7C84 + 132, // $7C85 + 132, // $7C86 + 132, // $7C87 + 132, // $7C88 + 132, // $7C89 + 132, // $7C8A + 132, // $7C8B + 132, // $7C8C + 132, // $7C8D + 132, // $7C8E + 132, // $7C8F + 132, // $7C90 + 132, // $7C91 + 132, // $7C92 + 132, // $7C93 + 132, // $7C94 + 132, // $7C95 + 132, // $7C96 + 132, // $7C97 + 132, // $7C98 + 132, // $7C99 + 132, // $7C9A + 132, // $7C9B + 132, // $7C9C + 132, // $7C9D + 132, // $7C9E + 132, // $7C9F + 132, // $7CA0 + 132, // $7CA1 + 132, // $7CA2 + 132, // $7CA3 + 132, // $7CA4 + 132, // $7CA5 + 132, // $7CA6 + 132, // $7CA7 + 132, // $7CA8 + 132, // $7CA9 + 132, // $7CAA + 132, // $7CAB + 132, // $7CAC + 132, // $7CAD + 132, // $7CAE + 132, // $7CAF + 132, // $7CB0 + 132, // $7CB1 + 132, // $7CB2 + 132, // $7CB3 + 132, // $7CB4 + 132, // $7CB5 + 132, // $7CB6 + 132, // $7CB7 + 132, // $7CB8 + 132, // $7CB9 + 132, // $7CBA + 132, // $7CBB + 132, // $7CBC + 132, // $7CBD + 132, // $7CBE + 132, // $7CBF + 132, // $7CC0 + 132, // $7CC1 + 132, // $7CC2 + 132, // $7CC3 + 132, // $7CC4 + 132, // $7CC5 + 132, // $7CC6 + 132, // $7CC7 + 132, // $7CC8 + 132, // $7CC9 + 132, // $7CCA + 132, // $7CCB + 132, // $7CCC + 132, // $7CCD + 132, // $7CCE + 132, // $7CCF + 132, // $7CD0 + 132, // $7CD1 + 132, // $7CD2 + 132, // $7CD3 + 132, // $7CD4 + 132, // $7CD5 + 132, // $7CD6 + 132, // $7CD7 + 132, // $7CD8 + 132, // $7CD9 + 132, // $7CDA + 132, // $7CDB + 132, // $7CDC + 132, // $7CDD + 132, // $7CDE + 132, // $7CDF + 132, // $7CE0 + 132, // $7CE1 + 132, // $7CE2 + 132, // $7CE3 + 132, // $7CE4 + 132, // $7CE5 + 132, // $7CE6 + 132, // $7CE7 + 132, // $7CE8 + 132, // $7CE9 + 132, // $7CEA + 132, // $7CEB + 132, // $7CEC + 132, // $7CED + 132, // $7CEE + 132, // $7CEF + 132, // $7CF0 + 132, // $7CF1 + 132, // $7CF2 + 132, // $7CF3 + 132, // $7CF4 + 132, // $7CF5 + 132, // $7CF6 + 132, // $7CF7 + 132, // $7CF8 + 132, // $7CF9 + 132, // $7CFA + 132, // $7CFB + 132, // $7CFC + 132, // $7CFD + 132, // $7CFE + 132, // $7CFF + 132, // $7D00 + 132, // $7D01 + 132, // $7D02 + 132, // $7D03 + 132, // $7D04 + 132, // $7D05 + 132, // $7D06 + 132, // $7D07 + 132, // $7D08 + 132, // $7D09 + 132, // $7D0A + 132, // $7D0B + 132, // $7D0C + 132, // $7D0D + 132, // $7D0E + 132, // $7D0F + 132, // $7D10 + 132, // $7D11 + 132, // $7D12 + 132, // $7D13 + 132, // $7D14 + 132, // $7D15 + 132, // $7D16 + 132, // $7D17 + 132, // $7D18 + 132, // $7D19 + 132, // $7D1A + 132, // $7D1B + 132, // $7D1C + 132, // $7D1D + 132, // $7D1E + 132, // $7D1F + 132, // $7D20 + 132, // $7D21 + 132, // $7D22 + 132, // $7D23 + 132, // $7D24 + 132, // $7D25 + 132, // $7D26 + 132, // $7D27 + 132, // $7D28 + 132, // $7D29 + 132, // $7D2A + 132, // $7D2B + 132, // $7D2C + 132, // $7D2D + 132, // $7D2E + 132, // $7D2F + 132, // $7D30 + 132, // $7D31 + 132, // $7D32 + 132, // $7D33 + 132, // $7D34 + 132, // $7D35 + 132, // $7D36 + 132, // $7D37 + 132, // $7D38 + 132, // $7D39 + 132, // $7D3A + 132, // $7D3B + 132, // $7D3C + 132, // $7D3D + 132, // $7D3E + 132, // $7D3F + 132, // $7D40 + 132, // $7D41 + 132, // $7D42 + 132, // $7D43 + 132, // $7D44 + 132, // $7D45 + 132, // $7D46 + 132, // $7D47 + 132, // $7D48 + 132, // $7D49 + 132, // $7D4A + 132, // $7D4B + 132, // $7D4C + 132, // $7D4D + 132, // $7D4E + 132, // $7D4F + 132, // $7D50 + 132, // $7D51 + 132, // $7D52 + 132, // $7D53 + 132, // $7D54 + 132, // $7D55 + 132, // $7D56 + 132, // $7D57 + 132, // $7D58 + 132, // $7D59 + 132, // $7D5A + 132, // $7D5B + 132, // $7D5C + 132, // $7D5D + 132, // $7D5E + 132, // $7D5F + 132, // $7D60 + 132, // $7D61 + 132, // $7D62 + 132, // $7D63 + 132, // $7D64 + 132, // $7D65 + 132, // $7D66 + 132, // $7D67 + 132, // $7D68 + 132, // $7D69 + 132, // $7D6A + 132, // $7D6B + 132, // $7D6C + 132, // $7D6D + 132, // $7D6E + 132, // $7D6F + 132, // $7D70 + 132, // $7D71 + 132, // $7D72 + 132, // $7D73 + 132, // $7D74 + 132, // $7D75 + 132, // $7D76 + 132, // $7D77 + 132, // $7D78 + 132, // $7D79 + 132, // $7D7A + 132, // $7D7B + 132, // $7D7C + 132, // $7D7D + 132, // $7D7E + 132, // $7D7F + 132, // $7D80 + 132, // $7D81 + 132, // $7D82 + 132, // $7D83 + 132, // $7D84 + 132, // $7D85 + 132, // $7D86 + 132, // $7D87 + 132, // $7D88 + 132, // $7D89 + 132, // $7D8A + 132, // $7D8B + 132, // $7D8C + 132, // $7D8D + 132, // $7D8E + 132, // $7D8F + 132, // $7D90 + 132, // $7D91 + 132, // $7D92 + 132, // $7D93 + 132, // $7D94 + 132, // $7D95 + 132, // $7D96 + 132, // $7D97 + 132, // $7D98 + 132, // $7D99 + 132, // $7D9A + 132, // $7D9B + 132, // $7D9C + 132, // $7D9D + 132, // $7D9E + 132, // $7D9F + 132, // $7DA0 + 132, // $7DA1 + 132, // $7DA2 + 132, // $7DA3 + 132, // $7DA4 + 132, // $7DA5 + 132, // $7DA6 + 132, // $7DA7 + 132, // $7DA8 + 132, // $7DA9 + 132, // $7DAA + 132, // $7DAB + 132, // $7DAC + 132, // $7DAD + 132, // $7DAE + 132, // $7DAF + 132, // $7DB0 + 132, // $7DB1 + 132, // $7DB2 + 132, // $7DB3 + 132, // $7DB4 + 132, // $7DB5 + 132, // $7DB6 + 132, // $7DB7 + 132, // $7DB8 + 132, // $7DB9 + 132, // $7DBA + 132, // $7DBB + 132, // $7DBC + 132, // $7DBD + 132, // $7DBE + 132, // $7DBF + 132, // $7DC0 + 132, // $7DC1 + 132, // $7DC2 + 132, // $7DC3 + 132, // $7DC4 + 132, // $7DC5 + 132, // $7DC6 + 132, // $7DC7 + 132, // $7DC8 + 132, // $7DC9 + 132, // $7DCA + 132, // $7DCB + 132, // $7DCC + 132, // $7DCD + 132, // $7DCE + 132, // $7DCF + 132, // $7DD0 + 132, // $7DD1 + 132, // $7DD2 + 132, // $7DD3 + 132, // $7DD4 + 132, // $7DD5 + 132, // $7DD6 + 132, // $7DD7 + 132, // $7DD8 + 132, // $7DD9 + 132, // $7DDA + 132, // $7DDB + 132, // $7DDC + 132, // $7DDD + 132, // $7DDE + 132, // $7DDF + 132, // $7DE0 + 132, // $7DE1 + 132, // $7DE2 + 132, // $7DE3 + 132, // $7DE4 + 132, // $7DE5 + 132, // $7DE6 + 132, // $7DE7 + 132, // $7DE8 + 132, // $7DE9 + 132, // $7DEA + 132, // $7DEB + 132, // $7DEC + 132, // $7DED + 132, // $7DEE + 132, // $7DEF + 132, // $7DF0 + 132, // $7DF1 + 132, // $7DF2 + 132, // $7DF3 + 132, // $7DF4 + 132, // $7DF5 + 132, // $7DF6 + 132, // $7DF7 + 132, // $7DF8 + 132, // $7DF9 + 132, // $7DFA + 132, // $7DFB + 132, // $7DFC + 132, // $7DFD + 132, // $7DFE + 132, // $7DFF + 132, // $7E00 + 132, // $7E01 + 132, // $7E02 + 132, // $7E03 + 132, // $7E04 + 132, // $7E05 + 132, // $7E06 + 132, // $7E07 + 132, // $7E08 + 132, // $7E09 + 132, // $7E0A + 132, // $7E0B + 132, // $7E0C + 132, // $7E0D + 132, // $7E0E + 132, // $7E0F + 132, // $7E10 + 132, // $7E11 + 132, // $7E12 + 132, // $7E13 + 132, // $7E14 + 132, // $7E15 + 132, // $7E16 + 132, // $7E17 + 132, // $7E18 + 132, // $7E19 + 132, // $7E1A + 132, // $7E1B + 132, // $7E1C + 132, // $7E1D + 132, // $7E1E + 132, // $7E1F + 132, // $7E20 + 132, // $7E21 + 132, // $7E22 + 132, // $7E23 + 132, // $7E24 + 132, // $7E25 + 132, // $7E26 + 132, // $7E27 + 132, // $7E28 + 132, // $7E29 + 132, // $7E2A + 132, // $7E2B + 132, // $7E2C + 132, // $7E2D + 132, // $7E2E + 132, // $7E2F + 132, // $7E30 + 132, // $7E31 + 132, // $7E32 + 132, // $7E33 + 132, // $7E34 + 132, // $7E35 + 132, // $7E36 + 132, // $7E37 + 132, // $7E38 + 132, // $7E39 + 132, // $7E3A + 132, // $7E3B + 132, // $7E3C + 132, // $7E3D + 132, // $7E3E + 132, // $7E3F + 132, // $7E40 + 132, // $7E41 + 132, // $7E42 + 132, // $7E43 + 132, // $7E44 + 132, // $7E45 + 132, // $7E46 + 132, // $7E47 + 132, // $7E48 + 132, // $7E49 + 132, // $7E4A + 132, // $7E4B + 132, // $7E4C + 132, // $7E4D + 132, // $7E4E + 132, // $7E4F + 132, // $7E50 + 132, // $7E51 + 132, // $7E52 + 132, // $7E53 + 132, // $7E54 + 132, // $7E55 + 132, // $7E56 + 132, // $7E57 + 132, // $7E58 + 132, // $7E59 + 132, // $7E5A + 132, // $7E5B + 132, // $7E5C + 132, // $7E5D + 132, // $7E5E + 132, // $7E5F + 132, // $7E60 + 132, // $7E61 + 132, // $7E62 + 132, // $7E63 + 132, // $7E64 + 132, // $7E65 + 132, // $7E66 + 132, // $7E67 + 132, // $7E68 + 132, // $7E69 + 132, // $7E6A + 132, // $7E6B + 132, // $7E6C + 132, // $7E6D + 132, // $7E6E + 132, // $7E6F + 132, // $7E70 + 132, // $7E71 + 132, // $7E72 + 132, // $7E73 + 132, // $7E74 + 132, // $7E75 + 132, // $7E76 + 132, // $7E77 + 132, // $7E78 + 132, // $7E79 + 132, // $7E7A + 132, // $7E7B + 132, // $7E7C + 132, // $7E7D + 132, // $7E7E + 132, // $7E7F + 132, // $7E80 + 132, // $7E81 + 132, // $7E82 + 132, // $7E83 + 132, // $7E84 + 132, // $7E85 + 132, // $7E86 + 132, // $7E87 + 132, // $7E88 + 132, // $7E89 + 132, // $7E8A + 132, // $7E8B + 132, // $7E8C + 132, // $7E8D + 132, // $7E8E + 132, // $7E8F + 132, // $7E90 + 132, // $7E91 + 132, // $7E92 + 132, // $7E93 + 132, // $7E94 + 132, // $7E95 + 132, // $7E96 + 132, // $7E97 + 132, // $7E98 + 132, // $7E99 + 132, // $7E9A + 132, // $7E9B + 132, // $7E9C + 132, // $7E9D + 132, // $7E9E + 132, // $7E9F + 132, // $7EA0 + 132, // $7EA1 + 132, // $7EA2 + 132, // $7EA3 + 132, // $7EA4 + 132, // $7EA5 + 132, // $7EA6 + 132, // $7EA7 + 132, // $7EA8 + 132, // $7EA9 + 132, // $7EAA + 132, // $7EAB + 132, // $7EAC + 132, // $7EAD + 132, // $7EAE + 132, // $7EAF + 132, // $7EB0 + 132, // $7EB1 + 132, // $7EB2 + 132, // $7EB3 + 132, // $7EB4 + 132, // $7EB5 + 132, // $7EB6 + 132, // $7EB7 + 132, // $7EB8 + 132, // $7EB9 + 132, // $7EBA + 132, // $7EBB + 132, // $7EBC + 132, // $7EBD + 132, // $7EBE + 132, // $7EBF + 132, // $7EC0 + 132, // $7EC1 + 132, // $7EC2 + 132, // $7EC3 + 132, // $7EC4 + 132, // $7EC5 + 132, // $7EC6 + 132, // $7EC7 + 132, // $7EC8 + 132, // $7EC9 + 132, // $7ECA + 132, // $7ECB + 132, // $7ECC + 132, // $7ECD + 132, // $7ECE + 132, // $7ECF + 132, // $7ED0 + 132, // $7ED1 + 132, // $7ED2 + 132, // $7ED3 + 132, // $7ED4 + 132, // $7ED5 + 132, // $7ED6 + 132, // $7ED7 + 132, // $7ED8 + 132, // $7ED9 + 132, // $7EDA + 132, // $7EDB + 132, // $7EDC + 132, // $7EDD + 132, // $7EDE + 132, // $7EDF + 132, // $7EE0 + 132, // $7EE1 + 132, // $7EE2 + 132, // $7EE3 + 132, // $7EE4 + 132, // $7EE5 + 132, // $7EE6 + 132, // $7EE7 + 132, // $7EE8 + 132, // $7EE9 + 132, // $7EEA + 132, // $7EEB + 132, // $7EEC + 132, // $7EED + 132, // $7EEE + 132, // $7EEF + 132, // $7EF0 + 132, // $7EF1 + 132, // $7EF2 + 132, // $7EF3 + 132, // $7EF4 + 132, // $7EF5 + 132, // $7EF6 + 132, // $7EF7 + 132, // $7EF8 + 132, // $7EF9 + 132, // $7EFA + 132, // $7EFB + 132, // $7EFC + 132, // $7EFD + 132, // $7EFE + 132, // $7EFF + 132, // $7F00 + 132, // $7F01 + 132, // $7F02 + 132, // $7F03 + 132, // $7F04 + 132, // $7F05 + 132, // $7F06 + 132, // $7F07 + 132, // $7F08 + 132, // $7F09 + 132, // $7F0A + 132, // $7F0B + 132, // $7F0C + 132, // $7F0D + 132, // $7F0E + 132, // $7F0F + 132, // $7F10 + 132, // $7F11 + 132, // $7F12 + 132, // $7F13 + 132, // $7F14 + 132, // $7F15 + 132, // $7F16 + 132, // $7F17 + 132, // $7F18 + 132, // $7F19 + 132, // $7F1A + 132, // $7F1B + 132, // $7F1C + 132, // $7F1D + 132, // $7F1E + 132, // $7F1F + 132, // $7F20 + 132, // $7F21 + 132, // $7F22 + 132, // $7F23 + 132, // $7F24 + 132, // $7F25 + 132, // $7F26 + 132, // $7F27 + 132, // $7F28 + 132, // $7F29 + 132, // $7F2A + 132, // $7F2B + 132, // $7F2C + 132, // $7F2D + 132, // $7F2E + 132, // $7F2F + 132, // $7F30 + 132, // $7F31 + 132, // $7F32 + 132, // $7F33 + 132, // $7F34 + 132, // $7F35 + 132, // $7F36 + 132, // $7F37 + 132, // $7F38 + 132, // $7F39 + 132, // $7F3A + 132, // $7F3B + 132, // $7F3C + 132, // $7F3D + 132, // $7F3E + 132, // $7F3F + 132, // $7F40 + 132, // $7F41 + 132, // $7F42 + 132, // $7F43 + 132, // $7F44 + 132, // $7F45 + 132, // $7F46 + 132, // $7F47 + 132, // $7F48 + 132, // $7F49 + 132, // $7F4A + 132, // $7F4B + 132, // $7F4C + 132, // $7F4D + 132, // $7F4E + 132, // $7F4F + 132, // $7F50 + 132, // $7F51 + 132, // $7F52 + 132, // $7F53 + 132, // $7F54 + 132, // $7F55 + 132, // $7F56 + 132, // $7F57 + 132, // $7F58 + 132, // $7F59 + 132, // $7F5A + 132, // $7F5B + 132, // $7F5C + 132, // $7F5D + 132, // $7F5E + 132, // $7F5F + 132, // $7F60 + 132, // $7F61 + 132, // $7F62 + 132, // $7F63 + 132, // $7F64 + 132, // $7F65 + 132, // $7F66 + 132, // $7F67 + 132, // $7F68 + 132, // $7F69 + 132, // $7F6A + 132, // $7F6B + 132, // $7F6C + 132, // $7F6D + 132, // $7F6E + 132, // $7F6F + 132, // $7F70 + 132, // $7F71 + 132, // $7F72 + 132, // $7F73 + 132, // $7F74 + 132, // $7F75 + 132, // $7F76 + 132, // $7F77 + 132, // $7F78 + 132, // $7F79 + 132, // $7F7A + 132, // $7F7B + 132, // $7F7C + 132, // $7F7D + 132, // $7F7E + 132, // $7F7F + 132, // $7F80 + 132, // $7F81 + 132, // $7F82 + 132, // $7F83 + 132, // $7F84 + 132, // $7F85 + 132, // $7F86 + 132, // $7F87 + 132, // $7F88 + 132, // $7F89 + 132, // $7F8A + 132, // $7F8B + 132, // $7F8C + 132, // $7F8D + 132, // $7F8E + 132, // $7F8F + 132, // $7F90 + 132, // $7F91 + 132, // $7F92 + 132, // $7F93 + 132, // $7F94 + 132, // $7F95 + 132, // $7F96 + 132, // $7F97 + 132, // $7F98 + 132, // $7F99 + 132, // $7F9A + 132, // $7F9B + 132, // $7F9C + 132, // $7F9D + 132, // $7F9E + 132, // $7F9F + 132, // $7FA0 + 132, // $7FA1 + 132, // $7FA2 + 132, // $7FA3 + 132, // $7FA4 + 132, // $7FA5 + 132, // $7FA6 + 132, // $7FA7 + 132, // $7FA8 + 132, // $7FA9 + 132, // $7FAA + 132, // $7FAB + 132, // $7FAC + 132, // $7FAD + 132, // $7FAE + 132, // $7FAF + 132, // $7FB0 + 132, // $7FB1 + 132, // $7FB2 + 132, // $7FB3 + 132, // $7FB4 + 132, // $7FB5 + 132, // $7FB6 + 132, // $7FB7 + 132, // $7FB8 + 132, // $7FB9 + 132, // $7FBA + 132, // $7FBB + 132, // $7FBC + 132, // $7FBD + 132, // $7FBE + 132, // $7FBF + 132, // $7FC0 + 132, // $7FC1 + 132, // $7FC2 + 132, // $7FC3 + 132, // $7FC4 + 132, // $7FC5 + 132, // $7FC6 + 132, // $7FC7 + 132, // $7FC8 + 132, // $7FC9 + 132, // $7FCA + 132, // $7FCB + 132, // $7FCC + 132, // $7FCD + 132, // $7FCE + 132, // $7FCF + 132, // $7FD0 + 132, // $7FD1 + 132, // $7FD2 + 132, // $7FD3 + 132, // $7FD4 + 132, // $7FD5 + 132, // $7FD6 + 132, // $7FD7 + 132, // $7FD8 + 132, // $7FD9 + 132, // $7FDA + 132, // $7FDB + 132, // $7FDC + 132, // $7FDD + 132, // $7FDE + 132, // $7FDF + 132, // $7FE0 + 132, // $7FE1 + 132, // $7FE2 + 132, // $7FE3 + 132, // $7FE4 + 132, // $7FE5 + 132, // $7FE6 + 132, // $7FE7 + 132, // $7FE8 + 132, // $7FE9 + 132, // $7FEA + 132, // $7FEB + 132, // $7FEC + 132, // $7FED + 132, // $7FEE + 132, // $7FEF + 132, // $7FF0 + 132, // $7FF1 + 132, // $7FF2 + 132, // $7FF3 + 132, // $7FF4 + 132, // $7FF5 + 132, // $7FF6 + 132, // $7FF7 + 132, // $7FF8 + 132, // $7FF9 + 132, // $7FFA + 132, // $7FFB + 132, // $7FFC + 132, // $7FFD + 132, // $7FFE + 132, // $7FFF + 132, // $8000 + 132, // $8001 + 132, // $8002 + 132, // $8003 + 132, // $8004 + 132, // $8005 + 132, // $8006 + 132, // $8007 + 132, // $8008 + 132, // $8009 + 132, // $800A + 132, // $800B + 132, // $800C + 132, // $800D + 132, // $800E + 132, // $800F + 132, // $8010 + 132, // $8011 + 132, // $8012 + 132, // $8013 + 132, // $8014 + 132, // $8015 + 132, // $8016 + 132, // $8017 + 132, // $8018 + 132, // $8019 + 132, // $801A + 132, // $801B + 132, // $801C + 132, // $801D + 132, // $801E + 132, // $801F + 132, // $8020 + 132, // $8021 + 132, // $8022 + 132, // $8023 + 132, // $8024 + 132, // $8025 + 132, // $8026 + 132, // $8027 + 132, // $8028 + 132, // $8029 + 132, // $802A + 132, // $802B + 132, // $802C + 132, // $802D + 132, // $802E + 132, // $802F + 132, // $8030 + 132, // $8031 + 132, // $8032 + 132, // $8033 + 132, // $8034 + 132, // $8035 + 132, // $8036 + 132, // $8037 + 132, // $8038 + 132, // $8039 + 132, // $803A + 132, // $803B + 132, // $803C + 132, // $803D + 132, // $803E + 132, // $803F + 132, // $8040 + 132, // $8041 + 132, // $8042 + 132, // $8043 + 132, // $8044 + 132, // $8045 + 132, // $8046 + 132, // $8047 + 132, // $8048 + 132, // $8049 + 132, // $804A + 132, // $804B + 132, // $804C + 132, // $804D + 132, // $804E + 132, // $804F + 132, // $8050 + 132, // $8051 + 132, // $8052 + 132, // $8053 + 132, // $8054 + 132, // $8055 + 132, // $8056 + 132, // $8057 + 132, // $8058 + 132, // $8059 + 132, // $805A + 132, // $805B + 132, // $805C + 132, // $805D + 132, // $805E + 132, // $805F + 132, // $8060 + 132, // $8061 + 132, // $8062 + 132, // $8063 + 132, // $8064 + 132, // $8065 + 132, // $8066 + 132, // $8067 + 132, // $8068 + 132, // $8069 + 132, // $806A + 132, // $806B + 132, // $806C + 132, // $806D + 132, // $806E + 132, // $806F + 132, // $8070 + 132, // $8071 + 132, // $8072 + 132, // $8073 + 132, // $8074 + 132, // $8075 + 132, // $8076 + 132, // $8077 + 132, // $8078 + 132, // $8079 + 132, // $807A + 132, // $807B + 132, // $807C + 132, // $807D + 132, // $807E + 132, // $807F + 132, // $8080 + 132, // $8081 + 132, // $8082 + 132, // $8083 + 132, // $8084 + 132, // $8085 + 132, // $8086 + 132, // $8087 + 132, // $8088 + 132, // $8089 + 132, // $808A + 132, // $808B + 132, // $808C + 132, // $808D + 132, // $808E + 132, // $808F + 132, // $8090 + 132, // $8091 + 132, // $8092 + 132, // $8093 + 132, // $8094 + 132, // $8095 + 132, // $8096 + 132, // $8097 + 132, // $8098 + 132, // $8099 + 132, // $809A + 132, // $809B + 132, // $809C + 132, // $809D + 132, // $809E + 132, // $809F + 132, // $80A0 + 132, // $80A1 + 132, // $80A2 + 132, // $80A3 + 132, // $80A4 + 132, // $80A5 + 132, // $80A6 + 132, // $80A7 + 132, // $80A8 + 132, // $80A9 + 132, // $80AA + 132, // $80AB + 132, // $80AC + 132, // $80AD + 132, // $80AE + 132, // $80AF + 132, // $80B0 + 132, // $80B1 + 132, // $80B2 + 132, // $80B3 + 132, // $80B4 + 132, // $80B5 + 132, // $80B6 + 132, // $80B7 + 132, // $80B8 + 132, // $80B9 + 132, // $80BA + 132, // $80BB + 132, // $80BC + 132, // $80BD + 132, // $80BE + 132, // $80BF + 132, // $80C0 + 132, // $80C1 + 132, // $80C2 + 132, // $80C3 + 132, // $80C4 + 132, // $80C5 + 132, // $80C6 + 132, // $80C7 + 132, // $80C8 + 132, // $80C9 + 132, // $80CA + 132, // $80CB + 132, // $80CC + 132, // $80CD + 132, // $80CE + 132, // $80CF + 132, // $80D0 + 132, // $80D1 + 132, // $80D2 + 132, // $80D3 + 132, // $80D4 + 132, // $80D5 + 132, // $80D6 + 132, // $80D7 + 132, // $80D8 + 132, // $80D9 + 132, // $80DA + 132, // $80DB + 132, // $80DC + 132, // $80DD + 132, // $80DE + 132, // $80DF + 132, // $80E0 + 132, // $80E1 + 132, // $80E2 + 132, // $80E3 + 132, // $80E4 + 132, // $80E5 + 132, // $80E6 + 132, // $80E7 + 132, // $80E8 + 132, // $80E9 + 132, // $80EA + 132, // $80EB + 132, // $80EC + 132, // $80ED + 132, // $80EE + 132, // $80EF + 132, // $80F0 + 132, // $80F1 + 132, // $80F2 + 132, // $80F3 + 132, // $80F4 + 132, // $80F5 + 132, // $80F6 + 132, // $80F7 + 132, // $80F8 + 132, // $80F9 + 132, // $80FA + 132, // $80FB + 132, // $80FC + 132, // $80FD + 132, // $80FE + 132, // $80FF + 132, // $8100 + 132, // $8101 + 132, // $8102 + 132, // $8103 + 132, // $8104 + 132, // $8105 + 132, // $8106 + 132, // $8107 + 132, // $8108 + 132, // $8109 + 132, // $810A + 132, // $810B + 132, // $810C + 132, // $810D + 132, // $810E + 132, // $810F + 132, // $8110 + 132, // $8111 + 132, // $8112 + 132, // $8113 + 132, // $8114 + 132, // $8115 + 132, // $8116 + 132, // $8117 + 132, // $8118 + 132, // $8119 + 132, // $811A + 132, // $811B + 132, // $811C + 132, // $811D + 132, // $811E + 132, // $811F + 132, // $8120 + 132, // $8121 + 132, // $8122 + 132, // $8123 + 132, // $8124 + 132, // $8125 + 132, // $8126 + 132, // $8127 + 132, // $8128 + 132, // $8129 + 132, // $812A + 132, // $812B + 132, // $812C + 132, // $812D + 132, // $812E + 132, // $812F + 132, // $8130 + 132, // $8131 + 132, // $8132 + 132, // $8133 + 132, // $8134 + 132, // $8135 + 132, // $8136 + 132, // $8137 + 132, // $8138 + 132, // $8139 + 132, // $813A + 132, // $813B + 132, // $813C + 132, // $813D + 132, // $813E + 132, // $813F + 132, // $8140 + 132, // $8141 + 132, // $8142 + 132, // $8143 + 132, // $8144 + 132, // $8145 + 132, // $8146 + 132, // $8147 + 132, // $8148 + 132, // $8149 + 132, // $814A + 132, // $814B + 132, // $814C + 132, // $814D + 132, // $814E + 132, // $814F + 132, // $8150 + 132, // $8151 + 132, // $8152 + 132, // $8153 + 132, // $8154 + 132, // $8155 + 132, // $8156 + 132, // $8157 + 132, // $8158 + 132, // $8159 + 132, // $815A + 132, // $815B + 132, // $815C + 132, // $815D + 132, // $815E + 132, // $815F + 132, // $8160 + 132, // $8161 + 132, // $8162 + 132, // $8163 + 132, // $8164 + 132, // $8165 + 132, // $8166 + 132, // $8167 + 132, // $8168 + 132, // $8169 + 132, // $816A + 132, // $816B + 132, // $816C + 132, // $816D + 132, // $816E + 132, // $816F + 132, // $8170 + 132, // $8171 + 132, // $8172 + 132, // $8173 + 132, // $8174 + 132, // $8175 + 132, // $8176 + 132, // $8177 + 132, // $8178 + 132, // $8179 + 132, // $817A + 132, // $817B + 132, // $817C + 132, // $817D + 132, // $817E + 132, // $817F + 132, // $8180 + 132, // $8181 + 132, // $8182 + 132, // $8183 + 132, // $8184 + 132, // $8185 + 132, // $8186 + 132, // $8187 + 132, // $8188 + 132, // $8189 + 132, // $818A + 132, // $818B + 132, // $818C + 132, // $818D + 132, // $818E + 132, // $818F + 132, // $8190 + 132, // $8191 + 132, // $8192 + 132, // $8193 + 132, // $8194 + 132, // $8195 + 132, // $8196 + 132, // $8197 + 132, // $8198 + 132, // $8199 + 132, // $819A + 132, // $819B + 132, // $819C + 132, // $819D + 132, // $819E + 132, // $819F + 132, // $81A0 + 132, // $81A1 + 132, // $81A2 + 132, // $81A3 + 132, // $81A4 + 132, // $81A5 + 132, // $81A6 + 132, // $81A7 + 132, // $81A8 + 132, // $81A9 + 132, // $81AA + 132, // $81AB + 132, // $81AC + 132, // $81AD + 132, // $81AE + 132, // $81AF + 132, // $81B0 + 132, // $81B1 + 132, // $81B2 + 132, // $81B3 + 132, // $81B4 + 132, // $81B5 + 132, // $81B6 + 132, // $81B7 + 132, // $81B8 + 132, // $81B9 + 132, // $81BA + 132, // $81BB + 132, // $81BC + 132, // $81BD + 132, // $81BE + 132, // $81BF + 132, // $81C0 + 132, // $81C1 + 132, // $81C2 + 132, // $81C3 + 132, // $81C4 + 132, // $81C5 + 132, // $81C6 + 132, // $81C7 + 132, // $81C8 + 132, // $81C9 + 132, // $81CA + 132, // $81CB + 132, // $81CC + 132, // $81CD + 132, // $81CE + 132, // $81CF + 132, // $81D0 + 132, // $81D1 + 132, // $81D2 + 132, // $81D3 + 132, // $81D4 + 132, // $81D5 + 132, // $81D6 + 132, // $81D7 + 132, // $81D8 + 132, // $81D9 + 132, // $81DA + 132, // $81DB + 132, // $81DC + 132, // $81DD + 132, // $81DE + 132, // $81DF + 132, // $81E0 + 132, // $81E1 + 132, // $81E2 + 132, // $81E3 + 132, // $81E4 + 132, // $81E5 + 132, // $81E6 + 132, // $81E7 + 132, // $81E8 + 132, // $81E9 + 132, // $81EA + 132, // $81EB + 132, // $81EC + 132, // $81ED + 132, // $81EE + 132, // $81EF + 132, // $81F0 + 132, // $81F1 + 132, // $81F2 + 132, // $81F3 + 132, // $81F4 + 132, // $81F5 + 132, // $81F6 + 132, // $81F7 + 132, // $81F8 + 132, // $81F9 + 132, // $81FA + 132, // $81FB + 132, // $81FC + 132, // $81FD + 132, // $81FE + 132, // $81FF + 132, // $8200 + 132, // $8201 + 132, // $8202 + 132, // $8203 + 132, // $8204 + 132, // $8205 + 132, // $8206 + 132, // $8207 + 132, // $8208 + 132, // $8209 + 132, // $820A + 132, // $820B + 132, // $820C + 132, // $820D + 132, // $820E + 132, // $820F + 132, // $8210 + 132, // $8211 + 132, // $8212 + 132, // $8213 + 132, // $8214 + 132, // $8215 + 132, // $8216 + 132, // $8217 + 132, // $8218 + 132, // $8219 + 132, // $821A + 132, // $821B + 132, // $821C + 132, // $821D + 132, // $821E + 132, // $821F + 132, // $8220 + 132, // $8221 + 132, // $8222 + 132, // $8223 + 132, // $8224 + 132, // $8225 + 132, // $8226 + 132, // $8227 + 132, // $8228 + 132, // $8229 + 132, // $822A + 132, // $822B + 132, // $822C + 132, // $822D + 132, // $822E + 132, // $822F + 132, // $8230 + 132, // $8231 + 132, // $8232 + 132, // $8233 + 132, // $8234 + 132, // $8235 + 132, // $8236 + 132, // $8237 + 132, // $8238 + 132, // $8239 + 132, // $823A + 132, // $823B + 132, // $823C + 132, // $823D + 132, // $823E + 132, // $823F + 132, // $8240 + 132, // $8241 + 132, // $8242 + 132, // $8243 + 132, // $8244 + 132, // $8245 + 132, // $8246 + 132, // $8247 + 132, // $8248 + 132, // $8249 + 132, // $824A + 132, // $824B + 132, // $824C + 132, // $824D + 132, // $824E + 132, // $824F + 132, // $8250 + 132, // $8251 + 132, // $8252 + 132, // $8253 + 132, // $8254 + 132, // $8255 + 132, // $8256 + 132, // $8257 + 132, // $8258 + 132, // $8259 + 132, // $825A + 132, // $825B + 132, // $825C + 132, // $825D + 132, // $825E + 132, // $825F + 132, // $8260 + 132, // $8261 + 132, // $8262 + 132, // $8263 + 132, // $8264 + 132, // $8265 + 132, // $8266 + 132, // $8267 + 132, // $8268 + 132, // $8269 + 132, // $826A + 132, // $826B + 132, // $826C + 132, // $826D + 132, // $826E + 132, // $826F + 132, // $8270 + 132, // $8271 + 132, // $8272 + 132, // $8273 + 132, // $8274 + 132, // $8275 + 132, // $8276 + 132, // $8277 + 132, // $8278 + 132, // $8279 + 132, // $827A + 132, // $827B + 132, // $827C + 132, // $827D + 132, // $827E + 132, // $827F + 132, // $8280 + 132, // $8281 + 132, // $8282 + 132, // $8283 + 132, // $8284 + 132, // $8285 + 132, // $8286 + 132, // $8287 + 132, // $8288 + 132, // $8289 + 132, // $828A + 132, // $828B + 132, // $828C + 132, // $828D + 132, // $828E + 132, // $828F + 132, // $8290 + 132, // $8291 + 132, // $8292 + 132, // $8293 + 132, // $8294 + 132, // $8295 + 132, // $8296 + 132, // $8297 + 132, // $8298 + 132, // $8299 + 132, // $829A + 132, // $829B + 132, // $829C + 132, // $829D + 132, // $829E + 132, // $829F + 132, // $82A0 + 132, // $82A1 + 132, // $82A2 + 132, // $82A3 + 132, // $82A4 + 132, // $82A5 + 132, // $82A6 + 132, // $82A7 + 132, // $82A8 + 132, // $82A9 + 132, // $82AA + 132, // $82AB + 132, // $82AC + 132, // $82AD + 132, // $82AE + 132, // $82AF + 132, // $82B0 + 132, // $82B1 + 132, // $82B2 + 132, // $82B3 + 132, // $82B4 + 132, // $82B5 + 132, // $82B6 + 132, // $82B7 + 132, // $82B8 + 132, // $82B9 + 132, // $82BA + 132, // $82BB + 132, // $82BC + 132, // $82BD + 132, // $82BE + 132, // $82BF + 132, // $82C0 + 132, // $82C1 + 132, // $82C2 + 132, // $82C3 + 132, // $82C4 + 132, // $82C5 + 132, // $82C6 + 132, // $82C7 + 132, // $82C8 + 132, // $82C9 + 132, // $82CA + 132, // $82CB + 132, // $82CC + 132, // $82CD + 132, // $82CE + 132, // $82CF + 132, // $82D0 + 132, // $82D1 + 132, // $82D2 + 132, // $82D3 + 132, // $82D4 + 132, // $82D5 + 132, // $82D6 + 132, // $82D7 + 132, // $82D8 + 132, // $82D9 + 132, // $82DA + 132, // $82DB + 132, // $82DC + 132, // $82DD + 132, // $82DE + 132, // $82DF + 132, // $82E0 + 132, // $82E1 + 132, // $82E2 + 132, // $82E3 + 132, // $82E4 + 132, // $82E5 + 132, // $82E6 + 132, // $82E7 + 132, // $82E8 + 132, // $82E9 + 132, // $82EA + 132, // $82EB + 132, // $82EC + 132, // $82ED + 132, // $82EE + 132, // $82EF + 132, // $82F0 + 132, // $82F1 + 132, // $82F2 + 132, // $82F3 + 132, // $82F4 + 132, // $82F5 + 132, // $82F6 + 132, // $82F7 + 132, // $82F8 + 132, // $82F9 + 132, // $82FA + 132, // $82FB + 132, // $82FC + 132, // $82FD + 132, // $82FE + 132, // $82FF + 132, // $8300 + 132, // $8301 + 132, // $8302 + 132, // $8303 + 132, // $8304 + 132, // $8305 + 132, // $8306 + 132, // $8307 + 132, // $8308 + 132, // $8309 + 132, // $830A + 132, // $830B + 132, // $830C + 132, // $830D + 132, // $830E + 132, // $830F + 132, // $8310 + 132, // $8311 + 132, // $8312 + 132, // $8313 + 132, // $8314 + 132, // $8315 + 132, // $8316 + 132, // $8317 + 132, // $8318 + 132, // $8319 + 132, // $831A + 132, // $831B + 132, // $831C + 132, // $831D + 132, // $831E + 132, // $831F + 132, // $8320 + 132, // $8321 + 132, // $8322 + 132, // $8323 + 132, // $8324 + 132, // $8325 + 132, // $8326 + 132, // $8327 + 132, // $8328 + 132, // $8329 + 132, // $832A + 132, // $832B + 132, // $832C + 132, // $832D + 132, // $832E + 132, // $832F + 132, // $8330 + 132, // $8331 + 132, // $8332 + 132, // $8333 + 132, // $8334 + 132, // $8335 + 132, // $8336 + 132, // $8337 + 132, // $8338 + 132, // $8339 + 132, // $833A + 132, // $833B + 132, // $833C + 132, // $833D + 132, // $833E + 132, // $833F + 132, // $8340 + 132, // $8341 + 132, // $8342 + 132, // $8343 + 132, // $8344 + 132, // $8345 + 132, // $8346 + 132, // $8347 + 132, // $8348 + 132, // $8349 + 132, // $834A + 132, // $834B + 132, // $834C + 132, // $834D + 132, // $834E + 132, // $834F + 132, // $8350 + 132, // $8351 + 132, // $8352 + 132, // $8353 + 132, // $8354 + 132, // $8355 + 132, // $8356 + 132, // $8357 + 132, // $8358 + 132, // $8359 + 132, // $835A + 132, // $835B + 132, // $835C + 132, // $835D + 132, // $835E + 132, // $835F + 132, // $8360 + 132, // $8361 + 132, // $8362 + 132, // $8363 + 132, // $8364 + 132, // $8365 + 132, // $8366 + 132, // $8367 + 132, // $8368 + 132, // $8369 + 132, // $836A + 132, // $836B + 132, // $836C + 132, // $836D + 132, // $836E + 132, // $836F + 132, // $8370 + 132, // $8371 + 132, // $8372 + 132, // $8373 + 132, // $8374 + 132, // $8375 + 132, // $8376 + 132, // $8377 + 132, // $8378 + 132, // $8379 + 132, // $837A + 132, // $837B + 132, // $837C + 132, // $837D + 132, // $837E + 132, // $837F + 132, // $8380 + 132, // $8381 + 132, // $8382 + 132, // $8383 + 132, // $8384 + 132, // $8385 + 132, // $8386 + 132, // $8387 + 132, // $8388 + 132, // $8389 + 132, // $838A + 132, // $838B + 132, // $838C + 132, // $838D + 132, // $838E + 132, // $838F + 132, // $8390 + 132, // $8391 + 132, // $8392 + 132, // $8393 + 132, // $8394 + 132, // $8395 + 132, // $8396 + 132, // $8397 + 132, // $8398 + 132, // $8399 + 132, // $839A + 132, // $839B + 132, // $839C + 132, // $839D + 132, // $839E + 132, // $839F + 132, // $83A0 + 132, // $83A1 + 132, // $83A2 + 132, // $83A3 + 132, // $83A4 + 132, // $83A5 + 132, // $83A6 + 132, // $83A7 + 132, // $83A8 + 132, // $83A9 + 132, // $83AA + 132, // $83AB + 132, // $83AC + 132, // $83AD + 132, // $83AE + 132, // $83AF + 132, // $83B0 + 132, // $83B1 + 132, // $83B2 + 132, // $83B3 + 132, // $83B4 + 132, // $83B5 + 132, // $83B6 + 132, // $83B7 + 132, // $83B8 + 132, // $83B9 + 132, // $83BA + 132, // $83BB + 132, // $83BC + 132, // $83BD + 132, // $83BE + 132, // $83BF + 132, // $83C0 + 132, // $83C1 + 132, // $83C2 + 132, // $83C3 + 132, // $83C4 + 132, // $83C5 + 132, // $83C6 + 132, // $83C7 + 132, // $83C8 + 132, // $83C9 + 132, // $83CA + 132, // $83CB + 132, // $83CC + 132, // $83CD + 132, // $83CE + 132, // $83CF + 132, // $83D0 + 132, // $83D1 + 132, // $83D2 + 132, // $83D3 + 132, // $83D4 + 132, // $83D5 + 132, // $83D6 + 132, // $83D7 + 132, // $83D8 + 132, // $83D9 + 132, // $83DA + 132, // $83DB + 132, // $83DC + 132, // $83DD + 132, // $83DE + 132, // $83DF + 132, // $83E0 + 132, // $83E1 + 132, // $83E2 + 132, // $83E3 + 132, // $83E4 + 132, // $83E5 + 132, // $83E6 + 132, // $83E7 + 132, // $83E8 + 132, // $83E9 + 132, // $83EA + 132, // $83EB + 132, // $83EC + 132, // $83ED + 132, // $83EE + 132, // $83EF + 132, // $83F0 + 132, // $83F1 + 132, // $83F2 + 132, // $83F3 + 132, // $83F4 + 132, // $83F5 + 132, // $83F6 + 132, // $83F7 + 132, // $83F8 + 132, // $83F9 + 132, // $83FA + 132, // $83FB + 132, // $83FC + 132, // $83FD + 132, // $83FE + 132, // $83FF + 132, // $8400 + 132, // $8401 + 132, // $8402 + 132, // $8403 + 132, // $8404 + 132, // $8405 + 132, // $8406 + 132, // $8407 + 132, // $8408 + 132, // $8409 + 132, // $840A + 132, // $840B + 132, // $840C + 132, // $840D + 132, // $840E + 132, // $840F + 132, // $8410 + 132, // $8411 + 132, // $8412 + 132, // $8413 + 132, // $8414 + 132, // $8415 + 132, // $8416 + 132, // $8417 + 132, // $8418 + 132, // $8419 + 132, // $841A + 132, // $841B + 132, // $841C + 132, // $841D + 132, // $841E + 132, // $841F + 132, // $8420 + 132, // $8421 + 132, // $8422 + 132, // $8423 + 132, // $8424 + 132, // $8425 + 132, // $8426 + 132, // $8427 + 132, // $8428 + 132, // $8429 + 132, // $842A + 132, // $842B + 132, // $842C + 132, // $842D + 132, // $842E + 132, // $842F + 132, // $8430 + 132, // $8431 + 132, // $8432 + 132, // $8433 + 132, // $8434 + 132, // $8435 + 132, // $8436 + 132, // $8437 + 132, // $8438 + 132, // $8439 + 132, // $843A + 132, // $843B + 132, // $843C + 132, // $843D + 132, // $843E + 132, // $843F + 132, // $8440 + 132, // $8441 + 132, // $8442 + 132, // $8443 + 132, // $8444 + 132, // $8445 + 132, // $8446 + 132, // $8447 + 132, // $8448 + 132, // $8449 + 132, // $844A + 132, // $844B + 132, // $844C + 132, // $844D + 132, // $844E + 132, // $844F + 132, // $8450 + 132, // $8451 + 132, // $8452 + 132, // $8453 + 132, // $8454 + 132, // $8455 + 132, // $8456 + 132, // $8457 + 132, // $8458 + 132, // $8459 + 132, // $845A + 132, // $845B + 132, // $845C + 132, // $845D + 132, // $845E + 132, // $845F + 132, // $8460 + 132, // $8461 + 132, // $8462 + 132, // $8463 + 132, // $8464 + 132, // $8465 + 132, // $8466 + 132, // $8467 + 132, // $8468 + 132, // $8469 + 132, // $846A + 132, // $846B + 132, // $846C + 132, // $846D + 132, // $846E + 132, // $846F + 132, // $8470 + 132, // $8471 + 132, // $8472 + 132, // $8473 + 132, // $8474 + 132, // $8475 + 132, // $8476 + 132, // $8477 + 132, // $8478 + 132, // $8479 + 132, // $847A + 132, // $847B + 132, // $847C + 132, // $847D + 132, // $847E + 132, // $847F + 132, // $8480 + 132, // $8481 + 132, // $8482 + 132, // $8483 + 132, // $8484 + 132, // $8485 + 132, // $8486 + 132, // $8487 + 132, // $8488 + 132, // $8489 + 132, // $848A + 132, // $848B + 132, // $848C + 132, // $848D + 132, // $848E + 132, // $848F + 132, // $8490 + 132, // $8491 + 132, // $8492 + 132, // $8493 + 132, // $8494 + 132, // $8495 + 132, // $8496 + 132, // $8497 + 132, // $8498 + 132, // $8499 + 132, // $849A + 132, // $849B + 132, // $849C + 132, // $849D + 132, // $849E + 132, // $849F + 132, // $84A0 + 132, // $84A1 + 132, // $84A2 + 132, // $84A3 + 132, // $84A4 + 132, // $84A5 + 132, // $84A6 + 132, // $84A7 + 132, // $84A8 + 132, // $84A9 + 132, // $84AA + 132, // $84AB + 132, // $84AC + 132, // $84AD + 132, // $84AE + 132, // $84AF + 132, // $84B0 + 132, // $84B1 + 132, // $84B2 + 132, // $84B3 + 132, // $84B4 + 132, // $84B5 + 132, // $84B6 + 132, // $84B7 + 132, // $84B8 + 132, // $84B9 + 132, // $84BA + 132, // $84BB + 132, // $84BC + 132, // $84BD + 132, // $84BE + 132, // $84BF + 132, // $84C0 + 132, // $84C1 + 132, // $84C2 + 132, // $84C3 + 132, // $84C4 + 132, // $84C5 + 132, // $84C6 + 132, // $84C7 + 132, // $84C8 + 132, // $84C9 + 132, // $84CA + 132, // $84CB + 132, // $84CC + 132, // $84CD + 132, // $84CE + 132, // $84CF + 132, // $84D0 + 132, // $84D1 + 132, // $84D2 + 132, // $84D3 + 132, // $84D4 + 132, // $84D5 + 132, // $84D6 + 132, // $84D7 + 132, // $84D8 + 132, // $84D9 + 132, // $84DA + 132, // $84DB + 132, // $84DC + 132, // $84DD + 132, // $84DE + 132, // $84DF + 132, // $84E0 + 132, // $84E1 + 132, // $84E2 + 132, // $84E3 + 132, // $84E4 + 132, // $84E5 + 132, // $84E6 + 132, // $84E7 + 132, // $84E8 + 132, // $84E9 + 132, // $84EA + 132, // $84EB + 132, // $84EC + 132, // $84ED + 132, // $84EE + 132, // $84EF + 132, // $84F0 + 132, // $84F1 + 132, // $84F2 + 132, // $84F3 + 132, // $84F4 + 132, // $84F5 + 132, // $84F6 + 132, // $84F7 + 132, // $84F8 + 132, // $84F9 + 132, // $84FA + 132, // $84FB + 132, // $84FC + 132, // $84FD + 132, // $84FE + 132, // $84FF + 132, // $8500 + 132, // $8501 + 132, // $8502 + 132, // $8503 + 132, // $8504 + 132, // $8505 + 132, // $8506 + 132, // $8507 + 132, // $8508 + 132, // $8509 + 132, // $850A + 132, // $850B + 132, // $850C + 132, // $850D + 132, // $850E + 132, // $850F + 132, // $8510 + 132, // $8511 + 132, // $8512 + 132, // $8513 + 132, // $8514 + 132, // $8515 + 132, // $8516 + 132, // $8517 + 132, // $8518 + 132, // $8519 + 132, // $851A + 132, // $851B + 132, // $851C + 132, // $851D + 132, // $851E + 132, // $851F + 132, // $8520 + 132, // $8521 + 132, // $8522 + 132, // $8523 + 132, // $8524 + 132, // $8525 + 132, // $8526 + 132, // $8527 + 132, // $8528 + 132, // $8529 + 132, // $852A + 132, // $852B + 132, // $852C + 132, // $852D + 132, // $852E + 132, // $852F + 132, // $8530 + 132, // $8531 + 132, // $8532 + 132, // $8533 + 132, // $8534 + 132, // $8535 + 132, // $8536 + 132, // $8537 + 132, // $8538 + 132, // $8539 + 132, // $853A + 132, // $853B + 132, // $853C + 132, // $853D + 132, // $853E + 132, // $853F + 132, // $8540 + 132, // $8541 + 132, // $8542 + 132, // $8543 + 132, // $8544 + 132, // $8545 + 132, // $8546 + 132, // $8547 + 132, // $8548 + 132, // $8549 + 132, // $854A + 132, // $854B + 132, // $854C + 132, // $854D + 132, // $854E + 132, // $854F + 132, // $8550 + 132, // $8551 + 132, // $8552 + 132, // $8553 + 132, // $8554 + 132, // $8555 + 132, // $8556 + 132, // $8557 + 132, // $8558 + 132, // $8559 + 132, // $855A + 132, // $855B + 132, // $855C + 132, // $855D + 132, // $855E + 132, // $855F + 132, // $8560 + 132, // $8561 + 132, // $8562 + 132, // $8563 + 132, // $8564 + 132, // $8565 + 132, // $8566 + 132, // $8567 + 132, // $8568 + 132, // $8569 + 132, // $856A + 132, // $856B + 132, // $856C + 132, // $856D + 132, // $856E + 132, // $856F + 132, // $8570 + 132, // $8571 + 132, // $8572 + 132, // $8573 + 132, // $8574 + 132, // $8575 + 132, // $8576 + 132, // $8577 + 132, // $8578 + 132, // $8579 + 132, // $857A + 132, // $857B + 132, // $857C + 132, // $857D + 132, // $857E + 132, // $857F + 132, // $8580 + 132, // $8581 + 132, // $8582 + 132, // $8583 + 132, // $8584 + 132, // $8585 + 132, // $8586 + 132, // $8587 + 132, // $8588 + 132, // $8589 + 132, // $858A + 132, // $858B + 132, // $858C + 132, // $858D + 132, // $858E + 132, // $858F + 132, // $8590 + 132, // $8591 + 132, // $8592 + 132, // $8593 + 132, // $8594 + 132, // $8595 + 132, // $8596 + 132, // $8597 + 132, // $8598 + 132, // $8599 + 132, // $859A + 132, // $859B + 132, // $859C + 132, // $859D + 132, // $859E + 132, // $859F + 132, // $85A0 + 132, // $85A1 + 132, // $85A2 + 132, // $85A3 + 132, // $85A4 + 132, // $85A5 + 132, // $85A6 + 132, // $85A7 + 132, // $85A8 + 132, // $85A9 + 132, // $85AA + 132, // $85AB + 132, // $85AC + 132, // $85AD + 132, // $85AE + 132, // $85AF + 132, // $85B0 + 132, // $85B1 + 132, // $85B2 + 132, // $85B3 + 132, // $85B4 + 132, // $85B5 + 132, // $85B6 + 132, // $85B7 + 132, // $85B8 + 132, // $85B9 + 132, // $85BA + 132, // $85BB + 132, // $85BC + 132, // $85BD + 132, // $85BE + 132, // $85BF + 132, // $85C0 + 132, // $85C1 + 132, // $85C2 + 132, // $85C3 + 132, // $85C4 + 132, // $85C5 + 132, // $85C6 + 132, // $85C7 + 132, // $85C8 + 132, // $85C9 + 132, // $85CA + 132, // $85CB + 132, // $85CC + 132, // $85CD + 132, // $85CE + 132, // $85CF + 132, // $85D0 + 132, // $85D1 + 132, // $85D2 + 132, // $85D3 + 132, // $85D4 + 132, // $85D5 + 132, // $85D6 + 132, // $85D7 + 132, // $85D8 + 132, // $85D9 + 132, // $85DA + 132, // $85DB + 132, // $85DC + 132, // $85DD + 132, // $85DE + 132, // $85DF + 132, // $85E0 + 132, // $85E1 + 132, // $85E2 + 132, // $85E3 + 132, // $85E4 + 132, // $85E5 + 132, // $85E6 + 132, // $85E7 + 132, // $85E8 + 132, // $85E9 + 132, // $85EA + 132, // $85EB + 132, // $85EC + 132, // $85ED + 132, // $85EE + 132, // $85EF + 132, // $85F0 + 132, // $85F1 + 132, // $85F2 + 132, // $85F3 + 132, // $85F4 + 132, // $85F5 + 132, // $85F6 + 132, // $85F7 + 132, // $85F8 + 132, // $85F9 + 132, // $85FA + 132, // $85FB + 132, // $85FC + 132, // $85FD + 132, // $85FE + 132, // $85FF + 132, // $8600 + 132, // $8601 + 132, // $8602 + 132, // $8603 + 132, // $8604 + 132, // $8605 + 132, // $8606 + 132, // $8607 + 132, // $8608 + 132, // $8609 + 132, // $860A + 132, // $860B + 132, // $860C + 132, // $860D + 132, // $860E + 132, // $860F + 132, // $8610 + 132, // $8611 + 132, // $8612 + 132, // $8613 + 132, // $8614 + 132, // $8615 + 132, // $8616 + 132, // $8617 + 132, // $8618 + 132, // $8619 + 132, // $861A + 132, // $861B + 132, // $861C + 132, // $861D + 132, // $861E + 132, // $861F + 132, // $8620 + 132, // $8621 + 132, // $8622 + 132, // $8623 + 132, // $8624 + 132, // $8625 + 132, // $8626 + 132, // $8627 + 132, // $8628 + 132, // $8629 + 132, // $862A + 132, // $862B + 132, // $862C + 132, // $862D + 132, // $862E + 132, // $862F + 132, // $8630 + 132, // $8631 + 132, // $8632 + 132, // $8633 + 132, // $8634 + 132, // $8635 + 132, // $8636 + 132, // $8637 + 132, // $8638 + 132, // $8639 + 132, // $863A + 132, // $863B + 132, // $863C + 132, // $863D + 132, // $863E + 132, // $863F + 132, // $8640 + 132, // $8641 + 132, // $8642 + 132, // $8643 + 132, // $8644 + 132, // $8645 + 132, // $8646 + 132, // $8647 + 132, // $8648 + 132, // $8649 + 132, // $864A + 132, // $864B + 132, // $864C + 132, // $864D + 132, // $864E + 132, // $864F + 132, // $8650 + 132, // $8651 + 132, // $8652 + 132, // $8653 + 132, // $8654 + 132, // $8655 + 132, // $8656 + 132, // $8657 + 132, // $8658 + 132, // $8659 + 132, // $865A + 132, // $865B + 132, // $865C + 132, // $865D + 132, // $865E + 132, // $865F + 132, // $8660 + 132, // $8661 + 132, // $8662 + 132, // $8663 + 132, // $8664 + 132, // $8665 + 132, // $8666 + 132, // $8667 + 132, // $8668 + 132, // $8669 + 132, // $866A + 132, // $866B + 132, // $866C + 132, // $866D + 132, // $866E + 132, // $866F + 132, // $8670 + 132, // $8671 + 132, // $8672 + 132, // $8673 + 132, // $8674 + 132, // $8675 + 132, // $8676 + 132, // $8677 + 132, // $8678 + 132, // $8679 + 132, // $867A + 132, // $867B + 132, // $867C + 132, // $867D + 132, // $867E + 132, // $867F + 132, // $8680 + 132, // $8681 + 132, // $8682 + 132, // $8683 + 132, // $8684 + 132, // $8685 + 132, // $8686 + 132, // $8687 + 132, // $8688 + 132, // $8689 + 132, // $868A + 132, // $868B + 132, // $868C + 132, // $868D + 132, // $868E + 132, // $868F + 132, // $8690 + 132, // $8691 + 132, // $8692 + 132, // $8693 + 132, // $8694 + 132, // $8695 + 132, // $8696 + 132, // $8697 + 132, // $8698 + 132, // $8699 + 132, // $869A + 132, // $869B + 132, // $869C + 132, // $869D + 132, // $869E + 132, // $869F + 132, // $86A0 + 132, // $86A1 + 132, // $86A2 + 132, // $86A3 + 132, // $86A4 + 132, // $86A5 + 132, // $86A6 + 132, // $86A7 + 132, // $86A8 + 132, // $86A9 + 132, // $86AA + 132, // $86AB + 132, // $86AC + 132, // $86AD + 132, // $86AE + 132, // $86AF + 132, // $86B0 + 132, // $86B1 + 132, // $86B2 + 132, // $86B3 + 132, // $86B4 + 132, // $86B5 + 132, // $86B6 + 132, // $86B7 + 132, // $86B8 + 132, // $86B9 + 132, // $86BA + 132, // $86BB + 132, // $86BC + 132, // $86BD + 132, // $86BE + 132, // $86BF + 132, // $86C0 + 132, // $86C1 + 132, // $86C2 + 132, // $86C3 + 132, // $86C4 + 132, // $86C5 + 132, // $86C6 + 132, // $86C7 + 132, // $86C8 + 132, // $86C9 + 132, // $86CA + 132, // $86CB + 132, // $86CC + 132, // $86CD + 132, // $86CE + 132, // $86CF + 132, // $86D0 + 132, // $86D1 + 132, // $86D2 + 132, // $86D3 + 132, // $86D4 + 132, // $86D5 + 132, // $86D6 + 132, // $86D7 + 132, // $86D8 + 132, // $86D9 + 132, // $86DA + 132, // $86DB + 132, // $86DC + 132, // $86DD + 132, // $86DE + 132, // $86DF + 132, // $86E0 + 132, // $86E1 + 132, // $86E2 + 132, // $86E3 + 132, // $86E4 + 132, // $86E5 + 132, // $86E6 + 132, // $86E7 + 132, // $86E8 + 132, // $86E9 + 132, // $86EA + 132, // $86EB + 132, // $86EC + 132, // $86ED + 132, // $86EE + 132, // $86EF + 132, // $86F0 + 132, // $86F1 + 132, // $86F2 + 132, // $86F3 + 132, // $86F4 + 132, // $86F5 + 132, // $86F6 + 132, // $86F7 + 132, // $86F8 + 132, // $86F9 + 132, // $86FA + 132, // $86FB + 132, // $86FC + 132, // $86FD + 132, // $86FE + 132, // $86FF + 132, // $8700 + 132, // $8701 + 132, // $8702 + 132, // $8703 + 132, // $8704 + 132, // $8705 + 132, // $8706 + 132, // $8707 + 132, // $8708 + 132, // $8709 + 132, // $870A + 132, // $870B + 132, // $870C + 132, // $870D + 132, // $870E + 132, // $870F + 132, // $8710 + 132, // $8711 + 132, // $8712 + 132, // $8713 + 132, // $8714 + 132, // $8715 + 132, // $8716 + 132, // $8717 + 132, // $8718 + 132, // $8719 + 132, // $871A + 132, // $871B + 132, // $871C + 132, // $871D + 132, // $871E + 132, // $871F + 132, // $8720 + 132, // $8721 + 132, // $8722 + 132, // $8723 + 132, // $8724 + 132, // $8725 + 132, // $8726 + 132, // $8727 + 132, // $8728 + 132, // $8729 + 132, // $872A + 132, // $872B + 132, // $872C + 132, // $872D + 132, // $872E + 132, // $872F + 132, // $8730 + 132, // $8731 + 132, // $8732 + 132, // $8733 + 132, // $8734 + 132, // $8735 + 132, // $8736 + 132, // $8737 + 132, // $8738 + 132, // $8739 + 132, // $873A + 132, // $873B + 132, // $873C + 132, // $873D + 132, // $873E + 132, // $873F + 132, // $8740 + 132, // $8741 + 132, // $8742 + 132, // $8743 + 132, // $8744 + 132, // $8745 + 132, // $8746 + 132, // $8747 + 132, // $8748 + 132, // $8749 + 132, // $874A + 132, // $874B + 132, // $874C + 132, // $874D + 132, // $874E + 132, // $874F + 132, // $8750 + 132, // $8751 + 132, // $8752 + 132, // $8753 + 132, // $8754 + 132, // $8755 + 132, // $8756 + 132, // $8757 + 132, // $8758 + 132, // $8759 + 132, // $875A + 132, // $875B + 132, // $875C + 132, // $875D + 132, // $875E + 132, // $875F + 132, // $8760 + 132, // $8761 + 132, // $8762 + 132, // $8763 + 132, // $8764 + 132, // $8765 + 132, // $8766 + 132, // $8767 + 132, // $8768 + 132, // $8769 + 132, // $876A + 132, // $876B + 132, // $876C + 132, // $876D + 132, // $876E + 132, // $876F + 132, // $8770 + 132, // $8771 + 132, // $8772 + 132, // $8773 + 132, // $8774 + 132, // $8775 + 132, // $8776 + 132, // $8777 + 132, // $8778 + 132, // $8779 + 132, // $877A + 132, // $877B + 132, // $877C + 132, // $877D + 132, // $877E + 132, // $877F + 132, // $8780 + 132, // $8781 + 132, // $8782 + 132, // $8783 + 132, // $8784 + 132, // $8785 + 132, // $8786 + 132, // $8787 + 132, // $8788 + 132, // $8789 + 132, // $878A + 132, // $878B + 132, // $878C + 132, // $878D + 132, // $878E + 132, // $878F + 132, // $8790 + 132, // $8791 + 132, // $8792 + 132, // $8793 + 132, // $8794 + 132, // $8795 + 132, // $8796 + 132, // $8797 + 132, // $8798 + 132, // $8799 + 132, // $879A + 132, // $879B + 132, // $879C + 132, // $879D + 132, // $879E + 132, // $879F + 132, // $87A0 + 132, // $87A1 + 132, // $87A2 + 132, // $87A3 + 132, // $87A4 + 132, // $87A5 + 132, // $87A6 + 132, // $87A7 + 132, // $87A8 + 132, // $87A9 + 132, // $87AA + 132, // $87AB + 132, // $87AC + 132, // $87AD + 132, // $87AE + 132, // $87AF + 132, // $87B0 + 132, // $87B1 + 132, // $87B2 + 132, // $87B3 + 132, // $87B4 + 132, // $87B5 + 132, // $87B6 + 132, // $87B7 + 132, // $87B8 + 132, // $87B9 + 132, // $87BA + 132, // $87BB + 132, // $87BC + 132, // $87BD + 132, // $87BE + 132, // $87BF + 132, // $87C0 + 132, // $87C1 + 132, // $87C2 + 132, // $87C3 + 132, // $87C4 + 132, // $87C5 + 132, // $87C6 + 132, // $87C7 + 132, // $87C8 + 132, // $87C9 + 132, // $87CA + 132, // $87CB + 132, // $87CC + 132, // $87CD + 132, // $87CE + 132, // $87CF + 132, // $87D0 + 132, // $87D1 + 132, // $87D2 + 132, // $87D3 + 132, // $87D4 + 132, // $87D5 + 132, // $87D6 + 132, // $87D7 + 132, // $87D8 + 132, // $87D9 + 132, // $87DA + 132, // $87DB + 132, // $87DC + 132, // $87DD + 132, // $87DE + 132, // $87DF + 132, // $87E0 + 132, // $87E1 + 132, // $87E2 + 132, // $87E3 + 132, // $87E4 + 132, // $87E5 + 132, // $87E6 + 132, // $87E7 + 132, // $87E8 + 132, // $87E9 + 132, // $87EA + 132, // $87EB + 132, // $87EC + 132, // $87ED + 132, // $87EE + 132, // $87EF + 132, // $87F0 + 132, // $87F1 + 132, // $87F2 + 132, // $87F3 + 132, // $87F4 + 132, // $87F5 + 132, // $87F6 + 132, // $87F7 + 132, // $87F8 + 132, // $87F9 + 132, // $87FA + 132, // $87FB + 132, // $87FC + 132, // $87FD + 132, // $87FE + 132, // $87FF + 132, // $8800 + 132, // $8801 + 132, // $8802 + 132, // $8803 + 132, // $8804 + 132, // $8805 + 132, // $8806 + 132, // $8807 + 132, // $8808 + 132, // $8809 + 132, // $880A + 132, // $880B + 132, // $880C + 132, // $880D + 132, // $880E + 132, // $880F + 132, // $8810 + 132, // $8811 + 132, // $8812 + 132, // $8813 + 132, // $8814 + 132, // $8815 + 132, // $8816 + 132, // $8817 + 132, // $8818 + 132, // $8819 + 132, // $881A + 132, // $881B + 132, // $881C + 132, // $881D + 132, // $881E + 132, // $881F + 132, // $8820 + 132, // $8821 + 132, // $8822 + 132, // $8823 + 132, // $8824 + 132, // $8825 + 132, // $8826 + 132, // $8827 + 132, // $8828 + 132, // $8829 + 132, // $882A + 132, // $882B + 132, // $882C + 132, // $882D + 132, // $882E + 132, // $882F + 132, // $8830 + 132, // $8831 + 132, // $8832 + 132, // $8833 + 132, // $8834 + 132, // $8835 + 132, // $8836 + 132, // $8837 + 132, // $8838 + 132, // $8839 + 132, // $883A + 132, // $883B + 132, // $883C + 132, // $883D + 132, // $883E + 132, // $883F + 132, // $8840 + 132, // $8841 + 132, // $8842 + 132, // $8843 + 132, // $8844 + 132, // $8845 + 132, // $8846 + 132, // $8847 + 132, // $8848 + 132, // $8849 + 132, // $884A + 132, // $884B + 132, // $884C + 132, // $884D + 132, // $884E + 132, // $884F + 132, // $8850 + 132, // $8851 + 132, // $8852 + 132, // $8853 + 132, // $8854 + 132, // $8855 + 132, // $8856 + 132, // $8857 + 132, // $8858 + 132, // $8859 + 132, // $885A + 132, // $885B + 132, // $885C + 132, // $885D + 132, // $885E + 132, // $885F + 132, // $8860 + 132, // $8861 + 132, // $8862 + 132, // $8863 + 132, // $8864 + 132, // $8865 + 132, // $8866 + 132, // $8867 + 132, // $8868 + 132, // $8869 + 132, // $886A + 132, // $886B + 132, // $886C + 132, // $886D + 132, // $886E + 132, // $886F + 132, // $8870 + 132, // $8871 + 132, // $8872 + 132, // $8873 + 132, // $8874 + 132, // $8875 + 132, // $8876 + 132, // $8877 + 132, // $8878 + 132, // $8879 + 132, // $887A + 132, // $887B + 132, // $887C + 132, // $887D + 132, // $887E + 132, // $887F + 132, // $8880 + 132, // $8881 + 132, // $8882 + 132, // $8883 + 132, // $8884 + 132, // $8885 + 132, // $8886 + 132, // $8887 + 132, // $8888 + 132, // $8889 + 132, // $888A + 132, // $888B + 132, // $888C + 132, // $888D + 132, // $888E + 132, // $888F + 132, // $8890 + 132, // $8891 + 132, // $8892 + 132, // $8893 + 132, // $8894 + 132, // $8895 + 132, // $8896 + 132, // $8897 + 132, // $8898 + 132, // $8899 + 132, // $889A + 132, // $889B + 132, // $889C + 132, // $889D + 132, // $889E + 132, // $889F + 132, // $88A0 + 132, // $88A1 + 132, // $88A2 + 132, // $88A3 + 132, // $88A4 + 132, // $88A5 + 132, // $88A6 + 132, // $88A7 + 132, // $88A8 + 132, // $88A9 + 132, // $88AA + 132, // $88AB + 132, // $88AC + 132, // $88AD + 132, // $88AE + 132, // $88AF + 132, // $88B0 + 132, // $88B1 + 132, // $88B2 + 132, // $88B3 + 132, // $88B4 + 132, // $88B5 + 132, // $88B6 + 132, // $88B7 + 132, // $88B8 + 132, // $88B9 + 132, // $88BA + 132, // $88BB + 132, // $88BC + 132, // $88BD + 132, // $88BE + 132, // $88BF + 132, // $88C0 + 132, // $88C1 + 132, // $88C2 + 132, // $88C3 + 132, // $88C4 + 132, // $88C5 + 132, // $88C6 + 132, // $88C7 + 132, // $88C8 + 132, // $88C9 + 132, // $88CA + 132, // $88CB + 132, // $88CC + 132, // $88CD + 132, // $88CE + 132, // $88CF + 132, // $88D0 + 132, // $88D1 + 132, // $88D2 + 132, // $88D3 + 132, // $88D4 + 132, // $88D5 + 132, // $88D6 + 132, // $88D7 + 132, // $88D8 + 132, // $88D9 + 132, // $88DA + 132, // $88DB + 132, // $88DC + 132, // $88DD + 132, // $88DE + 132, // $88DF + 132, // $88E0 + 132, // $88E1 + 132, // $88E2 + 132, // $88E3 + 132, // $88E4 + 132, // $88E5 + 132, // $88E6 + 132, // $88E7 + 132, // $88E8 + 132, // $88E9 + 132, // $88EA + 132, // $88EB + 132, // $88EC + 132, // $88ED + 132, // $88EE + 132, // $88EF + 132, // $88F0 + 132, // $88F1 + 132, // $88F2 + 132, // $88F3 + 132, // $88F4 + 132, // $88F5 + 132, // $88F6 + 132, // $88F7 + 132, // $88F8 + 132, // $88F9 + 132, // $88FA + 132, // $88FB + 132, // $88FC + 132, // $88FD + 132, // $88FE + 132, // $88FF + 132, // $8900 + 132, // $8901 + 132, // $8902 + 132, // $8903 + 132, // $8904 + 132, // $8905 + 132, // $8906 + 132, // $8907 + 132, // $8908 + 132, // $8909 + 132, // $890A + 132, // $890B + 132, // $890C + 132, // $890D + 132, // $890E + 132, // $890F + 132, // $8910 + 132, // $8911 + 132, // $8912 + 132, // $8913 + 132, // $8914 + 132, // $8915 + 132, // $8916 + 132, // $8917 + 132, // $8918 + 132, // $8919 + 132, // $891A + 132, // $891B + 132, // $891C + 132, // $891D + 132, // $891E + 132, // $891F + 132, // $8920 + 132, // $8921 + 132, // $8922 + 132, // $8923 + 132, // $8924 + 132, // $8925 + 132, // $8926 + 132, // $8927 + 132, // $8928 + 132, // $8929 + 132, // $892A + 132, // $892B + 132, // $892C + 132, // $892D + 132, // $892E + 132, // $892F + 132, // $8930 + 132, // $8931 + 132, // $8932 + 132, // $8933 + 132, // $8934 + 132, // $8935 + 132, // $8936 + 132, // $8937 + 132, // $8938 + 132, // $8939 + 132, // $893A + 132, // $893B + 132, // $893C + 132, // $893D + 132, // $893E + 132, // $893F + 132, // $8940 + 132, // $8941 + 132, // $8942 + 132, // $8943 + 132, // $8944 + 132, // $8945 + 132, // $8946 + 132, // $8947 + 132, // $8948 + 132, // $8949 + 132, // $894A + 132, // $894B + 132, // $894C + 132, // $894D + 132, // $894E + 132, // $894F + 132, // $8950 + 132, // $8951 + 132, // $8952 + 132, // $8953 + 132, // $8954 + 132, // $8955 + 132, // $8956 + 132, // $8957 + 132, // $8958 + 132, // $8959 + 132, // $895A + 132, // $895B + 132, // $895C + 132, // $895D + 132, // $895E + 132, // $895F + 132, // $8960 + 132, // $8961 + 132, // $8962 + 132, // $8963 + 132, // $8964 + 132, // $8965 + 132, // $8966 + 132, // $8967 + 132, // $8968 + 132, // $8969 + 132, // $896A + 132, // $896B + 132, // $896C + 132, // $896D + 132, // $896E + 132, // $896F + 132, // $8970 + 132, // $8971 + 132, // $8972 + 132, // $8973 + 132, // $8974 + 132, // $8975 + 132, // $8976 + 132, // $8977 + 132, // $8978 + 132, // $8979 + 132, // $897A + 132, // $897B + 132, // $897C + 132, // $897D + 132, // $897E + 132, // $897F + 132, // $8980 + 132, // $8981 + 132, // $8982 + 132, // $8983 + 132, // $8984 + 132, // $8985 + 132, // $8986 + 132, // $8987 + 132, // $8988 + 132, // $8989 + 132, // $898A + 132, // $898B + 132, // $898C + 132, // $898D + 132, // $898E + 132, // $898F + 132, // $8990 + 132, // $8991 + 132, // $8992 + 132, // $8993 + 132, // $8994 + 132, // $8995 + 132, // $8996 + 132, // $8997 + 132, // $8998 + 132, // $8999 + 132, // $899A + 132, // $899B + 132, // $899C + 132, // $899D + 132, // $899E + 132, // $899F + 132, // $89A0 + 132, // $89A1 + 132, // $89A2 + 132, // $89A3 + 132, // $89A4 + 132, // $89A5 + 132, // $89A6 + 132, // $89A7 + 132, // $89A8 + 132, // $89A9 + 132, // $89AA + 132, // $89AB + 132, // $89AC + 132, // $89AD + 132, // $89AE + 132, // $89AF + 132, // $89B0 + 132, // $89B1 + 132, // $89B2 + 132, // $89B3 + 132, // $89B4 + 132, // $89B5 + 132, // $89B6 + 132, // $89B7 + 132, // $89B8 + 132, // $89B9 + 132, // $89BA + 132, // $89BB + 132, // $89BC + 132, // $89BD + 132, // $89BE + 132, // $89BF + 132, // $89C0 + 132, // $89C1 + 132, // $89C2 + 132, // $89C3 + 132, // $89C4 + 132, // $89C5 + 132, // $89C6 + 132, // $89C7 + 132, // $89C8 + 132, // $89C9 + 132, // $89CA + 132, // $89CB + 132, // $89CC + 132, // $89CD + 132, // $89CE + 132, // $89CF + 132, // $89D0 + 132, // $89D1 + 132, // $89D2 + 132, // $89D3 + 132, // $89D4 + 132, // $89D5 + 132, // $89D6 + 132, // $89D7 + 132, // $89D8 + 132, // $89D9 + 132, // $89DA + 132, // $89DB + 132, // $89DC + 132, // $89DD + 132, // $89DE + 132, // $89DF + 132, // $89E0 + 132, // $89E1 + 132, // $89E2 + 132, // $89E3 + 132, // $89E4 + 132, // $89E5 + 132, // $89E6 + 132, // $89E7 + 132, // $89E8 + 132, // $89E9 + 132, // $89EA + 132, // $89EB + 132, // $89EC + 132, // $89ED + 132, // $89EE + 132, // $89EF + 132, // $89F0 + 132, // $89F1 + 132, // $89F2 + 132, // $89F3 + 132, // $89F4 + 132, // $89F5 + 132, // $89F6 + 132, // $89F7 + 132, // $89F8 + 132, // $89F9 + 132, // $89FA + 132, // $89FB + 132, // $89FC + 132, // $89FD + 132, // $89FE + 132, // $89FF + 132, // $8A00 + 132, // $8A01 + 132, // $8A02 + 132, // $8A03 + 132, // $8A04 + 132, // $8A05 + 132, // $8A06 + 132, // $8A07 + 132, // $8A08 + 132, // $8A09 + 132, // $8A0A + 132, // $8A0B + 132, // $8A0C + 132, // $8A0D + 132, // $8A0E + 132, // $8A0F + 132, // $8A10 + 132, // $8A11 + 132, // $8A12 + 132, // $8A13 + 132, // $8A14 + 132, // $8A15 + 132, // $8A16 + 132, // $8A17 + 132, // $8A18 + 132, // $8A19 + 132, // $8A1A + 132, // $8A1B + 132, // $8A1C + 132, // $8A1D + 132, // $8A1E + 132, // $8A1F + 132, // $8A20 + 132, // $8A21 + 132, // $8A22 + 132, // $8A23 + 132, // $8A24 + 132, // $8A25 + 132, // $8A26 + 132, // $8A27 + 132, // $8A28 + 132, // $8A29 + 132, // $8A2A + 132, // $8A2B + 132, // $8A2C + 132, // $8A2D + 132, // $8A2E + 132, // $8A2F + 132, // $8A30 + 132, // $8A31 + 132, // $8A32 + 132, // $8A33 + 132, // $8A34 + 132, // $8A35 + 132, // $8A36 + 132, // $8A37 + 132, // $8A38 + 132, // $8A39 + 132, // $8A3A + 132, // $8A3B + 132, // $8A3C + 132, // $8A3D + 132, // $8A3E + 132, // $8A3F + 132, // $8A40 + 132, // $8A41 + 132, // $8A42 + 132, // $8A43 + 132, // $8A44 + 132, // $8A45 + 132, // $8A46 + 132, // $8A47 + 132, // $8A48 + 132, // $8A49 + 132, // $8A4A + 132, // $8A4B + 132, // $8A4C + 132, // $8A4D + 132, // $8A4E + 132, // $8A4F + 132, // $8A50 + 132, // $8A51 + 132, // $8A52 + 132, // $8A53 + 132, // $8A54 + 132, // $8A55 + 132, // $8A56 + 132, // $8A57 + 132, // $8A58 + 132, // $8A59 + 132, // $8A5A + 132, // $8A5B + 132, // $8A5C + 132, // $8A5D + 132, // $8A5E + 132, // $8A5F + 132, // $8A60 + 132, // $8A61 + 132, // $8A62 + 132, // $8A63 + 132, // $8A64 + 132, // $8A65 + 132, // $8A66 + 132, // $8A67 + 132, // $8A68 + 132, // $8A69 + 132, // $8A6A + 132, // $8A6B + 132, // $8A6C + 132, // $8A6D + 132, // $8A6E + 132, // $8A6F + 132, // $8A70 + 132, // $8A71 + 132, // $8A72 + 132, // $8A73 + 132, // $8A74 + 132, // $8A75 + 132, // $8A76 + 132, // $8A77 + 132, // $8A78 + 132, // $8A79 + 132, // $8A7A + 132, // $8A7B + 132, // $8A7C + 132, // $8A7D + 132, // $8A7E + 132, // $8A7F + 132, // $8A80 + 132, // $8A81 + 132, // $8A82 + 132, // $8A83 + 132, // $8A84 + 132, // $8A85 + 132, // $8A86 + 132, // $8A87 + 132, // $8A88 + 132, // $8A89 + 132, // $8A8A + 132, // $8A8B + 132, // $8A8C + 132, // $8A8D + 132, // $8A8E + 132, // $8A8F + 132, // $8A90 + 132, // $8A91 + 132, // $8A92 + 132, // $8A93 + 132, // $8A94 + 132, // $8A95 + 132, // $8A96 + 132, // $8A97 + 132, // $8A98 + 132, // $8A99 + 132, // $8A9A + 132, // $8A9B + 132, // $8A9C + 132, // $8A9D + 132, // $8A9E + 132, // $8A9F + 132, // $8AA0 + 132, // $8AA1 + 132, // $8AA2 + 132, // $8AA3 + 132, // $8AA4 + 132, // $8AA5 + 132, // $8AA6 + 132, // $8AA7 + 132, // $8AA8 + 132, // $8AA9 + 132, // $8AAA + 132, // $8AAB + 132, // $8AAC + 132, // $8AAD + 132, // $8AAE + 132, // $8AAF + 132, // $8AB0 + 132, // $8AB1 + 132, // $8AB2 + 132, // $8AB3 + 132, // $8AB4 + 132, // $8AB5 + 132, // $8AB6 + 132, // $8AB7 + 132, // $8AB8 + 132, // $8AB9 + 132, // $8ABA + 132, // $8ABB + 132, // $8ABC + 132, // $8ABD + 132, // $8ABE + 132, // $8ABF + 132, // $8AC0 + 132, // $8AC1 + 132, // $8AC2 + 132, // $8AC3 + 132, // $8AC4 + 132, // $8AC5 + 132, // $8AC6 + 132, // $8AC7 + 132, // $8AC8 + 132, // $8AC9 + 132, // $8ACA + 132, // $8ACB + 132, // $8ACC + 132, // $8ACD + 132, // $8ACE + 132, // $8ACF + 132, // $8AD0 + 132, // $8AD1 + 132, // $8AD2 + 132, // $8AD3 + 132, // $8AD4 + 132, // $8AD5 + 132, // $8AD6 + 132, // $8AD7 + 132, // $8AD8 + 132, // $8AD9 + 132, // $8ADA + 132, // $8ADB + 132, // $8ADC + 132, // $8ADD + 132, // $8ADE + 132, // $8ADF + 132, // $8AE0 + 132, // $8AE1 + 132, // $8AE2 + 132, // $8AE3 + 132, // $8AE4 + 132, // $8AE5 + 132, // $8AE6 + 132, // $8AE7 + 132, // $8AE8 + 132, // $8AE9 + 132, // $8AEA + 132, // $8AEB + 132, // $8AEC + 132, // $8AED + 132, // $8AEE + 132, // $8AEF + 132, // $8AF0 + 132, // $8AF1 + 132, // $8AF2 + 132, // $8AF3 + 132, // $8AF4 + 132, // $8AF5 + 132, // $8AF6 + 132, // $8AF7 + 132, // $8AF8 + 132, // $8AF9 + 132, // $8AFA + 132, // $8AFB + 132, // $8AFC + 132, // $8AFD + 132, // $8AFE + 132, // $8AFF + 132, // $8B00 + 132, // $8B01 + 132, // $8B02 + 132, // $8B03 + 132, // $8B04 + 132, // $8B05 + 132, // $8B06 + 132, // $8B07 + 132, // $8B08 + 132, // $8B09 + 132, // $8B0A + 132, // $8B0B + 132, // $8B0C + 132, // $8B0D + 132, // $8B0E + 132, // $8B0F + 132, // $8B10 + 132, // $8B11 + 132, // $8B12 + 132, // $8B13 + 132, // $8B14 + 132, // $8B15 + 132, // $8B16 + 132, // $8B17 + 132, // $8B18 + 132, // $8B19 + 132, // $8B1A + 132, // $8B1B + 132, // $8B1C + 132, // $8B1D + 132, // $8B1E + 132, // $8B1F + 132, // $8B20 + 132, // $8B21 + 132, // $8B22 + 132, // $8B23 + 132, // $8B24 + 132, // $8B25 + 132, // $8B26 + 132, // $8B27 + 132, // $8B28 + 132, // $8B29 + 132, // $8B2A + 132, // $8B2B + 132, // $8B2C + 132, // $8B2D + 132, // $8B2E + 132, // $8B2F + 132, // $8B30 + 132, // $8B31 + 132, // $8B32 + 132, // $8B33 + 132, // $8B34 + 132, // $8B35 + 132, // $8B36 + 132, // $8B37 + 132, // $8B38 + 132, // $8B39 + 132, // $8B3A + 132, // $8B3B + 132, // $8B3C + 132, // $8B3D + 132, // $8B3E + 132, // $8B3F + 132, // $8B40 + 132, // $8B41 + 132, // $8B42 + 132, // $8B43 + 132, // $8B44 + 132, // $8B45 + 132, // $8B46 + 132, // $8B47 + 132, // $8B48 + 132, // $8B49 + 132, // $8B4A + 132, // $8B4B + 132, // $8B4C + 132, // $8B4D + 132, // $8B4E + 132, // $8B4F + 132, // $8B50 + 132, // $8B51 + 132, // $8B52 + 132, // $8B53 + 132, // $8B54 + 132, // $8B55 + 132, // $8B56 + 132, // $8B57 + 132, // $8B58 + 132, // $8B59 + 132, // $8B5A + 132, // $8B5B + 132, // $8B5C + 132, // $8B5D + 132, // $8B5E + 132, // $8B5F + 132, // $8B60 + 132, // $8B61 + 132, // $8B62 + 132, // $8B63 + 132, // $8B64 + 132, // $8B65 + 132, // $8B66 + 132, // $8B67 + 132, // $8B68 + 132, // $8B69 + 132, // $8B6A + 132, // $8B6B + 132, // $8B6C + 132, // $8B6D + 132, // $8B6E + 132, // $8B6F + 132, // $8B70 + 132, // $8B71 + 132, // $8B72 + 132, // $8B73 + 132, // $8B74 + 132, // $8B75 + 132, // $8B76 + 132, // $8B77 + 132, // $8B78 + 132, // $8B79 + 132, // $8B7A + 132, // $8B7B + 132, // $8B7C + 132, // $8B7D + 132, // $8B7E + 132, // $8B7F + 132, // $8B80 + 132, // $8B81 + 132, // $8B82 + 132, // $8B83 + 132, // $8B84 + 132, // $8B85 + 132, // $8B86 + 132, // $8B87 + 132, // $8B88 + 132, // $8B89 + 132, // $8B8A + 132, // $8B8B + 132, // $8B8C + 132, // $8B8D + 132, // $8B8E + 132, // $8B8F + 132, // $8B90 + 132, // $8B91 + 132, // $8B92 + 132, // $8B93 + 132, // $8B94 + 132, // $8B95 + 132, // $8B96 + 132, // $8B97 + 132, // $8B98 + 132, // $8B99 + 132, // $8B9A + 132, // $8B9B + 132, // $8B9C + 132, // $8B9D + 132, // $8B9E + 132, // $8B9F + 132, // $8BA0 + 132, // $8BA1 + 132, // $8BA2 + 132, // $8BA3 + 132, // $8BA4 + 132, // $8BA5 + 132, // $8BA6 + 132, // $8BA7 + 132, // $8BA8 + 132, // $8BA9 + 132, // $8BAA + 132, // $8BAB + 132, // $8BAC + 132, // $8BAD + 132, // $8BAE + 132, // $8BAF + 132, // $8BB0 + 132, // $8BB1 + 132, // $8BB2 + 132, // $8BB3 + 132, // $8BB4 + 132, // $8BB5 + 132, // $8BB6 + 132, // $8BB7 + 132, // $8BB8 + 132, // $8BB9 + 132, // $8BBA + 132, // $8BBB + 132, // $8BBC + 132, // $8BBD + 132, // $8BBE + 132, // $8BBF + 132, // $8BC0 + 132, // $8BC1 + 132, // $8BC2 + 132, // $8BC3 + 132, // $8BC4 + 132, // $8BC5 + 132, // $8BC6 + 132, // $8BC7 + 132, // $8BC8 + 132, // $8BC9 + 132, // $8BCA + 132, // $8BCB + 132, // $8BCC + 132, // $8BCD + 132, // $8BCE + 132, // $8BCF + 132, // $8BD0 + 132, // $8BD1 + 132, // $8BD2 + 132, // $8BD3 + 132, // $8BD4 + 132, // $8BD5 + 132, // $8BD6 + 132, // $8BD7 + 132, // $8BD8 + 132, // $8BD9 + 132, // $8BDA + 132, // $8BDB + 132, // $8BDC + 132, // $8BDD + 132, // $8BDE + 132, // $8BDF + 132, // $8BE0 + 132, // $8BE1 + 132, // $8BE2 + 132, // $8BE3 + 132, // $8BE4 + 132, // $8BE5 + 132, // $8BE6 + 132, // $8BE7 + 132, // $8BE8 + 132, // $8BE9 + 132, // $8BEA + 132, // $8BEB + 132, // $8BEC + 132, // $8BED + 132, // $8BEE + 132, // $8BEF + 132, // $8BF0 + 132, // $8BF1 + 132, // $8BF2 + 132, // $8BF3 + 132, // $8BF4 + 132, // $8BF5 + 132, // $8BF6 + 132, // $8BF7 + 132, // $8BF8 + 132, // $8BF9 + 132, // $8BFA + 132, // $8BFB + 132, // $8BFC + 132, // $8BFD + 132, // $8BFE + 132, // $8BFF + 132, // $8C00 + 132, // $8C01 + 132, // $8C02 + 132, // $8C03 + 132, // $8C04 + 132, // $8C05 + 132, // $8C06 + 132, // $8C07 + 132, // $8C08 + 132, // $8C09 + 132, // $8C0A + 132, // $8C0B + 132, // $8C0C + 132, // $8C0D + 132, // $8C0E + 132, // $8C0F + 132, // $8C10 + 132, // $8C11 + 132, // $8C12 + 132, // $8C13 + 132, // $8C14 + 132, // $8C15 + 132, // $8C16 + 132, // $8C17 + 132, // $8C18 + 132, // $8C19 + 132, // $8C1A + 132, // $8C1B + 132, // $8C1C + 132, // $8C1D + 132, // $8C1E + 132, // $8C1F + 132, // $8C20 + 132, // $8C21 + 132, // $8C22 + 132, // $8C23 + 132, // $8C24 + 132, // $8C25 + 132, // $8C26 + 132, // $8C27 + 132, // $8C28 + 132, // $8C29 + 132, // $8C2A + 132, // $8C2B + 132, // $8C2C + 132, // $8C2D + 132, // $8C2E + 132, // $8C2F + 132, // $8C30 + 132, // $8C31 + 132, // $8C32 + 132, // $8C33 + 132, // $8C34 + 132, // $8C35 + 132, // $8C36 + 132, // $8C37 + 132, // $8C38 + 132, // $8C39 + 132, // $8C3A + 132, // $8C3B + 132, // $8C3C + 132, // $8C3D + 132, // $8C3E + 132, // $8C3F + 132, // $8C40 + 132, // $8C41 + 132, // $8C42 + 132, // $8C43 + 132, // $8C44 + 132, // $8C45 + 132, // $8C46 + 132, // $8C47 + 132, // $8C48 + 132, // $8C49 + 132, // $8C4A + 132, // $8C4B + 132, // $8C4C + 132, // $8C4D + 132, // $8C4E + 132, // $8C4F + 132, // $8C50 + 132, // $8C51 + 132, // $8C52 + 132, // $8C53 + 132, // $8C54 + 132, // $8C55 + 132, // $8C56 + 132, // $8C57 + 132, // $8C58 + 132, // $8C59 + 132, // $8C5A + 132, // $8C5B + 132, // $8C5C + 132, // $8C5D + 132, // $8C5E + 132, // $8C5F + 132, // $8C60 + 132, // $8C61 + 132, // $8C62 + 132, // $8C63 + 132, // $8C64 + 132, // $8C65 + 132, // $8C66 + 132, // $8C67 + 132, // $8C68 + 132, // $8C69 + 132, // $8C6A + 132, // $8C6B + 132, // $8C6C + 132, // $8C6D + 132, // $8C6E + 132, // $8C6F + 132, // $8C70 + 132, // $8C71 + 132, // $8C72 + 132, // $8C73 + 132, // $8C74 + 132, // $8C75 + 132, // $8C76 + 132, // $8C77 + 132, // $8C78 + 132, // $8C79 + 132, // $8C7A + 132, // $8C7B + 132, // $8C7C + 132, // $8C7D + 132, // $8C7E + 132, // $8C7F + 132, // $8C80 + 132, // $8C81 + 132, // $8C82 + 132, // $8C83 + 132, // $8C84 + 132, // $8C85 + 132, // $8C86 + 132, // $8C87 + 132, // $8C88 + 132, // $8C89 + 132, // $8C8A + 132, // $8C8B + 132, // $8C8C + 132, // $8C8D + 132, // $8C8E + 132, // $8C8F + 132, // $8C90 + 132, // $8C91 + 132, // $8C92 + 132, // $8C93 + 132, // $8C94 + 132, // $8C95 + 132, // $8C96 + 132, // $8C97 + 132, // $8C98 + 132, // $8C99 + 132, // $8C9A + 132, // $8C9B + 132, // $8C9C + 132, // $8C9D + 132, // $8C9E + 132, // $8C9F + 132, // $8CA0 + 132, // $8CA1 + 132, // $8CA2 + 132, // $8CA3 + 132, // $8CA4 + 132, // $8CA5 + 132, // $8CA6 + 132, // $8CA7 + 132, // $8CA8 + 132, // $8CA9 + 132, // $8CAA + 132, // $8CAB + 132, // $8CAC + 132, // $8CAD + 132, // $8CAE + 132, // $8CAF + 132, // $8CB0 + 132, // $8CB1 + 132, // $8CB2 + 132, // $8CB3 + 132, // $8CB4 + 132, // $8CB5 + 132, // $8CB6 + 132, // $8CB7 + 132, // $8CB8 + 132, // $8CB9 + 132, // $8CBA + 132, // $8CBB + 132, // $8CBC + 132, // $8CBD + 132, // $8CBE + 132, // $8CBF + 132, // $8CC0 + 132, // $8CC1 + 132, // $8CC2 + 132, // $8CC3 + 132, // $8CC4 + 132, // $8CC5 + 132, // $8CC6 + 132, // $8CC7 + 132, // $8CC8 + 132, // $8CC9 + 132, // $8CCA + 132, // $8CCB + 132, // $8CCC + 132, // $8CCD + 132, // $8CCE + 132, // $8CCF + 132, // $8CD0 + 132, // $8CD1 + 132, // $8CD2 + 132, // $8CD3 + 132, // $8CD4 + 132, // $8CD5 + 132, // $8CD6 + 132, // $8CD7 + 132, // $8CD8 + 132, // $8CD9 + 132, // $8CDA + 132, // $8CDB + 132, // $8CDC + 132, // $8CDD + 132, // $8CDE + 132, // $8CDF + 132, // $8CE0 + 132, // $8CE1 + 132, // $8CE2 + 132, // $8CE3 + 132, // $8CE4 + 132, // $8CE5 + 132, // $8CE6 + 132, // $8CE7 + 132, // $8CE8 + 132, // $8CE9 + 132, // $8CEA + 132, // $8CEB + 132, // $8CEC + 132, // $8CED + 132, // $8CEE + 132, // $8CEF + 132, // $8CF0 + 132, // $8CF1 + 132, // $8CF2 + 132, // $8CF3 + 132, // $8CF4 + 132, // $8CF5 + 132, // $8CF6 + 132, // $8CF7 + 132, // $8CF8 + 132, // $8CF9 + 132, // $8CFA + 132, // $8CFB + 132, // $8CFC + 132, // $8CFD + 132, // $8CFE + 132, // $8CFF + 132, // $8D00 + 132, // $8D01 + 132, // $8D02 + 132, // $8D03 + 132, // $8D04 + 132, // $8D05 + 132, // $8D06 + 132, // $8D07 + 132, // $8D08 + 132, // $8D09 + 132, // $8D0A + 132, // $8D0B + 132, // $8D0C + 132, // $8D0D + 132, // $8D0E + 132, // $8D0F + 132, // $8D10 + 132, // $8D11 + 132, // $8D12 + 132, // $8D13 + 132, // $8D14 + 132, // $8D15 + 132, // $8D16 + 132, // $8D17 + 132, // $8D18 + 132, // $8D19 + 132, // $8D1A + 132, // $8D1B + 132, // $8D1C + 132, // $8D1D + 132, // $8D1E + 132, // $8D1F + 132, // $8D20 + 132, // $8D21 + 132, // $8D22 + 132, // $8D23 + 132, // $8D24 + 132, // $8D25 + 132, // $8D26 + 132, // $8D27 + 132, // $8D28 + 132, // $8D29 + 132, // $8D2A + 132, // $8D2B + 132, // $8D2C + 132, // $8D2D + 132, // $8D2E + 132, // $8D2F + 132, // $8D30 + 132, // $8D31 + 132, // $8D32 + 132, // $8D33 + 132, // $8D34 + 132, // $8D35 + 132, // $8D36 + 132, // $8D37 + 132, // $8D38 + 132, // $8D39 + 132, // $8D3A + 132, // $8D3B + 132, // $8D3C + 132, // $8D3D + 132, // $8D3E + 132, // $8D3F + 132, // $8D40 + 132, // $8D41 + 132, // $8D42 + 132, // $8D43 + 132, // $8D44 + 132, // $8D45 + 132, // $8D46 + 132, // $8D47 + 132, // $8D48 + 132, // $8D49 + 132, // $8D4A + 132, // $8D4B + 132, // $8D4C + 132, // $8D4D + 132, // $8D4E + 132, // $8D4F + 132, // $8D50 + 132, // $8D51 + 132, // $8D52 + 132, // $8D53 + 132, // $8D54 + 132, // $8D55 + 132, // $8D56 + 132, // $8D57 + 132, // $8D58 + 132, // $8D59 + 132, // $8D5A + 132, // $8D5B + 132, // $8D5C + 132, // $8D5D + 132, // $8D5E + 132, // $8D5F + 132, // $8D60 + 132, // $8D61 + 132, // $8D62 + 132, // $8D63 + 132, // $8D64 + 132, // $8D65 + 132, // $8D66 + 132, // $8D67 + 132, // $8D68 + 132, // $8D69 + 132, // $8D6A + 132, // $8D6B + 132, // $8D6C + 132, // $8D6D + 132, // $8D6E + 132, // $8D6F + 132, // $8D70 + 132, // $8D71 + 132, // $8D72 + 132, // $8D73 + 132, // $8D74 + 132, // $8D75 + 132, // $8D76 + 132, // $8D77 + 132, // $8D78 + 132, // $8D79 + 132, // $8D7A + 132, // $8D7B + 132, // $8D7C + 132, // $8D7D + 132, // $8D7E + 132, // $8D7F + 132, // $8D80 + 132, // $8D81 + 132, // $8D82 + 132, // $8D83 + 132, // $8D84 + 132, // $8D85 + 132, // $8D86 + 132, // $8D87 + 132, // $8D88 + 132, // $8D89 + 132, // $8D8A + 132, // $8D8B + 132, // $8D8C + 132, // $8D8D + 132, // $8D8E + 132, // $8D8F + 132, // $8D90 + 132, // $8D91 + 132, // $8D92 + 132, // $8D93 + 132, // $8D94 + 132, // $8D95 + 132, // $8D96 + 132, // $8D97 + 132, // $8D98 + 132, // $8D99 + 132, // $8D9A + 132, // $8D9B + 132, // $8D9C + 132, // $8D9D + 132, // $8D9E + 132, // $8D9F + 132, // $8DA0 + 132, // $8DA1 + 132, // $8DA2 + 132, // $8DA3 + 132, // $8DA4 + 132, // $8DA5 + 132, // $8DA6 + 132, // $8DA7 + 132, // $8DA8 + 132, // $8DA9 + 132, // $8DAA + 132, // $8DAB + 132, // $8DAC + 132, // $8DAD + 132, // $8DAE + 132, // $8DAF + 132, // $8DB0 + 132, // $8DB1 + 132, // $8DB2 + 132, // $8DB3 + 132, // $8DB4 + 132, // $8DB5 + 132, // $8DB6 + 132, // $8DB7 + 132, // $8DB8 + 132, // $8DB9 + 132, // $8DBA + 132, // $8DBB + 132, // $8DBC + 132, // $8DBD + 132, // $8DBE + 132, // $8DBF + 132, // $8DC0 + 132, // $8DC1 + 132, // $8DC2 + 132, // $8DC3 + 132, // $8DC4 + 132, // $8DC5 + 132, // $8DC6 + 132, // $8DC7 + 132, // $8DC8 + 132, // $8DC9 + 132, // $8DCA + 132, // $8DCB + 132, // $8DCC + 132, // $8DCD + 132, // $8DCE + 132, // $8DCF + 132, // $8DD0 + 132, // $8DD1 + 132, // $8DD2 + 132, // $8DD3 + 132, // $8DD4 + 132, // $8DD5 + 132, // $8DD6 + 132, // $8DD7 + 132, // $8DD8 + 132, // $8DD9 + 132, // $8DDA + 132, // $8DDB + 132, // $8DDC + 132, // $8DDD + 132, // $8DDE + 132, // $8DDF + 132, // $8DE0 + 132, // $8DE1 + 132, // $8DE2 + 132, // $8DE3 + 132, // $8DE4 + 132, // $8DE5 + 132, // $8DE6 + 132, // $8DE7 + 132, // $8DE8 + 132, // $8DE9 + 132, // $8DEA + 132, // $8DEB + 132, // $8DEC + 132, // $8DED + 132, // $8DEE + 132, // $8DEF + 132, // $8DF0 + 132, // $8DF1 + 132, // $8DF2 + 132, // $8DF3 + 132, // $8DF4 + 132, // $8DF5 + 132, // $8DF6 + 132, // $8DF7 + 132, // $8DF8 + 132, // $8DF9 + 132, // $8DFA + 132, // $8DFB + 132, // $8DFC + 132, // $8DFD + 132, // $8DFE + 132, // $8DFF + 132, // $8E00 + 132, // $8E01 + 132, // $8E02 + 132, // $8E03 + 132, // $8E04 + 132, // $8E05 + 132, // $8E06 + 132, // $8E07 + 132, // $8E08 + 132, // $8E09 + 132, // $8E0A + 132, // $8E0B + 132, // $8E0C + 132, // $8E0D + 132, // $8E0E + 132, // $8E0F + 132, // $8E10 + 132, // $8E11 + 132, // $8E12 + 132, // $8E13 + 132, // $8E14 + 132, // $8E15 + 132, // $8E16 + 132, // $8E17 + 132, // $8E18 + 132, // $8E19 + 132, // $8E1A + 132, // $8E1B + 132, // $8E1C + 132, // $8E1D + 132, // $8E1E + 132, // $8E1F + 132, // $8E20 + 132, // $8E21 + 132, // $8E22 + 132, // $8E23 + 132, // $8E24 + 132, // $8E25 + 132, // $8E26 + 132, // $8E27 + 132, // $8E28 + 132, // $8E29 + 132, // $8E2A + 132, // $8E2B + 132, // $8E2C + 132, // $8E2D + 132, // $8E2E + 132, // $8E2F + 132, // $8E30 + 132, // $8E31 + 132, // $8E32 + 132, // $8E33 + 132, // $8E34 + 132, // $8E35 + 132, // $8E36 + 132, // $8E37 + 132, // $8E38 + 132, // $8E39 + 132, // $8E3A + 132, // $8E3B + 132, // $8E3C + 132, // $8E3D + 132, // $8E3E + 132, // $8E3F + 132, // $8E40 + 132, // $8E41 + 132, // $8E42 + 132, // $8E43 + 132, // $8E44 + 132, // $8E45 + 132, // $8E46 + 132, // $8E47 + 132, // $8E48 + 132, // $8E49 + 132, // $8E4A + 132, // $8E4B + 132, // $8E4C + 132, // $8E4D + 132, // $8E4E + 132, // $8E4F + 132, // $8E50 + 132, // $8E51 + 132, // $8E52 + 132, // $8E53 + 132, // $8E54 + 132, // $8E55 + 132, // $8E56 + 132, // $8E57 + 132, // $8E58 + 132, // $8E59 + 132, // $8E5A + 132, // $8E5B + 132, // $8E5C + 132, // $8E5D + 132, // $8E5E + 132, // $8E5F + 132, // $8E60 + 132, // $8E61 + 132, // $8E62 + 132, // $8E63 + 132, // $8E64 + 132, // $8E65 + 132, // $8E66 + 132, // $8E67 + 132, // $8E68 + 132, // $8E69 + 132, // $8E6A + 132, // $8E6B + 132, // $8E6C + 132, // $8E6D + 132, // $8E6E + 132, // $8E6F + 132, // $8E70 + 132, // $8E71 + 132, // $8E72 + 132, // $8E73 + 132, // $8E74 + 132, // $8E75 + 132, // $8E76 + 132, // $8E77 + 132, // $8E78 + 132, // $8E79 + 132, // $8E7A + 132, // $8E7B + 132, // $8E7C + 132, // $8E7D + 132, // $8E7E + 132, // $8E7F + 132, // $8E80 + 132, // $8E81 + 132, // $8E82 + 132, // $8E83 + 132, // $8E84 + 132, // $8E85 + 132, // $8E86 + 132, // $8E87 + 132, // $8E88 + 132, // $8E89 + 132, // $8E8A + 132, // $8E8B + 132, // $8E8C + 132, // $8E8D + 132, // $8E8E + 132, // $8E8F + 132, // $8E90 + 132, // $8E91 + 132, // $8E92 + 132, // $8E93 + 132, // $8E94 + 132, // $8E95 + 132, // $8E96 + 132, // $8E97 + 132, // $8E98 + 132, // $8E99 + 132, // $8E9A + 132, // $8E9B + 132, // $8E9C + 132, // $8E9D + 132, // $8E9E + 132, // $8E9F + 132, // $8EA0 + 132, // $8EA1 + 132, // $8EA2 + 132, // $8EA3 + 132, // $8EA4 + 132, // $8EA5 + 132, // $8EA6 + 132, // $8EA7 + 132, // $8EA8 + 132, // $8EA9 + 132, // $8EAA + 132, // $8EAB + 132, // $8EAC + 132, // $8EAD + 132, // $8EAE + 132, // $8EAF + 132, // $8EB0 + 132, // $8EB1 + 132, // $8EB2 + 132, // $8EB3 + 132, // $8EB4 + 132, // $8EB5 + 132, // $8EB6 + 132, // $8EB7 + 132, // $8EB8 + 132, // $8EB9 + 132, // $8EBA + 132, // $8EBB + 132, // $8EBC + 132, // $8EBD + 132, // $8EBE + 132, // $8EBF + 132, // $8EC0 + 132, // $8EC1 + 132, // $8EC2 + 132, // $8EC3 + 132, // $8EC4 + 132, // $8EC5 + 132, // $8EC6 + 132, // $8EC7 + 132, // $8EC8 + 132, // $8EC9 + 132, // $8ECA + 132, // $8ECB + 132, // $8ECC + 132, // $8ECD + 132, // $8ECE + 132, // $8ECF + 132, // $8ED0 + 132, // $8ED1 + 132, // $8ED2 + 132, // $8ED3 + 132, // $8ED4 + 132, // $8ED5 + 132, // $8ED6 + 132, // $8ED7 + 132, // $8ED8 + 132, // $8ED9 + 132, // $8EDA + 132, // $8EDB + 132, // $8EDC + 132, // $8EDD + 132, // $8EDE + 132, // $8EDF + 132, // $8EE0 + 132, // $8EE1 + 132, // $8EE2 + 132, // $8EE3 + 132, // $8EE4 + 132, // $8EE5 + 132, // $8EE6 + 132, // $8EE7 + 132, // $8EE8 + 132, // $8EE9 + 132, // $8EEA + 132, // $8EEB + 132, // $8EEC + 132, // $8EED + 132, // $8EEE + 132, // $8EEF + 132, // $8EF0 + 132, // $8EF1 + 132, // $8EF2 + 132, // $8EF3 + 132, // $8EF4 + 132, // $8EF5 + 132, // $8EF6 + 132, // $8EF7 + 132, // $8EF8 + 132, // $8EF9 + 132, // $8EFA + 132, // $8EFB + 132, // $8EFC + 132, // $8EFD + 132, // $8EFE + 132, // $8EFF + 132, // $8F00 + 132, // $8F01 + 132, // $8F02 + 132, // $8F03 + 132, // $8F04 + 132, // $8F05 + 132, // $8F06 + 132, // $8F07 + 132, // $8F08 + 132, // $8F09 + 132, // $8F0A + 132, // $8F0B + 132, // $8F0C + 132, // $8F0D + 132, // $8F0E + 132, // $8F0F + 132, // $8F10 + 132, // $8F11 + 132, // $8F12 + 132, // $8F13 + 132, // $8F14 + 132, // $8F15 + 132, // $8F16 + 132, // $8F17 + 132, // $8F18 + 132, // $8F19 + 132, // $8F1A + 132, // $8F1B + 132, // $8F1C + 132, // $8F1D + 132, // $8F1E + 132, // $8F1F + 132, // $8F20 + 132, // $8F21 + 132, // $8F22 + 132, // $8F23 + 132, // $8F24 + 132, // $8F25 + 132, // $8F26 + 132, // $8F27 + 132, // $8F28 + 132, // $8F29 + 132, // $8F2A + 132, // $8F2B + 132, // $8F2C + 132, // $8F2D + 132, // $8F2E + 132, // $8F2F + 132, // $8F30 + 132, // $8F31 + 132, // $8F32 + 132, // $8F33 + 132, // $8F34 + 132, // $8F35 + 132, // $8F36 + 132, // $8F37 + 132, // $8F38 + 132, // $8F39 + 132, // $8F3A + 132, // $8F3B + 132, // $8F3C + 132, // $8F3D + 132, // $8F3E + 132, // $8F3F + 132, // $8F40 + 132, // $8F41 + 132, // $8F42 + 132, // $8F43 + 132, // $8F44 + 132, // $8F45 + 132, // $8F46 + 132, // $8F47 + 132, // $8F48 + 132, // $8F49 + 132, // $8F4A + 132, // $8F4B + 132, // $8F4C + 132, // $8F4D + 132, // $8F4E + 132, // $8F4F + 132, // $8F50 + 132, // $8F51 + 132, // $8F52 + 132, // $8F53 + 132, // $8F54 + 132, // $8F55 + 132, // $8F56 + 132, // $8F57 + 132, // $8F58 + 132, // $8F59 + 132, // $8F5A + 132, // $8F5B + 132, // $8F5C + 132, // $8F5D + 132, // $8F5E + 132, // $8F5F + 132, // $8F60 + 132, // $8F61 + 132, // $8F62 + 132, // $8F63 + 132, // $8F64 + 132, // $8F65 + 132, // $8F66 + 132, // $8F67 + 132, // $8F68 + 132, // $8F69 + 132, // $8F6A + 132, // $8F6B + 132, // $8F6C + 132, // $8F6D + 132, // $8F6E + 132, // $8F6F + 132, // $8F70 + 132, // $8F71 + 132, // $8F72 + 132, // $8F73 + 132, // $8F74 + 132, // $8F75 + 132, // $8F76 + 132, // $8F77 + 132, // $8F78 + 132, // $8F79 + 132, // $8F7A + 132, // $8F7B + 132, // $8F7C + 132, // $8F7D + 132, // $8F7E + 132, // $8F7F + 132, // $8F80 + 132, // $8F81 + 132, // $8F82 + 132, // $8F83 + 132, // $8F84 + 132, // $8F85 + 132, // $8F86 + 132, // $8F87 + 132, // $8F88 + 132, // $8F89 + 132, // $8F8A + 132, // $8F8B + 132, // $8F8C + 132, // $8F8D + 132, // $8F8E + 132, // $8F8F + 132, // $8F90 + 132, // $8F91 + 132, // $8F92 + 132, // $8F93 + 132, // $8F94 + 132, // $8F95 + 132, // $8F96 + 132, // $8F97 + 132, // $8F98 + 132, // $8F99 + 132, // $8F9A + 132, // $8F9B + 132, // $8F9C + 132, // $8F9D + 132, // $8F9E + 132, // $8F9F + 132, // $8FA0 + 132, // $8FA1 + 132, // $8FA2 + 132, // $8FA3 + 132, // $8FA4 + 132, // $8FA5 + 132, // $8FA6 + 132, // $8FA7 + 132, // $8FA8 + 132, // $8FA9 + 132, // $8FAA + 132, // $8FAB + 132, // $8FAC + 132, // $8FAD + 132, // $8FAE + 132, // $8FAF + 132, // $8FB0 + 132, // $8FB1 + 132, // $8FB2 + 132, // $8FB3 + 132, // $8FB4 + 132, // $8FB5 + 132, // $8FB6 + 132, // $8FB7 + 132, // $8FB8 + 132, // $8FB9 + 132, // $8FBA + 132, // $8FBB + 132, // $8FBC + 132, // $8FBD + 132, // $8FBE + 132, // $8FBF + 132, // $8FC0 + 132, // $8FC1 + 132, // $8FC2 + 132, // $8FC3 + 132, // $8FC4 + 132, // $8FC5 + 132, // $8FC6 + 132, // $8FC7 + 132, // $8FC8 + 132, // $8FC9 + 132, // $8FCA + 132, // $8FCB + 132, // $8FCC + 132, // $8FCD + 132, // $8FCE + 132, // $8FCF + 132, // $8FD0 + 132, // $8FD1 + 132, // $8FD2 + 132, // $8FD3 + 132, // $8FD4 + 132, // $8FD5 + 132, // $8FD6 + 132, // $8FD7 + 132, // $8FD8 + 132, // $8FD9 + 132, // $8FDA + 132, // $8FDB + 132, // $8FDC + 132, // $8FDD + 132, // $8FDE + 132, // $8FDF + 132, // $8FE0 + 132, // $8FE1 + 132, // $8FE2 + 132, // $8FE3 + 132, // $8FE4 + 132, // $8FE5 + 132, // $8FE6 + 132, // $8FE7 + 132, // $8FE8 + 132, // $8FE9 + 132, // $8FEA + 132, // $8FEB + 132, // $8FEC + 132, // $8FED + 132, // $8FEE + 132, // $8FEF + 132, // $8FF0 + 132, // $8FF1 + 132, // $8FF2 + 132, // $8FF3 + 132, // $8FF4 + 132, // $8FF5 + 132, // $8FF6 + 132, // $8FF7 + 132, // $8FF8 + 132, // $8FF9 + 132, // $8FFA + 132, // $8FFB + 132, // $8FFC + 132, // $8FFD + 132, // $8FFE + 132, // $8FFF + 132, // $9000 + 132, // $9001 + 132, // $9002 + 132, // $9003 + 132, // $9004 + 132, // $9005 + 132, // $9006 + 132, // $9007 + 132, // $9008 + 132, // $9009 + 132, // $900A + 132, // $900B + 132, // $900C + 132, // $900D + 132, // $900E + 132, // $900F + 132, // $9010 + 132, // $9011 + 132, // $9012 + 132, // $9013 + 132, // $9014 + 132, // $9015 + 132, // $9016 + 132, // $9017 + 132, // $9018 + 132, // $9019 + 132, // $901A + 132, // $901B + 132, // $901C + 132, // $901D + 132, // $901E + 132, // $901F + 132, // $9020 + 132, // $9021 + 132, // $9022 + 132, // $9023 + 132, // $9024 + 132, // $9025 + 132, // $9026 + 132, // $9027 + 132, // $9028 + 132, // $9029 + 132, // $902A + 132, // $902B + 132, // $902C + 132, // $902D + 132, // $902E + 132, // $902F + 132, // $9030 + 132, // $9031 + 132, // $9032 + 132, // $9033 + 132, // $9034 + 132, // $9035 + 132, // $9036 + 132, // $9037 + 132, // $9038 + 132, // $9039 + 132, // $903A + 132, // $903B + 132, // $903C + 132, // $903D + 132, // $903E + 132, // $903F + 132, // $9040 + 132, // $9041 + 132, // $9042 + 132, // $9043 + 132, // $9044 + 132, // $9045 + 132, // $9046 + 132, // $9047 + 132, // $9048 + 132, // $9049 + 132, // $904A + 132, // $904B + 132, // $904C + 132, // $904D + 132, // $904E + 132, // $904F + 132, // $9050 + 132, // $9051 + 132, // $9052 + 132, // $9053 + 132, // $9054 + 132, // $9055 + 132, // $9056 + 132, // $9057 + 132, // $9058 + 132, // $9059 + 132, // $905A + 132, // $905B + 132, // $905C + 132, // $905D + 132, // $905E + 132, // $905F + 132, // $9060 + 132, // $9061 + 132, // $9062 + 132, // $9063 + 132, // $9064 + 132, // $9065 + 132, // $9066 + 132, // $9067 + 132, // $9068 + 132, // $9069 + 132, // $906A + 132, // $906B + 132, // $906C + 132, // $906D + 132, // $906E + 132, // $906F + 132, // $9070 + 132, // $9071 + 132, // $9072 + 132, // $9073 + 132, // $9074 + 132, // $9075 + 132, // $9076 + 132, // $9077 + 132, // $9078 + 132, // $9079 + 132, // $907A + 132, // $907B + 132, // $907C + 132, // $907D + 132, // $907E + 132, // $907F + 132, // $9080 + 132, // $9081 + 132, // $9082 + 132, // $9083 + 132, // $9084 + 132, // $9085 + 132, // $9086 + 132, // $9087 + 132, // $9088 + 132, // $9089 + 132, // $908A + 132, // $908B + 132, // $908C + 132, // $908D + 132, // $908E + 132, // $908F + 132, // $9090 + 132, // $9091 + 132, // $9092 + 132, // $9093 + 132, // $9094 + 132, // $9095 + 132, // $9096 + 132, // $9097 + 132, // $9098 + 132, // $9099 + 132, // $909A + 132, // $909B + 132, // $909C + 132, // $909D + 132, // $909E + 132, // $909F + 132, // $90A0 + 132, // $90A1 + 132, // $90A2 + 132, // $90A3 + 132, // $90A4 + 132, // $90A5 + 132, // $90A6 + 132, // $90A7 + 132, // $90A8 + 132, // $90A9 + 132, // $90AA + 132, // $90AB + 132, // $90AC + 132, // $90AD + 132, // $90AE + 132, // $90AF + 132, // $90B0 + 132, // $90B1 + 132, // $90B2 + 132, // $90B3 + 132, // $90B4 + 132, // $90B5 + 132, // $90B6 + 132, // $90B7 + 132, // $90B8 + 132, // $90B9 + 132, // $90BA + 132, // $90BB + 132, // $90BC + 132, // $90BD + 132, // $90BE + 132, // $90BF + 132, // $90C0 + 132, // $90C1 + 132, // $90C2 + 132, // $90C3 + 132, // $90C4 + 132, // $90C5 + 132, // $90C6 + 132, // $90C7 + 132, // $90C8 + 132, // $90C9 + 132, // $90CA + 132, // $90CB + 132, // $90CC + 132, // $90CD + 132, // $90CE + 132, // $90CF + 132, // $90D0 + 132, // $90D1 + 132, // $90D2 + 132, // $90D3 + 132, // $90D4 + 132, // $90D5 + 132, // $90D6 + 132, // $90D7 + 132, // $90D8 + 132, // $90D9 + 132, // $90DA + 132, // $90DB + 132, // $90DC + 132, // $90DD + 132, // $90DE + 132, // $90DF + 132, // $90E0 + 132, // $90E1 + 132, // $90E2 + 132, // $90E3 + 132, // $90E4 + 132, // $90E5 + 132, // $90E6 + 132, // $90E7 + 132, // $90E8 + 132, // $90E9 + 132, // $90EA + 132, // $90EB + 132, // $90EC + 132, // $90ED + 132, // $90EE + 132, // $90EF + 132, // $90F0 + 132, // $90F1 + 132, // $90F2 + 132, // $90F3 + 132, // $90F4 + 132, // $90F5 + 132, // $90F6 + 132, // $90F7 + 132, // $90F8 + 132, // $90F9 + 132, // $90FA + 132, // $90FB + 132, // $90FC + 132, // $90FD + 132, // $90FE + 132, // $90FF + 132, // $9100 + 132, // $9101 + 132, // $9102 + 132, // $9103 + 132, // $9104 + 132, // $9105 + 132, // $9106 + 132, // $9107 + 132, // $9108 + 132, // $9109 + 132, // $910A + 132, // $910B + 132, // $910C + 132, // $910D + 132, // $910E + 132, // $910F + 132, // $9110 + 132, // $9111 + 132, // $9112 + 132, // $9113 + 132, // $9114 + 132, // $9115 + 132, // $9116 + 132, // $9117 + 132, // $9118 + 132, // $9119 + 132, // $911A + 132, // $911B + 132, // $911C + 132, // $911D + 132, // $911E + 132, // $911F + 132, // $9120 + 132, // $9121 + 132, // $9122 + 132, // $9123 + 132, // $9124 + 132, // $9125 + 132, // $9126 + 132, // $9127 + 132, // $9128 + 132, // $9129 + 132, // $912A + 132, // $912B + 132, // $912C + 132, // $912D + 132, // $912E + 132, // $912F + 132, // $9130 + 132, // $9131 + 132, // $9132 + 132, // $9133 + 132, // $9134 + 132, // $9135 + 132, // $9136 + 132, // $9137 + 132, // $9138 + 132, // $9139 + 132, // $913A + 132, // $913B + 132, // $913C + 132, // $913D + 132, // $913E + 132, // $913F + 132, // $9140 + 132, // $9141 + 132, // $9142 + 132, // $9143 + 132, // $9144 + 132, // $9145 + 132, // $9146 + 132, // $9147 + 132, // $9148 + 132, // $9149 + 132, // $914A + 132, // $914B + 132, // $914C + 132, // $914D + 132, // $914E + 132, // $914F + 132, // $9150 + 132, // $9151 + 132, // $9152 + 132, // $9153 + 132, // $9154 + 132, // $9155 + 132, // $9156 + 132, // $9157 + 132, // $9158 + 132, // $9159 + 132, // $915A + 132, // $915B + 132, // $915C + 132, // $915D + 132, // $915E + 132, // $915F + 132, // $9160 + 132, // $9161 + 132, // $9162 + 132, // $9163 + 132, // $9164 + 132, // $9165 + 132, // $9166 + 132, // $9167 + 132, // $9168 + 132, // $9169 + 132, // $916A + 132, // $916B + 132, // $916C + 132, // $916D + 132, // $916E + 132, // $916F + 132, // $9170 + 132, // $9171 + 132, // $9172 + 132, // $9173 + 132, // $9174 + 132, // $9175 + 132, // $9176 + 132, // $9177 + 132, // $9178 + 132, // $9179 + 132, // $917A + 132, // $917B + 132, // $917C + 132, // $917D + 132, // $917E + 132, // $917F + 132, // $9180 + 132, // $9181 + 132, // $9182 + 132, // $9183 + 132, // $9184 + 132, // $9185 + 132, // $9186 + 132, // $9187 + 132, // $9188 + 132, // $9189 + 132, // $918A + 132, // $918B + 132, // $918C + 132, // $918D + 132, // $918E + 132, // $918F + 132, // $9190 + 132, // $9191 + 132, // $9192 + 132, // $9193 + 132, // $9194 + 132, // $9195 + 132, // $9196 + 132, // $9197 + 132, // $9198 + 132, // $9199 + 132, // $919A + 132, // $919B + 132, // $919C + 132, // $919D + 132, // $919E + 132, // $919F + 132, // $91A0 + 132, // $91A1 + 132, // $91A2 + 132, // $91A3 + 132, // $91A4 + 132, // $91A5 + 132, // $91A6 + 132, // $91A7 + 132, // $91A8 + 132, // $91A9 + 132, // $91AA + 132, // $91AB + 132, // $91AC + 132, // $91AD + 132, // $91AE + 132, // $91AF + 132, // $91B0 + 132, // $91B1 + 132, // $91B2 + 132, // $91B3 + 132, // $91B4 + 132, // $91B5 + 132, // $91B6 + 132, // $91B7 + 132, // $91B8 + 132, // $91B9 + 132, // $91BA + 132, // $91BB + 132, // $91BC + 132, // $91BD + 132, // $91BE + 132, // $91BF + 132, // $91C0 + 132, // $91C1 + 132, // $91C2 + 132, // $91C3 + 132, // $91C4 + 132, // $91C5 + 132, // $91C6 + 132, // $91C7 + 132, // $91C8 + 132, // $91C9 + 132, // $91CA + 132, // $91CB + 132, // $91CC + 132, // $91CD + 132, // $91CE + 132, // $91CF + 132, // $91D0 + 132, // $91D1 + 132, // $91D2 + 132, // $91D3 + 132, // $91D4 + 132, // $91D5 + 132, // $91D6 + 132, // $91D7 + 132, // $91D8 + 132, // $91D9 + 132, // $91DA + 132, // $91DB + 132, // $91DC + 132, // $91DD + 132, // $91DE + 132, // $91DF + 132, // $91E0 + 132, // $91E1 + 132, // $91E2 + 132, // $91E3 + 132, // $91E4 + 132, // $91E5 + 132, // $91E6 + 132, // $91E7 + 132, // $91E8 + 132, // $91E9 + 132, // $91EA + 132, // $91EB + 132, // $91EC + 132, // $91ED + 132, // $91EE + 132, // $91EF + 132, // $91F0 + 132, // $91F1 + 132, // $91F2 + 132, // $91F3 + 132, // $91F4 + 132, // $91F5 + 132, // $91F6 + 132, // $91F7 + 132, // $91F8 + 132, // $91F9 + 132, // $91FA + 132, // $91FB + 132, // $91FC + 132, // $91FD + 132, // $91FE + 132, // $91FF + 132, // $9200 + 132, // $9201 + 132, // $9202 + 132, // $9203 + 132, // $9204 + 132, // $9205 + 132, // $9206 + 132, // $9207 + 132, // $9208 + 132, // $9209 + 132, // $920A + 132, // $920B + 132, // $920C + 132, // $920D + 132, // $920E + 132, // $920F + 132, // $9210 + 132, // $9211 + 132, // $9212 + 132, // $9213 + 132, // $9214 + 132, // $9215 + 132, // $9216 + 132, // $9217 + 132, // $9218 + 132, // $9219 + 132, // $921A + 132, // $921B + 132, // $921C + 132, // $921D + 132, // $921E + 132, // $921F + 132, // $9220 + 132, // $9221 + 132, // $9222 + 132, // $9223 + 132, // $9224 + 132, // $9225 + 132, // $9226 + 132, // $9227 + 132, // $9228 + 132, // $9229 + 132, // $922A + 132, // $922B + 132, // $922C + 132, // $922D + 132, // $922E + 132, // $922F + 132, // $9230 + 132, // $9231 + 132, // $9232 + 132, // $9233 + 132, // $9234 + 132, // $9235 + 132, // $9236 + 132, // $9237 + 132, // $9238 + 132, // $9239 + 132, // $923A + 132, // $923B + 132, // $923C + 132, // $923D + 132, // $923E + 132, // $923F + 132, // $9240 + 132, // $9241 + 132, // $9242 + 132, // $9243 + 132, // $9244 + 132, // $9245 + 132, // $9246 + 132, // $9247 + 132, // $9248 + 132, // $9249 + 132, // $924A + 132, // $924B + 132, // $924C + 132, // $924D + 132, // $924E + 132, // $924F + 132, // $9250 + 132, // $9251 + 132, // $9252 + 132, // $9253 + 132, // $9254 + 132, // $9255 + 132, // $9256 + 132, // $9257 + 132, // $9258 + 132, // $9259 + 132, // $925A + 132, // $925B + 132, // $925C + 132, // $925D + 132, // $925E + 132, // $925F + 132, // $9260 + 132, // $9261 + 132, // $9262 + 132, // $9263 + 132, // $9264 + 132, // $9265 + 132, // $9266 + 132, // $9267 + 132, // $9268 + 132, // $9269 + 132, // $926A + 132, // $926B + 132, // $926C + 132, // $926D + 132, // $926E + 132, // $926F + 132, // $9270 + 132, // $9271 + 132, // $9272 + 132, // $9273 + 132, // $9274 + 132, // $9275 + 132, // $9276 + 132, // $9277 + 132, // $9278 + 132, // $9279 + 132, // $927A + 132, // $927B + 132, // $927C + 132, // $927D + 132, // $927E + 132, // $927F + 132, // $9280 + 132, // $9281 + 132, // $9282 + 132, // $9283 + 132, // $9284 + 132, // $9285 + 132, // $9286 + 132, // $9287 + 132, // $9288 + 132, // $9289 + 132, // $928A + 132, // $928B + 132, // $928C + 132, // $928D + 132, // $928E + 132, // $928F + 132, // $9290 + 132, // $9291 + 132, // $9292 + 132, // $9293 + 132, // $9294 + 132, // $9295 + 132, // $9296 + 132, // $9297 + 132, // $9298 + 132, // $9299 + 132, // $929A + 132, // $929B + 132, // $929C + 132, // $929D + 132, // $929E + 132, // $929F + 132, // $92A0 + 132, // $92A1 + 132, // $92A2 + 132, // $92A3 + 132, // $92A4 + 132, // $92A5 + 132, // $92A6 + 132, // $92A7 + 132, // $92A8 + 132, // $92A9 + 132, // $92AA + 132, // $92AB + 132, // $92AC + 132, // $92AD + 132, // $92AE + 132, // $92AF + 132, // $92B0 + 132, // $92B1 + 132, // $92B2 + 132, // $92B3 + 132, // $92B4 + 132, // $92B5 + 132, // $92B6 + 132, // $92B7 + 132, // $92B8 + 132, // $92B9 + 132, // $92BA + 132, // $92BB + 132, // $92BC + 132, // $92BD + 132, // $92BE + 132, // $92BF + 132, // $92C0 + 132, // $92C1 + 132, // $92C2 + 132, // $92C3 + 132, // $92C4 + 132, // $92C5 + 132, // $92C6 + 132, // $92C7 + 132, // $92C8 + 132, // $92C9 + 132, // $92CA + 132, // $92CB + 132, // $92CC + 132, // $92CD + 132, // $92CE + 132, // $92CF + 132, // $92D0 + 132, // $92D1 + 132, // $92D2 + 132, // $92D3 + 132, // $92D4 + 132, // $92D5 + 132, // $92D6 + 132, // $92D7 + 132, // $92D8 + 132, // $92D9 + 132, // $92DA + 132, // $92DB + 132, // $92DC + 132, // $92DD + 132, // $92DE + 132, // $92DF + 132, // $92E0 + 132, // $92E1 + 132, // $92E2 + 132, // $92E3 + 132, // $92E4 + 132, // $92E5 + 132, // $92E6 + 132, // $92E7 + 132, // $92E8 + 132, // $92E9 + 132, // $92EA + 132, // $92EB + 132, // $92EC + 132, // $92ED + 132, // $92EE + 132, // $92EF + 132, // $92F0 + 132, // $92F1 + 132, // $92F2 + 132, // $92F3 + 132, // $92F4 + 132, // $92F5 + 132, // $92F6 + 132, // $92F7 + 132, // $92F8 + 132, // $92F9 + 132, // $92FA + 132, // $92FB + 132, // $92FC + 132, // $92FD + 132, // $92FE + 132, // $92FF + 132, // $9300 + 132, // $9301 + 132, // $9302 + 132, // $9303 + 132, // $9304 + 132, // $9305 + 132, // $9306 + 132, // $9307 + 132, // $9308 + 132, // $9309 + 132, // $930A + 132, // $930B + 132, // $930C + 132, // $930D + 132, // $930E + 132, // $930F + 132, // $9310 + 132, // $9311 + 132, // $9312 + 132, // $9313 + 132, // $9314 + 132, // $9315 + 132, // $9316 + 132, // $9317 + 132, // $9318 + 132, // $9319 + 132, // $931A + 132, // $931B + 132, // $931C + 132, // $931D + 132, // $931E + 132, // $931F + 132, // $9320 + 132, // $9321 + 132, // $9322 + 132, // $9323 + 132, // $9324 + 132, // $9325 + 132, // $9326 + 132, // $9327 + 132, // $9328 + 132, // $9329 + 132, // $932A + 132, // $932B + 132, // $932C + 132, // $932D + 132, // $932E + 132, // $932F + 132, // $9330 + 132, // $9331 + 132, // $9332 + 132, // $9333 + 132, // $9334 + 132, // $9335 + 132, // $9336 + 132, // $9337 + 132, // $9338 + 132, // $9339 + 132, // $933A + 132, // $933B + 132, // $933C + 132, // $933D + 132, // $933E + 132, // $933F + 132, // $9340 + 132, // $9341 + 132, // $9342 + 132, // $9343 + 132, // $9344 + 132, // $9345 + 132, // $9346 + 132, // $9347 + 132, // $9348 + 132, // $9349 + 132, // $934A + 132, // $934B + 132, // $934C + 132, // $934D + 132, // $934E + 132, // $934F + 132, // $9350 + 132, // $9351 + 132, // $9352 + 132, // $9353 + 132, // $9354 + 132, // $9355 + 132, // $9356 + 132, // $9357 + 132, // $9358 + 132, // $9359 + 132, // $935A + 132, // $935B + 132, // $935C + 132, // $935D + 132, // $935E + 132, // $935F + 132, // $9360 + 132, // $9361 + 132, // $9362 + 132, // $9363 + 132, // $9364 + 132, // $9365 + 132, // $9366 + 132, // $9367 + 132, // $9368 + 132, // $9369 + 132, // $936A + 132, // $936B + 132, // $936C + 132, // $936D + 132, // $936E + 132, // $936F + 132, // $9370 + 132, // $9371 + 132, // $9372 + 132, // $9373 + 132, // $9374 + 132, // $9375 + 132, // $9376 + 132, // $9377 + 132, // $9378 + 132, // $9379 + 132, // $937A + 132, // $937B + 132, // $937C + 132, // $937D + 132, // $937E + 132, // $937F + 132, // $9380 + 132, // $9381 + 132, // $9382 + 132, // $9383 + 132, // $9384 + 132, // $9385 + 132, // $9386 + 132, // $9387 + 132, // $9388 + 132, // $9389 + 132, // $938A + 132, // $938B + 132, // $938C + 132, // $938D + 132, // $938E + 132, // $938F + 132, // $9390 + 132, // $9391 + 132, // $9392 + 132, // $9393 + 132, // $9394 + 132, // $9395 + 132, // $9396 + 132, // $9397 + 132, // $9398 + 132, // $9399 + 132, // $939A + 132, // $939B + 132, // $939C + 132, // $939D + 132, // $939E + 132, // $939F + 132, // $93A0 + 132, // $93A1 + 132, // $93A2 + 132, // $93A3 + 132, // $93A4 + 132, // $93A5 + 132, // $93A6 + 132, // $93A7 + 132, // $93A8 + 132, // $93A9 + 132, // $93AA + 132, // $93AB + 132, // $93AC + 132, // $93AD + 132, // $93AE + 132, // $93AF + 132, // $93B0 + 132, // $93B1 + 132, // $93B2 + 132, // $93B3 + 132, // $93B4 + 132, // $93B5 + 132, // $93B6 + 132, // $93B7 + 132, // $93B8 + 132, // $93B9 + 132, // $93BA + 132, // $93BB + 132, // $93BC + 132, // $93BD + 132, // $93BE + 132, // $93BF + 132, // $93C0 + 132, // $93C1 + 132, // $93C2 + 132, // $93C3 + 132, // $93C4 + 132, // $93C5 + 132, // $93C6 + 132, // $93C7 + 132, // $93C8 + 132, // $93C9 + 132, // $93CA + 132, // $93CB + 132, // $93CC + 132, // $93CD + 132, // $93CE + 132, // $93CF + 132, // $93D0 + 132, // $93D1 + 132, // $93D2 + 132, // $93D3 + 132, // $93D4 + 132, // $93D5 + 132, // $93D6 + 132, // $93D7 + 132, // $93D8 + 132, // $93D9 + 132, // $93DA + 132, // $93DB + 132, // $93DC + 132, // $93DD + 132, // $93DE + 132, // $93DF + 132, // $93E0 + 132, // $93E1 + 132, // $93E2 + 132, // $93E3 + 132, // $93E4 + 132, // $93E5 + 132, // $93E6 + 132, // $93E7 + 132, // $93E8 + 132, // $93E9 + 132, // $93EA + 132, // $93EB + 132, // $93EC + 132, // $93ED + 132, // $93EE + 132, // $93EF + 132, // $93F0 + 132, // $93F1 + 132, // $93F2 + 132, // $93F3 + 132, // $93F4 + 132, // $93F5 + 132, // $93F6 + 132, // $93F7 + 132, // $93F8 + 132, // $93F9 + 132, // $93FA + 132, // $93FB + 132, // $93FC + 132, // $93FD + 132, // $93FE + 132, // $93FF + 132, // $9400 + 132, // $9401 + 132, // $9402 + 132, // $9403 + 132, // $9404 + 132, // $9405 + 132, // $9406 + 132, // $9407 + 132, // $9408 + 132, // $9409 + 132, // $940A + 132, // $940B + 132, // $940C + 132, // $940D + 132, // $940E + 132, // $940F + 132, // $9410 + 132, // $9411 + 132, // $9412 + 132, // $9413 + 132, // $9414 + 132, // $9415 + 132, // $9416 + 132, // $9417 + 132, // $9418 + 132, // $9419 + 132, // $941A + 132, // $941B + 132, // $941C + 132, // $941D + 132, // $941E + 132, // $941F + 132, // $9420 + 132, // $9421 + 132, // $9422 + 132, // $9423 + 132, // $9424 + 132, // $9425 + 132, // $9426 + 132, // $9427 + 132, // $9428 + 132, // $9429 + 132, // $942A + 132, // $942B + 132, // $942C + 132, // $942D + 132, // $942E + 132, // $942F + 132, // $9430 + 132, // $9431 + 132, // $9432 + 132, // $9433 + 132, // $9434 + 132, // $9435 + 132, // $9436 + 132, // $9437 + 132, // $9438 + 132, // $9439 + 132, // $943A + 132, // $943B + 132, // $943C + 132, // $943D + 132, // $943E + 132, // $943F + 132, // $9440 + 132, // $9441 + 132, // $9442 + 132, // $9443 + 132, // $9444 + 132, // $9445 + 132, // $9446 + 132, // $9447 + 132, // $9448 + 132, // $9449 + 132, // $944A + 132, // $944B + 132, // $944C + 132, // $944D + 132, // $944E + 132, // $944F + 132, // $9450 + 132, // $9451 + 132, // $9452 + 132, // $9453 + 132, // $9454 + 132, // $9455 + 132, // $9456 + 132, // $9457 + 132, // $9458 + 132, // $9459 + 132, // $945A + 132, // $945B + 132, // $945C + 132, // $945D + 132, // $945E + 132, // $945F + 132, // $9460 + 132, // $9461 + 132, // $9462 + 132, // $9463 + 132, // $9464 + 132, // $9465 + 132, // $9466 + 132, // $9467 + 132, // $9468 + 132, // $9469 + 132, // $946A + 132, // $946B + 132, // $946C + 132, // $946D + 132, // $946E + 132, // $946F + 132, // $9470 + 132, // $9471 + 132, // $9472 + 132, // $9473 + 132, // $9474 + 132, // $9475 + 132, // $9476 + 132, // $9477 + 132, // $9478 + 132, // $9479 + 132, // $947A + 132, // $947B + 132, // $947C + 132, // $947D + 132, // $947E + 132, // $947F + 132, // $9480 + 132, // $9481 + 132, // $9482 + 132, // $9483 + 132, // $9484 + 132, // $9485 + 132, // $9486 + 132, // $9487 + 132, // $9488 + 132, // $9489 + 132, // $948A + 132, // $948B + 132, // $948C + 132, // $948D + 132, // $948E + 132, // $948F + 132, // $9490 + 132, // $9491 + 132, // $9492 + 132, // $9493 + 132, // $9494 + 132, // $9495 + 132, // $9496 + 132, // $9497 + 132, // $9498 + 132, // $9499 + 132, // $949A + 132, // $949B + 132, // $949C + 132, // $949D + 132, // $949E + 132, // $949F + 132, // $94A0 + 132, // $94A1 + 132, // $94A2 + 132, // $94A3 + 132, // $94A4 + 132, // $94A5 + 132, // $94A6 + 132, // $94A7 + 132, // $94A8 + 132, // $94A9 + 132, // $94AA + 132, // $94AB + 132, // $94AC + 132, // $94AD + 132, // $94AE + 132, // $94AF + 132, // $94B0 + 132, // $94B1 + 132, // $94B2 + 132, // $94B3 + 132, // $94B4 + 132, // $94B5 + 132, // $94B6 + 132, // $94B7 + 132, // $94B8 + 132, // $94B9 + 132, // $94BA + 132, // $94BB + 132, // $94BC + 132, // $94BD + 132, // $94BE + 132, // $94BF + 132, // $94C0 + 132, // $94C1 + 132, // $94C2 + 132, // $94C3 + 132, // $94C4 + 132, // $94C5 + 132, // $94C6 + 132, // $94C7 + 132, // $94C8 + 132, // $94C9 + 132, // $94CA + 132, // $94CB + 132, // $94CC + 132, // $94CD + 132, // $94CE + 132, // $94CF + 132, // $94D0 + 132, // $94D1 + 132, // $94D2 + 132, // $94D3 + 132, // $94D4 + 132, // $94D5 + 132, // $94D6 + 132, // $94D7 + 132, // $94D8 + 132, // $94D9 + 132, // $94DA + 132, // $94DB + 132, // $94DC + 132, // $94DD + 132, // $94DE + 132, // $94DF + 132, // $94E0 + 132, // $94E1 + 132, // $94E2 + 132, // $94E3 + 132, // $94E4 + 132, // $94E5 + 132, // $94E6 + 132, // $94E7 + 132, // $94E8 + 132, // $94E9 + 132, // $94EA + 132, // $94EB + 132, // $94EC + 132, // $94ED + 132, // $94EE + 132, // $94EF + 132, // $94F0 + 132, // $94F1 + 132, // $94F2 + 132, // $94F3 + 132, // $94F4 + 132, // $94F5 + 132, // $94F6 + 132, // $94F7 + 132, // $94F8 + 132, // $94F9 + 132, // $94FA + 132, // $94FB + 132, // $94FC + 132, // $94FD + 132, // $94FE + 132, // $94FF + 132, // $9500 + 132, // $9501 + 132, // $9502 + 132, // $9503 + 132, // $9504 + 132, // $9505 + 132, // $9506 + 132, // $9507 + 132, // $9508 + 132, // $9509 + 132, // $950A + 132, // $950B + 132, // $950C + 132, // $950D + 132, // $950E + 132, // $950F + 132, // $9510 + 132, // $9511 + 132, // $9512 + 132, // $9513 + 132, // $9514 + 132, // $9515 + 132, // $9516 + 132, // $9517 + 132, // $9518 + 132, // $9519 + 132, // $951A + 132, // $951B + 132, // $951C + 132, // $951D + 132, // $951E + 132, // $951F + 132, // $9520 + 132, // $9521 + 132, // $9522 + 132, // $9523 + 132, // $9524 + 132, // $9525 + 132, // $9526 + 132, // $9527 + 132, // $9528 + 132, // $9529 + 132, // $952A + 132, // $952B + 132, // $952C + 132, // $952D + 132, // $952E + 132, // $952F + 132, // $9530 + 132, // $9531 + 132, // $9532 + 132, // $9533 + 132, // $9534 + 132, // $9535 + 132, // $9536 + 132, // $9537 + 132, // $9538 + 132, // $9539 + 132, // $953A + 132, // $953B + 132, // $953C + 132, // $953D + 132, // $953E + 132, // $953F + 132, // $9540 + 132, // $9541 + 132, // $9542 + 132, // $9543 + 132, // $9544 + 132, // $9545 + 132, // $9546 + 132, // $9547 + 132, // $9548 + 132, // $9549 + 132, // $954A + 132, // $954B + 132, // $954C + 132, // $954D + 132, // $954E + 132, // $954F + 132, // $9550 + 132, // $9551 + 132, // $9552 + 132, // $9553 + 132, // $9554 + 132, // $9555 + 132, // $9556 + 132, // $9557 + 132, // $9558 + 132, // $9559 + 132, // $955A + 132, // $955B + 132, // $955C + 132, // $955D + 132, // $955E + 132, // $955F + 132, // $9560 + 132, // $9561 + 132, // $9562 + 132, // $9563 + 132, // $9564 + 132, // $9565 + 132, // $9566 + 132, // $9567 + 132, // $9568 + 132, // $9569 + 132, // $956A + 132, // $956B + 132, // $956C + 132, // $956D + 132, // $956E + 132, // $956F + 132, // $9570 + 132, // $9571 + 132, // $9572 + 132, // $9573 + 132, // $9574 + 132, // $9575 + 132, // $9576 + 132, // $9577 + 132, // $9578 + 132, // $9579 + 132, // $957A + 132, // $957B + 132, // $957C + 132, // $957D + 132, // $957E + 132, // $957F + 132, // $9580 + 132, // $9581 + 132, // $9582 + 132, // $9583 + 132, // $9584 + 132, // $9585 + 132, // $9586 + 132, // $9587 + 132, // $9588 + 132, // $9589 + 132, // $958A + 132, // $958B + 132, // $958C + 132, // $958D + 132, // $958E + 132, // $958F + 132, // $9590 + 132, // $9591 + 132, // $9592 + 132, // $9593 + 132, // $9594 + 132, // $9595 + 132, // $9596 + 132, // $9597 + 132, // $9598 + 132, // $9599 + 132, // $959A + 132, // $959B + 132, // $959C + 132, // $959D + 132, // $959E + 132, // $959F + 132, // $95A0 + 132, // $95A1 + 132, // $95A2 + 132, // $95A3 + 132, // $95A4 + 132, // $95A5 + 132, // $95A6 + 132, // $95A7 + 132, // $95A8 + 132, // $95A9 + 132, // $95AA + 132, // $95AB + 132, // $95AC + 132, // $95AD + 132, // $95AE + 132, // $95AF + 132, // $95B0 + 132, // $95B1 + 132, // $95B2 + 132, // $95B3 + 132, // $95B4 + 132, // $95B5 + 132, // $95B6 + 132, // $95B7 + 132, // $95B8 + 132, // $95B9 + 132, // $95BA + 132, // $95BB + 132, // $95BC + 132, // $95BD + 132, // $95BE + 132, // $95BF + 132, // $95C0 + 132, // $95C1 + 132, // $95C2 + 132, // $95C3 + 132, // $95C4 + 132, // $95C5 + 132, // $95C6 + 132, // $95C7 + 132, // $95C8 + 132, // $95C9 + 132, // $95CA + 132, // $95CB + 132, // $95CC + 132, // $95CD + 132, // $95CE + 132, // $95CF + 132, // $95D0 + 132, // $95D1 + 132, // $95D2 + 132, // $95D3 + 132, // $95D4 + 132, // $95D5 + 132, // $95D6 + 132, // $95D7 + 132, // $95D8 + 132, // $95D9 + 132, // $95DA + 132, // $95DB + 132, // $95DC + 132, // $95DD + 132, // $95DE + 132, // $95DF + 132, // $95E0 + 132, // $95E1 + 132, // $95E2 + 132, // $95E3 + 132, // $95E4 + 132, // $95E5 + 132, // $95E6 + 132, // $95E7 + 132, // $95E8 + 132, // $95E9 + 132, // $95EA + 132, // $95EB + 132, // $95EC + 132, // $95ED + 132, // $95EE + 132, // $95EF + 132, // $95F0 + 132, // $95F1 + 132, // $95F2 + 132, // $95F3 + 132, // $95F4 + 132, // $95F5 + 132, // $95F6 + 132, // $95F7 + 132, // $95F8 + 132, // $95F9 + 132, // $95FA + 132, // $95FB + 132, // $95FC + 132, // $95FD + 132, // $95FE + 132, // $95FF + 132, // $9600 + 132, // $9601 + 132, // $9602 + 132, // $9603 + 132, // $9604 + 132, // $9605 + 132, // $9606 + 132, // $9607 + 132, // $9608 + 132, // $9609 + 132, // $960A + 132, // $960B + 132, // $960C + 132, // $960D + 132, // $960E + 132, // $960F + 132, // $9610 + 132, // $9611 + 132, // $9612 + 132, // $9613 + 132, // $9614 + 132, // $9615 + 132, // $9616 + 132, // $9617 + 132, // $9618 + 132, // $9619 + 132, // $961A + 132, // $961B + 132, // $961C + 132, // $961D + 132, // $961E + 132, // $961F + 132, // $9620 + 132, // $9621 + 132, // $9622 + 132, // $9623 + 132, // $9624 + 132, // $9625 + 132, // $9626 + 132, // $9627 + 132, // $9628 + 132, // $9629 + 132, // $962A + 132, // $962B + 132, // $962C + 132, // $962D + 132, // $962E + 132, // $962F + 132, // $9630 + 132, // $9631 + 132, // $9632 + 132, // $9633 + 132, // $9634 + 132, // $9635 + 132, // $9636 + 132, // $9637 + 132, // $9638 + 132, // $9639 + 132, // $963A + 132, // $963B + 132, // $963C + 132, // $963D + 132, // $963E + 132, // $963F + 132, // $9640 + 132, // $9641 + 132, // $9642 + 132, // $9643 + 132, // $9644 + 132, // $9645 + 132, // $9646 + 132, // $9647 + 132, // $9648 + 132, // $9649 + 132, // $964A + 132, // $964B + 132, // $964C + 132, // $964D + 132, // $964E + 132, // $964F + 132, // $9650 + 132, // $9651 + 132, // $9652 + 132, // $9653 + 132, // $9654 + 132, // $9655 + 132, // $9656 + 132, // $9657 + 132, // $9658 + 132, // $9659 + 132, // $965A + 132, // $965B + 132, // $965C + 132, // $965D + 132, // $965E + 132, // $965F + 132, // $9660 + 132, // $9661 + 132, // $9662 + 132, // $9663 + 132, // $9664 + 132, // $9665 + 132, // $9666 + 132, // $9667 + 132, // $9668 + 132, // $9669 + 132, // $966A + 132, // $966B + 132, // $966C + 132, // $966D + 132, // $966E + 132, // $966F + 132, // $9670 + 132, // $9671 + 132, // $9672 + 132, // $9673 + 132, // $9674 + 132, // $9675 + 132, // $9676 + 132, // $9677 + 132, // $9678 + 132, // $9679 + 132, // $967A + 132, // $967B + 132, // $967C + 132, // $967D + 132, // $967E + 132, // $967F + 132, // $9680 + 132, // $9681 + 132, // $9682 + 132, // $9683 + 132, // $9684 + 132, // $9685 + 132, // $9686 + 132, // $9687 + 132, // $9688 + 132, // $9689 + 132, // $968A + 132, // $968B + 132, // $968C + 132, // $968D + 132, // $968E + 132, // $968F + 132, // $9690 + 132, // $9691 + 132, // $9692 + 132, // $9693 + 132, // $9694 + 132, // $9695 + 132, // $9696 + 132, // $9697 + 132, // $9698 + 132, // $9699 + 132, // $969A + 132, // $969B + 132, // $969C + 132, // $969D + 132, // $969E + 132, // $969F + 132, // $96A0 + 132, // $96A1 + 132, // $96A2 + 132, // $96A3 + 132, // $96A4 + 132, // $96A5 + 132, // $96A6 + 132, // $96A7 + 132, // $96A8 + 132, // $96A9 + 132, // $96AA + 132, // $96AB + 132, // $96AC + 132, // $96AD + 132, // $96AE + 132, // $96AF + 132, // $96B0 + 132, // $96B1 + 132, // $96B2 + 132, // $96B3 + 132, // $96B4 + 132, // $96B5 + 132, // $96B6 + 132, // $96B7 + 132, // $96B8 + 132, // $96B9 + 132, // $96BA + 132, // $96BB + 132, // $96BC + 132, // $96BD + 132, // $96BE + 132, // $96BF + 132, // $96C0 + 132, // $96C1 + 132, // $96C2 + 132, // $96C3 + 132, // $96C4 + 132, // $96C5 + 132, // $96C6 + 132, // $96C7 + 132, // $96C8 + 132, // $96C9 + 132, // $96CA + 132, // $96CB + 132, // $96CC + 132, // $96CD + 132, // $96CE + 132, // $96CF + 132, // $96D0 + 132, // $96D1 + 132, // $96D2 + 132, // $96D3 + 132, // $96D4 + 132, // $96D5 + 132, // $96D6 + 132, // $96D7 + 132, // $96D8 + 132, // $96D9 + 132, // $96DA + 132, // $96DB + 132, // $96DC + 132, // $96DD + 132, // $96DE + 132, // $96DF + 132, // $96E0 + 132, // $96E1 + 132, // $96E2 + 132, // $96E3 + 132, // $96E4 + 132, // $96E5 + 132, // $96E6 + 132, // $96E7 + 132, // $96E8 + 132, // $96E9 + 132, // $96EA + 132, // $96EB + 132, // $96EC + 132, // $96ED + 132, // $96EE + 132, // $96EF + 132, // $96F0 + 132, // $96F1 + 132, // $96F2 + 132, // $96F3 + 132, // $96F4 + 132, // $96F5 + 132, // $96F6 + 132, // $96F7 + 132, // $96F8 + 132, // $96F9 + 132, // $96FA + 132, // $96FB + 132, // $96FC + 132, // $96FD + 132, // $96FE + 132, // $96FF + 132, // $9700 + 132, // $9701 + 132, // $9702 + 132, // $9703 + 132, // $9704 + 132, // $9705 + 132, // $9706 + 132, // $9707 + 132, // $9708 + 132, // $9709 + 132, // $970A + 132, // $970B + 132, // $970C + 132, // $970D + 132, // $970E + 132, // $970F + 132, // $9710 + 132, // $9711 + 132, // $9712 + 132, // $9713 + 132, // $9714 + 132, // $9715 + 132, // $9716 + 132, // $9717 + 132, // $9718 + 132, // $9719 + 132, // $971A + 132, // $971B + 132, // $971C + 132, // $971D + 132, // $971E + 132, // $971F + 132, // $9720 + 132, // $9721 + 132, // $9722 + 132, // $9723 + 132, // $9724 + 132, // $9725 + 132, // $9726 + 132, // $9727 + 132, // $9728 + 132, // $9729 + 132, // $972A + 132, // $972B + 132, // $972C + 132, // $972D + 132, // $972E + 132, // $972F + 132, // $9730 + 132, // $9731 + 132, // $9732 + 132, // $9733 + 132, // $9734 + 132, // $9735 + 132, // $9736 + 132, // $9737 + 132, // $9738 + 132, // $9739 + 132, // $973A + 132, // $973B + 132, // $973C + 132, // $973D + 132, // $973E + 132, // $973F + 132, // $9740 + 132, // $9741 + 132, // $9742 + 132, // $9743 + 132, // $9744 + 132, // $9745 + 132, // $9746 + 132, // $9747 + 132, // $9748 + 132, // $9749 + 132, // $974A + 132, // $974B + 132, // $974C + 132, // $974D + 132, // $974E + 132, // $974F + 132, // $9750 + 132, // $9751 + 132, // $9752 + 132, // $9753 + 132, // $9754 + 132, // $9755 + 132, // $9756 + 132, // $9757 + 132, // $9758 + 132, // $9759 + 132, // $975A + 132, // $975B + 132, // $975C + 132, // $975D + 132, // $975E + 132, // $975F + 132, // $9760 + 132, // $9761 + 132, // $9762 + 132, // $9763 + 132, // $9764 + 132, // $9765 + 132, // $9766 + 132, // $9767 + 132, // $9768 + 132, // $9769 + 132, // $976A + 132, // $976B + 132, // $976C + 132, // $976D + 132, // $976E + 132, // $976F + 132, // $9770 + 132, // $9771 + 132, // $9772 + 132, // $9773 + 132, // $9774 + 132, // $9775 + 132, // $9776 + 132, // $9777 + 132, // $9778 + 132, // $9779 + 132, // $977A + 132, // $977B + 132, // $977C + 132, // $977D + 132, // $977E + 132, // $977F + 132, // $9780 + 132, // $9781 + 132, // $9782 + 132, // $9783 + 132, // $9784 + 132, // $9785 + 132, // $9786 + 132, // $9787 + 132, // $9788 + 132, // $9789 + 132, // $978A + 132, // $978B + 132, // $978C + 132, // $978D + 132, // $978E + 132, // $978F + 132, // $9790 + 132, // $9791 + 132, // $9792 + 132, // $9793 + 132, // $9794 + 132, // $9795 + 132, // $9796 + 132, // $9797 + 132, // $9798 + 132, // $9799 + 132, // $979A + 132, // $979B + 132, // $979C + 132, // $979D + 132, // $979E + 132, // $979F + 132, // $97A0 + 132, // $97A1 + 132, // $97A2 + 132, // $97A3 + 132, // $97A4 + 132, // $97A5 + 132, // $97A6 + 132, // $97A7 + 132, // $97A8 + 132, // $97A9 + 132, // $97AA + 132, // $97AB + 132, // $97AC + 132, // $97AD + 132, // $97AE + 132, // $97AF + 132, // $97B0 + 132, // $97B1 + 132, // $97B2 + 132, // $97B3 + 132, // $97B4 + 132, // $97B5 + 132, // $97B6 + 132, // $97B7 + 132, // $97B8 + 132, // $97B9 + 132, // $97BA + 132, // $97BB + 132, // $97BC + 132, // $97BD + 132, // $97BE + 132, // $97BF + 132, // $97C0 + 132, // $97C1 + 132, // $97C2 + 132, // $97C3 + 132, // $97C4 + 132, // $97C5 + 132, // $97C6 + 132, // $97C7 + 132, // $97C8 + 132, // $97C9 + 132, // $97CA + 132, // $97CB + 132, // $97CC + 132, // $97CD + 132, // $97CE + 132, // $97CF + 132, // $97D0 + 132, // $97D1 + 132, // $97D2 + 132, // $97D3 + 132, // $97D4 + 132, // $97D5 + 132, // $97D6 + 132, // $97D7 + 132, // $97D8 + 132, // $97D9 + 132, // $97DA + 132, // $97DB + 132, // $97DC + 132, // $97DD + 132, // $97DE + 132, // $97DF + 132, // $97E0 + 132, // $97E1 + 132, // $97E2 + 132, // $97E3 + 132, // $97E4 + 132, // $97E5 + 132, // $97E6 + 132, // $97E7 + 132, // $97E8 + 132, // $97E9 + 132, // $97EA + 132, // $97EB + 132, // $97EC + 132, // $97ED + 132, // $97EE + 132, // $97EF + 132, // $97F0 + 132, // $97F1 + 132, // $97F2 + 132, // $97F3 + 132, // $97F4 + 132, // $97F5 + 132, // $97F6 + 132, // $97F7 + 132, // $97F8 + 132, // $97F9 + 132, // $97FA + 132, // $97FB + 132, // $97FC + 132, // $97FD + 132, // $97FE + 132, // $97FF + 132, // $9800 + 132, // $9801 + 132, // $9802 + 132, // $9803 + 132, // $9804 + 132, // $9805 + 132, // $9806 + 132, // $9807 + 132, // $9808 + 132, // $9809 + 132, // $980A + 132, // $980B + 132, // $980C + 132, // $980D + 132, // $980E + 132, // $980F + 132, // $9810 + 132, // $9811 + 132, // $9812 + 132, // $9813 + 132, // $9814 + 132, // $9815 + 132, // $9816 + 132, // $9817 + 132, // $9818 + 132, // $9819 + 132, // $981A + 132, // $981B + 132, // $981C + 132, // $981D + 132, // $981E + 132, // $981F + 132, // $9820 + 132, // $9821 + 132, // $9822 + 132, // $9823 + 132, // $9824 + 132, // $9825 + 132, // $9826 + 132, // $9827 + 132, // $9828 + 132, // $9829 + 132, // $982A + 132, // $982B + 132, // $982C + 132, // $982D + 132, // $982E + 132, // $982F + 132, // $9830 + 132, // $9831 + 132, // $9832 + 132, // $9833 + 132, // $9834 + 132, // $9835 + 132, // $9836 + 132, // $9837 + 132, // $9838 + 132, // $9839 + 132, // $983A + 132, // $983B + 132, // $983C + 132, // $983D + 132, // $983E + 132, // $983F + 132, // $9840 + 132, // $9841 + 132, // $9842 + 132, // $9843 + 132, // $9844 + 132, // $9845 + 132, // $9846 + 132, // $9847 + 132, // $9848 + 132, // $9849 + 132, // $984A + 132, // $984B + 132, // $984C + 132, // $984D + 132, // $984E + 132, // $984F + 132, // $9850 + 132, // $9851 + 132, // $9852 + 132, // $9853 + 132, // $9854 + 132, // $9855 + 132, // $9856 + 132, // $9857 + 132, // $9858 + 132, // $9859 + 132, // $985A + 132, // $985B + 132, // $985C + 132, // $985D + 132, // $985E + 132, // $985F + 132, // $9860 + 132, // $9861 + 132, // $9862 + 132, // $9863 + 132, // $9864 + 132, // $9865 + 132, // $9866 + 132, // $9867 + 132, // $9868 + 132, // $9869 + 132, // $986A + 132, // $986B + 132, // $986C + 132, // $986D + 132, // $986E + 132, // $986F + 132, // $9870 + 132, // $9871 + 132, // $9872 + 132, // $9873 + 132, // $9874 + 132, // $9875 + 132, // $9876 + 132, // $9877 + 132, // $9878 + 132, // $9879 + 132, // $987A + 132, // $987B + 132, // $987C + 132, // $987D + 132, // $987E + 132, // $987F + 132, // $9880 + 132, // $9881 + 132, // $9882 + 132, // $9883 + 132, // $9884 + 132, // $9885 + 132, // $9886 + 132, // $9887 + 132, // $9888 + 132, // $9889 + 132, // $988A + 132, // $988B + 132, // $988C + 132, // $988D + 132, // $988E + 132, // $988F + 132, // $9890 + 132, // $9891 + 132, // $9892 + 132, // $9893 + 132, // $9894 + 132, // $9895 + 132, // $9896 + 132, // $9897 + 132, // $9898 + 132, // $9899 + 132, // $989A + 132, // $989B + 132, // $989C + 132, // $989D + 132, // $989E + 132, // $989F + 132, // $98A0 + 132, // $98A1 + 132, // $98A2 + 132, // $98A3 + 132, // $98A4 + 132, // $98A5 + 132, // $98A6 + 132, // $98A7 + 132, // $98A8 + 132, // $98A9 + 132, // $98AA + 132, // $98AB + 132, // $98AC + 132, // $98AD + 132, // $98AE + 132, // $98AF + 132, // $98B0 + 132, // $98B1 + 132, // $98B2 + 132, // $98B3 + 132, // $98B4 + 132, // $98B5 + 132, // $98B6 + 132, // $98B7 + 132, // $98B8 + 132, // $98B9 + 132, // $98BA + 132, // $98BB + 132, // $98BC + 132, // $98BD + 132, // $98BE + 132, // $98BF + 132, // $98C0 + 132, // $98C1 + 132, // $98C2 + 132, // $98C3 + 132, // $98C4 + 132, // $98C5 + 132, // $98C6 + 132, // $98C7 + 132, // $98C8 + 132, // $98C9 + 132, // $98CA + 132, // $98CB + 132, // $98CC + 132, // $98CD + 132, // $98CE + 132, // $98CF + 132, // $98D0 + 132, // $98D1 + 132, // $98D2 + 132, // $98D3 + 132, // $98D4 + 132, // $98D5 + 132, // $98D6 + 132, // $98D7 + 132, // $98D8 + 132, // $98D9 + 132, // $98DA + 132, // $98DB + 132, // $98DC + 132, // $98DD + 132, // $98DE + 132, // $98DF + 132, // $98E0 + 132, // $98E1 + 132, // $98E2 + 132, // $98E3 + 132, // $98E4 + 132, // $98E5 + 132, // $98E6 + 132, // $98E7 + 132, // $98E8 + 132, // $98E9 + 132, // $98EA + 132, // $98EB + 132, // $98EC + 132, // $98ED + 132, // $98EE + 132, // $98EF + 132, // $98F0 + 132, // $98F1 + 132, // $98F2 + 132, // $98F3 + 132, // $98F4 + 132, // $98F5 + 132, // $98F6 + 132, // $98F7 + 132, // $98F8 + 132, // $98F9 + 132, // $98FA + 132, // $98FB + 132, // $98FC + 132, // $98FD + 132, // $98FE + 132, // $98FF + 132, // $9900 + 132, // $9901 + 132, // $9902 + 132, // $9903 + 132, // $9904 + 132, // $9905 + 132, // $9906 + 132, // $9907 + 132, // $9908 + 132, // $9909 + 132, // $990A + 132, // $990B + 132, // $990C + 132, // $990D + 132, // $990E + 132, // $990F + 132, // $9910 + 132, // $9911 + 132, // $9912 + 132, // $9913 + 132, // $9914 + 132, // $9915 + 132, // $9916 + 132, // $9917 + 132, // $9918 + 132, // $9919 + 132, // $991A + 132, // $991B + 132, // $991C + 132, // $991D + 132, // $991E + 132, // $991F + 132, // $9920 + 132, // $9921 + 132, // $9922 + 132, // $9923 + 132, // $9924 + 132, // $9925 + 132, // $9926 + 132, // $9927 + 132, // $9928 + 132, // $9929 + 132, // $992A + 132, // $992B + 132, // $992C + 132, // $992D + 132, // $992E + 132, // $992F + 132, // $9930 + 132, // $9931 + 132, // $9932 + 132, // $9933 + 132, // $9934 + 132, // $9935 + 132, // $9936 + 132, // $9937 + 132, // $9938 + 132, // $9939 + 132, // $993A + 132, // $993B + 132, // $993C + 132, // $993D + 132, // $993E + 132, // $993F + 132, // $9940 + 132, // $9941 + 132, // $9942 + 132, // $9943 + 132, // $9944 + 132, // $9945 + 132, // $9946 + 132, // $9947 + 132, // $9948 + 132, // $9949 + 132, // $994A + 132, // $994B + 132, // $994C + 132, // $994D + 132, // $994E + 132, // $994F + 132, // $9950 + 132, // $9951 + 132, // $9952 + 132, // $9953 + 132, // $9954 + 132, // $9955 + 132, // $9956 + 132, // $9957 + 132, // $9958 + 132, // $9959 + 132, // $995A + 132, // $995B + 132, // $995C + 132, // $995D + 132, // $995E + 132, // $995F + 132, // $9960 + 132, // $9961 + 132, // $9962 + 132, // $9963 + 132, // $9964 + 132, // $9965 + 132, // $9966 + 132, // $9967 + 132, // $9968 + 132, // $9969 + 132, // $996A + 132, // $996B + 132, // $996C + 132, // $996D + 132, // $996E + 132, // $996F + 132, // $9970 + 132, // $9971 + 132, // $9972 + 132, // $9973 + 132, // $9974 + 132, // $9975 + 132, // $9976 + 132, // $9977 + 132, // $9978 + 132, // $9979 + 132, // $997A + 132, // $997B + 132, // $997C + 132, // $997D + 132, // $997E + 132, // $997F + 132, // $9980 + 132, // $9981 + 132, // $9982 + 132, // $9983 + 132, // $9984 + 132, // $9985 + 132, // $9986 + 132, // $9987 + 132, // $9988 + 132, // $9989 + 132, // $998A + 132, // $998B + 132, // $998C + 132, // $998D + 132, // $998E + 132, // $998F + 132, // $9990 + 132, // $9991 + 132, // $9992 + 132, // $9993 + 132, // $9994 + 132, // $9995 + 132, // $9996 + 132, // $9997 + 132, // $9998 + 132, // $9999 + 132, // $999A + 132, // $999B + 132, // $999C + 132, // $999D + 132, // $999E + 132, // $999F + 132, // $99A0 + 132, // $99A1 + 132, // $99A2 + 132, // $99A3 + 132, // $99A4 + 132, // $99A5 + 132, // $99A6 + 132, // $99A7 + 132, // $99A8 + 132, // $99A9 + 132, // $99AA + 132, // $99AB + 132, // $99AC + 132, // $99AD + 132, // $99AE + 132, // $99AF + 132, // $99B0 + 132, // $99B1 + 132, // $99B2 + 132, // $99B3 + 132, // $99B4 + 132, // $99B5 + 132, // $99B6 + 132, // $99B7 + 132, // $99B8 + 132, // $99B9 + 132, // $99BA + 132, // $99BB + 132, // $99BC + 132, // $99BD + 132, // $99BE + 132, // $99BF + 132, // $99C0 + 132, // $99C1 + 132, // $99C2 + 132, // $99C3 + 132, // $99C4 + 132, // $99C5 + 132, // $99C6 + 132, // $99C7 + 132, // $99C8 + 132, // $99C9 + 132, // $99CA + 132, // $99CB + 132, // $99CC + 132, // $99CD + 132, // $99CE + 132, // $99CF + 132, // $99D0 + 132, // $99D1 + 132, // $99D2 + 132, // $99D3 + 132, // $99D4 + 132, // $99D5 + 132, // $99D6 + 132, // $99D7 + 132, // $99D8 + 132, // $99D9 + 132, // $99DA + 132, // $99DB + 132, // $99DC + 132, // $99DD + 132, // $99DE + 132, // $99DF + 132, // $99E0 + 132, // $99E1 + 132, // $99E2 + 132, // $99E3 + 132, // $99E4 + 132, // $99E5 + 132, // $99E6 + 132, // $99E7 + 132, // $99E8 + 132, // $99E9 + 132, // $99EA + 132, // $99EB + 132, // $99EC + 132, // $99ED + 132, // $99EE + 132, // $99EF + 132, // $99F0 + 132, // $99F1 + 132, // $99F2 + 132, // $99F3 + 132, // $99F4 + 132, // $99F5 + 132, // $99F6 + 132, // $99F7 + 132, // $99F8 + 132, // $99F9 + 132, // $99FA + 132, // $99FB + 132, // $99FC + 132, // $99FD + 132, // $99FE + 132, // $99FF + 132, // $9A00 + 132, // $9A01 + 132, // $9A02 + 132, // $9A03 + 132, // $9A04 + 132, // $9A05 + 132, // $9A06 + 132, // $9A07 + 132, // $9A08 + 132, // $9A09 + 132, // $9A0A + 132, // $9A0B + 132, // $9A0C + 132, // $9A0D + 132, // $9A0E + 132, // $9A0F + 132, // $9A10 + 132, // $9A11 + 132, // $9A12 + 132, // $9A13 + 132, // $9A14 + 132, // $9A15 + 132, // $9A16 + 132, // $9A17 + 132, // $9A18 + 132, // $9A19 + 132, // $9A1A + 132, // $9A1B + 132, // $9A1C + 132, // $9A1D + 132, // $9A1E + 132, // $9A1F + 132, // $9A20 + 132, // $9A21 + 132, // $9A22 + 132, // $9A23 + 132, // $9A24 + 132, // $9A25 + 132, // $9A26 + 132, // $9A27 + 132, // $9A28 + 132, // $9A29 + 132, // $9A2A + 132, // $9A2B + 132, // $9A2C + 132, // $9A2D + 132, // $9A2E + 132, // $9A2F + 132, // $9A30 + 132, // $9A31 + 132, // $9A32 + 132, // $9A33 + 132, // $9A34 + 132, // $9A35 + 132, // $9A36 + 132, // $9A37 + 132, // $9A38 + 132, // $9A39 + 132, // $9A3A + 132, // $9A3B + 132, // $9A3C + 132, // $9A3D + 132, // $9A3E + 132, // $9A3F + 132, // $9A40 + 132, // $9A41 + 132, // $9A42 + 132, // $9A43 + 132, // $9A44 + 132, // $9A45 + 132, // $9A46 + 132, // $9A47 + 132, // $9A48 + 132, // $9A49 + 132, // $9A4A + 132, // $9A4B + 132, // $9A4C + 132, // $9A4D + 132, // $9A4E + 132, // $9A4F + 132, // $9A50 + 132, // $9A51 + 132, // $9A52 + 132, // $9A53 + 132, // $9A54 + 132, // $9A55 + 132, // $9A56 + 132, // $9A57 + 132, // $9A58 + 132, // $9A59 + 132, // $9A5A + 132, // $9A5B + 132, // $9A5C + 132, // $9A5D + 132, // $9A5E + 132, // $9A5F + 132, // $9A60 + 132, // $9A61 + 132, // $9A62 + 132, // $9A63 + 132, // $9A64 + 132, // $9A65 + 132, // $9A66 + 132, // $9A67 + 132, // $9A68 + 132, // $9A69 + 132, // $9A6A + 132, // $9A6B + 132, // $9A6C + 132, // $9A6D + 132, // $9A6E + 132, // $9A6F + 132, // $9A70 + 132, // $9A71 + 132, // $9A72 + 132, // $9A73 + 132, // $9A74 + 132, // $9A75 + 132, // $9A76 + 132, // $9A77 + 132, // $9A78 + 132, // $9A79 + 132, // $9A7A + 132, // $9A7B + 132, // $9A7C + 132, // $9A7D + 132, // $9A7E + 132, // $9A7F + 132, // $9A80 + 132, // $9A81 + 132, // $9A82 + 132, // $9A83 + 132, // $9A84 + 132, // $9A85 + 132, // $9A86 + 132, // $9A87 + 132, // $9A88 + 132, // $9A89 + 132, // $9A8A + 132, // $9A8B + 132, // $9A8C + 132, // $9A8D + 132, // $9A8E + 132, // $9A8F + 132, // $9A90 + 132, // $9A91 + 132, // $9A92 + 132, // $9A93 + 132, // $9A94 + 132, // $9A95 + 132, // $9A96 + 132, // $9A97 + 132, // $9A98 + 132, // $9A99 + 132, // $9A9A + 132, // $9A9B + 132, // $9A9C + 132, // $9A9D + 132, // $9A9E + 132, // $9A9F + 132, // $9AA0 + 132, // $9AA1 + 132, // $9AA2 + 132, // $9AA3 + 132, // $9AA4 + 132, // $9AA5 + 132, // $9AA6 + 132, // $9AA7 + 132, // $9AA8 + 132, // $9AA9 + 132, // $9AAA + 132, // $9AAB + 132, // $9AAC + 132, // $9AAD + 132, // $9AAE + 132, // $9AAF + 132, // $9AB0 + 132, // $9AB1 + 132, // $9AB2 + 132, // $9AB3 + 132, // $9AB4 + 132, // $9AB5 + 132, // $9AB6 + 132, // $9AB7 + 132, // $9AB8 + 132, // $9AB9 + 132, // $9ABA + 132, // $9ABB + 132, // $9ABC + 132, // $9ABD + 132, // $9ABE + 132, // $9ABF + 132, // $9AC0 + 132, // $9AC1 + 132, // $9AC2 + 132, // $9AC3 + 132, // $9AC4 + 132, // $9AC5 + 132, // $9AC6 + 132, // $9AC7 + 132, // $9AC8 + 132, // $9AC9 + 132, // $9ACA + 132, // $9ACB + 132, // $9ACC + 132, // $9ACD + 132, // $9ACE + 132, // $9ACF + 132, // $9AD0 + 132, // $9AD1 + 132, // $9AD2 + 132, // $9AD3 + 132, // $9AD4 + 132, // $9AD5 + 132, // $9AD6 + 132, // $9AD7 + 132, // $9AD8 + 132, // $9AD9 + 132, // $9ADA + 132, // $9ADB + 132, // $9ADC + 132, // $9ADD + 132, // $9ADE + 132, // $9ADF + 132, // $9AE0 + 132, // $9AE1 + 132, // $9AE2 + 132, // $9AE3 + 132, // $9AE4 + 132, // $9AE5 + 132, // $9AE6 + 132, // $9AE7 + 132, // $9AE8 + 132, // $9AE9 + 132, // $9AEA + 132, // $9AEB + 132, // $9AEC + 132, // $9AED + 132, // $9AEE + 132, // $9AEF + 132, // $9AF0 + 132, // $9AF1 + 132, // $9AF2 + 132, // $9AF3 + 132, // $9AF4 + 132, // $9AF5 + 132, // $9AF6 + 132, // $9AF7 + 132, // $9AF8 + 132, // $9AF9 + 132, // $9AFA + 132, // $9AFB + 132, // $9AFC + 132, // $9AFD + 132, // $9AFE + 132, // $9AFF + 132, // $9B00 + 132, // $9B01 + 132, // $9B02 + 132, // $9B03 + 132, // $9B04 + 132, // $9B05 + 132, // $9B06 + 132, // $9B07 + 132, // $9B08 + 132, // $9B09 + 132, // $9B0A + 132, // $9B0B + 132, // $9B0C + 132, // $9B0D + 132, // $9B0E + 132, // $9B0F + 132, // $9B10 + 132, // $9B11 + 132, // $9B12 + 132, // $9B13 + 132, // $9B14 + 132, // $9B15 + 132, // $9B16 + 132, // $9B17 + 132, // $9B18 + 132, // $9B19 + 132, // $9B1A + 132, // $9B1B + 132, // $9B1C + 132, // $9B1D + 132, // $9B1E + 132, // $9B1F + 132, // $9B20 + 132, // $9B21 + 132, // $9B22 + 132, // $9B23 + 132, // $9B24 + 132, // $9B25 + 132, // $9B26 + 132, // $9B27 + 132, // $9B28 + 132, // $9B29 + 132, // $9B2A + 132, // $9B2B + 132, // $9B2C + 132, // $9B2D + 132, // $9B2E + 132, // $9B2F + 132, // $9B30 + 132, // $9B31 + 132, // $9B32 + 132, // $9B33 + 132, // $9B34 + 132, // $9B35 + 132, // $9B36 + 132, // $9B37 + 132, // $9B38 + 132, // $9B39 + 132, // $9B3A + 132, // $9B3B + 132, // $9B3C + 132, // $9B3D + 132, // $9B3E + 132, // $9B3F + 132, // $9B40 + 132, // $9B41 + 132, // $9B42 + 132, // $9B43 + 132, // $9B44 + 132, // $9B45 + 132, // $9B46 + 132, // $9B47 + 132, // $9B48 + 132, // $9B49 + 132, // $9B4A + 132, // $9B4B + 132, // $9B4C + 132, // $9B4D + 132, // $9B4E + 132, // $9B4F + 132, // $9B50 + 132, // $9B51 + 132, // $9B52 + 132, // $9B53 + 132, // $9B54 + 132, // $9B55 + 132, // $9B56 + 132, // $9B57 + 132, // $9B58 + 132, // $9B59 + 132, // $9B5A + 132, // $9B5B + 132, // $9B5C + 132, // $9B5D + 132, // $9B5E + 132, // $9B5F + 132, // $9B60 + 132, // $9B61 + 132, // $9B62 + 132, // $9B63 + 132, // $9B64 + 132, // $9B65 + 132, // $9B66 + 132, // $9B67 + 132, // $9B68 + 132, // $9B69 + 132, // $9B6A + 132, // $9B6B + 132, // $9B6C + 132, // $9B6D + 132, // $9B6E + 132, // $9B6F + 132, // $9B70 + 132, // $9B71 + 132, // $9B72 + 132, // $9B73 + 132, // $9B74 + 132, // $9B75 + 132, // $9B76 + 132, // $9B77 + 132, // $9B78 + 132, // $9B79 + 132, // $9B7A + 132, // $9B7B + 132, // $9B7C + 132, // $9B7D + 132, // $9B7E + 132, // $9B7F + 132, // $9B80 + 132, // $9B81 + 132, // $9B82 + 132, // $9B83 + 132, // $9B84 + 132, // $9B85 + 132, // $9B86 + 132, // $9B87 + 132, // $9B88 + 132, // $9B89 + 132, // $9B8A + 132, // $9B8B + 132, // $9B8C + 132, // $9B8D + 132, // $9B8E + 132, // $9B8F + 132, // $9B90 + 132, // $9B91 + 132, // $9B92 + 132, // $9B93 + 132, // $9B94 + 132, // $9B95 + 132, // $9B96 + 132, // $9B97 + 132, // $9B98 + 132, // $9B99 + 132, // $9B9A + 132, // $9B9B + 132, // $9B9C + 132, // $9B9D + 132, // $9B9E + 132, // $9B9F + 132, // $9BA0 + 132, // $9BA1 + 132, // $9BA2 + 132, // $9BA3 + 132, // $9BA4 + 132, // $9BA5 + 132, // $9BA6 + 132, // $9BA7 + 132, // $9BA8 + 132, // $9BA9 + 132, // $9BAA + 132, // $9BAB + 132, // $9BAC + 132, // $9BAD + 132, // $9BAE + 132, // $9BAF + 132, // $9BB0 + 132, // $9BB1 + 132, // $9BB2 + 132, // $9BB3 + 132, // $9BB4 + 132, // $9BB5 + 132, // $9BB6 + 132, // $9BB7 + 132, // $9BB8 + 132, // $9BB9 + 132, // $9BBA + 132, // $9BBB + 132, // $9BBC + 132, // $9BBD + 132, // $9BBE + 132, // $9BBF + 132, // $9BC0 + 132, // $9BC1 + 132, // $9BC2 + 132, // $9BC3 + 132, // $9BC4 + 132, // $9BC5 + 132, // $9BC6 + 132, // $9BC7 + 132, // $9BC8 + 132, // $9BC9 + 132, // $9BCA + 132, // $9BCB + 132, // $9BCC + 132, // $9BCD + 132, // $9BCE + 132, // $9BCF + 132, // $9BD0 + 132, // $9BD1 + 132, // $9BD2 + 132, // $9BD3 + 132, // $9BD4 + 132, // $9BD5 + 132, // $9BD6 + 132, // $9BD7 + 132, // $9BD8 + 132, // $9BD9 + 132, // $9BDA + 132, // $9BDB + 132, // $9BDC + 132, // $9BDD + 132, // $9BDE + 132, // $9BDF + 132, // $9BE0 + 132, // $9BE1 + 132, // $9BE2 + 132, // $9BE3 + 132, // $9BE4 + 132, // $9BE5 + 132, // $9BE6 + 132, // $9BE7 + 132, // $9BE8 + 132, // $9BE9 + 132, // $9BEA + 132, // $9BEB + 132, // $9BEC + 132, // $9BED + 132, // $9BEE + 132, // $9BEF + 132, // $9BF0 + 132, // $9BF1 + 132, // $9BF2 + 132, // $9BF3 + 132, // $9BF4 + 132, // $9BF5 + 132, // $9BF6 + 132, // $9BF7 + 132, // $9BF8 + 132, // $9BF9 + 132, // $9BFA + 132, // $9BFB + 132, // $9BFC + 132, // $9BFD + 132, // $9BFE + 132, // $9BFF + 132, // $9C00 + 132, // $9C01 + 132, // $9C02 + 132, // $9C03 + 132, // $9C04 + 132, // $9C05 + 132, // $9C06 + 132, // $9C07 + 132, // $9C08 + 132, // $9C09 + 132, // $9C0A + 132, // $9C0B + 132, // $9C0C + 132, // $9C0D + 132, // $9C0E + 132, // $9C0F + 132, // $9C10 + 132, // $9C11 + 132, // $9C12 + 132, // $9C13 + 132, // $9C14 + 132, // $9C15 + 132, // $9C16 + 132, // $9C17 + 132, // $9C18 + 132, // $9C19 + 132, // $9C1A + 132, // $9C1B + 132, // $9C1C + 132, // $9C1D + 132, // $9C1E + 132, // $9C1F + 132, // $9C20 + 132, // $9C21 + 132, // $9C22 + 132, // $9C23 + 132, // $9C24 + 132, // $9C25 + 132, // $9C26 + 132, // $9C27 + 132, // $9C28 + 132, // $9C29 + 132, // $9C2A + 132, // $9C2B + 132, // $9C2C + 132, // $9C2D + 132, // $9C2E + 132, // $9C2F + 132, // $9C30 + 132, // $9C31 + 132, // $9C32 + 132, // $9C33 + 132, // $9C34 + 132, // $9C35 + 132, // $9C36 + 132, // $9C37 + 132, // $9C38 + 132, // $9C39 + 132, // $9C3A + 132, // $9C3B + 132, // $9C3C + 132, // $9C3D + 132, // $9C3E + 132, // $9C3F + 132, // $9C40 + 132, // $9C41 + 132, // $9C42 + 132, // $9C43 + 132, // $9C44 + 132, // $9C45 + 132, // $9C46 + 132, // $9C47 + 132, // $9C48 + 132, // $9C49 + 132, // $9C4A + 132, // $9C4B + 132, // $9C4C + 132, // $9C4D + 132, // $9C4E + 132, // $9C4F + 132, // $9C50 + 132, // $9C51 + 132, // $9C52 + 132, // $9C53 + 132, // $9C54 + 132, // $9C55 + 132, // $9C56 + 132, // $9C57 + 132, // $9C58 + 132, // $9C59 + 132, // $9C5A + 132, // $9C5B + 132, // $9C5C + 132, // $9C5D + 132, // $9C5E + 132, // $9C5F + 132, // $9C60 + 132, // $9C61 + 132, // $9C62 + 132, // $9C63 + 132, // $9C64 + 132, // $9C65 + 132, // $9C66 + 132, // $9C67 + 132, // $9C68 + 132, // $9C69 + 132, // $9C6A + 132, // $9C6B + 132, // $9C6C + 132, // $9C6D + 132, // $9C6E + 132, // $9C6F + 132, // $9C70 + 132, // $9C71 + 132, // $9C72 + 132, // $9C73 + 132, // $9C74 + 132, // $9C75 + 132, // $9C76 + 132, // $9C77 + 132, // $9C78 + 132, // $9C79 + 132, // $9C7A + 132, // $9C7B + 132, // $9C7C + 132, // $9C7D + 132, // $9C7E + 132, // $9C7F + 132, // $9C80 + 132, // $9C81 + 132, // $9C82 + 132, // $9C83 + 132, // $9C84 + 132, // $9C85 + 132, // $9C86 + 132, // $9C87 + 132, // $9C88 + 132, // $9C89 + 132, // $9C8A + 132, // $9C8B + 132, // $9C8C + 132, // $9C8D + 132, // $9C8E + 132, // $9C8F + 132, // $9C90 + 132, // $9C91 + 132, // $9C92 + 132, // $9C93 + 132, // $9C94 + 132, // $9C95 + 132, // $9C96 + 132, // $9C97 + 132, // $9C98 + 132, // $9C99 + 132, // $9C9A + 132, // $9C9B + 132, // $9C9C + 132, // $9C9D + 132, // $9C9E + 132, // $9C9F + 132, // $9CA0 + 132, // $9CA1 + 132, // $9CA2 + 132, // $9CA3 + 132, // $9CA4 + 132, // $9CA5 + 132, // $9CA6 + 132, // $9CA7 + 132, // $9CA8 + 132, // $9CA9 + 132, // $9CAA + 132, // $9CAB + 132, // $9CAC + 132, // $9CAD + 132, // $9CAE + 132, // $9CAF + 132, // $9CB0 + 132, // $9CB1 + 132, // $9CB2 + 132, // $9CB3 + 132, // $9CB4 + 132, // $9CB5 + 132, // $9CB6 + 132, // $9CB7 + 132, // $9CB8 + 132, // $9CB9 + 132, // $9CBA + 132, // $9CBB + 132, // $9CBC + 132, // $9CBD + 132, // $9CBE + 132, // $9CBF + 132, // $9CC0 + 132, // $9CC1 + 132, // $9CC2 + 132, // $9CC3 + 132, // $9CC4 + 132, // $9CC5 + 132, // $9CC6 + 132, // $9CC7 + 132, // $9CC8 + 132, // $9CC9 + 132, // $9CCA + 132, // $9CCB + 132, // $9CCC + 132, // $9CCD + 132, // $9CCE + 132, // $9CCF + 132, // $9CD0 + 132, // $9CD1 + 132, // $9CD2 + 132, // $9CD3 + 132, // $9CD4 + 132, // $9CD5 + 132, // $9CD6 + 132, // $9CD7 + 132, // $9CD8 + 132, // $9CD9 + 132, // $9CDA + 132, // $9CDB + 132, // $9CDC + 132, // $9CDD + 132, // $9CDE + 132, // $9CDF + 132, // $9CE0 + 132, // $9CE1 + 132, // $9CE2 + 132, // $9CE3 + 132, // $9CE4 + 132, // $9CE5 + 132, // $9CE6 + 132, // $9CE7 + 132, // $9CE8 + 132, // $9CE9 + 132, // $9CEA + 132, // $9CEB + 132, // $9CEC + 132, // $9CED + 132, // $9CEE + 132, // $9CEF + 132, // $9CF0 + 132, // $9CF1 + 132, // $9CF2 + 132, // $9CF3 + 132, // $9CF4 + 132, // $9CF5 + 132, // $9CF6 + 132, // $9CF7 + 132, // $9CF8 + 132, // $9CF9 + 132, // $9CFA + 132, // $9CFB + 132, // $9CFC + 132, // $9CFD + 132, // $9CFE + 132, // $9CFF + 132, // $9D00 + 132, // $9D01 + 132, // $9D02 + 132, // $9D03 + 132, // $9D04 + 132, // $9D05 + 132, // $9D06 + 132, // $9D07 + 132, // $9D08 + 132, // $9D09 + 132, // $9D0A + 132, // $9D0B + 132, // $9D0C + 132, // $9D0D + 132, // $9D0E + 132, // $9D0F + 132, // $9D10 + 132, // $9D11 + 132, // $9D12 + 132, // $9D13 + 132, // $9D14 + 132, // $9D15 + 132, // $9D16 + 132, // $9D17 + 132, // $9D18 + 132, // $9D19 + 132, // $9D1A + 132, // $9D1B + 132, // $9D1C + 132, // $9D1D + 132, // $9D1E + 132, // $9D1F + 132, // $9D20 + 132, // $9D21 + 132, // $9D22 + 132, // $9D23 + 132, // $9D24 + 132, // $9D25 + 132, // $9D26 + 132, // $9D27 + 132, // $9D28 + 132, // $9D29 + 132, // $9D2A + 132, // $9D2B + 132, // $9D2C + 132, // $9D2D + 132, // $9D2E + 132, // $9D2F + 132, // $9D30 + 132, // $9D31 + 132, // $9D32 + 132, // $9D33 + 132, // $9D34 + 132, // $9D35 + 132, // $9D36 + 132, // $9D37 + 132, // $9D38 + 132, // $9D39 + 132, // $9D3A + 132, // $9D3B + 132, // $9D3C + 132, // $9D3D + 132, // $9D3E + 132, // $9D3F + 132, // $9D40 + 132, // $9D41 + 132, // $9D42 + 132, // $9D43 + 132, // $9D44 + 132, // $9D45 + 132, // $9D46 + 132, // $9D47 + 132, // $9D48 + 132, // $9D49 + 132, // $9D4A + 132, // $9D4B + 132, // $9D4C + 132, // $9D4D + 132, // $9D4E + 132, // $9D4F + 132, // $9D50 + 132, // $9D51 + 132, // $9D52 + 132, // $9D53 + 132, // $9D54 + 132, // $9D55 + 132, // $9D56 + 132, // $9D57 + 132, // $9D58 + 132, // $9D59 + 132, // $9D5A + 132, // $9D5B + 132, // $9D5C + 132, // $9D5D + 132, // $9D5E + 132, // $9D5F + 132, // $9D60 + 132, // $9D61 + 132, // $9D62 + 132, // $9D63 + 132, // $9D64 + 132, // $9D65 + 132, // $9D66 + 132, // $9D67 + 132, // $9D68 + 132, // $9D69 + 132, // $9D6A + 132, // $9D6B + 132, // $9D6C + 132, // $9D6D + 132, // $9D6E + 132, // $9D6F + 132, // $9D70 + 132, // $9D71 + 132, // $9D72 + 132, // $9D73 + 132, // $9D74 + 132, // $9D75 + 132, // $9D76 + 132, // $9D77 + 132, // $9D78 + 132, // $9D79 + 132, // $9D7A + 132, // $9D7B + 132, // $9D7C + 132, // $9D7D + 132, // $9D7E + 132, // $9D7F + 132, // $9D80 + 132, // $9D81 + 132, // $9D82 + 132, // $9D83 + 132, // $9D84 + 132, // $9D85 + 132, // $9D86 + 132, // $9D87 + 132, // $9D88 + 132, // $9D89 + 132, // $9D8A + 132, // $9D8B + 132, // $9D8C + 132, // $9D8D + 132, // $9D8E + 132, // $9D8F + 132, // $9D90 + 132, // $9D91 + 132, // $9D92 + 132, // $9D93 + 132, // $9D94 + 132, // $9D95 + 132, // $9D96 + 132, // $9D97 + 132, // $9D98 + 132, // $9D99 + 132, // $9D9A + 132, // $9D9B + 132, // $9D9C + 132, // $9D9D + 132, // $9D9E + 132, // $9D9F + 132, // $9DA0 + 132, // $9DA1 + 132, // $9DA2 + 132, // $9DA3 + 132, // $9DA4 + 132, // $9DA5 + 132, // $9DA6 + 132, // $9DA7 + 132, // $9DA8 + 132, // $9DA9 + 132, // $9DAA + 132, // $9DAB + 132, // $9DAC + 132, // $9DAD + 132, // $9DAE + 132, // $9DAF + 132, // $9DB0 + 132, // $9DB1 + 132, // $9DB2 + 132, // $9DB3 + 132, // $9DB4 + 132, // $9DB5 + 132, // $9DB6 + 132, // $9DB7 + 132, // $9DB8 + 132, // $9DB9 + 132, // $9DBA + 132, // $9DBB + 132, // $9DBC + 132, // $9DBD + 132, // $9DBE + 132, // $9DBF + 132, // $9DC0 + 132, // $9DC1 + 132, // $9DC2 + 132, // $9DC3 + 132, // $9DC4 + 132, // $9DC5 + 132, // $9DC6 + 132, // $9DC7 + 132, // $9DC8 + 132, // $9DC9 + 132, // $9DCA + 132, // $9DCB + 132, // $9DCC + 132, // $9DCD + 132, // $9DCE + 132, // $9DCF + 132, // $9DD0 + 132, // $9DD1 + 132, // $9DD2 + 132, // $9DD3 + 132, // $9DD4 + 132, // $9DD5 + 132, // $9DD6 + 132, // $9DD7 + 132, // $9DD8 + 132, // $9DD9 + 132, // $9DDA + 132, // $9DDB + 132, // $9DDC + 132, // $9DDD + 132, // $9DDE + 132, // $9DDF + 132, // $9DE0 + 132, // $9DE1 + 132, // $9DE2 + 132, // $9DE3 + 132, // $9DE4 + 132, // $9DE5 + 132, // $9DE6 + 132, // $9DE7 + 132, // $9DE8 + 132, // $9DE9 + 132, // $9DEA + 132, // $9DEB + 132, // $9DEC + 132, // $9DED + 132, // $9DEE + 132, // $9DEF + 132, // $9DF0 + 132, // $9DF1 + 132, // $9DF2 + 132, // $9DF3 + 132, // $9DF4 + 132, // $9DF5 + 132, // $9DF6 + 132, // $9DF7 + 132, // $9DF8 + 132, // $9DF9 + 132, // $9DFA + 132, // $9DFB + 132, // $9DFC + 132, // $9DFD + 132, // $9DFE + 132, // $9DFF + 132, // $9E00 + 132, // $9E01 + 132, // $9E02 + 132, // $9E03 + 132, // $9E04 + 132, // $9E05 + 132, // $9E06 + 132, // $9E07 + 132, // $9E08 + 132, // $9E09 + 132, // $9E0A + 132, // $9E0B + 132, // $9E0C + 132, // $9E0D + 132, // $9E0E + 132, // $9E0F + 132, // $9E10 + 132, // $9E11 + 132, // $9E12 + 132, // $9E13 + 132, // $9E14 + 132, // $9E15 + 132, // $9E16 + 132, // $9E17 + 132, // $9E18 + 132, // $9E19 + 132, // $9E1A + 132, // $9E1B + 132, // $9E1C + 132, // $9E1D + 132, // $9E1E + 132, // $9E1F + 132, // $9E20 + 132, // $9E21 + 132, // $9E22 + 132, // $9E23 + 132, // $9E24 + 132, // $9E25 + 132, // $9E26 + 132, // $9E27 + 132, // $9E28 + 132, // $9E29 + 132, // $9E2A + 132, // $9E2B + 132, // $9E2C + 132, // $9E2D + 132, // $9E2E + 132, // $9E2F + 132, // $9E30 + 132, // $9E31 + 132, // $9E32 + 132, // $9E33 + 132, // $9E34 + 132, // $9E35 + 132, // $9E36 + 132, // $9E37 + 132, // $9E38 + 132, // $9E39 + 132, // $9E3A + 132, // $9E3B + 132, // $9E3C + 132, // $9E3D + 132, // $9E3E + 132, // $9E3F + 132, // $9E40 + 132, // $9E41 + 132, // $9E42 + 132, // $9E43 + 132, // $9E44 + 132, // $9E45 + 132, // $9E46 + 132, // $9E47 + 132, // $9E48 + 132, // $9E49 + 132, // $9E4A + 132, // $9E4B + 132, // $9E4C + 132, // $9E4D + 132, // $9E4E + 132, // $9E4F + 132, // $9E50 + 132, // $9E51 + 132, // $9E52 + 132, // $9E53 + 132, // $9E54 + 132, // $9E55 + 132, // $9E56 + 132, // $9E57 + 132, // $9E58 + 132, // $9E59 + 132, // $9E5A + 132, // $9E5B + 132, // $9E5C + 132, // $9E5D + 132, // $9E5E + 132, // $9E5F + 132, // $9E60 + 132, // $9E61 + 132, // $9E62 + 132, // $9E63 + 132, // $9E64 + 132, // $9E65 + 132, // $9E66 + 132, // $9E67 + 132, // $9E68 + 132, // $9E69 + 132, // $9E6A + 132, // $9E6B + 132, // $9E6C + 132, // $9E6D + 132, // $9E6E + 132, // $9E6F + 132, // $9E70 + 132, // $9E71 + 132, // $9E72 + 132, // $9E73 + 132, // $9E74 + 132, // $9E75 + 132, // $9E76 + 132, // $9E77 + 132, // $9E78 + 132, // $9E79 + 132, // $9E7A + 132, // $9E7B + 132, // $9E7C + 132, // $9E7D + 132, // $9E7E + 132, // $9E7F + 132, // $9E80 + 132, // $9E81 + 132, // $9E82 + 132, // $9E83 + 132, // $9E84 + 132, // $9E85 + 132, // $9E86 + 132, // $9E87 + 132, // $9E88 + 132, // $9E89 + 132, // $9E8A + 132, // $9E8B + 132, // $9E8C + 132, // $9E8D + 132, // $9E8E + 132, // $9E8F + 132, // $9E90 + 132, // $9E91 + 132, // $9E92 + 132, // $9E93 + 132, // $9E94 + 132, // $9E95 + 132, // $9E96 + 132, // $9E97 + 132, // $9E98 + 132, // $9E99 + 132, // $9E9A + 132, // $9E9B + 132, // $9E9C + 132, // $9E9D + 132, // $9E9E + 132, // $9E9F + 132, // $9EA0 + 132, // $9EA1 + 132, // $9EA2 + 132, // $9EA3 + 132, // $9EA4 + 132, // $9EA5 + 132, // $9EA6 + 132, // $9EA7 + 132, // $9EA8 + 132, // $9EA9 + 132, // $9EAA + 132, // $9EAB + 132, // $9EAC + 132, // $9EAD + 132, // $9EAE + 132, // $9EAF + 132, // $9EB0 + 132, // $9EB1 + 132, // $9EB2 + 132, // $9EB3 + 132, // $9EB4 + 132, // $9EB5 + 132, // $9EB6 + 132, // $9EB7 + 132, // $9EB8 + 132, // $9EB9 + 132, // $9EBA + 132, // $9EBB + 132, // $9EBC + 132, // $9EBD + 132, // $9EBE + 132, // $9EBF + 132, // $9EC0 + 132, // $9EC1 + 132, // $9EC2 + 132, // $9EC3 + 132, // $9EC4 + 132, // $9EC5 + 132, // $9EC6 + 132, // $9EC7 + 132, // $9EC8 + 132, // $9EC9 + 132, // $9ECA + 132, // $9ECB + 132, // $9ECC + 132, // $9ECD + 132, // $9ECE + 132, // $9ECF + 132, // $9ED0 + 132, // $9ED1 + 132, // $9ED2 + 132, // $9ED3 + 132, // $9ED4 + 132, // $9ED5 + 132, // $9ED6 + 132, // $9ED7 + 132, // $9ED8 + 132, // $9ED9 + 132, // $9EDA + 132, // $9EDB + 132, // $9EDC + 132, // $9EDD + 132, // $9EDE + 132, // $9EDF + 132, // $9EE0 + 132, // $9EE1 + 132, // $9EE2 + 132, // $9EE3 + 132, // $9EE4 + 132, // $9EE5 + 132, // $9EE6 + 132, // $9EE7 + 132, // $9EE8 + 132, // $9EE9 + 132, // $9EEA + 132, // $9EEB + 132, // $9EEC + 132, // $9EED + 132, // $9EEE + 132, // $9EEF + 132, // $9EF0 + 132, // $9EF1 + 132, // $9EF2 + 132, // $9EF3 + 132, // $9EF4 + 132, // $9EF5 + 132, // $9EF6 + 132, // $9EF7 + 132, // $9EF8 + 132, // $9EF9 + 132, // $9EFA + 132, // $9EFB + 132, // $9EFC + 132, // $9EFD + 132, // $9EFE + 132, // $9EFF + 132, // $9F00 + 132, // $9F01 + 132, // $9F02 + 132, // $9F03 + 132, // $9F04 + 132, // $9F05 + 132, // $9F06 + 132, // $9F07 + 132, // $9F08 + 132, // $9F09 + 132, // $9F0A + 132, // $9F0B + 132, // $9F0C + 132, // $9F0D + 132, // $9F0E + 132, // $9F0F + 132, // $9F10 + 132, // $9F11 + 132, // $9F12 + 132, // $9F13 + 132, // $9F14 + 132, // $9F15 + 132, // $9F16 + 132, // $9F17 + 132, // $9F18 + 132, // $9F19 + 132, // $9F1A + 132, // $9F1B + 132, // $9F1C + 132, // $9F1D + 132, // $9F1E + 132, // $9F1F + 132, // $9F20 + 132, // $9F21 + 132, // $9F22 + 132, // $9F23 + 132, // $9F24 + 132, // $9F25 + 132, // $9F26 + 132, // $9F27 + 132, // $9F28 + 132, // $9F29 + 132, // $9F2A + 132, // $9F2B + 132, // $9F2C + 132, // $9F2D + 132, // $9F2E + 132, // $9F2F + 132, // $9F30 + 132, // $9F31 + 132, // $9F32 + 132, // $9F33 + 132, // $9F34 + 132, // $9F35 + 132, // $9F36 + 132, // $9F37 + 132, // $9F38 + 132, // $9F39 + 132, // $9F3A + 132, // $9F3B + 132, // $9F3C + 132, // $9F3D + 132, // $9F3E + 132, // $9F3F + 132, // $9F40 + 132, // $9F41 + 132, // $9F42 + 132, // $9F43 + 132, // $9F44 + 132, // $9F45 + 132, // $9F46 + 132, // $9F47 + 132, // $9F48 + 132, // $9F49 + 132, // $9F4A + 132, // $9F4B + 132, // $9F4C + 132, // $9F4D + 132, // $9F4E + 132, // $9F4F + 132, // $9F50 + 132, // $9F51 + 132, // $9F52 + 132, // $9F53 + 132, // $9F54 + 132, // $9F55 + 132, // $9F56 + 132, // $9F57 + 132, // $9F58 + 132, // $9F59 + 132, // $9F5A + 132, // $9F5B + 132, // $9F5C + 132, // $9F5D + 132, // $9F5E + 132, // $9F5F + 132, // $9F60 + 132, // $9F61 + 132, // $9F62 + 132, // $9F63 + 132, // $9F64 + 132, // $9F65 + 132, // $9F66 + 132, // $9F67 + 132, // $9F68 + 132, // $9F69 + 132, // $9F6A + 132, // $9F6B + 132, // $9F6C + 132, // $9F6D + 132, // $9F6E + 132, // $9F6F + 132, // $9F70 + 132, // $9F71 + 132, // $9F72 + 132, // $9F73 + 132, // $9F74 + 132, // $9F75 + 132, // $9F76 + 132, // $9F77 + 132, // $9F78 + 132, // $9F79 + 132, // $9F7A + 132, // $9F7B + 132, // $9F7C + 132, // $9F7D + 132, // $9F7E + 132, // $9F7F + 132, // $9F80 + 132, // $9F81 + 132, // $9F82 + 132, // $9F83 + 132, // $9F84 + 132, // $9F85 + 132, // $9F86 + 132, // $9F87 + 132, // $9F88 + 132, // $9F89 + 132, // $9F8A + 132, // $9F8B + 132, // $9F8C + 132, // $9F8D + 132, // $9F8E + 132, // $9F8F + 132, // $9F90 + 132, // $9F91 + 132, // $9F92 + 132, // $9F93 + 132, // $9F94 + 132, // $9F95 + 132, // $9F96 + 132, // $9F97 + 132, // $9F98 + 132, // $9F99 + 132, // $9F9A + 132, // $9F9B + 132, // $9F9C + 132, // $9F9D + 132, // $9F9E + 132, // $9F9F + 132, // $9FA0 + 132, // $9FA1 + 132, // $9FA2 + 132, // $9FA3 + 132, // $9FA4 + 132, // $9FA5 + 132, // $9FA6 + 132, // $9FA7 + 132, // $9FA8 + 132, // $9FA9 + 132, // $9FAA + 132, // $9FAB + 132, // $9FAC + 132, // $9FAD + 132, // $9FAE + 132, // $9FAF + 132, // $9FB0 + 132, // $9FB1 + 132, // $9FB2 + 132, // $9FB3 + 132, // $9FB4 + 132, // $9FB5 + 132, // $9FB6 + 132, // $9FB7 + 132, // $9FB8 + 132, // $9FB9 + 132, // $9FBA + 132, // $9FBB + 132, // $9FBC + 132, // $9FBD + 132, // $9FBE + 132, // $9FBF + 132, // $9FC0 + 132, // $9FC1 + 132, // $9FC2 + 132, // $9FC3 + 132, // $9FC4 + 132, // $9FC5 + 132, // $9FC6 + 132, // $9FC7 + 132, // $9FC8 + 132, // $9FC9 + 132, // $9FCA + 132, // $9FCB + 132, // $9FCC + 132, // $9FCD + 132, // $9FCE + 132, // $9FCF + 132, // $9FD0 + 132, // $9FD1 + 132, // $9FD2 + 132, // $9FD3 + 132, // $9FD4 + 132, // $9FD5 + 29, // $9FD6 + 29, // $9FD7 + 29, // $9FD8 + 29, // $9FD9 + 29, // $9FDA + 29, // $9FDB + 29, // $9FDC + 29, // $9FDD + 29, // $9FDE + 29, // $9FDF + 29, // $9FE0 + 29, // $9FE1 + 29, // $9FE2 + 29, // $9FE3 + 29, // $9FE4 + 29, // $9FE5 + 29, // $9FE6 + 29, // $9FE7 + 29, // $9FE8 + 29, // $9FE9 + 29, // $9FEA + 29, // $9FEB + 29, // $9FEC + 29, // $9FED + 29, // $9FEE + 29, // $9FEF + 29, // $9FF0 + 29, // $9FF1 + 29, // $9FF2 + 29, // $9FF3 + 29, // $9FF4 + 29, // $9FF5 + 29, // $9FF6 + 29, // $9FF7 + 29, // $9FF8 + 29, // $9FF9 + 29, // $9FFA + 29, // $9FFB + 29, // $9FFC + 29, // $9FFD + 29, // $9FFE + 29, // $9FFF + 132, // $A000 + 132, // $A001 + 132, // $A002 + 132, // $A003 + 132, // $A004 + 132, // $A005 + 132, // $A006 + 132, // $A007 + 132, // $A008 + 132, // $A009 + 132, // $A00A + 132, // $A00B + 132, // $A00C + 132, // $A00D + 132, // $A00E + 132, // $A00F + 132, // $A010 + 132, // $A011 + 132, // $A012 + 132, // $A013 + 132, // $A014 + 131, // $A015 + 132, // $A016 + 132, // $A017 + 132, // $A018 + 132, // $A019 + 132, // $A01A + 132, // $A01B + 132, // $A01C + 132, // $A01D + 132, // $A01E + 132, // $A01F + 132, // $A020 + 132, // $A021 + 132, // $A022 + 132, // $A023 + 132, // $A024 + 132, // $A025 + 132, // $A026 + 132, // $A027 + 132, // $A028 + 132, // $A029 + 132, // $A02A + 132, // $A02B + 132, // $A02C + 132, // $A02D + 132, // $A02E + 132, // $A02F + 132, // $A030 + 132, // $A031 + 132, // $A032 + 132, // $A033 + 132, // $A034 + 132, // $A035 + 132, // $A036 + 132, // $A037 + 132, // $A038 + 132, // $A039 + 132, // $A03A + 132, // $A03B + 132, // $A03C + 132, // $A03D + 132, // $A03E + 132, // $A03F + 132, // $A040 + 132, // $A041 + 132, // $A042 + 132, // $A043 + 132, // $A044 + 132, // $A045 + 132, // $A046 + 132, // $A047 + 132, // $A048 + 132, // $A049 + 132, // $A04A + 132, // $A04B + 132, // $A04C + 132, // $A04D + 132, // $A04E + 132, // $A04F + 132, // $A050 + 132, // $A051 + 132, // $A052 + 132, // $A053 + 132, // $A054 + 132, // $A055 + 132, // $A056 + 132, // $A057 + 132, // $A058 + 132, // $A059 + 132, // $A05A + 132, // $A05B + 132, // $A05C + 132, // $A05D + 132, // $A05E + 132, // $A05F + 132, // $A060 + 132, // $A061 + 132, // $A062 + 132, // $A063 + 132, // $A064 + 132, // $A065 + 132, // $A066 + 132, // $A067 + 132, // $A068 + 132, // $A069 + 132, // $A06A + 132, // $A06B + 132, // $A06C + 132, // $A06D + 132, // $A06E + 132, // $A06F + 132, // $A070 + 132, // $A071 + 132, // $A072 + 132, // $A073 + 132, // $A074 + 132, // $A075 + 132, // $A076 + 132, // $A077 + 132, // $A078 + 132, // $A079 + 132, // $A07A + 132, // $A07B + 132, // $A07C + 132, // $A07D + 132, // $A07E + 132, // $A07F + 132, // $A080 + 132, // $A081 + 132, // $A082 + 132, // $A083 + 132, // $A084 + 132, // $A085 + 132, // $A086 + 132, // $A087 + 132, // $A088 + 132, // $A089 + 132, // $A08A + 132, // $A08B + 132, // $A08C + 132, // $A08D + 132, // $A08E + 132, // $A08F + 132, // $A090 + 132, // $A091 + 132, // $A092 + 132, // $A093 + 132, // $A094 + 132, // $A095 + 132, // $A096 + 132, // $A097 + 132, // $A098 + 132, // $A099 + 132, // $A09A + 132, // $A09B + 132, // $A09C + 132, // $A09D + 132, // $A09E + 132, // $A09F + 132, // $A0A0 + 132, // $A0A1 + 132, // $A0A2 + 132, // $A0A3 + 132, // $A0A4 + 132, // $A0A5 + 132, // $A0A6 + 132, // $A0A7 + 132, // $A0A8 + 132, // $A0A9 + 132, // $A0AA + 132, // $A0AB + 132, // $A0AC + 132, // $A0AD + 132, // $A0AE + 132, // $A0AF + 132, // $A0B0 + 132, // $A0B1 + 132, // $A0B2 + 132, // $A0B3 + 132, // $A0B4 + 132, // $A0B5 + 132, // $A0B6 + 132, // $A0B7 + 132, // $A0B8 + 132, // $A0B9 + 132, // $A0BA + 132, // $A0BB + 132, // $A0BC + 132, // $A0BD + 132, // $A0BE + 132, // $A0BF + 132, // $A0C0 + 132, // $A0C1 + 132, // $A0C2 + 132, // $A0C3 + 132, // $A0C4 + 132, // $A0C5 + 132, // $A0C6 + 132, // $A0C7 + 132, // $A0C8 + 132, // $A0C9 + 132, // $A0CA + 132, // $A0CB + 132, // $A0CC + 132, // $A0CD + 132, // $A0CE + 132, // $A0CF + 132, // $A0D0 + 132, // $A0D1 + 132, // $A0D2 + 132, // $A0D3 + 132, // $A0D4 + 132, // $A0D5 + 132, // $A0D6 + 132, // $A0D7 + 132, // $A0D8 + 132, // $A0D9 + 132, // $A0DA + 132, // $A0DB + 132, // $A0DC + 132, // $A0DD + 132, // $A0DE + 132, // $A0DF + 132, // $A0E0 + 132, // $A0E1 + 132, // $A0E2 + 132, // $A0E3 + 132, // $A0E4 + 132, // $A0E5 + 132, // $A0E6 + 132, // $A0E7 + 132, // $A0E8 + 132, // $A0E9 + 132, // $A0EA + 132, // $A0EB + 132, // $A0EC + 132, // $A0ED + 132, // $A0EE + 132, // $A0EF + 132, // $A0F0 + 132, // $A0F1 + 132, // $A0F2 + 132, // $A0F3 + 132, // $A0F4 + 132, // $A0F5 + 132, // $A0F6 + 132, // $A0F7 + 132, // $A0F8 + 132, // $A0F9 + 132, // $A0FA + 132, // $A0FB + 132, // $A0FC + 132, // $A0FD + 132, // $A0FE + 132, // $A0FF + 132, // $A100 + 132, // $A101 + 132, // $A102 + 132, // $A103 + 132, // $A104 + 132, // $A105 + 132, // $A106 + 132, // $A107 + 132, // $A108 + 132, // $A109 + 132, // $A10A + 132, // $A10B + 132, // $A10C + 132, // $A10D + 132, // $A10E + 132, // $A10F + 132, // $A110 + 132, // $A111 + 132, // $A112 + 132, // $A113 + 132, // $A114 + 132, // $A115 + 132, // $A116 + 132, // $A117 + 132, // $A118 + 132, // $A119 + 132, // $A11A + 132, // $A11B + 132, // $A11C + 132, // $A11D + 132, // $A11E + 132, // $A11F + 132, // $A120 + 132, // $A121 + 132, // $A122 + 132, // $A123 + 132, // $A124 + 132, // $A125 + 132, // $A126 + 132, // $A127 + 132, // $A128 + 132, // $A129 + 132, // $A12A + 132, // $A12B + 132, // $A12C + 132, // $A12D + 132, // $A12E + 132, // $A12F + 132, // $A130 + 132, // $A131 + 132, // $A132 + 132, // $A133 + 132, // $A134 + 132, // $A135 + 132, // $A136 + 132, // $A137 + 132, // $A138 + 132, // $A139 + 132, // $A13A + 132, // $A13B + 132, // $A13C + 132, // $A13D + 132, // $A13E + 132, // $A13F + 132, // $A140 + 132, // $A141 + 132, // $A142 + 132, // $A143 + 132, // $A144 + 132, // $A145 + 132, // $A146 + 132, // $A147 + 132, // $A148 + 132, // $A149 + 132, // $A14A + 132, // $A14B + 132, // $A14C + 132, // $A14D + 132, // $A14E + 132, // $A14F + 132, // $A150 + 132, // $A151 + 132, // $A152 + 132, // $A153 + 132, // $A154 + 132, // $A155 + 132, // $A156 + 132, // $A157 + 132, // $A158 + 132, // $A159 + 132, // $A15A + 132, // $A15B + 132, // $A15C + 132, // $A15D + 132, // $A15E + 132, // $A15F + 132, // $A160 + 132, // $A161 + 132, // $A162 + 132, // $A163 + 132, // $A164 + 132, // $A165 + 132, // $A166 + 132, // $A167 + 132, // $A168 + 132, // $A169 + 132, // $A16A + 132, // $A16B + 132, // $A16C + 132, // $A16D + 132, // $A16E + 132, // $A16F + 132, // $A170 + 132, // $A171 + 132, // $A172 + 132, // $A173 + 132, // $A174 + 132, // $A175 + 132, // $A176 + 132, // $A177 + 132, // $A178 + 132, // $A179 + 132, // $A17A + 132, // $A17B + 132, // $A17C + 132, // $A17D + 132, // $A17E + 132, // $A17F + 132, // $A180 + 132, // $A181 + 132, // $A182 + 132, // $A183 + 132, // $A184 + 132, // $A185 + 132, // $A186 + 132, // $A187 + 132, // $A188 + 132, // $A189 + 132, // $A18A + 132, // $A18B + 132, // $A18C + 132, // $A18D + 132, // $A18E + 132, // $A18F + 132, // $A190 + 132, // $A191 + 132, // $A192 + 132, // $A193 + 132, // $A194 + 132, // $A195 + 132, // $A196 + 132, // $A197 + 132, // $A198 + 132, // $A199 + 132, // $A19A + 132, // $A19B + 132, // $A19C + 132, // $A19D + 132, // $A19E + 132, // $A19F + 132, // $A1A0 + 132, // $A1A1 + 132, // $A1A2 + 132, // $A1A3 + 132, // $A1A4 + 132, // $A1A5 + 132, // $A1A6 + 132, // $A1A7 + 132, // $A1A8 + 132, // $A1A9 + 132, // $A1AA + 132, // $A1AB + 132, // $A1AC + 132, // $A1AD + 132, // $A1AE + 132, // $A1AF + 132, // $A1B0 + 132, // $A1B1 + 132, // $A1B2 + 132, // $A1B3 + 132, // $A1B4 + 132, // $A1B5 + 132, // $A1B6 + 132, // $A1B7 + 132, // $A1B8 + 132, // $A1B9 + 132, // $A1BA + 132, // $A1BB + 132, // $A1BC + 132, // $A1BD + 132, // $A1BE + 132, // $A1BF + 132, // $A1C0 + 132, // $A1C1 + 132, // $A1C2 + 132, // $A1C3 + 132, // $A1C4 + 132, // $A1C5 + 132, // $A1C6 + 132, // $A1C7 + 132, // $A1C8 + 132, // $A1C9 + 132, // $A1CA + 132, // $A1CB + 132, // $A1CC + 132, // $A1CD + 132, // $A1CE + 132, // $A1CF + 132, // $A1D0 + 132, // $A1D1 + 132, // $A1D2 + 132, // $A1D3 + 132, // $A1D4 + 132, // $A1D5 + 132, // $A1D6 + 132, // $A1D7 + 132, // $A1D8 + 132, // $A1D9 + 132, // $A1DA + 132, // $A1DB + 132, // $A1DC + 132, // $A1DD + 132, // $A1DE + 132, // $A1DF + 132, // $A1E0 + 132, // $A1E1 + 132, // $A1E2 + 132, // $A1E3 + 132, // $A1E4 + 132, // $A1E5 + 132, // $A1E6 + 132, // $A1E7 + 132, // $A1E8 + 132, // $A1E9 + 132, // $A1EA + 132, // $A1EB + 132, // $A1EC + 132, // $A1ED + 132, // $A1EE + 132, // $A1EF + 132, // $A1F0 + 132, // $A1F1 + 132, // $A1F2 + 132, // $A1F3 + 132, // $A1F4 + 132, // $A1F5 + 132, // $A1F6 + 132, // $A1F7 + 132, // $A1F8 + 132, // $A1F9 + 132, // $A1FA + 132, // $A1FB + 132, // $A1FC + 132, // $A1FD + 132, // $A1FE + 132, // $A1FF + 132, // $A200 + 132, // $A201 + 132, // $A202 + 132, // $A203 + 132, // $A204 + 132, // $A205 + 132, // $A206 + 132, // $A207 + 132, // $A208 + 132, // $A209 + 132, // $A20A + 132, // $A20B + 132, // $A20C + 132, // $A20D + 132, // $A20E + 132, // $A20F + 132, // $A210 + 132, // $A211 + 132, // $A212 + 132, // $A213 + 132, // $A214 + 132, // $A215 + 132, // $A216 + 132, // $A217 + 132, // $A218 + 132, // $A219 + 132, // $A21A + 132, // $A21B + 132, // $A21C + 132, // $A21D + 132, // $A21E + 132, // $A21F + 132, // $A220 + 132, // $A221 + 132, // $A222 + 132, // $A223 + 132, // $A224 + 132, // $A225 + 132, // $A226 + 132, // $A227 + 132, // $A228 + 132, // $A229 + 132, // $A22A + 132, // $A22B + 132, // $A22C + 132, // $A22D + 132, // $A22E + 132, // $A22F + 132, // $A230 + 132, // $A231 + 132, // $A232 + 132, // $A233 + 132, // $A234 + 132, // $A235 + 132, // $A236 + 132, // $A237 + 132, // $A238 + 132, // $A239 + 132, // $A23A + 132, // $A23B + 132, // $A23C + 132, // $A23D + 132, // $A23E + 132, // $A23F + 132, // $A240 + 132, // $A241 + 132, // $A242 + 132, // $A243 + 132, // $A244 + 132, // $A245 + 132, // $A246 + 132, // $A247 + 132, // $A248 + 132, // $A249 + 132, // $A24A + 132, // $A24B + 132, // $A24C + 132, // $A24D + 132, // $A24E + 132, // $A24F + 132, // $A250 + 132, // $A251 + 132, // $A252 + 132, // $A253 + 132, // $A254 + 132, // $A255 + 132, // $A256 + 132, // $A257 + 132, // $A258 + 132, // $A259 + 132, // $A25A + 132, // $A25B + 132, // $A25C + 132, // $A25D + 132, // $A25E + 132, // $A25F + 132, // $A260 + 132, // $A261 + 132, // $A262 + 132, // $A263 + 132, // $A264 + 132, // $A265 + 132, // $A266 + 132, // $A267 + 132, // $A268 + 132, // $A269 + 132, // $A26A + 132, // $A26B + 132, // $A26C + 132, // $A26D + 132, // $A26E + 132, // $A26F + 132, // $A270 + 132, // $A271 + 132, // $A272 + 132, // $A273 + 132, // $A274 + 132, // $A275 + 132, // $A276 + 132, // $A277 + 132, // $A278 + 132, // $A279 + 132, // $A27A + 132, // $A27B + 132, // $A27C + 132, // $A27D + 132, // $A27E + 132, // $A27F + 132, // $A280 + 132, // $A281 + 132, // $A282 + 132, // $A283 + 132, // $A284 + 132, // $A285 + 132, // $A286 + 132, // $A287 + 132, // $A288 + 132, // $A289 + 132, // $A28A + 132, // $A28B + 132, // $A28C + 132, // $A28D + 132, // $A28E + 132, // $A28F + 132, // $A290 + 132, // $A291 + 132, // $A292 + 132, // $A293 + 132, // $A294 + 132, // $A295 + 132, // $A296 + 132, // $A297 + 132, // $A298 + 132, // $A299 + 132, // $A29A + 132, // $A29B + 132, // $A29C + 132, // $A29D + 132, // $A29E + 132, // $A29F + 132, // $A2A0 + 132, // $A2A1 + 132, // $A2A2 + 132, // $A2A3 + 132, // $A2A4 + 132, // $A2A5 + 132, // $A2A6 + 132, // $A2A7 + 132, // $A2A8 + 132, // $A2A9 + 132, // $A2AA + 132, // $A2AB + 132, // $A2AC + 132, // $A2AD + 132, // $A2AE + 132, // $A2AF + 132, // $A2B0 + 132, // $A2B1 + 132, // $A2B2 + 132, // $A2B3 + 132, // $A2B4 + 132, // $A2B5 + 132, // $A2B6 + 132, // $A2B7 + 132, // $A2B8 + 132, // $A2B9 + 132, // $A2BA + 132, // $A2BB + 132, // $A2BC + 132, // $A2BD + 132, // $A2BE + 132, // $A2BF + 132, // $A2C0 + 132, // $A2C1 + 132, // $A2C2 + 132, // $A2C3 + 132, // $A2C4 + 132, // $A2C5 + 132, // $A2C6 + 132, // $A2C7 + 132, // $A2C8 + 132, // $A2C9 + 132, // $A2CA + 132, // $A2CB + 132, // $A2CC + 132, // $A2CD + 132, // $A2CE + 132, // $A2CF + 132, // $A2D0 + 132, // $A2D1 + 132, // $A2D2 + 132, // $A2D3 + 132, // $A2D4 + 132, // $A2D5 + 132, // $A2D6 + 132, // $A2D7 + 132, // $A2D8 + 132, // $A2D9 + 132, // $A2DA + 132, // $A2DB + 132, // $A2DC + 132, // $A2DD + 132, // $A2DE + 132, // $A2DF + 132, // $A2E0 + 132, // $A2E1 + 132, // $A2E2 + 132, // $A2E3 + 132, // $A2E4 + 132, // $A2E5 + 132, // $A2E6 + 132, // $A2E7 + 132, // $A2E8 + 132, // $A2E9 + 132, // $A2EA + 132, // $A2EB + 132, // $A2EC + 132, // $A2ED + 132, // $A2EE + 132, // $A2EF + 132, // $A2F0 + 132, // $A2F1 + 132, // $A2F2 + 132, // $A2F3 + 132, // $A2F4 + 132, // $A2F5 + 132, // $A2F6 + 132, // $A2F7 + 132, // $A2F8 + 132, // $A2F9 + 132, // $A2FA + 132, // $A2FB + 132, // $A2FC + 132, // $A2FD + 132, // $A2FE + 132, // $A2FF + 132, // $A300 + 132, // $A301 + 132, // $A302 + 132, // $A303 + 132, // $A304 + 132, // $A305 + 132, // $A306 + 132, // $A307 + 132, // $A308 + 132, // $A309 + 132, // $A30A + 132, // $A30B + 132, // $A30C + 132, // $A30D + 132, // $A30E + 132, // $A30F + 132, // $A310 + 132, // $A311 + 132, // $A312 + 132, // $A313 + 132, // $A314 + 132, // $A315 + 132, // $A316 + 132, // $A317 + 132, // $A318 + 132, // $A319 + 132, // $A31A + 132, // $A31B + 132, // $A31C + 132, // $A31D + 132, // $A31E + 132, // $A31F + 132, // $A320 + 132, // $A321 + 132, // $A322 + 132, // $A323 + 132, // $A324 + 132, // $A325 + 132, // $A326 + 132, // $A327 + 132, // $A328 + 132, // $A329 + 132, // $A32A + 132, // $A32B + 132, // $A32C + 132, // $A32D + 132, // $A32E + 132, // $A32F + 132, // $A330 + 132, // $A331 + 132, // $A332 + 132, // $A333 + 132, // $A334 + 132, // $A335 + 132, // $A336 + 132, // $A337 + 132, // $A338 + 132, // $A339 + 132, // $A33A + 132, // $A33B + 132, // $A33C + 132, // $A33D + 132, // $A33E + 132, // $A33F + 132, // $A340 + 132, // $A341 + 132, // $A342 + 132, // $A343 + 132, // $A344 + 132, // $A345 + 132, // $A346 + 132, // $A347 + 132, // $A348 + 132, // $A349 + 132, // $A34A + 132, // $A34B + 132, // $A34C + 132, // $A34D + 132, // $A34E + 132, // $A34F + 132, // $A350 + 132, // $A351 + 132, // $A352 + 132, // $A353 + 132, // $A354 + 132, // $A355 + 132, // $A356 + 132, // $A357 + 132, // $A358 + 132, // $A359 + 132, // $A35A + 132, // $A35B + 132, // $A35C + 132, // $A35D + 132, // $A35E + 132, // $A35F + 132, // $A360 + 132, // $A361 + 132, // $A362 + 132, // $A363 + 132, // $A364 + 132, // $A365 + 132, // $A366 + 132, // $A367 + 132, // $A368 + 132, // $A369 + 132, // $A36A + 132, // $A36B + 132, // $A36C + 132, // $A36D + 132, // $A36E + 132, // $A36F + 132, // $A370 + 132, // $A371 + 132, // $A372 + 132, // $A373 + 132, // $A374 + 132, // $A375 + 132, // $A376 + 132, // $A377 + 132, // $A378 + 132, // $A379 + 132, // $A37A + 132, // $A37B + 132, // $A37C + 132, // $A37D + 132, // $A37E + 132, // $A37F + 132, // $A380 + 132, // $A381 + 132, // $A382 + 132, // $A383 + 132, // $A384 + 132, // $A385 + 132, // $A386 + 132, // $A387 + 132, // $A388 + 132, // $A389 + 132, // $A38A + 132, // $A38B + 132, // $A38C + 132, // $A38D + 132, // $A38E + 132, // $A38F + 132, // $A390 + 132, // $A391 + 132, // $A392 + 132, // $A393 + 132, // $A394 + 132, // $A395 + 132, // $A396 + 132, // $A397 + 132, // $A398 + 132, // $A399 + 132, // $A39A + 132, // $A39B + 132, // $A39C + 132, // $A39D + 132, // $A39E + 132, // $A39F + 132, // $A3A0 + 132, // $A3A1 + 132, // $A3A2 + 132, // $A3A3 + 132, // $A3A4 + 132, // $A3A5 + 132, // $A3A6 + 132, // $A3A7 + 132, // $A3A8 + 132, // $A3A9 + 132, // $A3AA + 132, // $A3AB + 132, // $A3AC + 132, // $A3AD + 132, // $A3AE + 132, // $A3AF + 132, // $A3B0 + 132, // $A3B1 + 132, // $A3B2 + 132, // $A3B3 + 132, // $A3B4 + 132, // $A3B5 + 132, // $A3B6 + 132, // $A3B7 + 132, // $A3B8 + 132, // $A3B9 + 132, // $A3BA + 132, // $A3BB + 132, // $A3BC + 132, // $A3BD + 132, // $A3BE + 132, // $A3BF + 132, // $A3C0 + 132, // $A3C1 + 132, // $A3C2 + 132, // $A3C3 + 132, // $A3C4 + 132, // $A3C5 + 132, // $A3C6 + 132, // $A3C7 + 132, // $A3C8 + 132, // $A3C9 + 132, // $A3CA + 132, // $A3CB + 132, // $A3CC + 132, // $A3CD + 132, // $A3CE + 132, // $A3CF + 132, // $A3D0 + 132, // $A3D1 + 132, // $A3D2 + 132, // $A3D3 + 132, // $A3D4 + 132, // $A3D5 + 132, // $A3D6 + 132, // $A3D7 + 132, // $A3D8 + 132, // $A3D9 + 132, // $A3DA + 132, // $A3DB + 132, // $A3DC + 132, // $A3DD + 132, // $A3DE + 132, // $A3DF + 132, // $A3E0 + 132, // $A3E1 + 132, // $A3E2 + 132, // $A3E3 + 132, // $A3E4 + 132, // $A3E5 + 132, // $A3E6 + 132, // $A3E7 + 132, // $A3E8 + 132, // $A3E9 + 132, // $A3EA + 132, // $A3EB + 132, // $A3EC + 132, // $A3ED + 132, // $A3EE + 132, // $A3EF + 132, // $A3F0 + 132, // $A3F1 + 132, // $A3F2 + 132, // $A3F3 + 132, // $A3F4 + 132, // $A3F5 + 132, // $A3F6 + 132, // $A3F7 + 132, // $A3F8 + 132, // $A3F9 + 132, // $A3FA + 132, // $A3FB + 132, // $A3FC + 132, // $A3FD + 132, // $A3FE + 132, // $A3FF + 132, // $A400 + 132, // $A401 + 132, // $A402 + 132, // $A403 + 132, // $A404 + 132, // $A405 + 132, // $A406 + 132, // $A407 + 132, // $A408 + 132, // $A409 + 132, // $A40A + 132, // $A40B + 132, // $A40C + 132, // $A40D + 132, // $A40E + 132, // $A40F + 132, // $A410 + 132, // $A411 + 132, // $A412 + 132, // $A413 + 132, // $A414 + 132, // $A415 + 132, // $A416 + 132, // $A417 + 132, // $A418 + 132, // $A419 + 132, // $A41A + 132, // $A41B + 132, // $A41C + 132, // $A41D + 132, // $A41E + 132, // $A41F + 132, // $A420 + 132, // $A421 + 132, // $A422 + 132, // $A423 + 132, // $A424 + 132, // $A425 + 132, // $A426 + 132, // $A427 + 132, // $A428 + 132, // $A429 + 132, // $A42A + 132, // $A42B + 132, // $A42C + 132, // $A42D + 132, // $A42E + 132, // $A42F + 132, // $A430 + 132, // $A431 + 132, // $A432 + 132, // $A433 + 132, // $A434 + 132, // $A435 + 132, // $A436 + 132, // $A437 + 132, // $A438 + 132, // $A439 + 132, // $A43A + 132, // $A43B + 132, // $A43C + 132, // $A43D + 132, // $A43E + 132, // $A43F + 132, // $A440 + 132, // $A441 + 132, // $A442 + 132, // $A443 + 132, // $A444 + 132, // $A445 + 132, // $A446 + 132, // $A447 + 132, // $A448 + 132, // $A449 + 132, // $A44A + 132, // $A44B + 132, // $A44C + 132, // $A44D + 132, // $A44E + 132, // $A44F + 132, // $A450 + 132, // $A451 + 132, // $A452 + 132, // $A453 + 132, // $A454 + 132, // $A455 + 132, // $A456 + 132, // $A457 + 132, // $A458 + 132, // $A459 + 132, // $A45A + 132, // $A45B + 132, // $A45C + 132, // $A45D + 132, // $A45E + 132, // $A45F + 132, // $A460 + 132, // $A461 + 132, // $A462 + 132, // $A463 + 132, // $A464 + 132, // $A465 + 132, // $A466 + 132, // $A467 + 132, // $A468 + 132, // $A469 + 132, // $A46A + 132, // $A46B + 132, // $A46C + 132, // $A46D + 132, // $A46E + 132, // $A46F + 132, // $A470 + 132, // $A471 + 132, // $A472 + 132, // $A473 + 132, // $A474 + 132, // $A475 + 132, // $A476 + 132, // $A477 + 132, // $A478 + 132, // $A479 + 132, // $A47A + 132, // $A47B + 132, // $A47C + 132, // $A47D + 132, // $A47E + 132, // $A47F + 132, // $A480 + 132, // $A481 + 132, // $A482 + 132, // $A483 + 132, // $A484 + 132, // $A485 + 132, // $A486 + 132, // $A487 + 132, // $A488 + 132, // $A489 + 132, // $A48A + 132, // $A48B + 132, // $A48C + 29, // $A48D + 29, // $A48E + 29, // $A48F + 21, // $A490 + 21, // $A491 + 21, // $A492 + 21, // $A493 + 21, // $A494 + 21, // $A495 + 21, // $A496 + 21, // $A497 + 21, // $A498 + 21, // $A499 + 21, // $A49A + 21, // $A49B + 21, // $A49C + 21, // $A49D + 21, // $A49E + 21, // $A49F + 21, // $A4A0 + 21, // $A4A1 + 21, // $A4A2 + 21, // $A4A3 + 21, // $A4A4 + 21, // $A4A5 + 21, // $A4A6 + 21, // $A4A7 + 21, // $A4A8 + 21, // $A4A9 + 21, // $A4AA + 21, // $A4AB + 21, // $A4AC + 21, // $A4AD + 21, // $A4AE + 21, // $A4AF + 21, // $A4B0 + 21, // $A4B1 + 21, // $A4B2 + 21, // $A4B3 + 21, // $A4B4 + 21, // $A4B5 + 21, // $A4B6 + 21, // $A4B7 + 21, // $A4B8 + 21, // $A4B9 + 21, // $A4BA + 21, // $A4BB + 21, // $A4BC + 21, // $A4BD + 21, // $A4BE + 21, // $A4BF + 21, // $A4C0 + 21, // $A4C1 + 21, // $A4C2 + 21, // $A4C3 + 21, // $A4C4 + 21, // $A4C5 + 21, // $A4C6 + 29, // $A4C7 + 29, // $A4C8 + 29, // $A4C9 + 29, // $A4CA + 29, // $A4CB + 29, // $A4CC + 29, // $A4CD + 29, // $A4CE + 29, // $A4CF + 132, // $A4D0 + 132, // $A4D1 + 132, // $A4D2 + 132, // $A4D3 + 132, // $A4D4 + 132, // $A4D5 + 132, // $A4D6 + 132, // $A4D7 + 132, // $A4D8 + 132, // $A4D9 + 132, // $A4DA + 132, // $A4DB + 132, // $A4DC + 132, // $A4DD + 132, // $A4DE + 132, // $A4DF + 132, // $A4E0 + 132, // $A4E1 + 132, // $A4E2 + 132, // $A4E3 + 132, // $A4E4 + 132, // $A4E5 + 132, // $A4E6 + 132, // $A4E7 + 132, // $A4E8 + 132, // $A4E9 + 132, // $A4EA + 132, // $A4EB + 132, // $A4EC + 132, // $A4ED + 132, // $A4EE + 132, // $A4EF + 132, // $A4F0 + 132, // $A4F1 + 132, // $A4F2 + 132, // $A4F3 + 132, // $A4F4 + 132, // $A4F5 + 132, // $A4F6 + 132, // $A4F7 + 131, // $A4F8 + 131, // $A4F9 + 131, // $A4FA + 131, // $A4FB + 131, // $A4FC + 131, // $A4FD + 17, // $A4FE + 17, // $A4FF + 132, // $A500 + 132, // $A501 + 132, // $A502 + 132, // $A503 + 132, // $A504 + 132, // $A505 + 132, // $A506 + 132, // $A507 + 132, // $A508 + 132, // $A509 + 132, // $A50A + 132, // $A50B + 132, // $A50C + 132, // $A50D + 132, // $A50E + 132, // $A50F + 132, // $A510 + 132, // $A511 + 132, // $A512 + 132, // $A513 + 132, // $A514 + 132, // $A515 + 132, // $A516 + 132, // $A517 + 132, // $A518 + 132, // $A519 + 132, // $A51A + 132, // $A51B + 132, // $A51C + 132, // $A51D + 132, // $A51E + 132, // $A51F + 132, // $A520 + 132, // $A521 + 132, // $A522 + 132, // $A523 + 132, // $A524 + 132, // $A525 + 132, // $A526 + 132, // $A527 + 132, // $A528 + 132, // $A529 + 132, // $A52A + 132, // $A52B + 132, // $A52C + 132, // $A52D + 132, // $A52E + 132, // $A52F + 132, // $A530 + 132, // $A531 + 132, // $A532 + 132, // $A533 + 132, // $A534 + 132, // $A535 + 132, // $A536 + 132, // $A537 + 132, // $A538 + 132, // $A539 + 132, // $A53A + 132, // $A53B + 132, // $A53C + 132, // $A53D + 132, // $A53E + 132, // $A53F + 132, // $A540 + 132, // $A541 + 132, // $A542 + 132, // $A543 + 132, // $A544 + 132, // $A545 + 132, // $A546 + 132, // $A547 + 132, // $A548 + 132, // $A549 + 132, // $A54A + 132, // $A54B + 132, // $A54C + 132, // $A54D + 132, // $A54E + 132, // $A54F + 132, // $A550 + 132, // $A551 + 132, // $A552 + 132, // $A553 + 132, // $A554 + 132, // $A555 + 132, // $A556 + 132, // $A557 + 132, // $A558 + 132, // $A559 + 132, // $A55A + 132, // $A55B + 132, // $A55C + 132, // $A55D + 132, // $A55E + 132, // $A55F + 132, // $A560 + 132, // $A561 + 132, // $A562 + 132, // $A563 + 132, // $A564 + 132, // $A565 + 132, // $A566 + 132, // $A567 + 132, // $A568 + 132, // $A569 + 132, // $A56A + 132, // $A56B + 132, // $A56C + 132, // $A56D + 132, // $A56E + 132, // $A56F + 132, // $A570 + 132, // $A571 + 132, // $A572 + 132, // $A573 + 132, // $A574 + 132, // $A575 + 132, // $A576 + 132, // $A577 + 132, // $A578 + 132, // $A579 + 132, // $A57A + 132, // $A57B + 132, // $A57C + 132, // $A57D + 132, // $A57E + 132, // $A57F + 132, // $A580 + 132, // $A581 + 132, // $A582 + 132, // $A583 + 132, // $A584 + 132, // $A585 + 132, // $A586 + 132, // $A587 + 132, // $A588 + 132, // $A589 + 132, // $A58A + 132, // $A58B + 132, // $A58C + 132, // $A58D + 132, // $A58E + 132, // $A58F + 132, // $A590 + 132, // $A591 + 132, // $A592 + 132, // $A593 + 132, // $A594 + 132, // $A595 + 132, // $A596 + 132, // $A597 + 132, // $A598 + 132, // $A599 + 132, // $A59A + 132, // $A59B + 132, // $A59C + 132, // $A59D + 132, // $A59E + 132, // $A59F + 132, // $A5A0 + 132, // $A5A1 + 132, // $A5A2 + 132, // $A5A3 + 132, // $A5A4 + 132, // $A5A5 + 132, // $A5A6 + 132, // $A5A7 + 132, // $A5A8 + 132, // $A5A9 + 132, // $A5AA + 132, // $A5AB + 132, // $A5AC + 132, // $A5AD + 132, // $A5AE + 132, // $A5AF + 132, // $A5B0 + 132, // $A5B1 + 132, // $A5B2 + 132, // $A5B3 + 132, // $A5B4 + 132, // $A5B5 + 132, // $A5B6 + 132, // $A5B7 + 132, // $A5B8 + 132, // $A5B9 + 132, // $A5BA + 132, // $A5BB + 132, // $A5BC + 132, // $A5BD + 132, // $A5BE + 132, // $A5BF + 132, // $A5C0 + 132, // $A5C1 + 132, // $A5C2 + 132, // $A5C3 + 132, // $A5C4 + 132, // $A5C5 + 132, // $A5C6 + 132, // $A5C7 + 132, // $A5C8 + 132, // $A5C9 + 132, // $A5CA + 132, // $A5CB + 132, // $A5CC + 132, // $A5CD + 132, // $A5CE + 132, // $A5CF + 132, // $A5D0 + 132, // $A5D1 + 132, // $A5D2 + 132, // $A5D3 + 132, // $A5D4 + 132, // $A5D5 + 132, // $A5D6 + 132, // $A5D7 + 132, // $A5D8 + 132, // $A5D9 + 132, // $A5DA + 132, // $A5DB + 132, // $A5DC + 132, // $A5DD + 132, // $A5DE + 132, // $A5DF + 132, // $A5E0 + 132, // $A5E1 + 132, // $A5E2 + 132, // $A5E3 + 132, // $A5E4 + 132, // $A5E5 + 132, // $A5E6 + 132, // $A5E7 + 132, // $A5E8 + 132, // $A5E9 + 132, // $A5EA + 132, // $A5EB + 132, // $A5EC + 132, // $A5ED + 132, // $A5EE + 132, // $A5EF + 132, // $A5F0 + 132, // $A5F1 + 132, // $A5F2 + 132, // $A5F3 + 132, // $A5F4 + 132, // $A5F5 + 132, // $A5F6 + 132, // $A5F7 + 132, // $A5F8 + 132, // $A5F9 + 132, // $A5FA + 132, // $A5FB + 132, // $A5FC + 132, // $A5FD + 132, // $A5FE + 132, // $A5FF + 132, // $A600 + 132, // $A601 + 132, // $A602 + 132, // $A603 + 132, // $A604 + 132, // $A605 + 132, // $A606 + 132, // $A607 + 132, // $A608 + 132, // $A609 + 132, // $A60A + 132, // $A60B + 131, // $A60C + 17, // $A60D + 17, // $A60E + 17, // $A60F + 132, // $A610 + 132, // $A611 + 132, // $A612 + 132, // $A613 + 132, // $A614 + 132, // $A615 + 132, // $A616 + 132, // $A617 + 132, // $A618 + 132, // $A619 + 132, // $A61A + 132, // $A61B + 132, // $A61C + 132, // $A61D + 132, // $A61E + 132, // $A61F + 136, // $A620 + 136, // $A621 + 136, // $A622 + 136, // $A623 + 136, // $A624 + 136, // $A625 + 136, // $A626 + 136, // $A627 + 136, // $A628 + 136, // $A629 + 132, // $A62A + 132, // $A62B + 29, // $A62C + 29, // $A62D + 29, // $A62E + 29, // $A62F + 29, // $A630 + 29, // $A631 + 29, // $A632 + 29, // $A633 + 29, // $A634 + 29, // $A635 + 29, // $A636 + 29, // $A637 + 29, // $A638 + 29, // $A639 + 29, // $A63A + 29, // $A63B + 29, // $A63C + 29, // $A63D + 29, // $A63E + 29, // $A63F + 128, // $A640 + 129, // $A641 + 128, // $A642 + 129, // $A643 + 128, // $A644 + 129, // $A645 + 128, // $A646 + 129, // $A647 + 128, // $A648 + 129, // $A649 + 128, // $A64A + 129, // $A64B + 128, // $A64C + 129, // $A64D + 128, // $A64E + 129, // $A64F + 128, // $A650 + 129, // $A651 + 128, // $A652 + 129, // $A653 + 128, // $A654 + 129, // $A655 + 128, // $A656 + 129, // $A657 + 128, // $A658 + 129, // $A659 + 128, // $A65A + 129, // $A65B + 128, // $A65C + 129, // $A65D + 128, // $A65E + 129, // $A65F + 128, // $A660 + 129, // $A661 + 128, // $A662 + 129, // $A663 + 128, // $A664 + 129, // $A665 + 128, // $A666 + 129, // $A667 + 128, // $A668 + 129, // $A669 + 128, // $A66A + 129, // $A66B + 128, // $A66C + 129, // $A66D + 132, // $A66E + 133, // $A66F + 135, // $A670 + 135, // $A671 + 135, // $A672 + 17, // $A673 + 133, // $A674 + 133, // $A675 + 133, // $A676 + 133, // $A677 + 133, // $A678 + 133, // $A679 + 133, // $A67A + 133, // $A67B + 133, // $A67C + 133, // $A67D + 17, // $A67E + 131, // $A67F + 128, // $A680 + 129, // $A681 + 128, // $A682 + 129, // $A683 + 128, // $A684 + 129, // $A685 + 128, // $A686 + 129, // $A687 + 128, // $A688 + 129, // $A689 + 128, // $A68A + 129, // $A68B + 128, // $A68C + 129, // $A68D + 128, // $A68E + 129, // $A68F + 128, // $A690 + 129, // $A691 + 128, // $A692 + 129, // $A693 + 128, // $A694 + 129, // $A695 + 128, // $A696 + 129, // $A697 + 128, // $A698 + 129, // $A699 + 128, // $A69A + 129, // $A69B + 131, // $A69C + 131, // $A69D + 133, // $A69E + 133, // $A69F + 132, // $A6A0 + 132, // $A6A1 + 132, // $A6A2 + 132, // $A6A3 + 132, // $A6A4 + 132, // $A6A5 + 132, // $A6A6 + 132, // $A6A7 + 132, // $A6A8 + 132, // $A6A9 + 132, // $A6AA + 132, // $A6AB + 132, // $A6AC + 132, // $A6AD + 132, // $A6AE + 132, // $A6AF + 132, // $A6B0 + 132, // $A6B1 + 132, // $A6B2 + 132, // $A6B3 + 132, // $A6B4 + 132, // $A6B5 + 132, // $A6B6 + 132, // $A6B7 + 132, // $A6B8 + 132, // $A6B9 + 132, // $A6BA + 132, // $A6BB + 132, // $A6BC + 132, // $A6BD + 132, // $A6BE + 132, // $A6BF + 132, // $A6C0 + 132, // $A6C1 + 132, // $A6C2 + 132, // $A6C3 + 132, // $A6C4 + 132, // $A6C5 + 132, // $A6C6 + 132, // $A6C7 + 132, // $A6C8 + 132, // $A6C9 + 132, // $A6CA + 132, // $A6CB + 132, // $A6CC + 132, // $A6CD + 132, // $A6CE + 132, // $A6CF + 132, // $A6D0 + 132, // $A6D1 + 132, // $A6D2 + 132, // $A6D3 + 132, // $A6D4 + 132, // $A6D5 + 132, // $A6D6 + 132, // $A6D7 + 132, // $A6D8 + 132, // $A6D9 + 132, // $A6DA + 132, // $A6DB + 132, // $A6DC + 132, // $A6DD + 132, // $A6DE + 132, // $A6DF + 132, // $A6E0 + 132, // $A6E1 + 132, // $A6E2 + 132, // $A6E3 + 132, // $A6E4 + 132, // $A6E5 + 137, // $A6E6 + 137, // $A6E7 + 137, // $A6E8 + 137, // $A6E9 + 137, // $A6EA + 137, // $A6EB + 137, // $A6EC + 137, // $A6ED + 137, // $A6EE + 137, // $A6EF + 133, // $A6F0 + 133, // $A6F1 + 17, // $A6F2 + 17, // $A6F3 + 17, // $A6F4 + 17, // $A6F5 + 17, // $A6F6 + 17, // $A6F7 + 29, // $A6F8 + 29, // $A6F9 + 29, // $A6FA + 29, // $A6FB + 29, // $A6FC + 29, // $A6FD + 29, // $A6FE + 29, // $A6FF + 20, // $A700 + 20, // $A701 + 20, // $A702 + 20, // $A703 + 20, // $A704 + 20, // $A705 + 20, // $A706 + 20, // $A707 + 20, // $A708 + 20, // $A709 + 20, // $A70A + 20, // $A70B + 20, // $A70C + 20, // $A70D + 20, // $A70E + 20, // $A70F + 20, // $A710 + 20, // $A711 + 20, // $A712 + 20, // $A713 + 20, // $A714 + 20, // $A715 + 20, // $A716 + 131, // $A717 + 131, // $A718 + 131, // $A719 + 131, // $A71A + 131, // $A71B + 131, // $A71C + 131, // $A71D + 131, // $A71E + 131, // $A71F + 20, // $A720 + 20, // $A721 + 128, // $A722 + 129, // $A723 + 128, // $A724 + 129, // $A725 + 128, // $A726 + 129, // $A727 + 128, // $A728 + 129, // $A729 + 128, // $A72A + 129, // $A72B + 128, // $A72C + 129, // $A72D + 128, // $A72E + 129, // $A72F + 129, // $A730 + 129, // $A731 + 128, // $A732 + 129, // $A733 + 128, // $A734 + 129, // $A735 + 128, // $A736 + 129, // $A737 + 128, // $A738 + 129, // $A739 + 128, // $A73A + 129, // $A73B + 128, // $A73C + 129, // $A73D + 128, // $A73E + 129, // $A73F + 128, // $A740 + 129, // $A741 + 128, // $A742 + 129, // $A743 + 128, // $A744 + 129, // $A745 + 128, // $A746 + 129, // $A747 + 128, // $A748 + 129, // $A749 + 128, // $A74A + 129, // $A74B + 128, // $A74C + 129, // $A74D + 128, // $A74E + 129, // $A74F + 128, // $A750 + 129, // $A751 + 128, // $A752 + 129, // $A753 + 128, // $A754 + 129, // $A755 + 128, // $A756 + 129, // $A757 + 128, // $A758 + 129, // $A759 + 128, // $A75A + 129, // $A75B + 128, // $A75C + 129, // $A75D + 128, // $A75E + 129, // $A75F + 128, // $A760 + 129, // $A761 + 128, // $A762 + 129, // $A763 + 128, // $A764 + 129, // $A765 + 128, // $A766 + 129, // $A767 + 128, // $A768 + 129, // $A769 + 128, // $A76A + 129, // $A76B + 128, // $A76C + 129, // $A76D + 128, // $A76E + 129, // $A76F + 131, // $A770 + 129, // $A771 + 129, // $A772 + 129, // $A773 + 129, // $A774 + 129, // $A775 + 129, // $A776 + 129, // $A777 + 129, // $A778 + 128, // $A779 + 129, // $A77A + 128, // $A77B + 129, // $A77C + 128, // $A77D + 128, // $A77E + 129, // $A77F + 128, // $A780 + 129, // $A781 + 128, // $A782 + 129, // $A783 + 128, // $A784 + 129, // $A785 + 128, // $A786 + 129, // $A787 + 131, // $A788 + 20, // $A789 + 20, // $A78A + 128, // $A78B + 129, // $A78C + 128, // $A78D + 129, // $A78E + 132, // $A78F + 128, // $A790 + 129, // $A791 + 128, // $A792 + 129, // $A793 + 129, // $A794 + 129, // $A795 + 128, // $A796 + 129, // $A797 + 128, // $A798 + 129, // $A799 + 128, // $A79A + 129, // $A79B + 128, // $A79C + 129, // $A79D + 128, // $A79E + 129, // $A79F + 128, // $A7A0 + 129, // $A7A1 + 128, // $A7A2 + 129, // $A7A3 + 128, // $A7A4 + 129, // $A7A5 + 128, // $A7A6 + 129, // $A7A7 + 128, // $A7A8 + 129, // $A7A9 + 128, // $A7AA + 128, // $A7AB + 128, // $A7AC + 128, // $A7AD + 128, // $A7AE + 29, // $A7AF + 128, // $A7B0 + 128, // $A7B1 + 128, // $A7B2 + 128, // $A7B3 + 128, // $A7B4 + 129, // $A7B5 + 128, // $A7B6 + 129, // $A7B7 + 29, // $A7B8 + 29, // $A7B9 + 29, // $A7BA + 29, // $A7BB + 29, // $A7BC + 29, // $A7BD + 29, // $A7BE + 29, // $A7BF + 29, // $A7C0 + 29, // $A7C1 + 29, // $A7C2 + 29, // $A7C3 + 29, // $A7C4 + 29, // $A7C5 + 29, // $A7C6 + 29, // $A7C7 + 29, // $A7C8 + 29, // $A7C9 + 29, // $A7CA + 29, // $A7CB + 29, // $A7CC + 29, // $A7CD + 29, // $A7CE + 29, // $A7CF + 29, // $A7D0 + 29, // $A7D1 + 29, // $A7D2 + 29, // $A7D3 + 29, // $A7D4 + 29, // $A7D5 + 29, // $A7D6 + 29, // $A7D7 + 29, // $A7D8 + 29, // $A7D9 + 29, // $A7DA + 29, // $A7DB + 29, // $A7DC + 29, // $A7DD + 29, // $A7DE + 29, // $A7DF + 29, // $A7E0 + 29, // $A7E1 + 29, // $A7E2 + 29, // $A7E3 + 29, // $A7E4 + 29, // $A7E5 + 29, // $A7E6 + 29, // $A7E7 + 29, // $A7E8 + 29, // $A7E9 + 29, // $A7EA + 29, // $A7EB + 29, // $A7EC + 29, // $A7ED + 29, // $A7EE + 29, // $A7EF + 29, // $A7F0 + 29, // $A7F1 + 29, // $A7F2 + 29, // $A7F3 + 29, // $A7F4 + 29, // $A7F5 + 29, // $A7F6 + 132, // $A7F7 + 131, // $A7F8 + 131, // $A7F9 + 129, // $A7FA + 132, // $A7FB + 132, // $A7FC + 132, // $A7FD + 132, // $A7FE + 132, // $A7FF + 132, // $A800 + 132, // $A801 + 133, // $A802 + 132, // $A803 + 132, // $A804 + 132, // $A805 + 133, // $A806 + 132, // $A807 + 132, // $A808 + 132, // $A809 + 132, // $A80A + 133, // $A80B + 132, // $A80C + 132, // $A80D + 132, // $A80E + 132, // $A80F + 132, // $A810 + 132, // $A811 + 132, // $A812 + 132, // $A813 + 132, // $A814 + 132, // $A815 + 132, // $A816 + 132, // $A817 + 132, // $A818 + 132, // $A819 + 132, // $A81A + 132, // $A81B + 132, // $A81C + 132, // $A81D + 132, // $A81E + 132, // $A81F + 132, // $A820 + 132, // $A821 + 132, // $A822 + 134, // $A823 + 134, // $A824 + 133, // $A825 + 133, // $A826 + 134, // $A827 + 21, // $A828 + 21, // $A829 + 21, // $A82A + 21, // $A82B + 29, // $A82C + 29, // $A82D + 29, // $A82E + 29, // $A82F + 138, // $A830 + 138, // $A831 + 138, // $A832 + 138, // $A833 + 138, // $A834 + 138, // $A835 + 21, // $A836 + 21, // $A837 + 19, // $A838 + 21, // $A839 + 29, // $A83A + 29, // $A83B + 29, // $A83C + 29, // $A83D + 29, // $A83E + 29, // $A83F + 132, // $A840 + 132, // $A841 + 132, // $A842 + 132, // $A843 + 132, // $A844 + 132, // $A845 + 132, // $A846 + 132, // $A847 + 132, // $A848 + 132, // $A849 + 132, // $A84A + 132, // $A84B + 132, // $A84C + 132, // $A84D + 132, // $A84E + 132, // $A84F + 132, // $A850 + 132, // $A851 + 132, // $A852 + 132, // $A853 + 132, // $A854 + 132, // $A855 + 132, // $A856 + 132, // $A857 + 132, // $A858 + 132, // $A859 + 132, // $A85A + 132, // $A85B + 132, // $A85C + 132, // $A85D + 132, // $A85E + 132, // $A85F + 132, // $A860 + 132, // $A861 + 132, // $A862 + 132, // $A863 + 132, // $A864 + 132, // $A865 + 132, // $A866 + 132, // $A867 + 132, // $A868 + 132, // $A869 + 132, // $A86A + 132, // $A86B + 132, // $A86C + 132, // $A86D + 132, // $A86E + 132, // $A86F + 132, // $A870 + 132, // $A871 + 132, // $A872 + 132, // $A873 + 17, // $A874 + 17, // $A875 + 17, // $A876 + 17, // $A877 + 29, // $A878 + 29, // $A879 + 29, // $A87A + 29, // $A87B + 29, // $A87C + 29, // $A87D + 29, // $A87E + 29, // $A87F + 134, // $A880 + 134, // $A881 + 132, // $A882 + 132, // $A883 + 132, // $A884 + 132, // $A885 + 132, // $A886 + 132, // $A887 + 132, // $A888 + 132, // $A889 + 132, // $A88A + 132, // $A88B + 132, // $A88C + 132, // $A88D + 132, // $A88E + 132, // $A88F + 132, // $A890 + 132, // $A891 + 132, // $A892 + 132, // $A893 + 132, // $A894 + 132, // $A895 + 132, // $A896 + 132, // $A897 + 132, // $A898 + 132, // $A899 + 132, // $A89A + 132, // $A89B + 132, // $A89C + 132, // $A89D + 132, // $A89E + 132, // $A89F + 132, // $A8A0 + 132, // $A8A1 + 132, // $A8A2 + 132, // $A8A3 + 132, // $A8A4 + 132, // $A8A5 + 132, // $A8A6 + 132, // $A8A7 + 132, // $A8A8 + 132, // $A8A9 + 132, // $A8AA + 132, // $A8AB + 132, // $A8AC + 132, // $A8AD + 132, // $A8AE + 132, // $A8AF + 132, // $A8B0 + 132, // $A8B1 + 132, // $A8B2 + 132, // $A8B3 + 134, // $A8B4 + 134, // $A8B5 + 134, // $A8B6 + 134, // $A8B7 + 134, // $A8B8 + 134, // $A8B9 + 134, // $A8BA + 134, // $A8BB + 134, // $A8BC + 134, // $A8BD + 134, // $A8BE + 134, // $A8BF + 134, // $A8C0 + 134, // $A8C1 + 134, // $A8C2 + 134, // $A8C3 + 133, // $A8C4 + 133, // $A8C5 + 29, // $A8C6 + 29, // $A8C7 + 29, // $A8C8 + 29, // $A8C9 + 29, // $A8CA + 29, // $A8CB + 29, // $A8CC + 29, // $A8CD + 17, // $A8CE + 17, // $A8CF + 136, // $A8D0 + 136, // $A8D1 + 136, // $A8D2 + 136, // $A8D3 + 136, // $A8D4 + 136, // $A8D5 + 136, // $A8D6 + 136, // $A8D7 + 136, // $A8D8 + 136, // $A8D9 + 29, // $A8DA + 29, // $A8DB + 29, // $A8DC + 29, // $A8DD + 29, // $A8DE + 29, // $A8DF + 133, // $A8E0 + 133, // $A8E1 + 133, // $A8E2 + 133, // $A8E3 + 133, // $A8E4 + 133, // $A8E5 + 133, // $A8E6 + 133, // $A8E7 + 133, // $A8E8 + 133, // $A8E9 + 133, // $A8EA + 133, // $A8EB + 133, // $A8EC + 133, // $A8ED + 133, // $A8EE + 133, // $A8EF + 133, // $A8F0 + 133, // $A8F1 + 132, // $A8F2 + 132, // $A8F3 + 132, // $A8F4 + 132, // $A8F5 + 132, // $A8F6 + 132, // $A8F7 + 17, // $A8F8 + 17, // $A8F9 + 17, // $A8FA + 132, // $A8FB + 17, // $A8FC + 132, // $A8FD + 29, // $A8FE + 29, // $A8FF + 136, // $A900 + 136, // $A901 + 136, // $A902 + 136, // $A903 + 136, // $A904 + 136, // $A905 + 136, // $A906 + 136, // $A907 + 136, // $A908 + 136, // $A909 + 132, // $A90A + 132, // $A90B + 132, // $A90C + 132, // $A90D + 132, // $A90E + 132, // $A90F + 132, // $A910 + 132, // $A911 + 132, // $A912 + 132, // $A913 + 132, // $A914 + 132, // $A915 + 132, // $A916 + 132, // $A917 + 132, // $A918 + 132, // $A919 + 132, // $A91A + 132, // $A91B + 132, // $A91C + 132, // $A91D + 132, // $A91E + 132, // $A91F + 132, // $A920 + 132, // $A921 + 132, // $A922 + 132, // $A923 + 132, // $A924 + 132, // $A925 + 133, // $A926 + 133, // $A927 + 133, // $A928 + 133, // $A929 + 133, // $A92A + 133, // $A92B + 133, // $A92C + 133, // $A92D + 17, // $A92E + 17, // $A92F + 132, // $A930 + 132, // $A931 + 132, // $A932 + 132, // $A933 + 132, // $A934 + 132, // $A935 + 132, // $A936 + 132, // $A937 + 132, // $A938 + 132, // $A939 + 132, // $A93A + 132, // $A93B + 132, // $A93C + 132, // $A93D + 132, // $A93E + 132, // $A93F + 132, // $A940 + 132, // $A941 + 132, // $A942 + 132, // $A943 + 132, // $A944 + 132, // $A945 + 132, // $A946 + 133, // $A947 + 133, // $A948 + 133, // $A949 + 133, // $A94A + 133, // $A94B + 133, // $A94C + 133, // $A94D + 133, // $A94E + 133, // $A94F + 133, // $A950 + 133, // $A951 + 134, // $A952 + 134, // $A953 + 29, // $A954 + 29, // $A955 + 29, // $A956 + 29, // $A957 + 29, // $A958 + 29, // $A959 + 29, // $A95A + 29, // $A95B + 29, // $A95C + 29, // $A95D + 29, // $A95E + 17, // $A95F + 132, // $A960 + 132, // $A961 + 132, // $A962 + 132, // $A963 + 132, // $A964 + 132, // $A965 + 132, // $A966 + 132, // $A967 + 132, // $A968 + 132, // $A969 + 132, // $A96A + 132, // $A96B + 132, // $A96C + 132, // $A96D + 132, // $A96E + 132, // $A96F + 132, // $A970 + 132, // $A971 + 132, // $A972 + 132, // $A973 + 132, // $A974 + 132, // $A975 + 132, // $A976 + 132, // $A977 + 132, // $A978 + 132, // $A979 + 132, // $A97A + 132, // $A97B + 132, // $A97C + 29, // $A97D + 29, // $A97E + 29, // $A97F + 133, // $A980 + 133, // $A981 + 133, // $A982 + 134, // $A983 + 132, // $A984 + 132, // $A985 + 132, // $A986 + 132, // $A987 + 132, // $A988 + 132, // $A989 + 132, // $A98A + 132, // $A98B + 132, // $A98C + 132, // $A98D + 132, // $A98E + 132, // $A98F + 132, // $A990 + 132, // $A991 + 132, // $A992 + 132, // $A993 + 132, // $A994 + 132, // $A995 + 132, // $A996 + 132, // $A997 + 132, // $A998 + 132, // $A999 + 132, // $A99A + 132, // $A99B + 132, // $A99C + 132, // $A99D + 132, // $A99E + 132, // $A99F + 132, // $A9A0 + 132, // $A9A1 + 132, // $A9A2 + 132, // $A9A3 + 132, // $A9A4 + 132, // $A9A5 + 132, // $A9A6 + 132, // $A9A7 + 132, // $A9A8 + 132, // $A9A9 + 132, // $A9AA + 132, // $A9AB + 132, // $A9AC + 132, // $A9AD + 132, // $A9AE + 132, // $A9AF + 132, // $A9B0 + 132, // $A9B1 + 132, // $A9B2 + 133, // $A9B3 + 134, // $A9B4 + 134, // $A9B5 + 133, // $A9B6 + 133, // $A9B7 + 133, // $A9B8 + 133, // $A9B9 + 134, // $A9BA + 134, // $A9BB + 133, // $A9BC + 134, // $A9BD + 134, // $A9BE + 134, // $A9BF + 134, // $A9C0 + 17, // $A9C1 + 17, // $A9C2 + 17, // $A9C3 + 17, // $A9C4 + 17, // $A9C5 + 17, // $A9C6 + 17, // $A9C7 + 17, // $A9C8 + 17, // $A9C9 + 17, // $A9CA + 17, // $A9CB + 17, // $A9CC + 17, // $A9CD + 29, // $A9CE + 131, // $A9CF + 136, // $A9D0 + 136, // $A9D1 + 136, // $A9D2 + 136, // $A9D3 + 136, // $A9D4 + 136, // $A9D5 + 136, // $A9D6 + 136, // $A9D7 + 136, // $A9D8 + 136, // $A9D9 + 29, // $A9DA + 29, // $A9DB + 29, // $A9DC + 29, // $A9DD + 17, // $A9DE + 17, // $A9DF + 132, // $A9E0 + 132, // $A9E1 + 132, // $A9E2 + 132, // $A9E3 + 132, // $A9E4 + 133, // $A9E5 + 131, // $A9E6 + 132, // $A9E7 + 132, // $A9E8 + 132, // $A9E9 + 132, // $A9EA + 132, // $A9EB + 132, // $A9EC + 132, // $A9ED + 132, // $A9EE + 132, // $A9EF + 136, // $A9F0 + 136, // $A9F1 + 136, // $A9F2 + 136, // $A9F3 + 136, // $A9F4 + 136, // $A9F5 + 136, // $A9F6 + 136, // $A9F7 + 136, // $A9F8 + 136, // $A9F9 + 132, // $A9FA + 132, // $A9FB + 132, // $A9FC + 132, // $A9FD + 132, // $A9FE + 29, // $A9FF + 132, // $AA00 + 132, // $AA01 + 132, // $AA02 + 132, // $AA03 + 132, // $AA04 + 132, // $AA05 + 132, // $AA06 + 132, // $AA07 + 132, // $AA08 + 132, // $AA09 + 132, // $AA0A + 132, // $AA0B + 132, // $AA0C + 132, // $AA0D + 132, // $AA0E + 132, // $AA0F + 132, // $AA10 + 132, // $AA11 + 132, // $AA12 + 132, // $AA13 + 132, // $AA14 + 132, // $AA15 + 132, // $AA16 + 132, // $AA17 + 132, // $AA18 + 132, // $AA19 + 132, // $AA1A + 132, // $AA1B + 132, // $AA1C + 132, // $AA1D + 132, // $AA1E + 132, // $AA1F + 132, // $AA20 + 132, // $AA21 + 132, // $AA22 + 132, // $AA23 + 132, // $AA24 + 132, // $AA25 + 132, // $AA26 + 132, // $AA27 + 132, // $AA28 + 133, // $AA29 + 133, // $AA2A + 133, // $AA2B + 133, // $AA2C + 133, // $AA2D + 133, // $AA2E + 134, // $AA2F + 134, // $AA30 + 133, // $AA31 + 133, // $AA32 + 134, // $AA33 + 134, // $AA34 + 133, // $AA35 + 133, // $AA36 + 29, // $AA37 + 29, // $AA38 + 29, // $AA39 + 29, // $AA3A + 29, // $AA3B + 29, // $AA3C + 29, // $AA3D + 29, // $AA3E + 29, // $AA3F + 132, // $AA40 + 132, // $AA41 + 132, // $AA42 + 133, // $AA43 + 132, // $AA44 + 132, // $AA45 + 132, // $AA46 + 132, // $AA47 + 132, // $AA48 + 132, // $AA49 + 132, // $AA4A + 132, // $AA4B + 133, // $AA4C + 134, // $AA4D + 29, // $AA4E + 29, // $AA4F + 136, // $AA50 + 136, // $AA51 + 136, // $AA52 + 136, // $AA53 + 136, // $AA54 + 136, // $AA55 + 136, // $AA56 + 136, // $AA57 + 136, // $AA58 + 136, // $AA59 + 29, // $AA5A + 29, // $AA5B + 17, // $AA5C + 17, // $AA5D + 17, // $AA5E + 17, // $AA5F + 132, // $AA60 + 132, // $AA61 + 132, // $AA62 + 132, // $AA63 + 132, // $AA64 + 132, // $AA65 + 132, // $AA66 + 132, // $AA67 + 132, // $AA68 + 132, // $AA69 + 132, // $AA6A + 132, // $AA6B + 132, // $AA6C + 132, // $AA6D + 132, // $AA6E + 132, // $AA6F + 131, // $AA70 + 132, // $AA71 + 132, // $AA72 + 132, // $AA73 + 132, // $AA74 + 132, // $AA75 + 132, // $AA76 + 21, // $AA77 + 21, // $AA78 + 21, // $AA79 + 132, // $AA7A + 134, // $AA7B + 133, // $AA7C + 134, // $AA7D + 132, // $AA7E + 132, // $AA7F + 132, // $AA80 + 132, // $AA81 + 132, // $AA82 + 132, // $AA83 + 132, // $AA84 + 132, // $AA85 + 132, // $AA86 + 132, // $AA87 + 132, // $AA88 + 132, // $AA89 + 132, // $AA8A + 132, // $AA8B + 132, // $AA8C + 132, // $AA8D + 132, // $AA8E + 132, // $AA8F + 132, // $AA90 + 132, // $AA91 + 132, // $AA92 + 132, // $AA93 + 132, // $AA94 + 132, // $AA95 + 132, // $AA96 + 132, // $AA97 + 132, // $AA98 + 132, // $AA99 + 132, // $AA9A + 132, // $AA9B + 132, // $AA9C + 132, // $AA9D + 132, // $AA9E + 132, // $AA9F + 132, // $AAA0 + 132, // $AAA1 + 132, // $AAA2 + 132, // $AAA3 + 132, // $AAA4 + 132, // $AAA5 + 132, // $AAA6 + 132, // $AAA7 + 132, // $AAA8 + 132, // $AAA9 + 132, // $AAAA + 132, // $AAAB + 132, // $AAAC + 132, // $AAAD + 132, // $AAAE + 132, // $AAAF + 133, // $AAB0 + 132, // $AAB1 + 133, // $AAB2 + 133, // $AAB3 + 133, // $AAB4 + 132, // $AAB5 + 132, // $AAB6 + 133, // $AAB7 + 133, // $AAB8 + 132, // $AAB9 + 132, // $AABA + 132, // $AABB + 132, // $AABC + 132, // $AABD + 133, // $AABE + 133, // $AABF + 132, // $AAC0 + 133, // $AAC1 + 132, // $AAC2 + 29, // $AAC3 + 29, // $AAC4 + 29, // $AAC5 + 29, // $AAC6 + 29, // $AAC7 + 29, // $AAC8 + 29, // $AAC9 + 29, // $AACA + 29, // $AACB + 29, // $AACC + 29, // $AACD + 29, // $AACE + 29, // $AACF + 29, // $AAD0 + 29, // $AAD1 + 29, // $AAD2 + 29, // $AAD3 + 29, // $AAD4 + 29, // $AAD5 + 29, // $AAD6 + 29, // $AAD7 + 29, // $AAD8 + 29, // $AAD9 + 29, // $AADA + 132, // $AADB + 132, // $AADC + 131, // $AADD + 17, // $AADE + 17, // $AADF + 132, // $AAE0 + 132, // $AAE1 + 132, // $AAE2 + 132, // $AAE3 + 132, // $AAE4 + 132, // $AAE5 + 132, // $AAE6 + 132, // $AAE7 + 132, // $AAE8 + 132, // $AAE9 + 132, // $AAEA + 134, // $AAEB + 133, // $AAEC + 133, // $AAED + 134, // $AAEE + 134, // $AAEF + 17, // $AAF0 + 17, // $AAF1 + 132, // $AAF2 + 131, // $AAF3 + 131, // $AAF4 + 134, // $AAF5 + 133, // $AAF6 + 29, // $AAF7 + 29, // $AAF8 + 29, // $AAF9 + 29, // $AAFA + 29, // $AAFB + 29, // $AAFC + 29, // $AAFD + 29, // $AAFE + 29, // $AAFF + 29, // $AB00 + 132, // $AB01 + 132, // $AB02 + 132, // $AB03 + 132, // $AB04 + 132, // $AB05 + 132, // $AB06 + 29, // $AB07 + 29, // $AB08 + 132, // $AB09 + 132, // $AB0A + 132, // $AB0B + 132, // $AB0C + 132, // $AB0D + 132, // $AB0E + 29, // $AB0F + 29, // $AB10 + 132, // $AB11 + 132, // $AB12 + 132, // $AB13 + 132, // $AB14 + 132, // $AB15 + 132, // $AB16 + 29, // $AB17 + 29, // $AB18 + 29, // $AB19 + 29, // $AB1A + 29, // $AB1B + 29, // $AB1C + 29, // $AB1D + 29, // $AB1E + 29, // $AB1F + 132, // $AB20 + 132, // $AB21 + 132, // $AB22 + 132, // $AB23 + 132, // $AB24 + 132, // $AB25 + 132, // $AB26 + 29, // $AB27 + 132, // $AB28 + 132, // $AB29 + 132, // $AB2A + 132, // $AB2B + 132, // $AB2C + 132, // $AB2D + 132, // $AB2E + 29, // $AB2F + 129, // $AB30 + 129, // $AB31 + 129, // $AB32 + 129, // $AB33 + 129, // $AB34 + 129, // $AB35 + 129, // $AB36 + 129, // $AB37 + 129, // $AB38 + 129, // $AB39 + 129, // $AB3A + 129, // $AB3B + 129, // $AB3C + 129, // $AB3D + 129, // $AB3E + 129, // $AB3F + 129, // $AB40 + 129, // $AB41 + 129, // $AB42 + 129, // $AB43 + 129, // $AB44 + 129, // $AB45 + 129, // $AB46 + 129, // $AB47 + 129, // $AB48 + 129, // $AB49 + 129, // $AB4A + 129, // $AB4B + 129, // $AB4C + 129, // $AB4D + 129, // $AB4E + 129, // $AB4F + 129, // $AB50 + 129, // $AB51 + 129, // $AB52 + 129, // $AB53 + 129, // $AB54 + 129, // $AB55 + 129, // $AB56 + 129, // $AB57 + 129, // $AB58 + 129, // $AB59 + 129, // $AB5A + 20, // $AB5B + 131, // $AB5C + 131, // $AB5D + 131, // $AB5E + 131, // $AB5F + 129, // $AB60 + 129, // $AB61 + 129, // $AB62 + 129, // $AB63 + 129, // $AB64 + 129, // $AB65 + 29, // $AB66 + 29, // $AB67 + 29, // $AB68 + 29, // $AB69 + 29, // $AB6A + 29, // $AB6B + 29, // $AB6C + 29, // $AB6D + 29, // $AB6E + 29, // $AB6F + 129, // $AB70 + 129, // $AB71 + 129, // $AB72 + 129, // $AB73 + 129, // $AB74 + 129, // $AB75 + 129, // $AB76 + 129, // $AB77 + 129, // $AB78 + 129, // $AB79 + 129, // $AB7A + 129, // $AB7B + 129, // $AB7C + 129, // $AB7D + 129, // $AB7E + 129, // $AB7F + 129, // $AB80 + 129, // $AB81 + 129, // $AB82 + 129, // $AB83 + 129, // $AB84 + 129, // $AB85 + 129, // $AB86 + 129, // $AB87 + 129, // $AB88 + 129, // $AB89 + 129, // $AB8A + 129, // $AB8B + 129, // $AB8C + 129, // $AB8D + 129, // $AB8E + 129, // $AB8F + 129, // $AB90 + 129, // $AB91 + 129, // $AB92 + 129, // $AB93 + 129, // $AB94 + 129, // $AB95 + 129, // $AB96 + 129, // $AB97 + 129, // $AB98 + 129, // $AB99 + 129, // $AB9A + 129, // $AB9B + 129, // $AB9C + 129, // $AB9D + 129, // $AB9E + 129, // $AB9F + 129, // $ABA0 + 129, // $ABA1 + 129, // $ABA2 + 129, // $ABA3 + 129, // $ABA4 + 129, // $ABA5 + 129, // $ABA6 + 129, // $ABA7 + 129, // $ABA8 + 129, // $ABA9 + 129, // $ABAA + 129, // $ABAB + 129, // $ABAC + 129, // $ABAD + 129, // $ABAE + 129, // $ABAF + 129, // $ABB0 + 129, // $ABB1 + 129, // $ABB2 + 129, // $ABB3 + 129, // $ABB4 + 129, // $ABB5 + 129, // $ABB6 + 129, // $ABB7 + 129, // $ABB8 + 129, // $ABB9 + 129, // $ABBA + 129, // $ABBB + 129, // $ABBC + 129, // $ABBD + 129, // $ABBE + 129, // $ABBF + 132, // $ABC0 + 132, // $ABC1 + 132, // $ABC2 + 132, // $ABC3 + 132, // $ABC4 + 132, // $ABC5 + 132, // $ABC6 + 132, // $ABC7 + 132, // $ABC8 + 132, // $ABC9 + 132, // $ABCA + 132, // $ABCB + 132, // $ABCC + 132, // $ABCD + 132, // $ABCE + 132, // $ABCF + 132, // $ABD0 + 132, // $ABD1 + 132, // $ABD2 + 132, // $ABD3 + 132, // $ABD4 + 132, // $ABD5 + 132, // $ABD6 + 132, // $ABD7 + 132, // $ABD8 + 132, // $ABD9 + 132, // $ABDA + 132, // $ABDB + 132, // $ABDC + 132, // $ABDD + 132, // $ABDE + 132, // $ABDF + 132, // $ABE0 + 132, // $ABE1 + 132, // $ABE2 + 134, // $ABE3 + 134, // $ABE4 + 133, // $ABE5 + 134, // $ABE6 + 134, // $ABE7 + 133, // $ABE8 + 134, // $ABE9 + 134, // $ABEA + 17, // $ABEB + 134, // $ABEC + 133, // $ABED + 29, // $ABEE + 29, // $ABEF + 136, // $ABF0 + 136, // $ABF1 + 136, // $ABF2 + 136, // $ABF3 + 136, // $ABF4 + 136, // $ABF5 + 136, // $ABF6 + 136, // $ABF7 + 136, // $ABF8 + 136, // $ABF9 + 29, // $ABFA + 29, // $ABFB + 29, // $ABFC + 29, // $ABFD + 29, // $ABFE + 29, // $ABFF + 132, // $AC00 + 132, // $AC01 + 132, // $AC02 + 132, // $AC03 + 132, // $AC04 + 132, // $AC05 + 132, // $AC06 + 132, // $AC07 + 132, // $AC08 + 132, // $AC09 + 132, // $AC0A + 132, // $AC0B + 132, // $AC0C + 132, // $AC0D + 132, // $AC0E + 132, // $AC0F + 132, // $AC10 + 132, // $AC11 + 132, // $AC12 + 132, // $AC13 + 132, // $AC14 + 132, // $AC15 + 132, // $AC16 + 132, // $AC17 + 132, // $AC18 + 132, // $AC19 + 132, // $AC1A + 132, // $AC1B + 132, // $AC1C + 132, // $AC1D + 132, // $AC1E + 132, // $AC1F + 132, // $AC20 + 132, // $AC21 + 132, // $AC22 + 132, // $AC23 + 132, // $AC24 + 132, // $AC25 + 132, // $AC26 + 132, // $AC27 + 132, // $AC28 + 132, // $AC29 + 132, // $AC2A + 132, // $AC2B + 132, // $AC2C + 132, // $AC2D + 132, // $AC2E + 132, // $AC2F + 132, // $AC30 + 132, // $AC31 + 132, // $AC32 + 132, // $AC33 + 132, // $AC34 + 132, // $AC35 + 132, // $AC36 + 132, // $AC37 + 132, // $AC38 + 132, // $AC39 + 132, // $AC3A + 132, // $AC3B + 132, // $AC3C + 132, // $AC3D + 132, // $AC3E + 132, // $AC3F + 132, // $AC40 + 132, // $AC41 + 132, // $AC42 + 132, // $AC43 + 132, // $AC44 + 132, // $AC45 + 132, // $AC46 + 132, // $AC47 + 132, // $AC48 + 132, // $AC49 + 132, // $AC4A + 132, // $AC4B + 132, // $AC4C + 132, // $AC4D + 132, // $AC4E + 132, // $AC4F + 132, // $AC50 + 132, // $AC51 + 132, // $AC52 + 132, // $AC53 + 132, // $AC54 + 132, // $AC55 + 132, // $AC56 + 132, // $AC57 + 132, // $AC58 + 132, // $AC59 + 132, // $AC5A + 132, // $AC5B + 132, // $AC5C + 132, // $AC5D + 132, // $AC5E + 132, // $AC5F + 132, // $AC60 + 132, // $AC61 + 132, // $AC62 + 132, // $AC63 + 132, // $AC64 + 132, // $AC65 + 132, // $AC66 + 132, // $AC67 + 132, // $AC68 + 132, // $AC69 + 132, // $AC6A + 132, // $AC6B + 132, // $AC6C + 132, // $AC6D + 132, // $AC6E + 132, // $AC6F + 132, // $AC70 + 132, // $AC71 + 132, // $AC72 + 132, // $AC73 + 132, // $AC74 + 132, // $AC75 + 132, // $AC76 + 132, // $AC77 + 132, // $AC78 + 132, // $AC79 + 132, // $AC7A + 132, // $AC7B + 132, // $AC7C + 132, // $AC7D + 132, // $AC7E + 132, // $AC7F + 132, // $AC80 + 132, // $AC81 + 132, // $AC82 + 132, // $AC83 + 132, // $AC84 + 132, // $AC85 + 132, // $AC86 + 132, // $AC87 + 132, // $AC88 + 132, // $AC89 + 132, // $AC8A + 132, // $AC8B + 132, // $AC8C + 132, // $AC8D + 132, // $AC8E + 132, // $AC8F + 132, // $AC90 + 132, // $AC91 + 132, // $AC92 + 132, // $AC93 + 132, // $AC94 + 132, // $AC95 + 132, // $AC96 + 132, // $AC97 + 132, // $AC98 + 132, // $AC99 + 132, // $AC9A + 132, // $AC9B + 132, // $AC9C + 132, // $AC9D + 132, // $AC9E + 132, // $AC9F + 132, // $ACA0 + 132, // $ACA1 + 132, // $ACA2 + 132, // $ACA3 + 132, // $ACA4 + 132, // $ACA5 + 132, // $ACA6 + 132, // $ACA7 + 132, // $ACA8 + 132, // $ACA9 + 132, // $ACAA + 132, // $ACAB + 132, // $ACAC + 132, // $ACAD + 132, // $ACAE + 132, // $ACAF + 132, // $ACB0 + 132, // $ACB1 + 132, // $ACB2 + 132, // $ACB3 + 132, // $ACB4 + 132, // $ACB5 + 132, // $ACB6 + 132, // $ACB7 + 132, // $ACB8 + 132, // $ACB9 + 132, // $ACBA + 132, // $ACBB + 132, // $ACBC + 132, // $ACBD + 132, // $ACBE + 132, // $ACBF + 132, // $ACC0 + 132, // $ACC1 + 132, // $ACC2 + 132, // $ACC3 + 132, // $ACC4 + 132, // $ACC5 + 132, // $ACC6 + 132, // $ACC7 + 132, // $ACC8 + 132, // $ACC9 + 132, // $ACCA + 132, // $ACCB + 132, // $ACCC + 132, // $ACCD + 132, // $ACCE + 132, // $ACCF + 132, // $ACD0 + 132, // $ACD1 + 132, // $ACD2 + 132, // $ACD3 + 132, // $ACD4 + 132, // $ACD5 + 132, // $ACD6 + 132, // $ACD7 + 132, // $ACD8 + 132, // $ACD9 + 132, // $ACDA + 132, // $ACDB + 132, // $ACDC + 132, // $ACDD + 132, // $ACDE + 132, // $ACDF + 132, // $ACE0 + 132, // $ACE1 + 132, // $ACE2 + 132, // $ACE3 + 132, // $ACE4 + 132, // $ACE5 + 132, // $ACE6 + 132, // $ACE7 + 132, // $ACE8 + 132, // $ACE9 + 132, // $ACEA + 132, // $ACEB + 132, // $ACEC + 132, // $ACED + 132, // $ACEE + 132, // $ACEF + 132, // $ACF0 + 132, // $ACF1 + 132, // $ACF2 + 132, // $ACF3 + 132, // $ACF4 + 132, // $ACF5 + 132, // $ACF6 + 132, // $ACF7 + 132, // $ACF8 + 132, // $ACF9 + 132, // $ACFA + 132, // $ACFB + 132, // $ACFC + 132, // $ACFD + 132, // $ACFE + 132, // $ACFF + 132, // $AD00 + 132, // $AD01 + 132, // $AD02 + 132, // $AD03 + 132, // $AD04 + 132, // $AD05 + 132, // $AD06 + 132, // $AD07 + 132, // $AD08 + 132, // $AD09 + 132, // $AD0A + 132, // $AD0B + 132, // $AD0C + 132, // $AD0D + 132, // $AD0E + 132, // $AD0F + 132, // $AD10 + 132, // $AD11 + 132, // $AD12 + 132, // $AD13 + 132, // $AD14 + 132, // $AD15 + 132, // $AD16 + 132, // $AD17 + 132, // $AD18 + 132, // $AD19 + 132, // $AD1A + 132, // $AD1B + 132, // $AD1C + 132, // $AD1D + 132, // $AD1E + 132, // $AD1F + 132, // $AD20 + 132, // $AD21 + 132, // $AD22 + 132, // $AD23 + 132, // $AD24 + 132, // $AD25 + 132, // $AD26 + 132, // $AD27 + 132, // $AD28 + 132, // $AD29 + 132, // $AD2A + 132, // $AD2B + 132, // $AD2C + 132, // $AD2D + 132, // $AD2E + 132, // $AD2F + 132, // $AD30 + 132, // $AD31 + 132, // $AD32 + 132, // $AD33 + 132, // $AD34 + 132, // $AD35 + 132, // $AD36 + 132, // $AD37 + 132, // $AD38 + 132, // $AD39 + 132, // $AD3A + 132, // $AD3B + 132, // $AD3C + 132, // $AD3D + 132, // $AD3E + 132, // $AD3F + 132, // $AD40 + 132, // $AD41 + 132, // $AD42 + 132, // $AD43 + 132, // $AD44 + 132, // $AD45 + 132, // $AD46 + 132, // $AD47 + 132, // $AD48 + 132, // $AD49 + 132, // $AD4A + 132, // $AD4B + 132, // $AD4C + 132, // $AD4D + 132, // $AD4E + 132, // $AD4F + 132, // $AD50 + 132, // $AD51 + 132, // $AD52 + 132, // $AD53 + 132, // $AD54 + 132, // $AD55 + 132, // $AD56 + 132, // $AD57 + 132, // $AD58 + 132, // $AD59 + 132, // $AD5A + 132, // $AD5B + 132, // $AD5C + 132, // $AD5D + 132, // $AD5E + 132, // $AD5F + 132, // $AD60 + 132, // $AD61 + 132, // $AD62 + 132, // $AD63 + 132, // $AD64 + 132, // $AD65 + 132, // $AD66 + 132, // $AD67 + 132, // $AD68 + 132, // $AD69 + 132, // $AD6A + 132, // $AD6B + 132, // $AD6C + 132, // $AD6D + 132, // $AD6E + 132, // $AD6F + 132, // $AD70 + 132, // $AD71 + 132, // $AD72 + 132, // $AD73 + 132, // $AD74 + 132, // $AD75 + 132, // $AD76 + 132, // $AD77 + 132, // $AD78 + 132, // $AD79 + 132, // $AD7A + 132, // $AD7B + 132, // $AD7C + 132, // $AD7D + 132, // $AD7E + 132, // $AD7F + 132, // $AD80 + 132, // $AD81 + 132, // $AD82 + 132, // $AD83 + 132, // $AD84 + 132, // $AD85 + 132, // $AD86 + 132, // $AD87 + 132, // $AD88 + 132, // $AD89 + 132, // $AD8A + 132, // $AD8B + 132, // $AD8C + 132, // $AD8D + 132, // $AD8E + 132, // $AD8F + 132, // $AD90 + 132, // $AD91 + 132, // $AD92 + 132, // $AD93 + 132, // $AD94 + 132, // $AD95 + 132, // $AD96 + 132, // $AD97 + 132, // $AD98 + 132, // $AD99 + 132, // $AD9A + 132, // $AD9B + 132, // $AD9C + 132, // $AD9D + 132, // $AD9E + 132, // $AD9F + 132, // $ADA0 + 132, // $ADA1 + 132, // $ADA2 + 132, // $ADA3 + 132, // $ADA4 + 132, // $ADA5 + 132, // $ADA6 + 132, // $ADA7 + 132, // $ADA8 + 132, // $ADA9 + 132, // $ADAA + 132, // $ADAB + 132, // $ADAC + 132, // $ADAD + 132, // $ADAE + 132, // $ADAF + 132, // $ADB0 + 132, // $ADB1 + 132, // $ADB2 + 132, // $ADB3 + 132, // $ADB4 + 132, // $ADB5 + 132, // $ADB6 + 132, // $ADB7 + 132, // $ADB8 + 132, // $ADB9 + 132, // $ADBA + 132, // $ADBB + 132, // $ADBC + 132, // $ADBD + 132, // $ADBE + 132, // $ADBF + 132, // $ADC0 + 132, // $ADC1 + 132, // $ADC2 + 132, // $ADC3 + 132, // $ADC4 + 132, // $ADC5 + 132, // $ADC6 + 132, // $ADC7 + 132, // $ADC8 + 132, // $ADC9 + 132, // $ADCA + 132, // $ADCB + 132, // $ADCC + 132, // $ADCD + 132, // $ADCE + 132, // $ADCF + 132, // $ADD0 + 132, // $ADD1 + 132, // $ADD2 + 132, // $ADD3 + 132, // $ADD4 + 132, // $ADD5 + 132, // $ADD6 + 132, // $ADD7 + 132, // $ADD8 + 132, // $ADD9 + 132, // $ADDA + 132, // $ADDB + 132, // $ADDC + 132, // $ADDD + 132, // $ADDE + 132, // $ADDF + 132, // $ADE0 + 132, // $ADE1 + 132, // $ADE2 + 132, // $ADE3 + 132, // $ADE4 + 132, // $ADE5 + 132, // $ADE6 + 132, // $ADE7 + 132, // $ADE8 + 132, // $ADE9 + 132, // $ADEA + 132, // $ADEB + 132, // $ADEC + 132, // $ADED + 132, // $ADEE + 132, // $ADEF + 132, // $ADF0 + 132, // $ADF1 + 132, // $ADF2 + 132, // $ADF3 + 132, // $ADF4 + 132, // $ADF5 + 132, // $ADF6 + 132, // $ADF7 + 132, // $ADF8 + 132, // $ADF9 + 132, // $ADFA + 132, // $ADFB + 132, // $ADFC + 132, // $ADFD + 132, // $ADFE + 132, // $ADFF + 132, // $AE00 + 132, // $AE01 + 132, // $AE02 + 132, // $AE03 + 132, // $AE04 + 132, // $AE05 + 132, // $AE06 + 132, // $AE07 + 132, // $AE08 + 132, // $AE09 + 132, // $AE0A + 132, // $AE0B + 132, // $AE0C + 132, // $AE0D + 132, // $AE0E + 132, // $AE0F + 132, // $AE10 + 132, // $AE11 + 132, // $AE12 + 132, // $AE13 + 132, // $AE14 + 132, // $AE15 + 132, // $AE16 + 132, // $AE17 + 132, // $AE18 + 132, // $AE19 + 132, // $AE1A + 132, // $AE1B + 132, // $AE1C + 132, // $AE1D + 132, // $AE1E + 132, // $AE1F + 132, // $AE20 + 132, // $AE21 + 132, // $AE22 + 132, // $AE23 + 132, // $AE24 + 132, // $AE25 + 132, // $AE26 + 132, // $AE27 + 132, // $AE28 + 132, // $AE29 + 132, // $AE2A + 132, // $AE2B + 132, // $AE2C + 132, // $AE2D + 132, // $AE2E + 132, // $AE2F + 132, // $AE30 + 132, // $AE31 + 132, // $AE32 + 132, // $AE33 + 132, // $AE34 + 132, // $AE35 + 132, // $AE36 + 132, // $AE37 + 132, // $AE38 + 132, // $AE39 + 132, // $AE3A + 132, // $AE3B + 132, // $AE3C + 132, // $AE3D + 132, // $AE3E + 132, // $AE3F + 132, // $AE40 + 132, // $AE41 + 132, // $AE42 + 132, // $AE43 + 132, // $AE44 + 132, // $AE45 + 132, // $AE46 + 132, // $AE47 + 132, // $AE48 + 132, // $AE49 + 132, // $AE4A + 132, // $AE4B + 132, // $AE4C + 132, // $AE4D + 132, // $AE4E + 132, // $AE4F + 132, // $AE50 + 132, // $AE51 + 132, // $AE52 + 132, // $AE53 + 132, // $AE54 + 132, // $AE55 + 132, // $AE56 + 132, // $AE57 + 132, // $AE58 + 132, // $AE59 + 132, // $AE5A + 132, // $AE5B + 132, // $AE5C + 132, // $AE5D + 132, // $AE5E + 132, // $AE5F + 132, // $AE60 + 132, // $AE61 + 132, // $AE62 + 132, // $AE63 + 132, // $AE64 + 132, // $AE65 + 132, // $AE66 + 132, // $AE67 + 132, // $AE68 + 132, // $AE69 + 132, // $AE6A + 132, // $AE6B + 132, // $AE6C + 132, // $AE6D + 132, // $AE6E + 132, // $AE6F + 132, // $AE70 + 132, // $AE71 + 132, // $AE72 + 132, // $AE73 + 132, // $AE74 + 132, // $AE75 + 132, // $AE76 + 132, // $AE77 + 132, // $AE78 + 132, // $AE79 + 132, // $AE7A + 132, // $AE7B + 132, // $AE7C + 132, // $AE7D + 132, // $AE7E + 132, // $AE7F + 132, // $AE80 + 132, // $AE81 + 132, // $AE82 + 132, // $AE83 + 132, // $AE84 + 132, // $AE85 + 132, // $AE86 + 132, // $AE87 + 132, // $AE88 + 132, // $AE89 + 132, // $AE8A + 132, // $AE8B + 132, // $AE8C + 132, // $AE8D + 132, // $AE8E + 132, // $AE8F + 132, // $AE90 + 132, // $AE91 + 132, // $AE92 + 132, // $AE93 + 132, // $AE94 + 132, // $AE95 + 132, // $AE96 + 132, // $AE97 + 132, // $AE98 + 132, // $AE99 + 132, // $AE9A + 132, // $AE9B + 132, // $AE9C + 132, // $AE9D + 132, // $AE9E + 132, // $AE9F + 132, // $AEA0 + 132, // $AEA1 + 132, // $AEA2 + 132, // $AEA3 + 132, // $AEA4 + 132, // $AEA5 + 132, // $AEA6 + 132, // $AEA7 + 132, // $AEA8 + 132, // $AEA9 + 132, // $AEAA + 132, // $AEAB + 132, // $AEAC + 132, // $AEAD + 132, // $AEAE + 132, // $AEAF + 132, // $AEB0 + 132, // $AEB1 + 132, // $AEB2 + 132, // $AEB3 + 132, // $AEB4 + 132, // $AEB5 + 132, // $AEB6 + 132, // $AEB7 + 132, // $AEB8 + 132, // $AEB9 + 132, // $AEBA + 132, // $AEBB + 132, // $AEBC + 132, // $AEBD + 132, // $AEBE + 132, // $AEBF + 132, // $AEC0 + 132, // $AEC1 + 132, // $AEC2 + 132, // $AEC3 + 132, // $AEC4 + 132, // $AEC5 + 132, // $AEC6 + 132, // $AEC7 + 132, // $AEC8 + 132, // $AEC9 + 132, // $AECA + 132, // $AECB + 132, // $AECC + 132, // $AECD + 132, // $AECE + 132, // $AECF + 132, // $AED0 + 132, // $AED1 + 132, // $AED2 + 132, // $AED3 + 132, // $AED4 + 132, // $AED5 + 132, // $AED6 + 132, // $AED7 + 132, // $AED8 + 132, // $AED9 + 132, // $AEDA + 132, // $AEDB + 132, // $AEDC + 132, // $AEDD + 132, // $AEDE + 132, // $AEDF + 132, // $AEE0 + 132, // $AEE1 + 132, // $AEE2 + 132, // $AEE3 + 132, // $AEE4 + 132, // $AEE5 + 132, // $AEE6 + 132, // $AEE7 + 132, // $AEE8 + 132, // $AEE9 + 132, // $AEEA + 132, // $AEEB + 132, // $AEEC + 132, // $AEED + 132, // $AEEE + 132, // $AEEF + 132, // $AEF0 + 132, // $AEF1 + 132, // $AEF2 + 132, // $AEF3 + 132, // $AEF4 + 132, // $AEF5 + 132, // $AEF6 + 132, // $AEF7 + 132, // $AEF8 + 132, // $AEF9 + 132, // $AEFA + 132, // $AEFB + 132, // $AEFC + 132, // $AEFD + 132, // $AEFE + 132, // $AEFF + 132, // $AF00 + 132, // $AF01 + 132, // $AF02 + 132, // $AF03 + 132, // $AF04 + 132, // $AF05 + 132, // $AF06 + 132, // $AF07 + 132, // $AF08 + 132, // $AF09 + 132, // $AF0A + 132, // $AF0B + 132, // $AF0C + 132, // $AF0D + 132, // $AF0E + 132, // $AF0F + 132, // $AF10 + 132, // $AF11 + 132, // $AF12 + 132, // $AF13 + 132, // $AF14 + 132, // $AF15 + 132, // $AF16 + 132, // $AF17 + 132, // $AF18 + 132, // $AF19 + 132, // $AF1A + 132, // $AF1B + 132, // $AF1C + 132, // $AF1D + 132, // $AF1E + 132, // $AF1F + 132, // $AF20 + 132, // $AF21 + 132, // $AF22 + 132, // $AF23 + 132, // $AF24 + 132, // $AF25 + 132, // $AF26 + 132, // $AF27 + 132, // $AF28 + 132, // $AF29 + 132, // $AF2A + 132, // $AF2B + 132, // $AF2C + 132, // $AF2D + 132, // $AF2E + 132, // $AF2F + 132, // $AF30 + 132, // $AF31 + 132, // $AF32 + 132, // $AF33 + 132, // $AF34 + 132, // $AF35 + 132, // $AF36 + 132, // $AF37 + 132, // $AF38 + 132, // $AF39 + 132, // $AF3A + 132, // $AF3B + 132, // $AF3C + 132, // $AF3D + 132, // $AF3E + 132, // $AF3F + 132, // $AF40 + 132, // $AF41 + 132, // $AF42 + 132, // $AF43 + 132, // $AF44 + 132, // $AF45 + 132, // $AF46 + 132, // $AF47 + 132, // $AF48 + 132, // $AF49 + 132, // $AF4A + 132, // $AF4B + 132, // $AF4C + 132, // $AF4D + 132, // $AF4E + 132, // $AF4F + 132, // $AF50 + 132, // $AF51 + 132, // $AF52 + 132, // $AF53 + 132, // $AF54 + 132, // $AF55 + 132, // $AF56 + 132, // $AF57 + 132, // $AF58 + 132, // $AF59 + 132, // $AF5A + 132, // $AF5B + 132, // $AF5C + 132, // $AF5D + 132, // $AF5E + 132, // $AF5F + 132, // $AF60 + 132, // $AF61 + 132, // $AF62 + 132, // $AF63 + 132, // $AF64 + 132, // $AF65 + 132, // $AF66 + 132, // $AF67 + 132, // $AF68 + 132, // $AF69 + 132, // $AF6A + 132, // $AF6B + 132, // $AF6C + 132, // $AF6D + 132, // $AF6E + 132, // $AF6F + 132, // $AF70 + 132, // $AF71 + 132, // $AF72 + 132, // $AF73 + 132, // $AF74 + 132, // $AF75 + 132, // $AF76 + 132, // $AF77 + 132, // $AF78 + 132, // $AF79 + 132, // $AF7A + 132, // $AF7B + 132, // $AF7C + 132, // $AF7D + 132, // $AF7E + 132, // $AF7F + 132, // $AF80 + 132, // $AF81 + 132, // $AF82 + 132, // $AF83 + 132, // $AF84 + 132, // $AF85 + 132, // $AF86 + 132, // $AF87 + 132, // $AF88 + 132, // $AF89 + 132, // $AF8A + 132, // $AF8B + 132, // $AF8C + 132, // $AF8D + 132, // $AF8E + 132, // $AF8F + 132, // $AF90 + 132, // $AF91 + 132, // $AF92 + 132, // $AF93 + 132, // $AF94 + 132, // $AF95 + 132, // $AF96 + 132, // $AF97 + 132, // $AF98 + 132, // $AF99 + 132, // $AF9A + 132, // $AF9B + 132, // $AF9C + 132, // $AF9D + 132, // $AF9E + 132, // $AF9F + 132, // $AFA0 + 132, // $AFA1 + 132, // $AFA2 + 132, // $AFA3 + 132, // $AFA4 + 132, // $AFA5 + 132, // $AFA6 + 132, // $AFA7 + 132, // $AFA8 + 132, // $AFA9 + 132, // $AFAA + 132, // $AFAB + 132, // $AFAC + 132, // $AFAD + 132, // $AFAE + 132, // $AFAF + 132, // $AFB0 + 132, // $AFB1 + 132, // $AFB2 + 132, // $AFB3 + 132, // $AFB4 + 132, // $AFB5 + 132, // $AFB6 + 132, // $AFB7 + 132, // $AFB8 + 132, // $AFB9 + 132, // $AFBA + 132, // $AFBB + 132, // $AFBC + 132, // $AFBD + 132, // $AFBE + 132, // $AFBF + 132, // $AFC0 + 132, // $AFC1 + 132, // $AFC2 + 132, // $AFC3 + 132, // $AFC4 + 132, // $AFC5 + 132, // $AFC6 + 132, // $AFC7 + 132, // $AFC8 + 132, // $AFC9 + 132, // $AFCA + 132, // $AFCB + 132, // $AFCC + 132, // $AFCD + 132, // $AFCE + 132, // $AFCF + 132, // $AFD0 + 132, // $AFD1 + 132, // $AFD2 + 132, // $AFD3 + 132, // $AFD4 + 132, // $AFD5 + 132, // $AFD6 + 132, // $AFD7 + 132, // $AFD8 + 132, // $AFD9 + 132, // $AFDA + 132, // $AFDB + 132, // $AFDC + 132, // $AFDD + 132, // $AFDE + 132, // $AFDF + 132, // $AFE0 + 132, // $AFE1 + 132, // $AFE2 + 132, // $AFE3 + 132, // $AFE4 + 132, // $AFE5 + 132, // $AFE6 + 132, // $AFE7 + 132, // $AFE8 + 132, // $AFE9 + 132, // $AFEA + 132, // $AFEB + 132, // $AFEC + 132, // $AFED + 132, // $AFEE + 132, // $AFEF + 132, // $AFF0 + 132, // $AFF1 + 132, // $AFF2 + 132, // $AFF3 + 132, // $AFF4 + 132, // $AFF5 + 132, // $AFF6 + 132, // $AFF7 + 132, // $AFF8 + 132, // $AFF9 + 132, // $AFFA + 132, // $AFFB + 132, // $AFFC + 132, // $AFFD + 132, // $AFFE + 132, // $AFFF + 132, // $B000 + 132, // $B001 + 132, // $B002 + 132, // $B003 + 132, // $B004 + 132, // $B005 + 132, // $B006 + 132, // $B007 + 132, // $B008 + 132, // $B009 + 132, // $B00A + 132, // $B00B + 132, // $B00C + 132, // $B00D + 132, // $B00E + 132, // $B00F + 132, // $B010 + 132, // $B011 + 132, // $B012 + 132, // $B013 + 132, // $B014 + 132, // $B015 + 132, // $B016 + 132, // $B017 + 132, // $B018 + 132, // $B019 + 132, // $B01A + 132, // $B01B + 132, // $B01C + 132, // $B01D + 132, // $B01E + 132, // $B01F + 132, // $B020 + 132, // $B021 + 132, // $B022 + 132, // $B023 + 132, // $B024 + 132, // $B025 + 132, // $B026 + 132, // $B027 + 132, // $B028 + 132, // $B029 + 132, // $B02A + 132, // $B02B + 132, // $B02C + 132, // $B02D + 132, // $B02E + 132, // $B02F + 132, // $B030 + 132, // $B031 + 132, // $B032 + 132, // $B033 + 132, // $B034 + 132, // $B035 + 132, // $B036 + 132, // $B037 + 132, // $B038 + 132, // $B039 + 132, // $B03A + 132, // $B03B + 132, // $B03C + 132, // $B03D + 132, // $B03E + 132, // $B03F + 132, // $B040 + 132, // $B041 + 132, // $B042 + 132, // $B043 + 132, // $B044 + 132, // $B045 + 132, // $B046 + 132, // $B047 + 132, // $B048 + 132, // $B049 + 132, // $B04A + 132, // $B04B + 132, // $B04C + 132, // $B04D + 132, // $B04E + 132, // $B04F + 132, // $B050 + 132, // $B051 + 132, // $B052 + 132, // $B053 + 132, // $B054 + 132, // $B055 + 132, // $B056 + 132, // $B057 + 132, // $B058 + 132, // $B059 + 132, // $B05A + 132, // $B05B + 132, // $B05C + 132, // $B05D + 132, // $B05E + 132, // $B05F + 132, // $B060 + 132, // $B061 + 132, // $B062 + 132, // $B063 + 132, // $B064 + 132, // $B065 + 132, // $B066 + 132, // $B067 + 132, // $B068 + 132, // $B069 + 132, // $B06A + 132, // $B06B + 132, // $B06C + 132, // $B06D + 132, // $B06E + 132, // $B06F + 132, // $B070 + 132, // $B071 + 132, // $B072 + 132, // $B073 + 132, // $B074 + 132, // $B075 + 132, // $B076 + 132, // $B077 + 132, // $B078 + 132, // $B079 + 132, // $B07A + 132, // $B07B + 132, // $B07C + 132, // $B07D + 132, // $B07E + 132, // $B07F + 132, // $B080 + 132, // $B081 + 132, // $B082 + 132, // $B083 + 132, // $B084 + 132, // $B085 + 132, // $B086 + 132, // $B087 + 132, // $B088 + 132, // $B089 + 132, // $B08A + 132, // $B08B + 132, // $B08C + 132, // $B08D + 132, // $B08E + 132, // $B08F + 132, // $B090 + 132, // $B091 + 132, // $B092 + 132, // $B093 + 132, // $B094 + 132, // $B095 + 132, // $B096 + 132, // $B097 + 132, // $B098 + 132, // $B099 + 132, // $B09A + 132, // $B09B + 132, // $B09C + 132, // $B09D + 132, // $B09E + 132, // $B09F + 132, // $B0A0 + 132, // $B0A1 + 132, // $B0A2 + 132, // $B0A3 + 132, // $B0A4 + 132, // $B0A5 + 132, // $B0A6 + 132, // $B0A7 + 132, // $B0A8 + 132, // $B0A9 + 132, // $B0AA + 132, // $B0AB + 132, // $B0AC + 132, // $B0AD + 132, // $B0AE + 132, // $B0AF + 132, // $B0B0 + 132, // $B0B1 + 132, // $B0B2 + 132, // $B0B3 + 132, // $B0B4 + 132, // $B0B5 + 132, // $B0B6 + 132, // $B0B7 + 132, // $B0B8 + 132, // $B0B9 + 132, // $B0BA + 132, // $B0BB + 132, // $B0BC + 132, // $B0BD + 132, // $B0BE + 132, // $B0BF + 132, // $B0C0 + 132, // $B0C1 + 132, // $B0C2 + 132, // $B0C3 + 132, // $B0C4 + 132, // $B0C5 + 132, // $B0C6 + 132, // $B0C7 + 132, // $B0C8 + 132, // $B0C9 + 132, // $B0CA + 132, // $B0CB + 132, // $B0CC + 132, // $B0CD + 132, // $B0CE + 132, // $B0CF + 132, // $B0D0 + 132, // $B0D1 + 132, // $B0D2 + 132, // $B0D3 + 132, // $B0D4 + 132, // $B0D5 + 132, // $B0D6 + 132, // $B0D7 + 132, // $B0D8 + 132, // $B0D9 + 132, // $B0DA + 132, // $B0DB + 132, // $B0DC + 132, // $B0DD + 132, // $B0DE + 132, // $B0DF + 132, // $B0E0 + 132, // $B0E1 + 132, // $B0E2 + 132, // $B0E3 + 132, // $B0E4 + 132, // $B0E5 + 132, // $B0E6 + 132, // $B0E7 + 132, // $B0E8 + 132, // $B0E9 + 132, // $B0EA + 132, // $B0EB + 132, // $B0EC + 132, // $B0ED + 132, // $B0EE + 132, // $B0EF + 132, // $B0F0 + 132, // $B0F1 + 132, // $B0F2 + 132, // $B0F3 + 132, // $B0F4 + 132, // $B0F5 + 132, // $B0F6 + 132, // $B0F7 + 132, // $B0F8 + 132, // $B0F9 + 132, // $B0FA + 132, // $B0FB + 132, // $B0FC + 132, // $B0FD + 132, // $B0FE + 132, // $B0FF + 132, // $B100 + 132, // $B101 + 132, // $B102 + 132, // $B103 + 132, // $B104 + 132, // $B105 + 132, // $B106 + 132, // $B107 + 132, // $B108 + 132, // $B109 + 132, // $B10A + 132, // $B10B + 132, // $B10C + 132, // $B10D + 132, // $B10E + 132, // $B10F + 132, // $B110 + 132, // $B111 + 132, // $B112 + 132, // $B113 + 132, // $B114 + 132, // $B115 + 132, // $B116 + 132, // $B117 + 132, // $B118 + 132, // $B119 + 132, // $B11A + 132, // $B11B + 132, // $B11C + 132, // $B11D + 132, // $B11E + 132, // $B11F + 132, // $B120 + 132, // $B121 + 132, // $B122 + 132, // $B123 + 132, // $B124 + 132, // $B125 + 132, // $B126 + 132, // $B127 + 132, // $B128 + 132, // $B129 + 132, // $B12A + 132, // $B12B + 132, // $B12C + 132, // $B12D + 132, // $B12E + 132, // $B12F + 132, // $B130 + 132, // $B131 + 132, // $B132 + 132, // $B133 + 132, // $B134 + 132, // $B135 + 132, // $B136 + 132, // $B137 + 132, // $B138 + 132, // $B139 + 132, // $B13A + 132, // $B13B + 132, // $B13C + 132, // $B13D + 132, // $B13E + 132, // $B13F + 132, // $B140 + 132, // $B141 + 132, // $B142 + 132, // $B143 + 132, // $B144 + 132, // $B145 + 132, // $B146 + 132, // $B147 + 132, // $B148 + 132, // $B149 + 132, // $B14A + 132, // $B14B + 132, // $B14C + 132, // $B14D + 132, // $B14E + 132, // $B14F + 132, // $B150 + 132, // $B151 + 132, // $B152 + 132, // $B153 + 132, // $B154 + 132, // $B155 + 132, // $B156 + 132, // $B157 + 132, // $B158 + 132, // $B159 + 132, // $B15A + 132, // $B15B + 132, // $B15C + 132, // $B15D + 132, // $B15E + 132, // $B15F + 132, // $B160 + 132, // $B161 + 132, // $B162 + 132, // $B163 + 132, // $B164 + 132, // $B165 + 132, // $B166 + 132, // $B167 + 132, // $B168 + 132, // $B169 + 132, // $B16A + 132, // $B16B + 132, // $B16C + 132, // $B16D + 132, // $B16E + 132, // $B16F + 132, // $B170 + 132, // $B171 + 132, // $B172 + 132, // $B173 + 132, // $B174 + 132, // $B175 + 132, // $B176 + 132, // $B177 + 132, // $B178 + 132, // $B179 + 132, // $B17A + 132, // $B17B + 132, // $B17C + 132, // $B17D + 132, // $B17E + 132, // $B17F + 132, // $B180 + 132, // $B181 + 132, // $B182 + 132, // $B183 + 132, // $B184 + 132, // $B185 + 132, // $B186 + 132, // $B187 + 132, // $B188 + 132, // $B189 + 132, // $B18A + 132, // $B18B + 132, // $B18C + 132, // $B18D + 132, // $B18E + 132, // $B18F + 132, // $B190 + 132, // $B191 + 132, // $B192 + 132, // $B193 + 132, // $B194 + 132, // $B195 + 132, // $B196 + 132, // $B197 + 132, // $B198 + 132, // $B199 + 132, // $B19A + 132, // $B19B + 132, // $B19C + 132, // $B19D + 132, // $B19E + 132, // $B19F + 132, // $B1A0 + 132, // $B1A1 + 132, // $B1A2 + 132, // $B1A3 + 132, // $B1A4 + 132, // $B1A5 + 132, // $B1A6 + 132, // $B1A7 + 132, // $B1A8 + 132, // $B1A9 + 132, // $B1AA + 132, // $B1AB + 132, // $B1AC + 132, // $B1AD + 132, // $B1AE + 132, // $B1AF + 132, // $B1B0 + 132, // $B1B1 + 132, // $B1B2 + 132, // $B1B3 + 132, // $B1B4 + 132, // $B1B5 + 132, // $B1B6 + 132, // $B1B7 + 132, // $B1B8 + 132, // $B1B9 + 132, // $B1BA + 132, // $B1BB + 132, // $B1BC + 132, // $B1BD + 132, // $B1BE + 132, // $B1BF + 132, // $B1C0 + 132, // $B1C1 + 132, // $B1C2 + 132, // $B1C3 + 132, // $B1C4 + 132, // $B1C5 + 132, // $B1C6 + 132, // $B1C7 + 132, // $B1C8 + 132, // $B1C9 + 132, // $B1CA + 132, // $B1CB + 132, // $B1CC + 132, // $B1CD + 132, // $B1CE + 132, // $B1CF + 132, // $B1D0 + 132, // $B1D1 + 132, // $B1D2 + 132, // $B1D3 + 132, // $B1D4 + 132, // $B1D5 + 132, // $B1D6 + 132, // $B1D7 + 132, // $B1D8 + 132, // $B1D9 + 132, // $B1DA + 132, // $B1DB + 132, // $B1DC + 132, // $B1DD + 132, // $B1DE + 132, // $B1DF + 132, // $B1E0 + 132, // $B1E1 + 132, // $B1E2 + 132, // $B1E3 + 132, // $B1E4 + 132, // $B1E5 + 132, // $B1E6 + 132, // $B1E7 + 132, // $B1E8 + 132, // $B1E9 + 132, // $B1EA + 132, // $B1EB + 132, // $B1EC + 132, // $B1ED + 132, // $B1EE + 132, // $B1EF + 132, // $B1F0 + 132, // $B1F1 + 132, // $B1F2 + 132, // $B1F3 + 132, // $B1F4 + 132, // $B1F5 + 132, // $B1F6 + 132, // $B1F7 + 132, // $B1F8 + 132, // $B1F9 + 132, // $B1FA + 132, // $B1FB + 132, // $B1FC + 132, // $B1FD + 132, // $B1FE + 132, // $B1FF + 132, // $B200 + 132, // $B201 + 132, // $B202 + 132, // $B203 + 132, // $B204 + 132, // $B205 + 132, // $B206 + 132, // $B207 + 132, // $B208 + 132, // $B209 + 132, // $B20A + 132, // $B20B + 132, // $B20C + 132, // $B20D + 132, // $B20E + 132, // $B20F + 132, // $B210 + 132, // $B211 + 132, // $B212 + 132, // $B213 + 132, // $B214 + 132, // $B215 + 132, // $B216 + 132, // $B217 + 132, // $B218 + 132, // $B219 + 132, // $B21A + 132, // $B21B + 132, // $B21C + 132, // $B21D + 132, // $B21E + 132, // $B21F + 132, // $B220 + 132, // $B221 + 132, // $B222 + 132, // $B223 + 132, // $B224 + 132, // $B225 + 132, // $B226 + 132, // $B227 + 132, // $B228 + 132, // $B229 + 132, // $B22A + 132, // $B22B + 132, // $B22C + 132, // $B22D + 132, // $B22E + 132, // $B22F + 132, // $B230 + 132, // $B231 + 132, // $B232 + 132, // $B233 + 132, // $B234 + 132, // $B235 + 132, // $B236 + 132, // $B237 + 132, // $B238 + 132, // $B239 + 132, // $B23A + 132, // $B23B + 132, // $B23C + 132, // $B23D + 132, // $B23E + 132, // $B23F + 132, // $B240 + 132, // $B241 + 132, // $B242 + 132, // $B243 + 132, // $B244 + 132, // $B245 + 132, // $B246 + 132, // $B247 + 132, // $B248 + 132, // $B249 + 132, // $B24A + 132, // $B24B + 132, // $B24C + 132, // $B24D + 132, // $B24E + 132, // $B24F + 132, // $B250 + 132, // $B251 + 132, // $B252 + 132, // $B253 + 132, // $B254 + 132, // $B255 + 132, // $B256 + 132, // $B257 + 132, // $B258 + 132, // $B259 + 132, // $B25A + 132, // $B25B + 132, // $B25C + 132, // $B25D + 132, // $B25E + 132, // $B25F + 132, // $B260 + 132, // $B261 + 132, // $B262 + 132, // $B263 + 132, // $B264 + 132, // $B265 + 132, // $B266 + 132, // $B267 + 132, // $B268 + 132, // $B269 + 132, // $B26A + 132, // $B26B + 132, // $B26C + 132, // $B26D + 132, // $B26E + 132, // $B26F + 132, // $B270 + 132, // $B271 + 132, // $B272 + 132, // $B273 + 132, // $B274 + 132, // $B275 + 132, // $B276 + 132, // $B277 + 132, // $B278 + 132, // $B279 + 132, // $B27A + 132, // $B27B + 132, // $B27C + 132, // $B27D + 132, // $B27E + 132, // $B27F + 132, // $B280 + 132, // $B281 + 132, // $B282 + 132, // $B283 + 132, // $B284 + 132, // $B285 + 132, // $B286 + 132, // $B287 + 132, // $B288 + 132, // $B289 + 132, // $B28A + 132, // $B28B + 132, // $B28C + 132, // $B28D + 132, // $B28E + 132, // $B28F + 132, // $B290 + 132, // $B291 + 132, // $B292 + 132, // $B293 + 132, // $B294 + 132, // $B295 + 132, // $B296 + 132, // $B297 + 132, // $B298 + 132, // $B299 + 132, // $B29A + 132, // $B29B + 132, // $B29C + 132, // $B29D + 132, // $B29E + 132, // $B29F + 132, // $B2A0 + 132, // $B2A1 + 132, // $B2A2 + 132, // $B2A3 + 132, // $B2A4 + 132, // $B2A5 + 132, // $B2A6 + 132, // $B2A7 + 132, // $B2A8 + 132, // $B2A9 + 132, // $B2AA + 132, // $B2AB + 132, // $B2AC + 132, // $B2AD + 132, // $B2AE + 132, // $B2AF + 132, // $B2B0 + 132, // $B2B1 + 132, // $B2B2 + 132, // $B2B3 + 132, // $B2B4 + 132, // $B2B5 + 132, // $B2B6 + 132, // $B2B7 + 132, // $B2B8 + 132, // $B2B9 + 132, // $B2BA + 132, // $B2BB + 132, // $B2BC + 132, // $B2BD + 132, // $B2BE + 132, // $B2BF + 132, // $B2C0 + 132, // $B2C1 + 132, // $B2C2 + 132, // $B2C3 + 132, // $B2C4 + 132, // $B2C5 + 132, // $B2C6 + 132, // $B2C7 + 132, // $B2C8 + 132, // $B2C9 + 132, // $B2CA + 132, // $B2CB + 132, // $B2CC + 132, // $B2CD + 132, // $B2CE + 132, // $B2CF + 132, // $B2D0 + 132, // $B2D1 + 132, // $B2D2 + 132, // $B2D3 + 132, // $B2D4 + 132, // $B2D5 + 132, // $B2D6 + 132, // $B2D7 + 132, // $B2D8 + 132, // $B2D9 + 132, // $B2DA + 132, // $B2DB + 132, // $B2DC + 132, // $B2DD + 132, // $B2DE + 132, // $B2DF + 132, // $B2E0 + 132, // $B2E1 + 132, // $B2E2 + 132, // $B2E3 + 132, // $B2E4 + 132, // $B2E5 + 132, // $B2E6 + 132, // $B2E7 + 132, // $B2E8 + 132, // $B2E9 + 132, // $B2EA + 132, // $B2EB + 132, // $B2EC + 132, // $B2ED + 132, // $B2EE + 132, // $B2EF + 132, // $B2F0 + 132, // $B2F1 + 132, // $B2F2 + 132, // $B2F3 + 132, // $B2F4 + 132, // $B2F5 + 132, // $B2F6 + 132, // $B2F7 + 132, // $B2F8 + 132, // $B2F9 + 132, // $B2FA + 132, // $B2FB + 132, // $B2FC + 132, // $B2FD + 132, // $B2FE + 132, // $B2FF + 132, // $B300 + 132, // $B301 + 132, // $B302 + 132, // $B303 + 132, // $B304 + 132, // $B305 + 132, // $B306 + 132, // $B307 + 132, // $B308 + 132, // $B309 + 132, // $B30A + 132, // $B30B + 132, // $B30C + 132, // $B30D + 132, // $B30E + 132, // $B30F + 132, // $B310 + 132, // $B311 + 132, // $B312 + 132, // $B313 + 132, // $B314 + 132, // $B315 + 132, // $B316 + 132, // $B317 + 132, // $B318 + 132, // $B319 + 132, // $B31A + 132, // $B31B + 132, // $B31C + 132, // $B31D + 132, // $B31E + 132, // $B31F + 132, // $B320 + 132, // $B321 + 132, // $B322 + 132, // $B323 + 132, // $B324 + 132, // $B325 + 132, // $B326 + 132, // $B327 + 132, // $B328 + 132, // $B329 + 132, // $B32A + 132, // $B32B + 132, // $B32C + 132, // $B32D + 132, // $B32E + 132, // $B32F + 132, // $B330 + 132, // $B331 + 132, // $B332 + 132, // $B333 + 132, // $B334 + 132, // $B335 + 132, // $B336 + 132, // $B337 + 132, // $B338 + 132, // $B339 + 132, // $B33A + 132, // $B33B + 132, // $B33C + 132, // $B33D + 132, // $B33E + 132, // $B33F + 132, // $B340 + 132, // $B341 + 132, // $B342 + 132, // $B343 + 132, // $B344 + 132, // $B345 + 132, // $B346 + 132, // $B347 + 132, // $B348 + 132, // $B349 + 132, // $B34A + 132, // $B34B + 132, // $B34C + 132, // $B34D + 132, // $B34E + 132, // $B34F + 132, // $B350 + 132, // $B351 + 132, // $B352 + 132, // $B353 + 132, // $B354 + 132, // $B355 + 132, // $B356 + 132, // $B357 + 132, // $B358 + 132, // $B359 + 132, // $B35A + 132, // $B35B + 132, // $B35C + 132, // $B35D + 132, // $B35E + 132, // $B35F + 132, // $B360 + 132, // $B361 + 132, // $B362 + 132, // $B363 + 132, // $B364 + 132, // $B365 + 132, // $B366 + 132, // $B367 + 132, // $B368 + 132, // $B369 + 132, // $B36A + 132, // $B36B + 132, // $B36C + 132, // $B36D + 132, // $B36E + 132, // $B36F + 132, // $B370 + 132, // $B371 + 132, // $B372 + 132, // $B373 + 132, // $B374 + 132, // $B375 + 132, // $B376 + 132, // $B377 + 132, // $B378 + 132, // $B379 + 132, // $B37A + 132, // $B37B + 132, // $B37C + 132, // $B37D + 132, // $B37E + 132, // $B37F + 132, // $B380 + 132, // $B381 + 132, // $B382 + 132, // $B383 + 132, // $B384 + 132, // $B385 + 132, // $B386 + 132, // $B387 + 132, // $B388 + 132, // $B389 + 132, // $B38A + 132, // $B38B + 132, // $B38C + 132, // $B38D + 132, // $B38E + 132, // $B38F + 132, // $B390 + 132, // $B391 + 132, // $B392 + 132, // $B393 + 132, // $B394 + 132, // $B395 + 132, // $B396 + 132, // $B397 + 132, // $B398 + 132, // $B399 + 132, // $B39A + 132, // $B39B + 132, // $B39C + 132, // $B39D + 132, // $B39E + 132, // $B39F + 132, // $B3A0 + 132, // $B3A1 + 132, // $B3A2 + 132, // $B3A3 + 132, // $B3A4 + 132, // $B3A5 + 132, // $B3A6 + 132, // $B3A7 + 132, // $B3A8 + 132, // $B3A9 + 132, // $B3AA + 132, // $B3AB + 132, // $B3AC + 132, // $B3AD + 132, // $B3AE + 132, // $B3AF + 132, // $B3B0 + 132, // $B3B1 + 132, // $B3B2 + 132, // $B3B3 + 132, // $B3B4 + 132, // $B3B5 + 132, // $B3B6 + 132, // $B3B7 + 132, // $B3B8 + 132, // $B3B9 + 132, // $B3BA + 132, // $B3BB + 132, // $B3BC + 132, // $B3BD + 132, // $B3BE + 132, // $B3BF + 132, // $B3C0 + 132, // $B3C1 + 132, // $B3C2 + 132, // $B3C3 + 132, // $B3C4 + 132, // $B3C5 + 132, // $B3C6 + 132, // $B3C7 + 132, // $B3C8 + 132, // $B3C9 + 132, // $B3CA + 132, // $B3CB + 132, // $B3CC + 132, // $B3CD + 132, // $B3CE + 132, // $B3CF + 132, // $B3D0 + 132, // $B3D1 + 132, // $B3D2 + 132, // $B3D3 + 132, // $B3D4 + 132, // $B3D5 + 132, // $B3D6 + 132, // $B3D7 + 132, // $B3D8 + 132, // $B3D9 + 132, // $B3DA + 132, // $B3DB + 132, // $B3DC + 132, // $B3DD + 132, // $B3DE + 132, // $B3DF + 132, // $B3E0 + 132, // $B3E1 + 132, // $B3E2 + 132, // $B3E3 + 132, // $B3E4 + 132, // $B3E5 + 132, // $B3E6 + 132, // $B3E7 + 132, // $B3E8 + 132, // $B3E9 + 132, // $B3EA + 132, // $B3EB + 132, // $B3EC + 132, // $B3ED + 132, // $B3EE + 132, // $B3EF + 132, // $B3F0 + 132, // $B3F1 + 132, // $B3F2 + 132, // $B3F3 + 132, // $B3F4 + 132, // $B3F5 + 132, // $B3F6 + 132, // $B3F7 + 132, // $B3F8 + 132, // $B3F9 + 132, // $B3FA + 132, // $B3FB + 132, // $B3FC + 132, // $B3FD + 132, // $B3FE + 132, // $B3FF + 132, // $B400 + 132, // $B401 + 132, // $B402 + 132, // $B403 + 132, // $B404 + 132, // $B405 + 132, // $B406 + 132, // $B407 + 132, // $B408 + 132, // $B409 + 132, // $B40A + 132, // $B40B + 132, // $B40C + 132, // $B40D + 132, // $B40E + 132, // $B40F + 132, // $B410 + 132, // $B411 + 132, // $B412 + 132, // $B413 + 132, // $B414 + 132, // $B415 + 132, // $B416 + 132, // $B417 + 132, // $B418 + 132, // $B419 + 132, // $B41A + 132, // $B41B + 132, // $B41C + 132, // $B41D + 132, // $B41E + 132, // $B41F + 132, // $B420 + 132, // $B421 + 132, // $B422 + 132, // $B423 + 132, // $B424 + 132, // $B425 + 132, // $B426 + 132, // $B427 + 132, // $B428 + 132, // $B429 + 132, // $B42A + 132, // $B42B + 132, // $B42C + 132, // $B42D + 132, // $B42E + 132, // $B42F + 132, // $B430 + 132, // $B431 + 132, // $B432 + 132, // $B433 + 132, // $B434 + 132, // $B435 + 132, // $B436 + 132, // $B437 + 132, // $B438 + 132, // $B439 + 132, // $B43A + 132, // $B43B + 132, // $B43C + 132, // $B43D + 132, // $B43E + 132, // $B43F + 132, // $B440 + 132, // $B441 + 132, // $B442 + 132, // $B443 + 132, // $B444 + 132, // $B445 + 132, // $B446 + 132, // $B447 + 132, // $B448 + 132, // $B449 + 132, // $B44A + 132, // $B44B + 132, // $B44C + 132, // $B44D + 132, // $B44E + 132, // $B44F + 132, // $B450 + 132, // $B451 + 132, // $B452 + 132, // $B453 + 132, // $B454 + 132, // $B455 + 132, // $B456 + 132, // $B457 + 132, // $B458 + 132, // $B459 + 132, // $B45A + 132, // $B45B + 132, // $B45C + 132, // $B45D + 132, // $B45E + 132, // $B45F + 132, // $B460 + 132, // $B461 + 132, // $B462 + 132, // $B463 + 132, // $B464 + 132, // $B465 + 132, // $B466 + 132, // $B467 + 132, // $B468 + 132, // $B469 + 132, // $B46A + 132, // $B46B + 132, // $B46C + 132, // $B46D + 132, // $B46E + 132, // $B46F + 132, // $B470 + 132, // $B471 + 132, // $B472 + 132, // $B473 + 132, // $B474 + 132, // $B475 + 132, // $B476 + 132, // $B477 + 132, // $B478 + 132, // $B479 + 132, // $B47A + 132, // $B47B + 132, // $B47C + 132, // $B47D + 132, // $B47E + 132, // $B47F + 132, // $B480 + 132, // $B481 + 132, // $B482 + 132, // $B483 + 132, // $B484 + 132, // $B485 + 132, // $B486 + 132, // $B487 + 132, // $B488 + 132, // $B489 + 132, // $B48A + 132, // $B48B + 132, // $B48C + 132, // $B48D + 132, // $B48E + 132, // $B48F + 132, // $B490 + 132, // $B491 + 132, // $B492 + 132, // $B493 + 132, // $B494 + 132, // $B495 + 132, // $B496 + 132, // $B497 + 132, // $B498 + 132, // $B499 + 132, // $B49A + 132, // $B49B + 132, // $B49C + 132, // $B49D + 132, // $B49E + 132, // $B49F + 132, // $B4A0 + 132, // $B4A1 + 132, // $B4A2 + 132, // $B4A3 + 132, // $B4A4 + 132, // $B4A5 + 132, // $B4A6 + 132, // $B4A7 + 132, // $B4A8 + 132, // $B4A9 + 132, // $B4AA + 132, // $B4AB + 132, // $B4AC + 132, // $B4AD + 132, // $B4AE + 132, // $B4AF + 132, // $B4B0 + 132, // $B4B1 + 132, // $B4B2 + 132, // $B4B3 + 132, // $B4B4 + 132, // $B4B5 + 132, // $B4B6 + 132, // $B4B7 + 132, // $B4B8 + 132, // $B4B9 + 132, // $B4BA + 132, // $B4BB + 132, // $B4BC + 132, // $B4BD + 132, // $B4BE + 132, // $B4BF + 132, // $B4C0 + 132, // $B4C1 + 132, // $B4C2 + 132, // $B4C3 + 132, // $B4C4 + 132, // $B4C5 + 132, // $B4C6 + 132, // $B4C7 + 132, // $B4C8 + 132, // $B4C9 + 132, // $B4CA + 132, // $B4CB + 132, // $B4CC + 132, // $B4CD + 132, // $B4CE + 132, // $B4CF + 132, // $B4D0 + 132, // $B4D1 + 132, // $B4D2 + 132, // $B4D3 + 132, // $B4D4 + 132, // $B4D5 + 132, // $B4D6 + 132, // $B4D7 + 132, // $B4D8 + 132, // $B4D9 + 132, // $B4DA + 132, // $B4DB + 132, // $B4DC + 132, // $B4DD + 132, // $B4DE + 132, // $B4DF + 132, // $B4E0 + 132, // $B4E1 + 132, // $B4E2 + 132, // $B4E3 + 132, // $B4E4 + 132, // $B4E5 + 132, // $B4E6 + 132, // $B4E7 + 132, // $B4E8 + 132, // $B4E9 + 132, // $B4EA + 132, // $B4EB + 132, // $B4EC + 132, // $B4ED + 132, // $B4EE + 132, // $B4EF + 132, // $B4F0 + 132, // $B4F1 + 132, // $B4F2 + 132, // $B4F3 + 132, // $B4F4 + 132, // $B4F5 + 132, // $B4F6 + 132, // $B4F7 + 132, // $B4F8 + 132, // $B4F9 + 132, // $B4FA + 132, // $B4FB + 132, // $B4FC + 132, // $B4FD + 132, // $B4FE + 132, // $B4FF + 132, // $B500 + 132, // $B501 + 132, // $B502 + 132, // $B503 + 132, // $B504 + 132, // $B505 + 132, // $B506 + 132, // $B507 + 132, // $B508 + 132, // $B509 + 132, // $B50A + 132, // $B50B + 132, // $B50C + 132, // $B50D + 132, // $B50E + 132, // $B50F + 132, // $B510 + 132, // $B511 + 132, // $B512 + 132, // $B513 + 132, // $B514 + 132, // $B515 + 132, // $B516 + 132, // $B517 + 132, // $B518 + 132, // $B519 + 132, // $B51A + 132, // $B51B + 132, // $B51C + 132, // $B51D + 132, // $B51E + 132, // $B51F + 132, // $B520 + 132, // $B521 + 132, // $B522 + 132, // $B523 + 132, // $B524 + 132, // $B525 + 132, // $B526 + 132, // $B527 + 132, // $B528 + 132, // $B529 + 132, // $B52A + 132, // $B52B + 132, // $B52C + 132, // $B52D + 132, // $B52E + 132, // $B52F + 132, // $B530 + 132, // $B531 + 132, // $B532 + 132, // $B533 + 132, // $B534 + 132, // $B535 + 132, // $B536 + 132, // $B537 + 132, // $B538 + 132, // $B539 + 132, // $B53A + 132, // $B53B + 132, // $B53C + 132, // $B53D + 132, // $B53E + 132, // $B53F + 132, // $B540 + 132, // $B541 + 132, // $B542 + 132, // $B543 + 132, // $B544 + 132, // $B545 + 132, // $B546 + 132, // $B547 + 132, // $B548 + 132, // $B549 + 132, // $B54A + 132, // $B54B + 132, // $B54C + 132, // $B54D + 132, // $B54E + 132, // $B54F + 132, // $B550 + 132, // $B551 + 132, // $B552 + 132, // $B553 + 132, // $B554 + 132, // $B555 + 132, // $B556 + 132, // $B557 + 132, // $B558 + 132, // $B559 + 132, // $B55A + 132, // $B55B + 132, // $B55C + 132, // $B55D + 132, // $B55E + 132, // $B55F + 132, // $B560 + 132, // $B561 + 132, // $B562 + 132, // $B563 + 132, // $B564 + 132, // $B565 + 132, // $B566 + 132, // $B567 + 132, // $B568 + 132, // $B569 + 132, // $B56A + 132, // $B56B + 132, // $B56C + 132, // $B56D + 132, // $B56E + 132, // $B56F + 132, // $B570 + 132, // $B571 + 132, // $B572 + 132, // $B573 + 132, // $B574 + 132, // $B575 + 132, // $B576 + 132, // $B577 + 132, // $B578 + 132, // $B579 + 132, // $B57A + 132, // $B57B + 132, // $B57C + 132, // $B57D + 132, // $B57E + 132, // $B57F + 132, // $B580 + 132, // $B581 + 132, // $B582 + 132, // $B583 + 132, // $B584 + 132, // $B585 + 132, // $B586 + 132, // $B587 + 132, // $B588 + 132, // $B589 + 132, // $B58A + 132, // $B58B + 132, // $B58C + 132, // $B58D + 132, // $B58E + 132, // $B58F + 132, // $B590 + 132, // $B591 + 132, // $B592 + 132, // $B593 + 132, // $B594 + 132, // $B595 + 132, // $B596 + 132, // $B597 + 132, // $B598 + 132, // $B599 + 132, // $B59A + 132, // $B59B + 132, // $B59C + 132, // $B59D + 132, // $B59E + 132, // $B59F + 132, // $B5A0 + 132, // $B5A1 + 132, // $B5A2 + 132, // $B5A3 + 132, // $B5A4 + 132, // $B5A5 + 132, // $B5A6 + 132, // $B5A7 + 132, // $B5A8 + 132, // $B5A9 + 132, // $B5AA + 132, // $B5AB + 132, // $B5AC + 132, // $B5AD + 132, // $B5AE + 132, // $B5AF + 132, // $B5B0 + 132, // $B5B1 + 132, // $B5B2 + 132, // $B5B3 + 132, // $B5B4 + 132, // $B5B5 + 132, // $B5B6 + 132, // $B5B7 + 132, // $B5B8 + 132, // $B5B9 + 132, // $B5BA + 132, // $B5BB + 132, // $B5BC + 132, // $B5BD + 132, // $B5BE + 132, // $B5BF + 132, // $B5C0 + 132, // $B5C1 + 132, // $B5C2 + 132, // $B5C3 + 132, // $B5C4 + 132, // $B5C5 + 132, // $B5C6 + 132, // $B5C7 + 132, // $B5C8 + 132, // $B5C9 + 132, // $B5CA + 132, // $B5CB + 132, // $B5CC + 132, // $B5CD + 132, // $B5CE + 132, // $B5CF + 132, // $B5D0 + 132, // $B5D1 + 132, // $B5D2 + 132, // $B5D3 + 132, // $B5D4 + 132, // $B5D5 + 132, // $B5D6 + 132, // $B5D7 + 132, // $B5D8 + 132, // $B5D9 + 132, // $B5DA + 132, // $B5DB + 132, // $B5DC + 132, // $B5DD + 132, // $B5DE + 132, // $B5DF + 132, // $B5E0 + 132, // $B5E1 + 132, // $B5E2 + 132, // $B5E3 + 132, // $B5E4 + 132, // $B5E5 + 132, // $B5E6 + 132, // $B5E7 + 132, // $B5E8 + 132, // $B5E9 + 132, // $B5EA + 132, // $B5EB + 132, // $B5EC + 132, // $B5ED + 132, // $B5EE + 132, // $B5EF + 132, // $B5F0 + 132, // $B5F1 + 132, // $B5F2 + 132, // $B5F3 + 132, // $B5F4 + 132, // $B5F5 + 132, // $B5F6 + 132, // $B5F7 + 132, // $B5F8 + 132, // $B5F9 + 132, // $B5FA + 132, // $B5FB + 132, // $B5FC + 132, // $B5FD + 132, // $B5FE + 132, // $B5FF + 132, // $B600 + 132, // $B601 + 132, // $B602 + 132, // $B603 + 132, // $B604 + 132, // $B605 + 132, // $B606 + 132, // $B607 + 132, // $B608 + 132, // $B609 + 132, // $B60A + 132, // $B60B + 132, // $B60C + 132, // $B60D + 132, // $B60E + 132, // $B60F + 132, // $B610 + 132, // $B611 + 132, // $B612 + 132, // $B613 + 132, // $B614 + 132, // $B615 + 132, // $B616 + 132, // $B617 + 132, // $B618 + 132, // $B619 + 132, // $B61A + 132, // $B61B + 132, // $B61C + 132, // $B61D + 132, // $B61E + 132, // $B61F + 132, // $B620 + 132, // $B621 + 132, // $B622 + 132, // $B623 + 132, // $B624 + 132, // $B625 + 132, // $B626 + 132, // $B627 + 132, // $B628 + 132, // $B629 + 132, // $B62A + 132, // $B62B + 132, // $B62C + 132, // $B62D + 132, // $B62E + 132, // $B62F + 132, // $B630 + 132, // $B631 + 132, // $B632 + 132, // $B633 + 132, // $B634 + 132, // $B635 + 132, // $B636 + 132, // $B637 + 132, // $B638 + 132, // $B639 + 132, // $B63A + 132, // $B63B + 132, // $B63C + 132, // $B63D + 132, // $B63E + 132, // $B63F + 132, // $B640 + 132, // $B641 + 132, // $B642 + 132, // $B643 + 132, // $B644 + 132, // $B645 + 132, // $B646 + 132, // $B647 + 132, // $B648 + 132, // $B649 + 132, // $B64A + 132, // $B64B + 132, // $B64C + 132, // $B64D + 132, // $B64E + 132, // $B64F + 132, // $B650 + 132, // $B651 + 132, // $B652 + 132, // $B653 + 132, // $B654 + 132, // $B655 + 132, // $B656 + 132, // $B657 + 132, // $B658 + 132, // $B659 + 132, // $B65A + 132, // $B65B + 132, // $B65C + 132, // $B65D + 132, // $B65E + 132, // $B65F + 132, // $B660 + 132, // $B661 + 132, // $B662 + 132, // $B663 + 132, // $B664 + 132, // $B665 + 132, // $B666 + 132, // $B667 + 132, // $B668 + 132, // $B669 + 132, // $B66A + 132, // $B66B + 132, // $B66C + 132, // $B66D + 132, // $B66E + 132, // $B66F + 132, // $B670 + 132, // $B671 + 132, // $B672 + 132, // $B673 + 132, // $B674 + 132, // $B675 + 132, // $B676 + 132, // $B677 + 132, // $B678 + 132, // $B679 + 132, // $B67A + 132, // $B67B + 132, // $B67C + 132, // $B67D + 132, // $B67E + 132, // $B67F + 132, // $B680 + 132, // $B681 + 132, // $B682 + 132, // $B683 + 132, // $B684 + 132, // $B685 + 132, // $B686 + 132, // $B687 + 132, // $B688 + 132, // $B689 + 132, // $B68A + 132, // $B68B + 132, // $B68C + 132, // $B68D + 132, // $B68E + 132, // $B68F + 132, // $B690 + 132, // $B691 + 132, // $B692 + 132, // $B693 + 132, // $B694 + 132, // $B695 + 132, // $B696 + 132, // $B697 + 132, // $B698 + 132, // $B699 + 132, // $B69A + 132, // $B69B + 132, // $B69C + 132, // $B69D + 132, // $B69E + 132, // $B69F + 132, // $B6A0 + 132, // $B6A1 + 132, // $B6A2 + 132, // $B6A3 + 132, // $B6A4 + 132, // $B6A5 + 132, // $B6A6 + 132, // $B6A7 + 132, // $B6A8 + 132, // $B6A9 + 132, // $B6AA + 132, // $B6AB + 132, // $B6AC + 132, // $B6AD + 132, // $B6AE + 132, // $B6AF + 132, // $B6B0 + 132, // $B6B1 + 132, // $B6B2 + 132, // $B6B3 + 132, // $B6B4 + 132, // $B6B5 + 132, // $B6B6 + 132, // $B6B7 + 132, // $B6B8 + 132, // $B6B9 + 132, // $B6BA + 132, // $B6BB + 132, // $B6BC + 132, // $B6BD + 132, // $B6BE + 132, // $B6BF + 132, // $B6C0 + 132, // $B6C1 + 132, // $B6C2 + 132, // $B6C3 + 132, // $B6C4 + 132, // $B6C5 + 132, // $B6C6 + 132, // $B6C7 + 132, // $B6C8 + 132, // $B6C9 + 132, // $B6CA + 132, // $B6CB + 132, // $B6CC + 132, // $B6CD + 132, // $B6CE + 132, // $B6CF + 132, // $B6D0 + 132, // $B6D1 + 132, // $B6D2 + 132, // $B6D3 + 132, // $B6D4 + 132, // $B6D5 + 132, // $B6D6 + 132, // $B6D7 + 132, // $B6D8 + 132, // $B6D9 + 132, // $B6DA + 132, // $B6DB + 132, // $B6DC + 132, // $B6DD + 132, // $B6DE + 132, // $B6DF + 132, // $B6E0 + 132, // $B6E1 + 132, // $B6E2 + 132, // $B6E3 + 132, // $B6E4 + 132, // $B6E5 + 132, // $B6E6 + 132, // $B6E7 + 132, // $B6E8 + 132, // $B6E9 + 132, // $B6EA + 132, // $B6EB + 132, // $B6EC + 132, // $B6ED + 132, // $B6EE + 132, // $B6EF + 132, // $B6F0 + 132, // $B6F1 + 132, // $B6F2 + 132, // $B6F3 + 132, // $B6F4 + 132, // $B6F5 + 132, // $B6F6 + 132, // $B6F7 + 132, // $B6F8 + 132, // $B6F9 + 132, // $B6FA + 132, // $B6FB + 132, // $B6FC + 132, // $B6FD + 132, // $B6FE + 132, // $B6FF + 132, // $B700 + 132, // $B701 + 132, // $B702 + 132, // $B703 + 132, // $B704 + 132, // $B705 + 132, // $B706 + 132, // $B707 + 132, // $B708 + 132, // $B709 + 132, // $B70A + 132, // $B70B + 132, // $B70C + 132, // $B70D + 132, // $B70E + 132, // $B70F + 132, // $B710 + 132, // $B711 + 132, // $B712 + 132, // $B713 + 132, // $B714 + 132, // $B715 + 132, // $B716 + 132, // $B717 + 132, // $B718 + 132, // $B719 + 132, // $B71A + 132, // $B71B + 132, // $B71C + 132, // $B71D + 132, // $B71E + 132, // $B71F + 132, // $B720 + 132, // $B721 + 132, // $B722 + 132, // $B723 + 132, // $B724 + 132, // $B725 + 132, // $B726 + 132, // $B727 + 132, // $B728 + 132, // $B729 + 132, // $B72A + 132, // $B72B + 132, // $B72C + 132, // $B72D + 132, // $B72E + 132, // $B72F + 132, // $B730 + 132, // $B731 + 132, // $B732 + 132, // $B733 + 132, // $B734 + 132, // $B735 + 132, // $B736 + 132, // $B737 + 132, // $B738 + 132, // $B739 + 132, // $B73A + 132, // $B73B + 132, // $B73C + 132, // $B73D + 132, // $B73E + 132, // $B73F + 132, // $B740 + 132, // $B741 + 132, // $B742 + 132, // $B743 + 132, // $B744 + 132, // $B745 + 132, // $B746 + 132, // $B747 + 132, // $B748 + 132, // $B749 + 132, // $B74A + 132, // $B74B + 132, // $B74C + 132, // $B74D + 132, // $B74E + 132, // $B74F + 132, // $B750 + 132, // $B751 + 132, // $B752 + 132, // $B753 + 132, // $B754 + 132, // $B755 + 132, // $B756 + 132, // $B757 + 132, // $B758 + 132, // $B759 + 132, // $B75A + 132, // $B75B + 132, // $B75C + 132, // $B75D + 132, // $B75E + 132, // $B75F + 132, // $B760 + 132, // $B761 + 132, // $B762 + 132, // $B763 + 132, // $B764 + 132, // $B765 + 132, // $B766 + 132, // $B767 + 132, // $B768 + 132, // $B769 + 132, // $B76A + 132, // $B76B + 132, // $B76C + 132, // $B76D + 132, // $B76E + 132, // $B76F + 132, // $B770 + 132, // $B771 + 132, // $B772 + 132, // $B773 + 132, // $B774 + 132, // $B775 + 132, // $B776 + 132, // $B777 + 132, // $B778 + 132, // $B779 + 132, // $B77A + 132, // $B77B + 132, // $B77C + 132, // $B77D + 132, // $B77E + 132, // $B77F + 132, // $B780 + 132, // $B781 + 132, // $B782 + 132, // $B783 + 132, // $B784 + 132, // $B785 + 132, // $B786 + 132, // $B787 + 132, // $B788 + 132, // $B789 + 132, // $B78A + 132, // $B78B + 132, // $B78C + 132, // $B78D + 132, // $B78E + 132, // $B78F + 132, // $B790 + 132, // $B791 + 132, // $B792 + 132, // $B793 + 132, // $B794 + 132, // $B795 + 132, // $B796 + 132, // $B797 + 132, // $B798 + 132, // $B799 + 132, // $B79A + 132, // $B79B + 132, // $B79C + 132, // $B79D + 132, // $B79E + 132, // $B79F + 132, // $B7A0 + 132, // $B7A1 + 132, // $B7A2 + 132, // $B7A3 + 132, // $B7A4 + 132, // $B7A5 + 132, // $B7A6 + 132, // $B7A7 + 132, // $B7A8 + 132, // $B7A9 + 132, // $B7AA + 132, // $B7AB + 132, // $B7AC + 132, // $B7AD + 132, // $B7AE + 132, // $B7AF + 132, // $B7B0 + 132, // $B7B1 + 132, // $B7B2 + 132, // $B7B3 + 132, // $B7B4 + 132, // $B7B5 + 132, // $B7B6 + 132, // $B7B7 + 132, // $B7B8 + 132, // $B7B9 + 132, // $B7BA + 132, // $B7BB + 132, // $B7BC + 132, // $B7BD + 132, // $B7BE + 132, // $B7BF + 132, // $B7C0 + 132, // $B7C1 + 132, // $B7C2 + 132, // $B7C3 + 132, // $B7C4 + 132, // $B7C5 + 132, // $B7C6 + 132, // $B7C7 + 132, // $B7C8 + 132, // $B7C9 + 132, // $B7CA + 132, // $B7CB + 132, // $B7CC + 132, // $B7CD + 132, // $B7CE + 132, // $B7CF + 132, // $B7D0 + 132, // $B7D1 + 132, // $B7D2 + 132, // $B7D3 + 132, // $B7D4 + 132, // $B7D5 + 132, // $B7D6 + 132, // $B7D7 + 132, // $B7D8 + 132, // $B7D9 + 132, // $B7DA + 132, // $B7DB + 132, // $B7DC + 132, // $B7DD + 132, // $B7DE + 132, // $B7DF + 132, // $B7E0 + 132, // $B7E1 + 132, // $B7E2 + 132, // $B7E3 + 132, // $B7E4 + 132, // $B7E5 + 132, // $B7E6 + 132, // $B7E7 + 132, // $B7E8 + 132, // $B7E9 + 132, // $B7EA + 132, // $B7EB + 132, // $B7EC + 132, // $B7ED + 132, // $B7EE + 132, // $B7EF + 132, // $B7F0 + 132, // $B7F1 + 132, // $B7F2 + 132, // $B7F3 + 132, // $B7F4 + 132, // $B7F5 + 132, // $B7F6 + 132, // $B7F7 + 132, // $B7F8 + 132, // $B7F9 + 132, // $B7FA + 132, // $B7FB + 132, // $B7FC + 132, // $B7FD + 132, // $B7FE + 132, // $B7FF + 132, // $B800 + 132, // $B801 + 132, // $B802 + 132, // $B803 + 132, // $B804 + 132, // $B805 + 132, // $B806 + 132, // $B807 + 132, // $B808 + 132, // $B809 + 132, // $B80A + 132, // $B80B + 132, // $B80C + 132, // $B80D + 132, // $B80E + 132, // $B80F + 132, // $B810 + 132, // $B811 + 132, // $B812 + 132, // $B813 + 132, // $B814 + 132, // $B815 + 132, // $B816 + 132, // $B817 + 132, // $B818 + 132, // $B819 + 132, // $B81A + 132, // $B81B + 132, // $B81C + 132, // $B81D + 132, // $B81E + 132, // $B81F + 132, // $B820 + 132, // $B821 + 132, // $B822 + 132, // $B823 + 132, // $B824 + 132, // $B825 + 132, // $B826 + 132, // $B827 + 132, // $B828 + 132, // $B829 + 132, // $B82A + 132, // $B82B + 132, // $B82C + 132, // $B82D + 132, // $B82E + 132, // $B82F + 132, // $B830 + 132, // $B831 + 132, // $B832 + 132, // $B833 + 132, // $B834 + 132, // $B835 + 132, // $B836 + 132, // $B837 + 132, // $B838 + 132, // $B839 + 132, // $B83A + 132, // $B83B + 132, // $B83C + 132, // $B83D + 132, // $B83E + 132, // $B83F + 132, // $B840 + 132, // $B841 + 132, // $B842 + 132, // $B843 + 132, // $B844 + 132, // $B845 + 132, // $B846 + 132, // $B847 + 132, // $B848 + 132, // $B849 + 132, // $B84A + 132, // $B84B + 132, // $B84C + 132, // $B84D + 132, // $B84E + 132, // $B84F + 132, // $B850 + 132, // $B851 + 132, // $B852 + 132, // $B853 + 132, // $B854 + 132, // $B855 + 132, // $B856 + 132, // $B857 + 132, // $B858 + 132, // $B859 + 132, // $B85A + 132, // $B85B + 132, // $B85C + 132, // $B85D + 132, // $B85E + 132, // $B85F + 132, // $B860 + 132, // $B861 + 132, // $B862 + 132, // $B863 + 132, // $B864 + 132, // $B865 + 132, // $B866 + 132, // $B867 + 132, // $B868 + 132, // $B869 + 132, // $B86A + 132, // $B86B + 132, // $B86C + 132, // $B86D + 132, // $B86E + 132, // $B86F + 132, // $B870 + 132, // $B871 + 132, // $B872 + 132, // $B873 + 132, // $B874 + 132, // $B875 + 132, // $B876 + 132, // $B877 + 132, // $B878 + 132, // $B879 + 132, // $B87A + 132, // $B87B + 132, // $B87C + 132, // $B87D + 132, // $B87E + 132, // $B87F + 132, // $B880 + 132, // $B881 + 132, // $B882 + 132, // $B883 + 132, // $B884 + 132, // $B885 + 132, // $B886 + 132, // $B887 + 132, // $B888 + 132, // $B889 + 132, // $B88A + 132, // $B88B + 132, // $B88C + 132, // $B88D + 132, // $B88E + 132, // $B88F + 132, // $B890 + 132, // $B891 + 132, // $B892 + 132, // $B893 + 132, // $B894 + 132, // $B895 + 132, // $B896 + 132, // $B897 + 132, // $B898 + 132, // $B899 + 132, // $B89A + 132, // $B89B + 132, // $B89C + 132, // $B89D + 132, // $B89E + 132, // $B89F + 132, // $B8A0 + 132, // $B8A1 + 132, // $B8A2 + 132, // $B8A3 + 132, // $B8A4 + 132, // $B8A5 + 132, // $B8A6 + 132, // $B8A7 + 132, // $B8A8 + 132, // $B8A9 + 132, // $B8AA + 132, // $B8AB + 132, // $B8AC + 132, // $B8AD + 132, // $B8AE + 132, // $B8AF + 132, // $B8B0 + 132, // $B8B1 + 132, // $B8B2 + 132, // $B8B3 + 132, // $B8B4 + 132, // $B8B5 + 132, // $B8B6 + 132, // $B8B7 + 132, // $B8B8 + 132, // $B8B9 + 132, // $B8BA + 132, // $B8BB + 132, // $B8BC + 132, // $B8BD + 132, // $B8BE + 132, // $B8BF + 132, // $B8C0 + 132, // $B8C1 + 132, // $B8C2 + 132, // $B8C3 + 132, // $B8C4 + 132, // $B8C5 + 132, // $B8C6 + 132, // $B8C7 + 132, // $B8C8 + 132, // $B8C9 + 132, // $B8CA + 132, // $B8CB + 132, // $B8CC + 132, // $B8CD + 132, // $B8CE + 132, // $B8CF + 132, // $B8D0 + 132, // $B8D1 + 132, // $B8D2 + 132, // $B8D3 + 132, // $B8D4 + 132, // $B8D5 + 132, // $B8D6 + 132, // $B8D7 + 132, // $B8D8 + 132, // $B8D9 + 132, // $B8DA + 132, // $B8DB + 132, // $B8DC + 132, // $B8DD + 132, // $B8DE + 132, // $B8DF + 132, // $B8E0 + 132, // $B8E1 + 132, // $B8E2 + 132, // $B8E3 + 132, // $B8E4 + 132, // $B8E5 + 132, // $B8E6 + 132, // $B8E7 + 132, // $B8E8 + 132, // $B8E9 + 132, // $B8EA + 132, // $B8EB + 132, // $B8EC + 132, // $B8ED + 132, // $B8EE + 132, // $B8EF + 132, // $B8F0 + 132, // $B8F1 + 132, // $B8F2 + 132, // $B8F3 + 132, // $B8F4 + 132, // $B8F5 + 132, // $B8F6 + 132, // $B8F7 + 132, // $B8F8 + 132, // $B8F9 + 132, // $B8FA + 132, // $B8FB + 132, // $B8FC + 132, // $B8FD + 132, // $B8FE + 132, // $B8FF + 132, // $B900 + 132, // $B901 + 132, // $B902 + 132, // $B903 + 132, // $B904 + 132, // $B905 + 132, // $B906 + 132, // $B907 + 132, // $B908 + 132, // $B909 + 132, // $B90A + 132, // $B90B + 132, // $B90C + 132, // $B90D + 132, // $B90E + 132, // $B90F + 132, // $B910 + 132, // $B911 + 132, // $B912 + 132, // $B913 + 132, // $B914 + 132, // $B915 + 132, // $B916 + 132, // $B917 + 132, // $B918 + 132, // $B919 + 132, // $B91A + 132, // $B91B + 132, // $B91C + 132, // $B91D + 132, // $B91E + 132, // $B91F + 132, // $B920 + 132, // $B921 + 132, // $B922 + 132, // $B923 + 132, // $B924 + 132, // $B925 + 132, // $B926 + 132, // $B927 + 132, // $B928 + 132, // $B929 + 132, // $B92A + 132, // $B92B + 132, // $B92C + 132, // $B92D + 132, // $B92E + 132, // $B92F + 132, // $B930 + 132, // $B931 + 132, // $B932 + 132, // $B933 + 132, // $B934 + 132, // $B935 + 132, // $B936 + 132, // $B937 + 132, // $B938 + 132, // $B939 + 132, // $B93A + 132, // $B93B + 132, // $B93C + 132, // $B93D + 132, // $B93E + 132, // $B93F + 132, // $B940 + 132, // $B941 + 132, // $B942 + 132, // $B943 + 132, // $B944 + 132, // $B945 + 132, // $B946 + 132, // $B947 + 132, // $B948 + 132, // $B949 + 132, // $B94A + 132, // $B94B + 132, // $B94C + 132, // $B94D + 132, // $B94E + 132, // $B94F + 132, // $B950 + 132, // $B951 + 132, // $B952 + 132, // $B953 + 132, // $B954 + 132, // $B955 + 132, // $B956 + 132, // $B957 + 132, // $B958 + 132, // $B959 + 132, // $B95A + 132, // $B95B + 132, // $B95C + 132, // $B95D + 132, // $B95E + 132, // $B95F + 132, // $B960 + 132, // $B961 + 132, // $B962 + 132, // $B963 + 132, // $B964 + 132, // $B965 + 132, // $B966 + 132, // $B967 + 132, // $B968 + 132, // $B969 + 132, // $B96A + 132, // $B96B + 132, // $B96C + 132, // $B96D + 132, // $B96E + 132, // $B96F + 132, // $B970 + 132, // $B971 + 132, // $B972 + 132, // $B973 + 132, // $B974 + 132, // $B975 + 132, // $B976 + 132, // $B977 + 132, // $B978 + 132, // $B979 + 132, // $B97A + 132, // $B97B + 132, // $B97C + 132, // $B97D + 132, // $B97E + 132, // $B97F + 132, // $B980 + 132, // $B981 + 132, // $B982 + 132, // $B983 + 132, // $B984 + 132, // $B985 + 132, // $B986 + 132, // $B987 + 132, // $B988 + 132, // $B989 + 132, // $B98A + 132, // $B98B + 132, // $B98C + 132, // $B98D + 132, // $B98E + 132, // $B98F + 132, // $B990 + 132, // $B991 + 132, // $B992 + 132, // $B993 + 132, // $B994 + 132, // $B995 + 132, // $B996 + 132, // $B997 + 132, // $B998 + 132, // $B999 + 132, // $B99A + 132, // $B99B + 132, // $B99C + 132, // $B99D + 132, // $B99E + 132, // $B99F + 132, // $B9A0 + 132, // $B9A1 + 132, // $B9A2 + 132, // $B9A3 + 132, // $B9A4 + 132, // $B9A5 + 132, // $B9A6 + 132, // $B9A7 + 132, // $B9A8 + 132, // $B9A9 + 132, // $B9AA + 132, // $B9AB + 132, // $B9AC + 132, // $B9AD + 132, // $B9AE + 132, // $B9AF + 132, // $B9B0 + 132, // $B9B1 + 132, // $B9B2 + 132, // $B9B3 + 132, // $B9B4 + 132, // $B9B5 + 132, // $B9B6 + 132, // $B9B7 + 132, // $B9B8 + 132, // $B9B9 + 132, // $B9BA + 132, // $B9BB + 132, // $B9BC + 132, // $B9BD + 132, // $B9BE + 132, // $B9BF + 132, // $B9C0 + 132, // $B9C1 + 132, // $B9C2 + 132, // $B9C3 + 132, // $B9C4 + 132, // $B9C5 + 132, // $B9C6 + 132, // $B9C7 + 132, // $B9C8 + 132, // $B9C9 + 132, // $B9CA + 132, // $B9CB + 132, // $B9CC + 132, // $B9CD + 132, // $B9CE + 132, // $B9CF + 132, // $B9D0 + 132, // $B9D1 + 132, // $B9D2 + 132, // $B9D3 + 132, // $B9D4 + 132, // $B9D5 + 132, // $B9D6 + 132, // $B9D7 + 132, // $B9D8 + 132, // $B9D9 + 132, // $B9DA + 132, // $B9DB + 132, // $B9DC + 132, // $B9DD + 132, // $B9DE + 132, // $B9DF + 132, // $B9E0 + 132, // $B9E1 + 132, // $B9E2 + 132, // $B9E3 + 132, // $B9E4 + 132, // $B9E5 + 132, // $B9E6 + 132, // $B9E7 + 132, // $B9E8 + 132, // $B9E9 + 132, // $B9EA + 132, // $B9EB + 132, // $B9EC + 132, // $B9ED + 132, // $B9EE + 132, // $B9EF + 132, // $B9F0 + 132, // $B9F1 + 132, // $B9F2 + 132, // $B9F3 + 132, // $B9F4 + 132, // $B9F5 + 132, // $B9F6 + 132, // $B9F7 + 132, // $B9F8 + 132, // $B9F9 + 132, // $B9FA + 132, // $B9FB + 132, // $B9FC + 132, // $B9FD + 132, // $B9FE + 132, // $B9FF + 132, // $BA00 + 132, // $BA01 + 132, // $BA02 + 132, // $BA03 + 132, // $BA04 + 132, // $BA05 + 132, // $BA06 + 132, // $BA07 + 132, // $BA08 + 132, // $BA09 + 132, // $BA0A + 132, // $BA0B + 132, // $BA0C + 132, // $BA0D + 132, // $BA0E + 132, // $BA0F + 132, // $BA10 + 132, // $BA11 + 132, // $BA12 + 132, // $BA13 + 132, // $BA14 + 132, // $BA15 + 132, // $BA16 + 132, // $BA17 + 132, // $BA18 + 132, // $BA19 + 132, // $BA1A + 132, // $BA1B + 132, // $BA1C + 132, // $BA1D + 132, // $BA1E + 132, // $BA1F + 132, // $BA20 + 132, // $BA21 + 132, // $BA22 + 132, // $BA23 + 132, // $BA24 + 132, // $BA25 + 132, // $BA26 + 132, // $BA27 + 132, // $BA28 + 132, // $BA29 + 132, // $BA2A + 132, // $BA2B + 132, // $BA2C + 132, // $BA2D + 132, // $BA2E + 132, // $BA2F + 132, // $BA30 + 132, // $BA31 + 132, // $BA32 + 132, // $BA33 + 132, // $BA34 + 132, // $BA35 + 132, // $BA36 + 132, // $BA37 + 132, // $BA38 + 132, // $BA39 + 132, // $BA3A + 132, // $BA3B + 132, // $BA3C + 132, // $BA3D + 132, // $BA3E + 132, // $BA3F + 132, // $BA40 + 132, // $BA41 + 132, // $BA42 + 132, // $BA43 + 132, // $BA44 + 132, // $BA45 + 132, // $BA46 + 132, // $BA47 + 132, // $BA48 + 132, // $BA49 + 132, // $BA4A + 132, // $BA4B + 132, // $BA4C + 132, // $BA4D + 132, // $BA4E + 132, // $BA4F + 132, // $BA50 + 132, // $BA51 + 132, // $BA52 + 132, // $BA53 + 132, // $BA54 + 132, // $BA55 + 132, // $BA56 + 132, // $BA57 + 132, // $BA58 + 132, // $BA59 + 132, // $BA5A + 132, // $BA5B + 132, // $BA5C + 132, // $BA5D + 132, // $BA5E + 132, // $BA5F + 132, // $BA60 + 132, // $BA61 + 132, // $BA62 + 132, // $BA63 + 132, // $BA64 + 132, // $BA65 + 132, // $BA66 + 132, // $BA67 + 132, // $BA68 + 132, // $BA69 + 132, // $BA6A + 132, // $BA6B + 132, // $BA6C + 132, // $BA6D + 132, // $BA6E + 132, // $BA6F + 132, // $BA70 + 132, // $BA71 + 132, // $BA72 + 132, // $BA73 + 132, // $BA74 + 132, // $BA75 + 132, // $BA76 + 132, // $BA77 + 132, // $BA78 + 132, // $BA79 + 132, // $BA7A + 132, // $BA7B + 132, // $BA7C + 132, // $BA7D + 132, // $BA7E + 132, // $BA7F + 132, // $BA80 + 132, // $BA81 + 132, // $BA82 + 132, // $BA83 + 132, // $BA84 + 132, // $BA85 + 132, // $BA86 + 132, // $BA87 + 132, // $BA88 + 132, // $BA89 + 132, // $BA8A + 132, // $BA8B + 132, // $BA8C + 132, // $BA8D + 132, // $BA8E + 132, // $BA8F + 132, // $BA90 + 132, // $BA91 + 132, // $BA92 + 132, // $BA93 + 132, // $BA94 + 132, // $BA95 + 132, // $BA96 + 132, // $BA97 + 132, // $BA98 + 132, // $BA99 + 132, // $BA9A + 132, // $BA9B + 132, // $BA9C + 132, // $BA9D + 132, // $BA9E + 132, // $BA9F + 132, // $BAA0 + 132, // $BAA1 + 132, // $BAA2 + 132, // $BAA3 + 132, // $BAA4 + 132, // $BAA5 + 132, // $BAA6 + 132, // $BAA7 + 132, // $BAA8 + 132, // $BAA9 + 132, // $BAAA + 132, // $BAAB + 132, // $BAAC + 132, // $BAAD + 132, // $BAAE + 132, // $BAAF + 132, // $BAB0 + 132, // $BAB1 + 132, // $BAB2 + 132, // $BAB3 + 132, // $BAB4 + 132, // $BAB5 + 132, // $BAB6 + 132, // $BAB7 + 132, // $BAB8 + 132, // $BAB9 + 132, // $BABA + 132, // $BABB + 132, // $BABC + 132, // $BABD + 132, // $BABE + 132, // $BABF + 132, // $BAC0 + 132, // $BAC1 + 132, // $BAC2 + 132, // $BAC3 + 132, // $BAC4 + 132, // $BAC5 + 132, // $BAC6 + 132, // $BAC7 + 132, // $BAC8 + 132, // $BAC9 + 132, // $BACA + 132, // $BACB + 132, // $BACC + 132, // $BACD + 132, // $BACE + 132, // $BACF + 132, // $BAD0 + 132, // $BAD1 + 132, // $BAD2 + 132, // $BAD3 + 132, // $BAD4 + 132, // $BAD5 + 132, // $BAD6 + 132, // $BAD7 + 132, // $BAD8 + 132, // $BAD9 + 132, // $BADA + 132, // $BADB + 132, // $BADC + 132, // $BADD + 132, // $BADE + 132, // $BADF + 132, // $BAE0 + 132, // $BAE1 + 132, // $BAE2 + 132, // $BAE3 + 132, // $BAE4 + 132, // $BAE5 + 132, // $BAE6 + 132, // $BAE7 + 132, // $BAE8 + 132, // $BAE9 + 132, // $BAEA + 132, // $BAEB + 132, // $BAEC + 132, // $BAED + 132, // $BAEE + 132, // $BAEF + 132, // $BAF0 + 132, // $BAF1 + 132, // $BAF2 + 132, // $BAF3 + 132, // $BAF4 + 132, // $BAF5 + 132, // $BAF6 + 132, // $BAF7 + 132, // $BAF8 + 132, // $BAF9 + 132, // $BAFA + 132, // $BAFB + 132, // $BAFC + 132, // $BAFD + 132, // $BAFE + 132, // $BAFF + 132, // $BB00 + 132, // $BB01 + 132, // $BB02 + 132, // $BB03 + 132, // $BB04 + 132, // $BB05 + 132, // $BB06 + 132, // $BB07 + 132, // $BB08 + 132, // $BB09 + 132, // $BB0A + 132, // $BB0B + 132, // $BB0C + 132, // $BB0D + 132, // $BB0E + 132, // $BB0F + 132, // $BB10 + 132, // $BB11 + 132, // $BB12 + 132, // $BB13 + 132, // $BB14 + 132, // $BB15 + 132, // $BB16 + 132, // $BB17 + 132, // $BB18 + 132, // $BB19 + 132, // $BB1A + 132, // $BB1B + 132, // $BB1C + 132, // $BB1D + 132, // $BB1E + 132, // $BB1F + 132, // $BB20 + 132, // $BB21 + 132, // $BB22 + 132, // $BB23 + 132, // $BB24 + 132, // $BB25 + 132, // $BB26 + 132, // $BB27 + 132, // $BB28 + 132, // $BB29 + 132, // $BB2A + 132, // $BB2B + 132, // $BB2C + 132, // $BB2D + 132, // $BB2E + 132, // $BB2F + 132, // $BB30 + 132, // $BB31 + 132, // $BB32 + 132, // $BB33 + 132, // $BB34 + 132, // $BB35 + 132, // $BB36 + 132, // $BB37 + 132, // $BB38 + 132, // $BB39 + 132, // $BB3A + 132, // $BB3B + 132, // $BB3C + 132, // $BB3D + 132, // $BB3E + 132, // $BB3F + 132, // $BB40 + 132, // $BB41 + 132, // $BB42 + 132, // $BB43 + 132, // $BB44 + 132, // $BB45 + 132, // $BB46 + 132, // $BB47 + 132, // $BB48 + 132, // $BB49 + 132, // $BB4A + 132, // $BB4B + 132, // $BB4C + 132, // $BB4D + 132, // $BB4E + 132, // $BB4F + 132, // $BB50 + 132, // $BB51 + 132, // $BB52 + 132, // $BB53 + 132, // $BB54 + 132, // $BB55 + 132, // $BB56 + 132, // $BB57 + 132, // $BB58 + 132, // $BB59 + 132, // $BB5A + 132, // $BB5B + 132, // $BB5C + 132, // $BB5D + 132, // $BB5E + 132, // $BB5F + 132, // $BB60 + 132, // $BB61 + 132, // $BB62 + 132, // $BB63 + 132, // $BB64 + 132, // $BB65 + 132, // $BB66 + 132, // $BB67 + 132, // $BB68 + 132, // $BB69 + 132, // $BB6A + 132, // $BB6B + 132, // $BB6C + 132, // $BB6D + 132, // $BB6E + 132, // $BB6F + 132, // $BB70 + 132, // $BB71 + 132, // $BB72 + 132, // $BB73 + 132, // $BB74 + 132, // $BB75 + 132, // $BB76 + 132, // $BB77 + 132, // $BB78 + 132, // $BB79 + 132, // $BB7A + 132, // $BB7B + 132, // $BB7C + 132, // $BB7D + 132, // $BB7E + 132, // $BB7F + 132, // $BB80 + 132, // $BB81 + 132, // $BB82 + 132, // $BB83 + 132, // $BB84 + 132, // $BB85 + 132, // $BB86 + 132, // $BB87 + 132, // $BB88 + 132, // $BB89 + 132, // $BB8A + 132, // $BB8B + 132, // $BB8C + 132, // $BB8D + 132, // $BB8E + 132, // $BB8F + 132, // $BB90 + 132, // $BB91 + 132, // $BB92 + 132, // $BB93 + 132, // $BB94 + 132, // $BB95 + 132, // $BB96 + 132, // $BB97 + 132, // $BB98 + 132, // $BB99 + 132, // $BB9A + 132, // $BB9B + 132, // $BB9C + 132, // $BB9D + 132, // $BB9E + 132, // $BB9F + 132, // $BBA0 + 132, // $BBA1 + 132, // $BBA2 + 132, // $BBA3 + 132, // $BBA4 + 132, // $BBA5 + 132, // $BBA6 + 132, // $BBA7 + 132, // $BBA8 + 132, // $BBA9 + 132, // $BBAA + 132, // $BBAB + 132, // $BBAC + 132, // $BBAD + 132, // $BBAE + 132, // $BBAF + 132, // $BBB0 + 132, // $BBB1 + 132, // $BBB2 + 132, // $BBB3 + 132, // $BBB4 + 132, // $BBB5 + 132, // $BBB6 + 132, // $BBB7 + 132, // $BBB8 + 132, // $BBB9 + 132, // $BBBA + 132, // $BBBB + 132, // $BBBC + 132, // $BBBD + 132, // $BBBE + 132, // $BBBF + 132, // $BBC0 + 132, // $BBC1 + 132, // $BBC2 + 132, // $BBC3 + 132, // $BBC4 + 132, // $BBC5 + 132, // $BBC6 + 132, // $BBC7 + 132, // $BBC8 + 132, // $BBC9 + 132, // $BBCA + 132, // $BBCB + 132, // $BBCC + 132, // $BBCD + 132, // $BBCE + 132, // $BBCF + 132, // $BBD0 + 132, // $BBD1 + 132, // $BBD2 + 132, // $BBD3 + 132, // $BBD4 + 132, // $BBD5 + 132, // $BBD6 + 132, // $BBD7 + 132, // $BBD8 + 132, // $BBD9 + 132, // $BBDA + 132, // $BBDB + 132, // $BBDC + 132, // $BBDD + 132, // $BBDE + 132, // $BBDF + 132, // $BBE0 + 132, // $BBE1 + 132, // $BBE2 + 132, // $BBE3 + 132, // $BBE4 + 132, // $BBE5 + 132, // $BBE6 + 132, // $BBE7 + 132, // $BBE8 + 132, // $BBE9 + 132, // $BBEA + 132, // $BBEB + 132, // $BBEC + 132, // $BBED + 132, // $BBEE + 132, // $BBEF + 132, // $BBF0 + 132, // $BBF1 + 132, // $BBF2 + 132, // $BBF3 + 132, // $BBF4 + 132, // $BBF5 + 132, // $BBF6 + 132, // $BBF7 + 132, // $BBF8 + 132, // $BBF9 + 132, // $BBFA + 132, // $BBFB + 132, // $BBFC + 132, // $BBFD + 132, // $BBFE + 132, // $BBFF + 132, // $BC00 + 132, // $BC01 + 132, // $BC02 + 132, // $BC03 + 132, // $BC04 + 132, // $BC05 + 132, // $BC06 + 132, // $BC07 + 132, // $BC08 + 132, // $BC09 + 132, // $BC0A + 132, // $BC0B + 132, // $BC0C + 132, // $BC0D + 132, // $BC0E + 132, // $BC0F + 132, // $BC10 + 132, // $BC11 + 132, // $BC12 + 132, // $BC13 + 132, // $BC14 + 132, // $BC15 + 132, // $BC16 + 132, // $BC17 + 132, // $BC18 + 132, // $BC19 + 132, // $BC1A + 132, // $BC1B + 132, // $BC1C + 132, // $BC1D + 132, // $BC1E + 132, // $BC1F + 132, // $BC20 + 132, // $BC21 + 132, // $BC22 + 132, // $BC23 + 132, // $BC24 + 132, // $BC25 + 132, // $BC26 + 132, // $BC27 + 132, // $BC28 + 132, // $BC29 + 132, // $BC2A + 132, // $BC2B + 132, // $BC2C + 132, // $BC2D + 132, // $BC2E + 132, // $BC2F + 132, // $BC30 + 132, // $BC31 + 132, // $BC32 + 132, // $BC33 + 132, // $BC34 + 132, // $BC35 + 132, // $BC36 + 132, // $BC37 + 132, // $BC38 + 132, // $BC39 + 132, // $BC3A + 132, // $BC3B + 132, // $BC3C + 132, // $BC3D + 132, // $BC3E + 132, // $BC3F + 132, // $BC40 + 132, // $BC41 + 132, // $BC42 + 132, // $BC43 + 132, // $BC44 + 132, // $BC45 + 132, // $BC46 + 132, // $BC47 + 132, // $BC48 + 132, // $BC49 + 132, // $BC4A + 132, // $BC4B + 132, // $BC4C + 132, // $BC4D + 132, // $BC4E + 132, // $BC4F + 132, // $BC50 + 132, // $BC51 + 132, // $BC52 + 132, // $BC53 + 132, // $BC54 + 132, // $BC55 + 132, // $BC56 + 132, // $BC57 + 132, // $BC58 + 132, // $BC59 + 132, // $BC5A + 132, // $BC5B + 132, // $BC5C + 132, // $BC5D + 132, // $BC5E + 132, // $BC5F + 132, // $BC60 + 132, // $BC61 + 132, // $BC62 + 132, // $BC63 + 132, // $BC64 + 132, // $BC65 + 132, // $BC66 + 132, // $BC67 + 132, // $BC68 + 132, // $BC69 + 132, // $BC6A + 132, // $BC6B + 132, // $BC6C + 132, // $BC6D + 132, // $BC6E + 132, // $BC6F + 132, // $BC70 + 132, // $BC71 + 132, // $BC72 + 132, // $BC73 + 132, // $BC74 + 132, // $BC75 + 132, // $BC76 + 132, // $BC77 + 132, // $BC78 + 132, // $BC79 + 132, // $BC7A + 132, // $BC7B + 132, // $BC7C + 132, // $BC7D + 132, // $BC7E + 132, // $BC7F + 132, // $BC80 + 132, // $BC81 + 132, // $BC82 + 132, // $BC83 + 132, // $BC84 + 132, // $BC85 + 132, // $BC86 + 132, // $BC87 + 132, // $BC88 + 132, // $BC89 + 132, // $BC8A + 132, // $BC8B + 132, // $BC8C + 132, // $BC8D + 132, // $BC8E + 132, // $BC8F + 132, // $BC90 + 132, // $BC91 + 132, // $BC92 + 132, // $BC93 + 132, // $BC94 + 132, // $BC95 + 132, // $BC96 + 132, // $BC97 + 132, // $BC98 + 132, // $BC99 + 132, // $BC9A + 132, // $BC9B + 132, // $BC9C + 132, // $BC9D + 132, // $BC9E + 132, // $BC9F + 132, // $BCA0 + 132, // $BCA1 + 132, // $BCA2 + 132, // $BCA3 + 132, // $BCA4 + 132, // $BCA5 + 132, // $BCA6 + 132, // $BCA7 + 132, // $BCA8 + 132, // $BCA9 + 132, // $BCAA + 132, // $BCAB + 132, // $BCAC + 132, // $BCAD + 132, // $BCAE + 132, // $BCAF + 132, // $BCB0 + 132, // $BCB1 + 132, // $BCB2 + 132, // $BCB3 + 132, // $BCB4 + 132, // $BCB5 + 132, // $BCB6 + 132, // $BCB7 + 132, // $BCB8 + 132, // $BCB9 + 132, // $BCBA + 132, // $BCBB + 132, // $BCBC + 132, // $BCBD + 132, // $BCBE + 132, // $BCBF + 132, // $BCC0 + 132, // $BCC1 + 132, // $BCC2 + 132, // $BCC3 + 132, // $BCC4 + 132, // $BCC5 + 132, // $BCC6 + 132, // $BCC7 + 132, // $BCC8 + 132, // $BCC9 + 132, // $BCCA + 132, // $BCCB + 132, // $BCCC + 132, // $BCCD + 132, // $BCCE + 132, // $BCCF + 132, // $BCD0 + 132, // $BCD1 + 132, // $BCD2 + 132, // $BCD3 + 132, // $BCD4 + 132, // $BCD5 + 132, // $BCD6 + 132, // $BCD7 + 132, // $BCD8 + 132, // $BCD9 + 132, // $BCDA + 132, // $BCDB + 132, // $BCDC + 132, // $BCDD + 132, // $BCDE + 132, // $BCDF + 132, // $BCE0 + 132, // $BCE1 + 132, // $BCE2 + 132, // $BCE3 + 132, // $BCE4 + 132, // $BCE5 + 132, // $BCE6 + 132, // $BCE7 + 132, // $BCE8 + 132, // $BCE9 + 132, // $BCEA + 132, // $BCEB + 132, // $BCEC + 132, // $BCED + 132, // $BCEE + 132, // $BCEF + 132, // $BCF0 + 132, // $BCF1 + 132, // $BCF2 + 132, // $BCF3 + 132, // $BCF4 + 132, // $BCF5 + 132, // $BCF6 + 132, // $BCF7 + 132, // $BCF8 + 132, // $BCF9 + 132, // $BCFA + 132, // $BCFB + 132, // $BCFC + 132, // $BCFD + 132, // $BCFE + 132, // $BCFF + 132, // $BD00 + 132, // $BD01 + 132, // $BD02 + 132, // $BD03 + 132, // $BD04 + 132, // $BD05 + 132, // $BD06 + 132, // $BD07 + 132, // $BD08 + 132, // $BD09 + 132, // $BD0A + 132, // $BD0B + 132, // $BD0C + 132, // $BD0D + 132, // $BD0E + 132, // $BD0F + 132, // $BD10 + 132, // $BD11 + 132, // $BD12 + 132, // $BD13 + 132, // $BD14 + 132, // $BD15 + 132, // $BD16 + 132, // $BD17 + 132, // $BD18 + 132, // $BD19 + 132, // $BD1A + 132, // $BD1B + 132, // $BD1C + 132, // $BD1D + 132, // $BD1E + 132, // $BD1F + 132, // $BD20 + 132, // $BD21 + 132, // $BD22 + 132, // $BD23 + 132, // $BD24 + 132, // $BD25 + 132, // $BD26 + 132, // $BD27 + 132, // $BD28 + 132, // $BD29 + 132, // $BD2A + 132, // $BD2B + 132, // $BD2C + 132, // $BD2D + 132, // $BD2E + 132, // $BD2F + 132, // $BD30 + 132, // $BD31 + 132, // $BD32 + 132, // $BD33 + 132, // $BD34 + 132, // $BD35 + 132, // $BD36 + 132, // $BD37 + 132, // $BD38 + 132, // $BD39 + 132, // $BD3A + 132, // $BD3B + 132, // $BD3C + 132, // $BD3D + 132, // $BD3E + 132, // $BD3F + 132, // $BD40 + 132, // $BD41 + 132, // $BD42 + 132, // $BD43 + 132, // $BD44 + 132, // $BD45 + 132, // $BD46 + 132, // $BD47 + 132, // $BD48 + 132, // $BD49 + 132, // $BD4A + 132, // $BD4B + 132, // $BD4C + 132, // $BD4D + 132, // $BD4E + 132, // $BD4F + 132, // $BD50 + 132, // $BD51 + 132, // $BD52 + 132, // $BD53 + 132, // $BD54 + 132, // $BD55 + 132, // $BD56 + 132, // $BD57 + 132, // $BD58 + 132, // $BD59 + 132, // $BD5A + 132, // $BD5B + 132, // $BD5C + 132, // $BD5D + 132, // $BD5E + 132, // $BD5F + 132, // $BD60 + 132, // $BD61 + 132, // $BD62 + 132, // $BD63 + 132, // $BD64 + 132, // $BD65 + 132, // $BD66 + 132, // $BD67 + 132, // $BD68 + 132, // $BD69 + 132, // $BD6A + 132, // $BD6B + 132, // $BD6C + 132, // $BD6D + 132, // $BD6E + 132, // $BD6F + 132, // $BD70 + 132, // $BD71 + 132, // $BD72 + 132, // $BD73 + 132, // $BD74 + 132, // $BD75 + 132, // $BD76 + 132, // $BD77 + 132, // $BD78 + 132, // $BD79 + 132, // $BD7A + 132, // $BD7B + 132, // $BD7C + 132, // $BD7D + 132, // $BD7E + 132, // $BD7F + 132, // $BD80 + 132, // $BD81 + 132, // $BD82 + 132, // $BD83 + 132, // $BD84 + 132, // $BD85 + 132, // $BD86 + 132, // $BD87 + 132, // $BD88 + 132, // $BD89 + 132, // $BD8A + 132, // $BD8B + 132, // $BD8C + 132, // $BD8D + 132, // $BD8E + 132, // $BD8F + 132, // $BD90 + 132, // $BD91 + 132, // $BD92 + 132, // $BD93 + 132, // $BD94 + 132, // $BD95 + 132, // $BD96 + 132, // $BD97 + 132, // $BD98 + 132, // $BD99 + 132, // $BD9A + 132, // $BD9B + 132, // $BD9C + 132, // $BD9D + 132, // $BD9E + 132, // $BD9F + 132, // $BDA0 + 132, // $BDA1 + 132, // $BDA2 + 132, // $BDA3 + 132, // $BDA4 + 132, // $BDA5 + 132, // $BDA6 + 132, // $BDA7 + 132, // $BDA8 + 132, // $BDA9 + 132, // $BDAA + 132, // $BDAB + 132, // $BDAC + 132, // $BDAD + 132, // $BDAE + 132, // $BDAF + 132, // $BDB0 + 132, // $BDB1 + 132, // $BDB2 + 132, // $BDB3 + 132, // $BDB4 + 132, // $BDB5 + 132, // $BDB6 + 132, // $BDB7 + 132, // $BDB8 + 132, // $BDB9 + 132, // $BDBA + 132, // $BDBB + 132, // $BDBC + 132, // $BDBD + 132, // $BDBE + 132, // $BDBF + 132, // $BDC0 + 132, // $BDC1 + 132, // $BDC2 + 132, // $BDC3 + 132, // $BDC4 + 132, // $BDC5 + 132, // $BDC6 + 132, // $BDC7 + 132, // $BDC8 + 132, // $BDC9 + 132, // $BDCA + 132, // $BDCB + 132, // $BDCC + 132, // $BDCD + 132, // $BDCE + 132, // $BDCF + 132, // $BDD0 + 132, // $BDD1 + 132, // $BDD2 + 132, // $BDD3 + 132, // $BDD4 + 132, // $BDD5 + 132, // $BDD6 + 132, // $BDD7 + 132, // $BDD8 + 132, // $BDD9 + 132, // $BDDA + 132, // $BDDB + 132, // $BDDC + 132, // $BDDD + 132, // $BDDE + 132, // $BDDF + 132, // $BDE0 + 132, // $BDE1 + 132, // $BDE2 + 132, // $BDE3 + 132, // $BDE4 + 132, // $BDE5 + 132, // $BDE6 + 132, // $BDE7 + 132, // $BDE8 + 132, // $BDE9 + 132, // $BDEA + 132, // $BDEB + 132, // $BDEC + 132, // $BDED + 132, // $BDEE + 132, // $BDEF + 132, // $BDF0 + 132, // $BDF1 + 132, // $BDF2 + 132, // $BDF3 + 132, // $BDF4 + 132, // $BDF5 + 132, // $BDF6 + 132, // $BDF7 + 132, // $BDF8 + 132, // $BDF9 + 132, // $BDFA + 132, // $BDFB + 132, // $BDFC + 132, // $BDFD + 132, // $BDFE + 132, // $BDFF + 132, // $BE00 + 132, // $BE01 + 132, // $BE02 + 132, // $BE03 + 132, // $BE04 + 132, // $BE05 + 132, // $BE06 + 132, // $BE07 + 132, // $BE08 + 132, // $BE09 + 132, // $BE0A + 132, // $BE0B + 132, // $BE0C + 132, // $BE0D + 132, // $BE0E + 132, // $BE0F + 132, // $BE10 + 132, // $BE11 + 132, // $BE12 + 132, // $BE13 + 132, // $BE14 + 132, // $BE15 + 132, // $BE16 + 132, // $BE17 + 132, // $BE18 + 132, // $BE19 + 132, // $BE1A + 132, // $BE1B + 132, // $BE1C + 132, // $BE1D + 132, // $BE1E + 132, // $BE1F + 132, // $BE20 + 132, // $BE21 + 132, // $BE22 + 132, // $BE23 + 132, // $BE24 + 132, // $BE25 + 132, // $BE26 + 132, // $BE27 + 132, // $BE28 + 132, // $BE29 + 132, // $BE2A + 132, // $BE2B + 132, // $BE2C + 132, // $BE2D + 132, // $BE2E + 132, // $BE2F + 132, // $BE30 + 132, // $BE31 + 132, // $BE32 + 132, // $BE33 + 132, // $BE34 + 132, // $BE35 + 132, // $BE36 + 132, // $BE37 + 132, // $BE38 + 132, // $BE39 + 132, // $BE3A + 132, // $BE3B + 132, // $BE3C + 132, // $BE3D + 132, // $BE3E + 132, // $BE3F + 132, // $BE40 + 132, // $BE41 + 132, // $BE42 + 132, // $BE43 + 132, // $BE44 + 132, // $BE45 + 132, // $BE46 + 132, // $BE47 + 132, // $BE48 + 132, // $BE49 + 132, // $BE4A + 132, // $BE4B + 132, // $BE4C + 132, // $BE4D + 132, // $BE4E + 132, // $BE4F + 132, // $BE50 + 132, // $BE51 + 132, // $BE52 + 132, // $BE53 + 132, // $BE54 + 132, // $BE55 + 132, // $BE56 + 132, // $BE57 + 132, // $BE58 + 132, // $BE59 + 132, // $BE5A + 132, // $BE5B + 132, // $BE5C + 132, // $BE5D + 132, // $BE5E + 132, // $BE5F + 132, // $BE60 + 132, // $BE61 + 132, // $BE62 + 132, // $BE63 + 132, // $BE64 + 132, // $BE65 + 132, // $BE66 + 132, // $BE67 + 132, // $BE68 + 132, // $BE69 + 132, // $BE6A + 132, // $BE6B + 132, // $BE6C + 132, // $BE6D + 132, // $BE6E + 132, // $BE6F + 132, // $BE70 + 132, // $BE71 + 132, // $BE72 + 132, // $BE73 + 132, // $BE74 + 132, // $BE75 + 132, // $BE76 + 132, // $BE77 + 132, // $BE78 + 132, // $BE79 + 132, // $BE7A + 132, // $BE7B + 132, // $BE7C + 132, // $BE7D + 132, // $BE7E + 132, // $BE7F + 132, // $BE80 + 132, // $BE81 + 132, // $BE82 + 132, // $BE83 + 132, // $BE84 + 132, // $BE85 + 132, // $BE86 + 132, // $BE87 + 132, // $BE88 + 132, // $BE89 + 132, // $BE8A + 132, // $BE8B + 132, // $BE8C + 132, // $BE8D + 132, // $BE8E + 132, // $BE8F + 132, // $BE90 + 132, // $BE91 + 132, // $BE92 + 132, // $BE93 + 132, // $BE94 + 132, // $BE95 + 132, // $BE96 + 132, // $BE97 + 132, // $BE98 + 132, // $BE99 + 132, // $BE9A + 132, // $BE9B + 132, // $BE9C + 132, // $BE9D + 132, // $BE9E + 132, // $BE9F + 132, // $BEA0 + 132, // $BEA1 + 132, // $BEA2 + 132, // $BEA3 + 132, // $BEA4 + 132, // $BEA5 + 132, // $BEA6 + 132, // $BEA7 + 132, // $BEA8 + 132, // $BEA9 + 132, // $BEAA + 132, // $BEAB + 132, // $BEAC + 132, // $BEAD + 132, // $BEAE + 132, // $BEAF + 132, // $BEB0 + 132, // $BEB1 + 132, // $BEB2 + 132, // $BEB3 + 132, // $BEB4 + 132, // $BEB5 + 132, // $BEB6 + 132, // $BEB7 + 132, // $BEB8 + 132, // $BEB9 + 132, // $BEBA + 132, // $BEBB + 132, // $BEBC + 132, // $BEBD + 132, // $BEBE + 132, // $BEBF + 132, // $BEC0 + 132, // $BEC1 + 132, // $BEC2 + 132, // $BEC3 + 132, // $BEC4 + 132, // $BEC5 + 132, // $BEC6 + 132, // $BEC7 + 132, // $BEC8 + 132, // $BEC9 + 132, // $BECA + 132, // $BECB + 132, // $BECC + 132, // $BECD + 132, // $BECE + 132, // $BECF + 132, // $BED0 + 132, // $BED1 + 132, // $BED2 + 132, // $BED3 + 132, // $BED4 + 132, // $BED5 + 132, // $BED6 + 132, // $BED7 + 132, // $BED8 + 132, // $BED9 + 132, // $BEDA + 132, // $BEDB + 132, // $BEDC + 132, // $BEDD + 132, // $BEDE + 132, // $BEDF + 132, // $BEE0 + 132, // $BEE1 + 132, // $BEE2 + 132, // $BEE3 + 132, // $BEE4 + 132, // $BEE5 + 132, // $BEE6 + 132, // $BEE7 + 132, // $BEE8 + 132, // $BEE9 + 132, // $BEEA + 132, // $BEEB + 132, // $BEEC + 132, // $BEED + 132, // $BEEE + 132, // $BEEF + 132, // $BEF0 + 132, // $BEF1 + 132, // $BEF2 + 132, // $BEF3 + 132, // $BEF4 + 132, // $BEF5 + 132, // $BEF6 + 132, // $BEF7 + 132, // $BEF8 + 132, // $BEF9 + 132, // $BEFA + 132, // $BEFB + 132, // $BEFC + 132, // $BEFD + 132, // $BEFE + 132, // $BEFF + 132, // $BF00 + 132, // $BF01 + 132, // $BF02 + 132, // $BF03 + 132, // $BF04 + 132, // $BF05 + 132, // $BF06 + 132, // $BF07 + 132, // $BF08 + 132, // $BF09 + 132, // $BF0A + 132, // $BF0B + 132, // $BF0C + 132, // $BF0D + 132, // $BF0E + 132, // $BF0F + 132, // $BF10 + 132, // $BF11 + 132, // $BF12 + 132, // $BF13 + 132, // $BF14 + 132, // $BF15 + 132, // $BF16 + 132, // $BF17 + 132, // $BF18 + 132, // $BF19 + 132, // $BF1A + 132, // $BF1B + 132, // $BF1C + 132, // $BF1D + 132, // $BF1E + 132, // $BF1F + 132, // $BF20 + 132, // $BF21 + 132, // $BF22 + 132, // $BF23 + 132, // $BF24 + 132, // $BF25 + 132, // $BF26 + 132, // $BF27 + 132, // $BF28 + 132, // $BF29 + 132, // $BF2A + 132, // $BF2B + 132, // $BF2C + 132, // $BF2D + 132, // $BF2E + 132, // $BF2F + 132, // $BF30 + 132, // $BF31 + 132, // $BF32 + 132, // $BF33 + 132, // $BF34 + 132, // $BF35 + 132, // $BF36 + 132, // $BF37 + 132, // $BF38 + 132, // $BF39 + 132, // $BF3A + 132, // $BF3B + 132, // $BF3C + 132, // $BF3D + 132, // $BF3E + 132, // $BF3F + 132, // $BF40 + 132, // $BF41 + 132, // $BF42 + 132, // $BF43 + 132, // $BF44 + 132, // $BF45 + 132, // $BF46 + 132, // $BF47 + 132, // $BF48 + 132, // $BF49 + 132, // $BF4A + 132, // $BF4B + 132, // $BF4C + 132, // $BF4D + 132, // $BF4E + 132, // $BF4F + 132, // $BF50 + 132, // $BF51 + 132, // $BF52 + 132, // $BF53 + 132, // $BF54 + 132, // $BF55 + 132, // $BF56 + 132, // $BF57 + 132, // $BF58 + 132, // $BF59 + 132, // $BF5A + 132, // $BF5B + 132, // $BF5C + 132, // $BF5D + 132, // $BF5E + 132, // $BF5F + 132, // $BF60 + 132, // $BF61 + 132, // $BF62 + 132, // $BF63 + 132, // $BF64 + 132, // $BF65 + 132, // $BF66 + 132, // $BF67 + 132, // $BF68 + 132, // $BF69 + 132, // $BF6A + 132, // $BF6B + 132, // $BF6C + 132, // $BF6D + 132, // $BF6E + 132, // $BF6F + 132, // $BF70 + 132, // $BF71 + 132, // $BF72 + 132, // $BF73 + 132, // $BF74 + 132, // $BF75 + 132, // $BF76 + 132, // $BF77 + 132, // $BF78 + 132, // $BF79 + 132, // $BF7A + 132, // $BF7B + 132, // $BF7C + 132, // $BF7D + 132, // $BF7E + 132, // $BF7F + 132, // $BF80 + 132, // $BF81 + 132, // $BF82 + 132, // $BF83 + 132, // $BF84 + 132, // $BF85 + 132, // $BF86 + 132, // $BF87 + 132, // $BF88 + 132, // $BF89 + 132, // $BF8A + 132, // $BF8B + 132, // $BF8C + 132, // $BF8D + 132, // $BF8E + 132, // $BF8F + 132, // $BF90 + 132, // $BF91 + 132, // $BF92 + 132, // $BF93 + 132, // $BF94 + 132, // $BF95 + 132, // $BF96 + 132, // $BF97 + 132, // $BF98 + 132, // $BF99 + 132, // $BF9A + 132, // $BF9B + 132, // $BF9C + 132, // $BF9D + 132, // $BF9E + 132, // $BF9F + 132, // $BFA0 + 132, // $BFA1 + 132, // $BFA2 + 132, // $BFA3 + 132, // $BFA4 + 132, // $BFA5 + 132, // $BFA6 + 132, // $BFA7 + 132, // $BFA8 + 132, // $BFA9 + 132, // $BFAA + 132, // $BFAB + 132, // $BFAC + 132, // $BFAD + 132, // $BFAE + 132, // $BFAF + 132, // $BFB0 + 132, // $BFB1 + 132, // $BFB2 + 132, // $BFB3 + 132, // $BFB4 + 132, // $BFB5 + 132, // $BFB6 + 132, // $BFB7 + 132, // $BFB8 + 132, // $BFB9 + 132, // $BFBA + 132, // $BFBB + 132, // $BFBC + 132, // $BFBD + 132, // $BFBE + 132, // $BFBF + 132, // $BFC0 + 132, // $BFC1 + 132, // $BFC2 + 132, // $BFC3 + 132, // $BFC4 + 132, // $BFC5 + 132, // $BFC6 + 132, // $BFC7 + 132, // $BFC8 + 132, // $BFC9 + 132, // $BFCA + 132, // $BFCB + 132, // $BFCC + 132, // $BFCD + 132, // $BFCE + 132, // $BFCF + 132, // $BFD0 + 132, // $BFD1 + 132, // $BFD2 + 132, // $BFD3 + 132, // $BFD4 + 132, // $BFD5 + 132, // $BFD6 + 132, // $BFD7 + 132, // $BFD8 + 132, // $BFD9 + 132, // $BFDA + 132, // $BFDB + 132, // $BFDC + 132, // $BFDD + 132, // $BFDE + 132, // $BFDF + 132, // $BFE0 + 132, // $BFE1 + 132, // $BFE2 + 132, // $BFE3 + 132, // $BFE4 + 132, // $BFE5 + 132, // $BFE6 + 132, // $BFE7 + 132, // $BFE8 + 132, // $BFE9 + 132, // $BFEA + 132, // $BFEB + 132, // $BFEC + 132, // $BFED + 132, // $BFEE + 132, // $BFEF + 132, // $BFF0 + 132, // $BFF1 + 132, // $BFF2 + 132, // $BFF3 + 132, // $BFF4 + 132, // $BFF5 + 132, // $BFF6 + 132, // $BFF7 + 132, // $BFF8 + 132, // $BFF9 + 132, // $BFFA + 132, // $BFFB + 132, // $BFFC + 132, // $BFFD + 132, // $BFFE + 132, // $BFFF + 132, // $C000 + 132, // $C001 + 132, // $C002 + 132, // $C003 + 132, // $C004 + 132, // $C005 + 132, // $C006 + 132, // $C007 + 132, // $C008 + 132, // $C009 + 132, // $C00A + 132, // $C00B + 132, // $C00C + 132, // $C00D + 132, // $C00E + 132, // $C00F + 132, // $C010 + 132, // $C011 + 132, // $C012 + 132, // $C013 + 132, // $C014 + 132, // $C015 + 132, // $C016 + 132, // $C017 + 132, // $C018 + 132, // $C019 + 132, // $C01A + 132, // $C01B + 132, // $C01C + 132, // $C01D + 132, // $C01E + 132, // $C01F + 132, // $C020 + 132, // $C021 + 132, // $C022 + 132, // $C023 + 132, // $C024 + 132, // $C025 + 132, // $C026 + 132, // $C027 + 132, // $C028 + 132, // $C029 + 132, // $C02A + 132, // $C02B + 132, // $C02C + 132, // $C02D + 132, // $C02E + 132, // $C02F + 132, // $C030 + 132, // $C031 + 132, // $C032 + 132, // $C033 + 132, // $C034 + 132, // $C035 + 132, // $C036 + 132, // $C037 + 132, // $C038 + 132, // $C039 + 132, // $C03A + 132, // $C03B + 132, // $C03C + 132, // $C03D + 132, // $C03E + 132, // $C03F + 132, // $C040 + 132, // $C041 + 132, // $C042 + 132, // $C043 + 132, // $C044 + 132, // $C045 + 132, // $C046 + 132, // $C047 + 132, // $C048 + 132, // $C049 + 132, // $C04A + 132, // $C04B + 132, // $C04C + 132, // $C04D + 132, // $C04E + 132, // $C04F + 132, // $C050 + 132, // $C051 + 132, // $C052 + 132, // $C053 + 132, // $C054 + 132, // $C055 + 132, // $C056 + 132, // $C057 + 132, // $C058 + 132, // $C059 + 132, // $C05A + 132, // $C05B + 132, // $C05C + 132, // $C05D + 132, // $C05E + 132, // $C05F + 132, // $C060 + 132, // $C061 + 132, // $C062 + 132, // $C063 + 132, // $C064 + 132, // $C065 + 132, // $C066 + 132, // $C067 + 132, // $C068 + 132, // $C069 + 132, // $C06A + 132, // $C06B + 132, // $C06C + 132, // $C06D + 132, // $C06E + 132, // $C06F + 132, // $C070 + 132, // $C071 + 132, // $C072 + 132, // $C073 + 132, // $C074 + 132, // $C075 + 132, // $C076 + 132, // $C077 + 132, // $C078 + 132, // $C079 + 132, // $C07A + 132, // $C07B + 132, // $C07C + 132, // $C07D + 132, // $C07E + 132, // $C07F + 132, // $C080 + 132, // $C081 + 132, // $C082 + 132, // $C083 + 132, // $C084 + 132, // $C085 + 132, // $C086 + 132, // $C087 + 132, // $C088 + 132, // $C089 + 132, // $C08A + 132, // $C08B + 132, // $C08C + 132, // $C08D + 132, // $C08E + 132, // $C08F + 132, // $C090 + 132, // $C091 + 132, // $C092 + 132, // $C093 + 132, // $C094 + 132, // $C095 + 132, // $C096 + 132, // $C097 + 132, // $C098 + 132, // $C099 + 132, // $C09A + 132, // $C09B + 132, // $C09C + 132, // $C09D + 132, // $C09E + 132, // $C09F + 132, // $C0A0 + 132, // $C0A1 + 132, // $C0A2 + 132, // $C0A3 + 132, // $C0A4 + 132, // $C0A5 + 132, // $C0A6 + 132, // $C0A7 + 132, // $C0A8 + 132, // $C0A9 + 132, // $C0AA + 132, // $C0AB + 132, // $C0AC + 132, // $C0AD + 132, // $C0AE + 132, // $C0AF + 132, // $C0B0 + 132, // $C0B1 + 132, // $C0B2 + 132, // $C0B3 + 132, // $C0B4 + 132, // $C0B5 + 132, // $C0B6 + 132, // $C0B7 + 132, // $C0B8 + 132, // $C0B9 + 132, // $C0BA + 132, // $C0BB + 132, // $C0BC + 132, // $C0BD + 132, // $C0BE + 132, // $C0BF + 132, // $C0C0 + 132, // $C0C1 + 132, // $C0C2 + 132, // $C0C3 + 132, // $C0C4 + 132, // $C0C5 + 132, // $C0C6 + 132, // $C0C7 + 132, // $C0C8 + 132, // $C0C9 + 132, // $C0CA + 132, // $C0CB + 132, // $C0CC + 132, // $C0CD + 132, // $C0CE + 132, // $C0CF + 132, // $C0D0 + 132, // $C0D1 + 132, // $C0D2 + 132, // $C0D3 + 132, // $C0D4 + 132, // $C0D5 + 132, // $C0D6 + 132, // $C0D7 + 132, // $C0D8 + 132, // $C0D9 + 132, // $C0DA + 132, // $C0DB + 132, // $C0DC + 132, // $C0DD + 132, // $C0DE + 132, // $C0DF + 132, // $C0E0 + 132, // $C0E1 + 132, // $C0E2 + 132, // $C0E3 + 132, // $C0E4 + 132, // $C0E5 + 132, // $C0E6 + 132, // $C0E7 + 132, // $C0E8 + 132, // $C0E9 + 132, // $C0EA + 132, // $C0EB + 132, // $C0EC + 132, // $C0ED + 132, // $C0EE + 132, // $C0EF + 132, // $C0F0 + 132, // $C0F1 + 132, // $C0F2 + 132, // $C0F3 + 132, // $C0F4 + 132, // $C0F5 + 132, // $C0F6 + 132, // $C0F7 + 132, // $C0F8 + 132, // $C0F9 + 132, // $C0FA + 132, // $C0FB + 132, // $C0FC + 132, // $C0FD + 132, // $C0FE + 132, // $C0FF + 132, // $C100 + 132, // $C101 + 132, // $C102 + 132, // $C103 + 132, // $C104 + 132, // $C105 + 132, // $C106 + 132, // $C107 + 132, // $C108 + 132, // $C109 + 132, // $C10A + 132, // $C10B + 132, // $C10C + 132, // $C10D + 132, // $C10E + 132, // $C10F + 132, // $C110 + 132, // $C111 + 132, // $C112 + 132, // $C113 + 132, // $C114 + 132, // $C115 + 132, // $C116 + 132, // $C117 + 132, // $C118 + 132, // $C119 + 132, // $C11A + 132, // $C11B + 132, // $C11C + 132, // $C11D + 132, // $C11E + 132, // $C11F + 132, // $C120 + 132, // $C121 + 132, // $C122 + 132, // $C123 + 132, // $C124 + 132, // $C125 + 132, // $C126 + 132, // $C127 + 132, // $C128 + 132, // $C129 + 132, // $C12A + 132, // $C12B + 132, // $C12C + 132, // $C12D + 132, // $C12E + 132, // $C12F + 132, // $C130 + 132, // $C131 + 132, // $C132 + 132, // $C133 + 132, // $C134 + 132, // $C135 + 132, // $C136 + 132, // $C137 + 132, // $C138 + 132, // $C139 + 132, // $C13A + 132, // $C13B + 132, // $C13C + 132, // $C13D + 132, // $C13E + 132, // $C13F + 132, // $C140 + 132, // $C141 + 132, // $C142 + 132, // $C143 + 132, // $C144 + 132, // $C145 + 132, // $C146 + 132, // $C147 + 132, // $C148 + 132, // $C149 + 132, // $C14A + 132, // $C14B + 132, // $C14C + 132, // $C14D + 132, // $C14E + 132, // $C14F + 132, // $C150 + 132, // $C151 + 132, // $C152 + 132, // $C153 + 132, // $C154 + 132, // $C155 + 132, // $C156 + 132, // $C157 + 132, // $C158 + 132, // $C159 + 132, // $C15A + 132, // $C15B + 132, // $C15C + 132, // $C15D + 132, // $C15E + 132, // $C15F + 132, // $C160 + 132, // $C161 + 132, // $C162 + 132, // $C163 + 132, // $C164 + 132, // $C165 + 132, // $C166 + 132, // $C167 + 132, // $C168 + 132, // $C169 + 132, // $C16A + 132, // $C16B + 132, // $C16C + 132, // $C16D + 132, // $C16E + 132, // $C16F + 132, // $C170 + 132, // $C171 + 132, // $C172 + 132, // $C173 + 132, // $C174 + 132, // $C175 + 132, // $C176 + 132, // $C177 + 132, // $C178 + 132, // $C179 + 132, // $C17A + 132, // $C17B + 132, // $C17C + 132, // $C17D + 132, // $C17E + 132, // $C17F + 132, // $C180 + 132, // $C181 + 132, // $C182 + 132, // $C183 + 132, // $C184 + 132, // $C185 + 132, // $C186 + 132, // $C187 + 132, // $C188 + 132, // $C189 + 132, // $C18A + 132, // $C18B + 132, // $C18C + 132, // $C18D + 132, // $C18E + 132, // $C18F + 132, // $C190 + 132, // $C191 + 132, // $C192 + 132, // $C193 + 132, // $C194 + 132, // $C195 + 132, // $C196 + 132, // $C197 + 132, // $C198 + 132, // $C199 + 132, // $C19A + 132, // $C19B + 132, // $C19C + 132, // $C19D + 132, // $C19E + 132, // $C19F + 132, // $C1A0 + 132, // $C1A1 + 132, // $C1A2 + 132, // $C1A3 + 132, // $C1A4 + 132, // $C1A5 + 132, // $C1A6 + 132, // $C1A7 + 132, // $C1A8 + 132, // $C1A9 + 132, // $C1AA + 132, // $C1AB + 132, // $C1AC + 132, // $C1AD + 132, // $C1AE + 132, // $C1AF + 132, // $C1B0 + 132, // $C1B1 + 132, // $C1B2 + 132, // $C1B3 + 132, // $C1B4 + 132, // $C1B5 + 132, // $C1B6 + 132, // $C1B7 + 132, // $C1B8 + 132, // $C1B9 + 132, // $C1BA + 132, // $C1BB + 132, // $C1BC + 132, // $C1BD + 132, // $C1BE + 132, // $C1BF + 132, // $C1C0 + 132, // $C1C1 + 132, // $C1C2 + 132, // $C1C3 + 132, // $C1C4 + 132, // $C1C5 + 132, // $C1C6 + 132, // $C1C7 + 132, // $C1C8 + 132, // $C1C9 + 132, // $C1CA + 132, // $C1CB + 132, // $C1CC + 132, // $C1CD + 132, // $C1CE + 132, // $C1CF + 132, // $C1D0 + 132, // $C1D1 + 132, // $C1D2 + 132, // $C1D3 + 132, // $C1D4 + 132, // $C1D5 + 132, // $C1D6 + 132, // $C1D7 + 132, // $C1D8 + 132, // $C1D9 + 132, // $C1DA + 132, // $C1DB + 132, // $C1DC + 132, // $C1DD + 132, // $C1DE + 132, // $C1DF + 132, // $C1E0 + 132, // $C1E1 + 132, // $C1E2 + 132, // $C1E3 + 132, // $C1E4 + 132, // $C1E5 + 132, // $C1E6 + 132, // $C1E7 + 132, // $C1E8 + 132, // $C1E9 + 132, // $C1EA + 132, // $C1EB + 132, // $C1EC + 132, // $C1ED + 132, // $C1EE + 132, // $C1EF + 132, // $C1F0 + 132, // $C1F1 + 132, // $C1F2 + 132, // $C1F3 + 132, // $C1F4 + 132, // $C1F5 + 132, // $C1F6 + 132, // $C1F7 + 132, // $C1F8 + 132, // $C1F9 + 132, // $C1FA + 132, // $C1FB + 132, // $C1FC + 132, // $C1FD + 132, // $C1FE + 132, // $C1FF + 132, // $C200 + 132, // $C201 + 132, // $C202 + 132, // $C203 + 132, // $C204 + 132, // $C205 + 132, // $C206 + 132, // $C207 + 132, // $C208 + 132, // $C209 + 132, // $C20A + 132, // $C20B + 132, // $C20C + 132, // $C20D + 132, // $C20E + 132, // $C20F + 132, // $C210 + 132, // $C211 + 132, // $C212 + 132, // $C213 + 132, // $C214 + 132, // $C215 + 132, // $C216 + 132, // $C217 + 132, // $C218 + 132, // $C219 + 132, // $C21A + 132, // $C21B + 132, // $C21C + 132, // $C21D + 132, // $C21E + 132, // $C21F + 132, // $C220 + 132, // $C221 + 132, // $C222 + 132, // $C223 + 132, // $C224 + 132, // $C225 + 132, // $C226 + 132, // $C227 + 132, // $C228 + 132, // $C229 + 132, // $C22A + 132, // $C22B + 132, // $C22C + 132, // $C22D + 132, // $C22E + 132, // $C22F + 132, // $C230 + 132, // $C231 + 132, // $C232 + 132, // $C233 + 132, // $C234 + 132, // $C235 + 132, // $C236 + 132, // $C237 + 132, // $C238 + 132, // $C239 + 132, // $C23A + 132, // $C23B + 132, // $C23C + 132, // $C23D + 132, // $C23E + 132, // $C23F + 132, // $C240 + 132, // $C241 + 132, // $C242 + 132, // $C243 + 132, // $C244 + 132, // $C245 + 132, // $C246 + 132, // $C247 + 132, // $C248 + 132, // $C249 + 132, // $C24A + 132, // $C24B + 132, // $C24C + 132, // $C24D + 132, // $C24E + 132, // $C24F + 132, // $C250 + 132, // $C251 + 132, // $C252 + 132, // $C253 + 132, // $C254 + 132, // $C255 + 132, // $C256 + 132, // $C257 + 132, // $C258 + 132, // $C259 + 132, // $C25A + 132, // $C25B + 132, // $C25C + 132, // $C25D + 132, // $C25E + 132, // $C25F + 132, // $C260 + 132, // $C261 + 132, // $C262 + 132, // $C263 + 132, // $C264 + 132, // $C265 + 132, // $C266 + 132, // $C267 + 132, // $C268 + 132, // $C269 + 132, // $C26A + 132, // $C26B + 132, // $C26C + 132, // $C26D + 132, // $C26E + 132, // $C26F + 132, // $C270 + 132, // $C271 + 132, // $C272 + 132, // $C273 + 132, // $C274 + 132, // $C275 + 132, // $C276 + 132, // $C277 + 132, // $C278 + 132, // $C279 + 132, // $C27A + 132, // $C27B + 132, // $C27C + 132, // $C27D + 132, // $C27E + 132, // $C27F + 132, // $C280 + 132, // $C281 + 132, // $C282 + 132, // $C283 + 132, // $C284 + 132, // $C285 + 132, // $C286 + 132, // $C287 + 132, // $C288 + 132, // $C289 + 132, // $C28A + 132, // $C28B + 132, // $C28C + 132, // $C28D + 132, // $C28E + 132, // $C28F + 132, // $C290 + 132, // $C291 + 132, // $C292 + 132, // $C293 + 132, // $C294 + 132, // $C295 + 132, // $C296 + 132, // $C297 + 132, // $C298 + 132, // $C299 + 132, // $C29A + 132, // $C29B + 132, // $C29C + 132, // $C29D + 132, // $C29E + 132, // $C29F + 132, // $C2A0 + 132, // $C2A1 + 132, // $C2A2 + 132, // $C2A3 + 132, // $C2A4 + 132, // $C2A5 + 132, // $C2A6 + 132, // $C2A7 + 132, // $C2A8 + 132, // $C2A9 + 132, // $C2AA + 132, // $C2AB + 132, // $C2AC + 132, // $C2AD + 132, // $C2AE + 132, // $C2AF + 132, // $C2B0 + 132, // $C2B1 + 132, // $C2B2 + 132, // $C2B3 + 132, // $C2B4 + 132, // $C2B5 + 132, // $C2B6 + 132, // $C2B7 + 132, // $C2B8 + 132, // $C2B9 + 132, // $C2BA + 132, // $C2BB + 132, // $C2BC + 132, // $C2BD + 132, // $C2BE + 132, // $C2BF + 132, // $C2C0 + 132, // $C2C1 + 132, // $C2C2 + 132, // $C2C3 + 132, // $C2C4 + 132, // $C2C5 + 132, // $C2C6 + 132, // $C2C7 + 132, // $C2C8 + 132, // $C2C9 + 132, // $C2CA + 132, // $C2CB + 132, // $C2CC + 132, // $C2CD + 132, // $C2CE + 132, // $C2CF + 132, // $C2D0 + 132, // $C2D1 + 132, // $C2D2 + 132, // $C2D3 + 132, // $C2D4 + 132, // $C2D5 + 132, // $C2D6 + 132, // $C2D7 + 132, // $C2D8 + 132, // $C2D9 + 132, // $C2DA + 132, // $C2DB + 132, // $C2DC + 132, // $C2DD + 132, // $C2DE + 132, // $C2DF + 132, // $C2E0 + 132, // $C2E1 + 132, // $C2E2 + 132, // $C2E3 + 132, // $C2E4 + 132, // $C2E5 + 132, // $C2E6 + 132, // $C2E7 + 132, // $C2E8 + 132, // $C2E9 + 132, // $C2EA + 132, // $C2EB + 132, // $C2EC + 132, // $C2ED + 132, // $C2EE + 132, // $C2EF + 132, // $C2F0 + 132, // $C2F1 + 132, // $C2F2 + 132, // $C2F3 + 132, // $C2F4 + 132, // $C2F5 + 132, // $C2F6 + 132, // $C2F7 + 132, // $C2F8 + 132, // $C2F9 + 132, // $C2FA + 132, // $C2FB + 132, // $C2FC + 132, // $C2FD + 132, // $C2FE + 132, // $C2FF + 132, // $C300 + 132, // $C301 + 132, // $C302 + 132, // $C303 + 132, // $C304 + 132, // $C305 + 132, // $C306 + 132, // $C307 + 132, // $C308 + 132, // $C309 + 132, // $C30A + 132, // $C30B + 132, // $C30C + 132, // $C30D + 132, // $C30E + 132, // $C30F + 132, // $C310 + 132, // $C311 + 132, // $C312 + 132, // $C313 + 132, // $C314 + 132, // $C315 + 132, // $C316 + 132, // $C317 + 132, // $C318 + 132, // $C319 + 132, // $C31A + 132, // $C31B + 132, // $C31C + 132, // $C31D + 132, // $C31E + 132, // $C31F + 132, // $C320 + 132, // $C321 + 132, // $C322 + 132, // $C323 + 132, // $C324 + 132, // $C325 + 132, // $C326 + 132, // $C327 + 132, // $C328 + 132, // $C329 + 132, // $C32A + 132, // $C32B + 132, // $C32C + 132, // $C32D + 132, // $C32E + 132, // $C32F + 132, // $C330 + 132, // $C331 + 132, // $C332 + 132, // $C333 + 132, // $C334 + 132, // $C335 + 132, // $C336 + 132, // $C337 + 132, // $C338 + 132, // $C339 + 132, // $C33A + 132, // $C33B + 132, // $C33C + 132, // $C33D + 132, // $C33E + 132, // $C33F + 132, // $C340 + 132, // $C341 + 132, // $C342 + 132, // $C343 + 132, // $C344 + 132, // $C345 + 132, // $C346 + 132, // $C347 + 132, // $C348 + 132, // $C349 + 132, // $C34A + 132, // $C34B + 132, // $C34C + 132, // $C34D + 132, // $C34E + 132, // $C34F + 132, // $C350 + 132, // $C351 + 132, // $C352 + 132, // $C353 + 132, // $C354 + 132, // $C355 + 132, // $C356 + 132, // $C357 + 132, // $C358 + 132, // $C359 + 132, // $C35A + 132, // $C35B + 132, // $C35C + 132, // $C35D + 132, // $C35E + 132, // $C35F + 132, // $C360 + 132, // $C361 + 132, // $C362 + 132, // $C363 + 132, // $C364 + 132, // $C365 + 132, // $C366 + 132, // $C367 + 132, // $C368 + 132, // $C369 + 132, // $C36A + 132, // $C36B + 132, // $C36C + 132, // $C36D + 132, // $C36E + 132, // $C36F + 132, // $C370 + 132, // $C371 + 132, // $C372 + 132, // $C373 + 132, // $C374 + 132, // $C375 + 132, // $C376 + 132, // $C377 + 132, // $C378 + 132, // $C379 + 132, // $C37A + 132, // $C37B + 132, // $C37C + 132, // $C37D + 132, // $C37E + 132, // $C37F + 132, // $C380 + 132, // $C381 + 132, // $C382 + 132, // $C383 + 132, // $C384 + 132, // $C385 + 132, // $C386 + 132, // $C387 + 132, // $C388 + 132, // $C389 + 132, // $C38A + 132, // $C38B + 132, // $C38C + 132, // $C38D + 132, // $C38E + 132, // $C38F + 132, // $C390 + 132, // $C391 + 132, // $C392 + 132, // $C393 + 132, // $C394 + 132, // $C395 + 132, // $C396 + 132, // $C397 + 132, // $C398 + 132, // $C399 + 132, // $C39A + 132, // $C39B + 132, // $C39C + 132, // $C39D + 132, // $C39E + 132, // $C39F + 132, // $C3A0 + 132, // $C3A1 + 132, // $C3A2 + 132, // $C3A3 + 132, // $C3A4 + 132, // $C3A5 + 132, // $C3A6 + 132, // $C3A7 + 132, // $C3A8 + 132, // $C3A9 + 132, // $C3AA + 132, // $C3AB + 132, // $C3AC + 132, // $C3AD + 132, // $C3AE + 132, // $C3AF + 132, // $C3B0 + 132, // $C3B1 + 132, // $C3B2 + 132, // $C3B3 + 132, // $C3B4 + 132, // $C3B5 + 132, // $C3B6 + 132, // $C3B7 + 132, // $C3B8 + 132, // $C3B9 + 132, // $C3BA + 132, // $C3BB + 132, // $C3BC + 132, // $C3BD + 132, // $C3BE + 132, // $C3BF + 132, // $C3C0 + 132, // $C3C1 + 132, // $C3C2 + 132, // $C3C3 + 132, // $C3C4 + 132, // $C3C5 + 132, // $C3C6 + 132, // $C3C7 + 132, // $C3C8 + 132, // $C3C9 + 132, // $C3CA + 132, // $C3CB + 132, // $C3CC + 132, // $C3CD + 132, // $C3CE + 132, // $C3CF + 132, // $C3D0 + 132, // $C3D1 + 132, // $C3D2 + 132, // $C3D3 + 132, // $C3D4 + 132, // $C3D5 + 132, // $C3D6 + 132, // $C3D7 + 132, // $C3D8 + 132, // $C3D9 + 132, // $C3DA + 132, // $C3DB + 132, // $C3DC + 132, // $C3DD + 132, // $C3DE + 132, // $C3DF + 132, // $C3E0 + 132, // $C3E1 + 132, // $C3E2 + 132, // $C3E3 + 132, // $C3E4 + 132, // $C3E5 + 132, // $C3E6 + 132, // $C3E7 + 132, // $C3E8 + 132, // $C3E9 + 132, // $C3EA + 132, // $C3EB + 132, // $C3EC + 132, // $C3ED + 132, // $C3EE + 132, // $C3EF + 132, // $C3F0 + 132, // $C3F1 + 132, // $C3F2 + 132, // $C3F3 + 132, // $C3F4 + 132, // $C3F5 + 132, // $C3F6 + 132, // $C3F7 + 132, // $C3F8 + 132, // $C3F9 + 132, // $C3FA + 132, // $C3FB + 132, // $C3FC + 132, // $C3FD + 132, // $C3FE + 132, // $C3FF + 132, // $C400 + 132, // $C401 + 132, // $C402 + 132, // $C403 + 132, // $C404 + 132, // $C405 + 132, // $C406 + 132, // $C407 + 132, // $C408 + 132, // $C409 + 132, // $C40A + 132, // $C40B + 132, // $C40C + 132, // $C40D + 132, // $C40E + 132, // $C40F + 132, // $C410 + 132, // $C411 + 132, // $C412 + 132, // $C413 + 132, // $C414 + 132, // $C415 + 132, // $C416 + 132, // $C417 + 132, // $C418 + 132, // $C419 + 132, // $C41A + 132, // $C41B + 132, // $C41C + 132, // $C41D + 132, // $C41E + 132, // $C41F + 132, // $C420 + 132, // $C421 + 132, // $C422 + 132, // $C423 + 132, // $C424 + 132, // $C425 + 132, // $C426 + 132, // $C427 + 132, // $C428 + 132, // $C429 + 132, // $C42A + 132, // $C42B + 132, // $C42C + 132, // $C42D + 132, // $C42E + 132, // $C42F + 132, // $C430 + 132, // $C431 + 132, // $C432 + 132, // $C433 + 132, // $C434 + 132, // $C435 + 132, // $C436 + 132, // $C437 + 132, // $C438 + 132, // $C439 + 132, // $C43A + 132, // $C43B + 132, // $C43C + 132, // $C43D + 132, // $C43E + 132, // $C43F + 132, // $C440 + 132, // $C441 + 132, // $C442 + 132, // $C443 + 132, // $C444 + 132, // $C445 + 132, // $C446 + 132, // $C447 + 132, // $C448 + 132, // $C449 + 132, // $C44A + 132, // $C44B + 132, // $C44C + 132, // $C44D + 132, // $C44E + 132, // $C44F + 132, // $C450 + 132, // $C451 + 132, // $C452 + 132, // $C453 + 132, // $C454 + 132, // $C455 + 132, // $C456 + 132, // $C457 + 132, // $C458 + 132, // $C459 + 132, // $C45A + 132, // $C45B + 132, // $C45C + 132, // $C45D + 132, // $C45E + 132, // $C45F + 132, // $C460 + 132, // $C461 + 132, // $C462 + 132, // $C463 + 132, // $C464 + 132, // $C465 + 132, // $C466 + 132, // $C467 + 132, // $C468 + 132, // $C469 + 132, // $C46A + 132, // $C46B + 132, // $C46C + 132, // $C46D + 132, // $C46E + 132, // $C46F + 132, // $C470 + 132, // $C471 + 132, // $C472 + 132, // $C473 + 132, // $C474 + 132, // $C475 + 132, // $C476 + 132, // $C477 + 132, // $C478 + 132, // $C479 + 132, // $C47A + 132, // $C47B + 132, // $C47C + 132, // $C47D + 132, // $C47E + 132, // $C47F + 132, // $C480 + 132, // $C481 + 132, // $C482 + 132, // $C483 + 132, // $C484 + 132, // $C485 + 132, // $C486 + 132, // $C487 + 132, // $C488 + 132, // $C489 + 132, // $C48A + 132, // $C48B + 132, // $C48C + 132, // $C48D + 132, // $C48E + 132, // $C48F + 132, // $C490 + 132, // $C491 + 132, // $C492 + 132, // $C493 + 132, // $C494 + 132, // $C495 + 132, // $C496 + 132, // $C497 + 132, // $C498 + 132, // $C499 + 132, // $C49A + 132, // $C49B + 132, // $C49C + 132, // $C49D + 132, // $C49E + 132, // $C49F + 132, // $C4A0 + 132, // $C4A1 + 132, // $C4A2 + 132, // $C4A3 + 132, // $C4A4 + 132, // $C4A5 + 132, // $C4A6 + 132, // $C4A7 + 132, // $C4A8 + 132, // $C4A9 + 132, // $C4AA + 132, // $C4AB + 132, // $C4AC + 132, // $C4AD + 132, // $C4AE + 132, // $C4AF + 132, // $C4B0 + 132, // $C4B1 + 132, // $C4B2 + 132, // $C4B3 + 132, // $C4B4 + 132, // $C4B5 + 132, // $C4B6 + 132, // $C4B7 + 132, // $C4B8 + 132, // $C4B9 + 132, // $C4BA + 132, // $C4BB + 132, // $C4BC + 132, // $C4BD + 132, // $C4BE + 132, // $C4BF + 132, // $C4C0 + 132, // $C4C1 + 132, // $C4C2 + 132, // $C4C3 + 132, // $C4C4 + 132, // $C4C5 + 132, // $C4C6 + 132, // $C4C7 + 132, // $C4C8 + 132, // $C4C9 + 132, // $C4CA + 132, // $C4CB + 132, // $C4CC + 132, // $C4CD + 132, // $C4CE + 132, // $C4CF + 132, // $C4D0 + 132, // $C4D1 + 132, // $C4D2 + 132, // $C4D3 + 132, // $C4D4 + 132, // $C4D5 + 132, // $C4D6 + 132, // $C4D7 + 132, // $C4D8 + 132, // $C4D9 + 132, // $C4DA + 132, // $C4DB + 132, // $C4DC + 132, // $C4DD + 132, // $C4DE + 132, // $C4DF + 132, // $C4E0 + 132, // $C4E1 + 132, // $C4E2 + 132, // $C4E3 + 132, // $C4E4 + 132, // $C4E5 + 132, // $C4E6 + 132, // $C4E7 + 132, // $C4E8 + 132, // $C4E9 + 132, // $C4EA + 132, // $C4EB + 132, // $C4EC + 132, // $C4ED + 132, // $C4EE + 132, // $C4EF + 132, // $C4F0 + 132, // $C4F1 + 132, // $C4F2 + 132, // $C4F3 + 132, // $C4F4 + 132, // $C4F5 + 132, // $C4F6 + 132, // $C4F7 + 132, // $C4F8 + 132, // $C4F9 + 132, // $C4FA + 132, // $C4FB + 132, // $C4FC + 132, // $C4FD + 132, // $C4FE + 132, // $C4FF + 132, // $C500 + 132, // $C501 + 132, // $C502 + 132, // $C503 + 132, // $C504 + 132, // $C505 + 132, // $C506 + 132, // $C507 + 132, // $C508 + 132, // $C509 + 132, // $C50A + 132, // $C50B + 132, // $C50C + 132, // $C50D + 132, // $C50E + 132, // $C50F + 132, // $C510 + 132, // $C511 + 132, // $C512 + 132, // $C513 + 132, // $C514 + 132, // $C515 + 132, // $C516 + 132, // $C517 + 132, // $C518 + 132, // $C519 + 132, // $C51A + 132, // $C51B + 132, // $C51C + 132, // $C51D + 132, // $C51E + 132, // $C51F + 132, // $C520 + 132, // $C521 + 132, // $C522 + 132, // $C523 + 132, // $C524 + 132, // $C525 + 132, // $C526 + 132, // $C527 + 132, // $C528 + 132, // $C529 + 132, // $C52A + 132, // $C52B + 132, // $C52C + 132, // $C52D + 132, // $C52E + 132, // $C52F + 132, // $C530 + 132, // $C531 + 132, // $C532 + 132, // $C533 + 132, // $C534 + 132, // $C535 + 132, // $C536 + 132, // $C537 + 132, // $C538 + 132, // $C539 + 132, // $C53A + 132, // $C53B + 132, // $C53C + 132, // $C53D + 132, // $C53E + 132, // $C53F + 132, // $C540 + 132, // $C541 + 132, // $C542 + 132, // $C543 + 132, // $C544 + 132, // $C545 + 132, // $C546 + 132, // $C547 + 132, // $C548 + 132, // $C549 + 132, // $C54A + 132, // $C54B + 132, // $C54C + 132, // $C54D + 132, // $C54E + 132, // $C54F + 132, // $C550 + 132, // $C551 + 132, // $C552 + 132, // $C553 + 132, // $C554 + 132, // $C555 + 132, // $C556 + 132, // $C557 + 132, // $C558 + 132, // $C559 + 132, // $C55A + 132, // $C55B + 132, // $C55C + 132, // $C55D + 132, // $C55E + 132, // $C55F + 132, // $C560 + 132, // $C561 + 132, // $C562 + 132, // $C563 + 132, // $C564 + 132, // $C565 + 132, // $C566 + 132, // $C567 + 132, // $C568 + 132, // $C569 + 132, // $C56A + 132, // $C56B + 132, // $C56C + 132, // $C56D + 132, // $C56E + 132, // $C56F + 132, // $C570 + 132, // $C571 + 132, // $C572 + 132, // $C573 + 132, // $C574 + 132, // $C575 + 132, // $C576 + 132, // $C577 + 132, // $C578 + 132, // $C579 + 132, // $C57A + 132, // $C57B + 132, // $C57C + 132, // $C57D + 132, // $C57E + 132, // $C57F + 132, // $C580 + 132, // $C581 + 132, // $C582 + 132, // $C583 + 132, // $C584 + 132, // $C585 + 132, // $C586 + 132, // $C587 + 132, // $C588 + 132, // $C589 + 132, // $C58A + 132, // $C58B + 132, // $C58C + 132, // $C58D + 132, // $C58E + 132, // $C58F + 132, // $C590 + 132, // $C591 + 132, // $C592 + 132, // $C593 + 132, // $C594 + 132, // $C595 + 132, // $C596 + 132, // $C597 + 132, // $C598 + 132, // $C599 + 132, // $C59A + 132, // $C59B + 132, // $C59C + 132, // $C59D + 132, // $C59E + 132, // $C59F + 132, // $C5A0 + 132, // $C5A1 + 132, // $C5A2 + 132, // $C5A3 + 132, // $C5A4 + 132, // $C5A5 + 132, // $C5A6 + 132, // $C5A7 + 132, // $C5A8 + 132, // $C5A9 + 132, // $C5AA + 132, // $C5AB + 132, // $C5AC + 132, // $C5AD + 132, // $C5AE + 132, // $C5AF + 132, // $C5B0 + 132, // $C5B1 + 132, // $C5B2 + 132, // $C5B3 + 132, // $C5B4 + 132, // $C5B5 + 132, // $C5B6 + 132, // $C5B7 + 132, // $C5B8 + 132, // $C5B9 + 132, // $C5BA + 132, // $C5BB + 132, // $C5BC + 132, // $C5BD + 132, // $C5BE + 132, // $C5BF + 132, // $C5C0 + 132, // $C5C1 + 132, // $C5C2 + 132, // $C5C3 + 132, // $C5C4 + 132, // $C5C5 + 132, // $C5C6 + 132, // $C5C7 + 132, // $C5C8 + 132, // $C5C9 + 132, // $C5CA + 132, // $C5CB + 132, // $C5CC + 132, // $C5CD + 132, // $C5CE + 132, // $C5CF + 132, // $C5D0 + 132, // $C5D1 + 132, // $C5D2 + 132, // $C5D3 + 132, // $C5D4 + 132, // $C5D5 + 132, // $C5D6 + 132, // $C5D7 + 132, // $C5D8 + 132, // $C5D9 + 132, // $C5DA + 132, // $C5DB + 132, // $C5DC + 132, // $C5DD + 132, // $C5DE + 132, // $C5DF + 132, // $C5E0 + 132, // $C5E1 + 132, // $C5E2 + 132, // $C5E3 + 132, // $C5E4 + 132, // $C5E5 + 132, // $C5E6 + 132, // $C5E7 + 132, // $C5E8 + 132, // $C5E9 + 132, // $C5EA + 132, // $C5EB + 132, // $C5EC + 132, // $C5ED + 132, // $C5EE + 132, // $C5EF + 132, // $C5F0 + 132, // $C5F1 + 132, // $C5F2 + 132, // $C5F3 + 132, // $C5F4 + 132, // $C5F5 + 132, // $C5F6 + 132, // $C5F7 + 132, // $C5F8 + 132, // $C5F9 + 132, // $C5FA + 132, // $C5FB + 132, // $C5FC + 132, // $C5FD + 132, // $C5FE + 132, // $C5FF + 132, // $C600 + 132, // $C601 + 132, // $C602 + 132, // $C603 + 132, // $C604 + 132, // $C605 + 132, // $C606 + 132, // $C607 + 132, // $C608 + 132, // $C609 + 132, // $C60A + 132, // $C60B + 132, // $C60C + 132, // $C60D + 132, // $C60E + 132, // $C60F + 132, // $C610 + 132, // $C611 + 132, // $C612 + 132, // $C613 + 132, // $C614 + 132, // $C615 + 132, // $C616 + 132, // $C617 + 132, // $C618 + 132, // $C619 + 132, // $C61A + 132, // $C61B + 132, // $C61C + 132, // $C61D + 132, // $C61E + 132, // $C61F + 132, // $C620 + 132, // $C621 + 132, // $C622 + 132, // $C623 + 132, // $C624 + 132, // $C625 + 132, // $C626 + 132, // $C627 + 132, // $C628 + 132, // $C629 + 132, // $C62A + 132, // $C62B + 132, // $C62C + 132, // $C62D + 132, // $C62E + 132, // $C62F + 132, // $C630 + 132, // $C631 + 132, // $C632 + 132, // $C633 + 132, // $C634 + 132, // $C635 + 132, // $C636 + 132, // $C637 + 132, // $C638 + 132, // $C639 + 132, // $C63A + 132, // $C63B + 132, // $C63C + 132, // $C63D + 132, // $C63E + 132, // $C63F + 132, // $C640 + 132, // $C641 + 132, // $C642 + 132, // $C643 + 132, // $C644 + 132, // $C645 + 132, // $C646 + 132, // $C647 + 132, // $C648 + 132, // $C649 + 132, // $C64A + 132, // $C64B + 132, // $C64C + 132, // $C64D + 132, // $C64E + 132, // $C64F + 132, // $C650 + 132, // $C651 + 132, // $C652 + 132, // $C653 + 132, // $C654 + 132, // $C655 + 132, // $C656 + 132, // $C657 + 132, // $C658 + 132, // $C659 + 132, // $C65A + 132, // $C65B + 132, // $C65C + 132, // $C65D + 132, // $C65E + 132, // $C65F + 132, // $C660 + 132, // $C661 + 132, // $C662 + 132, // $C663 + 132, // $C664 + 132, // $C665 + 132, // $C666 + 132, // $C667 + 132, // $C668 + 132, // $C669 + 132, // $C66A + 132, // $C66B + 132, // $C66C + 132, // $C66D + 132, // $C66E + 132, // $C66F + 132, // $C670 + 132, // $C671 + 132, // $C672 + 132, // $C673 + 132, // $C674 + 132, // $C675 + 132, // $C676 + 132, // $C677 + 132, // $C678 + 132, // $C679 + 132, // $C67A + 132, // $C67B + 132, // $C67C + 132, // $C67D + 132, // $C67E + 132, // $C67F + 132, // $C680 + 132, // $C681 + 132, // $C682 + 132, // $C683 + 132, // $C684 + 132, // $C685 + 132, // $C686 + 132, // $C687 + 132, // $C688 + 132, // $C689 + 132, // $C68A + 132, // $C68B + 132, // $C68C + 132, // $C68D + 132, // $C68E + 132, // $C68F + 132, // $C690 + 132, // $C691 + 132, // $C692 + 132, // $C693 + 132, // $C694 + 132, // $C695 + 132, // $C696 + 132, // $C697 + 132, // $C698 + 132, // $C699 + 132, // $C69A + 132, // $C69B + 132, // $C69C + 132, // $C69D + 132, // $C69E + 132, // $C69F + 132, // $C6A0 + 132, // $C6A1 + 132, // $C6A2 + 132, // $C6A3 + 132, // $C6A4 + 132, // $C6A5 + 132, // $C6A6 + 132, // $C6A7 + 132, // $C6A8 + 132, // $C6A9 + 132, // $C6AA + 132, // $C6AB + 132, // $C6AC + 132, // $C6AD + 132, // $C6AE + 132, // $C6AF + 132, // $C6B0 + 132, // $C6B1 + 132, // $C6B2 + 132, // $C6B3 + 132, // $C6B4 + 132, // $C6B5 + 132, // $C6B6 + 132, // $C6B7 + 132, // $C6B8 + 132, // $C6B9 + 132, // $C6BA + 132, // $C6BB + 132, // $C6BC + 132, // $C6BD + 132, // $C6BE + 132, // $C6BF + 132, // $C6C0 + 132, // $C6C1 + 132, // $C6C2 + 132, // $C6C3 + 132, // $C6C4 + 132, // $C6C5 + 132, // $C6C6 + 132, // $C6C7 + 132, // $C6C8 + 132, // $C6C9 + 132, // $C6CA + 132, // $C6CB + 132, // $C6CC + 132, // $C6CD + 132, // $C6CE + 132, // $C6CF + 132, // $C6D0 + 132, // $C6D1 + 132, // $C6D2 + 132, // $C6D3 + 132, // $C6D4 + 132, // $C6D5 + 132, // $C6D6 + 132, // $C6D7 + 132, // $C6D8 + 132, // $C6D9 + 132, // $C6DA + 132, // $C6DB + 132, // $C6DC + 132, // $C6DD + 132, // $C6DE + 132, // $C6DF + 132, // $C6E0 + 132, // $C6E1 + 132, // $C6E2 + 132, // $C6E3 + 132, // $C6E4 + 132, // $C6E5 + 132, // $C6E6 + 132, // $C6E7 + 132, // $C6E8 + 132, // $C6E9 + 132, // $C6EA + 132, // $C6EB + 132, // $C6EC + 132, // $C6ED + 132, // $C6EE + 132, // $C6EF + 132, // $C6F0 + 132, // $C6F1 + 132, // $C6F2 + 132, // $C6F3 + 132, // $C6F4 + 132, // $C6F5 + 132, // $C6F6 + 132, // $C6F7 + 132, // $C6F8 + 132, // $C6F9 + 132, // $C6FA + 132, // $C6FB + 132, // $C6FC + 132, // $C6FD + 132, // $C6FE + 132, // $C6FF + 132, // $C700 + 132, // $C701 + 132, // $C702 + 132, // $C703 + 132, // $C704 + 132, // $C705 + 132, // $C706 + 132, // $C707 + 132, // $C708 + 132, // $C709 + 132, // $C70A + 132, // $C70B + 132, // $C70C + 132, // $C70D + 132, // $C70E + 132, // $C70F + 132, // $C710 + 132, // $C711 + 132, // $C712 + 132, // $C713 + 132, // $C714 + 132, // $C715 + 132, // $C716 + 132, // $C717 + 132, // $C718 + 132, // $C719 + 132, // $C71A + 132, // $C71B + 132, // $C71C + 132, // $C71D + 132, // $C71E + 132, // $C71F + 132, // $C720 + 132, // $C721 + 132, // $C722 + 132, // $C723 + 132, // $C724 + 132, // $C725 + 132, // $C726 + 132, // $C727 + 132, // $C728 + 132, // $C729 + 132, // $C72A + 132, // $C72B + 132, // $C72C + 132, // $C72D + 132, // $C72E + 132, // $C72F + 132, // $C730 + 132, // $C731 + 132, // $C732 + 132, // $C733 + 132, // $C734 + 132, // $C735 + 132, // $C736 + 132, // $C737 + 132, // $C738 + 132, // $C739 + 132, // $C73A + 132, // $C73B + 132, // $C73C + 132, // $C73D + 132, // $C73E + 132, // $C73F + 132, // $C740 + 132, // $C741 + 132, // $C742 + 132, // $C743 + 132, // $C744 + 132, // $C745 + 132, // $C746 + 132, // $C747 + 132, // $C748 + 132, // $C749 + 132, // $C74A + 132, // $C74B + 132, // $C74C + 132, // $C74D + 132, // $C74E + 132, // $C74F + 132, // $C750 + 132, // $C751 + 132, // $C752 + 132, // $C753 + 132, // $C754 + 132, // $C755 + 132, // $C756 + 132, // $C757 + 132, // $C758 + 132, // $C759 + 132, // $C75A + 132, // $C75B + 132, // $C75C + 132, // $C75D + 132, // $C75E + 132, // $C75F + 132, // $C760 + 132, // $C761 + 132, // $C762 + 132, // $C763 + 132, // $C764 + 132, // $C765 + 132, // $C766 + 132, // $C767 + 132, // $C768 + 132, // $C769 + 132, // $C76A + 132, // $C76B + 132, // $C76C + 132, // $C76D + 132, // $C76E + 132, // $C76F + 132, // $C770 + 132, // $C771 + 132, // $C772 + 132, // $C773 + 132, // $C774 + 132, // $C775 + 132, // $C776 + 132, // $C777 + 132, // $C778 + 132, // $C779 + 132, // $C77A + 132, // $C77B + 132, // $C77C + 132, // $C77D + 132, // $C77E + 132, // $C77F + 132, // $C780 + 132, // $C781 + 132, // $C782 + 132, // $C783 + 132, // $C784 + 132, // $C785 + 132, // $C786 + 132, // $C787 + 132, // $C788 + 132, // $C789 + 132, // $C78A + 132, // $C78B + 132, // $C78C + 132, // $C78D + 132, // $C78E + 132, // $C78F + 132, // $C790 + 132, // $C791 + 132, // $C792 + 132, // $C793 + 132, // $C794 + 132, // $C795 + 132, // $C796 + 132, // $C797 + 132, // $C798 + 132, // $C799 + 132, // $C79A + 132, // $C79B + 132, // $C79C + 132, // $C79D + 132, // $C79E + 132, // $C79F + 132, // $C7A0 + 132, // $C7A1 + 132, // $C7A2 + 132, // $C7A3 + 132, // $C7A4 + 132, // $C7A5 + 132, // $C7A6 + 132, // $C7A7 + 132, // $C7A8 + 132, // $C7A9 + 132, // $C7AA + 132, // $C7AB + 132, // $C7AC + 132, // $C7AD + 132, // $C7AE + 132, // $C7AF + 132, // $C7B0 + 132, // $C7B1 + 132, // $C7B2 + 132, // $C7B3 + 132, // $C7B4 + 132, // $C7B5 + 132, // $C7B6 + 132, // $C7B7 + 132, // $C7B8 + 132, // $C7B9 + 132, // $C7BA + 132, // $C7BB + 132, // $C7BC + 132, // $C7BD + 132, // $C7BE + 132, // $C7BF + 132, // $C7C0 + 132, // $C7C1 + 132, // $C7C2 + 132, // $C7C3 + 132, // $C7C4 + 132, // $C7C5 + 132, // $C7C6 + 132, // $C7C7 + 132, // $C7C8 + 132, // $C7C9 + 132, // $C7CA + 132, // $C7CB + 132, // $C7CC + 132, // $C7CD + 132, // $C7CE + 132, // $C7CF + 132, // $C7D0 + 132, // $C7D1 + 132, // $C7D2 + 132, // $C7D3 + 132, // $C7D4 + 132, // $C7D5 + 132, // $C7D6 + 132, // $C7D7 + 132, // $C7D8 + 132, // $C7D9 + 132, // $C7DA + 132, // $C7DB + 132, // $C7DC + 132, // $C7DD + 132, // $C7DE + 132, // $C7DF + 132, // $C7E0 + 132, // $C7E1 + 132, // $C7E2 + 132, // $C7E3 + 132, // $C7E4 + 132, // $C7E5 + 132, // $C7E6 + 132, // $C7E7 + 132, // $C7E8 + 132, // $C7E9 + 132, // $C7EA + 132, // $C7EB + 132, // $C7EC + 132, // $C7ED + 132, // $C7EE + 132, // $C7EF + 132, // $C7F0 + 132, // $C7F1 + 132, // $C7F2 + 132, // $C7F3 + 132, // $C7F4 + 132, // $C7F5 + 132, // $C7F6 + 132, // $C7F7 + 132, // $C7F8 + 132, // $C7F9 + 132, // $C7FA + 132, // $C7FB + 132, // $C7FC + 132, // $C7FD + 132, // $C7FE + 132, // $C7FF + 132, // $C800 + 132, // $C801 + 132, // $C802 + 132, // $C803 + 132, // $C804 + 132, // $C805 + 132, // $C806 + 132, // $C807 + 132, // $C808 + 132, // $C809 + 132, // $C80A + 132, // $C80B + 132, // $C80C + 132, // $C80D + 132, // $C80E + 132, // $C80F + 132, // $C810 + 132, // $C811 + 132, // $C812 + 132, // $C813 + 132, // $C814 + 132, // $C815 + 132, // $C816 + 132, // $C817 + 132, // $C818 + 132, // $C819 + 132, // $C81A + 132, // $C81B + 132, // $C81C + 132, // $C81D + 132, // $C81E + 132, // $C81F + 132, // $C820 + 132, // $C821 + 132, // $C822 + 132, // $C823 + 132, // $C824 + 132, // $C825 + 132, // $C826 + 132, // $C827 + 132, // $C828 + 132, // $C829 + 132, // $C82A + 132, // $C82B + 132, // $C82C + 132, // $C82D + 132, // $C82E + 132, // $C82F + 132, // $C830 + 132, // $C831 + 132, // $C832 + 132, // $C833 + 132, // $C834 + 132, // $C835 + 132, // $C836 + 132, // $C837 + 132, // $C838 + 132, // $C839 + 132, // $C83A + 132, // $C83B + 132, // $C83C + 132, // $C83D + 132, // $C83E + 132, // $C83F + 132, // $C840 + 132, // $C841 + 132, // $C842 + 132, // $C843 + 132, // $C844 + 132, // $C845 + 132, // $C846 + 132, // $C847 + 132, // $C848 + 132, // $C849 + 132, // $C84A + 132, // $C84B + 132, // $C84C + 132, // $C84D + 132, // $C84E + 132, // $C84F + 132, // $C850 + 132, // $C851 + 132, // $C852 + 132, // $C853 + 132, // $C854 + 132, // $C855 + 132, // $C856 + 132, // $C857 + 132, // $C858 + 132, // $C859 + 132, // $C85A + 132, // $C85B + 132, // $C85C + 132, // $C85D + 132, // $C85E + 132, // $C85F + 132, // $C860 + 132, // $C861 + 132, // $C862 + 132, // $C863 + 132, // $C864 + 132, // $C865 + 132, // $C866 + 132, // $C867 + 132, // $C868 + 132, // $C869 + 132, // $C86A + 132, // $C86B + 132, // $C86C + 132, // $C86D + 132, // $C86E + 132, // $C86F + 132, // $C870 + 132, // $C871 + 132, // $C872 + 132, // $C873 + 132, // $C874 + 132, // $C875 + 132, // $C876 + 132, // $C877 + 132, // $C878 + 132, // $C879 + 132, // $C87A + 132, // $C87B + 132, // $C87C + 132, // $C87D + 132, // $C87E + 132, // $C87F + 132, // $C880 + 132, // $C881 + 132, // $C882 + 132, // $C883 + 132, // $C884 + 132, // $C885 + 132, // $C886 + 132, // $C887 + 132, // $C888 + 132, // $C889 + 132, // $C88A + 132, // $C88B + 132, // $C88C + 132, // $C88D + 132, // $C88E + 132, // $C88F + 132, // $C890 + 132, // $C891 + 132, // $C892 + 132, // $C893 + 132, // $C894 + 132, // $C895 + 132, // $C896 + 132, // $C897 + 132, // $C898 + 132, // $C899 + 132, // $C89A + 132, // $C89B + 132, // $C89C + 132, // $C89D + 132, // $C89E + 132, // $C89F + 132, // $C8A0 + 132, // $C8A1 + 132, // $C8A2 + 132, // $C8A3 + 132, // $C8A4 + 132, // $C8A5 + 132, // $C8A6 + 132, // $C8A7 + 132, // $C8A8 + 132, // $C8A9 + 132, // $C8AA + 132, // $C8AB + 132, // $C8AC + 132, // $C8AD + 132, // $C8AE + 132, // $C8AF + 132, // $C8B0 + 132, // $C8B1 + 132, // $C8B2 + 132, // $C8B3 + 132, // $C8B4 + 132, // $C8B5 + 132, // $C8B6 + 132, // $C8B7 + 132, // $C8B8 + 132, // $C8B9 + 132, // $C8BA + 132, // $C8BB + 132, // $C8BC + 132, // $C8BD + 132, // $C8BE + 132, // $C8BF + 132, // $C8C0 + 132, // $C8C1 + 132, // $C8C2 + 132, // $C8C3 + 132, // $C8C4 + 132, // $C8C5 + 132, // $C8C6 + 132, // $C8C7 + 132, // $C8C8 + 132, // $C8C9 + 132, // $C8CA + 132, // $C8CB + 132, // $C8CC + 132, // $C8CD + 132, // $C8CE + 132, // $C8CF + 132, // $C8D0 + 132, // $C8D1 + 132, // $C8D2 + 132, // $C8D3 + 132, // $C8D4 + 132, // $C8D5 + 132, // $C8D6 + 132, // $C8D7 + 132, // $C8D8 + 132, // $C8D9 + 132, // $C8DA + 132, // $C8DB + 132, // $C8DC + 132, // $C8DD + 132, // $C8DE + 132, // $C8DF + 132, // $C8E0 + 132, // $C8E1 + 132, // $C8E2 + 132, // $C8E3 + 132, // $C8E4 + 132, // $C8E5 + 132, // $C8E6 + 132, // $C8E7 + 132, // $C8E8 + 132, // $C8E9 + 132, // $C8EA + 132, // $C8EB + 132, // $C8EC + 132, // $C8ED + 132, // $C8EE + 132, // $C8EF + 132, // $C8F0 + 132, // $C8F1 + 132, // $C8F2 + 132, // $C8F3 + 132, // $C8F4 + 132, // $C8F5 + 132, // $C8F6 + 132, // $C8F7 + 132, // $C8F8 + 132, // $C8F9 + 132, // $C8FA + 132, // $C8FB + 132, // $C8FC + 132, // $C8FD + 132, // $C8FE + 132, // $C8FF + 132, // $C900 + 132, // $C901 + 132, // $C902 + 132, // $C903 + 132, // $C904 + 132, // $C905 + 132, // $C906 + 132, // $C907 + 132, // $C908 + 132, // $C909 + 132, // $C90A + 132, // $C90B + 132, // $C90C + 132, // $C90D + 132, // $C90E + 132, // $C90F + 132, // $C910 + 132, // $C911 + 132, // $C912 + 132, // $C913 + 132, // $C914 + 132, // $C915 + 132, // $C916 + 132, // $C917 + 132, // $C918 + 132, // $C919 + 132, // $C91A + 132, // $C91B + 132, // $C91C + 132, // $C91D + 132, // $C91E + 132, // $C91F + 132, // $C920 + 132, // $C921 + 132, // $C922 + 132, // $C923 + 132, // $C924 + 132, // $C925 + 132, // $C926 + 132, // $C927 + 132, // $C928 + 132, // $C929 + 132, // $C92A + 132, // $C92B + 132, // $C92C + 132, // $C92D + 132, // $C92E + 132, // $C92F + 132, // $C930 + 132, // $C931 + 132, // $C932 + 132, // $C933 + 132, // $C934 + 132, // $C935 + 132, // $C936 + 132, // $C937 + 132, // $C938 + 132, // $C939 + 132, // $C93A + 132, // $C93B + 132, // $C93C + 132, // $C93D + 132, // $C93E + 132, // $C93F + 132, // $C940 + 132, // $C941 + 132, // $C942 + 132, // $C943 + 132, // $C944 + 132, // $C945 + 132, // $C946 + 132, // $C947 + 132, // $C948 + 132, // $C949 + 132, // $C94A + 132, // $C94B + 132, // $C94C + 132, // $C94D + 132, // $C94E + 132, // $C94F + 132, // $C950 + 132, // $C951 + 132, // $C952 + 132, // $C953 + 132, // $C954 + 132, // $C955 + 132, // $C956 + 132, // $C957 + 132, // $C958 + 132, // $C959 + 132, // $C95A + 132, // $C95B + 132, // $C95C + 132, // $C95D + 132, // $C95E + 132, // $C95F + 132, // $C960 + 132, // $C961 + 132, // $C962 + 132, // $C963 + 132, // $C964 + 132, // $C965 + 132, // $C966 + 132, // $C967 + 132, // $C968 + 132, // $C969 + 132, // $C96A + 132, // $C96B + 132, // $C96C + 132, // $C96D + 132, // $C96E + 132, // $C96F + 132, // $C970 + 132, // $C971 + 132, // $C972 + 132, // $C973 + 132, // $C974 + 132, // $C975 + 132, // $C976 + 132, // $C977 + 132, // $C978 + 132, // $C979 + 132, // $C97A + 132, // $C97B + 132, // $C97C + 132, // $C97D + 132, // $C97E + 132, // $C97F + 132, // $C980 + 132, // $C981 + 132, // $C982 + 132, // $C983 + 132, // $C984 + 132, // $C985 + 132, // $C986 + 132, // $C987 + 132, // $C988 + 132, // $C989 + 132, // $C98A + 132, // $C98B + 132, // $C98C + 132, // $C98D + 132, // $C98E + 132, // $C98F + 132, // $C990 + 132, // $C991 + 132, // $C992 + 132, // $C993 + 132, // $C994 + 132, // $C995 + 132, // $C996 + 132, // $C997 + 132, // $C998 + 132, // $C999 + 132, // $C99A + 132, // $C99B + 132, // $C99C + 132, // $C99D + 132, // $C99E + 132, // $C99F + 132, // $C9A0 + 132, // $C9A1 + 132, // $C9A2 + 132, // $C9A3 + 132, // $C9A4 + 132, // $C9A5 + 132, // $C9A6 + 132, // $C9A7 + 132, // $C9A8 + 132, // $C9A9 + 132, // $C9AA + 132, // $C9AB + 132, // $C9AC + 132, // $C9AD + 132, // $C9AE + 132, // $C9AF + 132, // $C9B0 + 132, // $C9B1 + 132, // $C9B2 + 132, // $C9B3 + 132, // $C9B4 + 132, // $C9B5 + 132, // $C9B6 + 132, // $C9B7 + 132, // $C9B8 + 132, // $C9B9 + 132, // $C9BA + 132, // $C9BB + 132, // $C9BC + 132, // $C9BD + 132, // $C9BE + 132, // $C9BF + 132, // $C9C0 + 132, // $C9C1 + 132, // $C9C2 + 132, // $C9C3 + 132, // $C9C4 + 132, // $C9C5 + 132, // $C9C6 + 132, // $C9C7 + 132, // $C9C8 + 132, // $C9C9 + 132, // $C9CA + 132, // $C9CB + 132, // $C9CC + 132, // $C9CD + 132, // $C9CE + 132, // $C9CF + 132, // $C9D0 + 132, // $C9D1 + 132, // $C9D2 + 132, // $C9D3 + 132, // $C9D4 + 132, // $C9D5 + 132, // $C9D6 + 132, // $C9D7 + 132, // $C9D8 + 132, // $C9D9 + 132, // $C9DA + 132, // $C9DB + 132, // $C9DC + 132, // $C9DD + 132, // $C9DE + 132, // $C9DF + 132, // $C9E0 + 132, // $C9E1 + 132, // $C9E2 + 132, // $C9E3 + 132, // $C9E4 + 132, // $C9E5 + 132, // $C9E6 + 132, // $C9E7 + 132, // $C9E8 + 132, // $C9E9 + 132, // $C9EA + 132, // $C9EB + 132, // $C9EC + 132, // $C9ED + 132, // $C9EE + 132, // $C9EF + 132, // $C9F0 + 132, // $C9F1 + 132, // $C9F2 + 132, // $C9F3 + 132, // $C9F4 + 132, // $C9F5 + 132, // $C9F6 + 132, // $C9F7 + 132, // $C9F8 + 132, // $C9F9 + 132, // $C9FA + 132, // $C9FB + 132, // $C9FC + 132, // $C9FD + 132, // $C9FE + 132, // $C9FF + 132, // $CA00 + 132, // $CA01 + 132, // $CA02 + 132, // $CA03 + 132, // $CA04 + 132, // $CA05 + 132, // $CA06 + 132, // $CA07 + 132, // $CA08 + 132, // $CA09 + 132, // $CA0A + 132, // $CA0B + 132, // $CA0C + 132, // $CA0D + 132, // $CA0E + 132, // $CA0F + 132, // $CA10 + 132, // $CA11 + 132, // $CA12 + 132, // $CA13 + 132, // $CA14 + 132, // $CA15 + 132, // $CA16 + 132, // $CA17 + 132, // $CA18 + 132, // $CA19 + 132, // $CA1A + 132, // $CA1B + 132, // $CA1C + 132, // $CA1D + 132, // $CA1E + 132, // $CA1F + 132, // $CA20 + 132, // $CA21 + 132, // $CA22 + 132, // $CA23 + 132, // $CA24 + 132, // $CA25 + 132, // $CA26 + 132, // $CA27 + 132, // $CA28 + 132, // $CA29 + 132, // $CA2A + 132, // $CA2B + 132, // $CA2C + 132, // $CA2D + 132, // $CA2E + 132, // $CA2F + 132, // $CA30 + 132, // $CA31 + 132, // $CA32 + 132, // $CA33 + 132, // $CA34 + 132, // $CA35 + 132, // $CA36 + 132, // $CA37 + 132, // $CA38 + 132, // $CA39 + 132, // $CA3A + 132, // $CA3B + 132, // $CA3C + 132, // $CA3D + 132, // $CA3E + 132, // $CA3F + 132, // $CA40 + 132, // $CA41 + 132, // $CA42 + 132, // $CA43 + 132, // $CA44 + 132, // $CA45 + 132, // $CA46 + 132, // $CA47 + 132, // $CA48 + 132, // $CA49 + 132, // $CA4A + 132, // $CA4B + 132, // $CA4C + 132, // $CA4D + 132, // $CA4E + 132, // $CA4F + 132, // $CA50 + 132, // $CA51 + 132, // $CA52 + 132, // $CA53 + 132, // $CA54 + 132, // $CA55 + 132, // $CA56 + 132, // $CA57 + 132, // $CA58 + 132, // $CA59 + 132, // $CA5A + 132, // $CA5B + 132, // $CA5C + 132, // $CA5D + 132, // $CA5E + 132, // $CA5F + 132, // $CA60 + 132, // $CA61 + 132, // $CA62 + 132, // $CA63 + 132, // $CA64 + 132, // $CA65 + 132, // $CA66 + 132, // $CA67 + 132, // $CA68 + 132, // $CA69 + 132, // $CA6A + 132, // $CA6B + 132, // $CA6C + 132, // $CA6D + 132, // $CA6E + 132, // $CA6F + 132, // $CA70 + 132, // $CA71 + 132, // $CA72 + 132, // $CA73 + 132, // $CA74 + 132, // $CA75 + 132, // $CA76 + 132, // $CA77 + 132, // $CA78 + 132, // $CA79 + 132, // $CA7A + 132, // $CA7B + 132, // $CA7C + 132, // $CA7D + 132, // $CA7E + 132, // $CA7F + 132, // $CA80 + 132, // $CA81 + 132, // $CA82 + 132, // $CA83 + 132, // $CA84 + 132, // $CA85 + 132, // $CA86 + 132, // $CA87 + 132, // $CA88 + 132, // $CA89 + 132, // $CA8A + 132, // $CA8B + 132, // $CA8C + 132, // $CA8D + 132, // $CA8E + 132, // $CA8F + 132, // $CA90 + 132, // $CA91 + 132, // $CA92 + 132, // $CA93 + 132, // $CA94 + 132, // $CA95 + 132, // $CA96 + 132, // $CA97 + 132, // $CA98 + 132, // $CA99 + 132, // $CA9A + 132, // $CA9B + 132, // $CA9C + 132, // $CA9D + 132, // $CA9E + 132, // $CA9F + 132, // $CAA0 + 132, // $CAA1 + 132, // $CAA2 + 132, // $CAA3 + 132, // $CAA4 + 132, // $CAA5 + 132, // $CAA6 + 132, // $CAA7 + 132, // $CAA8 + 132, // $CAA9 + 132, // $CAAA + 132, // $CAAB + 132, // $CAAC + 132, // $CAAD + 132, // $CAAE + 132, // $CAAF + 132, // $CAB0 + 132, // $CAB1 + 132, // $CAB2 + 132, // $CAB3 + 132, // $CAB4 + 132, // $CAB5 + 132, // $CAB6 + 132, // $CAB7 + 132, // $CAB8 + 132, // $CAB9 + 132, // $CABA + 132, // $CABB + 132, // $CABC + 132, // $CABD + 132, // $CABE + 132, // $CABF + 132, // $CAC0 + 132, // $CAC1 + 132, // $CAC2 + 132, // $CAC3 + 132, // $CAC4 + 132, // $CAC5 + 132, // $CAC6 + 132, // $CAC7 + 132, // $CAC8 + 132, // $CAC9 + 132, // $CACA + 132, // $CACB + 132, // $CACC + 132, // $CACD + 132, // $CACE + 132, // $CACF + 132, // $CAD0 + 132, // $CAD1 + 132, // $CAD2 + 132, // $CAD3 + 132, // $CAD4 + 132, // $CAD5 + 132, // $CAD6 + 132, // $CAD7 + 132, // $CAD8 + 132, // $CAD9 + 132, // $CADA + 132, // $CADB + 132, // $CADC + 132, // $CADD + 132, // $CADE + 132, // $CADF + 132, // $CAE0 + 132, // $CAE1 + 132, // $CAE2 + 132, // $CAE3 + 132, // $CAE4 + 132, // $CAE5 + 132, // $CAE6 + 132, // $CAE7 + 132, // $CAE8 + 132, // $CAE9 + 132, // $CAEA + 132, // $CAEB + 132, // $CAEC + 132, // $CAED + 132, // $CAEE + 132, // $CAEF + 132, // $CAF0 + 132, // $CAF1 + 132, // $CAF2 + 132, // $CAF3 + 132, // $CAF4 + 132, // $CAF5 + 132, // $CAF6 + 132, // $CAF7 + 132, // $CAF8 + 132, // $CAF9 + 132, // $CAFA + 132, // $CAFB + 132, // $CAFC + 132, // $CAFD + 132, // $CAFE + 132, // $CAFF + 132, // $CB00 + 132, // $CB01 + 132, // $CB02 + 132, // $CB03 + 132, // $CB04 + 132, // $CB05 + 132, // $CB06 + 132, // $CB07 + 132, // $CB08 + 132, // $CB09 + 132, // $CB0A + 132, // $CB0B + 132, // $CB0C + 132, // $CB0D + 132, // $CB0E + 132, // $CB0F + 132, // $CB10 + 132, // $CB11 + 132, // $CB12 + 132, // $CB13 + 132, // $CB14 + 132, // $CB15 + 132, // $CB16 + 132, // $CB17 + 132, // $CB18 + 132, // $CB19 + 132, // $CB1A + 132, // $CB1B + 132, // $CB1C + 132, // $CB1D + 132, // $CB1E + 132, // $CB1F + 132, // $CB20 + 132, // $CB21 + 132, // $CB22 + 132, // $CB23 + 132, // $CB24 + 132, // $CB25 + 132, // $CB26 + 132, // $CB27 + 132, // $CB28 + 132, // $CB29 + 132, // $CB2A + 132, // $CB2B + 132, // $CB2C + 132, // $CB2D + 132, // $CB2E + 132, // $CB2F + 132, // $CB30 + 132, // $CB31 + 132, // $CB32 + 132, // $CB33 + 132, // $CB34 + 132, // $CB35 + 132, // $CB36 + 132, // $CB37 + 132, // $CB38 + 132, // $CB39 + 132, // $CB3A + 132, // $CB3B + 132, // $CB3C + 132, // $CB3D + 132, // $CB3E + 132, // $CB3F + 132, // $CB40 + 132, // $CB41 + 132, // $CB42 + 132, // $CB43 + 132, // $CB44 + 132, // $CB45 + 132, // $CB46 + 132, // $CB47 + 132, // $CB48 + 132, // $CB49 + 132, // $CB4A + 132, // $CB4B + 132, // $CB4C + 132, // $CB4D + 132, // $CB4E + 132, // $CB4F + 132, // $CB50 + 132, // $CB51 + 132, // $CB52 + 132, // $CB53 + 132, // $CB54 + 132, // $CB55 + 132, // $CB56 + 132, // $CB57 + 132, // $CB58 + 132, // $CB59 + 132, // $CB5A + 132, // $CB5B + 132, // $CB5C + 132, // $CB5D + 132, // $CB5E + 132, // $CB5F + 132, // $CB60 + 132, // $CB61 + 132, // $CB62 + 132, // $CB63 + 132, // $CB64 + 132, // $CB65 + 132, // $CB66 + 132, // $CB67 + 132, // $CB68 + 132, // $CB69 + 132, // $CB6A + 132, // $CB6B + 132, // $CB6C + 132, // $CB6D + 132, // $CB6E + 132, // $CB6F + 132, // $CB70 + 132, // $CB71 + 132, // $CB72 + 132, // $CB73 + 132, // $CB74 + 132, // $CB75 + 132, // $CB76 + 132, // $CB77 + 132, // $CB78 + 132, // $CB79 + 132, // $CB7A + 132, // $CB7B + 132, // $CB7C + 132, // $CB7D + 132, // $CB7E + 132, // $CB7F + 132, // $CB80 + 132, // $CB81 + 132, // $CB82 + 132, // $CB83 + 132, // $CB84 + 132, // $CB85 + 132, // $CB86 + 132, // $CB87 + 132, // $CB88 + 132, // $CB89 + 132, // $CB8A + 132, // $CB8B + 132, // $CB8C + 132, // $CB8D + 132, // $CB8E + 132, // $CB8F + 132, // $CB90 + 132, // $CB91 + 132, // $CB92 + 132, // $CB93 + 132, // $CB94 + 132, // $CB95 + 132, // $CB96 + 132, // $CB97 + 132, // $CB98 + 132, // $CB99 + 132, // $CB9A + 132, // $CB9B + 132, // $CB9C + 132, // $CB9D + 132, // $CB9E + 132, // $CB9F + 132, // $CBA0 + 132, // $CBA1 + 132, // $CBA2 + 132, // $CBA3 + 132, // $CBA4 + 132, // $CBA5 + 132, // $CBA6 + 132, // $CBA7 + 132, // $CBA8 + 132, // $CBA9 + 132, // $CBAA + 132, // $CBAB + 132, // $CBAC + 132, // $CBAD + 132, // $CBAE + 132, // $CBAF + 132, // $CBB0 + 132, // $CBB1 + 132, // $CBB2 + 132, // $CBB3 + 132, // $CBB4 + 132, // $CBB5 + 132, // $CBB6 + 132, // $CBB7 + 132, // $CBB8 + 132, // $CBB9 + 132, // $CBBA + 132, // $CBBB + 132, // $CBBC + 132, // $CBBD + 132, // $CBBE + 132, // $CBBF + 132, // $CBC0 + 132, // $CBC1 + 132, // $CBC2 + 132, // $CBC3 + 132, // $CBC4 + 132, // $CBC5 + 132, // $CBC6 + 132, // $CBC7 + 132, // $CBC8 + 132, // $CBC9 + 132, // $CBCA + 132, // $CBCB + 132, // $CBCC + 132, // $CBCD + 132, // $CBCE + 132, // $CBCF + 132, // $CBD0 + 132, // $CBD1 + 132, // $CBD2 + 132, // $CBD3 + 132, // $CBD4 + 132, // $CBD5 + 132, // $CBD6 + 132, // $CBD7 + 132, // $CBD8 + 132, // $CBD9 + 132, // $CBDA + 132, // $CBDB + 132, // $CBDC + 132, // $CBDD + 132, // $CBDE + 132, // $CBDF + 132, // $CBE0 + 132, // $CBE1 + 132, // $CBE2 + 132, // $CBE3 + 132, // $CBE4 + 132, // $CBE5 + 132, // $CBE6 + 132, // $CBE7 + 132, // $CBE8 + 132, // $CBE9 + 132, // $CBEA + 132, // $CBEB + 132, // $CBEC + 132, // $CBED + 132, // $CBEE + 132, // $CBEF + 132, // $CBF0 + 132, // $CBF1 + 132, // $CBF2 + 132, // $CBF3 + 132, // $CBF4 + 132, // $CBF5 + 132, // $CBF6 + 132, // $CBF7 + 132, // $CBF8 + 132, // $CBF9 + 132, // $CBFA + 132, // $CBFB + 132, // $CBFC + 132, // $CBFD + 132, // $CBFE + 132, // $CBFF + 132, // $CC00 + 132, // $CC01 + 132, // $CC02 + 132, // $CC03 + 132, // $CC04 + 132, // $CC05 + 132, // $CC06 + 132, // $CC07 + 132, // $CC08 + 132, // $CC09 + 132, // $CC0A + 132, // $CC0B + 132, // $CC0C + 132, // $CC0D + 132, // $CC0E + 132, // $CC0F + 132, // $CC10 + 132, // $CC11 + 132, // $CC12 + 132, // $CC13 + 132, // $CC14 + 132, // $CC15 + 132, // $CC16 + 132, // $CC17 + 132, // $CC18 + 132, // $CC19 + 132, // $CC1A + 132, // $CC1B + 132, // $CC1C + 132, // $CC1D + 132, // $CC1E + 132, // $CC1F + 132, // $CC20 + 132, // $CC21 + 132, // $CC22 + 132, // $CC23 + 132, // $CC24 + 132, // $CC25 + 132, // $CC26 + 132, // $CC27 + 132, // $CC28 + 132, // $CC29 + 132, // $CC2A + 132, // $CC2B + 132, // $CC2C + 132, // $CC2D + 132, // $CC2E + 132, // $CC2F + 132, // $CC30 + 132, // $CC31 + 132, // $CC32 + 132, // $CC33 + 132, // $CC34 + 132, // $CC35 + 132, // $CC36 + 132, // $CC37 + 132, // $CC38 + 132, // $CC39 + 132, // $CC3A + 132, // $CC3B + 132, // $CC3C + 132, // $CC3D + 132, // $CC3E + 132, // $CC3F + 132, // $CC40 + 132, // $CC41 + 132, // $CC42 + 132, // $CC43 + 132, // $CC44 + 132, // $CC45 + 132, // $CC46 + 132, // $CC47 + 132, // $CC48 + 132, // $CC49 + 132, // $CC4A + 132, // $CC4B + 132, // $CC4C + 132, // $CC4D + 132, // $CC4E + 132, // $CC4F + 132, // $CC50 + 132, // $CC51 + 132, // $CC52 + 132, // $CC53 + 132, // $CC54 + 132, // $CC55 + 132, // $CC56 + 132, // $CC57 + 132, // $CC58 + 132, // $CC59 + 132, // $CC5A + 132, // $CC5B + 132, // $CC5C + 132, // $CC5D + 132, // $CC5E + 132, // $CC5F + 132, // $CC60 + 132, // $CC61 + 132, // $CC62 + 132, // $CC63 + 132, // $CC64 + 132, // $CC65 + 132, // $CC66 + 132, // $CC67 + 132, // $CC68 + 132, // $CC69 + 132, // $CC6A + 132, // $CC6B + 132, // $CC6C + 132, // $CC6D + 132, // $CC6E + 132, // $CC6F + 132, // $CC70 + 132, // $CC71 + 132, // $CC72 + 132, // $CC73 + 132, // $CC74 + 132, // $CC75 + 132, // $CC76 + 132, // $CC77 + 132, // $CC78 + 132, // $CC79 + 132, // $CC7A + 132, // $CC7B + 132, // $CC7C + 132, // $CC7D + 132, // $CC7E + 132, // $CC7F + 132, // $CC80 + 132, // $CC81 + 132, // $CC82 + 132, // $CC83 + 132, // $CC84 + 132, // $CC85 + 132, // $CC86 + 132, // $CC87 + 132, // $CC88 + 132, // $CC89 + 132, // $CC8A + 132, // $CC8B + 132, // $CC8C + 132, // $CC8D + 132, // $CC8E + 132, // $CC8F + 132, // $CC90 + 132, // $CC91 + 132, // $CC92 + 132, // $CC93 + 132, // $CC94 + 132, // $CC95 + 132, // $CC96 + 132, // $CC97 + 132, // $CC98 + 132, // $CC99 + 132, // $CC9A + 132, // $CC9B + 132, // $CC9C + 132, // $CC9D + 132, // $CC9E + 132, // $CC9F + 132, // $CCA0 + 132, // $CCA1 + 132, // $CCA2 + 132, // $CCA3 + 132, // $CCA4 + 132, // $CCA5 + 132, // $CCA6 + 132, // $CCA7 + 132, // $CCA8 + 132, // $CCA9 + 132, // $CCAA + 132, // $CCAB + 132, // $CCAC + 132, // $CCAD + 132, // $CCAE + 132, // $CCAF + 132, // $CCB0 + 132, // $CCB1 + 132, // $CCB2 + 132, // $CCB3 + 132, // $CCB4 + 132, // $CCB5 + 132, // $CCB6 + 132, // $CCB7 + 132, // $CCB8 + 132, // $CCB9 + 132, // $CCBA + 132, // $CCBB + 132, // $CCBC + 132, // $CCBD + 132, // $CCBE + 132, // $CCBF + 132, // $CCC0 + 132, // $CCC1 + 132, // $CCC2 + 132, // $CCC3 + 132, // $CCC4 + 132, // $CCC5 + 132, // $CCC6 + 132, // $CCC7 + 132, // $CCC8 + 132, // $CCC9 + 132, // $CCCA + 132, // $CCCB + 132, // $CCCC + 132, // $CCCD + 132, // $CCCE + 132, // $CCCF + 132, // $CCD0 + 132, // $CCD1 + 132, // $CCD2 + 132, // $CCD3 + 132, // $CCD4 + 132, // $CCD5 + 132, // $CCD6 + 132, // $CCD7 + 132, // $CCD8 + 132, // $CCD9 + 132, // $CCDA + 132, // $CCDB + 132, // $CCDC + 132, // $CCDD + 132, // $CCDE + 132, // $CCDF + 132, // $CCE0 + 132, // $CCE1 + 132, // $CCE2 + 132, // $CCE3 + 132, // $CCE4 + 132, // $CCE5 + 132, // $CCE6 + 132, // $CCE7 + 132, // $CCE8 + 132, // $CCE9 + 132, // $CCEA + 132, // $CCEB + 132, // $CCEC + 132, // $CCED + 132, // $CCEE + 132, // $CCEF + 132, // $CCF0 + 132, // $CCF1 + 132, // $CCF2 + 132, // $CCF3 + 132, // $CCF4 + 132, // $CCF5 + 132, // $CCF6 + 132, // $CCF7 + 132, // $CCF8 + 132, // $CCF9 + 132, // $CCFA + 132, // $CCFB + 132, // $CCFC + 132, // $CCFD + 132, // $CCFE + 132, // $CCFF + 132, // $CD00 + 132, // $CD01 + 132, // $CD02 + 132, // $CD03 + 132, // $CD04 + 132, // $CD05 + 132, // $CD06 + 132, // $CD07 + 132, // $CD08 + 132, // $CD09 + 132, // $CD0A + 132, // $CD0B + 132, // $CD0C + 132, // $CD0D + 132, // $CD0E + 132, // $CD0F + 132, // $CD10 + 132, // $CD11 + 132, // $CD12 + 132, // $CD13 + 132, // $CD14 + 132, // $CD15 + 132, // $CD16 + 132, // $CD17 + 132, // $CD18 + 132, // $CD19 + 132, // $CD1A + 132, // $CD1B + 132, // $CD1C + 132, // $CD1D + 132, // $CD1E + 132, // $CD1F + 132, // $CD20 + 132, // $CD21 + 132, // $CD22 + 132, // $CD23 + 132, // $CD24 + 132, // $CD25 + 132, // $CD26 + 132, // $CD27 + 132, // $CD28 + 132, // $CD29 + 132, // $CD2A + 132, // $CD2B + 132, // $CD2C + 132, // $CD2D + 132, // $CD2E + 132, // $CD2F + 132, // $CD30 + 132, // $CD31 + 132, // $CD32 + 132, // $CD33 + 132, // $CD34 + 132, // $CD35 + 132, // $CD36 + 132, // $CD37 + 132, // $CD38 + 132, // $CD39 + 132, // $CD3A + 132, // $CD3B + 132, // $CD3C + 132, // $CD3D + 132, // $CD3E + 132, // $CD3F + 132, // $CD40 + 132, // $CD41 + 132, // $CD42 + 132, // $CD43 + 132, // $CD44 + 132, // $CD45 + 132, // $CD46 + 132, // $CD47 + 132, // $CD48 + 132, // $CD49 + 132, // $CD4A + 132, // $CD4B + 132, // $CD4C + 132, // $CD4D + 132, // $CD4E + 132, // $CD4F + 132, // $CD50 + 132, // $CD51 + 132, // $CD52 + 132, // $CD53 + 132, // $CD54 + 132, // $CD55 + 132, // $CD56 + 132, // $CD57 + 132, // $CD58 + 132, // $CD59 + 132, // $CD5A + 132, // $CD5B + 132, // $CD5C + 132, // $CD5D + 132, // $CD5E + 132, // $CD5F + 132, // $CD60 + 132, // $CD61 + 132, // $CD62 + 132, // $CD63 + 132, // $CD64 + 132, // $CD65 + 132, // $CD66 + 132, // $CD67 + 132, // $CD68 + 132, // $CD69 + 132, // $CD6A + 132, // $CD6B + 132, // $CD6C + 132, // $CD6D + 132, // $CD6E + 132, // $CD6F + 132, // $CD70 + 132, // $CD71 + 132, // $CD72 + 132, // $CD73 + 132, // $CD74 + 132, // $CD75 + 132, // $CD76 + 132, // $CD77 + 132, // $CD78 + 132, // $CD79 + 132, // $CD7A + 132, // $CD7B + 132, // $CD7C + 132, // $CD7D + 132, // $CD7E + 132, // $CD7F + 132, // $CD80 + 132, // $CD81 + 132, // $CD82 + 132, // $CD83 + 132, // $CD84 + 132, // $CD85 + 132, // $CD86 + 132, // $CD87 + 132, // $CD88 + 132, // $CD89 + 132, // $CD8A + 132, // $CD8B + 132, // $CD8C + 132, // $CD8D + 132, // $CD8E + 132, // $CD8F + 132, // $CD90 + 132, // $CD91 + 132, // $CD92 + 132, // $CD93 + 132, // $CD94 + 132, // $CD95 + 132, // $CD96 + 132, // $CD97 + 132, // $CD98 + 132, // $CD99 + 132, // $CD9A + 132, // $CD9B + 132, // $CD9C + 132, // $CD9D + 132, // $CD9E + 132, // $CD9F + 132, // $CDA0 + 132, // $CDA1 + 132, // $CDA2 + 132, // $CDA3 + 132, // $CDA4 + 132, // $CDA5 + 132, // $CDA6 + 132, // $CDA7 + 132, // $CDA8 + 132, // $CDA9 + 132, // $CDAA + 132, // $CDAB + 132, // $CDAC + 132, // $CDAD + 132, // $CDAE + 132, // $CDAF + 132, // $CDB0 + 132, // $CDB1 + 132, // $CDB2 + 132, // $CDB3 + 132, // $CDB4 + 132, // $CDB5 + 132, // $CDB6 + 132, // $CDB7 + 132, // $CDB8 + 132, // $CDB9 + 132, // $CDBA + 132, // $CDBB + 132, // $CDBC + 132, // $CDBD + 132, // $CDBE + 132, // $CDBF + 132, // $CDC0 + 132, // $CDC1 + 132, // $CDC2 + 132, // $CDC3 + 132, // $CDC4 + 132, // $CDC5 + 132, // $CDC6 + 132, // $CDC7 + 132, // $CDC8 + 132, // $CDC9 + 132, // $CDCA + 132, // $CDCB + 132, // $CDCC + 132, // $CDCD + 132, // $CDCE + 132, // $CDCF + 132, // $CDD0 + 132, // $CDD1 + 132, // $CDD2 + 132, // $CDD3 + 132, // $CDD4 + 132, // $CDD5 + 132, // $CDD6 + 132, // $CDD7 + 132, // $CDD8 + 132, // $CDD9 + 132, // $CDDA + 132, // $CDDB + 132, // $CDDC + 132, // $CDDD + 132, // $CDDE + 132, // $CDDF + 132, // $CDE0 + 132, // $CDE1 + 132, // $CDE2 + 132, // $CDE3 + 132, // $CDE4 + 132, // $CDE5 + 132, // $CDE6 + 132, // $CDE7 + 132, // $CDE8 + 132, // $CDE9 + 132, // $CDEA + 132, // $CDEB + 132, // $CDEC + 132, // $CDED + 132, // $CDEE + 132, // $CDEF + 132, // $CDF0 + 132, // $CDF1 + 132, // $CDF2 + 132, // $CDF3 + 132, // $CDF4 + 132, // $CDF5 + 132, // $CDF6 + 132, // $CDF7 + 132, // $CDF8 + 132, // $CDF9 + 132, // $CDFA + 132, // $CDFB + 132, // $CDFC + 132, // $CDFD + 132, // $CDFE + 132, // $CDFF + 132, // $CE00 + 132, // $CE01 + 132, // $CE02 + 132, // $CE03 + 132, // $CE04 + 132, // $CE05 + 132, // $CE06 + 132, // $CE07 + 132, // $CE08 + 132, // $CE09 + 132, // $CE0A + 132, // $CE0B + 132, // $CE0C + 132, // $CE0D + 132, // $CE0E + 132, // $CE0F + 132, // $CE10 + 132, // $CE11 + 132, // $CE12 + 132, // $CE13 + 132, // $CE14 + 132, // $CE15 + 132, // $CE16 + 132, // $CE17 + 132, // $CE18 + 132, // $CE19 + 132, // $CE1A + 132, // $CE1B + 132, // $CE1C + 132, // $CE1D + 132, // $CE1E + 132, // $CE1F + 132, // $CE20 + 132, // $CE21 + 132, // $CE22 + 132, // $CE23 + 132, // $CE24 + 132, // $CE25 + 132, // $CE26 + 132, // $CE27 + 132, // $CE28 + 132, // $CE29 + 132, // $CE2A + 132, // $CE2B + 132, // $CE2C + 132, // $CE2D + 132, // $CE2E + 132, // $CE2F + 132, // $CE30 + 132, // $CE31 + 132, // $CE32 + 132, // $CE33 + 132, // $CE34 + 132, // $CE35 + 132, // $CE36 + 132, // $CE37 + 132, // $CE38 + 132, // $CE39 + 132, // $CE3A + 132, // $CE3B + 132, // $CE3C + 132, // $CE3D + 132, // $CE3E + 132, // $CE3F + 132, // $CE40 + 132, // $CE41 + 132, // $CE42 + 132, // $CE43 + 132, // $CE44 + 132, // $CE45 + 132, // $CE46 + 132, // $CE47 + 132, // $CE48 + 132, // $CE49 + 132, // $CE4A + 132, // $CE4B + 132, // $CE4C + 132, // $CE4D + 132, // $CE4E + 132, // $CE4F + 132, // $CE50 + 132, // $CE51 + 132, // $CE52 + 132, // $CE53 + 132, // $CE54 + 132, // $CE55 + 132, // $CE56 + 132, // $CE57 + 132, // $CE58 + 132, // $CE59 + 132, // $CE5A + 132, // $CE5B + 132, // $CE5C + 132, // $CE5D + 132, // $CE5E + 132, // $CE5F + 132, // $CE60 + 132, // $CE61 + 132, // $CE62 + 132, // $CE63 + 132, // $CE64 + 132, // $CE65 + 132, // $CE66 + 132, // $CE67 + 132, // $CE68 + 132, // $CE69 + 132, // $CE6A + 132, // $CE6B + 132, // $CE6C + 132, // $CE6D + 132, // $CE6E + 132, // $CE6F + 132, // $CE70 + 132, // $CE71 + 132, // $CE72 + 132, // $CE73 + 132, // $CE74 + 132, // $CE75 + 132, // $CE76 + 132, // $CE77 + 132, // $CE78 + 132, // $CE79 + 132, // $CE7A + 132, // $CE7B + 132, // $CE7C + 132, // $CE7D + 132, // $CE7E + 132, // $CE7F + 132, // $CE80 + 132, // $CE81 + 132, // $CE82 + 132, // $CE83 + 132, // $CE84 + 132, // $CE85 + 132, // $CE86 + 132, // $CE87 + 132, // $CE88 + 132, // $CE89 + 132, // $CE8A + 132, // $CE8B + 132, // $CE8C + 132, // $CE8D + 132, // $CE8E + 132, // $CE8F + 132, // $CE90 + 132, // $CE91 + 132, // $CE92 + 132, // $CE93 + 132, // $CE94 + 132, // $CE95 + 132, // $CE96 + 132, // $CE97 + 132, // $CE98 + 132, // $CE99 + 132, // $CE9A + 132, // $CE9B + 132, // $CE9C + 132, // $CE9D + 132, // $CE9E + 132, // $CE9F + 132, // $CEA0 + 132, // $CEA1 + 132, // $CEA2 + 132, // $CEA3 + 132, // $CEA4 + 132, // $CEA5 + 132, // $CEA6 + 132, // $CEA7 + 132, // $CEA8 + 132, // $CEA9 + 132, // $CEAA + 132, // $CEAB + 132, // $CEAC + 132, // $CEAD + 132, // $CEAE + 132, // $CEAF + 132, // $CEB0 + 132, // $CEB1 + 132, // $CEB2 + 132, // $CEB3 + 132, // $CEB4 + 132, // $CEB5 + 132, // $CEB6 + 132, // $CEB7 + 132, // $CEB8 + 132, // $CEB9 + 132, // $CEBA + 132, // $CEBB + 132, // $CEBC + 132, // $CEBD + 132, // $CEBE + 132, // $CEBF + 132, // $CEC0 + 132, // $CEC1 + 132, // $CEC2 + 132, // $CEC3 + 132, // $CEC4 + 132, // $CEC5 + 132, // $CEC6 + 132, // $CEC7 + 132, // $CEC8 + 132, // $CEC9 + 132, // $CECA + 132, // $CECB + 132, // $CECC + 132, // $CECD + 132, // $CECE + 132, // $CECF + 132, // $CED0 + 132, // $CED1 + 132, // $CED2 + 132, // $CED3 + 132, // $CED4 + 132, // $CED5 + 132, // $CED6 + 132, // $CED7 + 132, // $CED8 + 132, // $CED9 + 132, // $CEDA + 132, // $CEDB + 132, // $CEDC + 132, // $CEDD + 132, // $CEDE + 132, // $CEDF + 132, // $CEE0 + 132, // $CEE1 + 132, // $CEE2 + 132, // $CEE3 + 132, // $CEE4 + 132, // $CEE5 + 132, // $CEE6 + 132, // $CEE7 + 132, // $CEE8 + 132, // $CEE9 + 132, // $CEEA + 132, // $CEEB + 132, // $CEEC + 132, // $CEED + 132, // $CEEE + 132, // $CEEF + 132, // $CEF0 + 132, // $CEF1 + 132, // $CEF2 + 132, // $CEF3 + 132, // $CEF4 + 132, // $CEF5 + 132, // $CEF6 + 132, // $CEF7 + 132, // $CEF8 + 132, // $CEF9 + 132, // $CEFA + 132, // $CEFB + 132, // $CEFC + 132, // $CEFD + 132, // $CEFE + 132, // $CEFF + 132, // $CF00 + 132, // $CF01 + 132, // $CF02 + 132, // $CF03 + 132, // $CF04 + 132, // $CF05 + 132, // $CF06 + 132, // $CF07 + 132, // $CF08 + 132, // $CF09 + 132, // $CF0A + 132, // $CF0B + 132, // $CF0C + 132, // $CF0D + 132, // $CF0E + 132, // $CF0F + 132, // $CF10 + 132, // $CF11 + 132, // $CF12 + 132, // $CF13 + 132, // $CF14 + 132, // $CF15 + 132, // $CF16 + 132, // $CF17 + 132, // $CF18 + 132, // $CF19 + 132, // $CF1A + 132, // $CF1B + 132, // $CF1C + 132, // $CF1D + 132, // $CF1E + 132, // $CF1F + 132, // $CF20 + 132, // $CF21 + 132, // $CF22 + 132, // $CF23 + 132, // $CF24 + 132, // $CF25 + 132, // $CF26 + 132, // $CF27 + 132, // $CF28 + 132, // $CF29 + 132, // $CF2A + 132, // $CF2B + 132, // $CF2C + 132, // $CF2D + 132, // $CF2E + 132, // $CF2F + 132, // $CF30 + 132, // $CF31 + 132, // $CF32 + 132, // $CF33 + 132, // $CF34 + 132, // $CF35 + 132, // $CF36 + 132, // $CF37 + 132, // $CF38 + 132, // $CF39 + 132, // $CF3A + 132, // $CF3B + 132, // $CF3C + 132, // $CF3D + 132, // $CF3E + 132, // $CF3F + 132, // $CF40 + 132, // $CF41 + 132, // $CF42 + 132, // $CF43 + 132, // $CF44 + 132, // $CF45 + 132, // $CF46 + 132, // $CF47 + 132, // $CF48 + 132, // $CF49 + 132, // $CF4A + 132, // $CF4B + 132, // $CF4C + 132, // $CF4D + 132, // $CF4E + 132, // $CF4F + 132, // $CF50 + 132, // $CF51 + 132, // $CF52 + 132, // $CF53 + 132, // $CF54 + 132, // $CF55 + 132, // $CF56 + 132, // $CF57 + 132, // $CF58 + 132, // $CF59 + 132, // $CF5A + 132, // $CF5B + 132, // $CF5C + 132, // $CF5D + 132, // $CF5E + 132, // $CF5F + 132, // $CF60 + 132, // $CF61 + 132, // $CF62 + 132, // $CF63 + 132, // $CF64 + 132, // $CF65 + 132, // $CF66 + 132, // $CF67 + 132, // $CF68 + 132, // $CF69 + 132, // $CF6A + 132, // $CF6B + 132, // $CF6C + 132, // $CF6D + 132, // $CF6E + 132, // $CF6F + 132, // $CF70 + 132, // $CF71 + 132, // $CF72 + 132, // $CF73 + 132, // $CF74 + 132, // $CF75 + 132, // $CF76 + 132, // $CF77 + 132, // $CF78 + 132, // $CF79 + 132, // $CF7A + 132, // $CF7B + 132, // $CF7C + 132, // $CF7D + 132, // $CF7E + 132, // $CF7F + 132, // $CF80 + 132, // $CF81 + 132, // $CF82 + 132, // $CF83 + 132, // $CF84 + 132, // $CF85 + 132, // $CF86 + 132, // $CF87 + 132, // $CF88 + 132, // $CF89 + 132, // $CF8A + 132, // $CF8B + 132, // $CF8C + 132, // $CF8D + 132, // $CF8E + 132, // $CF8F + 132, // $CF90 + 132, // $CF91 + 132, // $CF92 + 132, // $CF93 + 132, // $CF94 + 132, // $CF95 + 132, // $CF96 + 132, // $CF97 + 132, // $CF98 + 132, // $CF99 + 132, // $CF9A + 132, // $CF9B + 132, // $CF9C + 132, // $CF9D + 132, // $CF9E + 132, // $CF9F + 132, // $CFA0 + 132, // $CFA1 + 132, // $CFA2 + 132, // $CFA3 + 132, // $CFA4 + 132, // $CFA5 + 132, // $CFA6 + 132, // $CFA7 + 132, // $CFA8 + 132, // $CFA9 + 132, // $CFAA + 132, // $CFAB + 132, // $CFAC + 132, // $CFAD + 132, // $CFAE + 132, // $CFAF + 132, // $CFB0 + 132, // $CFB1 + 132, // $CFB2 + 132, // $CFB3 + 132, // $CFB4 + 132, // $CFB5 + 132, // $CFB6 + 132, // $CFB7 + 132, // $CFB8 + 132, // $CFB9 + 132, // $CFBA + 132, // $CFBB + 132, // $CFBC + 132, // $CFBD + 132, // $CFBE + 132, // $CFBF + 132, // $CFC0 + 132, // $CFC1 + 132, // $CFC2 + 132, // $CFC3 + 132, // $CFC4 + 132, // $CFC5 + 132, // $CFC6 + 132, // $CFC7 + 132, // $CFC8 + 132, // $CFC9 + 132, // $CFCA + 132, // $CFCB + 132, // $CFCC + 132, // $CFCD + 132, // $CFCE + 132, // $CFCF + 132, // $CFD0 + 132, // $CFD1 + 132, // $CFD2 + 132, // $CFD3 + 132, // $CFD4 + 132, // $CFD5 + 132, // $CFD6 + 132, // $CFD7 + 132, // $CFD8 + 132, // $CFD9 + 132, // $CFDA + 132, // $CFDB + 132, // $CFDC + 132, // $CFDD + 132, // $CFDE + 132, // $CFDF + 132, // $CFE0 + 132, // $CFE1 + 132, // $CFE2 + 132, // $CFE3 + 132, // $CFE4 + 132, // $CFE5 + 132, // $CFE6 + 132, // $CFE7 + 132, // $CFE8 + 132, // $CFE9 + 132, // $CFEA + 132, // $CFEB + 132, // $CFEC + 132, // $CFED + 132, // $CFEE + 132, // $CFEF + 132, // $CFF0 + 132, // $CFF1 + 132, // $CFF2 + 132, // $CFF3 + 132, // $CFF4 + 132, // $CFF5 + 132, // $CFF6 + 132, // $CFF7 + 132, // $CFF8 + 132, // $CFF9 + 132, // $CFFA + 132, // $CFFB + 132, // $CFFC + 132, // $CFFD + 132, // $CFFE + 132, // $CFFF + 132, // $D000 + 132, // $D001 + 132, // $D002 + 132, // $D003 + 132, // $D004 + 132, // $D005 + 132, // $D006 + 132, // $D007 + 132, // $D008 + 132, // $D009 + 132, // $D00A + 132, // $D00B + 132, // $D00C + 132, // $D00D + 132, // $D00E + 132, // $D00F + 132, // $D010 + 132, // $D011 + 132, // $D012 + 132, // $D013 + 132, // $D014 + 132, // $D015 + 132, // $D016 + 132, // $D017 + 132, // $D018 + 132, // $D019 + 132, // $D01A + 132, // $D01B + 132, // $D01C + 132, // $D01D + 132, // $D01E + 132, // $D01F + 132, // $D020 + 132, // $D021 + 132, // $D022 + 132, // $D023 + 132, // $D024 + 132, // $D025 + 132, // $D026 + 132, // $D027 + 132, // $D028 + 132, // $D029 + 132, // $D02A + 132, // $D02B + 132, // $D02C + 132, // $D02D + 132, // $D02E + 132, // $D02F + 132, // $D030 + 132, // $D031 + 132, // $D032 + 132, // $D033 + 132, // $D034 + 132, // $D035 + 132, // $D036 + 132, // $D037 + 132, // $D038 + 132, // $D039 + 132, // $D03A + 132, // $D03B + 132, // $D03C + 132, // $D03D + 132, // $D03E + 132, // $D03F + 132, // $D040 + 132, // $D041 + 132, // $D042 + 132, // $D043 + 132, // $D044 + 132, // $D045 + 132, // $D046 + 132, // $D047 + 132, // $D048 + 132, // $D049 + 132, // $D04A + 132, // $D04B + 132, // $D04C + 132, // $D04D + 132, // $D04E + 132, // $D04F + 132, // $D050 + 132, // $D051 + 132, // $D052 + 132, // $D053 + 132, // $D054 + 132, // $D055 + 132, // $D056 + 132, // $D057 + 132, // $D058 + 132, // $D059 + 132, // $D05A + 132, // $D05B + 132, // $D05C + 132, // $D05D + 132, // $D05E + 132, // $D05F + 132, // $D060 + 132, // $D061 + 132, // $D062 + 132, // $D063 + 132, // $D064 + 132, // $D065 + 132, // $D066 + 132, // $D067 + 132, // $D068 + 132, // $D069 + 132, // $D06A + 132, // $D06B + 132, // $D06C + 132, // $D06D + 132, // $D06E + 132, // $D06F + 132, // $D070 + 132, // $D071 + 132, // $D072 + 132, // $D073 + 132, // $D074 + 132, // $D075 + 132, // $D076 + 132, // $D077 + 132, // $D078 + 132, // $D079 + 132, // $D07A + 132, // $D07B + 132, // $D07C + 132, // $D07D + 132, // $D07E + 132, // $D07F + 132, // $D080 + 132, // $D081 + 132, // $D082 + 132, // $D083 + 132, // $D084 + 132, // $D085 + 132, // $D086 + 132, // $D087 + 132, // $D088 + 132, // $D089 + 132, // $D08A + 132, // $D08B + 132, // $D08C + 132, // $D08D + 132, // $D08E + 132, // $D08F + 132, // $D090 + 132, // $D091 + 132, // $D092 + 132, // $D093 + 132, // $D094 + 132, // $D095 + 132, // $D096 + 132, // $D097 + 132, // $D098 + 132, // $D099 + 132, // $D09A + 132, // $D09B + 132, // $D09C + 132, // $D09D + 132, // $D09E + 132, // $D09F + 132, // $D0A0 + 132, // $D0A1 + 132, // $D0A2 + 132, // $D0A3 + 132, // $D0A4 + 132, // $D0A5 + 132, // $D0A6 + 132, // $D0A7 + 132, // $D0A8 + 132, // $D0A9 + 132, // $D0AA + 132, // $D0AB + 132, // $D0AC + 132, // $D0AD + 132, // $D0AE + 132, // $D0AF + 132, // $D0B0 + 132, // $D0B1 + 132, // $D0B2 + 132, // $D0B3 + 132, // $D0B4 + 132, // $D0B5 + 132, // $D0B6 + 132, // $D0B7 + 132, // $D0B8 + 132, // $D0B9 + 132, // $D0BA + 132, // $D0BB + 132, // $D0BC + 132, // $D0BD + 132, // $D0BE + 132, // $D0BF + 132, // $D0C0 + 132, // $D0C1 + 132, // $D0C2 + 132, // $D0C3 + 132, // $D0C4 + 132, // $D0C5 + 132, // $D0C6 + 132, // $D0C7 + 132, // $D0C8 + 132, // $D0C9 + 132, // $D0CA + 132, // $D0CB + 132, // $D0CC + 132, // $D0CD + 132, // $D0CE + 132, // $D0CF + 132, // $D0D0 + 132, // $D0D1 + 132, // $D0D2 + 132, // $D0D3 + 132, // $D0D4 + 132, // $D0D5 + 132, // $D0D6 + 132, // $D0D7 + 132, // $D0D8 + 132, // $D0D9 + 132, // $D0DA + 132, // $D0DB + 132, // $D0DC + 132, // $D0DD + 132, // $D0DE + 132, // $D0DF + 132, // $D0E0 + 132, // $D0E1 + 132, // $D0E2 + 132, // $D0E3 + 132, // $D0E4 + 132, // $D0E5 + 132, // $D0E6 + 132, // $D0E7 + 132, // $D0E8 + 132, // $D0E9 + 132, // $D0EA + 132, // $D0EB + 132, // $D0EC + 132, // $D0ED + 132, // $D0EE + 132, // $D0EF + 132, // $D0F0 + 132, // $D0F1 + 132, // $D0F2 + 132, // $D0F3 + 132, // $D0F4 + 132, // $D0F5 + 132, // $D0F6 + 132, // $D0F7 + 132, // $D0F8 + 132, // $D0F9 + 132, // $D0FA + 132, // $D0FB + 132, // $D0FC + 132, // $D0FD + 132, // $D0FE + 132, // $D0FF + 132, // $D100 + 132, // $D101 + 132, // $D102 + 132, // $D103 + 132, // $D104 + 132, // $D105 + 132, // $D106 + 132, // $D107 + 132, // $D108 + 132, // $D109 + 132, // $D10A + 132, // $D10B + 132, // $D10C + 132, // $D10D + 132, // $D10E + 132, // $D10F + 132, // $D110 + 132, // $D111 + 132, // $D112 + 132, // $D113 + 132, // $D114 + 132, // $D115 + 132, // $D116 + 132, // $D117 + 132, // $D118 + 132, // $D119 + 132, // $D11A + 132, // $D11B + 132, // $D11C + 132, // $D11D + 132, // $D11E + 132, // $D11F + 132, // $D120 + 132, // $D121 + 132, // $D122 + 132, // $D123 + 132, // $D124 + 132, // $D125 + 132, // $D126 + 132, // $D127 + 132, // $D128 + 132, // $D129 + 132, // $D12A + 132, // $D12B + 132, // $D12C + 132, // $D12D + 132, // $D12E + 132, // $D12F + 132, // $D130 + 132, // $D131 + 132, // $D132 + 132, // $D133 + 132, // $D134 + 132, // $D135 + 132, // $D136 + 132, // $D137 + 132, // $D138 + 132, // $D139 + 132, // $D13A + 132, // $D13B + 132, // $D13C + 132, // $D13D + 132, // $D13E + 132, // $D13F + 132, // $D140 + 132, // $D141 + 132, // $D142 + 132, // $D143 + 132, // $D144 + 132, // $D145 + 132, // $D146 + 132, // $D147 + 132, // $D148 + 132, // $D149 + 132, // $D14A + 132, // $D14B + 132, // $D14C + 132, // $D14D + 132, // $D14E + 132, // $D14F + 132, // $D150 + 132, // $D151 + 132, // $D152 + 132, // $D153 + 132, // $D154 + 132, // $D155 + 132, // $D156 + 132, // $D157 + 132, // $D158 + 132, // $D159 + 132, // $D15A + 132, // $D15B + 132, // $D15C + 132, // $D15D + 132, // $D15E + 132, // $D15F + 132, // $D160 + 132, // $D161 + 132, // $D162 + 132, // $D163 + 132, // $D164 + 132, // $D165 + 132, // $D166 + 132, // $D167 + 132, // $D168 + 132, // $D169 + 132, // $D16A + 132, // $D16B + 132, // $D16C + 132, // $D16D + 132, // $D16E + 132, // $D16F + 132, // $D170 + 132, // $D171 + 132, // $D172 + 132, // $D173 + 132, // $D174 + 132, // $D175 + 132, // $D176 + 132, // $D177 + 132, // $D178 + 132, // $D179 + 132, // $D17A + 132, // $D17B + 132, // $D17C + 132, // $D17D + 132, // $D17E + 132, // $D17F + 132, // $D180 + 132, // $D181 + 132, // $D182 + 132, // $D183 + 132, // $D184 + 132, // $D185 + 132, // $D186 + 132, // $D187 + 132, // $D188 + 132, // $D189 + 132, // $D18A + 132, // $D18B + 132, // $D18C + 132, // $D18D + 132, // $D18E + 132, // $D18F + 132, // $D190 + 132, // $D191 + 132, // $D192 + 132, // $D193 + 132, // $D194 + 132, // $D195 + 132, // $D196 + 132, // $D197 + 132, // $D198 + 132, // $D199 + 132, // $D19A + 132, // $D19B + 132, // $D19C + 132, // $D19D + 132, // $D19E + 132, // $D19F + 132, // $D1A0 + 132, // $D1A1 + 132, // $D1A2 + 132, // $D1A3 + 132, // $D1A4 + 132, // $D1A5 + 132, // $D1A6 + 132, // $D1A7 + 132, // $D1A8 + 132, // $D1A9 + 132, // $D1AA + 132, // $D1AB + 132, // $D1AC + 132, // $D1AD + 132, // $D1AE + 132, // $D1AF + 132, // $D1B0 + 132, // $D1B1 + 132, // $D1B2 + 132, // $D1B3 + 132, // $D1B4 + 132, // $D1B5 + 132, // $D1B6 + 132, // $D1B7 + 132, // $D1B8 + 132, // $D1B9 + 132, // $D1BA + 132, // $D1BB + 132, // $D1BC + 132, // $D1BD + 132, // $D1BE + 132, // $D1BF + 132, // $D1C0 + 132, // $D1C1 + 132, // $D1C2 + 132, // $D1C3 + 132, // $D1C4 + 132, // $D1C5 + 132, // $D1C6 + 132, // $D1C7 + 132, // $D1C8 + 132, // $D1C9 + 132, // $D1CA + 132, // $D1CB + 132, // $D1CC + 132, // $D1CD + 132, // $D1CE + 132, // $D1CF + 132, // $D1D0 + 132, // $D1D1 + 132, // $D1D2 + 132, // $D1D3 + 132, // $D1D4 + 132, // $D1D5 + 132, // $D1D6 + 132, // $D1D7 + 132, // $D1D8 + 132, // $D1D9 + 132, // $D1DA + 132, // $D1DB + 132, // $D1DC + 132, // $D1DD + 132, // $D1DE + 132, // $D1DF + 132, // $D1E0 + 132, // $D1E1 + 132, // $D1E2 + 132, // $D1E3 + 132, // $D1E4 + 132, // $D1E5 + 132, // $D1E6 + 132, // $D1E7 + 132, // $D1E8 + 132, // $D1E9 + 132, // $D1EA + 132, // $D1EB + 132, // $D1EC + 132, // $D1ED + 132, // $D1EE + 132, // $D1EF + 132, // $D1F0 + 132, // $D1F1 + 132, // $D1F2 + 132, // $D1F3 + 132, // $D1F4 + 132, // $D1F5 + 132, // $D1F6 + 132, // $D1F7 + 132, // $D1F8 + 132, // $D1F9 + 132, // $D1FA + 132, // $D1FB + 132, // $D1FC + 132, // $D1FD + 132, // $D1FE + 132, // $D1FF + 132, // $D200 + 132, // $D201 + 132, // $D202 + 132, // $D203 + 132, // $D204 + 132, // $D205 + 132, // $D206 + 132, // $D207 + 132, // $D208 + 132, // $D209 + 132, // $D20A + 132, // $D20B + 132, // $D20C + 132, // $D20D + 132, // $D20E + 132, // $D20F + 132, // $D210 + 132, // $D211 + 132, // $D212 + 132, // $D213 + 132, // $D214 + 132, // $D215 + 132, // $D216 + 132, // $D217 + 132, // $D218 + 132, // $D219 + 132, // $D21A + 132, // $D21B + 132, // $D21C + 132, // $D21D + 132, // $D21E + 132, // $D21F + 132, // $D220 + 132, // $D221 + 132, // $D222 + 132, // $D223 + 132, // $D224 + 132, // $D225 + 132, // $D226 + 132, // $D227 + 132, // $D228 + 132, // $D229 + 132, // $D22A + 132, // $D22B + 132, // $D22C + 132, // $D22D + 132, // $D22E + 132, // $D22F + 132, // $D230 + 132, // $D231 + 132, // $D232 + 132, // $D233 + 132, // $D234 + 132, // $D235 + 132, // $D236 + 132, // $D237 + 132, // $D238 + 132, // $D239 + 132, // $D23A + 132, // $D23B + 132, // $D23C + 132, // $D23D + 132, // $D23E + 132, // $D23F + 132, // $D240 + 132, // $D241 + 132, // $D242 + 132, // $D243 + 132, // $D244 + 132, // $D245 + 132, // $D246 + 132, // $D247 + 132, // $D248 + 132, // $D249 + 132, // $D24A + 132, // $D24B + 132, // $D24C + 132, // $D24D + 132, // $D24E + 132, // $D24F + 132, // $D250 + 132, // $D251 + 132, // $D252 + 132, // $D253 + 132, // $D254 + 132, // $D255 + 132, // $D256 + 132, // $D257 + 132, // $D258 + 132, // $D259 + 132, // $D25A + 132, // $D25B + 132, // $D25C + 132, // $D25D + 132, // $D25E + 132, // $D25F + 132, // $D260 + 132, // $D261 + 132, // $D262 + 132, // $D263 + 132, // $D264 + 132, // $D265 + 132, // $D266 + 132, // $D267 + 132, // $D268 + 132, // $D269 + 132, // $D26A + 132, // $D26B + 132, // $D26C + 132, // $D26D + 132, // $D26E + 132, // $D26F + 132, // $D270 + 132, // $D271 + 132, // $D272 + 132, // $D273 + 132, // $D274 + 132, // $D275 + 132, // $D276 + 132, // $D277 + 132, // $D278 + 132, // $D279 + 132, // $D27A + 132, // $D27B + 132, // $D27C + 132, // $D27D + 132, // $D27E + 132, // $D27F + 132, // $D280 + 132, // $D281 + 132, // $D282 + 132, // $D283 + 132, // $D284 + 132, // $D285 + 132, // $D286 + 132, // $D287 + 132, // $D288 + 132, // $D289 + 132, // $D28A + 132, // $D28B + 132, // $D28C + 132, // $D28D + 132, // $D28E + 132, // $D28F + 132, // $D290 + 132, // $D291 + 132, // $D292 + 132, // $D293 + 132, // $D294 + 132, // $D295 + 132, // $D296 + 132, // $D297 + 132, // $D298 + 132, // $D299 + 132, // $D29A + 132, // $D29B + 132, // $D29C + 132, // $D29D + 132, // $D29E + 132, // $D29F + 132, // $D2A0 + 132, // $D2A1 + 132, // $D2A2 + 132, // $D2A3 + 132, // $D2A4 + 132, // $D2A5 + 132, // $D2A6 + 132, // $D2A7 + 132, // $D2A8 + 132, // $D2A9 + 132, // $D2AA + 132, // $D2AB + 132, // $D2AC + 132, // $D2AD + 132, // $D2AE + 132, // $D2AF + 132, // $D2B0 + 132, // $D2B1 + 132, // $D2B2 + 132, // $D2B3 + 132, // $D2B4 + 132, // $D2B5 + 132, // $D2B6 + 132, // $D2B7 + 132, // $D2B8 + 132, // $D2B9 + 132, // $D2BA + 132, // $D2BB + 132, // $D2BC + 132, // $D2BD + 132, // $D2BE + 132, // $D2BF + 132, // $D2C0 + 132, // $D2C1 + 132, // $D2C2 + 132, // $D2C3 + 132, // $D2C4 + 132, // $D2C5 + 132, // $D2C6 + 132, // $D2C7 + 132, // $D2C8 + 132, // $D2C9 + 132, // $D2CA + 132, // $D2CB + 132, // $D2CC + 132, // $D2CD + 132, // $D2CE + 132, // $D2CF + 132, // $D2D0 + 132, // $D2D1 + 132, // $D2D2 + 132, // $D2D3 + 132, // $D2D4 + 132, // $D2D5 + 132, // $D2D6 + 132, // $D2D7 + 132, // $D2D8 + 132, // $D2D9 + 132, // $D2DA + 132, // $D2DB + 132, // $D2DC + 132, // $D2DD + 132, // $D2DE + 132, // $D2DF + 132, // $D2E0 + 132, // $D2E1 + 132, // $D2E2 + 132, // $D2E3 + 132, // $D2E4 + 132, // $D2E5 + 132, // $D2E6 + 132, // $D2E7 + 132, // $D2E8 + 132, // $D2E9 + 132, // $D2EA + 132, // $D2EB + 132, // $D2EC + 132, // $D2ED + 132, // $D2EE + 132, // $D2EF + 132, // $D2F0 + 132, // $D2F1 + 132, // $D2F2 + 132, // $D2F3 + 132, // $D2F4 + 132, // $D2F5 + 132, // $D2F6 + 132, // $D2F7 + 132, // $D2F8 + 132, // $D2F9 + 132, // $D2FA + 132, // $D2FB + 132, // $D2FC + 132, // $D2FD + 132, // $D2FE + 132, // $D2FF + 132, // $D300 + 132, // $D301 + 132, // $D302 + 132, // $D303 + 132, // $D304 + 132, // $D305 + 132, // $D306 + 132, // $D307 + 132, // $D308 + 132, // $D309 + 132, // $D30A + 132, // $D30B + 132, // $D30C + 132, // $D30D + 132, // $D30E + 132, // $D30F + 132, // $D310 + 132, // $D311 + 132, // $D312 + 132, // $D313 + 132, // $D314 + 132, // $D315 + 132, // $D316 + 132, // $D317 + 132, // $D318 + 132, // $D319 + 132, // $D31A + 132, // $D31B + 132, // $D31C + 132, // $D31D + 132, // $D31E + 132, // $D31F + 132, // $D320 + 132, // $D321 + 132, // $D322 + 132, // $D323 + 132, // $D324 + 132, // $D325 + 132, // $D326 + 132, // $D327 + 132, // $D328 + 132, // $D329 + 132, // $D32A + 132, // $D32B + 132, // $D32C + 132, // $D32D + 132, // $D32E + 132, // $D32F + 132, // $D330 + 132, // $D331 + 132, // $D332 + 132, // $D333 + 132, // $D334 + 132, // $D335 + 132, // $D336 + 132, // $D337 + 132, // $D338 + 132, // $D339 + 132, // $D33A + 132, // $D33B + 132, // $D33C + 132, // $D33D + 132, // $D33E + 132, // $D33F + 132, // $D340 + 132, // $D341 + 132, // $D342 + 132, // $D343 + 132, // $D344 + 132, // $D345 + 132, // $D346 + 132, // $D347 + 132, // $D348 + 132, // $D349 + 132, // $D34A + 132, // $D34B + 132, // $D34C + 132, // $D34D + 132, // $D34E + 132, // $D34F + 132, // $D350 + 132, // $D351 + 132, // $D352 + 132, // $D353 + 132, // $D354 + 132, // $D355 + 132, // $D356 + 132, // $D357 + 132, // $D358 + 132, // $D359 + 132, // $D35A + 132, // $D35B + 132, // $D35C + 132, // $D35D + 132, // $D35E + 132, // $D35F + 132, // $D360 + 132, // $D361 + 132, // $D362 + 132, // $D363 + 132, // $D364 + 132, // $D365 + 132, // $D366 + 132, // $D367 + 132, // $D368 + 132, // $D369 + 132, // $D36A + 132, // $D36B + 132, // $D36C + 132, // $D36D + 132, // $D36E + 132, // $D36F + 132, // $D370 + 132, // $D371 + 132, // $D372 + 132, // $D373 + 132, // $D374 + 132, // $D375 + 132, // $D376 + 132, // $D377 + 132, // $D378 + 132, // $D379 + 132, // $D37A + 132, // $D37B + 132, // $D37C + 132, // $D37D + 132, // $D37E + 132, // $D37F + 132, // $D380 + 132, // $D381 + 132, // $D382 + 132, // $D383 + 132, // $D384 + 132, // $D385 + 132, // $D386 + 132, // $D387 + 132, // $D388 + 132, // $D389 + 132, // $D38A + 132, // $D38B + 132, // $D38C + 132, // $D38D + 132, // $D38E + 132, // $D38F + 132, // $D390 + 132, // $D391 + 132, // $D392 + 132, // $D393 + 132, // $D394 + 132, // $D395 + 132, // $D396 + 132, // $D397 + 132, // $D398 + 132, // $D399 + 132, // $D39A + 132, // $D39B + 132, // $D39C + 132, // $D39D + 132, // $D39E + 132, // $D39F + 132, // $D3A0 + 132, // $D3A1 + 132, // $D3A2 + 132, // $D3A3 + 132, // $D3A4 + 132, // $D3A5 + 132, // $D3A6 + 132, // $D3A7 + 132, // $D3A8 + 132, // $D3A9 + 132, // $D3AA + 132, // $D3AB + 132, // $D3AC + 132, // $D3AD + 132, // $D3AE + 132, // $D3AF + 132, // $D3B0 + 132, // $D3B1 + 132, // $D3B2 + 132, // $D3B3 + 132, // $D3B4 + 132, // $D3B5 + 132, // $D3B6 + 132, // $D3B7 + 132, // $D3B8 + 132, // $D3B9 + 132, // $D3BA + 132, // $D3BB + 132, // $D3BC + 132, // $D3BD + 132, // $D3BE + 132, // $D3BF + 132, // $D3C0 + 132, // $D3C1 + 132, // $D3C2 + 132, // $D3C3 + 132, // $D3C4 + 132, // $D3C5 + 132, // $D3C6 + 132, // $D3C7 + 132, // $D3C8 + 132, // $D3C9 + 132, // $D3CA + 132, // $D3CB + 132, // $D3CC + 132, // $D3CD + 132, // $D3CE + 132, // $D3CF + 132, // $D3D0 + 132, // $D3D1 + 132, // $D3D2 + 132, // $D3D3 + 132, // $D3D4 + 132, // $D3D5 + 132, // $D3D6 + 132, // $D3D7 + 132, // $D3D8 + 132, // $D3D9 + 132, // $D3DA + 132, // $D3DB + 132, // $D3DC + 132, // $D3DD + 132, // $D3DE + 132, // $D3DF + 132, // $D3E0 + 132, // $D3E1 + 132, // $D3E2 + 132, // $D3E3 + 132, // $D3E4 + 132, // $D3E5 + 132, // $D3E6 + 132, // $D3E7 + 132, // $D3E8 + 132, // $D3E9 + 132, // $D3EA + 132, // $D3EB + 132, // $D3EC + 132, // $D3ED + 132, // $D3EE + 132, // $D3EF + 132, // $D3F0 + 132, // $D3F1 + 132, // $D3F2 + 132, // $D3F3 + 132, // $D3F4 + 132, // $D3F5 + 132, // $D3F6 + 132, // $D3F7 + 132, // $D3F8 + 132, // $D3F9 + 132, // $D3FA + 132, // $D3FB + 132, // $D3FC + 132, // $D3FD + 132, // $D3FE + 132, // $D3FF + 132, // $D400 + 132, // $D401 + 132, // $D402 + 132, // $D403 + 132, // $D404 + 132, // $D405 + 132, // $D406 + 132, // $D407 + 132, // $D408 + 132, // $D409 + 132, // $D40A + 132, // $D40B + 132, // $D40C + 132, // $D40D + 132, // $D40E + 132, // $D40F + 132, // $D410 + 132, // $D411 + 132, // $D412 + 132, // $D413 + 132, // $D414 + 132, // $D415 + 132, // $D416 + 132, // $D417 + 132, // $D418 + 132, // $D419 + 132, // $D41A + 132, // $D41B + 132, // $D41C + 132, // $D41D + 132, // $D41E + 132, // $D41F + 132, // $D420 + 132, // $D421 + 132, // $D422 + 132, // $D423 + 132, // $D424 + 132, // $D425 + 132, // $D426 + 132, // $D427 + 132, // $D428 + 132, // $D429 + 132, // $D42A + 132, // $D42B + 132, // $D42C + 132, // $D42D + 132, // $D42E + 132, // $D42F + 132, // $D430 + 132, // $D431 + 132, // $D432 + 132, // $D433 + 132, // $D434 + 132, // $D435 + 132, // $D436 + 132, // $D437 + 132, // $D438 + 132, // $D439 + 132, // $D43A + 132, // $D43B + 132, // $D43C + 132, // $D43D + 132, // $D43E + 132, // $D43F + 132, // $D440 + 132, // $D441 + 132, // $D442 + 132, // $D443 + 132, // $D444 + 132, // $D445 + 132, // $D446 + 132, // $D447 + 132, // $D448 + 132, // $D449 + 132, // $D44A + 132, // $D44B + 132, // $D44C + 132, // $D44D + 132, // $D44E + 132, // $D44F + 132, // $D450 + 132, // $D451 + 132, // $D452 + 132, // $D453 + 132, // $D454 + 132, // $D455 + 132, // $D456 + 132, // $D457 + 132, // $D458 + 132, // $D459 + 132, // $D45A + 132, // $D45B + 132, // $D45C + 132, // $D45D + 132, // $D45E + 132, // $D45F + 132, // $D460 + 132, // $D461 + 132, // $D462 + 132, // $D463 + 132, // $D464 + 132, // $D465 + 132, // $D466 + 132, // $D467 + 132, // $D468 + 132, // $D469 + 132, // $D46A + 132, // $D46B + 132, // $D46C + 132, // $D46D + 132, // $D46E + 132, // $D46F + 132, // $D470 + 132, // $D471 + 132, // $D472 + 132, // $D473 + 132, // $D474 + 132, // $D475 + 132, // $D476 + 132, // $D477 + 132, // $D478 + 132, // $D479 + 132, // $D47A + 132, // $D47B + 132, // $D47C + 132, // $D47D + 132, // $D47E + 132, // $D47F + 132, // $D480 + 132, // $D481 + 132, // $D482 + 132, // $D483 + 132, // $D484 + 132, // $D485 + 132, // $D486 + 132, // $D487 + 132, // $D488 + 132, // $D489 + 132, // $D48A + 132, // $D48B + 132, // $D48C + 132, // $D48D + 132, // $D48E + 132, // $D48F + 132, // $D490 + 132, // $D491 + 132, // $D492 + 132, // $D493 + 132, // $D494 + 132, // $D495 + 132, // $D496 + 132, // $D497 + 132, // $D498 + 132, // $D499 + 132, // $D49A + 132, // $D49B + 132, // $D49C + 132, // $D49D + 132, // $D49E + 132, // $D49F + 132, // $D4A0 + 132, // $D4A1 + 132, // $D4A2 + 132, // $D4A3 + 132, // $D4A4 + 132, // $D4A5 + 132, // $D4A6 + 132, // $D4A7 + 132, // $D4A8 + 132, // $D4A9 + 132, // $D4AA + 132, // $D4AB + 132, // $D4AC + 132, // $D4AD + 132, // $D4AE + 132, // $D4AF + 132, // $D4B0 + 132, // $D4B1 + 132, // $D4B2 + 132, // $D4B3 + 132, // $D4B4 + 132, // $D4B5 + 132, // $D4B6 + 132, // $D4B7 + 132, // $D4B8 + 132, // $D4B9 + 132, // $D4BA + 132, // $D4BB + 132, // $D4BC + 132, // $D4BD + 132, // $D4BE + 132, // $D4BF + 132, // $D4C0 + 132, // $D4C1 + 132, // $D4C2 + 132, // $D4C3 + 132, // $D4C4 + 132, // $D4C5 + 132, // $D4C6 + 132, // $D4C7 + 132, // $D4C8 + 132, // $D4C9 + 132, // $D4CA + 132, // $D4CB + 132, // $D4CC + 132, // $D4CD + 132, // $D4CE + 132, // $D4CF + 132, // $D4D0 + 132, // $D4D1 + 132, // $D4D2 + 132, // $D4D3 + 132, // $D4D4 + 132, // $D4D5 + 132, // $D4D6 + 132, // $D4D7 + 132, // $D4D8 + 132, // $D4D9 + 132, // $D4DA + 132, // $D4DB + 132, // $D4DC + 132, // $D4DD + 132, // $D4DE + 132, // $D4DF + 132, // $D4E0 + 132, // $D4E1 + 132, // $D4E2 + 132, // $D4E3 + 132, // $D4E4 + 132, // $D4E5 + 132, // $D4E6 + 132, // $D4E7 + 132, // $D4E8 + 132, // $D4E9 + 132, // $D4EA + 132, // $D4EB + 132, // $D4EC + 132, // $D4ED + 132, // $D4EE + 132, // $D4EF + 132, // $D4F0 + 132, // $D4F1 + 132, // $D4F2 + 132, // $D4F3 + 132, // $D4F4 + 132, // $D4F5 + 132, // $D4F6 + 132, // $D4F7 + 132, // $D4F8 + 132, // $D4F9 + 132, // $D4FA + 132, // $D4FB + 132, // $D4FC + 132, // $D4FD + 132, // $D4FE + 132, // $D4FF + 132, // $D500 + 132, // $D501 + 132, // $D502 + 132, // $D503 + 132, // $D504 + 132, // $D505 + 132, // $D506 + 132, // $D507 + 132, // $D508 + 132, // $D509 + 132, // $D50A + 132, // $D50B + 132, // $D50C + 132, // $D50D + 132, // $D50E + 132, // $D50F + 132, // $D510 + 132, // $D511 + 132, // $D512 + 132, // $D513 + 132, // $D514 + 132, // $D515 + 132, // $D516 + 132, // $D517 + 132, // $D518 + 132, // $D519 + 132, // $D51A + 132, // $D51B + 132, // $D51C + 132, // $D51D + 132, // $D51E + 132, // $D51F + 132, // $D520 + 132, // $D521 + 132, // $D522 + 132, // $D523 + 132, // $D524 + 132, // $D525 + 132, // $D526 + 132, // $D527 + 132, // $D528 + 132, // $D529 + 132, // $D52A + 132, // $D52B + 132, // $D52C + 132, // $D52D + 132, // $D52E + 132, // $D52F + 132, // $D530 + 132, // $D531 + 132, // $D532 + 132, // $D533 + 132, // $D534 + 132, // $D535 + 132, // $D536 + 132, // $D537 + 132, // $D538 + 132, // $D539 + 132, // $D53A + 132, // $D53B + 132, // $D53C + 132, // $D53D + 132, // $D53E + 132, // $D53F + 132, // $D540 + 132, // $D541 + 132, // $D542 + 132, // $D543 + 132, // $D544 + 132, // $D545 + 132, // $D546 + 132, // $D547 + 132, // $D548 + 132, // $D549 + 132, // $D54A + 132, // $D54B + 132, // $D54C + 132, // $D54D + 132, // $D54E + 132, // $D54F + 132, // $D550 + 132, // $D551 + 132, // $D552 + 132, // $D553 + 132, // $D554 + 132, // $D555 + 132, // $D556 + 132, // $D557 + 132, // $D558 + 132, // $D559 + 132, // $D55A + 132, // $D55B + 132, // $D55C + 132, // $D55D + 132, // $D55E + 132, // $D55F + 132, // $D560 + 132, // $D561 + 132, // $D562 + 132, // $D563 + 132, // $D564 + 132, // $D565 + 132, // $D566 + 132, // $D567 + 132, // $D568 + 132, // $D569 + 132, // $D56A + 132, // $D56B + 132, // $D56C + 132, // $D56D + 132, // $D56E + 132, // $D56F + 132, // $D570 + 132, // $D571 + 132, // $D572 + 132, // $D573 + 132, // $D574 + 132, // $D575 + 132, // $D576 + 132, // $D577 + 132, // $D578 + 132, // $D579 + 132, // $D57A + 132, // $D57B + 132, // $D57C + 132, // $D57D + 132, // $D57E + 132, // $D57F + 132, // $D580 + 132, // $D581 + 132, // $D582 + 132, // $D583 + 132, // $D584 + 132, // $D585 + 132, // $D586 + 132, // $D587 + 132, // $D588 + 132, // $D589 + 132, // $D58A + 132, // $D58B + 132, // $D58C + 132, // $D58D + 132, // $D58E + 132, // $D58F + 132, // $D590 + 132, // $D591 + 132, // $D592 + 132, // $D593 + 132, // $D594 + 132, // $D595 + 132, // $D596 + 132, // $D597 + 132, // $D598 + 132, // $D599 + 132, // $D59A + 132, // $D59B + 132, // $D59C + 132, // $D59D + 132, // $D59E + 132, // $D59F + 132, // $D5A0 + 132, // $D5A1 + 132, // $D5A2 + 132, // $D5A3 + 132, // $D5A4 + 132, // $D5A5 + 132, // $D5A6 + 132, // $D5A7 + 132, // $D5A8 + 132, // $D5A9 + 132, // $D5AA + 132, // $D5AB + 132, // $D5AC + 132, // $D5AD + 132, // $D5AE + 132, // $D5AF + 132, // $D5B0 + 132, // $D5B1 + 132, // $D5B2 + 132, // $D5B3 + 132, // $D5B4 + 132, // $D5B5 + 132, // $D5B6 + 132, // $D5B7 + 132, // $D5B8 + 132, // $D5B9 + 132, // $D5BA + 132, // $D5BB + 132, // $D5BC + 132, // $D5BD + 132, // $D5BE + 132, // $D5BF + 132, // $D5C0 + 132, // $D5C1 + 132, // $D5C2 + 132, // $D5C3 + 132, // $D5C4 + 132, // $D5C5 + 132, // $D5C6 + 132, // $D5C7 + 132, // $D5C8 + 132, // $D5C9 + 132, // $D5CA + 132, // $D5CB + 132, // $D5CC + 132, // $D5CD + 132, // $D5CE + 132, // $D5CF + 132, // $D5D0 + 132, // $D5D1 + 132, // $D5D2 + 132, // $D5D3 + 132, // $D5D4 + 132, // $D5D5 + 132, // $D5D6 + 132, // $D5D7 + 132, // $D5D8 + 132, // $D5D9 + 132, // $D5DA + 132, // $D5DB + 132, // $D5DC + 132, // $D5DD + 132, // $D5DE + 132, // $D5DF + 132, // $D5E0 + 132, // $D5E1 + 132, // $D5E2 + 132, // $D5E3 + 132, // $D5E4 + 132, // $D5E5 + 132, // $D5E6 + 132, // $D5E7 + 132, // $D5E8 + 132, // $D5E9 + 132, // $D5EA + 132, // $D5EB + 132, // $D5EC + 132, // $D5ED + 132, // $D5EE + 132, // $D5EF + 132, // $D5F0 + 132, // $D5F1 + 132, // $D5F2 + 132, // $D5F3 + 132, // $D5F4 + 132, // $D5F5 + 132, // $D5F6 + 132, // $D5F7 + 132, // $D5F8 + 132, // $D5F9 + 132, // $D5FA + 132, // $D5FB + 132, // $D5FC + 132, // $D5FD + 132, // $D5FE + 132, // $D5FF + 132, // $D600 + 132, // $D601 + 132, // $D602 + 132, // $D603 + 132, // $D604 + 132, // $D605 + 132, // $D606 + 132, // $D607 + 132, // $D608 + 132, // $D609 + 132, // $D60A + 132, // $D60B + 132, // $D60C + 132, // $D60D + 132, // $D60E + 132, // $D60F + 132, // $D610 + 132, // $D611 + 132, // $D612 + 132, // $D613 + 132, // $D614 + 132, // $D615 + 132, // $D616 + 132, // $D617 + 132, // $D618 + 132, // $D619 + 132, // $D61A + 132, // $D61B + 132, // $D61C + 132, // $D61D + 132, // $D61E + 132, // $D61F + 132, // $D620 + 132, // $D621 + 132, // $D622 + 132, // $D623 + 132, // $D624 + 132, // $D625 + 132, // $D626 + 132, // $D627 + 132, // $D628 + 132, // $D629 + 132, // $D62A + 132, // $D62B + 132, // $D62C + 132, // $D62D + 132, // $D62E + 132, // $D62F + 132, // $D630 + 132, // $D631 + 132, // $D632 + 132, // $D633 + 132, // $D634 + 132, // $D635 + 132, // $D636 + 132, // $D637 + 132, // $D638 + 132, // $D639 + 132, // $D63A + 132, // $D63B + 132, // $D63C + 132, // $D63D + 132, // $D63E + 132, // $D63F + 132, // $D640 + 132, // $D641 + 132, // $D642 + 132, // $D643 + 132, // $D644 + 132, // $D645 + 132, // $D646 + 132, // $D647 + 132, // $D648 + 132, // $D649 + 132, // $D64A + 132, // $D64B + 132, // $D64C + 132, // $D64D + 132, // $D64E + 132, // $D64F + 132, // $D650 + 132, // $D651 + 132, // $D652 + 132, // $D653 + 132, // $D654 + 132, // $D655 + 132, // $D656 + 132, // $D657 + 132, // $D658 + 132, // $D659 + 132, // $D65A + 132, // $D65B + 132, // $D65C + 132, // $D65D + 132, // $D65E + 132, // $D65F + 132, // $D660 + 132, // $D661 + 132, // $D662 + 132, // $D663 + 132, // $D664 + 132, // $D665 + 132, // $D666 + 132, // $D667 + 132, // $D668 + 132, // $D669 + 132, // $D66A + 132, // $D66B + 132, // $D66C + 132, // $D66D + 132, // $D66E + 132, // $D66F + 132, // $D670 + 132, // $D671 + 132, // $D672 + 132, // $D673 + 132, // $D674 + 132, // $D675 + 132, // $D676 + 132, // $D677 + 132, // $D678 + 132, // $D679 + 132, // $D67A + 132, // $D67B + 132, // $D67C + 132, // $D67D + 132, // $D67E + 132, // $D67F + 132, // $D680 + 132, // $D681 + 132, // $D682 + 132, // $D683 + 132, // $D684 + 132, // $D685 + 132, // $D686 + 132, // $D687 + 132, // $D688 + 132, // $D689 + 132, // $D68A + 132, // $D68B + 132, // $D68C + 132, // $D68D + 132, // $D68E + 132, // $D68F + 132, // $D690 + 132, // $D691 + 132, // $D692 + 132, // $D693 + 132, // $D694 + 132, // $D695 + 132, // $D696 + 132, // $D697 + 132, // $D698 + 132, // $D699 + 132, // $D69A + 132, // $D69B + 132, // $D69C + 132, // $D69D + 132, // $D69E + 132, // $D69F + 132, // $D6A0 + 132, // $D6A1 + 132, // $D6A2 + 132, // $D6A3 + 132, // $D6A4 + 132, // $D6A5 + 132, // $D6A6 + 132, // $D6A7 + 132, // $D6A8 + 132, // $D6A9 + 132, // $D6AA + 132, // $D6AB + 132, // $D6AC + 132, // $D6AD + 132, // $D6AE + 132, // $D6AF + 132, // $D6B0 + 132, // $D6B1 + 132, // $D6B2 + 132, // $D6B3 + 132, // $D6B4 + 132, // $D6B5 + 132, // $D6B6 + 132, // $D6B7 + 132, // $D6B8 + 132, // $D6B9 + 132, // $D6BA + 132, // $D6BB + 132, // $D6BC + 132, // $D6BD + 132, // $D6BE + 132, // $D6BF + 132, // $D6C0 + 132, // $D6C1 + 132, // $D6C2 + 132, // $D6C3 + 132, // $D6C4 + 132, // $D6C5 + 132, // $D6C6 + 132, // $D6C7 + 132, // $D6C8 + 132, // $D6C9 + 132, // $D6CA + 132, // $D6CB + 132, // $D6CC + 132, // $D6CD + 132, // $D6CE + 132, // $D6CF + 132, // $D6D0 + 132, // $D6D1 + 132, // $D6D2 + 132, // $D6D3 + 132, // $D6D4 + 132, // $D6D5 + 132, // $D6D6 + 132, // $D6D7 + 132, // $D6D8 + 132, // $D6D9 + 132, // $D6DA + 132, // $D6DB + 132, // $D6DC + 132, // $D6DD + 132, // $D6DE + 132, // $D6DF + 132, // $D6E0 + 132, // $D6E1 + 132, // $D6E2 + 132, // $D6E3 + 132, // $D6E4 + 132, // $D6E5 + 132, // $D6E6 + 132, // $D6E7 + 132, // $D6E8 + 132, // $D6E9 + 132, // $D6EA + 132, // $D6EB + 132, // $D6EC + 132, // $D6ED + 132, // $D6EE + 132, // $D6EF + 132, // $D6F0 + 132, // $D6F1 + 132, // $D6F2 + 132, // $D6F3 + 132, // $D6F4 + 132, // $D6F5 + 132, // $D6F6 + 132, // $D6F7 + 132, // $D6F8 + 132, // $D6F9 + 132, // $D6FA + 132, // $D6FB + 132, // $D6FC + 132, // $D6FD + 132, // $D6FE + 132, // $D6FF + 132, // $D700 + 132, // $D701 + 132, // $D702 + 132, // $D703 + 132, // $D704 + 132, // $D705 + 132, // $D706 + 132, // $D707 + 132, // $D708 + 132, // $D709 + 132, // $D70A + 132, // $D70B + 132, // $D70C + 132, // $D70D + 132, // $D70E + 132, // $D70F + 132, // $D710 + 132, // $D711 + 132, // $D712 + 132, // $D713 + 132, // $D714 + 132, // $D715 + 132, // $D716 + 132, // $D717 + 132, // $D718 + 132, // $D719 + 132, // $D71A + 132, // $D71B + 132, // $D71C + 132, // $D71D + 132, // $D71E + 132, // $D71F + 132, // $D720 + 132, // $D721 + 132, // $D722 + 132, // $D723 + 132, // $D724 + 132, // $D725 + 132, // $D726 + 132, // $D727 + 132, // $D728 + 132, // $D729 + 132, // $D72A + 132, // $D72B + 132, // $D72C + 132, // $D72D + 132, // $D72E + 132, // $D72F + 132, // $D730 + 132, // $D731 + 132, // $D732 + 132, // $D733 + 132, // $D734 + 132, // $D735 + 132, // $D736 + 132, // $D737 + 132, // $D738 + 132, // $D739 + 132, // $D73A + 132, // $D73B + 132, // $D73C + 132, // $D73D + 132, // $D73E + 132, // $D73F + 132, // $D740 + 132, // $D741 + 132, // $D742 + 132, // $D743 + 132, // $D744 + 132, // $D745 + 132, // $D746 + 132, // $D747 + 132, // $D748 + 132, // $D749 + 132, // $D74A + 132, // $D74B + 132, // $D74C + 132, // $D74D + 132, // $D74E + 132, // $D74F + 132, // $D750 + 132, // $D751 + 132, // $D752 + 132, // $D753 + 132, // $D754 + 132, // $D755 + 132, // $D756 + 132, // $D757 + 132, // $D758 + 132, // $D759 + 132, // $D75A + 132, // $D75B + 132, // $D75C + 132, // $D75D + 132, // $D75E + 132, // $D75F + 132, // $D760 + 132, // $D761 + 132, // $D762 + 132, // $D763 + 132, // $D764 + 132, // $D765 + 132, // $D766 + 132, // $D767 + 132, // $D768 + 132, // $D769 + 132, // $D76A + 132, // $D76B + 132, // $D76C + 132, // $D76D + 132, // $D76E + 132, // $D76F + 132, // $D770 + 132, // $D771 + 132, // $D772 + 132, // $D773 + 132, // $D774 + 132, // $D775 + 132, // $D776 + 132, // $D777 + 132, // $D778 + 132, // $D779 + 132, // $D77A + 132, // $D77B + 132, // $D77C + 132, // $D77D + 132, // $D77E + 132, // $D77F + 132, // $D780 + 132, // $D781 + 132, // $D782 + 132, // $D783 + 132, // $D784 + 132, // $D785 + 132, // $D786 + 132, // $D787 + 132, // $D788 + 132, // $D789 + 132, // $D78A + 132, // $D78B + 132, // $D78C + 132, // $D78D + 132, // $D78E + 132, // $D78F + 132, // $D790 + 132, // $D791 + 132, // $D792 + 132, // $D793 + 132, // $D794 + 132, // $D795 + 132, // $D796 + 132, // $D797 + 132, // $D798 + 132, // $D799 + 132, // $D79A + 132, // $D79B + 132, // $D79C + 132, // $D79D + 132, // $D79E + 132, // $D79F + 132, // $D7A0 + 132, // $D7A1 + 132, // $D7A2 + 132, // $D7A3 + 29, // $D7A4 + 29, // $D7A5 + 29, // $D7A6 + 29, // $D7A7 + 29, // $D7A8 + 29, // $D7A9 + 29, // $D7AA + 29, // $D7AB + 29, // $D7AC + 29, // $D7AD + 29, // $D7AE + 29, // $D7AF + 132, // $D7B0 + 132, // $D7B1 + 132, // $D7B2 + 132, // $D7B3 + 132, // $D7B4 + 132, // $D7B5 + 132, // $D7B6 + 132, // $D7B7 + 132, // $D7B8 + 132, // $D7B9 + 132, // $D7BA + 132, // $D7BB + 132, // $D7BC + 132, // $D7BD + 132, // $D7BE + 132, // $D7BF + 132, // $D7C0 + 132, // $D7C1 + 132, // $D7C2 + 132, // $D7C3 + 132, // $D7C4 + 132, // $D7C5 + 132, // $D7C6 + 29, // $D7C7 + 29, // $D7C8 + 29, // $D7C9 + 29, // $D7CA + 132, // $D7CB + 132, // $D7CC + 132, // $D7CD + 132, // $D7CE + 132, // $D7CF + 132, // $D7D0 + 132, // $D7D1 + 132, // $D7D2 + 132, // $D7D3 + 132, // $D7D4 + 132, // $D7D5 + 132, // $D7D6 + 132, // $D7D7 + 132, // $D7D8 + 132, // $D7D9 + 132, // $D7DA + 132, // $D7DB + 132, // $D7DC + 132, // $D7DD + 132, // $D7DE + 132, // $D7DF + 132, // $D7E0 + 132, // $D7E1 + 132, // $D7E2 + 132, // $D7E3 + 132, // $D7E4 + 132, // $D7E5 + 132, // $D7E6 + 132, // $D7E7 + 132, // $D7E8 + 132, // $D7E9 + 132, // $D7EA + 132, // $D7EB + 132, // $D7EC + 132, // $D7ED + 132, // $D7EE + 132, // $D7EF + 132, // $D7F0 + 132, // $D7F1 + 132, // $D7F2 + 132, // $D7F3 + 132, // $D7F4 + 132, // $D7F5 + 132, // $D7F6 + 132, // $D7F7 + 132, // $D7F8 + 132, // $D7F9 + 132, // $D7FA + 132, // $D7FB + 29, // $D7FC + 29, // $D7FD + 29, // $D7FE + 29, // $D7FF + 27, // $D800 + 27, // $D801 + 27, // $D802 + 27, // $D803 + 27, // $D804 + 27, // $D805 + 27, // $D806 + 27, // $D807 + 27, // $D808 + 27, // $D809 + 27, // $D80A + 27, // $D80B + 27, // $D80C + 27, // $D80D + 27, // $D80E + 27, // $D80F + 27, // $D810 + 27, // $D811 + 27, // $D812 + 27, // $D813 + 27, // $D814 + 27, // $D815 + 27, // $D816 + 27, // $D817 + 27, // $D818 + 27, // $D819 + 27, // $D81A + 27, // $D81B + 27, // $D81C + 27, // $D81D + 27, // $D81E + 27, // $D81F + 27, // $D820 + 27, // $D821 + 27, // $D822 + 27, // $D823 + 27, // $D824 + 27, // $D825 + 27, // $D826 + 27, // $D827 + 27, // $D828 + 27, // $D829 + 27, // $D82A + 27, // $D82B + 27, // $D82C + 27, // $D82D + 27, // $D82E + 27, // $D82F + 27, // $D830 + 27, // $D831 + 27, // $D832 + 27, // $D833 + 27, // $D834 + 27, // $D835 + 27, // $D836 + 27, // $D837 + 27, // $D838 + 27, // $D839 + 27, // $D83A + 27, // $D83B + 27, // $D83C + 27, // $D83D + 27, // $D83E + 27, // $D83F + 27, // $D840 + 27, // $D841 + 27, // $D842 + 27, // $D843 + 27, // $D844 + 27, // $D845 + 27, // $D846 + 27, // $D847 + 27, // $D848 + 27, // $D849 + 27, // $D84A + 27, // $D84B + 27, // $D84C + 27, // $D84D + 27, // $D84E + 27, // $D84F + 27, // $D850 + 27, // $D851 + 27, // $D852 + 27, // $D853 + 27, // $D854 + 27, // $D855 + 27, // $D856 + 27, // $D857 + 27, // $D858 + 27, // $D859 + 27, // $D85A + 27, // $D85B + 27, // $D85C + 27, // $D85D + 27, // $D85E + 27, // $D85F + 27, // $D860 + 27, // $D861 + 27, // $D862 + 27, // $D863 + 27, // $D864 + 27, // $D865 + 27, // $D866 + 27, // $D867 + 27, // $D868 + 27, // $D869 + 27, // $D86A + 27, // $D86B + 27, // $D86C + 27, // $D86D + 27, // $D86E + 27, // $D86F + 27, // $D870 + 27, // $D871 + 27, // $D872 + 27, // $D873 + 27, // $D874 + 27, // $D875 + 27, // $D876 + 27, // $D877 + 27, // $D878 + 27, // $D879 + 27, // $D87A + 27, // $D87B + 27, // $D87C + 27, // $D87D + 27, // $D87E + 27, // $D87F + 27, // $D880 + 27, // $D881 + 27, // $D882 + 27, // $D883 + 27, // $D884 + 27, // $D885 + 27, // $D886 + 27, // $D887 + 27, // $D888 + 27, // $D889 + 27, // $D88A + 27, // $D88B + 27, // $D88C + 27, // $D88D + 27, // $D88E + 27, // $D88F + 27, // $D890 + 27, // $D891 + 27, // $D892 + 27, // $D893 + 27, // $D894 + 27, // $D895 + 27, // $D896 + 27, // $D897 + 27, // $D898 + 27, // $D899 + 27, // $D89A + 27, // $D89B + 27, // $D89C + 27, // $D89D + 27, // $D89E + 27, // $D89F + 27, // $D8A0 + 27, // $D8A1 + 27, // $D8A2 + 27, // $D8A3 + 27, // $D8A4 + 27, // $D8A5 + 27, // $D8A6 + 27, // $D8A7 + 27, // $D8A8 + 27, // $D8A9 + 27, // $D8AA + 27, // $D8AB + 27, // $D8AC + 27, // $D8AD + 27, // $D8AE + 27, // $D8AF + 27, // $D8B0 + 27, // $D8B1 + 27, // $D8B2 + 27, // $D8B3 + 27, // $D8B4 + 27, // $D8B5 + 27, // $D8B6 + 27, // $D8B7 + 27, // $D8B8 + 27, // $D8B9 + 27, // $D8BA + 27, // $D8BB + 27, // $D8BC + 27, // $D8BD + 27, // $D8BE + 27, // $D8BF + 27, // $D8C0 + 27, // $D8C1 + 27, // $D8C2 + 27, // $D8C3 + 27, // $D8C4 + 27, // $D8C5 + 27, // $D8C6 + 27, // $D8C7 + 27, // $D8C8 + 27, // $D8C9 + 27, // $D8CA + 27, // $D8CB + 27, // $D8CC + 27, // $D8CD + 27, // $D8CE + 27, // $D8CF + 27, // $D8D0 + 27, // $D8D1 + 27, // $D8D2 + 27, // $D8D3 + 27, // $D8D4 + 27, // $D8D5 + 27, // $D8D6 + 27, // $D8D7 + 27, // $D8D8 + 27, // $D8D9 + 27, // $D8DA + 27, // $D8DB + 27, // $D8DC + 27, // $D8DD + 27, // $D8DE + 27, // $D8DF + 27, // $D8E0 + 27, // $D8E1 + 27, // $D8E2 + 27, // $D8E3 + 27, // $D8E4 + 27, // $D8E5 + 27, // $D8E6 + 27, // $D8E7 + 27, // $D8E8 + 27, // $D8E9 + 27, // $D8EA + 27, // $D8EB + 27, // $D8EC + 27, // $D8ED + 27, // $D8EE + 27, // $D8EF + 27, // $D8F0 + 27, // $D8F1 + 27, // $D8F2 + 27, // $D8F3 + 27, // $D8F4 + 27, // $D8F5 + 27, // $D8F6 + 27, // $D8F7 + 27, // $D8F8 + 27, // $D8F9 + 27, // $D8FA + 27, // $D8FB + 27, // $D8FC + 27, // $D8FD + 27, // $D8FE + 27, // $D8FF + 27, // $D900 + 27, // $D901 + 27, // $D902 + 27, // $D903 + 27, // $D904 + 27, // $D905 + 27, // $D906 + 27, // $D907 + 27, // $D908 + 27, // $D909 + 27, // $D90A + 27, // $D90B + 27, // $D90C + 27, // $D90D + 27, // $D90E + 27, // $D90F + 27, // $D910 + 27, // $D911 + 27, // $D912 + 27, // $D913 + 27, // $D914 + 27, // $D915 + 27, // $D916 + 27, // $D917 + 27, // $D918 + 27, // $D919 + 27, // $D91A + 27, // $D91B + 27, // $D91C + 27, // $D91D + 27, // $D91E + 27, // $D91F + 27, // $D920 + 27, // $D921 + 27, // $D922 + 27, // $D923 + 27, // $D924 + 27, // $D925 + 27, // $D926 + 27, // $D927 + 27, // $D928 + 27, // $D929 + 27, // $D92A + 27, // $D92B + 27, // $D92C + 27, // $D92D + 27, // $D92E + 27, // $D92F + 27, // $D930 + 27, // $D931 + 27, // $D932 + 27, // $D933 + 27, // $D934 + 27, // $D935 + 27, // $D936 + 27, // $D937 + 27, // $D938 + 27, // $D939 + 27, // $D93A + 27, // $D93B + 27, // $D93C + 27, // $D93D + 27, // $D93E + 27, // $D93F + 27, // $D940 + 27, // $D941 + 27, // $D942 + 27, // $D943 + 27, // $D944 + 27, // $D945 + 27, // $D946 + 27, // $D947 + 27, // $D948 + 27, // $D949 + 27, // $D94A + 27, // $D94B + 27, // $D94C + 27, // $D94D + 27, // $D94E + 27, // $D94F + 27, // $D950 + 27, // $D951 + 27, // $D952 + 27, // $D953 + 27, // $D954 + 27, // $D955 + 27, // $D956 + 27, // $D957 + 27, // $D958 + 27, // $D959 + 27, // $D95A + 27, // $D95B + 27, // $D95C + 27, // $D95D + 27, // $D95E + 27, // $D95F + 27, // $D960 + 27, // $D961 + 27, // $D962 + 27, // $D963 + 27, // $D964 + 27, // $D965 + 27, // $D966 + 27, // $D967 + 27, // $D968 + 27, // $D969 + 27, // $D96A + 27, // $D96B + 27, // $D96C + 27, // $D96D + 27, // $D96E + 27, // $D96F + 27, // $D970 + 27, // $D971 + 27, // $D972 + 27, // $D973 + 27, // $D974 + 27, // $D975 + 27, // $D976 + 27, // $D977 + 27, // $D978 + 27, // $D979 + 27, // $D97A + 27, // $D97B + 27, // $D97C + 27, // $D97D + 27, // $D97E + 27, // $D97F + 27, // $D980 + 27, // $D981 + 27, // $D982 + 27, // $D983 + 27, // $D984 + 27, // $D985 + 27, // $D986 + 27, // $D987 + 27, // $D988 + 27, // $D989 + 27, // $D98A + 27, // $D98B + 27, // $D98C + 27, // $D98D + 27, // $D98E + 27, // $D98F + 27, // $D990 + 27, // $D991 + 27, // $D992 + 27, // $D993 + 27, // $D994 + 27, // $D995 + 27, // $D996 + 27, // $D997 + 27, // $D998 + 27, // $D999 + 27, // $D99A + 27, // $D99B + 27, // $D99C + 27, // $D99D + 27, // $D99E + 27, // $D99F + 27, // $D9A0 + 27, // $D9A1 + 27, // $D9A2 + 27, // $D9A3 + 27, // $D9A4 + 27, // $D9A5 + 27, // $D9A6 + 27, // $D9A7 + 27, // $D9A8 + 27, // $D9A9 + 27, // $D9AA + 27, // $D9AB + 27, // $D9AC + 27, // $D9AD + 27, // $D9AE + 27, // $D9AF + 27, // $D9B0 + 27, // $D9B1 + 27, // $D9B2 + 27, // $D9B3 + 27, // $D9B4 + 27, // $D9B5 + 27, // $D9B6 + 27, // $D9B7 + 27, // $D9B8 + 27, // $D9B9 + 27, // $D9BA + 27, // $D9BB + 27, // $D9BC + 27, // $D9BD + 27, // $D9BE + 27, // $D9BF + 27, // $D9C0 + 27, // $D9C1 + 27, // $D9C2 + 27, // $D9C3 + 27, // $D9C4 + 27, // $D9C5 + 27, // $D9C6 + 27, // $D9C7 + 27, // $D9C8 + 27, // $D9C9 + 27, // $D9CA + 27, // $D9CB + 27, // $D9CC + 27, // $D9CD + 27, // $D9CE + 27, // $D9CF + 27, // $D9D0 + 27, // $D9D1 + 27, // $D9D2 + 27, // $D9D3 + 27, // $D9D4 + 27, // $D9D5 + 27, // $D9D6 + 27, // $D9D7 + 27, // $D9D8 + 27, // $D9D9 + 27, // $D9DA + 27, // $D9DB + 27, // $D9DC + 27, // $D9DD + 27, // $D9DE + 27, // $D9DF + 27, // $D9E0 + 27, // $D9E1 + 27, // $D9E2 + 27, // $D9E3 + 27, // $D9E4 + 27, // $D9E5 + 27, // $D9E6 + 27, // $D9E7 + 27, // $D9E8 + 27, // $D9E9 + 27, // $D9EA + 27, // $D9EB + 27, // $D9EC + 27, // $D9ED + 27, // $D9EE + 27, // $D9EF + 27, // $D9F0 + 27, // $D9F1 + 27, // $D9F2 + 27, // $D9F3 + 27, // $D9F4 + 27, // $D9F5 + 27, // $D9F6 + 27, // $D9F7 + 27, // $D9F8 + 27, // $D9F9 + 27, // $D9FA + 27, // $D9FB + 27, // $D9FC + 27, // $D9FD + 27, // $D9FE + 27, // $D9FF + 27, // $DA00 + 27, // $DA01 + 27, // $DA02 + 27, // $DA03 + 27, // $DA04 + 27, // $DA05 + 27, // $DA06 + 27, // $DA07 + 27, // $DA08 + 27, // $DA09 + 27, // $DA0A + 27, // $DA0B + 27, // $DA0C + 27, // $DA0D + 27, // $DA0E + 27, // $DA0F + 27, // $DA10 + 27, // $DA11 + 27, // $DA12 + 27, // $DA13 + 27, // $DA14 + 27, // $DA15 + 27, // $DA16 + 27, // $DA17 + 27, // $DA18 + 27, // $DA19 + 27, // $DA1A + 27, // $DA1B + 27, // $DA1C + 27, // $DA1D + 27, // $DA1E + 27, // $DA1F + 27, // $DA20 + 27, // $DA21 + 27, // $DA22 + 27, // $DA23 + 27, // $DA24 + 27, // $DA25 + 27, // $DA26 + 27, // $DA27 + 27, // $DA28 + 27, // $DA29 + 27, // $DA2A + 27, // $DA2B + 27, // $DA2C + 27, // $DA2D + 27, // $DA2E + 27, // $DA2F + 27, // $DA30 + 27, // $DA31 + 27, // $DA32 + 27, // $DA33 + 27, // $DA34 + 27, // $DA35 + 27, // $DA36 + 27, // $DA37 + 27, // $DA38 + 27, // $DA39 + 27, // $DA3A + 27, // $DA3B + 27, // $DA3C + 27, // $DA3D + 27, // $DA3E + 27, // $DA3F + 27, // $DA40 + 27, // $DA41 + 27, // $DA42 + 27, // $DA43 + 27, // $DA44 + 27, // $DA45 + 27, // $DA46 + 27, // $DA47 + 27, // $DA48 + 27, // $DA49 + 27, // $DA4A + 27, // $DA4B + 27, // $DA4C + 27, // $DA4D + 27, // $DA4E + 27, // $DA4F + 27, // $DA50 + 27, // $DA51 + 27, // $DA52 + 27, // $DA53 + 27, // $DA54 + 27, // $DA55 + 27, // $DA56 + 27, // $DA57 + 27, // $DA58 + 27, // $DA59 + 27, // $DA5A + 27, // $DA5B + 27, // $DA5C + 27, // $DA5D + 27, // $DA5E + 27, // $DA5F + 27, // $DA60 + 27, // $DA61 + 27, // $DA62 + 27, // $DA63 + 27, // $DA64 + 27, // $DA65 + 27, // $DA66 + 27, // $DA67 + 27, // $DA68 + 27, // $DA69 + 27, // $DA6A + 27, // $DA6B + 27, // $DA6C + 27, // $DA6D + 27, // $DA6E + 27, // $DA6F + 27, // $DA70 + 27, // $DA71 + 27, // $DA72 + 27, // $DA73 + 27, // $DA74 + 27, // $DA75 + 27, // $DA76 + 27, // $DA77 + 27, // $DA78 + 27, // $DA79 + 27, // $DA7A + 27, // $DA7B + 27, // $DA7C + 27, // $DA7D + 27, // $DA7E + 27, // $DA7F + 27, // $DA80 + 27, // $DA81 + 27, // $DA82 + 27, // $DA83 + 27, // $DA84 + 27, // $DA85 + 27, // $DA86 + 27, // $DA87 + 27, // $DA88 + 27, // $DA89 + 27, // $DA8A + 27, // $DA8B + 27, // $DA8C + 27, // $DA8D + 27, // $DA8E + 27, // $DA8F + 27, // $DA90 + 27, // $DA91 + 27, // $DA92 + 27, // $DA93 + 27, // $DA94 + 27, // $DA95 + 27, // $DA96 + 27, // $DA97 + 27, // $DA98 + 27, // $DA99 + 27, // $DA9A + 27, // $DA9B + 27, // $DA9C + 27, // $DA9D + 27, // $DA9E + 27, // $DA9F + 27, // $DAA0 + 27, // $DAA1 + 27, // $DAA2 + 27, // $DAA3 + 27, // $DAA4 + 27, // $DAA5 + 27, // $DAA6 + 27, // $DAA7 + 27, // $DAA8 + 27, // $DAA9 + 27, // $DAAA + 27, // $DAAB + 27, // $DAAC + 27, // $DAAD + 27, // $DAAE + 27, // $DAAF + 27, // $DAB0 + 27, // $DAB1 + 27, // $DAB2 + 27, // $DAB3 + 27, // $DAB4 + 27, // $DAB5 + 27, // $DAB6 + 27, // $DAB7 + 27, // $DAB8 + 27, // $DAB9 + 27, // $DABA + 27, // $DABB + 27, // $DABC + 27, // $DABD + 27, // $DABE + 27, // $DABF + 27, // $DAC0 + 27, // $DAC1 + 27, // $DAC2 + 27, // $DAC3 + 27, // $DAC4 + 27, // $DAC5 + 27, // $DAC6 + 27, // $DAC7 + 27, // $DAC8 + 27, // $DAC9 + 27, // $DACA + 27, // $DACB + 27, // $DACC + 27, // $DACD + 27, // $DACE + 27, // $DACF + 27, // $DAD0 + 27, // $DAD1 + 27, // $DAD2 + 27, // $DAD3 + 27, // $DAD4 + 27, // $DAD5 + 27, // $DAD6 + 27, // $DAD7 + 27, // $DAD8 + 27, // $DAD9 + 27, // $DADA + 27, // $DADB + 27, // $DADC + 27, // $DADD + 27, // $DADE + 27, // $DADF + 27, // $DAE0 + 27, // $DAE1 + 27, // $DAE2 + 27, // $DAE3 + 27, // $DAE4 + 27, // $DAE5 + 27, // $DAE6 + 27, // $DAE7 + 27, // $DAE8 + 27, // $DAE9 + 27, // $DAEA + 27, // $DAEB + 27, // $DAEC + 27, // $DAED + 27, // $DAEE + 27, // $DAEF + 27, // $DAF0 + 27, // $DAF1 + 27, // $DAF2 + 27, // $DAF3 + 27, // $DAF4 + 27, // $DAF5 + 27, // $DAF6 + 27, // $DAF7 + 27, // $DAF8 + 27, // $DAF9 + 27, // $DAFA + 27, // $DAFB + 27, // $DAFC + 27, // $DAFD + 27, // $DAFE + 27, // $DAFF + 27, // $DB00 + 27, // $DB01 + 27, // $DB02 + 27, // $DB03 + 27, // $DB04 + 27, // $DB05 + 27, // $DB06 + 27, // $DB07 + 27, // $DB08 + 27, // $DB09 + 27, // $DB0A + 27, // $DB0B + 27, // $DB0C + 27, // $DB0D + 27, // $DB0E + 27, // $DB0F + 27, // $DB10 + 27, // $DB11 + 27, // $DB12 + 27, // $DB13 + 27, // $DB14 + 27, // $DB15 + 27, // $DB16 + 27, // $DB17 + 27, // $DB18 + 27, // $DB19 + 27, // $DB1A + 27, // $DB1B + 27, // $DB1C + 27, // $DB1D + 27, // $DB1E + 27, // $DB1F + 27, // $DB20 + 27, // $DB21 + 27, // $DB22 + 27, // $DB23 + 27, // $DB24 + 27, // $DB25 + 27, // $DB26 + 27, // $DB27 + 27, // $DB28 + 27, // $DB29 + 27, // $DB2A + 27, // $DB2B + 27, // $DB2C + 27, // $DB2D + 27, // $DB2E + 27, // $DB2F + 27, // $DB30 + 27, // $DB31 + 27, // $DB32 + 27, // $DB33 + 27, // $DB34 + 27, // $DB35 + 27, // $DB36 + 27, // $DB37 + 27, // $DB38 + 27, // $DB39 + 27, // $DB3A + 27, // $DB3B + 27, // $DB3C + 27, // $DB3D + 27, // $DB3E + 27, // $DB3F + 27, // $DB40 + 27, // $DB41 + 27, // $DB42 + 27, // $DB43 + 27, // $DB44 + 27, // $DB45 + 27, // $DB46 + 27, // $DB47 + 27, // $DB48 + 27, // $DB49 + 27, // $DB4A + 27, // $DB4B + 27, // $DB4C + 27, // $DB4D + 27, // $DB4E + 27, // $DB4F + 27, // $DB50 + 27, // $DB51 + 27, // $DB52 + 27, // $DB53 + 27, // $DB54 + 27, // $DB55 + 27, // $DB56 + 27, // $DB57 + 27, // $DB58 + 27, // $DB59 + 27, // $DB5A + 27, // $DB5B + 27, // $DB5C + 27, // $DB5D + 27, // $DB5E + 27, // $DB5F + 27, // $DB60 + 27, // $DB61 + 27, // $DB62 + 27, // $DB63 + 27, // $DB64 + 27, // $DB65 + 27, // $DB66 + 27, // $DB67 + 27, // $DB68 + 27, // $DB69 + 27, // $DB6A + 27, // $DB6B + 27, // $DB6C + 27, // $DB6D + 27, // $DB6E + 27, // $DB6F + 27, // $DB70 + 27, // $DB71 + 27, // $DB72 + 27, // $DB73 + 27, // $DB74 + 27, // $DB75 + 27, // $DB76 + 27, // $DB77 + 27, // $DB78 + 27, // $DB79 + 27, // $DB7A + 27, // $DB7B + 27, // $DB7C + 27, // $DB7D + 27, // $DB7E + 27, // $DB7F + 27, // $DB80 + 27, // $DB81 + 27, // $DB82 + 27, // $DB83 + 27, // $DB84 + 27, // $DB85 + 27, // $DB86 + 27, // $DB87 + 27, // $DB88 + 27, // $DB89 + 27, // $DB8A + 27, // $DB8B + 27, // $DB8C + 27, // $DB8D + 27, // $DB8E + 27, // $DB8F + 27, // $DB90 + 27, // $DB91 + 27, // $DB92 + 27, // $DB93 + 27, // $DB94 + 27, // $DB95 + 27, // $DB96 + 27, // $DB97 + 27, // $DB98 + 27, // $DB99 + 27, // $DB9A + 27, // $DB9B + 27, // $DB9C + 27, // $DB9D + 27, // $DB9E + 27, // $DB9F + 27, // $DBA0 + 27, // $DBA1 + 27, // $DBA2 + 27, // $DBA3 + 27, // $DBA4 + 27, // $DBA5 + 27, // $DBA6 + 27, // $DBA7 + 27, // $DBA8 + 27, // $DBA9 + 27, // $DBAA + 27, // $DBAB + 27, // $DBAC + 27, // $DBAD + 27, // $DBAE + 27, // $DBAF + 27, // $DBB0 + 27, // $DBB1 + 27, // $DBB2 + 27, // $DBB3 + 27, // $DBB4 + 27, // $DBB5 + 27, // $DBB6 + 27, // $DBB7 + 27, // $DBB8 + 27, // $DBB9 + 27, // $DBBA + 27, // $DBBB + 27, // $DBBC + 27, // $DBBD + 27, // $DBBE + 27, // $DBBF + 27, // $DBC0 + 27, // $DBC1 + 27, // $DBC2 + 27, // $DBC3 + 27, // $DBC4 + 27, // $DBC5 + 27, // $DBC6 + 27, // $DBC7 + 27, // $DBC8 + 27, // $DBC9 + 27, // $DBCA + 27, // $DBCB + 27, // $DBCC + 27, // $DBCD + 27, // $DBCE + 27, // $DBCF + 27, // $DBD0 + 27, // $DBD1 + 27, // $DBD2 + 27, // $DBD3 + 27, // $DBD4 + 27, // $DBD5 + 27, // $DBD6 + 27, // $DBD7 + 27, // $DBD8 + 27, // $DBD9 + 27, // $DBDA + 27, // $DBDB + 27, // $DBDC + 27, // $DBDD + 27, // $DBDE + 27, // $DBDF + 27, // $DBE0 + 27, // $DBE1 + 27, // $DBE2 + 27, // $DBE3 + 27, // $DBE4 + 27, // $DBE5 + 27, // $DBE6 + 27, // $DBE7 + 27, // $DBE8 + 27, // $DBE9 + 27, // $DBEA + 27, // $DBEB + 27, // $DBEC + 27, // $DBED + 27, // $DBEE + 27, // $DBEF + 27, // $DBF0 + 27, // $DBF1 + 27, // $DBF2 + 27, // $DBF3 + 27, // $DBF4 + 27, // $DBF5 + 27, // $DBF6 + 27, // $DBF7 + 27, // $DBF8 + 27, // $DBF9 + 27, // $DBFA + 27, // $DBFB + 27, // $DBFC + 27, // $DBFD + 27, // $DBFE + 27, // $DBFF + 27, // $DC00 + 27, // $DC01 + 27, // $DC02 + 27, // $DC03 + 27, // $DC04 + 27, // $DC05 + 27, // $DC06 + 27, // $DC07 + 27, // $DC08 + 27, // $DC09 + 27, // $DC0A + 27, // $DC0B + 27, // $DC0C + 27, // $DC0D + 27, // $DC0E + 27, // $DC0F + 27, // $DC10 + 27, // $DC11 + 27, // $DC12 + 27, // $DC13 + 27, // $DC14 + 27, // $DC15 + 27, // $DC16 + 27, // $DC17 + 27, // $DC18 + 27, // $DC19 + 27, // $DC1A + 27, // $DC1B + 27, // $DC1C + 27, // $DC1D + 27, // $DC1E + 27, // $DC1F + 27, // $DC20 + 27, // $DC21 + 27, // $DC22 + 27, // $DC23 + 27, // $DC24 + 27, // $DC25 + 27, // $DC26 + 27, // $DC27 + 27, // $DC28 + 27, // $DC29 + 27, // $DC2A + 27, // $DC2B + 27, // $DC2C + 27, // $DC2D + 27, // $DC2E + 27, // $DC2F + 27, // $DC30 + 27, // $DC31 + 27, // $DC32 + 27, // $DC33 + 27, // $DC34 + 27, // $DC35 + 27, // $DC36 + 27, // $DC37 + 27, // $DC38 + 27, // $DC39 + 27, // $DC3A + 27, // $DC3B + 27, // $DC3C + 27, // $DC3D + 27, // $DC3E + 27, // $DC3F + 27, // $DC40 + 27, // $DC41 + 27, // $DC42 + 27, // $DC43 + 27, // $DC44 + 27, // $DC45 + 27, // $DC46 + 27, // $DC47 + 27, // $DC48 + 27, // $DC49 + 27, // $DC4A + 27, // $DC4B + 27, // $DC4C + 27, // $DC4D + 27, // $DC4E + 27, // $DC4F + 27, // $DC50 + 27, // $DC51 + 27, // $DC52 + 27, // $DC53 + 27, // $DC54 + 27, // $DC55 + 27, // $DC56 + 27, // $DC57 + 27, // $DC58 + 27, // $DC59 + 27, // $DC5A + 27, // $DC5B + 27, // $DC5C + 27, // $DC5D + 27, // $DC5E + 27, // $DC5F + 27, // $DC60 + 27, // $DC61 + 27, // $DC62 + 27, // $DC63 + 27, // $DC64 + 27, // $DC65 + 27, // $DC66 + 27, // $DC67 + 27, // $DC68 + 27, // $DC69 + 27, // $DC6A + 27, // $DC6B + 27, // $DC6C + 27, // $DC6D + 27, // $DC6E + 27, // $DC6F + 27, // $DC70 + 27, // $DC71 + 27, // $DC72 + 27, // $DC73 + 27, // $DC74 + 27, // $DC75 + 27, // $DC76 + 27, // $DC77 + 27, // $DC78 + 27, // $DC79 + 27, // $DC7A + 27, // $DC7B + 27, // $DC7C + 27, // $DC7D + 27, // $DC7E + 27, // $DC7F + 27, // $DC80 + 27, // $DC81 + 27, // $DC82 + 27, // $DC83 + 27, // $DC84 + 27, // $DC85 + 27, // $DC86 + 27, // $DC87 + 27, // $DC88 + 27, // $DC89 + 27, // $DC8A + 27, // $DC8B + 27, // $DC8C + 27, // $DC8D + 27, // $DC8E + 27, // $DC8F + 27, // $DC90 + 27, // $DC91 + 27, // $DC92 + 27, // $DC93 + 27, // $DC94 + 27, // $DC95 + 27, // $DC96 + 27, // $DC97 + 27, // $DC98 + 27, // $DC99 + 27, // $DC9A + 27, // $DC9B + 27, // $DC9C + 27, // $DC9D + 27, // $DC9E + 27, // $DC9F + 27, // $DCA0 + 27, // $DCA1 + 27, // $DCA2 + 27, // $DCA3 + 27, // $DCA4 + 27, // $DCA5 + 27, // $DCA6 + 27, // $DCA7 + 27, // $DCA8 + 27, // $DCA9 + 27, // $DCAA + 27, // $DCAB + 27, // $DCAC + 27, // $DCAD + 27, // $DCAE + 27, // $DCAF + 27, // $DCB0 + 27, // $DCB1 + 27, // $DCB2 + 27, // $DCB3 + 27, // $DCB4 + 27, // $DCB5 + 27, // $DCB6 + 27, // $DCB7 + 27, // $DCB8 + 27, // $DCB9 + 27, // $DCBA + 27, // $DCBB + 27, // $DCBC + 27, // $DCBD + 27, // $DCBE + 27, // $DCBF + 27, // $DCC0 + 27, // $DCC1 + 27, // $DCC2 + 27, // $DCC3 + 27, // $DCC4 + 27, // $DCC5 + 27, // $DCC6 + 27, // $DCC7 + 27, // $DCC8 + 27, // $DCC9 + 27, // $DCCA + 27, // $DCCB + 27, // $DCCC + 27, // $DCCD + 27, // $DCCE + 27, // $DCCF + 27, // $DCD0 + 27, // $DCD1 + 27, // $DCD2 + 27, // $DCD3 + 27, // $DCD4 + 27, // $DCD5 + 27, // $DCD6 + 27, // $DCD7 + 27, // $DCD8 + 27, // $DCD9 + 27, // $DCDA + 27, // $DCDB + 27, // $DCDC + 27, // $DCDD + 27, // $DCDE + 27, // $DCDF + 27, // $DCE0 + 27, // $DCE1 + 27, // $DCE2 + 27, // $DCE3 + 27, // $DCE4 + 27, // $DCE5 + 27, // $DCE6 + 27, // $DCE7 + 27, // $DCE8 + 27, // $DCE9 + 27, // $DCEA + 27, // $DCEB + 27, // $DCEC + 27, // $DCED + 27, // $DCEE + 27, // $DCEF + 27, // $DCF0 + 27, // $DCF1 + 27, // $DCF2 + 27, // $DCF3 + 27, // $DCF4 + 27, // $DCF5 + 27, // $DCF6 + 27, // $DCF7 + 27, // $DCF8 + 27, // $DCF9 + 27, // $DCFA + 27, // $DCFB + 27, // $DCFC + 27, // $DCFD + 27, // $DCFE + 27, // $DCFF + 27, // $DD00 + 27, // $DD01 + 27, // $DD02 + 27, // $DD03 + 27, // $DD04 + 27, // $DD05 + 27, // $DD06 + 27, // $DD07 + 27, // $DD08 + 27, // $DD09 + 27, // $DD0A + 27, // $DD0B + 27, // $DD0C + 27, // $DD0D + 27, // $DD0E + 27, // $DD0F + 27, // $DD10 + 27, // $DD11 + 27, // $DD12 + 27, // $DD13 + 27, // $DD14 + 27, // $DD15 + 27, // $DD16 + 27, // $DD17 + 27, // $DD18 + 27, // $DD19 + 27, // $DD1A + 27, // $DD1B + 27, // $DD1C + 27, // $DD1D + 27, // $DD1E + 27, // $DD1F + 27, // $DD20 + 27, // $DD21 + 27, // $DD22 + 27, // $DD23 + 27, // $DD24 + 27, // $DD25 + 27, // $DD26 + 27, // $DD27 + 27, // $DD28 + 27, // $DD29 + 27, // $DD2A + 27, // $DD2B + 27, // $DD2C + 27, // $DD2D + 27, // $DD2E + 27, // $DD2F + 27, // $DD30 + 27, // $DD31 + 27, // $DD32 + 27, // $DD33 + 27, // $DD34 + 27, // $DD35 + 27, // $DD36 + 27, // $DD37 + 27, // $DD38 + 27, // $DD39 + 27, // $DD3A + 27, // $DD3B + 27, // $DD3C + 27, // $DD3D + 27, // $DD3E + 27, // $DD3F + 27, // $DD40 + 27, // $DD41 + 27, // $DD42 + 27, // $DD43 + 27, // $DD44 + 27, // $DD45 + 27, // $DD46 + 27, // $DD47 + 27, // $DD48 + 27, // $DD49 + 27, // $DD4A + 27, // $DD4B + 27, // $DD4C + 27, // $DD4D + 27, // $DD4E + 27, // $DD4F + 27, // $DD50 + 27, // $DD51 + 27, // $DD52 + 27, // $DD53 + 27, // $DD54 + 27, // $DD55 + 27, // $DD56 + 27, // $DD57 + 27, // $DD58 + 27, // $DD59 + 27, // $DD5A + 27, // $DD5B + 27, // $DD5C + 27, // $DD5D + 27, // $DD5E + 27, // $DD5F + 27, // $DD60 + 27, // $DD61 + 27, // $DD62 + 27, // $DD63 + 27, // $DD64 + 27, // $DD65 + 27, // $DD66 + 27, // $DD67 + 27, // $DD68 + 27, // $DD69 + 27, // $DD6A + 27, // $DD6B + 27, // $DD6C + 27, // $DD6D + 27, // $DD6E + 27, // $DD6F + 27, // $DD70 + 27, // $DD71 + 27, // $DD72 + 27, // $DD73 + 27, // $DD74 + 27, // $DD75 + 27, // $DD76 + 27, // $DD77 + 27, // $DD78 + 27, // $DD79 + 27, // $DD7A + 27, // $DD7B + 27, // $DD7C + 27, // $DD7D + 27, // $DD7E + 27, // $DD7F + 27, // $DD80 + 27, // $DD81 + 27, // $DD82 + 27, // $DD83 + 27, // $DD84 + 27, // $DD85 + 27, // $DD86 + 27, // $DD87 + 27, // $DD88 + 27, // $DD89 + 27, // $DD8A + 27, // $DD8B + 27, // $DD8C + 27, // $DD8D + 27, // $DD8E + 27, // $DD8F + 27, // $DD90 + 27, // $DD91 + 27, // $DD92 + 27, // $DD93 + 27, // $DD94 + 27, // $DD95 + 27, // $DD96 + 27, // $DD97 + 27, // $DD98 + 27, // $DD99 + 27, // $DD9A + 27, // $DD9B + 27, // $DD9C + 27, // $DD9D + 27, // $DD9E + 27, // $DD9F + 27, // $DDA0 + 27, // $DDA1 + 27, // $DDA2 + 27, // $DDA3 + 27, // $DDA4 + 27, // $DDA5 + 27, // $DDA6 + 27, // $DDA7 + 27, // $DDA8 + 27, // $DDA9 + 27, // $DDAA + 27, // $DDAB + 27, // $DDAC + 27, // $DDAD + 27, // $DDAE + 27, // $DDAF + 27, // $DDB0 + 27, // $DDB1 + 27, // $DDB2 + 27, // $DDB3 + 27, // $DDB4 + 27, // $DDB5 + 27, // $DDB6 + 27, // $DDB7 + 27, // $DDB8 + 27, // $DDB9 + 27, // $DDBA + 27, // $DDBB + 27, // $DDBC + 27, // $DDBD + 27, // $DDBE + 27, // $DDBF + 27, // $DDC0 + 27, // $DDC1 + 27, // $DDC2 + 27, // $DDC3 + 27, // $DDC4 + 27, // $DDC5 + 27, // $DDC6 + 27, // $DDC7 + 27, // $DDC8 + 27, // $DDC9 + 27, // $DDCA + 27, // $DDCB + 27, // $DDCC + 27, // $DDCD + 27, // $DDCE + 27, // $DDCF + 27, // $DDD0 + 27, // $DDD1 + 27, // $DDD2 + 27, // $DDD3 + 27, // $DDD4 + 27, // $DDD5 + 27, // $DDD6 + 27, // $DDD7 + 27, // $DDD8 + 27, // $DDD9 + 27, // $DDDA + 27, // $DDDB + 27, // $DDDC + 27, // $DDDD + 27, // $DDDE + 27, // $DDDF + 27, // $DDE0 + 27, // $DDE1 + 27, // $DDE2 + 27, // $DDE3 + 27, // $DDE4 + 27, // $DDE5 + 27, // $DDE6 + 27, // $DDE7 + 27, // $DDE8 + 27, // $DDE9 + 27, // $DDEA + 27, // $DDEB + 27, // $DDEC + 27, // $DDED + 27, // $DDEE + 27, // $DDEF + 27, // $DDF0 + 27, // $DDF1 + 27, // $DDF2 + 27, // $DDF3 + 27, // $DDF4 + 27, // $DDF5 + 27, // $DDF6 + 27, // $DDF7 + 27, // $DDF8 + 27, // $DDF9 + 27, // $DDFA + 27, // $DDFB + 27, // $DDFC + 27, // $DDFD + 27, // $DDFE + 27, // $DDFF + 27, // $DE00 + 27, // $DE01 + 27, // $DE02 + 27, // $DE03 + 27, // $DE04 + 27, // $DE05 + 27, // $DE06 + 27, // $DE07 + 27, // $DE08 + 27, // $DE09 + 27, // $DE0A + 27, // $DE0B + 27, // $DE0C + 27, // $DE0D + 27, // $DE0E + 27, // $DE0F + 27, // $DE10 + 27, // $DE11 + 27, // $DE12 + 27, // $DE13 + 27, // $DE14 + 27, // $DE15 + 27, // $DE16 + 27, // $DE17 + 27, // $DE18 + 27, // $DE19 + 27, // $DE1A + 27, // $DE1B + 27, // $DE1C + 27, // $DE1D + 27, // $DE1E + 27, // $DE1F + 27, // $DE20 + 27, // $DE21 + 27, // $DE22 + 27, // $DE23 + 27, // $DE24 + 27, // $DE25 + 27, // $DE26 + 27, // $DE27 + 27, // $DE28 + 27, // $DE29 + 27, // $DE2A + 27, // $DE2B + 27, // $DE2C + 27, // $DE2D + 27, // $DE2E + 27, // $DE2F + 27, // $DE30 + 27, // $DE31 + 27, // $DE32 + 27, // $DE33 + 27, // $DE34 + 27, // $DE35 + 27, // $DE36 + 27, // $DE37 + 27, // $DE38 + 27, // $DE39 + 27, // $DE3A + 27, // $DE3B + 27, // $DE3C + 27, // $DE3D + 27, // $DE3E + 27, // $DE3F + 27, // $DE40 + 27, // $DE41 + 27, // $DE42 + 27, // $DE43 + 27, // $DE44 + 27, // $DE45 + 27, // $DE46 + 27, // $DE47 + 27, // $DE48 + 27, // $DE49 + 27, // $DE4A + 27, // $DE4B + 27, // $DE4C + 27, // $DE4D + 27, // $DE4E + 27, // $DE4F + 27, // $DE50 + 27, // $DE51 + 27, // $DE52 + 27, // $DE53 + 27, // $DE54 + 27, // $DE55 + 27, // $DE56 + 27, // $DE57 + 27, // $DE58 + 27, // $DE59 + 27, // $DE5A + 27, // $DE5B + 27, // $DE5C + 27, // $DE5D + 27, // $DE5E + 27, // $DE5F + 27, // $DE60 + 27, // $DE61 + 27, // $DE62 + 27, // $DE63 + 27, // $DE64 + 27, // $DE65 + 27, // $DE66 + 27, // $DE67 + 27, // $DE68 + 27, // $DE69 + 27, // $DE6A + 27, // $DE6B + 27, // $DE6C + 27, // $DE6D + 27, // $DE6E + 27, // $DE6F + 27, // $DE70 + 27, // $DE71 + 27, // $DE72 + 27, // $DE73 + 27, // $DE74 + 27, // $DE75 + 27, // $DE76 + 27, // $DE77 + 27, // $DE78 + 27, // $DE79 + 27, // $DE7A + 27, // $DE7B + 27, // $DE7C + 27, // $DE7D + 27, // $DE7E + 27, // $DE7F + 27, // $DE80 + 27, // $DE81 + 27, // $DE82 + 27, // $DE83 + 27, // $DE84 + 27, // $DE85 + 27, // $DE86 + 27, // $DE87 + 27, // $DE88 + 27, // $DE89 + 27, // $DE8A + 27, // $DE8B + 27, // $DE8C + 27, // $DE8D + 27, // $DE8E + 27, // $DE8F + 27, // $DE90 + 27, // $DE91 + 27, // $DE92 + 27, // $DE93 + 27, // $DE94 + 27, // $DE95 + 27, // $DE96 + 27, // $DE97 + 27, // $DE98 + 27, // $DE99 + 27, // $DE9A + 27, // $DE9B + 27, // $DE9C + 27, // $DE9D + 27, // $DE9E + 27, // $DE9F + 27, // $DEA0 + 27, // $DEA1 + 27, // $DEA2 + 27, // $DEA3 + 27, // $DEA4 + 27, // $DEA5 + 27, // $DEA6 + 27, // $DEA7 + 27, // $DEA8 + 27, // $DEA9 + 27, // $DEAA + 27, // $DEAB + 27, // $DEAC + 27, // $DEAD + 27, // $DEAE + 27, // $DEAF + 27, // $DEB0 + 27, // $DEB1 + 27, // $DEB2 + 27, // $DEB3 + 27, // $DEB4 + 27, // $DEB5 + 27, // $DEB6 + 27, // $DEB7 + 27, // $DEB8 + 27, // $DEB9 + 27, // $DEBA + 27, // $DEBB + 27, // $DEBC + 27, // $DEBD + 27, // $DEBE + 27, // $DEBF + 27, // $DEC0 + 27, // $DEC1 + 27, // $DEC2 + 27, // $DEC3 + 27, // $DEC4 + 27, // $DEC5 + 27, // $DEC6 + 27, // $DEC7 + 27, // $DEC8 + 27, // $DEC9 + 27, // $DECA + 27, // $DECB + 27, // $DECC + 27, // $DECD + 27, // $DECE + 27, // $DECF + 27, // $DED0 + 27, // $DED1 + 27, // $DED2 + 27, // $DED3 + 27, // $DED4 + 27, // $DED5 + 27, // $DED6 + 27, // $DED7 + 27, // $DED8 + 27, // $DED9 + 27, // $DEDA + 27, // $DEDB + 27, // $DEDC + 27, // $DEDD + 27, // $DEDE + 27, // $DEDF + 27, // $DEE0 + 27, // $DEE1 + 27, // $DEE2 + 27, // $DEE3 + 27, // $DEE4 + 27, // $DEE5 + 27, // $DEE6 + 27, // $DEE7 + 27, // $DEE8 + 27, // $DEE9 + 27, // $DEEA + 27, // $DEEB + 27, // $DEEC + 27, // $DEED + 27, // $DEEE + 27, // $DEEF + 27, // $DEF0 + 27, // $DEF1 + 27, // $DEF2 + 27, // $DEF3 + 27, // $DEF4 + 27, // $DEF5 + 27, // $DEF6 + 27, // $DEF7 + 27, // $DEF8 + 27, // $DEF9 + 27, // $DEFA + 27, // $DEFB + 27, // $DEFC + 27, // $DEFD + 27, // $DEFE + 27, // $DEFF + 27, // $DF00 + 27, // $DF01 + 27, // $DF02 + 27, // $DF03 + 27, // $DF04 + 27, // $DF05 + 27, // $DF06 + 27, // $DF07 + 27, // $DF08 + 27, // $DF09 + 27, // $DF0A + 27, // $DF0B + 27, // $DF0C + 27, // $DF0D + 27, // $DF0E + 27, // $DF0F + 27, // $DF10 + 27, // $DF11 + 27, // $DF12 + 27, // $DF13 + 27, // $DF14 + 27, // $DF15 + 27, // $DF16 + 27, // $DF17 + 27, // $DF18 + 27, // $DF19 + 27, // $DF1A + 27, // $DF1B + 27, // $DF1C + 27, // $DF1D + 27, // $DF1E + 27, // $DF1F + 27, // $DF20 + 27, // $DF21 + 27, // $DF22 + 27, // $DF23 + 27, // $DF24 + 27, // $DF25 + 27, // $DF26 + 27, // $DF27 + 27, // $DF28 + 27, // $DF29 + 27, // $DF2A + 27, // $DF2B + 27, // $DF2C + 27, // $DF2D + 27, // $DF2E + 27, // $DF2F + 27, // $DF30 + 27, // $DF31 + 27, // $DF32 + 27, // $DF33 + 27, // $DF34 + 27, // $DF35 + 27, // $DF36 + 27, // $DF37 + 27, // $DF38 + 27, // $DF39 + 27, // $DF3A + 27, // $DF3B + 27, // $DF3C + 27, // $DF3D + 27, // $DF3E + 27, // $DF3F + 27, // $DF40 + 27, // $DF41 + 27, // $DF42 + 27, // $DF43 + 27, // $DF44 + 27, // $DF45 + 27, // $DF46 + 27, // $DF47 + 27, // $DF48 + 27, // $DF49 + 27, // $DF4A + 27, // $DF4B + 27, // $DF4C + 27, // $DF4D + 27, // $DF4E + 27, // $DF4F + 27, // $DF50 + 27, // $DF51 + 27, // $DF52 + 27, // $DF53 + 27, // $DF54 + 27, // $DF55 + 27, // $DF56 + 27, // $DF57 + 27, // $DF58 + 27, // $DF59 + 27, // $DF5A + 27, // $DF5B + 27, // $DF5C + 27, // $DF5D + 27, // $DF5E + 27, // $DF5F + 27, // $DF60 + 27, // $DF61 + 27, // $DF62 + 27, // $DF63 + 27, // $DF64 + 27, // $DF65 + 27, // $DF66 + 27, // $DF67 + 27, // $DF68 + 27, // $DF69 + 27, // $DF6A + 27, // $DF6B + 27, // $DF6C + 27, // $DF6D + 27, // $DF6E + 27, // $DF6F + 27, // $DF70 + 27, // $DF71 + 27, // $DF72 + 27, // $DF73 + 27, // $DF74 + 27, // $DF75 + 27, // $DF76 + 27, // $DF77 + 27, // $DF78 + 27, // $DF79 + 27, // $DF7A + 27, // $DF7B + 27, // $DF7C + 27, // $DF7D + 27, // $DF7E + 27, // $DF7F + 27, // $DF80 + 27, // $DF81 + 27, // $DF82 + 27, // $DF83 + 27, // $DF84 + 27, // $DF85 + 27, // $DF86 + 27, // $DF87 + 27, // $DF88 + 27, // $DF89 + 27, // $DF8A + 27, // $DF8B + 27, // $DF8C + 27, // $DF8D + 27, // $DF8E + 27, // $DF8F + 27, // $DF90 + 27, // $DF91 + 27, // $DF92 + 27, // $DF93 + 27, // $DF94 + 27, // $DF95 + 27, // $DF96 + 27, // $DF97 + 27, // $DF98 + 27, // $DF99 + 27, // $DF9A + 27, // $DF9B + 27, // $DF9C + 27, // $DF9D + 27, // $DF9E + 27, // $DF9F + 27, // $DFA0 + 27, // $DFA1 + 27, // $DFA2 + 27, // $DFA3 + 27, // $DFA4 + 27, // $DFA5 + 27, // $DFA6 + 27, // $DFA7 + 27, // $DFA8 + 27, // $DFA9 + 27, // $DFAA + 27, // $DFAB + 27, // $DFAC + 27, // $DFAD + 27, // $DFAE + 27, // $DFAF + 27, // $DFB0 + 27, // $DFB1 + 27, // $DFB2 + 27, // $DFB3 + 27, // $DFB4 + 27, // $DFB5 + 27, // $DFB6 + 27, // $DFB7 + 27, // $DFB8 + 27, // $DFB9 + 27, // $DFBA + 27, // $DFBB + 27, // $DFBC + 27, // $DFBD + 27, // $DFBE + 27, // $DFBF + 27, // $DFC0 + 27, // $DFC1 + 27, // $DFC2 + 27, // $DFC3 + 27, // $DFC4 + 27, // $DFC5 + 27, // $DFC6 + 27, // $DFC7 + 27, // $DFC8 + 27, // $DFC9 + 27, // $DFCA + 27, // $DFCB + 27, // $DFCC + 27, // $DFCD + 27, // $DFCE + 27, // $DFCF + 27, // $DFD0 + 27, // $DFD1 + 27, // $DFD2 + 27, // $DFD3 + 27, // $DFD4 + 27, // $DFD5 + 27, // $DFD6 + 27, // $DFD7 + 27, // $DFD8 + 27, // $DFD9 + 27, // $DFDA + 27, // $DFDB + 27, // $DFDC + 27, // $DFDD + 27, // $DFDE + 27, // $DFDF + 27, // $DFE0 + 27, // $DFE1 + 27, // $DFE2 + 27, // $DFE3 + 27, // $DFE4 + 27, // $DFE5 + 27, // $DFE6 + 27, // $DFE7 + 27, // $DFE8 + 27, // $DFE9 + 27, // $DFEA + 27, // $DFEB + 27, // $DFEC + 27, // $DFED + 27, // $DFEE + 27, // $DFEF + 27, // $DFF0 + 27, // $DFF1 + 27, // $DFF2 + 27, // $DFF3 + 27, // $DFF4 + 27, // $DFF5 + 27, // $DFF6 + 27, // $DFF7 + 27, // $DFF8 + 27, // $DFF9 + 27, // $DFFA + 27, // $DFFB + 27, // $DFFC + 27, // $DFFD + 27, // $DFFE + 27, // $DFFF + 28, // $E000 + 28, // $E001 + 28, // $E002 + 28, // $E003 + 28, // $E004 + 28, // $E005 + 28, // $E006 + 28, // $E007 + 28, // $E008 + 28, // $E009 + 28, // $E00A + 28, // $E00B + 28, // $E00C + 28, // $E00D + 28, // $E00E + 28, // $E00F + 28, // $E010 + 28, // $E011 + 28, // $E012 + 28, // $E013 + 28, // $E014 + 28, // $E015 + 28, // $E016 + 28, // $E017 + 28, // $E018 + 28, // $E019 + 28, // $E01A + 28, // $E01B + 28, // $E01C + 28, // $E01D + 28, // $E01E + 28, // $E01F + 28, // $E020 + 28, // $E021 + 28, // $E022 + 28, // $E023 + 28, // $E024 + 28, // $E025 + 28, // $E026 + 28, // $E027 + 28, // $E028 + 28, // $E029 + 28, // $E02A + 28, // $E02B + 28, // $E02C + 28, // $E02D + 28, // $E02E + 28, // $E02F + 28, // $E030 + 28, // $E031 + 28, // $E032 + 28, // $E033 + 28, // $E034 + 28, // $E035 + 28, // $E036 + 28, // $E037 + 28, // $E038 + 28, // $E039 + 28, // $E03A + 28, // $E03B + 28, // $E03C + 28, // $E03D + 28, // $E03E + 28, // $E03F + 28, // $E040 + 28, // $E041 + 28, // $E042 + 28, // $E043 + 28, // $E044 + 28, // $E045 + 28, // $E046 + 28, // $E047 + 28, // $E048 + 28, // $E049 + 28, // $E04A + 28, // $E04B + 28, // $E04C + 28, // $E04D + 28, // $E04E + 28, // $E04F + 28, // $E050 + 28, // $E051 + 28, // $E052 + 28, // $E053 + 28, // $E054 + 28, // $E055 + 28, // $E056 + 28, // $E057 + 28, // $E058 + 28, // $E059 + 28, // $E05A + 28, // $E05B + 28, // $E05C + 28, // $E05D + 28, // $E05E + 28, // $E05F + 28, // $E060 + 28, // $E061 + 28, // $E062 + 28, // $E063 + 28, // $E064 + 28, // $E065 + 28, // $E066 + 28, // $E067 + 28, // $E068 + 28, // $E069 + 28, // $E06A + 28, // $E06B + 28, // $E06C + 28, // $E06D + 28, // $E06E + 28, // $E06F + 28, // $E070 + 28, // $E071 + 28, // $E072 + 28, // $E073 + 28, // $E074 + 28, // $E075 + 28, // $E076 + 28, // $E077 + 28, // $E078 + 28, // $E079 + 28, // $E07A + 28, // $E07B + 28, // $E07C + 28, // $E07D + 28, // $E07E + 28, // $E07F + 28, // $E080 + 28, // $E081 + 28, // $E082 + 28, // $E083 + 28, // $E084 + 28, // $E085 + 28, // $E086 + 28, // $E087 + 28, // $E088 + 28, // $E089 + 28, // $E08A + 28, // $E08B + 28, // $E08C + 28, // $E08D + 28, // $E08E + 28, // $E08F + 28, // $E090 + 28, // $E091 + 28, // $E092 + 28, // $E093 + 28, // $E094 + 28, // $E095 + 28, // $E096 + 28, // $E097 + 28, // $E098 + 28, // $E099 + 28, // $E09A + 28, // $E09B + 28, // $E09C + 28, // $E09D + 28, // $E09E + 28, // $E09F + 28, // $E0A0 + 28, // $E0A1 + 28, // $E0A2 + 28, // $E0A3 + 28, // $E0A4 + 28, // $E0A5 + 28, // $E0A6 + 28, // $E0A7 + 28, // $E0A8 + 28, // $E0A9 + 28, // $E0AA + 28, // $E0AB + 28, // $E0AC + 28, // $E0AD + 28, // $E0AE + 28, // $E0AF + 28, // $E0B0 + 28, // $E0B1 + 28, // $E0B2 + 28, // $E0B3 + 28, // $E0B4 + 28, // $E0B5 + 28, // $E0B6 + 28, // $E0B7 + 28, // $E0B8 + 28, // $E0B9 + 28, // $E0BA + 28, // $E0BB + 28, // $E0BC + 28, // $E0BD + 28, // $E0BE + 28, // $E0BF + 28, // $E0C0 + 28, // $E0C1 + 28, // $E0C2 + 28, // $E0C3 + 28, // $E0C4 + 28, // $E0C5 + 28, // $E0C6 + 28, // $E0C7 + 28, // $E0C8 + 28, // $E0C9 + 28, // $E0CA + 28, // $E0CB + 28, // $E0CC + 28, // $E0CD + 28, // $E0CE + 28, // $E0CF + 28, // $E0D0 + 28, // $E0D1 + 28, // $E0D2 + 28, // $E0D3 + 28, // $E0D4 + 28, // $E0D5 + 28, // $E0D6 + 28, // $E0D7 + 28, // $E0D8 + 28, // $E0D9 + 28, // $E0DA + 28, // $E0DB + 28, // $E0DC + 28, // $E0DD + 28, // $E0DE + 28, // $E0DF + 28, // $E0E0 + 28, // $E0E1 + 28, // $E0E2 + 28, // $E0E3 + 28, // $E0E4 + 28, // $E0E5 + 28, // $E0E6 + 28, // $E0E7 + 28, // $E0E8 + 28, // $E0E9 + 28, // $E0EA + 28, // $E0EB + 28, // $E0EC + 28, // $E0ED + 28, // $E0EE + 28, // $E0EF + 28, // $E0F0 + 28, // $E0F1 + 28, // $E0F2 + 28, // $E0F3 + 28, // $E0F4 + 28, // $E0F5 + 28, // $E0F6 + 28, // $E0F7 + 28, // $E0F8 + 28, // $E0F9 + 28, // $E0FA + 28, // $E0FB + 28, // $E0FC + 28, // $E0FD + 28, // $E0FE + 28, // $E0FF + 28, // $E100 + 28, // $E101 + 28, // $E102 + 28, // $E103 + 28, // $E104 + 28, // $E105 + 28, // $E106 + 28, // $E107 + 28, // $E108 + 28, // $E109 + 28, // $E10A + 28, // $E10B + 28, // $E10C + 28, // $E10D + 28, // $E10E + 28, // $E10F + 28, // $E110 + 28, // $E111 + 28, // $E112 + 28, // $E113 + 28, // $E114 + 28, // $E115 + 28, // $E116 + 28, // $E117 + 28, // $E118 + 28, // $E119 + 28, // $E11A + 28, // $E11B + 28, // $E11C + 28, // $E11D + 28, // $E11E + 28, // $E11F + 28, // $E120 + 28, // $E121 + 28, // $E122 + 28, // $E123 + 28, // $E124 + 28, // $E125 + 28, // $E126 + 28, // $E127 + 28, // $E128 + 28, // $E129 + 28, // $E12A + 28, // $E12B + 28, // $E12C + 28, // $E12D + 28, // $E12E + 28, // $E12F + 28, // $E130 + 28, // $E131 + 28, // $E132 + 28, // $E133 + 28, // $E134 + 28, // $E135 + 28, // $E136 + 28, // $E137 + 28, // $E138 + 28, // $E139 + 28, // $E13A + 28, // $E13B + 28, // $E13C + 28, // $E13D + 28, // $E13E + 28, // $E13F + 28, // $E140 + 28, // $E141 + 28, // $E142 + 28, // $E143 + 28, // $E144 + 28, // $E145 + 28, // $E146 + 28, // $E147 + 28, // $E148 + 28, // $E149 + 28, // $E14A + 28, // $E14B + 28, // $E14C + 28, // $E14D + 28, // $E14E + 28, // $E14F + 28, // $E150 + 28, // $E151 + 28, // $E152 + 28, // $E153 + 28, // $E154 + 28, // $E155 + 28, // $E156 + 28, // $E157 + 28, // $E158 + 28, // $E159 + 28, // $E15A + 28, // $E15B + 28, // $E15C + 28, // $E15D + 28, // $E15E + 28, // $E15F + 28, // $E160 + 28, // $E161 + 28, // $E162 + 28, // $E163 + 28, // $E164 + 28, // $E165 + 28, // $E166 + 28, // $E167 + 28, // $E168 + 28, // $E169 + 28, // $E16A + 28, // $E16B + 28, // $E16C + 28, // $E16D + 28, // $E16E + 28, // $E16F + 28, // $E170 + 28, // $E171 + 28, // $E172 + 28, // $E173 + 28, // $E174 + 28, // $E175 + 28, // $E176 + 28, // $E177 + 28, // $E178 + 28, // $E179 + 28, // $E17A + 28, // $E17B + 28, // $E17C + 28, // $E17D + 28, // $E17E + 28, // $E17F + 28, // $E180 + 28, // $E181 + 28, // $E182 + 28, // $E183 + 28, // $E184 + 28, // $E185 + 28, // $E186 + 28, // $E187 + 28, // $E188 + 28, // $E189 + 28, // $E18A + 28, // $E18B + 28, // $E18C + 28, // $E18D + 28, // $E18E + 28, // $E18F + 28, // $E190 + 28, // $E191 + 28, // $E192 + 28, // $E193 + 28, // $E194 + 28, // $E195 + 28, // $E196 + 28, // $E197 + 28, // $E198 + 28, // $E199 + 28, // $E19A + 28, // $E19B + 28, // $E19C + 28, // $E19D + 28, // $E19E + 28, // $E19F + 28, // $E1A0 + 28, // $E1A1 + 28, // $E1A2 + 28, // $E1A3 + 28, // $E1A4 + 28, // $E1A5 + 28, // $E1A6 + 28, // $E1A7 + 28, // $E1A8 + 28, // $E1A9 + 28, // $E1AA + 28, // $E1AB + 28, // $E1AC + 28, // $E1AD + 28, // $E1AE + 28, // $E1AF + 28, // $E1B0 + 28, // $E1B1 + 28, // $E1B2 + 28, // $E1B3 + 28, // $E1B4 + 28, // $E1B5 + 28, // $E1B6 + 28, // $E1B7 + 28, // $E1B8 + 28, // $E1B9 + 28, // $E1BA + 28, // $E1BB + 28, // $E1BC + 28, // $E1BD + 28, // $E1BE + 28, // $E1BF + 28, // $E1C0 + 28, // $E1C1 + 28, // $E1C2 + 28, // $E1C3 + 28, // $E1C4 + 28, // $E1C5 + 28, // $E1C6 + 28, // $E1C7 + 28, // $E1C8 + 28, // $E1C9 + 28, // $E1CA + 28, // $E1CB + 28, // $E1CC + 28, // $E1CD + 28, // $E1CE + 28, // $E1CF + 28, // $E1D0 + 28, // $E1D1 + 28, // $E1D2 + 28, // $E1D3 + 28, // $E1D4 + 28, // $E1D5 + 28, // $E1D6 + 28, // $E1D7 + 28, // $E1D8 + 28, // $E1D9 + 28, // $E1DA + 28, // $E1DB + 28, // $E1DC + 28, // $E1DD + 28, // $E1DE + 28, // $E1DF + 28, // $E1E0 + 28, // $E1E1 + 28, // $E1E2 + 28, // $E1E3 + 28, // $E1E4 + 28, // $E1E5 + 28, // $E1E6 + 28, // $E1E7 + 28, // $E1E8 + 28, // $E1E9 + 28, // $E1EA + 28, // $E1EB + 28, // $E1EC + 28, // $E1ED + 28, // $E1EE + 28, // $E1EF + 28, // $E1F0 + 28, // $E1F1 + 28, // $E1F2 + 28, // $E1F3 + 28, // $E1F4 + 28, // $E1F5 + 28, // $E1F6 + 28, // $E1F7 + 28, // $E1F8 + 28, // $E1F9 + 28, // $E1FA + 28, // $E1FB + 28, // $E1FC + 28, // $E1FD + 28, // $E1FE + 28, // $E1FF + 28, // $E200 + 28, // $E201 + 28, // $E202 + 28, // $E203 + 28, // $E204 + 28, // $E205 + 28, // $E206 + 28, // $E207 + 28, // $E208 + 28, // $E209 + 28, // $E20A + 28, // $E20B + 28, // $E20C + 28, // $E20D + 28, // $E20E + 28, // $E20F + 28, // $E210 + 28, // $E211 + 28, // $E212 + 28, // $E213 + 28, // $E214 + 28, // $E215 + 28, // $E216 + 28, // $E217 + 28, // $E218 + 28, // $E219 + 28, // $E21A + 28, // $E21B + 28, // $E21C + 28, // $E21D + 28, // $E21E + 28, // $E21F + 28, // $E220 + 28, // $E221 + 28, // $E222 + 28, // $E223 + 28, // $E224 + 28, // $E225 + 28, // $E226 + 28, // $E227 + 28, // $E228 + 28, // $E229 + 28, // $E22A + 28, // $E22B + 28, // $E22C + 28, // $E22D + 28, // $E22E + 28, // $E22F + 28, // $E230 + 28, // $E231 + 28, // $E232 + 28, // $E233 + 28, // $E234 + 28, // $E235 + 28, // $E236 + 28, // $E237 + 28, // $E238 + 28, // $E239 + 28, // $E23A + 28, // $E23B + 28, // $E23C + 28, // $E23D + 28, // $E23E + 28, // $E23F + 28, // $E240 + 28, // $E241 + 28, // $E242 + 28, // $E243 + 28, // $E244 + 28, // $E245 + 28, // $E246 + 28, // $E247 + 28, // $E248 + 28, // $E249 + 28, // $E24A + 28, // $E24B + 28, // $E24C + 28, // $E24D + 28, // $E24E + 28, // $E24F + 28, // $E250 + 28, // $E251 + 28, // $E252 + 28, // $E253 + 28, // $E254 + 28, // $E255 + 28, // $E256 + 28, // $E257 + 28, // $E258 + 28, // $E259 + 28, // $E25A + 28, // $E25B + 28, // $E25C + 28, // $E25D + 28, // $E25E + 28, // $E25F + 28, // $E260 + 28, // $E261 + 28, // $E262 + 28, // $E263 + 28, // $E264 + 28, // $E265 + 28, // $E266 + 28, // $E267 + 28, // $E268 + 28, // $E269 + 28, // $E26A + 28, // $E26B + 28, // $E26C + 28, // $E26D + 28, // $E26E + 28, // $E26F + 28, // $E270 + 28, // $E271 + 28, // $E272 + 28, // $E273 + 28, // $E274 + 28, // $E275 + 28, // $E276 + 28, // $E277 + 28, // $E278 + 28, // $E279 + 28, // $E27A + 28, // $E27B + 28, // $E27C + 28, // $E27D + 28, // $E27E + 28, // $E27F + 28, // $E280 + 28, // $E281 + 28, // $E282 + 28, // $E283 + 28, // $E284 + 28, // $E285 + 28, // $E286 + 28, // $E287 + 28, // $E288 + 28, // $E289 + 28, // $E28A + 28, // $E28B + 28, // $E28C + 28, // $E28D + 28, // $E28E + 28, // $E28F + 28, // $E290 + 28, // $E291 + 28, // $E292 + 28, // $E293 + 28, // $E294 + 28, // $E295 + 28, // $E296 + 28, // $E297 + 28, // $E298 + 28, // $E299 + 28, // $E29A + 28, // $E29B + 28, // $E29C + 28, // $E29D + 28, // $E29E + 28, // $E29F + 28, // $E2A0 + 28, // $E2A1 + 28, // $E2A2 + 28, // $E2A3 + 28, // $E2A4 + 28, // $E2A5 + 28, // $E2A6 + 28, // $E2A7 + 28, // $E2A8 + 28, // $E2A9 + 28, // $E2AA + 28, // $E2AB + 28, // $E2AC + 28, // $E2AD + 28, // $E2AE + 28, // $E2AF + 28, // $E2B0 + 28, // $E2B1 + 28, // $E2B2 + 28, // $E2B3 + 28, // $E2B4 + 28, // $E2B5 + 28, // $E2B6 + 28, // $E2B7 + 28, // $E2B8 + 28, // $E2B9 + 28, // $E2BA + 28, // $E2BB + 28, // $E2BC + 28, // $E2BD + 28, // $E2BE + 28, // $E2BF + 28, // $E2C0 + 28, // $E2C1 + 28, // $E2C2 + 28, // $E2C3 + 28, // $E2C4 + 28, // $E2C5 + 28, // $E2C6 + 28, // $E2C7 + 28, // $E2C8 + 28, // $E2C9 + 28, // $E2CA + 28, // $E2CB + 28, // $E2CC + 28, // $E2CD + 28, // $E2CE + 28, // $E2CF + 28, // $E2D0 + 28, // $E2D1 + 28, // $E2D2 + 28, // $E2D3 + 28, // $E2D4 + 28, // $E2D5 + 28, // $E2D6 + 28, // $E2D7 + 28, // $E2D8 + 28, // $E2D9 + 28, // $E2DA + 28, // $E2DB + 28, // $E2DC + 28, // $E2DD + 28, // $E2DE + 28, // $E2DF + 28, // $E2E0 + 28, // $E2E1 + 28, // $E2E2 + 28, // $E2E3 + 28, // $E2E4 + 28, // $E2E5 + 28, // $E2E6 + 28, // $E2E7 + 28, // $E2E8 + 28, // $E2E9 + 28, // $E2EA + 28, // $E2EB + 28, // $E2EC + 28, // $E2ED + 28, // $E2EE + 28, // $E2EF + 28, // $E2F0 + 28, // $E2F1 + 28, // $E2F2 + 28, // $E2F3 + 28, // $E2F4 + 28, // $E2F5 + 28, // $E2F6 + 28, // $E2F7 + 28, // $E2F8 + 28, // $E2F9 + 28, // $E2FA + 28, // $E2FB + 28, // $E2FC + 28, // $E2FD + 28, // $E2FE + 28, // $E2FF + 28, // $E300 + 28, // $E301 + 28, // $E302 + 28, // $E303 + 28, // $E304 + 28, // $E305 + 28, // $E306 + 28, // $E307 + 28, // $E308 + 28, // $E309 + 28, // $E30A + 28, // $E30B + 28, // $E30C + 28, // $E30D + 28, // $E30E + 28, // $E30F + 28, // $E310 + 28, // $E311 + 28, // $E312 + 28, // $E313 + 28, // $E314 + 28, // $E315 + 28, // $E316 + 28, // $E317 + 28, // $E318 + 28, // $E319 + 28, // $E31A + 28, // $E31B + 28, // $E31C + 28, // $E31D + 28, // $E31E + 28, // $E31F + 28, // $E320 + 28, // $E321 + 28, // $E322 + 28, // $E323 + 28, // $E324 + 28, // $E325 + 28, // $E326 + 28, // $E327 + 28, // $E328 + 28, // $E329 + 28, // $E32A + 28, // $E32B + 28, // $E32C + 28, // $E32D + 28, // $E32E + 28, // $E32F + 28, // $E330 + 28, // $E331 + 28, // $E332 + 28, // $E333 + 28, // $E334 + 28, // $E335 + 28, // $E336 + 28, // $E337 + 28, // $E338 + 28, // $E339 + 28, // $E33A + 28, // $E33B + 28, // $E33C + 28, // $E33D + 28, // $E33E + 28, // $E33F + 28, // $E340 + 28, // $E341 + 28, // $E342 + 28, // $E343 + 28, // $E344 + 28, // $E345 + 28, // $E346 + 28, // $E347 + 28, // $E348 + 28, // $E349 + 28, // $E34A + 28, // $E34B + 28, // $E34C + 28, // $E34D + 28, // $E34E + 28, // $E34F + 28, // $E350 + 28, // $E351 + 28, // $E352 + 28, // $E353 + 28, // $E354 + 28, // $E355 + 28, // $E356 + 28, // $E357 + 28, // $E358 + 28, // $E359 + 28, // $E35A + 28, // $E35B + 28, // $E35C + 28, // $E35D + 28, // $E35E + 28, // $E35F + 28, // $E360 + 28, // $E361 + 28, // $E362 + 28, // $E363 + 28, // $E364 + 28, // $E365 + 28, // $E366 + 28, // $E367 + 28, // $E368 + 28, // $E369 + 28, // $E36A + 28, // $E36B + 28, // $E36C + 28, // $E36D + 28, // $E36E + 28, // $E36F + 28, // $E370 + 28, // $E371 + 28, // $E372 + 28, // $E373 + 28, // $E374 + 28, // $E375 + 28, // $E376 + 28, // $E377 + 28, // $E378 + 28, // $E379 + 28, // $E37A + 28, // $E37B + 28, // $E37C + 28, // $E37D + 28, // $E37E + 28, // $E37F + 28, // $E380 + 28, // $E381 + 28, // $E382 + 28, // $E383 + 28, // $E384 + 28, // $E385 + 28, // $E386 + 28, // $E387 + 28, // $E388 + 28, // $E389 + 28, // $E38A + 28, // $E38B + 28, // $E38C + 28, // $E38D + 28, // $E38E + 28, // $E38F + 28, // $E390 + 28, // $E391 + 28, // $E392 + 28, // $E393 + 28, // $E394 + 28, // $E395 + 28, // $E396 + 28, // $E397 + 28, // $E398 + 28, // $E399 + 28, // $E39A + 28, // $E39B + 28, // $E39C + 28, // $E39D + 28, // $E39E + 28, // $E39F + 28, // $E3A0 + 28, // $E3A1 + 28, // $E3A2 + 28, // $E3A3 + 28, // $E3A4 + 28, // $E3A5 + 28, // $E3A6 + 28, // $E3A7 + 28, // $E3A8 + 28, // $E3A9 + 28, // $E3AA + 28, // $E3AB + 28, // $E3AC + 28, // $E3AD + 28, // $E3AE + 28, // $E3AF + 28, // $E3B0 + 28, // $E3B1 + 28, // $E3B2 + 28, // $E3B3 + 28, // $E3B4 + 28, // $E3B5 + 28, // $E3B6 + 28, // $E3B7 + 28, // $E3B8 + 28, // $E3B9 + 28, // $E3BA + 28, // $E3BB + 28, // $E3BC + 28, // $E3BD + 28, // $E3BE + 28, // $E3BF + 28, // $E3C0 + 28, // $E3C1 + 28, // $E3C2 + 28, // $E3C3 + 28, // $E3C4 + 28, // $E3C5 + 28, // $E3C6 + 28, // $E3C7 + 28, // $E3C8 + 28, // $E3C9 + 28, // $E3CA + 28, // $E3CB + 28, // $E3CC + 28, // $E3CD + 28, // $E3CE + 28, // $E3CF + 28, // $E3D0 + 28, // $E3D1 + 28, // $E3D2 + 28, // $E3D3 + 28, // $E3D4 + 28, // $E3D5 + 28, // $E3D6 + 28, // $E3D7 + 28, // $E3D8 + 28, // $E3D9 + 28, // $E3DA + 28, // $E3DB + 28, // $E3DC + 28, // $E3DD + 28, // $E3DE + 28, // $E3DF + 28, // $E3E0 + 28, // $E3E1 + 28, // $E3E2 + 28, // $E3E3 + 28, // $E3E4 + 28, // $E3E5 + 28, // $E3E6 + 28, // $E3E7 + 28, // $E3E8 + 28, // $E3E9 + 28, // $E3EA + 28, // $E3EB + 28, // $E3EC + 28, // $E3ED + 28, // $E3EE + 28, // $E3EF + 28, // $E3F0 + 28, // $E3F1 + 28, // $E3F2 + 28, // $E3F3 + 28, // $E3F4 + 28, // $E3F5 + 28, // $E3F6 + 28, // $E3F7 + 28, // $E3F8 + 28, // $E3F9 + 28, // $E3FA + 28, // $E3FB + 28, // $E3FC + 28, // $E3FD + 28, // $E3FE + 28, // $E3FF + 28, // $E400 + 28, // $E401 + 28, // $E402 + 28, // $E403 + 28, // $E404 + 28, // $E405 + 28, // $E406 + 28, // $E407 + 28, // $E408 + 28, // $E409 + 28, // $E40A + 28, // $E40B + 28, // $E40C + 28, // $E40D + 28, // $E40E + 28, // $E40F + 28, // $E410 + 28, // $E411 + 28, // $E412 + 28, // $E413 + 28, // $E414 + 28, // $E415 + 28, // $E416 + 28, // $E417 + 28, // $E418 + 28, // $E419 + 28, // $E41A + 28, // $E41B + 28, // $E41C + 28, // $E41D + 28, // $E41E + 28, // $E41F + 28, // $E420 + 28, // $E421 + 28, // $E422 + 28, // $E423 + 28, // $E424 + 28, // $E425 + 28, // $E426 + 28, // $E427 + 28, // $E428 + 28, // $E429 + 28, // $E42A + 28, // $E42B + 28, // $E42C + 28, // $E42D + 28, // $E42E + 28, // $E42F + 28, // $E430 + 28, // $E431 + 28, // $E432 + 28, // $E433 + 28, // $E434 + 28, // $E435 + 28, // $E436 + 28, // $E437 + 28, // $E438 + 28, // $E439 + 28, // $E43A + 28, // $E43B + 28, // $E43C + 28, // $E43D + 28, // $E43E + 28, // $E43F + 28, // $E440 + 28, // $E441 + 28, // $E442 + 28, // $E443 + 28, // $E444 + 28, // $E445 + 28, // $E446 + 28, // $E447 + 28, // $E448 + 28, // $E449 + 28, // $E44A + 28, // $E44B + 28, // $E44C + 28, // $E44D + 28, // $E44E + 28, // $E44F + 28, // $E450 + 28, // $E451 + 28, // $E452 + 28, // $E453 + 28, // $E454 + 28, // $E455 + 28, // $E456 + 28, // $E457 + 28, // $E458 + 28, // $E459 + 28, // $E45A + 28, // $E45B + 28, // $E45C + 28, // $E45D + 28, // $E45E + 28, // $E45F + 28, // $E460 + 28, // $E461 + 28, // $E462 + 28, // $E463 + 28, // $E464 + 28, // $E465 + 28, // $E466 + 28, // $E467 + 28, // $E468 + 28, // $E469 + 28, // $E46A + 28, // $E46B + 28, // $E46C + 28, // $E46D + 28, // $E46E + 28, // $E46F + 28, // $E470 + 28, // $E471 + 28, // $E472 + 28, // $E473 + 28, // $E474 + 28, // $E475 + 28, // $E476 + 28, // $E477 + 28, // $E478 + 28, // $E479 + 28, // $E47A + 28, // $E47B + 28, // $E47C + 28, // $E47D + 28, // $E47E + 28, // $E47F + 28, // $E480 + 28, // $E481 + 28, // $E482 + 28, // $E483 + 28, // $E484 + 28, // $E485 + 28, // $E486 + 28, // $E487 + 28, // $E488 + 28, // $E489 + 28, // $E48A + 28, // $E48B + 28, // $E48C + 28, // $E48D + 28, // $E48E + 28, // $E48F + 28, // $E490 + 28, // $E491 + 28, // $E492 + 28, // $E493 + 28, // $E494 + 28, // $E495 + 28, // $E496 + 28, // $E497 + 28, // $E498 + 28, // $E499 + 28, // $E49A + 28, // $E49B + 28, // $E49C + 28, // $E49D + 28, // $E49E + 28, // $E49F + 28, // $E4A0 + 28, // $E4A1 + 28, // $E4A2 + 28, // $E4A3 + 28, // $E4A4 + 28, // $E4A5 + 28, // $E4A6 + 28, // $E4A7 + 28, // $E4A8 + 28, // $E4A9 + 28, // $E4AA + 28, // $E4AB + 28, // $E4AC + 28, // $E4AD + 28, // $E4AE + 28, // $E4AF + 28, // $E4B0 + 28, // $E4B1 + 28, // $E4B2 + 28, // $E4B3 + 28, // $E4B4 + 28, // $E4B5 + 28, // $E4B6 + 28, // $E4B7 + 28, // $E4B8 + 28, // $E4B9 + 28, // $E4BA + 28, // $E4BB + 28, // $E4BC + 28, // $E4BD + 28, // $E4BE + 28, // $E4BF + 28, // $E4C0 + 28, // $E4C1 + 28, // $E4C2 + 28, // $E4C3 + 28, // $E4C4 + 28, // $E4C5 + 28, // $E4C6 + 28, // $E4C7 + 28, // $E4C8 + 28, // $E4C9 + 28, // $E4CA + 28, // $E4CB + 28, // $E4CC + 28, // $E4CD + 28, // $E4CE + 28, // $E4CF + 28, // $E4D0 + 28, // $E4D1 + 28, // $E4D2 + 28, // $E4D3 + 28, // $E4D4 + 28, // $E4D5 + 28, // $E4D6 + 28, // $E4D7 + 28, // $E4D8 + 28, // $E4D9 + 28, // $E4DA + 28, // $E4DB + 28, // $E4DC + 28, // $E4DD + 28, // $E4DE + 28, // $E4DF + 28, // $E4E0 + 28, // $E4E1 + 28, // $E4E2 + 28, // $E4E3 + 28, // $E4E4 + 28, // $E4E5 + 28, // $E4E6 + 28, // $E4E7 + 28, // $E4E8 + 28, // $E4E9 + 28, // $E4EA + 28, // $E4EB + 28, // $E4EC + 28, // $E4ED + 28, // $E4EE + 28, // $E4EF + 28, // $E4F0 + 28, // $E4F1 + 28, // $E4F2 + 28, // $E4F3 + 28, // $E4F4 + 28, // $E4F5 + 28, // $E4F6 + 28, // $E4F7 + 28, // $E4F8 + 28, // $E4F9 + 28, // $E4FA + 28, // $E4FB + 28, // $E4FC + 28, // $E4FD + 28, // $E4FE + 28, // $E4FF + 28, // $E500 + 28, // $E501 + 28, // $E502 + 28, // $E503 + 28, // $E504 + 28, // $E505 + 28, // $E506 + 28, // $E507 + 28, // $E508 + 28, // $E509 + 28, // $E50A + 28, // $E50B + 28, // $E50C + 28, // $E50D + 28, // $E50E + 28, // $E50F + 28, // $E510 + 28, // $E511 + 28, // $E512 + 28, // $E513 + 28, // $E514 + 28, // $E515 + 28, // $E516 + 28, // $E517 + 28, // $E518 + 28, // $E519 + 28, // $E51A + 28, // $E51B + 28, // $E51C + 28, // $E51D + 28, // $E51E + 28, // $E51F + 28, // $E520 + 28, // $E521 + 28, // $E522 + 28, // $E523 + 28, // $E524 + 28, // $E525 + 28, // $E526 + 28, // $E527 + 28, // $E528 + 28, // $E529 + 28, // $E52A + 28, // $E52B + 28, // $E52C + 28, // $E52D + 28, // $E52E + 28, // $E52F + 28, // $E530 + 28, // $E531 + 28, // $E532 + 28, // $E533 + 28, // $E534 + 28, // $E535 + 28, // $E536 + 28, // $E537 + 28, // $E538 + 28, // $E539 + 28, // $E53A + 28, // $E53B + 28, // $E53C + 28, // $E53D + 28, // $E53E + 28, // $E53F + 28, // $E540 + 28, // $E541 + 28, // $E542 + 28, // $E543 + 28, // $E544 + 28, // $E545 + 28, // $E546 + 28, // $E547 + 28, // $E548 + 28, // $E549 + 28, // $E54A + 28, // $E54B + 28, // $E54C + 28, // $E54D + 28, // $E54E + 28, // $E54F + 28, // $E550 + 28, // $E551 + 28, // $E552 + 28, // $E553 + 28, // $E554 + 28, // $E555 + 28, // $E556 + 28, // $E557 + 28, // $E558 + 28, // $E559 + 28, // $E55A + 28, // $E55B + 28, // $E55C + 28, // $E55D + 28, // $E55E + 28, // $E55F + 28, // $E560 + 28, // $E561 + 28, // $E562 + 28, // $E563 + 28, // $E564 + 28, // $E565 + 28, // $E566 + 28, // $E567 + 28, // $E568 + 28, // $E569 + 28, // $E56A + 28, // $E56B + 28, // $E56C + 28, // $E56D + 28, // $E56E + 28, // $E56F + 28, // $E570 + 28, // $E571 + 28, // $E572 + 28, // $E573 + 28, // $E574 + 28, // $E575 + 28, // $E576 + 28, // $E577 + 28, // $E578 + 28, // $E579 + 28, // $E57A + 28, // $E57B + 28, // $E57C + 28, // $E57D + 28, // $E57E + 28, // $E57F + 28, // $E580 + 28, // $E581 + 28, // $E582 + 28, // $E583 + 28, // $E584 + 28, // $E585 + 28, // $E586 + 28, // $E587 + 28, // $E588 + 28, // $E589 + 28, // $E58A + 28, // $E58B + 28, // $E58C + 28, // $E58D + 28, // $E58E + 28, // $E58F + 28, // $E590 + 28, // $E591 + 28, // $E592 + 28, // $E593 + 28, // $E594 + 28, // $E595 + 28, // $E596 + 28, // $E597 + 28, // $E598 + 28, // $E599 + 28, // $E59A + 28, // $E59B + 28, // $E59C + 28, // $E59D + 28, // $E59E + 28, // $E59F + 28, // $E5A0 + 28, // $E5A1 + 28, // $E5A2 + 28, // $E5A3 + 28, // $E5A4 + 28, // $E5A5 + 28, // $E5A6 + 28, // $E5A7 + 28, // $E5A8 + 28, // $E5A9 + 28, // $E5AA + 28, // $E5AB + 28, // $E5AC + 28, // $E5AD + 28, // $E5AE + 28, // $E5AF + 28, // $E5B0 + 28, // $E5B1 + 28, // $E5B2 + 28, // $E5B3 + 28, // $E5B4 + 28, // $E5B5 + 28, // $E5B6 + 28, // $E5B7 + 28, // $E5B8 + 28, // $E5B9 + 28, // $E5BA + 28, // $E5BB + 28, // $E5BC + 28, // $E5BD + 28, // $E5BE + 28, // $E5BF + 28, // $E5C0 + 28, // $E5C1 + 28, // $E5C2 + 28, // $E5C3 + 28, // $E5C4 + 28, // $E5C5 + 28, // $E5C6 + 28, // $E5C7 + 28, // $E5C8 + 28, // $E5C9 + 28, // $E5CA + 28, // $E5CB + 28, // $E5CC + 28, // $E5CD + 28, // $E5CE + 28, // $E5CF + 28, // $E5D0 + 28, // $E5D1 + 28, // $E5D2 + 28, // $E5D3 + 28, // $E5D4 + 28, // $E5D5 + 28, // $E5D6 + 28, // $E5D7 + 28, // $E5D8 + 28, // $E5D9 + 28, // $E5DA + 28, // $E5DB + 28, // $E5DC + 28, // $E5DD + 28, // $E5DE + 28, // $E5DF + 28, // $E5E0 + 28, // $E5E1 + 28, // $E5E2 + 28, // $E5E3 + 28, // $E5E4 + 28, // $E5E5 + 28, // $E5E6 + 28, // $E5E7 + 28, // $E5E8 + 28, // $E5E9 + 28, // $E5EA + 28, // $E5EB + 28, // $E5EC + 28, // $E5ED + 28, // $E5EE + 28, // $E5EF + 28, // $E5F0 + 28, // $E5F1 + 28, // $E5F2 + 28, // $E5F3 + 28, // $E5F4 + 28, // $E5F5 + 28, // $E5F6 + 28, // $E5F7 + 28, // $E5F8 + 28, // $E5F9 + 28, // $E5FA + 28, // $E5FB + 28, // $E5FC + 28, // $E5FD + 28, // $E5FE + 28, // $E5FF + 28, // $E600 + 28, // $E601 + 28, // $E602 + 28, // $E603 + 28, // $E604 + 28, // $E605 + 28, // $E606 + 28, // $E607 + 28, // $E608 + 28, // $E609 + 28, // $E60A + 28, // $E60B + 28, // $E60C + 28, // $E60D + 28, // $E60E + 28, // $E60F + 28, // $E610 + 28, // $E611 + 28, // $E612 + 28, // $E613 + 28, // $E614 + 28, // $E615 + 28, // $E616 + 28, // $E617 + 28, // $E618 + 28, // $E619 + 28, // $E61A + 28, // $E61B + 28, // $E61C + 28, // $E61D + 28, // $E61E + 28, // $E61F + 28, // $E620 + 28, // $E621 + 28, // $E622 + 28, // $E623 + 28, // $E624 + 28, // $E625 + 28, // $E626 + 28, // $E627 + 28, // $E628 + 28, // $E629 + 28, // $E62A + 28, // $E62B + 28, // $E62C + 28, // $E62D + 28, // $E62E + 28, // $E62F + 28, // $E630 + 28, // $E631 + 28, // $E632 + 28, // $E633 + 28, // $E634 + 28, // $E635 + 28, // $E636 + 28, // $E637 + 28, // $E638 + 28, // $E639 + 28, // $E63A + 28, // $E63B + 28, // $E63C + 28, // $E63D + 28, // $E63E + 28, // $E63F + 28, // $E640 + 28, // $E641 + 28, // $E642 + 28, // $E643 + 28, // $E644 + 28, // $E645 + 28, // $E646 + 28, // $E647 + 28, // $E648 + 28, // $E649 + 28, // $E64A + 28, // $E64B + 28, // $E64C + 28, // $E64D + 28, // $E64E + 28, // $E64F + 28, // $E650 + 28, // $E651 + 28, // $E652 + 28, // $E653 + 28, // $E654 + 28, // $E655 + 28, // $E656 + 28, // $E657 + 28, // $E658 + 28, // $E659 + 28, // $E65A + 28, // $E65B + 28, // $E65C + 28, // $E65D + 28, // $E65E + 28, // $E65F + 28, // $E660 + 28, // $E661 + 28, // $E662 + 28, // $E663 + 28, // $E664 + 28, // $E665 + 28, // $E666 + 28, // $E667 + 28, // $E668 + 28, // $E669 + 28, // $E66A + 28, // $E66B + 28, // $E66C + 28, // $E66D + 28, // $E66E + 28, // $E66F + 28, // $E670 + 28, // $E671 + 28, // $E672 + 28, // $E673 + 28, // $E674 + 28, // $E675 + 28, // $E676 + 28, // $E677 + 28, // $E678 + 28, // $E679 + 28, // $E67A + 28, // $E67B + 28, // $E67C + 28, // $E67D + 28, // $E67E + 28, // $E67F + 28, // $E680 + 28, // $E681 + 28, // $E682 + 28, // $E683 + 28, // $E684 + 28, // $E685 + 28, // $E686 + 28, // $E687 + 28, // $E688 + 28, // $E689 + 28, // $E68A + 28, // $E68B + 28, // $E68C + 28, // $E68D + 28, // $E68E + 28, // $E68F + 28, // $E690 + 28, // $E691 + 28, // $E692 + 28, // $E693 + 28, // $E694 + 28, // $E695 + 28, // $E696 + 28, // $E697 + 28, // $E698 + 28, // $E699 + 28, // $E69A + 28, // $E69B + 28, // $E69C + 28, // $E69D + 28, // $E69E + 28, // $E69F + 28, // $E6A0 + 28, // $E6A1 + 28, // $E6A2 + 28, // $E6A3 + 28, // $E6A4 + 28, // $E6A5 + 28, // $E6A6 + 28, // $E6A7 + 28, // $E6A8 + 28, // $E6A9 + 28, // $E6AA + 28, // $E6AB + 28, // $E6AC + 28, // $E6AD + 28, // $E6AE + 28, // $E6AF + 28, // $E6B0 + 28, // $E6B1 + 28, // $E6B2 + 28, // $E6B3 + 28, // $E6B4 + 28, // $E6B5 + 28, // $E6B6 + 28, // $E6B7 + 28, // $E6B8 + 28, // $E6B9 + 28, // $E6BA + 28, // $E6BB + 28, // $E6BC + 28, // $E6BD + 28, // $E6BE + 28, // $E6BF + 28, // $E6C0 + 28, // $E6C1 + 28, // $E6C2 + 28, // $E6C3 + 28, // $E6C4 + 28, // $E6C5 + 28, // $E6C6 + 28, // $E6C7 + 28, // $E6C8 + 28, // $E6C9 + 28, // $E6CA + 28, // $E6CB + 28, // $E6CC + 28, // $E6CD + 28, // $E6CE + 28, // $E6CF + 28, // $E6D0 + 28, // $E6D1 + 28, // $E6D2 + 28, // $E6D3 + 28, // $E6D4 + 28, // $E6D5 + 28, // $E6D6 + 28, // $E6D7 + 28, // $E6D8 + 28, // $E6D9 + 28, // $E6DA + 28, // $E6DB + 28, // $E6DC + 28, // $E6DD + 28, // $E6DE + 28, // $E6DF + 28, // $E6E0 + 28, // $E6E1 + 28, // $E6E2 + 28, // $E6E3 + 28, // $E6E4 + 28, // $E6E5 + 28, // $E6E6 + 28, // $E6E7 + 28, // $E6E8 + 28, // $E6E9 + 28, // $E6EA + 28, // $E6EB + 28, // $E6EC + 28, // $E6ED + 28, // $E6EE + 28, // $E6EF + 28, // $E6F0 + 28, // $E6F1 + 28, // $E6F2 + 28, // $E6F3 + 28, // $E6F4 + 28, // $E6F5 + 28, // $E6F6 + 28, // $E6F7 + 28, // $E6F8 + 28, // $E6F9 + 28, // $E6FA + 28, // $E6FB + 28, // $E6FC + 28, // $E6FD + 28, // $E6FE + 28, // $E6FF + 28, // $E700 + 28, // $E701 + 28, // $E702 + 28, // $E703 + 28, // $E704 + 28, // $E705 + 28, // $E706 + 28, // $E707 + 28, // $E708 + 28, // $E709 + 28, // $E70A + 28, // $E70B + 28, // $E70C + 28, // $E70D + 28, // $E70E + 28, // $E70F + 28, // $E710 + 28, // $E711 + 28, // $E712 + 28, // $E713 + 28, // $E714 + 28, // $E715 + 28, // $E716 + 28, // $E717 + 28, // $E718 + 28, // $E719 + 28, // $E71A + 28, // $E71B + 28, // $E71C + 28, // $E71D + 28, // $E71E + 28, // $E71F + 28, // $E720 + 28, // $E721 + 28, // $E722 + 28, // $E723 + 28, // $E724 + 28, // $E725 + 28, // $E726 + 28, // $E727 + 28, // $E728 + 28, // $E729 + 28, // $E72A + 28, // $E72B + 28, // $E72C + 28, // $E72D + 28, // $E72E + 28, // $E72F + 28, // $E730 + 28, // $E731 + 28, // $E732 + 28, // $E733 + 28, // $E734 + 28, // $E735 + 28, // $E736 + 28, // $E737 + 28, // $E738 + 28, // $E739 + 28, // $E73A + 28, // $E73B + 28, // $E73C + 28, // $E73D + 28, // $E73E + 28, // $E73F + 28, // $E740 + 28, // $E741 + 28, // $E742 + 28, // $E743 + 28, // $E744 + 28, // $E745 + 28, // $E746 + 28, // $E747 + 28, // $E748 + 28, // $E749 + 28, // $E74A + 28, // $E74B + 28, // $E74C + 28, // $E74D + 28, // $E74E + 28, // $E74F + 28, // $E750 + 28, // $E751 + 28, // $E752 + 28, // $E753 + 28, // $E754 + 28, // $E755 + 28, // $E756 + 28, // $E757 + 28, // $E758 + 28, // $E759 + 28, // $E75A + 28, // $E75B + 28, // $E75C + 28, // $E75D + 28, // $E75E + 28, // $E75F + 28, // $E760 + 28, // $E761 + 28, // $E762 + 28, // $E763 + 28, // $E764 + 28, // $E765 + 28, // $E766 + 28, // $E767 + 28, // $E768 + 28, // $E769 + 28, // $E76A + 28, // $E76B + 28, // $E76C + 28, // $E76D + 28, // $E76E + 28, // $E76F + 28, // $E770 + 28, // $E771 + 28, // $E772 + 28, // $E773 + 28, // $E774 + 28, // $E775 + 28, // $E776 + 28, // $E777 + 28, // $E778 + 28, // $E779 + 28, // $E77A + 28, // $E77B + 28, // $E77C + 28, // $E77D + 28, // $E77E + 28, // $E77F + 28, // $E780 + 28, // $E781 + 28, // $E782 + 28, // $E783 + 28, // $E784 + 28, // $E785 + 28, // $E786 + 28, // $E787 + 28, // $E788 + 28, // $E789 + 28, // $E78A + 28, // $E78B + 28, // $E78C + 28, // $E78D + 28, // $E78E + 28, // $E78F + 28, // $E790 + 28, // $E791 + 28, // $E792 + 28, // $E793 + 28, // $E794 + 28, // $E795 + 28, // $E796 + 28, // $E797 + 28, // $E798 + 28, // $E799 + 28, // $E79A + 28, // $E79B + 28, // $E79C + 28, // $E79D + 28, // $E79E + 28, // $E79F + 28, // $E7A0 + 28, // $E7A1 + 28, // $E7A2 + 28, // $E7A3 + 28, // $E7A4 + 28, // $E7A5 + 28, // $E7A6 + 28, // $E7A7 + 28, // $E7A8 + 28, // $E7A9 + 28, // $E7AA + 28, // $E7AB + 28, // $E7AC + 28, // $E7AD + 28, // $E7AE + 28, // $E7AF + 28, // $E7B0 + 28, // $E7B1 + 28, // $E7B2 + 28, // $E7B3 + 28, // $E7B4 + 28, // $E7B5 + 28, // $E7B6 + 28, // $E7B7 + 28, // $E7B8 + 28, // $E7B9 + 28, // $E7BA + 28, // $E7BB + 28, // $E7BC + 28, // $E7BD + 28, // $E7BE + 28, // $E7BF + 28, // $E7C0 + 28, // $E7C1 + 28, // $E7C2 + 28, // $E7C3 + 28, // $E7C4 + 28, // $E7C5 + 28, // $E7C6 + 28, // $E7C7 + 28, // $E7C8 + 28, // $E7C9 + 28, // $E7CA + 28, // $E7CB + 28, // $E7CC + 28, // $E7CD + 28, // $E7CE + 28, // $E7CF + 28, // $E7D0 + 28, // $E7D1 + 28, // $E7D2 + 28, // $E7D3 + 28, // $E7D4 + 28, // $E7D5 + 28, // $E7D6 + 28, // $E7D7 + 28, // $E7D8 + 28, // $E7D9 + 28, // $E7DA + 28, // $E7DB + 28, // $E7DC + 28, // $E7DD + 28, // $E7DE + 28, // $E7DF + 28, // $E7E0 + 28, // $E7E1 + 28, // $E7E2 + 28, // $E7E3 + 28, // $E7E4 + 28, // $E7E5 + 28, // $E7E6 + 28, // $E7E7 + 28, // $E7E8 + 28, // $E7E9 + 28, // $E7EA + 28, // $E7EB + 28, // $E7EC + 28, // $E7ED + 28, // $E7EE + 28, // $E7EF + 28, // $E7F0 + 28, // $E7F1 + 28, // $E7F2 + 28, // $E7F3 + 28, // $E7F4 + 28, // $E7F5 + 28, // $E7F6 + 28, // $E7F7 + 28, // $E7F8 + 28, // $E7F9 + 28, // $E7FA + 28, // $E7FB + 28, // $E7FC + 28, // $E7FD + 28, // $E7FE + 28, // $E7FF + 28, // $E800 + 28, // $E801 + 28, // $E802 + 28, // $E803 + 28, // $E804 + 28, // $E805 + 28, // $E806 + 28, // $E807 + 28, // $E808 + 28, // $E809 + 28, // $E80A + 28, // $E80B + 28, // $E80C + 28, // $E80D + 28, // $E80E + 28, // $E80F + 28, // $E810 + 28, // $E811 + 28, // $E812 + 28, // $E813 + 28, // $E814 + 28, // $E815 + 28, // $E816 + 28, // $E817 + 28, // $E818 + 28, // $E819 + 28, // $E81A + 28, // $E81B + 28, // $E81C + 28, // $E81D + 28, // $E81E + 28, // $E81F + 28, // $E820 + 28, // $E821 + 28, // $E822 + 28, // $E823 + 28, // $E824 + 28, // $E825 + 28, // $E826 + 28, // $E827 + 28, // $E828 + 28, // $E829 + 28, // $E82A + 28, // $E82B + 28, // $E82C + 28, // $E82D + 28, // $E82E + 28, // $E82F + 28, // $E830 + 28, // $E831 + 28, // $E832 + 28, // $E833 + 28, // $E834 + 28, // $E835 + 28, // $E836 + 28, // $E837 + 28, // $E838 + 28, // $E839 + 28, // $E83A + 28, // $E83B + 28, // $E83C + 28, // $E83D + 28, // $E83E + 28, // $E83F + 28, // $E840 + 28, // $E841 + 28, // $E842 + 28, // $E843 + 28, // $E844 + 28, // $E845 + 28, // $E846 + 28, // $E847 + 28, // $E848 + 28, // $E849 + 28, // $E84A + 28, // $E84B + 28, // $E84C + 28, // $E84D + 28, // $E84E + 28, // $E84F + 28, // $E850 + 28, // $E851 + 28, // $E852 + 28, // $E853 + 28, // $E854 + 28, // $E855 + 28, // $E856 + 28, // $E857 + 28, // $E858 + 28, // $E859 + 28, // $E85A + 28, // $E85B + 28, // $E85C + 28, // $E85D + 28, // $E85E + 28, // $E85F + 28, // $E860 + 28, // $E861 + 28, // $E862 + 28, // $E863 + 28, // $E864 + 28, // $E865 + 28, // $E866 + 28, // $E867 + 28, // $E868 + 28, // $E869 + 28, // $E86A + 28, // $E86B + 28, // $E86C + 28, // $E86D + 28, // $E86E + 28, // $E86F + 28, // $E870 + 28, // $E871 + 28, // $E872 + 28, // $E873 + 28, // $E874 + 28, // $E875 + 28, // $E876 + 28, // $E877 + 28, // $E878 + 28, // $E879 + 28, // $E87A + 28, // $E87B + 28, // $E87C + 28, // $E87D + 28, // $E87E + 28, // $E87F + 28, // $E880 + 28, // $E881 + 28, // $E882 + 28, // $E883 + 28, // $E884 + 28, // $E885 + 28, // $E886 + 28, // $E887 + 28, // $E888 + 28, // $E889 + 28, // $E88A + 28, // $E88B + 28, // $E88C + 28, // $E88D + 28, // $E88E + 28, // $E88F + 28, // $E890 + 28, // $E891 + 28, // $E892 + 28, // $E893 + 28, // $E894 + 28, // $E895 + 28, // $E896 + 28, // $E897 + 28, // $E898 + 28, // $E899 + 28, // $E89A + 28, // $E89B + 28, // $E89C + 28, // $E89D + 28, // $E89E + 28, // $E89F + 28, // $E8A0 + 28, // $E8A1 + 28, // $E8A2 + 28, // $E8A3 + 28, // $E8A4 + 28, // $E8A5 + 28, // $E8A6 + 28, // $E8A7 + 28, // $E8A8 + 28, // $E8A9 + 28, // $E8AA + 28, // $E8AB + 28, // $E8AC + 28, // $E8AD + 28, // $E8AE + 28, // $E8AF + 28, // $E8B0 + 28, // $E8B1 + 28, // $E8B2 + 28, // $E8B3 + 28, // $E8B4 + 28, // $E8B5 + 28, // $E8B6 + 28, // $E8B7 + 28, // $E8B8 + 28, // $E8B9 + 28, // $E8BA + 28, // $E8BB + 28, // $E8BC + 28, // $E8BD + 28, // $E8BE + 28, // $E8BF + 28, // $E8C0 + 28, // $E8C1 + 28, // $E8C2 + 28, // $E8C3 + 28, // $E8C4 + 28, // $E8C5 + 28, // $E8C6 + 28, // $E8C7 + 28, // $E8C8 + 28, // $E8C9 + 28, // $E8CA + 28, // $E8CB + 28, // $E8CC + 28, // $E8CD + 28, // $E8CE + 28, // $E8CF + 28, // $E8D0 + 28, // $E8D1 + 28, // $E8D2 + 28, // $E8D3 + 28, // $E8D4 + 28, // $E8D5 + 28, // $E8D6 + 28, // $E8D7 + 28, // $E8D8 + 28, // $E8D9 + 28, // $E8DA + 28, // $E8DB + 28, // $E8DC + 28, // $E8DD + 28, // $E8DE + 28, // $E8DF + 28, // $E8E0 + 28, // $E8E1 + 28, // $E8E2 + 28, // $E8E3 + 28, // $E8E4 + 28, // $E8E5 + 28, // $E8E6 + 28, // $E8E7 + 28, // $E8E8 + 28, // $E8E9 + 28, // $E8EA + 28, // $E8EB + 28, // $E8EC + 28, // $E8ED + 28, // $E8EE + 28, // $E8EF + 28, // $E8F0 + 28, // $E8F1 + 28, // $E8F2 + 28, // $E8F3 + 28, // $E8F4 + 28, // $E8F5 + 28, // $E8F6 + 28, // $E8F7 + 28, // $E8F8 + 28, // $E8F9 + 28, // $E8FA + 28, // $E8FB + 28, // $E8FC + 28, // $E8FD + 28, // $E8FE + 28, // $E8FF + 28, // $E900 + 28, // $E901 + 28, // $E902 + 28, // $E903 + 28, // $E904 + 28, // $E905 + 28, // $E906 + 28, // $E907 + 28, // $E908 + 28, // $E909 + 28, // $E90A + 28, // $E90B + 28, // $E90C + 28, // $E90D + 28, // $E90E + 28, // $E90F + 28, // $E910 + 28, // $E911 + 28, // $E912 + 28, // $E913 + 28, // $E914 + 28, // $E915 + 28, // $E916 + 28, // $E917 + 28, // $E918 + 28, // $E919 + 28, // $E91A + 28, // $E91B + 28, // $E91C + 28, // $E91D + 28, // $E91E + 28, // $E91F + 28, // $E920 + 28, // $E921 + 28, // $E922 + 28, // $E923 + 28, // $E924 + 28, // $E925 + 28, // $E926 + 28, // $E927 + 28, // $E928 + 28, // $E929 + 28, // $E92A + 28, // $E92B + 28, // $E92C + 28, // $E92D + 28, // $E92E + 28, // $E92F + 28, // $E930 + 28, // $E931 + 28, // $E932 + 28, // $E933 + 28, // $E934 + 28, // $E935 + 28, // $E936 + 28, // $E937 + 28, // $E938 + 28, // $E939 + 28, // $E93A + 28, // $E93B + 28, // $E93C + 28, // $E93D + 28, // $E93E + 28, // $E93F + 28, // $E940 + 28, // $E941 + 28, // $E942 + 28, // $E943 + 28, // $E944 + 28, // $E945 + 28, // $E946 + 28, // $E947 + 28, // $E948 + 28, // $E949 + 28, // $E94A + 28, // $E94B + 28, // $E94C + 28, // $E94D + 28, // $E94E + 28, // $E94F + 28, // $E950 + 28, // $E951 + 28, // $E952 + 28, // $E953 + 28, // $E954 + 28, // $E955 + 28, // $E956 + 28, // $E957 + 28, // $E958 + 28, // $E959 + 28, // $E95A + 28, // $E95B + 28, // $E95C + 28, // $E95D + 28, // $E95E + 28, // $E95F + 28, // $E960 + 28, // $E961 + 28, // $E962 + 28, // $E963 + 28, // $E964 + 28, // $E965 + 28, // $E966 + 28, // $E967 + 28, // $E968 + 28, // $E969 + 28, // $E96A + 28, // $E96B + 28, // $E96C + 28, // $E96D + 28, // $E96E + 28, // $E96F + 28, // $E970 + 28, // $E971 + 28, // $E972 + 28, // $E973 + 28, // $E974 + 28, // $E975 + 28, // $E976 + 28, // $E977 + 28, // $E978 + 28, // $E979 + 28, // $E97A + 28, // $E97B + 28, // $E97C + 28, // $E97D + 28, // $E97E + 28, // $E97F + 28, // $E980 + 28, // $E981 + 28, // $E982 + 28, // $E983 + 28, // $E984 + 28, // $E985 + 28, // $E986 + 28, // $E987 + 28, // $E988 + 28, // $E989 + 28, // $E98A + 28, // $E98B + 28, // $E98C + 28, // $E98D + 28, // $E98E + 28, // $E98F + 28, // $E990 + 28, // $E991 + 28, // $E992 + 28, // $E993 + 28, // $E994 + 28, // $E995 + 28, // $E996 + 28, // $E997 + 28, // $E998 + 28, // $E999 + 28, // $E99A + 28, // $E99B + 28, // $E99C + 28, // $E99D + 28, // $E99E + 28, // $E99F + 28, // $E9A0 + 28, // $E9A1 + 28, // $E9A2 + 28, // $E9A3 + 28, // $E9A4 + 28, // $E9A5 + 28, // $E9A6 + 28, // $E9A7 + 28, // $E9A8 + 28, // $E9A9 + 28, // $E9AA + 28, // $E9AB + 28, // $E9AC + 28, // $E9AD + 28, // $E9AE + 28, // $E9AF + 28, // $E9B0 + 28, // $E9B1 + 28, // $E9B2 + 28, // $E9B3 + 28, // $E9B4 + 28, // $E9B5 + 28, // $E9B6 + 28, // $E9B7 + 28, // $E9B8 + 28, // $E9B9 + 28, // $E9BA + 28, // $E9BB + 28, // $E9BC + 28, // $E9BD + 28, // $E9BE + 28, // $E9BF + 28, // $E9C0 + 28, // $E9C1 + 28, // $E9C2 + 28, // $E9C3 + 28, // $E9C4 + 28, // $E9C5 + 28, // $E9C6 + 28, // $E9C7 + 28, // $E9C8 + 28, // $E9C9 + 28, // $E9CA + 28, // $E9CB + 28, // $E9CC + 28, // $E9CD + 28, // $E9CE + 28, // $E9CF + 28, // $E9D0 + 28, // $E9D1 + 28, // $E9D2 + 28, // $E9D3 + 28, // $E9D4 + 28, // $E9D5 + 28, // $E9D6 + 28, // $E9D7 + 28, // $E9D8 + 28, // $E9D9 + 28, // $E9DA + 28, // $E9DB + 28, // $E9DC + 28, // $E9DD + 28, // $E9DE + 28, // $E9DF + 28, // $E9E0 + 28, // $E9E1 + 28, // $E9E2 + 28, // $E9E3 + 28, // $E9E4 + 28, // $E9E5 + 28, // $E9E6 + 28, // $E9E7 + 28, // $E9E8 + 28, // $E9E9 + 28, // $E9EA + 28, // $E9EB + 28, // $E9EC + 28, // $E9ED + 28, // $E9EE + 28, // $E9EF + 28, // $E9F0 + 28, // $E9F1 + 28, // $E9F2 + 28, // $E9F3 + 28, // $E9F4 + 28, // $E9F5 + 28, // $E9F6 + 28, // $E9F7 + 28, // $E9F8 + 28, // $E9F9 + 28, // $E9FA + 28, // $E9FB + 28, // $E9FC + 28, // $E9FD + 28, // $E9FE + 28, // $E9FF + 28, // $EA00 + 28, // $EA01 + 28, // $EA02 + 28, // $EA03 + 28, // $EA04 + 28, // $EA05 + 28, // $EA06 + 28, // $EA07 + 28, // $EA08 + 28, // $EA09 + 28, // $EA0A + 28, // $EA0B + 28, // $EA0C + 28, // $EA0D + 28, // $EA0E + 28, // $EA0F + 28, // $EA10 + 28, // $EA11 + 28, // $EA12 + 28, // $EA13 + 28, // $EA14 + 28, // $EA15 + 28, // $EA16 + 28, // $EA17 + 28, // $EA18 + 28, // $EA19 + 28, // $EA1A + 28, // $EA1B + 28, // $EA1C + 28, // $EA1D + 28, // $EA1E + 28, // $EA1F + 28, // $EA20 + 28, // $EA21 + 28, // $EA22 + 28, // $EA23 + 28, // $EA24 + 28, // $EA25 + 28, // $EA26 + 28, // $EA27 + 28, // $EA28 + 28, // $EA29 + 28, // $EA2A + 28, // $EA2B + 28, // $EA2C + 28, // $EA2D + 28, // $EA2E + 28, // $EA2F + 28, // $EA30 + 28, // $EA31 + 28, // $EA32 + 28, // $EA33 + 28, // $EA34 + 28, // $EA35 + 28, // $EA36 + 28, // $EA37 + 28, // $EA38 + 28, // $EA39 + 28, // $EA3A + 28, // $EA3B + 28, // $EA3C + 28, // $EA3D + 28, // $EA3E + 28, // $EA3F + 28, // $EA40 + 28, // $EA41 + 28, // $EA42 + 28, // $EA43 + 28, // $EA44 + 28, // $EA45 + 28, // $EA46 + 28, // $EA47 + 28, // $EA48 + 28, // $EA49 + 28, // $EA4A + 28, // $EA4B + 28, // $EA4C + 28, // $EA4D + 28, // $EA4E + 28, // $EA4F + 28, // $EA50 + 28, // $EA51 + 28, // $EA52 + 28, // $EA53 + 28, // $EA54 + 28, // $EA55 + 28, // $EA56 + 28, // $EA57 + 28, // $EA58 + 28, // $EA59 + 28, // $EA5A + 28, // $EA5B + 28, // $EA5C + 28, // $EA5D + 28, // $EA5E + 28, // $EA5F + 28, // $EA60 + 28, // $EA61 + 28, // $EA62 + 28, // $EA63 + 28, // $EA64 + 28, // $EA65 + 28, // $EA66 + 28, // $EA67 + 28, // $EA68 + 28, // $EA69 + 28, // $EA6A + 28, // $EA6B + 28, // $EA6C + 28, // $EA6D + 28, // $EA6E + 28, // $EA6F + 28, // $EA70 + 28, // $EA71 + 28, // $EA72 + 28, // $EA73 + 28, // $EA74 + 28, // $EA75 + 28, // $EA76 + 28, // $EA77 + 28, // $EA78 + 28, // $EA79 + 28, // $EA7A + 28, // $EA7B + 28, // $EA7C + 28, // $EA7D + 28, // $EA7E + 28, // $EA7F + 28, // $EA80 + 28, // $EA81 + 28, // $EA82 + 28, // $EA83 + 28, // $EA84 + 28, // $EA85 + 28, // $EA86 + 28, // $EA87 + 28, // $EA88 + 28, // $EA89 + 28, // $EA8A + 28, // $EA8B + 28, // $EA8C + 28, // $EA8D + 28, // $EA8E + 28, // $EA8F + 28, // $EA90 + 28, // $EA91 + 28, // $EA92 + 28, // $EA93 + 28, // $EA94 + 28, // $EA95 + 28, // $EA96 + 28, // $EA97 + 28, // $EA98 + 28, // $EA99 + 28, // $EA9A + 28, // $EA9B + 28, // $EA9C + 28, // $EA9D + 28, // $EA9E + 28, // $EA9F + 28, // $EAA0 + 28, // $EAA1 + 28, // $EAA2 + 28, // $EAA3 + 28, // $EAA4 + 28, // $EAA5 + 28, // $EAA6 + 28, // $EAA7 + 28, // $EAA8 + 28, // $EAA9 + 28, // $EAAA + 28, // $EAAB + 28, // $EAAC + 28, // $EAAD + 28, // $EAAE + 28, // $EAAF + 28, // $EAB0 + 28, // $EAB1 + 28, // $EAB2 + 28, // $EAB3 + 28, // $EAB4 + 28, // $EAB5 + 28, // $EAB6 + 28, // $EAB7 + 28, // $EAB8 + 28, // $EAB9 + 28, // $EABA + 28, // $EABB + 28, // $EABC + 28, // $EABD + 28, // $EABE + 28, // $EABF + 28, // $EAC0 + 28, // $EAC1 + 28, // $EAC2 + 28, // $EAC3 + 28, // $EAC4 + 28, // $EAC5 + 28, // $EAC6 + 28, // $EAC7 + 28, // $EAC8 + 28, // $EAC9 + 28, // $EACA + 28, // $EACB + 28, // $EACC + 28, // $EACD + 28, // $EACE + 28, // $EACF + 28, // $EAD0 + 28, // $EAD1 + 28, // $EAD2 + 28, // $EAD3 + 28, // $EAD4 + 28, // $EAD5 + 28, // $EAD6 + 28, // $EAD7 + 28, // $EAD8 + 28, // $EAD9 + 28, // $EADA + 28, // $EADB + 28, // $EADC + 28, // $EADD + 28, // $EADE + 28, // $EADF + 28, // $EAE0 + 28, // $EAE1 + 28, // $EAE2 + 28, // $EAE3 + 28, // $EAE4 + 28, // $EAE5 + 28, // $EAE6 + 28, // $EAE7 + 28, // $EAE8 + 28, // $EAE9 + 28, // $EAEA + 28, // $EAEB + 28, // $EAEC + 28, // $EAED + 28, // $EAEE + 28, // $EAEF + 28, // $EAF0 + 28, // $EAF1 + 28, // $EAF2 + 28, // $EAF3 + 28, // $EAF4 + 28, // $EAF5 + 28, // $EAF6 + 28, // $EAF7 + 28, // $EAF8 + 28, // $EAF9 + 28, // $EAFA + 28, // $EAFB + 28, // $EAFC + 28, // $EAFD + 28, // $EAFE + 28, // $EAFF + 28, // $EB00 + 28, // $EB01 + 28, // $EB02 + 28, // $EB03 + 28, // $EB04 + 28, // $EB05 + 28, // $EB06 + 28, // $EB07 + 28, // $EB08 + 28, // $EB09 + 28, // $EB0A + 28, // $EB0B + 28, // $EB0C + 28, // $EB0D + 28, // $EB0E + 28, // $EB0F + 28, // $EB10 + 28, // $EB11 + 28, // $EB12 + 28, // $EB13 + 28, // $EB14 + 28, // $EB15 + 28, // $EB16 + 28, // $EB17 + 28, // $EB18 + 28, // $EB19 + 28, // $EB1A + 28, // $EB1B + 28, // $EB1C + 28, // $EB1D + 28, // $EB1E + 28, // $EB1F + 28, // $EB20 + 28, // $EB21 + 28, // $EB22 + 28, // $EB23 + 28, // $EB24 + 28, // $EB25 + 28, // $EB26 + 28, // $EB27 + 28, // $EB28 + 28, // $EB29 + 28, // $EB2A + 28, // $EB2B + 28, // $EB2C + 28, // $EB2D + 28, // $EB2E + 28, // $EB2F + 28, // $EB30 + 28, // $EB31 + 28, // $EB32 + 28, // $EB33 + 28, // $EB34 + 28, // $EB35 + 28, // $EB36 + 28, // $EB37 + 28, // $EB38 + 28, // $EB39 + 28, // $EB3A + 28, // $EB3B + 28, // $EB3C + 28, // $EB3D + 28, // $EB3E + 28, // $EB3F + 28, // $EB40 + 28, // $EB41 + 28, // $EB42 + 28, // $EB43 + 28, // $EB44 + 28, // $EB45 + 28, // $EB46 + 28, // $EB47 + 28, // $EB48 + 28, // $EB49 + 28, // $EB4A + 28, // $EB4B + 28, // $EB4C + 28, // $EB4D + 28, // $EB4E + 28, // $EB4F + 28, // $EB50 + 28, // $EB51 + 28, // $EB52 + 28, // $EB53 + 28, // $EB54 + 28, // $EB55 + 28, // $EB56 + 28, // $EB57 + 28, // $EB58 + 28, // $EB59 + 28, // $EB5A + 28, // $EB5B + 28, // $EB5C + 28, // $EB5D + 28, // $EB5E + 28, // $EB5F + 28, // $EB60 + 28, // $EB61 + 28, // $EB62 + 28, // $EB63 + 28, // $EB64 + 28, // $EB65 + 28, // $EB66 + 28, // $EB67 + 28, // $EB68 + 28, // $EB69 + 28, // $EB6A + 28, // $EB6B + 28, // $EB6C + 28, // $EB6D + 28, // $EB6E + 28, // $EB6F + 28, // $EB70 + 28, // $EB71 + 28, // $EB72 + 28, // $EB73 + 28, // $EB74 + 28, // $EB75 + 28, // $EB76 + 28, // $EB77 + 28, // $EB78 + 28, // $EB79 + 28, // $EB7A + 28, // $EB7B + 28, // $EB7C + 28, // $EB7D + 28, // $EB7E + 28, // $EB7F + 28, // $EB80 + 28, // $EB81 + 28, // $EB82 + 28, // $EB83 + 28, // $EB84 + 28, // $EB85 + 28, // $EB86 + 28, // $EB87 + 28, // $EB88 + 28, // $EB89 + 28, // $EB8A + 28, // $EB8B + 28, // $EB8C + 28, // $EB8D + 28, // $EB8E + 28, // $EB8F + 28, // $EB90 + 28, // $EB91 + 28, // $EB92 + 28, // $EB93 + 28, // $EB94 + 28, // $EB95 + 28, // $EB96 + 28, // $EB97 + 28, // $EB98 + 28, // $EB99 + 28, // $EB9A + 28, // $EB9B + 28, // $EB9C + 28, // $EB9D + 28, // $EB9E + 28, // $EB9F + 28, // $EBA0 + 28, // $EBA1 + 28, // $EBA2 + 28, // $EBA3 + 28, // $EBA4 + 28, // $EBA5 + 28, // $EBA6 + 28, // $EBA7 + 28, // $EBA8 + 28, // $EBA9 + 28, // $EBAA + 28, // $EBAB + 28, // $EBAC + 28, // $EBAD + 28, // $EBAE + 28, // $EBAF + 28, // $EBB0 + 28, // $EBB1 + 28, // $EBB2 + 28, // $EBB3 + 28, // $EBB4 + 28, // $EBB5 + 28, // $EBB6 + 28, // $EBB7 + 28, // $EBB8 + 28, // $EBB9 + 28, // $EBBA + 28, // $EBBB + 28, // $EBBC + 28, // $EBBD + 28, // $EBBE + 28, // $EBBF + 28, // $EBC0 + 28, // $EBC1 + 28, // $EBC2 + 28, // $EBC3 + 28, // $EBC4 + 28, // $EBC5 + 28, // $EBC6 + 28, // $EBC7 + 28, // $EBC8 + 28, // $EBC9 + 28, // $EBCA + 28, // $EBCB + 28, // $EBCC + 28, // $EBCD + 28, // $EBCE + 28, // $EBCF + 28, // $EBD0 + 28, // $EBD1 + 28, // $EBD2 + 28, // $EBD3 + 28, // $EBD4 + 28, // $EBD5 + 28, // $EBD6 + 28, // $EBD7 + 28, // $EBD8 + 28, // $EBD9 + 28, // $EBDA + 28, // $EBDB + 28, // $EBDC + 28, // $EBDD + 28, // $EBDE + 28, // $EBDF + 28, // $EBE0 + 28, // $EBE1 + 28, // $EBE2 + 28, // $EBE3 + 28, // $EBE4 + 28, // $EBE5 + 28, // $EBE6 + 28, // $EBE7 + 28, // $EBE8 + 28, // $EBE9 + 28, // $EBEA + 28, // $EBEB + 28, // $EBEC + 28, // $EBED + 28, // $EBEE + 28, // $EBEF + 28, // $EBF0 + 28, // $EBF1 + 28, // $EBF2 + 28, // $EBF3 + 28, // $EBF4 + 28, // $EBF5 + 28, // $EBF6 + 28, // $EBF7 + 28, // $EBF8 + 28, // $EBF9 + 28, // $EBFA + 28, // $EBFB + 28, // $EBFC + 28, // $EBFD + 28, // $EBFE + 28, // $EBFF + 28, // $EC00 + 28, // $EC01 + 28, // $EC02 + 28, // $EC03 + 28, // $EC04 + 28, // $EC05 + 28, // $EC06 + 28, // $EC07 + 28, // $EC08 + 28, // $EC09 + 28, // $EC0A + 28, // $EC0B + 28, // $EC0C + 28, // $EC0D + 28, // $EC0E + 28, // $EC0F + 28, // $EC10 + 28, // $EC11 + 28, // $EC12 + 28, // $EC13 + 28, // $EC14 + 28, // $EC15 + 28, // $EC16 + 28, // $EC17 + 28, // $EC18 + 28, // $EC19 + 28, // $EC1A + 28, // $EC1B + 28, // $EC1C + 28, // $EC1D + 28, // $EC1E + 28, // $EC1F + 28, // $EC20 + 28, // $EC21 + 28, // $EC22 + 28, // $EC23 + 28, // $EC24 + 28, // $EC25 + 28, // $EC26 + 28, // $EC27 + 28, // $EC28 + 28, // $EC29 + 28, // $EC2A + 28, // $EC2B + 28, // $EC2C + 28, // $EC2D + 28, // $EC2E + 28, // $EC2F + 28, // $EC30 + 28, // $EC31 + 28, // $EC32 + 28, // $EC33 + 28, // $EC34 + 28, // $EC35 + 28, // $EC36 + 28, // $EC37 + 28, // $EC38 + 28, // $EC39 + 28, // $EC3A + 28, // $EC3B + 28, // $EC3C + 28, // $EC3D + 28, // $EC3E + 28, // $EC3F + 28, // $EC40 + 28, // $EC41 + 28, // $EC42 + 28, // $EC43 + 28, // $EC44 + 28, // $EC45 + 28, // $EC46 + 28, // $EC47 + 28, // $EC48 + 28, // $EC49 + 28, // $EC4A + 28, // $EC4B + 28, // $EC4C + 28, // $EC4D + 28, // $EC4E + 28, // $EC4F + 28, // $EC50 + 28, // $EC51 + 28, // $EC52 + 28, // $EC53 + 28, // $EC54 + 28, // $EC55 + 28, // $EC56 + 28, // $EC57 + 28, // $EC58 + 28, // $EC59 + 28, // $EC5A + 28, // $EC5B + 28, // $EC5C + 28, // $EC5D + 28, // $EC5E + 28, // $EC5F + 28, // $EC60 + 28, // $EC61 + 28, // $EC62 + 28, // $EC63 + 28, // $EC64 + 28, // $EC65 + 28, // $EC66 + 28, // $EC67 + 28, // $EC68 + 28, // $EC69 + 28, // $EC6A + 28, // $EC6B + 28, // $EC6C + 28, // $EC6D + 28, // $EC6E + 28, // $EC6F + 28, // $EC70 + 28, // $EC71 + 28, // $EC72 + 28, // $EC73 + 28, // $EC74 + 28, // $EC75 + 28, // $EC76 + 28, // $EC77 + 28, // $EC78 + 28, // $EC79 + 28, // $EC7A + 28, // $EC7B + 28, // $EC7C + 28, // $EC7D + 28, // $EC7E + 28, // $EC7F + 28, // $EC80 + 28, // $EC81 + 28, // $EC82 + 28, // $EC83 + 28, // $EC84 + 28, // $EC85 + 28, // $EC86 + 28, // $EC87 + 28, // $EC88 + 28, // $EC89 + 28, // $EC8A + 28, // $EC8B + 28, // $EC8C + 28, // $EC8D + 28, // $EC8E + 28, // $EC8F + 28, // $EC90 + 28, // $EC91 + 28, // $EC92 + 28, // $EC93 + 28, // $EC94 + 28, // $EC95 + 28, // $EC96 + 28, // $EC97 + 28, // $EC98 + 28, // $EC99 + 28, // $EC9A + 28, // $EC9B + 28, // $EC9C + 28, // $EC9D + 28, // $EC9E + 28, // $EC9F + 28, // $ECA0 + 28, // $ECA1 + 28, // $ECA2 + 28, // $ECA3 + 28, // $ECA4 + 28, // $ECA5 + 28, // $ECA6 + 28, // $ECA7 + 28, // $ECA8 + 28, // $ECA9 + 28, // $ECAA + 28, // $ECAB + 28, // $ECAC + 28, // $ECAD + 28, // $ECAE + 28, // $ECAF + 28, // $ECB0 + 28, // $ECB1 + 28, // $ECB2 + 28, // $ECB3 + 28, // $ECB4 + 28, // $ECB5 + 28, // $ECB6 + 28, // $ECB7 + 28, // $ECB8 + 28, // $ECB9 + 28, // $ECBA + 28, // $ECBB + 28, // $ECBC + 28, // $ECBD + 28, // $ECBE + 28, // $ECBF + 28, // $ECC0 + 28, // $ECC1 + 28, // $ECC2 + 28, // $ECC3 + 28, // $ECC4 + 28, // $ECC5 + 28, // $ECC6 + 28, // $ECC7 + 28, // $ECC8 + 28, // $ECC9 + 28, // $ECCA + 28, // $ECCB + 28, // $ECCC + 28, // $ECCD + 28, // $ECCE + 28, // $ECCF + 28, // $ECD0 + 28, // $ECD1 + 28, // $ECD2 + 28, // $ECD3 + 28, // $ECD4 + 28, // $ECD5 + 28, // $ECD6 + 28, // $ECD7 + 28, // $ECD8 + 28, // $ECD9 + 28, // $ECDA + 28, // $ECDB + 28, // $ECDC + 28, // $ECDD + 28, // $ECDE + 28, // $ECDF + 28, // $ECE0 + 28, // $ECE1 + 28, // $ECE2 + 28, // $ECE3 + 28, // $ECE4 + 28, // $ECE5 + 28, // $ECE6 + 28, // $ECE7 + 28, // $ECE8 + 28, // $ECE9 + 28, // $ECEA + 28, // $ECEB + 28, // $ECEC + 28, // $ECED + 28, // $ECEE + 28, // $ECEF + 28, // $ECF0 + 28, // $ECF1 + 28, // $ECF2 + 28, // $ECF3 + 28, // $ECF4 + 28, // $ECF5 + 28, // $ECF6 + 28, // $ECF7 + 28, // $ECF8 + 28, // $ECF9 + 28, // $ECFA + 28, // $ECFB + 28, // $ECFC + 28, // $ECFD + 28, // $ECFE + 28, // $ECFF + 28, // $ED00 + 28, // $ED01 + 28, // $ED02 + 28, // $ED03 + 28, // $ED04 + 28, // $ED05 + 28, // $ED06 + 28, // $ED07 + 28, // $ED08 + 28, // $ED09 + 28, // $ED0A + 28, // $ED0B + 28, // $ED0C + 28, // $ED0D + 28, // $ED0E + 28, // $ED0F + 28, // $ED10 + 28, // $ED11 + 28, // $ED12 + 28, // $ED13 + 28, // $ED14 + 28, // $ED15 + 28, // $ED16 + 28, // $ED17 + 28, // $ED18 + 28, // $ED19 + 28, // $ED1A + 28, // $ED1B + 28, // $ED1C + 28, // $ED1D + 28, // $ED1E + 28, // $ED1F + 28, // $ED20 + 28, // $ED21 + 28, // $ED22 + 28, // $ED23 + 28, // $ED24 + 28, // $ED25 + 28, // $ED26 + 28, // $ED27 + 28, // $ED28 + 28, // $ED29 + 28, // $ED2A + 28, // $ED2B + 28, // $ED2C + 28, // $ED2D + 28, // $ED2E + 28, // $ED2F + 28, // $ED30 + 28, // $ED31 + 28, // $ED32 + 28, // $ED33 + 28, // $ED34 + 28, // $ED35 + 28, // $ED36 + 28, // $ED37 + 28, // $ED38 + 28, // $ED39 + 28, // $ED3A + 28, // $ED3B + 28, // $ED3C + 28, // $ED3D + 28, // $ED3E + 28, // $ED3F + 28, // $ED40 + 28, // $ED41 + 28, // $ED42 + 28, // $ED43 + 28, // $ED44 + 28, // $ED45 + 28, // $ED46 + 28, // $ED47 + 28, // $ED48 + 28, // $ED49 + 28, // $ED4A + 28, // $ED4B + 28, // $ED4C + 28, // $ED4D + 28, // $ED4E + 28, // $ED4F + 28, // $ED50 + 28, // $ED51 + 28, // $ED52 + 28, // $ED53 + 28, // $ED54 + 28, // $ED55 + 28, // $ED56 + 28, // $ED57 + 28, // $ED58 + 28, // $ED59 + 28, // $ED5A + 28, // $ED5B + 28, // $ED5C + 28, // $ED5D + 28, // $ED5E + 28, // $ED5F + 28, // $ED60 + 28, // $ED61 + 28, // $ED62 + 28, // $ED63 + 28, // $ED64 + 28, // $ED65 + 28, // $ED66 + 28, // $ED67 + 28, // $ED68 + 28, // $ED69 + 28, // $ED6A + 28, // $ED6B + 28, // $ED6C + 28, // $ED6D + 28, // $ED6E + 28, // $ED6F + 28, // $ED70 + 28, // $ED71 + 28, // $ED72 + 28, // $ED73 + 28, // $ED74 + 28, // $ED75 + 28, // $ED76 + 28, // $ED77 + 28, // $ED78 + 28, // $ED79 + 28, // $ED7A + 28, // $ED7B + 28, // $ED7C + 28, // $ED7D + 28, // $ED7E + 28, // $ED7F + 28, // $ED80 + 28, // $ED81 + 28, // $ED82 + 28, // $ED83 + 28, // $ED84 + 28, // $ED85 + 28, // $ED86 + 28, // $ED87 + 28, // $ED88 + 28, // $ED89 + 28, // $ED8A + 28, // $ED8B + 28, // $ED8C + 28, // $ED8D + 28, // $ED8E + 28, // $ED8F + 28, // $ED90 + 28, // $ED91 + 28, // $ED92 + 28, // $ED93 + 28, // $ED94 + 28, // $ED95 + 28, // $ED96 + 28, // $ED97 + 28, // $ED98 + 28, // $ED99 + 28, // $ED9A + 28, // $ED9B + 28, // $ED9C + 28, // $ED9D + 28, // $ED9E + 28, // $ED9F + 28, // $EDA0 + 28, // $EDA1 + 28, // $EDA2 + 28, // $EDA3 + 28, // $EDA4 + 28, // $EDA5 + 28, // $EDA6 + 28, // $EDA7 + 28, // $EDA8 + 28, // $EDA9 + 28, // $EDAA + 28, // $EDAB + 28, // $EDAC + 28, // $EDAD + 28, // $EDAE + 28, // $EDAF + 28, // $EDB0 + 28, // $EDB1 + 28, // $EDB2 + 28, // $EDB3 + 28, // $EDB4 + 28, // $EDB5 + 28, // $EDB6 + 28, // $EDB7 + 28, // $EDB8 + 28, // $EDB9 + 28, // $EDBA + 28, // $EDBB + 28, // $EDBC + 28, // $EDBD + 28, // $EDBE + 28, // $EDBF + 28, // $EDC0 + 28, // $EDC1 + 28, // $EDC2 + 28, // $EDC3 + 28, // $EDC4 + 28, // $EDC5 + 28, // $EDC6 + 28, // $EDC7 + 28, // $EDC8 + 28, // $EDC9 + 28, // $EDCA + 28, // $EDCB + 28, // $EDCC + 28, // $EDCD + 28, // $EDCE + 28, // $EDCF + 28, // $EDD0 + 28, // $EDD1 + 28, // $EDD2 + 28, // $EDD3 + 28, // $EDD4 + 28, // $EDD5 + 28, // $EDD6 + 28, // $EDD7 + 28, // $EDD8 + 28, // $EDD9 + 28, // $EDDA + 28, // $EDDB + 28, // $EDDC + 28, // $EDDD + 28, // $EDDE + 28, // $EDDF + 28, // $EDE0 + 28, // $EDE1 + 28, // $EDE2 + 28, // $EDE3 + 28, // $EDE4 + 28, // $EDE5 + 28, // $EDE6 + 28, // $EDE7 + 28, // $EDE8 + 28, // $EDE9 + 28, // $EDEA + 28, // $EDEB + 28, // $EDEC + 28, // $EDED + 28, // $EDEE + 28, // $EDEF + 28, // $EDF0 + 28, // $EDF1 + 28, // $EDF2 + 28, // $EDF3 + 28, // $EDF4 + 28, // $EDF5 + 28, // $EDF6 + 28, // $EDF7 + 28, // $EDF8 + 28, // $EDF9 + 28, // $EDFA + 28, // $EDFB + 28, // $EDFC + 28, // $EDFD + 28, // $EDFE + 28, // $EDFF + 28, // $EE00 + 28, // $EE01 + 28, // $EE02 + 28, // $EE03 + 28, // $EE04 + 28, // $EE05 + 28, // $EE06 + 28, // $EE07 + 28, // $EE08 + 28, // $EE09 + 28, // $EE0A + 28, // $EE0B + 28, // $EE0C + 28, // $EE0D + 28, // $EE0E + 28, // $EE0F + 28, // $EE10 + 28, // $EE11 + 28, // $EE12 + 28, // $EE13 + 28, // $EE14 + 28, // $EE15 + 28, // $EE16 + 28, // $EE17 + 28, // $EE18 + 28, // $EE19 + 28, // $EE1A + 28, // $EE1B + 28, // $EE1C + 28, // $EE1D + 28, // $EE1E + 28, // $EE1F + 28, // $EE20 + 28, // $EE21 + 28, // $EE22 + 28, // $EE23 + 28, // $EE24 + 28, // $EE25 + 28, // $EE26 + 28, // $EE27 + 28, // $EE28 + 28, // $EE29 + 28, // $EE2A + 28, // $EE2B + 28, // $EE2C + 28, // $EE2D + 28, // $EE2E + 28, // $EE2F + 28, // $EE30 + 28, // $EE31 + 28, // $EE32 + 28, // $EE33 + 28, // $EE34 + 28, // $EE35 + 28, // $EE36 + 28, // $EE37 + 28, // $EE38 + 28, // $EE39 + 28, // $EE3A + 28, // $EE3B + 28, // $EE3C + 28, // $EE3D + 28, // $EE3E + 28, // $EE3F + 28, // $EE40 + 28, // $EE41 + 28, // $EE42 + 28, // $EE43 + 28, // $EE44 + 28, // $EE45 + 28, // $EE46 + 28, // $EE47 + 28, // $EE48 + 28, // $EE49 + 28, // $EE4A + 28, // $EE4B + 28, // $EE4C + 28, // $EE4D + 28, // $EE4E + 28, // $EE4F + 28, // $EE50 + 28, // $EE51 + 28, // $EE52 + 28, // $EE53 + 28, // $EE54 + 28, // $EE55 + 28, // $EE56 + 28, // $EE57 + 28, // $EE58 + 28, // $EE59 + 28, // $EE5A + 28, // $EE5B + 28, // $EE5C + 28, // $EE5D + 28, // $EE5E + 28, // $EE5F + 28, // $EE60 + 28, // $EE61 + 28, // $EE62 + 28, // $EE63 + 28, // $EE64 + 28, // $EE65 + 28, // $EE66 + 28, // $EE67 + 28, // $EE68 + 28, // $EE69 + 28, // $EE6A + 28, // $EE6B + 28, // $EE6C + 28, // $EE6D + 28, // $EE6E + 28, // $EE6F + 28, // $EE70 + 28, // $EE71 + 28, // $EE72 + 28, // $EE73 + 28, // $EE74 + 28, // $EE75 + 28, // $EE76 + 28, // $EE77 + 28, // $EE78 + 28, // $EE79 + 28, // $EE7A + 28, // $EE7B + 28, // $EE7C + 28, // $EE7D + 28, // $EE7E + 28, // $EE7F + 28, // $EE80 + 28, // $EE81 + 28, // $EE82 + 28, // $EE83 + 28, // $EE84 + 28, // $EE85 + 28, // $EE86 + 28, // $EE87 + 28, // $EE88 + 28, // $EE89 + 28, // $EE8A + 28, // $EE8B + 28, // $EE8C + 28, // $EE8D + 28, // $EE8E + 28, // $EE8F + 28, // $EE90 + 28, // $EE91 + 28, // $EE92 + 28, // $EE93 + 28, // $EE94 + 28, // $EE95 + 28, // $EE96 + 28, // $EE97 + 28, // $EE98 + 28, // $EE99 + 28, // $EE9A + 28, // $EE9B + 28, // $EE9C + 28, // $EE9D + 28, // $EE9E + 28, // $EE9F + 28, // $EEA0 + 28, // $EEA1 + 28, // $EEA2 + 28, // $EEA3 + 28, // $EEA4 + 28, // $EEA5 + 28, // $EEA6 + 28, // $EEA7 + 28, // $EEA8 + 28, // $EEA9 + 28, // $EEAA + 28, // $EEAB + 28, // $EEAC + 28, // $EEAD + 28, // $EEAE + 28, // $EEAF + 28, // $EEB0 + 28, // $EEB1 + 28, // $EEB2 + 28, // $EEB3 + 28, // $EEB4 + 28, // $EEB5 + 28, // $EEB6 + 28, // $EEB7 + 28, // $EEB8 + 28, // $EEB9 + 28, // $EEBA + 28, // $EEBB + 28, // $EEBC + 28, // $EEBD + 28, // $EEBE + 28, // $EEBF + 28, // $EEC0 + 28, // $EEC1 + 28, // $EEC2 + 28, // $EEC3 + 28, // $EEC4 + 28, // $EEC5 + 28, // $EEC6 + 28, // $EEC7 + 28, // $EEC8 + 28, // $EEC9 + 28, // $EECA + 28, // $EECB + 28, // $EECC + 28, // $EECD + 28, // $EECE + 28, // $EECF + 28, // $EED0 + 28, // $EED1 + 28, // $EED2 + 28, // $EED3 + 28, // $EED4 + 28, // $EED5 + 28, // $EED6 + 28, // $EED7 + 28, // $EED8 + 28, // $EED9 + 28, // $EEDA + 28, // $EEDB + 28, // $EEDC + 28, // $EEDD + 28, // $EEDE + 28, // $EEDF + 28, // $EEE0 + 28, // $EEE1 + 28, // $EEE2 + 28, // $EEE3 + 28, // $EEE4 + 28, // $EEE5 + 28, // $EEE6 + 28, // $EEE7 + 28, // $EEE8 + 28, // $EEE9 + 28, // $EEEA + 28, // $EEEB + 28, // $EEEC + 28, // $EEED + 28, // $EEEE + 28, // $EEEF + 28, // $EEF0 + 28, // $EEF1 + 28, // $EEF2 + 28, // $EEF3 + 28, // $EEF4 + 28, // $EEF5 + 28, // $EEF6 + 28, // $EEF7 + 28, // $EEF8 + 28, // $EEF9 + 28, // $EEFA + 28, // $EEFB + 28, // $EEFC + 28, // $EEFD + 28, // $EEFE + 28, // $EEFF + 28, // $EF00 + 28, // $EF01 + 28, // $EF02 + 28, // $EF03 + 28, // $EF04 + 28, // $EF05 + 28, // $EF06 + 28, // $EF07 + 28, // $EF08 + 28, // $EF09 + 28, // $EF0A + 28, // $EF0B + 28, // $EF0C + 28, // $EF0D + 28, // $EF0E + 28, // $EF0F + 28, // $EF10 + 28, // $EF11 + 28, // $EF12 + 28, // $EF13 + 28, // $EF14 + 28, // $EF15 + 28, // $EF16 + 28, // $EF17 + 28, // $EF18 + 28, // $EF19 + 28, // $EF1A + 28, // $EF1B + 28, // $EF1C + 28, // $EF1D + 28, // $EF1E + 28, // $EF1F + 28, // $EF20 + 28, // $EF21 + 28, // $EF22 + 28, // $EF23 + 28, // $EF24 + 28, // $EF25 + 28, // $EF26 + 28, // $EF27 + 28, // $EF28 + 28, // $EF29 + 28, // $EF2A + 28, // $EF2B + 28, // $EF2C + 28, // $EF2D + 28, // $EF2E + 28, // $EF2F + 28, // $EF30 + 28, // $EF31 + 28, // $EF32 + 28, // $EF33 + 28, // $EF34 + 28, // $EF35 + 28, // $EF36 + 28, // $EF37 + 28, // $EF38 + 28, // $EF39 + 28, // $EF3A + 28, // $EF3B + 28, // $EF3C + 28, // $EF3D + 28, // $EF3E + 28, // $EF3F + 28, // $EF40 + 28, // $EF41 + 28, // $EF42 + 28, // $EF43 + 28, // $EF44 + 28, // $EF45 + 28, // $EF46 + 28, // $EF47 + 28, // $EF48 + 28, // $EF49 + 28, // $EF4A + 28, // $EF4B + 28, // $EF4C + 28, // $EF4D + 28, // $EF4E + 28, // $EF4F + 28, // $EF50 + 28, // $EF51 + 28, // $EF52 + 28, // $EF53 + 28, // $EF54 + 28, // $EF55 + 28, // $EF56 + 28, // $EF57 + 28, // $EF58 + 28, // $EF59 + 28, // $EF5A + 28, // $EF5B + 28, // $EF5C + 28, // $EF5D + 28, // $EF5E + 28, // $EF5F + 28, // $EF60 + 28, // $EF61 + 28, // $EF62 + 28, // $EF63 + 28, // $EF64 + 28, // $EF65 + 28, // $EF66 + 28, // $EF67 + 28, // $EF68 + 28, // $EF69 + 28, // $EF6A + 28, // $EF6B + 28, // $EF6C + 28, // $EF6D + 28, // $EF6E + 28, // $EF6F + 28, // $EF70 + 28, // $EF71 + 28, // $EF72 + 28, // $EF73 + 28, // $EF74 + 28, // $EF75 + 28, // $EF76 + 28, // $EF77 + 28, // $EF78 + 28, // $EF79 + 28, // $EF7A + 28, // $EF7B + 28, // $EF7C + 28, // $EF7D + 28, // $EF7E + 28, // $EF7F + 28, // $EF80 + 28, // $EF81 + 28, // $EF82 + 28, // $EF83 + 28, // $EF84 + 28, // $EF85 + 28, // $EF86 + 28, // $EF87 + 28, // $EF88 + 28, // $EF89 + 28, // $EF8A + 28, // $EF8B + 28, // $EF8C + 28, // $EF8D + 28, // $EF8E + 28, // $EF8F + 28, // $EF90 + 28, // $EF91 + 28, // $EF92 + 28, // $EF93 + 28, // $EF94 + 28, // $EF95 + 28, // $EF96 + 28, // $EF97 + 28, // $EF98 + 28, // $EF99 + 28, // $EF9A + 28, // $EF9B + 28, // $EF9C + 28, // $EF9D + 28, // $EF9E + 28, // $EF9F + 28, // $EFA0 + 28, // $EFA1 + 28, // $EFA2 + 28, // $EFA3 + 28, // $EFA4 + 28, // $EFA5 + 28, // $EFA6 + 28, // $EFA7 + 28, // $EFA8 + 28, // $EFA9 + 28, // $EFAA + 28, // $EFAB + 28, // $EFAC + 28, // $EFAD + 28, // $EFAE + 28, // $EFAF + 28, // $EFB0 + 28, // $EFB1 + 28, // $EFB2 + 28, // $EFB3 + 28, // $EFB4 + 28, // $EFB5 + 28, // $EFB6 + 28, // $EFB7 + 28, // $EFB8 + 28, // $EFB9 + 28, // $EFBA + 28, // $EFBB + 28, // $EFBC + 28, // $EFBD + 28, // $EFBE + 28, // $EFBF + 28, // $EFC0 + 28, // $EFC1 + 28, // $EFC2 + 28, // $EFC3 + 28, // $EFC4 + 28, // $EFC5 + 28, // $EFC6 + 28, // $EFC7 + 28, // $EFC8 + 28, // $EFC9 + 28, // $EFCA + 28, // $EFCB + 28, // $EFCC + 28, // $EFCD + 28, // $EFCE + 28, // $EFCF + 28, // $EFD0 + 28, // $EFD1 + 28, // $EFD2 + 28, // $EFD3 + 28, // $EFD4 + 28, // $EFD5 + 28, // $EFD6 + 28, // $EFD7 + 28, // $EFD8 + 28, // $EFD9 + 28, // $EFDA + 28, // $EFDB + 28, // $EFDC + 28, // $EFDD + 28, // $EFDE + 28, // $EFDF + 28, // $EFE0 + 28, // $EFE1 + 28, // $EFE2 + 28, // $EFE3 + 28, // $EFE4 + 28, // $EFE5 + 28, // $EFE6 + 28, // $EFE7 + 28, // $EFE8 + 28, // $EFE9 + 28, // $EFEA + 28, // $EFEB + 28, // $EFEC + 28, // $EFED + 28, // $EFEE + 28, // $EFEF + 28, // $EFF0 + 28, // $EFF1 + 28, // $EFF2 + 28, // $EFF3 + 28, // $EFF4 + 28, // $EFF5 + 28, // $EFF6 + 28, // $EFF7 + 28, // $EFF8 + 28, // $EFF9 + 28, // $EFFA + 28, // $EFFB + 28, // $EFFC + 28, // $EFFD + 28, // $EFFE + 28, // $EFFF + 28, // $F000 + 28, // $F001 + 28, // $F002 + 28, // $F003 + 28, // $F004 + 28, // $F005 + 28, // $F006 + 28, // $F007 + 28, // $F008 + 28, // $F009 + 28, // $F00A + 28, // $F00B + 28, // $F00C + 28, // $F00D + 28, // $F00E + 28, // $F00F + 28, // $F010 + 28, // $F011 + 28, // $F012 + 28, // $F013 + 28, // $F014 + 28, // $F015 + 28, // $F016 + 28, // $F017 + 28, // $F018 + 28, // $F019 + 28, // $F01A + 28, // $F01B + 28, // $F01C + 28, // $F01D + 28, // $F01E + 28, // $F01F + 28, // $F020 + 28, // $F021 + 28, // $F022 + 28, // $F023 + 28, // $F024 + 28, // $F025 + 28, // $F026 + 28, // $F027 + 28, // $F028 + 28, // $F029 + 28, // $F02A + 28, // $F02B + 28, // $F02C + 28, // $F02D + 28, // $F02E + 28, // $F02F + 28, // $F030 + 28, // $F031 + 28, // $F032 + 28, // $F033 + 28, // $F034 + 28, // $F035 + 28, // $F036 + 28, // $F037 + 28, // $F038 + 28, // $F039 + 28, // $F03A + 28, // $F03B + 28, // $F03C + 28, // $F03D + 28, // $F03E + 28, // $F03F + 28, // $F040 + 28, // $F041 + 28, // $F042 + 28, // $F043 + 28, // $F044 + 28, // $F045 + 28, // $F046 + 28, // $F047 + 28, // $F048 + 28, // $F049 + 28, // $F04A + 28, // $F04B + 28, // $F04C + 28, // $F04D + 28, // $F04E + 28, // $F04F + 28, // $F050 + 28, // $F051 + 28, // $F052 + 28, // $F053 + 28, // $F054 + 28, // $F055 + 28, // $F056 + 28, // $F057 + 28, // $F058 + 28, // $F059 + 28, // $F05A + 28, // $F05B + 28, // $F05C + 28, // $F05D + 28, // $F05E + 28, // $F05F + 28, // $F060 + 28, // $F061 + 28, // $F062 + 28, // $F063 + 28, // $F064 + 28, // $F065 + 28, // $F066 + 28, // $F067 + 28, // $F068 + 28, // $F069 + 28, // $F06A + 28, // $F06B + 28, // $F06C + 28, // $F06D + 28, // $F06E + 28, // $F06F + 28, // $F070 + 28, // $F071 + 28, // $F072 + 28, // $F073 + 28, // $F074 + 28, // $F075 + 28, // $F076 + 28, // $F077 + 28, // $F078 + 28, // $F079 + 28, // $F07A + 28, // $F07B + 28, // $F07C + 28, // $F07D + 28, // $F07E + 28, // $F07F + 28, // $F080 + 28, // $F081 + 28, // $F082 + 28, // $F083 + 28, // $F084 + 28, // $F085 + 28, // $F086 + 28, // $F087 + 28, // $F088 + 28, // $F089 + 28, // $F08A + 28, // $F08B + 28, // $F08C + 28, // $F08D + 28, // $F08E + 28, // $F08F + 28, // $F090 + 28, // $F091 + 28, // $F092 + 28, // $F093 + 28, // $F094 + 28, // $F095 + 28, // $F096 + 28, // $F097 + 28, // $F098 + 28, // $F099 + 28, // $F09A + 28, // $F09B + 28, // $F09C + 28, // $F09D + 28, // $F09E + 28, // $F09F + 28, // $F0A0 + 28, // $F0A1 + 28, // $F0A2 + 28, // $F0A3 + 28, // $F0A4 + 28, // $F0A5 + 28, // $F0A6 + 28, // $F0A7 + 28, // $F0A8 + 28, // $F0A9 + 28, // $F0AA + 28, // $F0AB + 28, // $F0AC + 28, // $F0AD + 28, // $F0AE + 28, // $F0AF + 28, // $F0B0 + 28, // $F0B1 + 28, // $F0B2 + 28, // $F0B3 + 28, // $F0B4 + 28, // $F0B5 + 28, // $F0B6 + 28, // $F0B7 + 28, // $F0B8 + 28, // $F0B9 + 28, // $F0BA + 28, // $F0BB + 28, // $F0BC + 28, // $F0BD + 28, // $F0BE + 28, // $F0BF + 28, // $F0C0 + 28, // $F0C1 + 28, // $F0C2 + 28, // $F0C3 + 28, // $F0C4 + 28, // $F0C5 + 28, // $F0C6 + 28, // $F0C7 + 28, // $F0C8 + 28, // $F0C9 + 28, // $F0CA + 28, // $F0CB + 28, // $F0CC + 28, // $F0CD + 28, // $F0CE + 28, // $F0CF + 28, // $F0D0 + 28, // $F0D1 + 28, // $F0D2 + 28, // $F0D3 + 28, // $F0D4 + 28, // $F0D5 + 28, // $F0D6 + 28, // $F0D7 + 28, // $F0D8 + 28, // $F0D9 + 28, // $F0DA + 28, // $F0DB + 28, // $F0DC + 28, // $F0DD + 28, // $F0DE + 28, // $F0DF + 28, // $F0E0 + 28, // $F0E1 + 28, // $F0E2 + 28, // $F0E3 + 28, // $F0E4 + 28, // $F0E5 + 28, // $F0E6 + 28, // $F0E7 + 28, // $F0E8 + 28, // $F0E9 + 28, // $F0EA + 28, // $F0EB + 28, // $F0EC + 28, // $F0ED + 28, // $F0EE + 28, // $F0EF + 28, // $F0F0 + 28, // $F0F1 + 28, // $F0F2 + 28, // $F0F3 + 28, // $F0F4 + 28, // $F0F5 + 28, // $F0F6 + 28, // $F0F7 + 28, // $F0F8 + 28, // $F0F9 + 28, // $F0FA + 28, // $F0FB + 28, // $F0FC + 28, // $F0FD + 28, // $F0FE + 28, // $F0FF + 28, // $F100 + 28, // $F101 + 28, // $F102 + 28, // $F103 + 28, // $F104 + 28, // $F105 + 28, // $F106 + 28, // $F107 + 28, // $F108 + 28, // $F109 + 28, // $F10A + 28, // $F10B + 28, // $F10C + 28, // $F10D + 28, // $F10E + 28, // $F10F + 28, // $F110 + 28, // $F111 + 28, // $F112 + 28, // $F113 + 28, // $F114 + 28, // $F115 + 28, // $F116 + 28, // $F117 + 28, // $F118 + 28, // $F119 + 28, // $F11A + 28, // $F11B + 28, // $F11C + 28, // $F11D + 28, // $F11E + 28, // $F11F + 28, // $F120 + 28, // $F121 + 28, // $F122 + 28, // $F123 + 28, // $F124 + 28, // $F125 + 28, // $F126 + 28, // $F127 + 28, // $F128 + 28, // $F129 + 28, // $F12A + 28, // $F12B + 28, // $F12C + 28, // $F12D + 28, // $F12E + 28, // $F12F + 28, // $F130 + 28, // $F131 + 28, // $F132 + 28, // $F133 + 28, // $F134 + 28, // $F135 + 28, // $F136 + 28, // $F137 + 28, // $F138 + 28, // $F139 + 28, // $F13A + 28, // $F13B + 28, // $F13C + 28, // $F13D + 28, // $F13E + 28, // $F13F + 28, // $F140 + 28, // $F141 + 28, // $F142 + 28, // $F143 + 28, // $F144 + 28, // $F145 + 28, // $F146 + 28, // $F147 + 28, // $F148 + 28, // $F149 + 28, // $F14A + 28, // $F14B + 28, // $F14C + 28, // $F14D + 28, // $F14E + 28, // $F14F + 28, // $F150 + 28, // $F151 + 28, // $F152 + 28, // $F153 + 28, // $F154 + 28, // $F155 + 28, // $F156 + 28, // $F157 + 28, // $F158 + 28, // $F159 + 28, // $F15A + 28, // $F15B + 28, // $F15C + 28, // $F15D + 28, // $F15E + 28, // $F15F + 28, // $F160 + 28, // $F161 + 28, // $F162 + 28, // $F163 + 28, // $F164 + 28, // $F165 + 28, // $F166 + 28, // $F167 + 28, // $F168 + 28, // $F169 + 28, // $F16A + 28, // $F16B + 28, // $F16C + 28, // $F16D + 28, // $F16E + 28, // $F16F + 28, // $F170 + 28, // $F171 + 28, // $F172 + 28, // $F173 + 28, // $F174 + 28, // $F175 + 28, // $F176 + 28, // $F177 + 28, // $F178 + 28, // $F179 + 28, // $F17A + 28, // $F17B + 28, // $F17C + 28, // $F17D + 28, // $F17E + 28, // $F17F + 28, // $F180 + 28, // $F181 + 28, // $F182 + 28, // $F183 + 28, // $F184 + 28, // $F185 + 28, // $F186 + 28, // $F187 + 28, // $F188 + 28, // $F189 + 28, // $F18A + 28, // $F18B + 28, // $F18C + 28, // $F18D + 28, // $F18E + 28, // $F18F + 28, // $F190 + 28, // $F191 + 28, // $F192 + 28, // $F193 + 28, // $F194 + 28, // $F195 + 28, // $F196 + 28, // $F197 + 28, // $F198 + 28, // $F199 + 28, // $F19A + 28, // $F19B + 28, // $F19C + 28, // $F19D + 28, // $F19E + 28, // $F19F + 28, // $F1A0 + 28, // $F1A1 + 28, // $F1A2 + 28, // $F1A3 + 28, // $F1A4 + 28, // $F1A5 + 28, // $F1A6 + 28, // $F1A7 + 28, // $F1A8 + 28, // $F1A9 + 28, // $F1AA + 28, // $F1AB + 28, // $F1AC + 28, // $F1AD + 28, // $F1AE + 28, // $F1AF + 28, // $F1B0 + 28, // $F1B1 + 28, // $F1B2 + 28, // $F1B3 + 28, // $F1B4 + 28, // $F1B5 + 28, // $F1B6 + 28, // $F1B7 + 28, // $F1B8 + 28, // $F1B9 + 28, // $F1BA + 28, // $F1BB + 28, // $F1BC + 28, // $F1BD + 28, // $F1BE + 28, // $F1BF + 28, // $F1C0 + 28, // $F1C1 + 28, // $F1C2 + 28, // $F1C3 + 28, // $F1C4 + 28, // $F1C5 + 28, // $F1C6 + 28, // $F1C7 + 28, // $F1C8 + 28, // $F1C9 + 28, // $F1CA + 28, // $F1CB + 28, // $F1CC + 28, // $F1CD + 28, // $F1CE + 28, // $F1CF + 28, // $F1D0 + 28, // $F1D1 + 28, // $F1D2 + 28, // $F1D3 + 28, // $F1D4 + 28, // $F1D5 + 28, // $F1D6 + 28, // $F1D7 + 28, // $F1D8 + 28, // $F1D9 + 28, // $F1DA + 28, // $F1DB + 28, // $F1DC + 28, // $F1DD + 28, // $F1DE + 28, // $F1DF + 28, // $F1E0 + 28, // $F1E1 + 28, // $F1E2 + 28, // $F1E3 + 28, // $F1E4 + 28, // $F1E5 + 28, // $F1E6 + 28, // $F1E7 + 28, // $F1E8 + 28, // $F1E9 + 28, // $F1EA + 28, // $F1EB + 28, // $F1EC + 28, // $F1ED + 28, // $F1EE + 28, // $F1EF + 28, // $F1F0 + 28, // $F1F1 + 28, // $F1F2 + 28, // $F1F3 + 28, // $F1F4 + 28, // $F1F5 + 28, // $F1F6 + 28, // $F1F7 + 28, // $F1F8 + 28, // $F1F9 + 28, // $F1FA + 28, // $F1FB + 28, // $F1FC + 28, // $F1FD + 28, // $F1FE + 28, // $F1FF + 28, // $F200 + 28, // $F201 + 28, // $F202 + 28, // $F203 + 28, // $F204 + 28, // $F205 + 28, // $F206 + 28, // $F207 + 28, // $F208 + 28, // $F209 + 28, // $F20A + 28, // $F20B + 28, // $F20C + 28, // $F20D + 28, // $F20E + 28, // $F20F + 28, // $F210 + 28, // $F211 + 28, // $F212 + 28, // $F213 + 28, // $F214 + 28, // $F215 + 28, // $F216 + 28, // $F217 + 28, // $F218 + 28, // $F219 + 28, // $F21A + 28, // $F21B + 28, // $F21C + 28, // $F21D + 28, // $F21E + 28, // $F21F + 28, // $F220 + 28, // $F221 + 28, // $F222 + 28, // $F223 + 28, // $F224 + 28, // $F225 + 28, // $F226 + 28, // $F227 + 28, // $F228 + 28, // $F229 + 28, // $F22A + 28, // $F22B + 28, // $F22C + 28, // $F22D + 28, // $F22E + 28, // $F22F + 28, // $F230 + 28, // $F231 + 28, // $F232 + 28, // $F233 + 28, // $F234 + 28, // $F235 + 28, // $F236 + 28, // $F237 + 28, // $F238 + 28, // $F239 + 28, // $F23A + 28, // $F23B + 28, // $F23C + 28, // $F23D + 28, // $F23E + 28, // $F23F + 28, // $F240 + 28, // $F241 + 28, // $F242 + 28, // $F243 + 28, // $F244 + 28, // $F245 + 28, // $F246 + 28, // $F247 + 28, // $F248 + 28, // $F249 + 28, // $F24A + 28, // $F24B + 28, // $F24C + 28, // $F24D + 28, // $F24E + 28, // $F24F + 28, // $F250 + 28, // $F251 + 28, // $F252 + 28, // $F253 + 28, // $F254 + 28, // $F255 + 28, // $F256 + 28, // $F257 + 28, // $F258 + 28, // $F259 + 28, // $F25A + 28, // $F25B + 28, // $F25C + 28, // $F25D + 28, // $F25E + 28, // $F25F + 28, // $F260 + 28, // $F261 + 28, // $F262 + 28, // $F263 + 28, // $F264 + 28, // $F265 + 28, // $F266 + 28, // $F267 + 28, // $F268 + 28, // $F269 + 28, // $F26A + 28, // $F26B + 28, // $F26C + 28, // $F26D + 28, // $F26E + 28, // $F26F + 28, // $F270 + 28, // $F271 + 28, // $F272 + 28, // $F273 + 28, // $F274 + 28, // $F275 + 28, // $F276 + 28, // $F277 + 28, // $F278 + 28, // $F279 + 28, // $F27A + 28, // $F27B + 28, // $F27C + 28, // $F27D + 28, // $F27E + 28, // $F27F + 28, // $F280 + 28, // $F281 + 28, // $F282 + 28, // $F283 + 28, // $F284 + 28, // $F285 + 28, // $F286 + 28, // $F287 + 28, // $F288 + 28, // $F289 + 28, // $F28A + 28, // $F28B + 28, // $F28C + 28, // $F28D + 28, // $F28E + 28, // $F28F + 28, // $F290 + 28, // $F291 + 28, // $F292 + 28, // $F293 + 28, // $F294 + 28, // $F295 + 28, // $F296 + 28, // $F297 + 28, // $F298 + 28, // $F299 + 28, // $F29A + 28, // $F29B + 28, // $F29C + 28, // $F29D + 28, // $F29E + 28, // $F29F + 28, // $F2A0 + 28, // $F2A1 + 28, // $F2A2 + 28, // $F2A3 + 28, // $F2A4 + 28, // $F2A5 + 28, // $F2A6 + 28, // $F2A7 + 28, // $F2A8 + 28, // $F2A9 + 28, // $F2AA + 28, // $F2AB + 28, // $F2AC + 28, // $F2AD + 28, // $F2AE + 28, // $F2AF + 28, // $F2B0 + 28, // $F2B1 + 28, // $F2B2 + 28, // $F2B3 + 28, // $F2B4 + 28, // $F2B5 + 28, // $F2B6 + 28, // $F2B7 + 28, // $F2B8 + 28, // $F2B9 + 28, // $F2BA + 28, // $F2BB + 28, // $F2BC + 28, // $F2BD + 28, // $F2BE + 28, // $F2BF + 28, // $F2C0 + 28, // $F2C1 + 28, // $F2C2 + 28, // $F2C3 + 28, // $F2C4 + 28, // $F2C5 + 28, // $F2C6 + 28, // $F2C7 + 28, // $F2C8 + 28, // $F2C9 + 28, // $F2CA + 28, // $F2CB + 28, // $F2CC + 28, // $F2CD + 28, // $F2CE + 28, // $F2CF + 28, // $F2D0 + 28, // $F2D1 + 28, // $F2D2 + 28, // $F2D3 + 28, // $F2D4 + 28, // $F2D5 + 28, // $F2D6 + 28, // $F2D7 + 28, // $F2D8 + 28, // $F2D9 + 28, // $F2DA + 28, // $F2DB + 28, // $F2DC + 28, // $F2DD + 28, // $F2DE + 28, // $F2DF + 28, // $F2E0 + 28, // $F2E1 + 28, // $F2E2 + 28, // $F2E3 + 28, // $F2E4 + 28, // $F2E5 + 28, // $F2E6 + 28, // $F2E7 + 28, // $F2E8 + 28, // $F2E9 + 28, // $F2EA + 28, // $F2EB + 28, // $F2EC + 28, // $F2ED + 28, // $F2EE + 28, // $F2EF + 28, // $F2F0 + 28, // $F2F1 + 28, // $F2F2 + 28, // $F2F3 + 28, // $F2F4 + 28, // $F2F5 + 28, // $F2F6 + 28, // $F2F7 + 28, // $F2F8 + 28, // $F2F9 + 28, // $F2FA + 28, // $F2FB + 28, // $F2FC + 28, // $F2FD + 28, // $F2FE + 28, // $F2FF + 28, // $F300 + 28, // $F301 + 28, // $F302 + 28, // $F303 + 28, // $F304 + 28, // $F305 + 28, // $F306 + 28, // $F307 + 28, // $F308 + 28, // $F309 + 28, // $F30A + 28, // $F30B + 28, // $F30C + 28, // $F30D + 28, // $F30E + 28, // $F30F + 28, // $F310 + 28, // $F311 + 28, // $F312 + 28, // $F313 + 28, // $F314 + 28, // $F315 + 28, // $F316 + 28, // $F317 + 28, // $F318 + 28, // $F319 + 28, // $F31A + 28, // $F31B + 28, // $F31C + 28, // $F31D + 28, // $F31E + 28, // $F31F + 28, // $F320 + 28, // $F321 + 28, // $F322 + 28, // $F323 + 28, // $F324 + 28, // $F325 + 28, // $F326 + 28, // $F327 + 28, // $F328 + 28, // $F329 + 28, // $F32A + 28, // $F32B + 28, // $F32C + 28, // $F32D + 28, // $F32E + 28, // $F32F + 28, // $F330 + 28, // $F331 + 28, // $F332 + 28, // $F333 + 28, // $F334 + 28, // $F335 + 28, // $F336 + 28, // $F337 + 28, // $F338 + 28, // $F339 + 28, // $F33A + 28, // $F33B + 28, // $F33C + 28, // $F33D + 28, // $F33E + 28, // $F33F + 28, // $F340 + 28, // $F341 + 28, // $F342 + 28, // $F343 + 28, // $F344 + 28, // $F345 + 28, // $F346 + 28, // $F347 + 28, // $F348 + 28, // $F349 + 28, // $F34A + 28, // $F34B + 28, // $F34C + 28, // $F34D + 28, // $F34E + 28, // $F34F + 28, // $F350 + 28, // $F351 + 28, // $F352 + 28, // $F353 + 28, // $F354 + 28, // $F355 + 28, // $F356 + 28, // $F357 + 28, // $F358 + 28, // $F359 + 28, // $F35A + 28, // $F35B + 28, // $F35C + 28, // $F35D + 28, // $F35E + 28, // $F35F + 28, // $F360 + 28, // $F361 + 28, // $F362 + 28, // $F363 + 28, // $F364 + 28, // $F365 + 28, // $F366 + 28, // $F367 + 28, // $F368 + 28, // $F369 + 28, // $F36A + 28, // $F36B + 28, // $F36C + 28, // $F36D + 28, // $F36E + 28, // $F36F + 28, // $F370 + 28, // $F371 + 28, // $F372 + 28, // $F373 + 28, // $F374 + 28, // $F375 + 28, // $F376 + 28, // $F377 + 28, // $F378 + 28, // $F379 + 28, // $F37A + 28, // $F37B + 28, // $F37C + 28, // $F37D + 28, // $F37E + 28, // $F37F + 28, // $F380 + 28, // $F381 + 28, // $F382 + 28, // $F383 + 28, // $F384 + 28, // $F385 + 28, // $F386 + 28, // $F387 + 28, // $F388 + 28, // $F389 + 28, // $F38A + 28, // $F38B + 28, // $F38C + 28, // $F38D + 28, // $F38E + 28, // $F38F + 28, // $F390 + 28, // $F391 + 28, // $F392 + 28, // $F393 + 28, // $F394 + 28, // $F395 + 28, // $F396 + 28, // $F397 + 28, // $F398 + 28, // $F399 + 28, // $F39A + 28, // $F39B + 28, // $F39C + 28, // $F39D + 28, // $F39E + 28, // $F39F + 28, // $F3A0 + 28, // $F3A1 + 28, // $F3A2 + 28, // $F3A3 + 28, // $F3A4 + 28, // $F3A5 + 28, // $F3A6 + 28, // $F3A7 + 28, // $F3A8 + 28, // $F3A9 + 28, // $F3AA + 28, // $F3AB + 28, // $F3AC + 28, // $F3AD + 28, // $F3AE + 28, // $F3AF + 28, // $F3B0 + 28, // $F3B1 + 28, // $F3B2 + 28, // $F3B3 + 28, // $F3B4 + 28, // $F3B5 + 28, // $F3B6 + 28, // $F3B7 + 28, // $F3B8 + 28, // $F3B9 + 28, // $F3BA + 28, // $F3BB + 28, // $F3BC + 28, // $F3BD + 28, // $F3BE + 28, // $F3BF + 28, // $F3C0 + 28, // $F3C1 + 28, // $F3C2 + 28, // $F3C3 + 28, // $F3C4 + 28, // $F3C5 + 28, // $F3C6 + 28, // $F3C7 + 28, // $F3C8 + 28, // $F3C9 + 28, // $F3CA + 28, // $F3CB + 28, // $F3CC + 28, // $F3CD + 28, // $F3CE + 28, // $F3CF + 28, // $F3D0 + 28, // $F3D1 + 28, // $F3D2 + 28, // $F3D3 + 28, // $F3D4 + 28, // $F3D5 + 28, // $F3D6 + 28, // $F3D7 + 28, // $F3D8 + 28, // $F3D9 + 28, // $F3DA + 28, // $F3DB + 28, // $F3DC + 28, // $F3DD + 28, // $F3DE + 28, // $F3DF + 28, // $F3E0 + 28, // $F3E1 + 28, // $F3E2 + 28, // $F3E3 + 28, // $F3E4 + 28, // $F3E5 + 28, // $F3E6 + 28, // $F3E7 + 28, // $F3E8 + 28, // $F3E9 + 28, // $F3EA + 28, // $F3EB + 28, // $F3EC + 28, // $F3ED + 28, // $F3EE + 28, // $F3EF + 28, // $F3F0 + 28, // $F3F1 + 28, // $F3F2 + 28, // $F3F3 + 28, // $F3F4 + 28, // $F3F5 + 28, // $F3F6 + 28, // $F3F7 + 28, // $F3F8 + 28, // $F3F9 + 28, // $F3FA + 28, // $F3FB + 28, // $F3FC + 28, // $F3FD + 28, // $F3FE + 28, // $F3FF + 28, // $F400 + 28, // $F401 + 28, // $F402 + 28, // $F403 + 28, // $F404 + 28, // $F405 + 28, // $F406 + 28, // $F407 + 28, // $F408 + 28, // $F409 + 28, // $F40A + 28, // $F40B + 28, // $F40C + 28, // $F40D + 28, // $F40E + 28, // $F40F + 28, // $F410 + 28, // $F411 + 28, // $F412 + 28, // $F413 + 28, // $F414 + 28, // $F415 + 28, // $F416 + 28, // $F417 + 28, // $F418 + 28, // $F419 + 28, // $F41A + 28, // $F41B + 28, // $F41C + 28, // $F41D + 28, // $F41E + 28, // $F41F + 28, // $F420 + 28, // $F421 + 28, // $F422 + 28, // $F423 + 28, // $F424 + 28, // $F425 + 28, // $F426 + 28, // $F427 + 28, // $F428 + 28, // $F429 + 28, // $F42A + 28, // $F42B + 28, // $F42C + 28, // $F42D + 28, // $F42E + 28, // $F42F + 28, // $F430 + 28, // $F431 + 28, // $F432 + 28, // $F433 + 28, // $F434 + 28, // $F435 + 28, // $F436 + 28, // $F437 + 28, // $F438 + 28, // $F439 + 28, // $F43A + 28, // $F43B + 28, // $F43C + 28, // $F43D + 28, // $F43E + 28, // $F43F + 28, // $F440 + 28, // $F441 + 28, // $F442 + 28, // $F443 + 28, // $F444 + 28, // $F445 + 28, // $F446 + 28, // $F447 + 28, // $F448 + 28, // $F449 + 28, // $F44A + 28, // $F44B + 28, // $F44C + 28, // $F44D + 28, // $F44E + 28, // $F44F + 28, // $F450 + 28, // $F451 + 28, // $F452 + 28, // $F453 + 28, // $F454 + 28, // $F455 + 28, // $F456 + 28, // $F457 + 28, // $F458 + 28, // $F459 + 28, // $F45A + 28, // $F45B + 28, // $F45C + 28, // $F45D + 28, // $F45E + 28, // $F45F + 28, // $F460 + 28, // $F461 + 28, // $F462 + 28, // $F463 + 28, // $F464 + 28, // $F465 + 28, // $F466 + 28, // $F467 + 28, // $F468 + 28, // $F469 + 28, // $F46A + 28, // $F46B + 28, // $F46C + 28, // $F46D + 28, // $F46E + 28, // $F46F + 28, // $F470 + 28, // $F471 + 28, // $F472 + 28, // $F473 + 28, // $F474 + 28, // $F475 + 28, // $F476 + 28, // $F477 + 28, // $F478 + 28, // $F479 + 28, // $F47A + 28, // $F47B + 28, // $F47C + 28, // $F47D + 28, // $F47E + 28, // $F47F + 28, // $F480 + 28, // $F481 + 28, // $F482 + 28, // $F483 + 28, // $F484 + 28, // $F485 + 28, // $F486 + 28, // $F487 + 28, // $F488 + 28, // $F489 + 28, // $F48A + 28, // $F48B + 28, // $F48C + 28, // $F48D + 28, // $F48E + 28, // $F48F + 28, // $F490 + 28, // $F491 + 28, // $F492 + 28, // $F493 + 28, // $F494 + 28, // $F495 + 28, // $F496 + 28, // $F497 + 28, // $F498 + 28, // $F499 + 28, // $F49A + 28, // $F49B + 28, // $F49C + 28, // $F49D + 28, // $F49E + 28, // $F49F + 28, // $F4A0 + 28, // $F4A1 + 28, // $F4A2 + 28, // $F4A3 + 28, // $F4A4 + 28, // $F4A5 + 28, // $F4A6 + 28, // $F4A7 + 28, // $F4A8 + 28, // $F4A9 + 28, // $F4AA + 28, // $F4AB + 28, // $F4AC + 28, // $F4AD + 28, // $F4AE + 28, // $F4AF + 28, // $F4B0 + 28, // $F4B1 + 28, // $F4B2 + 28, // $F4B3 + 28, // $F4B4 + 28, // $F4B5 + 28, // $F4B6 + 28, // $F4B7 + 28, // $F4B8 + 28, // $F4B9 + 28, // $F4BA + 28, // $F4BB + 28, // $F4BC + 28, // $F4BD + 28, // $F4BE + 28, // $F4BF + 28, // $F4C0 + 28, // $F4C1 + 28, // $F4C2 + 28, // $F4C3 + 28, // $F4C4 + 28, // $F4C5 + 28, // $F4C6 + 28, // $F4C7 + 28, // $F4C8 + 28, // $F4C9 + 28, // $F4CA + 28, // $F4CB + 28, // $F4CC + 28, // $F4CD + 28, // $F4CE + 28, // $F4CF + 28, // $F4D0 + 28, // $F4D1 + 28, // $F4D2 + 28, // $F4D3 + 28, // $F4D4 + 28, // $F4D5 + 28, // $F4D6 + 28, // $F4D7 + 28, // $F4D8 + 28, // $F4D9 + 28, // $F4DA + 28, // $F4DB + 28, // $F4DC + 28, // $F4DD + 28, // $F4DE + 28, // $F4DF + 28, // $F4E0 + 28, // $F4E1 + 28, // $F4E2 + 28, // $F4E3 + 28, // $F4E4 + 28, // $F4E5 + 28, // $F4E6 + 28, // $F4E7 + 28, // $F4E8 + 28, // $F4E9 + 28, // $F4EA + 28, // $F4EB + 28, // $F4EC + 28, // $F4ED + 28, // $F4EE + 28, // $F4EF + 28, // $F4F0 + 28, // $F4F1 + 28, // $F4F2 + 28, // $F4F3 + 28, // $F4F4 + 28, // $F4F5 + 28, // $F4F6 + 28, // $F4F7 + 28, // $F4F8 + 28, // $F4F9 + 28, // $F4FA + 28, // $F4FB + 28, // $F4FC + 28, // $F4FD + 28, // $F4FE + 28, // $F4FF + 28, // $F500 + 28, // $F501 + 28, // $F502 + 28, // $F503 + 28, // $F504 + 28, // $F505 + 28, // $F506 + 28, // $F507 + 28, // $F508 + 28, // $F509 + 28, // $F50A + 28, // $F50B + 28, // $F50C + 28, // $F50D + 28, // $F50E + 28, // $F50F + 28, // $F510 + 28, // $F511 + 28, // $F512 + 28, // $F513 + 28, // $F514 + 28, // $F515 + 28, // $F516 + 28, // $F517 + 28, // $F518 + 28, // $F519 + 28, // $F51A + 28, // $F51B + 28, // $F51C + 28, // $F51D + 28, // $F51E + 28, // $F51F + 28, // $F520 + 28, // $F521 + 28, // $F522 + 28, // $F523 + 28, // $F524 + 28, // $F525 + 28, // $F526 + 28, // $F527 + 28, // $F528 + 28, // $F529 + 28, // $F52A + 28, // $F52B + 28, // $F52C + 28, // $F52D + 28, // $F52E + 28, // $F52F + 28, // $F530 + 28, // $F531 + 28, // $F532 + 28, // $F533 + 28, // $F534 + 28, // $F535 + 28, // $F536 + 28, // $F537 + 28, // $F538 + 28, // $F539 + 28, // $F53A + 28, // $F53B + 28, // $F53C + 28, // $F53D + 28, // $F53E + 28, // $F53F + 28, // $F540 + 28, // $F541 + 28, // $F542 + 28, // $F543 + 28, // $F544 + 28, // $F545 + 28, // $F546 + 28, // $F547 + 28, // $F548 + 28, // $F549 + 28, // $F54A + 28, // $F54B + 28, // $F54C + 28, // $F54D + 28, // $F54E + 28, // $F54F + 28, // $F550 + 28, // $F551 + 28, // $F552 + 28, // $F553 + 28, // $F554 + 28, // $F555 + 28, // $F556 + 28, // $F557 + 28, // $F558 + 28, // $F559 + 28, // $F55A + 28, // $F55B + 28, // $F55C + 28, // $F55D + 28, // $F55E + 28, // $F55F + 28, // $F560 + 28, // $F561 + 28, // $F562 + 28, // $F563 + 28, // $F564 + 28, // $F565 + 28, // $F566 + 28, // $F567 + 28, // $F568 + 28, // $F569 + 28, // $F56A + 28, // $F56B + 28, // $F56C + 28, // $F56D + 28, // $F56E + 28, // $F56F + 28, // $F570 + 28, // $F571 + 28, // $F572 + 28, // $F573 + 28, // $F574 + 28, // $F575 + 28, // $F576 + 28, // $F577 + 28, // $F578 + 28, // $F579 + 28, // $F57A + 28, // $F57B + 28, // $F57C + 28, // $F57D + 28, // $F57E + 28, // $F57F + 28, // $F580 + 28, // $F581 + 28, // $F582 + 28, // $F583 + 28, // $F584 + 28, // $F585 + 28, // $F586 + 28, // $F587 + 28, // $F588 + 28, // $F589 + 28, // $F58A + 28, // $F58B + 28, // $F58C + 28, // $F58D + 28, // $F58E + 28, // $F58F + 28, // $F590 + 28, // $F591 + 28, // $F592 + 28, // $F593 + 28, // $F594 + 28, // $F595 + 28, // $F596 + 28, // $F597 + 28, // $F598 + 28, // $F599 + 28, // $F59A + 28, // $F59B + 28, // $F59C + 28, // $F59D + 28, // $F59E + 28, // $F59F + 28, // $F5A0 + 28, // $F5A1 + 28, // $F5A2 + 28, // $F5A3 + 28, // $F5A4 + 28, // $F5A5 + 28, // $F5A6 + 28, // $F5A7 + 28, // $F5A8 + 28, // $F5A9 + 28, // $F5AA + 28, // $F5AB + 28, // $F5AC + 28, // $F5AD + 28, // $F5AE + 28, // $F5AF + 28, // $F5B0 + 28, // $F5B1 + 28, // $F5B2 + 28, // $F5B3 + 28, // $F5B4 + 28, // $F5B5 + 28, // $F5B6 + 28, // $F5B7 + 28, // $F5B8 + 28, // $F5B9 + 28, // $F5BA + 28, // $F5BB + 28, // $F5BC + 28, // $F5BD + 28, // $F5BE + 28, // $F5BF + 28, // $F5C0 + 28, // $F5C1 + 28, // $F5C2 + 28, // $F5C3 + 28, // $F5C4 + 28, // $F5C5 + 28, // $F5C6 + 28, // $F5C7 + 28, // $F5C8 + 28, // $F5C9 + 28, // $F5CA + 28, // $F5CB + 28, // $F5CC + 28, // $F5CD + 28, // $F5CE + 28, // $F5CF + 28, // $F5D0 + 28, // $F5D1 + 28, // $F5D2 + 28, // $F5D3 + 28, // $F5D4 + 28, // $F5D5 + 28, // $F5D6 + 28, // $F5D7 + 28, // $F5D8 + 28, // $F5D9 + 28, // $F5DA + 28, // $F5DB + 28, // $F5DC + 28, // $F5DD + 28, // $F5DE + 28, // $F5DF + 28, // $F5E0 + 28, // $F5E1 + 28, // $F5E2 + 28, // $F5E3 + 28, // $F5E4 + 28, // $F5E5 + 28, // $F5E6 + 28, // $F5E7 + 28, // $F5E8 + 28, // $F5E9 + 28, // $F5EA + 28, // $F5EB + 28, // $F5EC + 28, // $F5ED + 28, // $F5EE + 28, // $F5EF + 28, // $F5F0 + 28, // $F5F1 + 28, // $F5F2 + 28, // $F5F3 + 28, // $F5F4 + 28, // $F5F5 + 28, // $F5F6 + 28, // $F5F7 + 28, // $F5F8 + 28, // $F5F9 + 28, // $F5FA + 28, // $F5FB + 28, // $F5FC + 28, // $F5FD + 28, // $F5FE + 28, // $F5FF + 28, // $F600 + 28, // $F601 + 28, // $F602 + 28, // $F603 + 28, // $F604 + 28, // $F605 + 28, // $F606 + 28, // $F607 + 28, // $F608 + 28, // $F609 + 28, // $F60A + 28, // $F60B + 28, // $F60C + 28, // $F60D + 28, // $F60E + 28, // $F60F + 28, // $F610 + 28, // $F611 + 28, // $F612 + 28, // $F613 + 28, // $F614 + 28, // $F615 + 28, // $F616 + 28, // $F617 + 28, // $F618 + 28, // $F619 + 28, // $F61A + 28, // $F61B + 28, // $F61C + 28, // $F61D + 28, // $F61E + 28, // $F61F + 28, // $F620 + 28, // $F621 + 28, // $F622 + 28, // $F623 + 28, // $F624 + 28, // $F625 + 28, // $F626 + 28, // $F627 + 28, // $F628 + 28, // $F629 + 28, // $F62A + 28, // $F62B + 28, // $F62C + 28, // $F62D + 28, // $F62E + 28, // $F62F + 28, // $F630 + 28, // $F631 + 28, // $F632 + 28, // $F633 + 28, // $F634 + 28, // $F635 + 28, // $F636 + 28, // $F637 + 28, // $F638 + 28, // $F639 + 28, // $F63A + 28, // $F63B + 28, // $F63C + 28, // $F63D + 28, // $F63E + 28, // $F63F + 28, // $F640 + 28, // $F641 + 28, // $F642 + 28, // $F643 + 28, // $F644 + 28, // $F645 + 28, // $F646 + 28, // $F647 + 28, // $F648 + 28, // $F649 + 28, // $F64A + 28, // $F64B + 28, // $F64C + 28, // $F64D + 28, // $F64E + 28, // $F64F + 28, // $F650 + 28, // $F651 + 28, // $F652 + 28, // $F653 + 28, // $F654 + 28, // $F655 + 28, // $F656 + 28, // $F657 + 28, // $F658 + 28, // $F659 + 28, // $F65A + 28, // $F65B + 28, // $F65C + 28, // $F65D + 28, // $F65E + 28, // $F65F + 28, // $F660 + 28, // $F661 + 28, // $F662 + 28, // $F663 + 28, // $F664 + 28, // $F665 + 28, // $F666 + 28, // $F667 + 28, // $F668 + 28, // $F669 + 28, // $F66A + 28, // $F66B + 28, // $F66C + 28, // $F66D + 28, // $F66E + 28, // $F66F + 28, // $F670 + 28, // $F671 + 28, // $F672 + 28, // $F673 + 28, // $F674 + 28, // $F675 + 28, // $F676 + 28, // $F677 + 28, // $F678 + 28, // $F679 + 28, // $F67A + 28, // $F67B + 28, // $F67C + 28, // $F67D + 28, // $F67E + 28, // $F67F + 28, // $F680 + 28, // $F681 + 28, // $F682 + 28, // $F683 + 28, // $F684 + 28, // $F685 + 28, // $F686 + 28, // $F687 + 28, // $F688 + 28, // $F689 + 28, // $F68A + 28, // $F68B + 28, // $F68C + 28, // $F68D + 28, // $F68E + 28, // $F68F + 28, // $F690 + 28, // $F691 + 28, // $F692 + 28, // $F693 + 28, // $F694 + 28, // $F695 + 28, // $F696 + 28, // $F697 + 28, // $F698 + 28, // $F699 + 28, // $F69A + 28, // $F69B + 28, // $F69C + 28, // $F69D + 28, // $F69E + 28, // $F69F + 28, // $F6A0 + 28, // $F6A1 + 28, // $F6A2 + 28, // $F6A3 + 28, // $F6A4 + 28, // $F6A5 + 28, // $F6A6 + 28, // $F6A7 + 28, // $F6A8 + 28, // $F6A9 + 28, // $F6AA + 28, // $F6AB + 28, // $F6AC + 28, // $F6AD + 28, // $F6AE + 28, // $F6AF + 28, // $F6B0 + 28, // $F6B1 + 28, // $F6B2 + 28, // $F6B3 + 28, // $F6B4 + 28, // $F6B5 + 28, // $F6B6 + 28, // $F6B7 + 28, // $F6B8 + 28, // $F6B9 + 28, // $F6BA + 28, // $F6BB + 28, // $F6BC + 28, // $F6BD + 28, // $F6BE + 28, // $F6BF + 28, // $F6C0 + 28, // $F6C1 + 28, // $F6C2 + 28, // $F6C3 + 28, // $F6C4 + 28, // $F6C5 + 28, // $F6C6 + 28, // $F6C7 + 28, // $F6C8 + 28, // $F6C9 + 28, // $F6CA + 28, // $F6CB + 28, // $F6CC + 28, // $F6CD + 28, // $F6CE + 28, // $F6CF + 28, // $F6D0 + 28, // $F6D1 + 28, // $F6D2 + 28, // $F6D3 + 28, // $F6D4 + 28, // $F6D5 + 28, // $F6D6 + 28, // $F6D7 + 28, // $F6D8 + 28, // $F6D9 + 28, // $F6DA + 28, // $F6DB + 28, // $F6DC + 28, // $F6DD + 28, // $F6DE + 28, // $F6DF + 28, // $F6E0 + 28, // $F6E1 + 28, // $F6E2 + 28, // $F6E3 + 28, // $F6E4 + 28, // $F6E5 + 28, // $F6E6 + 28, // $F6E7 + 28, // $F6E8 + 28, // $F6E9 + 28, // $F6EA + 28, // $F6EB + 28, // $F6EC + 28, // $F6ED + 28, // $F6EE + 28, // $F6EF + 28, // $F6F0 + 28, // $F6F1 + 28, // $F6F2 + 28, // $F6F3 + 28, // $F6F4 + 28, // $F6F5 + 28, // $F6F6 + 28, // $F6F7 + 28, // $F6F8 + 28, // $F6F9 + 28, // $F6FA + 28, // $F6FB + 28, // $F6FC + 28, // $F6FD + 28, // $F6FE + 28, // $F6FF + 28, // $F700 + 28, // $F701 + 28, // $F702 + 28, // $F703 + 28, // $F704 + 28, // $F705 + 28, // $F706 + 28, // $F707 + 28, // $F708 + 28, // $F709 + 28, // $F70A + 28, // $F70B + 28, // $F70C + 28, // $F70D + 28, // $F70E + 28, // $F70F + 28, // $F710 + 28, // $F711 + 28, // $F712 + 28, // $F713 + 28, // $F714 + 28, // $F715 + 28, // $F716 + 28, // $F717 + 28, // $F718 + 28, // $F719 + 28, // $F71A + 28, // $F71B + 28, // $F71C + 28, // $F71D + 28, // $F71E + 28, // $F71F + 28, // $F720 + 28, // $F721 + 28, // $F722 + 28, // $F723 + 28, // $F724 + 28, // $F725 + 28, // $F726 + 28, // $F727 + 28, // $F728 + 28, // $F729 + 28, // $F72A + 28, // $F72B + 28, // $F72C + 28, // $F72D + 28, // $F72E + 28, // $F72F + 28, // $F730 + 28, // $F731 + 28, // $F732 + 28, // $F733 + 28, // $F734 + 28, // $F735 + 28, // $F736 + 28, // $F737 + 28, // $F738 + 28, // $F739 + 28, // $F73A + 28, // $F73B + 28, // $F73C + 28, // $F73D + 28, // $F73E + 28, // $F73F + 28, // $F740 + 28, // $F741 + 28, // $F742 + 28, // $F743 + 28, // $F744 + 28, // $F745 + 28, // $F746 + 28, // $F747 + 28, // $F748 + 28, // $F749 + 28, // $F74A + 28, // $F74B + 28, // $F74C + 28, // $F74D + 28, // $F74E + 28, // $F74F + 28, // $F750 + 28, // $F751 + 28, // $F752 + 28, // $F753 + 28, // $F754 + 28, // $F755 + 28, // $F756 + 28, // $F757 + 28, // $F758 + 28, // $F759 + 28, // $F75A + 28, // $F75B + 28, // $F75C + 28, // $F75D + 28, // $F75E + 28, // $F75F + 28, // $F760 + 28, // $F761 + 28, // $F762 + 28, // $F763 + 28, // $F764 + 28, // $F765 + 28, // $F766 + 28, // $F767 + 28, // $F768 + 28, // $F769 + 28, // $F76A + 28, // $F76B + 28, // $F76C + 28, // $F76D + 28, // $F76E + 28, // $F76F + 28, // $F770 + 28, // $F771 + 28, // $F772 + 28, // $F773 + 28, // $F774 + 28, // $F775 + 28, // $F776 + 28, // $F777 + 28, // $F778 + 28, // $F779 + 28, // $F77A + 28, // $F77B + 28, // $F77C + 28, // $F77D + 28, // $F77E + 28, // $F77F + 28, // $F780 + 28, // $F781 + 28, // $F782 + 28, // $F783 + 28, // $F784 + 28, // $F785 + 28, // $F786 + 28, // $F787 + 28, // $F788 + 28, // $F789 + 28, // $F78A + 28, // $F78B + 28, // $F78C + 28, // $F78D + 28, // $F78E + 28, // $F78F + 28, // $F790 + 28, // $F791 + 28, // $F792 + 28, // $F793 + 28, // $F794 + 28, // $F795 + 28, // $F796 + 28, // $F797 + 28, // $F798 + 28, // $F799 + 28, // $F79A + 28, // $F79B + 28, // $F79C + 28, // $F79D + 28, // $F79E + 28, // $F79F + 28, // $F7A0 + 28, // $F7A1 + 28, // $F7A2 + 28, // $F7A3 + 28, // $F7A4 + 28, // $F7A5 + 28, // $F7A6 + 28, // $F7A7 + 28, // $F7A8 + 28, // $F7A9 + 28, // $F7AA + 28, // $F7AB + 28, // $F7AC + 28, // $F7AD + 28, // $F7AE + 28, // $F7AF + 28, // $F7B0 + 28, // $F7B1 + 28, // $F7B2 + 28, // $F7B3 + 28, // $F7B4 + 28, // $F7B5 + 28, // $F7B6 + 28, // $F7B7 + 28, // $F7B8 + 28, // $F7B9 + 28, // $F7BA + 28, // $F7BB + 28, // $F7BC + 28, // $F7BD + 28, // $F7BE + 28, // $F7BF + 28, // $F7C0 + 28, // $F7C1 + 28, // $F7C2 + 28, // $F7C3 + 28, // $F7C4 + 28, // $F7C5 + 28, // $F7C6 + 28, // $F7C7 + 28, // $F7C8 + 28, // $F7C9 + 28, // $F7CA + 28, // $F7CB + 28, // $F7CC + 28, // $F7CD + 28, // $F7CE + 28, // $F7CF + 28, // $F7D0 + 28, // $F7D1 + 28, // $F7D2 + 28, // $F7D3 + 28, // $F7D4 + 28, // $F7D5 + 28, // $F7D6 + 28, // $F7D7 + 28, // $F7D8 + 28, // $F7D9 + 28, // $F7DA + 28, // $F7DB + 28, // $F7DC + 28, // $F7DD + 28, // $F7DE + 28, // $F7DF + 28, // $F7E0 + 28, // $F7E1 + 28, // $F7E2 + 28, // $F7E3 + 28, // $F7E4 + 28, // $F7E5 + 28, // $F7E6 + 28, // $F7E7 + 28, // $F7E8 + 28, // $F7E9 + 28, // $F7EA + 28, // $F7EB + 28, // $F7EC + 28, // $F7ED + 28, // $F7EE + 28, // $F7EF + 28, // $F7F0 + 28, // $F7F1 + 28, // $F7F2 + 28, // $F7F3 + 28, // $F7F4 + 28, // $F7F5 + 28, // $F7F6 + 28, // $F7F7 + 28, // $F7F8 + 28, // $F7F9 + 28, // $F7FA + 28, // $F7FB + 28, // $F7FC + 28, // $F7FD + 28, // $F7FE + 28, // $F7FF + 28, // $F800 + 28, // $F801 + 28, // $F802 + 28, // $F803 + 28, // $F804 + 28, // $F805 + 28, // $F806 + 28, // $F807 + 28, // $F808 + 28, // $F809 + 28, // $F80A + 28, // $F80B + 28, // $F80C + 28, // $F80D + 28, // $F80E + 28, // $F80F + 28, // $F810 + 28, // $F811 + 28, // $F812 + 28, // $F813 + 28, // $F814 + 28, // $F815 + 28, // $F816 + 28, // $F817 + 28, // $F818 + 28, // $F819 + 28, // $F81A + 28, // $F81B + 28, // $F81C + 28, // $F81D + 28, // $F81E + 28, // $F81F + 28, // $F820 + 28, // $F821 + 28, // $F822 + 28, // $F823 + 28, // $F824 + 28, // $F825 + 28, // $F826 + 28, // $F827 + 28, // $F828 + 28, // $F829 + 28, // $F82A + 28, // $F82B + 28, // $F82C + 28, // $F82D + 28, // $F82E + 28, // $F82F + 28, // $F830 + 28, // $F831 + 28, // $F832 + 28, // $F833 + 28, // $F834 + 28, // $F835 + 28, // $F836 + 28, // $F837 + 28, // $F838 + 28, // $F839 + 28, // $F83A + 28, // $F83B + 28, // $F83C + 28, // $F83D + 28, // $F83E + 28, // $F83F + 28, // $F840 + 28, // $F841 + 28, // $F842 + 28, // $F843 + 28, // $F844 + 28, // $F845 + 28, // $F846 + 28, // $F847 + 28, // $F848 + 28, // $F849 + 28, // $F84A + 28, // $F84B + 28, // $F84C + 28, // $F84D + 28, // $F84E + 28, // $F84F + 28, // $F850 + 28, // $F851 + 28, // $F852 + 28, // $F853 + 28, // $F854 + 28, // $F855 + 28, // $F856 + 28, // $F857 + 28, // $F858 + 28, // $F859 + 28, // $F85A + 28, // $F85B + 28, // $F85C + 28, // $F85D + 28, // $F85E + 28, // $F85F + 28, // $F860 + 28, // $F861 + 28, // $F862 + 28, // $F863 + 28, // $F864 + 28, // $F865 + 28, // $F866 + 28, // $F867 + 28, // $F868 + 28, // $F869 + 28, // $F86A + 28, // $F86B + 28, // $F86C + 28, // $F86D + 28, // $F86E + 28, // $F86F + 28, // $F870 + 28, // $F871 + 28, // $F872 + 28, // $F873 + 28, // $F874 + 28, // $F875 + 28, // $F876 + 28, // $F877 + 28, // $F878 + 28, // $F879 + 28, // $F87A + 28, // $F87B + 28, // $F87C + 28, // $F87D + 28, // $F87E + 28, // $F87F + 28, // $F880 + 28, // $F881 + 28, // $F882 + 28, // $F883 + 28, // $F884 + 28, // $F885 + 28, // $F886 + 28, // $F887 + 28, // $F888 + 28, // $F889 + 28, // $F88A + 28, // $F88B + 28, // $F88C + 28, // $F88D + 28, // $F88E + 28, // $F88F + 28, // $F890 + 28, // $F891 + 28, // $F892 + 28, // $F893 + 28, // $F894 + 28, // $F895 + 28, // $F896 + 28, // $F897 + 28, // $F898 + 28, // $F899 + 28, // $F89A + 28, // $F89B + 28, // $F89C + 28, // $F89D + 28, // $F89E + 28, // $F89F + 28, // $F8A0 + 28, // $F8A1 + 28, // $F8A2 + 28, // $F8A3 + 28, // $F8A4 + 28, // $F8A5 + 28, // $F8A6 + 28, // $F8A7 + 28, // $F8A8 + 28, // $F8A9 + 28, // $F8AA + 28, // $F8AB + 28, // $F8AC + 28, // $F8AD + 28, // $F8AE + 28, // $F8AF + 28, // $F8B0 + 28, // $F8B1 + 28, // $F8B2 + 28, // $F8B3 + 28, // $F8B4 + 28, // $F8B5 + 28, // $F8B6 + 28, // $F8B7 + 28, // $F8B8 + 28, // $F8B9 + 28, // $F8BA + 28, // $F8BB + 28, // $F8BC + 28, // $F8BD + 28, // $F8BE + 28, // $F8BF + 28, // $F8C0 + 28, // $F8C1 + 28, // $F8C2 + 28, // $F8C3 + 28, // $F8C4 + 28, // $F8C5 + 28, // $F8C6 + 28, // $F8C7 + 28, // $F8C8 + 28, // $F8C9 + 28, // $F8CA + 28, // $F8CB + 28, // $F8CC + 28, // $F8CD + 28, // $F8CE + 28, // $F8CF + 28, // $F8D0 + 28, // $F8D1 + 28, // $F8D2 + 28, // $F8D3 + 28, // $F8D4 + 28, // $F8D5 + 28, // $F8D6 + 28, // $F8D7 + 28, // $F8D8 + 28, // $F8D9 + 28, // $F8DA + 28, // $F8DB + 28, // $F8DC + 28, // $F8DD + 28, // $F8DE + 28, // $F8DF + 28, // $F8E0 + 28, // $F8E1 + 28, // $F8E2 + 28, // $F8E3 + 28, // $F8E4 + 28, // $F8E5 + 28, // $F8E6 + 28, // $F8E7 + 28, // $F8E8 + 28, // $F8E9 + 28, // $F8EA + 28, // $F8EB + 28, // $F8EC + 28, // $F8ED + 28, // $F8EE + 28, // $F8EF + 28, // $F8F0 + 28, // $F8F1 + 28, // $F8F2 + 28, // $F8F3 + 28, // $F8F4 + 28, // $F8F5 + 28, // $F8F6 + 28, // $F8F7 + 28, // $F8F8 + 28, // $F8F9 + 28, // $F8FA + 28, // $F8FB + 28, // $F8FC + 28, // $F8FD + 28, // $F8FE + 28, // $F8FF + 4, // $F900 + 4, // $F901 + 4, // $F902 + 4, // $F903 + 4, // $F904 + 4, // $F905 + 4, // $F906 + 4, // $F907 + 4, // $F908 + 4, // $F909 + 4, // $F90A + 4, // $F90B + 4, // $F90C + 4, // $F90D + 4, // $F90E + 4, // $F90F + 4, // $F910 + 4, // $F911 + 4, // $F912 + 4, // $F913 + 4, // $F914 + 4, // $F915 + 4, // $F916 + 4, // $F917 + 4, // $F918 + 4, // $F919 + 4, // $F91A + 4, // $F91B + 4, // $F91C + 4, // $F91D + 4, // $F91E + 4, // $F91F + 4, // $F920 + 4, // $F921 + 4, // $F922 + 4, // $F923 + 4, // $F924 + 4, // $F925 + 4, // $F926 + 4, // $F927 + 4, // $F928 + 4, // $F929 + 4, // $F92A + 4, // $F92B + 4, // $F92C + 4, // $F92D + 4, // $F92E + 4, // $F92F + 4, // $F930 + 4, // $F931 + 4, // $F932 + 4, // $F933 + 4, // $F934 + 4, // $F935 + 4, // $F936 + 4, // $F937 + 4, // $F938 + 4, // $F939 + 4, // $F93A + 4, // $F93B + 4, // $F93C + 4, // $F93D + 4, // $F93E + 4, // $F93F + 4, // $F940 + 4, // $F941 + 4, // $F942 + 4, // $F943 + 4, // $F944 + 4, // $F945 + 4, // $F946 + 4, // $F947 + 4, // $F948 + 4, // $F949 + 4, // $F94A + 4, // $F94B + 4, // $F94C + 4, // $F94D + 4, // $F94E + 4, // $F94F + 4, // $F950 + 4, // $F951 + 4, // $F952 + 4, // $F953 + 4, // $F954 + 4, // $F955 + 4, // $F956 + 4, // $F957 + 4, // $F958 + 4, // $F959 + 4, // $F95A + 4, // $F95B + 4, // $F95C + 4, // $F95D + 4, // $F95E + 4, // $F95F + 4, // $F960 + 4, // $F961 + 4, // $F962 + 4, // $F963 + 4, // $F964 + 4, // $F965 + 4, // $F966 + 4, // $F967 + 4, // $F968 + 4, // $F969 + 4, // $F96A + 4, // $F96B + 4, // $F96C + 4, // $F96D + 4, // $F96E + 4, // $F96F + 4, // $F970 + 4, // $F971 + 4, // $F972 + 4, // $F973 + 4, // $F974 + 4, // $F975 + 4, // $F976 + 4, // $F977 + 4, // $F978 + 4, // $F979 + 4, // $F97A + 4, // $F97B + 4, // $F97C + 4, // $F97D + 4, // $F97E + 4, // $F97F + 4, // $F980 + 4, // $F981 + 4, // $F982 + 4, // $F983 + 4, // $F984 + 4, // $F985 + 4, // $F986 + 4, // $F987 + 4, // $F988 + 4, // $F989 + 4, // $F98A + 4, // $F98B + 4, // $F98C + 4, // $F98D + 4, // $F98E + 4, // $F98F + 4, // $F990 + 4, // $F991 + 4, // $F992 + 4, // $F993 + 4, // $F994 + 4, // $F995 + 4, // $F996 + 4, // $F997 + 4, // $F998 + 4, // $F999 + 4, // $F99A + 4, // $F99B + 4, // $F99C + 4, // $F99D + 4, // $F99E + 4, // $F99F + 4, // $F9A0 + 4, // $F9A1 + 4, // $F9A2 + 4, // $F9A3 + 4, // $F9A4 + 4, // $F9A5 + 4, // $F9A6 + 4, // $F9A7 + 4, // $F9A8 + 4, // $F9A9 + 4, // $F9AA + 4, // $F9AB + 4, // $F9AC + 4, // $F9AD + 4, // $F9AE + 4, // $F9AF + 4, // $F9B0 + 4, // $F9B1 + 4, // $F9B2 + 4, // $F9B3 + 4, // $F9B4 + 4, // $F9B5 + 4, // $F9B6 + 4, // $F9B7 + 4, // $F9B8 + 4, // $F9B9 + 4, // $F9BA + 4, // $F9BB + 4, // $F9BC + 4, // $F9BD + 4, // $F9BE + 4, // $F9BF + 4, // $F9C0 + 4, // $F9C1 + 4, // $F9C2 + 4, // $F9C3 + 4, // $F9C4 + 4, // $F9C5 + 4, // $F9C6 + 4, // $F9C7 + 4, // $F9C8 + 4, // $F9C9 + 4, // $F9CA + 4, // $F9CB + 4, // $F9CC + 4, // $F9CD + 4, // $F9CE + 4, // $F9CF + 4, // $F9D0 + 4, // $F9D1 + 4, // $F9D2 + 4, // $F9D3 + 4, // $F9D4 + 4, // $F9D5 + 4, // $F9D6 + 4, // $F9D7 + 4, // $F9D8 + 4, // $F9D9 + 4, // $F9DA + 4, // $F9DB + 4, // $F9DC + 4, // $F9DD + 4, // $F9DE + 4, // $F9DF + 4, // $F9E0 + 4, // $F9E1 + 4, // $F9E2 + 4, // $F9E3 + 4, // $F9E4 + 4, // $F9E5 + 4, // $F9E6 + 4, // $F9E7 + 4, // $F9E8 + 4, // $F9E9 + 4, // $F9EA + 4, // $F9EB + 4, // $F9EC + 4, // $F9ED + 4, // $F9EE + 4, // $F9EF + 4, // $F9F0 + 4, // $F9F1 + 4, // $F9F2 + 4, // $F9F3 + 4, // $F9F4 + 4, // $F9F5 + 4, // $F9F6 + 4, // $F9F7 + 4, // $F9F8 + 4, // $F9F9 + 4, // $F9FA + 4, // $F9FB + 4, // $F9FC + 4, // $F9FD + 4, // $F9FE + 4, // $F9FF + 4, // $FA00 + 4, // $FA01 + 4, // $FA02 + 4, // $FA03 + 4, // $FA04 + 4, // $FA05 + 4, // $FA06 + 4, // $FA07 + 4, // $FA08 + 4, // $FA09 + 4, // $FA0A + 4, // $FA0B + 4, // $FA0C + 4, // $FA0D + 4, // $FA0E + 4, // $FA0F + 4, // $FA10 + 4, // $FA11 + 4, // $FA12 + 4, // $FA13 + 4, // $FA14 + 4, // $FA15 + 4, // $FA16 + 4, // $FA17 + 4, // $FA18 + 4, // $FA19 + 4, // $FA1A + 4, // $FA1B + 4, // $FA1C + 4, // $FA1D + 4, // $FA1E + 4, // $FA1F + 4, // $FA20 + 4, // $FA21 + 4, // $FA22 + 4, // $FA23 + 4, // $FA24 + 4, // $FA25 + 4, // $FA26 + 4, // $FA27 + 4, // $FA28 + 4, // $FA29 + 4, // $FA2A + 4, // $FA2B + 4, // $FA2C + 4, // $FA2D + 4, // $FA2E + 4, // $FA2F + 4, // $FA30 + 4, // $FA31 + 4, // $FA32 + 4, // $FA33 + 4, // $FA34 + 4, // $FA35 + 4, // $FA36 + 4, // $FA37 + 4, // $FA38 + 4, // $FA39 + 4, // $FA3A + 4, // $FA3B + 4, // $FA3C + 4, // $FA3D + 4, // $FA3E + 4, // $FA3F + 4, // $FA40 + 4, // $FA41 + 4, // $FA42 + 4, // $FA43 + 4, // $FA44 + 4, // $FA45 + 4, // $FA46 + 4, // $FA47 + 4, // $FA48 + 4, // $FA49 + 4, // $FA4A + 4, // $FA4B + 4, // $FA4C + 4, // $FA4D + 4, // $FA4E + 4, // $FA4F + 4, // $FA50 + 4, // $FA51 + 4, // $FA52 + 4, // $FA53 + 4, // $FA54 + 4, // $FA55 + 4, // $FA56 + 4, // $FA57 + 4, // $FA58 + 4, // $FA59 + 4, // $FA5A + 4, // $FA5B + 4, // $FA5C + 4, // $FA5D + 4, // $FA5E + 4, // $FA5F + 4, // $FA60 + 4, // $FA61 + 4, // $FA62 + 4, // $FA63 + 4, // $FA64 + 4, // $FA65 + 4, // $FA66 + 4, // $FA67 + 4, // $FA68 + 4, // $FA69 + 4, // $FA6A + 4, // $FA6B + 4, // $FA6C + 4, // $FA6D + 29, // $FA6E + 29, // $FA6F + 4, // $FA70 + 4, // $FA71 + 4, // $FA72 + 4, // $FA73 + 4, // $FA74 + 4, // $FA75 + 4, // $FA76 + 4, // $FA77 + 4, // $FA78 + 4, // $FA79 + 4, // $FA7A + 4, // $FA7B + 4, // $FA7C + 4, // $FA7D + 4, // $FA7E + 4, // $FA7F + 4, // $FA80 + 4, // $FA81 + 4, // $FA82 + 4, // $FA83 + 4, // $FA84 + 4, // $FA85 + 4, // $FA86 + 4, // $FA87 + 4, // $FA88 + 4, // $FA89 + 4, // $FA8A + 4, // $FA8B + 4, // $FA8C + 4, // $FA8D + 4, // $FA8E + 4, // $FA8F + 4, // $FA90 + 4, // $FA91 + 4, // $FA92 + 4, // $FA93 + 4, // $FA94 + 4, // $FA95 + 4, // $FA96 + 4, // $FA97 + 4, // $FA98 + 4, // $FA99 + 4, // $FA9A + 4, // $FA9B + 4, // $FA9C + 4, // $FA9D + 4, // $FA9E + 4, // $FA9F + 4, // $FAA0 + 4, // $FAA1 + 4, // $FAA2 + 4, // $FAA3 + 4, // $FAA4 + 4, // $FAA5 + 4, // $FAA6 + 4, // $FAA7 + 4, // $FAA8 + 4, // $FAA9 + 4, // $FAAA + 4, // $FAAB + 4, // $FAAC + 4, // $FAAD + 4, // $FAAE + 4, // $FAAF + 4, // $FAB0 + 4, // $FAB1 + 4, // $FAB2 + 4, // $FAB3 + 4, // $FAB4 + 4, // $FAB5 + 4, // $FAB6 + 4, // $FAB7 + 4, // $FAB8 + 4, // $FAB9 + 4, // $FABA + 4, // $FABB + 4, // $FABC + 4, // $FABD + 4, // $FABE + 4, // $FABF + 4, // $FAC0 + 4, // $FAC1 + 4, // $FAC2 + 4, // $FAC3 + 4, // $FAC4 + 4, // $FAC5 + 4, // $FAC6 + 4, // $FAC7 + 4, // $FAC8 + 4, // $FAC9 + 4, // $FACA + 4, // $FACB + 4, // $FACC + 4, // $FACD + 4, // $FACE + 4, // $FACF + 4, // $FAD0 + 4, // $FAD1 + 4, // $FAD2 + 4, // $FAD3 + 4, // $FAD4 + 4, // $FAD5 + 4, // $FAD6 + 4, // $FAD7 + 4, // $FAD8 + 4, // $FAD9 + 29, // $FADA + 29, // $FADB + 29, // $FADC + 29, // $FADD + 29, // $FADE + 29, // $FADF + 29, // $FAE0 + 29, // $FAE1 + 29, // $FAE2 + 29, // $FAE3 + 29, // $FAE4 + 29, // $FAE5 + 29, // $FAE6 + 29, // $FAE7 + 29, // $FAE8 + 29, // $FAE9 + 29, // $FAEA + 29, // $FAEB + 29, // $FAEC + 29, // $FAED + 29, // $FAEE + 29, // $FAEF + 29, // $FAF0 + 29, // $FAF1 + 29, // $FAF2 + 29, // $FAF3 + 29, // $FAF4 + 29, // $FAF5 + 29, // $FAF6 + 29, // $FAF7 + 29, // $FAF8 + 29, // $FAF9 + 29, // $FAFA + 29, // $FAFB + 29, // $FAFC + 29, // $FAFD + 29, // $FAFE + 29, // $FAFF + 1, // $FB00 + 1, // $FB01 + 1, // $FB02 + 1, // $FB03 + 1, // $FB04 + 1, // $FB05 + 1, // $FB06 + 29, // $FB07 + 29, // $FB08 + 29, // $FB09 + 29, // $FB0A + 29, // $FB0B + 29, // $FB0C + 29, // $FB0D + 29, // $FB0E + 29, // $FB0F + 29, // $FB10 + 29, // $FB11 + 29, // $FB12 + 1, // $FB13 + 1, // $FB14 + 1, // $FB15 + 1, // $FB16 + 1, // $FB17 + 29, // $FB18 + 29, // $FB19 + 29, // $FB1A + 29, // $FB1B + 29, // $FB1C + 4, // $FB1D + 5, // $FB1E + 4, // $FB1F + 4, // $FB20 + 4, // $FB21 + 4, // $FB22 + 4, // $FB23 + 4, // $FB24 + 4, // $FB25 + 4, // $FB26 + 4, // $FB27 + 4, // $FB28 + 18, // $FB29 + 4, // $FB2A + 4, // $FB2B + 4, // $FB2C + 4, // $FB2D + 4, // $FB2E + 4, // $FB2F + 4, // $FB30 + 4, // $FB31 + 4, // $FB32 + 4, // $FB33 + 4, // $FB34 + 4, // $FB35 + 4, // $FB36 + 29, // $FB37 + 4, // $FB38 + 4, // $FB39 + 4, // $FB3A + 4, // $FB3B + 4, // $FB3C + 29, // $FB3D + 4, // $FB3E + 29, // $FB3F + 4, // $FB40 + 4, // $FB41 + 29, // $FB42 + 4, // $FB43 + 4, // $FB44 + 29, // $FB45 + 4, // $FB46 + 4, // $FB47 + 4, // $FB48 + 4, // $FB49 + 4, // $FB4A + 4, // $FB4B + 4, // $FB4C + 4, // $FB4D + 4, // $FB4E + 4, // $FB4F + 4, // $FB50 + 4, // $FB51 + 4, // $FB52 + 4, // $FB53 + 4, // $FB54 + 4, // $FB55 + 4, // $FB56 + 4, // $FB57 + 4, // $FB58 + 4, // $FB59 + 4, // $FB5A + 4, // $FB5B + 4, // $FB5C + 4, // $FB5D + 4, // $FB5E + 4, // $FB5F + 4, // $FB60 + 4, // $FB61 + 4, // $FB62 + 4, // $FB63 + 4, // $FB64 + 4, // $FB65 + 4, // $FB66 + 4, // $FB67 + 4, // $FB68 + 4, // $FB69 + 4, // $FB6A + 4, // $FB6B + 4, // $FB6C + 4, // $FB6D + 4, // $FB6E + 4, // $FB6F + 4, // $FB70 + 4, // $FB71 + 4, // $FB72 + 4, // $FB73 + 4, // $FB74 + 4, // $FB75 + 4, // $FB76 + 4, // $FB77 + 4, // $FB78 + 4, // $FB79 + 4, // $FB7A + 4, // $FB7B + 4, // $FB7C + 4, // $FB7D + 4, // $FB7E + 4, // $FB7F + 4, // $FB80 + 4, // $FB81 + 4, // $FB82 + 4, // $FB83 + 4, // $FB84 + 4, // $FB85 + 4, // $FB86 + 4, // $FB87 + 4, // $FB88 + 4, // $FB89 + 4, // $FB8A + 4, // $FB8B + 4, // $FB8C + 4, // $FB8D + 4, // $FB8E + 4, // $FB8F + 4, // $FB90 + 4, // $FB91 + 4, // $FB92 + 4, // $FB93 + 4, // $FB94 + 4, // $FB95 + 4, // $FB96 + 4, // $FB97 + 4, // $FB98 + 4, // $FB99 + 4, // $FB9A + 4, // $FB9B + 4, // $FB9C + 4, // $FB9D + 4, // $FB9E + 4, // $FB9F + 4, // $FBA0 + 4, // $FBA1 + 4, // $FBA2 + 4, // $FBA3 + 4, // $FBA4 + 4, // $FBA5 + 4, // $FBA6 + 4, // $FBA7 + 4, // $FBA8 + 4, // $FBA9 + 4, // $FBAA + 4, // $FBAB + 4, // $FBAC + 4, // $FBAD + 4, // $FBAE + 4, // $FBAF + 4, // $FBB0 + 4, // $FBB1 + 20, // $FBB2 + 20, // $FBB3 + 20, // $FBB4 + 20, // $FBB5 + 20, // $FBB6 + 20, // $FBB7 + 20, // $FBB8 + 20, // $FBB9 + 20, // $FBBA + 20, // $FBBB + 20, // $FBBC + 20, // $FBBD + 20, // $FBBE + 20, // $FBBF + 20, // $FBC0 + 20, // $FBC1 + 29, // $FBC2 + 29, // $FBC3 + 29, // $FBC4 + 29, // $FBC5 + 29, // $FBC6 + 29, // $FBC7 + 29, // $FBC8 + 29, // $FBC9 + 29, // $FBCA + 29, // $FBCB + 29, // $FBCC + 29, // $FBCD + 29, // $FBCE + 29, // $FBCF + 29, // $FBD0 + 29, // $FBD1 + 29, // $FBD2 + 4, // $FBD3 + 4, // $FBD4 + 4, // $FBD5 + 4, // $FBD6 + 4, // $FBD7 + 4, // $FBD8 + 4, // $FBD9 + 4, // $FBDA + 4, // $FBDB + 4, // $FBDC + 4, // $FBDD + 4, // $FBDE + 4, // $FBDF + 4, // $FBE0 + 4, // $FBE1 + 4, // $FBE2 + 4, // $FBE3 + 4, // $FBE4 + 4, // $FBE5 + 4, // $FBE6 + 4, // $FBE7 + 4, // $FBE8 + 4, // $FBE9 + 4, // $FBEA + 4, // $FBEB + 4, // $FBEC + 4, // $FBED + 4, // $FBEE + 4, // $FBEF + 4, // $FBF0 + 4, // $FBF1 + 4, // $FBF2 + 4, // $FBF3 + 4, // $FBF4 + 4, // $FBF5 + 4, // $FBF6 + 4, // $FBF7 + 4, // $FBF8 + 4, // $FBF9 + 4, // $FBFA + 4, // $FBFB + 4, // $FBFC + 4, // $FBFD + 4, // $FBFE + 4, // $FBFF + 4, // $FC00 + 4, // $FC01 + 4, // $FC02 + 4, // $FC03 + 4, // $FC04 + 4, // $FC05 + 4, // $FC06 + 4, // $FC07 + 4, // $FC08 + 4, // $FC09 + 4, // $FC0A + 4, // $FC0B + 4, // $FC0C + 4, // $FC0D + 4, // $FC0E + 4, // $FC0F + 4, // $FC10 + 4, // $FC11 + 4, // $FC12 + 4, // $FC13 + 4, // $FC14 + 4, // $FC15 + 4, // $FC16 + 4, // $FC17 + 4, // $FC18 + 4, // $FC19 + 4, // $FC1A + 4, // $FC1B + 4, // $FC1C + 4, // $FC1D + 4, // $FC1E + 4, // $FC1F + 4, // $FC20 + 4, // $FC21 + 4, // $FC22 + 4, // $FC23 + 4, // $FC24 + 4, // $FC25 + 4, // $FC26 + 4, // $FC27 + 4, // $FC28 + 4, // $FC29 + 4, // $FC2A + 4, // $FC2B + 4, // $FC2C + 4, // $FC2D + 4, // $FC2E + 4, // $FC2F + 4, // $FC30 + 4, // $FC31 + 4, // $FC32 + 4, // $FC33 + 4, // $FC34 + 4, // $FC35 + 4, // $FC36 + 4, // $FC37 + 4, // $FC38 + 4, // $FC39 + 4, // $FC3A + 4, // $FC3B + 4, // $FC3C + 4, // $FC3D + 4, // $FC3E + 4, // $FC3F + 4, // $FC40 + 4, // $FC41 + 4, // $FC42 + 4, // $FC43 + 4, // $FC44 + 4, // $FC45 + 4, // $FC46 + 4, // $FC47 + 4, // $FC48 + 4, // $FC49 + 4, // $FC4A + 4, // $FC4B + 4, // $FC4C + 4, // $FC4D + 4, // $FC4E + 4, // $FC4F + 4, // $FC50 + 4, // $FC51 + 4, // $FC52 + 4, // $FC53 + 4, // $FC54 + 4, // $FC55 + 4, // $FC56 + 4, // $FC57 + 4, // $FC58 + 4, // $FC59 + 4, // $FC5A + 4, // $FC5B + 4, // $FC5C + 4, // $FC5D + 4, // $FC5E + 4, // $FC5F + 4, // $FC60 + 4, // $FC61 + 4, // $FC62 + 4, // $FC63 + 4, // $FC64 + 4, // $FC65 + 4, // $FC66 + 4, // $FC67 + 4, // $FC68 + 4, // $FC69 + 4, // $FC6A + 4, // $FC6B + 4, // $FC6C + 4, // $FC6D + 4, // $FC6E + 4, // $FC6F + 4, // $FC70 + 4, // $FC71 + 4, // $FC72 + 4, // $FC73 + 4, // $FC74 + 4, // $FC75 + 4, // $FC76 + 4, // $FC77 + 4, // $FC78 + 4, // $FC79 + 4, // $FC7A + 4, // $FC7B + 4, // $FC7C + 4, // $FC7D + 4, // $FC7E + 4, // $FC7F + 4, // $FC80 + 4, // $FC81 + 4, // $FC82 + 4, // $FC83 + 4, // $FC84 + 4, // $FC85 + 4, // $FC86 + 4, // $FC87 + 4, // $FC88 + 4, // $FC89 + 4, // $FC8A + 4, // $FC8B + 4, // $FC8C + 4, // $FC8D + 4, // $FC8E + 4, // $FC8F + 4, // $FC90 + 4, // $FC91 + 4, // $FC92 + 4, // $FC93 + 4, // $FC94 + 4, // $FC95 + 4, // $FC96 + 4, // $FC97 + 4, // $FC98 + 4, // $FC99 + 4, // $FC9A + 4, // $FC9B + 4, // $FC9C + 4, // $FC9D + 4, // $FC9E + 4, // $FC9F + 4, // $FCA0 + 4, // $FCA1 + 4, // $FCA2 + 4, // $FCA3 + 4, // $FCA4 + 4, // $FCA5 + 4, // $FCA6 + 4, // $FCA7 + 4, // $FCA8 + 4, // $FCA9 + 4, // $FCAA + 4, // $FCAB + 4, // $FCAC + 4, // $FCAD + 4, // $FCAE + 4, // $FCAF + 4, // $FCB0 + 4, // $FCB1 + 4, // $FCB2 + 4, // $FCB3 + 4, // $FCB4 + 4, // $FCB5 + 4, // $FCB6 + 4, // $FCB7 + 4, // $FCB8 + 4, // $FCB9 + 4, // $FCBA + 4, // $FCBB + 4, // $FCBC + 4, // $FCBD + 4, // $FCBE + 4, // $FCBF + 4, // $FCC0 + 4, // $FCC1 + 4, // $FCC2 + 4, // $FCC3 + 4, // $FCC4 + 4, // $FCC5 + 4, // $FCC6 + 4, // $FCC7 + 4, // $FCC8 + 4, // $FCC9 + 4, // $FCCA + 4, // $FCCB + 4, // $FCCC + 4, // $FCCD + 4, // $FCCE + 4, // $FCCF + 4, // $FCD0 + 4, // $FCD1 + 4, // $FCD2 + 4, // $FCD3 + 4, // $FCD4 + 4, // $FCD5 + 4, // $FCD6 + 4, // $FCD7 + 4, // $FCD8 + 4, // $FCD9 + 4, // $FCDA + 4, // $FCDB + 4, // $FCDC + 4, // $FCDD + 4, // $FCDE + 4, // $FCDF + 4, // $FCE0 + 4, // $FCE1 + 4, // $FCE2 + 4, // $FCE3 + 4, // $FCE4 + 4, // $FCE5 + 4, // $FCE6 + 4, // $FCE7 + 4, // $FCE8 + 4, // $FCE9 + 4, // $FCEA + 4, // $FCEB + 4, // $FCEC + 4, // $FCED + 4, // $FCEE + 4, // $FCEF + 4, // $FCF0 + 4, // $FCF1 + 4, // $FCF2 + 4, // $FCF3 + 4, // $FCF4 + 4, // $FCF5 + 4, // $FCF6 + 4, // $FCF7 + 4, // $FCF8 + 4, // $FCF9 + 4, // $FCFA + 4, // $FCFB + 4, // $FCFC + 4, // $FCFD + 4, // $FCFE + 4, // $FCFF + 4, // $FD00 + 4, // $FD01 + 4, // $FD02 + 4, // $FD03 + 4, // $FD04 + 4, // $FD05 + 4, // $FD06 + 4, // $FD07 + 4, // $FD08 + 4, // $FD09 + 4, // $FD0A + 4, // $FD0B + 4, // $FD0C + 4, // $FD0D + 4, // $FD0E + 4, // $FD0F + 4, // $FD10 + 4, // $FD11 + 4, // $FD12 + 4, // $FD13 + 4, // $FD14 + 4, // $FD15 + 4, // $FD16 + 4, // $FD17 + 4, // $FD18 + 4, // $FD19 + 4, // $FD1A + 4, // $FD1B + 4, // $FD1C + 4, // $FD1D + 4, // $FD1E + 4, // $FD1F + 4, // $FD20 + 4, // $FD21 + 4, // $FD22 + 4, // $FD23 + 4, // $FD24 + 4, // $FD25 + 4, // $FD26 + 4, // $FD27 + 4, // $FD28 + 4, // $FD29 + 4, // $FD2A + 4, // $FD2B + 4, // $FD2C + 4, // $FD2D + 4, // $FD2E + 4, // $FD2F + 4, // $FD30 + 4, // $FD31 + 4, // $FD32 + 4, // $FD33 + 4, // $FD34 + 4, // $FD35 + 4, // $FD36 + 4, // $FD37 + 4, // $FD38 + 4, // $FD39 + 4, // $FD3A + 4, // $FD3B + 4, // $FD3C + 4, // $FD3D + 14, // $FD3E + 13, // $FD3F + 29, // $FD40 + 29, // $FD41 + 29, // $FD42 + 29, // $FD43 + 29, // $FD44 + 29, // $FD45 + 29, // $FD46 + 29, // $FD47 + 29, // $FD48 + 29, // $FD49 + 29, // $FD4A + 29, // $FD4B + 29, // $FD4C + 29, // $FD4D + 29, // $FD4E + 29, // $FD4F + 4, // $FD50 + 4, // $FD51 + 4, // $FD52 + 4, // $FD53 + 4, // $FD54 + 4, // $FD55 + 4, // $FD56 + 4, // $FD57 + 4, // $FD58 + 4, // $FD59 + 4, // $FD5A + 4, // $FD5B + 4, // $FD5C + 4, // $FD5D + 4, // $FD5E + 4, // $FD5F + 4, // $FD60 + 4, // $FD61 + 4, // $FD62 + 4, // $FD63 + 4, // $FD64 + 4, // $FD65 + 4, // $FD66 + 4, // $FD67 + 4, // $FD68 + 4, // $FD69 + 4, // $FD6A + 4, // $FD6B + 4, // $FD6C + 4, // $FD6D + 4, // $FD6E + 4, // $FD6F + 4, // $FD70 + 4, // $FD71 + 4, // $FD72 + 4, // $FD73 + 4, // $FD74 + 4, // $FD75 + 4, // $FD76 + 4, // $FD77 + 4, // $FD78 + 4, // $FD79 + 4, // $FD7A + 4, // $FD7B + 4, // $FD7C + 4, // $FD7D + 4, // $FD7E + 4, // $FD7F + 4, // $FD80 + 4, // $FD81 + 4, // $FD82 + 4, // $FD83 + 4, // $FD84 + 4, // $FD85 + 4, // $FD86 + 4, // $FD87 + 4, // $FD88 + 4, // $FD89 + 4, // $FD8A + 4, // $FD8B + 4, // $FD8C + 4, // $FD8D + 4, // $FD8E + 4, // $FD8F + 29, // $FD90 + 29, // $FD91 + 4, // $FD92 + 4, // $FD93 + 4, // $FD94 + 4, // $FD95 + 4, // $FD96 + 4, // $FD97 + 4, // $FD98 + 4, // $FD99 + 4, // $FD9A + 4, // $FD9B + 4, // $FD9C + 4, // $FD9D + 4, // $FD9E + 4, // $FD9F + 4, // $FDA0 + 4, // $FDA1 + 4, // $FDA2 + 4, // $FDA3 + 4, // $FDA4 + 4, // $FDA5 + 4, // $FDA6 + 4, // $FDA7 + 4, // $FDA8 + 4, // $FDA9 + 4, // $FDAA + 4, // $FDAB + 4, // $FDAC + 4, // $FDAD + 4, // $FDAE + 4, // $FDAF + 4, // $FDB0 + 4, // $FDB1 + 4, // $FDB2 + 4, // $FDB3 + 4, // $FDB4 + 4, // $FDB5 + 4, // $FDB6 + 4, // $FDB7 + 4, // $FDB8 + 4, // $FDB9 + 4, // $FDBA + 4, // $FDBB + 4, // $FDBC + 4, // $FDBD + 4, // $FDBE + 4, // $FDBF + 4, // $FDC0 + 4, // $FDC1 + 4, // $FDC2 + 4, // $FDC3 + 4, // $FDC4 + 4, // $FDC5 + 4, // $FDC6 + 4, // $FDC7 + 29, // $FDC8 + 29, // $FDC9 + 29, // $FDCA + 29, // $FDCB + 29, // $FDCC + 29, // $FDCD + 29, // $FDCE + 29, // $FDCF + 29, // $FDD0 + 29, // $FDD1 + 29, // $FDD2 + 29, // $FDD3 + 29, // $FDD4 + 29, // $FDD5 + 29, // $FDD6 + 29, // $FDD7 + 29, // $FDD8 + 29, // $FDD9 + 29, // $FDDA + 29, // $FDDB + 29, // $FDDC + 29, // $FDDD + 29, // $FDDE + 29, // $FDDF + 29, // $FDE0 + 29, // $FDE1 + 29, // $FDE2 + 29, // $FDE3 + 29, // $FDE4 + 29, // $FDE5 + 29, // $FDE6 + 29, // $FDE7 + 29, // $FDE8 + 29, // $FDE9 + 29, // $FDEA + 29, // $FDEB + 29, // $FDEC + 29, // $FDED + 29, // $FDEE + 29, // $FDEF + 4, // $FDF0 + 4, // $FDF1 + 4, // $FDF2 + 4, // $FDF3 + 4, // $FDF4 + 4, // $FDF5 + 4, // $FDF6 + 4, // $FDF7 + 4, // $FDF8 + 4, // $FDF9 + 4, // $FDFA + 4, // $FDFB + 19, // $FDFC + 21, // $FDFD + 29, // $FDFE + 29, // $FDFF + 5, // $FE00 + 5, // $FE01 + 5, // $FE02 + 5, // $FE03 + 5, // $FE04 + 5, // $FE05 + 5, // $FE06 + 5, // $FE07 + 5, // $FE08 + 5, // $FE09 + 5, // $FE0A + 5, // $FE0B + 5, // $FE0C + 5, // $FE0D + 5, // $FE0E + 5, // $FE0F + 17, // $FE10 + 17, // $FE11 + 17, // $FE12 + 17, // $FE13 + 17, // $FE14 + 17, // $FE15 + 17, // $FE16 + 13, // $FE17 + 14, // $FE18 + 17, // $FE19 + 29, // $FE1A + 29, // $FE1B + 29, // $FE1C + 29, // $FE1D + 29, // $FE1E + 29, // $FE1F + 5, // $FE20 + 5, // $FE21 + 5, // $FE22 + 5, // $FE23 + 5, // $FE24 + 5, // $FE25 + 5, // $FE26 + 5, // $FE27 + 5, // $FE28 + 5, // $FE29 + 5, // $FE2A + 5, // $FE2B + 5, // $FE2C + 5, // $FE2D + 5, // $FE2E + 5, // $FE2F + 17, // $FE30 + 12, // $FE31 + 12, // $FE32 + 11, // $FE33 + 11, // $FE34 + 13, // $FE35 + 14, // $FE36 + 13, // $FE37 + 14, // $FE38 + 13, // $FE39 + 14, // $FE3A + 13, // $FE3B + 14, // $FE3C + 13, // $FE3D + 14, // $FE3E + 13, // $FE3F + 14, // $FE40 + 13, // $FE41 + 14, // $FE42 + 13, // $FE43 + 14, // $FE44 + 17, // $FE45 + 17, // $FE46 + 13, // $FE47 + 14, // $FE48 + 17, // $FE49 + 17, // $FE4A + 17, // $FE4B + 17, // $FE4C + 11, // $FE4D + 11, // $FE4E + 11, // $FE4F + 17, // $FE50 + 17, // $FE51 + 17, // $FE52 + 29, // $FE53 + 17, // $FE54 + 17, // $FE55 + 17, // $FE56 + 17, // $FE57 + 12, // $FE58 + 13, // $FE59 + 14, // $FE5A + 13, // $FE5B + 14, // $FE5C + 13, // $FE5D + 14, // $FE5E + 17, // $FE5F + 17, // $FE60 + 17, // $FE61 + 18, // $FE62 + 12, // $FE63 + 18, // $FE64 + 18, // $FE65 + 18, // $FE66 + 29, // $FE67 + 17, // $FE68 + 19, // $FE69 + 17, // $FE6A + 17, // $FE6B + 29, // $FE6C + 29, // $FE6D + 29, // $FE6E + 29, // $FE6F + 4, // $FE70 + 4, // $FE71 + 4, // $FE72 + 4, // $FE73 + 4, // $FE74 + 29, // $FE75 + 4, // $FE76 + 4, // $FE77 + 4, // $FE78 + 4, // $FE79 + 4, // $FE7A + 4, // $FE7B + 4, // $FE7C + 4, // $FE7D + 4, // $FE7E + 4, // $FE7F + 4, // $FE80 + 4, // $FE81 + 4, // $FE82 + 4, // $FE83 + 4, // $FE84 + 4, // $FE85 + 4, // $FE86 + 4, // $FE87 + 4, // $FE88 + 4, // $FE89 + 4, // $FE8A + 4, // $FE8B + 4, // $FE8C + 4, // $FE8D + 4, // $FE8E + 4, // $FE8F + 4, // $FE90 + 4, // $FE91 + 4, // $FE92 + 4, // $FE93 + 4, // $FE94 + 4, // $FE95 + 4, // $FE96 + 4, // $FE97 + 4, // $FE98 + 4, // $FE99 + 4, // $FE9A + 4, // $FE9B + 4, // $FE9C + 4, // $FE9D + 4, // $FE9E + 4, // $FE9F + 4, // $FEA0 + 4, // $FEA1 + 4, // $FEA2 + 4, // $FEA3 + 4, // $FEA4 + 4, // $FEA5 + 4, // $FEA6 + 4, // $FEA7 + 4, // $FEA8 + 4, // $FEA9 + 4, // $FEAA + 4, // $FEAB + 4, // $FEAC + 4, // $FEAD + 4, // $FEAE + 4, // $FEAF + 4, // $FEB0 + 4, // $FEB1 + 4, // $FEB2 + 4, // $FEB3 + 4, // $FEB4 + 4, // $FEB5 + 4, // $FEB6 + 4, // $FEB7 + 4, // $FEB8 + 4, // $FEB9 + 4, // $FEBA + 4, // $FEBB + 4, // $FEBC + 4, // $FEBD + 4, // $FEBE + 4, // $FEBF + 4, // $FEC0 + 4, // $FEC1 + 4, // $FEC2 + 4, // $FEC3 + 4, // $FEC4 + 4, // $FEC5 + 4, // $FEC6 + 4, // $FEC7 + 4, // $FEC8 + 4, // $FEC9 + 4, // $FECA + 4, // $FECB + 4, // $FECC + 4, // $FECD + 4, // $FECE + 4, // $FECF + 4, // $FED0 + 4, // $FED1 + 4, // $FED2 + 4, // $FED3 + 4, // $FED4 + 4, // $FED5 + 4, // $FED6 + 4, // $FED7 + 4, // $FED8 + 4, // $FED9 + 4, // $FEDA + 4, // $FEDB + 4, // $FEDC + 4, // $FEDD + 4, // $FEDE + 4, // $FEDF + 4, // $FEE0 + 4, // $FEE1 + 4, // $FEE2 + 4, // $FEE3 + 4, // $FEE4 + 4, // $FEE5 + 4, // $FEE6 + 4, // $FEE7 + 4, // $FEE8 + 4, // $FEE9 + 4, // $FEEA + 4, // $FEEB + 4, // $FEEC + 4, // $FEED + 4, // $FEEE + 4, // $FEEF + 4, // $FEF0 + 4, // $FEF1 + 4, // $FEF2 + 4, // $FEF3 + 4, // $FEF4 + 4, // $FEF5 + 4, // $FEF6 + 4, // $FEF7 + 4, // $FEF8 + 4, // $FEF9 + 4, // $FEFA + 4, // $FEFB + 4, // $FEFC + 29, // $FEFD + 29, // $FEFE + 26, // $FEFF + 29, // $FF00 + 17, // $FF01 + 17, // $FF02 + 17, // $FF03 + 19, // $FF04 + 17, // $FF05 + 17, // $FF06 + 17, // $FF07 + 13, // $FF08 + 14, // $FF09 + 17, // $FF0A + 18, // $FF0B + 17, // $FF0C + 12, // $FF0D + 17, // $FF0E + 17, // $FF0F + 8, // $FF10 + 8, // $FF11 + 8, // $FF12 + 8, // $FF13 + 8, // $FF14 + 8, // $FF15 + 8, // $FF16 + 8, // $FF17 + 8, // $FF18 + 8, // $FF19 + 17, // $FF1A + 17, // $FF1B + 18, // $FF1C + 18, // $FF1D + 18, // $FF1E + 17, // $FF1F + 17, // $FF20 + 0, // $FF21 + 0, // $FF22 + 0, // $FF23 + 0, // $FF24 + 0, // $FF25 + 0, // $FF26 + 0, // $FF27 + 0, // $FF28 + 0, // $FF29 + 0, // $FF2A + 0, // $FF2B + 0, // $FF2C + 0, // $FF2D + 0, // $FF2E + 0, // $FF2F + 0, // $FF30 + 0, // $FF31 + 0, // $FF32 + 0, // $FF33 + 0, // $FF34 + 0, // $FF35 + 0, // $FF36 + 0, // $FF37 + 0, // $FF38 + 0, // $FF39 + 0, // $FF3A + 13, // $FF3B + 17, // $FF3C + 14, // $FF3D + 20, // $FF3E + 11, // $FF3F + 20, // $FF40 + 1, // $FF41 + 1, // $FF42 + 1, // $FF43 + 1, // $FF44 + 1, // $FF45 + 1, // $FF46 + 1, // $FF47 + 1, // $FF48 + 1, // $FF49 + 1, // $FF4A + 1, // $FF4B + 1, // $FF4C + 1, // $FF4D + 1, // $FF4E + 1, // $FF4F + 1, // $FF50 + 1, // $FF51 + 1, // $FF52 + 1, // $FF53 + 1, // $FF54 + 1, // $FF55 + 1, // $FF56 + 1, // $FF57 + 1, // $FF58 + 1, // $FF59 + 1, // $FF5A + 13, // $FF5B + 18, // $FF5C + 14, // $FF5D + 18, // $FF5E + 13, // $FF5F + 14, // $FF60 + 17, // $FF61 + 13, // $FF62 + 14, // $FF63 + 17, // $FF64 + 17, // $FF65 + 4, // $FF66 + 4, // $FF67 + 4, // $FF68 + 4, // $FF69 + 4, // $FF6A + 4, // $FF6B + 4, // $FF6C + 4, // $FF6D + 4, // $FF6E + 4, // $FF6F + 3, // $FF70 + 4, // $FF71 + 4, // $FF72 + 4, // $FF73 + 4, // $FF74 + 4, // $FF75 + 4, // $FF76 + 4, // $FF77 + 4, // $FF78 + 4, // $FF79 + 4, // $FF7A + 4, // $FF7B + 4, // $FF7C + 4, // $FF7D + 4, // $FF7E + 4, // $FF7F + 4, // $FF80 + 4, // $FF81 + 4, // $FF82 + 4, // $FF83 + 4, // $FF84 + 4, // $FF85 + 4, // $FF86 + 4, // $FF87 + 4, // $FF88 + 4, // $FF89 + 4, // $FF8A + 4, // $FF8B + 4, // $FF8C + 4, // $FF8D + 4, // $FF8E + 4, // $FF8F + 4, // $FF90 + 4, // $FF91 + 4, // $FF92 + 4, // $FF93 + 4, // $FF94 + 4, // $FF95 + 4, // $FF96 + 4, // $FF97 + 4, // $FF98 + 4, // $FF99 + 4, // $FF9A + 4, // $FF9B + 4, // $FF9C + 4, // $FF9D + 3, // $FF9E + 3, // $FF9F + 4, // $FFA0 + 4, // $FFA1 + 4, // $FFA2 + 4, // $FFA3 + 4, // $FFA4 + 4, // $FFA5 + 4, // $FFA6 + 4, // $FFA7 + 4, // $FFA8 + 4, // $FFA9 + 4, // $FFAA + 4, // $FFAB + 4, // $FFAC + 4, // $FFAD + 4, // $FFAE + 4, // $FFAF + 4, // $FFB0 + 4, // $FFB1 + 4, // $FFB2 + 4, // $FFB3 + 4, // $FFB4 + 4, // $FFB5 + 4, // $FFB6 + 4, // $FFB7 + 4, // $FFB8 + 4, // $FFB9 + 4, // $FFBA + 4, // $FFBB + 4, // $FFBC + 4, // $FFBD + 4, // $FFBE + 29, // $FFBF + 29, // $FFC0 + 29, // $FFC1 + 4, // $FFC2 + 4, // $FFC3 + 4, // $FFC4 + 4, // $FFC5 + 4, // $FFC6 + 4, // $FFC7 + 29, // $FFC8 + 29, // $FFC9 + 4, // $FFCA + 4, // $FFCB + 4, // $FFCC + 4, // $FFCD + 4, // $FFCE + 4, // $FFCF + 29, // $FFD0 + 29, // $FFD1 + 4, // $FFD2 + 4, // $FFD3 + 4, // $FFD4 + 4, // $FFD5 + 4, // $FFD6 + 4, // $FFD7 + 29, // $FFD8 + 29, // $FFD9 + 4, // $FFDA + 4, // $FFDB + 4, // $FFDC + 29, // $FFDD + 29, // $FFDE + 29, // $FFDF + 19, // $FFE0 + 19, // $FFE1 + 18, // $FFE2 + 20, // $FFE3 + 21, // $FFE4 + 19, // $FFE5 + 19, // $FFE6 + 29, // $FFE7 + 21, // $FFE8 + 18, // $FFE9 + 18, // $FFEA + 18, // $FFEB + 18, // $FFEC + 21, // $FFED + 21, // $FFEE + 29, // $FFEF + 29, // $FFF0 + 29, // $FFF1 + 29, // $FFF2 + 29, // $FFF3 + 29, // $FFF4 + 29, // $FFF5 + 29, // $FFF6 + 29, // $FFF7 + 29, // $FFF8 + 26, // $FFF9 + 26, // $FFFA + 26, // $FFFB + 21, // $FFFC + 21, // $FFFD + 29, // $FFFE + 29 // $FFFF + ); + + CharUpperArray: packed array[0..$FFFF] of WideChar = ( + #$0000, // $0000 + #$0001, // $0001 + #$0002, // $0002 + #$0003, // $0003 + #$0004, // $0004 + #$0005, // $0005 + #$0006, // $0006 + #$0007, // $0007 + #$0008, // $0008 + #$0009, // $0009 + #$000A, // $000A + #$000B, // $000B + #$000C, // $000C + #$000D, // $000D + #$000E, // $000E + #$000F, // $000F + #$0010, // $0010 + #$0011, // $0011 + #$0012, // $0012 + #$0013, // $0013 + #$0014, // $0014 + #$0015, // $0015 + #$0016, // $0016 + #$0017, // $0017 + #$0018, // $0018 + #$0019, // $0019 + #$001A, // $001A + #$001B, // $001B + #$001C, // $001C + #$001D, // $001D + #$001E, // $001E + #$001F, // $001F + #$0020, // $0020 + #$0021, // $0021 + #$0022, // $0022 + #$0023, // $0023 + #$0024, // $0024 + #$0025, // $0025 + #$0026, // $0026 + #$0027, // $0027 + #$0028, // $0028 + #$0029, // $0029 + #$002A, // $002A + #$002B, // $002B + #$002C, // $002C + #$002D, // $002D + #$002E, // $002E + #$002F, // $002F + #$0030, // $0030 + #$0031, // $0031 + #$0032, // $0032 + #$0033, // $0033 + #$0034, // $0034 + #$0035, // $0035 + #$0036, // $0036 + #$0037, // $0037 + #$0038, // $0038 + #$0039, // $0039 + #$003A, // $003A + #$003B, // $003B + #$003C, // $003C + #$003D, // $003D + #$003E, // $003E + #$003F, // $003F + #$0040, // $0040 + #$0041, // $0041 + #$0042, // $0042 + #$0043, // $0043 + #$0044, // $0044 + #$0045, // $0045 + #$0046, // $0046 + #$0047, // $0047 + #$0048, // $0048 + #$0049, // $0049 + #$004A, // $004A + #$004B, // $004B + #$004C, // $004C + #$004D, // $004D + #$004E, // $004E + #$004F, // $004F + #$0050, // $0050 + #$0051, // $0051 + #$0052, // $0052 + #$0053, // $0053 + #$0054, // $0054 + #$0055, // $0055 + #$0056, // $0056 + #$0057, // $0057 + #$0058, // $0058 + #$0059, // $0059 + #$005A, // $005A + #$005B, // $005B + #$005C, // $005C + #$005D, // $005D + #$005E, // $005E + #$005F, // $005F + #$0060, // $0060 + #$0041, // $0061 + #$0042, // $0062 + #$0043, // $0063 + #$0044, // $0064 + #$0045, // $0065 + #$0046, // $0066 + #$0047, // $0067 + #$0048, // $0068 + #$0049, // $0069 + #$004A, // $006A + #$004B, // $006B + #$004C, // $006C + #$004D, // $006D + #$004E, // $006E + #$004F, // $006F + #$0050, // $0070 + #$0051, // $0071 + #$0052, // $0072 + #$0053, // $0073 + #$0054, // $0074 + #$0055, // $0075 + #$0056, // $0076 + #$0057, // $0077 + #$0058, // $0078 + #$0059, // $0079 + #$005A, // $007A + #$007B, // $007B + #$007C, // $007C + #$007D, // $007D + #$007E, // $007E + #$007F, // $007F + #$0080, // $0080 + #$0081, // $0081 + #$0082, // $0082 + #$0083, // $0083 + #$0084, // $0084 + #$0085, // $0085 + #$0086, // $0086 + #$0087, // $0087 + #$0088, // $0088 + #$0089, // $0089 + #$008A, // $008A + #$008B, // $008B + #$008C, // $008C + #$008D, // $008D + #$008E, // $008E + #$008F, // $008F + #$0090, // $0090 + #$0091, // $0091 + #$0092, // $0092 + #$0093, // $0093 + #$0094, // $0094 + #$0095, // $0095 + #$0096, // $0096 + #$0097, // $0097 + #$0098, // $0098 + #$0099, // $0099 + #$009A, // $009A + #$009B, // $009B + #$009C, // $009C + #$009D, // $009D + #$009E, // $009E + #$009F, // $009F + #$00A0, // $00A0 + #$00A1, // $00A1 + #$00A2, // $00A2 + #$00A3, // $00A3 + #$00A4, // $00A4 + #$00A5, // $00A5 + #$00A6, // $00A6 + #$00A7, // $00A7 + #$00A8, // $00A8 + #$00A9, // $00A9 + #$00AA, // $00AA + #$00AB, // $00AB + #$00AC, // $00AC + #$00AD, // $00AD + #$00AE, // $00AE + #$00AF, // $00AF + #$00B0, // $00B0 + #$00B1, // $00B1 + #$00B2, // $00B2 + #$00B3, // $00B3 + #$00B4, // $00B4 + #$039C, // $00B5 + #$00B6, // $00B6 + #$00B7, // $00B7 + #$00B8, // $00B8 + #$00B9, // $00B9 + #$00BA, // $00BA + #$00BB, // $00BB + #$00BC, // $00BC + #$00BD, // $00BD + #$00BE, // $00BE + #$00BF, // $00BF + #$00C0, // $00C0 + #$00C1, // $00C1 + #$00C2, // $00C2 + #$00C3, // $00C3 + #$00C4, // $00C4 + #$00C5, // $00C5 + #$00C6, // $00C6 + #$00C7, // $00C7 + #$00C8, // $00C8 + #$00C9, // $00C9 + #$00CA, // $00CA + #$00CB, // $00CB + #$00CC, // $00CC + #$00CD, // $00CD + #$00CE, // $00CE + #$00CF, // $00CF + #$00D0, // $00D0 + #$00D1, // $00D1 + #$00D2, // $00D2 + #$00D3, // $00D3 + #$00D4, // $00D4 + #$00D5, // $00D5 + #$00D6, // $00D6 + #$00D7, // $00D7 + #$00D8, // $00D8 + #$00D9, // $00D9 + #$00DA, // $00DA + #$00DB, // $00DB + #$00DC, // $00DC + #$00DD, // $00DD + #$00DE, // $00DE + #$00DF, // $00DF + #$00C0, // $00E0 + #$00C1, // $00E1 + #$00C2, // $00E2 + #$00C3, // $00E3 + #$00C4, // $00E4 + #$00C5, // $00E5 + #$00C6, // $00E6 + #$00C7, // $00E7 + #$00C8, // $00E8 + #$00C9, // $00E9 + #$00CA, // $00EA + #$00CB, // $00EB + #$00CC, // $00EC + #$00CD, // $00ED + #$00CE, // $00EE + #$00CF, // $00EF + #$00D0, // $00F0 + #$00D1, // $00F1 + #$00D2, // $00F2 + #$00D3, // $00F3 + #$00D4, // $00F4 + #$00D5, // $00F5 + #$00D6, // $00F6 + #$00F7, // $00F7 + #$00D8, // $00F8 + #$00D9, // $00F9 + #$00DA, // $00FA + #$00DB, // $00FB + #$00DC, // $00FC + #$00DD, // $00FD + #$00DE, // $00FE + #$0178, // $00FF + #$0100, // $0100 + #$0100, // $0101 + #$0102, // $0102 + #$0102, // $0103 + #$0104, // $0104 + #$0104, // $0105 + #$0106, // $0106 + #$0106, // $0107 + #$0108, // $0108 + #$0108, // $0109 + #$010A, // $010A + #$010A, // $010B + #$010C, // $010C + #$010C, // $010D + #$010E, // $010E + #$010E, // $010F + #$0110, // $0110 + #$0110, // $0111 + #$0112, // $0112 + #$0112, // $0113 + #$0114, // $0114 + #$0114, // $0115 + #$0116, // $0116 + #$0116, // $0117 + #$0118, // $0118 + #$0118, // $0119 + #$011A, // $011A + #$011A, // $011B + #$011C, // $011C + #$011C, // $011D + #$011E, // $011E + #$011E, // $011F + #$0120, // $0120 + #$0120, // $0121 + #$0122, // $0122 + #$0122, // $0123 + #$0124, // $0124 + #$0124, // $0125 + #$0126, // $0126 + #$0126, // $0127 + #$0128, // $0128 + #$0128, // $0129 + #$012A, // $012A + #$012A, // $012B + #$012C, // $012C + #$012C, // $012D + #$012E, // $012E + #$012E, // $012F + #$0130, // $0130 + #$0049, // $0131 + #$0132, // $0132 + #$0132, // $0133 + #$0134, // $0134 + #$0134, // $0135 + #$0136, // $0136 + #$0136, // $0137 + #$0138, // $0138 + #$0139, // $0139 + #$0139, // $013A + #$013B, // $013B + #$013B, // $013C + #$013D, // $013D + #$013D, // $013E + #$013F, // $013F + #$013F, // $0140 + #$0141, // $0141 + #$0141, // $0142 + #$0143, // $0143 + #$0143, // $0144 + #$0145, // $0145 + #$0145, // $0146 + #$0147, // $0147 + #$0147, // $0148 + #$0149, // $0149 + #$014A, // $014A + #$014A, // $014B + #$014C, // $014C + #$014C, // $014D + #$014E, // $014E + #$014E, // $014F + #$0150, // $0150 + #$0150, // $0151 + #$0152, // $0152 + #$0152, // $0153 + #$0154, // $0154 + #$0154, // $0155 + #$0156, // $0156 + #$0156, // $0157 + #$0158, // $0158 + #$0158, // $0159 + #$015A, // $015A + #$015A, // $015B + #$015C, // $015C + #$015C, // $015D + #$015E, // $015E + #$015E, // $015F + #$0160, // $0160 + #$0160, // $0161 + #$0162, // $0162 + #$0162, // $0163 + #$0164, // $0164 + #$0164, // $0165 + #$0166, // $0166 + #$0166, // $0167 + #$0168, // $0168 + #$0168, // $0169 + #$016A, // $016A + #$016A, // $016B + #$016C, // $016C + #$016C, // $016D + #$016E, // $016E + #$016E, // $016F + #$0170, // $0170 + #$0170, // $0171 + #$0172, // $0172 + #$0172, // $0173 + #$0174, // $0174 + #$0174, // $0175 + #$0176, // $0176 + #$0176, // $0177 + #$0178, // $0178 + #$0179, // $0179 + #$0179, // $017A + #$017B, // $017B + #$017B, // $017C + #$017D, // $017D + #$017D, // $017E + #$0053, // $017F + #$0243, // $0180 + #$0181, // $0181 + #$0182, // $0182 + #$0182, // $0183 + #$0184, // $0184 + #$0184, // $0185 + #$0186, // $0186 + #$0187, // $0187 + #$0187, // $0188 + #$0189, // $0189 + #$018A, // $018A + #$018B, // $018B + #$018B, // $018C + #$018D, // $018D + #$018E, // $018E + #$018F, // $018F + #$0190, // $0190 + #$0191, // $0191 + #$0191, // $0192 + #$0193, // $0193 + #$0194, // $0194 + #$01F6, // $0195 + #$0196, // $0196 + #$0197, // $0197 + #$0198, // $0198 + #$0198, // $0199 + #$023D, // $019A + #$019B, // $019B + #$019C, // $019C + #$019D, // $019D + #$0220, // $019E + #$019F, // $019F + #$01A0, // $01A0 + #$01A0, // $01A1 + #$01A2, // $01A2 + #$01A2, // $01A3 + #$01A4, // $01A4 + #$01A4, // $01A5 + #$01A6, // $01A6 + #$01A7, // $01A7 + #$01A7, // $01A8 + #$01A9, // $01A9 + #$01AA, // $01AA + #$01AB, // $01AB + #$01AC, // $01AC + #$01AC, // $01AD + #$01AE, // $01AE + #$01AF, // $01AF + #$01AF, // $01B0 + #$01B1, // $01B1 + #$01B2, // $01B2 + #$01B3, // $01B3 + #$01B3, // $01B4 + #$01B5, // $01B5 + #$01B5, // $01B6 + #$01B7, // $01B7 + #$01B8, // $01B8 + #$01B8, // $01B9 + #$01BA, // $01BA + #$01BB, // $01BB + #$01BC, // $01BC + #$01BC, // $01BD + #$01BE, // $01BE + #$01F7, // $01BF + #$01C0, // $01C0 + #$01C1, // $01C1 + #$01C2, // $01C2 + #$01C3, // $01C3 + #$01C4, // $01C4 + #$01C4, // $01C5 + #$01C4, // $01C6 + #$01C7, // $01C7 + #$01C7, // $01C8 + #$01C7, // $01C9 + #$01CA, // $01CA + #$01CA, // $01CB + #$01CA, // $01CC + #$01CD, // $01CD + #$01CD, // $01CE + #$01CF, // $01CF + #$01CF, // $01D0 + #$01D1, // $01D1 + #$01D1, // $01D2 + #$01D3, // $01D3 + #$01D3, // $01D4 + #$01D5, // $01D5 + #$01D5, // $01D6 + #$01D7, // $01D7 + #$01D7, // $01D8 + #$01D9, // $01D9 + #$01D9, // $01DA + #$01DB, // $01DB + #$01DB, // $01DC + #$018E, // $01DD + #$01DE, // $01DE + #$01DE, // $01DF + #$01E0, // $01E0 + #$01E0, // $01E1 + #$01E2, // $01E2 + #$01E2, // $01E3 + #$01E4, // $01E4 + #$01E4, // $01E5 + #$01E6, // $01E6 + #$01E6, // $01E7 + #$01E8, // $01E8 + #$01E8, // $01E9 + #$01EA, // $01EA + #$01EA, // $01EB + #$01EC, // $01EC + #$01EC, // $01ED + #$01EE, // $01EE + #$01EE, // $01EF + #$01F0, // $01F0 + #$01F1, // $01F1 + #$01F1, // $01F2 + #$01F1, // $01F3 + #$01F4, // $01F4 + #$01F4, // $01F5 + #$01F6, // $01F6 + #$01F7, // $01F7 + #$01F8, // $01F8 + #$01F8, // $01F9 + #$01FA, // $01FA + #$01FA, // $01FB + #$01FC, // $01FC + #$01FC, // $01FD + #$01FE, // $01FE + #$01FE, // $01FF + #$0200, // $0200 + #$0200, // $0201 + #$0202, // $0202 + #$0202, // $0203 + #$0204, // $0204 + #$0204, // $0205 + #$0206, // $0206 + #$0206, // $0207 + #$0208, // $0208 + #$0208, // $0209 + #$020A, // $020A + #$020A, // $020B + #$020C, // $020C + #$020C, // $020D + #$020E, // $020E + #$020E, // $020F + #$0210, // $0210 + #$0210, // $0211 + #$0212, // $0212 + #$0212, // $0213 + #$0214, // $0214 + #$0214, // $0215 + #$0216, // $0216 + #$0216, // $0217 + #$0218, // $0218 + #$0218, // $0219 + #$021A, // $021A + #$021A, // $021B + #$021C, // $021C + #$021C, // $021D + #$021E, // $021E + #$021E, // $021F + #$0220, // $0220 + #$0221, // $0221 + #$0222, // $0222 + #$0222, // $0223 + #$0224, // $0224 + #$0224, // $0225 + #$0226, // $0226 + #$0226, // $0227 + #$0228, // $0228 + #$0228, // $0229 + #$022A, // $022A + #$022A, // $022B + #$022C, // $022C + #$022C, // $022D + #$022E, // $022E + #$022E, // $022F + #$0230, // $0230 + #$0230, // $0231 + #$0232, // $0232 + #$0232, // $0233 + #$0234, // $0234 + #$0235, // $0235 + #$0236, // $0236 + #$0237, // $0237 + #$0238, // $0238 + #$0239, // $0239 + #$023A, // $023A + #$023B, // $023B + #$023B, // $023C + #$023D, // $023D + #$023E, // $023E + #$2C7E, // $023F + #$2C7F, // $0240 + #$0241, // $0241 + #$0241, // $0242 + #$0243, // $0243 + #$0244, // $0244 + #$0245, // $0245 + #$0246, // $0246 + #$0246, // $0247 + #$0248, // $0248 + #$0248, // $0249 + #$024A, // $024A + #$024A, // $024B + #$024C, // $024C + #$024C, // $024D + #$024E, // $024E + #$024E, // $024F + #$2C6F, // $0250 + #$2C6D, // $0251 + #$2C70, // $0252 + #$0181, // $0253 + #$0186, // $0254 + #$0255, // $0255 + #$0189, // $0256 + #$018A, // $0257 + #$0258, // $0258 + #$018F, // $0259 + #$025A, // $025A + #$0190, // $025B + #$A7AB, // $025C + #$025D, // $025D + #$025E, // $025E + #$025F, // $025F + #$0193, // $0260 + #$A7AC, // $0261 + #$0262, // $0262 + #$0194, // $0263 + #$0264, // $0264 + #$A78D, // $0265 + #$A7AA, // $0266 + #$0267, // $0267 + #$0197, // $0268 + #$0196, // $0269 + #$A7AE, // $026A + #$2C62, // $026B + #$A7AD, // $026C + #$026D, // $026D + #$026E, // $026E + #$019C, // $026F + #$0270, // $0270 + #$2C6E, // $0271 + #$019D, // $0272 + #$0273, // $0273 + #$0274, // $0274 + #$019F, // $0275 + #$0276, // $0276 + #$0277, // $0277 + #$0278, // $0278 + #$0279, // $0279 + #$027A, // $027A + #$027B, // $027B + #$027C, // $027C + #$2C64, // $027D + #$027E, // $027E + #$027F, // $027F + #$01A6, // $0280 + #$0281, // $0281 + #$0282, // $0282 + #$01A9, // $0283 + #$0284, // $0284 + #$0285, // $0285 + #$0286, // $0286 + #$A7B1, // $0287 + #$01AE, // $0288 + #$0244, // $0289 + #$01B1, // $028A + #$01B2, // $028B + #$0245, // $028C + #$028D, // $028D + #$028E, // $028E + #$028F, // $028F + #$0290, // $0290 + #$0291, // $0291 + #$01B7, // $0292 + #$0293, // $0293 + #$0294, // $0294 + #$0295, // $0295 + #$0296, // $0296 + #$0297, // $0297 + #$0298, // $0298 + #$0299, // $0299 + #$029A, // $029A + #$029B, // $029B + #$029C, // $029C + #$A7B2, // $029D + #$A7B0, // $029E + #$029F, // $029F + #$02A0, // $02A0 + #$02A1, // $02A1 + #$02A2, // $02A2 + #$02A3, // $02A3 + #$02A4, // $02A4 + #$02A5, // $02A5 + #$02A6, // $02A6 + #$02A7, // $02A7 + #$02A8, // $02A8 + #$02A9, // $02A9 + #$02AA, // $02AA + #$02AB, // $02AB + #$02AC, // $02AC + #$02AD, // $02AD + #$02AE, // $02AE + #$02AF, // $02AF + #$02B0, // $02B0 + #$02B1, // $02B1 + #$02B2, // $02B2 + #$02B3, // $02B3 + #$02B4, // $02B4 + #$02B5, // $02B5 + #$02B6, // $02B6 + #$02B7, // $02B7 + #$02B8, // $02B8 + #$02B9, // $02B9 + #$02BA, // $02BA + #$02BB, // $02BB + #$02BC, // $02BC + #$02BD, // $02BD + #$02BE, // $02BE + #$02BF, // $02BF + #$02C0, // $02C0 + #$02C1, // $02C1 + #$02C2, // $02C2 + #$02C3, // $02C3 + #$02C4, // $02C4 + #$02C5, // $02C5 + #$02C6, // $02C6 + #$02C7, // $02C7 + #$02C8, // $02C8 + #$02C9, // $02C9 + #$02CA, // $02CA + #$02CB, // $02CB + #$02CC, // $02CC + #$02CD, // $02CD + #$02CE, // $02CE + #$02CF, // $02CF + #$02D0, // $02D0 + #$02D1, // $02D1 + #$02D2, // $02D2 + #$02D3, // $02D3 + #$02D4, // $02D4 + #$02D5, // $02D5 + #$02D6, // $02D6 + #$02D7, // $02D7 + #$02D8, // $02D8 + #$02D9, // $02D9 + #$02DA, // $02DA + #$02DB, // $02DB + #$02DC, // $02DC + #$02DD, // $02DD + #$02DE, // $02DE + #$02DF, // $02DF + #$02E0, // $02E0 + #$02E1, // $02E1 + #$02E2, // $02E2 + #$02E3, // $02E3 + #$02E4, // $02E4 + #$02E5, // $02E5 + #$02E6, // $02E6 + #$02E7, // $02E7 + #$02E8, // $02E8 + #$02E9, // $02E9 + #$02EA, // $02EA + #$02EB, // $02EB + #$02EC, // $02EC + #$02ED, // $02ED + #$02EE, // $02EE + #$02EF, // $02EF + #$02F0, // $02F0 + #$02F1, // $02F1 + #$02F2, // $02F2 + #$02F3, // $02F3 + #$02F4, // $02F4 + #$02F5, // $02F5 + #$02F6, // $02F6 + #$02F7, // $02F7 + #$02F8, // $02F8 + #$02F9, // $02F9 + #$02FA, // $02FA + #$02FB, // $02FB + #$02FC, // $02FC + #$02FD, // $02FD + #$02FE, // $02FE + #$02FF, // $02FF + #$0300, // $0300 + #$0301, // $0301 + #$0302, // $0302 + #$0303, // $0303 + #$0304, // $0304 + #$0305, // $0305 + #$0306, // $0306 + #$0307, // $0307 + #$0308, // $0308 + #$0309, // $0309 + #$030A, // $030A + #$030B, // $030B + #$030C, // $030C + #$030D, // $030D + #$030E, // $030E + #$030F, // $030F + #$0310, // $0310 + #$0311, // $0311 + #$0312, // $0312 + #$0313, // $0313 + #$0314, // $0314 + #$0315, // $0315 + #$0316, // $0316 + #$0317, // $0317 + #$0318, // $0318 + #$0319, // $0319 + #$031A, // $031A + #$031B, // $031B + #$031C, // $031C + #$031D, // $031D + #$031E, // $031E + #$031F, // $031F + #$0320, // $0320 + #$0321, // $0321 + #$0322, // $0322 + #$0323, // $0323 + #$0324, // $0324 + #$0325, // $0325 + #$0326, // $0326 + #$0327, // $0327 + #$0328, // $0328 + #$0329, // $0329 + #$032A, // $032A + #$032B, // $032B + #$032C, // $032C + #$032D, // $032D + #$032E, // $032E + #$032F, // $032F + #$0330, // $0330 + #$0331, // $0331 + #$0332, // $0332 + #$0333, // $0333 + #$0334, // $0334 + #$0335, // $0335 + #$0336, // $0336 + #$0337, // $0337 + #$0338, // $0338 + #$0339, // $0339 + #$033A, // $033A + #$033B, // $033B + #$033C, // $033C + #$033D, // $033D + #$033E, // $033E + #$033F, // $033F + #$0340, // $0340 + #$0341, // $0341 + #$0342, // $0342 + #$0343, // $0343 + #$0344, // $0344 + #$0399, // $0345 + #$0346, // $0346 + #$0347, // $0347 + #$0348, // $0348 + #$0349, // $0349 + #$034A, // $034A + #$034B, // $034B + #$034C, // $034C + #$034D, // $034D + #$034E, // $034E + #$034F, // $034F + #$0350, // $0350 + #$0351, // $0351 + #$0352, // $0352 + #$0353, // $0353 + #$0354, // $0354 + #$0355, // $0355 + #$0356, // $0356 + #$0357, // $0357 + #$0358, // $0358 + #$0359, // $0359 + #$035A, // $035A + #$035B, // $035B + #$035C, // $035C + #$035D, // $035D + #$035E, // $035E + #$035F, // $035F + #$0360, // $0360 + #$0361, // $0361 + #$0362, // $0362 + #$0363, // $0363 + #$0364, // $0364 + #$0365, // $0365 + #$0366, // $0366 + #$0367, // $0367 + #$0368, // $0368 + #$0369, // $0369 + #$036A, // $036A + #$036B, // $036B + #$036C, // $036C + #$036D, // $036D + #$036E, // $036E + #$036F, // $036F + #$0370, // $0370 + #$0370, // $0371 + #$0372, // $0372 + #$0372, // $0373 + #$0374, // $0374 + #$0375, // $0375 + #$0376, // $0376 + #$0376, // $0377 + #$0378, // $0378 + #$0379, // $0379 + #$037A, // $037A + #$03FD, // $037B + #$03FE, // $037C + #$03FF, // $037D + #$037E, // $037E + #$037F, // $037F + #$0380, // $0380 + #$0381, // $0381 + #$0382, // $0382 + #$0383, // $0383 + #$0384, // $0384 + #$0385, // $0385 + #$0386, // $0386 + #$0387, // $0387 + #$0388, // $0388 + #$0389, // $0389 + #$038A, // $038A + #$038B, // $038B + #$038C, // $038C + #$038D, // $038D + #$038E, // $038E + #$038F, // $038F + #$0390, // $0390 + #$0391, // $0391 + #$0392, // $0392 + #$0393, // $0393 + #$0394, // $0394 + #$0395, // $0395 + #$0396, // $0396 + #$0397, // $0397 + #$0398, // $0398 + #$0399, // $0399 + #$039A, // $039A + #$039B, // $039B + #$039C, // $039C + #$039D, // $039D + #$039E, // $039E + #$039F, // $039F + #$03A0, // $03A0 + #$03A1, // $03A1 + #$03A2, // $03A2 + #$03A3, // $03A3 + #$03A4, // $03A4 + #$03A5, // $03A5 + #$03A6, // $03A6 + #$03A7, // $03A7 + #$03A8, // $03A8 + #$03A9, // $03A9 + #$03AA, // $03AA + #$03AB, // $03AB + #$0386, // $03AC + #$0388, // $03AD + #$0389, // $03AE + #$038A, // $03AF + #$03B0, // $03B0 + #$0391, // $03B1 + #$0392, // $03B2 + #$0393, // $03B3 + #$0394, // $03B4 + #$0395, // $03B5 + #$0396, // $03B6 + #$0397, // $03B7 + #$0398, // $03B8 + #$0399, // $03B9 + #$039A, // $03BA + #$039B, // $03BB + #$039C, // $03BC + #$039D, // $03BD + #$039E, // $03BE + #$039F, // $03BF + #$03A0, // $03C0 + #$03A1, // $03C1 + #$03A3, // $03C2 + #$03A3, // $03C3 + #$03A4, // $03C4 + #$03A5, // $03C5 + #$03A6, // $03C6 + #$03A7, // $03C7 + #$03A8, // $03C8 + #$03A9, // $03C9 + #$03AA, // $03CA + #$03AB, // $03CB + #$038C, // $03CC + #$038E, // $03CD + #$038F, // $03CE + #$03CF, // $03CF + #$0392, // $03D0 + #$0398, // $03D1 + #$03D2, // $03D2 + #$03D3, // $03D3 + #$03D4, // $03D4 + #$03A6, // $03D5 + #$03A0, // $03D6 + #$03CF, // $03D7 + #$03D8, // $03D8 + #$03D8, // $03D9 + #$03DA, // $03DA + #$03DA, // $03DB + #$03DC, // $03DC + #$03DC, // $03DD + #$03DE, // $03DE + #$03DE, // $03DF + #$03E0, // $03E0 + #$03E0, // $03E1 + #$03E2, // $03E2 + #$03E2, // $03E3 + #$03E4, // $03E4 + #$03E4, // $03E5 + #$03E6, // $03E6 + #$03E6, // $03E7 + #$03E8, // $03E8 + #$03E8, // $03E9 + #$03EA, // $03EA + #$03EA, // $03EB + #$03EC, // $03EC + #$03EC, // $03ED + #$03EE, // $03EE + #$03EE, // $03EF + #$039A, // $03F0 + #$03A1, // $03F1 + #$03F9, // $03F2 + #$037F, // $03F3 + #$03F4, // $03F4 + #$0395, // $03F5 + #$03F6, // $03F6 + #$03F7, // $03F7 + #$03F7, // $03F8 + #$03F9, // $03F9 + #$03FA, // $03FA + #$03FA, // $03FB + #$03FC, // $03FC + #$03FD, // $03FD + #$03FE, // $03FE + #$03FF, // $03FF + #$0400, // $0400 + #$0401, // $0401 + #$0402, // $0402 + #$0403, // $0403 + #$0404, // $0404 + #$0405, // $0405 + #$0406, // $0406 + #$0407, // $0407 + #$0408, // $0408 + #$0409, // $0409 + #$040A, // $040A + #$040B, // $040B + #$040C, // $040C + #$040D, // $040D + #$040E, // $040E + #$040F, // $040F + #$0410, // $0410 + #$0411, // $0411 + #$0412, // $0412 + #$0413, // $0413 + #$0414, // $0414 + #$0415, // $0415 + #$0416, // $0416 + #$0417, // $0417 + #$0418, // $0418 + #$0419, // $0419 + #$041A, // $041A + #$041B, // $041B + #$041C, // $041C + #$041D, // $041D + #$041E, // $041E + #$041F, // $041F + #$0420, // $0420 + #$0421, // $0421 + #$0422, // $0422 + #$0423, // $0423 + #$0424, // $0424 + #$0425, // $0425 + #$0426, // $0426 + #$0427, // $0427 + #$0428, // $0428 + #$0429, // $0429 + #$042A, // $042A + #$042B, // $042B + #$042C, // $042C + #$042D, // $042D + #$042E, // $042E + #$042F, // $042F + #$0410, // $0430 + #$0411, // $0431 + #$0412, // $0432 + #$0413, // $0433 + #$0414, // $0434 + #$0415, // $0435 + #$0416, // $0436 + #$0417, // $0437 + #$0418, // $0438 + #$0419, // $0439 + #$041A, // $043A + #$041B, // $043B + #$041C, // $043C + #$041D, // $043D + #$041E, // $043E + #$041F, // $043F + #$0420, // $0440 + #$0421, // $0441 + #$0422, // $0442 + #$0423, // $0443 + #$0424, // $0444 + #$0425, // $0445 + #$0426, // $0446 + #$0427, // $0447 + #$0428, // $0448 + #$0429, // $0449 + #$042A, // $044A + #$042B, // $044B + #$042C, // $044C + #$042D, // $044D + #$042E, // $044E + #$042F, // $044F + #$0400, // $0450 + #$0401, // $0451 + #$0402, // $0452 + #$0403, // $0453 + #$0404, // $0454 + #$0405, // $0455 + #$0406, // $0456 + #$0407, // $0457 + #$0408, // $0458 + #$0409, // $0459 + #$040A, // $045A + #$040B, // $045B + #$040C, // $045C + #$040D, // $045D + #$040E, // $045E + #$040F, // $045F + #$0460, // $0460 + #$0460, // $0461 + #$0462, // $0462 + #$0462, // $0463 + #$0464, // $0464 + #$0464, // $0465 + #$0466, // $0466 + #$0466, // $0467 + #$0468, // $0468 + #$0468, // $0469 + #$046A, // $046A + #$046A, // $046B + #$046C, // $046C + #$046C, // $046D + #$046E, // $046E + #$046E, // $046F + #$0470, // $0470 + #$0470, // $0471 + #$0472, // $0472 + #$0472, // $0473 + #$0474, // $0474 + #$0474, // $0475 + #$0476, // $0476 + #$0476, // $0477 + #$0478, // $0478 + #$0478, // $0479 + #$047A, // $047A + #$047A, // $047B + #$047C, // $047C + #$047C, // $047D + #$047E, // $047E + #$047E, // $047F + #$0480, // $0480 + #$0480, // $0481 + #$0482, // $0482 + #$0483, // $0483 + #$0484, // $0484 + #$0485, // $0485 + #$0486, // $0486 + #$0487, // $0487 + #$0488, // $0488 + #$0489, // $0489 + #$048A, // $048A + #$048A, // $048B + #$048C, // $048C + #$048C, // $048D + #$048E, // $048E + #$048E, // $048F + #$0490, // $0490 + #$0490, // $0491 + #$0492, // $0492 + #$0492, // $0493 + #$0494, // $0494 + #$0494, // $0495 + #$0496, // $0496 + #$0496, // $0497 + #$0498, // $0498 + #$0498, // $0499 + #$049A, // $049A + #$049A, // $049B + #$049C, // $049C + #$049C, // $049D + #$049E, // $049E + #$049E, // $049F + #$04A0, // $04A0 + #$04A0, // $04A1 + #$04A2, // $04A2 + #$04A2, // $04A3 + #$04A4, // $04A4 + #$04A4, // $04A5 + #$04A6, // $04A6 + #$04A6, // $04A7 + #$04A8, // $04A8 + #$04A8, // $04A9 + #$04AA, // $04AA + #$04AA, // $04AB + #$04AC, // $04AC + #$04AC, // $04AD + #$04AE, // $04AE + #$04AE, // $04AF + #$04B0, // $04B0 + #$04B0, // $04B1 + #$04B2, // $04B2 + #$04B2, // $04B3 + #$04B4, // $04B4 + #$04B4, // $04B5 + #$04B6, // $04B6 + #$04B6, // $04B7 + #$04B8, // $04B8 + #$04B8, // $04B9 + #$04BA, // $04BA + #$04BA, // $04BB + #$04BC, // $04BC + #$04BC, // $04BD + #$04BE, // $04BE + #$04BE, // $04BF + #$04C0, // $04C0 + #$04C1, // $04C1 + #$04C1, // $04C2 + #$04C3, // $04C3 + #$04C3, // $04C4 + #$04C5, // $04C5 + #$04C5, // $04C6 + #$04C7, // $04C7 + #$04C7, // $04C8 + #$04C9, // $04C9 + #$04C9, // $04CA + #$04CB, // $04CB + #$04CB, // $04CC + #$04CD, // $04CD + #$04CD, // $04CE + #$04C0, // $04CF + #$04D0, // $04D0 + #$04D0, // $04D1 + #$04D2, // $04D2 + #$04D2, // $04D3 + #$04D4, // $04D4 + #$04D4, // $04D5 + #$04D6, // $04D6 + #$04D6, // $04D7 + #$04D8, // $04D8 + #$04D8, // $04D9 + #$04DA, // $04DA + #$04DA, // $04DB + #$04DC, // $04DC + #$04DC, // $04DD + #$04DE, // $04DE + #$04DE, // $04DF + #$04E0, // $04E0 + #$04E0, // $04E1 + #$04E2, // $04E2 + #$04E2, // $04E3 + #$04E4, // $04E4 + #$04E4, // $04E5 + #$04E6, // $04E6 + #$04E6, // $04E7 + #$04E8, // $04E8 + #$04E8, // $04E9 + #$04EA, // $04EA + #$04EA, // $04EB + #$04EC, // $04EC + #$04EC, // $04ED + #$04EE, // $04EE + #$04EE, // $04EF + #$04F0, // $04F0 + #$04F0, // $04F1 + #$04F2, // $04F2 + #$04F2, // $04F3 + #$04F4, // $04F4 + #$04F4, // $04F5 + #$04F6, // $04F6 + #$04F6, // $04F7 + #$04F8, // $04F8 + #$04F8, // $04F9 + #$04FA, // $04FA + #$04FA, // $04FB + #$04FC, // $04FC + #$04FC, // $04FD + #$04FE, // $04FE + #$04FE, // $04FF + #$0500, // $0500 + #$0500, // $0501 + #$0502, // $0502 + #$0502, // $0503 + #$0504, // $0504 + #$0504, // $0505 + #$0506, // $0506 + #$0506, // $0507 + #$0508, // $0508 + #$0508, // $0509 + #$050A, // $050A + #$050A, // $050B + #$050C, // $050C + #$050C, // $050D + #$050E, // $050E + #$050E, // $050F + #$0510, // $0510 + #$0510, // $0511 + #$0512, // $0512 + #$0512, // $0513 + #$0514, // $0514 + #$0514, // $0515 + #$0516, // $0516 + #$0516, // $0517 + #$0518, // $0518 + #$0518, // $0519 + #$051A, // $051A + #$051A, // $051B + #$051C, // $051C + #$051C, // $051D + #$051E, // $051E + #$051E, // $051F + #$0520, // $0520 + #$0520, // $0521 + #$0522, // $0522 + #$0522, // $0523 + #$0524, // $0524 + #$0524, // $0525 + #$0526, // $0526 + #$0526, // $0527 + #$0528, // $0528 + #$0528, // $0529 + #$052A, // $052A + #$052A, // $052B + #$052C, // $052C + #$052C, // $052D + #$052E, // $052E + #$052E, // $052F + #$0530, // $0530 + #$0531, // $0531 + #$0532, // $0532 + #$0533, // $0533 + #$0534, // $0534 + #$0535, // $0535 + #$0536, // $0536 + #$0537, // $0537 + #$0538, // $0538 + #$0539, // $0539 + #$053A, // $053A + #$053B, // $053B + #$053C, // $053C + #$053D, // $053D + #$053E, // $053E + #$053F, // $053F + #$0540, // $0540 + #$0541, // $0541 + #$0542, // $0542 + #$0543, // $0543 + #$0544, // $0544 + #$0545, // $0545 + #$0546, // $0546 + #$0547, // $0547 + #$0548, // $0548 + #$0549, // $0549 + #$054A, // $054A + #$054B, // $054B + #$054C, // $054C + #$054D, // $054D + #$054E, // $054E + #$054F, // $054F + #$0550, // $0550 + #$0551, // $0551 + #$0552, // $0552 + #$0553, // $0553 + #$0554, // $0554 + #$0555, // $0555 + #$0556, // $0556 + #$0557, // $0557 + #$0558, // $0558 + #$0559, // $0559 + #$055A, // $055A + #$055B, // $055B + #$055C, // $055C + #$055D, // $055D + #$055E, // $055E + #$055F, // $055F + #$0560, // $0560 + #$0531, // $0561 + #$0532, // $0562 + #$0533, // $0563 + #$0534, // $0564 + #$0535, // $0565 + #$0536, // $0566 + #$0537, // $0567 + #$0538, // $0568 + #$0539, // $0569 + #$053A, // $056A + #$053B, // $056B + #$053C, // $056C + #$053D, // $056D + #$053E, // $056E + #$053F, // $056F + #$0540, // $0570 + #$0541, // $0571 + #$0542, // $0572 + #$0543, // $0573 + #$0544, // $0574 + #$0545, // $0575 + #$0546, // $0576 + #$0547, // $0577 + #$0548, // $0578 + #$0549, // $0579 + #$054A, // $057A + #$054B, // $057B + #$054C, // $057C + #$054D, // $057D + #$054E, // $057E + #$054F, // $057F + #$0550, // $0580 + #$0551, // $0581 + #$0552, // $0582 + #$0553, // $0583 + #$0554, // $0584 + #$0555, // $0585 + #$0556, // $0586 + #$0587, // $0587 + #$0588, // $0588 + #$0589, // $0589 + #$058A, // $058A + #$058B, // $058B + #$058C, // $058C + #$058D, // $058D + #$058E, // $058E + #$058F, // $058F + #$0590, // $0590 + #$0591, // $0591 + #$0592, // $0592 + #$0593, // $0593 + #$0594, // $0594 + #$0595, // $0595 + #$0596, // $0596 + #$0597, // $0597 + #$0598, // $0598 + #$0599, // $0599 + #$059A, // $059A + #$059B, // $059B + #$059C, // $059C + #$059D, // $059D + #$059E, // $059E + #$059F, // $059F + #$05A0, // $05A0 + #$05A1, // $05A1 + #$05A2, // $05A2 + #$05A3, // $05A3 + #$05A4, // $05A4 + #$05A5, // $05A5 + #$05A6, // $05A6 + #$05A7, // $05A7 + #$05A8, // $05A8 + #$05A9, // $05A9 + #$05AA, // $05AA + #$05AB, // $05AB + #$05AC, // $05AC + #$05AD, // $05AD + #$05AE, // $05AE + #$05AF, // $05AF + #$05B0, // $05B0 + #$05B1, // $05B1 + #$05B2, // $05B2 + #$05B3, // $05B3 + #$05B4, // $05B4 + #$05B5, // $05B5 + #$05B6, // $05B6 + #$05B7, // $05B7 + #$05B8, // $05B8 + #$05B9, // $05B9 + #$05BA, // $05BA + #$05BB, // $05BB + #$05BC, // $05BC + #$05BD, // $05BD + #$05BE, // $05BE + #$05BF, // $05BF + #$05C0, // $05C0 + #$05C1, // $05C1 + #$05C2, // $05C2 + #$05C3, // $05C3 + #$05C4, // $05C4 + #$05C5, // $05C5 + #$05C6, // $05C6 + #$05C7, // $05C7 + #$05C8, // $05C8 + #$05C9, // $05C9 + #$05CA, // $05CA + #$05CB, // $05CB + #$05CC, // $05CC + #$05CD, // $05CD + #$05CE, // $05CE + #$05CF, // $05CF + #$05D0, // $05D0 + #$05D1, // $05D1 + #$05D2, // $05D2 + #$05D3, // $05D3 + #$05D4, // $05D4 + #$05D5, // $05D5 + #$05D6, // $05D6 + #$05D7, // $05D7 + #$05D8, // $05D8 + #$05D9, // $05D9 + #$05DA, // $05DA + #$05DB, // $05DB + #$05DC, // $05DC + #$05DD, // $05DD + #$05DE, // $05DE + #$05DF, // $05DF + #$05E0, // $05E0 + #$05E1, // $05E1 + #$05E2, // $05E2 + #$05E3, // $05E3 + #$05E4, // $05E4 + #$05E5, // $05E5 + #$05E6, // $05E6 + #$05E7, // $05E7 + #$05E8, // $05E8 + #$05E9, // $05E9 + #$05EA, // $05EA + #$05EB, // $05EB + #$05EC, // $05EC + #$05ED, // $05ED + #$05EE, // $05EE + #$05EF, // $05EF + #$05F0, // $05F0 + #$05F1, // $05F1 + #$05F2, // $05F2 + #$05F3, // $05F3 + #$05F4, // $05F4 + #$05F5, // $05F5 + #$05F6, // $05F6 + #$05F7, // $05F7 + #$05F8, // $05F8 + #$05F9, // $05F9 + #$05FA, // $05FA + #$05FB, // $05FB + #$05FC, // $05FC + #$05FD, // $05FD + #$05FE, // $05FE + #$05FF, // $05FF + #$0600, // $0600 + #$0601, // $0601 + #$0602, // $0602 + #$0603, // $0603 + #$0604, // $0604 + #$0605, // $0605 + #$0606, // $0606 + #$0607, // $0607 + #$0608, // $0608 + #$0609, // $0609 + #$060A, // $060A + #$060B, // $060B + #$060C, // $060C + #$060D, // $060D + #$060E, // $060E + #$060F, // $060F + #$0610, // $0610 + #$0611, // $0611 + #$0612, // $0612 + #$0613, // $0613 + #$0614, // $0614 + #$0615, // $0615 + #$0616, // $0616 + #$0617, // $0617 + #$0618, // $0618 + #$0619, // $0619 + #$061A, // $061A + #$061B, // $061B + #$061C, // $061C + #$061D, // $061D + #$061E, // $061E + #$061F, // $061F + #$0620, // $0620 + #$0621, // $0621 + #$0622, // $0622 + #$0623, // $0623 + #$0624, // $0624 + #$0625, // $0625 + #$0626, // $0626 + #$0627, // $0627 + #$0628, // $0628 + #$0629, // $0629 + #$062A, // $062A + #$062B, // $062B + #$062C, // $062C + #$062D, // $062D + #$062E, // $062E + #$062F, // $062F + #$0630, // $0630 + #$0631, // $0631 + #$0632, // $0632 + #$0633, // $0633 + #$0634, // $0634 + #$0635, // $0635 + #$0636, // $0636 + #$0637, // $0637 + #$0638, // $0638 + #$0639, // $0639 + #$063A, // $063A + #$063B, // $063B + #$063C, // $063C + #$063D, // $063D + #$063E, // $063E + #$063F, // $063F + #$0640, // $0640 + #$0641, // $0641 + #$0642, // $0642 + #$0643, // $0643 + #$0644, // $0644 + #$0645, // $0645 + #$0646, // $0646 + #$0647, // $0647 + #$0648, // $0648 + #$0649, // $0649 + #$064A, // $064A + #$064B, // $064B + #$064C, // $064C + #$064D, // $064D + #$064E, // $064E + #$064F, // $064F + #$0650, // $0650 + #$0651, // $0651 + #$0652, // $0652 + #$0653, // $0653 + #$0654, // $0654 + #$0655, // $0655 + #$0656, // $0656 + #$0657, // $0657 + #$0658, // $0658 + #$0659, // $0659 + #$065A, // $065A + #$065B, // $065B + #$065C, // $065C + #$065D, // $065D + #$065E, // $065E + #$065F, // $065F + #$0660, // $0660 + #$0661, // $0661 + #$0662, // $0662 + #$0663, // $0663 + #$0664, // $0664 + #$0665, // $0665 + #$0666, // $0666 + #$0667, // $0667 + #$0668, // $0668 + #$0669, // $0669 + #$066A, // $066A + #$066B, // $066B + #$066C, // $066C + #$066D, // $066D + #$066E, // $066E + #$066F, // $066F + #$0670, // $0670 + #$0671, // $0671 + #$0672, // $0672 + #$0673, // $0673 + #$0674, // $0674 + #$0675, // $0675 + #$0676, // $0676 + #$0677, // $0677 + #$0678, // $0678 + #$0679, // $0679 + #$067A, // $067A + #$067B, // $067B + #$067C, // $067C + #$067D, // $067D + #$067E, // $067E + #$067F, // $067F + #$0680, // $0680 + #$0681, // $0681 + #$0682, // $0682 + #$0683, // $0683 + #$0684, // $0684 + #$0685, // $0685 + #$0686, // $0686 + #$0687, // $0687 + #$0688, // $0688 + #$0689, // $0689 + #$068A, // $068A + #$068B, // $068B + #$068C, // $068C + #$068D, // $068D + #$068E, // $068E + #$068F, // $068F + #$0690, // $0690 + #$0691, // $0691 + #$0692, // $0692 + #$0693, // $0693 + #$0694, // $0694 + #$0695, // $0695 + #$0696, // $0696 + #$0697, // $0697 + #$0698, // $0698 + #$0699, // $0699 + #$069A, // $069A + #$069B, // $069B + #$069C, // $069C + #$069D, // $069D + #$069E, // $069E + #$069F, // $069F + #$06A0, // $06A0 + #$06A1, // $06A1 + #$06A2, // $06A2 + #$06A3, // $06A3 + #$06A4, // $06A4 + #$06A5, // $06A5 + #$06A6, // $06A6 + #$06A7, // $06A7 + #$06A8, // $06A8 + #$06A9, // $06A9 + #$06AA, // $06AA + #$06AB, // $06AB + #$06AC, // $06AC + #$06AD, // $06AD + #$06AE, // $06AE + #$06AF, // $06AF + #$06B0, // $06B0 + #$06B1, // $06B1 + #$06B2, // $06B2 + #$06B3, // $06B3 + #$06B4, // $06B4 + #$06B5, // $06B5 + #$06B6, // $06B6 + #$06B7, // $06B7 + #$06B8, // $06B8 + #$06B9, // $06B9 + #$06BA, // $06BA + #$06BB, // $06BB + #$06BC, // $06BC + #$06BD, // $06BD + #$06BE, // $06BE + #$06BF, // $06BF + #$06C0, // $06C0 + #$06C1, // $06C1 + #$06C2, // $06C2 + #$06C3, // $06C3 + #$06C4, // $06C4 + #$06C5, // $06C5 + #$06C6, // $06C6 + #$06C7, // $06C7 + #$06C8, // $06C8 + #$06C9, // $06C9 + #$06CA, // $06CA + #$06CB, // $06CB + #$06CC, // $06CC + #$06CD, // $06CD + #$06CE, // $06CE + #$06CF, // $06CF + #$06D0, // $06D0 + #$06D1, // $06D1 + #$06D2, // $06D2 + #$06D3, // $06D3 + #$06D4, // $06D4 + #$06D5, // $06D5 + #$06D6, // $06D6 + #$06D7, // $06D7 + #$06D8, // $06D8 + #$06D9, // $06D9 + #$06DA, // $06DA + #$06DB, // $06DB + #$06DC, // $06DC + #$06DD, // $06DD + #$06DE, // $06DE + #$06DF, // $06DF + #$06E0, // $06E0 + #$06E1, // $06E1 + #$06E2, // $06E2 + #$06E3, // $06E3 + #$06E4, // $06E4 + #$06E5, // $06E5 + #$06E6, // $06E6 + #$06E7, // $06E7 + #$06E8, // $06E8 + #$06E9, // $06E9 + #$06EA, // $06EA + #$06EB, // $06EB + #$06EC, // $06EC + #$06ED, // $06ED + #$06EE, // $06EE + #$06EF, // $06EF + #$06F0, // $06F0 + #$06F1, // $06F1 + #$06F2, // $06F2 + #$06F3, // $06F3 + #$06F4, // $06F4 + #$06F5, // $06F5 + #$06F6, // $06F6 + #$06F7, // $06F7 + #$06F8, // $06F8 + #$06F9, // $06F9 + #$06FA, // $06FA + #$06FB, // $06FB + #$06FC, // $06FC + #$06FD, // $06FD + #$06FE, // $06FE + #$06FF, // $06FF + #$0700, // $0700 + #$0701, // $0701 + #$0702, // $0702 + #$0703, // $0703 + #$0704, // $0704 + #$0705, // $0705 + #$0706, // $0706 + #$0707, // $0707 + #$0708, // $0708 + #$0709, // $0709 + #$070A, // $070A + #$070B, // $070B + #$070C, // $070C + #$070D, // $070D + #$070E, // $070E + #$070F, // $070F + #$0710, // $0710 + #$0711, // $0711 + #$0712, // $0712 + #$0713, // $0713 + #$0714, // $0714 + #$0715, // $0715 + #$0716, // $0716 + #$0717, // $0717 + #$0718, // $0718 + #$0719, // $0719 + #$071A, // $071A + #$071B, // $071B + #$071C, // $071C + #$071D, // $071D + #$071E, // $071E + #$071F, // $071F + #$0720, // $0720 + #$0721, // $0721 + #$0722, // $0722 + #$0723, // $0723 + #$0724, // $0724 + #$0725, // $0725 + #$0726, // $0726 + #$0727, // $0727 + #$0728, // $0728 + #$0729, // $0729 + #$072A, // $072A + #$072B, // $072B + #$072C, // $072C + #$072D, // $072D + #$072E, // $072E + #$072F, // $072F + #$0730, // $0730 + #$0731, // $0731 + #$0732, // $0732 + #$0733, // $0733 + #$0734, // $0734 + #$0735, // $0735 + #$0736, // $0736 + #$0737, // $0737 + #$0738, // $0738 + #$0739, // $0739 + #$073A, // $073A + #$073B, // $073B + #$073C, // $073C + #$073D, // $073D + #$073E, // $073E + #$073F, // $073F + #$0740, // $0740 + #$0741, // $0741 + #$0742, // $0742 + #$0743, // $0743 + #$0744, // $0744 + #$0745, // $0745 + #$0746, // $0746 + #$0747, // $0747 + #$0748, // $0748 + #$0749, // $0749 + #$074A, // $074A + #$074B, // $074B + #$074C, // $074C + #$074D, // $074D + #$074E, // $074E + #$074F, // $074F + #$0750, // $0750 + #$0751, // $0751 + #$0752, // $0752 + #$0753, // $0753 + #$0754, // $0754 + #$0755, // $0755 + #$0756, // $0756 + #$0757, // $0757 + #$0758, // $0758 + #$0759, // $0759 + #$075A, // $075A + #$075B, // $075B + #$075C, // $075C + #$075D, // $075D + #$075E, // $075E + #$075F, // $075F + #$0760, // $0760 + #$0761, // $0761 + #$0762, // $0762 + #$0763, // $0763 + #$0764, // $0764 + #$0765, // $0765 + #$0766, // $0766 + #$0767, // $0767 + #$0768, // $0768 + #$0769, // $0769 + #$076A, // $076A + #$076B, // $076B + #$076C, // $076C + #$076D, // $076D + #$076E, // $076E + #$076F, // $076F + #$0770, // $0770 + #$0771, // $0771 + #$0772, // $0772 + #$0773, // $0773 + #$0774, // $0774 + #$0775, // $0775 + #$0776, // $0776 + #$0777, // $0777 + #$0778, // $0778 + #$0779, // $0779 + #$077A, // $077A + #$077B, // $077B + #$077C, // $077C + #$077D, // $077D + #$077E, // $077E + #$077F, // $077F + #$0780, // $0780 + #$0781, // $0781 + #$0782, // $0782 + #$0783, // $0783 + #$0784, // $0784 + #$0785, // $0785 + #$0786, // $0786 + #$0787, // $0787 + #$0788, // $0788 + #$0789, // $0789 + #$078A, // $078A + #$078B, // $078B + #$078C, // $078C + #$078D, // $078D + #$078E, // $078E + #$078F, // $078F + #$0790, // $0790 + #$0791, // $0791 + #$0792, // $0792 + #$0793, // $0793 + #$0794, // $0794 + #$0795, // $0795 + #$0796, // $0796 + #$0797, // $0797 + #$0798, // $0798 + #$0799, // $0799 + #$079A, // $079A + #$079B, // $079B + #$079C, // $079C + #$079D, // $079D + #$079E, // $079E + #$079F, // $079F + #$07A0, // $07A0 + #$07A1, // $07A1 + #$07A2, // $07A2 + #$07A3, // $07A3 + #$07A4, // $07A4 + #$07A5, // $07A5 + #$07A6, // $07A6 + #$07A7, // $07A7 + #$07A8, // $07A8 + #$07A9, // $07A9 + #$07AA, // $07AA + #$07AB, // $07AB + #$07AC, // $07AC + #$07AD, // $07AD + #$07AE, // $07AE + #$07AF, // $07AF + #$07B0, // $07B0 + #$07B1, // $07B1 + #$07B2, // $07B2 + #$07B3, // $07B3 + #$07B4, // $07B4 + #$07B5, // $07B5 + #$07B6, // $07B6 + #$07B7, // $07B7 + #$07B8, // $07B8 + #$07B9, // $07B9 + #$07BA, // $07BA + #$07BB, // $07BB + #$07BC, // $07BC + #$07BD, // $07BD + #$07BE, // $07BE + #$07BF, // $07BF + #$07C0, // $07C0 + #$07C1, // $07C1 + #$07C2, // $07C2 + #$07C3, // $07C3 + #$07C4, // $07C4 + #$07C5, // $07C5 + #$07C6, // $07C6 + #$07C7, // $07C7 + #$07C8, // $07C8 + #$07C9, // $07C9 + #$07CA, // $07CA + #$07CB, // $07CB + #$07CC, // $07CC + #$07CD, // $07CD + #$07CE, // $07CE + #$07CF, // $07CF + #$07D0, // $07D0 + #$07D1, // $07D1 + #$07D2, // $07D2 + #$07D3, // $07D3 + #$07D4, // $07D4 + #$07D5, // $07D5 + #$07D6, // $07D6 + #$07D7, // $07D7 + #$07D8, // $07D8 + #$07D9, // $07D9 + #$07DA, // $07DA + #$07DB, // $07DB + #$07DC, // $07DC + #$07DD, // $07DD + #$07DE, // $07DE + #$07DF, // $07DF + #$07E0, // $07E0 + #$07E1, // $07E1 + #$07E2, // $07E2 + #$07E3, // $07E3 + #$07E4, // $07E4 + #$07E5, // $07E5 + #$07E6, // $07E6 + #$07E7, // $07E7 + #$07E8, // $07E8 + #$07E9, // $07E9 + #$07EA, // $07EA + #$07EB, // $07EB + #$07EC, // $07EC + #$07ED, // $07ED + #$07EE, // $07EE + #$07EF, // $07EF + #$07F0, // $07F0 + #$07F1, // $07F1 + #$07F2, // $07F2 + #$07F3, // $07F3 + #$07F4, // $07F4 + #$07F5, // $07F5 + #$07F6, // $07F6 + #$07F7, // $07F7 + #$07F8, // $07F8 + #$07F9, // $07F9 + #$07FA, // $07FA + #$07FB, // $07FB + #$07FC, // $07FC + #$07FD, // $07FD + #$07FE, // $07FE + #$07FF, // $07FF + #$0800, // $0800 + #$0801, // $0801 + #$0802, // $0802 + #$0803, // $0803 + #$0804, // $0804 + #$0805, // $0805 + #$0806, // $0806 + #$0807, // $0807 + #$0808, // $0808 + #$0809, // $0809 + #$080A, // $080A + #$080B, // $080B + #$080C, // $080C + #$080D, // $080D + #$080E, // $080E + #$080F, // $080F + #$0810, // $0810 + #$0811, // $0811 + #$0812, // $0812 + #$0813, // $0813 + #$0814, // $0814 + #$0815, // $0815 + #$0816, // $0816 + #$0817, // $0817 + #$0818, // $0818 + #$0819, // $0819 + #$081A, // $081A + #$081B, // $081B + #$081C, // $081C + #$081D, // $081D + #$081E, // $081E + #$081F, // $081F + #$0820, // $0820 + #$0821, // $0821 + #$0822, // $0822 + #$0823, // $0823 + #$0824, // $0824 + #$0825, // $0825 + #$0826, // $0826 + #$0827, // $0827 + #$0828, // $0828 + #$0829, // $0829 + #$082A, // $082A + #$082B, // $082B + #$082C, // $082C + #$082D, // $082D + #$082E, // $082E + #$082F, // $082F + #$0830, // $0830 + #$0831, // $0831 + #$0832, // $0832 + #$0833, // $0833 + #$0834, // $0834 + #$0835, // $0835 + #$0836, // $0836 + #$0837, // $0837 + #$0838, // $0838 + #$0839, // $0839 + #$083A, // $083A + #$083B, // $083B + #$083C, // $083C + #$083D, // $083D + #$083E, // $083E + #$083F, // $083F + #$0840, // $0840 + #$0841, // $0841 + #$0842, // $0842 + #$0843, // $0843 + #$0844, // $0844 + #$0845, // $0845 + #$0846, // $0846 + #$0847, // $0847 + #$0848, // $0848 + #$0849, // $0849 + #$084A, // $084A + #$084B, // $084B + #$084C, // $084C + #$084D, // $084D + #$084E, // $084E + #$084F, // $084F + #$0850, // $0850 + #$0851, // $0851 + #$0852, // $0852 + #$0853, // $0853 + #$0854, // $0854 + #$0855, // $0855 + #$0856, // $0856 + #$0857, // $0857 + #$0858, // $0858 + #$0859, // $0859 + #$085A, // $085A + #$085B, // $085B + #$085C, // $085C + #$085D, // $085D + #$085E, // $085E + #$085F, // $085F + #$0860, // $0860 + #$0861, // $0861 + #$0862, // $0862 + #$0863, // $0863 + #$0864, // $0864 + #$0865, // $0865 + #$0866, // $0866 + #$0867, // $0867 + #$0868, // $0868 + #$0869, // $0869 + #$086A, // $086A + #$086B, // $086B + #$086C, // $086C + #$086D, // $086D + #$086E, // $086E + #$086F, // $086F + #$0870, // $0870 + #$0871, // $0871 + #$0872, // $0872 + #$0873, // $0873 + #$0874, // $0874 + #$0875, // $0875 + #$0876, // $0876 + #$0877, // $0877 + #$0878, // $0878 + #$0879, // $0879 + #$087A, // $087A + #$087B, // $087B + #$087C, // $087C + #$087D, // $087D + #$087E, // $087E + #$087F, // $087F + #$0880, // $0880 + #$0881, // $0881 + #$0882, // $0882 + #$0883, // $0883 + #$0884, // $0884 + #$0885, // $0885 + #$0886, // $0886 + #$0887, // $0887 + #$0888, // $0888 + #$0889, // $0889 + #$088A, // $088A + #$088B, // $088B + #$088C, // $088C + #$088D, // $088D + #$088E, // $088E + #$088F, // $088F + #$0890, // $0890 + #$0891, // $0891 + #$0892, // $0892 + #$0893, // $0893 + #$0894, // $0894 + #$0895, // $0895 + #$0896, // $0896 + #$0897, // $0897 + #$0898, // $0898 + #$0899, // $0899 + #$089A, // $089A + #$089B, // $089B + #$089C, // $089C + #$089D, // $089D + #$089E, // $089E + #$089F, // $089F + #$08A0, // $08A0 + #$08A1, // $08A1 + #$08A2, // $08A2 + #$08A3, // $08A3 + #$08A4, // $08A4 + #$08A5, // $08A5 + #$08A6, // $08A6 + #$08A7, // $08A7 + #$08A8, // $08A8 + #$08A9, // $08A9 + #$08AA, // $08AA + #$08AB, // $08AB + #$08AC, // $08AC + #$08AD, // $08AD + #$08AE, // $08AE + #$08AF, // $08AF + #$08B0, // $08B0 + #$08B1, // $08B1 + #$08B2, // $08B2 + #$08B3, // $08B3 + #$08B4, // $08B4 + #$08B5, // $08B5 + #$08B6, // $08B6 + #$08B7, // $08B7 + #$08B8, // $08B8 + #$08B9, // $08B9 + #$08BA, // $08BA + #$08BB, // $08BB + #$08BC, // $08BC + #$08BD, // $08BD + #$08BE, // $08BE + #$08BF, // $08BF + #$08C0, // $08C0 + #$08C1, // $08C1 + #$08C2, // $08C2 + #$08C3, // $08C3 + #$08C4, // $08C4 + #$08C5, // $08C5 + #$08C6, // $08C6 + #$08C7, // $08C7 + #$08C8, // $08C8 + #$08C9, // $08C9 + #$08CA, // $08CA + #$08CB, // $08CB + #$08CC, // $08CC + #$08CD, // $08CD + #$08CE, // $08CE + #$08CF, // $08CF + #$08D0, // $08D0 + #$08D1, // $08D1 + #$08D2, // $08D2 + #$08D3, // $08D3 + #$08D4, // $08D4 + #$08D5, // $08D5 + #$08D6, // $08D6 + #$08D7, // $08D7 + #$08D8, // $08D8 + #$08D9, // $08D9 + #$08DA, // $08DA + #$08DB, // $08DB + #$08DC, // $08DC + #$08DD, // $08DD + #$08DE, // $08DE + #$08DF, // $08DF + #$08E0, // $08E0 + #$08E1, // $08E1 + #$08E2, // $08E2 + #$08E3, // $08E3 + #$08E4, // $08E4 + #$08E5, // $08E5 + #$08E6, // $08E6 + #$08E7, // $08E7 + #$08E8, // $08E8 + #$08E9, // $08E9 + #$08EA, // $08EA + #$08EB, // $08EB + #$08EC, // $08EC + #$08ED, // $08ED + #$08EE, // $08EE + #$08EF, // $08EF + #$08F0, // $08F0 + #$08F1, // $08F1 + #$08F2, // $08F2 + #$08F3, // $08F3 + #$08F4, // $08F4 + #$08F5, // $08F5 + #$08F6, // $08F6 + #$08F7, // $08F7 + #$08F8, // $08F8 + #$08F9, // $08F9 + #$08FA, // $08FA + #$08FB, // $08FB + #$08FC, // $08FC + #$08FD, // $08FD + #$08FE, // $08FE + #$08FF, // $08FF + #$0900, // $0900 + #$0901, // $0901 + #$0902, // $0902 + #$0903, // $0903 + #$0904, // $0904 + #$0905, // $0905 + #$0906, // $0906 + #$0907, // $0907 + #$0908, // $0908 + #$0909, // $0909 + #$090A, // $090A + #$090B, // $090B + #$090C, // $090C + #$090D, // $090D + #$090E, // $090E + #$090F, // $090F + #$0910, // $0910 + #$0911, // $0911 + #$0912, // $0912 + #$0913, // $0913 + #$0914, // $0914 + #$0915, // $0915 + #$0916, // $0916 + #$0917, // $0917 + #$0918, // $0918 + #$0919, // $0919 + #$091A, // $091A + #$091B, // $091B + #$091C, // $091C + #$091D, // $091D + #$091E, // $091E + #$091F, // $091F + #$0920, // $0920 + #$0921, // $0921 + #$0922, // $0922 + #$0923, // $0923 + #$0924, // $0924 + #$0925, // $0925 + #$0926, // $0926 + #$0927, // $0927 + #$0928, // $0928 + #$0929, // $0929 + #$092A, // $092A + #$092B, // $092B + #$092C, // $092C + #$092D, // $092D + #$092E, // $092E + #$092F, // $092F + #$0930, // $0930 + #$0931, // $0931 + #$0932, // $0932 + #$0933, // $0933 + #$0934, // $0934 + #$0935, // $0935 + #$0936, // $0936 + #$0937, // $0937 + #$0938, // $0938 + #$0939, // $0939 + #$093A, // $093A + #$093B, // $093B + #$093C, // $093C + #$093D, // $093D + #$093E, // $093E + #$093F, // $093F + #$0940, // $0940 + #$0941, // $0941 + #$0942, // $0942 + #$0943, // $0943 + #$0944, // $0944 + #$0945, // $0945 + #$0946, // $0946 + #$0947, // $0947 + #$0948, // $0948 + #$0949, // $0949 + #$094A, // $094A + #$094B, // $094B + #$094C, // $094C + #$094D, // $094D + #$094E, // $094E + #$094F, // $094F + #$0950, // $0950 + #$0951, // $0951 + #$0952, // $0952 + #$0953, // $0953 + #$0954, // $0954 + #$0955, // $0955 + #$0956, // $0956 + #$0957, // $0957 + #$0958, // $0958 + #$0959, // $0959 + #$095A, // $095A + #$095B, // $095B + #$095C, // $095C + #$095D, // $095D + #$095E, // $095E + #$095F, // $095F + #$0960, // $0960 + #$0961, // $0961 + #$0962, // $0962 + #$0963, // $0963 + #$0964, // $0964 + #$0965, // $0965 + #$0966, // $0966 + #$0967, // $0967 + #$0968, // $0968 + #$0969, // $0969 + #$096A, // $096A + #$096B, // $096B + #$096C, // $096C + #$096D, // $096D + #$096E, // $096E + #$096F, // $096F + #$0970, // $0970 + #$0971, // $0971 + #$0972, // $0972 + #$0973, // $0973 + #$0974, // $0974 + #$0975, // $0975 + #$0976, // $0976 + #$0977, // $0977 + #$0978, // $0978 + #$0979, // $0979 + #$097A, // $097A + #$097B, // $097B + #$097C, // $097C + #$097D, // $097D + #$097E, // $097E + #$097F, // $097F + #$0980, // $0980 + #$0981, // $0981 + #$0982, // $0982 + #$0983, // $0983 + #$0984, // $0984 + #$0985, // $0985 + #$0986, // $0986 + #$0987, // $0987 + #$0988, // $0988 + #$0989, // $0989 + #$098A, // $098A + #$098B, // $098B + #$098C, // $098C + #$098D, // $098D + #$098E, // $098E + #$098F, // $098F + #$0990, // $0990 + #$0991, // $0991 + #$0992, // $0992 + #$0993, // $0993 + #$0994, // $0994 + #$0995, // $0995 + #$0996, // $0996 + #$0997, // $0997 + #$0998, // $0998 + #$0999, // $0999 + #$099A, // $099A + #$099B, // $099B + #$099C, // $099C + #$099D, // $099D + #$099E, // $099E + #$099F, // $099F + #$09A0, // $09A0 + #$09A1, // $09A1 + #$09A2, // $09A2 + #$09A3, // $09A3 + #$09A4, // $09A4 + #$09A5, // $09A5 + #$09A6, // $09A6 + #$09A7, // $09A7 + #$09A8, // $09A8 + #$09A9, // $09A9 + #$09AA, // $09AA + #$09AB, // $09AB + #$09AC, // $09AC + #$09AD, // $09AD + #$09AE, // $09AE + #$09AF, // $09AF + #$09B0, // $09B0 + #$09B1, // $09B1 + #$09B2, // $09B2 + #$09B3, // $09B3 + #$09B4, // $09B4 + #$09B5, // $09B5 + #$09B6, // $09B6 + #$09B7, // $09B7 + #$09B8, // $09B8 + #$09B9, // $09B9 + #$09BA, // $09BA + #$09BB, // $09BB + #$09BC, // $09BC + #$09BD, // $09BD + #$09BE, // $09BE + #$09BF, // $09BF + #$09C0, // $09C0 + #$09C1, // $09C1 + #$09C2, // $09C2 + #$09C3, // $09C3 + #$09C4, // $09C4 + #$09C5, // $09C5 + #$09C6, // $09C6 + #$09C7, // $09C7 + #$09C8, // $09C8 + #$09C9, // $09C9 + #$09CA, // $09CA + #$09CB, // $09CB + #$09CC, // $09CC + #$09CD, // $09CD + #$09CE, // $09CE + #$09CF, // $09CF + #$09D0, // $09D0 + #$09D1, // $09D1 + #$09D2, // $09D2 + #$09D3, // $09D3 + #$09D4, // $09D4 + #$09D5, // $09D5 + #$09D6, // $09D6 + #$09D7, // $09D7 + #$09D8, // $09D8 + #$09D9, // $09D9 + #$09DA, // $09DA + #$09DB, // $09DB + #$09DC, // $09DC + #$09DD, // $09DD + #$09DE, // $09DE + #$09DF, // $09DF + #$09E0, // $09E0 + #$09E1, // $09E1 + #$09E2, // $09E2 + #$09E3, // $09E3 + #$09E4, // $09E4 + #$09E5, // $09E5 + #$09E6, // $09E6 + #$09E7, // $09E7 + #$09E8, // $09E8 + #$09E9, // $09E9 + #$09EA, // $09EA + #$09EB, // $09EB + #$09EC, // $09EC + #$09ED, // $09ED + #$09EE, // $09EE + #$09EF, // $09EF + #$09F0, // $09F0 + #$09F1, // $09F1 + #$09F2, // $09F2 + #$09F3, // $09F3 + #$09F4, // $09F4 + #$09F5, // $09F5 + #$09F6, // $09F6 + #$09F7, // $09F7 + #$09F8, // $09F8 + #$09F9, // $09F9 + #$09FA, // $09FA + #$09FB, // $09FB + #$09FC, // $09FC + #$09FD, // $09FD + #$09FE, // $09FE + #$09FF, // $09FF + #$0A00, // $0A00 + #$0A01, // $0A01 + #$0A02, // $0A02 + #$0A03, // $0A03 + #$0A04, // $0A04 + #$0A05, // $0A05 + #$0A06, // $0A06 + #$0A07, // $0A07 + #$0A08, // $0A08 + #$0A09, // $0A09 + #$0A0A, // $0A0A + #$0A0B, // $0A0B + #$0A0C, // $0A0C + #$0A0D, // $0A0D + #$0A0E, // $0A0E + #$0A0F, // $0A0F + #$0A10, // $0A10 + #$0A11, // $0A11 + #$0A12, // $0A12 + #$0A13, // $0A13 + #$0A14, // $0A14 + #$0A15, // $0A15 + #$0A16, // $0A16 + #$0A17, // $0A17 + #$0A18, // $0A18 + #$0A19, // $0A19 + #$0A1A, // $0A1A + #$0A1B, // $0A1B + #$0A1C, // $0A1C + #$0A1D, // $0A1D + #$0A1E, // $0A1E + #$0A1F, // $0A1F + #$0A20, // $0A20 + #$0A21, // $0A21 + #$0A22, // $0A22 + #$0A23, // $0A23 + #$0A24, // $0A24 + #$0A25, // $0A25 + #$0A26, // $0A26 + #$0A27, // $0A27 + #$0A28, // $0A28 + #$0A29, // $0A29 + #$0A2A, // $0A2A + #$0A2B, // $0A2B + #$0A2C, // $0A2C + #$0A2D, // $0A2D + #$0A2E, // $0A2E + #$0A2F, // $0A2F + #$0A30, // $0A30 + #$0A31, // $0A31 + #$0A32, // $0A32 + #$0A33, // $0A33 + #$0A34, // $0A34 + #$0A35, // $0A35 + #$0A36, // $0A36 + #$0A37, // $0A37 + #$0A38, // $0A38 + #$0A39, // $0A39 + #$0A3A, // $0A3A + #$0A3B, // $0A3B + #$0A3C, // $0A3C + #$0A3D, // $0A3D + #$0A3E, // $0A3E + #$0A3F, // $0A3F + #$0A40, // $0A40 + #$0A41, // $0A41 + #$0A42, // $0A42 + #$0A43, // $0A43 + #$0A44, // $0A44 + #$0A45, // $0A45 + #$0A46, // $0A46 + #$0A47, // $0A47 + #$0A48, // $0A48 + #$0A49, // $0A49 + #$0A4A, // $0A4A + #$0A4B, // $0A4B + #$0A4C, // $0A4C + #$0A4D, // $0A4D + #$0A4E, // $0A4E + #$0A4F, // $0A4F + #$0A50, // $0A50 + #$0A51, // $0A51 + #$0A52, // $0A52 + #$0A53, // $0A53 + #$0A54, // $0A54 + #$0A55, // $0A55 + #$0A56, // $0A56 + #$0A57, // $0A57 + #$0A58, // $0A58 + #$0A59, // $0A59 + #$0A5A, // $0A5A + #$0A5B, // $0A5B + #$0A5C, // $0A5C + #$0A5D, // $0A5D + #$0A5E, // $0A5E + #$0A5F, // $0A5F + #$0A60, // $0A60 + #$0A61, // $0A61 + #$0A62, // $0A62 + #$0A63, // $0A63 + #$0A64, // $0A64 + #$0A65, // $0A65 + #$0A66, // $0A66 + #$0A67, // $0A67 + #$0A68, // $0A68 + #$0A69, // $0A69 + #$0A6A, // $0A6A + #$0A6B, // $0A6B + #$0A6C, // $0A6C + #$0A6D, // $0A6D + #$0A6E, // $0A6E + #$0A6F, // $0A6F + #$0A70, // $0A70 + #$0A71, // $0A71 + #$0A72, // $0A72 + #$0A73, // $0A73 + #$0A74, // $0A74 + #$0A75, // $0A75 + #$0A76, // $0A76 + #$0A77, // $0A77 + #$0A78, // $0A78 + #$0A79, // $0A79 + #$0A7A, // $0A7A + #$0A7B, // $0A7B + #$0A7C, // $0A7C + #$0A7D, // $0A7D + #$0A7E, // $0A7E + #$0A7F, // $0A7F + #$0A80, // $0A80 + #$0A81, // $0A81 + #$0A82, // $0A82 + #$0A83, // $0A83 + #$0A84, // $0A84 + #$0A85, // $0A85 + #$0A86, // $0A86 + #$0A87, // $0A87 + #$0A88, // $0A88 + #$0A89, // $0A89 + #$0A8A, // $0A8A + #$0A8B, // $0A8B + #$0A8C, // $0A8C + #$0A8D, // $0A8D + #$0A8E, // $0A8E + #$0A8F, // $0A8F + #$0A90, // $0A90 + #$0A91, // $0A91 + #$0A92, // $0A92 + #$0A93, // $0A93 + #$0A94, // $0A94 + #$0A95, // $0A95 + #$0A96, // $0A96 + #$0A97, // $0A97 + #$0A98, // $0A98 + #$0A99, // $0A99 + #$0A9A, // $0A9A + #$0A9B, // $0A9B + #$0A9C, // $0A9C + #$0A9D, // $0A9D + #$0A9E, // $0A9E + #$0A9F, // $0A9F + #$0AA0, // $0AA0 + #$0AA1, // $0AA1 + #$0AA2, // $0AA2 + #$0AA3, // $0AA3 + #$0AA4, // $0AA4 + #$0AA5, // $0AA5 + #$0AA6, // $0AA6 + #$0AA7, // $0AA7 + #$0AA8, // $0AA8 + #$0AA9, // $0AA9 + #$0AAA, // $0AAA + #$0AAB, // $0AAB + #$0AAC, // $0AAC + #$0AAD, // $0AAD + #$0AAE, // $0AAE + #$0AAF, // $0AAF + #$0AB0, // $0AB0 + #$0AB1, // $0AB1 + #$0AB2, // $0AB2 + #$0AB3, // $0AB3 + #$0AB4, // $0AB4 + #$0AB5, // $0AB5 + #$0AB6, // $0AB6 + #$0AB7, // $0AB7 + #$0AB8, // $0AB8 + #$0AB9, // $0AB9 + #$0ABA, // $0ABA + #$0ABB, // $0ABB + #$0ABC, // $0ABC + #$0ABD, // $0ABD + #$0ABE, // $0ABE + #$0ABF, // $0ABF + #$0AC0, // $0AC0 + #$0AC1, // $0AC1 + #$0AC2, // $0AC2 + #$0AC3, // $0AC3 + #$0AC4, // $0AC4 + #$0AC5, // $0AC5 + #$0AC6, // $0AC6 + #$0AC7, // $0AC7 + #$0AC8, // $0AC8 + #$0AC9, // $0AC9 + #$0ACA, // $0ACA + #$0ACB, // $0ACB + #$0ACC, // $0ACC + #$0ACD, // $0ACD + #$0ACE, // $0ACE + #$0ACF, // $0ACF + #$0AD0, // $0AD0 + #$0AD1, // $0AD1 + #$0AD2, // $0AD2 + #$0AD3, // $0AD3 + #$0AD4, // $0AD4 + #$0AD5, // $0AD5 + #$0AD6, // $0AD6 + #$0AD7, // $0AD7 + #$0AD8, // $0AD8 + #$0AD9, // $0AD9 + #$0ADA, // $0ADA + #$0ADB, // $0ADB + #$0ADC, // $0ADC + #$0ADD, // $0ADD + #$0ADE, // $0ADE + #$0ADF, // $0ADF + #$0AE0, // $0AE0 + #$0AE1, // $0AE1 + #$0AE2, // $0AE2 + #$0AE3, // $0AE3 + #$0AE4, // $0AE4 + #$0AE5, // $0AE5 + #$0AE6, // $0AE6 + #$0AE7, // $0AE7 + #$0AE8, // $0AE8 + #$0AE9, // $0AE9 + #$0AEA, // $0AEA + #$0AEB, // $0AEB + #$0AEC, // $0AEC + #$0AED, // $0AED + #$0AEE, // $0AEE + #$0AEF, // $0AEF + #$0AF0, // $0AF0 + #$0AF1, // $0AF1 + #$0AF2, // $0AF2 + #$0AF3, // $0AF3 + #$0AF4, // $0AF4 + #$0AF5, // $0AF5 + #$0AF6, // $0AF6 + #$0AF7, // $0AF7 + #$0AF8, // $0AF8 + #$0AF9, // $0AF9 + #$0AFA, // $0AFA + #$0AFB, // $0AFB + #$0AFC, // $0AFC + #$0AFD, // $0AFD + #$0AFE, // $0AFE + #$0AFF, // $0AFF + #$0B00, // $0B00 + #$0B01, // $0B01 + #$0B02, // $0B02 + #$0B03, // $0B03 + #$0B04, // $0B04 + #$0B05, // $0B05 + #$0B06, // $0B06 + #$0B07, // $0B07 + #$0B08, // $0B08 + #$0B09, // $0B09 + #$0B0A, // $0B0A + #$0B0B, // $0B0B + #$0B0C, // $0B0C + #$0B0D, // $0B0D + #$0B0E, // $0B0E + #$0B0F, // $0B0F + #$0B10, // $0B10 + #$0B11, // $0B11 + #$0B12, // $0B12 + #$0B13, // $0B13 + #$0B14, // $0B14 + #$0B15, // $0B15 + #$0B16, // $0B16 + #$0B17, // $0B17 + #$0B18, // $0B18 + #$0B19, // $0B19 + #$0B1A, // $0B1A + #$0B1B, // $0B1B + #$0B1C, // $0B1C + #$0B1D, // $0B1D + #$0B1E, // $0B1E + #$0B1F, // $0B1F + #$0B20, // $0B20 + #$0B21, // $0B21 + #$0B22, // $0B22 + #$0B23, // $0B23 + #$0B24, // $0B24 + #$0B25, // $0B25 + #$0B26, // $0B26 + #$0B27, // $0B27 + #$0B28, // $0B28 + #$0B29, // $0B29 + #$0B2A, // $0B2A + #$0B2B, // $0B2B + #$0B2C, // $0B2C + #$0B2D, // $0B2D + #$0B2E, // $0B2E + #$0B2F, // $0B2F + #$0B30, // $0B30 + #$0B31, // $0B31 + #$0B32, // $0B32 + #$0B33, // $0B33 + #$0B34, // $0B34 + #$0B35, // $0B35 + #$0B36, // $0B36 + #$0B37, // $0B37 + #$0B38, // $0B38 + #$0B39, // $0B39 + #$0B3A, // $0B3A + #$0B3B, // $0B3B + #$0B3C, // $0B3C + #$0B3D, // $0B3D + #$0B3E, // $0B3E + #$0B3F, // $0B3F + #$0B40, // $0B40 + #$0B41, // $0B41 + #$0B42, // $0B42 + #$0B43, // $0B43 + #$0B44, // $0B44 + #$0B45, // $0B45 + #$0B46, // $0B46 + #$0B47, // $0B47 + #$0B48, // $0B48 + #$0B49, // $0B49 + #$0B4A, // $0B4A + #$0B4B, // $0B4B + #$0B4C, // $0B4C + #$0B4D, // $0B4D + #$0B4E, // $0B4E + #$0B4F, // $0B4F + #$0B50, // $0B50 + #$0B51, // $0B51 + #$0B52, // $0B52 + #$0B53, // $0B53 + #$0B54, // $0B54 + #$0B55, // $0B55 + #$0B56, // $0B56 + #$0B57, // $0B57 + #$0B58, // $0B58 + #$0B59, // $0B59 + #$0B5A, // $0B5A + #$0B5B, // $0B5B + #$0B5C, // $0B5C + #$0B5D, // $0B5D + #$0B5E, // $0B5E + #$0B5F, // $0B5F + #$0B60, // $0B60 + #$0B61, // $0B61 + #$0B62, // $0B62 + #$0B63, // $0B63 + #$0B64, // $0B64 + #$0B65, // $0B65 + #$0B66, // $0B66 + #$0B67, // $0B67 + #$0B68, // $0B68 + #$0B69, // $0B69 + #$0B6A, // $0B6A + #$0B6B, // $0B6B + #$0B6C, // $0B6C + #$0B6D, // $0B6D + #$0B6E, // $0B6E + #$0B6F, // $0B6F + #$0B70, // $0B70 + #$0B71, // $0B71 + #$0B72, // $0B72 + #$0B73, // $0B73 + #$0B74, // $0B74 + #$0B75, // $0B75 + #$0B76, // $0B76 + #$0B77, // $0B77 + #$0B78, // $0B78 + #$0B79, // $0B79 + #$0B7A, // $0B7A + #$0B7B, // $0B7B + #$0B7C, // $0B7C + #$0B7D, // $0B7D + #$0B7E, // $0B7E + #$0B7F, // $0B7F + #$0B80, // $0B80 + #$0B81, // $0B81 + #$0B82, // $0B82 + #$0B83, // $0B83 + #$0B84, // $0B84 + #$0B85, // $0B85 + #$0B86, // $0B86 + #$0B87, // $0B87 + #$0B88, // $0B88 + #$0B89, // $0B89 + #$0B8A, // $0B8A + #$0B8B, // $0B8B + #$0B8C, // $0B8C + #$0B8D, // $0B8D + #$0B8E, // $0B8E + #$0B8F, // $0B8F + #$0B90, // $0B90 + #$0B91, // $0B91 + #$0B92, // $0B92 + #$0B93, // $0B93 + #$0B94, // $0B94 + #$0B95, // $0B95 + #$0B96, // $0B96 + #$0B97, // $0B97 + #$0B98, // $0B98 + #$0B99, // $0B99 + #$0B9A, // $0B9A + #$0B9B, // $0B9B + #$0B9C, // $0B9C + #$0B9D, // $0B9D + #$0B9E, // $0B9E + #$0B9F, // $0B9F + #$0BA0, // $0BA0 + #$0BA1, // $0BA1 + #$0BA2, // $0BA2 + #$0BA3, // $0BA3 + #$0BA4, // $0BA4 + #$0BA5, // $0BA5 + #$0BA6, // $0BA6 + #$0BA7, // $0BA7 + #$0BA8, // $0BA8 + #$0BA9, // $0BA9 + #$0BAA, // $0BAA + #$0BAB, // $0BAB + #$0BAC, // $0BAC + #$0BAD, // $0BAD + #$0BAE, // $0BAE + #$0BAF, // $0BAF + #$0BB0, // $0BB0 + #$0BB1, // $0BB1 + #$0BB2, // $0BB2 + #$0BB3, // $0BB3 + #$0BB4, // $0BB4 + #$0BB5, // $0BB5 + #$0BB6, // $0BB6 + #$0BB7, // $0BB7 + #$0BB8, // $0BB8 + #$0BB9, // $0BB9 + #$0BBA, // $0BBA + #$0BBB, // $0BBB + #$0BBC, // $0BBC + #$0BBD, // $0BBD + #$0BBE, // $0BBE + #$0BBF, // $0BBF + #$0BC0, // $0BC0 + #$0BC1, // $0BC1 + #$0BC2, // $0BC2 + #$0BC3, // $0BC3 + #$0BC4, // $0BC4 + #$0BC5, // $0BC5 + #$0BC6, // $0BC6 + #$0BC7, // $0BC7 + #$0BC8, // $0BC8 + #$0BC9, // $0BC9 + #$0BCA, // $0BCA + #$0BCB, // $0BCB + #$0BCC, // $0BCC + #$0BCD, // $0BCD + #$0BCE, // $0BCE + #$0BCF, // $0BCF + #$0BD0, // $0BD0 + #$0BD1, // $0BD1 + #$0BD2, // $0BD2 + #$0BD3, // $0BD3 + #$0BD4, // $0BD4 + #$0BD5, // $0BD5 + #$0BD6, // $0BD6 + #$0BD7, // $0BD7 + #$0BD8, // $0BD8 + #$0BD9, // $0BD9 + #$0BDA, // $0BDA + #$0BDB, // $0BDB + #$0BDC, // $0BDC + #$0BDD, // $0BDD + #$0BDE, // $0BDE + #$0BDF, // $0BDF + #$0BE0, // $0BE0 + #$0BE1, // $0BE1 + #$0BE2, // $0BE2 + #$0BE3, // $0BE3 + #$0BE4, // $0BE4 + #$0BE5, // $0BE5 + #$0BE6, // $0BE6 + #$0BE7, // $0BE7 + #$0BE8, // $0BE8 + #$0BE9, // $0BE9 + #$0BEA, // $0BEA + #$0BEB, // $0BEB + #$0BEC, // $0BEC + #$0BED, // $0BED + #$0BEE, // $0BEE + #$0BEF, // $0BEF + #$0BF0, // $0BF0 + #$0BF1, // $0BF1 + #$0BF2, // $0BF2 + #$0BF3, // $0BF3 + #$0BF4, // $0BF4 + #$0BF5, // $0BF5 + #$0BF6, // $0BF6 + #$0BF7, // $0BF7 + #$0BF8, // $0BF8 + #$0BF9, // $0BF9 + #$0BFA, // $0BFA + #$0BFB, // $0BFB + #$0BFC, // $0BFC + #$0BFD, // $0BFD + #$0BFE, // $0BFE + #$0BFF, // $0BFF + #$0C00, // $0C00 + #$0C01, // $0C01 + #$0C02, // $0C02 + #$0C03, // $0C03 + #$0C04, // $0C04 + #$0C05, // $0C05 + #$0C06, // $0C06 + #$0C07, // $0C07 + #$0C08, // $0C08 + #$0C09, // $0C09 + #$0C0A, // $0C0A + #$0C0B, // $0C0B + #$0C0C, // $0C0C + #$0C0D, // $0C0D + #$0C0E, // $0C0E + #$0C0F, // $0C0F + #$0C10, // $0C10 + #$0C11, // $0C11 + #$0C12, // $0C12 + #$0C13, // $0C13 + #$0C14, // $0C14 + #$0C15, // $0C15 + #$0C16, // $0C16 + #$0C17, // $0C17 + #$0C18, // $0C18 + #$0C19, // $0C19 + #$0C1A, // $0C1A + #$0C1B, // $0C1B + #$0C1C, // $0C1C + #$0C1D, // $0C1D + #$0C1E, // $0C1E + #$0C1F, // $0C1F + #$0C20, // $0C20 + #$0C21, // $0C21 + #$0C22, // $0C22 + #$0C23, // $0C23 + #$0C24, // $0C24 + #$0C25, // $0C25 + #$0C26, // $0C26 + #$0C27, // $0C27 + #$0C28, // $0C28 + #$0C29, // $0C29 + #$0C2A, // $0C2A + #$0C2B, // $0C2B + #$0C2C, // $0C2C + #$0C2D, // $0C2D + #$0C2E, // $0C2E + #$0C2F, // $0C2F + #$0C30, // $0C30 + #$0C31, // $0C31 + #$0C32, // $0C32 + #$0C33, // $0C33 + #$0C34, // $0C34 + #$0C35, // $0C35 + #$0C36, // $0C36 + #$0C37, // $0C37 + #$0C38, // $0C38 + #$0C39, // $0C39 + #$0C3A, // $0C3A + #$0C3B, // $0C3B + #$0C3C, // $0C3C + #$0C3D, // $0C3D + #$0C3E, // $0C3E + #$0C3F, // $0C3F + #$0C40, // $0C40 + #$0C41, // $0C41 + #$0C42, // $0C42 + #$0C43, // $0C43 + #$0C44, // $0C44 + #$0C45, // $0C45 + #$0C46, // $0C46 + #$0C47, // $0C47 + #$0C48, // $0C48 + #$0C49, // $0C49 + #$0C4A, // $0C4A + #$0C4B, // $0C4B + #$0C4C, // $0C4C + #$0C4D, // $0C4D + #$0C4E, // $0C4E + #$0C4F, // $0C4F + #$0C50, // $0C50 + #$0C51, // $0C51 + #$0C52, // $0C52 + #$0C53, // $0C53 + #$0C54, // $0C54 + #$0C55, // $0C55 + #$0C56, // $0C56 + #$0C57, // $0C57 + #$0C58, // $0C58 + #$0C59, // $0C59 + #$0C5A, // $0C5A + #$0C5B, // $0C5B + #$0C5C, // $0C5C + #$0C5D, // $0C5D + #$0C5E, // $0C5E + #$0C5F, // $0C5F + #$0C60, // $0C60 + #$0C61, // $0C61 + #$0C62, // $0C62 + #$0C63, // $0C63 + #$0C64, // $0C64 + #$0C65, // $0C65 + #$0C66, // $0C66 + #$0C67, // $0C67 + #$0C68, // $0C68 + #$0C69, // $0C69 + #$0C6A, // $0C6A + #$0C6B, // $0C6B + #$0C6C, // $0C6C + #$0C6D, // $0C6D + #$0C6E, // $0C6E + #$0C6F, // $0C6F + #$0C70, // $0C70 + #$0C71, // $0C71 + #$0C72, // $0C72 + #$0C73, // $0C73 + #$0C74, // $0C74 + #$0C75, // $0C75 + #$0C76, // $0C76 + #$0C77, // $0C77 + #$0C78, // $0C78 + #$0C79, // $0C79 + #$0C7A, // $0C7A + #$0C7B, // $0C7B + #$0C7C, // $0C7C + #$0C7D, // $0C7D + #$0C7E, // $0C7E + #$0C7F, // $0C7F + #$0C80, // $0C80 + #$0C81, // $0C81 + #$0C82, // $0C82 + #$0C83, // $0C83 + #$0C84, // $0C84 + #$0C85, // $0C85 + #$0C86, // $0C86 + #$0C87, // $0C87 + #$0C88, // $0C88 + #$0C89, // $0C89 + #$0C8A, // $0C8A + #$0C8B, // $0C8B + #$0C8C, // $0C8C + #$0C8D, // $0C8D + #$0C8E, // $0C8E + #$0C8F, // $0C8F + #$0C90, // $0C90 + #$0C91, // $0C91 + #$0C92, // $0C92 + #$0C93, // $0C93 + #$0C94, // $0C94 + #$0C95, // $0C95 + #$0C96, // $0C96 + #$0C97, // $0C97 + #$0C98, // $0C98 + #$0C99, // $0C99 + #$0C9A, // $0C9A + #$0C9B, // $0C9B + #$0C9C, // $0C9C + #$0C9D, // $0C9D + #$0C9E, // $0C9E + #$0C9F, // $0C9F + #$0CA0, // $0CA0 + #$0CA1, // $0CA1 + #$0CA2, // $0CA2 + #$0CA3, // $0CA3 + #$0CA4, // $0CA4 + #$0CA5, // $0CA5 + #$0CA6, // $0CA6 + #$0CA7, // $0CA7 + #$0CA8, // $0CA8 + #$0CA9, // $0CA9 + #$0CAA, // $0CAA + #$0CAB, // $0CAB + #$0CAC, // $0CAC + #$0CAD, // $0CAD + #$0CAE, // $0CAE + #$0CAF, // $0CAF + #$0CB0, // $0CB0 + #$0CB1, // $0CB1 + #$0CB2, // $0CB2 + #$0CB3, // $0CB3 + #$0CB4, // $0CB4 + #$0CB5, // $0CB5 + #$0CB6, // $0CB6 + #$0CB7, // $0CB7 + #$0CB8, // $0CB8 + #$0CB9, // $0CB9 + #$0CBA, // $0CBA + #$0CBB, // $0CBB + #$0CBC, // $0CBC + #$0CBD, // $0CBD + #$0CBE, // $0CBE + #$0CBF, // $0CBF + #$0CC0, // $0CC0 + #$0CC1, // $0CC1 + #$0CC2, // $0CC2 + #$0CC3, // $0CC3 + #$0CC4, // $0CC4 + #$0CC5, // $0CC5 + #$0CC6, // $0CC6 + #$0CC7, // $0CC7 + #$0CC8, // $0CC8 + #$0CC9, // $0CC9 + #$0CCA, // $0CCA + #$0CCB, // $0CCB + #$0CCC, // $0CCC + #$0CCD, // $0CCD + #$0CCE, // $0CCE + #$0CCF, // $0CCF + #$0CD0, // $0CD0 + #$0CD1, // $0CD1 + #$0CD2, // $0CD2 + #$0CD3, // $0CD3 + #$0CD4, // $0CD4 + #$0CD5, // $0CD5 + #$0CD6, // $0CD6 + #$0CD7, // $0CD7 + #$0CD8, // $0CD8 + #$0CD9, // $0CD9 + #$0CDA, // $0CDA + #$0CDB, // $0CDB + #$0CDC, // $0CDC + #$0CDD, // $0CDD + #$0CDE, // $0CDE + #$0CDF, // $0CDF + #$0CE0, // $0CE0 + #$0CE1, // $0CE1 + #$0CE2, // $0CE2 + #$0CE3, // $0CE3 + #$0CE4, // $0CE4 + #$0CE5, // $0CE5 + #$0CE6, // $0CE6 + #$0CE7, // $0CE7 + #$0CE8, // $0CE8 + #$0CE9, // $0CE9 + #$0CEA, // $0CEA + #$0CEB, // $0CEB + #$0CEC, // $0CEC + #$0CED, // $0CED + #$0CEE, // $0CEE + #$0CEF, // $0CEF + #$0CF0, // $0CF0 + #$0CF1, // $0CF1 + #$0CF2, // $0CF2 + #$0CF3, // $0CF3 + #$0CF4, // $0CF4 + #$0CF5, // $0CF5 + #$0CF6, // $0CF6 + #$0CF7, // $0CF7 + #$0CF8, // $0CF8 + #$0CF9, // $0CF9 + #$0CFA, // $0CFA + #$0CFB, // $0CFB + #$0CFC, // $0CFC + #$0CFD, // $0CFD + #$0CFE, // $0CFE + #$0CFF, // $0CFF + #$0D00, // $0D00 + #$0D01, // $0D01 + #$0D02, // $0D02 + #$0D03, // $0D03 + #$0D04, // $0D04 + #$0D05, // $0D05 + #$0D06, // $0D06 + #$0D07, // $0D07 + #$0D08, // $0D08 + #$0D09, // $0D09 + #$0D0A, // $0D0A + #$0D0B, // $0D0B + #$0D0C, // $0D0C + #$0D0D, // $0D0D + #$0D0E, // $0D0E + #$0D0F, // $0D0F + #$0D10, // $0D10 + #$0D11, // $0D11 + #$0D12, // $0D12 + #$0D13, // $0D13 + #$0D14, // $0D14 + #$0D15, // $0D15 + #$0D16, // $0D16 + #$0D17, // $0D17 + #$0D18, // $0D18 + #$0D19, // $0D19 + #$0D1A, // $0D1A + #$0D1B, // $0D1B + #$0D1C, // $0D1C + #$0D1D, // $0D1D + #$0D1E, // $0D1E + #$0D1F, // $0D1F + #$0D20, // $0D20 + #$0D21, // $0D21 + #$0D22, // $0D22 + #$0D23, // $0D23 + #$0D24, // $0D24 + #$0D25, // $0D25 + #$0D26, // $0D26 + #$0D27, // $0D27 + #$0D28, // $0D28 + #$0D29, // $0D29 + #$0D2A, // $0D2A + #$0D2B, // $0D2B + #$0D2C, // $0D2C + #$0D2D, // $0D2D + #$0D2E, // $0D2E + #$0D2F, // $0D2F + #$0D30, // $0D30 + #$0D31, // $0D31 + #$0D32, // $0D32 + #$0D33, // $0D33 + #$0D34, // $0D34 + #$0D35, // $0D35 + #$0D36, // $0D36 + #$0D37, // $0D37 + #$0D38, // $0D38 + #$0D39, // $0D39 + #$0D3A, // $0D3A + #$0D3B, // $0D3B + #$0D3C, // $0D3C + #$0D3D, // $0D3D + #$0D3E, // $0D3E + #$0D3F, // $0D3F + #$0D40, // $0D40 + #$0D41, // $0D41 + #$0D42, // $0D42 + #$0D43, // $0D43 + #$0D44, // $0D44 + #$0D45, // $0D45 + #$0D46, // $0D46 + #$0D47, // $0D47 + #$0D48, // $0D48 + #$0D49, // $0D49 + #$0D4A, // $0D4A + #$0D4B, // $0D4B + #$0D4C, // $0D4C + #$0D4D, // $0D4D + #$0D4E, // $0D4E + #$0D4F, // $0D4F + #$0D50, // $0D50 + #$0D51, // $0D51 + #$0D52, // $0D52 + #$0D53, // $0D53 + #$0D54, // $0D54 + #$0D55, // $0D55 + #$0D56, // $0D56 + #$0D57, // $0D57 + #$0D58, // $0D58 + #$0D59, // $0D59 + #$0D5A, // $0D5A + #$0D5B, // $0D5B + #$0D5C, // $0D5C + #$0D5D, // $0D5D + #$0D5E, // $0D5E + #$0D5F, // $0D5F + #$0D60, // $0D60 + #$0D61, // $0D61 + #$0D62, // $0D62 + #$0D63, // $0D63 + #$0D64, // $0D64 + #$0D65, // $0D65 + #$0D66, // $0D66 + #$0D67, // $0D67 + #$0D68, // $0D68 + #$0D69, // $0D69 + #$0D6A, // $0D6A + #$0D6B, // $0D6B + #$0D6C, // $0D6C + #$0D6D, // $0D6D + #$0D6E, // $0D6E + #$0D6F, // $0D6F + #$0D70, // $0D70 + #$0D71, // $0D71 + #$0D72, // $0D72 + #$0D73, // $0D73 + #$0D74, // $0D74 + #$0D75, // $0D75 + #$0D76, // $0D76 + #$0D77, // $0D77 + #$0D78, // $0D78 + #$0D79, // $0D79 + #$0D7A, // $0D7A + #$0D7B, // $0D7B + #$0D7C, // $0D7C + #$0D7D, // $0D7D + #$0D7E, // $0D7E + #$0D7F, // $0D7F + #$0D80, // $0D80 + #$0D81, // $0D81 + #$0D82, // $0D82 + #$0D83, // $0D83 + #$0D84, // $0D84 + #$0D85, // $0D85 + #$0D86, // $0D86 + #$0D87, // $0D87 + #$0D88, // $0D88 + #$0D89, // $0D89 + #$0D8A, // $0D8A + #$0D8B, // $0D8B + #$0D8C, // $0D8C + #$0D8D, // $0D8D + #$0D8E, // $0D8E + #$0D8F, // $0D8F + #$0D90, // $0D90 + #$0D91, // $0D91 + #$0D92, // $0D92 + #$0D93, // $0D93 + #$0D94, // $0D94 + #$0D95, // $0D95 + #$0D96, // $0D96 + #$0D97, // $0D97 + #$0D98, // $0D98 + #$0D99, // $0D99 + #$0D9A, // $0D9A + #$0D9B, // $0D9B + #$0D9C, // $0D9C + #$0D9D, // $0D9D + #$0D9E, // $0D9E + #$0D9F, // $0D9F + #$0DA0, // $0DA0 + #$0DA1, // $0DA1 + #$0DA2, // $0DA2 + #$0DA3, // $0DA3 + #$0DA4, // $0DA4 + #$0DA5, // $0DA5 + #$0DA6, // $0DA6 + #$0DA7, // $0DA7 + #$0DA8, // $0DA8 + #$0DA9, // $0DA9 + #$0DAA, // $0DAA + #$0DAB, // $0DAB + #$0DAC, // $0DAC + #$0DAD, // $0DAD + #$0DAE, // $0DAE + #$0DAF, // $0DAF + #$0DB0, // $0DB0 + #$0DB1, // $0DB1 + #$0DB2, // $0DB2 + #$0DB3, // $0DB3 + #$0DB4, // $0DB4 + #$0DB5, // $0DB5 + #$0DB6, // $0DB6 + #$0DB7, // $0DB7 + #$0DB8, // $0DB8 + #$0DB9, // $0DB9 + #$0DBA, // $0DBA + #$0DBB, // $0DBB + #$0DBC, // $0DBC + #$0DBD, // $0DBD + #$0DBE, // $0DBE + #$0DBF, // $0DBF + #$0DC0, // $0DC0 + #$0DC1, // $0DC1 + #$0DC2, // $0DC2 + #$0DC3, // $0DC3 + #$0DC4, // $0DC4 + #$0DC5, // $0DC5 + #$0DC6, // $0DC6 + #$0DC7, // $0DC7 + #$0DC8, // $0DC8 + #$0DC9, // $0DC9 + #$0DCA, // $0DCA + #$0DCB, // $0DCB + #$0DCC, // $0DCC + #$0DCD, // $0DCD + #$0DCE, // $0DCE + #$0DCF, // $0DCF + #$0DD0, // $0DD0 + #$0DD1, // $0DD1 + #$0DD2, // $0DD2 + #$0DD3, // $0DD3 + #$0DD4, // $0DD4 + #$0DD5, // $0DD5 + #$0DD6, // $0DD6 + #$0DD7, // $0DD7 + #$0DD8, // $0DD8 + #$0DD9, // $0DD9 + #$0DDA, // $0DDA + #$0DDB, // $0DDB + #$0DDC, // $0DDC + #$0DDD, // $0DDD + #$0DDE, // $0DDE + #$0DDF, // $0DDF + #$0DE0, // $0DE0 + #$0DE1, // $0DE1 + #$0DE2, // $0DE2 + #$0DE3, // $0DE3 + #$0DE4, // $0DE4 + #$0DE5, // $0DE5 + #$0DE6, // $0DE6 + #$0DE7, // $0DE7 + #$0DE8, // $0DE8 + #$0DE9, // $0DE9 + #$0DEA, // $0DEA + #$0DEB, // $0DEB + #$0DEC, // $0DEC + #$0DED, // $0DED + #$0DEE, // $0DEE + #$0DEF, // $0DEF + #$0DF0, // $0DF0 + #$0DF1, // $0DF1 + #$0DF2, // $0DF2 + #$0DF3, // $0DF3 + #$0DF4, // $0DF4 + #$0DF5, // $0DF5 + #$0DF6, // $0DF6 + #$0DF7, // $0DF7 + #$0DF8, // $0DF8 + #$0DF9, // $0DF9 + #$0DFA, // $0DFA + #$0DFB, // $0DFB + #$0DFC, // $0DFC + #$0DFD, // $0DFD + #$0DFE, // $0DFE + #$0DFF, // $0DFF + #$0E00, // $0E00 + #$0E01, // $0E01 + #$0E02, // $0E02 + #$0E03, // $0E03 + #$0E04, // $0E04 + #$0E05, // $0E05 + #$0E06, // $0E06 + #$0E07, // $0E07 + #$0E08, // $0E08 + #$0E09, // $0E09 + #$0E0A, // $0E0A + #$0E0B, // $0E0B + #$0E0C, // $0E0C + #$0E0D, // $0E0D + #$0E0E, // $0E0E + #$0E0F, // $0E0F + #$0E10, // $0E10 + #$0E11, // $0E11 + #$0E12, // $0E12 + #$0E13, // $0E13 + #$0E14, // $0E14 + #$0E15, // $0E15 + #$0E16, // $0E16 + #$0E17, // $0E17 + #$0E18, // $0E18 + #$0E19, // $0E19 + #$0E1A, // $0E1A + #$0E1B, // $0E1B + #$0E1C, // $0E1C + #$0E1D, // $0E1D + #$0E1E, // $0E1E + #$0E1F, // $0E1F + #$0E20, // $0E20 + #$0E21, // $0E21 + #$0E22, // $0E22 + #$0E23, // $0E23 + #$0E24, // $0E24 + #$0E25, // $0E25 + #$0E26, // $0E26 + #$0E27, // $0E27 + #$0E28, // $0E28 + #$0E29, // $0E29 + #$0E2A, // $0E2A + #$0E2B, // $0E2B + #$0E2C, // $0E2C + #$0E2D, // $0E2D + #$0E2E, // $0E2E + #$0E2F, // $0E2F + #$0E30, // $0E30 + #$0E31, // $0E31 + #$0E32, // $0E32 + #$0E33, // $0E33 + #$0E34, // $0E34 + #$0E35, // $0E35 + #$0E36, // $0E36 + #$0E37, // $0E37 + #$0E38, // $0E38 + #$0E39, // $0E39 + #$0E3A, // $0E3A + #$0E3B, // $0E3B + #$0E3C, // $0E3C + #$0E3D, // $0E3D + #$0E3E, // $0E3E + #$0E3F, // $0E3F + #$0E40, // $0E40 + #$0E41, // $0E41 + #$0E42, // $0E42 + #$0E43, // $0E43 + #$0E44, // $0E44 + #$0E45, // $0E45 + #$0E46, // $0E46 + #$0E47, // $0E47 + #$0E48, // $0E48 + #$0E49, // $0E49 + #$0E4A, // $0E4A + #$0E4B, // $0E4B + #$0E4C, // $0E4C + #$0E4D, // $0E4D + #$0E4E, // $0E4E + #$0E4F, // $0E4F + #$0E50, // $0E50 + #$0E51, // $0E51 + #$0E52, // $0E52 + #$0E53, // $0E53 + #$0E54, // $0E54 + #$0E55, // $0E55 + #$0E56, // $0E56 + #$0E57, // $0E57 + #$0E58, // $0E58 + #$0E59, // $0E59 + #$0E5A, // $0E5A + #$0E5B, // $0E5B + #$0E5C, // $0E5C + #$0E5D, // $0E5D + #$0E5E, // $0E5E + #$0E5F, // $0E5F + #$0E60, // $0E60 + #$0E61, // $0E61 + #$0E62, // $0E62 + #$0E63, // $0E63 + #$0E64, // $0E64 + #$0E65, // $0E65 + #$0E66, // $0E66 + #$0E67, // $0E67 + #$0E68, // $0E68 + #$0E69, // $0E69 + #$0E6A, // $0E6A + #$0E6B, // $0E6B + #$0E6C, // $0E6C + #$0E6D, // $0E6D + #$0E6E, // $0E6E + #$0E6F, // $0E6F + #$0E70, // $0E70 + #$0E71, // $0E71 + #$0E72, // $0E72 + #$0E73, // $0E73 + #$0E74, // $0E74 + #$0E75, // $0E75 + #$0E76, // $0E76 + #$0E77, // $0E77 + #$0E78, // $0E78 + #$0E79, // $0E79 + #$0E7A, // $0E7A + #$0E7B, // $0E7B + #$0E7C, // $0E7C + #$0E7D, // $0E7D + #$0E7E, // $0E7E + #$0E7F, // $0E7F + #$0E80, // $0E80 + #$0E81, // $0E81 + #$0E82, // $0E82 + #$0E83, // $0E83 + #$0E84, // $0E84 + #$0E85, // $0E85 + #$0E86, // $0E86 + #$0E87, // $0E87 + #$0E88, // $0E88 + #$0E89, // $0E89 + #$0E8A, // $0E8A + #$0E8B, // $0E8B + #$0E8C, // $0E8C + #$0E8D, // $0E8D + #$0E8E, // $0E8E + #$0E8F, // $0E8F + #$0E90, // $0E90 + #$0E91, // $0E91 + #$0E92, // $0E92 + #$0E93, // $0E93 + #$0E94, // $0E94 + #$0E95, // $0E95 + #$0E96, // $0E96 + #$0E97, // $0E97 + #$0E98, // $0E98 + #$0E99, // $0E99 + #$0E9A, // $0E9A + #$0E9B, // $0E9B + #$0E9C, // $0E9C + #$0E9D, // $0E9D + #$0E9E, // $0E9E + #$0E9F, // $0E9F + #$0EA0, // $0EA0 + #$0EA1, // $0EA1 + #$0EA2, // $0EA2 + #$0EA3, // $0EA3 + #$0EA4, // $0EA4 + #$0EA5, // $0EA5 + #$0EA6, // $0EA6 + #$0EA7, // $0EA7 + #$0EA8, // $0EA8 + #$0EA9, // $0EA9 + #$0EAA, // $0EAA + #$0EAB, // $0EAB + #$0EAC, // $0EAC + #$0EAD, // $0EAD + #$0EAE, // $0EAE + #$0EAF, // $0EAF + #$0EB0, // $0EB0 + #$0EB1, // $0EB1 + #$0EB2, // $0EB2 + #$0EB3, // $0EB3 + #$0EB4, // $0EB4 + #$0EB5, // $0EB5 + #$0EB6, // $0EB6 + #$0EB7, // $0EB7 + #$0EB8, // $0EB8 + #$0EB9, // $0EB9 + #$0EBA, // $0EBA + #$0EBB, // $0EBB + #$0EBC, // $0EBC + #$0EBD, // $0EBD + #$0EBE, // $0EBE + #$0EBF, // $0EBF + #$0EC0, // $0EC0 + #$0EC1, // $0EC1 + #$0EC2, // $0EC2 + #$0EC3, // $0EC3 + #$0EC4, // $0EC4 + #$0EC5, // $0EC5 + #$0EC6, // $0EC6 + #$0EC7, // $0EC7 + #$0EC8, // $0EC8 + #$0EC9, // $0EC9 + #$0ECA, // $0ECA + #$0ECB, // $0ECB + #$0ECC, // $0ECC + #$0ECD, // $0ECD + #$0ECE, // $0ECE + #$0ECF, // $0ECF + #$0ED0, // $0ED0 + #$0ED1, // $0ED1 + #$0ED2, // $0ED2 + #$0ED3, // $0ED3 + #$0ED4, // $0ED4 + #$0ED5, // $0ED5 + #$0ED6, // $0ED6 + #$0ED7, // $0ED7 + #$0ED8, // $0ED8 + #$0ED9, // $0ED9 + #$0EDA, // $0EDA + #$0EDB, // $0EDB + #$0EDC, // $0EDC + #$0EDD, // $0EDD + #$0EDE, // $0EDE + #$0EDF, // $0EDF + #$0EE0, // $0EE0 + #$0EE1, // $0EE1 + #$0EE2, // $0EE2 + #$0EE3, // $0EE3 + #$0EE4, // $0EE4 + #$0EE5, // $0EE5 + #$0EE6, // $0EE6 + #$0EE7, // $0EE7 + #$0EE8, // $0EE8 + #$0EE9, // $0EE9 + #$0EEA, // $0EEA + #$0EEB, // $0EEB + #$0EEC, // $0EEC + #$0EED, // $0EED + #$0EEE, // $0EEE + #$0EEF, // $0EEF + #$0EF0, // $0EF0 + #$0EF1, // $0EF1 + #$0EF2, // $0EF2 + #$0EF3, // $0EF3 + #$0EF4, // $0EF4 + #$0EF5, // $0EF5 + #$0EF6, // $0EF6 + #$0EF7, // $0EF7 + #$0EF8, // $0EF8 + #$0EF9, // $0EF9 + #$0EFA, // $0EFA + #$0EFB, // $0EFB + #$0EFC, // $0EFC + #$0EFD, // $0EFD + #$0EFE, // $0EFE + #$0EFF, // $0EFF + #$0F00, // $0F00 + #$0F01, // $0F01 + #$0F02, // $0F02 + #$0F03, // $0F03 + #$0F04, // $0F04 + #$0F05, // $0F05 + #$0F06, // $0F06 + #$0F07, // $0F07 + #$0F08, // $0F08 + #$0F09, // $0F09 + #$0F0A, // $0F0A + #$0F0B, // $0F0B + #$0F0C, // $0F0C + #$0F0D, // $0F0D + #$0F0E, // $0F0E + #$0F0F, // $0F0F + #$0F10, // $0F10 + #$0F11, // $0F11 + #$0F12, // $0F12 + #$0F13, // $0F13 + #$0F14, // $0F14 + #$0F15, // $0F15 + #$0F16, // $0F16 + #$0F17, // $0F17 + #$0F18, // $0F18 + #$0F19, // $0F19 + #$0F1A, // $0F1A + #$0F1B, // $0F1B + #$0F1C, // $0F1C + #$0F1D, // $0F1D + #$0F1E, // $0F1E + #$0F1F, // $0F1F + #$0F20, // $0F20 + #$0F21, // $0F21 + #$0F22, // $0F22 + #$0F23, // $0F23 + #$0F24, // $0F24 + #$0F25, // $0F25 + #$0F26, // $0F26 + #$0F27, // $0F27 + #$0F28, // $0F28 + #$0F29, // $0F29 + #$0F2A, // $0F2A + #$0F2B, // $0F2B + #$0F2C, // $0F2C + #$0F2D, // $0F2D + #$0F2E, // $0F2E + #$0F2F, // $0F2F + #$0F30, // $0F30 + #$0F31, // $0F31 + #$0F32, // $0F32 + #$0F33, // $0F33 + #$0F34, // $0F34 + #$0F35, // $0F35 + #$0F36, // $0F36 + #$0F37, // $0F37 + #$0F38, // $0F38 + #$0F39, // $0F39 + #$0F3A, // $0F3A + #$0F3B, // $0F3B + #$0F3C, // $0F3C + #$0F3D, // $0F3D + #$0F3E, // $0F3E + #$0F3F, // $0F3F + #$0F40, // $0F40 + #$0F41, // $0F41 + #$0F42, // $0F42 + #$0F43, // $0F43 + #$0F44, // $0F44 + #$0F45, // $0F45 + #$0F46, // $0F46 + #$0F47, // $0F47 + #$0F48, // $0F48 + #$0F49, // $0F49 + #$0F4A, // $0F4A + #$0F4B, // $0F4B + #$0F4C, // $0F4C + #$0F4D, // $0F4D + #$0F4E, // $0F4E + #$0F4F, // $0F4F + #$0F50, // $0F50 + #$0F51, // $0F51 + #$0F52, // $0F52 + #$0F53, // $0F53 + #$0F54, // $0F54 + #$0F55, // $0F55 + #$0F56, // $0F56 + #$0F57, // $0F57 + #$0F58, // $0F58 + #$0F59, // $0F59 + #$0F5A, // $0F5A + #$0F5B, // $0F5B + #$0F5C, // $0F5C + #$0F5D, // $0F5D + #$0F5E, // $0F5E + #$0F5F, // $0F5F + #$0F60, // $0F60 + #$0F61, // $0F61 + #$0F62, // $0F62 + #$0F63, // $0F63 + #$0F64, // $0F64 + #$0F65, // $0F65 + #$0F66, // $0F66 + #$0F67, // $0F67 + #$0F68, // $0F68 + #$0F69, // $0F69 + #$0F6A, // $0F6A + #$0F6B, // $0F6B + #$0F6C, // $0F6C + #$0F6D, // $0F6D + #$0F6E, // $0F6E + #$0F6F, // $0F6F + #$0F70, // $0F70 + #$0F71, // $0F71 + #$0F72, // $0F72 + #$0F73, // $0F73 + #$0F74, // $0F74 + #$0F75, // $0F75 + #$0F76, // $0F76 + #$0F77, // $0F77 + #$0F78, // $0F78 + #$0F79, // $0F79 + #$0F7A, // $0F7A + #$0F7B, // $0F7B + #$0F7C, // $0F7C + #$0F7D, // $0F7D + #$0F7E, // $0F7E + #$0F7F, // $0F7F + #$0F80, // $0F80 + #$0F81, // $0F81 + #$0F82, // $0F82 + #$0F83, // $0F83 + #$0F84, // $0F84 + #$0F85, // $0F85 + #$0F86, // $0F86 + #$0F87, // $0F87 + #$0F88, // $0F88 + #$0F89, // $0F89 + #$0F8A, // $0F8A + #$0F8B, // $0F8B + #$0F8C, // $0F8C + #$0F8D, // $0F8D + #$0F8E, // $0F8E + #$0F8F, // $0F8F + #$0F90, // $0F90 + #$0F91, // $0F91 + #$0F92, // $0F92 + #$0F93, // $0F93 + #$0F94, // $0F94 + #$0F95, // $0F95 + #$0F96, // $0F96 + #$0F97, // $0F97 + #$0F98, // $0F98 + #$0F99, // $0F99 + #$0F9A, // $0F9A + #$0F9B, // $0F9B + #$0F9C, // $0F9C + #$0F9D, // $0F9D + #$0F9E, // $0F9E + #$0F9F, // $0F9F + #$0FA0, // $0FA0 + #$0FA1, // $0FA1 + #$0FA2, // $0FA2 + #$0FA3, // $0FA3 + #$0FA4, // $0FA4 + #$0FA5, // $0FA5 + #$0FA6, // $0FA6 + #$0FA7, // $0FA7 + #$0FA8, // $0FA8 + #$0FA9, // $0FA9 + #$0FAA, // $0FAA + #$0FAB, // $0FAB + #$0FAC, // $0FAC + #$0FAD, // $0FAD + #$0FAE, // $0FAE + #$0FAF, // $0FAF + #$0FB0, // $0FB0 + #$0FB1, // $0FB1 + #$0FB2, // $0FB2 + #$0FB3, // $0FB3 + #$0FB4, // $0FB4 + #$0FB5, // $0FB5 + #$0FB6, // $0FB6 + #$0FB7, // $0FB7 + #$0FB8, // $0FB8 + #$0FB9, // $0FB9 + #$0FBA, // $0FBA + #$0FBB, // $0FBB + #$0FBC, // $0FBC + #$0FBD, // $0FBD + #$0FBE, // $0FBE + #$0FBF, // $0FBF + #$0FC0, // $0FC0 + #$0FC1, // $0FC1 + #$0FC2, // $0FC2 + #$0FC3, // $0FC3 + #$0FC4, // $0FC4 + #$0FC5, // $0FC5 + #$0FC6, // $0FC6 + #$0FC7, // $0FC7 + #$0FC8, // $0FC8 + #$0FC9, // $0FC9 + #$0FCA, // $0FCA + #$0FCB, // $0FCB + #$0FCC, // $0FCC + #$0FCD, // $0FCD + #$0FCE, // $0FCE + #$0FCF, // $0FCF + #$0FD0, // $0FD0 + #$0FD1, // $0FD1 + #$0FD2, // $0FD2 + #$0FD3, // $0FD3 + #$0FD4, // $0FD4 + #$0FD5, // $0FD5 + #$0FD6, // $0FD6 + #$0FD7, // $0FD7 + #$0FD8, // $0FD8 + #$0FD9, // $0FD9 + #$0FDA, // $0FDA + #$0FDB, // $0FDB + #$0FDC, // $0FDC + #$0FDD, // $0FDD + #$0FDE, // $0FDE + #$0FDF, // $0FDF + #$0FE0, // $0FE0 + #$0FE1, // $0FE1 + #$0FE2, // $0FE2 + #$0FE3, // $0FE3 + #$0FE4, // $0FE4 + #$0FE5, // $0FE5 + #$0FE6, // $0FE6 + #$0FE7, // $0FE7 + #$0FE8, // $0FE8 + #$0FE9, // $0FE9 + #$0FEA, // $0FEA + #$0FEB, // $0FEB + #$0FEC, // $0FEC + #$0FED, // $0FED + #$0FEE, // $0FEE + #$0FEF, // $0FEF + #$0FF0, // $0FF0 + #$0FF1, // $0FF1 + #$0FF2, // $0FF2 + #$0FF3, // $0FF3 + #$0FF4, // $0FF4 + #$0FF5, // $0FF5 + #$0FF6, // $0FF6 + #$0FF7, // $0FF7 + #$0FF8, // $0FF8 + #$0FF9, // $0FF9 + #$0FFA, // $0FFA + #$0FFB, // $0FFB + #$0FFC, // $0FFC + #$0FFD, // $0FFD + #$0FFE, // $0FFE + #$0FFF, // $0FFF + #$1000, // $1000 + #$1001, // $1001 + #$1002, // $1002 + #$1003, // $1003 + #$1004, // $1004 + #$1005, // $1005 + #$1006, // $1006 + #$1007, // $1007 + #$1008, // $1008 + #$1009, // $1009 + #$100A, // $100A + #$100B, // $100B + #$100C, // $100C + #$100D, // $100D + #$100E, // $100E + #$100F, // $100F + #$1010, // $1010 + #$1011, // $1011 + #$1012, // $1012 + #$1013, // $1013 + #$1014, // $1014 + #$1015, // $1015 + #$1016, // $1016 + #$1017, // $1017 + #$1018, // $1018 + #$1019, // $1019 + #$101A, // $101A + #$101B, // $101B + #$101C, // $101C + #$101D, // $101D + #$101E, // $101E + #$101F, // $101F + #$1020, // $1020 + #$1021, // $1021 + #$1022, // $1022 + #$1023, // $1023 + #$1024, // $1024 + #$1025, // $1025 + #$1026, // $1026 + #$1027, // $1027 + #$1028, // $1028 + #$1029, // $1029 + #$102A, // $102A + #$102B, // $102B + #$102C, // $102C + #$102D, // $102D + #$102E, // $102E + #$102F, // $102F + #$1030, // $1030 + #$1031, // $1031 + #$1032, // $1032 + #$1033, // $1033 + #$1034, // $1034 + #$1035, // $1035 + #$1036, // $1036 + #$1037, // $1037 + #$1038, // $1038 + #$1039, // $1039 + #$103A, // $103A + #$103B, // $103B + #$103C, // $103C + #$103D, // $103D + #$103E, // $103E + #$103F, // $103F + #$1040, // $1040 + #$1041, // $1041 + #$1042, // $1042 + #$1043, // $1043 + #$1044, // $1044 + #$1045, // $1045 + #$1046, // $1046 + #$1047, // $1047 + #$1048, // $1048 + #$1049, // $1049 + #$104A, // $104A + #$104B, // $104B + #$104C, // $104C + #$104D, // $104D + #$104E, // $104E + #$104F, // $104F + #$1050, // $1050 + #$1051, // $1051 + #$1052, // $1052 + #$1053, // $1053 + #$1054, // $1054 + #$1055, // $1055 + #$1056, // $1056 + #$1057, // $1057 + #$1058, // $1058 + #$1059, // $1059 + #$105A, // $105A + #$105B, // $105B + #$105C, // $105C + #$105D, // $105D + #$105E, // $105E + #$105F, // $105F + #$1060, // $1060 + #$1061, // $1061 + #$1062, // $1062 + #$1063, // $1063 + #$1064, // $1064 + #$1065, // $1065 + #$1066, // $1066 + #$1067, // $1067 + #$1068, // $1068 + #$1069, // $1069 + #$106A, // $106A + #$106B, // $106B + #$106C, // $106C + #$106D, // $106D + #$106E, // $106E + #$106F, // $106F + #$1070, // $1070 + #$1071, // $1071 + #$1072, // $1072 + #$1073, // $1073 + #$1074, // $1074 + #$1075, // $1075 + #$1076, // $1076 + #$1077, // $1077 + #$1078, // $1078 + #$1079, // $1079 + #$107A, // $107A + #$107B, // $107B + #$107C, // $107C + #$107D, // $107D + #$107E, // $107E + #$107F, // $107F + #$1080, // $1080 + #$1081, // $1081 + #$1082, // $1082 + #$1083, // $1083 + #$1084, // $1084 + #$1085, // $1085 + #$1086, // $1086 + #$1087, // $1087 + #$1088, // $1088 + #$1089, // $1089 + #$108A, // $108A + #$108B, // $108B + #$108C, // $108C + #$108D, // $108D + #$108E, // $108E + #$108F, // $108F + #$1090, // $1090 + #$1091, // $1091 + #$1092, // $1092 + #$1093, // $1093 + #$1094, // $1094 + #$1095, // $1095 + #$1096, // $1096 + #$1097, // $1097 + #$1098, // $1098 + #$1099, // $1099 + #$109A, // $109A + #$109B, // $109B + #$109C, // $109C + #$109D, // $109D + #$109E, // $109E + #$109F, // $109F + #$10A0, // $10A0 + #$10A1, // $10A1 + #$10A2, // $10A2 + #$10A3, // $10A3 + #$10A4, // $10A4 + #$10A5, // $10A5 + #$10A6, // $10A6 + #$10A7, // $10A7 + #$10A8, // $10A8 + #$10A9, // $10A9 + #$10AA, // $10AA + #$10AB, // $10AB + #$10AC, // $10AC + #$10AD, // $10AD + #$10AE, // $10AE + #$10AF, // $10AF + #$10B0, // $10B0 + #$10B1, // $10B1 + #$10B2, // $10B2 + #$10B3, // $10B3 + #$10B4, // $10B4 + #$10B5, // $10B5 + #$10B6, // $10B6 + #$10B7, // $10B7 + #$10B8, // $10B8 + #$10B9, // $10B9 + #$10BA, // $10BA + #$10BB, // $10BB + #$10BC, // $10BC + #$10BD, // $10BD + #$10BE, // $10BE + #$10BF, // $10BF + #$10C0, // $10C0 + #$10C1, // $10C1 + #$10C2, // $10C2 + #$10C3, // $10C3 + #$10C4, // $10C4 + #$10C5, // $10C5 + #$10C6, // $10C6 + #$10C7, // $10C7 + #$10C8, // $10C8 + #$10C9, // $10C9 + #$10CA, // $10CA + #$10CB, // $10CB + #$10CC, // $10CC + #$10CD, // $10CD + #$10CE, // $10CE + #$10CF, // $10CF + #$10D0, // $10D0 + #$10D1, // $10D1 + #$10D2, // $10D2 + #$10D3, // $10D3 + #$10D4, // $10D4 + #$10D5, // $10D5 + #$10D6, // $10D6 + #$10D7, // $10D7 + #$10D8, // $10D8 + #$10D9, // $10D9 + #$10DA, // $10DA + #$10DB, // $10DB + #$10DC, // $10DC + #$10DD, // $10DD + #$10DE, // $10DE + #$10DF, // $10DF + #$10E0, // $10E0 + #$10E1, // $10E1 + #$10E2, // $10E2 + #$10E3, // $10E3 + #$10E4, // $10E4 + #$10E5, // $10E5 + #$10E6, // $10E6 + #$10E7, // $10E7 + #$10E8, // $10E8 + #$10E9, // $10E9 + #$10EA, // $10EA + #$10EB, // $10EB + #$10EC, // $10EC + #$10ED, // $10ED + #$10EE, // $10EE + #$10EF, // $10EF + #$10F0, // $10F0 + #$10F1, // $10F1 + #$10F2, // $10F2 + #$10F3, // $10F3 + #$10F4, // $10F4 + #$10F5, // $10F5 + #$10F6, // $10F6 + #$10F7, // $10F7 + #$10F8, // $10F8 + #$10F9, // $10F9 + #$10FA, // $10FA + #$10FB, // $10FB + #$10FC, // $10FC + #$10FD, // $10FD + #$10FE, // $10FE + #$10FF, // $10FF + #$1100, // $1100 + #$1101, // $1101 + #$1102, // $1102 + #$1103, // $1103 + #$1104, // $1104 + #$1105, // $1105 + #$1106, // $1106 + #$1107, // $1107 + #$1108, // $1108 + #$1109, // $1109 + #$110A, // $110A + #$110B, // $110B + #$110C, // $110C + #$110D, // $110D + #$110E, // $110E + #$110F, // $110F + #$1110, // $1110 + #$1111, // $1111 + #$1112, // $1112 + #$1113, // $1113 + #$1114, // $1114 + #$1115, // $1115 + #$1116, // $1116 + #$1117, // $1117 + #$1118, // $1118 + #$1119, // $1119 + #$111A, // $111A + #$111B, // $111B + #$111C, // $111C + #$111D, // $111D + #$111E, // $111E + #$111F, // $111F + #$1120, // $1120 + #$1121, // $1121 + #$1122, // $1122 + #$1123, // $1123 + #$1124, // $1124 + #$1125, // $1125 + #$1126, // $1126 + #$1127, // $1127 + #$1128, // $1128 + #$1129, // $1129 + #$112A, // $112A + #$112B, // $112B + #$112C, // $112C + #$112D, // $112D + #$112E, // $112E + #$112F, // $112F + #$1130, // $1130 + #$1131, // $1131 + #$1132, // $1132 + #$1133, // $1133 + #$1134, // $1134 + #$1135, // $1135 + #$1136, // $1136 + #$1137, // $1137 + #$1138, // $1138 + #$1139, // $1139 + #$113A, // $113A + #$113B, // $113B + #$113C, // $113C + #$113D, // $113D + #$113E, // $113E + #$113F, // $113F + #$1140, // $1140 + #$1141, // $1141 + #$1142, // $1142 + #$1143, // $1143 + #$1144, // $1144 + #$1145, // $1145 + #$1146, // $1146 + #$1147, // $1147 + #$1148, // $1148 + #$1149, // $1149 + #$114A, // $114A + #$114B, // $114B + #$114C, // $114C + #$114D, // $114D + #$114E, // $114E + #$114F, // $114F + #$1150, // $1150 + #$1151, // $1151 + #$1152, // $1152 + #$1153, // $1153 + #$1154, // $1154 + #$1155, // $1155 + #$1156, // $1156 + #$1157, // $1157 + #$1158, // $1158 + #$1159, // $1159 + #$115A, // $115A + #$115B, // $115B + #$115C, // $115C + #$115D, // $115D + #$115E, // $115E + #$115F, // $115F + #$1160, // $1160 + #$1161, // $1161 + #$1162, // $1162 + #$1163, // $1163 + #$1164, // $1164 + #$1165, // $1165 + #$1166, // $1166 + #$1167, // $1167 + #$1168, // $1168 + #$1169, // $1169 + #$116A, // $116A + #$116B, // $116B + #$116C, // $116C + #$116D, // $116D + #$116E, // $116E + #$116F, // $116F + #$1170, // $1170 + #$1171, // $1171 + #$1172, // $1172 + #$1173, // $1173 + #$1174, // $1174 + #$1175, // $1175 + #$1176, // $1176 + #$1177, // $1177 + #$1178, // $1178 + #$1179, // $1179 + #$117A, // $117A + #$117B, // $117B + #$117C, // $117C + #$117D, // $117D + #$117E, // $117E + #$117F, // $117F + #$1180, // $1180 + #$1181, // $1181 + #$1182, // $1182 + #$1183, // $1183 + #$1184, // $1184 + #$1185, // $1185 + #$1186, // $1186 + #$1187, // $1187 + #$1188, // $1188 + #$1189, // $1189 + #$118A, // $118A + #$118B, // $118B + #$118C, // $118C + #$118D, // $118D + #$118E, // $118E + #$118F, // $118F + #$1190, // $1190 + #$1191, // $1191 + #$1192, // $1192 + #$1193, // $1193 + #$1194, // $1194 + #$1195, // $1195 + #$1196, // $1196 + #$1197, // $1197 + #$1198, // $1198 + #$1199, // $1199 + #$119A, // $119A + #$119B, // $119B + #$119C, // $119C + #$119D, // $119D + #$119E, // $119E + #$119F, // $119F + #$11A0, // $11A0 + #$11A1, // $11A1 + #$11A2, // $11A2 + #$11A3, // $11A3 + #$11A4, // $11A4 + #$11A5, // $11A5 + #$11A6, // $11A6 + #$11A7, // $11A7 + #$11A8, // $11A8 + #$11A9, // $11A9 + #$11AA, // $11AA + #$11AB, // $11AB + #$11AC, // $11AC + #$11AD, // $11AD + #$11AE, // $11AE + #$11AF, // $11AF + #$11B0, // $11B0 + #$11B1, // $11B1 + #$11B2, // $11B2 + #$11B3, // $11B3 + #$11B4, // $11B4 + #$11B5, // $11B5 + #$11B6, // $11B6 + #$11B7, // $11B7 + #$11B8, // $11B8 + #$11B9, // $11B9 + #$11BA, // $11BA + #$11BB, // $11BB + #$11BC, // $11BC + #$11BD, // $11BD + #$11BE, // $11BE + #$11BF, // $11BF + #$11C0, // $11C0 + #$11C1, // $11C1 + #$11C2, // $11C2 + #$11C3, // $11C3 + #$11C4, // $11C4 + #$11C5, // $11C5 + #$11C6, // $11C6 + #$11C7, // $11C7 + #$11C8, // $11C8 + #$11C9, // $11C9 + #$11CA, // $11CA + #$11CB, // $11CB + #$11CC, // $11CC + #$11CD, // $11CD + #$11CE, // $11CE + #$11CF, // $11CF + #$11D0, // $11D0 + #$11D1, // $11D1 + #$11D2, // $11D2 + #$11D3, // $11D3 + #$11D4, // $11D4 + #$11D5, // $11D5 + #$11D6, // $11D6 + #$11D7, // $11D7 + #$11D8, // $11D8 + #$11D9, // $11D9 + #$11DA, // $11DA + #$11DB, // $11DB + #$11DC, // $11DC + #$11DD, // $11DD + #$11DE, // $11DE + #$11DF, // $11DF + #$11E0, // $11E0 + #$11E1, // $11E1 + #$11E2, // $11E2 + #$11E3, // $11E3 + #$11E4, // $11E4 + #$11E5, // $11E5 + #$11E6, // $11E6 + #$11E7, // $11E7 + #$11E8, // $11E8 + #$11E9, // $11E9 + #$11EA, // $11EA + #$11EB, // $11EB + #$11EC, // $11EC + #$11ED, // $11ED + #$11EE, // $11EE + #$11EF, // $11EF + #$11F0, // $11F0 + #$11F1, // $11F1 + #$11F2, // $11F2 + #$11F3, // $11F3 + #$11F4, // $11F4 + #$11F5, // $11F5 + #$11F6, // $11F6 + #$11F7, // $11F7 + #$11F8, // $11F8 + #$11F9, // $11F9 + #$11FA, // $11FA + #$11FB, // $11FB + #$11FC, // $11FC + #$11FD, // $11FD + #$11FE, // $11FE + #$11FF, // $11FF + #$1200, // $1200 + #$1201, // $1201 + #$1202, // $1202 + #$1203, // $1203 + #$1204, // $1204 + #$1205, // $1205 + #$1206, // $1206 + #$1207, // $1207 + #$1208, // $1208 + #$1209, // $1209 + #$120A, // $120A + #$120B, // $120B + #$120C, // $120C + #$120D, // $120D + #$120E, // $120E + #$120F, // $120F + #$1210, // $1210 + #$1211, // $1211 + #$1212, // $1212 + #$1213, // $1213 + #$1214, // $1214 + #$1215, // $1215 + #$1216, // $1216 + #$1217, // $1217 + #$1218, // $1218 + #$1219, // $1219 + #$121A, // $121A + #$121B, // $121B + #$121C, // $121C + #$121D, // $121D + #$121E, // $121E + #$121F, // $121F + #$1220, // $1220 + #$1221, // $1221 + #$1222, // $1222 + #$1223, // $1223 + #$1224, // $1224 + #$1225, // $1225 + #$1226, // $1226 + #$1227, // $1227 + #$1228, // $1228 + #$1229, // $1229 + #$122A, // $122A + #$122B, // $122B + #$122C, // $122C + #$122D, // $122D + #$122E, // $122E + #$122F, // $122F + #$1230, // $1230 + #$1231, // $1231 + #$1232, // $1232 + #$1233, // $1233 + #$1234, // $1234 + #$1235, // $1235 + #$1236, // $1236 + #$1237, // $1237 + #$1238, // $1238 + #$1239, // $1239 + #$123A, // $123A + #$123B, // $123B + #$123C, // $123C + #$123D, // $123D + #$123E, // $123E + #$123F, // $123F + #$1240, // $1240 + #$1241, // $1241 + #$1242, // $1242 + #$1243, // $1243 + #$1244, // $1244 + #$1245, // $1245 + #$1246, // $1246 + #$1247, // $1247 + #$1248, // $1248 + #$1249, // $1249 + #$124A, // $124A + #$124B, // $124B + #$124C, // $124C + #$124D, // $124D + #$124E, // $124E + #$124F, // $124F + #$1250, // $1250 + #$1251, // $1251 + #$1252, // $1252 + #$1253, // $1253 + #$1254, // $1254 + #$1255, // $1255 + #$1256, // $1256 + #$1257, // $1257 + #$1258, // $1258 + #$1259, // $1259 + #$125A, // $125A + #$125B, // $125B + #$125C, // $125C + #$125D, // $125D + #$125E, // $125E + #$125F, // $125F + #$1260, // $1260 + #$1261, // $1261 + #$1262, // $1262 + #$1263, // $1263 + #$1264, // $1264 + #$1265, // $1265 + #$1266, // $1266 + #$1267, // $1267 + #$1268, // $1268 + #$1269, // $1269 + #$126A, // $126A + #$126B, // $126B + #$126C, // $126C + #$126D, // $126D + #$126E, // $126E + #$126F, // $126F + #$1270, // $1270 + #$1271, // $1271 + #$1272, // $1272 + #$1273, // $1273 + #$1274, // $1274 + #$1275, // $1275 + #$1276, // $1276 + #$1277, // $1277 + #$1278, // $1278 + #$1279, // $1279 + #$127A, // $127A + #$127B, // $127B + #$127C, // $127C + #$127D, // $127D + #$127E, // $127E + #$127F, // $127F + #$1280, // $1280 + #$1281, // $1281 + #$1282, // $1282 + #$1283, // $1283 + #$1284, // $1284 + #$1285, // $1285 + #$1286, // $1286 + #$1287, // $1287 + #$1288, // $1288 + #$1289, // $1289 + #$128A, // $128A + #$128B, // $128B + #$128C, // $128C + #$128D, // $128D + #$128E, // $128E + #$128F, // $128F + #$1290, // $1290 + #$1291, // $1291 + #$1292, // $1292 + #$1293, // $1293 + #$1294, // $1294 + #$1295, // $1295 + #$1296, // $1296 + #$1297, // $1297 + #$1298, // $1298 + #$1299, // $1299 + #$129A, // $129A + #$129B, // $129B + #$129C, // $129C + #$129D, // $129D + #$129E, // $129E + #$129F, // $129F + #$12A0, // $12A0 + #$12A1, // $12A1 + #$12A2, // $12A2 + #$12A3, // $12A3 + #$12A4, // $12A4 + #$12A5, // $12A5 + #$12A6, // $12A6 + #$12A7, // $12A7 + #$12A8, // $12A8 + #$12A9, // $12A9 + #$12AA, // $12AA + #$12AB, // $12AB + #$12AC, // $12AC + #$12AD, // $12AD + #$12AE, // $12AE + #$12AF, // $12AF + #$12B0, // $12B0 + #$12B1, // $12B1 + #$12B2, // $12B2 + #$12B3, // $12B3 + #$12B4, // $12B4 + #$12B5, // $12B5 + #$12B6, // $12B6 + #$12B7, // $12B7 + #$12B8, // $12B8 + #$12B9, // $12B9 + #$12BA, // $12BA + #$12BB, // $12BB + #$12BC, // $12BC + #$12BD, // $12BD + #$12BE, // $12BE + #$12BF, // $12BF + #$12C0, // $12C0 + #$12C1, // $12C1 + #$12C2, // $12C2 + #$12C3, // $12C3 + #$12C4, // $12C4 + #$12C5, // $12C5 + #$12C6, // $12C6 + #$12C7, // $12C7 + #$12C8, // $12C8 + #$12C9, // $12C9 + #$12CA, // $12CA + #$12CB, // $12CB + #$12CC, // $12CC + #$12CD, // $12CD + #$12CE, // $12CE + #$12CF, // $12CF + #$12D0, // $12D0 + #$12D1, // $12D1 + #$12D2, // $12D2 + #$12D3, // $12D3 + #$12D4, // $12D4 + #$12D5, // $12D5 + #$12D6, // $12D6 + #$12D7, // $12D7 + #$12D8, // $12D8 + #$12D9, // $12D9 + #$12DA, // $12DA + #$12DB, // $12DB + #$12DC, // $12DC + #$12DD, // $12DD + #$12DE, // $12DE + #$12DF, // $12DF + #$12E0, // $12E0 + #$12E1, // $12E1 + #$12E2, // $12E2 + #$12E3, // $12E3 + #$12E4, // $12E4 + #$12E5, // $12E5 + #$12E6, // $12E6 + #$12E7, // $12E7 + #$12E8, // $12E8 + #$12E9, // $12E9 + #$12EA, // $12EA + #$12EB, // $12EB + #$12EC, // $12EC + #$12ED, // $12ED + #$12EE, // $12EE + #$12EF, // $12EF + #$12F0, // $12F0 + #$12F1, // $12F1 + #$12F2, // $12F2 + #$12F3, // $12F3 + #$12F4, // $12F4 + #$12F5, // $12F5 + #$12F6, // $12F6 + #$12F7, // $12F7 + #$12F8, // $12F8 + #$12F9, // $12F9 + #$12FA, // $12FA + #$12FB, // $12FB + #$12FC, // $12FC + #$12FD, // $12FD + #$12FE, // $12FE + #$12FF, // $12FF + #$1300, // $1300 + #$1301, // $1301 + #$1302, // $1302 + #$1303, // $1303 + #$1304, // $1304 + #$1305, // $1305 + #$1306, // $1306 + #$1307, // $1307 + #$1308, // $1308 + #$1309, // $1309 + #$130A, // $130A + #$130B, // $130B + #$130C, // $130C + #$130D, // $130D + #$130E, // $130E + #$130F, // $130F + #$1310, // $1310 + #$1311, // $1311 + #$1312, // $1312 + #$1313, // $1313 + #$1314, // $1314 + #$1315, // $1315 + #$1316, // $1316 + #$1317, // $1317 + #$1318, // $1318 + #$1319, // $1319 + #$131A, // $131A + #$131B, // $131B + #$131C, // $131C + #$131D, // $131D + #$131E, // $131E + #$131F, // $131F + #$1320, // $1320 + #$1321, // $1321 + #$1322, // $1322 + #$1323, // $1323 + #$1324, // $1324 + #$1325, // $1325 + #$1326, // $1326 + #$1327, // $1327 + #$1328, // $1328 + #$1329, // $1329 + #$132A, // $132A + #$132B, // $132B + #$132C, // $132C + #$132D, // $132D + #$132E, // $132E + #$132F, // $132F + #$1330, // $1330 + #$1331, // $1331 + #$1332, // $1332 + #$1333, // $1333 + #$1334, // $1334 + #$1335, // $1335 + #$1336, // $1336 + #$1337, // $1337 + #$1338, // $1338 + #$1339, // $1339 + #$133A, // $133A + #$133B, // $133B + #$133C, // $133C + #$133D, // $133D + #$133E, // $133E + #$133F, // $133F + #$1340, // $1340 + #$1341, // $1341 + #$1342, // $1342 + #$1343, // $1343 + #$1344, // $1344 + #$1345, // $1345 + #$1346, // $1346 + #$1347, // $1347 + #$1348, // $1348 + #$1349, // $1349 + #$134A, // $134A + #$134B, // $134B + #$134C, // $134C + #$134D, // $134D + #$134E, // $134E + #$134F, // $134F + #$1350, // $1350 + #$1351, // $1351 + #$1352, // $1352 + #$1353, // $1353 + #$1354, // $1354 + #$1355, // $1355 + #$1356, // $1356 + #$1357, // $1357 + #$1358, // $1358 + #$1359, // $1359 + #$135A, // $135A + #$135B, // $135B + #$135C, // $135C + #$135D, // $135D + #$135E, // $135E + #$135F, // $135F + #$1360, // $1360 + #$1361, // $1361 + #$1362, // $1362 + #$1363, // $1363 + #$1364, // $1364 + #$1365, // $1365 + #$1366, // $1366 + #$1367, // $1367 + #$1368, // $1368 + #$1369, // $1369 + #$136A, // $136A + #$136B, // $136B + #$136C, // $136C + #$136D, // $136D + #$136E, // $136E + #$136F, // $136F + #$1370, // $1370 + #$1371, // $1371 + #$1372, // $1372 + #$1373, // $1373 + #$1374, // $1374 + #$1375, // $1375 + #$1376, // $1376 + #$1377, // $1377 + #$1378, // $1378 + #$1379, // $1379 + #$137A, // $137A + #$137B, // $137B + #$137C, // $137C + #$137D, // $137D + #$137E, // $137E + #$137F, // $137F + #$1380, // $1380 + #$1381, // $1381 + #$1382, // $1382 + #$1383, // $1383 + #$1384, // $1384 + #$1385, // $1385 + #$1386, // $1386 + #$1387, // $1387 + #$1388, // $1388 + #$1389, // $1389 + #$138A, // $138A + #$138B, // $138B + #$138C, // $138C + #$138D, // $138D + #$138E, // $138E + #$138F, // $138F + #$1390, // $1390 + #$1391, // $1391 + #$1392, // $1392 + #$1393, // $1393 + #$1394, // $1394 + #$1395, // $1395 + #$1396, // $1396 + #$1397, // $1397 + #$1398, // $1398 + #$1399, // $1399 + #$139A, // $139A + #$139B, // $139B + #$139C, // $139C + #$139D, // $139D + #$139E, // $139E + #$139F, // $139F + #$13A0, // $13A0 + #$13A1, // $13A1 + #$13A2, // $13A2 + #$13A3, // $13A3 + #$13A4, // $13A4 + #$13A5, // $13A5 + #$13A6, // $13A6 + #$13A7, // $13A7 + #$13A8, // $13A8 + #$13A9, // $13A9 + #$13AA, // $13AA + #$13AB, // $13AB + #$13AC, // $13AC + #$13AD, // $13AD + #$13AE, // $13AE + #$13AF, // $13AF + #$13B0, // $13B0 + #$13B1, // $13B1 + #$13B2, // $13B2 + #$13B3, // $13B3 + #$13B4, // $13B4 + #$13B5, // $13B5 + #$13B6, // $13B6 + #$13B7, // $13B7 + #$13B8, // $13B8 + #$13B9, // $13B9 + #$13BA, // $13BA + #$13BB, // $13BB + #$13BC, // $13BC + #$13BD, // $13BD + #$13BE, // $13BE + #$13BF, // $13BF + #$13C0, // $13C0 + #$13C1, // $13C1 + #$13C2, // $13C2 + #$13C3, // $13C3 + #$13C4, // $13C4 + #$13C5, // $13C5 + #$13C6, // $13C6 + #$13C7, // $13C7 + #$13C8, // $13C8 + #$13C9, // $13C9 + #$13CA, // $13CA + #$13CB, // $13CB + #$13CC, // $13CC + #$13CD, // $13CD + #$13CE, // $13CE + #$13CF, // $13CF + #$13D0, // $13D0 + #$13D1, // $13D1 + #$13D2, // $13D2 + #$13D3, // $13D3 + #$13D4, // $13D4 + #$13D5, // $13D5 + #$13D6, // $13D6 + #$13D7, // $13D7 + #$13D8, // $13D8 + #$13D9, // $13D9 + #$13DA, // $13DA + #$13DB, // $13DB + #$13DC, // $13DC + #$13DD, // $13DD + #$13DE, // $13DE + #$13DF, // $13DF + #$13E0, // $13E0 + #$13E1, // $13E1 + #$13E2, // $13E2 + #$13E3, // $13E3 + #$13E4, // $13E4 + #$13E5, // $13E5 + #$13E6, // $13E6 + #$13E7, // $13E7 + #$13E8, // $13E8 + #$13E9, // $13E9 + #$13EA, // $13EA + #$13EB, // $13EB + #$13EC, // $13EC + #$13ED, // $13ED + #$13EE, // $13EE + #$13EF, // $13EF + #$13F0, // $13F0 + #$13F1, // $13F1 + #$13F2, // $13F2 + #$13F3, // $13F3 + #$13F4, // $13F4 + #$13F5, // $13F5 + #$13F6, // $13F6 + #$13F7, // $13F7 + #$13F0, // $13F8 + #$13F1, // $13F9 + #$13F2, // $13FA + #$13F3, // $13FB + #$13F4, // $13FC + #$13F5, // $13FD + #$13FE, // $13FE + #$13FF, // $13FF + #$1400, // $1400 + #$1401, // $1401 + #$1402, // $1402 + #$1403, // $1403 + #$1404, // $1404 + #$1405, // $1405 + #$1406, // $1406 + #$1407, // $1407 + #$1408, // $1408 + #$1409, // $1409 + #$140A, // $140A + #$140B, // $140B + #$140C, // $140C + #$140D, // $140D + #$140E, // $140E + #$140F, // $140F + #$1410, // $1410 + #$1411, // $1411 + #$1412, // $1412 + #$1413, // $1413 + #$1414, // $1414 + #$1415, // $1415 + #$1416, // $1416 + #$1417, // $1417 + #$1418, // $1418 + #$1419, // $1419 + #$141A, // $141A + #$141B, // $141B + #$141C, // $141C + #$141D, // $141D + #$141E, // $141E + #$141F, // $141F + #$1420, // $1420 + #$1421, // $1421 + #$1422, // $1422 + #$1423, // $1423 + #$1424, // $1424 + #$1425, // $1425 + #$1426, // $1426 + #$1427, // $1427 + #$1428, // $1428 + #$1429, // $1429 + #$142A, // $142A + #$142B, // $142B + #$142C, // $142C + #$142D, // $142D + #$142E, // $142E + #$142F, // $142F + #$1430, // $1430 + #$1431, // $1431 + #$1432, // $1432 + #$1433, // $1433 + #$1434, // $1434 + #$1435, // $1435 + #$1436, // $1436 + #$1437, // $1437 + #$1438, // $1438 + #$1439, // $1439 + #$143A, // $143A + #$143B, // $143B + #$143C, // $143C + #$143D, // $143D + #$143E, // $143E + #$143F, // $143F + #$1440, // $1440 + #$1441, // $1441 + #$1442, // $1442 + #$1443, // $1443 + #$1444, // $1444 + #$1445, // $1445 + #$1446, // $1446 + #$1447, // $1447 + #$1448, // $1448 + #$1449, // $1449 + #$144A, // $144A + #$144B, // $144B + #$144C, // $144C + #$144D, // $144D + #$144E, // $144E + #$144F, // $144F + #$1450, // $1450 + #$1451, // $1451 + #$1452, // $1452 + #$1453, // $1453 + #$1454, // $1454 + #$1455, // $1455 + #$1456, // $1456 + #$1457, // $1457 + #$1458, // $1458 + #$1459, // $1459 + #$145A, // $145A + #$145B, // $145B + #$145C, // $145C + #$145D, // $145D + #$145E, // $145E + #$145F, // $145F + #$1460, // $1460 + #$1461, // $1461 + #$1462, // $1462 + #$1463, // $1463 + #$1464, // $1464 + #$1465, // $1465 + #$1466, // $1466 + #$1467, // $1467 + #$1468, // $1468 + #$1469, // $1469 + #$146A, // $146A + #$146B, // $146B + #$146C, // $146C + #$146D, // $146D + #$146E, // $146E + #$146F, // $146F + #$1470, // $1470 + #$1471, // $1471 + #$1472, // $1472 + #$1473, // $1473 + #$1474, // $1474 + #$1475, // $1475 + #$1476, // $1476 + #$1477, // $1477 + #$1478, // $1478 + #$1479, // $1479 + #$147A, // $147A + #$147B, // $147B + #$147C, // $147C + #$147D, // $147D + #$147E, // $147E + #$147F, // $147F + #$1480, // $1480 + #$1481, // $1481 + #$1482, // $1482 + #$1483, // $1483 + #$1484, // $1484 + #$1485, // $1485 + #$1486, // $1486 + #$1487, // $1487 + #$1488, // $1488 + #$1489, // $1489 + #$148A, // $148A + #$148B, // $148B + #$148C, // $148C + #$148D, // $148D + #$148E, // $148E + #$148F, // $148F + #$1490, // $1490 + #$1491, // $1491 + #$1492, // $1492 + #$1493, // $1493 + #$1494, // $1494 + #$1495, // $1495 + #$1496, // $1496 + #$1497, // $1497 + #$1498, // $1498 + #$1499, // $1499 + #$149A, // $149A + #$149B, // $149B + #$149C, // $149C + #$149D, // $149D + #$149E, // $149E + #$149F, // $149F + #$14A0, // $14A0 + #$14A1, // $14A1 + #$14A2, // $14A2 + #$14A3, // $14A3 + #$14A4, // $14A4 + #$14A5, // $14A5 + #$14A6, // $14A6 + #$14A7, // $14A7 + #$14A8, // $14A8 + #$14A9, // $14A9 + #$14AA, // $14AA + #$14AB, // $14AB + #$14AC, // $14AC + #$14AD, // $14AD + #$14AE, // $14AE + #$14AF, // $14AF + #$14B0, // $14B0 + #$14B1, // $14B1 + #$14B2, // $14B2 + #$14B3, // $14B3 + #$14B4, // $14B4 + #$14B5, // $14B5 + #$14B6, // $14B6 + #$14B7, // $14B7 + #$14B8, // $14B8 + #$14B9, // $14B9 + #$14BA, // $14BA + #$14BB, // $14BB + #$14BC, // $14BC + #$14BD, // $14BD + #$14BE, // $14BE + #$14BF, // $14BF + #$14C0, // $14C0 + #$14C1, // $14C1 + #$14C2, // $14C2 + #$14C3, // $14C3 + #$14C4, // $14C4 + #$14C5, // $14C5 + #$14C6, // $14C6 + #$14C7, // $14C7 + #$14C8, // $14C8 + #$14C9, // $14C9 + #$14CA, // $14CA + #$14CB, // $14CB + #$14CC, // $14CC + #$14CD, // $14CD + #$14CE, // $14CE + #$14CF, // $14CF + #$14D0, // $14D0 + #$14D1, // $14D1 + #$14D2, // $14D2 + #$14D3, // $14D3 + #$14D4, // $14D4 + #$14D5, // $14D5 + #$14D6, // $14D6 + #$14D7, // $14D7 + #$14D8, // $14D8 + #$14D9, // $14D9 + #$14DA, // $14DA + #$14DB, // $14DB + #$14DC, // $14DC + #$14DD, // $14DD + #$14DE, // $14DE + #$14DF, // $14DF + #$14E0, // $14E0 + #$14E1, // $14E1 + #$14E2, // $14E2 + #$14E3, // $14E3 + #$14E4, // $14E4 + #$14E5, // $14E5 + #$14E6, // $14E6 + #$14E7, // $14E7 + #$14E8, // $14E8 + #$14E9, // $14E9 + #$14EA, // $14EA + #$14EB, // $14EB + #$14EC, // $14EC + #$14ED, // $14ED + #$14EE, // $14EE + #$14EF, // $14EF + #$14F0, // $14F0 + #$14F1, // $14F1 + #$14F2, // $14F2 + #$14F3, // $14F3 + #$14F4, // $14F4 + #$14F5, // $14F5 + #$14F6, // $14F6 + #$14F7, // $14F7 + #$14F8, // $14F8 + #$14F9, // $14F9 + #$14FA, // $14FA + #$14FB, // $14FB + #$14FC, // $14FC + #$14FD, // $14FD + #$14FE, // $14FE + #$14FF, // $14FF + #$1500, // $1500 + #$1501, // $1501 + #$1502, // $1502 + #$1503, // $1503 + #$1504, // $1504 + #$1505, // $1505 + #$1506, // $1506 + #$1507, // $1507 + #$1508, // $1508 + #$1509, // $1509 + #$150A, // $150A + #$150B, // $150B + #$150C, // $150C + #$150D, // $150D + #$150E, // $150E + #$150F, // $150F + #$1510, // $1510 + #$1511, // $1511 + #$1512, // $1512 + #$1513, // $1513 + #$1514, // $1514 + #$1515, // $1515 + #$1516, // $1516 + #$1517, // $1517 + #$1518, // $1518 + #$1519, // $1519 + #$151A, // $151A + #$151B, // $151B + #$151C, // $151C + #$151D, // $151D + #$151E, // $151E + #$151F, // $151F + #$1520, // $1520 + #$1521, // $1521 + #$1522, // $1522 + #$1523, // $1523 + #$1524, // $1524 + #$1525, // $1525 + #$1526, // $1526 + #$1527, // $1527 + #$1528, // $1528 + #$1529, // $1529 + #$152A, // $152A + #$152B, // $152B + #$152C, // $152C + #$152D, // $152D + #$152E, // $152E + #$152F, // $152F + #$1530, // $1530 + #$1531, // $1531 + #$1532, // $1532 + #$1533, // $1533 + #$1534, // $1534 + #$1535, // $1535 + #$1536, // $1536 + #$1537, // $1537 + #$1538, // $1538 + #$1539, // $1539 + #$153A, // $153A + #$153B, // $153B + #$153C, // $153C + #$153D, // $153D + #$153E, // $153E + #$153F, // $153F + #$1540, // $1540 + #$1541, // $1541 + #$1542, // $1542 + #$1543, // $1543 + #$1544, // $1544 + #$1545, // $1545 + #$1546, // $1546 + #$1547, // $1547 + #$1548, // $1548 + #$1549, // $1549 + #$154A, // $154A + #$154B, // $154B + #$154C, // $154C + #$154D, // $154D + #$154E, // $154E + #$154F, // $154F + #$1550, // $1550 + #$1551, // $1551 + #$1552, // $1552 + #$1553, // $1553 + #$1554, // $1554 + #$1555, // $1555 + #$1556, // $1556 + #$1557, // $1557 + #$1558, // $1558 + #$1559, // $1559 + #$155A, // $155A + #$155B, // $155B + #$155C, // $155C + #$155D, // $155D + #$155E, // $155E + #$155F, // $155F + #$1560, // $1560 + #$1561, // $1561 + #$1562, // $1562 + #$1563, // $1563 + #$1564, // $1564 + #$1565, // $1565 + #$1566, // $1566 + #$1567, // $1567 + #$1568, // $1568 + #$1569, // $1569 + #$156A, // $156A + #$156B, // $156B + #$156C, // $156C + #$156D, // $156D + #$156E, // $156E + #$156F, // $156F + #$1570, // $1570 + #$1571, // $1571 + #$1572, // $1572 + #$1573, // $1573 + #$1574, // $1574 + #$1575, // $1575 + #$1576, // $1576 + #$1577, // $1577 + #$1578, // $1578 + #$1579, // $1579 + #$157A, // $157A + #$157B, // $157B + #$157C, // $157C + #$157D, // $157D + #$157E, // $157E + #$157F, // $157F + #$1580, // $1580 + #$1581, // $1581 + #$1582, // $1582 + #$1583, // $1583 + #$1584, // $1584 + #$1585, // $1585 + #$1586, // $1586 + #$1587, // $1587 + #$1588, // $1588 + #$1589, // $1589 + #$158A, // $158A + #$158B, // $158B + #$158C, // $158C + #$158D, // $158D + #$158E, // $158E + #$158F, // $158F + #$1590, // $1590 + #$1591, // $1591 + #$1592, // $1592 + #$1593, // $1593 + #$1594, // $1594 + #$1595, // $1595 + #$1596, // $1596 + #$1597, // $1597 + #$1598, // $1598 + #$1599, // $1599 + #$159A, // $159A + #$159B, // $159B + #$159C, // $159C + #$159D, // $159D + #$159E, // $159E + #$159F, // $159F + #$15A0, // $15A0 + #$15A1, // $15A1 + #$15A2, // $15A2 + #$15A3, // $15A3 + #$15A4, // $15A4 + #$15A5, // $15A5 + #$15A6, // $15A6 + #$15A7, // $15A7 + #$15A8, // $15A8 + #$15A9, // $15A9 + #$15AA, // $15AA + #$15AB, // $15AB + #$15AC, // $15AC + #$15AD, // $15AD + #$15AE, // $15AE + #$15AF, // $15AF + #$15B0, // $15B0 + #$15B1, // $15B1 + #$15B2, // $15B2 + #$15B3, // $15B3 + #$15B4, // $15B4 + #$15B5, // $15B5 + #$15B6, // $15B6 + #$15B7, // $15B7 + #$15B8, // $15B8 + #$15B9, // $15B9 + #$15BA, // $15BA + #$15BB, // $15BB + #$15BC, // $15BC + #$15BD, // $15BD + #$15BE, // $15BE + #$15BF, // $15BF + #$15C0, // $15C0 + #$15C1, // $15C1 + #$15C2, // $15C2 + #$15C3, // $15C3 + #$15C4, // $15C4 + #$15C5, // $15C5 + #$15C6, // $15C6 + #$15C7, // $15C7 + #$15C8, // $15C8 + #$15C9, // $15C9 + #$15CA, // $15CA + #$15CB, // $15CB + #$15CC, // $15CC + #$15CD, // $15CD + #$15CE, // $15CE + #$15CF, // $15CF + #$15D0, // $15D0 + #$15D1, // $15D1 + #$15D2, // $15D2 + #$15D3, // $15D3 + #$15D4, // $15D4 + #$15D5, // $15D5 + #$15D6, // $15D6 + #$15D7, // $15D7 + #$15D8, // $15D8 + #$15D9, // $15D9 + #$15DA, // $15DA + #$15DB, // $15DB + #$15DC, // $15DC + #$15DD, // $15DD + #$15DE, // $15DE + #$15DF, // $15DF + #$15E0, // $15E0 + #$15E1, // $15E1 + #$15E2, // $15E2 + #$15E3, // $15E3 + #$15E4, // $15E4 + #$15E5, // $15E5 + #$15E6, // $15E6 + #$15E7, // $15E7 + #$15E8, // $15E8 + #$15E9, // $15E9 + #$15EA, // $15EA + #$15EB, // $15EB + #$15EC, // $15EC + #$15ED, // $15ED + #$15EE, // $15EE + #$15EF, // $15EF + #$15F0, // $15F0 + #$15F1, // $15F1 + #$15F2, // $15F2 + #$15F3, // $15F3 + #$15F4, // $15F4 + #$15F5, // $15F5 + #$15F6, // $15F6 + #$15F7, // $15F7 + #$15F8, // $15F8 + #$15F9, // $15F9 + #$15FA, // $15FA + #$15FB, // $15FB + #$15FC, // $15FC + #$15FD, // $15FD + #$15FE, // $15FE + #$15FF, // $15FF + #$1600, // $1600 + #$1601, // $1601 + #$1602, // $1602 + #$1603, // $1603 + #$1604, // $1604 + #$1605, // $1605 + #$1606, // $1606 + #$1607, // $1607 + #$1608, // $1608 + #$1609, // $1609 + #$160A, // $160A + #$160B, // $160B + #$160C, // $160C + #$160D, // $160D + #$160E, // $160E + #$160F, // $160F + #$1610, // $1610 + #$1611, // $1611 + #$1612, // $1612 + #$1613, // $1613 + #$1614, // $1614 + #$1615, // $1615 + #$1616, // $1616 + #$1617, // $1617 + #$1618, // $1618 + #$1619, // $1619 + #$161A, // $161A + #$161B, // $161B + #$161C, // $161C + #$161D, // $161D + #$161E, // $161E + #$161F, // $161F + #$1620, // $1620 + #$1621, // $1621 + #$1622, // $1622 + #$1623, // $1623 + #$1624, // $1624 + #$1625, // $1625 + #$1626, // $1626 + #$1627, // $1627 + #$1628, // $1628 + #$1629, // $1629 + #$162A, // $162A + #$162B, // $162B + #$162C, // $162C + #$162D, // $162D + #$162E, // $162E + #$162F, // $162F + #$1630, // $1630 + #$1631, // $1631 + #$1632, // $1632 + #$1633, // $1633 + #$1634, // $1634 + #$1635, // $1635 + #$1636, // $1636 + #$1637, // $1637 + #$1638, // $1638 + #$1639, // $1639 + #$163A, // $163A + #$163B, // $163B + #$163C, // $163C + #$163D, // $163D + #$163E, // $163E + #$163F, // $163F + #$1640, // $1640 + #$1641, // $1641 + #$1642, // $1642 + #$1643, // $1643 + #$1644, // $1644 + #$1645, // $1645 + #$1646, // $1646 + #$1647, // $1647 + #$1648, // $1648 + #$1649, // $1649 + #$164A, // $164A + #$164B, // $164B + #$164C, // $164C + #$164D, // $164D + #$164E, // $164E + #$164F, // $164F + #$1650, // $1650 + #$1651, // $1651 + #$1652, // $1652 + #$1653, // $1653 + #$1654, // $1654 + #$1655, // $1655 + #$1656, // $1656 + #$1657, // $1657 + #$1658, // $1658 + #$1659, // $1659 + #$165A, // $165A + #$165B, // $165B + #$165C, // $165C + #$165D, // $165D + #$165E, // $165E + #$165F, // $165F + #$1660, // $1660 + #$1661, // $1661 + #$1662, // $1662 + #$1663, // $1663 + #$1664, // $1664 + #$1665, // $1665 + #$1666, // $1666 + #$1667, // $1667 + #$1668, // $1668 + #$1669, // $1669 + #$166A, // $166A + #$166B, // $166B + #$166C, // $166C + #$166D, // $166D + #$166E, // $166E + #$166F, // $166F + #$1670, // $1670 + #$1671, // $1671 + #$1672, // $1672 + #$1673, // $1673 + #$1674, // $1674 + #$1675, // $1675 + #$1676, // $1676 + #$1677, // $1677 + #$1678, // $1678 + #$1679, // $1679 + #$167A, // $167A + #$167B, // $167B + #$167C, // $167C + #$167D, // $167D + #$167E, // $167E + #$167F, // $167F + #$1680, // $1680 + #$1681, // $1681 + #$1682, // $1682 + #$1683, // $1683 + #$1684, // $1684 + #$1685, // $1685 + #$1686, // $1686 + #$1687, // $1687 + #$1688, // $1688 + #$1689, // $1689 + #$168A, // $168A + #$168B, // $168B + #$168C, // $168C + #$168D, // $168D + #$168E, // $168E + #$168F, // $168F + #$1690, // $1690 + #$1691, // $1691 + #$1692, // $1692 + #$1693, // $1693 + #$1694, // $1694 + #$1695, // $1695 + #$1696, // $1696 + #$1697, // $1697 + #$1698, // $1698 + #$1699, // $1699 + #$169A, // $169A + #$169B, // $169B + #$169C, // $169C + #$169D, // $169D + #$169E, // $169E + #$169F, // $169F + #$16A0, // $16A0 + #$16A1, // $16A1 + #$16A2, // $16A2 + #$16A3, // $16A3 + #$16A4, // $16A4 + #$16A5, // $16A5 + #$16A6, // $16A6 + #$16A7, // $16A7 + #$16A8, // $16A8 + #$16A9, // $16A9 + #$16AA, // $16AA + #$16AB, // $16AB + #$16AC, // $16AC + #$16AD, // $16AD + #$16AE, // $16AE + #$16AF, // $16AF + #$16B0, // $16B0 + #$16B1, // $16B1 + #$16B2, // $16B2 + #$16B3, // $16B3 + #$16B4, // $16B4 + #$16B5, // $16B5 + #$16B6, // $16B6 + #$16B7, // $16B7 + #$16B8, // $16B8 + #$16B9, // $16B9 + #$16BA, // $16BA + #$16BB, // $16BB + #$16BC, // $16BC + #$16BD, // $16BD + #$16BE, // $16BE + #$16BF, // $16BF + #$16C0, // $16C0 + #$16C1, // $16C1 + #$16C2, // $16C2 + #$16C3, // $16C3 + #$16C4, // $16C4 + #$16C5, // $16C5 + #$16C6, // $16C6 + #$16C7, // $16C7 + #$16C8, // $16C8 + #$16C9, // $16C9 + #$16CA, // $16CA + #$16CB, // $16CB + #$16CC, // $16CC + #$16CD, // $16CD + #$16CE, // $16CE + #$16CF, // $16CF + #$16D0, // $16D0 + #$16D1, // $16D1 + #$16D2, // $16D2 + #$16D3, // $16D3 + #$16D4, // $16D4 + #$16D5, // $16D5 + #$16D6, // $16D6 + #$16D7, // $16D7 + #$16D8, // $16D8 + #$16D9, // $16D9 + #$16DA, // $16DA + #$16DB, // $16DB + #$16DC, // $16DC + #$16DD, // $16DD + #$16DE, // $16DE + #$16DF, // $16DF + #$16E0, // $16E0 + #$16E1, // $16E1 + #$16E2, // $16E2 + #$16E3, // $16E3 + #$16E4, // $16E4 + #$16E5, // $16E5 + #$16E6, // $16E6 + #$16E7, // $16E7 + #$16E8, // $16E8 + #$16E9, // $16E9 + #$16EA, // $16EA + #$16EB, // $16EB + #$16EC, // $16EC + #$16ED, // $16ED + #$16EE, // $16EE + #$16EF, // $16EF + #$16F0, // $16F0 + #$16F1, // $16F1 + #$16F2, // $16F2 + #$16F3, // $16F3 + #$16F4, // $16F4 + #$16F5, // $16F5 + #$16F6, // $16F6 + #$16F7, // $16F7 + #$16F8, // $16F8 + #$16F9, // $16F9 + #$16FA, // $16FA + #$16FB, // $16FB + #$16FC, // $16FC + #$16FD, // $16FD + #$16FE, // $16FE + #$16FF, // $16FF + #$1700, // $1700 + #$1701, // $1701 + #$1702, // $1702 + #$1703, // $1703 + #$1704, // $1704 + #$1705, // $1705 + #$1706, // $1706 + #$1707, // $1707 + #$1708, // $1708 + #$1709, // $1709 + #$170A, // $170A + #$170B, // $170B + #$170C, // $170C + #$170D, // $170D + #$170E, // $170E + #$170F, // $170F + #$1710, // $1710 + #$1711, // $1711 + #$1712, // $1712 + #$1713, // $1713 + #$1714, // $1714 + #$1715, // $1715 + #$1716, // $1716 + #$1717, // $1717 + #$1718, // $1718 + #$1719, // $1719 + #$171A, // $171A + #$171B, // $171B + #$171C, // $171C + #$171D, // $171D + #$171E, // $171E + #$171F, // $171F + #$1720, // $1720 + #$1721, // $1721 + #$1722, // $1722 + #$1723, // $1723 + #$1724, // $1724 + #$1725, // $1725 + #$1726, // $1726 + #$1727, // $1727 + #$1728, // $1728 + #$1729, // $1729 + #$172A, // $172A + #$172B, // $172B + #$172C, // $172C + #$172D, // $172D + #$172E, // $172E + #$172F, // $172F + #$1730, // $1730 + #$1731, // $1731 + #$1732, // $1732 + #$1733, // $1733 + #$1734, // $1734 + #$1735, // $1735 + #$1736, // $1736 + #$1737, // $1737 + #$1738, // $1738 + #$1739, // $1739 + #$173A, // $173A + #$173B, // $173B + #$173C, // $173C + #$173D, // $173D + #$173E, // $173E + #$173F, // $173F + #$1740, // $1740 + #$1741, // $1741 + #$1742, // $1742 + #$1743, // $1743 + #$1744, // $1744 + #$1745, // $1745 + #$1746, // $1746 + #$1747, // $1747 + #$1748, // $1748 + #$1749, // $1749 + #$174A, // $174A + #$174B, // $174B + #$174C, // $174C + #$174D, // $174D + #$174E, // $174E + #$174F, // $174F + #$1750, // $1750 + #$1751, // $1751 + #$1752, // $1752 + #$1753, // $1753 + #$1754, // $1754 + #$1755, // $1755 + #$1756, // $1756 + #$1757, // $1757 + #$1758, // $1758 + #$1759, // $1759 + #$175A, // $175A + #$175B, // $175B + #$175C, // $175C + #$175D, // $175D + #$175E, // $175E + #$175F, // $175F + #$1760, // $1760 + #$1761, // $1761 + #$1762, // $1762 + #$1763, // $1763 + #$1764, // $1764 + #$1765, // $1765 + #$1766, // $1766 + #$1767, // $1767 + #$1768, // $1768 + #$1769, // $1769 + #$176A, // $176A + #$176B, // $176B + #$176C, // $176C + #$176D, // $176D + #$176E, // $176E + #$176F, // $176F + #$1770, // $1770 + #$1771, // $1771 + #$1772, // $1772 + #$1773, // $1773 + #$1774, // $1774 + #$1775, // $1775 + #$1776, // $1776 + #$1777, // $1777 + #$1778, // $1778 + #$1779, // $1779 + #$177A, // $177A + #$177B, // $177B + #$177C, // $177C + #$177D, // $177D + #$177E, // $177E + #$177F, // $177F + #$1780, // $1780 + #$1781, // $1781 + #$1782, // $1782 + #$1783, // $1783 + #$1784, // $1784 + #$1785, // $1785 + #$1786, // $1786 + #$1787, // $1787 + #$1788, // $1788 + #$1789, // $1789 + #$178A, // $178A + #$178B, // $178B + #$178C, // $178C + #$178D, // $178D + #$178E, // $178E + #$178F, // $178F + #$1790, // $1790 + #$1791, // $1791 + #$1792, // $1792 + #$1793, // $1793 + #$1794, // $1794 + #$1795, // $1795 + #$1796, // $1796 + #$1797, // $1797 + #$1798, // $1798 + #$1799, // $1799 + #$179A, // $179A + #$179B, // $179B + #$179C, // $179C + #$179D, // $179D + #$179E, // $179E + #$179F, // $179F + #$17A0, // $17A0 + #$17A1, // $17A1 + #$17A2, // $17A2 + #$17A3, // $17A3 + #$17A4, // $17A4 + #$17A5, // $17A5 + #$17A6, // $17A6 + #$17A7, // $17A7 + #$17A8, // $17A8 + #$17A9, // $17A9 + #$17AA, // $17AA + #$17AB, // $17AB + #$17AC, // $17AC + #$17AD, // $17AD + #$17AE, // $17AE + #$17AF, // $17AF + #$17B0, // $17B0 + #$17B1, // $17B1 + #$17B2, // $17B2 + #$17B3, // $17B3 + #$17B4, // $17B4 + #$17B5, // $17B5 + #$17B6, // $17B6 + #$17B7, // $17B7 + #$17B8, // $17B8 + #$17B9, // $17B9 + #$17BA, // $17BA + #$17BB, // $17BB + #$17BC, // $17BC + #$17BD, // $17BD + #$17BE, // $17BE + #$17BF, // $17BF + #$17C0, // $17C0 + #$17C1, // $17C1 + #$17C2, // $17C2 + #$17C3, // $17C3 + #$17C4, // $17C4 + #$17C5, // $17C5 + #$17C6, // $17C6 + #$17C7, // $17C7 + #$17C8, // $17C8 + #$17C9, // $17C9 + #$17CA, // $17CA + #$17CB, // $17CB + #$17CC, // $17CC + #$17CD, // $17CD + #$17CE, // $17CE + #$17CF, // $17CF + #$17D0, // $17D0 + #$17D1, // $17D1 + #$17D2, // $17D2 + #$17D3, // $17D3 + #$17D4, // $17D4 + #$17D5, // $17D5 + #$17D6, // $17D6 + #$17D7, // $17D7 + #$17D8, // $17D8 + #$17D9, // $17D9 + #$17DA, // $17DA + #$17DB, // $17DB + #$17DC, // $17DC + #$17DD, // $17DD + #$17DE, // $17DE + #$17DF, // $17DF + #$17E0, // $17E0 + #$17E1, // $17E1 + #$17E2, // $17E2 + #$17E3, // $17E3 + #$17E4, // $17E4 + #$17E5, // $17E5 + #$17E6, // $17E6 + #$17E7, // $17E7 + #$17E8, // $17E8 + #$17E9, // $17E9 + #$17EA, // $17EA + #$17EB, // $17EB + #$17EC, // $17EC + #$17ED, // $17ED + #$17EE, // $17EE + #$17EF, // $17EF + #$17F0, // $17F0 + #$17F1, // $17F1 + #$17F2, // $17F2 + #$17F3, // $17F3 + #$17F4, // $17F4 + #$17F5, // $17F5 + #$17F6, // $17F6 + #$17F7, // $17F7 + #$17F8, // $17F8 + #$17F9, // $17F9 + #$17FA, // $17FA + #$17FB, // $17FB + #$17FC, // $17FC + #$17FD, // $17FD + #$17FE, // $17FE + #$17FF, // $17FF + #$1800, // $1800 + #$1801, // $1801 + #$1802, // $1802 + #$1803, // $1803 + #$1804, // $1804 + #$1805, // $1805 + #$1806, // $1806 + #$1807, // $1807 + #$1808, // $1808 + #$1809, // $1809 + #$180A, // $180A + #$180B, // $180B + #$180C, // $180C + #$180D, // $180D + #$180E, // $180E + #$180F, // $180F + #$1810, // $1810 + #$1811, // $1811 + #$1812, // $1812 + #$1813, // $1813 + #$1814, // $1814 + #$1815, // $1815 + #$1816, // $1816 + #$1817, // $1817 + #$1818, // $1818 + #$1819, // $1819 + #$181A, // $181A + #$181B, // $181B + #$181C, // $181C + #$181D, // $181D + #$181E, // $181E + #$181F, // $181F + #$1820, // $1820 + #$1821, // $1821 + #$1822, // $1822 + #$1823, // $1823 + #$1824, // $1824 + #$1825, // $1825 + #$1826, // $1826 + #$1827, // $1827 + #$1828, // $1828 + #$1829, // $1829 + #$182A, // $182A + #$182B, // $182B + #$182C, // $182C + #$182D, // $182D + #$182E, // $182E + #$182F, // $182F + #$1830, // $1830 + #$1831, // $1831 + #$1832, // $1832 + #$1833, // $1833 + #$1834, // $1834 + #$1835, // $1835 + #$1836, // $1836 + #$1837, // $1837 + #$1838, // $1838 + #$1839, // $1839 + #$183A, // $183A + #$183B, // $183B + #$183C, // $183C + #$183D, // $183D + #$183E, // $183E + #$183F, // $183F + #$1840, // $1840 + #$1841, // $1841 + #$1842, // $1842 + #$1843, // $1843 + #$1844, // $1844 + #$1845, // $1845 + #$1846, // $1846 + #$1847, // $1847 + #$1848, // $1848 + #$1849, // $1849 + #$184A, // $184A + #$184B, // $184B + #$184C, // $184C + #$184D, // $184D + #$184E, // $184E + #$184F, // $184F + #$1850, // $1850 + #$1851, // $1851 + #$1852, // $1852 + #$1853, // $1853 + #$1854, // $1854 + #$1855, // $1855 + #$1856, // $1856 + #$1857, // $1857 + #$1858, // $1858 + #$1859, // $1859 + #$185A, // $185A + #$185B, // $185B + #$185C, // $185C + #$185D, // $185D + #$185E, // $185E + #$185F, // $185F + #$1860, // $1860 + #$1861, // $1861 + #$1862, // $1862 + #$1863, // $1863 + #$1864, // $1864 + #$1865, // $1865 + #$1866, // $1866 + #$1867, // $1867 + #$1868, // $1868 + #$1869, // $1869 + #$186A, // $186A + #$186B, // $186B + #$186C, // $186C + #$186D, // $186D + #$186E, // $186E + #$186F, // $186F + #$1870, // $1870 + #$1871, // $1871 + #$1872, // $1872 + #$1873, // $1873 + #$1874, // $1874 + #$1875, // $1875 + #$1876, // $1876 + #$1877, // $1877 + #$1878, // $1878 + #$1879, // $1879 + #$187A, // $187A + #$187B, // $187B + #$187C, // $187C + #$187D, // $187D + #$187E, // $187E + #$187F, // $187F + #$1880, // $1880 + #$1881, // $1881 + #$1882, // $1882 + #$1883, // $1883 + #$1884, // $1884 + #$1885, // $1885 + #$1886, // $1886 + #$1887, // $1887 + #$1888, // $1888 + #$1889, // $1889 + #$188A, // $188A + #$188B, // $188B + #$188C, // $188C + #$188D, // $188D + #$188E, // $188E + #$188F, // $188F + #$1890, // $1890 + #$1891, // $1891 + #$1892, // $1892 + #$1893, // $1893 + #$1894, // $1894 + #$1895, // $1895 + #$1896, // $1896 + #$1897, // $1897 + #$1898, // $1898 + #$1899, // $1899 + #$189A, // $189A + #$189B, // $189B + #$189C, // $189C + #$189D, // $189D + #$189E, // $189E + #$189F, // $189F + #$18A0, // $18A0 + #$18A1, // $18A1 + #$18A2, // $18A2 + #$18A3, // $18A3 + #$18A4, // $18A4 + #$18A5, // $18A5 + #$18A6, // $18A6 + #$18A7, // $18A7 + #$18A8, // $18A8 + #$18A9, // $18A9 + #$18AA, // $18AA + #$18AB, // $18AB + #$18AC, // $18AC + #$18AD, // $18AD + #$18AE, // $18AE + #$18AF, // $18AF + #$18B0, // $18B0 + #$18B1, // $18B1 + #$18B2, // $18B2 + #$18B3, // $18B3 + #$18B4, // $18B4 + #$18B5, // $18B5 + #$18B6, // $18B6 + #$18B7, // $18B7 + #$18B8, // $18B8 + #$18B9, // $18B9 + #$18BA, // $18BA + #$18BB, // $18BB + #$18BC, // $18BC + #$18BD, // $18BD + #$18BE, // $18BE + #$18BF, // $18BF + #$18C0, // $18C0 + #$18C1, // $18C1 + #$18C2, // $18C2 + #$18C3, // $18C3 + #$18C4, // $18C4 + #$18C5, // $18C5 + #$18C6, // $18C6 + #$18C7, // $18C7 + #$18C8, // $18C8 + #$18C9, // $18C9 + #$18CA, // $18CA + #$18CB, // $18CB + #$18CC, // $18CC + #$18CD, // $18CD + #$18CE, // $18CE + #$18CF, // $18CF + #$18D0, // $18D0 + #$18D1, // $18D1 + #$18D2, // $18D2 + #$18D3, // $18D3 + #$18D4, // $18D4 + #$18D5, // $18D5 + #$18D6, // $18D6 + #$18D7, // $18D7 + #$18D8, // $18D8 + #$18D9, // $18D9 + #$18DA, // $18DA + #$18DB, // $18DB + #$18DC, // $18DC + #$18DD, // $18DD + #$18DE, // $18DE + #$18DF, // $18DF + #$18E0, // $18E0 + #$18E1, // $18E1 + #$18E2, // $18E2 + #$18E3, // $18E3 + #$18E4, // $18E4 + #$18E5, // $18E5 + #$18E6, // $18E6 + #$18E7, // $18E7 + #$18E8, // $18E8 + #$18E9, // $18E9 + #$18EA, // $18EA + #$18EB, // $18EB + #$18EC, // $18EC + #$18ED, // $18ED + #$18EE, // $18EE + #$18EF, // $18EF + #$18F0, // $18F0 + #$18F1, // $18F1 + #$18F2, // $18F2 + #$18F3, // $18F3 + #$18F4, // $18F4 + #$18F5, // $18F5 + #$18F6, // $18F6 + #$18F7, // $18F7 + #$18F8, // $18F8 + #$18F9, // $18F9 + #$18FA, // $18FA + #$18FB, // $18FB + #$18FC, // $18FC + #$18FD, // $18FD + #$18FE, // $18FE + #$18FF, // $18FF + #$1900, // $1900 + #$1901, // $1901 + #$1902, // $1902 + #$1903, // $1903 + #$1904, // $1904 + #$1905, // $1905 + #$1906, // $1906 + #$1907, // $1907 + #$1908, // $1908 + #$1909, // $1909 + #$190A, // $190A + #$190B, // $190B + #$190C, // $190C + #$190D, // $190D + #$190E, // $190E + #$190F, // $190F + #$1910, // $1910 + #$1911, // $1911 + #$1912, // $1912 + #$1913, // $1913 + #$1914, // $1914 + #$1915, // $1915 + #$1916, // $1916 + #$1917, // $1917 + #$1918, // $1918 + #$1919, // $1919 + #$191A, // $191A + #$191B, // $191B + #$191C, // $191C + #$191D, // $191D + #$191E, // $191E + #$191F, // $191F + #$1920, // $1920 + #$1921, // $1921 + #$1922, // $1922 + #$1923, // $1923 + #$1924, // $1924 + #$1925, // $1925 + #$1926, // $1926 + #$1927, // $1927 + #$1928, // $1928 + #$1929, // $1929 + #$192A, // $192A + #$192B, // $192B + #$192C, // $192C + #$192D, // $192D + #$192E, // $192E + #$192F, // $192F + #$1930, // $1930 + #$1931, // $1931 + #$1932, // $1932 + #$1933, // $1933 + #$1934, // $1934 + #$1935, // $1935 + #$1936, // $1936 + #$1937, // $1937 + #$1938, // $1938 + #$1939, // $1939 + #$193A, // $193A + #$193B, // $193B + #$193C, // $193C + #$193D, // $193D + #$193E, // $193E + #$193F, // $193F + #$1940, // $1940 + #$1941, // $1941 + #$1942, // $1942 + #$1943, // $1943 + #$1944, // $1944 + #$1945, // $1945 + #$1946, // $1946 + #$1947, // $1947 + #$1948, // $1948 + #$1949, // $1949 + #$194A, // $194A + #$194B, // $194B + #$194C, // $194C + #$194D, // $194D + #$194E, // $194E + #$194F, // $194F + #$1950, // $1950 + #$1951, // $1951 + #$1952, // $1952 + #$1953, // $1953 + #$1954, // $1954 + #$1955, // $1955 + #$1956, // $1956 + #$1957, // $1957 + #$1958, // $1958 + #$1959, // $1959 + #$195A, // $195A + #$195B, // $195B + #$195C, // $195C + #$195D, // $195D + #$195E, // $195E + #$195F, // $195F + #$1960, // $1960 + #$1961, // $1961 + #$1962, // $1962 + #$1963, // $1963 + #$1964, // $1964 + #$1965, // $1965 + #$1966, // $1966 + #$1967, // $1967 + #$1968, // $1968 + #$1969, // $1969 + #$196A, // $196A + #$196B, // $196B + #$196C, // $196C + #$196D, // $196D + #$196E, // $196E + #$196F, // $196F + #$1970, // $1970 + #$1971, // $1971 + #$1972, // $1972 + #$1973, // $1973 + #$1974, // $1974 + #$1975, // $1975 + #$1976, // $1976 + #$1977, // $1977 + #$1978, // $1978 + #$1979, // $1979 + #$197A, // $197A + #$197B, // $197B + #$197C, // $197C + #$197D, // $197D + #$197E, // $197E + #$197F, // $197F + #$1980, // $1980 + #$1981, // $1981 + #$1982, // $1982 + #$1983, // $1983 + #$1984, // $1984 + #$1985, // $1985 + #$1986, // $1986 + #$1987, // $1987 + #$1988, // $1988 + #$1989, // $1989 + #$198A, // $198A + #$198B, // $198B + #$198C, // $198C + #$198D, // $198D + #$198E, // $198E + #$198F, // $198F + #$1990, // $1990 + #$1991, // $1991 + #$1992, // $1992 + #$1993, // $1993 + #$1994, // $1994 + #$1995, // $1995 + #$1996, // $1996 + #$1997, // $1997 + #$1998, // $1998 + #$1999, // $1999 + #$199A, // $199A + #$199B, // $199B + #$199C, // $199C + #$199D, // $199D + #$199E, // $199E + #$199F, // $199F + #$19A0, // $19A0 + #$19A1, // $19A1 + #$19A2, // $19A2 + #$19A3, // $19A3 + #$19A4, // $19A4 + #$19A5, // $19A5 + #$19A6, // $19A6 + #$19A7, // $19A7 + #$19A8, // $19A8 + #$19A9, // $19A9 + #$19AA, // $19AA + #$19AB, // $19AB + #$19AC, // $19AC + #$19AD, // $19AD + #$19AE, // $19AE + #$19AF, // $19AF + #$19B0, // $19B0 + #$19B1, // $19B1 + #$19B2, // $19B2 + #$19B3, // $19B3 + #$19B4, // $19B4 + #$19B5, // $19B5 + #$19B6, // $19B6 + #$19B7, // $19B7 + #$19B8, // $19B8 + #$19B9, // $19B9 + #$19BA, // $19BA + #$19BB, // $19BB + #$19BC, // $19BC + #$19BD, // $19BD + #$19BE, // $19BE + #$19BF, // $19BF + #$19C0, // $19C0 + #$19C1, // $19C1 + #$19C2, // $19C2 + #$19C3, // $19C3 + #$19C4, // $19C4 + #$19C5, // $19C5 + #$19C6, // $19C6 + #$19C7, // $19C7 + #$19C8, // $19C8 + #$19C9, // $19C9 + #$19CA, // $19CA + #$19CB, // $19CB + #$19CC, // $19CC + #$19CD, // $19CD + #$19CE, // $19CE + #$19CF, // $19CF + #$19D0, // $19D0 + #$19D1, // $19D1 + #$19D2, // $19D2 + #$19D3, // $19D3 + #$19D4, // $19D4 + #$19D5, // $19D5 + #$19D6, // $19D6 + #$19D7, // $19D7 + #$19D8, // $19D8 + #$19D9, // $19D9 + #$19DA, // $19DA + #$19DB, // $19DB + #$19DC, // $19DC + #$19DD, // $19DD + #$19DE, // $19DE + #$19DF, // $19DF + #$19E0, // $19E0 + #$19E1, // $19E1 + #$19E2, // $19E2 + #$19E3, // $19E3 + #$19E4, // $19E4 + #$19E5, // $19E5 + #$19E6, // $19E6 + #$19E7, // $19E7 + #$19E8, // $19E8 + #$19E9, // $19E9 + #$19EA, // $19EA + #$19EB, // $19EB + #$19EC, // $19EC + #$19ED, // $19ED + #$19EE, // $19EE + #$19EF, // $19EF + #$19F0, // $19F0 + #$19F1, // $19F1 + #$19F2, // $19F2 + #$19F3, // $19F3 + #$19F4, // $19F4 + #$19F5, // $19F5 + #$19F6, // $19F6 + #$19F7, // $19F7 + #$19F8, // $19F8 + #$19F9, // $19F9 + #$19FA, // $19FA + #$19FB, // $19FB + #$19FC, // $19FC + #$19FD, // $19FD + #$19FE, // $19FE + #$19FF, // $19FF + #$1A00, // $1A00 + #$1A01, // $1A01 + #$1A02, // $1A02 + #$1A03, // $1A03 + #$1A04, // $1A04 + #$1A05, // $1A05 + #$1A06, // $1A06 + #$1A07, // $1A07 + #$1A08, // $1A08 + #$1A09, // $1A09 + #$1A0A, // $1A0A + #$1A0B, // $1A0B + #$1A0C, // $1A0C + #$1A0D, // $1A0D + #$1A0E, // $1A0E + #$1A0F, // $1A0F + #$1A10, // $1A10 + #$1A11, // $1A11 + #$1A12, // $1A12 + #$1A13, // $1A13 + #$1A14, // $1A14 + #$1A15, // $1A15 + #$1A16, // $1A16 + #$1A17, // $1A17 + #$1A18, // $1A18 + #$1A19, // $1A19 + #$1A1A, // $1A1A + #$1A1B, // $1A1B + #$1A1C, // $1A1C + #$1A1D, // $1A1D + #$1A1E, // $1A1E + #$1A1F, // $1A1F + #$1A20, // $1A20 + #$1A21, // $1A21 + #$1A22, // $1A22 + #$1A23, // $1A23 + #$1A24, // $1A24 + #$1A25, // $1A25 + #$1A26, // $1A26 + #$1A27, // $1A27 + #$1A28, // $1A28 + #$1A29, // $1A29 + #$1A2A, // $1A2A + #$1A2B, // $1A2B + #$1A2C, // $1A2C + #$1A2D, // $1A2D + #$1A2E, // $1A2E + #$1A2F, // $1A2F + #$1A30, // $1A30 + #$1A31, // $1A31 + #$1A32, // $1A32 + #$1A33, // $1A33 + #$1A34, // $1A34 + #$1A35, // $1A35 + #$1A36, // $1A36 + #$1A37, // $1A37 + #$1A38, // $1A38 + #$1A39, // $1A39 + #$1A3A, // $1A3A + #$1A3B, // $1A3B + #$1A3C, // $1A3C + #$1A3D, // $1A3D + #$1A3E, // $1A3E + #$1A3F, // $1A3F + #$1A40, // $1A40 + #$1A41, // $1A41 + #$1A42, // $1A42 + #$1A43, // $1A43 + #$1A44, // $1A44 + #$1A45, // $1A45 + #$1A46, // $1A46 + #$1A47, // $1A47 + #$1A48, // $1A48 + #$1A49, // $1A49 + #$1A4A, // $1A4A + #$1A4B, // $1A4B + #$1A4C, // $1A4C + #$1A4D, // $1A4D + #$1A4E, // $1A4E + #$1A4F, // $1A4F + #$1A50, // $1A50 + #$1A51, // $1A51 + #$1A52, // $1A52 + #$1A53, // $1A53 + #$1A54, // $1A54 + #$1A55, // $1A55 + #$1A56, // $1A56 + #$1A57, // $1A57 + #$1A58, // $1A58 + #$1A59, // $1A59 + #$1A5A, // $1A5A + #$1A5B, // $1A5B + #$1A5C, // $1A5C + #$1A5D, // $1A5D + #$1A5E, // $1A5E + #$1A5F, // $1A5F + #$1A60, // $1A60 + #$1A61, // $1A61 + #$1A62, // $1A62 + #$1A63, // $1A63 + #$1A64, // $1A64 + #$1A65, // $1A65 + #$1A66, // $1A66 + #$1A67, // $1A67 + #$1A68, // $1A68 + #$1A69, // $1A69 + #$1A6A, // $1A6A + #$1A6B, // $1A6B + #$1A6C, // $1A6C + #$1A6D, // $1A6D + #$1A6E, // $1A6E + #$1A6F, // $1A6F + #$1A70, // $1A70 + #$1A71, // $1A71 + #$1A72, // $1A72 + #$1A73, // $1A73 + #$1A74, // $1A74 + #$1A75, // $1A75 + #$1A76, // $1A76 + #$1A77, // $1A77 + #$1A78, // $1A78 + #$1A79, // $1A79 + #$1A7A, // $1A7A + #$1A7B, // $1A7B + #$1A7C, // $1A7C + #$1A7D, // $1A7D + #$1A7E, // $1A7E + #$1A7F, // $1A7F + #$1A80, // $1A80 + #$1A81, // $1A81 + #$1A82, // $1A82 + #$1A83, // $1A83 + #$1A84, // $1A84 + #$1A85, // $1A85 + #$1A86, // $1A86 + #$1A87, // $1A87 + #$1A88, // $1A88 + #$1A89, // $1A89 + #$1A8A, // $1A8A + #$1A8B, // $1A8B + #$1A8C, // $1A8C + #$1A8D, // $1A8D + #$1A8E, // $1A8E + #$1A8F, // $1A8F + #$1A90, // $1A90 + #$1A91, // $1A91 + #$1A92, // $1A92 + #$1A93, // $1A93 + #$1A94, // $1A94 + #$1A95, // $1A95 + #$1A96, // $1A96 + #$1A97, // $1A97 + #$1A98, // $1A98 + #$1A99, // $1A99 + #$1A9A, // $1A9A + #$1A9B, // $1A9B + #$1A9C, // $1A9C + #$1A9D, // $1A9D + #$1A9E, // $1A9E + #$1A9F, // $1A9F + #$1AA0, // $1AA0 + #$1AA1, // $1AA1 + #$1AA2, // $1AA2 + #$1AA3, // $1AA3 + #$1AA4, // $1AA4 + #$1AA5, // $1AA5 + #$1AA6, // $1AA6 + #$1AA7, // $1AA7 + #$1AA8, // $1AA8 + #$1AA9, // $1AA9 + #$1AAA, // $1AAA + #$1AAB, // $1AAB + #$1AAC, // $1AAC + #$1AAD, // $1AAD + #$1AAE, // $1AAE + #$1AAF, // $1AAF + #$1AB0, // $1AB0 + #$1AB1, // $1AB1 + #$1AB2, // $1AB2 + #$1AB3, // $1AB3 + #$1AB4, // $1AB4 + #$1AB5, // $1AB5 + #$1AB6, // $1AB6 + #$1AB7, // $1AB7 + #$1AB8, // $1AB8 + #$1AB9, // $1AB9 + #$1ABA, // $1ABA + #$1ABB, // $1ABB + #$1ABC, // $1ABC + #$1ABD, // $1ABD + #$1ABE, // $1ABE + #$1ABF, // $1ABF + #$1AC0, // $1AC0 + #$1AC1, // $1AC1 + #$1AC2, // $1AC2 + #$1AC3, // $1AC3 + #$1AC4, // $1AC4 + #$1AC5, // $1AC5 + #$1AC6, // $1AC6 + #$1AC7, // $1AC7 + #$1AC8, // $1AC8 + #$1AC9, // $1AC9 + #$1ACA, // $1ACA + #$1ACB, // $1ACB + #$1ACC, // $1ACC + #$1ACD, // $1ACD + #$1ACE, // $1ACE + #$1ACF, // $1ACF + #$1AD0, // $1AD0 + #$1AD1, // $1AD1 + #$1AD2, // $1AD2 + #$1AD3, // $1AD3 + #$1AD4, // $1AD4 + #$1AD5, // $1AD5 + #$1AD6, // $1AD6 + #$1AD7, // $1AD7 + #$1AD8, // $1AD8 + #$1AD9, // $1AD9 + #$1ADA, // $1ADA + #$1ADB, // $1ADB + #$1ADC, // $1ADC + #$1ADD, // $1ADD + #$1ADE, // $1ADE + #$1ADF, // $1ADF + #$1AE0, // $1AE0 + #$1AE1, // $1AE1 + #$1AE2, // $1AE2 + #$1AE3, // $1AE3 + #$1AE4, // $1AE4 + #$1AE5, // $1AE5 + #$1AE6, // $1AE6 + #$1AE7, // $1AE7 + #$1AE8, // $1AE8 + #$1AE9, // $1AE9 + #$1AEA, // $1AEA + #$1AEB, // $1AEB + #$1AEC, // $1AEC + #$1AED, // $1AED + #$1AEE, // $1AEE + #$1AEF, // $1AEF + #$1AF0, // $1AF0 + #$1AF1, // $1AF1 + #$1AF2, // $1AF2 + #$1AF3, // $1AF3 + #$1AF4, // $1AF4 + #$1AF5, // $1AF5 + #$1AF6, // $1AF6 + #$1AF7, // $1AF7 + #$1AF8, // $1AF8 + #$1AF9, // $1AF9 + #$1AFA, // $1AFA + #$1AFB, // $1AFB + #$1AFC, // $1AFC + #$1AFD, // $1AFD + #$1AFE, // $1AFE + #$1AFF, // $1AFF + #$1B00, // $1B00 + #$1B01, // $1B01 + #$1B02, // $1B02 + #$1B03, // $1B03 + #$1B04, // $1B04 + #$1B05, // $1B05 + #$1B06, // $1B06 + #$1B07, // $1B07 + #$1B08, // $1B08 + #$1B09, // $1B09 + #$1B0A, // $1B0A + #$1B0B, // $1B0B + #$1B0C, // $1B0C + #$1B0D, // $1B0D + #$1B0E, // $1B0E + #$1B0F, // $1B0F + #$1B10, // $1B10 + #$1B11, // $1B11 + #$1B12, // $1B12 + #$1B13, // $1B13 + #$1B14, // $1B14 + #$1B15, // $1B15 + #$1B16, // $1B16 + #$1B17, // $1B17 + #$1B18, // $1B18 + #$1B19, // $1B19 + #$1B1A, // $1B1A + #$1B1B, // $1B1B + #$1B1C, // $1B1C + #$1B1D, // $1B1D + #$1B1E, // $1B1E + #$1B1F, // $1B1F + #$1B20, // $1B20 + #$1B21, // $1B21 + #$1B22, // $1B22 + #$1B23, // $1B23 + #$1B24, // $1B24 + #$1B25, // $1B25 + #$1B26, // $1B26 + #$1B27, // $1B27 + #$1B28, // $1B28 + #$1B29, // $1B29 + #$1B2A, // $1B2A + #$1B2B, // $1B2B + #$1B2C, // $1B2C + #$1B2D, // $1B2D + #$1B2E, // $1B2E + #$1B2F, // $1B2F + #$1B30, // $1B30 + #$1B31, // $1B31 + #$1B32, // $1B32 + #$1B33, // $1B33 + #$1B34, // $1B34 + #$1B35, // $1B35 + #$1B36, // $1B36 + #$1B37, // $1B37 + #$1B38, // $1B38 + #$1B39, // $1B39 + #$1B3A, // $1B3A + #$1B3B, // $1B3B + #$1B3C, // $1B3C + #$1B3D, // $1B3D + #$1B3E, // $1B3E + #$1B3F, // $1B3F + #$1B40, // $1B40 + #$1B41, // $1B41 + #$1B42, // $1B42 + #$1B43, // $1B43 + #$1B44, // $1B44 + #$1B45, // $1B45 + #$1B46, // $1B46 + #$1B47, // $1B47 + #$1B48, // $1B48 + #$1B49, // $1B49 + #$1B4A, // $1B4A + #$1B4B, // $1B4B + #$1B4C, // $1B4C + #$1B4D, // $1B4D + #$1B4E, // $1B4E + #$1B4F, // $1B4F + #$1B50, // $1B50 + #$1B51, // $1B51 + #$1B52, // $1B52 + #$1B53, // $1B53 + #$1B54, // $1B54 + #$1B55, // $1B55 + #$1B56, // $1B56 + #$1B57, // $1B57 + #$1B58, // $1B58 + #$1B59, // $1B59 + #$1B5A, // $1B5A + #$1B5B, // $1B5B + #$1B5C, // $1B5C + #$1B5D, // $1B5D + #$1B5E, // $1B5E + #$1B5F, // $1B5F + #$1B60, // $1B60 + #$1B61, // $1B61 + #$1B62, // $1B62 + #$1B63, // $1B63 + #$1B64, // $1B64 + #$1B65, // $1B65 + #$1B66, // $1B66 + #$1B67, // $1B67 + #$1B68, // $1B68 + #$1B69, // $1B69 + #$1B6A, // $1B6A + #$1B6B, // $1B6B + #$1B6C, // $1B6C + #$1B6D, // $1B6D + #$1B6E, // $1B6E + #$1B6F, // $1B6F + #$1B70, // $1B70 + #$1B71, // $1B71 + #$1B72, // $1B72 + #$1B73, // $1B73 + #$1B74, // $1B74 + #$1B75, // $1B75 + #$1B76, // $1B76 + #$1B77, // $1B77 + #$1B78, // $1B78 + #$1B79, // $1B79 + #$1B7A, // $1B7A + #$1B7B, // $1B7B + #$1B7C, // $1B7C + #$1B7D, // $1B7D + #$1B7E, // $1B7E + #$1B7F, // $1B7F + #$1B80, // $1B80 + #$1B81, // $1B81 + #$1B82, // $1B82 + #$1B83, // $1B83 + #$1B84, // $1B84 + #$1B85, // $1B85 + #$1B86, // $1B86 + #$1B87, // $1B87 + #$1B88, // $1B88 + #$1B89, // $1B89 + #$1B8A, // $1B8A + #$1B8B, // $1B8B + #$1B8C, // $1B8C + #$1B8D, // $1B8D + #$1B8E, // $1B8E + #$1B8F, // $1B8F + #$1B90, // $1B90 + #$1B91, // $1B91 + #$1B92, // $1B92 + #$1B93, // $1B93 + #$1B94, // $1B94 + #$1B95, // $1B95 + #$1B96, // $1B96 + #$1B97, // $1B97 + #$1B98, // $1B98 + #$1B99, // $1B99 + #$1B9A, // $1B9A + #$1B9B, // $1B9B + #$1B9C, // $1B9C + #$1B9D, // $1B9D + #$1B9E, // $1B9E + #$1B9F, // $1B9F + #$1BA0, // $1BA0 + #$1BA1, // $1BA1 + #$1BA2, // $1BA2 + #$1BA3, // $1BA3 + #$1BA4, // $1BA4 + #$1BA5, // $1BA5 + #$1BA6, // $1BA6 + #$1BA7, // $1BA7 + #$1BA8, // $1BA8 + #$1BA9, // $1BA9 + #$1BAA, // $1BAA + #$1BAB, // $1BAB + #$1BAC, // $1BAC + #$1BAD, // $1BAD + #$1BAE, // $1BAE + #$1BAF, // $1BAF + #$1BB0, // $1BB0 + #$1BB1, // $1BB1 + #$1BB2, // $1BB2 + #$1BB3, // $1BB3 + #$1BB4, // $1BB4 + #$1BB5, // $1BB5 + #$1BB6, // $1BB6 + #$1BB7, // $1BB7 + #$1BB8, // $1BB8 + #$1BB9, // $1BB9 + #$1BBA, // $1BBA + #$1BBB, // $1BBB + #$1BBC, // $1BBC + #$1BBD, // $1BBD + #$1BBE, // $1BBE + #$1BBF, // $1BBF + #$1BC0, // $1BC0 + #$1BC1, // $1BC1 + #$1BC2, // $1BC2 + #$1BC3, // $1BC3 + #$1BC4, // $1BC4 + #$1BC5, // $1BC5 + #$1BC6, // $1BC6 + #$1BC7, // $1BC7 + #$1BC8, // $1BC8 + #$1BC9, // $1BC9 + #$1BCA, // $1BCA + #$1BCB, // $1BCB + #$1BCC, // $1BCC + #$1BCD, // $1BCD + #$1BCE, // $1BCE + #$1BCF, // $1BCF + #$1BD0, // $1BD0 + #$1BD1, // $1BD1 + #$1BD2, // $1BD2 + #$1BD3, // $1BD3 + #$1BD4, // $1BD4 + #$1BD5, // $1BD5 + #$1BD6, // $1BD6 + #$1BD7, // $1BD7 + #$1BD8, // $1BD8 + #$1BD9, // $1BD9 + #$1BDA, // $1BDA + #$1BDB, // $1BDB + #$1BDC, // $1BDC + #$1BDD, // $1BDD + #$1BDE, // $1BDE + #$1BDF, // $1BDF + #$1BE0, // $1BE0 + #$1BE1, // $1BE1 + #$1BE2, // $1BE2 + #$1BE3, // $1BE3 + #$1BE4, // $1BE4 + #$1BE5, // $1BE5 + #$1BE6, // $1BE6 + #$1BE7, // $1BE7 + #$1BE8, // $1BE8 + #$1BE9, // $1BE9 + #$1BEA, // $1BEA + #$1BEB, // $1BEB + #$1BEC, // $1BEC + #$1BED, // $1BED + #$1BEE, // $1BEE + #$1BEF, // $1BEF + #$1BF0, // $1BF0 + #$1BF1, // $1BF1 + #$1BF2, // $1BF2 + #$1BF3, // $1BF3 + #$1BF4, // $1BF4 + #$1BF5, // $1BF5 + #$1BF6, // $1BF6 + #$1BF7, // $1BF7 + #$1BF8, // $1BF8 + #$1BF9, // $1BF9 + #$1BFA, // $1BFA + #$1BFB, // $1BFB + #$1BFC, // $1BFC + #$1BFD, // $1BFD + #$1BFE, // $1BFE + #$1BFF, // $1BFF + #$1C00, // $1C00 + #$1C01, // $1C01 + #$1C02, // $1C02 + #$1C03, // $1C03 + #$1C04, // $1C04 + #$1C05, // $1C05 + #$1C06, // $1C06 + #$1C07, // $1C07 + #$1C08, // $1C08 + #$1C09, // $1C09 + #$1C0A, // $1C0A + #$1C0B, // $1C0B + #$1C0C, // $1C0C + #$1C0D, // $1C0D + #$1C0E, // $1C0E + #$1C0F, // $1C0F + #$1C10, // $1C10 + #$1C11, // $1C11 + #$1C12, // $1C12 + #$1C13, // $1C13 + #$1C14, // $1C14 + #$1C15, // $1C15 + #$1C16, // $1C16 + #$1C17, // $1C17 + #$1C18, // $1C18 + #$1C19, // $1C19 + #$1C1A, // $1C1A + #$1C1B, // $1C1B + #$1C1C, // $1C1C + #$1C1D, // $1C1D + #$1C1E, // $1C1E + #$1C1F, // $1C1F + #$1C20, // $1C20 + #$1C21, // $1C21 + #$1C22, // $1C22 + #$1C23, // $1C23 + #$1C24, // $1C24 + #$1C25, // $1C25 + #$1C26, // $1C26 + #$1C27, // $1C27 + #$1C28, // $1C28 + #$1C29, // $1C29 + #$1C2A, // $1C2A + #$1C2B, // $1C2B + #$1C2C, // $1C2C + #$1C2D, // $1C2D + #$1C2E, // $1C2E + #$1C2F, // $1C2F + #$1C30, // $1C30 + #$1C31, // $1C31 + #$1C32, // $1C32 + #$1C33, // $1C33 + #$1C34, // $1C34 + #$1C35, // $1C35 + #$1C36, // $1C36 + #$1C37, // $1C37 + #$1C38, // $1C38 + #$1C39, // $1C39 + #$1C3A, // $1C3A + #$1C3B, // $1C3B + #$1C3C, // $1C3C + #$1C3D, // $1C3D + #$1C3E, // $1C3E + #$1C3F, // $1C3F + #$1C40, // $1C40 + #$1C41, // $1C41 + #$1C42, // $1C42 + #$1C43, // $1C43 + #$1C44, // $1C44 + #$1C45, // $1C45 + #$1C46, // $1C46 + #$1C47, // $1C47 + #$1C48, // $1C48 + #$1C49, // $1C49 + #$1C4A, // $1C4A + #$1C4B, // $1C4B + #$1C4C, // $1C4C + #$1C4D, // $1C4D + #$1C4E, // $1C4E + #$1C4F, // $1C4F + #$1C50, // $1C50 + #$1C51, // $1C51 + #$1C52, // $1C52 + #$1C53, // $1C53 + #$1C54, // $1C54 + #$1C55, // $1C55 + #$1C56, // $1C56 + #$1C57, // $1C57 + #$1C58, // $1C58 + #$1C59, // $1C59 + #$1C5A, // $1C5A + #$1C5B, // $1C5B + #$1C5C, // $1C5C + #$1C5D, // $1C5D + #$1C5E, // $1C5E + #$1C5F, // $1C5F + #$1C60, // $1C60 + #$1C61, // $1C61 + #$1C62, // $1C62 + #$1C63, // $1C63 + #$1C64, // $1C64 + #$1C65, // $1C65 + #$1C66, // $1C66 + #$1C67, // $1C67 + #$1C68, // $1C68 + #$1C69, // $1C69 + #$1C6A, // $1C6A + #$1C6B, // $1C6B + #$1C6C, // $1C6C + #$1C6D, // $1C6D + #$1C6E, // $1C6E + #$1C6F, // $1C6F + #$1C70, // $1C70 + #$1C71, // $1C71 + #$1C72, // $1C72 + #$1C73, // $1C73 + #$1C74, // $1C74 + #$1C75, // $1C75 + #$1C76, // $1C76 + #$1C77, // $1C77 + #$1C78, // $1C78 + #$1C79, // $1C79 + #$1C7A, // $1C7A + #$1C7B, // $1C7B + #$1C7C, // $1C7C + #$1C7D, // $1C7D + #$1C7E, // $1C7E + #$1C7F, // $1C7F + #$0412, // $1C80 + #$0414, // $1C81 + #$041E, // $1C82 + #$0421, // $1C83 + #$0422, // $1C84 + #$0422, // $1C85 + #$042A, // $1C86 + #$0462, // $1C87 + #$A64A, // $1C88 + #$1C89, // $1C89 + #$1C8A, // $1C8A + #$1C8B, // $1C8B + #$1C8C, // $1C8C + #$1C8D, // $1C8D + #$1C8E, // $1C8E + #$1C8F, // $1C8F + #$1C90, // $1C90 + #$1C91, // $1C91 + #$1C92, // $1C92 + #$1C93, // $1C93 + #$1C94, // $1C94 + #$1C95, // $1C95 + #$1C96, // $1C96 + #$1C97, // $1C97 + #$1C98, // $1C98 + #$1C99, // $1C99 + #$1C9A, // $1C9A + #$1C9B, // $1C9B + #$1C9C, // $1C9C + #$1C9D, // $1C9D + #$1C9E, // $1C9E + #$1C9F, // $1C9F + #$1CA0, // $1CA0 + #$1CA1, // $1CA1 + #$1CA2, // $1CA2 + #$1CA3, // $1CA3 + #$1CA4, // $1CA4 + #$1CA5, // $1CA5 + #$1CA6, // $1CA6 + #$1CA7, // $1CA7 + #$1CA8, // $1CA8 + #$1CA9, // $1CA9 + #$1CAA, // $1CAA + #$1CAB, // $1CAB + #$1CAC, // $1CAC + #$1CAD, // $1CAD + #$1CAE, // $1CAE + #$1CAF, // $1CAF + #$1CB0, // $1CB0 + #$1CB1, // $1CB1 + #$1CB2, // $1CB2 + #$1CB3, // $1CB3 + #$1CB4, // $1CB4 + #$1CB5, // $1CB5 + #$1CB6, // $1CB6 + #$1CB7, // $1CB7 + #$1CB8, // $1CB8 + #$1CB9, // $1CB9 + #$1CBA, // $1CBA + #$1CBB, // $1CBB + #$1CBC, // $1CBC + #$1CBD, // $1CBD + #$1CBE, // $1CBE + #$1CBF, // $1CBF + #$1CC0, // $1CC0 + #$1CC1, // $1CC1 + #$1CC2, // $1CC2 + #$1CC3, // $1CC3 + #$1CC4, // $1CC4 + #$1CC5, // $1CC5 + #$1CC6, // $1CC6 + #$1CC7, // $1CC7 + #$1CC8, // $1CC8 + #$1CC9, // $1CC9 + #$1CCA, // $1CCA + #$1CCB, // $1CCB + #$1CCC, // $1CCC + #$1CCD, // $1CCD + #$1CCE, // $1CCE + #$1CCF, // $1CCF + #$1CD0, // $1CD0 + #$1CD1, // $1CD1 + #$1CD2, // $1CD2 + #$1CD3, // $1CD3 + #$1CD4, // $1CD4 + #$1CD5, // $1CD5 + #$1CD6, // $1CD6 + #$1CD7, // $1CD7 + #$1CD8, // $1CD8 + #$1CD9, // $1CD9 + #$1CDA, // $1CDA + #$1CDB, // $1CDB + #$1CDC, // $1CDC + #$1CDD, // $1CDD + #$1CDE, // $1CDE + #$1CDF, // $1CDF + #$1CE0, // $1CE0 + #$1CE1, // $1CE1 + #$1CE2, // $1CE2 + #$1CE3, // $1CE3 + #$1CE4, // $1CE4 + #$1CE5, // $1CE5 + #$1CE6, // $1CE6 + #$1CE7, // $1CE7 + #$1CE8, // $1CE8 + #$1CE9, // $1CE9 + #$1CEA, // $1CEA + #$1CEB, // $1CEB + #$1CEC, // $1CEC + #$1CED, // $1CED + #$1CEE, // $1CEE + #$1CEF, // $1CEF + #$1CF0, // $1CF0 + #$1CF1, // $1CF1 + #$1CF2, // $1CF2 + #$1CF3, // $1CF3 + #$1CF4, // $1CF4 + #$1CF5, // $1CF5 + #$1CF6, // $1CF6 + #$1CF7, // $1CF7 + #$1CF8, // $1CF8 + #$1CF9, // $1CF9 + #$1CFA, // $1CFA + #$1CFB, // $1CFB + #$1CFC, // $1CFC + #$1CFD, // $1CFD + #$1CFE, // $1CFE + #$1CFF, // $1CFF + #$1D00, // $1D00 + #$1D01, // $1D01 + #$1D02, // $1D02 + #$1D03, // $1D03 + #$1D04, // $1D04 + #$1D05, // $1D05 + #$1D06, // $1D06 + #$1D07, // $1D07 + #$1D08, // $1D08 + #$1D09, // $1D09 + #$1D0A, // $1D0A + #$1D0B, // $1D0B + #$1D0C, // $1D0C + #$1D0D, // $1D0D + #$1D0E, // $1D0E + #$1D0F, // $1D0F + #$1D10, // $1D10 + #$1D11, // $1D11 + #$1D12, // $1D12 + #$1D13, // $1D13 + #$1D14, // $1D14 + #$1D15, // $1D15 + #$1D16, // $1D16 + #$1D17, // $1D17 + #$1D18, // $1D18 + #$1D19, // $1D19 + #$1D1A, // $1D1A + #$1D1B, // $1D1B + #$1D1C, // $1D1C + #$1D1D, // $1D1D + #$1D1E, // $1D1E + #$1D1F, // $1D1F + #$1D20, // $1D20 + #$1D21, // $1D21 + #$1D22, // $1D22 + #$1D23, // $1D23 + #$1D24, // $1D24 + #$1D25, // $1D25 + #$1D26, // $1D26 + #$1D27, // $1D27 + #$1D28, // $1D28 + #$1D29, // $1D29 + #$1D2A, // $1D2A + #$1D2B, // $1D2B + #$1D2C, // $1D2C + #$1D2D, // $1D2D + #$1D2E, // $1D2E + #$1D2F, // $1D2F + #$1D30, // $1D30 + #$1D31, // $1D31 + #$1D32, // $1D32 + #$1D33, // $1D33 + #$1D34, // $1D34 + #$1D35, // $1D35 + #$1D36, // $1D36 + #$1D37, // $1D37 + #$1D38, // $1D38 + #$1D39, // $1D39 + #$1D3A, // $1D3A + #$1D3B, // $1D3B + #$1D3C, // $1D3C + #$1D3D, // $1D3D + #$1D3E, // $1D3E + #$1D3F, // $1D3F + #$1D40, // $1D40 + #$1D41, // $1D41 + #$1D42, // $1D42 + #$1D43, // $1D43 + #$1D44, // $1D44 + #$1D45, // $1D45 + #$1D46, // $1D46 + #$1D47, // $1D47 + #$1D48, // $1D48 + #$1D49, // $1D49 + #$1D4A, // $1D4A + #$1D4B, // $1D4B + #$1D4C, // $1D4C + #$1D4D, // $1D4D + #$1D4E, // $1D4E + #$1D4F, // $1D4F + #$1D50, // $1D50 + #$1D51, // $1D51 + #$1D52, // $1D52 + #$1D53, // $1D53 + #$1D54, // $1D54 + #$1D55, // $1D55 + #$1D56, // $1D56 + #$1D57, // $1D57 + #$1D58, // $1D58 + #$1D59, // $1D59 + #$1D5A, // $1D5A + #$1D5B, // $1D5B + #$1D5C, // $1D5C + #$1D5D, // $1D5D + #$1D5E, // $1D5E + #$1D5F, // $1D5F + #$1D60, // $1D60 + #$1D61, // $1D61 + #$1D62, // $1D62 + #$1D63, // $1D63 + #$1D64, // $1D64 + #$1D65, // $1D65 + #$1D66, // $1D66 + #$1D67, // $1D67 + #$1D68, // $1D68 + #$1D69, // $1D69 + #$1D6A, // $1D6A + #$1D6B, // $1D6B + #$1D6C, // $1D6C + #$1D6D, // $1D6D + #$1D6E, // $1D6E + #$1D6F, // $1D6F + #$1D70, // $1D70 + #$1D71, // $1D71 + #$1D72, // $1D72 + #$1D73, // $1D73 + #$1D74, // $1D74 + #$1D75, // $1D75 + #$1D76, // $1D76 + #$1D77, // $1D77 + #$1D78, // $1D78 + #$A77D, // $1D79 + #$1D7A, // $1D7A + #$1D7B, // $1D7B + #$1D7C, // $1D7C + #$2C63, // $1D7D + #$1D7E, // $1D7E + #$1D7F, // $1D7F + #$1D80, // $1D80 + #$1D81, // $1D81 + #$1D82, // $1D82 + #$1D83, // $1D83 + #$1D84, // $1D84 + #$1D85, // $1D85 + #$1D86, // $1D86 + #$1D87, // $1D87 + #$1D88, // $1D88 + #$1D89, // $1D89 + #$1D8A, // $1D8A + #$1D8B, // $1D8B + #$1D8C, // $1D8C + #$1D8D, // $1D8D + #$1D8E, // $1D8E + #$1D8F, // $1D8F + #$1D90, // $1D90 + #$1D91, // $1D91 + #$1D92, // $1D92 + #$1D93, // $1D93 + #$1D94, // $1D94 + #$1D95, // $1D95 + #$1D96, // $1D96 + #$1D97, // $1D97 + #$1D98, // $1D98 + #$1D99, // $1D99 + #$1D9A, // $1D9A + #$1D9B, // $1D9B + #$1D9C, // $1D9C + #$1D9D, // $1D9D + #$1D9E, // $1D9E + #$1D9F, // $1D9F + #$1DA0, // $1DA0 + #$1DA1, // $1DA1 + #$1DA2, // $1DA2 + #$1DA3, // $1DA3 + #$1DA4, // $1DA4 + #$1DA5, // $1DA5 + #$1DA6, // $1DA6 + #$1DA7, // $1DA7 + #$1DA8, // $1DA8 + #$1DA9, // $1DA9 + #$1DAA, // $1DAA + #$1DAB, // $1DAB + #$1DAC, // $1DAC + #$1DAD, // $1DAD + #$1DAE, // $1DAE + #$1DAF, // $1DAF + #$1DB0, // $1DB0 + #$1DB1, // $1DB1 + #$1DB2, // $1DB2 + #$1DB3, // $1DB3 + #$1DB4, // $1DB4 + #$1DB5, // $1DB5 + #$1DB6, // $1DB6 + #$1DB7, // $1DB7 + #$1DB8, // $1DB8 + #$1DB9, // $1DB9 + #$1DBA, // $1DBA + #$1DBB, // $1DBB + #$1DBC, // $1DBC + #$1DBD, // $1DBD + #$1DBE, // $1DBE + #$1DBF, // $1DBF + #$1DC0, // $1DC0 + #$1DC1, // $1DC1 + #$1DC2, // $1DC2 + #$1DC3, // $1DC3 + #$1DC4, // $1DC4 + #$1DC5, // $1DC5 + #$1DC6, // $1DC6 + #$1DC7, // $1DC7 + #$1DC8, // $1DC8 + #$1DC9, // $1DC9 + #$1DCA, // $1DCA + #$1DCB, // $1DCB + #$1DCC, // $1DCC + #$1DCD, // $1DCD + #$1DCE, // $1DCE + #$1DCF, // $1DCF + #$1DD0, // $1DD0 + #$1DD1, // $1DD1 + #$1DD2, // $1DD2 + #$1DD3, // $1DD3 + #$1DD4, // $1DD4 + #$1DD5, // $1DD5 + #$1DD6, // $1DD6 + #$1DD7, // $1DD7 + #$1DD8, // $1DD8 + #$1DD9, // $1DD9 + #$1DDA, // $1DDA + #$1DDB, // $1DDB + #$1DDC, // $1DDC + #$1DDD, // $1DDD + #$1DDE, // $1DDE + #$1DDF, // $1DDF + #$1DE0, // $1DE0 + #$1DE1, // $1DE1 + #$1DE2, // $1DE2 + #$1DE3, // $1DE3 + #$1DE4, // $1DE4 + #$1DE5, // $1DE5 + #$1DE6, // $1DE6 + #$1DE7, // $1DE7 + #$1DE8, // $1DE8 + #$1DE9, // $1DE9 + #$1DEA, // $1DEA + #$1DEB, // $1DEB + #$1DEC, // $1DEC + #$1DED, // $1DED + #$1DEE, // $1DEE + #$1DEF, // $1DEF + #$1DF0, // $1DF0 + #$1DF1, // $1DF1 + #$1DF2, // $1DF2 + #$1DF3, // $1DF3 + #$1DF4, // $1DF4 + #$1DF5, // $1DF5 + #$1DF6, // $1DF6 + #$1DF7, // $1DF7 + #$1DF8, // $1DF8 + #$1DF9, // $1DF9 + #$1DFA, // $1DFA + #$1DFB, // $1DFB + #$1DFC, // $1DFC + #$1DFD, // $1DFD + #$1DFE, // $1DFE + #$1DFF, // $1DFF + #$1E00, // $1E00 + #$1E00, // $1E01 + #$1E02, // $1E02 + #$1E02, // $1E03 + #$1E04, // $1E04 + #$1E04, // $1E05 + #$1E06, // $1E06 + #$1E06, // $1E07 + #$1E08, // $1E08 + #$1E08, // $1E09 + #$1E0A, // $1E0A + #$1E0A, // $1E0B + #$1E0C, // $1E0C + #$1E0C, // $1E0D + #$1E0E, // $1E0E + #$1E0E, // $1E0F + #$1E10, // $1E10 + #$1E10, // $1E11 + #$1E12, // $1E12 + #$1E12, // $1E13 + #$1E14, // $1E14 + #$1E14, // $1E15 + #$1E16, // $1E16 + #$1E16, // $1E17 + #$1E18, // $1E18 + #$1E18, // $1E19 + #$1E1A, // $1E1A + #$1E1A, // $1E1B + #$1E1C, // $1E1C + #$1E1C, // $1E1D + #$1E1E, // $1E1E + #$1E1E, // $1E1F + #$1E20, // $1E20 + #$1E20, // $1E21 + #$1E22, // $1E22 + #$1E22, // $1E23 + #$1E24, // $1E24 + #$1E24, // $1E25 + #$1E26, // $1E26 + #$1E26, // $1E27 + #$1E28, // $1E28 + #$1E28, // $1E29 + #$1E2A, // $1E2A + #$1E2A, // $1E2B + #$1E2C, // $1E2C + #$1E2C, // $1E2D + #$1E2E, // $1E2E + #$1E2E, // $1E2F + #$1E30, // $1E30 + #$1E30, // $1E31 + #$1E32, // $1E32 + #$1E32, // $1E33 + #$1E34, // $1E34 + #$1E34, // $1E35 + #$1E36, // $1E36 + #$1E36, // $1E37 + #$1E38, // $1E38 + #$1E38, // $1E39 + #$1E3A, // $1E3A + #$1E3A, // $1E3B + #$1E3C, // $1E3C + #$1E3C, // $1E3D + #$1E3E, // $1E3E + #$1E3E, // $1E3F + #$1E40, // $1E40 + #$1E40, // $1E41 + #$1E42, // $1E42 + #$1E42, // $1E43 + #$1E44, // $1E44 + #$1E44, // $1E45 + #$1E46, // $1E46 + #$1E46, // $1E47 + #$1E48, // $1E48 + #$1E48, // $1E49 + #$1E4A, // $1E4A + #$1E4A, // $1E4B + #$1E4C, // $1E4C + #$1E4C, // $1E4D + #$1E4E, // $1E4E + #$1E4E, // $1E4F + #$1E50, // $1E50 + #$1E50, // $1E51 + #$1E52, // $1E52 + #$1E52, // $1E53 + #$1E54, // $1E54 + #$1E54, // $1E55 + #$1E56, // $1E56 + #$1E56, // $1E57 + #$1E58, // $1E58 + #$1E58, // $1E59 + #$1E5A, // $1E5A + #$1E5A, // $1E5B + #$1E5C, // $1E5C + #$1E5C, // $1E5D + #$1E5E, // $1E5E + #$1E5E, // $1E5F + #$1E60, // $1E60 + #$1E60, // $1E61 + #$1E62, // $1E62 + #$1E62, // $1E63 + #$1E64, // $1E64 + #$1E64, // $1E65 + #$1E66, // $1E66 + #$1E66, // $1E67 + #$1E68, // $1E68 + #$1E68, // $1E69 + #$1E6A, // $1E6A + #$1E6A, // $1E6B + #$1E6C, // $1E6C + #$1E6C, // $1E6D + #$1E6E, // $1E6E + #$1E6E, // $1E6F + #$1E70, // $1E70 + #$1E70, // $1E71 + #$1E72, // $1E72 + #$1E72, // $1E73 + #$1E74, // $1E74 + #$1E74, // $1E75 + #$1E76, // $1E76 + #$1E76, // $1E77 + #$1E78, // $1E78 + #$1E78, // $1E79 + #$1E7A, // $1E7A + #$1E7A, // $1E7B + #$1E7C, // $1E7C + #$1E7C, // $1E7D + #$1E7E, // $1E7E + #$1E7E, // $1E7F + #$1E80, // $1E80 + #$1E80, // $1E81 + #$1E82, // $1E82 + #$1E82, // $1E83 + #$1E84, // $1E84 + #$1E84, // $1E85 + #$1E86, // $1E86 + #$1E86, // $1E87 + #$1E88, // $1E88 + #$1E88, // $1E89 + #$1E8A, // $1E8A + #$1E8A, // $1E8B + #$1E8C, // $1E8C + #$1E8C, // $1E8D + #$1E8E, // $1E8E + #$1E8E, // $1E8F + #$1E90, // $1E90 + #$1E90, // $1E91 + #$1E92, // $1E92 + #$1E92, // $1E93 + #$1E94, // $1E94 + #$1E94, // $1E95 + #$1E96, // $1E96 + #$1E97, // $1E97 + #$1E98, // $1E98 + #$1E99, // $1E99 + #$1E9A, // $1E9A + #$1E60, // $1E9B + #$1E9C, // $1E9C + #$1E9D, // $1E9D + #$1E9E, // $1E9E + #$1E9F, // $1E9F + #$1EA0, // $1EA0 + #$1EA0, // $1EA1 + #$1EA2, // $1EA2 + #$1EA2, // $1EA3 + #$1EA4, // $1EA4 + #$1EA4, // $1EA5 + #$1EA6, // $1EA6 + #$1EA6, // $1EA7 + #$1EA8, // $1EA8 + #$1EA8, // $1EA9 + #$1EAA, // $1EAA + #$1EAA, // $1EAB + #$1EAC, // $1EAC + #$1EAC, // $1EAD + #$1EAE, // $1EAE + #$1EAE, // $1EAF + #$1EB0, // $1EB0 + #$1EB0, // $1EB1 + #$1EB2, // $1EB2 + #$1EB2, // $1EB3 + #$1EB4, // $1EB4 + #$1EB4, // $1EB5 + #$1EB6, // $1EB6 + #$1EB6, // $1EB7 + #$1EB8, // $1EB8 + #$1EB8, // $1EB9 + #$1EBA, // $1EBA + #$1EBA, // $1EBB + #$1EBC, // $1EBC + #$1EBC, // $1EBD + #$1EBE, // $1EBE + #$1EBE, // $1EBF + #$1EC0, // $1EC0 + #$1EC0, // $1EC1 + #$1EC2, // $1EC2 + #$1EC2, // $1EC3 + #$1EC4, // $1EC4 + #$1EC4, // $1EC5 + #$1EC6, // $1EC6 + #$1EC6, // $1EC7 + #$1EC8, // $1EC8 + #$1EC8, // $1EC9 + #$1ECA, // $1ECA + #$1ECA, // $1ECB + #$1ECC, // $1ECC + #$1ECC, // $1ECD + #$1ECE, // $1ECE + #$1ECE, // $1ECF + #$1ED0, // $1ED0 + #$1ED0, // $1ED1 + #$1ED2, // $1ED2 + #$1ED2, // $1ED3 + #$1ED4, // $1ED4 + #$1ED4, // $1ED5 + #$1ED6, // $1ED6 + #$1ED6, // $1ED7 + #$1ED8, // $1ED8 + #$1ED8, // $1ED9 + #$1EDA, // $1EDA + #$1EDA, // $1EDB + #$1EDC, // $1EDC + #$1EDC, // $1EDD + #$1EDE, // $1EDE + #$1EDE, // $1EDF + #$1EE0, // $1EE0 + #$1EE0, // $1EE1 + #$1EE2, // $1EE2 + #$1EE2, // $1EE3 + #$1EE4, // $1EE4 + #$1EE4, // $1EE5 + #$1EE6, // $1EE6 + #$1EE6, // $1EE7 + #$1EE8, // $1EE8 + #$1EE8, // $1EE9 + #$1EEA, // $1EEA + #$1EEA, // $1EEB + #$1EEC, // $1EEC + #$1EEC, // $1EED + #$1EEE, // $1EEE + #$1EEE, // $1EEF + #$1EF0, // $1EF0 + #$1EF0, // $1EF1 + #$1EF2, // $1EF2 + #$1EF2, // $1EF3 + #$1EF4, // $1EF4 + #$1EF4, // $1EF5 + #$1EF6, // $1EF6 + #$1EF6, // $1EF7 + #$1EF8, // $1EF8 + #$1EF8, // $1EF9 + #$1EFA, // $1EFA + #$1EFA, // $1EFB + #$1EFC, // $1EFC + #$1EFC, // $1EFD + #$1EFE, // $1EFE + #$1EFE, // $1EFF + #$1F08, // $1F00 + #$1F09, // $1F01 + #$1F0A, // $1F02 + #$1F0B, // $1F03 + #$1F0C, // $1F04 + #$1F0D, // $1F05 + #$1F0E, // $1F06 + #$1F0F, // $1F07 + #$1F08, // $1F08 + #$1F09, // $1F09 + #$1F0A, // $1F0A + #$1F0B, // $1F0B + #$1F0C, // $1F0C + #$1F0D, // $1F0D + #$1F0E, // $1F0E + #$1F0F, // $1F0F + #$1F18, // $1F10 + #$1F19, // $1F11 + #$1F1A, // $1F12 + #$1F1B, // $1F13 + #$1F1C, // $1F14 + #$1F1D, // $1F15 + #$1F16, // $1F16 + #$1F17, // $1F17 + #$1F18, // $1F18 + #$1F19, // $1F19 + #$1F1A, // $1F1A + #$1F1B, // $1F1B + #$1F1C, // $1F1C + #$1F1D, // $1F1D + #$1F1E, // $1F1E + #$1F1F, // $1F1F + #$1F28, // $1F20 + #$1F29, // $1F21 + #$1F2A, // $1F22 + #$1F2B, // $1F23 + #$1F2C, // $1F24 + #$1F2D, // $1F25 + #$1F2E, // $1F26 + #$1F2F, // $1F27 + #$1F28, // $1F28 + #$1F29, // $1F29 + #$1F2A, // $1F2A + #$1F2B, // $1F2B + #$1F2C, // $1F2C + #$1F2D, // $1F2D + #$1F2E, // $1F2E + #$1F2F, // $1F2F + #$1F38, // $1F30 + #$1F39, // $1F31 + #$1F3A, // $1F32 + #$1F3B, // $1F33 + #$1F3C, // $1F34 + #$1F3D, // $1F35 + #$1F3E, // $1F36 + #$1F3F, // $1F37 + #$1F38, // $1F38 + #$1F39, // $1F39 + #$1F3A, // $1F3A + #$1F3B, // $1F3B + #$1F3C, // $1F3C + #$1F3D, // $1F3D + #$1F3E, // $1F3E + #$1F3F, // $1F3F + #$1F48, // $1F40 + #$1F49, // $1F41 + #$1F4A, // $1F42 + #$1F4B, // $1F43 + #$1F4C, // $1F44 + #$1F4D, // $1F45 + #$1F46, // $1F46 + #$1F47, // $1F47 + #$1F48, // $1F48 + #$1F49, // $1F49 + #$1F4A, // $1F4A + #$1F4B, // $1F4B + #$1F4C, // $1F4C + #$1F4D, // $1F4D + #$1F4E, // $1F4E + #$1F4F, // $1F4F + #$1F50, // $1F50 + #$1F59, // $1F51 + #$1F52, // $1F52 + #$1F5B, // $1F53 + #$1F54, // $1F54 + #$1F5D, // $1F55 + #$1F56, // $1F56 + #$1F5F, // $1F57 + #$1F58, // $1F58 + #$1F59, // $1F59 + #$1F5A, // $1F5A + #$1F5B, // $1F5B + #$1F5C, // $1F5C + #$1F5D, // $1F5D + #$1F5E, // $1F5E + #$1F5F, // $1F5F + #$1F68, // $1F60 + #$1F69, // $1F61 + #$1F6A, // $1F62 + #$1F6B, // $1F63 + #$1F6C, // $1F64 + #$1F6D, // $1F65 + #$1F6E, // $1F66 + #$1F6F, // $1F67 + #$1F68, // $1F68 + #$1F69, // $1F69 + #$1F6A, // $1F6A + #$1F6B, // $1F6B + #$1F6C, // $1F6C + #$1F6D, // $1F6D + #$1F6E, // $1F6E + #$1F6F, // $1F6F + #$1FBA, // $1F70 + #$1FBB, // $1F71 + #$1FC8, // $1F72 + #$1FC9, // $1F73 + #$1FCA, // $1F74 + #$1FCB, // $1F75 + #$1FDA, // $1F76 + #$1FDB, // $1F77 + #$1FF8, // $1F78 + #$1FF9, // $1F79 + #$1FEA, // $1F7A + #$1FEB, // $1F7B + #$1FFA, // $1F7C + #$1FFB, // $1F7D + #$1F7E, // $1F7E + #$1F7F, // $1F7F + #$1F88, // $1F80 + #$1F89, // $1F81 + #$1F8A, // $1F82 + #$1F8B, // $1F83 + #$1F8C, // $1F84 + #$1F8D, // $1F85 + #$1F8E, // $1F86 + #$1F8F, // $1F87 + #$1F88, // $1F88 + #$1F89, // $1F89 + #$1F8A, // $1F8A + #$1F8B, // $1F8B + #$1F8C, // $1F8C + #$1F8D, // $1F8D + #$1F8E, // $1F8E + #$1F8F, // $1F8F + #$1F98, // $1F90 + #$1F99, // $1F91 + #$1F9A, // $1F92 + #$1F9B, // $1F93 + #$1F9C, // $1F94 + #$1F9D, // $1F95 + #$1F9E, // $1F96 + #$1F9F, // $1F97 + #$1F98, // $1F98 + #$1F99, // $1F99 + #$1F9A, // $1F9A + #$1F9B, // $1F9B + #$1F9C, // $1F9C + #$1F9D, // $1F9D + #$1F9E, // $1F9E + #$1F9F, // $1F9F + #$1FA8, // $1FA0 + #$1FA9, // $1FA1 + #$1FAA, // $1FA2 + #$1FAB, // $1FA3 + #$1FAC, // $1FA4 + #$1FAD, // $1FA5 + #$1FAE, // $1FA6 + #$1FAF, // $1FA7 + #$1FA8, // $1FA8 + #$1FA9, // $1FA9 + #$1FAA, // $1FAA + #$1FAB, // $1FAB + #$1FAC, // $1FAC + #$1FAD, // $1FAD + #$1FAE, // $1FAE + #$1FAF, // $1FAF + #$1FB8, // $1FB0 + #$1FB9, // $1FB1 + #$1FB2, // $1FB2 + #$1FBC, // $1FB3 + #$1FB4, // $1FB4 + #$1FB5, // $1FB5 + #$1FB6, // $1FB6 + #$1FB7, // $1FB7 + #$1FB8, // $1FB8 + #$1FB9, // $1FB9 + #$1FBA, // $1FBA + #$1FBB, // $1FBB + #$1FBC, // $1FBC + #$1FBD, // $1FBD + #$0399, // $1FBE + #$1FBF, // $1FBF + #$1FC0, // $1FC0 + #$1FC1, // $1FC1 + #$1FC2, // $1FC2 + #$1FCC, // $1FC3 + #$1FC4, // $1FC4 + #$1FC5, // $1FC5 + #$1FC6, // $1FC6 + #$1FC7, // $1FC7 + #$1FC8, // $1FC8 + #$1FC9, // $1FC9 + #$1FCA, // $1FCA + #$1FCB, // $1FCB + #$1FCC, // $1FCC + #$1FCD, // $1FCD + #$1FCE, // $1FCE + #$1FCF, // $1FCF + #$1FD8, // $1FD0 + #$1FD9, // $1FD1 + #$1FD2, // $1FD2 + #$1FD3, // $1FD3 + #$1FD4, // $1FD4 + #$1FD5, // $1FD5 + #$1FD6, // $1FD6 + #$1FD7, // $1FD7 + #$1FD8, // $1FD8 + #$1FD9, // $1FD9 + #$1FDA, // $1FDA + #$1FDB, // $1FDB + #$1FDC, // $1FDC + #$1FDD, // $1FDD + #$1FDE, // $1FDE + #$1FDF, // $1FDF + #$1FE8, // $1FE0 + #$1FE9, // $1FE1 + #$1FE2, // $1FE2 + #$1FE3, // $1FE3 + #$1FE4, // $1FE4 + #$1FEC, // $1FE5 + #$1FE6, // $1FE6 + #$1FE7, // $1FE7 + #$1FE8, // $1FE8 + #$1FE9, // $1FE9 + #$1FEA, // $1FEA + #$1FEB, // $1FEB + #$1FEC, // $1FEC + #$1FED, // $1FED + #$1FEE, // $1FEE + #$1FEF, // $1FEF + #$1FF0, // $1FF0 + #$1FF1, // $1FF1 + #$1FF2, // $1FF2 + #$1FFC, // $1FF3 + #$1FF4, // $1FF4 + #$1FF5, // $1FF5 + #$1FF6, // $1FF6 + #$1FF7, // $1FF7 + #$1FF8, // $1FF8 + #$1FF9, // $1FF9 + #$1FFA, // $1FFA + #$1FFB, // $1FFB + #$1FFC, // $1FFC + #$1FFD, // $1FFD + #$1FFE, // $1FFE + #$1FFF, // $1FFF + #$2000, // $2000 + #$2001, // $2001 + #$2002, // $2002 + #$2003, // $2003 + #$2004, // $2004 + #$2005, // $2005 + #$2006, // $2006 + #$2007, // $2007 + #$2008, // $2008 + #$2009, // $2009 + #$200A, // $200A + #$200B, // $200B + #$200C, // $200C + #$200D, // $200D + #$200E, // $200E + #$200F, // $200F + #$2010, // $2010 + #$2011, // $2011 + #$2012, // $2012 + #$2013, // $2013 + #$2014, // $2014 + #$2015, // $2015 + #$2016, // $2016 + #$2017, // $2017 + #$2018, // $2018 + #$2019, // $2019 + #$201A, // $201A + #$201B, // $201B + #$201C, // $201C + #$201D, // $201D + #$201E, // $201E + #$201F, // $201F + #$2020, // $2020 + #$2021, // $2021 + #$2022, // $2022 + #$2023, // $2023 + #$2024, // $2024 + #$2025, // $2025 + #$2026, // $2026 + #$2027, // $2027 + #$2028, // $2028 + #$2029, // $2029 + #$202A, // $202A + #$202B, // $202B + #$202C, // $202C + #$202D, // $202D + #$202E, // $202E + #$202F, // $202F + #$2030, // $2030 + #$2031, // $2031 + #$2032, // $2032 + #$2033, // $2033 + #$2034, // $2034 + #$2035, // $2035 + #$2036, // $2036 + #$2037, // $2037 + #$2038, // $2038 + #$2039, // $2039 + #$203A, // $203A + #$203B, // $203B + #$203C, // $203C + #$203D, // $203D + #$203E, // $203E + #$203F, // $203F + #$2040, // $2040 + #$2041, // $2041 + #$2042, // $2042 + #$2043, // $2043 + #$2044, // $2044 + #$2045, // $2045 + #$2046, // $2046 + #$2047, // $2047 + #$2048, // $2048 + #$2049, // $2049 + #$204A, // $204A + #$204B, // $204B + #$204C, // $204C + #$204D, // $204D + #$204E, // $204E + #$204F, // $204F + #$2050, // $2050 + #$2051, // $2051 + #$2052, // $2052 + #$2053, // $2053 + #$2054, // $2054 + #$2055, // $2055 + #$2056, // $2056 + #$2057, // $2057 + #$2058, // $2058 + #$2059, // $2059 + #$205A, // $205A + #$205B, // $205B + #$205C, // $205C + #$205D, // $205D + #$205E, // $205E + #$205F, // $205F + #$2060, // $2060 + #$2061, // $2061 + #$2062, // $2062 + #$2063, // $2063 + #$2064, // $2064 + #$2065, // $2065 + #$2066, // $2066 + #$2067, // $2067 + #$2068, // $2068 + #$2069, // $2069 + #$206A, // $206A + #$206B, // $206B + #$206C, // $206C + #$206D, // $206D + #$206E, // $206E + #$206F, // $206F + #$2070, // $2070 + #$2071, // $2071 + #$2072, // $2072 + #$2073, // $2073 + #$2074, // $2074 + #$2075, // $2075 + #$2076, // $2076 + #$2077, // $2077 + #$2078, // $2078 + #$2079, // $2079 + #$207A, // $207A + #$207B, // $207B + #$207C, // $207C + #$207D, // $207D + #$207E, // $207E + #$207F, // $207F + #$2080, // $2080 + #$2081, // $2081 + #$2082, // $2082 + #$2083, // $2083 + #$2084, // $2084 + #$2085, // $2085 + #$2086, // $2086 + #$2087, // $2087 + #$2088, // $2088 + #$2089, // $2089 + #$208A, // $208A + #$208B, // $208B + #$208C, // $208C + #$208D, // $208D + #$208E, // $208E + #$208F, // $208F + #$2090, // $2090 + #$2091, // $2091 + #$2092, // $2092 + #$2093, // $2093 + #$2094, // $2094 + #$2095, // $2095 + #$2096, // $2096 + #$2097, // $2097 + #$2098, // $2098 + #$2099, // $2099 + #$209A, // $209A + #$209B, // $209B + #$209C, // $209C + #$209D, // $209D + #$209E, // $209E + #$209F, // $209F + #$20A0, // $20A0 + #$20A1, // $20A1 + #$20A2, // $20A2 + #$20A3, // $20A3 + #$20A4, // $20A4 + #$20A5, // $20A5 + #$20A6, // $20A6 + #$20A7, // $20A7 + #$20A8, // $20A8 + #$20A9, // $20A9 + #$20AA, // $20AA + #$20AB, // $20AB + #$20AC, // $20AC + #$20AD, // $20AD + #$20AE, // $20AE + #$20AF, // $20AF + #$20B0, // $20B0 + #$20B1, // $20B1 + #$20B2, // $20B2 + #$20B3, // $20B3 + #$20B4, // $20B4 + #$20B5, // $20B5 + #$20B6, // $20B6 + #$20B7, // $20B7 + #$20B8, // $20B8 + #$20B9, // $20B9 + #$20BA, // $20BA + #$20BB, // $20BB + #$20BC, // $20BC + #$20BD, // $20BD + #$20BE, // $20BE + #$20BF, // $20BF + #$20C0, // $20C0 + #$20C1, // $20C1 + #$20C2, // $20C2 + #$20C3, // $20C3 + #$20C4, // $20C4 + #$20C5, // $20C5 + #$20C6, // $20C6 + #$20C7, // $20C7 + #$20C8, // $20C8 + #$20C9, // $20C9 + #$20CA, // $20CA + #$20CB, // $20CB + #$20CC, // $20CC + #$20CD, // $20CD + #$20CE, // $20CE + #$20CF, // $20CF + #$20D0, // $20D0 + #$20D1, // $20D1 + #$20D2, // $20D2 + #$20D3, // $20D3 + #$20D4, // $20D4 + #$20D5, // $20D5 + #$20D6, // $20D6 + #$20D7, // $20D7 + #$20D8, // $20D8 + #$20D9, // $20D9 + #$20DA, // $20DA + #$20DB, // $20DB + #$20DC, // $20DC + #$20DD, // $20DD + #$20DE, // $20DE + #$20DF, // $20DF + #$20E0, // $20E0 + #$20E1, // $20E1 + #$20E2, // $20E2 + #$20E3, // $20E3 + #$20E4, // $20E4 + #$20E5, // $20E5 + #$20E6, // $20E6 + #$20E7, // $20E7 + #$20E8, // $20E8 + #$20E9, // $20E9 + #$20EA, // $20EA + #$20EB, // $20EB + #$20EC, // $20EC + #$20ED, // $20ED + #$20EE, // $20EE + #$20EF, // $20EF + #$20F0, // $20F0 + #$20F1, // $20F1 + #$20F2, // $20F2 + #$20F3, // $20F3 + #$20F4, // $20F4 + #$20F5, // $20F5 + #$20F6, // $20F6 + #$20F7, // $20F7 + #$20F8, // $20F8 + #$20F9, // $20F9 + #$20FA, // $20FA + #$20FB, // $20FB + #$20FC, // $20FC + #$20FD, // $20FD + #$20FE, // $20FE + #$20FF, // $20FF + #$2100, // $2100 + #$2101, // $2101 + #$2102, // $2102 + #$2103, // $2103 + #$2104, // $2104 + #$2105, // $2105 + #$2106, // $2106 + #$2107, // $2107 + #$2108, // $2108 + #$2109, // $2109 + #$210A, // $210A + #$210B, // $210B + #$210C, // $210C + #$210D, // $210D + #$210E, // $210E + #$210F, // $210F + #$2110, // $2110 + #$2111, // $2111 + #$2112, // $2112 + #$2113, // $2113 + #$2114, // $2114 + #$2115, // $2115 + #$2116, // $2116 + #$2117, // $2117 + #$2118, // $2118 + #$2119, // $2119 + #$211A, // $211A + #$211B, // $211B + #$211C, // $211C + #$211D, // $211D + #$211E, // $211E + #$211F, // $211F + #$2120, // $2120 + #$2121, // $2121 + #$2122, // $2122 + #$2123, // $2123 + #$2124, // $2124 + #$2125, // $2125 + #$2126, // $2126 + #$2127, // $2127 + #$2128, // $2128 + #$2129, // $2129 + #$212A, // $212A + #$212B, // $212B + #$212C, // $212C + #$212D, // $212D + #$212E, // $212E + #$212F, // $212F + #$2130, // $2130 + #$2131, // $2131 + #$2132, // $2132 + #$2133, // $2133 + #$2134, // $2134 + #$2135, // $2135 + #$2136, // $2136 + #$2137, // $2137 + #$2138, // $2138 + #$2139, // $2139 + #$213A, // $213A + #$213B, // $213B + #$213C, // $213C + #$213D, // $213D + #$213E, // $213E + #$213F, // $213F + #$2140, // $2140 + #$2141, // $2141 + #$2142, // $2142 + #$2143, // $2143 + #$2144, // $2144 + #$2145, // $2145 + #$2146, // $2146 + #$2147, // $2147 + #$2148, // $2148 + #$2149, // $2149 + #$214A, // $214A + #$214B, // $214B + #$214C, // $214C + #$214D, // $214D + #$2132, // $214E + #$214F, // $214F + #$2150, // $2150 + #$2151, // $2151 + #$2152, // $2152 + #$2153, // $2153 + #$2154, // $2154 + #$2155, // $2155 + #$2156, // $2156 + #$2157, // $2157 + #$2158, // $2158 + #$2159, // $2159 + #$215A, // $215A + #$215B, // $215B + #$215C, // $215C + #$215D, // $215D + #$215E, // $215E + #$215F, // $215F + #$2160, // $2160 + #$2161, // $2161 + #$2162, // $2162 + #$2163, // $2163 + #$2164, // $2164 + #$2165, // $2165 + #$2166, // $2166 + #$2167, // $2167 + #$2168, // $2168 + #$2169, // $2169 + #$216A, // $216A + #$216B, // $216B + #$216C, // $216C + #$216D, // $216D + #$216E, // $216E + #$216F, // $216F + #$2160, // $2170 + #$2161, // $2171 + #$2162, // $2172 + #$2163, // $2173 + #$2164, // $2174 + #$2165, // $2175 + #$2166, // $2176 + #$2167, // $2177 + #$2168, // $2178 + #$2169, // $2179 + #$216A, // $217A + #$216B, // $217B + #$216C, // $217C + #$216D, // $217D + #$216E, // $217E + #$216F, // $217F + #$2180, // $2180 + #$2181, // $2181 + #$2182, // $2182 + #$2183, // $2183 + #$2183, // $2184 + #$2185, // $2185 + #$2186, // $2186 + #$2187, // $2187 + #$2188, // $2188 + #$2189, // $2189 + #$218A, // $218A + #$218B, // $218B + #$218C, // $218C + #$218D, // $218D + #$218E, // $218E + #$218F, // $218F + #$2190, // $2190 + #$2191, // $2191 + #$2192, // $2192 + #$2193, // $2193 + #$2194, // $2194 + #$2195, // $2195 + #$2196, // $2196 + #$2197, // $2197 + #$2198, // $2198 + #$2199, // $2199 + #$219A, // $219A + #$219B, // $219B + #$219C, // $219C + #$219D, // $219D + #$219E, // $219E + #$219F, // $219F + #$21A0, // $21A0 + #$21A1, // $21A1 + #$21A2, // $21A2 + #$21A3, // $21A3 + #$21A4, // $21A4 + #$21A5, // $21A5 + #$21A6, // $21A6 + #$21A7, // $21A7 + #$21A8, // $21A8 + #$21A9, // $21A9 + #$21AA, // $21AA + #$21AB, // $21AB + #$21AC, // $21AC + #$21AD, // $21AD + #$21AE, // $21AE + #$21AF, // $21AF + #$21B0, // $21B0 + #$21B1, // $21B1 + #$21B2, // $21B2 + #$21B3, // $21B3 + #$21B4, // $21B4 + #$21B5, // $21B5 + #$21B6, // $21B6 + #$21B7, // $21B7 + #$21B8, // $21B8 + #$21B9, // $21B9 + #$21BA, // $21BA + #$21BB, // $21BB + #$21BC, // $21BC + #$21BD, // $21BD + #$21BE, // $21BE + #$21BF, // $21BF + #$21C0, // $21C0 + #$21C1, // $21C1 + #$21C2, // $21C2 + #$21C3, // $21C3 + #$21C4, // $21C4 + #$21C5, // $21C5 + #$21C6, // $21C6 + #$21C7, // $21C7 + #$21C8, // $21C8 + #$21C9, // $21C9 + #$21CA, // $21CA + #$21CB, // $21CB + #$21CC, // $21CC + #$21CD, // $21CD + #$21CE, // $21CE + #$21CF, // $21CF + #$21D0, // $21D0 + #$21D1, // $21D1 + #$21D2, // $21D2 + #$21D3, // $21D3 + #$21D4, // $21D4 + #$21D5, // $21D5 + #$21D6, // $21D6 + #$21D7, // $21D7 + #$21D8, // $21D8 + #$21D9, // $21D9 + #$21DA, // $21DA + #$21DB, // $21DB + #$21DC, // $21DC + #$21DD, // $21DD + #$21DE, // $21DE + #$21DF, // $21DF + #$21E0, // $21E0 + #$21E1, // $21E1 + #$21E2, // $21E2 + #$21E3, // $21E3 + #$21E4, // $21E4 + #$21E5, // $21E5 + #$21E6, // $21E6 + #$21E7, // $21E7 + #$21E8, // $21E8 + #$21E9, // $21E9 + #$21EA, // $21EA + #$21EB, // $21EB + #$21EC, // $21EC + #$21ED, // $21ED + #$21EE, // $21EE + #$21EF, // $21EF + #$21F0, // $21F0 + #$21F1, // $21F1 + #$21F2, // $21F2 + #$21F3, // $21F3 + #$21F4, // $21F4 + #$21F5, // $21F5 + #$21F6, // $21F6 + #$21F7, // $21F7 + #$21F8, // $21F8 + #$21F9, // $21F9 + #$21FA, // $21FA + #$21FB, // $21FB + #$21FC, // $21FC + #$21FD, // $21FD + #$21FE, // $21FE + #$21FF, // $21FF + #$2200, // $2200 + #$2201, // $2201 + #$2202, // $2202 + #$2203, // $2203 + #$2204, // $2204 + #$2205, // $2205 + #$2206, // $2206 + #$2207, // $2207 + #$2208, // $2208 + #$2209, // $2209 + #$220A, // $220A + #$220B, // $220B + #$220C, // $220C + #$220D, // $220D + #$220E, // $220E + #$220F, // $220F + #$2210, // $2210 + #$2211, // $2211 + #$2212, // $2212 + #$2213, // $2213 + #$2214, // $2214 + #$2215, // $2215 + #$2216, // $2216 + #$2217, // $2217 + #$2218, // $2218 + #$2219, // $2219 + #$221A, // $221A + #$221B, // $221B + #$221C, // $221C + #$221D, // $221D + #$221E, // $221E + #$221F, // $221F + #$2220, // $2220 + #$2221, // $2221 + #$2222, // $2222 + #$2223, // $2223 + #$2224, // $2224 + #$2225, // $2225 + #$2226, // $2226 + #$2227, // $2227 + #$2228, // $2228 + #$2229, // $2229 + #$222A, // $222A + #$222B, // $222B + #$222C, // $222C + #$222D, // $222D + #$222E, // $222E + #$222F, // $222F + #$2230, // $2230 + #$2231, // $2231 + #$2232, // $2232 + #$2233, // $2233 + #$2234, // $2234 + #$2235, // $2235 + #$2236, // $2236 + #$2237, // $2237 + #$2238, // $2238 + #$2239, // $2239 + #$223A, // $223A + #$223B, // $223B + #$223C, // $223C + #$223D, // $223D + #$223E, // $223E + #$223F, // $223F + #$2240, // $2240 + #$2241, // $2241 + #$2242, // $2242 + #$2243, // $2243 + #$2244, // $2244 + #$2245, // $2245 + #$2246, // $2246 + #$2247, // $2247 + #$2248, // $2248 + #$2249, // $2249 + #$224A, // $224A + #$224B, // $224B + #$224C, // $224C + #$224D, // $224D + #$224E, // $224E + #$224F, // $224F + #$2250, // $2250 + #$2251, // $2251 + #$2252, // $2252 + #$2253, // $2253 + #$2254, // $2254 + #$2255, // $2255 + #$2256, // $2256 + #$2257, // $2257 + #$2258, // $2258 + #$2259, // $2259 + #$225A, // $225A + #$225B, // $225B + #$225C, // $225C + #$225D, // $225D + #$225E, // $225E + #$225F, // $225F + #$2260, // $2260 + #$2261, // $2261 + #$2262, // $2262 + #$2263, // $2263 + #$2264, // $2264 + #$2265, // $2265 + #$2266, // $2266 + #$2267, // $2267 + #$2268, // $2268 + #$2269, // $2269 + #$226A, // $226A + #$226B, // $226B + #$226C, // $226C + #$226D, // $226D + #$226E, // $226E + #$226F, // $226F + #$2270, // $2270 + #$2271, // $2271 + #$2272, // $2272 + #$2273, // $2273 + #$2274, // $2274 + #$2275, // $2275 + #$2276, // $2276 + #$2277, // $2277 + #$2278, // $2278 + #$2279, // $2279 + #$227A, // $227A + #$227B, // $227B + #$227C, // $227C + #$227D, // $227D + #$227E, // $227E + #$227F, // $227F + #$2280, // $2280 + #$2281, // $2281 + #$2282, // $2282 + #$2283, // $2283 + #$2284, // $2284 + #$2285, // $2285 + #$2286, // $2286 + #$2287, // $2287 + #$2288, // $2288 + #$2289, // $2289 + #$228A, // $228A + #$228B, // $228B + #$228C, // $228C + #$228D, // $228D + #$228E, // $228E + #$228F, // $228F + #$2290, // $2290 + #$2291, // $2291 + #$2292, // $2292 + #$2293, // $2293 + #$2294, // $2294 + #$2295, // $2295 + #$2296, // $2296 + #$2297, // $2297 + #$2298, // $2298 + #$2299, // $2299 + #$229A, // $229A + #$229B, // $229B + #$229C, // $229C + #$229D, // $229D + #$229E, // $229E + #$229F, // $229F + #$22A0, // $22A0 + #$22A1, // $22A1 + #$22A2, // $22A2 + #$22A3, // $22A3 + #$22A4, // $22A4 + #$22A5, // $22A5 + #$22A6, // $22A6 + #$22A7, // $22A7 + #$22A8, // $22A8 + #$22A9, // $22A9 + #$22AA, // $22AA + #$22AB, // $22AB + #$22AC, // $22AC + #$22AD, // $22AD + #$22AE, // $22AE + #$22AF, // $22AF + #$22B0, // $22B0 + #$22B1, // $22B1 + #$22B2, // $22B2 + #$22B3, // $22B3 + #$22B4, // $22B4 + #$22B5, // $22B5 + #$22B6, // $22B6 + #$22B7, // $22B7 + #$22B8, // $22B8 + #$22B9, // $22B9 + #$22BA, // $22BA + #$22BB, // $22BB + #$22BC, // $22BC + #$22BD, // $22BD + #$22BE, // $22BE + #$22BF, // $22BF + #$22C0, // $22C0 + #$22C1, // $22C1 + #$22C2, // $22C2 + #$22C3, // $22C3 + #$22C4, // $22C4 + #$22C5, // $22C5 + #$22C6, // $22C6 + #$22C7, // $22C7 + #$22C8, // $22C8 + #$22C9, // $22C9 + #$22CA, // $22CA + #$22CB, // $22CB + #$22CC, // $22CC + #$22CD, // $22CD + #$22CE, // $22CE + #$22CF, // $22CF + #$22D0, // $22D0 + #$22D1, // $22D1 + #$22D2, // $22D2 + #$22D3, // $22D3 + #$22D4, // $22D4 + #$22D5, // $22D5 + #$22D6, // $22D6 + #$22D7, // $22D7 + #$22D8, // $22D8 + #$22D9, // $22D9 + #$22DA, // $22DA + #$22DB, // $22DB + #$22DC, // $22DC + #$22DD, // $22DD + #$22DE, // $22DE + #$22DF, // $22DF + #$22E0, // $22E0 + #$22E1, // $22E1 + #$22E2, // $22E2 + #$22E3, // $22E3 + #$22E4, // $22E4 + #$22E5, // $22E5 + #$22E6, // $22E6 + #$22E7, // $22E7 + #$22E8, // $22E8 + #$22E9, // $22E9 + #$22EA, // $22EA + #$22EB, // $22EB + #$22EC, // $22EC + #$22ED, // $22ED + #$22EE, // $22EE + #$22EF, // $22EF + #$22F0, // $22F0 + #$22F1, // $22F1 + #$22F2, // $22F2 + #$22F3, // $22F3 + #$22F4, // $22F4 + #$22F5, // $22F5 + #$22F6, // $22F6 + #$22F7, // $22F7 + #$22F8, // $22F8 + #$22F9, // $22F9 + #$22FA, // $22FA + #$22FB, // $22FB + #$22FC, // $22FC + #$22FD, // $22FD + #$22FE, // $22FE + #$22FF, // $22FF + #$2300, // $2300 + #$2301, // $2301 + #$2302, // $2302 + #$2303, // $2303 + #$2304, // $2304 + #$2305, // $2305 + #$2306, // $2306 + #$2307, // $2307 + #$2308, // $2308 + #$2309, // $2309 + #$230A, // $230A + #$230B, // $230B + #$230C, // $230C + #$230D, // $230D + #$230E, // $230E + #$230F, // $230F + #$2310, // $2310 + #$2311, // $2311 + #$2312, // $2312 + #$2313, // $2313 + #$2314, // $2314 + #$2315, // $2315 + #$2316, // $2316 + #$2317, // $2317 + #$2318, // $2318 + #$2319, // $2319 + #$231A, // $231A + #$231B, // $231B + #$231C, // $231C + #$231D, // $231D + #$231E, // $231E + #$231F, // $231F + #$2320, // $2320 + #$2321, // $2321 + #$2322, // $2322 + #$2323, // $2323 + #$2324, // $2324 + #$2325, // $2325 + #$2326, // $2326 + #$2327, // $2327 + #$2328, // $2328 + #$2329, // $2329 + #$232A, // $232A + #$232B, // $232B + #$232C, // $232C + #$232D, // $232D + #$232E, // $232E + #$232F, // $232F + #$2330, // $2330 + #$2331, // $2331 + #$2332, // $2332 + #$2333, // $2333 + #$2334, // $2334 + #$2335, // $2335 + #$2336, // $2336 + #$2337, // $2337 + #$2338, // $2338 + #$2339, // $2339 + #$233A, // $233A + #$233B, // $233B + #$233C, // $233C + #$233D, // $233D + #$233E, // $233E + #$233F, // $233F + #$2340, // $2340 + #$2341, // $2341 + #$2342, // $2342 + #$2343, // $2343 + #$2344, // $2344 + #$2345, // $2345 + #$2346, // $2346 + #$2347, // $2347 + #$2348, // $2348 + #$2349, // $2349 + #$234A, // $234A + #$234B, // $234B + #$234C, // $234C + #$234D, // $234D + #$234E, // $234E + #$234F, // $234F + #$2350, // $2350 + #$2351, // $2351 + #$2352, // $2352 + #$2353, // $2353 + #$2354, // $2354 + #$2355, // $2355 + #$2356, // $2356 + #$2357, // $2357 + #$2358, // $2358 + #$2359, // $2359 + #$235A, // $235A + #$235B, // $235B + #$235C, // $235C + #$235D, // $235D + #$235E, // $235E + #$235F, // $235F + #$2360, // $2360 + #$2361, // $2361 + #$2362, // $2362 + #$2363, // $2363 + #$2364, // $2364 + #$2365, // $2365 + #$2366, // $2366 + #$2367, // $2367 + #$2368, // $2368 + #$2369, // $2369 + #$236A, // $236A + #$236B, // $236B + #$236C, // $236C + #$236D, // $236D + #$236E, // $236E + #$236F, // $236F + #$2370, // $2370 + #$2371, // $2371 + #$2372, // $2372 + #$2373, // $2373 + #$2374, // $2374 + #$2375, // $2375 + #$2376, // $2376 + #$2377, // $2377 + #$2378, // $2378 + #$2379, // $2379 + #$237A, // $237A + #$237B, // $237B + #$237C, // $237C + #$237D, // $237D + #$237E, // $237E + #$237F, // $237F + #$2380, // $2380 + #$2381, // $2381 + #$2382, // $2382 + #$2383, // $2383 + #$2384, // $2384 + #$2385, // $2385 + #$2386, // $2386 + #$2387, // $2387 + #$2388, // $2388 + #$2389, // $2389 + #$238A, // $238A + #$238B, // $238B + #$238C, // $238C + #$238D, // $238D + #$238E, // $238E + #$238F, // $238F + #$2390, // $2390 + #$2391, // $2391 + #$2392, // $2392 + #$2393, // $2393 + #$2394, // $2394 + #$2395, // $2395 + #$2396, // $2396 + #$2397, // $2397 + #$2398, // $2398 + #$2399, // $2399 + #$239A, // $239A + #$239B, // $239B + #$239C, // $239C + #$239D, // $239D + #$239E, // $239E + #$239F, // $239F + #$23A0, // $23A0 + #$23A1, // $23A1 + #$23A2, // $23A2 + #$23A3, // $23A3 + #$23A4, // $23A4 + #$23A5, // $23A5 + #$23A6, // $23A6 + #$23A7, // $23A7 + #$23A8, // $23A8 + #$23A9, // $23A9 + #$23AA, // $23AA + #$23AB, // $23AB + #$23AC, // $23AC + #$23AD, // $23AD + #$23AE, // $23AE + #$23AF, // $23AF + #$23B0, // $23B0 + #$23B1, // $23B1 + #$23B2, // $23B2 + #$23B3, // $23B3 + #$23B4, // $23B4 + #$23B5, // $23B5 + #$23B6, // $23B6 + #$23B7, // $23B7 + #$23B8, // $23B8 + #$23B9, // $23B9 + #$23BA, // $23BA + #$23BB, // $23BB + #$23BC, // $23BC + #$23BD, // $23BD + #$23BE, // $23BE + #$23BF, // $23BF + #$23C0, // $23C0 + #$23C1, // $23C1 + #$23C2, // $23C2 + #$23C3, // $23C3 + #$23C4, // $23C4 + #$23C5, // $23C5 + #$23C6, // $23C6 + #$23C7, // $23C7 + #$23C8, // $23C8 + #$23C9, // $23C9 + #$23CA, // $23CA + #$23CB, // $23CB + #$23CC, // $23CC + #$23CD, // $23CD + #$23CE, // $23CE + #$23CF, // $23CF + #$23D0, // $23D0 + #$23D1, // $23D1 + #$23D2, // $23D2 + #$23D3, // $23D3 + #$23D4, // $23D4 + #$23D5, // $23D5 + #$23D6, // $23D6 + #$23D7, // $23D7 + #$23D8, // $23D8 + #$23D9, // $23D9 + #$23DA, // $23DA + #$23DB, // $23DB + #$23DC, // $23DC + #$23DD, // $23DD + #$23DE, // $23DE + #$23DF, // $23DF + #$23E0, // $23E0 + #$23E1, // $23E1 + #$23E2, // $23E2 + #$23E3, // $23E3 + #$23E4, // $23E4 + #$23E5, // $23E5 + #$23E6, // $23E6 + #$23E7, // $23E7 + #$23E8, // $23E8 + #$23E9, // $23E9 + #$23EA, // $23EA + #$23EB, // $23EB + #$23EC, // $23EC + #$23ED, // $23ED + #$23EE, // $23EE + #$23EF, // $23EF + #$23F0, // $23F0 + #$23F1, // $23F1 + #$23F2, // $23F2 + #$23F3, // $23F3 + #$23F4, // $23F4 + #$23F5, // $23F5 + #$23F6, // $23F6 + #$23F7, // $23F7 + #$23F8, // $23F8 + #$23F9, // $23F9 + #$23FA, // $23FA + #$23FB, // $23FB + #$23FC, // $23FC + #$23FD, // $23FD + #$23FE, // $23FE + #$23FF, // $23FF + #$2400, // $2400 + #$2401, // $2401 + #$2402, // $2402 + #$2403, // $2403 + #$2404, // $2404 + #$2405, // $2405 + #$2406, // $2406 + #$2407, // $2407 + #$2408, // $2408 + #$2409, // $2409 + #$240A, // $240A + #$240B, // $240B + #$240C, // $240C + #$240D, // $240D + #$240E, // $240E + #$240F, // $240F + #$2410, // $2410 + #$2411, // $2411 + #$2412, // $2412 + #$2413, // $2413 + #$2414, // $2414 + #$2415, // $2415 + #$2416, // $2416 + #$2417, // $2417 + #$2418, // $2418 + #$2419, // $2419 + #$241A, // $241A + #$241B, // $241B + #$241C, // $241C + #$241D, // $241D + #$241E, // $241E + #$241F, // $241F + #$2420, // $2420 + #$2421, // $2421 + #$2422, // $2422 + #$2423, // $2423 + #$2424, // $2424 + #$2425, // $2425 + #$2426, // $2426 + #$2427, // $2427 + #$2428, // $2428 + #$2429, // $2429 + #$242A, // $242A + #$242B, // $242B + #$242C, // $242C + #$242D, // $242D + #$242E, // $242E + #$242F, // $242F + #$2430, // $2430 + #$2431, // $2431 + #$2432, // $2432 + #$2433, // $2433 + #$2434, // $2434 + #$2435, // $2435 + #$2436, // $2436 + #$2437, // $2437 + #$2438, // $2438 + #$2439, // $2439 + #$243A, // $243A + #$243B, // $243B + #$243C, // $243C + #$243D, // $243D + #$243E, // $243E + #$243F, // $243F + #$2440, // $2440 + #$2441, // $2441 + #$2442, // $2442 + #$2443, // $2443 + #$2444, // $2444 + #$2445, // $2445 + #$2446, // $2446 + #$2447, // $2447 + #$2448, // $2448 + #$2449, // $2449 + #$244A, // $244A + #$244B, // $244B + #$244C, // $244C + #$244D, // $244D + #$244E, // $244E + #$244F, // $244F + #$2450, // $2450 + #$2451, // $2451 + #$2452, // $2452 + #$2453, // $2453 + #$2454, // $2454 + #$2455, // $2455 + #$2456, // $2456 + #$2457, // $2457 + #$2458, // $2458 + #$2459, // $2459 + #$245A, // $245A + #$245B, // $245B + #$245C, // $245C + #$245D, // $245D + #$245E, // $245E + #$245F, // $245F + #$2460, // $2460 + #$2461, // $2461 + #$2462, // $2462 + #$2463, // $2463 + #$2464, // $2464 + #$2465, // $2465 + #$2466, // $2466 + #$2467, // $2467 + #$2468, // $2468 + #$2469, // $2469 + #$246A, // $246A + #$246B, // $246B + #$246C, // $246C + #$246D, // $246D + #$246E, // $246E + #$246F, // $246F + #$2470, // $2470 + #$2471, // $2471 + #$2472, // $2472 + #$2473, // $2473 + #$2474, // $2474 + #$2475, // $2475 + #$2476, // $2476 + #$2477, // $2477 + #$2478, // $2478 + #$2479, // $2479 + #$247A, // $247A + #$247B, // $247B + #$247C, // $247C + #$247D, // $247D + #$247E, // $247E + #$247F, // $247F + #$2480, // $2480 + #$2481, // $2481 + #$2482, // $2482 + #$2483, // $2483 + #$2484, // $2484 + #$2485, // $2485 + #$2486, // $2486 + #$2487, // $2487 + #$2488, // $2488 + #$2489, // $2489 + #$248A, // $248A + #$248B, // $248B + #$248C, // $248C + #$248D, // $248D + #$248E, // $248E + #$248F, // $248F + #$2490, // $2490 + #$2491, // $2491 + #$2492, // $2492 + #$2493, // $2493 + #$2494, // $2494 + #$2495, // $2495 + #$2496, // $2496 + #$2497, // $2497 + #$2498, // $2498 + #$2499, // $2499 + #$249A, // $249A + #$249B, // $249B + #$249C, // $249C + #$249D, // $249D + #$249E, // $249E + #$249F, // $249F + #$24A0, // $24A0 + #$24A1, // $24A1 + #$24A2, // $24A2 + #$24A3, // $24A3 + #$24A4, // $24A4 + #$24A5, // $24A5 + #$24A6, // $24A6 + #$24A7, // $24A7 + #$24A8, // $24A8 + #$24A9, // $24A9 + #$24AA, // $24AA + #$24AB, // $24AB + #$24AC, // $24AC + #$24AD, // $24AD + #$24AE, // $24AE + #$24AF, // $24AF + #$24B0, // $24B0 + #$24B1, // $24B1 + #$24B2, // $24B2 + #$24B3, // $24B3 + #$24B4, // $24B4 + #$24B5, // $24B5 + #$24B6, // $24B6 + #$24B7, // $24B7 + #$24B8, // $24B8 + #$24B9, // $24B9 + #$24BA, // $24BA + #$24BB, // $24BB + #$24BC, // $24BC + #$24BD, // $24BD + #$24BE, // $24BE + #$24BF, // $24BF + #$24C0, // $24C0 + #$24C1, // $24C1 + #$24C2, // $24C2 + #$24C3, // $24C3 + #$24C4, // $24C4 + #$24C5, // $24C5 + #$24C6, // $24C6 + #$24C7, // $24C7 + #$24C8, // $24C8 + #$24C9, // $24C9 + #$24CA, // $24CA + #$24CB, // $24CB + #$24CC, // $24CC + #$24CD, // $24CD + #$24CE, // $24CE + #$24CF, // $24CF + #$24B6, // $24D0 + #$24B7, // $24D1 + #$24B8, // $24D2 + #$24B9, // $24D3 + #$24BA, // $24D4 + #$24BB, // $24D5 + #$24BC, // $24D6 + #$24BD, // $24D7 + #$24BE, // $24D8 + #$24BF, // $24D9 + #$24C0, // $24DA + #$24C1, // $24DB + #$24C2, // $24DC + #$24C3, // $24DD + #$24C4, // $24DE + #$24C5, // $24DF + #$24C6, // $24E0 + #$24C7, // $24E1 + #$24C8, // $24E2 + #$24C9, // $24E3 + #$24CA, // $24E4 + #$24CB, // $24E5 + #$24CC, // $24E6 + #$24CD, // $24E7 + #$24CE, // $24E8 + #$24CF, // $24E9 + #$24EA, // $24EA + #$24EB, // $24EB + #$24EC, // $24EC + #$24ED, // $24ED + #$24EE, // $24EE + #$24EF, // $24EF + #$24F0, // $24F0 + #$24F1, // $24F1 + #$24F2, // $24F2 + #$24F3, // $24F3 + #$24F4, // $24F4 + #$24F5, // $24F5 + #$24F6, // $24F6 + #$24F7, // $24F7 + #$24F8, // $24F8 + #$24F9, // $24F9 + #$24FA, // $24FA + #$24FB, // $24FB + #$24FC, // $24FC + #$24FD, // $24FD + #$24FE, // $24FE + #$24FF, // $24FF + #$2500, // $2500 + #$2501, // $2501 + #$2502, // $2502 + #$2503, // $2503 + #$2504, // $2504 + #$2505, // $2505 + #$2506, // $2506 + #$2507, // $2507 + #$2508, // $2508 + #$2509, // $2509 + #$250A, // $250A + #$250B, // $250B + #$250C, // $250C + #$250D, // $250D + #$250E, // $250E + #$250F, // $250F + #$2510, // $2510 + #$2511, // $2511 + #$2512, // $2512 + #$2513, // $2513 + #$2514, // $2514 + #$2515, // $2515 + #$2516, // $2516 + #$2517, // $2517 + #$2518, // $2518 + #$2519, // $2519 + #$251A, // $251A + #$251B, // $251B + #$251C, // $251C + #$251D, // $251D + #$251E, // $251E + #$251F, // $251F + #$2520, // $2520 + #$2521, // $2521 + #$2522, // $2522 + #$2523, // $2523 + #$2524, // $2524 + #$2525, // $2525 + #$2526, // $2526 + #$2527, // $2527 + #$2528, // $2528 + #$2529, // $2529 + #$252A, // $252A + #$252B, // $252B + #$252C, // $252C + #$252D, // $252D + #$252E, // $252E + #$252F, // $252F + #$2530, // $2530 + #$2531, // $2531 + #$2532, // $2532 + #$2533, // $2533 + #$2534, // $2534 + #$2535, // $2535 + #$2536, // $2536 + #$2537, // $2537 + #$2538, // $2538 + #$2539, // $2539 + #$253A, // $253A + #$253B, // $253B + #$253C, // $253C + #$253D, // $253D + #$253E, // $253E + #$253F, // $253F + #$2540, // $2540 + #$2541, // $2541 + #$2542, // $2542 + #$2543, // $2543 + #$2544, // $2544 + #$2545, // $2545 + #$2546, // $2546 + #$2547, // $2547 + #$2548, // $2548 + #$2549, // $2549 + #$254A, // $254A + #$254B, // $254B + #$254C, // $254C + #$254D, // $254D + #$254E, // $254E + #$254F, // $254F + #$2550, // $2550 + #$2551, // $2551 + #$2552, // $2552 + #$2553, // $2553 + #$2554, // $2554 + #$2555, // $2555 + #$2556, // $2556 + #$2557, // $2557 + #$2558, // $2558 + #$2559, // $2559 + #$255A, // $255A + #$255B, // $255B + #$255C, // $255C + #$255D, // $255D + #$255E, // $255E + #$255F, // $255F + #$2560, // $2560 + #$2561, // $2561 + #$2562, // $2562 + #$2563, // $2563 + #$2564, // $2564 + #$2565, // $2565 + #$2566, // $2566 + #$2567, // $2567 + #$2568, // $2568 + #$2569, // $2569 + #$256A, // $256A + #$256B, // $256B + #$256C, // $256C + #$256D, // $256D + #$256E, // $256E + #$256F, // $256F + #$2570, // $2570 + #$2571, // $2571 + #$2572, // $2572 + #$2573, // $2573 + #$2574, // $2574 + #$2575, // $2575 + #$2576, // $2576 + #$2577, // $2577 + #$2578, // $2578 + #$2579, // $2579 + #$257A, // $257A + #$257B, // $257B + #$257C, // $257C + #$257D, // $257D + #$257E, // $257E + #$257F, // $257F + #$2580, // $2580 + #$2581, // $2581 + #$2582, // $2582 + #$2583, // $2583 + #$2584, // $2584 + #$2585, // $2585 + #$2586, // $2586 + #$2587, // $2587 + #$2588, // $2588 + #$2589, // $2589 + #$258A, // $258A + #$258B, // $258B + #$258C, // $258C + #$258D, // $258D + #$258E, // $258E + #$258F, // $258F + #$2590, // $2590 + #$2591, // $2591 + #$2592, // $2592 + #$2593, // $2593 + #$2594, // $2594 + #$2595, // $2595 + #$2596, // $2596 + #$2597, // $2597 + #$2598, // $2598 + #$2599, // $2599 + #$259A, // $259A + #$259B, // $259B + #$259C, // $259C + #$259D, // $259D + #$259E, // $259E + #$259F, // $259F + #$25A0, // $25A0 + #$25A1, // $25A1 + #$25A2, // $25A2 + #$25A3, // $25A3 + #$25A4, // $25A4 + #$25A5, // $25A5 + #$25A6, // $25A6 + #$25A7, // $25A7 + #$25A8, // $25A8 + #$25A9, // $25A9 + #$25AA, // $25AA + #$25AB, // $25AB + #$25AC, // $25AC + #$25AD, // $25AD + #$25AE, // $25AE + #$25AF, // $25AF + #$25B0, // $25B0 + #$25B1, // $25B1 + #$25B2, // $25B2 + #$25B3, // $25B3 + #$25B4, // $25B4 + #$25B5, // $25B5 + #$25B6, // $25B6 + #$25B7, // $25B7 + #$25B8, // $25B8 + #$25B9, // $25B9 + #$25BA, // $25BA + #$25BB, // $25BB + #$25BC, // $25BC + #$25BD, // $25BD + #$25BE, // $25BE + #$25BF, // $25BF + #$25C0, // $25C0 + #$25C1, // $25C1 + #$25C2, // $25C2 + #$25C3, // $25C3 + #$25C4, // $25C4 + #$25C5, // $25C5 + #$25C6, // $25C6 + #$25C7, // $25C7 + #$25C8, // $25C8 + #$25C9, // $25C9 + #$25CA, // $25CA + #$25CB, // $25CB + #$25CC, // $25CC + #$25CD, // $25CD + #$25CE, // $25CE + #$25CF, // $25CF + #$25D0, // $25D0 + #$25D1, // $25D1 + #$25D2, // $25D2 + #$25D3, // $25D3 + #$25D4, // $25D4 + #$25D5, // $25D5 + #$25D6, // $25D6 + #$25D7, // $25D7 + #$25D8, // $25D8 + #$25D9, // $25D9 + #$25DA, // $25DA + #$25DB, // $25DB + #$25DC, // $25DC + #$25DD, // $25DD + #$25DE, // $25DE + #$25DF, // $25DF + #$25E0, // $25E0 + #$25E1, // $25E1 + #$25E2, // $25E2 + #$25E3, // $25E3 + #$25E4, // $25E4 + #$25E5, // $25E5 + #$25E6, // $25E6 + #$25E7, // $25E7 + #$25E8, // $25E8 + #$25E9, // $25E9 + #$25EA, // $25EA + #$25EB, // $25EB + #$25EC, // $25EC + #$25ED, // $25ED + #$25EE, // $25EE + #$25EF, // $25EF + #$25F0, // $25F0 + #$25F1, // $25F1 + #$25F2, // $25F2 + #$25F3, // $25F3 + #$25F4, // $25F4 + #$25F5, // $25F5 + #$25F6, // $25F6 + #$25F7, // $25F7 + #$25F8, // $25F8 + #$25F9, // $25F9 + #$25FA, // $25FA + #$25FB, // $25FB + #$25FC, // $25FC + #$25FD, // $25FD + #$25FE, // $25FE + #$25FF, // $25FF + #$2600, // $2600 + #$2601, // $2601 + #$2602, // $2602 + #$2603, // $2603 + #$2604, // $2604 + #$2605, // $2605 + #$2606, // $2606 + #$2607, // $2607 + #$2608, // $2608 + #$2609, // $2609 + #$260A, // $260A + #$260B, // $260B + #$260C, // $260C + #$260D, // $260D + #$260E, // $260E + #$260F, // $260F + #$2610, // $2610 + #$2611, // $2611 + #$2612, // $2612 + #$2613, // $2613 + #$2614, // $2614 + #$2615, // $2615 + #$2616, // $2616 + #$2617, // $2617 + #$2618, // $2618 + #$2619, // $2619 + #$261A, // $261A + #$261B, // $261B + #$261C, // $261C + #$261D, // $261D + #$261E, // $261E + #$261F, // $261F + #$2620, // $2620 + #$2621, // $2621 + #$2622, // $2622 + #$2623, // $2623 + #$2624, // $2624 + #$2625, // $2625 + #$2626, // $2626 + #$2627, // $2627 + #$2628, // $2628 + #$2629, // $2629 + #$262A, // $262A + #$262B, // $262B + #$262C, // $262C + #$262D, // $262D + #$262E, // $262E + #$262F, // $262F + #$2630, // $2630 + #$2631, // $2631 + #$2632, // $2632 + #$2633, // $2633 + #$2634, // $2634 + #$2635, // $2635 + #$2636, // $2636 + #$2637, // $2637 + #$2638, // $2638 + #$2639, // $2639 + #$263A, // $263A + #$263B, // $263B + #$263C, // $263C + #$263D, // $263D + #$263E, // $263E + #$263F, // $263F + #$2640, // $2640 + #$2641, // $2641 + #$2642, // $2642 + #$2643, // $2643 + #$2644, // $2644 + #$2645, // $2645 + #$2646, // $2646 + #$2647, // $2647 + #$2648, // $2648 + #$2649, // $2649 + #$264A, // $264A + #$264B, // $264B + #$264C, // $264C + #$264D, // $264D + #$264E, // $264E + #$264F, // $264F + #$2650, // $2650 + #$2651, // $2651 + #$2652, // $2652 + #$2653, // $2653 + #$2654, // $2654 + #$2655, // $2655 + #$2656, // $2656 + #$2657, // $2657 + #$2658, // $2658 + #$2659, // $2659 + #$265A, // $265A + #$265B, // $265B + #$265C, // $265C + #$265D, // $265D + #$265E, // $265E + #$265F, // $265F + #$2660, // $2660 + #$2661, // $2661 + #$2662, // $2662 + #$2663, // $2663 + #$2664, // $2664 + #$2665, // $2665 + #$2666, // $2666 + #$2667, // $2667 + #$2668, // $2668 + #$2669, // $2669 + #$266A, // $266A + #$266B, // $266B + #$266C, // $266C + #$266D, // $266D + #$266E, // $266E + #$266F, // $266F + #$2670, // $2670 + #$2671, // $2671 + #$2672, // $2672 + #$2673, // $2673 + #$2674, // $2674 + #$2675, // $2675 + #$2676, // $2676 + #$2677, // $2677 + #$2678, // $2678 + #$2679, // $2679 + #$267A, // $267A + #$267B, // $267B + #$267C, // $267C + #$267D, // $267D + #$267E, // $267E + #$267F, // $267F + #$2680, // $2680 + #$2681, // $2681 + #$2682, // $2682 + #$2683, // $2683 + #$2684, // $2684 + #$2685, // $2685 + #$2686, // $2686 + #$2687, // $2687 + #$2688, // $2688 + #$2689, // $2689 + #$268A, // $268A + #$268B, // $268B + #$268C, // $268C + #$268D, // $268D + #$268E, // $268E + #$268F, // $268F + #$2690, // $2690 + #$2691, // $2691 + #$2692, // $2692 + #$2693, // $2693 + #$2694, // $2694 + #$2695, // $2695 + #$2696, // $2696 + #$2697, // $2697 + #$2698, // $2698 + #$2699, // $2699 + #$269A, // $269A + #$269B, // $269B + #$269C, // $269C + #$269D, // $269D + #$269E, // $269E + #$269F, // $269F + #$26A0, // $26A0 + #$26A1, // $26A1 + #$26A2, // $26A2 + #$26A3, // $26A3 + #$26A4, // $26A4 + #$26A5, // $26A5 + #$26A6, // $26A6 + #$26A7, // $26A7 + #$26A8, // $26A8 + #$26A9, // $26A9 + #$26AA, // $26AA + #$26AB, // $26AB + #$26AC, // $26AC + #$26AD, // $26AD + #$26AE, // $26AE + #$26AF, // $26AF + #$26B0, // $26B0 + #$26B1, // $26B1 + #$26B2, // $26B2 + #$26B3, // $26B3 + #$26B4, // $26B4 + #$26B5, // $26B5 + #$26B6, // $26B6 + #$26B7, // $26B7 + #$26B8, // $26B8 + #$26B9, // $26B9 + #$26BA, // $26BA + #$26BB, // $26BB + #$26BC, // $26BC + #$26BD, // $26BD + #$26BE, // $26BE + #$26BF, // $26BF + #$26C0, // $26C0 + #$26C1, // $26C1 + #$26C2, // $26C2 + #$26C3, // $26C3 + #$26C4, // $26C4 + #$26C5, // $26C5 + #$26C6, // $26C6 + #$26C7, // $26C7 + #$26C8, // $26C8 + #$26C9, // $26C9 + #$26CA, // $26CA + #$26CB, // $26CB + #$26CC, // $26CC + #$26CD, // $26CD + #$26CE, // $26CE + #$26CF, // $26CF + #$26D0, // $26D0 + #$26D1, // $26D1 + #$26D2, // $26D2 + #$26D3, // $26D3 + #$26D4, // $26D4 + #$26D5, // $26D5 + #$26D6, // $26D6 + #$26D7, // $26D7 + #$26D8, // $26D8 + #$26D9, // $26D9 + #$26DA, // $26DA + #$26DB, // $26DB + #$26DC, // $26DC + #$26DD, // $26DD + #$26DE, // $26DE + #$26DF, // $26DF + #$26E0, // $26E0 + #$26E1, // $26E1 + #$26E2, // $26E2 + #$26E3, // $26E3 + #$26E4, // $26E4 + #$26E5, // $26E5 + #$26E6, // $26E6 + #$26E7, // $26E7 + #$26E8, // $26E8 + #$26E9, // $26E9 + #$26EA, // $26EA + #$26EB, // $26EB + #$26EC, // $26EC + #$26ED, // $26ED + #$26EE, // $26EE + #$26EF, // $26EF + #$26F0, // $26F0 + #$26F1, // $26F1 + #$26F2, // $26F2 + #$26F3, // $26F3 + #$26F4, // $26F4 + #$26F5, // $26F5 + #$26F6, // $26F6 + #$26F7, // $26F7 + #$26F8, // $26F8 + #$26F9, // $26F9 + #$26FA, // $26FA + #$26FB, // $26FB + #$26FC, // $26FC + #$26FD, // $26FD + #$26FE, // $26FE + #$26FF, // $26FF + #$2700, // $2700 + #$2701, // $2701 + #$2702, // $2702 + #$2703, // $2703 + #$2704, // $2704 + #$2705, // $2705 + #$2706, // $2706 + #$2707, // $2707 + #$2708, // $2708 + #$2709, // $2709 + #$270A, // $270A + #$270B, // $270B + #$270C, // $270C + #$270D, // $270D + #$270E, // $270E + #$270F, // $270F + #$2710, // $2710 + #$2711, // $2711 + #$2712, // $2712 + #$2713, // $2713 + #$2714, // $2714 + #$2715, // $2715 + #$2716, // $2716 + #$2717, // $2717 + #$2718, // $2718 + #$2719, // $2719 + #$271A, // $271A + #$271B, // $271B + #$271C, // $271C + #$271D, // $271D + #$271E, // $271E + #$271F, // $271F + #$2720, // $2720 + #$2721, // $2721 + #$2722, // $2722 + #$2723, // $2723 + #$2724, // $2724 + #$2725, // $2725 + #$2726, // $2726 + #$2727, // $2727 + #$2728, // $2728 + #$2729, // $2729 + #$272A, // $272A + #$272B, // $272B + #$272C, // $272C + #$272D, // $272D + #$272E, // $272E + #$272F, // $272F + #$2730, // $2730 + #$2731, // $2731 + #$2732, // $2732 + #$2733, // $2733 + #$2734, // $2734 + #$2735, // $2735 + #$2736, // $2736 + #$2737, // $2737 + #$2738, // $2738 + #$2739, // $2739 + #$273A, // $273A + #$273B, // $273B + #$273C, // $273C + #$273D, // $273D + #$273E, // $273E + #$273F, // $273F + #$2740, // $2740 + #$2741, // $2741 + #$2742, // $2742 + #$2743, // $2743 + #$2744, // $2744 + #$2745, // $2745 + #$2746, // $2746 + #$2747, // $2747 + #$2748, // $2748 + #$2749, // $2749 + #$274A, // $274A + #$274B, // $274B + #$274C, // $274C + #$274D, // $274D + #$274E, // $274E + #$274F, // $274F + #$2750, // $2750 + #$2751, // $2751 + #$2752, // $2752 + #$2753, // $2753 + #$2754, // $2754 + #$2755, // $2755 + #$2756, // $2756 + #$2757, // $2757 + #$2758, // $2758 + #$2759, // $2759 + #$275A, // $275A + #$275B, // $275B + #$275C, // $275C + #$275D, // $275D + #$275E, // $275E + #$275F, // $275F + #$2760, // $2760 + #$2761, // $2761 + #$2762, // $2762 + #$2763, // $2763 + #$2764, // $2764 + #$2765, // $2765 + #$2766, // $2766 + #$2767, // $2767 + #$2768, // $2768 + #$2769, // $2769 + #$276A, // $276A + #$276B, // $276B + #$276C, // $276C + #$276D, // $276D + #$276E, // $276E + #$276F, // $276F + #$2770, // $2770 + #$2771, // $2771 + #$2772, // $2772 + #$2773, // $2773 + #$2774, // $2774 + #$2775, // $2775 + #$2776, // $2776 + #$2777, // $2777 + #$2778, // $2778 + #$2779, // $2779 + #$277A, // $277A + #$277B, // $277B + #$277C, // $277C + #$277D, // $277D + #$277E, // $277E + #$277F, // $277F + #$2780, // $2780 + #$2781, // $2781 + #$2782, // $2782 + #$2783, // $2783 + #$2784, // $2784 + #$2785, // $2785 + #$2786, // $2786 + #$2787, // $2787 + #$2788, // $2788 + #$2789, // $2789 + #$278A, // $278A + #$278B, // $278B + #$278C, // $278C + #$278D, // $278D + #$278E, // $278E + #$278F, // $278F + #$2790, // $2790 + #$2791, // $2791 + #$2792, // $2792 + #$2793, // $2793 + #$2794, // $2794 + #$2795, // $2795 + #$2796, // $2796 + #$2797, // $2797 + #$2798, // $2798 + #$2799, // $2799 + #$279A, // $279A + #$279B, // $279B + #$279C, // $279C + #$279D, // $279D + #$279E, // $279E + #$279F, // $279F + #$27A0, // $27A0 + #$27A1, // $27A1 + #$27A2, // $27A2 + #$27A3, // $27A3 + #$27A4, // $27A4 + #$27A5, // $27A5 + #$27A6, // $27A6 + #$27A7, // $27A7 + #$27A8, // $27A8 + #$27A9, // $27A9 + #$27AA, // $27AA + #$27AB, // $27AB + #$27AC, // $27AC + #$27AD, // $27AD + #$27AE, // $27AE + #$27AF, // $27AF + #$27B0, // $27B0 + #$27B1, // $27B1 + #$27B2, // $27B2 + #$27B3, // $27B3 + #$27B4, // $27B4 + #$27B5, // $27B5 + #$27B6, // $27B6 + #$27B7, // $27B7 + #$27B8, // $27B8 + #$27B9, // $27B9 + #$27BA, // $27BA + #$27BB, // $27BB + #$27BC, // $27BC + #$27BD, // $27BD + #$27BE, // $27BE + #$27BF, // $27BF + #$27C0, // $27C0 + #$27C1, // $27C1 + #$27C2, // $27C2 + #$27C3, // $27C3 + #$27C4, // $27C4 + #$27C5, // $27C5 + #$27C6, // $27C6 + #$27C7, // $27C7 + #$27C8, // $27C8 + #$27C9, // $27C9 + #$27CA, // $27CA + #$27CB, // $27CB + #$27CC, // $27CC + #$27CD, // $27CD + #$27CE, // $27CE + #$27CF, // $27CF + #$27D0, // $27D0 + #$27D1, // $27D1 + #$27D2, // $27D2 + #$27D3, // $27D3 + #$27D4, // $27D4 + #$27D5, // $27D5 + #$27D6, // $27D6 + #$27D7, // $27D7 + #$27D8, // $27D8 + #$27D9, // $27D9 + #$27DA, // $27DA + #$27DB, // $27DB + #$27DC, // $27DC + #$27DD, // $27DD + #$27DE, // $27DE + #$27DF, // $27DF + #$27E0, // $27E0 + #$27E1, // $27E1 + #$27E2, // $27E2 + #$27E3, // $27E3 + #$27E4, // $27E4 + #$27E5, // $27E5 + #$27E6, // $27E6 + #$27E7, // $27E7 + #$27E8, // $27E8 + #$27E9, // $27E9 + #$27EA, // $27EA + #$27EB, // $27EB + #$27EC, // $27EC + #$27ED, // $27ED + #$27EE, // $27EE + #$27EF, // $27EF + #$27F0, // $27F0 + #$27F1, // $27F1 + #$27F2, // $27F2 + #$27F3, // $27F3 + #$27F4, // $27F4 + #$27F5, // $27F5 + #$27F6, // $27F6 + #$27F7, // $27F7 + #$27F8, // $27F8 + #$27F9, // $27F9 + #$27FA, // $27FA + #$27FB, // $27FB + #$27FC, // $27FC + #$27FD, // $27FD + #$27FE, // $27FE + #$27FF, // $27FF + #$2800, // $2800 + #$2801, // $2801 + #$2802, // $2802 + #$2803, // $2803 + #$2804, // $2804 + #$2805, // $2805 + #$2806, // $2806 + #$2807, // $2807 + #$2808, // $2808 + #$2809, // $2809 + #$280A, // $280A + #$280B, // $280B + #$280C, // $280C + #$280D, // $280D + #$280E, // $280E + #$280F, // $280F + #$2810, // $2810 + #$2811, // $2811 + #$2812, // $2812 + #$2813, // $2813 + #$2814, // $2814 + #$2815, // $2815 + #$2816, // $2816 + #$2817, // $2817 + #$2818, // $2818 + #$2819, // $2819 + #$281A, // $281A + #$281B, // $281B + #$281C, // $281C + #$281D, // $281D + #$281E, // $281E + #$281F, // $281F + #$2820, // $2820 + #$2821, // $2821 + #$2822, // $2822 + #$2823, // $2823 + #$2824, // $2824 + #$2825, // $2825 + #$2826, // $2826 + #$2827, // $2827 + #$2828, // $2828 + #$2829, // $2829 + #$282A, // $282A + #$282B, // $282B + #$282C, // $282C + #$282D, // $282D + #$282E, // $282E + #$282F, // $282F + #$2830, // $2830 + #$2831, // $2831 + #$2832, // $2832 + #$2833, // $2833 + #$2834, // $2834 + #$2835, // $2835 + #$2836, // $2836 + #$2837, // $2837 + #$2838, // $2838 + #$2839, // $2839 + #$283A, // $283A + #$283B, // $283B + #$283C, // $283C + #$283D, // $283D + #$283E, // $283E + #$283F, // $283F + #$2840, // $2840 + #$2841, // $2841 + #$2842, // $2842 + #$2843, // $2843 + #$2844, // $2844 + #$2845, // $2845 + #$2846, // $2846 + #$2847, // $2847 + #$2848, // $2848 + #$2849, // $2849 + #$284A, // $284A + #$284B, // $284B + #$284C, // $284C + #$284D, // $284D + #$284E, // $284E + #$284F, // $284F + #$2850, // $2850 + #$2851, // $2851 + #$2852, // $2852 + #$2853, // $2853 + #$2854, // $2854 + #$2855, // $2855 + #$2856, // $2856 + #$2857, // $2857 + #$2858, // $2858 + #$2859, // $2859 + #$285A, // $285A + #$285B, // $285B + #$285C, // $285C + #$285D, // $285D + #$285E, // $285E + #$285F, // $285F + #$2860, // $2860 + #$2861, // $2861 + #$2862, // $2862 + #$2863, // $2863 + #$2864, // $2864 + #$2865, // $2865 + #$2866, // $2866 + #$2867, // $2867 + #$2868, // $2868 + #$2869, // $2869 + #$286A, // $286A + #$286B, // $286B + #$286C, // $286C + #$286D, // $286D + #$286E, // $286E + #$286F, // $286F + #$2870, // $2870 + #$2871, // $2871 + #$2872, // $2872 + #$2873, // $2873 + #$2874, // $2874 + #$2875, // $2875 + #$2876, // $2876 + #$2877, // $2877 + #$2878, // $2878 + #$2879, // $2879 + #$287A, // $287A + #$287B, // $287B + #$287C, // $287C + #$287D, // $287D + #$287E, // $287E + #$287F, // $287F + #$2880, // $2880 + #$2881, // $2881 + #$2882, // $2882 + #$2883, // $2883 + #$2884, // $2884 + #$2885, // $2885 + #$2886, // $2886 + #$2887, // $2887 + #$2888, // $2888 + #$2889, // $2889 + #$288A, // $288A + #$288B, // $288B + #$288C, // $288C + #$288D, // $288D + #$288E, // $288E + #$288F, // $288F + #$2890, // $2890 + #$2891, // $2891 + #$2892, // $2892 + #$2893, // $2893 + #$2894, // $2894 + #$2895, // $2895 + #$2896, // $2896 + #$2897, // $2897 + #$2898, // $2898 + #$2899, // $2899 + #$289A, // $289A + #$289B, // $289B + #$289C, // $289C + #$289D, // $289D + #$289E, // $289E + #$289F, // $289F + #$28A0, // $28A0 + #$28A1, // $28A1 + #$28A2, // $28A2 + #$28A3, // $28A3 + #$28A4, // $28A4 + #$28A5, // $28A5 + #$28A6, // $28A6 + #$28A7, // $28A7 + #$28A8, // $28A8 + #$28A9, // $28A9 + #$28AA, // $28AA + #$28AB, // $28AB + #$28AC, // $28AC + #$28AD, // $28AD + #$28AE, // $28AE + #$28AF, // $28AF + #$28B0, // $28B0 + #$28B1, // $28B1 + #$28B2, // $28B2 + #$28B3, // $28B3 + #$28B4, // $28B4 + #$28B5, // $28B5 + #$28B6, // $28B6 + #$28B7, // $28B7 + #$28B8, // $28B8 + #$28B9, // $28B9 + #$28BA, // $28BA + #$28BB, // $28BB + #$28BC, // $28BC + #$28BD, // $28BD + #$28BE, // $28BE + #$28BF, // $28BF + #$28C0, // $28C0 + #$28C1, // $28C1 + #$28C2, // $28C2 + #$28C3, // $28C3 + #$28C4, // $28C4 + #$28C5, // $28C5 + #$28C6, // $28C6 + #$28C7, // $28C7 + #$28C8, // $28C8 + #$28C9, // $28C9 + #$28CA, // $28CA + #$28CB, // $28CB + #$28CC, // $28CC + #$28CD, // $28CD + #$28CE, // $28CE + #$28CF, // $28CF + #$28D0, // $28D0 + #$28D1, // $28D1 + #$28D2, // $28D2 + #$28D3, // $28D3 + #$28D4, // $28D4 + #$28D5, // $28D5 + #$28D6, // $28D6 + #$28D7, // $28D7 + #$28D8, // $28D8 + #$28D9, // $28D9 + #$28DA, // $28DA + #$28DB, // $28DB + #$28DC, // $28DC + #$28DD, // $28DD + #$28DE, // $28DE + #$28DF, // $28DF + #$28E0, // $28E0 + #$28E1, // $28E1 + #$28E2, // $28E2 + #$28E3, // $28E3 + #$28E4, // $28E4 + #$28E5, // $28E5 + #$28E6, // $28E6 + #$28E7, // $28E7 + #$28E8, // $28E8 + #$28E9, // $28E9 + #$28EA, // $28EA + #$28EB, // $28EB + #$28EC, // $28EC + #$28ED, // $28ED + #$28EE, // $28EE + #$28EF, // $28EF + #$28F0, // $28F0 + #$28F1, // $28F1 + #$28F2, // $28F2 + #$28F3, // $28F3 + #$28F4, // $28F4 + #$28F5, // $28F5 + #$28F6, // $28F6 + #$28F7, // $28F7 + #$28F8, // $28F8 + #$28F9, // $28F9 + #$28FA, // $28FA + #$28FB, // $28FB + #$28FC, // $28FC + #$28FD, // $28FD + #$28FE, // $28FE + #$28FF, // $28FF + #$2900, // $2900 + #$2901, // $2901 + #$2902, // $2902 + #$2903, // $2903 + #$2904, // $2904 + #$2905, // $2905 + #$2906, // $2906 + #$2907, // $2907 + #$2908, // $2908 + #$2909, // $2909 + #$290A, // $290A + #$290B, // $290B + #$290C, // $290C + #$290D, // $290D + #$290E, // $290E + #$290F, // $290F + #$2910, // $2910 + #$2911, // $2911 + #$2912, // $2912 + #$2913, // $2913 + #$2914, // $2914 + #$2915, // $2915 + #$2916, // $2916 + #$2917, // $2917 + #$2918, // $2918 + #$2919, // $2919 + #$291A, // $291A + #$291B, // $291B + #$291C, // $291C + #$291D, // $291D + #$291E, // $291E + #$291F, // $291F + #$2920, // $2920 + #$2921, // $2921 + #$2922, // $2922 + #$2923, // $2923 + #$2924, // $2924 + #$2925, // $2925 + #$2926, // $2926 + #$2927, // $2927 + #$2928, // $2928 + #$2929, // $2929 + #$292A, // $292A + #$292B, // $292B + #$292C, // $292C + #$292D, // $292D + #$292E, // $292E + #$292F, // $292F + #$2930, // $2930 + #$2931, // $2931 + #$2932, // $2932 + #$2933, // $2933 + #$2934, // $2934 + #$2935, // $2935 + #$2936, // $2936 + #$2937, // $2937 + #$2938, // $2938 + #$2939, // $2939 + #$293A, // $293A + #$293B, // $293B + #$293C, // $293C + #$293D, // $293D + #$293E, // $293E + #$293F, // $293F + #$2940, // $2940 + #$2941, // $2941 + #$2942, // $2942 + #$2943, // $2943 + #$2944, // $2944 + #$2945, // $2945 + #$2946, // $2946 + #$2947, // $2947 + #$2948, // $2948 + #$2949, // $2949 + #$294A, // $294A + #$294B, // $294B + #$294C, // $294C + #$294D, // $294D + #$294E, // $294E + #$294F, // $294F + #$2950, // $2950 + #$2951, // $2951 + #$2952, // $2952 + #$2953, // $2953 + #$2954, // $2954 + #$2955, // $2955 + #$2956, // $2956 + #$2957, // $2957 + #$2958, // $2958 + #$2959, // $2959 + #$295A, // $295A + #$295B, // $295B + #$295C, // $295C + #$295D, // $295D + #$295E, // $295E + #$295F, // $295F + #$2960, // $2960 + #$2961, // $2961 + #$2962, // $2962 + #$2963, // $2963 + #$2964, // $2964 + #$2965, // $2965 + #$2966, // $2966 + #$2967, // $2967 + #$2968, // $2968 + #$2969, // $2969 + #$296A, // $296A + #$296B, // $296B + #$296C, // $296C + #$296D, // $296D + #$296E, // $296E + #$296F, // $296F + #$2970, // $2970 + #$2971, // $2971 + #$2972, // $2972 + #$2973, // $2973 + #$2974, // $2974 + #$2975, // $2975 + #$2976, // $2976 + #$2977, // $2977 + #$2978, // $2978 + #$2979, // $2979 + #$297A, // $297A + #$297B, // $297B + #$297C, // $297C + #$297D, // $297D + #$297E, // $297E + #$297F, // $297F + #$2980, // $2980 + #$2981, // $2981 + #$2982, // $2982 + #$2983, // $2983 + #$2984, // $2984 + #$2985, // $2985 + #$2986, // $2986 + #$2987, // $2987 + #$2988, // $2988 + #$2989, // $2989 + #$298A, // $298A + #$298B, // $298B + #$298C, // $298C + #$298D, // $298D + #$298E, // $298E + #$298F, // $298F + #$2990, // $2990 + #$2991, // $2991 + #$2992, // $2992 + #$2993, // $2993 + #$2994, // $2994 + #$2995, // $2995 + #$2996, // $2996 + #$2997, // $2997 + #$2998, // $2998 + #$2999, // $2999 + #$299A, // $299A + #$299B, // $299B + #$299C, // $299C + #$299D, // $299D + #$299E, // $299E + #$299F, // $299F + #$29A0, // $29A0 + #$29A1, // $29A1 + #$29A2, // $29A2 + #$29A3, // $29A3 + #$29A4, // $29A4 + #$29A5, // $29A5 + #$29A6, // $29A6 + #$29A7, // $29A7 + #$29A8, // $29A8 + #$29A9, // $29A9 + #$29AA, // $29AA + #$29AB, // $29AB + #$29AC, // $29AC + #$29AD, // $29AD + #$29AE, // $29AE + #$29AF, // $29AF + #$29B0, // $29B0 + #$29B1, // $29B1 + #$29B2, // $29B2 + #$29B3, // $29B3 + #$29B4, // $29B4 + #$29B5, // $29B5 + #$29B6, // $29B6 + #$29B7, // $29B7 + #$29B8, // $29B8 + #$29B9, // $29B9 + #$29BA, // $29BA + #$29BB, // $29BB + #$29BC, // $29BC + #$29BD, // $29BD + #$29BE, // $29BE + #$29BF, // $29BF + #$29C0, // $29C0 + #$29C1, // $29C1 + #$29C2, // $29C2 + #$29C3, // $29C3 + #$29C4, // $29C4 + #$29C5, // $29C5 + #$29C6, // $29C6 + #$29C7, // $29C7 + #$29C8, // $29C8 + #$29C9, // $29C9 + #$29CA, // $29CA + #$29CB, // $29CB + #$29CC, // $29CC + #$29CD, // $29CD + #$29CE, // $29CE + #$29CF, // $29CF + #$29D0, // $29D0 + #$29D1, // $29D1 + #$29D2, // $29D2 + #$29D3, // $29D3 + #$29D4, // $29D4 + #$29D5, // $29D5 + #$29D6, // $29D6 + #$29D7, // $29D7 + #$29D8, // $29D8 + #$29D9, // $29D9 + #$29DA, // $29DA + #$29DB, // $29DB + #$29DC, // $29DC + #$29DD, // $29DD + #$29DE, // $29DE + #$29DF, // $29DF + #$29E0, // $29E0 + #$29E1, // $29E1 + #$29E2, // $29E2 + #$29E3, // $29E3 + #$29E4, // $29E4 + #$29E5, // $29E5 + #$29E6, // $29E6 + #$29E7, // $29E7 + #$29E8, // $29E8 + #$29E9, // $29E9 + #$29EA, // $29EA + #$29EB, // $29EB + #$29EC, // $29EC + #$29ED, // $29ED + #$29EE, // $29EE + #$29EF, // $29EF + #$29F0, // $29F0 + #$29F1, // $29F1 + #$29F2, // $29F2 + #$29F3, // $29F3 + #$29F4, // $29F4 + #$29F5, // $29F5 + #$29F6, // $29F6 + #$29F7, // $29F7 + #$29F8, // $29F8 + #$29F9, // $29F9 + #$29FA, // $29FA + #$29FB, // $29FB + #$29FC, // $29FC + #$29FD, // $29FD + #$29FE, // $29FE + #$29FF, // $29FF + #$2A00, // $2A00 + #$2A01, // $2A01 + #$2A02, // $2A02 + #$2A03, // $2A03 + #$2A04, // $2A04 + #$2A05, // $2A05 + #$2A06, // $2A06 + #$2A07, // $2A07 + #$2A08, // $2A08 + #$2A09, // $2A09 + #$2A0A, // $2A0A + #$2A0B, // $2A0B + #$2A0C, // $2A0C + #$2A0D, // $2A0D + #$2A0E, // $2A0E + #$2A0F, // $2A0F + #$2A10, // $2A10 + #$2A11, // $2A11 + #$2A12, // $2A12 + #$2A13, // $2A13 + #$2A14, // $2A14 + #$2A15, // $2A15 + #$2A16, // $2A16 + #$2A17, // $2A17 + #$2A18, // $2A18 + #$2A19, // $2A19 + #$2A1A, // $2A1A + #$2A1B, // $2A1B + #$2A1C, // $2A1C + #$2A1D, // $2A1D + #$2A1E, // $2A1E + #$2A1F, // $2A1F + #$2A20, // $2A20 + #$2A21, // $2A21 + #$2A22, // $2A22 + #$2A23, // $2A23 + #$2A24, // $2A24 + #$2A25, // $2A25 + #$2A26, // $2A26 + #$2A27, // $2A27 + #$2A28, // $2A28 + #$2A29, // $2A29 + #$2A2A, // $2A2A + #$2A2B, // $2A2B + #$2A2C, // $2A2C + #$2A2D, // $2A2D + #$2A2E, // $2A2E + #$2A2F, // $2A2F + #$2A30, // $2A30 + #$2A31, // $2A31 + #$2A32, // $2A32 + #$2A33, // $2A33 + #$2A34, // $2A34 + #$2A35, // $2A35 + #$2A36, // $2A36 + #$2A37, // $2A37 + #$2A38, // $2A38 + #$2A39, // $2A39 + #$2A3A, // $2A3A + #$2A3B, // $2A3B + #$2A3C, // $2A3C + #$2A3D, // $2A3D + #$2A3E, // $2A3E + #$2A3F, // $2A3F + #$2A40, // $2A40 + #$2A41, // $2A41 + #$2A42, // $2A42 + #$2A43, // $2A43 + #$2A44, // $2A44 + #$2A45, // $2A45 + #$2A46, // $2A46 + #$2A47, // $2A47 + #$2A48, // $2A48 + #$2A49, // $2A49 + #$2A4A, // $2A4A + #$2A4B, // $2A4B + #$2A4C, // $2A4C + #$2A4D, // $2A4D + #$2A4E, // $2A4E + #$2A4F, // $2A4F + #$2A50, // $2A50 + #$2A51, // $2A51 + #$2A52, // $2A52 + #$2A53, // $2A53 + #$2A54, // $2A54 + #$2A55, // $2A55 + #$2A56, // $2A56 + #$2A57, // $2A57 + #$2A58, // $2A58 + #$2A59, // $2A59 + #$2A5A, // $2A5A + #$2A5B, // $2A5B + #$2A5C, // $2A5C + #$2A5D, // $2A5D + #$2A5E, // $2A5E + #$2A5F, // $2A5F + #$2A60, // $2A60 + #$2A61, // $2A61 + #$2A62, // $2A62 + #$2A63, // $2A63 + #$2A64, // $2A64 + #$2A65, // $2A65 + #$2A66, // $2A66 + #$2A67, // $2A67 + #$2A68, // $2A68 + #$2A69, // $2A69 + #$2A6A, // $2A6A + #$2A6B, // $2A6B + #$2A6C, // $2A6C + #$2A6D, // $2A6D + #$2A6E, // $2A6E + #$2A6F, // $2A6F + #$2A70, // $2A70 + #$2A71, // $2A71 + #$2A72, // $2A72 + #$2A73, // $2A73 + #$2A74, // $2A74 + #$2A75, // $2A75 + #$2A76, // $2A76 + #$2A77, // $2A77 + #$2A78, // $2A78 + #$2A79, // $2A79 + #$2A7A, // $2A7A + #$2A7B, // $2A7B + #$2A7C, // $2A7C + #$2A7D, // $2A7D + #$2A7E, // $2A7E + #$2A7F, // $2A7F + #$2A80, // $2A80 + #$2A81, // $2A81 + #$2A82, // $2A82 + #$2A83, // $2A83 + #$2A84, // $2A84 + #$2A85, // $2A85 + #$2A86, // $2A86 + #$2A87, // $2A87 + #$2A88, // $2A88 + #$2A89, // $2A89 + #$2A8A, // $2A8A + #$2A8B, // $2A8B + #$2A8C, // $2A8C + #$2A8D, // $2A8D + #$2A8E, // $2A8E + #$2A8F, // $2A8F + #$2A90, // $2A90 + #$2A91, // $2A91 + #$2A92, // $2A92 + #$2A93, // $2A93 + #$2A94, // $2A94 + #$2A95, // $2A95 + #$2A96, // $2A96 + #$2A97, // $2A97 + #$2A98, // $2A98 + #$2A99, // $2A99 + #$2A9A, // $2A9A + #$2A9B, // $2A9B + #$2A9C, // $2A9C + #$2A9D, // $2A9D + #$2A9E, // $2A9E + #$2A9F, // $2A9F + #$2AA0, // $2AA0 + #$2AA1, // $2AA1 + #$2AA2, // $2AA2 + #$2AA3, // $2AA3 + #$2AA4, // $2AA4 + #$2AA5, // $2AA5 + #$2AA6, // $2AA6 + #$2AA7, // $2AA7 + #$2AA8, // $2AA8 + #$2AA9, // $2AA9 + #$2AAA, // $2AAA + #$2AAB, // $2AAB + #$2AAC, // $2AAC + #$2AAD, // $2AAD + #$2AAE, // $2AAE + #$2AAF, // $2AAF + #$2AB0, // $2AB0 + #$2AB1, // $2AB1 + #$2AB2, // $2AB2 + #$2AB3, // $2AB3 + #$2AB4, // $2AB4 + #$2AB5, // $2AB5 + #$2AB6, // $2AB6 + #$2AB7, // $2AB7 + #$2AB8, // $2AB8 + #$2AB9, // $2AB9 + #$2ABA, // $2ABA + #$2ABB, // $2ABB + #$2ABC, // $2ABC + #$2ABD, // $2ABD + #$2ABE, // $2ABE + #$2ABF, // $2ABF + #$2AC0, // $2AC0 + #$2AC1, // $2AC1 + #$2AC2, // $2AC2 + #$2AC3, // $2AC3 + #$2AC4, // $2AC4 + #$2AC5, // $2AC5 + #$2AC6, // $2AC6 + #$2AC7, // $2AC7 + #$2AC8, // $2AC8 + #$2AC9, // $2AC9 + #$2ACA, // $2ACA + #$2ACB, // $2ACB + #$2ACC, // $2ACC + #$2ACD, // $2ACD + #$2ACE, // $2ACE + #$2ACF, // $2ACF + #$2AD0, // $2AD0 + #$2AD1, // $2AD1 + #$2AD2, // $2AD2 + #$2AD3, // $2AD3 + #$2AD4, // $2AD4 + #$2AD5, // $2AD5 + #$2AD6, // $2AD6 + #$2AD7, // $2AD7 + #$2AD8, // $2AD8 + #$2AD9, // $2AD9 + #$2ADA, // $2ADA + #$2ADB, // $2ADB + #$2ADC, // $2ADC + #$2ADD, // $2ADD + #$2ADE, // $2ADE + #$2ADF, // $2ADF + #$2AE0, // $2AE0 + #$2AE1, // $2AE1 + #$2AE2, // $2AE2 + #$2AE3, // $2AE3 + #$2AE4, // $2AE4 + #$2AE5, // $2AE5 + #$2AE6, // $2AE6 + #$2AE7, // $2AE7 + #$2AE8, // $2AE8 + #$2AE9, // $2AE9 + #$2AEA, // $2AEA + #$2AEB, // $2AEB + #$2AEC, // $2AEC + #$2AED, // $2AED + #$2AEE, // $2AEE + #$2AEF, // $2AEF + #$2AF0, // $2AF0 + #$2AF1, // $2AF1 + #$2AF2, // $2AF2 + #$2AF3, // $2AF3 + #$2AF4, // $2AF4 + #$2AF5, // $2AF5 + #$2AF6, // $2AF6 + #$2AF7, // $2AF7 + #$2AF8, // $2AF8 + #$2AF9, // $2AF9 + #$2AFA, // $2AFA + #$2AFB, // $2AFB + #$2AFC, // $2AFC + #$2AFD, // $2AFD + #$2AFE, // $2AFE + #$2AFF, // $2AFF + #$2B00, // $2B00 + #$2B01, // $2B01 + #$2B02, // $2B02 + #$2B03, // $2B03 + #$2B04, // $2B04 + #$2B05, // $2B05 + #$2B06, // $2B06 + #$2B07, // $2B07 + #$2B08, // $2B08 + #$2B09, // $2B09 + #$2B0A, // $2B0A + #$2B0B, // $2B0B + #$2B0C, // $2B0C + #$2B0D, // $2B0D + #$2B0E, // $2B0E + #$2B0F, // $2B0F + #$2B10, // $2B10 + #$2B11, // $2B11 + #$2B12, // $2B12 + #$2B13, // $2B13 + #$2B14, // $2B14 + #$2B15, // $2B15 + #$2B16, // $2B16 + #$2B17, // $2B17 + #$2B18, // $2B18 + #$2B19, // $2B19 + #$2B1A, // $2B1A + #$2B1B, // $2B1B + #$2B1C, // $2B1C + #$2B1D, // $2B1D + #$2B1E, // $2B1E + #$2B1F, // $2B1F + #$2B20, // $2B20 + #$2B21, // $2B21 + #$2B22, // $2B22 + #$2B23, // $2B23 + #$2B24, // $2B24 + #$2B25, // $2B25 + #$2B26, // $2B26 + #$2B27, // $2B27 + #$2B28, // $2B28 + #$2B29, // $2B29 + #$2B2A, // $2B2A + #$2B2B, // $2B2B + #$2B2C, // $2B2C + #$2B2D, // $2B2D + #$2B2E, // $2B2E + #$2B2F, // $2B2F + #$2B30, // $2B30 + #$2B31, // $2B31 + #$2B32, // $2B32 + #$2B33, // $2B33 + #$2B34, // $2B34 + #$2B35, // $2B35 + #$2B36, // $2B36 + #$2B37, // $2B37 + #$2B38, // $2B38 + #$2B39, // $2B39 + #$2B3A, // $2B3A + #$2B3B, // $2B3B + #$2B3C, // $2B3C + #$2B3D, // $2B3D + #$2B3E, // $2B3E + #$2B3F, // $2B3F + #$2B40, // $2B40 + #$2B41, // $2B41 + #$2B42, // $2B42 + #$2B43, // $2B43 + #$2B44, // $2B44 + #$2B45, // $2B45 + #$2B46, // $2B46 + #$2B47, // $2B47 + #$2B48, // $2B48 + #$2B49, // $2B49 + #$2B4A, // $2B4A + #$2B4B, // $2B4B + #$2B4C, // $2B4C + #$2B4D, // $2B4D + #$2B4E, // $2B4E + #$2B4F, // $2B4F + #$2B50, // $2B50 + #$2B51, // $2B51 + #$2B52, // $2B52 + #$2B53, // $2B53 + #$2B54, // $2B54 + #$2B55, // $2B55 + #$2B56, // $2B56 + #$2B57, // $2B57 + #$2B58, // $2B58 + #$2B59, // $2B59 + #$2B5A, // $2B5A + #$2B5B, // $2B5B + #$2B5C, // $2B5C + #$2B5D, // $2B5D + #$2B5E, // $2B5E + #$2B5F, // $2B5F + #$2B60, // $2B60 + #$2B61, // $2B61 + #$2B62, // $2B62 + #$2B63, // $2B63 + #$2B64, // $2B64 + #$2B65, // $2B65 + #$2B66, // $2B66 + #$2B67, // $2B67 + #$2B68, // $2B68 + #$2B69, // $2B69 + #$2B6A, // $2B6A + #$2B6B, // $2B6B + #$2B6C, // $2B6C + #$2B6D, // $2B6D + #$2B6E, // $2B6E + #$2B6F, // $2B6F + #$2B70, // $2B70 + #$2B71, // $2B71 + #$2B72, // $2B72 + #$2B73, // $2B73 + #$2B74, // $2B74 + #$2B75, // $2B75 + #$2B76, // $2B76 + #$2B77, // $2B77 + #$2B78, // $2B78 + #$2B79, // $2B79 + #$2B7A, // $2B7A + #$2B7B, // $2B7B + #$2B7C, // $2B7C + #$2B7D, // $2B7D + #$2B7E, // $2B7E + #$2B7F, // $2B7F + #$2B80, // $2B80 + #$2B81, // $2B81 + #$2B82, // $2B82 + #$2B83, // $2B83 + #$2B84, // $2B84 + #$2B85, // $2B85 + #$2B86, // $2B86 + #$2B87, // $2B87 + #$2B88, // $2B88 + #$2B89, // $2B89 + #$2B8A, // $2B8A + #$2B8B, // $2B8B + #$2B8C, // $2B8C + #$2B8D, // $2B8D + #$2B8E, // $2B8E + #$2B8F, // $2B8F + #$2B90, // $2B90 + #$2B91, // $2B91 + #$2B92, // $2B92 + #$2B93, // $2B93 + #$2B94, // $2B94 + #$2B95, // $2B95 + #$2B96, // $2B96 + #$2B97, // $2B97 + #$2B98, // $2B98 + #$2B99, // $2B99 + #$2B9A, // $2B9A + #$2B9B, // $2B9B + #$2B9C, // $2B9C + #$2B9D, // $2B9D + #$2B9E, // $2B9E + #$2B9F, // $2B9F + #$2BA0, // $2BA0 + #$2BA1, // $2BA1 + #$2BA2, // $2BA2 + #$2BA3, // $2BA3 + #$2BA4, // $2BA4 + #$2BA5, // $2BA5 + #$2BA6, // $2BA6 + #$2BA7, // $2BA7 + #$2BA8, // $2BA8 + #$2BA9, // $2BA9 + #$2BAA, // $2BAA + #$2BAB, // $2BAB + #$2BAC, // $2BAC + #$2BAD, // $2BAD + #$2BAE, // $2BAE + #$2BAF, // $2BAF + #$2BB0, // $2BB0 + #$2BB1, // $2BB1 + #$2BB2, // $2BB2 + #$2BB3, // $2BB3 + #$2BB4, // $2BB4 + #$2BB5, // $2BB5 + #$2BB6, // $2BB6 + #$2BB7, // $2BB7 + #$2BB8, // $2BB8 + #$2BB9, // $2BB9 + #$2BBA, // $2BBA + #$2BBB, // $2BBB + #$2BBC, // $2BBC + #$2BBD, // $2BBD + #$2BBE, // $2BBE + #$2BBF, // $2BBF + #$2BC0, // $2BC0 + #$2BC1, // $2BC1 + #$2BC2, // $2BC2 + #$2BC3, // $2BC3 + #$2BC4, // $2BC4 + #$2BC5, // $2BC5 + #$2BC6, // $2BC6 + #$2BC7, // $2BC7 + #$2BC8, // $2BC8 + #$2BC9, // $2BC9 + #$2BCA, // $2BCA + #$2BCB, // $2BCB + #$2BCC, // $2BCC + #$2BCD, // $2BCD + #$2BCE, // $2BCE + #$2BCF, // $2BCF + #$2BD0, // $2BD0 + #$2BD1, // $2BD1 + #$2BD2, // $2BD2 + #$2BD3, // $2BD3 + #$2BD4, // $2BD4 + #$2BD5, // $2BD5 + #$2BD6, // $2BD6 + #$2BD7, // $2BD7 + #$2BD8, // $2BD8 + #$2BD9, // $2BD9 + #$2BDA, // $2BDA + #$2BDB, // $2BDB + #$2BDC, // $2BDC + #$2BDD, // $2BDD + #$2BDE, // $2BDE + #$2BDF, // $2BDF + #$2BE0, // $2BE0 + #$2BE1, // $2BE1 + #$2BE2, // $2BE2 + #$2BE3, // $2BE3 + #$2BE4, // $2BE4 + #$2BE5, // $2BE5 + #$2BE6, // $2BE6 + #$2BE7, // $2BE7 + #$2BE8, // $2BE8 + #$2BE9, // $2BE9 + #$2BEA, // $2BEA + #$2BEB, // $2BEB + #$2BEC, // $2BEC + #$2BED, // $2BED + #$2BEE, // $2BEE + #$2BEF, // $2BEF + #$2BF0, // $2BF0 + #$2BF1, // $2BF1 + #$2BF2, // $2BF2 + #$2BF3, // $2BF3 + #$2BF4, // $2BF4 + #$2BF5, // $2BF5 + #$2BF6, // $2BF6 + #$2BF7, // $2BF7 + #$2BF8, // $2BF8 + #$2BF9, // $2BF9 + #$2BFA, // $2BFA + #$2BFB, // $2BFB + #$2BFC, // $2BFC + #$2BFD, // $2BFD + #$2BFE, // $2BFE + #$2BFF, // $2BFF + #$2C00, // $2C00 + #$2C01, // $2C01 + #$2C02, // $2C02 + #$2C03, // $2C03 + #$2C04, // $2C04 + #$2C05, // $2C05 + #$2C06, // $2C06 + #$2C07, // $2C07 + #$2C08, // $2C08 + #$2C09, // $2C09 + #$2C0A, // $2C0A + #$2C0B, // $2C0B + #$2C0C, // $2C0C + #$2C0D, // $2C0D + #$2C0E, // $2C0E + #$2C0F, // $2C0F + #$2C10, // $2C10 + #$2C11, // $2C11 + #$2C12, // $2C12 + #$2C13, // $2C13 + #$2C14, // $2C14 + #$2C15, // $2C15 + #$2C16, // $2C16 + #$2C17, // $2C17 + #$2C18, // $2C18 + #$2C19, // $2C19 + #$2C1A, // $2C1A + #$2C1B, // $2C1B + #$2C1C, // $2C1C + #$2C1D, // $2C1D + #$2C1E, // $2C1E + #$2C1F, // $2C1F + #$2C20, // $2C20 + #$2C21, // $2C21 + #$2C22, // $2C22 + #$2C23, // $2C23 + #$2C24, // $2C24 + #$2C25, // $2C25 + #$2C26, // $2C26 + #$2C27, // $2C27 + #$2C28, // $2C28 + #$2C29, // $2C29 + #$2C2A, // $2C2A + #$2C2B, // $2C2B + #$2C2C, // $2C2C + #$2C2D, // $2C2D + #$2C2E, // $2C2E + #$2C2F, // $2C2F + #$2C00, // $2C30 + #$2C01, // $2C31 + #$2C02, // $2C32 + #$2C03, // $2C33 + #$2C04, // $2C34 + #$2C05, // $2C35 + #$2C06, // $2C36 + #$2C07, // $2C37 + #$2C08, // $2C38 + #$2C09, // $2C39 + #$2C0A, // $2C3A + #$2C0B, // $2C3B + #$2C0C, // $2C3C + #$2C0D, // $2C3D + #$2C0E, // $2C3E + #$2C0F, // $2C3F + #$2C10, // $2C40 + #$2C11, // $2C41 + #$2C12, // $2C42 + #$2C13, // $2C43 + #$2C14, // $2C44 + #$2C15, // $2C45 + #$2C16, // $2C46 + #$2C17, // $2C47 + #$2C18, // $2C48 + #$2C19, // $2C49 + #$2C1A, // $2C4A + #$2C1B, // $2C4B + #$2C1C, // $2C4C + #$2C1D, // $2C4D + #$2C1E, // $2C4E + #$2C1F, // $2C4F + #$2C20, // $2C50 + #$2C21, // $2C51 + #$2C22, // $2C52 + #$2C23, // $2C53 + #$2C24, // $2C54 + #$2C25, // $2C55 + #$2C26, // $2C56 + #$2C27, // $2C57 + #$2C28, // $2C58 + #$2C29, // $2C59 + #$2C2A, // $2C5A + #$2C2B, // $2C5B + #$2C2C, // $2C5C + #$2C2D, // $2C5D + #$2C2E, // $2C5E + #$2C5F, // $2C5F + #$2C60, // $2C60 + #$2C60, // $2C61 + #$2C62, // $2C62 + #$2C63, // $2C63 + #$2C64, // $2C64 + #$023A, // $2C65 + #$023E, // $2C66 + #$2C67, // $2C67 + #$2C67, // $2C68 + #$2C69, // $2C69 + #$2C69, // $2C6A + #$2C6B, // $2C6B + #$2C6B, // $2C6C + #$2C6D, // $2C6D + #$2C6E, // $2C6E + #$2C6F, // $2C6F + #$2C70, // $2C70 + #$2C71, // $2C71 + #$2C72, // $2C72 + #$2C72, // $2C73 + #$2C74, // $2C74 + #$2C75, // $2C75 + #$2C75, // $2C76 + #$2C77, // $2C77 + #$2C78, // $2C78 + #$2C79, // $2C79 + #$2C7A, // $2C7A + #$2C7B, // $2C7B + #$2C7C, // $2C7C + #$2C7D, // $2C7D + #$2C7E, // $2C7E + #$2C7F, // $2C7F + #$2C80, // $2C80 + #$2C80, // $2C81 + #$2C82, // $2C82 + #$2C82, // $2C83 + #$2C84, // $2C84 + #$2C84, // $2C85 + #$2C86, // $2C86 + #$2C86, // $2C87 + #$2C88, // $2C88 + #$2C88, // $2C89 + #$2C8A, // $2C8A + #$2C8A, // $2C8B + #$2C8C, // $2C8C + #$2C8C, // $2C8D + #$2C8E, // $2C8E + #$2C8E, // $2C8F + #$2C90, // $2C90 + #$2C90, // $2C91 + #$2C92, // $2C92 + #$2C92, // $2C93 + #$2C94, // $2C94 + #$2C94, // $2C95 + #$2C96, // $2C96 + #$2C96, // $2C97 + #$2C98, // $2C98 + #$2C98, // $2C99 + #$2C9A, // $2C9A + #$2C9A, // $2C9B + #$2C9C, // $2C9C + #$2C9C, // $2C9D + #$2C9E, // $2C9E + #$2C9E, // $2C9F + #$2CA0, // $2CA0 + #$2CA0, // $2CA1 + #$2CA2, // $2CA2 + #$2CA2, // $2CA3 + #$2CA4, // $2CA4 + #$2CA4, // $2CA5 + #$2CA6, // $2CA6 + #$2CA6, // $2CA7 + #$2CA8, // $2CA8 + #$2CA8, // $2CA9 + #$2CAA, // $2CAA + #$2CAA, // $2CAB + #$2CAC, // $2CAC + #$2CAC, // $2CAD + #$2CAE, // $2CAE + #$2CAE, // $2CAF + #$2CB0, // $2CB0 + #$2CB0, // $2CB1 + #$2CB2, // $2CB2 + #$2CB2, // $2CB3 + #$2CB4, // $2CB4 + #$2CB4, // $2CB5 + #$2CB6, // $2CB6 + #$2CB6, // $2CB7 + #$2CB8, // $2CB8 + #$2CB8, // $2CB9 + #$2CBA, // $2CBA + #$2CBA, // $2CBB + #$2CBC, // $2CBC + #$2CBC, // $2CBD + #$2CBE, // $2CBE + #$2CBE, // $2CBF + #$2CC0, // $2CC0 + #$2CC0, // $2CC1 + #$2CC2, // $2CC2 + #$2CC2, // $2CC3 + #$2CC4, // $2CC4 + #$2CC4, // $2CC5 + #$2CC6, // $2CC6 + #$2CC6, // $2CC7 + #$2CC8, // $2CC8 + #$2CC8, // $2CC9 + #$2CCA, // $2CCA + #$2CCA, // $2CCB + #$2CCC, // $2CCC + #$2CCC, // $2CCD + #$2CCE, // $2CCE + #$2CCE, // $2CCF + #$2CD0, // $2CD0 + #$2CD0, // $2CD1 + #$2CD2, // $2CD2 + #$2CD2, // $2CD3 + #$2CD4, // $2CD4 + #$2CD4, // $2CD5 + #$2CD6, // $2CD6 + #$2CD6, // $2CD7 + #$2CD8, // $2CD8 + #$2CD8, // $2CD9 + #$2CDA, // $2CDA + #$2CDA, // $2CDB + #$2CDC, // $2CDC + #$2CDC, // $2CDD + #$2CDE, // $2CDE + #$2CDE, // $2CDF + #$2CE0, // $2CE0 + #$2CE0, // $2CE1 + #$2CE2, // $2CE2 + #$2CE2, // $2CE3 + #$2CE4, // $2CE4 + #$2CE5, // $2CE5 + #$2CE6, // $2CE6 + #$2CE7, // $2CE7 + #$2CE8, // $2CE8 + #$2CE9, // $2CE9 + #$2CEA, // $2CEA + #$2CEB, // $2CEB + #$2CEB, // $2CEC + #$2CED, // $2CED + #$2CED, // $2CEE + #$2CEF, // $2CEF + #$2CF0, // $2CF0 + #$2CF1, // $2CF1 + #$2CF2, // $2CF2 + #$2CF2, // $2CF3 + #$2CF4, // $2CF4 + #$2CF5, // $2CF5 + #$2CF6, // $2CF6 + #$2CF7, // $2CF7 + #$2CF8, // $2CF8 + #$2CF9, // $2CF9 + #$2CFA, // $2CFA + #$2CFB, // $2CFB + #$2CFC, // $2CFC + #$2CFD, // $2CFD + #$2CFE, // $2CFE + #$2CFF, // $2CFF + #$10A0, // $2D00 + #$10A1, // $2D01 + #$10A2, // $2D02 + #$10A3, // $2D03 + #$10A4, // $2D04 + #$10A5, // $2D05 + #$10A6, // $2D06 + #$10A7, // $2D07 + #$10A8, // $2D08 + #$10A9, // $2D09 + #$10AA, // $2D0A + #$10AB, // $2D0B + #$10AC, // $2D0C + #$10AD, // $2D0D + #$10AE, // $2D0E + #$10AF, // $2D0F + #$10B0, // $2D10 + #$10B1, // $2D11 + #$10B2, // $2D12 + #$10B3, // $2D13 + #$10B4, // $2D14 + #$10B5, // $2D15 + #$10B6, // $2D16 + #$10B7, // $2D17 + #$10B8, // $2D18 + #$10B9, // $2D19 + #$10BA, // $2D1A + #$10BB, // $2D1B + #$10BC, // $2D1C + #$10BD, // $2D1D + #$10BE, // $2D1E + #$10BF, // $2D1F + #$10C0, // $2D20 + #$10C1, // $2D21 + #$10C2, // $2D22 + #$10C3, // $2D23 + #$10C4, // $2D24 + #$10C5, // $2D25 + #$2D26, // $2D26 + #$10C7, // $2D27 + #$2D28, // $2D28 + #$2D29, // $2D29 + #$2D2A, // $2D2A + #$2D2B, // $2D2B + #$2D2C, // $2D2C + #$10CD, // $2D2D + #$2D2E, // $2D2E + #$2D2F, // $2D2F + #$2D30, // $2D30 + #$2D31, // $2D31 + #$2D32, // $2D32 + #$2D33, // $2D33 + #$2D34, // $2D34 + #$2D35, // $2D35 + #$2D36, // $2D36 + #$2D37, // $2D37 + #$2D38, // $2D38 + #$2D39, // $2D39 + #$2D3A, // $2D3A + #$2D3B, // $2D3B + #$2D3C, // $2D3C + #$2D3D, // $2D3D + #$2D3E, // $2D3E + #$2D3F, // $2D3F + #$2D40, // $2D40 + #$2D41, // $2D41 + #$2D42, // $2D42 + #$2D43, // $2D43 + #$2D44, // $2D44 + #$2D45, // $2D45 + #$2D46, // $2D46 + #$2D47, // $2D47 + #$2D48, // $2D48 + #$2D49, // $2D49 + #$2D4A, // $2D4A + #$2D4B, // $2D4B + #$2D4C, // $2D4C + #$2D4D, // $2D4D + #$2D4E, // $2D4E + #$2D4F, // $2D4F + #$2D50, // $2D50 + #$2D51, // $2D51 + #$2D52, // $2D52 + #$2D53, // $2D53 + #$2D54, // $2D54 + #$2D55, // $2D55 + #$2D56, // $2D56 + #$2D57, // $2D57 + #$2D58, // $2D58 + #$2D59, // $2D59 + #$2D5A, // $2D5A + #$2D5B, // $2D5B + #$2D5C, // $2D5C + #$2D5D, // $2D5D + #$2D5E, // $2D5E + #$2D5F, // $2D5F + #$2D60, // $2D60 + #$2D61, // $2D61 + #$2D62, // $2D62 + #$2D63, // $2D63 + #$2D64, // $2D64 + #$2D65, // $2D65 + #$2D66, // $2D66 + #$2D67, // $2D67 + #$2D68, // $2D68 + #$2D69, // $2D69 + #$2D6A, // $2D6A + #$2D6B, // $2D6B + #$2D6C, // $2D6C + #$2D6D, // $2D6D + #$2D6E, // $2D6E + #$2D6F, // $2D6F + #$2D70, // $2D70 + #$2D71, // $2D71 + #$2D72, // $2D72 + #$2D73, // $2D73 + #$2D74, // $2D74 + #$2D75, // $2D75 + #$2D76, // $2D76 + #$2D77, // $2D77 + #$2D78, // $2D78 + #$2D79, // $2D79 + #$2D7A, // $2D7A + #$2D7B, // $2D7B + #$2D7C, // $2D7C + #$2D7D, // $2D7D + #$2D7E, // $2D7E + #$2D7F, // $2D7F + #$2D80, // $2D80 + #$2D81, // $2D81 + #$2D82, // $2D82 + #$2D83, // $2D83 + #$2D84, // $2D84 + #$2D85, // $2D85 + #$2D86, // $2D86 + #$2D87, // $2D87 + #$2D88, // $2D88 + #$2D89, // $2D89 + #$2D8A, // $2D8A + #$2D8B, // $2D8B + #$2D8C, // $2D8C + #$2D8D, // $2D8D + #$2D8E, // $2D8E + #$2D8F, // $2D8F + #$2D90, // $2D90 + #$2D91, // $2D91 + #$2D92, // $2D92 + #$2D93, // $2D93 + #$2D94, // $2D94 + #$2D95, // $2D95 + #$2D96, // $2D96 + #$2D97, // $2D97 + #$2D98, // $2D98 + #$2D99, // $2D99 + #$2D9A, // $2D9A + #$2D9B, // $2D9B + #$2D9C, // $2D9C + #$2D9D, // $2D9D + #$2D9E, // $2D9E + #$2D9F, // $2D9F + #$2DA0, // $2DA0 + #$2DA1, // $2DA1 + #$2DA2, // $2DA2 + #$2DA3, // $2DA3 + #$2DA4, // $2DA4 + #$2DA5, // $2DA5 + #$2DA6, // $2DA6 + #$2DA7, // $2DA7 + #$2DA8, // $2DA8 + #$2DA9, // $2DA9 + #$2DAA, // $2DAA + #$2DAB, // $2DAB + #$2DAC, // $2DAC + #$2DAD, // $2DAD + #$2DAE, // $2DAE + #$2DAF, // $2DAF + #$2DB0, // $2DB0 + #$2DB1, // $2DB1 + #$2DB2, // $2DB2 + #$2DB3, // $2DB3 + #$2DB4, // $2DB4 + #$2DB5, // $2DB5 + #$2DB6, // $2DB6 + #$2DB7, // $2DB7 + #$2DB8, // $2DB8 + #$2DB9, // $2DB9 + #$2DBA, // $2DBA + #$2DBB, // $2DBB + #$2DBC, // $2DBC + #$2DBD, // $2DBD + #$2DBE, // $2DBE + #$2DBF, // $2DBF + #$2DC0, // $2DC0 + #$2DC1, // $2DC1 + #$2DC2, // $2DC2 + #$2DC3, // $2DC3 + #$2DC4, // $2DC4 + #$2DC5, // $2DC5 + #$2DC6, // $2DC6 + #$2DC7, // $2DC7 + #$2DC8, // $2DC8 + #$2DC9, // $2DC9 + #$2DCA, // $2DCA + #$2DCB, // $2DCB + #$2DCC, // $2DCC + #$2DCD, // $2DCD + #$2DCE, // $2DCE + #$2DCF, // $2DCF + #$2DD0, // $2DD0 + #$2DD1, // $2DD1 + #$2DD2, // $2DD2 + #$2DD3, // $2DD3 + #$2DD4, // $2DD4 + #$2DD5, // $2DD5 + #$2DD6, // $2DD6 + #$2DD7, // $2DD7 + #$2DD8, // $2DD8 + #$2DD9, // $2DD9 + #$2DDA, // $2DDA + #$2DDB, // $2DDB + #$2DDC, // $2DDC + #$2DDD, // $2DDD + #$2DDE, // $2DDE + #$2DDF, // $2DDF + #$2DE0, // $2DE0 + #$2DE1, // $2DE1 + #$2DE2, // $2DE2 + #$2DE3, // $2DE3 + #$2DE4, // $2DE4 + #$2DE5, // $2DE5 + #$2DE6, // $2DE6 + #$2DE7, // $2DE7 + #$2DE8, // $2DE8 + #$2DE9, // $2DE9 + #$2DEA, // $2DEA + #$2DEB, // $2DEB + #$2DEC, // $2DEC + #$2DED, // $2DED + #$2DEE, // $2DEE + #$2DEF, // $2DEF + #$2DF0, // $2DF0 + #$2DF1, // $2DF1 + #$2DF2, // $2DF2 + #$2DF3, // $2DF3 + #$2DF4, // $2DF4 + #$2DF5, // $2DF5 + #$2DF6, // $2DF6 + #$2DF7, // $2DF7 + #$2DF8, // $2DF8 + #$2DF9, // $2DF9 + #$2DFA, // $2DFA + #$2DFB, // $2DFB + #$2DFC, // $2DFC + #$2DFD, // $2DFD + #$2DFE, // $2DFE + #$2DFF, // $2DFF + #$2E00, // $2E00 + #$2E01, // $2E01 + #$2E02, // $2E02 + #$2E03, // $2E03 + #$2E04, // $2E04 + #$2E05, // $2E05 + #$2E06, // $2E06 + #$2E07, // $2E07 + #$2E08, // $2E08 + #$2E09, // $2E09 + #$2E0A, // $2E0A + #$2E0B, // $2E0B + #$2E0C, // $2E0C + #$2E0D, // $2E0D + #$2E0E, // $2E0E + #$2E0F, // $2E0F + #$2E10, // $2E10 + #$2E11, // $2E11 + #$2E12, // $2E12 + #$2E13, // $2E13 + #$2E14, // $2E14 + #$2E15, // $2E15 + #$2E16, // $2E16 + #$2E17, // $2E17 + #$2E18, // $2E18 + #$2E19, // $2E19 + #$2E1A, // $2E1A + #$2E1B, // $2E1B + #$2E1C, // $2E1C + #$2E1D, // $2E1D + #$2E1E, // $2E1E + #$2E1F, // $2E1F + #$2E20, // $2E20 + #$2E21, // $2E21 + #$2E22, // $2E22 + #$2E23, // $2E23 + #$2E24, // $2E24 + #$2E25, // $2E25 + #$2E26, // $2E26 + #$2E27, // $2E27 + #$2E28, // $2E28 + #$2E29, // $2E29 + #$2E2A, // $2E2A + #$2E2B, // $2E2B + #$2E2C, // $2E2C + #$2E2D, // $2E2D + #$2E2E, // $2E2E + #$2E2F, // $2E2F + #$2E30, // $2E30 + #$2E31, // $2E31 + #$2E32, // $2E32 + #$2E33, // $2E33 + #$2E34, // $2E34 + #$2E35, // $2E35 + #$2E36, // $2E36 + #$2E37, // $2E37 + #$2E38, // $2E38 + #$2E39, // $2E39 + #$2E3A, // $2E3A + #$2E3B, // $2E3B + #$2E3C, // $2E3C + #$2E3D, // $2E3D + #$2E3E, // $2E3E + #$2E3F, // $2E3F + #$2E40, // $2E40 + #$2E41, // $2E41 + #$2E42, // $2E42 + #$2E43, // $2E43 + #$2E44, // $2E44 + #$2E45, // $2E45 + #$2E46, // $2E46 + #$2E47, // $2E47 + #$2E48, // $2E48 + #$2E49, // $2E49 + #$2E4A, // $2E4A + #$2E4B, // $2E4B + #$2E4C, // $2E4C + #$2E4D, // $2E4D + #$2E4E, // $2E4E + #$2E4F, // $2E4F + #$2E50, // $2E50 + #$2E51, // $2E51 + #$2E52, // $2E52 + #$2E53, // $2E53 + #$2E54, // $2E54 + #$2E55, // $2E55 + #$2E56, // $2E56 + #$2E57, // $2E57 + #$2E58, // $2E58 + #$2E59, // $2E59 + #$2E5A, // $2E5A + #$2E5B, // $2E5B + #$2E5C, // $2E5C + #$2E5D, // $2E5D + #$2E5E, // $2E5E + #$2E5F, // $2E5F + #$2E60, // $2E60 + #$2E61, // $2E61 + #$2E62, // $2E62 + #$2E63, // $2E63 + #$2E64, // $2E64 + #$2E65, // $2E65 + #$2E66, // $2E66 + #$2E67, // $2E67 + #$2E68, // $2E68 + #$2E69, // $2E69 + #$2E6A, // $2E6A + #$2E6B, // $2E6B + #$2E6C, // $2E6C + #$2E6D, // $2E6D + #$2E6E, // $2E6E + #$2E6F, // $2E6F + #$2E70, // $2E70 + #$2E71, // $2E71 + #$2E72, // $2E72 + #$2E73, // $2E73 + #$2E74, // $2E74 + #$2E75, // $2E75 + #$2E76, // $2E76 + #$2E77, // $2E77 + #$2E78, // $2E78 + #$2E79, // $2E79 + #$2E7A, // $2E7A + #$2E7B, // $2E7B + #$2E7C, // $2E7C + #$2E7D, // $2E7D + #$2E7E, // $2E7E + #$2E7F, // $2E7F + #$2E80, // $2E80 + #$2E81, // $2E81 + #$2E82, // $2E82 + #$2E83, // $2E83 + #$2E84, // $2E84 + #$2E85, // $2E85 + #$2E86, // $2E86 + #$2E87, // $2E87 + #$2E88, // $2E88 + #$2E89, // $2E89 + #$2E8A, // $2E8A + #$2E8B, // $2E8B + #$2E8C, // $2E8C + #$2E8D, // $2E8D + #$2E8E, // $2E8E + #$2E8F, // $2E8F + #$2E90, // $2E90 + #$2E91, // $2E91 + #$2E92, // $2E92 + #$2E93, // $2E93 + #$2E94, // $2E94 + #$2E95, // $2E95 + #$2E96, // $2E96 + #$2E97, // $2E97 + #$2E98, // $2E98 + #$2E99, // $2E99 + #$2E9A, // $2E9A + #$2E9B, // $2E9B + #$2E9C, // $2E9C + #$2E9D, // $2E9D + #$2E9E, // $2E9E + #$2E9F, // $2E9F + #$2EA0, // $2EA0 + #$2EA1, // $2EA1 + #$2EA2, // $2EA2 + #$2EA3, // $2EA3 + #$2EA4, // $2EA4 + #$2EA5, // $2EA5 + #$2EA6, // $2EA6 + #$2EA7, // $2EA7 + #$2EA8, // $2EA8 + #$2EA9, // $2EA9 + #$2EAA, // $2EAA + #$2EAB, // $2EAB + #$2EAC, // $2EAC + #$2EAD, // $2EAD + #$2EAE, // $2EAE + #$2EAF, // $2EAF + #$2EB0, // $2EB0 + #$2EB1, // $2EB1 + #$2EB2, // $2EB2 + #$2EB3, // $2EB3 + #$2EB4, // $2EB4 + #$2EB5, // $2EB5 + #$2EB6, // $2EB6 + #$2EB7, // $2EB7 + #$2EB8, // $2EB8 + #$2EB9, // $2EB9 + #$2EBA, // $2EBA + #$2EBB, // $2EBB + #$2EBC, // $2EBC + #$2EBD, // $2EBD + #$2EBE, // $2EBE + #$2EBF, // $2EBF + #$2EC0, // $2EC0 + #$2EC1, // $2EC1 + #$2EC2, // $2EC2 + #$2EC3, // $2EC3 + #$2EC4, // $2EC4 + #$2EC5, // $2EC5 + #$2EC6, // $2EC6 + #$2EC7, // $2EC7 + #$2EC8, // $2EC8 + #$2EC9, // $2EC9 + #$2ECA, // $2ECA + #$2ECB, // $2ECB + #$2ECC, // $2ECC + #$2ECD, // $2ECD + #$2ECE, // $2ECE + #$2ECF, // $2ECF + #$2ED0, // $2ED0 + #$2ED1, // $2ED1 + #$2ED2, // $2ED2 + #$2ED3, // $2ED3 + #$2ED4, // $2ED4 + #$2ED5, // $2ED5 + #$2ED6, // $2ED6 + #$2ED7, // $2ED7 + #$2ED8, // $2ED8 + #$2ED9, // $2ED9 + #$2EDA, // $2EDA + #$2EDB, // $2EDB + #$2EDC, // $2EDC + #$2EDD, // $2EDD + #$2EDE, // $2EDE + #$2EDF, // $2EDF + #$2EE0, // $2EE0 + #$2EE1, // $2EE1 + #$2EE2, // $2EE2 + #$2EE3, // $2EE3 + #$2EE4, // $2EE4 + #$2EE5, // $2EE5 + #$2EE6, // $2EE6 + #$2EE7, // $2EE7 + #$2EE8, // $2EE8 + #$2EE9, // $2EE9 + #$2EEA, // $2EEA + #$2EEB, // $2EEB + #$2EEC, // $2EEC + #$2EED, // $2EED + #$2EEE, // $2EEE + #$2EEF, // $2EEF + #$2EF0, // $2EF0 + #$2EF1, // $2EF1 + #$2EF2, // $2EF2 + #$2EF3, // $2EF3 + #$2EF4, // $2EF4 + #$2EF5, // $2EF5 + #$2EF6, // $2EF6 + #$2EF7, // $2EF7 + #$2EF8, // $2EF8 + #$2EF9, // $2EF9 + #$2EFA, // $2EFA + #$2EFB, // $2EFB + #$2EFC, // $2EFC + #$2EFD, // $2EFD + #$2EFE, // $2EFE + #$2EFF, // $2EFF + #$2F00, // $2F00 + #$2F01, // $2F01 + #$2F02, // $2F02 + #$2F03, // $2F03 + #$2F04, // $2F04 + #$2F05, // $2F05 + #$2F06, // $2F06 + #$2F07, // $2F07 + #$2F08, // $2F08 + #$2F09, // $2F09 + #$2F0A, // $2F0A + #$2F0B, // $2F0B + #$2F0C, // $2F0C + #$2F0D, // $2F0D + #$2F0E, // $2F0E + #$2F0F, // $2F0F + #$2F10, // $2F10 + #$2F11, // $2F11 + #$2F12, // $2F12 + #$2F13, // $2F13 + #$2F14, // $2F14 + #$2F15, // $2F15 + #$2F16, // $2F16 + #$2F17, // $2F17 + #$2F18, // $2F18 + #$2F19, // $2F19 + #$2F1A, // $2F1A + #$2F1B, // $2F1B + #$2F1C, // $2F1C + #$2F1D, // $2F1D + #$2F1E, // $2F1E + #$2F1F, // $2F1F + #$2F20, // $2F20 + #$2F21, // $2F21 + #$2F22, // $2F22 + #$2F23, // $2F23 + #$2F24, // $2F24 + #$2F25, // $2F25 + #$2F26, // $2F26 + #$2F27, // $2F27 + #$2F28, // $2F28 + #$2F29, // $2F29 + #$2F2A, // $2F2A + #$2F2B, // $2F2B + #$2F2C, // $2F2C + #$2F2D, // $2F2D + #$2F2E, // $2F2E + #$2F2F, // $2F2F + #$2F30, // $2F30 + #$2F31, // $2F31 + #$2F32, // $2F32 + #$2F33, // $2F33 + #$2F34, // $2F34 + #$2F35, // $2F35 + #$2F36, // $2F36 + #$2F37, // $2F37 + #$2F38, // $2F38 + #$2F39, // $2F39 + #$2F3A, // $2F3A + #$2F3B, // $2F3B + #$2F3C, // $2F3C + #$2F3D, // $2F3D + #$2F3E, // $2F3E + #$2F3F, // $2F3F + #$2F40, // $2F40 + #$2F41, // $2F41 + #$2F42, // $2F42 + #$2F43, // $2F43 + #$2F44, // $2F44 + #$2F45, // $2F45 + #$2F46, // $2F46 + #$2F47, // $2F47 + #$2F48, // $2F48 + #$2F49, // $2F49 + #$2F4A, // $2F4A + #$2F4B, // $2F4B + #$2F4C, // $2F4C + #$2F4D, // $2F4D + #$2F4E, // $2F4E + #$2F4F, // $2F4F + #$2F50, // $2F50 + #$2F51, // $2F51 + #$2F52, // $2F52 + #$2F53, // $2F53 + #$2F54, // $2F54 + #$2F55, // $2F55 + #$2F56, // $2F56 + #$2F57, // $2F57 + #$2F58, // $2F58 + #$2F59, // $2F59 + #$2F5A, // $2F5A + #$2F5B, // $2F5B + #$2F5C, // $2F5C + #$2F5D, // $2F5D + #$2F5E, // $2F5E + #$2F5F, // $2F5F + #$2F60, // $2F60 + #$2F61, // $2F61 + #$2F62, // $2F62 + #$2F63, // $2F63 + #$2F64, // $2F64 + #$2F65, // $2F65 + #$2F66, // $2F66 + #$2F67, // $2F67 + #$2F68, // $2F68 + #$2F69, // $2F69 + #$2F6A, // $2F6A + #$2F6B, // $2F6B + #$2F6C, // $2F6C + #$2F6D, // $2F6D + #$2F6E, // $2F6E + #$2F6F, // $2F6F + #$2F70, // $2F70 + #$2F71, // $2F71 + #$2F72, // $2F72 + #$2F73, // $2F73 + #$2F74, // $2F74 + #$2F75, // $2F75 + #$2F76, // $2F76 + #$2F77, // $2F77 + #$2F78, // $2F78 + #$2F79, // $2F79 + #$2F7A, // $2F7A + #$2F7B, // $2F7B + #$2F7C, // $2F7C + #$2F7D, // $2F7D + #$2F7E, // $2F7E + #$2F7F, // $2F7F + #$2F80, // $2F80 + #$2F81, // $2F81 + #$2F82, // $2F82 + #$2F83, // $2F83 + #$2F84, // $2F84 + #$2F85, // $2F85 + #$2F86, // $2F86 + #$2F87, // $2F87 + #$2F88, // $2F88 + #$2F89, // $2F89 + #$2F8A, // $2F8A + #$2F8B, // $2F8B + #$2F8C, // $2F8C + #$2F8D, // $2F8D + #$2F8E, // $2F8E + #$2F8F, // $2F8F + #$2F90, // $2F90 + #$2F91, // $2F91 + #$2F92, // $2F92 + #$2F93, // $2F93 + #$2F94, // $2F94 + #$2F95, // $2F95 + #$2F96, // $2F96 + #$2F97, // $2F97 + #$2F98, // $2F98 + #$2F99, // $2F99 + #$2F9A, // $2F9A + #$2F9B, // $2F9B + #$2F9C, // $2F9C + #$2F9D, // $2F9D + #$2F9E, // $2F9E + #$2F9F, // $2F9F + #$2FA0, // $2FA0 + #$2FA1, // $2FA1 + #$2FA2, // $2FA2 + #$2FA3, // $2FA3 + #$2FA4, // $2FA4 + #$2FA5, // $2FA5 + #$2FA6, // $2FA6 + #$2FA7, // $2FA7 + #$2FA8, // $2FA8 + #$2FA9, // $2FA9 + #$2FAA, // $2FAA + #$2FAB, // $2FAB + #$2FAC, // $2FAC + #$2FAD, // $2FAD + #$2FAE, // $2FAE + #$2FAF, // $2FAF + #$2FB0, // $2FB0 + #$2FB1, // $2FB1 + #$2FB2, // $2FB2 + #$2FB3, // $2FB3 + #$2FB4, // $2FB4 + #$2FB5, // $2FB5 + #$2FB6, // $2FB6 + #$2FB7, // $2FB7 + #$2FB8, // $2FB8 + #$2FB9, // $2FB9 + #$2FBA, // $2FBA + #$2FBB, // $2FBB + #$2FBC, // $2FBC + #$2FBD, // $2FBD + #$2FBE, // $2FBE + #$2FBF, // $2FBF + #$2FC0, // $2FC0 + #$2FC1, // $2FC1 + #$2FC2, // $2FC2 + #$2FC3, // $2FC3 + #$2FC4, // $2FC4 + #$2FC5, // $2FC5 + #$2FC6, // $2FC6 + #$2FC7, // $2FC7 + #$2FC8, // $2FC8 + #$2FC9, // $2FC9 + #$2FCA, // $2FCA + #$2FCB, // $2FCB + #$2FCC, // $2FCC + #$2FCD, // $2FCD + #$2FCE, // $2FCE + #$2FCF, // $2FCF + #$2FD0, // $2FD0 + #$2FD1, // $2FD1 + #$2FD2, // $2FD2 + #$2FD3, // $2FD3 + #$2FD4, // $2FD4 + #$2FD5, // $2FD5 + #$2FD6, // $2FD6 + #$2FD7, // $2FD7 + #$2FD8, // $2FD8 + #$2FD9, // $2FD9 + #$2FDA, // $2FDA + #$2FDB, // $2FDB + #$2FDC, // $2FDC + #$2FDD, // $2FDD + #$2FDE, // $2FDE + #$2FDF, // $2FDF + #$2FE0, // $2FE0 + #$2FE1, // $2FE1 + #$2FE2, // $2FE2 + #$2FE3, // $2FE3 + #$2FE4, // $2FE4 + #$2FE5, // $2FE5 + #$2FE6, // $2FE6 + #$2FE7, // $2FE7 + #$2FE8, // $2FE8 + #$2FE9, // $2FE9 + #$2FEA, // $2FEA + #$2FEB, // $2FEB + #$2FEC, // $2FEC + #$2FED, // $2FED + #$2FEE, // $2FEE + #$2FEF, // $2FEF + #$2FF0, // $2FF0 + #$2FF1, // $2FF1 + #$2FF2, // $2FF2 + #$2FF3, // $2FF3 + #$2FF4, // $2FF4 + #$2FF5, // $2FF5 + #$2FF6, // $2FF6 + #$2FF7, // $2FF7 + #$2FF8, // $2FF8 + #$2FF9, // $2FF9 + #$2FFA, // $2FFA + #$2FFB, // $2FFB + #$2FFC, // $2FFC + #$2FFD, // $2FFD + #$2FFE, // $2FFE + #$2FFF, // $2FFF + #$3000, // $3000 + #$3001, // $3001 + #$3002, // $3002 + #$3003, // $3003 + #$3004, // $3004 + #$3005, // $3005 + #$3006, // $3006 + #$3007, // $3007 + #$3008, // $3008 + #$3009, // $3009 + #$300A, // $300A + #$300B, // $300B + #$300C, // $300C + #$300D, // $300D + #$300E, // $300E + #$300F, // $300F + #$3010, // $3010 + #$3011, // $3011 + #$3012, // $3012 + #$3013, // $3013 + #$3014, // $3014 + #$3015, // $3015 + #$3016, // $3016 + #$3017, // $3017 + #$3018, // $3018 + #$3019, // $3019 + #$301A, // $301A + #$301B, // $301B + #$301C, // $301C + #$301D, // $301D + #$301E, // $301E + #$301F, // $301F + #$3020, // $3020 + #$3021, // $3021 + #$3022, // $3022 + #$3023, // $3023 + #$3024, // $3024 + #$3025, // $3025 + #$3026, // $3026 + #$3027, // $3027 + #$3028, // $3028 + #$3029, // $3029 + #$302A, // $302A + #$302B, // $302B + #$302C, // $302C + #$302D, // $302D + #$302E, // $302E + #$302F, // $302F + #$3030, // $3030 + #$3031, // $3031 + #$3032, // $3032 + #$3033, // $3033 + #$3034, // $3034 + #$3035, // $3035 + #$3036, // $3036 + #$3037, // $3037 + #$3038, // $3038 + #$3039, // $3039 + #$303A, // $303A + #$303B, // $303B + #$303C, // $303C + #$303D, // $303D + #$303E, // $303E + #$303F, // $303F + #$3040, // $3040 + #$3041, // $3041 + #$3042, // $3042 + #$3043, // $3043 + #$3044, // $3044 + #$3045, // $3045 + #$3046, // $3046 + #$3047, // $3047 + #$3048, // $3048 + #$3049, // $3049 + #$304A, // $304A + #$304B, // $304B + #$304C, // $304C + #$304D, // $304D + #$304E, // $304E + #$304F, // $304F + #$3050, // $3050 + #$3051, // $3051 + #$3052, // $3052 + #$3053, // $3053 + #$3054, // $3054 + #$3055, // $3055 + #$3056, // $3056 + #$3057, // $3057 + #$3058, // $3058 + #$3059, // $3059 + #$305A, // $305A + #$305B, // $305B + #$305C, // $305C + #$305D, // $305D + #$305E, // $305E + #$305F, // $305F + #$3060, // $3060 + #$3061, // $3061 + #$3062, // $3062 + #$3063, // $3063 + #$3064, // $3064 + #$3065, // $3065 + #$3066, // $3066 + #$3067, // $3067 + #$3068, // $3068 + #$3069, // $3069 + #$306A, // $306A + #$306B, // $306B + #$306C, // $306C + #$306D, // $306D + #$306E, // $306E + #$306F, // $306F + #$3070, // $3070 + #$3071, // $3071 + #$3072, // $3072 + #$3073, // $3073 + #$3074, // $3074 + #$3075, // $3075 + #$3076, // $3076 + #$3077, // $3077 + #$3078, // $3078 + #$3079, // $3079 + #$307A, // $307A + #$307B, // $307B + #$307C, // $307C + #$307D, // $307D + #$307E, // $307E + #$307F, // $307F + #$3080, // $3080 + #$3081, // $3081 + #$3082, // $3082 + #$3083, // $3083 + #$3084, // $3084 + #$3085, // $3085 + #$3086, // $3086 + #$3087, // $3087 + #$3088, // $3088 + #$3089, // $3089 + #$308A, // $308A + #$308B, // $308B + #$308C, // $308C + #$308D, // $308D + #$308E, // $308E + #$308F, // $308F + #$3090, // $3090 + #$3091, // $3091 + #$3092, // $3092 + #$3093, // $3093 + #$3094, // $3094 + #$3095, // $3095 + #$3096, // $3096 + #$3097, // $3097 + #$3098, // $3098 + #$3099, // $3099 + #$309A, // $309A + #$309B, // $309B + #$309C, // $309C + #$309D, // $309D + #$309E, // $309E + #$309F, // $309F + #$30A0, // $30A0 + #$30A1, // $30A1 + #$30A2, // $30A2 + #$30A3, // $30A3 + #$30A4, // $30A4 + #$30A5, // $30A5 + #$30A6, // $30A6 + #$30A7, // $30A7 + #$30A8, // $30A8 + #$30A9, // $30A9 + #$30AA, // $30AA + #$30AB, // $30AB + #$30AC, // $30AC + #$30AD, // $30AD + #$30AE, // $30AE + #$30AF, // $30AF + #$30B0, // $30B0 + #$30B1, // $30B1 + #$30B2, // $30B2 + #$30B3, // $30B3 + #$30B4, // $30B4 + #$30B5, // $30B5 + #$30B6, // $30B6 + #$30B7, // $30B7 + #$30B8, // $30B8 + #$30B9, // $30B9 + #$30BA, // $30BA + #$30BB, // $30BB + #$30BC, // $30BC + #$30BD, // $30BD + #$30BE, // $30BE + #$30BF, // $30BF + #$30C0, // $30C0 + #$30C1, // $30C1 + #$30C2, // $30C2 + #$30C3, // $30C3 + #$30C4, // $30C4 + #$30C5, // $30C5 + #$30C6, // $30C6 + #$30C7, // $30C7 + #$30C8, // $30C8 + #$30C9, // $30C9 + #$30CA, // $30CA + #$30CB, // $30CB + #$30CC, // $30CC + #$30CD, // $30CD + #$30CE, // $30CE + #$30CF, // $30CF + #$30D0, // $30D0 + #$30D1, // $30D1 + #$30D2, // $30D2 + #$30D3, // $30D3 + #$30D4, // $30D4 + #$30D5, // $30D5 + #$30D6, // $30D6 + #$30D7, // $30D7 + #$30D8, // $30D8 + #$30D9, // $30D9 + #$30DA, // $30DA + #$30DB, // $30DB + #$30DC, // $30DC + #$30DD, // $30DD + #$30DE, // $30DE + #$30DF, // $30DF + #$30E0, // $30E0 + #$30E1, // $30E1 + #$30E2, // $30E2 + #$30E3, // $30E3 + #$30E4, // $30E4 + #$30E5, // $30E5 + #$30E6, // $30E6 + #$30E7, // $30E7 + #$30E8, // $30E8 + #$30E9, // $30E9 + #$30EA, // $30EA + #$30EB, // $30EB + #$30EC, // $30EC + #$30ED, // $30ED + #$30EE, // $30EE + #$30EF, // $30EF + #$30F0, // $30F0 + #$30F1, // $30F1 + #$30F2, // $30F2 + #$30F3, // $30F3 + #$30F4, // $30F4 + #$30F5, // $30F5 + #$30F6, // $30F6 + #$30F7, // $30F7 + #$30F8, // $30F8 + #$30F9, // $30F9 + #$30FA, // $30FA + #$30FB, // $30FB + #$30FC, // $30FC + #$30FD, // $30FD + #$30FE, // $30FE + #$30FF, // $30FF + #$3100, // $3100 + #$3101, // $3101 + #$3102, // $3102 + #$3103, // $3103 + #$3104, // $3104 + #$3105, // $3105 + #$3106, // $3106 + #$3107, // $3107 + #$3108, // $3108 + #$3109, // $3109 + #$310A, // $310A + #$310B, // $310B + #$310C, // $310C + #$310D, // $310D + #$310E, // $310E + #$310F, // $310F + #$3110, // $3110 + #$3111, // $3111 + #$3112, // $3112 + #$3113, // $3113 + #$3114, // $3114 + #$3115, // $3115 + #$3116, // $3116 + #$3117, // $3117 + #$3118, // $3118 + #$3119, // $3119 + #$311A, // $311A + #$311B, // $311B + #$311C, // $311C + #$311D, // $311D + #$311E, // $311E + #$311F, // $311F + #$3120, // $3120 + #$3121, // $3121 + #$3122, // $3122 + #$3123, // $3123 + #$3124, // $3124 + #$3125, // $3125 + #$3126, // $3126 + #$3127, // $3127 + #$3128, // $3128 + #$3129, // $3129 + #$312A, // $312A + #$312B, // $312B + #$312C, // $312C + #$312D, // $312D + #$312E, // $312E + #$312F, // $312F + #$3130, // $3130 + #$3131, // $3131 + #$3132, // $3132 + #$3133, // $3133 + #$3134, // $3134 + #$3135, // $3135 + #$3136, // $3136 + #$3137, // $3137 + #$3138, // $3138 + #$3139, // $3139 + #$313A, // $313A + #$313B, // $313B + #$313C, // $313C + #$313D, // $313D + #$313E, // $313E + #$313F, // $313F + #$3140, // $3140 + #$3141, // $3141 + #$3142, // $3142 + #$3143, // $3143 + #$3144, // $3144 + #$3145, // $3145 + #$3146, // $3146 + #$3147, // $3147 + #$3148, // $3148 + #$3149, // $3149 + #$314A, // $314A + #$314B, // $314B + #$314C, // $314C + #$314D, // $314D + #$314E, // $314E + #$314F, // $314F + #$3150, // $3150 + #$3151, // $3151 + #$3152, // $3152 + #$3153, // $3153 + #$3154, // $3154 + #$3155, // $3155 + #$3156, // $3156 + #$3157, // $3157 + #$3158, // $3158 + #$3159, // $3159 + #$315A, // $315A + #$315B, // $315B + #$315C, // $315C + #$315D, // $315D + #$315E, // $315E + #$315F, // $315F + #$3160, // $3160 + #$3161, // $3161 + #$3162, // $3162 + #$3163, // $3163 + #$3164, // $3164 + #$3165, // $3165 + #$3166, // $3166 + #$3167, // $3167 + #$3168, // $3168 + #$3169, // $3169 + #$316A, // $316A + #$316B, // $316B + #$316C, // $316C + #$316D, // $316D + #$316E, // $316E + #$316F, // $316F + #$3170, // $3170 + #$3171, // $3171 + #$3172, // $3172 + #$3173, // $3173 + #$3174, // $3174 + #$3175, // $3175 + #$3176, // $3176 + #$3177, // $3177 + #$3178, // $3178 + #$3179, // $3179 + #$317A, // $317A + #$317B, // $317B + #$317C, // $317C + #$317D, // $317D + #$317E, // $317E + #$317F, // $317F + #$3180, // $3180 + #$3181, // $3181 + #$3182, // $3182 + #$3183, // $3183 + #$3184, // $3184 + #$3185, // $3185 + #$3186, // $3186 + #$3187, // $3187 + #$3188, // $3188 + #$3189, // $3189 + #$318A, // $318A + #$318B, // $318B + #$318C, // $318C + #$318D, // $318D + #$318E, // $318E + #$318F, // $318F + #$3190, // $3190 + #$3191, // $3191 + #$3192, // $3192 + #$3193, // $3193 + #$3194, // $3194 + #$3195, // $3195 + #$3196, // $3196 + #$3197, // $3197 + #$3198, // $3198 + #$3199, // $3199 + #$319A, // $319A + #$319B, // $319B + #$319C, // $319C + #$319D, // $319D + #$319E, // $319E + #$319F, // $319F + #$31A0, // $31A0 + #$31A1, // $31A1 + #$31A2, // $31A2 + #$31A3, // $31A3 + #$31A4, // $31A4 + #$31A5, // $31A5 + #$31A6, // $31A6 + #$31A7, // $31A7 + #$31A8, // $31A8 + #$31A9, // $31A9 + #$31AA, // $31AA + #$31AB, // $31AB + #$31AC, // $31AC + #$31AD, // $31AD + #$31AE, // $31AE + #$31AF, // $31AF + #$31B0, // $31B0 + #$31B1, // $31B1 + #$31B2, // $31B2 + #$31B3, // $31B3 + #$31B4, // $31B4 + #$31B5, // $31B5 + #$31B6, // $31B6 + #$31B7, // $31B7 + #$31B8, // $31B8 + #$31B9, // $31B9 + #$31BA, // $31BA + #$31BB, // $31BB + #$31BC, // $31BC + #$31BD, // $31BD + #$31BE, // $31BE + #$31BF, // $31BF + #$31C0, // $31C0 + #$31C1, // $31C1 + #$31C2, // $31C2 + #$31C3, // $31C3 + #$31C4, // $31C4 + #$31C5, // $31C5 + #$31C6, // $31C6 + #$31C7, // $31C7 + #$31C8, // $31C8 + #$31C9, // $31C9 + #$31CA, // $31CA + #$31CB, // $31CB + #$31CC, // $31CC + #$31CD, // $31CD + #$31CE, // $31CE + #$31CF, // $31CF + #$31D0, // $31D0 + #$31D1, // $31D1 + #$31D2, // $31D2 + #$31D3, // $31D3 + #$31D4, // $31D4 + #$31D5, // $31D5 + #$31D6, // $31D6 + #$31D7, // $31D7 + #$31D8, // $31D8 + #$31D9, // $31D9 + #$31DA, // $31DA + #$31DB, // $31DB + #$31DC, // $31DC + #$31DD, // $31DD + #$31DE, // $31DE + #$31DF, // $31DF + #$31E0, // $31E0 + #$31E1, // $31E1 + #$31E2, // $31E2 + #$31E3, // $31E3 + #$31E4, // $31E4 + #$31E5, // $31E5 + #$31E6, // $31E6 + #$31E7, // $31E7 + #$31E8, // $31E8 + #$31E9, // $31E9 + #$31EA, // $31EA + #$31EB, // $31EB + #$31EC, // $31EC + #$31ED, // $31ED + #$31EE, // $31EE + #$31EF, // $31EF + #$31F0, // $31F0 + #$31F1, // $31F1 + #$31F2, // $31F2 + #$31F3, // $31F3 + #$31F4, // $31F4 + #$31F5, // $31F5 + #$31F6, // $31F6 + #$31F7, // $31F7 + #$31F8, // $31F8 + #$31F9, // $31F9 + #$31FA, // $31FA + #$31FB, // $31FB + #$31FC, // $31FC + #$31FD, // $31FD + #$31FE, // $31FE + #$31FF, // $31FF + #$3200, // $3200 + #$3201, // $3201 + #$3202, // $3202 + #$3203, // $3203 + #$3204, // $3204 + #$3205, // $3205 + #$3206, // $3206 + #$3207, // $3207 + #$3208, // $3208 + #$3209, // $3209 + #$320A, // $320A + #$320B, // $320B + #$320C, // $320C + #$320D, // $320D + #$320E, // $320E + #$320F, // $320F + #$3210, // $3210 + #$3211, // $3211 + #$3212, // $3212 + #$3213, // $3213 + #$3214, // $3214 + #$3215, // $3215 + #$3216, // $3216 + #$3217, // $3217 + #$3218, // $3218 + #$3219, // $3219 + #$321A, // $321A + #$321B, // $321B + #$321C, // $321C + #$321D, // $321D + #$321E, // $321E + #$321F, // $321F + #$3220, // $3220 + #$3221, // $3221 + #$3222, // $3222 + #$3223, // $3223 + #$3224, // $3224 + #$3225, // $3225 + #$3226, // $3226 + #$3227, // $3227 + #$3228, // $3228 + #$3229, // $3229 + #$322A, // $322A + #$322B, // $322B + #$322C, // $322C + #$322D, // $322D + #$322E, // $322E + #$322F, // $322F + #$3230, // $3230 + #$3231, // $3231 + #$3232, // $3232 + #$3233, // $3233 + #$3234, // $3234 + #$3235, // $3235 + #$3236, // $3236 + #$3237, // $3237 + #$3238, // $3238 + #$3239, // $3239 + #$323A, // $323A + #$323B, // $323B + #$323C, // $323C + #$323D, // $323D + #$323E, // $323E + #$323F, // $323F + #$3240, // $3240 + #$3241, // $3241 + #$3242, // $3242 + #$3243, // $3243 + #$3244, // $3244 + #$3245, // $3245 + #$3246, // $3246 + #$3247, // $3247 + #$3248, // $3248 + #$3249, // $3249 + #$324A, // $324A + #$324B, // $324B + #$324C, // $324C + #$324D, // $324D + #$324E, // $324E + #$324F, // $324F + #$3250, // $3250 + #$3251, // $3251 + #$3252, // $3252 + #$3253, // $3253 + #$3254, // $3254 + #$3255, // $3255 + #$3256, // $3256 + #$3257, // $3257 + #$3258, // $3258 + #$3259, // $3259 + #$325A, // $325A + #$325B, // $325B + #$325C, // $325C + #$325D, // $325D + #$325E, // $325E + #$325F, // $325F + #$3260, // $3260 + #$3261, // $3261 + #$3262, // $3262 + #$3263, // $3263 + #$3264, // $3264 + #$3265, // $3265 + #$3266, // $3266 + #$3267, // $3267 + #$3268, // $3268 + #$3269, // $3269 + #$326A, // $326A + #$326B, // $326B + #$326C, // $326C + #$326D, // $326D + #$326E, // $326E + #$326F, // $326F + #$3270, // $3270 + #$3271, // $3271 + #$3272, // $3272 + #$3273, // $3273 + #$3274, // $3274 + #$3275, // $3275 + #$3276, // $3276 + #$3277, // $3277 + #$3278, // $3278 + #$3279, // $3279 + #$327A, // $327A + #$327B, // $327B + #$327C, // $327C + #$327D, // $327D + #$327E, // $327E + #$327F, // $327F + #$3280, // $3280 + #$3281, // $3281 + #$3282, // $3282 + #$3283, // $3283 + #$3284, // $3284 + #$3285, // $3285 + #$3286, // $3286 + #$3287, // $3287 + #$3288, // $3288 + #$3289, // $3289 + #$328A, // $328A + #$328B, // $328B + #$328C, // $328C + #$328D, // $328D + #$328E, // $328E + #$328F, // $328F + #$3290, // $3290 + #$3291, // $3291 + #$3292, // $3292 + #$3293, // $3293 + #$3294, // $3294 + #$3295, // $3295 + #$3296, // $3296 + #$3297, // $3297 + #$3298, // $3298 + #$3299, // $3299 + #$329A, // $329A + #$329B, // $329B + #$329C, // $329C + #$329D, // $329D + #$329E, // $329E + #$329F, // $329F + #$32A0, // $32A0 + #$32A1, // $32A1 + #$32A2, // $32A2 + #$32A3, // $32A3 + #$32A4, // $32A4 + #$32A5, // $32A5 + #$32A6, // $32A6 + #$32A7, // $32A7 + #$32A8, // $32A8 + #$32A9, // $32A9 + #$32AA, // $32AA + #$32AB, // $32AB + #$32AC, // $32AC + #$32AD, // $32AD + #$32AE, // $32AE + #$32AF, // $32AF + #$32B0, // $32B0 + #$32B1, // $32B1 + #$32B2, // $32B2 + #$32B3, // $32B3 + #$32B4, // $32B4 + #$32B5, // $32B5 + #$32B6, // $32B6 + #$32B7, // $32B7 + #$32B8, // $32B8 + #$32B9, // $32B9 + #$32BA, // $32BA + #$32BB, // $32BB + #$32BC, // $32BC + #$32BD, // $32BD + #$32BE, // $32BE + #$32BF, // $32BF + #$32C0, // $32C0 + #$32C1, // $32C1 + #$32C2, // $32C2 + #$32C3, // $32C3 + #$32C4, // $32C4 + #$32C5, // $32C5 + #$32C6, // $32C6 + #$32C7, // $32C7 + #$32C8, // $32C8 + #$32C9, // $32C9 + #$32CA, // $32CA + #$32CB, // $32CB + #$32CC, // $32CC + #$32CD, // $32CD + #$32CE, // $32CE + #$32CF, // $32CF + #$32D0, // $32D0 + #$32D1, // $32D1 + #$32D2, // $32D2 + #$32D3, // $32D3 + #$32D4, // $32D4 + #$32D5, // $32D5 + #$32D6, // $32D6 + #$32D7, // $32D7 + #$32D8, // $32D8 + #$32D9, // $32D9 + #$32DA, // $32DA + #$32DB, // $32DB + #$32DC, // $32DC + #$32DD, // $32DD + #$32DE, // $32DE + #$32DF, // $32DF + #$32E0, // $32E0 + #$32E1, // $32E1 + #$32E2, // $32E2 + #$32E3, // $32E3 + #$32E4, // $32E4 + #$32E5, // $32E5 + #$32E6, // $32E6 + #$32E7, // $32E7 + #$32E8, // $32E8 + #$32E9, // $32E9 + #$32EA, // $32EA + #$32EB, // $32EB + #$32EC, // $32EC + #$32ED, // $32ED + #$32EE, // $32EE + #$32EF, // $32EF + #$32F0, // $32F0 + #$32F1, // $32F1 + #$32F2, // $32F2 + #$32F3, // $32F3 + #$32F4, // $32F4 + #$32F5, // $32F5 + #$32F6, // $32F6 + #$32F7, // $32F7 + #$32F8, // $32F8 + #$32F9, // $32F9 + #$32FA, // $32FA + #$32FB, // $32FB + #$32FC, // $32FC + #$32FD, // $32FD + #$32FE, // $32FE + #$32FF, // $32FF + #$3300, // $3300 + #$3301, // $3301 + #$3302, // $3302 + #$3303, // $3303 + #$3304, // $3304 + #$3305, // $3305 + #$3306, // $3306 + #$3307, // $3307 + #$3308, // $3308 + #$3309, // $3309 + #$330A, // $330A + #$330B, // $330B + #$330C, // $330C + #$330D, // $330D + #$330E, // $330E + #$330F, // $330F + #$3310, // $3310 + #$3311, // $3311 + #$3312, // $3312 + #$3313, // $3313 + #$3314, // $3314 + #$3315, // $3315 + #$3316, // $3316 + #$3317, // $3317 + #$3318, // $3318 + #$3319, // $3319 + #$331A, // $331A + #$331B, // $331B + #$331C, // $331C + #$331D, // $331D + #$331E, // $331E + #$331F, // $331F + #$3320, // $3320 + #$3321, // $3321 + #$3322, // $3322 + #$3323, // $3323 + #$3324, // $3324 + #$3325, // $3325 + #$3326, // $3326 + #$3327, // $3327 + #$3328, // $3328 + #$3329, // $3329 + #$332A, // $332A + #$332B, // $332B + #$332C, // $332C + #$332D, // $332D + #$332E, // $332E + #$332F, // $332F + #$3330, // $3330 + #$3331, // $3331 + #$3332, // $3332 + #$3333, // $3333 + #$3334, // $3334 + #$3335, // $3335 + #$3336, // $3336 + #$3337, // $3337 + #$3338, // $3338 + #$3339, // $3339 + #$333A, // $333A + #$333B, // $333B + #$333C, // $333C + #$333D, // $333D + #$333E, // $333E + #$333F, // $333F + #$3340, // $3340 + #$3341, // $3341 + #$3342, // $3342 + #$3343, // $3343 + #$3344, // $3344 + #$3345, // $3345 + #$3346, // $3346 + #$3347, // $3347 + #$3348, // $3348 + #$3349, // $3349 + #$334A, // $334A + #$334B, // $334B + #$334C, // $334C + #$334D, // $334D + #$334E, // $334E + #$334F, // $334F + #$3350, // $3350 + #$3351, // $3351 + #$3352, // $3352 + #$3353, // $3353 + #$3354, // $3354 + #$3355, // $3355 + #$3356, // $3356 + #$3357, // $3357 + #$3358, // $3358 + #$3359, // $3359 + #$335A, // $335A + #$335B, // $335B + #$335C, // $335C + #$335D, // $335D + #$335E, // $335E + #$335F, // $335F + #$3360, // $3360 + #$3361, // $3361 + #$3362, // $3362 + #$3363, // $3363 + #$3364, // $3364 + #$3365, // $3365 + #$3366, // $3366 + #$3367, // $3367 + #$3368, // $3368 + #$3369, // $3369 + #$336A, // $336A + #$336B, // $336B + #$336C, // $336C + #$336D, // $336D + #$336E, // $336E + #$336F, // $336F + #$3370, // $3370 + #$3371, // $3371 + #$3372, // $3372 + #$3373, // $3373 + #$3374, // $3374 + #$3375, // $3375 + #$3376, // $3376 + #$3377, // $3377 + #$3378, // $3378 + #$3379, // $3379 + #$337A, // $337A + #$337B, // $337B + #$337C, // $337C + #$337D, // $337D + #$337E, // $337E + #$337F, // $337F + #$3380, // $3380 + #$3381, // $3381 + #$3382, // $3382 + #$3383, // $3383 + #$3384, // $3384 + #$3385, // $3385 + #$3386, // $3386 + #$3387, // $3387 + #$3388, // $3388 + #$3389, // $3389 + #$338A, // $338A + #$338B, // $338B + #$338C, // $338C + #$338D, // $338D + #$338E, // $338E + #$338F, // $338F + #$3390, // $3390 + #$3391, // $3391 + #$3392, // $3392 + #$3393, // $3393 + #$3394, // $3394 + #$3395, // $3395 + #$3396, // $3396 + #$3397, // $3397 + #$3398, // $3398 + #$3399, // $3399 + #$339A, // $339A + #$339B, // $339B + #$339C, // $339C + #$339D, // $339D + #$339E, // $339E + #$339F, // $339F + #$33A0, // $33A0 + #$33A1, // $33A1 + #$33A2, // $33A2 + #$33A3, // $33A3 + #$33A4, // $33A4 + #$33A5, // $33A5 + #$33A6, // $33A6 + #$33A7, // $33A7 + #$33A8, // $33A8 + #$33A9, // $33A9 + #$33AA, // $33AA + #$33AB, // $33AB + #$33AC, // $33AC + #$33AD, // $33AD + #$33AE, // $33AE + #$33AF, // $33AF + #$33B0, // $33B0 + #$33B1, // $33B1 + #$33B2, // $33B2 + #$33B3, // $33B3 + #$33B4, // $33B4 + #$33B5, // $33B5 + #$33B6, // $33B6 + #$33B7, // $33B7 + #$33B8, // $33B8 + #$33B9, // $33B9 + #$33BA, // $33BA + #$33BB, // $33BB + #$33BC, // $33BC + #$33BD, // $33BD + #$33BE, // $33BE + #$33BF, // $33BF + #$33C0, // $33C0 + #$33C1, // $33C1 + #$33C2, // $33C2 + #$33C3, // $33C3 + #$33C4, // $33C4 + #$33C5, // $33C5 + #$33C6, // $33C6 + #$33C7, // $33C7 + #$33C8, // $33C8 + #$33C9, // $33C9 + #$33CA, // $33CA + #$33CB, // $33CB + #$33CC, // $33CC + #$33CD, // $33CD + #$33CE, // $33CE + #$33CF, // $33CF + #$33D0, // $33D0 + #$33D1, // $33D1 + #$33D2, // $33D2 + #$33D3, // $33D3 + #$33D4, // $33D4 + #$33D5, // $33D5 + #$33D6, // $33D6 + #$33D7, // $33D7 + #$33D8, // $33D8 + #$33D9, // $33D9 + #$33DA, // $33DA + #$33DB, // $33DB + #$33DC, // $33DC + #$33DD, // $33DD + #$33DE, // $33DE + #$33DF, // $33DF + #$33E0, // $33E0 + #$33E1, // $33E1 + #$33E2, // $33E2 + #$33E3, // $33E3 + #$33E4, // $33E4 + #$33E5, // $33E5 + #$33E6, // $33E6 + #$33E7, // $33E7 + #$33E8, // $33E8 + #$33E9, // $33E9 + #$33EA, // $33EA + #$33EB, // $33EB + #$33EC, // $33EC + #$33ED, // $33ED + #$33EE, // $33EE + #$33EF, // $33EF + #$33F0, // $33F0 + #$33F1, // $33F1 + #$33F2, // $33F2 + #$33F3, // $33F3 + #$33F4, // $33F4 + #$33F5, // $33F5 + #$33F6, // $33F6 + #$33F7, // $33F7 + #$33F8, // $33F8 + #$33F9, // $33F9 + #$33FA, // $33FA + #$33FB, // $33FB + #$33FC, // $33FC + #$33FD, // $33FD + #$33FE, // $33FE + #$33FF, // $33FF + #$3400, // $3400 + #$3401, // $3401 + #$3402, // $3402 + #$3403, // $3403 + #$3404, // $3404 + #$3405, // $3405 + #$3406, // $3406 + #$3407, // $3407 + #$3408, // $3408 + #$3409, // $3409 + #$340A, // $340A + #$340B, // $340B + #$340C, // $340C + #$340D, // $340D + #$340E, // $340E + #$340F, // $340F + #$3410, // $3410 + #$3411, // $3411 + #$3412, // $3412 + #$3413, // $3413 + #$3414, // $3414 + #$3415, // $3415 + #$3416, // $3416 + #$3417, // $3417 + #$3418, // $3418 + #$3419, // $3419 + #$341A, // $341A + #$341B, // $341B + #$341C, // $341C + #$341D, // $341D + #$341E, // $341E + #$341F, // $341F + #$3420, // $3420 + #$3421, // $3421 + #$3422, // $3422 + #$3423, // $3423 + #$3424, // $3424 + #$3425, // $3425 + #$3426, // $3426 + #$3427, // $3427 + #$3428, // $3428 + #$3429, // $3429 + #$342A, // $342A + #$342B, // $342B + #$342C, // $342C + #$342D, // $342D + #$342E, // $342E + #$342F, // $342F + #$3430, // $3430 + #$3431, // $3431 + #$3432, // $3432 + #$3433, // $3433 + #$3434, // $3434 + #$3435, // $3435 + #$3436, // $3436 + #$3437, // $3437 + #$3438, // $3438 + #$3439, // $3439 + #$343A, // $343A + #$343B, // $343B + #$343C, // $343C + #$343D, // $343D + #$343E, // $343E + #$343F, // $343F + #$3440, // $3440 + #$3441, // $3441 + #$3442, // $3442 + #$3443, // $3443 + #$3444, // $3444 + #$3445, // $3445 + #$3446, // $3446 + #$3447, // $3447 + #$3448, // $3448 + #$3449, // $3449 + #$344A, // $344A + #$344B, // $344B + #$344C, // $344C + #$344D, // $344D + #$344E, // $344E + #$344F, // $344F + #$3450, // $3450 + #$3451, // $3451 + #$3452, // $3452 + #$3453, // $3453 + #$3454, // $3454 + #$3455, // $3455 + #$3456, // $3456 + #$3457, // $3457 + #$3458, // $3458 + #$3459, // $3459 + #$345A, // $345A + #$345B, // $345B + #$345C, // $345C + #$345D, // $345D + #$345E, // $345E + #$345F, // $345F + #$3460, // $3460 + #$3461, // $3461 + #$3462, // $3462 + #$3463, // $3463 + #$3464, // $3464 + #$3465, // $3465 + #$3466, // $3466 + #$3467, // $3467 + #$3468, // $3468 + #$3469, // $3469 + #$346A, // $346A + #$346B, // $346B + #$346C, // $346C + #$346D, // $346D + #$346E, // $346E + #$346F, // $346F + #$3470, // $3470 + #$3471, // $3471 + #$3472, // $3472 + #$3473, // $3473 + #$3474, // $3474 + #$3475, // $3475 + #$3476, // $3476 + #$3477, // $3477 + #$3478, // $3478 + #$3479, // $3479 + #$347A, // $347A + #$347B, // $347B + #$347C, // $347C + #$347D, // $347D + #$347E, // $347E + #$347F, // $347F + #$3480, // $3480 + #$3481, // $3481 + #$3482, // $3482 + #$3483, // $3483 + #$3484, // $3484 + #$3485, // $3485 + #$3486, // $3486 + #$3487, // $3487 + #$3488, // $3488 + #$3489, // $3489 + #$348A, // $348A + #$348B, // $348B + #$348C, // $348C + #$348D, // $348D + #$348E, // $348E + #$348F, // $348F + #$3490, // $3490 + #$3491, // $3491 + #$3492, // $3492 + #$3493, // $3493 + #$3494, // $3494 + #$3495, // $3495 + #$3496, // $3496 + #$3497, // $3497 + #$3498, // $3498 + #$3499, // $3499 + #$349A, // $349A + #$349B, // $349B + #$349C, // $349C + #$349D, // $349D + #$349E, // $349E + #$349F, // $349F + #$34A0, // $34A0 + #$34A1, // $34A1 + #$34A2, // $34A2 + #$34A3, // $34A3 + #$34A4, // $34A4 + #$34A5, // $34A5 + #$34A6, // $34A6 + #$34A7, // $34A7 + #$34A8, // $34A8 + #$34A9, // $34A9 + #$34AA, // $34AA + #$34AB, // $34AB + #$34AC, // $34AC + #$34AD, // $34AD + #$34AE, // $34AE + #$34AF, // $34AF + #$34B0, // $34B0 + #$34B1, // $34B1 + #$34B2, // $34B2 + #$34B3, // $34B3 + #$34B4, // $34B4 + #$34B5, // $34B5 + #$34B6, // $34B6 + #$34B7, // $34B7 + #$34B8, // $34B8 + #$34B9, // $34B9 + #$34BA, // $34BA + #$34BB, // $34BB + #$34BC, // $34BC + #$34BD, // $34BD + #$34BE, // $34BE + #$34BF, // $34BF + #$34C0, // $34C0 + #$34C1, // $34C1 + #$34C2, // $34C2 + #$34C3, // $34C3 + #$34C4, // $34C4 + #$34C5, // $34C5 + #$34C6, // $34C6 + #$34C7, // $34C7 + #$34C8, // $34C8 + #$34C9, // $34C9 + #$34CA, // $34CA + #$34CB, // $34CB + #$34CC, // $34CC + #$34CD, // $34CD + #$34CE, // $34CE + #$34CF, // $34CF + #$34D0, // $34D0 + #$34D1, // $34D1 + #$34D2, // $34D2 + #$34D3, // $34D3 + #$34D4, // $34D4 + #$34D5, // $34D5 + #$34D6, // $34D6 + #$34D7, // $34D7 + #$34D8, // $34D8 + #$34D9, // $34D9 + #$34DA, // $34DA + #$34DB, // $34DB + #$34DC, // $34DC + #$34DD, // $34DD + #$34DE, // $34DE + #$34DF, // $34DF + #$34E0, // $34E0 + #$34E1, // $34E1 + #$34E2, // $34E2 + #$34E3, // $34E3 + #$34E4, // $34E4 + #$34E5, // $34E5 + #$34E6, // $34E6 + #$34E7, // $34E7 + #$34E8, // $34E8 + #$34E9, // $34E9 + #$34EA, // $34EA + #$34EB, // $34EB + #$34EC, // $34EC + #$34ED, // $34ED + #$34EE, // $34EE + #$34EF, // $34EF + #$34F0, // $34F0 + #$34F1, // $34F1 + #$34F2, // $34F2 + #$34F3, // $34F3 + #$34F4, // $34F4 + #$34F5, // $34F5 + #$34F6, // $34F6 + #$34F7, // $34F7 + #$34F8, // $34F8 + #$34F9, // $34F9 + #$34FA, // $34FA + #$34FB, // $34FB + #$34FC, // $34FC + #$34FD, // $34FD + #$34FE, // $34FE + #$34FF, // $34FF + #$3500, // $3500 + #$3501, // $3501 + #$3502, // $3502 + #$3503, // $3503 + #$3504, // $3504 + #$3505, // $3505 + #$3506, // $3506 + #$3507, // $3507 + #$3508, // $3508 + #$3509, // $3509 + #$350A, // $350A + #$350B, // $350B + #$350C, // $350C + #$350D, // $350D + #$350E, // $350E + #$350F, // $350F + #$3510, // $3510 + #$3511, // $3511 + #$3512, // $3512 + #$3513, // $3513 + #$3514, // $3514 + #$3515, // $3515 + #$3516, // $3516 + #$3517, // $3517 + #$3518, // $3518 + #$3519, // $3519 + #$351A, // $351A + #$351B, // $351B + #$351C, // $351C + #$351D, // $351D + #$351E, // $351E + #$351F, // $351F + #$3520, // $3520 + #$3521, // $3521 + #$3522, // $3522 + #$3523, // $3523 + #$3524, // $3524 + #$3525, // $3525 + #$3526, // $3526 + #$3527, // $3527 + #$3528, // $3528 + #$3529, // $3529 + #$352A, // $352A + #$352B, // $352B + #$352C, // $352C + #$352D, // $352D + #$352E, // $352E + #$352F, // $352F + #$3530, // $3530 + #$3531, // $3531 + #$3532, // $3532 + #$3533, // $3533 + #$3534, // $3534 + #$3535, // $3535 + #$3536, // $3536 + #$3537, // $3537 + #$3538, // $3538 + #$3539, // $3539 + #$353A, // $353A + #$353B, // $353B + #$353C, // $353C + #$353D, // $353D + #$353E, // $353E + #$353F, // $353F + #$3540, // $3540 + #$3541, // $3541 + #$3542, // $3542 + #$3543, // $3543 + #$3544, // $3544 + #$3545, // $3545 + #$3546, // $3546 + #$3547, // $3547 + #$3548, // $3548 + #$3549, // $3549 + #$354A, // $354A + #$354B, // $354B + #$354C, // $354C + #$354D, // $354D + #$354E, // $354E + #$354F, // $354F + #$3550, // $3550 + #$3551, // $3551 + #$3552, // $3552 + #$3553, // $3553 + #$3554, // $3554 + #$3555, // $3555 + #$3556, // $3556 + #$3557, // $3557 + #$3558, // $3558 + #$3559, // $3559 + #$355A, // $355A + #$355B, // $355B + #$355C, // $355C + #$355D, // $355D + #$355E, // $355E + #$355F, // $355F + #$3560, // $3560 + #$3561, // $3561 + #$3562, // $3562 + #$3563, // $3563 + #$3564, // $3564 + #$3565, // $3565 + #$3566, // $3566 + #$3567, // $3567 + #$3568, // $3568 + #$3569, // $3569 + #$356A, // $356A + #$356B, // $356B + #$356C, // $356C + #$356D, // $356D + #$356E, // $356E + #$356F, // $356F + #$3570, // $3570 + #$3571, // $3571 + #$3572, // $3572 + #$3573, // $3573 + #$3574, // $3574 + #$3575, // $3575 + #$3576, // $3576 + #$3577, // $3577 + #$3578, // $3578 + #$3579, // $3579 + #$357A, // $357A + #$357B, // $357B + #$357C, // $357C + #$357D, // $357D + #$357E, // $357E + #$357F, // $357F + #$3580, // $3580 + #$3581, // $3581 + #$3582, // $3582 + #$3583, // $3583 + #$3584, // $3584 + #$3585, // $3585 + #$3586, // $3586 + #$3587, // $3587 + #$3588, // $3588 + #$3589, // $3589 + #$358A, // $358A + #$358B, // $358B + #$358C, // $358C + #$358D, // $358D + #$358E, // $358E + #$358F, // $358F + #$3590, // $3590 + #$3591, // $3591 + #$3592, // $3592 + #$3593, // $3593 + #$3594, // $3594 + #$3595, // $3595 + #$3596, // $3596 + #$3597, // $3597 + #$3598, // $3598 + #$3599, // $3599 + #$359A, // $359A + #$359B, // $359B + #$359C, // $359C + #$359D, // $359D + #$359E, // $359E + #$359F, // $359F + #$35A0, // $35A0 + #$35A1, // $35A1 + #$35A2, // $35A2 + #$35A3, // $35A3 + #$35A4, // $35A4 + #$35A5, // $35A5 + #$35A6, // $35A6 + #$35A7, // $35A7 + #$35A8, // $35A8 + #$35A9, // $35A9 + #$35AA, // $35AA + #$35AB, // $35AB + #$35AC, // $35AC + #$35AD, // $35AD + #$35AE, // $35AE + #$35AF, // $35AF + #$35B0, // $35B0 + #$35B1, // $35B1 + #$35B2, // $35B2 + #$35B3, // $35B3 + #$35B4, // $35B4 + #$35B5, // $35B5 + #$35B6, // $35B6 + #$35B7, // $35B7 + #$35B8, // $35B8 + #$35B9, // $35B9 + #$35BA, // $35BA + #$35BB, // $35BB + #$35BC, // $35BC + #$35BD, // $35BD + #$35BE, // $35BE + #$35BF, // $35BF + #$35C0, // $35C0 + #$35C1, // $35C1 + #$35C2, // $35C2 + #$35C3, // $35C3 + #$35C4, // $35C4 + #$35C5, // $35C5 + #$35C6, // $35C6 + #$35C7, // $35C7 + #$35C8, // $35C8 + #$35C9, // $35C9 + #$35CA, // $35CA + #$35CB, // $35CB + #$35CC, // $35CC + #$35CD, // $35CD + #$35CE, // $35CE + #$35CF, // $35CF + #$35D0, // $35D0 + #$35D1, // $35D1 + #$35D2, // $35D2 + #$35D3, // $35D3 + #$35D4, // $35D4 + #$35D5, // $35D5 + #$35D6, // $35D6 + #$35D7, // $35D7 + #$35D8, // $35D8 + #$35D9, // $35D9 + #$35DA, // $35DA + #$35DB, // $35DB + #$35DC, // $35DC + #$35DD, // $35DD + #$35DE, // $35DE + #$35DF, // $35DF + #$35E0, // $35E0 + #$35E1, // $35E1 + #$35E2, // $35E2 + #$35E3, // $35E3 + #$35E4, // $35E4 + #$35E5, // $35E5 + #$35E6, // $35E6 + #$35E7, // $35E7 + #$35E8, // $35E8 + #$35E9, // $35E9 + #$35EA, // $35EA + #$35EB, // $35EB + #$35EC, // $35EC + #$35ED, // $35ED + #$35EE, // $35EE + #$35EF, // $35EF + #$35F0, // $35F0 + #$35F1, // $35F1 + #$35F2, // $35F2 + #$35F3, // $35F3 + #$35F4, // $35F4 + #$35F5, // $35F5 + #$35F6, // $35F6 + #$35F7, // $35F7 + #$35F8, // $35F8 + #$35F9, // $35F9 + #$35FA, // $35FA + #$35FB, // $35FB + #$35FC, // $35FC + #$35FD, // $35FD + #$35FE, // $35FE + #$35FF, // $35FF + #$3600, // $3600 + #$3601, // $3601 + #$3602, // $3602 + #$3603, // $3603 + #$3604, // $3604 + #$3605, // $3605 + #$3606, // $3606 + #$3607, // $3607 + #$3608, // $3608 + #$3609, // $3609 + #$360A, // $360A + #$360B, // $360B + #$360C, // $360C + #$360D, // $360D + #$360E, // $360E + #$360F, // $360F + #$3610, // $3610 + #$3611, // $3611 + #$3612, // $3612 + #$3613, // $3613 + #$3614, // $3614 + #$3615, // $3615 + #$3616, // $3616 + #$3617, // $3617 + #$3618, // $3618 + #$3619, // $3619 + #$361A, // $361A + #$361B, // $361B + #$361C, // $361C + #$361D, // $361D + #$361E, // $361E + #$361F, // $361F + #$3620, // $3620 + #$3621, // $3621 + #$3622, // $3622 + #$3623, // $3623 + #$3624, // $3624 + #$3625, // $3625 + #$3626, // $3626 + #$3627, // $3627 + #$3628, // $3628 + #$3629, // $3629 + #$362A, // $362A + #$362B, // $362B + #$362C, // $362C + #$362D, // $362D + #$362E, // $362E + #$362F, // $362F + #$3630, // $3630 + #$3631, // $3631 + #$3632, // $3632 + #$3633, // $3633 + #$3634, // $3634 + #$3635, // $3635 + #$3636, // $3636 + #$3637, // $3637 + #$3638, // $3638 + #$3639, // $3639 + #$363A, // $363A + #$363B, // $363B + #$363C, // $363C + #$363D, // $363D + #$363E, // $363E + #$363F, // $363F + #$3640, // $3640 + #$3641, // $3641 + #$3642, // $3642 + #$3643, // $3643 + #$3644, // $3644 + #$3645, // $3645 + #$3646, // $3646 + #$3647, // $3647 + #$3648, // $3648 + #$3649, // $3649 + #$364A, // $364A + #$364B, // $364B + #$364C, // $364C + #$364D, // $364D + #$364E, // $364E + #$364F, // $364F + #$3650, // $3650 + #$3651, // $3651 + #$3652, // $3652 + #$3653, // $3653 + #$3654, // $3654 + #$3655, // $3655 + #$3656, // $3656 + #$3657, // $3657 + #$3658, // $3658 + #$3659, // $3659 + #$365A, // $365A + #$365B, // $365B + #$365C, // $365C + #$365D, // $365D + #$365E, // $365E + #$365F, // $365F + #$3660, // $3660 + #$3661, // $3661 + #$3662, // $3662 + #$3663, // $3663 + #$3664, // $3664 + #$3665, // $3665 + #$3666, // $3666 + #$3667, // $3667 + #$3668, // $3668 + #$3669, // $3669 + #$366A, // $366A + #$366B, // $366B + #$366C, // $366C + #$366D, // $366D + #$366E, // $366E + #$366F, // $366F + #$3670, // $3670 + #$3671, // $3671 + #$3672, // $3672 + #$3673, // $3673 + #$3674, // $3674 + #$3675, // $3675 + #$3676, // $3676 + #$3677, // $3677 + #$3678, // $3678 + #$3679, // $3679 + #$367A, // $367A + #$367B, // $367B + #$367C, // $367C + #$367D, // $367D + #$367E, // $367E + #$367F, // $367F + #$3680, // $3680 + #$3681, // $3681 + #$3682, // $3682 + #$3683, // $3683 + #$3684, // $3684 + #$3685, // $3685 + #$3686, // $3686 + #$3687, // $3687 + #$3688, // $3688 + #$3689, // $3689 + #$368A, // $368A + #$368B, // $368B + #$368C, // $368C + #$368D, // $368D + #$368E, // $368E + #$368F, // $368F + #$3690, // $3690 + #$3691, // $3691 + #$3692, // $3692 + #$3693, // $3693 + #$3694, // $3694 + #$3695, // $3695 + #$3696, // $3696 + #$3697, // $3697 + #$3698, // $3698 + #$3699, // $3699 + #$369A, // $369A + #$369B, // $369B + #$369C, // $369C + #$369D, // $369D + #$369E, // $369E + #$369F, // $369F + #$36A0, // $36A0 + #$36A1, // $36A1 + #$36A2, // $36A2 + #$36A3, // $36A3 + #$36A4, // $36A4 + #$36A5, // $36A5 + #$36A6, // $36A6 + #$36A7, // $36A7 + #$36A8, // $36A8 + #$36A9, // $36A9 + #$36AA, // $36AA + #$36AB, // $36AB + #$36AC, // $36AC + #$36AD, // $36AD + #$36AE, // $36AE + #$36AF, // $36AF + #$36B0, // $36B0 + #$36B1, // $36B1 + #$36B2, // $36B2 + #$36B3, // $36B3 + #$36B4, // $36B4 + #$36B5, // $36B5 + #$36B6, // $36B6 + #$36B7, // $36B7 + #$36B8, // $36B8 + #$36B9, // $36B9 + #$36BA, // $36BA + #$36BB, // $36BB + #$36BC, // $36BC + #$36BD, // $36BD + #$36BE, // $36BE + #$36BF, // $36BF + #$36C0, // $36C0 + #$36C1, // $36C1 + #$36C2, // $36C2 + #$36C3, // $36C3 + #$36C4, // $36C4 + #$36C5, // $36C5 + #$36C6, // $36C6 + #$36C7, // $36C7 + #$36C8, // $36C8 + #$36C9, // $36C9 + #$36CA, // $36CA + #$36CB, // $36CB + #$36CC, // $36CC + #$36CD, // $36CD + #$36CE, // $36CE + #$36CF, // $36CF + #$36D0, // $36D0 + #$36D1, // $36D1 + #$36D2, // $36D2 + #$36D3, // $36D3 + #$36D4, // $36D4 + #$36D5, // $36D5 + #$36D6, // $36D6 + #$36D7, // $36D7 + #$36D8, // $36D8 + #$36D9, // $36D9 + #$36DA, // $36DA + #$36DB, // $36DB + #$36DC, // $36DC + #$36DD, // $36DD + #$36DE, // $36DE + #$36DF, // $36DF + #$36E0, // $36E0 + #$36E1, // $36E1 + #$36E2, // $36E2 + #$36E3, // $36E3 + #$36E4, // $36E4 + #$36E5, // $36E5 + #$36E6, // $36E6 + #$36E7, // $36E7 + #$36E8, // $36E8 + #$36E9, // $36E9 + #$36EA, // $36EA + #$36EB, // $36EB + #$36EC, // $36EC + #$36ED, // $36ED + #$36EE, // $36EE + #$36EF, // $36EF + #$36F0, // $36F0 + #$36F1, // $36F1 + #$36F2, // $36F2 + #$36F3, // $36F3 + #$36F4, // $36F4 + #$36F5, // $36F5 + #$36F6, // $36F6 + #$36F7, // $36F7 + #$36F8, // $36F8 + #$36F9, // $36F9 + #$36FA, // $36FA + #$36FB, // $36FB + #$36FC, // $36FC + #$36FD, // $36FD + #$36FE, // $36FE + #$36FF, // $36FF + #$3700, // $3700 + #$3701, // $3701 + #$3702, // $3702 + #$3703, // $3703 + #$3704, // $3704 + #$3705, // $3705 + #$3706, // $3706 + #$3707, // $3707 + #$3708, // $3708 + #$3709, // $3709 + #$370A, // $370A + #$370B, // $370B + #$370C, // $370C + #$370D, // $370D + #$370E, // $370E + #$370F, // $370F + #$3710, // $3710 + #$3711, // $3711 + #$3712, // $3712 + #$3713, // $3713 + #$3714, // $3714 + #$3715, // $3715 + #$3716, // $3716 + #$3717, // $3717 + #$3718, // $3718 + #$3719, // $3719 + #$371A, // $371A + #$371B, // $371B + #$371C, // $371C + #$371D, // $371D + #$371E, // $371E + #$371F, // $371F + #$3720, // $3720 + #$3721, // $3721 + #$3722, // $3722 + #$3723, // $3723 + #$3724, // $3724 + #$3725, // $3725 + #$3726, // $3726 + #$3727, // $3727 + #$3728, // $3728 + #$3729, // $3729 + #$372A, // $372A + #$372B, // $372B + #$372C, // $372C + #$372D, // $372D + #$372E, // $372E + #$372F, // $372F + #$3730, // $3730 + #$3731, // $3731 + #$3732, // $3732 + #$3733, // $3733 + #$3734, // $3734 + #$3735, // $3735 + #$3736, // $3736 + #$3737, // $3737 + #$3738, // $3738 + #$3739, // $3739 + #$373A, // $373A + #$373B, // $373B + #$373C, // $373C + #$373D, // $373D + #$373E, // $373E + #$373F, // $373F + #$3740, // $3740 + #$3741, // $3741 + #$3742, // $3742 + #$3743, // $3743 + #$3744, // $3744 + #$3745, // $3745 + #$3746, // $3746 + #$3747, // $3747 + #$3748, // $3748 + #$3749, // $3749 + #$374A, // $374A + #$374B, // $374B + #$374C, // $374C + #$374D, // $374D + #$374E, // $374E + #$374F, // $374F + #$3750, // $3750 + #$3751, // $3751 + #$3752, // $3752 + #$3753, // $3753 + #$3754, // $3754 + #$3755, // $3755 + #$3756, // $3756 + #$3757, // $3757 + #$3758, // $3758 + #$3759, // $3759 + #$375A, // $375A + #$375B, // $375B + #$375C, // $375C + #$375D, // $375D + #$375E, // $375E + #$375F, // $375F + #$3760, // $3760 + #$3761, // $3761 + #$3762, // $3762 + #$3763, // $3763 + #$3764, // $3764 + #$3765, // $3765 + #$3766, // $3766 + #$3767, // $3767 + #$3768, // $3768 + #$3769, // $3769 + #$376A, // $376A + #$376B, // $376B + #$376C, // $376C + #$376D, // $376D + #$376E, // $376E + #$376F, // $376F + #$3770, // $3770 + #$3771, // $3771 + #$3772, // $3772 + #$3773, // $3773 + #$3774, // $3774 + #$3775, // $3775 + #$3776, // $3776 + #$3777, // $3777 + #$3778, // $3778 + #$3779, // $3779 + #$377A, // $377A + #$377B, // $377B + #$377C, // $377C + #$377D, // $377D + #$377E, // $377E + #$377F, // $377F + #$3780, // $3780 + #$3781, // $3781 + #$3782, // $3782 + #$3783, // $3783 + #$3784, // $3784 + #$3785, // $3785 + #$3786, // $3786 + #$3787, // $3787 + #$3788, // $3788 + #$3789, // $3789 + #$378A, // $378A + #$378B, // $378B + #$378C, // $378C + #$378D, // $378D + #$378E, // $378E + #$378F, // $378F + #$3790, // $3790 + #$3791, // $3791 + #$3792, // $3792 + #$3793, // $3793 + #$3794, // $3794 + #$3795, // $3795 + #$3796, // $3796 + #$3797, // $3797 + #$3798, // $3798 + #$3799, // $3799 + #$379A, // $379A + #$379B, // $379B + #$379C, // $379C + #$379D, // $379D + #$379E, // $379E + #$379F, // $379F + #$37A0, // $37A0 + #$37A1, // $37A1 + #$37A2, // $37A2 + #$37A3, // $37A3 + #$37A4, // $37A4 + #$37A5, // $37A5 + #$37A6, // $37A6 + #$37A7, // $37A7 + #$37A8, // $37A8 + #$37A9, // $37A9 + #$37AA, // $37AA + #$37AB, // $37AB + #$37AC, // $37AC + #$37AD, // $37AD + #$37AE, // $37AE + #$37AF, // $37AF + #$37B0, // $37B0 + #$37B1, // $37B1 + #$37B2, // $37B2 + #$37B3, // $37B3 + #$37B4, // $37B4 + #$37B5, // $37B5 + #$37B6, // $37B6 + #$37B7, // $37B7 + #$37B8, // $37B8 + #$37B9, // $37B9 + #$37BA, // $37BA + #$37BB, // $37BB + #$37BC, // $37BC + #$37BD, // $37BD + #$37BE, // $37BE + #$37BF, // $37BF + #$37C0, // $37C0 + #$37C1, // $37C1 + #$37C2, // $37C2 + #$37C3, // $37C3 + #$37C4, // $37C4 + #$37C5, // $37C5 + #$37C6, // $37C6 + #$37C7, // $37C7 + #$37C8, // $37C8 + #$37C9, // $37C9 + #$37CA, // $37CA + #$37CB, // $37CB + #$37CC, // $37CC + #$37CD, // $37CD + #$37CE, // $37CE + #$37CF, // $37CF + #$37D0, // $37D0 + #$37D1, // $37D1 + #$37D2, // $37D2 + #$37D3, // $37D3 + #$37D4, // $37D4 + #$37D5, // $37D5 + #$37D6, // $37D6 + #$37D7, // $37D7 + #$37D8, // $37D8 + #$37D9, // $37D9 + #$37DA, // $37DA + #$37DB, // $37DB + #$37DC, // $37DC + #$37DD, // $37DD + #$37DE, // $37DE + #$37DF, // $37DF + #$37E0, // $37E0 + #$37E1, // $37E1 + #$37E2, // $37E2 + #$37E3, // $37E3 + #$37E4, // $37E4 + #$37E5, // $37E5 + #$37E6, // $37E6 + #$37E7, // $37E7 + #$37E8, // $37E8 + #$37E9, // $37E9 + #$37EA, // $37EA + #$37EB, // $37EB + #$37EC, // $37EC + #$37ED, // $37ED + #$37EE, // $37EE + #$37EF, // $37EF + #$37F0, // $37F0 + #$37F1, // $37F1 + #$37F2, // $37F2 + #$37F3, // $37F3 + #$37F4, // $37F4 + #$37F5, // $37F5 + #$37F6, // $37F6 + #$37F7, // $37F7 + #$37F8, // $37F8 + #$37F9, // $37F9 + #$37FA, // $37FA + #$37FB, // $37FB + #$37FC, // $37FC + #$37FD, // $37FD + #$37FE, // $37FE + #$37FF, // $37FF + #$3800, // $3800 + #$3801, // $3801 + #$3802, // $3802 + #$3803, // $3803 + #$3804, // $3804 + #$3805, // $3805 + #$3806, // $3806 + #$3807, // $3807 + #$3808, // $3808 + #$3809, // $3809 + #$380A, // $380A + #$380B, // $380B + #$380C, // $380C + #$380D, // $380D + #$380E, // $380E + #$380F, // $380F + #$3810, // $3810 + #$3811, // $3811 + #$3812, // $3812 + #$3813, // $3813 + #$3814, // $3814 + #$3815, // $3815 + #$3816, // $3816 + #$3817, // $3817 + #$3818, // $3818 + #$3819, // $3819 + #$381A, // $381A + #$381B, // $381B + #$381C, // $381C + #$381D, // $381D + #$381E, // $381E + #$381F, // $381F + #$3820, // $3820 + #$3821, // $3821 + #$3822, // $3822 + #$3823, // $3823 + #$3824, // $3824 + #$3825, // $3825 + #$3826, // $3826 + #$3827, // $3827 + #$3828, // $3828 + #$3829, // $3829 + #$382A, // $382A + #$382B, // $382B + #$382C, // $382C + #$382D, // $382D + #$382E, // $382E + #$382F, // $382F + #$3830, // $3830 + #$3831, // $3831 + #$3832, // $3832 + #$3833, // $3833 + #$3834, // $3834 + #$3835, // $3835 + #$3836, // $3836 + #$3837, // $3837 + #$3838, // $3838 + #$3839, // $3839 + #$383A, // $383A + #$383B, // $383B + #$383C, // $383C + #$383D, // $383D + #$383E, // $383E + #$383F, // $383F + #$3840, // $3840 + #$3841, // $3841 + #$3842, // $3842 + #$3843, // $3843 + #$3844, // $3844 + #$3845, // $3845 + #$3846, // $3846 + #$3847, // $3847 + #$3848, // $3848 + #$3849, // $3849 + #$384A, // $384A + #$384B, // $384B + #$384C, // $384C + #$384D, // $384D + #$384E, // $384E + #$384F, // $384F + #$3850, // $3850 + #$3851, // $3851 + #$3852, // $3852 + #$3853, // $3853 + #$3854, // $3854 + #$3855, // $3855 + #$3856, // $3856 + #$3857, // $3857 + #$3858, // $3858 + #$3859, // $3859 + #$385A, // $385A + #$385B, // $385B + #$385C, // $385C + #$385D, // $385D + #$385E, // $385E + #$385F, // $385F + #$3860, // $3860 + #$3861, // $3861 + #$3862, // $3862 + #$3863, // $3863 + #$3864, // $3864 + #$3865, // $3865 + #$3866, // $3866 + #$3867, // $3867 + #$3868, // $3868 + #$3869, // $3869 + #$386A, // $386A + #$386B, // $386B + #$386C, // $386C + #$386D, // $386D + #$386E, // $386E + #$386F, // $386F + #$3870, // $3870 + #$3871, // $3871 + #$3872, // $3872 + #$3873, // $3873 + #$3874, // $3874 + #$3875, // $3875 + #$3876, // $3876 + #$3877, // $3877 + #$3878, // $3878 + #$3879, // $3879 + #$387A, // $387A + #$387B, // $387B + #$387C, // $387C + #$387D, // $387D + #$387E, // $387E + #$387F, // $387F + #$3880, // $3880 + #$3881, // $3881 + #$3882, // $3882 + #$3883, // $3883 + #$3884, // $3884 + #$3885, // $3885 + #$3886, // $3886 + #$3887, // $3887 + #$3888, // $3888 + #$3889, // $3889 + #$388A, // $388A + #$388B, // $388B + #$388C, // $388C + #$388D, // $388D + #$388E, // $388E + #$388F, // $388F + #$3890, // $3890 + #$3891, // $3891 + #$3892, // $3892 + #$3893, // $3893 + #$3894, // $3894 + #$3895, // $3895 + #$3896, // $3896 + #$3897, // $3897 + #$3898, // $3898 + #$3899, // $3899 + #$389A, // $389A + #$389B, // $389B + #$389C, // $389C + #$389D, // $389D + #$389E, // $389E + #$389F, // $389F + #$38A0, // $38A0 + #$38A1, // $38A1 + #$38A2, // $38A2 + #$38A3, // $38A3 + #$38A4, // $38A4 + #$38A5, // $38A5 + #$38A6, // $38A6 + #$38A7, // $38A7 + #$38A8, // $38A8 + #$38A9, // $38A9 + #$38AA, // $38AA + #$38AB, // $38AB + #$38AC, // $38AC + #$38AD, // $38AD + #$38AE, // $38AE + #$38AF, // $38AF + #$38B0, // $38B0 + #$38B1, // $38B1 + #$38B2, // $38B2 + #$38B3, // $38B3 + #$38B4, // $38B4 + #$38B5, // $38B5 + #$38B6, // $38B6 + #$38B7, // $38B7 + #$38B8, // $38B8 + #$38B9, // $38B9 + #$38BA, // $38BA + #$38BB, // $38BB + #$38BC, // $38BC + #$38BD, // $38BD + #$38BE, // $38BE + #$38BF, // $38BF + #$38C0, // $38C0 + #$38C1, // $38C1 + #$38C2, // $38C2 + #$38C3, // $38C3 + #$38C4, // $38C4 + #$38C5, // $38C5 + #$38C6, // $38C6 + #$38C7, // $38C7 + #$38C8, // $38C8 + #$38C9, // $38C9 + #$38CA, // $38CA + #$38CB, // $38CB + #$38CC, // $38CC + #$38CD, // $38CD + #$38CE, // $38CE + #$38CF, // $38CF + #$38D0, // $38D0 + #$38D1, // $38D1 + #$38D2, // $38D2 + #$38D3, // $38D3 + #$38D4, // $38D4 + #$38D5, // $38D5 + #$38D6, // $38D6 + #$38D7, // $38D7 + #$38D8, // $38D8 + #$38D9, // $38D9 + #$38DA, // $38DA + #$38DB, // $38DB + #$38DC, // $38DC + #$38DD, // $38DD + #$38DE, // $38DE + #$38DF, // $38DF + #$38E0, // $38E0 + #$38E1, // $38E1 + #$38E2, // $38E2 + #$38E3, // $38E3 + #$38E4, // $38E4 + #$38E5, // $38E5 + #$38E6, // $38E6 + #$38E7, // $38E7 + #$38E8, // $38E8 + #$38E9, // $38E9 + #$38EA, // $38EA + #$38EB, // $38EB + #$38EC, // $38EC + #$38ED, // $38ED + #$38EE, // $38EE + #$38EF, // $38EF + #$38F0, // $38F0 + #$38F1, // $38F1 + #$38F2, // $38F2 + #$38F3, // $38F3 + #$38F4, // $38F4 + #$38F5, // $38F5 + #$38F6, // $38F6 + #$38F7, // $38F7 + #$38F8, // $38F8 + #$38F9, // $38F9 + #$38FA, // $38FA + #$38FB, // $38FB + #$38FC, // $38FC + #$38FD, // $38FD + #$38FE, // $38FE + #$38FF, // $38FF + #$3900, // $3900 + #$3901, // $3901 + #$3902, // $3902 + #$3903, // $3903 + #$3904, // $3904 + #$3905, // $3905 + #$3906, // $3906 + #$3907, // $3907 + #$3908, // $3908 + #$3909, // $3909 + #$390A, // $390A + #$390B, // $390B + #$390C, // $390C + #$390D, // $390D + #$390E, // $390E + #$390F, // $390F + #$3910, // $3910 + #$3911, // $3911 + #$3912, // $3912 + #$3913, // $3913 + #$3914, // $3914 + #$3915, // $3915 + #$3916, // $3916 + #$3917, // $3917 + #$3918, // $3918 + #$3919, // $3919 + #$391A, // $391A + #$391B, // $391B + #$391C, // $391C + #$391D, // $391D + #$391E, // $391E + #$391F, // $391F + #$3920, // $3920 + #$3921, // $3921 + #$3922, // $3922 + #$3923, // $3923 + #$3924, // $3924 + #$3925, // $3925 + #$3926, // $3926 + #$3927, // $3927 + #$3928, // $3928 + #$3929, // $3929 + #$392A, // $392A + #$392B, // $392B + #$392C, // $392C + #$392D, // $392D + #$392E, // $392E + #$392F, // $392F + #$3930, // $3930 + #$3931, // $3931 + #$3932, // $3932 + #$3933, // $3933 + #$3934, // $3934 + #$3935, // $3935 + #$3936, // $3936 + #$3937, // $3937 + #$3938, // $3938 + #$3939, // $3939 + #$393A, // $393A + #$393B, // $393B + #$393C, // $393C + #$393D, // $393D + #$393E, // $393E + #$393F, // $393F + #$3940, // $3940 + #$3941, // $3941 + #$3942, // $3942 + #$3943, // $3943 + #$3944, // $3944 + #$3945, // $3945 + #$3946, // $3946 + #$3947, // $3947 + #$3948, // $3948 + #$3949, // $3949 + #$394A, // $394A + #$394B, // $394B + #$394C, // $394C + #$394D, // $394D + #$394E, // $394E + #$394F, // $394F + #$3950, // $3950 + #$3951, // $3951 + #$3952, // $3952 + #$3953, // $3953 + #$3954, // $3954 + #$3955, // $3955 + #$3956, // $3956 + #$3957, // $3957 + #$3958, // $3958 + #$3959, // $3959 + #$395A, // $395A + #$395B, // $395B + #$395C, // $395C + #$395D, // $395D + #$395E, // $395E + #$395F, // $395F + #$3960, // $3960 + #$3961, // $3961 + #$3962, // $3962 + #$3963, // $3963 + #$3964, // $3964 + #$3965, // $3965 + #$3966, // $3966 + #$3967, // $3967 + #$3968, // $3968 + #$3969, // $3969 + #$396A, // $396A + #$396B, // $396B + #$396C, // $396C + #$396D, // $396D + #$396E, // $396E + #$396F, // $396F + #$3970, // $3970 + #$3971, // $3971 + #$3972, // $3972 + #$3973, // $3973 + #$3974, // $3974 + #$3975, // $3975 + #$3976, // $3976 + #$3977, // $3977 + #$3978, // $3978 + #$3979, // $3979 + #$397A, // $397A + #$397B, // $397B + #$397C, // $397C + #$397D, // $397D + #$397E, // $397E + #$397F, // $397F + #$3980, // $3980 + #$3981, // $3981 + #$3982, // $3982 + #$3983, // $3983 + #$3984, // $3984 + #$3985, // $3985 + #$3986, // $3986 + #$3987, // $3987 + #$3988, // $3988 + #$3989, // $3989 + #$398A, // $398A + #$398B, // $398B + #$398C, // $398C + #$398D, // $398D + #$398E, // $398E + #$398F, // $398F + #$3990, // $3990 + #$3991, // $3991 + #$3992, // $3992 + #$3993, // $3993 + #$3994, // $3994 + #$3995, // $3995 + #$3996, // $3996 + #$3997, // $3997 + #$3998, // $3998 + #$3999, // $3999 + #$399A, // $399A + #$399B, // $399B + #$399C, // $399C + #$399D, // $399D + #$399E, // $399E + #$399F, // $399F + #$39A0, // $39A0 + #$39A1, // $39A1 + #$39A2, // $39A2 + #$39A3, // $39A3 + #$39A4, // $39A4 + #$39A5, // $39A5 + #$39A6, // $39A6 + #$39A7, // $39A7 + #$39A8, // $39A8 + #$39A9, // $39A9 + #$39AA, // $39AA + #$39AB, // $39AB + #$39AC, // $39AC + #$39AD, // $39AD + #$39AE, // $39AE + #$39AF, // $39AF + #$39B0, // $39B0 + #$39B1, // $39B1 + #$39B2, // $39B2 + #$39B3, // $39B3 + #$39B4, // $39B4 + #$39B5, // $39B5 + #$39B6, // $39B6 + #$39B7, // $39B7 + #$39B8, // $39B8 + #$39B9, // $39B9 + #$39BA, // $39BA + #$39BB, // $39BB + #$39BC, // $39BC + #$39BD, // $39BD + #$39BE, // $39BE + #$39BF, // $39BF + #$39C0, // $39C0 + #$39C1, // $39C1 + #$39C2, // $39C2 + #$39C3, // $39C3 + #$39C4, // $39C4 + #$39C5, // $39C5 + #$39C6, // $39C6 + #$39C7, // $39C7 + #$39C8, // $39C8 + #$39C9, // $39C9 + #$39CA, // $39CA + #$39CB, // $39CB + #$39CC, // $39CC + #$39CD, // $39CD + #$39CE, // $39CE + #$39CF, // $39CF + #$39D0, // $39D0 + #$39D1, // $39D1 + #$39D2, // $39D2 + #$39D3, // $39D3 + #$39D4, // $39D4 + #$39D5, // $39D5 + #$39D6, // $39D6 + #$39D7, // $39D7 + #$39D8, // $39D8 + #$39D9, // $39D9 + #$39DA, // $39DA + #$39DB, // $39DB + #$39DC, // $39DC + #$39DD, // $39DD + #$39DE, // $39DE + #$39DF, // $39DF + #$39E0, // $39E0 + #$39E1, // $39E1 + #$39E2, // $39E2 + #$39E3, // $39E3 + #$39E4, // $39E4 + #$39E5, // $39E5 + #$39E6, // $39E6 + #$39E7, // $39E7 + #$39E8, // $39E8 + #$39E9, // $39E9 + #$39EA, // $39EA + #$39EB, // $39EB + #$39EC, // $39EC + #$39ED, // $39ED + #$39EE, // $39EE + #$39EF, // $39EF + #$39F0, // $39F0 + #$39F1, // $39F1 + #$39F2, // $39F2 + #$39F3, // $39F3 + #$39F4, // $39F4 + #$39F5, // $39F5 + #$39F6, // $39F6 + #$39F7, // $39F7 + #$39F8, // $39F8 + #$39F9, // $39F9 + #$39FA, // $39FA + #$39FB, // $39FB + #$39FC, // $39FC + #$39FD, // $39FD + #$39FE, // $39FE + #$39FF, // $39FF + #$3A00, // $3A00 + #$3A01, // $3A01 + #$3A02, // $3A02 + #$3A03, // $3A03 + #$3A04, // $3A04 + #$3A05, // $3A05 + #$3A06, // $3A06 + #$3A07, // $3A07 + #$3A08, // $3A08 + #$3A09, // $3A09 + #$3A0A, // $3A0A + #$3A0B, // $3A0B + #$3A0C, // $3A0C + #$3A0D, // $3A0D + #$3A0E, // $3A0E + #$3A0F, // $3A0F + #$3A10, // $3A10 + #$3A11, // $3A11 + #$3A12, // $3A12 + #$3A13, // $3A13 + #$3A14, // $3A14 + #$3A15, // $3A15 + #$3A16, // $3A16 + #$3A17, // $3A17 + #$3A18, // $3A18 + #$3A19, // $3A19 + #$3A1A, // $3A1A + #$3A1B, // $3A1B + #$3A1C, // $3A1C + #$3A1D, // $3A1D + #$3A1E, // $3A1E + #$3A1F, // $3A1F + #$3A20, // $3A20 + #$3A21, // $3A21 + #$3A22, // $3A22 + #$3A23, // $3A23 + #$3A24, // $3A24 + #$3A25, // $3A25 + #$3A26, // $3A26 + #$3A27, // $3A27 + #$3A28, // $3A28 + #$3A29, // $3A29 + #$3A2A, // $3A2A + #$3A2B, // $3A2B + #$3A2C, // $3A2C + #$3A2D, // $3A2D + #$3A2E, // $3A2E + #$3A2F, // $3A2F + #$3A30, // $3A30 + #$3A31, // $3A31 + #$3A32, // $3A32 + #$3A33, // $3A33 + #$3A34, // $3A34 + #$3A35, // $3A35 + #$3A36, // $3A36 + #$3A37, // $3A37 + #$3A38, // $3A38 + #$3A39, // $3A39 + #$3A3A, // $3A3A + #$3A3B, // $3A3B + #$3A3C, // $3A3C + #$3A3D, // $3A3D + #$3A3E, // $3A3E + #$3A3F, // $3A3F + #$3A40, // $3A40 + #$3A41, // $3A41 + #$3A42, // $3A42 + #$3A43, // $3A43 + #$3A44, // $3A44 + #$3A45, // $3A45 + #$3A46, // $3A46 + #$3A47, // $3A47 + #$3A48, // $3A48 + #$3A49, // $3A49 + #$3A4A, // $3A4A + #$3A4B, // $3A4B + #$3A4C, // $3A4C + #$3A4D, // $3A4D + #$3A4E, // $3A4E + #$3A4F, // $3A4F + #$3A50, // $3A50 + #$3A51, // $3A51 + #$3A52, // $3A52 + #$3A53, // $3A53 + #$3A54, // $3A54 + #$3A55, // $3A55 + #$3A56, // $3A56 + #$3A57, // $3A57 + #$3A58, // $3A58 + #$3A59, // $3A59 + #$3A5A, // $3A5A + #$3A5B, // $3A5B + #$3A5C, // $3A5C + #$3A5D, // $3A5D + #$3A5E, // $3A5E + #$3A5F, // $3A5F + #$3A60, // $3A60 + #$3A61, // $3A61 + #$3A62, // $3A62 + #$3A63, // $3A63 + #$3A64, // $3A64 + #$3A65, // $3A65 + #$3A66, // $3A66 + #$3A67, // $3A67 + #$3A68, // $3A68 + #$3A69, // $3A69 + #$3A6A, // $3A6A + #$3A6B, // $3A6B + #$3A6C, // $3A6C + #$3A6D, // $3A6D + #$3A6E, // $3A6E + #$3A6F, // $3A6F + #$3A70, // $3A70 + #$3A71, // $3A71 + #$3A72, // $3A72 + #$3A73, // $3A73 + #$3A74, // $3A74 + #$3A75, // $3A75 + #$3A76, // $3A76 + #$3A77, // $3A77 + #$3A78, // $3A78 + #$3A79, // $3A79 + #$3A7A, // $3A7A + #$3A7B, // $3A7B + #$3A7C, // $3A7C + #$3A7D, // $3A7D + #$3A7E, // $3A7E + #$3A7F, // $3A7F + #$3A80, // $3A80 + #$3A81, // $3A81 + #$3A82, // $3A82 + #$3A83, // $3A83 + #$3A84, // $3A84 + #$3A85, // $3A85 + #$3A86, // $3A86 + #$3A87, // $3A87 + #$3A88, // $3A88 + #$3A89, // $3A89 + #$3A8A, // $3A8A + #$3A8B, // $3A8B + #$3A8C, // $3A8C + #$3A8D, // $3A8D + #$3A8E, // $3A8E + #$3A8F, // $3A8F + #$3A90, // $3A90 + #$3A91, // $3A91 + #$3A92, // $3A92 + #$3A93, // $3A93 + #$3A94, // $3A94 + #$3A95, // $3A95 + #$3A96, // $3A96 + #$3A97, // $3A97 + #$3A98, // $3A98 + #$3A99, // $3A99 + #$3A9A, // $3A9A + #$3A9B, // $3A9B + #$3A9C, // $3A9C + #$3A9D, // $3A9D + #$3A9E, // $3A9E + #$3A9F, // $3A9F + #$3AA0, // $3AA0 + #$3AA1, // $3AA1 + #$3AA2, // $3AA2 + #$3AA3, // $3AA3 + #$3AA4, // $3AA4 + #$3AA5, // $3AA5 + #$3AA6, // $3AA6 + #$3AA7, // $3AA7 + #$3AA8, // $3AA8 + #$3AA9, // $3AA9 + #$3AAA, // $3AAA + #$3AAB, // $3AAB + #$3AAC, // $3AAC + #$3AAD, // $3AAD + #$3AAE, // $3AAE + #$3AAF, // $3AAF + #$3AB0, // $3AB0 + #$3AB1, // $3AB1 + #$3AB2, // $3AB2 + #$3AB3, // $3AB3 + #$3AB4, // $3AB4 + #$3AB5, // $3AB5 + #$3AB6, // $3AB6 + #$3AB7, // $3AB7 + #$3AB8, // $3AB8 + #$3AB9, // $3AB9 + #$3ABA, // $3ABA + #$3ABB, // $3ABB + #$3ABC, // $3ABC + #$3ABD, // $3ABD + #$3ABE, // $3ABE + #$3ABF, // $3ABF + #$3AC0, // $3AC0 + #$3AC1, // $3AC1 + #$3AC2, // $3AC2 + #$3AC3, // $3AC3 + #$3AC4, // $3AC4 + #$3AC5, // $3AC5 + #$3AC6, // $3AC6 + #$3AC7, // $3AC7 + #$3AC8, // $3AC8 + #$3AC9, // $3AC9 + #$3ACA, // $3ACA + #$3ACB, // $3ACB + #$3ACC, // $3ACC + #$3ACD, // $3ACD + #$3ACE, // $3ACE + #$3ACF, // $3ACF + #$3AD0, // $3AD0 + #$3AD1, // $3AD1 + #$3AD2, // $3AD2 + #$3AD3, // $3AD3 + #$3AD4, // $3AD4 + #$3AD5, // $3AD5 + #$3AD6, // $3AD6 + #$3AD7, // $3AD7 + #$3AD8, // $3AD8 + #$3AD9, // $3AD9 + #$3ADA, // $3ADA + #$3ADB, // $3ADB + #$3ADC, // $3ADC + #$3ADD, // $3ADD + #$3ADE, // $3ADE + #$3ADF, // $3ADF + #$3AE0, // $3AE0 + #$3AE1, // $3AE1 + #$3AE2, // $3AE2 + #$3AE3, // $3AE3 + #$3AE4, // $3AE4 + #$3AE5, // $3AE5 + #$3AE6, // $3AE6 + #$3AE7, // $3AE7 + #$3AE8, // $3AE8 + #$3AE9, // $3AE9 + #$3AEA, // $3AEA + #$3AEB, // $3AEB + #$3AEC, // $3AEC + #$3AED, // $3AED + #$3AEE, // $3AEE + #$3AEF, // $3AEF + #$3AF0, // $3AF0 + #$3AF1, // $3AF1 + #$3AF2, // $3AF2 + #$3AF3, // $3AF3 + #$3AF4, // $3AF4 + #$3AF5, // $3AF5 + #$3AF6, // $3AF6 + #$3AF7, // $3AF7 + #$3AF8, // $3AF8 + #$3AF9, // $3AF9 + #$3AFA, // $3AFA + #$3AFB, // $3AFB + #$3AFC, // $3AFC + #$3AFD, // $3AFD + #$3AFE, // $3AFE + #$3AFF, // $3AFF + #$3B00, // $3B00 + #$3B01, // $3B01 + #$3B02, // $3B02 + #$3B03, // $3B03 + #$3B04, // $3B04 + #$3B05, // $3B05 + #$3B06, // $3B06 + #$3B07, // $3B07 + #$3B08, // $3B08 + #$3B09, // $3B09 + #$3B0A, // $3B0A + #$3B0B, // $3B0B + #$3B0C, // $3B0C + #$3B0D, // $3B0D + #$3B0E, // $3B0E + #$3B0F, // $3B0F + #$3B10, // $3B10 + #$3B11, // $3B11 + #$3B12, // $3B12 + #$3B13, // $3B13 + #$3B14, // $3B14 + #$3B15, // $3B15 + #$3B16, // $3B16 + #$3B17, // $3B17 + #$3B18, // $3B18 + #$3B19, // $3B19 + #$3B1A, // $3B1A + #$3B1B, // $3B1B + #$3B1C, // $3B1C + #$3B1D, // $3B1D + #$3B1E, // $3B1E + #$3B1F, // $3B1F + #$3B20, // $3B20 + #$3B21, // $3B21 + #$3B22, // $3B22 + #$3B23, // $3B23 + #$3B24, // $3B24 + #$3B25, // $3B25 + #$3B26, // $3B26 + #$3B27, // $3B27 + #$3B28, // $3B28 + #$3B29, // $3B29 + #$3B2A, // $3B2A + #$3B2B, // $3B2B + #$3B2C, // $3B2C + #$3B2D, // $3B2D + #$3B2E, // $3B2E + #$3B2F, // $3B2F + #$3B30, // $3B30 + #$3B31, // $3B31 + #$3B32, // $3B32 + #$3B33, // $3B33 + #$3B34, // $3B34 + #$3B35, // $3B35 + #$3B36, // $3B36 + #$3B37, // $3B37 + #$3B38, // $3B38 + #$3B39, // $3B39 + #$3B3A, // $3B3A + #$3B3B, // $3B3B + #$3B3C, // $3B3C + #$3B3D, // $3B3D + #$3B3E, // $3B3E + #$3B3F, // $3B3F + #$3B40, // $3B40 + #$3B41, // $3B41 + #$3B42, // $3B42 + #$3B43, // $3B43 + #$3B44, // $3B44 + #$3B45, // $3B45 + #$3B46, // $3B46 + #$3B47, // $3B47 + #$3B48, // $3B48 + #$3B49, // $3B49 + #$3B4A, // $3B4A + #$3B4B, // $3B4B + #$3B4C, // $3B4C + #$3B4D, // $3B4D + #$3B4E, // $3B4E + #$3B4F, // $3B4F + #$3B50, // $3B50 + #$3B51, // $3B51 + #$3B52, // $3B52 + #$3B53, // $3B53 + #$3B54, // $3B54 + #$3B55, // $3B55 + #$3B56, // $3B56 + #$3B57, // $3B57 + #$3B58, // $3B58 + #$3B59, // $3B59 + #$3B5A, // $3B5A + #$3B5B, // $3B5B + #$3B5C, // $3B5C + #$3B5D, // $3B5D + #$3B5E, // $3B5E + #$3B5F, // $3B5F + #$3B60, // $3B60 + #$3B61, // $3B61 + #$3B62, // $3B62 + #$3B63, // $3B63 + #$3B64, // $3B64 + #$3B65, // $3B65 + #$3B66, // $3B66 + #$3B67, // $3B67 + #$3B68, // $3B68 + #$3B69, // $3B69 + #$3B6A, // $3B6A + #$3B6B, // $3B6B + #$3B6C, // $3B6C + #$3B6D, // $3B6D + #$3B6E, // $3B6E + #$3B6F, // $3B6F + #$3B70, // $3B70 + #$3B71, // $3B71 + #$3B72, // $3B72 + #$3B73, // $3B73 + #$3B74, // $3B74 + #$3B75, // $3B75 + #$3B76, // $3B76 + #$3B77, // $3B77 + #$3B78, // $3B78 + #$3B79, // $3B79 + #$3B7A, // $3B7A + #$3B7B, // $3B7B + #$3B7C, // $3B7C + #$3B7D, // $3B7D + #$3B7E, // $3B7E + #$3B7F, // $3B7F + #$3B80, // $3B80 + #$3B81, // $3B81 + #$3B82, // $3B82 + #$3B83, // $3B83 + #$3B84, // $3B84 + #$3B85, // $3B85 + #$3B86, // $3B86 + #$3B87, // $3B87 + #$3B88, // $3B88 + #$3B89, // $3B89 + #$3B8A, // $3B8A + #$3B8B, // $3B8B + #$3B8C, // $3B8C + #$3B8D, // $3B8D + #$3B8E, // $3B8E + #$3B8F, // $3B8F + #$3B90, // $3B90 + #$3B91, // $3B91 + #$3B92, // $3B92 + #$3B93, // $3B93 + #$3B94, // $3B94 + #$3B95, // $3B95 + #$3B96, // $3B96 + #$3B97, // $3B97 + #$3B98, // $3B98 + #$3B99, // $3B99 + #$3B9A, // $3B9A + #$3B9B, // $3B9B + #$3B9C, // $3B9C + #$3B9D, // $3B9D + #$3B9E, // $3B9E + #$3B9F, // $3B9F + #$3BA0, // $3BA0 + #$3BA1, // $3BA1 + #$3BA2, // $3BA2 + #$3BA3, // $3BA3 + #$3BA4, // $3BA4 + #$3BA5, // $3BA5 + #$3BA6, // $3BA6 + #$3BA7, // $3BA7 + #$3BA8, // $3BA8 + #$3BA9, // $3BA9 + #$3BAA, // $3BAA + #$3BAB, // $3BAB + #$3BAC, // $3BAC + #$3BAD, // $3BAD + #$3BAE, // $3BAE + #$3BAF, // $3BAF + #$3BB0, // $3BB0 + #$3BB1, // $3BB1 + #$3BB2, // $3BB2 + #$3BB3, // $3BB3 + #$3BB4, // $3BB4 + #$3BB5, // $3BB5 + #$3BB6, // $3BB6 + #$3BB7, // $3BB7 + #$3BB8, // $3BB8 + #$3BB9, // $3BB9 + #$3BBA, // $3BBA + #$3BBB, // $3BBB + #$3BBC, // $3BBC + #$3BBD, // $3BBD + #$3BBE, // $3BBE + #$3BBF, // $3BBF + #$3BC0, // $3BC0 + #$3BC1, // $3BC1 + #$3BC2, // $3BC2 + #$3BC3, // $3BC3 + #$3BC4, // $3BC4 + #$3BC5, // $3BC5 + #$3BC6, // $3BC6 + #$3BC7, // $3BC7 + #$3BC8, // $3BC8 + #$3BC9, // $3BC9 + #$3BCA, // $3BCA + #$3BCB, // $3BCB + #$3BCC, // $3BCC + #$3BCD, // $3BCD + #$3BCE, // $3BCE + #$3BCF, // $3BCF + #$3BD0, // $3BD0 + #$3BD1, // $3BD1 + #$3BD2, // $3BD2 + #$3BD3, // $3BD3 + #$3BD4, // $3BD4 + #$3BD5, // $3BD5 + #$3BD6, // $3BD6 + #$3BD7, // $3BD7 + #$3BD8, // $3BD8 + #$3BD9, // $3BD9 + #$3BDA, // $3BDA + #$3BDB, // $3BDB + #$3BDC, // $3BDC + #$3BDD, // $3BDD + #$3BDE, // $3BDE + #$3BDF, // $3BDF + #$3BE0, // $3BE0 + #$3BE1, // $3BE1 + #$3BE2, // $3BE2 + #$3BE3, // $3BE3 + #$3BE4, // $3BE4 + #$3BE5, // $3BE5 + #$3BE6, // $3BE6 + #$3BE7, // $3BE7 + #$3BE8, // $3BE8 + #$3BE9, // $3BE9 + #$3BEA, // $3BEA + #$3BEB, // $3BEB + #$3BEC, // $3BEC + #$3BED, // $3BED + #$3BEE, // $3BEE + #$3BEF, // $3BEF + #$3BF0, // $3BF0 + #$3BF1, // $3BF1 + #$3BF2, // $3BF2 + #$3BF3, // $3BF3 + #$3BF4, // $3BF4 + #$3BF5, // $3BF5 + #$3BF6, // $3BF6 + #$3BF7, // $3BF7 + #$3BF8, // $3BF8 + #$3BF9, // $3BF9 + #$3BFA, // $3BFA + #$3BFB, // $3BFB + #$3BFC, // $3BFC + #$3BFD, // $3BFD + #$3BFE, // $3BFE + #$3BFF, // $3BFF + #$3C00, // $3C00 + #$3C01, // $3C01 + #$3C02, // $3C02 + #$3C03, // $3C03 + #$3C04, // $3C04 + #$3C05, // $3C05 + #$3C06, // $3C06 + #$3C07, // $3C07 + #$3C08, // $3C08 + #$3C09, // $3C09 + #$3C0A, // $3C0A + #$3C0B, // $3C0B + #$3C0C, // $3C0C + #$3C0D, // $3C0D + #$3C0E, // $3C0E + #$3C0F, // $3C0F + #$3C10, // $3C10 + #$3C11, // $3C11 + #$3C12, // $3C12 + #$3C13, // $3C13 + #$3C14, // $3C14 + #$3C15, // $3C15 + #$3C16, // $3C16 + #$3C17, // $3C17 + #$3C18, // $3C18 + #$3C19, // $3C19 + #$3C1A, // $3C1A + #$3C1B, // $3C1B + #$3C1C, // $3C1C + #$3C1D, // $3C1D + #$3C1E, // $3C1E + #$3C1F, // $3C1F + #$3C20, // $3C20 + #$3C21, // $3C21 + #$3C22, // $3C22 + #$3C23, // $3C23 + #$3C24, // $3C24 + #$3C25, // $3C25 + #$3C26, // $3C26 + #$3C27, // $3C27 + #$3C28, // $3C28 + #$3C29, // $3C29 + #$3C2A, // $3C2A + #$3C2B, // $3C2B + #$3C2C, // $3C2C + #$3C2D, // $3C2D + #$3C2E, // $3C2E + #$3C2F, // $3C2F + #$3C30, // $3C30 + #$3C31, // $3C31 + #$3C32, // $3C32 + #$3C33, // $3C33 + #$3C34, // $3C34 + #$3C35, // $3C35 + #$3C36, // $3C36 + #$3C37, // $3C37 + #$3C38, // $3C38 + #$3C39, // $3C39 + #$3C3A, // $3C3A + #$3C3B, // $3C3B + #$3C3C, // $3C3C + #$3C3D, // $3C3D + #$3C3E, // $3C3E + #$3C3F, // $3C3F + #$3C40, // $3C40 + #$3C41, // $3C41 + #$3C42, // $3C42 + #$3C43, // $3C43 + #$3C44, // $3C44 + #$3C45, // $3C45 + #$3C46, // $3C46 + #$3C47, // $3C47 + #$3C48, // $3C48 + #$3C49, // $3C49 + #$3C4A, // $3C4A + #$3C4B, // $3C4B + #$3C4C, // $3C4C + #$3C4D, // $3C4D + #$3C4E, // $3C4E + #$3C4F, // $3C4F + #$3C50, // $3C50 + #$3C51, // $3C51 + #$3C52, // $3C52 + #$3C53, // $3C53 + #$3C54, // $3C54 + #$3C55, // $3C55 + #$3C56, // $3C56 + #$3C57, // $3C57 + #$3C58, // $3C58 + #$3C59, // $3C59 + #$3C5A, // $3C5A + #$3C5B, // $3C5B + #$3C5C, // $3C5C + #$3C5D, // $3C5D + #$3C5E, // $3C5E + #$3C5F, // $3C5F + #$3C60, // $3C60 + #$3C61, // $3C61 + #$3C62, // $3C62 + #$3C63, // $3C63 + #$3C64, // $3C64 + #$3C65, // $3C65 + #$3C66, // $3C66 + #$3C67, // $3C67 + #$3C68, // $3C68 + #$3C69, // $3C69 + #$3C6A, // $3C6A + #$3C6B, // $3C6B + #$3C6C, // $3C6C + #$3C6D, // $3C6D + #$3C6E, // $3C6E + #$3C6F, // $3C6F + #$3C70, // $3C70 + #$3C71, // $3C71 + #$3C72, // $3C72 + #$3C73, // $3C73 + #$3C74, // $3C74 + #$3C75, // $3C75 + #$3C76, // $3C76 + #$3C77, // $3C77 + #$3C78, // $3C78 + #$3C79, // $3C79 + #$3C7A, // $3C7A + #$3C7B, // $3C7B + #$3C7C, // $3C7C + #$3C7D, // $3C7D + #$3C7E, // $3C7E + #$3C7F, // $3C7F + #$3C80, // $3C80 + #$3C81, // $3C81 + #$3C82, // $3C82 + #$3C83, // $3C83 + #$3C84, // $3C84 + #$3C85, // $3C85 + #$3C86, // $3C86 + #$3C87, // $3C87 + #$3C88, // $3C88 + #$3C89, // $3C89 + #$3C8A, // $3C8A + #$3C8B, // $3C8B + #$3C8C, // $3C8C + #$3C8D, // $3C8D + #$3C8E, // $3C8E + #$3C8F, // $3C8F + #$3C90, // $3C90 + #$3C91, // $3C91 + #$3C92, // $3C92 + #$3C93, // $3C93 + #$3C94, // $3C94 + #$3C95, // $3C95 + #$3C96, // $3C96 + #$3C97, // $3C97 + #$3C98, // $3C98 + #$3C99, // $3C99 + #$3C9A, // $3C9A + #$3C9B, // $3C9B + #$3C9C, // $3C9C + #$3C9D, // $3C9D + #$3C9E, // $3C9E + #$3C9F, // $3C9F + #$3CA0, // $3CA0 + #$3CA1, // $3CA1 + #$3CA2, // $3CA2 + #$3CA3, // $3CA3 + #$3CA4, // $3CA4 + #$3CA5, // $3CA5 + #$3CA6, // $3CA6 + #$3CA7, // $3CA7 + #$3CA8, // $3CA8 + #$3CA9, // $3CA9 + #$3CAA, // $3CAA + #$3CAB, // $3CAB + #$3CAC, // $3CAC + #$3CAD, // $3CAD + #$3CAE, // $3CAE + #$3CAF, // $3CAF + #$3CB0, // $3CB0 + #$3CB1, // $3CB1 + #$3CB2, // $3CB2 + #$3CB3, // $3CB3 + #$3CB4, // $3CB4 + #$3CB5, // $3CB5 + #$3CB6, // $3CB6 + #$3CB7, // $3CB7 + #$3CB8, // $3CB8 + #$3CB9, // $3CB9 + #$3CBA, // $3CBA + #$3CBB, // $3CBB + #$3CBC, // $3CBC + #$3CBD, // $3CBD + #$3CBE, // $3CBE + #$3CBF, // $3CBF + #$3CC0, // $3CC0 + #$3CC1, // $3CC1 + #$3CC2, // $3CC2 + #$3CC3, // $3CC3 + #$3CC4, // $3CC4 + #$3CC5, // $3CC5 + #$3CC6, // $3CC6 + #$3CC7, // $3CC7 + #$3CC8, // $3CC8 + #$3CC9, // $3CC9 + #$3CCA, // $3CCA + #$3CCB, // $3CCB + #$3CCC, // $3CCC + #$3CCD, // $3CCD + #$3CCE, // $3CCE + #$3CCF, // $3CCF + #$3CD0, // $3CD0 + #$3CD1, // $3CD1 + #$3CD2, // $3CD2 + #$3CD3, // $3CD3 + #$3CD4, // $3CD4 + #$3CD5, // $3CD5 + #$3CD6, // $3CD6 + #$3CD7, // $3CD7 + #$3CD8, // $3CD8 + #$3CD9, // $3CD9 + #$3CDA, // $3CDA + #$3CDB, // $3CDB + #$3CDC, // $3CDC + #$3CDD, // $3CDD + #$3CDE, // $3CDE + #$3CDF, // $3CDF + #$3CE0, // $3CE0 + #$3CE1, // $3CE1 + #$3CE2, // $3CE2 + #$3CE3, // $3CE3 + #$3CE4, // $3CE4 + #$3CE5, // $3CE5 + #$3CE6, // $3CE6 + #$3CE7, // $3CE7 + #$3CE8, // $3CE8 + #$3CE9, // $3CE9 + #$3CEA, // $3CEA + #$3CEB, // $3CEB + #$3CEC, // $3CEC + #$3CED, // $3CED + #$3CEE, // $3CEE + #$3CEF, // $3CEF + #$3CF0, // $3CF0 + #$3CF1, // $3CF1 + #$3CF2, // $3CF2 + #$3CF3, // $3CF3 + #$3CF4, // $3CF4 + #$3CF5, // $3CF5 + #$3CF6, // $3CF6 + #$3CF7, // $3CF7 + #$3CF8, // $3CF8 + #$3CF9, // $3CF9 + #$3CFA, // $3CFA + #$3CFB, // $3CFB + #$3CFC, // $3CFC + #$3CFD, // $3CFD + #$3CFE, // $3CFE + #$3CFF, // $3CFF + #$3D00, // $3D00 + #$3D01, // $3D01 + #$3D02, // $3D02 + #$3D03, // $3D03 + #$3D04, // $3D04 + #$3D05, // $3D05 + #$3D06, // $3D06 + #$3D07, // $3D07 + #$3D08, // $3D08 + #$3D09, // $3D09 + #$3D0A, // $3D0A + #$3D0B, // $3D0B + #$3D0C, // $3D0C + #$3D0D, // $3D0D + #$3D0E, // $3D0E + #$3D0F, // $3D0F + #$3D10, // $3D10 + #$3D11, // $3D11 + #$3D12, // $3D12 + #$3D13, // $3D13 + #$3D14, // $3D14 + #$3D15, // $3D15 + #$3D16, // $3D16 + #$3D17, // $3D17 + #$3D18, // $3D18 + #$3D19, // $3D19 + #$3D1A, // $3D1A + #$3D1B, // $3D1B + #$3D1C, // $3D1C + #$3D1D, // $3D1D + #$3D1E, // $3D1E + #$3D1F, // $3D1F + #$3D20, // $3D20 + #$3D21, // $3D21 + #$3D22, // $3D22 + #$3D23, // $3D23 + #$3D24, // $3D24 + #$3D25, // $3D25 + #$3D26, // $3D26 + #$3D27, // $3D27 + #$3D28, // $3D28 + #$3D29, // $3D29 + #$3D2A, // $3D2A + #$3D2B, // $3D2B + #$3D2C, // $3D2C + #$3D2D, // $3D2D + #$3D2E, // $3D2E + #$3D2F, // $3D2F + #$3D30, // $3D30 + #$3D31, // $3D31 + #$3D32, // $3D32 + #$3D33, // $3D33 + #$3D34, // $3D34 + #$3D35, // $3D35 + #$3D36, // $3D36 + #$3D37, // $3D37 + #$3D38, // $3D38 + #$3D39, // $3D39 + #$3D3A, // $3D3A + #$3D3B, // $3D3B + #$3D3C, // $3D3C + #$3D3D, // $3D3D + #$3D3E, // $3D3E + #$3D3F, // $3D3F + #$3D40, // $3D40 + #$3D41, // $3D41 + #$3D42, // $3D42 + #$3D43, // $3D43 + #$3D44, // $3D44 + #$3D45, // $3D45 + #$3D46, // $3D46 + #$3D47, // $3D47 + #$3D48, // $3D48 + #$3D49, // $3D49 + #$3D4A, // $3D4A + #$3D4B, // $3D4B + #$3D4C, // $3D4C + #$3D4D, // $3D4D + #$3D4E, // $3D4E + #$3D4F, // $3D4F + #$3D50, // $3D50 + #$3D51, // $3D51 + #$3D52, // $3D52 + #$3D53, // $3D53 + #$3D54, // $3D54 + #$3D55, // $3D55 + #$3D56, // $3D56 + #$3D57, // $3D57 + #$3D58, // $3D58 + #$3D59, // $3D59 + #$3D5A, // $3D5A + #$3D5B, // $3D5B + #$3D5C, // $3D5C + #$3D5D, // $3D5D + #$3D5E, // $3D5E + #$3D5F, // $3D5F + #$3D60, // $3D60 + #$3D61, // $3D61 + #$3D62, // $3D62 + #$3D63, // $3D63 + #$3D64, // $3D64 + #$3D65, // $3D65 + #$3D66, // $3D66 + #$3D67, // $3D67 + #$3D68, // $3D68 + #$3D69, // $3D69 + #$3D6A, // $3D6A + #$3D6B, // $3D6B + #$3D6C, // $3D6C + #$3D6D, // $3D6D + #$3D6E, // $3D6E + #$3D6F, // $3D6F + #$3D70, // $3D70 + #$3D71, // $3D71 + #$3D72, // $3D72 + #$3D73, // $3D73 + #$3D74, // $3D74 + #$3D75, // $3D75 + #$3D76, // $3D76 + #$3D77, // $3D77 + #$3D78, // $3D78 + #$3D79, // $3D79 + #$3D7A, // $3D7A + #$3D7B, // $3D7B + #$3D7C, // $3D7C + #$3D7D, // $3D7D + #$3D7E, // $3D7E + #$3D7F, // $3D7F + #$3D80, // $3D80 + #$3D81, // $3D81 + #$3D82, // $3D82 + #$3D83, // $3D83 + #$3D84, // $3D84 + #$3D85, // $3D85 + #$3D86, // $3D86 + #$3D87, // $3D87 + #$3D88, // $3D88 + #$3D89, // $3D89 + #$3D8A, // $3D8A + #$3D8B, // $3D8B + #$3D8C, // $3D8C + #$3D8D, // $3D8D + #$3D8E, // $3D8E + #$3D8F, // $3D8F + #$3D90, // $3D90 + #$3D91, // $3D91 + #$3D92, // $3D92 + #$3D93, // $3D93 + #$3D94, // $3D94 + #$3D95, // $3D95 + #$3D96, // $3D96 + #$3D97, // $3D97 + #$3D98, // $3D98 + #$3D99, // $3D99 + #$3D9A, // $3D9A + #$3D9B, // $3D9B + #$3D9C, // $3D9C + #$3D9D, // $3D9D + #$3D9E, // $3D9E + #$3D9F, // $3D9F + #$3DA0, // $3DA0 + #$3DA1, // $3DA1 + #$3DA2, // $3DA2 + #$3DA3, // $3DA3 + #$3DA4, // $3DA4 + #$3DA5, // $3DA5 + #$3DA6, // $3DA6 + #$3DA7, // $3DA7 + #$3DA8, // $3DA8 + #$3DA9, // $3DA9 + #$3DAA, // $3DAA + #$3DAB, // $3DAB + #$3DAC, // $3DAC + #$3DAD, // $3DAD + #$3DAE, // $3DAE + #$3DAF, // $3DAF + #$3DB0, // $3DB0 + #$3DB1, // $3DB1 + #$3DB2, // $3DB2 + #$3DB3, // $3DB3 + #$3DB4, // $3DB4 + #$3DB5, // $3DB5 + #$3DB6, // $3DB6 + #$3DB7, // $3DB7 + #$3DB8, // $3DB8 + #$3DB9, // $3DB9 + #$3DBA, // $3DBA + #$3DBB, // $3DBB + #$3DBC, // $3DBC + #$3DBD, // $3DBD + #$3DBE, // $3DBE + #$3DBF, // $3DBF + #$3DC0, // $3DC0 + #$3DC1, // $3DC1 + #$3DC2, // $3DC2 + #$3DC3, // $3DC3 + #$3DC4, // $3DC4 + #$3DC5, // $3DC5 + #$3DC6, // $3DC6 + #$3DC7, // $3DC7 + #$3DC8, // $3DC8 + #$3DC9, // $3DC9 + #$3DCA, // $3DCA + #$3DCB, // $3DCB + #$3DCC, // $3DCC + #$3DCD, // $3DCD + #$3DCE, // $3DCE + #$3DCF, // $3DCF + #$3DD0, // $3DD0 + #$3DD1, // $3DD1 + #$3DD2, // $3DD2 + #$3DD3, // $3DD3 + #$3DD4, // $3DD4 + #$3DD5, // $3DD5 + #$3DD6, // $3DD6 + #$3DD7, // $3DD7 + #$3DD8, // $3DD8 + #$3DD9, // $3DD9 + #$3DDA, // $3DDA + #$3DDB, // $3DDB + #$3DDC, // $3DDC + #$3DDD, // $3DDD + #$3DDE, // $3DDE + #$3DDF, // $3DDF + #$3DE0, // $3DE0 + #$3DE1, // $3DE1 + #$3DE2, // $3DE2 + #$3DE3, // $3DE3 + #$3DE4, // $3DE4 + #$3DE5, // $3DE5 + #$3DE6, // $3DE6 + #$3DE7, // $3DE7 + #$3DE8, // $3DE8 + #$3DE9, // $3DE9 + #$3DEA, // $3DEA + #$3DEB, // $3DEB + #$3DEC, // $3DEC + #$3DED, // $3DED + #$3DEE, // $3DEE + #$3DEF, // $3DEF + #$3DF0, // $3DF0 + #$3DF1, // $3DF1 + #$3DF2, // $3DF2 + #$3DF3, // $3DF3 + #$3DF4, // $3DF4 + #$3DF5, // $3DF5 + #$3DF6, // $3DF6 + #$3DF7, // $3DF7 + #$3DF8, // $3DF8 + #$3DF9, // $3DF9 + #$3DFA, // $3DFA + #$3DFB, // $3DFB + #$3DFC, // $3DFC + #$3DFD, // $3DFD + #$3DFE, // $3DFE + #$3DFF, // $3DFF + #$3E00, // $3E00 + #$3E01, // $3E01 + #$3E02, // $3E02 + #$3E03, // $3E03 + #$3E04, // $3E04 + #$3E05, // $3E05 + #$3E06, // $3E06 + #$3E07, // $3E07 + #$3E08, // $3E08 + #$3E09, // $3E09 + #$3E0A, // $3E0A + #$3E0B, // $3E0B + #$3E0C, // $3E0C + #$3E0D, // $3E0D + #$3E0E, // $3E0E + #$3E0F, // $3E0F + #$3E10, // $3E10 + #$3E11, // $3E11 + #$3E12, // $3E12 + #$3E13, // $3E13 + #$3E14, // $3E14 + #$3E15, // $3E15 + #$3E16, // $3E16 + #$3E17, // $3E17 + #$3E18, // $3E18 + #$3E19, // $3E19 + #$3E1A, // $3E1A + #$3E1B, // $3E1B + #$3E1C, // $3E1C + #$3E1D, // $3E1D + #$3E1E, // $3E1E + #$3E1F, // $3E1F + #$3E20, // $3E20 + #$3E21, // $3E21 + #$3E22, // $3E22 + #$3E23, // $3E23 + #$3E24, // $3E24 + #$3E25, // $3E25 + #$3E26, // $3E26 + #$3E27, // $3E27 + #$3E28, // $3E28 + #$3E29, // $3E29 + #$3E2A, // $3E2A + #$3E2B, // $3E2B + #$3E2C, // $3E2C + #$3E2D, // $3E2D + #$3E2E, // $3E2E + #$3E2F, // $3E2F + #$3E30, // $3E30 + #$3E31, // $3E31 + #$3E32, // $3E32 + #$3E33, // $3E33 + #$3E34, // $3E34 + #$3E35, // $3E35 + #$3E36, // $3E36 + #$3E37, // $3E37 + #$3E38, // $3E38 + #$3E39, // $3E39 + #$3E3A, // $3E3A + #$3E3B, // $3E3B + #$3E3C, // $3E3C + #$3E3D, // $3E3D + #$3E3E, // $3E3E + #$3E3F, // $3E3F + #$3E40, // $3E40 + #$3E41, // $3E41 + #$3E42, // $3E42 + #$3E43, // $3E43 + #$3E44, // $3E44 + #$3E45, // $3E45 + #$3E46, // $3E46 + #$3E47, // $3E47 + #$3E48, // $3E48 + #$3E49, // $3E49 + #$3E4A, // $3E4A + #$3E4B, // $3E4B + #$3E4C, // $3E4C + #$3E4D, // $3E4D + #$3E4E, // $3E4E + #$3E4F, // $3E4F + #$3E50, // $3E50 + #$3E51, // $3E51 + #$3E52, // $3E52 + #$3E53, // $3E53 + #$3E54, // $3E54 + #$3E55, // $3E55 + #$3E56, // $3E56 + #$3E57, // $3E57 + #$3E58, // $3E58 + #$3E59, // $3E59 + #$3E5A, // $3E5A + #$3E5B, // $3E5B + #$3E5C, // $3E5C + #$3E5D, // $3E5D + #$3E5E, // $3E5E + #$3E5F, // $3E5F + #$3E60, // $3E60 + #$3E61, // $3E61 + #$3E62, // $3E62 + #$3E63, // $3E63 + #$3E64, // $3E64 + #$3E65, // $3E65 + #$3E66, // $3E66 + #$3E67, // $3E67 + #$3E68, // $3E68 + #$3E69, // $3E69 + #$3E6A, // $3E6A + #$3E6B, // $3E6B + #$3E6C, // $3E6C + #$3E6D, // $3E6D + #$3E6E, // $3E6E + #$3E6F, // $3E6F + #$3E70, // $3E70 + #$3E71, // $3E71 + #$3E72, // $3E72 + #$3E73, // $3E73 + #$3E74, // $3E74 + #$3E75, // $3E75 + #$3E76, // $3E76 + #$3E77, // $3E77 + #$3E78, // $3E78 + #$3E79, // $3E79 + #$3E7A, // $3E7A + #$3E7B, // $3E7B + #$3E7C, // $3E7C + #$3E7D, // $3E7D + #$3E7E, // $3E7E + #$3E7F, // $3E7F + #$3E80, // $3E80 + #$3E81, // $3E81 + #$3E82, // $3E82 + #$3E83, // $3E83 + #$3E84, // $3E84 + #$3E85, // $3E85 + #$3E86, // $3E86 + #$3E87, // $3E87 + #$3E88, // $3E88 + #$3E89, // $3E89 + #$3E8A, // $3E8A + #$3E8B, // $3E8B + #$3E8C, // $3E8C + #$3E8D, // $3E8D + #$3E8E, // $3E8E + #$3E8F, // $3E8F + #$3E90, // $3E90 + #$3E91, // $3E91 + #$3E92, // $3E92 + #$3E93, // $3E93 + #$3E94, // $3E94 + #$3E95, // $3E95 + #$3E96, // $3E96 + #$3E97, // $3E97 + #$3E98, // $3E98 + #$3E99, // $3E99 + #$3E9A, // $3E9A + #$3E9B, // $3E9B + #$3E9C, // $3E9C + #$3E9D, // $3E9D + #$3E9E, // $3E9E + #$3E9F, // $3E9F + #$3EA0, // $3EA0 + #$3EA1, // $3EA1 + #$3EA2, // $3EA2 + #$3EA3, // $3EA3 + #$3EA4, // $3EA4 + #$3EA5, // $3EA5 + #$3EA6, // $3EA6 + #$3EA7, // $3EA7 + #$3EA8, // $3EA8 + #$3EA9, // $3EA9 + #$3EAA, // $3EAA + #$3EAB, // $3EAB + #$3EAC, // $3EAC + #$3EAD, // $3EAD + #$3EAE, // $3EAE + #$3EAF, // $3EAF + #$3EB0, // $3EB0 + #$3EB1, // $3EB1 + #$3EB2, // $3EB2 + #$3EB3, // $3EB3 + #$3EB4, // $3EB4 + #$3EB5, // $3EB5 + #$3EB6, // $3EB6 + #$3EB7, // $3EB7 + #$3EB8, // $3EB8 + #$3EB9, // $3EB9 + #$3EBA, // $3EBA + #$3EBB, // $3EBB + #$3EBC, // $3EBC + #$3EBD, // $3EBD + #$3EBE, // $3EBE + #$3EBF, // $3EBF + #$3EC0, // $3EC0 + #$3EC1, // $3EC1 + #$3EC2, // $3EC2 + #$3EC3, // $3EC3 + #$3EC4, // $3EC4 + #$3EC5, // $3EC5 + #$3EC6, // $3EC6 + #$3EC7, // $3EC7 + #$3EC8, // $3EC8 + #$3EC9, // $3EC9 + #$3ECA, // $3ECA + #$3ECB, // $3ECB + #$3ECC, // $3ECC + #$3ECD, // $3ECD + #$3ECE, // $3ECE + #$3ECF, // $3ECF + #$3ED0, // $3ED0 + #$3ED1, // $3ED1 + #$3ED2, // $3ED2 + #$3ED3, // $3ED3 + #$3ED4, // $3ED4 + #$3ED5, // $3ED5 + #$3ED6, // $3ED6 + #$3ED7, // $3ED7 + #$3ED8, // $3ED8 + #$3ED9, // $3ED9 + #$3EDA, // $3EDA + #$3EDB, // $3EDB + #$3EDC, // $3EDC + #$3EDD, // $3EDD + #$3EDE, // $3EDE + #$3EDF, // $3EDF + #$3EE0, // $3EE0 + #$3EE1, // $3EE1 + #$3EE2, // $3EE2 + #$3EE3, // $3EE3 + #$3EE4, // $3EE4 + #$3EE5, // $3EE5 + #$3EE6, // $3EE6 + #$3EE7, // $3EE7 + #$3EE8, // $3EE8 + #$3EE9, // $3EE9 + #$3EEA, // $3EEA + #$3EEB, // $3EEB + #$3EEC, // $3EEC + #$3EED, // $3EED + #$3EEE, // $3EEE + #$3EEF, // $3EEF + #$3EF0, // $3EF0 + #$3EF1, // $3EF1 + #$3EF2, // $3EF2 + #$3EF3, // $3EF3 + #$3EF4, // $3EF4 + #$3EF5, // $3EF5 + #$3EF6, // $3EF6 + #$3EF7, // $3EF7 + #$3EF8, // $3EF8 + #$3EF9, // $3EF9 + #$3EFA, // $3EFA + #$3EFB, // $3EFB + #$3EFC, // $3EFC + #$3EFD, // $3EFD + #$3EFE, // $3EFE + #$3EFF, // $3EFF + #$3F00, // $3F00 + #$3F01, // $3F01 + #$3F02, // $3F02 + #$3F03, // $3F03 + #$3F04, // $3F04 + #$3F05, // $3F05 + #$3F06, // $3F06 + #$3F07, // $3F07 + #$3F08, // $3F08 + #$3F09, // $3F09 + #$3F0A, // $3F0A + #$3F0B, // $3F0B + #$3F0C, // $3F0C + #$3F0D, // $3F0D + #$3F0E, // $3F0E + #$3F0F, // $3F0F + #$3F10, // $3F10 + #$3F11, // $3F11 + #$3F12, // $3F12 + #$3F13, // $3F13 + #$3F14, // $3F14 + #$3F15, // $3F15 + #$3F16, // $3F16 + #$3F17, // $3F17 + #$3F18, // $3F18 + #$3F19, // $3F19 + #$3F1A, // $3F1A + #$3F1B, // $3F1B + #$3F1C, // $3F1C + #$3F1D, // $3F1D + #$3F1E, // $3F1E + #$3F1F, // $3F1F + #$3F20, // $3F20 + #$3F21, // $3F21 + #$3F22, // $3F22 + #$3F23, // $3F23 + #$3F24, // $3F24 + #$3F25, // $3F25 + #$3F26, // $3F26 + #$3F27, // $3F27 + #$3F28, // $3F28 + #$3F29, // $3F29 + #$3F2A, // $3F2A + #$3F2B, // $3F2B + #$3F2C, // $3F2C + #$3F2D, // $3F2D + #$3F2E, // $3F2E + #$3F2F, // $3F2F + #$3F30, // $3F30 + #$3F31, // $3F31 + #$3F32, // $3F32 + #$3F33, // $3F33 + #$3F34, // $3F34 + #$3F35, // $3F35 + #$3F36, // $3F36 + #$3F37, // $3F37 + #$3F38, // $3F38 + #$3F39, // $3F39 + #$3F3A, // $3F3A + #$3F3B, // $3F3B + #$3F3C, // $3F3C + #$3F3D, // $3F3D + #$3F3E, // $3F3E + #$3F3F, // $3F3F + #$3F40, // $3F40 + #$3F41, // $3F41 + #$3F42, // $3F42 + #$3F43, // $3F43 + #$3F44, // $3F44 + #$3F45, // $3F45 + #$3F46, // $3F46 + #$3F47, // $3F47 + #$3F48, // $3F48 + #$3F49, // $3F49 + #$3F4A, // $3F4A + #$3F4B, // $3F4B + #$3F4C, // $3F4C + #$3F4D, // $3F4D + #$3F4E, // $3F4E + #$3F4F, // $3F4F + #$3F50, // $3F50 + #$3F51, // $3F51 + #$3F52, // $3F52 + #$3F53, // $3F53 + #$3F54, // $3F54 + #$3F55, // $3F55 + #$3F56, // $3F56 + #$3F57, // $3F57 + #$3F58, // $3F58 + #$3F59, // $3F59 + #$3F5A, // $3F5A + #$3F5B, // $3F5B + #$3F5C, // $3F5C + #$3F5D, // $3F5D + #$3F5E, // $3F5E + #$3F5F, // $3F5F + #$3F60, // $3F60 + #$3F61, // $3F61 + #$3F62, // $3F62 + #$3F63, // $3F63 + #$3F64, // $3F64 + #$3F65, // $3F65 + #$3F66, // $3F66 + #$3F67, // $3F67 + #$3F68, // $3F68 + #$3F69, // $3F69 + #$3F6A, // $3F6A + #$3F6B, // $3F6B + #$3F6C, // $3F6C + #$3F6D, // $3F6D + #$3F6E, // $3F6E + #$3F6F, // $3F6F + #$3F70, // $3F70 + #$3F71, // $3F71 + #$3F72, // $3F72 + #$3F73, // $3F73 + #$3F74, // $3F74 + #$3F75, // $3F75 + #$3F76, // $3F76 + #$3F77, // $3F77 + #$3F78, // $3F78 + #$3F79, // $3F79 + #$3F7A, // $3F7A + #$3F7B, // $3F7B + #$3F7C, // $3F7C + #$3F7D, // $3F7D + #$3F7E, // $3F7E + #$3F7F, // $3F7F + #$3F80, // $3F80 + #$3F81, // $3F81 + #$3F82, // $3F82 + #$3F83, // $3F83 + #$3F84, // $3F84 + #$3F85, // $3F85 + #$3F86, // $3F86 + #$3F87, // $3F87 + #$3F88, // $3F88 + #$3F89, // $3F89 + #$3F8A, // $3F8A + #$3F8B, // $3F8B + #$3F8C, // $3F8C + #$3F8D, // $3F8D + #$3F8E, // $3F8E + #$3F8F, // $3F8F + #$3F90, // $3F90 + #$3F91, // $3F91 + #$3F92, // $3F92 + #$3F93, // $3F93 + #$3F94, // $3F94 + #$3F95, // $3F95 + #$3F96, // $3F96 + #$3F97, // $3F97 + #$3F98, // $3F98 + #$3F99, // $3F99 + #$3F9A, // $3F9A + #$3F9B, // $3F9B + #$3F9C, // $3F9C + #$3F9D, // $3F9D + #$3F9E, // $3F9E + #$3F9F, // $3F9F + #$3FA0, // $3FA0 + #$3FA1, // $3FA1 + #$3FA2, // $3FA2 + #$3FA3, // $3FA3 + #$3FA4, // $3FA4 + #$3FA5, // $3FA5 + #$3FA6, // $3FA6 + #$3FA7, // $3FA7 + #$3FA8, // $3FA8 + #$3FA9, // $3FA9 + #$3FAA, // $3FAA + #$3FAB, // $3FAB + #$3FAC, // $3FAC + #$3FAD, // $3FAD + #$3FAE, // $3FAE + #$3FAF, // $3FAF + #$3FB0, // $3FB0 + #$3FB1, // $3FB1 + #$3FB2, // $3FB2 + #$3FB3, // $3FB3 + #$3FB4, // $3FB4 + #$3FB5, // $3FB5 + #$3FB6, // $3FB6 + #$3FB7, // $3FB7 + #$3FB8, // $3FB8 + #$3FB9, // $3FB9 + #$3FBA, // $3FBA + #$3FBB, // $3FBB + #$3FBC, // $3FBC + #$3FBD, // $3FBD + #$3FBE, // $3FBE + #$3FBF, // $3FBF + #$3FC0, // $3FC0 + #$3FC1, // $3FC1 + #$3FC2, // $3FC2 + #$3FC3, // $3FC3 + #$3FC4, // $3FC4 + #$3FC5, // $3FC5 + #$3FC6, // $3FC6 + #$3FC7, // $3FC7 + #$3FC8, // $3FC8 + #$3FC9, // $3FC9 + #$3FCA, // $3FCA + #$3FCB, // $3FCB + #$3FCC, // $3FCC + #$3FCD, // $3FCD + #$3FCE, // $3FCE + #$3FCF, // $3FCF + #$3FD0, // $3FD0 + #$3FD1, // $3FD1 + #$3FD2, // $3FD2 + #$3FD3, // $3FD3 + #$3FD4, // $3FD4 + #$3FD5, // $3FD5 + #$3FD6, // $3FD6 + #$3FD7, // $3FD7 + #$3FD8, // $3FD8 + #$3FD9, // $3FD9 + #$3FDA, // $3FDA + #$3FDB, // $3FDB + #$3FDC, // $3FDC + #$3FDD, // $3FDD + #$3FDE, // $3FDE + #$3FDF, // $3FDF + #$3FE0, // $3FE0 + #$3FE1, // $3FE1 + #$3FE2, // $3FE2 + #$3FE3, // $3FE3 + #$3FE4, // $3FE4 + #$3FE5, // $3FE5 + #$3FE6, // $3FE6 + #$3FE7, // $3FE7 + #$3FE8, // $3FE8 + #$3FE9, // $3FE9 + #$3FEA, // $3FEA + #$3FEB, // $3FEB + #$3FEC, // $3FEC + #$3FED, // $3FED + #$3FEE, // $3FEE + #$3FEF, // $3FEF + #$3FF0, // $3FF0 + #$3FF1, // $3FF1 + #$3FF2, // $3FF2 + #$3FF3, // $3FF3 + #$3FF4, // $3FF4 + #$3FF5, // $3FF5 + #$3FF6, // $3FF6 + #$3FF7, // $3FF7 + #$3FF8, // $3FF8 + #$3FF9, // $3FF9 + #$3FFA, // $3FFA + #$3FFB, // $3FFB + #$3FFC, // $3FFC + #$3FFD, // $3FFD + #$3FFE, // $3FFE + #$3FFF, // $3FFF + #$4000, // $4000 + #$4001, // $4001 + #$4002, // $4002 + #$4003, // $4003 + #$4004, // $4004 + #$4005, // $4005 + #$4006, // $4006 + #$4007, // $4007 + #$4008, // $4008 + #$4009, // $4009 + #$400A, // $400A + #$400B, // $400B + #$400C, // $400C + #$400D, // $400D + #$400E, // $400E + #$400F, // $400F + #$4010, // $4010 + #$4011, // $4011 + #$4012, // $4012 + #$4013, // $4013 + #$4014, // $4014 + #$4015, // $4015 + #$4016, // $4016 + #$4017, // $4017 + #$4018, // $4018 + #$4019, // $4019 + #$401A, // $401A + #$401B, // $401B + #$401C, // $401C + #$401D, // $401D + #$401E, // $401E + #$401F, // $401F + #$4020, // $4020 + #$4021, // $4021 + #$4022, // $4022 + #$4023, // $4023 + #$4024, // $4024 + #$4025, // $4025 + #$4026, // $4026 + #$4027, // $4027 + #$4028, // $4028 + #$4029, // $4029 + #$402A, // $402A + #$402B, // $402B + #$402C, // $402C + #$402D, // $402D + #$402E, // $402E + #$402F, // $402F + #$4030, // $4030 + #$4031, // $4031 + #$4032, // $4032 + #$4033, // $4033 + #$4034, // $4034 + #$4035, // $4035 + #$4036, // $4036 + #$4037, // $4037 + #$4038, // $4038 + #$4039, // $4039 + #$403A, // $403A + #$403B, // $403B + #$403C, // $403C + #$403D, // $403D + #$403E, // $403E + #$403F, // $403F + #$4040, // $4040 + #$4041, // $4041 + #$4042, // $4042 + #$4043, // $4043 + #$4044, // $4044 + #$4045, // $4045 + #$4046, // $4046 + #$4047, // $4047 + #$4048, // $4048 + #$4049, // $4049 + #$404A, // $404A + #$404B, // $404B + #$404C, // $404C + #$404D, // $404D + #$404E, // $404E + #$404F, // $404F + #$4050, // $4050 + #$4051, // $4051 + #$4052, // $4052 + #$4053, // $4053 + #$4054, // $4054 + #$4055, // $4055 + #$4056, // $4056 + #$4057, // $4057 + #$4058, // $4058 + #$4059, // $4059 + #$405A, // $405A + #$405B, // $405B + #$405C, // $405C + #$405D, // $405D + #$405E, // $405E + #$405F, // $405F + #$4060, // $4060 + #$4061, // $4061 + #$4062, // $4062 + #$4063, // $4063 + #$4064, // $4064 + #$4065, // $4065 + #$4066, // $4066 + #$4067, // $4067 + #$4068, // $4068 + #$4069, // $4069 + #$406A, // $406A + #$406B, // $406B + #$406C, // $406C + #$406D, // $406D + #$406E, // $406E + #$406F, // $406F + #$4070, // $4070 + #$4071, // $4071 + #$4072, // $4072 + #$4073, // $4073 + #$4074, // $4074 + #$4075, // $4075 + #$4076, // $4076 + #$4077, // $4077 + #$4078, // $4078 + #$4079, // $4079 + #$407A, // $407A + #$407B, // $407B + #$407C, // $407C + #$407D, // $407D + #$407E, // $407E + #$407F, // $407F + #$4080, // $4080 + #$4081, // $4081 + #$4082, // $4082 + #$4083, // $4083 + #$4084, // $4084 + #$4085, // $4085 + #$4086, // $4086 + #$4087, // $4087 + #$4088, // $4088 + #$4089, // $4089 + #$408A, // $408A + #$408B, // $408B + #$408C, // $408C + #$408D, // $408D + #$408E, // $408E + #$408F, // $408F + #$4090, // $4090 + #$4091, // $4091 + #$4092, // $4092 + #$4093, // $4093 + #$4094, // $4094 + #$4095, // $4095 + #$4096, // $4096 + #$4097, // $4097 + #$4098, // $4098 + #$4099, // $4099 + #$409A, // $409A + #$409B, // $409B + #$409C, // $409C + #$409D, // $409D + #$409E, // $409E + #$409F, // $409F + #$40A0, // $40A0 + #$40A1, // $40A1 + #$40A2, // $40A2 + #$40A3, // $40A3 + #$40A4, // $40A4 + #$40A5, // $40A5 + #$40A6, // $40A6 + #$40A7, // $40A7 + #$40A8, // $40A8 + #$40A9, // $40A9 + #$40AA, // $40AA + #$40AB, // $40AB + #$40AC, // $40AC + #$40AD, // $40AD + #$40AE, // $40AE + #$40AF, // $40AF + #$40B0, // $40B0 + #$40B1, // $40B1 + #$40B2, // $40B2 + #$40B3, // $40B3 + #$40B4, // $40B4 + #$40B5, // $40B5 + #$40B6, // $40B6 + #$40B7, // $40B7 + #$40B8, // $40B8 + #$40B9, // $40B9 + #$40BA, // $40BA + #$40BB, // $40BB + #$40BC, // $40BC + #$40BD, // $40BD + #$40BE, // $40BE + #$40BF, // $40BF + #$40C0, // $40C0 + #$40C1, // $40C1 + #$40C2, // $40C2 + #$40C3, // $40C3 + #$40C4, // $40C4 + #$40C5, // $40C5 + #$40C6, // $40C6 + #$40C7, // $40C7 + #$40C8, // $40C8 + #$40C9, // $40C9 + #$40CA, // $40CA + #$40CB, // $40CB + #$40CC, // $40CC + #$40CD, // $40CD + #$40CE, // $40CE + #$40CF, // $40CF + #$40D0, // $40D0 + #$40D1, // $40D1 + #$40D2, // $40D2 + #$40D3, // $40D3 + #$40D4, // $40D4 + #$40D5, // $40D5 + #$40D6, // $40D6 + #$40D7, // $40D7 + #$40D8, // $40D8 + #$40D9, // $40D9 + #$40DA, // $40DA + #$40DB, // $40DB + #$40DC, // $40DC + #$40DD, // $40DD + #$40DE, // $40DE + #$40DF, // $40DF + #$40E0, // $40E0 + #$40E1, // $40E1 + #$40E2, // $40E2 + #$40E3, // $40E3 + #$40E4, // $40E4 + #$40E5, // $40E5 + #$40E6, // $40E6 + #$40E7, // $40E7 + #$40E8, // $40E8 + #$40E9, // $40E9 + #$40EA, // $40EA + #$40EB, // $40EB + #$40EC, // $40EC + #$40ED, // $40ED + #$40EE, // $40EE + #$40EF, // $40EF + #$40F0, // $40F0 + #$40F1, // $40F1 + #$40F2, // $40F2 + #$40F3, // $40F3 + #$40F4, // $40F4 + #$40F5, // $40F5 + #$40F6, // $40F6 + #$40F7, // $40F7 + #$40F8, // $40F8 + #$40F9, // $40F9 + #$40FA, // $40FA + #$40FB, // $40FB + #$40FC, // $40FC + #$40FD, // $40FD + #$40FE, // $40FE + #$40FF, // $40FF + #$4100, // $4100 + #$4101, // $4101 + #$4102, // $4102 + #$4103, // $4103 + #$4104, // $4104 + #$4105, // $4105 + #$4106, // $4106 + #$4107, // $4107 + #$4108, // $4108 + #$4109, // $4109 + #$410A, // $410A + #$410B, // $410B + #$410C, // $410C + #$410D, // $410D + #$410E, // $410E + #$410F, // $410F + #$4110, // $4110 + #$4111, // $4111 + #$4112, // $4112 + #$4113, // $4113 + #$4114, // $4114 + #$4115, // $4115 + #$4116, // $4116 + #$4117, // $4117 + #$4118, // $4118 + #$4119, // $4119 + #$411A, // $411A + #$411B, // $411B + #$411C, // $411C + #$411D, // $411D + #$411E, // $411E + #$411F, // $411F + #$4120, // $4120 + #$4121, // $4121 + #$4122, // $4122 + #$4123, // $4123 + #$4124, // $4124 + #$4125, // $4125 + #$4126, // $4126 + #$4127, // $4127 + #$4128, // $4128 + #$4129, // $4129 + #$412A, // $412A + #$412B, // $412B + #$412C, // $412C + #$412D, // $412D + #$412E, // $412E + #$412F, // $412F + #$4130, // $4130 + #$4131, // $4131 + #$4132, // $4132 + #$4133, // $4133 + #$4134, // $4134 + #$4135, // $4135 + #$4136, // $4136 + #$4137, // $4137 + #$4138, // $4138 + #$4139, // $4139 + #$413A, // $413A + #$413B, // $413B + #$413C, // $413C + #$413D, // $413D + #$413E, // $413E + #$413F, // $413F + #$4140, // $4140 + #$4141, // $4141 + #$4142, // $4142 + #$4143, // $4143 + #$4144, // $4144 + #$4145, // $4145 + #$4146, // $4146 + #$4147, // $4147 + #$4148, // $4148 + #$4149, // $4149 + #$414A, // $414A + #$414B, // $414B + #$414C, // $414C + #$414D, // $414D + #$414E, // $414E + #$414F, // $414F + #$4150, // $4150 + #$4151, // $4151 + #$4152, // $4152 + #$4153, // $4153 + #$4154, // $4154 + #$4155, // $4155 + #$4156, // $4156 + #$4157, // $4157 + #$4158, // $4158 + #$4159, // $4159 + #$415A, // $415A + #$415B, // $415B + #$415C, // $415C + #$415D, // $415D + #$415E, // $415E + #$415F, // $415F + #$4160, // $4160 + #$4161, // $4161 + #$4162, // $4162 + #$4163, // $4163 + #$4164, // $4164 + #$4165, // $4165 + #$4166, // $4166 + #$4167, // $4167 + #$4168, // $4168 + #$4169, // $4169 + #$416A, // $416A + #$416B, // $416B + #$416C, // $416C + #$416D, // $416D + #$416E, // $416E + #$416F, // $416F + #$4170, // $4170 + #$4171, // $4171 + #$4172, // $4172 + #$4173, // $4173 + #$4174, // $4174 + #$4175, // $4175 + #$4176, // $4176 + #$4177, // $4177 + #$4178, // $4178 + #$4179, // $4179 + #$417A, // $417A + #$417B, // $417B + #$417C, // $417C + #$417D, // $417D + #$417E, // $417E + #$417F, // $417F + #$4180, // $4180 + #$4181, // $4181 + #$4182, // $4182 + #$4183, // $4183 + #$4184, // $4184 + #$4185, // $4185 + #$4186, // $4186 + #$4187, // $4187 + #$4188, // $4188 + #$4189, // $4189 + #$418A, // $418A + #$418B, // $418B + #$418C, // $418C + #$418D, // $418D + #$418E, // $418E + #$418F, // $418F + #$4190, // $4190 + #$4191, // $4191 + #$4192, // $4192 + #$4193, // $4193 + #$4194, // $4194 + #$4195, // $4195 + #$4196, // $4196 + #$4197, // $4197 + #$4198, // $4198 + #$4199, // $4199 + #$419A, // $419A + #$419B, // $419B + #$419C, // $419C + #$419D, // $419D + #$419E, // $419E + #$419F, // $419F + #$41A0, // $41A0 + #$41A1, // $41A1 + #$41A2, // $41A2 + #$41A3, // $41A3 + #$41A4, // $41A4 + #$41A5, // $41A5 + #$41A6, // $41A6 + #$41A7, // $41A7 + #$41A8, // $41A8 + #$41A9, // $41A9 + #$41AA, // $41AA + #$41AB, // $41AB + #$41AC, // $41AC + #$41AD, // $41AD + #$41AE, // $41AE + #$41AF, // $41AF + #$41B0, // $41B0 + #$41B1, // $41B1 + #$41B2, // $41B2 + #$41B3, // $41B3 + #$41B4, // $41B4 + #$41B5, // $41B5 + #$41B6, // $41B6 + #$41B7, // $41B7 + #$41B8, // $41B8 + #$41B9, // $41B9 + #$41BA, // $41BA + #$41BB, // $41BB + #$41BC, // $41BC + #$41BD, // $41BD + #$41BE, // $41BE + #$41BF, // $41BF + #$41C0, // $41C0 + #$41C1, // $41C1 + #$41C2, // $41C2 + #$41C3, // $41C3 + #$41C4, // $41C4 + #$41C5, // $41C5 + #$41C6, // $41C6 + #$41C7, // $41C7 + #$41C8, // $41C8 + #$41C9, // $41C9 + #$41CA, // $41CA + #$41CB, // $41CB + #$41CC, // $41CC + #$41CD, // $41CD + #$41CE, // $41CE + #$41CF, // $41CF + #$41D0, // $41D0 + #$41D1, // $41D1 + #$41D2, // $41D2 + #$41D3, // $41D3 + #$41D4, // $41D4 + #$41D5, // $41D5 + #$41D6, // $41D6 + #$41D7, // $41D7 + #$41D8, // $41D8 + #$41D9, // $41D9 + #$41DA, // $41DA + #$41DB, // $41DB + #$41DC, // $41DC + #$41DD, // $41DD + #$41DE, // $41DE + #$41DF, // $41DF + #$41E0, // $41E0 + #$41E1, // $41E1 + #$41E2, // $41E2 + #$41E3, // $41E3 + #$41E4, // $41E4 + #$41E5, // $41E5 + #$41E6, // $41E6 + #$41E7, // $41E7 + #$41E8, // $41E8 + #$41E9, // $41E9 + #$41EA, // $41EA + #$41EB, // $41EB + #$41EC, // $41EC + #$41ED, // $41ED + #$41EE, // $41EE + #$41EF, // $41EF + #$41F0, // $41F0 + #$41F1, // $41F1 + #$41F2, // $41F2 + #$41F3, // $41F3 + #$41F4, // $41F4 + #$41F5, // $41F5 + #$41F6, // $41F6 + #$41F7, // $41F7 + #$41F8, // $41F8 + #$41F9, // $41F9 + #$41FA, // $41FA + #$41FB, // $41FB + #$41FC, // $41FC + #$41FD, // $41FD + #$41FE, // $41FE + #$41FF, // $41FF + #$4200, // $4200 + #$4201, // $4201 + #$4202, // $4202 + #$4203, // $4203 + #$4204, // $4204 + #$4205, // $4205 + #$4206, // $4206 + #$4207, // $4207 + #$4208, // $4208 + #$4209, // $4209 + #$420A, // $420A + #$420B, // $420B + #$420C, // $420C + #$420D, // $420D + #$420E, // $420E + #$420F, // $420F + #$4210, // $4210 + #$4211, // $4211 + #$4212, // $4212 + #$4213, // $4213 + #$4214, // $4214 + #$4215, // $4215 + #$4216, // $4216 + #$4217, // $4217 + #$4218, // $4218 + #$4219, // $4219 + #$421A, // $421A + #$421B, // $421B + #$421C, // $421C + #$421D, // $421D + #$421E, // $421E + #$421F, // $421F + #$4220, // $4220 + #$4221, // $4221 + #$4222, // $4222 + #$4223, // $4223 + #$4224, // $4224 + #$4225, // $4225 + #$4226, // $4226 + #$4227, // $4227 + #$4228, // $4228 + #$4229, // $4229 + #$422A, // $422A + #$422B, // $422B + #$422C, // $422C + #$422D, // $422D + #$422E, // $422E + #$422F, // $422F + #$4230, // $4230 + #$4231, // $4231 + #$4232, // $4232 + #$4233, // $4233 + #$4234, // $4234 + #$4235, // $4235 + #$4236, // $4236 + #$4237, // $4237 + #$4238, // $4238 + #$4239, // $4239 + #$423A, // $423A + #$423B, // $423B + #$423C, // $423C + #$423D, // $423D + #$423E, // $423E + #$423F, // $423F + #$4240, // $4240 + #$4241, // $4241 + #$4242, // $4242 + #$4243, // $4243 + #$4244, // $4244 + #$4245, // $4245 + #$4246, // $4246 + #$4247, // $4247 + #$4248, // $4248 + #$4249, // $4249 + #$424A, // $424A + #$424B, // $424B + #$424C, // $424C + #$424D, // $424D + #$424E, // $424E + #$424F, // $424F + #$4250, // $4250 + #$4251, // $4251 + #$4252, // $4252 + #$4253, // $4253 + #$4254, // $4254 + #$4255, // $4255 + #$4256, // $4256 + #$4257, // $4257 + #$4258, // $4258 + #$4259, // $4259 + #$425A, // $425A + #$425B, // $425B + #$425C, // $425C + #$425D, // $425D + #$425E, // $425E + #$425F, // $425F + #$4260, // $4260 + #$4261, // $4261 + #$4262, // $4262 + #$4263, // $4263 + #$4264, // $4264 + #$4265, // $4265 + #$4266, // $4266 + #$4267, // $4267 + #$4268, // $4268 + #$4269, // $4269 + #$426A, // $426A + #$426B, // $426B + #$426C, // $426C + #$426D, // $426D + #$426E, // $426E + #$426F, // $426F + #$4270, // $4270 + #$4271, // $4271 + #$4272, // $4272 + #$4273, // $4273 + #$4274, // $4274 + #$4275, // $4275 + #$4276, // $4276 + #$4277, // $4277 + #$4278, // $4278 + #$4279, // $4279 + #$427A, // $427A + #$427B, // $427B + #$427C, // $427C + #$427D, // $427D + #$427E, // $427E + #$427F, // $427F + #$4280, // $4280 + #$4281, // $4281 + #$4282, // $4282 + #$4283, // $4283 + #$4284, // $4284 + #$4285, // $4285 + #$4286, // $4286 + #$4287, // $4287 + #$4288, // $4288 + #$4289, // $4289 + #$428A, // $428A + #$428B, // $428B + #$428C, // $428C + #$428D, // $428D + #$428E, // $428E + #$428F, // $428F + #$4290, // $4290 + #$4291, // $4291 + #$4292, // $4292 + #$4293, // $4293 + #$4294, // $4294 + #$4295, // $4295 + #$4296, // $4296 + #$4297, // $4297 + #$4298, // $4298 + #$4299, // $4299 + #$429A, // $429A + #$429B, // $429B + #$429C, // $429C + #$429D, // $429D + #$429E, // $429E + #$429F, // $429F + #$42A0, // $42A0 + #$42A1, // $42A1 + #$42A2, // $42A2 + #$42A3, // $42A3 + #$42A4, // $42A4 + #$42A5, // $42A5 + #$42A6, // $42A6 + #$42A7, // $42A7 + #$42A8, // $42A8 + #$42A9, // $42A9 + #$42AA, // $42AA + #$42AB, // $42AB + #$42AC, // $42AC + #$42AD, // $42AD + #$42AE, // $42AE + #$42AF, // $42AF + #$42B0, // $42B0 + #$42B1, // $42B1 + #$42B2, // $42B2 + #$42B3, // $42B3 + #$42B4, // $42B4 + #$42B5, // $42B5 + #$42B6, // $42B6 + #$42B7, // $42B7 + #$42B8, // $42B8 + #$42B9, // $42B9 + #$42BA, // $42BA + #$42BB, // $42BB + #$42BC, // $42BC + #$42BD, // $42BD + #$42BE, // $42BE + #$42BF, // $42BF + #$42C0, // $42C0 + #$42C1, // $42C1 + #$42C2, // $42C2 + #$42C3, // $42C3 + #$42C4, // $42C4 + #$42C5, // $42C5 + #$42C6, // $42C6 + #$42C7, // $42C7 + #$42C8, // $42C8 + #$42C9, // $42C9 + #$42CA, // $42CA + #$42CB, // $42CB + #$42CC, // $42CC + #$42CD, // $42CD + #$42CE, // $42CE + #$42CF, // $42CF + #$42D0, // $42D0 + #$42D1, // $42D1 + #$42D2, // $42D2 + #$42D3, // $42D3 + #$42D4, // $42D4 + #$42D5, // $42D5 + #$42D6, // $42D6 + #$42D7, // $42D7 + #$42D8, // $42D8 + #$42D9, // $42D9 + #$42DA, // $42DA + #$42DB, // $42DB + #$42DC, // $42DC + #$42DD, // $42DD + #$42DE, // $42DE + #$42DF, // $42DF + #$42E0, // $42E0 + #$42E1, // $42E1 + #$42E2, // $42E2 + #$42E3, // $42E3 + #$42E4, // $42E4 + #$42E5, // $42E5 + #$42E6, // $42E6 + #$42E7, // $42E7 + #$42E8, // $42E8 + #$42E9, // $42E9 + #$42EA, // $42EA + #$42EB, // $42EB + #$42EC, // $42EC + #$42ED, // $42ED + #$42EE, // $42EE + #$42EF, // $42EF + #$42F0, // $42F0 + #$42F1, // $42F1 + #$42F2, // $42F2 + #$42F3, // $42F3 + #$42F4, // $42F4 + #$42F5, // $42F5 + #$42F6, // $42F6 + #$42F7, // $42F7 + #$42F8, // $42F8 + #$42F9, // $42F9 + #$42FA, // $42FA + #$42FB, // $42FB + #$42FC, // $42FC + #$42FD, // $42FD + #$42FE, // $42FE + #$42FF, // $42FF + #$4300, // $4300 + #$4301, // $4301 + #$4302, // $4302 + #$4303, // $4303 + #$4304, // $4304 + #$4305, // $4305 + #$4306, // $4306 + #$4307, // $4307 + #$4308, // $4308 + #$4309, // $4309 + #$430A, // $430A + #$430B, // $430B + #$430C, // $430C + #$430D, // $430D + #$430E, // $430E + #$430F, // $430F + #$4310, // $4310 + #$4311, // $4311 + #$4312, // $4312 + #$4313, // $4313 + #$4314, // $4314 + #$4315, // $4315 + #$4316, // $4316 + #$4317, // $4317 + #$4318, // $4318 + #$4319, // $4319 + #$431A, // $431A + #$431B, // $431B + #$431C, // $431C + #$431D, // $431D + #$431E, // $431E + #$431F, // $431F + #$4320, // $4320 + #$4321, // $4321 + #$4322, // $4322 + #$4323, // $4323 + #$4324, // $4324 + #$4325, // $4325 + #$4326, // $4326 + #$4327, // $4327 + #$4328, // $4328 + #$4329, // $4329 + #$432A, // $432A + #$432B, // $432B + #$432C, // $432C + #$432D, // $432D + #$432E, // $432E + #$432F, // $432F + #$4330, // $4330 + #$4331, // $4331 + #$4332, // $4332 + #$4333, // $4333 + #$4334, // $4334 + #$4335, // $4335 + #$4336, // $4336 + #$4337, // $4337 + #$4338, // $4338 + #$4339, // $4339 + #$433A, // $433A + #$433B, // $433B + #$433C, // $433C + #$433D, // $433D + #$433E, // $433E + #$433F, // $433F + #$4340, // $4340 + #$4341, // $4341 + #$4342, // $4342 + #$4343, // $4343 + #$4344, // $4344 + #$4345, // $4345 + #$4346, // $4346 + #$4347, // $4347 + #$4348, // $4348 + #$4349, // $4349 + #$434A, // $434A + #$434B, // $434B + #$434C, // $434C + #$434D, // $434D + #$434E, // $434E + #$434F, // $434F + #$4350, // $4350 + #$4351, // $4351 + #$4352, // $4352 + #$4353, // $4353 + #$4354, // $4354 + #$4355, // $4355 + #$4356, // $4356 + #$4357, // $4357 + #$4358, // $4358 + #$4359, // $4359 + #$435A, // $435A + #$435B, // $435B + #$435C, // $435C + #$435D, // $435D + #$435E, // $435E + #$435F, // $435F + #$4360, // $4360 + #$4361, // $4361 + #$4362, // $4362 + #$4363, // $4363 + #$4364, // $4364 + #$4365, // $4365 + #$4366, // $4366 + #$4367, // $4367 + #$4368, // $4368 + #$4369, // $4369 + #$436A, // $436A + #$436B, // $436B + #$436C, // $436C + #$436D, // $436D + #$436E, // $436E + #$436F, // $436F + #$4370, // $4370 + #$4371, // $4371 + #$4372, // $4372 + #$4373, // $4373 + #$4374, // $4374 + #$4375, // $4375 + #$4376, // $4376 + #$4377, // $4377 + #$4378, // $4378 + #$4379, // $4379 + #$437A, // $437A + #$437B, // $437B + #$437C, // $437C + #$437D, // $437D + #$437E, // $437E + #$437F, // $437F + #$4380, // $4380 + #$4381, // $4381 + #$4382, // $4382 + #$4383, // $4383 + #$4384, // $4384 + #$4385, // $4385 + #$4386, // $4386 + #$4387, // $4387 + #$4388, // $4388 + #$4389, // $4389 + #$438A, // $438A + #$438B, // $438B + #$438C, // $438C + #$438D, // $438D + #$438E, // $438E + #$438F, // $438F + #$4390, // $4390 + #$4391, // $4391 + #$4392, // $4392 + #$4393, // $4393 + #$4394, // $4394 + #$4395, // $4395 + #$4396, // $4396 + #$4397, // $4397 + #$4398, // $4398 + #$4399, // $4399 + #$439A, // $439A + #$439B, // $439B + #$439C, // $439C + #$439D, // $439D + #$439E, // $439E + #$439F, // $439F + #$43A0, // $43A0 + #$43A1, // $43A1 + #$43A2, // $43A2 + #$43A3, // $43A3 + #$43A4, // $43A4 + #$43A5, // $43A5 + #$43A6, // $43A6 + #$43A7, // $43A7 + #$43A8, // $43A8 + #$43A9, // $43A9 + #$43AA, // $43AA + #$43AB, // $43AB + #$43AC, // $43AC + #$43AD, // $43AD + #$43AE, // $43AE + #$43AF, // $43AF + #$43B0, // $43B0 + #$43B1, // $43B1 + #$43B2, // $43B2 + #$43B3, // $43B3 + #$43B4, // $43B4 + #$43B5, // $43B5 + #$43B6, // $43B6 + #$43B7, // $43B7 + #$43B8, // $43B8 + #$43B9, // $43B9 + #$43BA, // $43BA + #$43BB, // $43BB + #$43BC, // $43BC + #$43BD, // $43BD + #$43BE, // $43BE + #$43BF, // $43BF + #$43C0, // $43C0 + #$43C1, // $43C1 + #$43C2, // $43C2 + #$43C3, // $43C3 + #$43C4, // $43C4 + #$43C5, // $43C5 + #$43C6, // $43C6 + #$43C7, // $43C7 + #$43C8, // $43C8 + #$43C9, // $43C9 + #$43CA, // $43CA + #$43CB, // $43CB + #$43CC, // $43CC + #$43CD, // $43CD + #$43CE, // $43CE + #$43CF, // $43CF + #$43D0, // $43D0 + #$43D1, // $43D1 + #$43D2, // $43D2 + #$43D3, // $43D3 + #$43D4, // $43D4 + #$43D5, // $43D5 + #$43D6, // $43D6 + #$43D7, // $43D7 + #$43D8, // $43D8 + #$43D9, // $43D9 + #$43DA, // $43DA + #$43DB, // $43DB + #$43DC, // $43DC + #$43DD, // $43DD + #$43DE, // $43DE + #$43DF, // $43DF + #$43E0, // $43E0 + #$43E1, // $43E1 + #$43E2, // $43E2 + #$43E3, // $43E3 + #$43E4, // $43E4 + #$43E5, // $43E5 + #$43E6, // $43E6 + #$43E7, // $43E7 + #$43E8, // $43E8 + #$43E9, // $43E9 + #$43EA, // $43EA + #$43EB, // $43EB + #$43EC, // $43EC + #$43ED, // $43ED + #$43EE, // $43EE + #$43EF, // $43EF + #$43F0, // $43F0 + #$43F1, // $43F1 + #$43F2, // $43F2 + #$43F3, // $43F3 + #$43F4, // $43F4 + #$43F5, // $43F5 + #$43F6, // $43F6 + #$43F7, // $43F7 + #$43F8, // $43F8 + #$43F9, // $43F9 + #$43FA, // $43FA + #$43FB, // $43FB + #$43FC, // $43FC + #$43FD, // $43FD + #$43FE, // $43FE + #$43FF, // $43FF + #$4400, // $4400 + #$4401, // $4401 + #$4402, // $4402 + #$4403, // $4403 + #$4404, // $4404 + #$4405, // $4405 + #$4406, // $4406 + #$4407, // $4407 + #$4408, // $4408 + #$4409, // $4409 + #$440A, // $440A + #$440B, // $440B + #$440C, // $440C + #$440D, // $440D + #$440E, // $440E + #$440F, // $440F + #$4410, // $4410 + #$4411, // $4411 + #$4412, // $4412 + #$4413, // $4413 + #$4414, // $4414 + #$4415, // $4415 + #$4416, // $4416 + #$4417, // $4417 + #$4418, // $4418 + #$4419, // $4419 + #$441A, // $441A + #$441B, // $441B + #$441C, // $441C + #$441D, // $441D + #$441E, // $441E + #$441F, // $441F + #$4420, // $4420 + #$4421, // $4421 + #$4422, // $4422 + #$4423, // $4423 + #$4424, // $4424 + #$4425, // $4425 + #$4426, // $4426 + #$4427, // $4427 + #$4428, // $4428 + #$4429, // $4429 + #$442A, // $442A + #$442B, // $442B + #$442C, // $442C + #$442D, // $442D + #$442E, // $442E + #$442F, // $442F + #$4430, // $4430 + #$4431, // $4431 + #$4432, // $4432 + #$4433, // $4433 + #$4434, // $4434 + #$4435, // $4435 + #$4436, // $4436 + #$4437, // $4437 + #$4438, // $4438 + #$4439, // $4439 + #$443A, // $443A + #$443B, // $443B + #$443C, // $443C + #$443D, // $443D + #$443E, // $443E + #$443F, // $443F + #$4440, // $4440 + #$4441, // $4441 + #$4442, // $4442 + #$4443, // $4443 + #$4444, // $4444 + #$4445, // $4445 + #$4446, // $4446 + #$4447, // $4447 + #$4448, // $4448 + #$4449, // $4449 + #$444A, // $444A + #$444B, // $444B + #$444C, // $444C + #$444D, // $444D + #$444E, // $444E + #$444F, // $444F + #$4450, // $4450 + #$4451, // $4451 + #$4452, // $4452 + #$4453, // $4453 + #$4454, // $4454 + #$4455, // $4455 + #$4456, // $4456 + #$4457, // $4457 + #$4458, // $4458 + #$4459, // $4459 + #$445A, // $445A + #$445B, // $445B + #$445C, // $445C + #$445D, // $445D + #$445E, // $445E + #$445F, // $445F + #$4460, // $4460 + #$4461, // $4461 + #$4462, // $4462 + #$4463, // $4463 + #$4464, // $4464 + #$4465, // $4465 + #$4466, // $4466 + #$4467, // $4467 + #$4468, // $4468 + #$4469, // $4469 + #$446A, // $446A + #$446B, // $446B + #$446C, // $446C + #$446D, // $446D + #$446E, // $446E + #$446F, // $446F + #$4470, // $4470 + #$4471, // $4471 + #$4472, // $4472 + #$4473, // $4473 + #$4474, // $4474 + #$4475, // $4475 + #$4476, // $4476 + #$4477, // $4477 + #$4478, // $4478 + #$4479, // $4479 + #$447A, // $447A + #$447B, // $447B + #$447C, // $447C + #$447D, // $447D + #$447E, // $447E + #$447F, // $447F + #$4480, // $4480 + #$4481, // $4481 + #$4482, // $4482 + #$4483, // $4483 + #$4484, // $4484 + #$4485, // $4485 + #$4486, // $4486 + #$4487, // $4487 + #$4488, // $4488 + #$4489, // $4489 + #$448A, // $448A + #$448B, // $448B + #$448C, // $448C + #$448D, // $448D + #$448E, // $448E + #$448F, // $448F + #$4490, // $4490 + #$4491, // $4491 + #$4492, // $4492 + #$4493, // $4493 + #$4494, // $4494 + #$4495, // $4495 + #$4496, // $4496 + #$4497, // $4497 + #$4498, // $4498 + #$4499, // $4499 + #$449A, // $449A + #$449B, // $449B + #$449C, // $449C + #$449D, // $449D + #$449E, // $449E + #$449F, // $449F + #$44A0, // $44A0 + #$44A1, // $44A1 + #$44A2, // $44A2 + #$44A3, // $44A3 + #$44A4, // $44A4 + #$44A5, // $44A5 + #$44A6, // $44A6 + #$44A7, // $44A7 + #$44A8, // $44A8 + #$44A9, // $44A9 + #$44AA, // $44AA + #$44AB, // $44AB + #$44AC, // $44AC + #$44AD, // $44AD + #$44AE, // $44AE + #$44AF, // $44AF + #$44B0, // $44B0 + #$44B1, // $44B1 + #$44B2, // $44B2 + #$44B3, // $44B3 + #$44B4, // $44B4 + #$44B5, // $44B5 + #$44B6, // $44B6 + #$44B7, // $44B7 + #$44B8, // $44B8 + #$44B9, // $44B9 + #$44BA, // $44BA + #$44BB, // $44BB + #$44BC, // $44BC + #$44BD, // $44BD + #$44BE, // $44BE + #$44BF, // $44BF + #$44C0, // $44C0 + #$44C1, // $44C1 + #$44C2, // $44C2 + #$44C3, // $44C3 + #$44C4, // $44C4 + #$44C5, // $44C5 + #$44C6, // $44C6 + #$44C7, // $44C7 + #$44C8, // $44C8 + #$44C9, // $44C9 + #$44CA, // $44CA + #$44CB, // $44CB + #$44CC, // $44CC + #$44CD, // $44CD + #$44CE, // $44CE + #$44CF, // $44CF + #$44D0, // $44D0 + #$44D1, // $44D1 + #$44D2, // $44D2 + #$44D3, // $44D3 + #$44D4, // $44D4 + #$44D5, // $44D5 + #$44D6, // $44D6 + #$44D7, // $44D7 + #$44D8, // $44D8 + #$44D9, // $44D9 + #$44DA, // $44DA + #$44DB, // $44DB + #$44DC, // $44DC + #$44DD, // $44DD + #$44DE, // $44DE + #$44DF, // $44DF + #$44E0, // $44E0 + #$44E1, // $44E1 + #$44E2, // $44E2 + #$44E3, // $44E3 + #$44E4, // $44E4 + #$44E5, // $44E5 + #$44E6, // $44E6 + #$44E7, // $44E7 + #$44E8, // $44E8 + #$44E9, // $44E9 + #$44EA, // $44EA + #$44EB, // $44EB + #$44EC, // $44EC + #$44ED, // $44ED + #$44EE, // $44EE + #$44EF, // $44EF + #$44F0, // $44F0 + #$44F1, // $44F1 + #$44F2, // $44F2 + #$44F3, // $44F3 + #$44F4, // $44F4 + #$44F5, // $44F5 + #$44F6, // $44F6 + #$44F7, // $44F7 + #$44F8, // $44F8 + #$44F9, // $44F9 + #$44FA, // $44FA + #$44FB, // $44FB + #$44FC, // $44FC + #$44FD, // $44FD + #$44FE, // $44FE + #$44FF, // $44FF + #$4500, // $4500 + #$4501, // $4501 + #$4502, // $4502 + #$4503, // $4503 + #$4504, // $4504 + #$4505, // $4505 + #$4506, // $4506 + #$4507, // $4507 + #$4508, // $4508 + #$4509, // $4509 + #$450A, // $450A + #$450B, // $450B + #$450C, // $450C + #$450D, // $450D + #$450E, // $450E + #$450F, // $450F + #$4510, // $4510 + #$4511, // $4511 + #$4512, // $4512 + #$4513, // $4513 + #$4514, // $4514 + #$4515, // $4515 + #$4516, // $4516 + #$4517, // $4517 + #$4518, // $4518 + #$4519, // $4519 + #$451A, // $451A + #$451B, // $451B + #$451C, // $451C + #$451D, // $451D + #$451E, // $451E + #$451F, // $451F + #$4520, // $4520 + #$4521, // $4521 + #$4522, // $4522 + #$4523, // $4523 + #$4524, // $4524 + #$4525, // $4525 + #$4526, // $4526 + #$4527, // $4527 + #$4528, // $4528 + #$4529, // $4529 + #$452A, // $452A + #$452B, // $452B + #$452C, // $452C + #$452D, // $452D + #$452E, // $452E + #$452F, // $452F + #$4530, // $4530 + #$4531, // $4531 + #$4532, // $4532 + #$4533, // $4533 + #$4534, // $4534 + #$4535, // $4535 + #$4536, // $4536 + #$4537, // $4537 + #$4538, // $4538 + #$4539, // $4539 + #$453A, // $453A + #$453B, // $453B + #$453C, // $453C + #$453D, // $453D + #$453E, // $453E + #$453F, // $453F + #$4540, // $4540 + #$4541, // $4541 + #$4542, // $4542 + #$4543, // $4543 + #$4544, // $4544 + #$4545, // $4545 + #$4546, // $4546 + #$4547, // $4547 + #$4548, // $4548 + #$4549, // $4549 + #$454A, // $454A + #$454B, // $454B + #$454C, // $454C + #$454D, // $454D + #$454E, // $454E + #$454F, // $454F + #$4550, // $4550 + #$4551, // $4551 + #$4552, // $4552 + #$4553, // $4553 + #$4554, // $4554 + #$4555, // $4555 + #$4556, // $4556 + #$4557, // $4557 + #$4558, // $4558 + #$4559, // $4559 + #$455A, // $455A + #$455B, // $455B + #$455C, // $455C + #$455D, // $455D + #$455E, // $455E + #$455F, // $455F + #$4560, // $4560 + #$4561, // $4561 + #$4562, // $4562 + #$4563, // $4563 + #$4564, // $4564 + #$4565, // $4565 + #$4566, // $4566 + #$4567, // $4567 + #$4568, // $4568 + #$4569, // $4569 + #$456A, // $456A + #$456B, // $456B + #$456C, // $456C + #$456D, // $456D + #$456E, // $456E + #$456F, // $456F + #$4570, // $4570 + #$4571, // $4571 + #$4572, // $4572 + #$4573, // $4573 + #$4574, // $4574 + #$4575, // $4575 + #$4576, // $4576 + #$4577, // $4577 + #$4578, // $4578 + #$4579, // $4579 + #$457A, // $457A + #$457B, // $457B + #$457C, // $457C + #$457D, // $457D + #$457E, // $457E + #$457F, // $457F + #$4580, // $4580 + #$4581, // $4581 + #$4582, // $4582 + #$4583, // $4583 + #$4584, // $4584 + #$4585, // $4585 + #$4586, // $4586 + #$4587, // $4587 + #$4588, // $4588 + #$4589, // $4589 + #$458A, // $458A + #$458B, // $458B + #$458C, // $458C + #$458D, // $458D + #$458E, // $458E + #$458F, // $458F + #$4590, // $4590 + #$4591, // $4591 + #$4592, // $4592 + #$4593, // $4593 + #$4594, // $4594 + #$4595, // $4595 + #$4596, // $4596 + #$4597, // $4597 + #$4598, // $4598 + #$4599, // $4599 + #$459A, // $459A + #$459B, // $459B + #$459C, // $459C + #$459D, // $459D + #$459E, // $459E + #$459F, // $459F + #$45A0, // $45A0 + #$45A1, // $45A1 + #$45A2, // $45A2 + #$45A3, // $45A3 + #$45A4, // $45A4 + #$45A5, // $45A5 + #$45A6, // $45A6 + #$45A7, // $45A7 + #$45A8, // $45A8 + #$45A9, // $45A9 + #$45AA, // $45AA + #$45AB, // $45AB + #$45AC, // $45AC + #$45AD, // $45AD + #$45AE, // $45AE + #$45AF, // $45AF + #$45B0, // $45B0 + #$45B1, // $45B1 + #$45B2, // $45B2 + #$45B3, // $45B3 + #$45B4, // $45B4 + #$45B5, // $45B5 + #$45B6, // $45B6 + #$45B7, // $45B7 + #$45B8, // $45B8 + #$45B9, // $45B9 + #$45BA, // $45BA + #$45BB, // $45BB + #$45BC, // $45BC + #$45BD, // $45BD + #$45BE, // $45BE + #$45BF, // $45BF + #$45C0, // $45C0 + #$45C1, // $45C1 + #$45C2, // $45C2 + #$45C3, // $45C3 + #$45C4, // $45C4 + #$45C5, // $45C5 + #$45C6, // $45C6 + #$45C7, // $45C7 + #$45C8, // $45C8 + #$45C9, // $45C9 + #$45CA, // $45CA + #$45CB, // $45CB + #$45CC, // $45CC + #$45CD, // $45CD + #$45CE, // $45CE + #$45CF, // $45CF + #$45D0, // $45D0 + #$45D1, // $45D1 + #$45D2, // $45D2 + #$45D3, // $45D3 + #$45D4, // $45D4 + #$45D5, // $45D5 + #$45D6, // $45D6 + #$45D7, // $45D7 + #$45D8, // $45D8 + #$45D9, // $45D9 + #$45DA, // $45DA + #$45DB, // $45DB + #$45DC, // $45DC + #$45DD, // $45DD + #$45DE, // $45DE + #$45DF, // $45DF + #$45E0, // $45E0 + #$45E1, // $45E1 + #$45E2, // $45E2 + #$45E3, // $45E3 + #$45E4, // $45E4 + #$45E5, // $45E5 + #$45E6, // $45E6 + #$45E7, // $45E7 + #$45E8, // $45E8 + #$45E9, // $45E9 + #$45EA, // $45EA + #$45EB, // $45EB + #$45EC, // $45EC + #$45ED, // $45ED + #$45EE, // $45EE + #$45EF, // $45EF + #$45F0, // $45F0 + #$45F1, // $45F1 + #$45F2, // $45F2 + #$45F3, // $45F3 + #$45F4, // $45F4 + #$45F5, // $45F5 + #$45F6, // $45F6 + #$45F7, // $45F7 + #$45F8, // $45F8 + #$45F9, // $45F9 + #$45FA, // $45FA + #$45FB, // $45FB + #$45FC, // $45FC + #$45FD, // $45FD + #$45FE, // $45FE + #$45FF, // $45FF + #$4600, // $4600 + #$4601, // $4601 + #$4602, // $4602 + #$4603, // $4603 + #$4604, // $4604 + #$4605, // $4605 + #$4606, // $4606 + #$4607, // $4607 + #$4608, // $4608 + #$4609, // $4609 + #$460A, // $460A + #$460B, // $460B + #$460C, // $460C + #$460D, // $460D + #$460E, // $460E + #$460F, // $460F + #$4610, // $4610 + #$4611, // $4611 + #$4612, // $4612 + #$4613, // $4613 + #$4614, // $4614 + #$4615, // $4615 + #$4616, // $4616 + #$4617, // $4617 + #$4618, // $4618 + #$4619, // $4619 + #$461A, // $461A + #$461B, // $461B + #$461C, // $461C + #$461D, // $461D + #$461E, // $461E + #$461F, // $461F + #$4620, // $4620 + #$4621, // $4621 + #$4622, // $4622 + #$4623, // $4623 + #$4624, // $4624 + #$4625, // $4625 + #$4626, // $4626 + #$4627, // $4627 + #$4628, // $4628 + #$4629, // $4629 + #$462A, // $462A + #$462B, // $462B + #$462C, // $462C + #$462D, // $462D + #$462E, // $462E + #$462F, // $462F + #$4630, // $4630 + #$4631, // $4631 + #$4632, // $4632 + #$4633, // $4633 + #$4634, // $4634 + #$4635, // $4635 + #$4636, // $4636 + #$4637, // $4637 + #$4638, // $4638 + #$4639, // $4639 + #$463A, // $463A + #$463B, // $463B + #$463C, // $463C + #$463D, // $463D + #$463E, // $463E + #$463F, // $463F + #$4640, // $4640 + #$4641, // $4641 + #$4642, // $4642 + #$4643, // $4643 + #$4644, // $4644 + #$4645, // $4645 + #$4646, // $4646 + #$4647, // $4647 + #$4648, // $4648 + #$4649, // $4649 + #$464A, // $464A + #$464B, // $464B + #$464C, // $464C + #$464D, // $464D + #$464E, // $464E + #$464F, // $464F + #$4650, // $4650 + #$4651, // $4651 + #$4652, // $4652 + #$4653, // $4653 + #$4654, // $4654 + #$4655, // $4655 + #$4656, // $4656 + #$4657, // $4657 + #$4658, // $4658 + #$4659, // $4659 + #$465A, // $465A + #$465B, // $465B + #$465C, // $465C + #$465D, // $465D + #$465E, // $465E + #$465F, // $465F + #$4660, // $4660 + #$4661, // $4661 + #$4662, // $4662 + #$4663, // $4663 + #$4664, // $4664 + #$4665, // $4665 + #$4666, // $4666 + #$4667, // $4667 + #$4668, // $4668 + #$4669, // $4669 + #$466A, // $466A + #$466B, // $466B + #$466C, // $466C + #$466D, // $466D + #$466E, // $466E + #$466F, // $466F + #$4670, // $4670 + #$4671, // $4671 + #$4672, // $4672 + #$4673, // $4673 + #$4674, // $4674 + #$4675, // $4675 + #$4676, // $4676 + #$4677, // $4677 + #$4678, // $4678 + #$4679, // $4679 + #$467A, // $467A + #$467B, // $467B + #$467C, // $467C + #$467D, // $467D + #$467E, // $467E + #$467F, // $467F + #$4680, // $4680 + #$4681, // $4681 + #$4682, // $4682 + #$4683, // $4683 + #$4684, // $4684 + #$4685, // $4685 + #$4686, // $4686 + #$4687, // $4687 + #$4688, // $4688 + #$4689, // $4689 + #$468A, // $468A + #$468B, // $468B + #$468C, // $468C + #$468D, // $468D + #$468E, // $468E + #$468F, // $468F + #$4690, // $4690 + #$4691, // $4691 + #$4692, // $4692 + #$4693, // $4693 + #$4694, // $4694 + #$4695, // $4695 + #$4696, // $4696 + #$4697, // $4697 + #$4698, // $4698 + #$4699, // $4699 + #$469A, // $469A + #$469B, // $469B + #$469C, // $469C + #$469D, // $469D + #$469E, // $469E + #$469F, // $469F + #$46A0, // $46A0 + #$46A1, // $46A1 + #$46A2, // $46A2 + #$46A3, // $46A3 + #$46A4, // $46A4 + #$46A5, // $46A5 + #$46A6, // $46A6 + #$46A7, // $46A7 + #$46A8, // $46A8 + #$46A9, // $46A9 + #$46AA, // $46AA + #$46AB, // $46AB + #$46AC, // $46AC + #$46AD, // $46AD + #$46AE, // $46AE + #$46AF, // $46AF + #$46B0, // $46B0 + #$46B1, // $46B1 + #$46B2, // $46B2 + #$46B3, // $46B3 + #$46B4, // $46B4 + #$46B5, // $46B5 + #$46B6, // $46B6 + #$46B7, // $46B7 + #$46B8, // $46B8 + #$46B9, // $46B9 + #$46BA, // $46BA + #$46BB, // $46BB + #$46BC, // $46BC + #$46BD, // $46BD + #$46BE, // $46BE + #$46BF, // $46BF + #$46C0, // $46C0 + #$46C1, // $46C1 + #$46C2, // $46C2 + #$46C3, // $46C3 + #$46C4, // $46C4 + #$46C5, // $46C5 + #$46C6, // $46C6 + #$46C7, // $46C7 + #$46C8, // $46C8 + #$46C9, // $46C9 + #$46CA, // $46CA + #$46CB, // $46CB + #$46CC, // $46CC + #$46CD, // $46CD + #$46CE, // $46CE + #$46CF, // $46CF + #$46D0, // $46D0 + #$46D1, // $46D1 + #$46D2, // $46D2 + #$46D3, // $46D3 + #$46D4, // $46D4 + #$46D5, // $46D5 + #$46D6, // $46D6 + #$46D7, // $46D7 + #$46D8, // $46D8 + #$46D9, // $46D9 + #$46DA, // $46DA + #$46DB, // $46DB + #$46DC, // $46DC + #$46DD, // $46DD + #$46DE, // $46DE + #$46DF, // $46DF + #$46E0, // $46E0 + #$46E1, // $46E1 + #$46E2, // $46E2 + #$46E3, // $46E3 + #$46E4, // $46E4 + #$46E5, // $46E5 + #$46E6, // $46E6 + #$46E7, // $46E7 + #$46E8, // $46E8 + #$46E9, // $46E9 + #$46EA, // $46EA + #$46EB, // $46EB + #$46EC, // $46EC + #$46ED, // $46ED + #$46EE, // $46EE + #$46EF, // $46EF + #$46F0, // $46F0 + #$46F1, // $46F1 + #$46F2, // $46F2 + #$46F3, // $46F3 + #$46F4, // $46F4 + #$46F5, // $46F5 + #$46F6, // $46F6 + #$46F7, // $46F7 + #$46F8, // $46F8 + #$46F9, // $46F9 + #$46FA, // $46FA + #$46FB, // $46FB + #$46FC, // $46FC + #$46FD, // $46FD + #$46FE, // $46FE + #$46FF, // $46FF + #$4700, // $4700 + #$4701, // $4701 + #$4702, // $4702 + #$4703, // $4703 + #$4704, // $4704 + #$4705, // $4705 + #$4706, // $4706 + #$4707, // $4707 + #$4708, // $4708 + #$4709, // $4709 + #$470A, // $470A + #$470B, // $470B + #$470C, // $470C + #$470D, // $470D + #$470E, // $470E + #$470F, // $470F + #$4710, // $4710 + #$4711, // $4711 + #$4712, // $4712 + #$4713, // $4713 + #$4714, // $4714 + #$4715, // $4715 + #$4716, // $4716 + #$4717, // $4717 + #$4718, // $4718 + #$4719, // $4719 + #$471A, // $471A + #$471B, // $471B + #$471C, // $471C + #$471D, // $471D + #$471E, // $471E + #$471F, // $471F + #$4720, // $4720 + #$4721, // $4721 + #$4722, // $4722 + #$4723, // $4723 + #$4724, // $4724 + #$4725, // $4725 + #$4726, // $4726 + #$4727, // $4727 + #$4728, // $4728 + #$4729, // $4729 + #$472A, // $472A + #$472B, // $472B + #$472C, // $472C + #$472D, // $472D + #$472E, // $472E + #$472F, // $472F + #$4730, // $4730 + #$4731, // $4731 + #$4732, // $4732 + #$4733, // $4733 + #$4734, // $4734 + #$4735, // $4735 + #$4736, // $4736 + #$4737, // $4737 + #$4738, // $4738 + #$4739, // $4739 + #$473A, // $473A + #$473B, // $473B + #$473C, // $473C + #$473D, // $473D + #$473E, // $473E + #$473F, // $473F + #$4740, // $4740 + #$4741, // $4741 + #$4742, // $4742 + #$4743, // $4743 + #$4744, // $4744 + #$4745, // $4745 + #$4746, // $4746 + #$4747, // $4747 + #$4748, // $4748 + #$4749, // $4749 + #$474A, // $474A + #$474B, // $474B + #$474C, // $474C + #$474D, // $474D + #$474E, // $474E + #$474F, // $474F + #$4750, // $4750 + #$4751, // $4751 + #$4752, // $4752 + #$4753, // $4753 + #$4754, // $4754 + #$4755, // $4755 + #$4756, // $4756 + #$4757, // $4757 + #$4758, // $4758 + #$4759, // $4759 + #$475A, // $475A + #$475B, // $475B + #$475C, // $475C + #$475D, // $475D + #$475E, // $475E + #$475F, // $475F + #$4760, // $4760 + #$4761, // $4761 + #$4762, // $4762 + #$4763, // $4763 + #$4764, // $4764 + #$4765, // $4765 + #$4766, // $4766 + #$4767, // $4767 + #$4768, // $4768 + #$4769, // $4769 + #$476A, // $476A + #$476B, // $476B + #$476C, // $476C + #$476D, // $476D + #$476E, // $476E + #$476F, // $476F + #$4770, // $4770 + #$4771, // $4771 + #$4772, // $4772 + #$4773, // $4773 + #$4774, // $4774 + #$4775, // $4775 + #$4776, // $4776 + #$4777, // $4777 + #$4778, // $4778 + #$4779, // $4779 + #$477A, // $477A + #$477B, // $477B + #$477C, // $477C + #$477D, // $477D + #$477E, // $477E + #$477F, // $477F + #$4780, // $4780 + #$4781, // $4781 + #$4782, // $4782 + #$4783, // $4783 + #$4784, // $4784 + #$4785, // $4785 + #$4786, // $4786 + #$4787, // $4787 + #$4788, // $4788 + #$4789, // $4789 + #$478A, // $478A + #$478B, // $478B + #$478C, // $478C + #$478D, // $478D + #$478E, // $478E + #$478F, // $478F + #$4790, // $4790 + #$4791, // $4791 + #$4792, // $4792 + #$4793, // $4793 + #$4794, // $4794 + #$4795, // $4795 + #$4796, // $4796 + #$4797, // $4797 + #$4798, // $4798 + #$4799, // $4799 + #$479A, // $479A + #$479B, // $479B + #$479C, // $479C + #$479D, // $479D + #$479E, // $479E + #$479F, // $479F + #$47A0, // $47A0 + #$47A1, // $47A1 + #$47A2, // $47A2 + #$47A3, // $47A3 + #$47A4, // $47A4 + #$47A5, // $47A5 + #$47A6, // $47A6 + #$47A7, // $47A7 + #$47A8, // $47A8 + #$47A9, // $47A9 + #$47AA, // $47AA + #$47AB, // $47AB + #$47AC, // $47AC + #$47AD, // $47AD + #$47AE, // $47AE + #$47AF, // $47AF + #$47B0, // $47B0 + #$47B1, // $47B1 + #$47B2, // $47B2 + #$47B3, // $47B3 + #$47B4, // $47B4 + #$47B5, // $47B5 + #$47B6, // $47B6 + #$47B7, // $47B7 + #$47B8, // $47B8 + #$47B9, // $47B9 + #$47BA, // $47BA + #$47BB, // $47BB + #$47BC, // $47BC + #$47BD, // $47BD + #$47BE, // $47BE + #$47BF, // $47BF + #$47C0, // $47C0 + #$47C1, // $47C1 + #$47C2, // $47C2 + #$47C3, // $47C3 + #$47C4, // $47C4 + #$47C5, // $47C5 + #$47C6, // $47C6 + #$47C7, // $47C7 + #$47C8, // $47C8 + #$47C9, // $47C9 + #$47CA, // $47CA + #$47CB, // $47CB + #$47CC, // $47CC + #$47CD, // $47CD + #$47CE, // $47CE + #$47CF, // $47CF + #$47D0, // $47D0 + #$47D1, // $47D1 + #$47D2, // $47D2 + #$47D3, // $47D3 + #$47D4, // $47D4 + #$47D5, // $47D5 + #$47D6, // $47D6 + #$47D7, // $47D7 + #$47D8, // $47D8 + #$47D9, // $47D9 + #$47DA, // $47DA + #$47DB, // $47DB + #$47DC, // $47DC + #$47DD, // $47DD + #$47DE, // $47DE + #$47DF, // $47DF + #$47E0, // $47E0 + #$47E1, // $47E1 + #$47E2, // $47E2 + #$47E3, // $47E3 + #$47E4, // $47E4 + #$47E5, // $47E5 + #$47E6, // $47E6 + #$47E7, // $47E7 + #$47E8, // $47E8 + #$47E9, // $47E9 + #$47EA, // $47EA + #$47EB, // $47EB + #$47EC, // $47EC + #$47ED, // $47ED + #$47EE, // $47EE + #$47EF, // $47EF + #$47F0, // $47F0 + #$47F1, // $47F1 + #$47F2, // $47F2 + #$47F3, // $47F3 + #$47F4, // $47F4 + #$47F5, // $47F5 + #$47F6, // $47F6 + #$47F7, // $47F7 + #$47F8, // $47F8 + #$47F9, // $47F9 + #$47FA, // $47FA + #$47FB, // $47FB + #$47FC, // $47FC + #$47FD, // $47FD + #$47FE, // $47FE + #$47FF, // $47FF + #$4800, // $4800 + #$4801, // $4801 + #$4802, // $4802 + #$4803, // $4803 + #$4804, // $4804 + #$4805, // $4805 + #$4806, // $4806 + #$4807, // $4807 + #$4808, // $4808 + #$4809, // $4809 + #$480A, // $480A + #$480B, // $480B + #$480C, // $480C + #$480D, // $480D + #$480E, // $480E + #$480F, // $480F + #$4810, // $4810 + #$4811, // $4811 + #$4812, // $4812 + #$4813, // $4813 + #$4814, // $4814 + #$4815, // $4815 + #$4816, // $4816 + #$4817, // $4817 + #$4818, // $4818 + #$4819, // $4819 + #$481A, // $481A + #$481B, // $481B + #$481C, // $481C + #$481D, // $481D + #$481E, // $481E + #$481F, // $481F + #$4820, // $4820 + #$4821, // $4821 + #$4822, // $4822 + #$4823, // $4823 + #$4824, // $4824 + #$4825, // $4825 + #$4826, // $4826 + #$4827, // $4827 + #$4828, // $4828 + #$4829, // $4829 + #$482A, // $482A + #$482B, // $482B + #$482C, // $482C + #$482D, // $482D + #$482E, // $482E + #$482F, // $482F + #$4830, // $4830 + #$4831, // $4831 + #$4832, // $4832 + #$4833, // $4833 + #$4834, // $4834 + #$4835, // $4835 + #$4836, // $4836 + #$4837, // $4837 + #$4838, // $4838 + #$4839, // $4839 + #$483A, // $483A + #$483B, // $483B + #$483C, // $483C + #$483D, // $483D + #$483E, // $483E + #$483F, // $483F + #$4840, // $4840 + #$4841, // $4841 + #$4842, // $4842 + #$4843, // $4843 + #$4844, // $4844 + #$4845, // $4845 + #$4846, // $4846 + #$4847, // $4847 + #$4848, // $4848 + #$4849, // $4849 + #$484A, // $484A + #$484B, // $484B + #$484C, // $484C + #$484D, // $484D + #$484E, // $484E + #$484F, // $484F + #$4850, // $4850 + #$4851, // $4851 + #$4852, // $4852 + #$4853, // $4853 + #$4854, // $4854 + #$4855, // $4855 + #$4856, // $4856 + #$4857, // $4857 + #$4858, // $4858 + #$4859, // $4859 + #$485A, // $485A + #$485B, // $485B + #$485C, // $485C + #$485D, // $485D + #$485E, // $485E + #$485F, // $485F + #$4860, // $4860 + #$4861, // $4861 + #$4862, // $4862 + #$4863, // $4863 + #$4864, // $4864 + #$4865, // $4865 + #$4866, // $4866 + #$4867, // $4867 + #$4868, // $4868 + #$4869, // $4869 + #$486A, // $486A + #$486B, // $486B + #$486C, // $486C + #$486D, // $486D + #$486E, // $486E + #$486F, // $486F + #$4870, // $4870 + #$4871, // $4871 + #$4872, // $4872 + #$4873, // $4873 + #$4874, // $4874 + #$4875, // $4875 + #$4876, // $4876 + #$4877, // $4877 + #$4878, // $4878 + #$4879, // $4879 + #$487A, // $487A + #$487B, // $487B + #$487C, // $487C + #$487D, // $487D + #$487E, // $487E + #$487F, // $487F + #$4880, // $4880 + #$4881, // $4881 + #$4882, // $4882 + #$4883, // $4883 + #$4884, // $4884 + #$4885, // $4885 + #$4886, // $4886 + #$4887, // $4887 + #$4888, // $4888 + #$4889, // $4889 + #$488A, // $488A + #$488B, // $488B + #$488C, // $488C + #$488D, // $488D + #$488E, // $488E + #$488F, // $488F + #$4890, // $4890 + #$4891, // $4891 + #$4892, // $4892 + #$4893, // $4893 + #$4894, // $4894 + #$4895, // $4895 + #$4896, // $4896 + #$4897, // $4897 + #$4898, // $4898 + #$4899, // $4899 + #$489A, // $489A + #$489B, // $489B + #$489C, // $489C + #$489D, // $489D + #$489E, // $489E + #$489F, // $489F + #$48A0, // $48A0 + #$48A1, // $48A1 + #$48A2, // $48A2 + #$48A3, // $48A3 + #$48A4, // $48A4 + #$48A5, // $48A5 + #$48A6, // $48A6 + #$48A7, // $48A7 + #$48A8, // $48A8 + #$48A9, // $48A9 + #$48AA, // $48AA + #$48AB, // $48AB + #$48AC, // $48AC + #$48AD, // $48AD + #$48AE, // $48AE + #$48AF, // $48AF + #$48B0, // $48B0 + #$48B1, // $48B1 + #$48B2, // $48B2 + #$48B3, // $48B3 + #$48B4, // $48B4 + #$48B5, // $48B5 + #$48B6, // $48B6 + #$48B7, // $48B7 + #$48B8, // $48B8 + #$48B9, // $48B9 + #$48BA, // $48BA + #$48BB, // $48BB + #$48BC, // $48BC + #$48BD, // $48BD + #$48BE, // $48BE + #$48BF, // $48BF + #$48C0, // $48C0 + #$48C1, // $48C1 + #$48C2, // $48C2 + #$48C3, // $48C3 + #$48C4, // $48C4 + #$48C5, // $48C5 + #$48C6, // $48C6 + #$48C7, // $48C7 + #$48C8, // $48C8 + #$48C9, // $48C9 + #$48CA, // $48CA + #$48CB, // $48CB + #$48CC, // $48CC + #$48CD, // $48CD + #$48CE, // $48CE + #$48CF, // $48CF + #$48D0, // $48D0 + #$48D1, // $48D1 + #$48D2, // $48D2 + #$48D3, // $48D3 + #$48D4, // $48D4 + #$48D5, // $48D5 + #$48D6, // $48D6 + #$48D7, // $48D7 + #$48D8, // $48D8 + #$48D9, // $48D9 + #$48DA, // $48DA + #$48DB, // $48DB + #$48DC, // $48DC + #$48DD, // $48DD + #$48DE, // $48DE + #$48DF, // $48DF + #$48E0, // $48E0 + #$48E1, // $48E1 + #$48E2, // $48E2 + #$48E3, // $48E3 + #$48E4, // $48E4 + #$48E5, // $48E5 + #$48E6, // $48E6 + #$48E7, // $48E7 + #$48E8, // $48E8 + #$48E9, // $48E9 + #$48EA, // $48EA + #$48EB, // $48EB + #$48EC, // $48EC + #$48ED, // $48ED + #$48EE, // $48EE + #$48EF, // $48EF + #$48F0, // $48F0 + #$48F1, // $48F1 + #$48F2, // $48F2 + #$48F3, // $48F3 + #$48F4, // $48F4 + #$48F5, // $48F5 + #$48F6, // $48F6 + #$48F7, // $48F7 + #$48F8, // $48F8 + #$48F9, // $48F9 + #$48FA, // $48FA + #$48FB, // $48FB + #$48FC, // $48FC + #$48FD, // $48FD + #$48FE, // $48FE + #$48FF, // $48FF + #$4900, // $4900 + #$4901, // $4901 + #$4902, // $4902 + #$4903, // $4903 + #$4904, // $4904 + #$4905, // $4905 + #$4906, // $4906 + #$4907, // $4907 + #$4908, // $4908 + #$4909, // $4909 + #$490A, // $490A + #$490B, // $490B + #$490C, // $490C + #$490D, // $490D + #$490E, // $490E + #$490F, // $490F + #$4910, // $4910 + #$4911, // $4911 + #$4912, // $4912 + #$4913, // $4913 + #$4914, // $4914 + #$4915, // $4915 + #$4916, // $4916 + #$4917, // $4917 + #$4918, // $4918 + #$4919, // $4919 + #$491A, // $491A + #$491B, // $491B + #$491C, // $491C + #$491D, // $491D + #$491E, // $491E + #$491F, // $491F + #$4920, // $4920 + #$4921, // $4921 + #$4922, // $4922 + #$4923, // $4923 + #$4924, // $4924 + #$4925, // $4925 + #$4926, // $4926 + #$4927, // $4927 + #$4928, // $4928 + #$4929, // $4929 + #$492A, // $492A + #$492B, // $492B + #$492C, // $492C + #$492D, // $492D + #$492E, // $492E + #$492F, // $492F + #$4930, // $4930 + #$4931, // $4931 + #$4932, // $4932 + #$4933, // $4933 + #$4934, // $4934 + #$4935, // $4935 + #$4936, // $4936 + #$4937, // $4937 + #$4938, // $4938 + #$4939, // $4939 + #$493A, // $493A + #$493B, // $493B + #$493C, // $493C + #$493D, // $493D + #$493E, // $493E + #$493F, // $493F + #$4940, // $4940 + #$4941, // $4941 + #$4942, // $4942 + #$4943, // $4943 + #$4944, // $4944 + #$4945, // $4945 + #$4946, // $4946 + #$4947, // $4947 + #$4948, // $4948 + #$4949, // $4949 + #$494A, // $494A + #$494B, // $494B + #$494C, // $494C + #$494D, // $494D + #$494E, // $494E + #$494F, // $494F + #$4950, // $4950 + #$4951, // $4951 + #$4952, // $4952 + #$4953, // $4953 + #$4954, // $4954 + #$4955, // $4955 + #$4956, // $4956 + #$4957, // $4957 + #$4958, // $4958 + #$4959, // $4959 + #$495A, // $495A + #$495B, // $495B + #$495C, // $495C + #$495D, // $495D + #$495E, // $495E + #$495F, // $495F + #$4960, // $4960 + #$4961, // $4961 + #$4962, // $4962 + #$4963, // $4963 + #$4964, // $4964 + #$4965, // $4965 + #$4966, // $4966 + #$4967, // $4967 + #$4968, // $4968 + #$4969, // $4969 + #$496A, // $496A + #$496B, // $496B + #$496C, // $496C + #$496D, // $496D + #$496E, // $496E + #$496F, // $496F + #$4970, // $4970 + #$4971, // $4971 + #$4972, // $4972 + #$4973, // $4973 + #$4974, // $4974 + #$4975, // $4975 + #$4976, // $4976 + #$4977, // $4977 + #$4978, // $4978 + #$4979, // $4979 + #$497A, // $497A + #$497B, // $497B + #$497C, // $497C + #$497D, // $497D + #$497E, // $497E + #$497F, // $497F + #$4980, // $4980 + #$4981, // $4981 + #$4982, // $4982 + #$4983, // $4983 + #$4984, // $4984 + #$4985, // $4985 + #$4986, // $4986 + #$4987, // $4987 + #$4988, // $4988 + #$4989, // $4989 + #$498A, // $498A + #$498B, // $498B + #$498C, // $498C + #$498D, // $498D + #$498E, // $498E + #$498F, // $498F + #$4990, // $4990 + #$4991, // $4991 + #$4992, // $4992 + #$4993, // $4993 + #$4994, // $4994 + #$4995, // $4995 + #$4996, // $4996 + #$4997, // $4997 + #$4998, // $4998 + #$4999, // $4999 + #$499A, // $499A + #$499B, // $499B + #$499C, // $499C + #$499D, // $499D + #$499E, // $499E + #$499F, // $499F + #$49A0, // $49A0 + #$49A1, // $49A1 + #$49A2, // $49A2 + #$49A3, // $49A3 + #$49A4, // $49A4 + #$49A5, // $49A5 + #$49A6, // $49A6 + #$49A7, // $49A7 + #$49A8, // $49A8 + #$49A9, // $49A9 + #$49AA, // $49AA + #$49AB, // $49AB + #$49AC, // $49AC + #$49AD, // $49AD + #$49AE, // $49AE + #$49AF, // $49AF + #$49B0, // $49B0 + #$49B1, // $49B1 + #$49B2, // $49B2 + #$49B3, // $49B3 + #$49B4, // $49B4 + #$49B5, // $49B5 + #$49B6, // $49B6 + #$49B7, // $49B7 + #$49B8, // $49B8 + #$49B9, // $49B9 + #$49BA, // $49BA + #$49BB, // $49BB + #$49BC, // $49BC + #$49BD, // $49BD + #$49BE, // $49BE + #$49BF, // $49BF + #$49C0, // $49C0 + #$49C1, // $49C1 + #$49C2, // $49C2 + #$49C3, // $49C3 + #$49C4, // $49C4 + #$49C5, // $49C5 + #$49C6, // $49C6 + #$49C7, // $49C7 + #$49C8, // $49C8 + #$49C9, // $49C9 + #$49CA, // $49CA + #$49CB, // $49CB + #$49CC, // $49CC + #$49CD, // $49CD + #$49CE, // $49CE + #$49CF, // $49CF + #$49D0, // $49D0 + #$49D1, // $49D1 + #$49D2, // $49D2 + #$49D3, // $49D3 + #$49D4, // $49D4 + #$49D5, // $49D5 + #$49D6, // $49D6 + #$49D7, // $49D7 + #$49D8, // $49D8 + #$49D9, // $49D9 + #$49DA, // $49DA + #$49DB, // $49DB + #$49DC, // $49DC + #$49DD, // $49DD + #$49DE, // $49DE + #$49DF, // $49DF + #$49E0, // $49E0 + #$49E1, // $49E1 + #$49E2, // $49E2 + #$49E3, // $49E3 + #$49E4, // $49E4 + #$49E5, // $49E5 + #$49E6, // $49E6 + #$49E7, // $49E7 + #$49E8, // $49E8 + #$49E9, // $49E9 + #$49EA, // $49EA + #$49EB, // $49EB + #$49EC, // $49EC + #$49ED, // $49ED + #$49EE, // $49EE + #$49EF, // $49EF + #$49F0, // $49F0 + #$49F1, // $49F1 + #$49F2, // $49F2 + #$49F3, // $49F3 + #$49F4, // $49F4 + #$49F5, // $49F5 + #$49F6, // $49F6 + #$49F7, // $49F7 + #$49F8, // $49F8 + #$49F9, // $49F9 + #$49FA, // $49FA + #$49FB, // $49FB + #$49FC, // $49FC + #$49FD, // $49FD + #$49FE, // $49FE + #$49FF, // $49FF + #$4A00, // $4A00 + #$4A01, // $4A01 + #$4A02, // $4A02 + #$4A03, // $4A03 + #$4A04, // $4A04 + #$4A05, // $4A05 + #$4A06, // $4A06 + #$4A07, // $4A07 + #$4A08, // $4A08 + #$4A09, // $4A09 + #$4A0A, // $4A0A + #$4A0B, // $4A0B + #$4A0C, // $4A0C + #$4A0D, // $4A0D + #$4A0E, // $4A0E + #$4A0F, // $4A0F + #$4A10, // $4A10 + #$4A11, // $4A11 + #$4A12, // $4A12 + #$4A13, // $4A13 + #$4A14, // $4A14 + #$4A15, // $4A15 + #$4A16, // $4A16 + #$4A17, // $4A17 + #$4A18, // $4A18 + #$4A19, // $4A19 + #$4A1A, // $4A1A + #$4A1B, // $4A1B + #$4A1C, // $4A1C + #$4A1D, // $4A1D + #$4A1E, // $4A1E + #$4A1F, // $4A1F + #$4A20, // $4A20 + #$4A21, // $4A21 + #$4A22, // $4A22 + #$4A23, // $4A23 + #$4A24, // $4A24 + #$4A25, // $4A25 + #$4A26, // $4A26 + #$4A27, // $4A27 + #$4A28, // $4A28 + #$4A29, // $4A29 + #$4A2A, // $4A2A + #$4A2B, // $4A2B + #$4A2C, // $4A2C + #$4A2D, // $4A2D + #$4A2E, // $4A2E + #$4A2F, // $4A2F + #$4A30, // $4A30 + #$4A31, // $4A31 + #$4A32, // $4A32 + #$4A33, // $4A33 + #$4A34, // $4A34 + #$4A35, // $4A35 + #$4A36, // $4A36 + #$4A37, // $4A37 + #$4A38, // $4A38 + #$4A39, // $4A39 + #$4A3A, // $4A3A + #$4A3B, // $4A3B + #$4A3C, // $4A3C + #$4A3D, // $4A3D + #$4A3E, // $4A3E + #$4A3F, // $4A3F + #$4A40, // $4A40 + #$4A41, // $4A41 + #$4A42, // $4A42 + #$4A43, // $4A43 + #$4A44, // $4A44 + #$4A45, // $4A45 + #$4A46, // $4A46 + #$4A47, // $4A47 + #$4A48, // $4A48 + #$4A49, // $4A49 + #$4A4A, // $4A4A + #$4A4B, // $4A4B + #$4A4C, // $4A4C + #$4A4D, // $4A4D + #$4A4E, // $4A4E + #$4A4F, // $4A4F + #$4A50, // $4A50 + #$4A51, // $4A51 + #$4A52, // $4A52 + #$4A53, // $4A53 + #$4A54, // $4A54 + #$4A55, // $4A55 + #$4A56, // $4A56 + #$4A57, // $4A57 + #$4A58, // $4A58 + #$4A59, // $4A59 + #$4A5A, // $4A5A + #$4A5B, // $4A5B + #$4A5C, // $4A5C + #$4A5D, // $4A5D + #$4A5E, // $4A5E + #$4A5F, // $4A5F + #$4A60, // $4A60 + #$4A61, // $4A61 + #$4A62, // $4A62 + #$4A63, // $4A63 + #$4A64, // $4A64 + #$4A65, // $4A65 + #$4A66, // $4A66 + #$4A67, // $4A67 + #$4A68, // $4A68 + #$4A69, // $4A69 + #$4A6A, // $4A6A + #$4A6B, // $4A6B + #$4A6C, // $4A6C + #$4A6D, // $4A6D + #$4A6E, // $4A6E + #$4A6F, // $4A6F + #$4A70, // $4A70 + #$4A71, // $4A71 + #$4A72, // $4A72 + #$4A73, // $4A73 + #$4A74, // $4A74 + #$4A75, // $4A75 + #$4A76, // $4A76 + #$4A77, // $4A77 + #$4A78, // $4A78 + #$4A79, // $4A79 + #$4A7A, // $4A7A + #$4A7B, // $4A7B + #$4A7C, // $4A7C + #$4A7D, // $4A7D + #$4A7E, // $4A7E + #$4A7F, // $4A7F + #$4A80, // $4A80 + #$4A81, // $4A81 + #$4A82, // $4A82 + #$4A83, // $4A83 + #$4A84, // $4A84 + #$4A85, // $4A85 + #$4A86, // $4A86 + #$4A87, // $4A87 + #$4A88, // $4A88 + #$4A89, // $4A89 + #$4A8A, // $4A8A + #$4A8B, // $4A8B + #$4A8C, // $4A8C + #$4A8D, // $4A8D + #$4A8E, // $4A8E + #$4A8F, // $4A8F + #$4A90, // $4A90 + #$4A91, // $4A91 + #$4A92, // $4A92 + #$4A93, // $4A93 + #$4A94, // $4A94 + #$4A95, // $4A95 + #$4A96, // $4A96 + #$4A97, // $4A97 + #$4A98, // $4A98 + #$4A99, // $4A99 + #$4A9A, // $4A9A + #$4A9B, // $4A9B + #$4A9C, // $4A9C + #$4A9D, // $4A9D + #$4A9E, // $4A9E + #$4A9F, // $4A9F + #$4AA0, // $4AA0 + #$4AA1, // $4AA1 + #$4AA2, // $4AA2 + #$4AA3, // $4AA3 + #$4AA4, // $4AA4 + #$4AA5, // $4AA5 + #$4AA6, // $4AA6 + #$4AA7, // $4AA7 + #$4AA8, // $4AA8 + #$4AA9, // $4AA9 + #$4AAA, // $4AAA + #$4AAB, // $4AAB + #$4AAC, // $4AAC + #$4AAD, // $4AAD + #$4AAE, // $4AAE + #$4AAF, // $4AAF + #$4AB0, // $4AB0 + #$4AB1, // $4AB1 + #$4AB2, // $4AB2 + #$4AB3, // $4AB3 + #$4AB4, // $4AB4 + #$4AB5, // $4AB5 + #$4AB6, // $4AB6 + #$4AB7, // $4AB7 + #$4AB8, // $4AB8 + #$4AB9, // $4AB9 + #$4ABA, // $4ABA + #$4ABB, // $4ABB + #$4ABC, // $4ABC + #$4ABD, // $4ABD + #$4ABE, // $4ABE + #$4ABF, // $4ABF + #$4AC0, // $4AC0 + #$4AC1, // $4AC1 + #$4AC2, // $4AC2 + #$4AC3, // $4AC3 + #$4AC4, // $4AC4 + #$4AC5, // $4AC5 + #$4AC6, // $4AC6 + #$4AC7, // $4AC7 + #$4AC8, // $4AC8 + #$4AC9, // $4AC9 + #$4ACA, // $4ACA + #$4ACB, // $4ACB + #$4ACC, // $4ACC + #$4ACD, // $4ACD + #$4ACE, // $4ACE + #$4ACF, // $4ACF + #$4AD0, // $4AD0 + #$4AD1, // $4AD1 + #$4AD2, // $4AD2 + #$4AD3, // $4AD3 + #$4AD4, // $4AD4 + #$4AD5, // $4AD5 + #$4AD6, // $4AD6 + #$4AD7, // $4AD7 + #$4AD8, // $4AD8 + #$4AD9, // $4AD9 + #$4ADA, // $4ADA + #$4ADB, // $4ADB + #$4ADC, // $4ADC + #$4ADD, // $4ADD + #$4ADE, // $4ADE + #$4ADF, // $4ADF + #$4AE0, // $4AE0 + #$4AE1, // $4AE1 + #$4AE2, // $4AE2 + #$4AE3, // $4AE3 + #$4AE4, // $4AE4 + #$4AE5, // $4AE5 + #$4AE6, // $4AE6 + #$4AE7, // $4AE7 + #$4AE8, // $4AE8 + #$4AE9, // $4AE9 + #$4AEA, // $4AEA + #$4AEB, // $4AEB + #$4AEC, // $4AEC + #$4AED, // $4AED + #$4AEE, // $4AEE + #$4AEF, // $4AEF + #$4AF0, // $4AF0 + #$4AF1, // $4AF1 + #$4AF2, // $4AF2 + #$4AF3, // $4AF3 + #$4AF4, // $4AF4 + #$4AF5, // $4AF5 + #$4AF6, // $4AF6 + #$4AF7, // $4AF7 + #$4AF8, // $4AF8 + #$4AF9, // $4AF9 + #$4AFA, // $4AFA + #$4AFB, // $4AFB + #$4AFC, // $4AFC + #$4AFD, // $4AFD + #$4AFE, // $4AFE + #$4AFF, // $4AFF + #$4B00, // $4B00 + #$4B01, // $4B01 + #$4B02, // $4B02 + #$4B03, // $4B03 + #$4B04, // $4B04 + #$4B05, // $4B05 + #$4B06, // $4B06 + #$4B07, // $4B07 + #$4B08, // $4B08 + #$4B09, // $4B09 + #$4B0A, // $4B0A + #$4B0B, // $4B0B + #$4B0C, // $4B0C + #$4B0D, // $4B0D + #$4B0E, // $4B0E + #$4B0F, // $4B0F + #$4B10, // $4B10 + #$4B11, // $4B11 + #$4B12, // $4B12 + #$4B13, // $4B13 + #$4B14, // $4B14 + #$4B15, // $4B15 + #$4B16, // $4B16 + #$4B17, // $4B17 + #$4B18, // $4B18 + #$4B19, // $4B19 + #$4B1A, // $4B1A + #$4B1B, // $4B1B + #$4B1C, // $4B1C + #$4B1D, // $4B1D + #$4B1E, // $4B1E + #$4B1F, // $4B1F + #$4B20, // $4B20 + #$4B21, // $4B21 + #$4B22, // $4B22 + #$4B23, // $4B23 + #$4B24, // $4B24 + #$4B25, // $4B25 + #$4B26, // $4B26 + #$4B27, // $4B27 + #$4B28, // $4B28 + #$4B29, // $4B29 + #$4B2A, // $4B2A + #$4B2B, // $4B2B + #$4B2C, // $4B2C + #$4B2D, // $4B2D + #$4B2E, // $4B2E + #$4B2F, // $4B2F + #$4B30, // $4B30 + #$4B31, // $4B31 + #$4B32, // $4B32 + #$4B33, // $4B33 + #$4B34, // $4B34 + #$4B35, // $4B35 + #$4B36, // $4B36 + #$4B37, // $4B37 + #$4B38, // $4B38 + #$4B39, // $4B39 + #$4B3A, // $4B3A + #$4B3B, // $4B3B + #$4B3C, // $4B3C + #$4B3D, // $4B3D + #$4B3E, // $4B3E + #$4B3F, // $4B3F + #$4B40, // $4B40 + #$4B41, // $4B41 + #$4B42, // $4B42 + #$4B43, // $4B43 + #$4B44, // $4B44 + #$4B45, // $4B45 + #$4B46, // $4B46 + #$4B47, // $4B47 + #$4B48, // $4B48 + #$4B49, // $4B49 + #$4B4A, // $4B4A + #$4B4B, // $4B4B + #$4B4C, // $4B4C + #$4B4D, // $4B4D + #$4B4E, // $4B4E + #$4B4F, // $4B4F + #$4B50, // $4B50 + #$4B51, // $4B51 + #$4B52, // $4B52 + #$4B53, // $4B53 + #$4B54, // $4B54 + #$4B55, // $4B55 + #$4B56, // $4B56 + #$4B57, // $4B57 + #$4B58, // $4B58 + #$4B59, // $4B59 + #$4B5A, // $4B5A + #$4B5B, // $4B5B + #$4B5C, // $4B5C + #$4B5D, // $4B5D + #$4B5E, // $4B5E + #$4B5F, // $4B5F + #$4B60, // $4B60 + #$4B61, // $4B61 + #$4B62, // $4B62 + #$4B63, // $4B63 + #$4B64, // $4B64 + #$4B65, // $4B65 + #$4B66, // $4B66 + #$4B67, // $4B67 + #$4B68, // $4B68 + #$4B69, // $4B69 + #$4B6A, // $4B6A + #$4B6B, // $4B6B + #$4B6C, // $4B6C + #$4B6D, // $4B6D + #$4B6E, // $4B6E + #$4B6F, // $4B6F + #$4B70, // $4B70 + #$4B71, // $4B71 + #$4B72, // $4B72 + #$4B73, // $4B73 + #$4B74, // $4B74 + #$4B75, // $4B75 + #$4B76, // $4B76 + #$4B77, // $4B77 + #$4B78, // $4B78 + #$4B79, // $4B79 + #$4B7A, // $4B7A + #$4B7B, // $4B7B + #$4B7C, // $4B7C + #$4B7D, // $4B7D + #$4B7E, // $4B7E + #$4B7F, // $4B7F + #$4B80, // $4B80 + #$4B81, // $4B81 + #$4B82, // $4B82 + #$4B83, // $4B83 + #$4B84, // $4B84 + #$4B85, // $4B85 + #$4B86, // $4B86 + #$4B87, // $4B87 + #$4B88, // $4B88 + #$4B89, // $4B89 + #$4B8A, // $4B8A + #$4B8B, // $4B8B + #$4B8C, // $4B8C + #$4B8D, // $4B8D + #$4B8E, // $4B8E + #$4B8F, // $4B8F + #$4B90, // $4B90 + #$4B91, // $4B91 + #$4B92, // $4B92 + #$4B93, // $4B93 + #$4B94, // $4B94 + #$4B95, // $4B95 + #$4B96, // $4B96 + #$4B97, // $4B97 + #$4B98, // $4B98 + #$4B99, // $4B99 + #$4B9A, // $4B9A + #$4B9B, // $4B9B + #$4B9C, // $4B9C + #$4B9D, // $4B9D + #$4B9E, // $4B9E + #$4B9F, // $4B9F + #$4BA0, // $4BA0 + #$4BA1, // $4BA1 + #$4BA2, // $4BA2 + #$4BA3, // $4BA3 + #$4BA4, // $4BA4 + #$4BA5, // $4BA5 + #$4BA6, // $4BA6 + #$4BA7, // $4BA7 + #$4BA8, // $4BA8 + #$4BA9, // $4BA9 + #$4BAA, // $4BAA + #$4BAB, // $4BAB + #$4BAC, // $4BAC + #$4BAD, // $4BAD + #$4BAE, // $4BAE + #$4BAF, // $4BAF + #$4BB0, // $4BB0 + #$4BB1, // $4BB1 + #$4BB2, // $4BB2 + #$4BB3, // $4BB3 + #$4BB4, // $4BB4 + #$4BB5, // $4BB5 + #$4BB6, // $4BB6 + #$4BB7, // $4BB7 + #$4BB8, // $4BB8 + #$4BB9, // $4BB9 + #$4BBA, // $4BBA + #$4BBB, // $4BBB + #$4BBC, // $4BBC + #$4BBD, // $4BBD + #$4BBE, // $4BBE + #$4BBF, // $4BBF + #$4BC0, // $4BC0 + #$4BC1, // $4BC1 + #$4BC2, // $4BC2 + #$4BC3, // $4BC3 + #$4BC4, // $4BC4 + #$4BC5, // $4BC5 + #$4BC6, // $4BC6 + #$4BC7, // $4BC7 + #$4BC8, // $4BC8 + #$4BC9, // $4BC9 + #$4BCA, // $4BCA + #$4BCB, // $4BCB + #$4BCC, // $4BCC + #$4BCD, // $4BCD + #$4BCE, // $4BCE + #$4BCF, // $4BCF + #$4BD0, // $4BD0 + #$4BD1, // $4BD1 + #$4BD2, // $4BD2 + #$4BD3, // $4BD3 + #$4BD4, // $4BD4 + #$4BD5, // $4BD5 + #$4BD6, // $4BD6 + #$4BD7, // $4BD7 + #$4BD8, // $4BD8 + #$4BD9, // $4BD9 + #$4BDA, // $4BDA + #$4BDB, // $4BDB + #$4BDC, // $4BDC + #$4BDD, // $4BDD + #$4BDE, // $4BDE + #$4BDF, // $4BDF + #$4BE0, // $4BE0 + #$4BE1, // $4BE1 + #$4BE2, // $4BE2 + #$4BE3, // $4BE3 + #$4BE4, // $4BE4 + #$4BE5, // $4BE5 + #$4BE6, // $4BE6 + #$4BE7, // $4BE7 + #$4BE8, // $4BE8 + #$4BE9, // $4BE9 + #$4BEA, // $4BEA + #$4BEB, // $4BEB + #$4BEC, // $4BEC + #$4BED, // $4BED + #$4BEE, // $4BEE + #$4BEF, // $4BEF + #$4BF0, // $4BF0 + #$4BF1, // $4BF1 + #$4BF2, // $4BF2 + #$4BF3, // $4BF3 + #$4BF4, // $4BF4 + #$4BF5, // $4BF5 + #$4BF6, // $4BF6 + #$4BF7, // $4BF7 + #$4BF8, // $4BF8 + #$4BF9, // $4BF9 + #$4BFA, // $4BFA + #$4BFB, // $4BFB + #$4BFC, // $4BFC + #$4BFD, // $4BFD + #$4BFE, // $4BFE + #$4BFF, // $4BFF + #$4C00, // $4C00 + #$4C01, // $4C01 + #$4C02, // $4C02 + #$4C03, // $4C03 + #$4C04, // $4C04 + #$4C05, // $4C05 + #$4C06, // $4C06 + #$4C07, // $4C07 + #$4C08, // $4C08 + #$4C09, // $4C09 + #$4C0A, // $4C0A + #$4C0B, // $4C0B + #$4C0C, // $4C0C + #$4C0D, // $4C0D + #$4C0E, // $4C0E + #$4C0F, // $4C0F + #$4C10, // $4C10 + #$4C11, // $4C11 + #$4C12, // $4C12 + #$4C13, // $4C13 + #$4C14, // $4C14 + #$4C15, // $4C15 + #$4C16, // $4C16 + #$4C17, // $4C17 + #$4C18, // $4C18 + #$4C19, // $4C19 + #$4C1A, // $4C1A + #$4C1B, // $4C1B + #$4C1C, // $4C1C + #$4C1D, // $4C1D + #$4C1E, // $4C1E + #$4C1F, // $4C1F + #$4C20, // $4C20 + #$4C21, // $4C21 + #$4C22, // $4C22 + #$4C23, // $4C23 + #$4C24, // $4C24 + #$4C25, // $4C25 + #$4C26, // $4C26 + #$4C27, // $4C27 + #$4C28, // $4C28 + #$4C29, // $4C29 + #$4C2A, // $4C2A + #$4C2B, // $4C2B + #$4C2C, // $4C2C + #$4C2D, // $4C2D + #$4C2E, // $4C2E + #$4C2F, // $4C2F + #$4C30, // $4C30 + #$4C31, // $4C31 + #$4C32, // $4C32 + #$4C33, // $4C33 + #$4C34, // $4C34 + #$4C35, // $4C35 + #$4C36, // $4C36 + #$4C37, // $4C37 + #$4C38, // $4C38 + #$4C39, // $4C39 + #$4C3A, // $4C3A + #$4C3B, // $4C3B + #$4C3C, // $4C3C + #$4C3D, // $4C3D + #$4C3E, // $4C3E + #$4C3F, // $4C3F + #$4C40, // $4C40 + #$4C41, // $4C41 + #$4C42, // $4C42 + #$4C43, // $4C43 + #$4C44, // $4C44 + #$4C45, // $4C45 + #$4C46, // $4C46 + #$4C47, // $4C47 + #$4C48, // $4C48 + #$4C49, // $4C49 + #$4C4A, // $4C4A + #$4C4B, // $4C4B + #$4C4C, // $4C4C + #$4C4D, // $4C4D + #$4C4E, // $4C4E + #$4C4F, // $4C4F + #$4C50, // $4C50 + #$4C51, // $4C51 + #$4C52, // $4C52 + #$4C53, // $4C53 + #$4C54, // $4C54 + #$4C55, // $4C55 + #$4C56, // $4C56 + #$4C57, // $4C57 + #$4C58, // $4C58 + #$4C59, // $4C59 + #$4C5A, // $4C5A + #$4C5B, // $4C5B + #$4C5C, // $4C5C + #$4C5D, // $4C5D + #$4C5E, // $4C5E + #$4C5F, // $4C5F + #$4C60, // $4C60 + #$4C61, // $4C61 + #$4C62, // $4C62 + #$4C63, // $4C63 + #$4C64, // $4C64 + #$4C65, // $4C65 + #$4C66, // $4C66 + #$4C67, // $4C67 + #$4C68, // $4C68 + #$4C69, // $4C69 + #$4C6A, // $4C6A + #$4C6B, // $4C6B + #$4C6C, // $4C6C + #$4C6D, // $4C6D + #$4C6E, // $4C6E + #$4C6F, // $4C6F + #$4C70, // $4C70 + #$4C71, // $4C71 + #$4C72, // $4C72 + #$4C73, // $4C73 + #$4C74, // $4C74 + #$4C75, // $4C75 + #$4C76, // $4C76 + #$4C77, // $4C77 + #$4C78, // $4C78 + #$4C79, // $4C79 + #$4C7A, // $4C7A + #$4C7B, // $4C7B + #$4C7C, // $4C7C + #$4C7D, // $4C7D + #$4C7E, // $4C7E + #$4C7F, // $4C7F + #$4C80, // $4C80 + #$4C81, // $4C81 + #$4C82, // $4C82 + #$4C83, // $4C83 + #$4C84, // $4C84 + #$4C85, // $4C85 + #$4C86, // $4C86 + #$4C87, // $4C87 + #$4C88, // $4C88 + #$4C89, // $4C89 + #$4C8A, // $4C8A + #$4C8B, // $4C8B + #$4C8C, // $4C8C + #$4C8D, // $4C8D + #$4C8E, // $4C8E + #$4C8F, // $4C8F + #$4C90, // $4C90 + #$4C91, // $4C91 + #$4C92, // $4C92 + #$4C93, // $4C93 + #$4C94, // $4C94 + #$4C95, // $4C95 + #$4C96, // $4C96 + #$4C97, // $4C97 + #$4C98, // $4C98 + #$4C99, // $4C99 + #$4C9A, // $4C9A + #$4C9B, // $4C9B + #$4C9C, // $4C9C + #$4C9D, // $4C9D + #$4C9E, // $4C9E + #$4C9F, // $4C9F + #$4CA0, // $4CA0 + #$4CA1, // $4CA1 + #$4CA2, // $4CA2 + #$4CA3, // $4CA3 + #$4CA4, // $4CA4 + #$4CA5, // $4CA5 + #$4CA6, // $4CA6 + #$4CA7, // $4CA7 + #$4CA8, // $4CA8 + #$4CA9, // $4CA9 + #$4CAA, // $4CAA + #$4CAB, // $4CAB + #$4CAC, // $4CAC + #$4CAD, // $4CAD + #$4CAE, // $4CAE + #$4CAF, // $4CAF + #$4CB0, // $4CB0 + #$4CB1, // $4CB1 + #$4CB2, // $4CB2 + #$4CB3, // $4CB3 + #$4CB4, // $4CB4 + #$4CB5, // $4CB5 + #$4CB6, // $4CB6 + #$4CB7, // $4CB7 + #$4CB8, // $4CB8 + #$4CB9, // $4CB9 + #$4CBA, // $4CBA + #$4CBB, // $4CBB + #$4CBC, // $4CBC + #$4CBD, // $4CBD + #$4CBE, // $4CBE + #$4CBF, // $4CBF + #$4CC0, // $4CC0 + #$4CC1, // $4CC1 + #$4CC2, // $4CC2 + #$4CC3, // $4CC3 + #$4CC4, // $4CC4 + #$4CC5, // $4CC5 + #$4CC6, // $4CC6 + #$4CC7, // $4CC7 + #$4CC8, // $4CC8 + #$4CC9, // $4CC9 + #$4CCA, // $4CCA + #$4CCB, // $4CCB + #$4CCC, // $4CCC + #$4CCD, // $4CCD + #$4CCE, // $4CCE + #$4CCF, // $4CCF + #$4CD0, // $4CD0 + #$4CD1, // $4CD1 + #$4CD2, // $4CD2 + #$4CD3, // $4CD3 + #$4CD4, // $4CD4 + #$4CD5, // $4CD5 + #$4CD6, // $4CD6 + #$4CD7, // $4CD7 + #$4CD8, // $4CD8 + #$4CD9, // $4CD9 + #$4CDA, // $4CDA + #$4CDB, // $4CDB + #$4CDC, // $4CDC + #$4CDD, // $4CDD + #$4CDE, // $4CDE + #$4CDF, // $4CDF + #$4CE0, // $4CE0 + #$4CE1, // $4CE1 + #$4CE2, // $4CE2 + #$4CE3, // $4CE3 + #$4CE4, // $4CE4 + #$4CE5, // $4CE5 + #$4CE6, // $4CE6 + #$4CE7, // $4CE7 + #$4CE8, // $4CE8 + #$4CE9, // $4CE9 + #$4CEA, // $4CEA + #$4CEB, // $4CEB + #$4CEC, // $4CEC + #$4CED, // $4CED + #$4CEE, // $4CEE + #$4CEF, // $4CEF + #$4CF0, // $4CF0 + #$4CF1, // $4CF1 + #$4CF2, // $4CF2 + #$4CF3, // $4CF3 + #$4CF4, // $4CF4 + #$4CF5, // $4CF5 + #$4CF6, // $4CF6 + #$4CF7, // $4CF7 + #$4CF8, // $4CF8 + #$4CF9, // $4CF9 + #$4CFA, // $4CFA + #$4CFB, // $4CFB + #$4CFC, // $4CFC + #$4CFD, // $4CFD + #$4CFE, // $4CFE + #$4CFF, // $4CFF + #$4D00, // $4D00 + #$4D01, // $4D01 + #$4D02, // $4D02 + #$4D03, // $4D03 + #$4D04, // $4D04 + #$4D05, // $4D05 + #$4D06, // $4D06 + #$4D07, // $4D07 + #$4D08, // $4D08 + #$4D09, // $4D09 + #$4D0A, // $4D0A + #$4D0B, // $4D0B + #$4D0C, // $4D0C + #$4D0D, // $4D0D + #$4D0E, // $4D0E + #$4D0F, // $4D0F + #$4D10, // $4D10 + #$4D11, // $4D11 + #$4D12, // $4D12 + #$4D13, // $4D13 + #$4D14, // $4D14 + #$4D15, // $4D15 + #$4D16, // $4D16 + #$4D17, // $4D17 + #$4D18, // $4D18 + #$4D19, // $4D19 + #$4D1A, // $4D1A + #$4D1B, // $4D1B + #$4D1C, // $4D1C + #$4D1D, // $4D1D + #$4D1E, // $4D1E + #$4D1F, // $4D1F + #$4D20, // $4D20 + #$4D21, // $4D21 + #$4D22, // $4D22 + #$4D23, // $4D23 + #$4D24, // $4D24 + #$4D25, // $4D25 + #$4D26, // $4D26 + #$4D27, // $4D27 + #$4D28, // $4D28 + #$4D29, // $4D29 + #$4D2A, // $4D2A + #$4D2B, // $4D2B + #$4D2C, // $4D2C + #$4D2D, // $4D2D + #$4D2E, // $4D2E + #$4D2F, // $4D2F + #$4D30, // $4D30 + #$4D31, // $4D31 + #$4D32, // $4D32 + #$4D33, // $4D33 + #$4D34, // $4D34 + #$4D35, // $4D35 + #$4D36, // $4D36 + #$4D37, // $4D37 + #$4D38, // $4D38 + #$4D39, // $4D39 + #$4D3A, // $4D3A + #$4D3B, // $4D3B + #$4D3C, // $4D3C + #$4D3D, // $4D3D + #$4D3E, // $4D3E + #$4D3F, // $4D3F + #$4D40, // $4D40 + #$4D41, // $4D41 + #$4D42, // $4D42 + #$4D43, // $4D43 + #$4D44, // $4D44 + #$4D45, // $4D45 + #$4D46, // $4D46 + #$4D47, // $4D47 + #$4D48, // $4D48 + #$4D49, // $4D49 + #$4D4A, // $4D4A + #$4D4B, // $4D4B + #$4D4C, // $4D4C + #$4D4D, // $4D4D + #$4D4E, // $4D4E + #$4D4F, // $4D4F + #$4D50, // $4D50 + #$4D51, // $4D51 + #$4D52, // $4D52 + #$4D53, // $4D53 + #$4D54, // $4D54 + #$4D55, // $4D55 + #$4D56, // $4D56 + #$4D57, // $4D57 + #$4D58, // $4D58 + #$4D59, // $4D59 + #$4D5A, // $4D5A + #$4D5B, // $4D5B + #$4D5C, // $4D5C + #$4D5D, // $4D5D + #$4D5E, // $4D5E + #$4D5F, // $4D5F + #$4D60, // $4D60 + #$4D61, // $4D61 + #$4D62, // $4D62 + #$4D63, // $4D63 + #$4D64, // $4D64 + #$4D65, // $4D65 + #$4D66, // $4D66 + #$4D67, // $4D67 + #$4D68, // $4D68 + #$4D69, // $4D69 + #$4D6A, // $4D6A + #$4D6B, // $4D6B + #$4D6C, // $4D6C + #$4D6D, // $4D6D + #$4D6E, // $4D6E + #$4D6F, // $4D6F + #$4D70, // $4D70 + #$4D71, // $4D71 + #$4D72, // $4D72 + #$4D73, // $4D73 + #$4D74, // $4D74 + #$4D75, // $4D75 + #$4D76, // $4D76 + #$4D77, // $4D77 + #$4D78, // $4D78 + #$4D79, // $4D79 + #$4D7A, // $4D7A + #$4D7B, // $4D7B + #$4D7C, // $4D7C + #$4D7D, // $4D7D + #$4D7E, // $4D7E + #$4D7F, // $4D7F + #$4D80, // $4D80 + #$4D81, // $4D81 + #$4D82, // $4D82 + #$4D83, // $4D83 + #$4D84, // $4D84 + #$4D85, // $4D85 + #$4D86, // $4D86 + #$4D87, // $4D87 + #$4D88, // $4D88 + #$4D89, // $4D89 + #$4D8A, // $4D8A + #$4D8B, // $4D8B + #$4D8C, // $4D8C + #$4D8D, // $4D8D + #$4D8E, // $4D8E + #$4D8F, // $4D8F + #$4D90, // $4D90 + #$4D91, // $4D91 + #$4D92, // $4D92 + #$4D93, // $4D93 + #$4D94, // $4D94 + #$4D95, // $4D95 + #$4D96, // $4D96 + #$4D97, // $4D97 + #$4D98, // $4D98 + #$4D99, // $4D99 + #$4D9A, // $4D9A + #$4D9B, // $4D9B + #$4D9C, // $4D9C + #$4D9D, // $4D9D + #$4D9E, // $4D9E + #$4D9F, // $4D9F + #$4DA0, // $4DA0 + #$4DA1, // $4DA1 + #$4DA2, // $4DA2 + #$4DA3, // $4DA3 + #$4DA4, // $4DA4 + #$4DA5, // $4DA5 + #$4DA6, // $4DA6 + #$4DA7, // $4DA7 + #$4DA8, // $4DA8 + #$4DA9, // $4DA9 + #$4DAA, // $4DAA + #$4DAB, // $4DAB + #$4DAC, // $4DAC + #$4DAD, // $4DAD + #$4DAE, // $4DAE + #$4DAF, // $4DAF + #$4DB0, // $4DB0 + #$4DB1, // $4DB1 + #$4DB2, // $4DB2 + #$4DB3, // $4DB3 + #$4DB4, // $4DB4 + #$4DB5, // $4DB5 + #$4DB6, // $4DB6 + #$4DB7, // $4DB7 + #$4DB8, // $4DB8 + #$4DB9, // $4DB9 + #$4DBA, // $4DBA + #$4DBB, // $4DBB + #$4DBC, // $4DBC + #$4DBD, // $4DBD + #$4DBE, // $4DBE + #$4DBF, // $4DBF + #$4DC0, // $4DC0 + #$4DC1, // $4DC1 + #$4DC2, // $4DC2 + #$4DC3, // $4DC3 + #$4DC4, // $4DC4 + #$4DC5, // $4DC5 + #$4DC6, // $4DC6 + #$4DC7, // $4DC7 + #$4DC8, // $4DC8 + #$4DC9, // $4DC9 + #$4DCA, // $4DCA + #$4DCB, // $4DCB + #$4DCC, // $4DCC + #$4DCD, // $4DCD + #$4DCE, // $4DCE + #$4DCF, // $4DCF + #$4DD0, // $4DD0 + #$4DD1, // $4DD1 + #$4DD2, // $4DD2 + #$4DD3, // $4DD3 + #$4DD4, // $4DD4 + #$4DD5, // $4DD5 + #$4DD6, // $4DD6 + #$4DD7, // $4DD7 + #$4DD8, // $4DD8 + #$4DD9, // $4DD9 + #$4DDA, // $4DDA + #$4DDB, // $4DDB + #$4DDC, // $4DDC + #$4DDD, // $4DDD + #$4DDE, // $4DDE + #$4DDF, // $4DDF + #$4DE0, // $4DE0 + #$4DE1, // $4DE1 + #$4DE2, // $4DE2 + #$4DE3, // $4DE3 + #$4DE4, // $4DE4 + #$4DE5, // $4DE5 + #$4DE6, // $4DE6 + #$4DE7, // $4DE7 + #$4DE8, // $4DE8 + #$4DE9, // $4DE9 + #$4DEA, // $4DEA + #$4DEB, // $4DEB + #$4DEC, // $4DEC + #$4DED, // $4DED + #$4DEE, // $4DEE + #$4DEF, // $4DEF + #$4DF0, // $4DF0 + #$4DF1, // $4DF1 + #$4DF2, // $4DF2 + #$4DF3, // $4DF3 + #$4DF4, // $4DF4 + #$4DF5, // $4DF5 + #$4DF6, // $4DF6 + #$4DF7, // $4DF7 + #$4DF8, // $4DF8 + #$4DF9, // $4DF9 + #$4DFA, // $4DFA + #$4DFB, // $4DFB + #$4DFC, // $4DFC + #$4DFD, // $4DFD + #$4DFE, // $4DFE + #$4DFF, // $4DFF + #$4E00, // $4E00 + #$4E01, // $4E01 + #$4E02, // $4E02 + #$4E03, // $4E03 + #$4E04, // $4E04 + #$4E05, // $4E05 + #$4E06, // $4E06 + #$4E07, // $4E07 + #$4E08, // $4E08 + #$4E09, // $4E09 + #$4E0A, // $4E0A + #$4E0B, // $4E0B + #$4E0C, // $4E0C + #$4E0D, // $4E0D + #$4E0E, // $4E0E + #$4E0F, // $4E0F + #$4E10, // $4E10 + #$4E11, // $4E11 + #$4E12, // $4E12 + #$4E13, // $4E13 + #$4E14, // $4E14 + #$4E15, // $4E15 + #$4E16, // $4E16 + #$4E17, // $4E17 + #$4E18, // $4E18 + #$4E19, // $4E19 + #$4E1A, // $4E1A + #$4E1B, // $4E1B + #$4E1C, // $4E1C + #$4E1D, // $4E1D + #$4E1E, // $4E1E + #$4E1F, // $4E1F + #$4E20, // $4E20 + #$4E21, // $4E21 + #$4E22, // $4E22 + #$4E23, // $4E23 + #$4E24, // $4E24 + #$4E25, // $4E25 + #$4E26, // $4E26 + #$4E27, // $4E27 + #$4E28, // $4E28 + #$4E29, // $4E29 + #$4E2A, // $4E2A + #$4E2B, // $4E2B + #$4E2C, // $4E2C + #$4E2D, // $4E2D + #$4E2E, // $4E2E + #$4E2F, // $4E2F + #$4E30, // $4E30 + #$4E31, // $4E31 + #$4E32, // $4E32 + #$4E33, // $4E33 + #$4E34, // $4E34 + #$4E35, // $4E35 + #$4E36, // $4E36 + #$4E37, // $4E37 + #$4E38, // $4E38 + #$4E39, // $4E39 + #$4E3A, // $4E3A + #$4E3B, // $4E3B + #$4E3C, // $4E3C + #$4E3D, // $4E3D + #$4E3E, // $4E3E + #$4E3F, // $4E3F + #$4E40, // $4E40 + #$4E41, // $4E41 + #$4E42, // $4E42 + #$4E43, // $4E43 + #$4E44, // $4E44 + #$4E45, // $4E45 + #$4E46, // $4E46 + #$4E47, // $4E47 + #$4E48, // $4E48 + #$4E49, // $4E49 + #$4E4A, // $4E4A + #$4E4B, // $4E4B + #$4E4C, // $4E4C + #$4E4D, // $4E4D + #$4E4E, // $4E4E + #$4E4F, // $4E4F + #$4E50, // $4E50 + #$4E51, // $4E51 + #$4E52, // $4E52 + #$4E53, // $4E53 + #$4E54, // $4E54 + #$4E55, // $4E55 + #$4E56, // $4E56 + #$4E57, // $4E57 + #$4E58, // $4E58 + #$4E59, // $4E59 + #$4E5A, // $4E5A + #$4E5B, // $4E5B + #$4E5C, // $4E5C + #$4E5D, // $4E5D + #$4E5E, // $4E5E + #$4E5F, // $4E5F + #$4E60, // $4E60 + #$4E61, // $4E61 + #$4E62, // $4E62 + #$4E63, // $4E63 + #$4E64, // $4E64 + #$4E65, // $4E65 + #$4E66, // $4E66 + #$4E67, // $4E67 + #$4E68, // $4E68 + #$4E69, // $4E69 + #$4E6A, // $4E6A + #$4E6B, // $4E6B + #$4E6C, // $4E6C + #$4E6D, // $4E6D + #$4E6E, // $4E6E + #$4E6F, // $4E6F + #$4E70, // $4E70 + #$4E71, // $4E71 + #$4E72, // $4E72 + #$4E73, // $4E73 + #$4E74, // $4E74 + #$4E75, // $4E75 + #$4E76, // $4E76 + #$4E77, // $4E77 + #$4E78, // $4E78 + #$4E79, // $4E79 + #$4E7A, // $4E7A + #$4E7B, // $4E7B + #$4E7C, // $4E7C + #$4E7D, // $4E7D + #$4E7E, // $4E7E + #$4E7F, // $4E7F + #$4E80, // $4E80 + #$4E81, // $4E81 + #$4E82, // $4E82 + #$4E83, // $4E83 + #$4E84, // $4E84 + #$4E85, // $4E85 + #$4E86, // $4E86 + #$4E87, // $4E87 + #$4E88, // $4E88 + #$4E89, // $4E89 + #$4E8A, // $4E8A + #$4E8B, // $4E8B + #$4E8C, // $4E8C + #$4E8D, // $4E8D + #$4E8E, // $4E8E + #$4E8F, // $4E8F + #$4E90, // $4E90 + #$4E91, // $4E91 + #$4E92, // $4E92 + #$4E93, // $4E93 + #$4E94, // $4E94 + #$4E95, // $4E95 + #$4E96, // $4E96 + #$4E97, // $4E97 + #$4E98, // $4E98 + #$4E99, // $4E99 + #$4E9A, // $4E9A + #$4E9B, // $4E9B + #$4E9C, // $4E9C + #$4E9D, // $4E9D + #$4E9E, // $4E9E + #$4E9F, // $4E9F + #$4EA0, // $4EA0 + #$4EA1, // $4EA1 + #$4EA2, // $4EA2 + #$4EA3, // $4EA3 + #$4EA4, // $4EA4 + #$4EA5, // $4EA5 + #$4EA6, // $4EA6 + #$4EA7, // $4EA7 + #$4EA8, // $4EA8 + #$4EA9, // $4EA9 + #$4EAA, // $4EAA + #$4EAB, // $4EAB + #$4EAC, // $4EAC + #$4EAD, // $4EAD + #$4EAE, // $4EAE + #$4EAF, // $4EAF + #$4EB0, // $4EB0 + #$4EB1, // $4EB1 + #$4EB2, // $4EB2 + #$4EB3, // $4EB3 + #$4EB4, // $4EB4 + #$4EB5, // $4EB5 + #$4EB6, // $4EB6 + #$4EB7, // $4EB7 + #$4EB8, // $4EB8 + #$4EB9, // $4EB9 + #$4EBA, // $4EBA + #$4EBB, // $4EBB + #$4EBC, // $4EBC + #$4EBD, // $4EBD + #$4EBE, // $4EBE + #$4EBF, // $4EBF + #$4EC0, // $4EC0 + #$4EC1, // $4EC1 + #$4EC2, // $4EC2 + #$4EC3, // $4EC3 + #$4EC4, // $4EC4 + #$4EC5, // $4EC5 + #$4EC6, // $4EC6 + #$4EC7, // $4EC7 + #$4EC8, // $4EC8 + #$4EC9, // $4EC9 + #$4ECA, // $4ECA + #$4ECB, // $4ECB + #$4ECC, // $4ECC + #$4ECD, // $4ECD + #$4ECE, // $4ECE + #$4ECF, // $4ECF + #$4ED0, // $4ED0 + #$4ED1, // $4ED1 + #$4ED2, // $4ED2 + #$4ED3, // $4ED3 + #$4ED4, // $4ED4 + #$4ED5, // $4ED5 + #$4ED6, // $4ED6 + #$4ED7, // $4ED7 + #$4ED8, // $4ED8 + #$4ED9, // $4ED9 + #$4EDA, // $4EDA + #$4EDB, // $4EDB + #$4EDC, // $4EDC + #$4EDD, // $4EDD + #$4EDE, // $4EDE + #$4EDF, // $4EDF + #$4EE0, // $4EE0 + #$4EE1, // $4EE1 + #$4EE2, // $4EE2 + #$4EE3, // $4EE3 + #$4EE4, // $4EE4 + #$4EE5, // $4EE5 + #$4EE6, // $4EE6 + #$4EE7, // $4EE7 + #$4EE8, // $4EE8 + #$4EE9, // $4EE9 + #$4EEA, // $4EEA + #$4EEB, // $4EEB + #$4EEC, // $4EEC + #$4EED, // $4EED + #$4EEE, // $4EEE + #$4EEF, // $4EEF + #$4EF0, // $4EF0 + #$4EF1, // $4EF1 + #$4EF2, // $4EF2 + #$4EF3, // $4EF3 + #$4EF4, // $4EF4 + #$4EF5, // $4EF5 + #$4EF6, // $4EF6 + #$4EF7, // $4EF7 + #$4EF8, // $4EF8 + #$4EF9, // $4EF9 + #$4EFA, // $4EFA + #$4EFB, // $4EFB + #$4EFC, // $4EFC + #$4EFD, // $4EFD + #$4EFE, // $4EFE + #$4EFF, // $4EFF + #$4F00, // $4F00 + #$4F01, // $4F01 + #$4F02, // $4F02 + #$4F03, // $4F03 + #$4F04, // $4F04 + #$4F05, // $4F05 + #$4F06, // $4F06 + #$4F07, // $4F07 + #$4F08, // $4F08 + #$4F09, // $4F09 + #$4F0A, // $4F0A + #$4F0B, // $4F0B + #$4F0C, // $4F0C + #$4F0D, // $4F0D + #$4F0E, // $4F0E + #$4F0F, // $4F0F + #$4F10, // $4F10 + #$4F11, // $4F11 + #$4F12, // $4F12 + #$4F13, // $4F13 + #$4F14, // $4F14 + #$4F15, // $4F15 + #$4F16, // $4F16 + #$4F17, // $4F17 + #$4F18, // $4F18 + #$4F19, // $4F19 + #$4F1A, // $4F1A + #$4F1B, // $4F1B + #$4F1C, // $4F1C + #$4F1D, // $4F1D + #$4F1E, // $4F1E + #$4F1F, // $4F1F + #$4F20, // $4F20 + #$4F21, // $4F21 + #$4F22, // $4F22 + #$4F23, // $4F23 + #$4F24, // $4F24 + #$4F25, // $4F25 + #$4F26, // $4F26 + #$4F27, // $4F27 + #$4F28, // $4F28 + #$4F29, // $4F29 + #$4F2A, // $4F2A + #$4F2B, // $4F2B + #$4F2C, // $4F2C + #$4F2D, // $4F2D + #$4F2E, // $4F2E + #$4F2F, // $4F2F + #$4F30, // $4F30 + #$4F31, // $4F31 + #$4F32, // $4F32 + #$4F33, // $4F33 + #$4F34, // $4F34 + #$4F35, // $4F35 + #$4F36, // $4F36 + #$4F37, // $4F37 + #$4F38, // $4F38 + #$4F39, // $4F39 + #$4F3A, // $4F3A + #$4F3B, // $4F3B + #$4F3C, // $4F3C + #$4F3D, // $4F3D + #$4F3E, // $4F3E + #$4F3F, // $4F3F + #$4F40, // $4F40 + #$4F41, // $4F41 + #$4F42, // $4F42 + #$4F43, // $4F43 + #$4F44, // $4F44 + #$4F45, // $4F45 + #$4F46, // $4F46 + #$4F47, // $4F47 + #$4F48, // $4F48 + #$4F49, // $4F49 + #$4F4A, // $4F4A + #$4F4B, // $4F4B + #$4F4C, // $4F4C + #$4F4D, // $4F4D + #$4F4E, // $4F4E + #$4F4F, // $4F4F + #$4F50, // $4F50 + #$4F51, // $4F51 + #$4F52, // $4F52 + #$4F53, // $4F53 + #$4F54, // $4F54 + #$4F55, // $4F55 + #$4F56, // $4F56 + #$4F57, // $4F57 + #$4F58, // $4F58 + #$4F59, // $4F59 + #$4F5A, // $4F5A + #$4F5B, // $4F5B + #$4F5C, // $4F5C + #$4F5D, // $4F5D + #$4F5E, // $4F5E + #$4F5F, // $4F5F + #$4F60, // $4F60 + #$4F61, // $4F61 + #$4F62, // $4F62 + #$4F63, // $4F63 + #$4F64, // $4F64 + #$4F65, // $4F65 + #$4F66, // $4F66 + #$4F67, // $4F67 + #$4F68, // $4F68 + #$4F69, // $4F69 + #$4F6A, // $4F6A + #$4F6B, // $4F6B + #$4F6C, // $4F6C + #$4F6D, // $4F6D + #$4F6E, // $4F6E + #$4F6F, // $4F6F + #$4F70, // $4F70 + #$4F71, // $4F71 + #$4F72, // $4F72 + #$4F73, // $4F73 + #$4F74, // $4F74 + #$4F75, // $4F75 + #$4F76, // $4F76 + #$4F77, // $4F77 + #$4F78, // $4F78 + #$4F79, // $4F79 + #$4F7A, // $4F7A + #$4F7B, // $4F7B + #$4F7C, // $4F7C + #$4F7D, // $4F7D + #$4F7E, // $4F7E + #$4F7F, // $4F7F + #$4F80, // $4F80 + #$4F81, // $4F81 + #$4F82, // $4F82 + #$4F83, // $4F83 + #$4F84, // $4F84 + #$4F85, // $4F85 + #$4F86, // $4F86 + #$4F87, // $4F87 + #$4F88, // $4F88 + #$4F89, // $4F89 + #$4F8A, // $4F8A + #$4F8B, // $4F8B + #$4F8C, // $4F8C + #$4F8D, // $4F8D + #$4F8E, // $4F8E + #$4F8F, // $4F8F + #$4F90, // $4F90 + #$4F91, // $4F91 + #$4F92, // $4F92 + #$4F93, // $4F93 + #$4F94, // $4F94 + #$4F95, // $4F95 + #$4F96, // $4F96 + #$4F97, // $4F97 + #$4F98, // $4F98 + #$4F99, // $4F99 + #$4F9A, // $4F9A + #$4F9B, // $4F9B + #$4F9C, // $4F9C + #$4F9D, // $4F9D + #$4F9E, // $4F9E + #$4F9F, // $4F9F + #$4FA0, // $4FA0 + #$4FA1, // $4FA1 + #$4FA2, // $4FA2 + #$4FA3, // $4FA3 + #$4FA4, // $4FA4 + #$4FA5, // $4FA5 + #$4FA6, // $4FA6 + #$4FA7, // $4FA7 + #$4FA8, // $4FA8 + #$4FA9, // $4FA9 + #$4FAA, // $4FAA + #$4FAB, // $4FAB + #$4FAC, // $4FAC + #$4FAD, // $4FAD + #$4FAE, // $4FAE + #$4FAF, // $4FAF + #$4FB0, // $4FB0 + #$4FB1, // $4FB1 + #$4FB2, // $4FB2 + #$4FB3, // $4FB3 + #$4FB4, // $4FB4 + #$4FB5, // $4FB5 + #$4FB6, // $4FB6 + #$4FB7, // $4FB7 + #$4FB8, // $4FB8 + #$4FB9, // $4FB9 + #$4FBA, // $4FBA + #$4FBB, // $4FBB + #$4FBC, // $4FBC + #$4FBD, // $4FBD + #$4FBE, // $4FBE + #$4FBF, // $4FBF + #$4FC0, // $4FC0 + #$4FC1, // $4FC1 + #$4FC2, // $4FC2 + #$4FC3, // $4FC3 + #$4FC4, // $4FC4 + #$4FC5, // $4FC5 + #$4FC6, // $4FC6 + #$4FC7, // $4FC7 + #$4FC8, // $4FC8 + #$4FC9, // $4FC9 + #$4FCA, // $4FCA + #$4FCB, // $4FCB + #$4FCC, // $4FCC + #$4FCD, // $4FCD + #$4FCE, // $4FCE + #$4FCF, // $4FCF + #$4FD0, // $4FD0 + #$4FD1, // $4FD1 + #$4FD2, // $4FD2 + #$4FD3, // $4FD3 + #$4FD4, // $4FD4 + #$4FD5, // $4FD5 + #$4FD6, // $4FD6 + #$4FD7, // $4FD7 + #$4FD8, // $4FD8 + #$4FD9, // $4FD9 + #$4FDA, // $4FDA + #$4FDB, // $4FDB + #$4FDC, // $4FDC + #$4FDD, // $4FDD + #$4FDE, // $4FDE + #$4FDF, // $4FDF + #$4FE0, // $4FE0 + #$4FE1, // $4FE1 + #$4FE2, // $4FE2 + #$4FE3, // $4FE3 + #$4FE4, // $4FE4 + #$4FE5, // $4FE5 + #$4FE6, // $4FE6 + #$4FE7, // $4FE7 + #$4FE8, // $4FE8 + #$4FE9, // $4FE9 + #$4FEA, // $4FEA + #$4FEB, // $4FEB + #$4FEC, // $4FEC + #$4FED, // $4FED + #$4FEE, // $4FEE + #$4FEF, // $4FEF + #$4FF0, // $4FF0 + #$4FF1, // $4FF1 + #$4FF2, // $4FF2 + #$4FF3, // $4FF3 + #$4FF4, // $4FF4 + #$4FF5, // $4FF5 + #$4FF6, // $4FF6 + #$4FF7, // $4FF7 + #$4FF8, // $4FF8 + #$4FF9, // $4FF9 + #$4FFA, // $4FFA + #$4FFB, // $4FFB + #$4FFC, // $4FFC + #$4FFD, // $4FFD + #$4FFE, // $4FFE + #$4FFF, // $4FFF + #$5000, // $5000 + #$5001, // $5001 + #$5002, // $5002 + #$5003, // $5003 + #$5004, // $5004 + #$5005, // $5005 + #$5006, // $5006 + #$5007, // $5007 + #$5008, // $5008 + #$5009, // $5009 + #$500A, // $500A + #$500B, // $500B + #$500C, // $500C + #$500D, // $500D + #$500E, // $500E + #$500F, // $500F + #$5010, // $5010 + #$5011, // $5011 + #$5012, // $5012 + #$5013, // $5013 + #$5014, // $5014 + #$5015, // $5015 + #$5016, // $5016 + #$5017, // $5017 + #$5018, // $5018 + #$5019, // $5019 + #$501A, // $501A + #$501B, // $501B + #$501C, // $501C + #$501D, // $501D + #$501E, // $501E + #$501F, // $501F + #$5020, // $5020 + #$5021, // $5021 + #$5022, // $5022 + #$5023, // $5023 + #$5024, // $5024 + #$5025, // $5025 + #$5026, // $5026 + #$5027, // $5027 + #$5028, // $5028 + #$5029, // $5029 + #$502A, // $502A + #$502B, // $502B + #$502C, // $502C + #$502D, // $502D + #$502E, // $502E + #$502F, // $502F + #$5030, // $5030 + #$5031, // $5031 + #$5032, // $5032 + #$5033, // $5033 + #$5034, // $5034 + #$5035, // $5035 + #$5036, // $5036 + #$5037, // $5037 + #$5038, // $5038 + #$5039, // $5039 + #$503A, // $503A + #$503B, // $503B + #$503C, // $503C + #$503D, // $503D + #$503E, // $503E + #$503F, // $503F + #$5040, // $5040 + #$5041, // $5041 + #$5042, // $5042 + #$5043, // $5043 + #$5044, // $5044 + #$5045, // $5045 + #$5046, // $5046 + #$5047, // $5047 + #$5048, // $5048 + #$5049, // $5049 + #$504A, // $504A + #$504B, // $504B + #$504C, // $504C + #$504D, // $504D + #$504E, // $504E + #$504F, // $504F + #$5050, // $5050 + #$5051, // $5051 + #$5052, // $5052 + #$5053, // $5053 + #$5054, // $5054 + #$5055, // $5055 + #$5056, // $5056 + #$5057, // $5057 + #$5058, // $5058 + #$5059, // $5059 + #$505A, // $505A + #$505B, // $505B + #$505C, // $505C + #$505D, // $505D + #$505E, // $505E + #$505F, // $505F + #$5060, // $5060 + #$5061, // $5061 + #$5062, // $5062 + #$5063, // $5063 + #$5064, // $5064 + #$5065, // $5065 + #$5066, // $5066 + #$5067, // $5067 + #$5068, // $5068 + #$5069, // $5069 + #$506A, // $506A + #$506B, // $506B + #$506C, // $506C + #$506D, // $506D + #$506E, // $506E + #$506F, // $506F + #$5070, // $5070 + #$5071, // $5071 + #$5072, // $5072 + #$5073, // $5073 + #$5074, // $5074 + #$5075, // $5075 + #$5076, // $5076 + #$5077, // $5077 + #$5078, // $5078 + #$5079, // $5079 + #$507A, // $507A + #$507B, // $507B + #$507C, // $507C + #$507D, // $507D + #$507E, // $507E + #$507F, // $507F + #$5080, // $5080 + #$5081, // $5081 + #$5082, // $5082 + #$5083, // $5083 + #$5084, // $5084 + #$5085, // $5085 + #$5086, // $5086 + #$5087, // $5087 + #$5088, // $5088 + #$5089, // $5089 + #$508A, // $508A + #$508B, // $508B + #$508C, // $508C + #$508D, // $508D + #$508E, // $508E + #$508F, // $508F + #$5090, // $5090 + #$5091, // $5091 + #$5092, // $5092 + #$5093, // $5093 + #$5094, // $5094 + #$5095, // $5095 + #$5096, // $5096 + #$5097, // $5097 + #$5098, // $5098 + #$5099, // $5099 + #$509A, // $509A + #$509B, // $509B + #$509C, // $509C + #$509D, // $509D + #$509E, // $509E + #$509F, // $509F + #$50A0, // $50A0 + #$50A1, // $50A1 + #$50A2, // $50A2 + #$50A3, // $50A3 + #$50A4, // $50A4 + #$50A5, // $50A5 + #$50A6, // $50A6 + #$50A7, // $50A7 + #$50A8, // $50A8 + #$50A9, // $50A9 + #$50AA, // $50AA + #$50AB, // $50AB + #$50AC, // $50AC + #$50AD, // $50AD + #$50AE, // $50AE + #$50AF, // $50AF + #$50B0, // $50B0 + #$50B1, // $50B1 + #$50B2, // $50B2 + #$50B3, // $50B3 + #$50B4, // $50B4 + #$50B5, // $50B5 + #$50B6, // $50B6 + #$50B7, // $50B7 + #$50B8, // $50B8 + #$50B9, // $50B9 + #$50BA, // $50BA + #$50BB, // $50BB + #$50BC, // $50BC + #$50BD, // $50BD + #$50BE, // $50BE + #$50BF, // $50BF + #$50C0, // $50C0 + #$50C1, // $50C1 + #$50C2, // $50C2 + #$50C3, // $50C3 + #$50C4, // $50C4 + #$50C5, // $50C5 + #$50C6, // $50C6 + #$50C7, // $50C7 + #$50C8, // $50C8 + #$50C9, // $50C9 + #$50CA, // $50CA + #$50CB, // $50CB + #$50CC, // $50CC + #$50CD, // $50CD + #$50CE, // $50CE + #$50CF, // $50CF + #$50D0, // $50D0 + #$50D1, // $50D1 + #$50D2, // $50D2 + #$50D3, // $50D3 + #$50D4, // $50D4 + #$50D5, // $50D5 + #$50D6, // $50D6 + #$50D7, // $50D7 + #$50D8, // $50D8 + #$50D9, // $50D9 + #$50DA, // $50DA + #$50DB, // $50DB + #$50DC, // $50DC + #$50DD, // $50DD + #$50DE, // $50DE + #$50DF, // $50DF + #$50E0, // $50E0 + #$50E1, // $50E1 + #$50E2, // $50E2 + #$50E3, // $50E3 + #$50E4, // $50E4 + #$50E5, // $50E5 + #$50E6, // $50E6 + #$50E7, // $50E7 + #$50E8, // $50E8 + #$50E9, // $50E9 + #$50EA, // $50EA + #$50EB, // $50EB + #$50EC, // $50EC + #$50ED, // $50ED + #$50EE, // $50EE + #$50EF, // $50EF + #$50F0, // $50F0 + #$50F1, // $50F1 + #$50F2, // $50F2 + #$50F3, // $50F3 + #$50F4, // $50F4 + #$50F5, // $50F5 + #$50F6, // $50F6 + #$50F7, // $50F7 + #$50F8, // $50F8 + #$50F9, // $50F9 + #$50FA, // $50FA + #$50FB, // $50FB + #$50FC, // $50FC + #$50FD, // $50FD + #$50FE, // $50FE + #$50FF, // $50FF + #$5100, // $5100 + #$5101, // $5101 + #$5102, // $5102 + #$5103, // $5103 + #$5104, // $5104 + #$5105, // $5105 + #$5106, // $5106 + #$5107, // $5107 + #$5108, // $5108 + #$5109, // $5109 + #$510A, // $510A + #$510B, // $510B + #$510C, // $510C + #$510D, // $510D + #$510E, // $510E + #$510F, // $510F + #$5110, // $5110 + #$5111, // $5111 + #$5112, // $5112 + #$5113, // $5113 + #$5114, // $5114 + #$5115, // $5115 + #$5116, // $5116 + #$5117, // $5117 + #$5118, // $5118 + #$5119, // $5119 + #$511A, // $511A + #$511B, // $511B + #$511C, // $511C + #$511D, // $511D + #$511E, // $511E + #$511F, // $511F + #$5120, // $5120 + #$5121, // $5121 + #$5122, // $5122 + #$5123, // $5123 + #$5124, // $5124 + #$5125, // $5125 + #$5126, // $5126 + #$5127, // $5127 + #$5128, // $5128 + #$5129, // $5129 + #$512A, // $512A + #$512B, // $512B + #$512C, // $512C + #$512D, // $512D + #$512E, // $512E + #$512F, // $512F + #$5130, // $5130 + #$5131, // $5131 + #$5132, // $5132 + #$5133, // $5133 + #$5134, // $5134 + #$5135, // $5135 + #$5136, // $5136 + #$5137, // $5137 + #$5138, // $5138 + #$5139, // $5139 + #$513A, // $513A + #$513B, // $513B + #$513C, // $513C + #$513D, // $513D + #$513E, // $513E + #$513F, // $513F + #$5140, // $5140 + #$5141, // $5141 + #$5142, // $5142 + #$5143, // $5143 + #$5144, // $5144 + #$5145, // $5145 + #$5146, // $5146 + #$5147, // $5147 + #$5148, // $5148 + #$5149, // $5149 + #$514A, // $514A + #$514B, // $514B + #$514C, // $514C + #$514D, // $514D + #$514E, // $514E + #$514F, // $514F + #$5150, // $5150 + #$5151, // $5151 + #$5152, // $5152 + #$5153, // $5153 + #$5154, // $5154 + #$5155, // $5155 + #$5156, // $5156 + #$5157, // $5157 + #$5158, // $5158 + #$5159, // $5159 + #$515A, // $515A + #$515B, // $515B + #$515C, // $515C + #$515D, // $515D + #$515E, // $515E + #$515F, // $515F + #$5160, // $5160 + #$5161, // $5161 + #$5162, // $5162 + #$5163, // $5163 + #$5164, // $5164 + #$5165, // $5165 + #$5166, // $5166 + #$5167, // $5167 + #$5168, // $5168 + #$5169, // $5169 + #$516A, // $516A + #$516B, // $516B + #$516C, // $516C + #$516D, // $516D + #$516E, // $516E + #$516F, // $516F + #$5170, // $5170 + #$5171, // $5171 + #$5172, // $5172 + #$5173, // $5173 + #$5174, // $5174 + #$5175, // $5175 + #$5176, // $5176 + #$5177, // $5177 + #$5178, // $5178 + #$5179, // $5179 + #$517A, // $517A + #$517B, // $517B + #$517C, // $517C + #$517D, // $517D + #$517E, // $517E + #$517F, // $517F + #$5180, // $5180 + #$5181, // $5181 + #$5182, // $5182 + #$5183, // $5183 + #$5184, // $5184 + #$5185, // $5185 + #$5186, // $5186 + #$5187, // $5187 + #$5188, // $5188 + #$5189, // $5189 + #$518A, // $518A + #$518B, // $518B + #$518C, // $518C + #$518D, // $518D + #$518E, // $518E + #$518F, // $518F + #$5190, // $5190 + #$5191, // $5191 + #$5192, // $5192 + #$5193, // $5193 + #$5194, // $5194 + #$5195, // $5195 + #$5196, // $5196 + #$5197, // $5197 + #$5198, // $5198 + #$5199, // $5199 + #$519A, // $519A + #$519B, // $519B + #$519C, // $519C + #$519D, // $519D + #$519E, // $519E + #$519F, // $519F + #$51A0, // $51A0 + #$51A1, // $51A1 + #$51A2, // $51A2 + #$51A3, // $51A3 + #$51A4, // $51A4 + #$51A5, // $51A5 + #$51A6, // $51A6 + #$51A7, // $51A7 + #$51A8, // $51A8 + #$51A9, // $51A9 + #$51AA, // $51AA + #$51AB, // $51AB + #$51AC, // $51AC + #$51AD, // $51AD + #$51AE, // $51AE + #$51AF, // $51AF + #$51B0, // $51B0 + #$51B1, // $51B1 + #$51B2, // $51B2 + #$51B3, // $51B3 + #$51B4, // $51B4 + #$51B5, // $51B5 + #$51B6, // $51B6 + #$51B7, // $51B7 + #$51B8, // $51B8 + #$51B9, // $51B9 + #$51BA, // $51BA + #$51BB, // $51BB + #$51BC, // $51BC + #$51BD, // $51BD + #$51BE, // $51BE + #$51BF, // $51BF + #$51C0, // $51C0 + #$51C1, // $51C1 + #$51C2, // $51C2 + #$51C3, // $51C3 + #$51C4, // $51C4 + #$51C5, // $51C5 + #$51C6, // $51C6 + #$51C7, // $51C7 + #$51C8, // $51C8 + #$51C9, // $51C9 + #$51CA, // $51CA + #$51CB, // $51CB + #$51CC, // $51CC + #$51CD, // $51CD + #$51CE, // $51CE + #$51CF, // $51CF + #$51D0, // $51D0 + #$51D1, // $51D1 + #$51D2, // $51D2 + #$51D3, // $51D3 + #$51D4, // $51D4 + #$51D5, // $51D5 + #$51D6, // $51D6 + #$51D7, // $51D7 + #$51D8, // $51D8 + #$51D9, // $51D9 + #$51DA, // $51DA + #$51DB, // $51DB + #$51DC, // $51DC + #$51DD, // $51DD + #$51DE, // $51DE + #$51DF, // $51DF + #$51E0, // $51E0 + #$51E1, // $51E1 + #$51E2, // $51E2 + #$51E3, // $51E3 + #$51E4, // $51E4 + #$51E5, // $51E5 + #$51E6, // $51E6 + #$51E7, // $51E7 + #$51E8, // $51E8 + #$51E9, // $51E9 + #$51EA, // $51EA + #$51EB, // $51EB + #$51EC, // $51EC + #$51ED, // $51ED + #$51EE, // $51EE + #$51EF, // $51EF + #$51F0, // $51F0 + #$51F1, // $51F1 + #$51F2, // $51F2 + #$51F3, // $51F3 + #$51F4, // $51F4 + #$51F5, // $51F5 + #$51F6, // $51F6 + #$51F7, // $51F7 + #$51F8, // $51F8 + #$51F9, // $51F9 + #$51FA, // $51FA + #$51FB, // $51FB + #$51FC, // $51FC + #$51FD, // $51FD + #$51FE, // $51FE + #$51FF, // $51FF + #$5200, // $5200 + #$5201, // $5201 + #$5202, // $5202 + #$5203, // $5203 + #$5204, // $5204 + #$5205, // $5205 + #$5206, // $5206 + #$5207, // $5207 + #$5208, // $5208 + #$5209, // $5209 + #$520A, // $520A + #$520B, // $520B + #$520C, // $520C + #$520D, // $520D + #$520E, // $520E + #$520F, // $520F + #$5210, // $5210 + #$5211, // $5211 + #$5212, // $5212 + #$5213, // $5213 + #$5214, // $5214 + #$5215, // $5215 + #$5216, // $5216 + #$5217, // $5217 + #$5218, // $5218 + #$5219, // $5219 + #$521A, // $521A + #$521B, // $521B + #$521C, // $521C + #$521D, // $521D + #$521E, // $521E + #$521F, // $521F + #$5220, // $5220 + #$5221, // $5221 + #$5222, // $5222 + #$5223, // $5223 + #$5224, // $5224 + #$5225, // $5225 + #$5226, // $5226 + #$5227, // $5227 + #$5228, // $5228 + #$5229, // $5229 + #$522A, // $522A + #$522B, // $522B + #$522C, // $522C + #$522D, // $522D + #$522E, // $522E + #$522F, // $522F + #$5230, // $5230 + #$5231, // $5231 + #$5232, // $5232 + #$5233, // $5233 + #$5234, // $5234 + #$5235, // $5235 + #$5236, // $5236 + #$5237, // $5237 + #$5238, // $5238 + #$5239, // $5239 + #$523A, // $523A + #$523B, // $523B + #$523C, // $523C + #$523D, // $523D + #$523E, // $523E + #$523F, // $523F + #$5240, // $5240 + #$5241, // $5241 + #$5242, // $5242 + #$5243, // $5243 + #$5244, // $5244 + #$5245, // $5245 + #$5246, // $5246 + #$5247, // $5247 + #$5248, // $5248 + #$5249, // $5249 + #$524A, // $524A + #$524B, // $524B + #$524C, // $524C + #$524D, // $524D + #$524E, // $524E + #$524F, // $524F + #$5250, // $5250 + #$5251, // $5251 + #$5252, // $5252 + #$5253, // $5253 + #$5254, // $5254 + #$5255, // $5255 + #$5256, // $5256 + #$5257, // $5257 + #$5258, // $5258 + #$5259, // $5259 + #$525A, // $525A + #$525B, // $525B + #$525C, // $525C + #$525D, // $525D + #$525E, // $525E + #$525F, // $525F + #$5260, // $5260 + #$5261, // $5261 + #$5262, // $5262 + #$5263, // $5263 + #$5264, // $5264 + #$5265, // $5265 + #$5266, // $5266 + #$5267, // $5267 + #$5268, // $5268 + #$5269, // $5269 + #$526A, // $526A + #$526B, // $526B + #$526C, // $526C + #$526D, // $526D + #$526E, // $526E + #$526F, // $526F + #$5270, // $5270 + #$5271, // $5271 + #$5272, // $5272 + #$5273, // $5273 + #$5274, // $5274 + #$5275, // $5275 + #$5276, // $5276 + #$5277, // $5277 + #$5278, // $5278 + #$5279, // $5279 + #$527A, // $527A + #$527B, // $527B + #$527C, // $527C + #$527D, // $527D + #$527E, // $527E + #$527F, // $527F + #$5280, // $5280 + #$5281, // $5281 + #$5282, // $5282 + #$5283, // $5283 + #$5284, // $5284 + #$5285, // $5285 + #$5286, // $5286 + #$5287, // $5287 + #$5288, // $5288 + #$5289, // $5289 + #$528A, // $528A + #$528B, // $528B + #$528C, // $528C + #$528D, // $528D + #$528E, // $528E + #$528F, // $528F + #$5290, // $5290 + #$5291, // $5291 + #$5292, // $5292 + #$5293, // $5293 + #$5294, // $5294 + #$5295, // $5295 + #$5296, // $5296 + #$5297, // $5297 + #$5298, // $5298 + #$5299, // $5299 + #$529A, // $529A + #$529B, // $529B + #$529C, // $529C + #$529D, // $529D + #$529E, // $529E + #$529F, // $529F + #$52A0, // $52A0 + #$52A1, // $52A1 + #$52A2, // $52A2 + #$52A3, // $52A3 + #$52A4, // $52A4 + #$52A5, // $52A5 + #$52A6, // $52A6 + #$52A7, // $52A7 + #$52A8, // $52A8 + #$52A9, // $52A9 + #$52AA, // $52AA + #$52AB, // $52AB + #$52AC, // $52AC + #$52AD, // $52AD + #$52AE, // $52AE + #$52AF, // $52AF + #$52B0, // $52B0 + #$52B1, // $52B1 + #$52B2, // $52B2 + #$52B3, // $52B3 + #$52B4, // $52B4 + #$52B5, // $52B5 + #$52B6, // $52B6 + #$52B7, // $52B7 + #$52B8, // $52B8 + #$52B9, // $52B9 + #$52BA, // $52BA + #$52BB, // $52BB + #$52BC, // $52BC + #$52BD, // $52BD + #$52BE, // $52BE + #$52BF, // $52BF + #$52C0, // $52C0 + #$52C1, // $52C1 + #$52C2, // $52C2 + #$52C3, // $52C3 + #$52C4, // $52C4 + #$52C5, // $52C5 + #$52C6, // $52C6 + #$52C7, // $52C7 + #$52C8, // $52C8 + #$52C9, // $52C9 + #$52CA, // $52CA + #$52CB, // $52CB + #$52CC, // $52CC + #$52CD, // $52CD + #$52CE, // $52CE + #$52CF, // $52CF + #$52D0, // $52D0 + #$52D1, // $52D1 + #$52D2, // $52D2 + #$52D3, // $52D3 + #$52D4, // $52D4 + #$52D5, // $52D5 + #$52D6, // $52D6 + #$52D7, // $52D7 + #$52D8, // $52D8 + #$52D9, // $52D9 + #$52DA, // $52DA + #$52DB, // $52DB + #$52DC, // $52DC + #$52DD, // $52DD + #$52DE, // $52DE + #$52DF, // $52DF + #$52E0, // $52E0 + #$52E1, // $52E1 + #$52E2, // $52E2 + #$52E3, // $52E3 + #$52E4, // $52E4 + #$52E5, // $52E5 + #$52E6, // $52E6 + #$52E7, // $52E7 + #$52E8, // $52E8 + #$52E9, // $52E9 + #$52EA, // $52EA + #$52EB, // $52EB + #$52EC, // $52EC + #$52ED, // $52ED + #$52EE, // $52EE + #$52EF, // $52EF + #$52F0, // $52F0 + #$52F1, // $52F1 + #$52F2, // $52F2 + #$52F3, // $52F3 + #$52F4, // $52F4 + #$52F5, // $52F5 + #$52F6, // $52F6 + #$52F7, // $52F7 + #$52F8, // $52F8 + #$52F9, // $52F9 + #$52FA, // $52FA + #$52FB, // $52FB + #$52FC, // $52FC + #$52FD, // $52FD + #$52FE, // $52FE + #$52FF, // $52FF + #$5300, // $5300 + #$5301, // $5301 + #$5302, // $5302 + #$5303, // $5303 + #$5304, // $5304 + #$5305, // $5305 + #$5306, // $5306 + #$5307, // $5307 + #$5308, // $5308 + #$5309, // $5309 + #$530A, // $530A + #$530B, // $530B + #$530C, // $530C + #$530D, // $530D + #$530E, // $530E + #$530F, // $530F + #$5310, // $5310 + #$5311, // $5311 + #$5312, // $5312 + #$5313, // $5313 + #$5314, // $5314 + #$5315, // $5315 + #$5316, // $5316 + #$5317, // $5317 + #$5318, // $5318 + #$5319, // $5319 + #$531A, // $531A + #$531B, // $531B + #$531C, // $531C + #$531D, // $531D + #$531E, // $531E + #$531F, // $531F + #$5320, // $5320 + #$5321, // $5321 + #$5322, // $5322 + #$5323, // $5323 + #$5324, // $5324 + #$5325, // $5325 + #$5326, // $5326 + #$5327, // $5327 + #$5328, // $5328 + #$5329, // $5329 + #$532A, // $532A + #$532B, // $532B + #$532C, // $532C + #$532D, // $532D + #$532E, // $532E + #$532F, // $532F + #$5330, // $5330 + #$5331, // $5331 + #$5332, // $5332 + #$5333, // $5333 + #$5334, // $5334 + #$5335, // $5335 + #$5336, // $5336 + #$5337, // $5337 + #$5338, // $5338 + #$5339, // $5339 + #$533A, // $533A + #$533B, // $533B + #$533C, // $533C + #$533D, // $533D + #$533E, // $533E + #$533F, // $533F + #$5340, // $5340 + #$5341, // $5341 + #$5342, // $5342 + #$5343, // $5343 + #$5344, // $5344 + #$5345, // $5345 + #$5346, // $5346 + #$5347, // $5347 + #$5348, // $5348 + #$5349, // $5349 + #$534A, // $534A + #$534B, // $534B + #$534C, // $534C + #$534D, // $534D + #$534E, // $534E + #$534F, // $534F + #$5350, // $5350 + #$5351, // $5351 + #$5352, // $5352 + #$5353, // $5353 + #$5354, // $5354 + #$5355, // $5355 + #$5356, // $5356 + #$5357, // $5357 + #$5358, // $5358 + #$5359, // $5359 + #$535A, // $535A + #$535B, // $535B + #$535C, // $535C + #$535D, // $535D + #$535E, // $535E + #$535F, // $535F + #$5360, // $5360 + #$5361, // $5361 + #$5362, // $5362 + #$5363, // $5363 + #$5364, // $5364 + #$5365, // $5365 + #$5366, // $5366 + #$5367, // $5367 + #$5368, // $5368 + #$5369, // $5369 + #$536A, // $536A + #$536B, // $536B + #$536C, // $536C + #$536D, // $536D + #$536E, // $536E + #$536F, // $536F + #$5370, // $5370 + #$5371, // $5371 + #$5372, // $5372 + #$5373, // $5373 + #$5374, // $5374 + #$5375, // $5375 + #$5376, // $5376 + #$5377, // $5377 + #$5378, // $5378 + #$5379, // $5379 + #$537A, // $537A + #$537B, // $537B + #$537C, // $537C + #$537D, // $537D + #$537E, // $537E + #$537F, // $537F + #$5380, // $5380 + #$5381, // $5381 + #$5382, // $5382 + #$5383, // $5383 + #$5384, // $5384 + #$5385, // $5385 + #$5386, // $5386 + #$5387, // $5387 + #$5388, // $5388 + #$5389, // $5389 + #$538A, // $538A + #$538B, // $538B + #$538C, // $538C + #$538D, // $538D + #$538E, // $538E + #$538F, // $538F + #$5390, // $5390 + #$5391, // $5391 + #$5392, // $5392 + #$5393, // $5393 + #$5394, // $5394 + #$5395, // $5395 + #$5396, // $5396 + #$5397, // $5397 + #$5398, // $5398 + #$5399, // $5399 + #$539A, // $539A + #$539B, // $539B + #$539C, // $539C + #$539D, // $539D + #$539E, // $539E + #$539F, // $539F + #$53A0, // $53A0 + #$53A1, // $53A1 + #$53A2, // $53A2 + #$53A3, // $53A3 + #$53A4, // $53A4 + #$53A5, // $53A5 + #$53A6, // $53A6 + #$53A7, // $53A7 + #$53A8, // $53A8 + #$53A9, // $53A9 + #$53AA, // $53AA + #$53AB, // $53AB + #$53AC, // $53AC + #$53AD, // $53AD + #$53AE, // $53AE + #$53AF, // $53AF + #$53B0, // $53B0 + #$53B1, // $53B1 + #$53B2, // $53B2 + #$53B3, // $53B3 + #$53B4, // $53B4 + #$53B5, // $53B5 + #$53B6, // $53B6 + #$53B7, // $53B7 + #$53B8, // $53B8 + #$53B9, // $53B9 + #$53BA, // $53BA + #$53BB, // $53BB + #$53BC, // $53BC + #$53BD, // $53BD + #$53BE, // $53BE + #$53BF, // $53BF + #$53C0, // $53C0 + #$53C1, // $53C1 + #$53C2, // $53C2 + #$53C3, // $53C3 + #$53C4, // $53C4 + #$53C5, // $53C5 + #$53C6, // $53C6 + #$53C7, // $53C7 + #$53C8, // $53C8 + #$53C9, // $53C9 + #$53CA, // $53CA + #$53CB, // $53CB + #$53CC, // $53CC + #$53CD, // $53CD + #$53CE, // $53CE + #$53CF, // $53CF + #$53D0, // $53D0 + #$53D1, // $53D1 + #$53D2, // $53D2 + #$53D3, // $53D3 + #$53D4, // $53D4 + #$53D5, // $53D5 + #$53D6, // $53D6 + #$53D7, // $53D7 + #$53D8, // $53D8 + #$53D9, // $53D9 + #$53DA, // $53DA + #$53DB, // $53DB + #$53DC, // $53DC + #$53DD, // $53DD + #$53DE, // $53DE + #$53DF, // $53DF + #$53E0, // $53E0 + #$53E1, // $53E1 + #$53E2, // $53E2 + #$53E3, // $53E3 + #$53E4, // $53E4 + #$53E5, // $53E5 + #$53E6, // $53E6 + #$53E7, // $53E7 + #$53E8, // $53E8 + #$53E9, // $53E9 + #$53EA, // $53EA + #$53EB, // $53EB + #$53EC, // $53EC + #$53ED, // $53ED + #$53EE, // $53EE + #$53EF, // $53EF + #$53F0, // $53F0 + #$53F1, // $53F1 + #$53F2, // $53F2 + #$53F3, // $53F3 + #$53F4, // $53F4 + #$53F5, // $53F5 + #$53F6, // $53F6 + #$53F7, // $53F7 + #$53F8, // $53F8 + #$53F9, // $53F9 + #$53FA, // $53FA + #$53FB, // $53FB + #$53FC, // $53FC + #$53FD, // $53FD + #$53FE, // $53FE + #$53FF, // $53FF + #$5400, // $5400 + #$5401, // $5401 + #$5402, // $5402 + #$5403, // $5403 + #$5404, // $5404 + #$5405, // $5405 + #$5406, // $5406 + #$5407, // $5407 + #$5408, // $5408 + #$5409, // $5409 + #$540A, // $540A + #$540B, // $540B + #$540C, // $540C + #$540D, // $540D + #$540E, // $540E + #$540F, // $540F + #$5410, // $5410 + #$5411, // $5411 + #$5412, // $5412 + #$5413, // $5413 + #$5414, // $5414 + #$5415, // $5415 + #$5416, // $5416 + #$5417, // $5417 + #$5418, // $5418 + #$5419, // $5419 + #$541A, // $541A + #$541B, // $541B + #$541C, // $541C + #$541D, // $541D + #$541E, // $541E + #$541F, // $541F + #$5420, // $5420 + #$5421, // $5421 + #$5422, // $5422 + #$5423, // $5423 + #$5424, // $5424 + #$5425, // $5425 + #$5426, // $5426 + #$5427, // $5427 + #$5428, // $5428 + #$5429, // $5429 + #$542A, // $542A + #$542B, // $542B + #$542C, // $542C + #$542D, // $542D + #$542E, // $542E + #$542F, // $542F + #$5430, // $5430 + #$5431, // $5431 + #$5432, // $5432 + #$5433, // $5433 + #$5434, // $5434 + #$5435, // $5435 + #$5436, // $5436 + #$5437, // $5437 + #$5438, // $5438 + #$5439, // $5439 + #$543A, // $543A + #$543B, // $543B + #$543C, // $543C + #$543D, // $543D + #$543E, // $543E + #$543F, // $543F + #$5440, // $5440 + #$5441, // $5441 + #$5442, // $5442 + #$5443, // $5443 + #$5444, // $5444 + #$5445, // $5445 + #$5446, // $5446 + #$5447, // $5447 + #$5448, // $5448 + #$5449, // $5449 + #$544A, // $544A + #$544B, // $544B + #$544C, // $544C + #$544D, // $544D + #$544E, // $544E + #$544F, // $544F + #$5450, // $5450 + #$5451, // $5451 + #$5452, // $5452 + #$5453, // $5453 + #$5454, // $5454 + #$5455, // $5455 + #$5456, // $5456 + #$5457, // $5457 + #$5458, // $5458 + #$5459, // $5459 + #$545A, // $545A + #$545B, // $545B + #$545C, // $545C + #$545D, // $545D + #$545E, // $545E + #$545F, // $545F + #$5460, // $5460 + #$5461, // $5461 + #$5462, // $5462 + #$5463, // $5463 + #$5464, // $5464 + #$5465, // $5465 + #$5466, // $5466 + #$5467, // $5467 + #$5468, // $5468 + #$5469, // $5469 + #$546A, // $546A + #$546B, // $546B + #$546C, // $546C + #$546D, // $546D + #$546E, // $546E + #$546F, // $546F + #$5470, // $5470 + #$5471, // $5471 + #$5472, // $5472 + #$5473, // $5473 + #$5474, // $5474 + #$5475, // $5475 + #$5476, // $5476 + #$5477, // $5477 + #$5478, // $5478 + #$5479, // $5479 + #$547A, // $547A + #$547B, // $547B + #$547C, // $547C + #$547D, // $547D + #$547E, // $547E + #$547F, // $547F + #$5480, // $5480 + #$5481, // $5481 + #$5482, // $5482 + #$5483, // $5483 + #$5484, // $5484 + #$5485, // $5485 + #$5486, // $5486 + #$5487, // $5487 + #$5488, // $5488 + #$5489, // $5489 + #$548A, // $548A + #$548B, // $548B + #$548C, // $548C + #$548D, // $548D + #$548E, // $548E + #$548F, // $548F + #$5490, // $5490 + #$5491, // $5491 + #$5492, // $5492 + #$5493, // $5493 + #$5494, // $5494 + #$5495, // $5495 + #$5496, // $5496 + #$5497, // $5497 + #$5498, // $5498 + #$5499, // $5499 + #$549A, // $549A + #$549B, // $549B + #$549C, // $549C + #$549D, // $549D + #$549E, // $549E + #$549F, // $549F + #$54A0, // $54A0 + #$54A1, // $54A1 + #$54A2, // $54A2 + #$54A3, // $54A3 + #$54A4, // $54A4 + #$54A5, // $54A5 + #$54A6, // $54A6 + #$54A7, // $54A7 + #$54A8, // $54A8 + #$54A9, // $54A9 + #$54AA, // $54AA + #$54AB, // $54AB + #$54AC, // $54AC + #$54AD, // $54AD + #$54AE, // $54AE + #$54AF, // $54AF + #$54B0, // $54B0 + #$54B1, // $54B1 + #$54B2, // $54B2 + #$54B3, // $54B3 + #$54B4, // $54B4 + #$54B5, // $54B5 + #$54B6, // $54B6 + #$54B7, // $54B7 + #$54B8, // $54B8 + #$54B9, // $54B9 + #$54BA, // $54BA + #$54BB, // $54BB + #$54BC, // $54BC + #$54BD, // $54BD + #$54BE, // $54BE + #$54BF, // $54BF + #$54C0, // $54C0 + #$54C1, // $54C1 + #$54C2, // $54C2 + #$54C3, // $54C3 + #$54C4, // $54C4 + #$54C5, // $54C5 + #$54C6, // $54C6 + #$54C7, // $54C7 + #$54C8, // $54C8 + #$54C9, // $54C9 + #$54CA, // $54CA + #$54CB, // $54CB + #$54CC, // $54CC + #$54CD, // $54CD + #$54CE, // $54CE + #$54CF, // $54CF + #$54D0, // $54D0 + #$54D1, // $54D1 + #$54D2, // $54D2 + #$54D3, // $54D3 + #$54D4, // $54D4 + #$54D5, // $54D5 + #$54D6, // $54D6 + #$54D7, // $54D7 + #$54D8, // $54D8 + #$54D9, // $54D9 + #$54DA, // $54DA + #$54DB, // $54DB + #$54DC, // $54DC + #$54DD, // $54DD + #$54DE, // $54DE + #$54DF, // $54DF + #$54E0, // $54E0 + #$54E1, // $54E1 + #$54E2, // $54E2 + #$54E3, // $54E3 + #$54E4, // $54E4 + #$54E5, // $54E5 + #$54E6, // $54E6 + #$54E7, // $54E7 + #$54E8, // $54E8 + #$54E9, // $54E9 + #$54EA, // $54EA + #$54EB, // $54EB + #$54EC, // $54EC + #$54ED, // $54ED + #$54EE, // $54EE + #$54EF, // $54EF + #$54F0, // $54F0 + #$54F1, // $54F1 + #$54F2, // $54F2 + #$54F3, // $54F3 + #$54F4, // $54F4 + #$54F5, // $54F5 + #$54F6, // $54F6 + #$54F7, // $54F7 + #$54F8, // $54F8 + #$54F9, // $54F9 + #$54FA, // $54FA + #$54FB, // $54FB + #$54FC, // $54FC + #$54FD, // $54FD + #$54FE, // $54FE + #$54FF, // $54FF + #$5500, // $5500 + #$5501, // $5501 + #$5502, // $5502 + #$5503, // $5503 + #$5504, // $5504 + #$5505, // $5505 + #$5506, // $5506 + #$5507, // $5507 + #$5508, // $5508 + #$5509, // $5509 + #$550A, // $550A + #$550B, // $550B + #$550C, // $550C + #$550D, // $550D + #$550E, // $550E + #$550F, // $550F + #$5510, // $5510 + #$5511, // $5511 + #$5512, // $5512 + #$5513, // $5513 + #$5514, // $5514 + #$5515, // $5515 + #$5516, // $5516 + #$5517, // $5517 + #$5518, // $5518 + #$5519, // $5519 + #$551A, // $551A + #$551B, // $551B + #$551C, // $551C + #$551D, // $551D + #$551E, // $551E + #$551F, // $551F + #$5520, // $5520 + #$5521, // $5521 + #$5522, // $5522 + #$5523, // $5523 + #$5524, // $5524 + #$5525, // $5525 + #$5526, // $5526 + #$5527, // $5527 + #$5528, // $5528 + #$5529, // $5529 + #$552A, // $552A + #$552B, // $552B + #$552C, // $552C + #$552D, // $552D + #$552E, // $552E + #$552F, // $552F + #$5530, // $5530 + #$5531, // $5531 + #$5532, // $5532 + #$5533, // $5533 + #$5534, // $5534 + #$5535, // $5535 + #$5536, // $5536 + #$5537, // $5537 + #$5538, // $5538 + #$5539, // $5539 + #$553A, // $553A + #$553B, // $553B + #$553C, // $553C + #$553D, // $553D + #$553E, // $553E + #$553F, // $553F + #$5540, // $5540 + #$5541, // $5541 + #$5542, // $5542 + #$5543, // $5543 + #$5544, // $5544 + #$5545, // $5545 + #$5546, // $5546 + #$5547, // $5547 + #$5548, // $5548 + #$5549, // $5549 + #$554A, // $554A + #$554B, // $554B + #$554C, // $554C + #$554D, // $554D + #$554E, // $554E + #$554F, // $554F + #$5550, // $5550 + #$5551, // $5551 + #$5552, // $5552 + #$5553, // $5553 + #$5554, // $5554 + #$5555, // $5555 + #$5556, // $5556 + #$5557, // $5557 + #$5558, // $5558 + #$5559, // $5559 + #$555A, // $555A + #$555B, // $555B + #$555C, // $555C + #$555D, // $555D + #$555E, // $555E + #$555F, // $555F + #$5560, // $5560 + #$5561, // $5561 + #$5562, // $5562 + #$5563, // $5563 + #$5564, // $5564 + #$5565, // $5565 + #$5566, // $5566 + #$5567, // $5567 + #$5568, // $5568 + #$5569, // $5569 + #$556A, // $556A + #$556B, // $556B + #$556C, // $556C + #$556D, // $556D + #$556E, // $556E + #$556F, // $556F + #$5570, // $5570 + #$5571, // $5571 + #$5572, // $5572 + #$5573, // $5573 + #$5574, // $5574 + #$5575, // $5575 + #$5576, // $5576 + #$5577, // $5577 + #$5578, // $5578 + #$5579, // $5579 + #$557A, // $557A + #$557B, // $557B + #$557C, // $557C + #$557D, // $557D + #$557E, // $557E + #$557F, // $557F + #$5580, // $5580 + #$5581, // $5581 + #$5582, // $5582 + #$5583, // $5583 + #$5584, // $5584 + #$5585, // $5585 + #$5586, // $5586 + #$5587, // $5587 + #$5588, // $5588 + #$5589, // $5589 + #$558A, // $558A + #$558B, // $558B + #$558C, // $558C + #$558D, // $558D + #$558E, // $558E + #$558F, // $558F + #$5590, // $5590 + #$5591, // $5591 + #$5592, // $5592 + #$5593, // $5593 + #$5594, // $5594 + #$5595, // $5595 + #$5596, // $5596 + #$5597, // $5597 + #$5598, // $5598 + #$5599, // $5599 + #$559A, // $559A + #$559B, // $559B + #$559C, // $559C + #$559D, // $559D + #$559E, // $559E + #$559F, // $559F + #$55A0, // $55A0 + #$55A1, // $55A1 + #$55A2, // $55A2 + #$55A3, // $55A3 + #$55A4, // $55A4 + #$55A5, // $55A5 + #$55A6, // $55A6 + #$55A7, // $55A7 + #$55A8, // $55A8 + #$55A9, // $55A9 + #$55AA, // $55AA + #$55AB, // $55AB + #$55AC, // $55AC + #$55AD, // $55AD + #$55AE, // $55AE + #$55AF, // $55AF + #$55B0, // $55B0 + #$55B1, // $55B1 + #$55B2, // $55B2 + #$55B3, // $55B3 + #$55B4, // $55B4 + #$55B5, // $55B5 + #$55B6, // $55B6 + #$55B7, // $55B7 + #$55B8, // $55B8 + #$55B9, // $55B9 + #$55BA, // $55BA + #$55BB, // $55BB + #$55BC, // $55BC + #$55BD, // $55BD + #$55BE, // $55BE + #$55BF, // $55BF + #$55C0, // $55C0 + #$55C1, // $55C1 + #$55C2, // $55C2 + #$55C3, // $55C3 + #$55C4, // $55C4 + #$55C5, // $55C5 + #$55C6, // $55C6 + #$55C7, // $55C7 + #$55C8, // $55C8 + #$55C9, // $55C9 + #$55CA, // $55CA + #$55CB, // $55CB + #$55CC, // $55CC + #$55CD, // $55CD + #$55CE, // $55CE + #$55CF, // $55CF + #$55D0, // $55D0 + #$55D1, // $55D1 + #$55D2, // $55D2 + #$55D3, // $55D3 + #$55D4, // $55D4 + #$55D5, // $55D5 + #$55D6, // $55D6 + #$55D7, // $55D7 + #$55D8, // $55D8 + #$55D9, // $55D9 + #$55DA, // $55DA + #$55DB, // $55DB + #$55DC, // $55DC + #$55DD, // $55DD + #$55DE, // $55DE + #$55DF, // $55DF + #$55E0, // $55E0 + #$55E1, // $55E1 + #$55E2, // $55E2 + #$55E3, // $55E3 + #$55E4, // $55E4 + #$55E5, // $55E5 + #$55E6, // $55E6 + #$55E7, // $55E7 + #$55E8, // $55E8 + #$55E9, // $55E9 + #$55EA, // $55EA + #$55EB, // $55EB + #$55EC, // $55EC + #$55ED, // $55ED + #$55EE, // $55EE + #$55EF, // $55EF + #$55F0, // $55F0 + #$55F1, // $55F1 + #$55F2, // $55F2 + #$55F3, // $55F3 + #$55F4, // $55F4 + #$55F5, // $55F5 + #$55F6, // $55F6 + #$55F7, // $55F7 + #$55F8, // $55F8 + #$55F9, // $55F9 + #$55FA, // $55FA + #$55FB, // $55FB + #$55FC, // $55FC + #$55FD, // $55FD + #$55FE, // $55FE + #$55FF, // $55FF + #$5600, // $5600 + #$5601, // $5601 + #$5602, // $5602 + #$5603, // $5603 + #$5604, // $5604 + #$5605, // $5605 + #$5606, // $5606 + #$5607, // $5607 + #$5608, // $5608 + #$5609, // $5609 + #$560A, // $560A + #$560B, // $560B + #$560C, // $560C + #$560D, // $560D + #$560E, // $560E + #$560F, // $560F + #$5610, // $5610 + #$5611, // $5611 + #$5612, // $5612 + #$5613, // $5613 + #$5614, // $5614 + #$5615, // $5615 + #$5616, // $5616 + #$5617, // $5617 + #$5618, // $5618 + #$5619, // $5619 + #$561A, // $561A + #$561B, // $561B + #$561C, // $561C + #$561D, // $561D + #$561E, // $561E + #$561F, // $561F + #$5620, // $5620 + #$5621, // $5621 + #$5622, // $5622 + #$5623, // $5623 + #$5624, // $5624 + #$5625, // $5625 + #$5626, // $5626 + #$5627, // $5627 + #$5628, // $5628 + #$5629, // $5629 + #$562A, // $562A + #$562B, // $562B + #$562C, // $562C + #$562D, // $562D + #$562E, // $562E + #$562F, // $562F + #$5630, // $5630 + #$5631, // $5631 + #$5632, // $5632 + #$5633, // $5633 + #$5634, // $5634 + #$5635, // $5635 + #$5636, // $5636 + #$5637, // $5637 + #$5638, // $5638 + #$5639, // $5639 + #$563A, // $563A + #$563B, // $563B + #$563C, // $563C + #$563D, // $563D + #$563E, // $563E + #$563F, // $563F + #$5640, // $5640 + #$5641, // $5641 + #$5642, // $5642 + #$5643, // $5643 + #$5644, // $5644 + #$5645, // $5645 + #$5646, // $5646 + #$5647, // $5647 + #$5648, // $5648 + #$5649, // $5649 + #$564A, // $564A + #$564B, // $564B + #$564C, // $564C + #$564D, // $564D + #$564E, // $564E + #$564F, // $564F + #$5650, // $5650 + #$5651, // $5651 + #$5652, // $5652 + #$5653, // $5653 + #$5654, // $5654 + #$5655, // $5655 + #$5656, // $5656 + #$5657, // $5657 + #$5658, // $5658 + #$5659, // $5659 + #$565A, // $565A + #$565B, // $565B + #$565C, // $565C + #$565D, // $565D + #$565E, // $565E + #$565F, // $565F + #$5660, // $5660 + #$5661, // $5661 + #$5662, // $5662 + #$5663, // $5663 + #$5664, // $5664 + #$5665, // $5665 + #$5666, // $5666 + #$5667, // $5667 + #$5668, // $5668 + #$5669, // $5669 + #$566A, // $566A + #$566B, // $566B + #$566C, // $566C + #$566D, // $566D + #$566E, // $566E + #$566F, // $566F + #$5670, // $5670 + #$5671, // $5671 + #$5672, // $5672 + #$5673, // $5673 + #$5674, // $5674 + #$5675, // $5675 + #$5676, // $5676 + #$5677, // $5677 + #$5678, // $5678 + #$5679, // $5679 + #$567A, // $567A + #$567B, // $567B + #$567C, // $567C + #$567D, // $567D + #$567E, // $567E + #$567F, // $567F + #$5680, // $5680 + #$5681, // $5681 + #$5682, // $5682 + #$5683, // $5683 + #$5684, // $5684 + #$5685, // $5685 + #$5686, // $5686 + #$5687, // $5687 + #$5688, // $5688 + #$5689, // $5689 + #$568A, // $568A + #$568B, // $568B + #$568C, // $568C + #$568D, // $568D + #$568E, // $568E + #$568F, // $568F + #$5690, // $5690 + #$5691, // $5691 + #$5692, // $5692 + #$5693, // $5693 + #$5694, // $5694 + #$5695, // $5695 + #$5696, // $5696 + #$5697, // $5697 + #$5698, // $5698 + #$5699, // $5699 + #$569A, // $569A + #$569B, // $569B + #$569C, // $569C + #$569D, // $569D + #$569E, // $569E + #$569F, // $569F + #$56A0, // $56A0 + #$56A1, // $56A1 + #$56A2, // $56A2 + #$56A3, // $56A3 + #$56A4, // $56A4 + #$56A5, // $56A5 + #$56A6, // $56A6 + #$56A7, // $56A7 + #$56A8, // $56A8 + #$56A9, // $56A9 + #$56AA, // $56AA + #$56AB, // $56AB + #$56AC, // $56AC + #$56AD, // $56AD + #$56AE, // $56AE + #$56AF, // $56AF + #$56B0, // $56B0 + #$56B1, // $56B1 + #$56B2, // $56B2 + #$56B3, // $56B3 + #$56B4, // $56B4 + #$56B5, // $56B5 + #$56B6, // $56B6 + #$56B7, // $56B7 + #$56B8, // $56B8 + #$56B9, // $56B9 + #$56BA, // $56BA + #$56BB, // $56BB + #$56BC, // $56BC + #$56BD, // $56BD + #$56BE, // $56BE + #$56BF, // $56BF + #$56C0, // $56C0 + #$56C1, // $56C1 + #$56C2, // $56C2 + #$56C3, // $56C3 + #$56C4, // $56C4 + #$56C5, // $56C5 + #$56C6, // $56C6 + #$56C7, // $56C7 + #$56C8, // $56C8 + #$56C9, // $56C9 + #$56CA, // $56CA + #$56CB, // $56CB + #$56CC, // $56CC + #$56CD, // $56CD + #$56CE, // $56CE + #$56CF, // $56CF + #$56D0, // $56D0 + #$56D1, // $56D1 + #$56D2, // $56D2 + #$56D3, // $56D3 + #$56D4, // $56D4 + #$56D5, // $56D5 + #$56D6, // $56D6 + #$56D7, // $56D7 + #$56D8, // $56D8 + #$56D9, // $56D9 + #$56DA, // $56DA + #$56DB, // $56DB + #$56DC, // $56DC + #$56DD, // $56DD + #$56DE, // $56DE + #$56DF, // $56DF + #$56E0, // $56E0 + #$56E1, // $56E1 + #$56E2, // $56E2 + #$56E3, // $56E3 + #$56E4, // $56E4 + #$56E5, // $56E5 + #$56E6, // $56E6 + #$56E7, // $56E7 + #$56E8, // $56E8 + #$56E9, // $56E9 + #$56EA, // $56EA + #$56EB, // $56EB + #$56EC, // $56EC + #$56ED, // $56ED + #$56EE, // $56EE + #$56EF, // $56EF + #$56F0, // $56F0 + #$56F1, // $56F1 + #$56F2, // $56F2 + #$56F3, // $56F3 + #$56F4, // $56F4 + #$56F5, // $56F5 + #$56F6, // $56F6 + #$56F7, // $56F7 + #$56F8, // $56F8 + #$56F9, // $56F9 + #$56FA, // $56FA + #$56FB, // $56FB + #$56FC, // $56FC + #$56FD, // $56FD + #$56FE, // $56FE + #$56FF, // $56FF + #$5700, // $5700 + #$5701, // $5701 + #$5702, // $5702 + #$5703, // $5703 + #$5704, // $5704 + #$5705, // $5705 + #$5706, // $5706 + #$5707, // $5707 + #$5708, // $5708 + #$5709, // $5709 + #$570A, // $570A + #$570B, // $570B + #$570C, // $570C + #$570D, // $570D + #$570E, // $570E + #$570F, // $570F + #$5710, // $5710 + #$5711, // $5711 + #$5712, // $5712 + #$5713, // $5713 + #$5714, // $5714 + #$5715, // $5715 + #$5716, // $5716 + #$5717, // $5717 + #$5718, // $5718 + #$5719, // $5719 + #$571A, // $571A + #$571B, // $571B + #$571C, // $571C + #$571D, // $571D + #$571E, // $571E + #$571F, // $571F + #$5720, // $5720 + #$5721, // $5721 + #$5722, // $5722 + #$5723, // $5723 + #$5724, // $5724 + #$5725, // $5725 + #$5726, // $5726 + #$5727, // $5727 + #$5728, // $5728 + #$5729, // $5729 + #$572A, // $572A + #$572B, // $572B + #$572C, // $572C + #$572D, // $572D + #$572E, // $572E + #$572F, // $572F + #$5730, // $5730 + #$5731, // $5731 + #$5732, // $5732 + #$5733, // $5733 + #$5734, // $5734 + #$5735, // $5735 + #$5736, // $5736 + #$5737, // $5737 + #$5738, // $5738 + #$5739, // $5739 + #$573A, // $573A + #$573B, // $573B + #$573C, // $573C + #$573D, // $573D + #$573E, // $573E + #$573F, // $573F + #$5740, // $5740 + #$5741, // $5741 + #$5742, // $5742 + #$5743, // $5743 + #$5744, // $5744 + #$5745, // $5745 + #$5746, // $5746 + #$5747, // $5747 + #$5748, // $5748 + #$5749, // $5749 + #$574A, // $574A + #$574B, // $574B + #$574C, // $574C + #$574D, // $574D + #$574E, // $574E + #$574F, // $574F + #$5750, // $5750 + #$5751, // $5751 + #$5752, // $5752 + #$5753, // $5753 + #$5754, // $5754 + #$5755, // $5755 + #$5756, // $5756 + #$5757, // $5757 + #$5758, // $5758 + #$5759, // $5759 + #$575A, // $575A + #$575B, // $575B + #$575C, // $575C + #$575D, // $575D + #$575E, // $575E + #$575F, // $575F + #$5760, // $5760 + #$5761, // $5761 + #$5762, // $5762 + #$5763, // $5763 + #$5764, // $5764 + #$5765, // $5765 + #$5766, // $5766 + #$5767, // $5767 + #$5768, // $5768 + #$5769, // $5769 + #$576A, // $576A + #$576B, // $576B + #$576C, // $576C + #$576D, // $576D + #$576E, // $576E + #$576F, // $576F + #$5770, // $5770 + #$5771, // $5771 + #$5772, // $5772 + #$5773, // $5773 + #$5774, // $5774 + #$5775, // $5775 + #$5776, // $5776 + #$5777, // $5777 + #$5778, // $5778 + #$5779, // $5779 + #$577A, // $577A + #$577B, // $577B + #$577C, // $577C + #$577D, // $577D + #$577E, // $577E + #$577F, // $577F + #$5780, // $5780 + #$5781, // $5781 + #$5782, // $5782 + #$5783, // $5783 + #$5784, // $5784 + #$5785, // $5785 + #$5786, // $5786 + #$5787, // $5787 + #$5788, // $5788 + #$5789, // $5789 + #$578A, // $578A + #$578B, // $578B + #$578C, // $578C + #$578D, // $578D + #$578E, // $578E + #$578F, // $578F + #$5790, // $5790 + #$5791, // $5791 + #$5792, // $5792 + #$5793, // $5793 + #$5794, // $5794 + #$5795, // $5795 + #$5796, // $5796 + #$5797, // $5797 + #$5798, // $5798 + #$5799, // $5799 + #$579A, // $579A + #$579B, // $579B + #$579C, // $579C + #$579D, // $579D + #$579E, // $579E + #$579F, // $579F + #$57A0, // $57A0 + #$57A1, // $57A1 + #$57A2, // $57A2 + #$57A3, // $57A3 + #$57A4, // $57A4 + #$57A5, // $57A5 + #$57A6, // $57A6 + #$57A7, // $57A7 + #$57A8, // $57A8 + #$57A9, // $57A9 + #$57AA, // $57AA + #$57AB, // $57AB + #$57AC, // $57AC + #$57AD, // $57AD + #$57AE, // $57AE + #$57AF, // $57AF + #$57B0, // $57B0 + #$57B1, // $57B1 + #$57B2, // $57B2 + #$57B3, // $57B3 + #$57B4, // $57B4 + #$57B5, // $57B5 + #$57B6, // $57B6 + #$57B7, // $57B7 + #$57B8, // $57B8 + #$57B9, // $57B9 + #$57BA, // $57BA + #$57BB, // $57BB + #$57BC, // $57BC + #$57BD, // $57BD + #$57BE, // $57BE + #$57BF, // $57BF + #$57C0, // $57C0 + #$57C1, // $57C1 + #$57C2, // $57C2 + #$57C3, // $57C3 + #$57C4, // $57C4 + #$57C5, // $57C5 + #$57C6, // $57C6 + #$57C7, // $57C7 + #$57C8, // $57C8 + #$57C9, // $57C9 + #$57CA, // $57CA + #$57CB, // $57CB + #$57CC, // $57CC + #$57CD, // $57CD + #$57CE, // $57CE + #$57CF, // $57CF + #$57D0, // $57D0 + #$57D1, // $57D1 + #$57D2, // $57D2 + #$57D3, // $57D3 + #$57D4, // $57D4 + #$57D5, // $57D5 + #$57D6, // $57D6 + #$57D7, // $57D7 + #$57D8, // $57D8 + #$57D9, // $57D9 + #$57DA, // $57DA + #$57DB, // $57DB + #$57DC, // $57DC + #$57DD, // $57DD + #$57DE, // $57DE + #$57DF, // $57DF + #$57E0, // $57E0 + #$57E1, // $57E1 + #$57E2, // $57E2 + #$57E3, // $57E3 + #$57E4, // $57E4 + #$57E5, // $57E5 + #$57E6, // $57E6 + #$57E7, // $57E7 + #$57E8, // $57E8 + #$57E9, // $57E9 + #$57EA, // $57EA + #$57EB, // $57EB + #$57EC, // $57EC + #$57ED, // $57ED + #$57EE, // $57EE + #$57EF, // $57EF + #$57F0, // $57F0 + #$57F1, // $57F1 + #$57F2, // $57F2 + #$57F3, // $57F3 + #$57F4, // $57F4 + #$57F5, // $57F5 + #$57F6, // $57F6 + #$57F7, // $57F7 + #$57F8, // $57F8 + #$57F9, // $57F9 + #$57FA, // $57FA + #$57FB, // $57FB + #$57FC, // $57FC + #$57FD, // $57FD + #$57FE, // $57FE + #$57FF, // $57FF + #$5800, // $5800 + #$5801, // $5801 + #$5802, // $5802 + #$5803, // $5803 + #$5804, // $5804 + #$5805, // $5805 + #$5806, // $5806 + #$5807, // $5807 + #$5808, // $5808 + #$5809, // $5809 + #$580A, // $580A + #$580B, // $580B + #$580C, // $580C + #$580D, // $580D + #$580E, // $580E + #$580F, // $580F + #$5810, // $5810 + #$5811, // $5811 + #$5812, // $5812 + #$5813, // $5813 + #$5814, // $5814 + #$5815, // $5815 + #$5816, // $5816 + #$5817, // $5817 + #$5818, // $5818 + #$5819, // $5819 + #$581A, // $581A + #$581B, // $581B + #$581C, // $581C + #$581D, // $581D + #$581E, // $581E + #$581F, // $581F + #$5820, // $5820 + #$5821, // $5821 + #$5822, // $5822 + #$5823, // $5823 + #$5824, // $5824 + #$5825, // $5825 + #$5826, // $5826 + #$5827, // $5827 + #$5828, // $5828 + #$5829, // $5829 + #$582A, // $582A + #$582B, // $582B + #$582C, // $582C + #$582D, // $582D + #$582E, // $582E + #$582F, // $582F + #$5830, // $5830 + #$5831, // $5831 + #$5832, // $5832 + #$5833, // $5833 + #$5834, // $5834 + #$5835, // $5835 + #$5836, // $5836 + #$5837, // $5837 + #$5838, // $5838 + #$5839, // $5839 + #$583A, // $583A + #$583B, // $583B + #$583C, // $583C + #$583D, // $583D + #$583E, // $583E + #$583F, // $583F + #$5840, // $5840 + #$5841, // $5841 + #$5842, // $5842 + #$5843, // $5843 + #$5844, // $5844 + #$5845, // $5845 + #$5846, // $5846 + #$5847, // $5847 + #$5848, // $5848 + #$5849, // $5849 + #$584A, // $584A + #$584B, // $584B + #$584C, // $584C + #$584D, // $584D + #$584E, // $584E + #$584F, // $584F + #$5850, // $5850 + #$5851, // $5851 + #$5852, // $5852 + #$5853, // $5853 + #$5854, // $5854 + #$5855, // $5855 + #$5856, // $5856 + #$5857, // $5857 + #$5858, // $5858 + #$5859, // $5859 + #$585A, // $585A + #$585B, // $585B + #$585C, // $585C + #$585D, // $585D + #$585E, // $585E + #$585F, // $585F + #$5860, // $5860 + #$5861, // $5861 + #$5862, // $5862 + #$5863, // $5863 + #$5864, // $5864 + #$5865, // $5865 + #$5866, // $5866 + #$5867, // $5867 + #$5868, // $5868 + #$5869, // $5869 + #$586A, // $586A + #$586B, // $586B + #$586C, // $586C + #$586D, // $586D + #$586E, // $586E + #$586F, // $586F + #$5870, // $5870 + #$5871, // $5871 + #$5872, // $5872 + #$5873, // $5873 + #$5874, // $5874 + #$5875, // $5875 + #$5876, // $5876 + #$5877, // $5877 + #$5878, // $5878 + #$5879, // $5879 + #$587A, // $587A + #$587B, // $587B + #$587C, // $587C + #$587D, // $587D + #$587E, // $587E + #$587F, // $587F + #$5880, // $5880 + #$5881, // $5881 + #$5882, // $5882 + #$5883, // $5883 + #$5884, // $5884 + #$5885, // $5885 + #$5886, // $5886 + #$5887, // $5887 + #$5888, // $5888 + #$5889, // $5889 + #$588A, // $588A + #$588B, // $588B + #$588C, // $588C + #$588D, // $588D + #$588E, // $588E + #$588F, // $588F + #$5890, // $5890 + #$5891, // $5891 + #$5892, // $5892 + #$5893, // $5893 + #$5894, // $5894 + #$5895, // $5895 + #$5896, // $5896 + #$5897, // $5897 + #$5898, // $5898 + #$5899, // $5899 + #$589A, // $589A + #$589B, // $589B + #$589C, // $589C + #$589D, // $589D + #$589E, // $589E + #$589F, // $589F + #$58A0, // $58A0 + #$58A1, // $58A1 + #$58A2, // $58A2 + #$58A3, // $58A3 + #$58A4, // $58A4 + #$58A5, // $58A5 + #$58A6, // $58A6 + #$58A7, // $58A7 + #$58A8, // $58A8 + #$58A9, // $58A9 + #$58AA, // $58AA + #$58AB, // $58AB + #$58AC, // $58AC + #$58AD, // $58AD + #$58AE, // $58AE + #$58AF, // $58AF + #$58B0, // $58B0 + #$58B1, // $58B1 + #$58B2, // $58B2 + #$58B3, // $58B3 + #$58B4, // $58B4 + #$58B5, // $58B5 + #$58B6, // $58B6 + #$58B7, // $58B7 + #$58B8, // $58B8 + #$58B9, // $58B9 + #$58BA, // $58BA + #$58BB, // $58BB + #$58BC, // $58BC + #$58BD, // $58BD + #$58BE, // $58BE + #$58BF, // $58BF + #$58C0, // $58C0 + #$58C1, // $58C1 + #$58C2, // $58C2 + #$58C3, // $58C3 + #$58C4, // $58C4 + #$58C5, // $58C5 + #$58C6, // $58C6 + #$58C7, // $58C7 + #$58C8, // $58C8 + #$58C9, // $58C9 + #$58CA, // $58CA + #$58CB, // $58CB + #$58CC, // $58CC + #$58CD, // $58CD + #$58CE, // $58CE + #$58CF, // $58CF + #$58D0, // $58D0 + #$58D1, // $58D1 + #$58D2, // $58D2 + #$58D3, // $58D3 + #$58D4, // $58D4 + #$58D5, // $58D5 + #$58D6, // $58D6 + #$58D7, // $58D7 + #$58D8, // $58D8 + #$58D9, // $58D9 + #$58DA, // $58DA + #$58DB, // $58DB + #$58DC, // $58DC + #$58DD, // $58DD + #$58DE, // $58DE + #$58DF, // $58DF + #$58E0, // $58E0 + #$58E1, // $58E1 + #$58E2, // $58E2 + #$58E3, // $58E3 + #$58E4, // $58E4 + #$58E5, // $58E5 + #$58E6, // $58E6 + #$58E7, // $58E7 + #$58E8, // $58E8 + #$58E9, // $58E9 + #$58EA, // $58EA + #$58EB, // $58EB + #$58EC, // $58EC + #$58ED, // $58ED + #$58EE, // $58EE + #$58EF, // $58EF + #$58F0, // $58F0 + #$58F1, // $58F1 + #$58F2, // $58F2 + #$58F3, // $58F3 + #$58F4, // $58F4 + #$58F5, // $58F5 + #$58F6, // $58F6 + #$58F7, // $58F7 + #$58F8, // $58F8 + #$58F9, // $58F9 + #$58FA, // $58FA + #$58FB, // $58FB + #$58FC, // $58FC + #$58FD, // $58FD + #$58FE, // $58FE + #$58FF, // $58FF + #$5900, // $5900 + #$5901, // $5901 + #$5902, // $5902 + #$5903, // $5903 + #$5904, // $5904 + #$5905, // $5905 + #$5906, // $5906 + #$5907, // $5907 + #$5908, // $5908 + #$5909, // $5909 + #$590A, // $590A + #$590B, // $590B + #$590C, // $590C + #$590D, // $590D + #$590E, // $590E + #$590F, // $590F + #$5910, // $5910 + #$5911, // $5911 + #$5912, // $5912 + #$5913, // $5913 + #$5914, // $5914 + #$5915, // $5915 + #$5916, // $5916 + #$5917, // $5917 + #$5918, // $5918 + #$5919, // $5919 + #$591A, // $591A + #$591B, // $591B + #$591C, // $591C + #$591D, // $591D + #$591E, // $591E + #$591F, // $591F + #$5920, // $5920 + #$5921, // $5921 + #$5922, // $5922 + #$5923, // $5923 + #$5924, // $5924 + #$5925, // $5925 + #$5926, // $5926 + #$5927, // $5927 + #$5928, // $5928 + #$5929, // $5929 + #$592A, // $592A + #$592B, // $592B + #$592C, // $592C + #$592D, // $592D + #$592E, // $592E + #$592F, // $592F + #$5930, // $5930 + #$5931, // $5931 + #$5932, // $5932 + #$5933, // $5933 + #$5934, // $5934 + #$5935, // $5935 + #$5936, // $5936 + #$5937, // $5937 + #$5938, // $5938 + #$5939, // $5939 + #$593A, // $593A + #$593B, // $593B + #$593C, // $593C + #$593D, // $593D + #$593E, // $593E + #$593F, // $593F + #$5940, // $5940 + #$5941, // $5941 + #$5942, // $5942 + #$5943, // $5943 + #$5944, // $5944 + #$5945, // $5945 + #$5946, // $5946 + #$5947, // $5947 + #$5948, // $5948 + #$5949, // $5949 + #$594A, // $594A + #$594B, // $594B + #$594C, // $594C + #$594D, // $594D + #$594E, // $594E + #$594F, // $594F + #$5950, // $5950 + #$5951, // $5951 + #$5952, // $5952 + #$5953, // $5953 + #$5954, // $5954 + #$5955, // $5955 + #$5956, // $5956 + #$5957, // $5957 + #$5958, // $5958 + #$5959, // $5959 + #$595A, // $595A + #$595B, // $595B + #$595C, // $595C + #$595D, // $595D + #$595E, // $595E + #$595F, // $595F + #$5960, // $5960 + #$5961, // $5961 + #$5962, // $5962 + #$5963, // $5963 + #$5964, // $5964 + #$5965, // $5965 + #$5966, // $5966 + #$5967, // $5967 + #$5968, // $5968 + #$5969, // $5969 + #$596A, // $596A + #$596B, // $596B + #$596C, // $596C + #$596D, // $596D + #$596E, // $596E + #$596F, // $596F + #$5970, // $5970 + #$5971, // $5971 + #$5972, // $5972 + #$5973, // $5973 + #$5974, // $5974 + #$5975, // $5975 + #$5976, // $5976 + #$5977, // $5977 + #$5978, // $5978 + #$5979, // $5979 + #$597A, // $597A + #$597B, // $597B + #$597C, // $597C + #$597D, // $597D + #$597E, // $597E + #$597F, // $597F + #$5980, // $5980 + #$5981, // $5981 + #$5982, // $5982 + #$5983, // $5983 + #$5984, // $5984 + #$5985, // $5985 + #$5986, // $5986 + #$5987, // $5987 + #$5988, // $5988 + #$5989, // $5989 + #$598A, // $598A + #$598B, // $598B + #$598C, // $598C + #$598D, // $598D + #$598E, // $598E + #$598F, // $598F + #$5990, // $5990 + #$5991, // $5991 + #$5992, // $5992 + #$5993, // $5993 + #$5994, // $5994 + #$5995, // $5995 + #$5996, // $5996 + #$5997, // $5997 + #$5998, // $5998 + #$5999, // $5999 + #$599A, // $599A + #$599B, // $599B + #$599C, // $599C + #$599D, // $599D + #$599E, // $599E + #$599F, // $599F + #$59A0, // $59A0 + #$59A1, // $59A1 + #$59A2, // $59A2 + #$59A3, // $59A3 + #$59A4, // $59A4 + #$59A5, // $59A5 + #$59A6, // $59A6 + #$59A7, // $59A7 + #$59A8, // $59A8 + #$59A9, // $59A9 + #$59AA, // $59AA + #$59AB, // $59AB + #$59AC, // $59AC + #$59AD, // $59AD + #$59AE, // $59AE + #$59AF, // $59AF + #$59B0, // $59B0 + #$59B1, // $59B1 + #$59B2, // $59B2 + #$59B3, // $59B3 + #$59B4, // $59B4 + #$59B5, // $59B5 + #$59B6, // $59B6 + #$59B7, // $59B7 + #$59B8, // $59B8 + #$59B9, // $59B9 + #$59BA, // $59BA + #$59BB, // $59BB + #$59BC, // $59BC + #$59BD, // $59BD + #$59BE, // $59BE + #$59BF, // $59BF + #$59C0, // $59C0 + #$59C1, // $59C1 + #$59C2, // $59C2 + #$59C3, // $59C3 + #$59C4, // $59C4 + #$59C5, // $59C5 + #$59C6, // $59C6 + #$59C7, // $59C7 + #$59C8, // $59C8 + #$59C9, // $59C9 + #$59CA, // $59CA + #$59CB, // $59CB + #$59CC, // $59CC + #$59CD, // $59CD + #$59CE, // $59CE + #$59CF, // $59CF + #$59D0, // $59D0 + #$59D1, // $59D1 + #$59D2, // $59D2 + #$59D3, // $59D3 + #$59D4, // $59D4 + #$59D5, // $59D5 + #$59D6, // $59D6 + #$59D7, // $59D7 + #$59D8, // $59D8 + #$59D9, // $59D9 + #$59DA, // $59DA + #$59DB, // $59DB + #$59DC, // $59DC + #$59DD, // $59DD + #$59DE, // $59DE + #$59DF, // $59DF + #$59E0, // $59E0 + #$59E1, // $59E1 + #$59E2, // $59E2 + #$59E3, // $59E3 + #$59E4, // $59E4 + #$59E5, // $59E5 + #$59E6, // $59E6 + #$59E7, // $59E7 + #$59E8, // $59E8 + #$59E9, // $59E9 + #$59EA, // $59EA + #$59EB, // $59EB + #$59EC, // $59EC + #$59ED, // $59ED + #$59EE, // $59EE + #$59EF, // $59EF + #$59F0, // $59F0 + #$59F1, // $59F1 + #$59F2, // $59F2 + #$59F3, // $59F3 + #$59F4, // $59F4 + #$59F5, // $59F5 + #$59F6, // $59F6 + #$59F7, // $59F7 + #$59F8, // $59F8 + #$59F9, // $59F9 + #$59FA, // $59FA + #$59FB, // $59FB + #$59FC, // $59FC + #$59FD, // $59FD + #$59FE, // $59FE + #$59FF, // $59FF + #$5A00, // $5A00 + #$5A01, // $5A01 + #$5A02, // $5A02 + #$5A03, // $5A03 + #$5A04, // $5A04 + #$5A05, // $5A05 + #$5A06, // $5A06 + #$5A07, // $5A07 + #$5A08, // $5A08 + #$5A09, // $5A09 + #$5A0A, // $5A0A + #$5A0B, // $5A0B + #$5A0C, // $5A0C + #$5A0D, // $5A0D + #$5A0E, // $5A0E + #$5A0F, // $5A0F + #$5A10, // $5A10 + #$5A11, // $5A11 + #$5A12, // $5A12 + #$5A13, // $5A13 + #$5A14, // $5A14 + #$5A15, // $5A15 + #$5A16, // $5A16 + #$5A17, // $5A17 + #$5A18, // $5A18 + #$5A19, // $5A19 + #$5A1A, // $5A1A + #$5A1B, // $5A1B + #$5A1C, // $5A1C + #$5A1D, // $5A1D + #$5A1E, // $5A1E + #$5A1F, // $5A1F + #$5A20, // $5A20 + #$5A21, // $5A21 + #$5A22, // $5A22 + #$5A23, // $5A23 + #$5A24, // $5A24 + #$5A25, // $5A25 + #$5A26, // $5A26 + #$5A27, // $5A27 + #$5A28, // $5A28 + #$5A29, // $5A29 + #$5A2A, // $5A2A + #$5A2B, // $5A2B + #$5A2C, // $5A2C + #$5A2D, // $5A2D + #$5A2E, // $5A2E + #$5A2F, // $5A2F + #$5A30, // $5A30 + #$5A31, // $5A31 + #$5A32, // $5A32 + #$5A33, // $5A33 + #$5A34, // $5A34 + #$5A35, // $5A35 + #$5A36, // $5A36 + #$5A37, // $5A37 + #$5A38, // $5A38 + #$5A39, // $5A39 + #$5A3A, // $5A3A + #$5A3B, // $5A3B + #$5A3C, // $5A3C + #$5A3D, // $5A3D + #$5A3E, // $5A3E + #$5A3F, // $5A3F + #$5A40, // $5A40 + #$5A41, // $5A41 + #$5A42, // $5A42 + #$5A43, // $5A43 + #$5A44, // $5A44 + #$5A45, // $5A45 + #$5A46, // $5A46 + #$5A47, // $5A47 + #$5A48, // $5A48 + #$5A49, // $5A49 + #$5A4A, // $5A4A + #$5A4B, // $5A4B + #$5A4C, // $5A4C + #$5A4D, // $5A4D + #$5A4E, // $5A4E + #$5A4F, // $5A4F + #$5A50, // $5A50 + #$5A51, // $5A51 + #$5A52, // $5A52 + #$5A53, // $5A53 + #$5A54, // $5A54 + #$5A55, // $5A55 + #$5A56, // $5A56 + #$5A57, // $5A57 + #$5A58, // $5A58 + #$5A59, // $5A59 + #$5A5A, // $5A5A + #$5A5B, // $5A5B + #$5A5C, // $5A5C + #$5A5D, // $5A5D + #$5A5E, // $5A5E + #$5A5F, // $5A5F + #$5A60, // $5A60 + #$5A61, // $5A61 + #$5A62, // $5A62 + #$5A63, // $5A63 + #$5A64, // $5A64 + #$5A65, // $5A65 + #$5A66, // $5A66 + #$5A67, // $5A67 + #$5A68, // $5A68 + #$5A69, // $5A69 + #$5A6A, // $5A6A + #$5A6B, // $5A6B + #$5A6C, // $5A6C + #$5A6D, // $5A6D + #$5A6E, // $5A6E + #$5A6F, // $5A6F + #$5A70, // $5A70 + #$5A71, // $5A71 + #$5A72, // $5A72 + #$5A73, // $5A73 + #$5A74, // $5A74 + #$5A75, // $5A75 + #$5A76, // $5A76 + #$5A77, // $5A77 + #$5A78, // $5A78 + #$5A79, // $5A79 + #$5A7A, // $5A7A + #$5A7B, // $5A7B + #$5A7C, // $5A7C + #$5A7D, // $5A7D + #$5A7E, // $5A7E + #$5A7F, // $5A7F + #$5A80, // $5A80 + #$5A81, // $5A81 + #$5A82, // $5A82 + #$5A83, // $5A83 + #$5A84, // $5A84 + #$5A85, // $5A85 + #$5A86, // $5A86 + #$5A87, // $5A87 + #$5A88, // $5A88 + #$5A89, // $5A89 + #$5A8A, // $5A8A + #$5A8B, // $5A8B + #$5A8C, // $5A8C + #$5A8D, // $5A8D + #$5A8E, // $5A8E + #$5A8F, // $5A8F + #$5A90, // $5A90 + #$5A91, // $5A91 + #$5A92, // $5A92 + #$5A93, // $5A93 + #$5A94, // $5A94 + #$5A95, // $5A95 + #$5A96, // $5A96 + #$5A97, // $5A97 + #$5A98, // $5A98 + #$5A99, // $5A99 + #$5A9A, // $5A9A + #$5A9B, // $5A9B + #$5A9C, // $5A9C + #$5A9D, // $5A9D + #$5A9E, // $5A9E + #$5A9F, // $5A9F + #$5AA0, // $5AA0 + #$5AA1, // $5AA1 + #$5AA2, // $5AA2 + #$5AA3, // $5AA3 + #$5AA4, // $5AA4 + #$5AA5, // $5AA5 + #$5AA6, // $5AA6 + #$5AA7, // $5AA7 + #$5AA8, // $5AA8 + #$5AA9, // $5AA9 + #$5AAA, // $5AAA + #$5AAB, // $5AAB + #$5AAC, // $5AAC + #$5AAD, // $5AAD + #$5AAE, // $5AAE + #$5AAF, // $5AAF + #$5AB0, // $5AB0 + #$5AB1, // $5AB1 + #$5AB2, // $5AB2 + #$5AB3, // $5AB3 + #$5AB4, // $5AB4 + #$5AB5, // $5AB5 + #$5AB6, // $5AB6 + #$5AB7, // $5AB7 + #$5AB8, // $5AB8 + #$5AB9, // $5AB9 + #$5ABA, // $5ABA + #$5ABB, // $5ABB + #$5ABC, // $5ABC + #$5ABD, // $5ABD + #$5ABE, // $5ABE + #$5ABF, // $5ABF + #$5AC0, // $5AC0 + #$5AC1, // $5AC1 + #$5AC2, // $5AC2 + #$5AC3, // $5AC3 + #$5AC4, // $5AC4 + #$5AC5, // $5AC5 + #$5AC6, // $5AC6 + #$5AC7, // $5AC7 + #$5AC8, // $5AC8 + #$5AC9, // $5AC9 + #$5ACA, // $5ACA + #$5ACB, // $5ACB + #$5ACC, // $5ACC + #$5ACD, // $5ACD + #$5ACE, // $5ACE + #$5ACF, // $5ACF + #$5AD0, // $5AD0 + #$5AD1, // $5AD1 + #$5AD2, // $5AD2 + #$5AD3, // $5AD3 + #$5AD4, // $5AD4 + #$5AD5, // $5AD5 + #$5AD6, // $5AD6 + #$5AD7, // $5AD7 + #$5AD8, // $5AD8 + #$5AD9, // $5AD9 + #$5ADA, // $5ADA + #$5ADB, // $5ADB + #$5ADC, // $5ADC + #$5ADD, // $5ADD + #$5ADE, // $5ADE + #$5ADF, // $5ADF + #$5AE0, // $5AE0 + #$5AE1, // $5AE1 + #$5AE2, // $5AE2 + #$5AE3, // $5AE3 + #$5AE4, // $5AE4 + #$5AE5, // $5AE5 + #$5AE6, // $5AE6 + #$5AE7, // $5AE7 + #$5AE8, // $5AE8 + #$5AE9, // $5AE9 + #$5AEA, // $5AEA + #$5AEB, // $5AEB + #$5AEC, // $5AEC + #$5AED, // $5AED + #$5AEE, // $5AEE + #$5AEF, // $5AEF + #$5AF0, // $5AF0 + #$5AF1, // $5AF1 + #$5AF2, // $5AF2 + #$5AF3, // $5AF3 + #$5AF4, // $5AF4 + #$5AF5, // $5AF5 + #$5AF6, // $5AF6 + #$5AF7, // $5AF7 + #$5AF8, // $5AF8 + #$5AF9, // $5AF9 + #$5AFA, // $5AFA + #$5AFB, // $5AFB + #$5AFC, // $5AFC + #$5AFD, // $5AFD + #$5AFE, // $5AFE + #$5AFF, // $5AFF + #$5B00, // $5B00 + #$5B01, // $5B01 + #$5B02, // $5B02 + #$5B03, // $5B03 + #$5B04, // $5B04 + #$5B05, // $5B05 + #$5B06, // $5B06 + #$5B07, // $5B07 + #$5B08, // $5B08 + #$5B09, // $5B09 + #$5B0A, // $5B0A + #$5B0B, // $5B0B + #$5B0C, // $5B0C + #$5B0D, // $5B0D + #$5B0E, // $5B0E + #$5B0F, // $5B0F + #$5B10, // $5B10 + #$5B11, // $5B11 + #$5B12, // $5B12 + #$5B13, // $5B13 + #$5B14, // $5B14 + #$5B15, // $5B15 + #$5B16, // $5B16 + #$5B17, // $5B17 + #$5B18, // $5B18 + #$5B19, // $5B19 + #$5B1A, // $5B1A + #$5B1B, // $5B1B + #$5B1C, // $5B1C + #$5B1D, // $5B1D + #$5B1E, // $5B1E + #$5B1F, // $5B1F + #$5B20, // $5B20 + #$5B21, // $5B21 + #$5B22, // $5B22 + #$5B23, // $5B23 + #$5B24, // $5B24 + #$5B25, // $5B25 + #$5B26, // $5B26 + #$5B27, // $5B27 + #$5B28, // $5B28 + #$5B29, // $5B29 + #$5B2A, // $5B2A + #$5B2B, // $5B2B + #$5B2C, // $5B2C + #$5B2D, // $5B2D + #$5B2E, // $5B2E + #$5B2F, // $5B2F + #$5B30, // $5B30 + #$5B31, // $5B31 + #$5B32, // $5B32 + #$5B33, // $5B33 + #$5B34, // $5B34 + #$5B35, // $5B35 + #$5B36, // $5B36 + #$5B37, // $5B37 + #$5B38, // $5B38 + #$5B39, // $5B39 + #$5B3A, // $5B3A + #$5B3B, // $5B3B + #$5B3C, // $5B3C + #$5B3D, // $5B3D + #$5B3E, // $5B3E + #$5B3F, // $5B3F + #$5B40, // $5B40 + #$5B41, // $5B41 + #$5B42, // $5B42 + #$5B43, // $5B43 + #$5B44, // $5B44 + #$5B45, // $5B45 + #$5B46, // $5B46 + #$5B47, // $5B47 + #$5B48, // $5B48 + #$5B49, // $5B49 + #$5B4A, // $5B4A + #$5B4B, // $5B4B + #$5B4C, // $5B4C + #$5B4D, // $5B4D + #$5B4E, // $5B4E + #$5B4F, // $5B4F + #$5B50, // $5B50 + #$5B51, // $5B51 + #$5B52, // $5B52 + #$5B53, // $5B53 + #$5B54, // $5B54 + #$5B55, // $5B55 + #$5B56, // $5B56 + #$5B57, // $5B57 + #$5B58, // $5B58 + #$5B59, // $5B59 + #$5B5A, // $5B5A + #$5B5B, // $5B5B + #$5B5C, // $5B5C + #$5B5D, // $5B5D + #$5B5E, // $5B5E + #$5B5F, // $5B5F + #$5B60, // $5B60 + #$5B61, // $5B61 + #$5B62, // $5B62 + #$5B63, // $5B63 + #$5B64, // $5B64 + #$5B65, // $5B65 + #$5B66, // $5B66 + #$5B67, // $5B67 + #$5B68, // $5B68 + #$5B69, // $5B69 + #$5B6A, // $5B6A + #$5B6B, // $5B6B + #$5B6C, // $5B6C + #$5B6D, // $5B6D + #$5B6E, // $5B6E + #$5B6F, // $5B6F + #$5B70, // $5B70 + #$5B71, // $5B71 + #$5B72, // $5B72 + #$5B73, // $5B73 + #$5B74, // $5B74 + #$5B75, // $5B75 + #$5B76, // $5B76 + #$5B77, // $5B77 + #$5B78, // $5B78 + #$5B79, // $5B79 + #$5B7A, // $5B7A + #$5B7B, // $5B7B + #$5B7C, // $5B7C + #$5B7D, // $5B7D + #$5B7E, // $5B7E + #$5B7F, // $5B7F + #$5B80, // $5B80 + #$5B81, // $5B81 + #$5B82, // $5B82 + #$5B83, // $5B83 + #$5B84, // $5B84 + #$5B85, // $5B85 + #$5B86, // $5B86 + #$5B87, // $5B87 + #$5B88, // $5B88 + #$5B89, // $5B89 + #$5B8A, // $5B8A + #$5B8B, // $5B8B + #$5B8C, // $5B8C + #$5B8D, // $5B8D + #$5B8E, // $5B8E + #$5B8F, // $5B8F + #$5B90, // $5B90 + #$5B91, // $5B91 + #$5B92, // $5B92 + #$5B93, // $5B93 + #$5B94, // $5B94 + #$5B95, // $5B95 + #$5B96, // $5B96 + #$5B97, // $5B97 + #$5B98, // $5B98 + #$5B99, // $5B99 + #$5B9A, // $5B9A + #$5B9B, // $5B9B + #$5B9C, // $5B9C + #$5B9D, // $5B9D + #$5B9E, // $5B9E + #$5B9F, // $5B9F + #$5BA0, // $5BA0 + #$5BA1, // $5BA1 + #$5BA2, // $5BA2 + #$5BA3, // $5BA3 + #$5BA4, // $5BA4 + #$5BA5, // $5BA5 + #$5BA6, // $5BA6 + #$5BA7, // $5BA7 + #$5BA8, // $5BA8 + #$5BA9, // $5BA9 + #$5BAA, // $5BAA + #$5BAB, // $5BAB + #$5BAC, // $5BAC + #$5BAD, // $5BAD + #$5BAE, // $5BAE + #$5BAF, // $5BAF + #$5BB0, // $5BB0 + #$5BB1, // $5BB1 + #$5BB2, // $5BB2 + #$5BB3, // $5BB3 + #$5BB4, // $5BB4 + #$5BB5, // $5BB5 + #$5BB6, // $5BB6 + #$5BB7, // $5BB7 + #$5BB8, // $5BB8 + #$5BB9, // $5BB9 + #$5BBA, // $5BBA + #$5BBB, // $5BBB + #$5BBC, // $5BBC + #$5BBD, // $5BBD + #$5BBE, // $5BBE + #$5BBF, // $5BBF + #$5BC0, // $5BC0 + #$5BC1, // $5BC1 + #$5BC2, // $5BC2 + #$5BC3, // $5BC3 + #$5BC4, // $5BC4 + #$5BC5, // $5BC5 + #$5BC6, // $5BC6 + #$5BC7, // $5BC7 + #$5BC8, // $5BC8 + #$5BC9, // $5BC9 + #$5BCA, // $5BCA + #$5BCB, // $5BCB + #$5BCC, // $5BCC + #$5BCD, // $5BCD + #$5BCE, // $5BCE + #$5BCF, // $5BCF + #$5BD0, // $5BD0 + #$5BD1, // $5BD1 + #$5BD2, // $5BD2 + #$5BD3, // $5BD3 + #$5BD4, // $5BD4 + #$5BD5, // $5BD5 + #$5BD6, // $5BD6 + #$5BD7, // $5BD7 + #$5BD8, // $5BD8 + #$5BD9, // $5BD9 + #$5BDA, // $5BDA + #$5BDB, // $5BDB + #$5BDC, // $5BDC + #$5BDD, // $5BDD + #$5BDE, // $5BDE + #$5BDF, // $5BDF + #$5BE0, // $5BE0 + #$5BE1, // $5BE1 + #$5BE2, // $5BE2 + #$5BE3, // $5BE3 + #$5BE4, // $5BE4 + #$5BE5, // $5BE5 + #$5BE6, // $5BE6 + #$5BE7, // $5BE7 + #$5BE8, // $5BE8 + #$5BE9, // $5BE9 + #$5BEA, // $5BEA + #$5BEB, // $5BEB + #$5BEC, // $5BEC + #$5BED, // $5BED + #$5BEE, // $5BEE + #$5BEF, // $5BEF + #$5BF0, // $5BF0 + #$5BF1, // $5BF1 + #$5BF2, // $5BF2 + #$5BF3, // $5BF3 + #$5BF4, // $5BF4 + #$5BF5, // $5BF5 + #$5BF6, // $5BF6 + #$5BF7, // $5BF7 + #$5BF8, // $5BF8 + #$5BF9, // $5BF9 + #$5BFA, // $5BFA + #$5BFB, // $5BFB + #$5BFC, // $5BFC + #$5BFD, // $5BFD + #$5BFE, // $5BFE + #$5BFF, // $5BFF + #$5C00, // $5C00 + #$5C01, // $5C01 + #$5C02, // $5C02 + #$5C03, // $5C03 + #$5C04, // $5C04 + #$5C05, // $5C05 + #$5C06, // $5C06 + #$5C07, // $5C07 + #$5C08, // $5C08 + #$5C09, // $5C09 + #$5C0A, // $5C0A + #$5C0B, // $5C0B + #$5C0C, // $5C0C + #$5C0D, // $5C0D + #$5C0E, // $5C0E + #$5C0F, // $5C0F + #$5C10, // $5C10 + #$5C11, // $5C11 + #$5C12, // $5C12 + #$5C13, // $5C13 + #$5C14, // $5C14 + #$5C15, // $5C15 + #$5C16, // $5C16 + #$5C17, // $5C17 + #$5C18, // $5C18 + #$5C19, // $5C19 + #$5C1A, // $5C1A + #$5C1B, // $5C1B + #$5C1C, // $5C1C + #$5C1D, // $5C1D + #$5C1E, // $5C1E + #$5C1F, // $5C1F + #$5C20, // $5C20 + #$5C21, // $5C21 + #$5C22, // $5C22 + #$5C23, // $5C23 + #$5C24, // $5C24 + #$5C25, // $5C25 + #$5C26, // $5C26 + #$5C27, // $5C27 + #$5C28, // $5C28 + #$5C29, // $5C29 + #$5C2A, // $5C2A + #$5C2B, // $5C2B + #$5C2C, // $5C2C + #$5C2D, // $5C2D + #$5C2E, // $5C2E + #$5C2F, // $5C2F + #$5C30, // $5C30 + #$5C31, // $5C31 + #$5C32, // $5C32 + #$5C33, // $5C33 + #$5C34, // $5C34 + #$5C35, // $5C35 + #$5C36, // $5C36 + #$5C37, // $5C37 + #$5C38, // $5C38 + #$5C39, // $5C39 + #$5C3A, // $5C3A + #$5C3B, // $5C3B + #$5C3C, // $5C3C + #$5C3D, // $5C3D + #$5C3E, // $5C3E + #$5C3F, // $5C3F + #$5C40, // $5C40 + #$5C41, // $5C41 + #$5C42, // $5C42 + #$5C43, // $5C43 + #$5C44, // $5C44 + #$5C45, // $5C45 + #$5C46, // $5C46 + #$5C47, // $5C47 + #$5C48, // $5C48 + #$5C49, // $5C49 + #$5C4A, // $5C4A + #$5C4B, // $5C4B + #$5C4C, // $5C4C + #$5C4D, // $5C4D + #$5C4E, // $5C4E + #$5C4F, // $5C4F + #$5C50, // $5C50 + #$5C51, // $5C51 + #$5C52, // $5C52 + #$5C53, // $5C53 + #$5C54, // $5C54 + #$5C55, // $5C55 + #$5C56, // $5C56 + #$5C57, // $5C57 + #$5C58, // $5C58 + #$5C59, // $5C59 + #$5C5A, // $5C5A + #$5C5B, // $5C5B + #$5C5C, // $5C5C + #$5C5D, // $5C5D + #$5C5E, // $5C5E + #$5C5F, // $5C5F + #$5C60, // $5C60 + #$5C61, // $5C61 + #$5C62, // $5C62 + #$5C63, // $5C63 + #$5C64, // $5C64 + #$5C65, // $5C65 + #$5C66, // $5C66 + #$5C67, // $5C67 + #$5C68, // $5C68 + #$5C69, // $5C69 + #$5C6A, // $5C6A + #$5C6B, // $5C6B + #$5C6C, // $5C6C + #$5C6D, // $5C6D + #$5C6E, // $5C6E + #$5C6F, // $5C6F + #$5C70, // $5C70 + #$5C71, // $5C71 + #$5C72, // $5C72 + #$5C73, // $5C73 + #$5C74, // $5C74 + #$5C75, // $5C75 + #$5C76, // $5C76 + #$5C77, // $5C77 + #$5C78, // $5C78 + #$5C79, // $5C79 + #$5C7A, // $5C7A + #$5C7B, // $5C7B + #$5C7C, // $5C7C + #$5C7D, // $5C7D + #$5C7E, // $5C7E + #$5C7F, // $5C7F + #$5C80, // $5C80 + #$5C81, // $5C81 + #$5C82, // $5C82 + #$5C83, // $5C83 + #$5C84, // $5C84 + #$5C85, // $5C85 + #$5C86, // $5C86 + #$5C87, // $5C87 + #$5C88, // $5C88 + #$5C89, // $5C89 + #$5C8A, // $5C8A + #$5C8B, // $5C8B + #$5C8C, // $5C8C + #$5C8D, // $5C8D + #$5C8E, // $5C8E + #$5C8F, // $5C8F + #$5C90, // $5C90 + #$5C91, // $5C91 + #$5C92, // $5C92 + #$5C93, // $5C93 + #$5C94, // $5C94 + #$5C95, // $5C95 + #$5C96, // $5C96 + #$5C97, // $5C97 + #$5C98, // $5C98 + #$5C99, // $5C99 + #$5C9A, // $5C9A + #$5C9B, // $5C9B + #$5C9C, // $5C9C + #$5C9D, // $5C9D + #$5C9E, // $5C9E + #$5C9F, // $5C9F + #$5CA0, // $5CA0 + #$5CA1, // $5CA1 + #$5CA2, // $5CA2 + #$5CA3, // $5CA3 + #$5CA4, // $5CA4 + #$5CA5, // $5CA5 + #$5CA6, // $5CA6 + #$5CA7, // $5CA7 + #$5CA8, // $5CA8 + #$5CA9, // $5CA9 + #$5CAA, // $5CAA + #$5CAB, // $5CAB + #$5CAC, // $5CAC + #$5CAD, // $5CAD + #$5CAE, // $5CAE + #$5CAF, // $5CAF + #$5CB0, // $5CB0 + #$5CB1, // $5CB1 + #$5CB2, // $5CB2 + #$5CB3, // $5CB3 + #$5CB4, // $5CB4 + #$5CB5, // $5CB5 + #$5CB6, // $5CB6 + #$5CB7, // $5CB7 + #$5CB8, // $5CB8 + #$5CB9, // $5CB9 + #$5CBA, // $5CBA + #$5CBB, // $5CBB + #$5CBC, // $5CBC + #$5CBD, // $5CBD + #$5CBE, // $5CBE + #$5CBF, // $5CBF + #$5CC0, // $5CC0 + #$5CC1, // $5CC1 + #$5CC2, // $5CC2 + #$5CC3, // $5CC3 + #$5CC4, // $5CC4 + #$5CC5, // $5CC5 + #$5CC6, // $5CC6 + #$5CC7, // $5CC7 + #$5CC8, // $5CC8 + #$5CC9, // $5CC9 + #$5CCA, // $5CCA + #$5CCB, // $5CCB + #$5CCC, // $5CCC + #$5CCD, // $5CCD + #$5CCE, // $5CCE + #$5CCF, // $5CCF + #$5CD0, // $5CD0 + #$5CD1, // $5CD1 + #$5CD2, // $5CD2 + #$5CD3, // $5CD3 + #$5CD4, // $5CD4 + #$5CD5, // $5CD5 + #$5CD6, // $5CD6 + #$5CD7, // $5CD7 + #$5CD8, // $5CD8 + #$5CD9, // $5CD9 + #$5CDA, // $5CDA + #$5CDB, // $5CDB + #$5CDC, // $5CDC + #$5CDD, // $5CDD + #$5CDE, // $5CDE + #$5CDF, // $5CDF + #$5CE0, // $5CE0 + #$5CE1, // $5CE1 + #$5CE2, // $5CE2 + #$5CE3, // $5CE3 + #$5CE4, // $5CE4 + #$5CE5, // $5CE5 + #$5CE6, // $5CE6 + #$5CE7, // $5CE7 + #$5CE8, // $5CE8 + #$5CE9, // $5CE9 + #$5CEA, // $5CEA + #$5CEB, // $5CEB + #$5CEC, // $5CEC + #$5CED, // $5CED + #$5CEE, // $5CEE + #$5CEF, // $5CEF + #$5CF0, // $5CF0 + #$5CF1, // $5CF1 + #$5CF2, // $5CF2 + #$5CF3, // $5CF3 + #$5CF4, // $5CF4 + #$5CF5, // $5CF5 + #$5CF6, // $5CF6 + #$5CF7, // $5CF7 + #$5CF8, // $5CF8 + #$5CF9, // $5CF9 + #$5CFA, // $5CFA + #$5CFB, // $5CFB + #$5CFC, // $5CFC + #$5CFD, // $5CFD + #$5CFE, // $5CFE + #$5CFF, // $5CFF + #$5D00, // $5D00 + #$5D01, // $5D01 + #$5D02, // $5D02 + #$5D03, // $5D03 + #$5D04, // $5D04 + #$5D05, // $5D05 + #$5D06, // $5D06 + #$5D07, // $5D07 + #$5D08, // $5D08 + #$5D09, // $5D09 + #$5D0A, // $5D0A + #$5D0B, // $5D0B + #$5D0C, // $5D0C + #$5D0D, // $5D0D + #$5D0E, // $5D0E + #$5D0F, // $5D0F + #$5D10, // $5D10 + #$5D11, // $5D11 + #$5D12, // $5D12 + #$5D13, // $5D13 + #$5D14, // $5D14 + #$5D15, // $5D15 + #$5D16, // $5D16 + #$5D17, // $5D17 + #$5D18, // $5D18 + #$5D19, // $5D19 + #$5D1A, // $5D1A + #$5D1B, // $5D1B + #$5D1C, // $5D1C + #$5D1D, // $5D1D + #$5D1E, // $5D1E + #$5D1F, // $5D1F + #$5D20, // $5D20 + #$5D21, // $5D21 + #$5D22, // $5D22 + #$5D23, // $5D23 + #$5D24, // $5D24 + #$5D25, // $5D25 + #$5D26, // $5D26 + #$5D27, // $5D27 + #$5D28, // $5D28 + #$5D29, // $5D29 + #$5D2A, // $5D2A + #$5D2B, // $5D2B + #$5D2C, // $5D2C + #$5D2D, // $5D2D + #$5D2E, // $5D2E + #$5D2F, // $5D2F + #$5D30, // $5D30 + #$5D31, // $5D31 + #$5D32, // $5D32 + #$5D33, // $5D33 + #$5D34, // $5D34 + #$5D35, // $5D35 + #$5D36, // $5D36 + #$5D37, // $5D37 + #$5D38, // $5D38 + #$5D39, // $5D39 + #$5D3A, // $5D3A + #$5D3B, // $5D3B + #$5D3C, // $5D3C + #$5D3D, // $5D3D + #$5D3E, // $5D3E + #$5D3F, // $5D3F + #$5D40, // $5D40 + #$5D41, // $5D41 + #$5D42, // $5D42 + #$5D43, // $5D43 + #$5D44, // $5D44 + #$5D45, // $5D45 + #$5D46, // $5D46 + #$5D47, // $5D47 + #$5D48, // $5D48 + #$5D49, // $5D49 + #$5D4A, // $5D4A + #$5D4B, // $5D4B + #$5D4C, // $5D4C + #$5D4D, // $5D4D + #$5D4E, // $5D4E + #$5D4F, // $5D4F + #$5D50, // $5D50 + #$5D51, // $5D51 + #$5D52, // $5D52 + #$5D53, // $5D53 + #$5D54, // $5D54 + #$5D55, // $5D55 + #$5D56, // $5D56 + #$5D57, // $5D57 + #$5D58, // $5D58 + #$5D59, // $5D59 + #$5D5A, // $5D5A + #$5D5B, // $5D5B + #$5D5C, // $5D5C + #$5D5D, // $5D5D + #$5D5E, // $5D5E + #$5D5F, // $5D5F + #$5D60, // $5D60 + #$5D61, // $5D61 + #$5D62, // $5D62 + #$5D63, // $5D63 + #$5D64, // $5D64 + #$5D65, // $5D65 + #$5D66, // $5D66 + #$5D67, // $5D67 + #$5D68, // $5D68 + #$5D69, // $5D69 + #$5D6A, // $5D6A + #$5D6B, // $5D6B + #$5D6C, // $5D6C + #$5D6D, // $5D6D + #$5D6E, // $5D6E + #$5D6F, // $5D6F + #$5D70, // $5D70 + #$5D71, // $5D71 + #$5D72, // $5D72 + #$5D73, // $5D73 + #$5D74, // $5D74 + #$5D75, // $5D75 + #$5D76, // $5D76 + #$5D77, // $5D77 + #$5D78, // $5D78 + #$5D79, // $5D79 + #$5D7A, // $5D7A + #$5D7B, // $5D7B + #$5D7C, // $5D7C + #$5D7D, // $5D7D + #$5D7E, // $5D7E + #$5D7F, // $5D7F + #$5D80, // $5D80 + #$5D81, // $5D81 + #$5D82, // $5D82 + #$5D83, // $5D83 + #$5D84, // $5D84 + #$5D85, // $5D85 + #$5D86, // $5D86 + #$5D87, // $5D87 + #$5D88, // $5D88 + #$5D89, // $5D89 + #$5D8A, // $5D8A + #$5D8B, // $5D8B + #$5D8C, // $5D8C + #$5D8D, // $5D8D + #$5D8E, // $5D8E + #$5D8F, // $5D8F + #$5D90, // $5D90 + #$5D91, // $5D91 + #$5D92, // $5D92 + #$5D93, // $5D93 + #$5D94, // $5D94 + #$5D95, // $5D95 + #$5D96, // $5D96 + #$5D97, // $5D97 + #$5D98, // $5D98 + #$5D99, // $5D99 + #$5D9A, // $5D9A + #$5D9B, // $5D9B + #$5D9C, // $5D9C + #$5D9D, // $5D9D + #$5D9E, // $5D9E + #$5D9F, // $5D9F + #$5DA0, // $5DA0 + #$5DA1, // $5DA1 + #$5DA2, // $5DA2 + #$5DA3, // $5DA3 + #$5DA4, // $5DA4 + #$5DA5, // $5DA5 + #$5DA6, // $5DA6 + #$5DA7, // $5DA7 + #$5DA8, // $5DA8 + #$5DA9, // $5DA9 + #$5DAA, // $5DAA + #$5DAB, // $5DAB + #$5DAC, // $5DAC + #$5DAD, // $5DAD + #$5DAE, // $5DAE + #$5DAF, // $5DAF + #$5DB0, // $5DB0 + #$5DB1, // $5DB1 + #$5DB2, // $5DB2 + #$5DB3, // $5DB3 + #$5DB4, // $5DB4 + #$5DB5, // $5DB5 + #$5DB6, // $5DB6 + #$5DB7, // $5DB7 + #$5DB8, // $5DB8 + #$5DB9, // $5DB9 + #$5DBA, // $5DBA + #$5DBB, // $5DBB + #$5DBC, // $5DBC + #$5DBD, // $5DBD + #$5DBE, // $5DBE + #$5DBF, // $5DBF + #$5DC0, // $5DC0 + #$5DC1, // $5DC1 + #$5DC2, // $5DC2 + #$5DC3, // $5DC3 + #$5DC4, // $5DC4 + #$5DC5, // $5DC5 + #$5DC6, // $5DC6 + #$5DC7, // $5DC7 + #$5DC8, // $5DC8 + #$5DC9, // $5DC9 + #$5DCA, // $5DCA + #$5DCB, // $5DCB + #$5DCC, // $5DCC + #$5DCD, // $5DCD + #$5DCE, // $5DCE + #$5DCF, // $5DCF + #$5DD0, // $5DD0 + #$5DD1, // $5DD1 + #$5DD2, // $5DD2 + #$5DD3, // $5DD3 + #$5DD4, // $5DD4 + #$5DD5, // $5DD5 + #$5DD6, // $5DD6 + #$5DD7, // $5DD7 + #$5DD8, // $5DD8 + #$5DD9, // $5DD9 + #$5DDA, // $5DDA + #$5DDB, // $5DDB + #$5DDC, // $5DDC + #$5DDD, // $5DDD + #$5DDE, // $5DDE + #$5DDF, // $5DDF + #$5DE0, // $5DE0 + #$5DE1, // $5DE1 + #$5DE2, // $5DE2 + #$5DE3, // $5DE3 + #$5DE4, // $5DE4 + #$5DE5, // $5DE5 + #$5DE6, // $5DE6 + #$5DE7, // $5DE7 + #$5DE8, // $5DE8 + #$5DE9, // $5DE9 + #$5DEA, // $5DEA + #$5DEB, // $5DEB + #$5DEC, // $5DEC + #$5DED, // $5DED + #$5DEE, // $5DEE + #$5DEF, // $5DEF + #$5DF0, // $5DF0 + #$5DF1, // $5DF1 + #$5DF2, // $5DF2 + #$5DF3, // $5DF3 + #$5DF4, // $5DF4 + #$5DF5, // $5DF5 + #$5DF6, // $5DF6 + #$5DF7, // $5DF7 + #$5DF8, // $5DF8 + #$5DF9, // $5DF9 + #$5DFA, // $5DFA + #$5DFB, // $5DFB + #$5DFC, // $5DFC + #$5DFD, // $5DFD + #$5DFE, // $5DFE + #$5DFF, // $5DFF + #$5E00, // $5E00 + #$5E01, // $5E01 + #$5E02, // $5E02 + #$5E03, // $5E03 + #$5E04, // $5E04 + #$5E05, // $5E05 + #$5E06, // $5E06 + #$5E07, // $5E07 + #$5E08, // $5E08 + #$5E09, // $5E09 + #$5E0A, // $5E0A + #$5E0B, // $5E0B + #$5E0C, // $5E0C + #$5E0D, // $5E0D + #$5E0E, // $5E0E + #$5E0F, // $5E0F + #$5E10, // $5E10 + #$5E11, // $5E11 + #$5E12, // $5E12 + #$5E13, // $5E13 + #$5E14, // $5E14 + #$5E15, // $5E15 + #$5E16, // $5E16 + #$5E17, // $5E17 + #$5E18, // $5E18 + #$5E19, // $5E19 + #$5E1A, // $5E1A + #$5E1B, // $5E1B + #$5E1C, // $5E1C + #$5E1D, // $5E1D + #$5E1E, // $5E1E + #$5E1F, // $5E1F + #$5E20, // $5E20 + #$5E21, // $5E21 + #$5E22, // $5E22 + #$5E23, // $5E23 + #$5E24, // $5E24 + #$5E25, // $5E25 + #$5E26, // $5E26 + #$5E27, // $5E27 + #$5E28, // $5E28 + #$5E29, // $5E29 + #$5E2A, // $5E2A + #$5E2B, // $5E2B + #$5E2C, // $5E2C + #$5E2D, // $5E2D + #$5E2E, // $5E2E + #$5E2F, // $5E2F + #$5E30, // $5E30 + #$5E31, // $5E31 + #$5E32, // $5E32 + #$5E33, // $5E33 + #$5E34, // $5E34 + #$5E35, // $5E35 + #$5E36, // $5E36 + #$5E37, // $5E37 + #$5E38, // $5E38 + #$5E39, // $5E39 + #$5E3A, // $5E3A + #$5E3B, // $5E3B + #$5E3C, // $5E3C + #$5E3D, // $5E3D + #$5E3E, // $5E3E + #$5E3F, // $5E3F + #$5E40, // $5E40 + #$5E41, // $5E41 + #$5E42, // $5E42 + #$5E43, // $5E43 + #$5E44, // $5E44 + #$5E45, // $5E45 + #$5E46, // $5E46 + #$5E47, // $5E47 + #$5E48, // $5E48 + #$5E49, // $5E49 + #$5E4A, // $5E4A + #$5E4B, // $5E4B + #$5E4C, // $5E4C + #$5E4D, // $5E4D + #$5E4E, // $5E4E + #$5E4F, // $5E4F + #$5E50, // $5E50 + #$5E51, // $5E51 + #$5E52, // $5E52 + #$5E53, // $5E53 + #$5E54, // $5E54 + #$5E55, // $5E55 + #$5E56, // $5E56 + #$5E57, // $5E57 + #$5E58, // $5E58 + #$5E59, // $5E59 + #$5E5A, // $5E5A + #$5E5B, // $5E5B + #$5E5C, // $5E5C + #$5E5D, // $5E5D + #$5E5E, // $5E5E + #$5E5F, // $5E5F + #$5E60, // $5E60 + #$5E61, // $5E61 + #$5E62, // $5E62 + #$5E63, // $5E63 + #$5E64, // $5E64 + #$5E65, // $5E65 + #$5E66, // $5E66 + #$5E67, // $5E67 + #$5E68, // $5E68 + #$5E69, // $5E69 + #$5E6A, // $5E6A + #$5E6B, // $5E6B + #$5E6C, // $5E6C + #$5E6D, // $5E6D + #$5E6E, // $5E6E + #$5E6F, // $5E6F + #$5E70, // $5E70 + #$5E71, // $5E71 + #$5E72, // $5E72 + #$5E73, // $5E73 + #$5E74, // $5E74 + #$5E75, // $5E75 + #$5E76, // $5E76 + #$5E77, // $5E77 + #$5E78, // $5E78 + #$5E79, // $5E79 + #$5E7A, // $5E7A + #$5E7B, // $5E7B + #$5E7C, // $5E7C + #$5E7D, // $5E7D + #$5E7E, // $5E7E + #$5E7F, // $5E7F + #$5E80, // $5E80 + #$5E81, // $5E81 + #$5E82, // $5E82 + #$5E83, // $5E83 + #$5E84, // $5E84 + #$5E85, // $5E85 + #$5E86, // $5E86 + #$5E87, // $5E87 + #$5E88, // $5E88 + #$5E89, // $5E89 + #$5E8A, // $5E8A + #$5E8B, // $5E8B + #$5E8C, // $5E8C + #$5E8D, // $5E8D + #$5E8E, // $5E8E + #$5E8F, // $5E8F + #$5E90, // $5E90 + #$5E91, // $5E91 + #$5E92, // $5E92 + #$5E93, // $5E93 + #$5E94, // $5E94 + #$5E95, // $5E95 + #$5E96, // $5E96 + #$5E97, // $5E97 + #$5E98, // $5E98 + #$5E99, // $5E99 + #$5E9A, // $5E9A + #$5E9B, // $5E9B + #$5E9C, // $5E9C + #$5E9D, // $5E9D + #$5E9E, // $5E9E + #$5E9F, // $5E9F + #$5EA0, // $5EA0 + #$5EA1, // $5EA1 + #$5EA2, // $5EA2 + #$5EA3, // $5EA3 + #$5EA4, // $5EA4 + #$5EA5, // $5EA5 + #$5EA6, // $5EA6 + #$5EA7, // $5EA7 + #$5EA8, // $5EA8 + #$5EA9, // $5EA9 + #$5EAA, // $5EAA + #$5EAB, // $5EAB + #$5EAC, // $5EAC + #$5EAD, // $5EAD + #$5EAE, // $5EAE + #$5EAF, // $5EAF + #$5EB0, // $5EB0 + #$5EB1, // $5EB1 + #$5EB2, // $5EB2 + #$5EB3, // $5EB3 + #$5EB4, // $5EB4 + #$5EB5, // $5EB5 + #$5EB6, // $5EB6 + #$5EB7, // $5EB7 + #$5EB8, // $5EB8 + #$5EB9, // $5EB9 + #$5EBA, // $5EBA + #$5EBB, // $5EBB + #$5EBC, // $5EBC + #$5EBD, // $5EBD + #$5EBE, // $5EBE + #$5EBF, // $5EBF + #$5EC0, // $5EC0 + #$5EC1, // $5EC1 + #$5EC2, // $5EC2 + #$5EC3, // $5EC3 + #$5EC4, // $5EC4 + #$5EC5, // $5EC5 + #$5EC6, // $5EC6 + #$5EC7, // $5EC7 + #$5EC8, // $5EC8 + #$5EC9, // $5EC9 + #$5ECA, // $5ECA + #$5ECB, // $5ECB + #$5ECC, // $5ECC + #$5ECD, // $5ECD + #$5ECE, // $5ECE + #$5ECF, // $5ECF + #$5ED0, // $5ED0 + #$5ED1, // $5ED1 + #$5ED2, // $5ED2 + #$5ED3, // $5ED3 + #$5ED4, // $5ED4 + #$5ED5, // $5ED5 + #$5ED6, // $5ED6 + #$5ED7, // $5ED7 + #$5ED8, // $5ED8 + #$5ED9, // $5ED9 + #$5EDA, // $5EDA + #$5EDB, // $5EDB + #$5EDC, // $5EDC + #$5EDD, // $5EDD + #$5EDE, // $5EDE + #$5EDF, // $5EDF + #$5EE0, // $5EE0 + #$5EE1, // $5EE1 + #$5EE2, // $5EE2 + #$5EE3, // $5EE3 + #$5EE4, // $5EE4 + #$5EE5, // $5EE5 + #$5EE6, // $5EE6 + #$5EE7, // $5EE7 + #$5EE8, // $5EE8 + #$5EE9, // $5EE9 + #$5EEA, // $5EEA + #$5EEB, // $5EEB + #$5EEC, // $5EEC + #$5EED, // $5EED + #$5EEE, // $5EEE + #$5EEF, // $5EEF + #$5EF0, // $5EF0 + #$5EF1, // $5EF1 + #$5EF2, // $5EF2 + #$5EF3, // $5EF3 + #$5EF4, // $5EF4 + #$5EF5, // $5EF5 + #$5EF6, // $5EF6 + #$5EF7, // $5EF7 + #$5EF8, // $5EF8 + #$5EF9, // $5EF9 + #$5EFA, // $5EFA + #$5EFB, // $5EFB + #$5EFC, // $5EFC + #$5EFD, // $5EFD + #$5EFE, // $5EFE + #$5EFF, // $5EFF + #$5F00, // $5F00 + #$5F01, // $5F01 + #$5F02, // $5F02 + #$5F03, // $5F03 + #$5F04, // $5F04 + #$5F05, // $5F05 + #$5F06, // $5F06 + #$5F07, // $5F07 + #$5F08, // $5F08 + #$5F09, // $5F09 + #$5F0A, // $5F0A + #$5F0B, // $5F0B + #$5F0C, // $5F0C + #$5F0D, // $5F0D + #$5F0E, // $5F0E + #$5F0F, // $5F0F + #$5F10, // $5F10 + #$5F11, // $5F11 + #$5F12, // $5F12 + #$5F13, // $5F13 + #$5F14, // $5F14 + #$5F15, // $5F15 + #$5F16, // $5F16 + #$5F17, // $5F17 + #$5F18, // $5F18 + #$5F19, // $5F19 + #$5F1A, // $5F1A + #$5F1B, // $5F1B + #$5F1C, // $5F1C + #$5F1D, // $5F1D + #$5F1E, // $5F1E + #$5F1F, // $5F1F + #$5F20, // $5F20 + #$5F21, // $5F21 + #$5F22, // $5F22 + #$5F23, // $5F23 + #$5F24, // $5F24 + #$5F25, // $5F25 + #$5F26, // $5F26 + #$5F27, // $5F27 + #$5F28, // $5F28 + #$5F29, // $5F29 + #$5F2A, // $5F2A + #$5F2B, // $5F2B + #$5F2C, // $5F2C + #$5F2D, // $5F2D + #$5F2E, // $5F2E + #$5F2F, // $5F2F + #$5F30, // $5F30 + #$5F31, // $5F31 + #$5F32, // $5F32 + #$5F33, // $5F33 + #$5F34, // $5F34 + #$5F35, // $5F35 + #$5F36, // $5F36 + #$5F37, // $5F37 + #$5F38, // $5F38 + #$5F39, // $5F39 + #$5F3A, // $5F3A + #$5F3B, // $5F3B + #$5F3C, // $5F3C + #$5F3D, // $5F3D + #$5F3E, // $5F3E + #$5F3F, // $5F3F + #$5F40, // $5F40 + #$5F41, // $5F41 + #$5F42, // $5F42 + #$5F43, // $5F43 + #$5F44, // $5F44 + #$5F45, // $5F45 + #$5F46, // $5F46 + #$5F47, // $5F47 + #$5F48, // $5F48 + #$5F49, // $5F49 + #$5F4A, // $5F4A + #$5F4B, // $5F4B + #$5F4C, // $5F4C + #$5F4D, // $5F4D + #$5F4E, // $5F4E + #$5F4F, // $5F4F + #$5F50, // $5F50 + #$5F51, // $5F51 + #$5F52, // $5F52 + #$5F53, // $5F53 + #$5F54, // $5F54 + #$5F55, // $5F55 + #$5F56, // $5F56 + #$5F57, // $5F57 + #$5F58, // $5F58 + #$5F59, // $5F59 + #$5F5A, // $5F5A + #$5F5B, // $5F5B + #$5F5C, // $5F5C + #$5F5D, // $5F5D + #$5F5E, // $5F5E + #$5F5F, // $5F5F + #$5F60, // $5F60 + #$5F61, // $5F61 + #$5F62, // $5F62 + #$5F63, // $5F63 + #$5F64, // $5F64 + #$5F65, // $5F65 + #$5F66, // $5F66 + #$5F67, // $5F67 + #$5F68, // $5F68 + #$5F69, // $5F69 + #$5F6A, // $5F6A + #$5F6B, // $5F6B + #$5F6C, // $5F6C + #$5F6D, // $5F6D + #$5F6E, // $5F6E + #$5F6F, // $5F6F + #$5F70, // $5F70 + #$5F71, // $5F71 + #$5F72, // $5F72 + #$5F73, // $5F73 + #$5F74, // $5F74 + #$5F75, // $5F75 + #$5F76, // $5F76 + #$5F77, // $5F77 + #$5F78, // $5F78 + #$5F79, // $5F79 + #$5F7A, // $5F7A + #$5F7B, // $5F7B + #$5F7C, // $5F7C + #$5F7D, // $5F7D + #$5F7E, // $5F7E + #$5F7F, // $5F7F + #$5F80, // $5F80 + #$5F81, // $5F81 + #$5F82, // $5F82 + #$5F83, // $5F83 + #$5F84, // $5F84 + #$5F85, // $5F85 + #$5F86, // $5F86 + #$5F87, // $5F87 + #$5F88, // $5F88 + #$5F89, // $5F89 + #$5F8A, // $5F8A + #$5F8B, // $5F8B + #$5F8C, // $5F8C + #$5F8D, // $5F8D + #$5F8E, // $5F8E + #$5F8F, // $5F8F + #$5F90, // $5F90 + #$5F91, // $5F91 + #$5F92, // $5F92 + #$5F93, // $5F93 + #$5F94, // $5F94 + #$5F95, // $5F95 + #$5F96, // $5F96 + #$5F97, // $5F97 + #$5F98, // $5F98 + #$5F99, // $5F99 + #$5F9A, // $5F9A + #$5F9B, // $5F9B + #$5F9C, // $5F9C + #$5F9D, // $5F9D + #$5F9E, // $5F9E + #$5F9F, // $5F9F + #$5FA0, // $5FA0 + #$5FA1, // $5FA1 + #$5FA2, // $5FA2 + #$5FA3, // $5FA3 + #$5FA4, // $5FA4 + #$5FA5, // $5FA5 + #$5FA6, // $5FA6 + #$5FA7, // $5FA7 + #$5FA8, // $5FA8 + #$5FA9, // $5FA9 + #$5FAA, // $5FAA + #$5FAB, // $5FAB + #$5FAC, // $5FAC + #$5FAD, // $5FAD + #$5FAE, // $5FAE + #$5FAF, // $5FAF + #$5FB0, // $5FB0 + #$5FB1, // $5FB1 + #$5FB2, // $5FB2 + #$5FB3, // $5FB3 + #$5FB4, // $5FB4 + #$5FB5, // $5FB5 + #$5FB6, // $5FB6 + #$5FB7, // $5FB7 + #$5FB8, // $5FB8 + #$5FB9, // $5FB9 + #$5FBA, // $5FBA + #$5FBB, // $5FBB + #$5FBC, // $5FBC + #$5FBD, // $5FBD + #$5FBE, // $5FBE + #$5FBF, // $5FBF + #$5FC0, // $5FC0 + #$5FC1, // $5FC1 + #$5FC2, // $5FC2 + #$5FC3, // $5FC3 + #$5FC4, // $5FC4 + #$5FC5, // $5FC5 + #$5FC6, // $5FC6 + #$5FC7, // $5FC7 + #$5FC8, // $5FC8 + #$5FC9, // $5FC9 + #$5FCA, // $5FCA + #$5FCB, // $5FCB + #$5FCC, // $5FCC + #$5FCD, // $5FCD + #$5FCE, // $5FCE + #$5FCF, // $5FCF + #$5FD0, // $5FD0 + #$5FD1, // $5FD1 + #$5FD2, // $5FD2 + #$5FD3, // $5FD3 + #$5FD4, // $5FD4 + #$5FD5, // $5FD5 + #$5FD6, // $5FD6 + #$5FD7, // $5FD7 + #$5FD8, // $5FD8 + #$5FD9, // $5FD9 + #$5FDA, // $5FDA + #$5FDB, // $5FDB + #$5FDC, // $5FDC + #$5FDD, // $5FDD + #$5FDE, // $5FDE + #$5FDF, // $5FDF + #$5FE0, // $5FE0 + #$5FE1, // $5FE1 + #$5FE2, // $5FE2 + #$5FE3, // $5FE3 + #$5FE4, // $5FE4 + #$5FE5, // $5FE5 + #$5FE6, // $5FE6 + #$5FE7, // $5FE7 + #$5FE8, // $5FE8 + #$5FE9, // $5FE9 + #$5FEA, // $5FEA + #$5FEB, // $5FEB + #$5FEC, // $5FEC + #$5FED, // $5FED + #$5FEE, // $5FEE + #$5FEF, // $5FEF + #$5FF0, // $5FF0 + #$5FF1, // $5FF1 + #$5FF2, // $5FF2 + #$5FF3, // $5FF3 + #$5FF4, // $5FF4 + #$5FF5, // $5FF5 + #$5FF6, // $5FF6 + #$5FF7, // $5FF7 + #$5FF8, // $5FF8 + #$5FF9, // $5FF9 + #$5FFA, // $5FFA + #$5FFB, // $5FFB + #$5FFC, // $5FFC + #$5FFD, // $5FFD + #$5FFE, // $5FFE + #$5FFF, // $5FFF + #$6000, // $6000 + #$6001, // $6001 + #$6002, // $6002 + #$6003, // $6003 + #$6004, // $6004 + #$6005, // $6005 + #$6006, // $6006 + #$6007, // $6007 + #$6008, // $6008 + #$6009, // $6009 + #$600A, // $600A + #$600B, // $600B + #$600C, // $600C + #$600D, // $600D + #$600E, // $600E + #$600F, // $600F + #$6010, // $6010 + #$6011, // $6011 + #$6012, // $6012 + #$6013, // $6013 + #$6014, // $6014 + #$6015, // $6015 + #$6016, // $6016 + #$6017, // $6017 + #$6018, // $6018 + #$6019, // $6019 + #$601A, // $601A + #$601B, // $601B + #$601C, // $601C + #$601D, // $601D + #$601E, // $601E + #$601F, // $601F + #$6020, // $6020 + #$6021, // $6021 + #$6022, // $6022 + #$6023, // $6023 + #$6024, // $6024 + #$6025, // $6025 + #$6026, // $6026 + #$6027, // $6027 + #$6028, // $6028 + #$6029, // $6029 + #$602A, // $602A + #$602B, // $602B + #$602C, // $602C + #$602D, // $602D + #$602E, // $602E + #$602F, // $602F + #$6030, // $6030 + #$6031, // $6031 + #$6032, // $6032 + #$6033, // $6033 + #$6034, // $6034 + #$6035, // $6035 + #$6036, // $6036 + #$6037, // $6037 + #$6038, // $6038 + #$6039, // $6039 + #$603A, // $603A + #$603B, // $603B + #$603C, // $603C + #$603D, // $603D + #$603E, // $603E + #$603F, // $603F + #$6040, // $6040 + #$6041, // $6041 + #$6042, // $6042 + #$6043, // $6043 + #$6044, // $6044 + #$6045, // $6045 + #$6046, // $6046 + #$6047, // $6047 + #$6048, // $6048 + #$6049, // $6049 + #$604A, // $604A + #$604B, // $604B + #$604C, // $604C + #$604D, // $604D + #$604E, // $604E + #$604F, // $604F + #$6050, // $6050 + #$6051, // $6051 + #$6052, // $6052 + #$6053, // $6053 + #$6054, // $6054 + #$6055, // $6055 + #$6056, // $6056 + #$6057, // $6057 + #$6058, // $6058 + #$6059, // $6059 + #$605A, // $605A + #$605B, // $605B + #$605C, // $605C + #$605D, // $605D + #$605E, // $605E + #$605F, // $605F + #$6060, // $6060 + #$6061, // $6061 + #$6062, // $6062 + #$6063, // $6063 + #$6064, // $6064 + #$6065, // $6065 + #$6066, // $6066 + #$6067, // $6067 + #$6068, // $6068 + #$6069, // $6069 + #$606A, // $606A + #$606B, // $606B + #$606C, // $606C + #$606D, // $606D + #$606E, // $606E + #$606F, // $606F + #$6070, // $6070 + #$6071, // $6071 + #$6072, // $6072 + #$6073, // $6073 + #$6074, // $6074 + #$6075, // $6075 + #$6076, // $6076 + #$6077, // $6077 + #$6078, // $6078 + #$6079, // $6079 + #$607A, // $607A + #$607B, // $607B + #$607C, // $607C + #$607D, // $607D + #$607E, // $607E + #$607F, // $607F + #$6080, // $6080 + #$6081, // $6081 + #$6082, // $6082 + #$6083, // $6083 + #$6084, // $6084 + #$6085, // $6085 + #$6086, // $6086 + #$6087, // $6087 + #$6088, // $6088 + #$6089, // $6089 + #$608A, // $608A + #$608B, // $608B + #$608C, // $608C + #$608D, // $608D + #$608E, // $608E + #$608F, // $608F + #$6090, // $6090 + #$6091, // $6091 + #$6092, // $6092 + #$6093, // $6093 + #$6094, // $6094 + #$6095, // $6095 + #$6096, // $6096 + #$6097, // $6097 + #$6098, // $6098 + #$6099, // $6099 + #$609A, // $609A + #$609B, // $609B + #$609C, // $609C + #$609D, // $609D + #$609E, // $609E + #$609F, // $609F + #$60A0, // $60A0 + #$60A1, // $60A1 + #$60A2, // $60A2 + #$60A3, // $60A3 + #$60A4, // $60A4 + #$60A5, // $60A5 + #$60A6, // $60A6 + #$60A7, // $60A7 + #$60A8, // $60A8 + #$60A9, // $60A9 + #$60AA, // $60AA + #$60AB, // $60AB + #$60AC, // $60AC + #$60AD, // $60AD + #$60AE, // $60AE + #$60AF, // $60AF + #$60B0, // $60B0 + #$60B1, // $60B1 + #$60B2, // $60B2 + #$60B3, // $60B3 + #$60B4, // $60B4 + #$60B5, // $60B5 + #$60B6, // $60B6 + #$60B7, // $60B7 + #$60B8, // $60B8 + #$60B9, // $60B9 + #$60BA, // $60BA + #$60BB, // $60BB + #$60BC, // $60BC + #$60BD, // $60BD + #$60BE, // $60BE + #$60BF, // $60BF + #$60C0, // $60C0 + #$60C1, // $60C1 + #$60C2, // $60C2 + #$60C3, // $60C3 + #$60C4, // $60C4 + #$60C5, // $60C5 + #$60C6, // $60C6 + #$60C7, // $60C7 + #$60C8, // $60C8 + #$60C9, // $60C9 + #$60CA, // $60CA + #$60CB, // $60CB + #$60CC, // $60CC + #$60CD, // $60CD + #$60CE, // $60CE + #$60CF, // $60CF + #$60D0, // $60D0 + #$60D1, // $60D1 + #$60D2, // $60D2 + #$60D3, // $60D3 + #$60D4, // $60D4 + #$60D5, // $60D5 + #$60D6, // $60D6 + #$60D7, // $60D7 + #$60D8, // $60D8 + #$60D9, // $60D9 + #$60DA, // $60DA + #$60DB, // $60DB + #$60DC, // $60DC + #$60DD, // $60DD + #$60DE, // $60DE + #$60DF, // $60DF + #$60E0, // $60E0 + #$60E1, // $60E1 + #$60E2, // $60E2 + #$60E3, // $60E3 + #$60E4, // $60E4 + #$60E5, // $60E5 + #$60E6, // $60E6 + #$60E7, // $60E7 + #$60E8, // $60E8 + #$60E9, // $60E9 + #$60EA, // $60EA + #$60EB, // $60EB + #$60EC, // $60EC + #$60ED, // $60ED + #$60EE, // $60EE + #$60EF, // $60EF + #$60F0, // $60F0 + #$60F1, // $60F1 + #$60F2, // $60F2 + #$60F3, // $60F3 + #$60F4, // $60F4 + #$60F5, // $60F5 + #$60F6, // $60F6 + #$60F7, // $60F7 + #$60F8, // $60F8 + #$60F9, // $60F9 + #$60FA, // $60FA + #$60FB, // $60FB + #$60FC, // $60FC + #$60FD, // $60FD + #$60FE, // $60FE + #$60FF, // $60FF + #$6100, // $6100 + #$6101, // $6101 + #$6102, // $6102 + #$6103, // $6103 + #$6104, // $6104 + #$6105, // $6105 + #$6106, // $6106 + #$6107, // $6107 + #$6108, // $6108 + #$6109, // $6109 + #$610A, // $610A + #$610B, // $610B + #$610C, // $610C + #$610D, // $610D + #$610E, // $610E + #$610F, // $610F + #$6110, // $6110 + #$6111, // $6111 + #$6112, // $6112 + #$6113, // $6113 + #$6114, // $6114 + #$6115, // $6115 + #$6116, // $6116 + #$6117, // $6117 + #$6118, // $6118 + #$6119, // $6119 + #$611A, // $611A + #$611B, // $611B + #$611C, // $611C + #$611D, // $611D + #$611E, // $611E + #$611F, // $611F + #$6120, // $6120 + #$6121, // $6121 + #$6122, // $6122 + #$6123, // $6123 + #$6124, // $6124 + #$6125, // $6125 + #$6126, // $6126 + #$6127, // $6127 + #$6128, // $6128 + #$6129, // $6129 + #$612A, // $612A + #$612B, // $612B + #$612C, // $612C + #$612D, // $612D + #$612E, // $612E + #$612F, // $612F + #$6130, // $6130 + #$6131, // $6131 + #$6132, // $6132 + #$6133, // $6133 + #$6134, // $6134 + #$6135, // $6135 + #$6136, // $6136 + #$6137, // $6137 + #$6138, // $6138 + #$6139, // $6139 + #$613A, // $613A + #$613B, // $613B + #$613C, // $613C + #$613D, // $613D + #$613E, // $613E + #$613F, // $613F + #$6140, // $6140 + #$6141, // $6141 + #$6142, // $6142 + #$6143, // $6143 + #$6144, // $6144 + #$6145, // $6145 + #$6146, // $6146 + #$6147, // $6147 + #$6148, // $6148 + #$6149, // $6149 + #$614A, // $614A + #$614B, // $614B + #$614C, // $614C + #$614D, // $614D + #$614E, // $614E + #$614F, // $614F + #$6150, // $6150 + #$6151, // $6151 + #$6152, // $6152 + #$6153, // $6153 + #$6154, // $6154 + #$6155, // $6155 + #$6156, // $6156 + #$6157, // $6157 + #$6158, // $6158 + #$6159, // $6159 + #$615A, // $615A + #$615B, // $615B + #$615C, // $615C + #$615D, // $615D + #$615E, // $615E + #$615F, // $615F + #$6160, // $6160 + #$6161, // $6161 + #$6162, // $6162 + #$6163, // $6163 + #$6164, // $6164 + #$6165, // $6165 + #$6166, // $6166 + #$6167, // $6167 + #$6168, // $6168 + #$6169, // $6169 + #$616A, // $616A + #$616B, // $616B + #$616C, // $616C + #$616D, // $616D + #$616E, // $616E + #$616F, // $616F + #$6170, // $6170 + #$6171, // $6171 + #$6172, // $6172 + #$6173, // $6173 + #$6174, // $6174 + #$6175, // $6175 + #$6176, // $6176 + #$6177, // $6177 + #$6178, // $6178 + #$6179, // $6179 + #$617A, // $617A + #$617B, // $617B + #$617C, // $617C + #$617D, // $617D + #$617E, // $617E + #$617F, // $617F + #$6180, // $6180 + #$6181, // $6181 + #$6182, // $6182 + #$6183, // $6183 + #$6184, // $6184 + #$6185, // $6185 + #$6186, // $6186 + #$6187, // $6187 + #$6188, // $6188 + #$6189, // $6189 + #$618A, // $618A + #$618B, // $618B + #$618C, // $618C + #$618D, // $618D + #$618E, // $618E + #$618F, // $618F + #$6190, // $6190 + #$6191, // $6191 + #$6192, // $6192 + #$6193, // $6193 + #$6194, // $6194 + #$6195, // $6195 + #$6196, // $6196 + #$6197, // $6197 + #$6198, // $6198 + #$6199, // $6199 + #$619A, // $619A + #$619B, // $619B + #$619C, // $619C + #$619D, // $619D + #$619E, // $619E + #$619F, // $619F + #$61A0, // $61A0 + #$61A1, // $61A1 + #$61A2, // $61A2 + #$61A3, // $61A3 + #$61A4, // $61A4 + #$61A5, // $61A5 + #$61A6, // $61A6 + #$61A7, // $61A7 + #$61A8, // $61A8 + #$61A9, // $61A9 + #$61AA, // $61AA + #$61AB, // $61AB + #$61AC, // $61AC + #$61AD, // $61AD + #$61AE, // $61AE + #$61AF, // $61AF + #$61B0, // $61B0 + #$61B1, // $61B1 + #$61B2, // $61B2 + #$61B3, // $61B3 + #$61B4, // $61B4 + #$61B5, // $61B5 + #$61B6, // $61B6 + #$61B7, // $61B7 + #$61B8, // $61B8 + #$61B9, // $61B9 + #$61BA, // $61BA + #$61BB, // $61BB + #$61BC, // $61BC + #$61BD, // $61BD + #$61BE, // $61BE + #$61BF, // $61BF + #$61C0, // $61C0 + #$61C1, // $61C1 + #$61C2, // $61C2 + #$61C3, // $61C3 + #$61C4, // $61C4 + #$61C5, // $61C5 + #$61C6, // $61C6 + #$61C7, // $61C7 + #$61C8, // $61C8 + #$61C9, // $61C9 + #$61CA, // $61CA + #$61CB, // $61CB + #$61CC, // $61CC + #$61CD, // $61CD + #$61CE, // $61CE + #$61CF, // $61CF + #$61D0, // $61D0 + #$61D1, // $61D1 + #$61D2, // $61D2 + #$61D3, // $61D3 + #$61D4, // $61D4 + #$61D5, // $61D5 + #$61D6, // $61D6 + #$61D7, // $61D7 + #$61D8, // $61D8 + #$61D9, // $61D9 + #$61DA, // $61DA + #$61DB, // $61DB + #$61DC, // $61DC + #$61DD, // $61DD + #$61DE, // $61DE + #$61DF, // $61DF + #$61E0, // $61E0 + #$61E1, // $61E1 + #$61E2, // $61E2 + #$61E3, // $61E3 + #$61E4, // $61E4 + #$61E5, // $61E5 + #$61E6, // $61E6 + #$61E7, // $61E7 + #$61E8, // $61E8 + #$61E9, // $61E9 + #$61EA, // $61EA + #$61EB, // $61EB + #$61EC, // $61EC + #$61ED, // $61ED + #$61EE, // $61EE + #$61EF, // $61EF + #$61F0, // $61F0 + #$61F1, // $61F1 + #$61F2, // $61F2 + #$61F3, // $61F3 + #$61F4, // $61F4 + #$61F5, // $61F5 + #$61F6, // $61F6 + #$61F7, // $61F7 + #$61F8, // $61F8 + #$61F9, // $61F9 + #$61FA, // $61FA + #$61FB, // $61FB + #$61FC, // $61FC + #$61FD, // $61FD + #$61FE, // $61FE + #$61FF, // $61FF + #$6200, // $6200 + #$6201, // $6201 + #$6202, // $6202 + #$6203, // $6203 + #$6204, // $6204 + #$6205, // $6205 + #$6206, // $6206 + #$6207, // $6207 + #$6208, // $6208 + #$6209, // $6209 + #$620A, // $620A + #$620B, // $620B + #$620C, // $620C + #$620D, // $620D + #$620E, // $620E + #$620F, // $620F + #$6210, // $6210 + #$6211, // $6211 + #$6212, // $6212 + #$6213, // $6213 + #$6214, // $6214 + #$6215, // $6215 + #$6216, // $6216 + #$6217, // $6217 + #$6218, // $6218 + #$6219, // $6219 + #$621A, // $621A + #$621B, // $621B + #$621C, // $621C + #$621D, // $621D + #$621E, // $621E + #$621F, // $621F + #$6220, // $6220 + #$6221, // $6221 + #$6222, // $6222 + #$6223, // $6223 + #$6224, // $6224 + #$6225, // $6225 + #$6226, // $6226 + #$6227, // $6227 + #$6228, // $6228 + #$6229, // $6229 + #$622A, // $622A + #$622B, // $622B + #$622C, // $622C + #$622D, // $622D + #$622E, // $622E + #$622F, // $622F + #$6230, // $6230 + #$6231, // $6231 + #$6232, // $6232 + #$6233, // $6233 + #$6234, // $6234 + #$6235, // $6235 + #$6236, // $6236 + #$6237, // $6237 + #$6238, // $6238 + #$6239, // $6239 + #$623A, // $623A + #$623B, // $623B + #$623C, // $623C + #$623D, // $623D + #$623E, // $623E + #$623F, // $623F + #$6240, // $6240 + #$6241, // $6241 + #$6242, // $6242 + #$6243, // $6243 + #$6244, // $6244 + #$6245, // $6245 + #$6246, // $6246 + #$6247, // $6247 + #$6248, // $6248 + #$6249, // $6249 + #$624A, // $624A + #$624B, // $624B + #$624C, // $624C + #$624D, // $624D + #$624E, // $624E + #$624F, // $624F + #$6250, // $6250 + #$6251, // $6251 + #$6252, // $6252 + #$6253, // $6253 + #$6254, // $6254 + #$6255, // $6255 + #$6256, // $6256 + #$6257, // $6257 + #$6258, // $6258 + #$6259, // $6259 + #$625A, // $625A + #$625B, // $625B + #$625C, // $625C + #$625D, // $625D + #$625E, // $625E + #$625F, // $625F + #$6260, // $6260 + #$6261, // $6261 + #$6262, // $6262 + #$6263, // $6263 + #$6264, // $6264 + #$6265, // $6265 + #$6266, // $6266 + #$6267, // $6267 + #$6268, // $6268 + #$6269, // $6269 + #$626A, // $626A + #$626B, // $626B + #$626C, // $626C + #$626D, // $626D + #$626E, // $626E + #$626F, // $626F + #$6270, // $6270 + #$6271, // $6271 + #$6272, // $6272 + #$6273, // $6273 + #$6274, // $6274 + #$6275, // $6275 + #$6276, // $6276 + #$6277, // $6277 + #$6278, // $6278 + #$6279, // $6279 + #$627A, // $627A + #$627B, // $627B + #$627C, // $627C + #$627D, // $627D + #$627E, // $627E + #$627F, // $627F + #$6280, // $6280 + #$6281, // $6281 + #$6282, // $6282 + #$6283, // $6283 + #$6284, // $6284 + #$6285, // $6285 + #$6286, // $6286 + #$6287, // $6287 + #$6288, // $6288 + #$6289, // $6289 + #$628A, // $628A + #$628B, // $628B + #$628C, // $628C + #$628D, // $628D + #$628E, // $628E + #$628F, // $628F + #$6290, // $6290 + #$6291, // $6291 + #$6292, // $6292 + #$6293, // $6293 + #$6294, // $6294 + #$6295, // $6295 + #$6296, // $6296 + #$6297, // $6297 + #$6298, // $6298 + #$6299, // $6299 + #$629A, // $629A + #$629B, // $629B + #$629C, // $629C + #$629D, // $629D + #$629E, // $629E + #$629F, // $629F + #$62A0, // $62A0 + #$62A1, // $62A1 + #$62A2, // $62A2 + #$62A3, // $62A3 + #$62A4, // $62A4 + #$62A5, // $62A5 + #$62A6, // $62A6 + #$62A7, // $62A7 + #$62A8, // $62A8 + #$62A9, // $62A9 + #$62AA, // $62AA + #$62AB, // $62AB + #$62AC, // $62AC + #$62AD, // $62AD + #$62AE, // $62AE + #$62AF, // $62AF + #$62B0, // $62B0 + #$62B1, // $62B1 + #$62B2, // $62B2 + #$62B3, // $62B3 + #$62B4, // $62B4 + #$62B5, // $62B5 + #$62B6, // $62B6 + #$62B7, // $62B7 + #$62B8, // $62B8 + #$62B9, // $62B9 + #$62BA, // $62BA + #$62BB, // $62BB + #$62BC, // $62BC + #$62BD, // $62BD + #$62BE, // $62BE + #$62BF, // $62BF + #$62C0, // $62C0 + #$62C1, // $62C1 + #$62C2, // $62C2 + #$62C3, // $62C3 + #$62C4, // $62C4 + #$62C5, // $62C5 + #$62C6, // $62C6 + #$62C7, // $62C7 + #$62C8, // $62C8 + #$62C9, // $62C9 + #$62CA, // $62CA + #$62CB, // $62CB + #$62CC, // $62CC + #$62CD, // $62CD + #$62CE, // $62CE + #$62CF, // $62CF + #$62D0, // $62D0 + #$62D1, // $62D1 + #$62D2, // $62D2 + #$62D3, // $62D3 + #$62D4, // $62D4 + #$62D5, // $62D5 + #$62D6, // $62D6 + #$62D7, // $62D7 + #$62D8, // $62D8 + #$62D9, // $62D9 + #$62DA, // $62DA + #$62DB, // $62DB + #$62DC, // $62DC + #$62DD, // $62DD + #$62DE, // $62DE + #$62DF, // $62DF + #$62E0, // $62E0 + #$62E1, // $62E1 + #$62E2, // $62E2 + #$62E3, // $62E3 + #$62E4, // $62E4 + #$62E5, // $62E5 + #$62E6, // $62E6 + #$62E7, // $62E7 + #$62E8, // $62E8 + #$62E9, // $62E9 + #$62EA, // $62EA + #$62EB, // $62EB + #$62EC, // $62EC + #$62ED, // $62ED + #$62EE, // $62EE + #$62EF, // $62EF + #$62F0, // $62F0 + #$62F1, // $62F1 + #$62F2, // $62F2 + #$62F3, // $62F3 + #$62F4, // $62F4 + #$62F5, // $62F5 + #$62F6, // $62F6 + #$62F7, // $62F7 + #$62F8, // $62F8 + #$62F9, // $62F9 + #$62FA, // $62FA + #$62FB, // $62FB + #$62FC, // $62FC + #$62FD, // $62FD + #$62FE, // $62FE + #$62FF, // $62FF + #$6300, // $6300 + #$6301, // $6301 + #$6302, // $6302 + #$6303, // $6303 + #$6304, // $6304 + #$6305, // $6305 + #$6306, // $6306 + #$6307, // $6307 + #$6308, // $6308 + #$6309, // $6309 + #$630A, // $630A + #$630B, // $630B + #$630C, // $630C + #$630D, // $630D + #$630E, // $630E + #$630F, // $630F + #$6310, // $6310 + #$6311, // $6311 + #$6312, // $6312 + #$6313, // $6313 + #$6314, // $6314 + #$6315, // $6315 + #$6316, // $6316 + #$6317, // $6317 + #$6318, // $6318 + #$6319, // $6319 + #$631A, // $631A + #$631B, // $631B + #$631C, // $631C + #$631D, // $631D + #$631E, // $631E + #$631F, // $631F + #$6320, // $6320 + #$6321, // $6321 + #$6322, // $6322 + #$6323, // $6323 + #$6324, // $6324 + #$6325, // $6325 + #$6326, // $6326 + #$6327, // $6327 + #$6328, // $6328 + #$6329, // $6329 + #$632A, // $632A + #$632B, // $632B + #$632C, // $632C + #$632D, // $632D + #$632E, // $632E + #$632F, // $632F + #$6330, // $6330 + #$6331, // $6331 + #$6332, // $6332 + #$6333, // $6333 + #$6334, // $6334 + #$6335, // $6335 + #$6336, // $6336 + #$6337, // $6337 + #$6338, // $6338 + #$6339, // $6339 + #$633A, // $633A + #$633B, // $633B + #$633C, // $633C + #$633D, // $633D + #$633E, // $633E + #$633F, // $633F + #$6340, // $6340 + #$6341, // $6341 + #$6342, // $6342 + #$6343, // $6343 + #$6344, // $6344 + #$6345, // $6345 + #$6346, // $6346 + #$6347, // $6347 + #$6348, // $6348 + #$6349, // $6349 + #$634A, // $634A + #$634B, // $634B + #$634C, // $634C + #$634D, // $634D + #$634E, // $634E + #$634F, // $634F + #$6350, // $6350 + #$6351, // $6351 + #$6352, // $6352 + #$6353, // $6353 + #$6354, // $6354 + #$6355, // $6355 + #$6356, // $6356 + #$6357, // $6357 + #$6358, // $6358 + #$6359, // $6359 + #$635A, // $635A + #$635B, // $635B + #$635C, // $635C + #$635D, // $635D + #$635E, // $635E + #$635F, // $635F + #$6360, // $6360 + #$6361, // $6361 + #$6362, // $6362 + #$6363, // $6363 + #$6364, // $6364 + #$6365, // $6365 + #$6366, // $6366 + #$6367, // $6367 + #$6368, // $6368 + #$6369, // $6369 + #$636A, // $636A + #$636B, // $636B + #$636C, // $636C + #$636D, // $636D + #$636E, // $636E + #$636F, // $636F + #$6370, // $6370 + #$6371, // $6371 + #$6372, // $6372 + #$6373, // $6373 + #$6374, // $6374 + #$6375, // $6375 + #$6376, // $6376 + #$6377, // $6377 + #$6378, // $6378 + #$6379, // $6379 + #$637A, // $637A + #$637B, // $637B + #$637C, // $637C + #$637D, // $637D + #$637E, // $637E + #$637F, // $637F + #$6380, // $6380 + #$6381, // $6381 + #$6382, // $6382 + #$6383, // $6383 + #$6384, // $6384 + #$6385, // $6385 + #$6386, // $6386 + #$6387, // $6387 + #$6388, // $6388 + #$6389, // $6389 + #$638A, // $638A + #$638B, // $638B + #$638C, // $638C + #$638D, // $638D + #$638E, // $638E + #$638F, // $638F + #$6390, // $6390 + #$6391, // $6391 + #$6392, // $6392 + #$6393, // $6393 + #$6394, // $6394 + #$6395, // $6395 + #$6396, // $6396 + #$6397, // $6397 + #$6398, // $6398 + #$6399, // $6399 + #$639A, // $639A + #$639B, // $639B + #$639C, // $639C + #$639D, // $639D + #$639E, // $639E + #$639F, // $639F + #$63A0, // $63A0 + #$63A1, // $63A1 + #$63A2, // $63A2 + #$63A3, // $63A3 + #$63A4, // $63A4 + #$63A5, // $63A5 + #$63A6, // $63A6 + #$63A7, // $63A7 + #$63A8, // $63A8 + #$63A9, // $63A9 + #$63AA, // $63AA + #$63AB, // $63AB + #$63AC, // $63AC + #$63AD, // $63AD + #$63AE, // $63AE + #$63AF, // $63AF + #$63B0, // $63B0 + #$63B1, // $63B1 + #$63B2, // $63B2 + #$63B3, // $63B3 + #$63B4, // $63B4 + #$63B5, // $63B5 + #$63B6, // $63B6 + #$63B7, // $63B7 + #$63B8, // $63B8 + #$63B9, // $63B9 + #$63BA, // $63BA + #$63BB, // $63BB + #$63BC, // $63BC + #$63BD, // $63BD + #$63BE, // $63BE + #$63BF, // $63BF + #$63C0, // $63C0 + #$63C1, // $63C1 + #$63C2, // $63C2 + #$63C3, // $63C3 + #$63C4, // $63C4 + #$63C5, // $63C5 + #$63C6, // $63C6 + #$63C7, // $63C7 + #$63C8, // $63C8 + #$63C9, // $63C9 + #$63CA, // $63CA + #$63CB, // $63CB + #$63CC, // $63CC + #$63CD, // $63CD + #$63CE, // $63CE + #$63CF, // $63CF + #$63D0, // $63D0 + #$63D1, // $63D1 + #$63D2, // $63D2 + #$63D3, // $63D3 + #$63D4, // $63D4 + #$63D5, // $63D5 + #$63D6, // $63D6 + #$63D7, // $63D7 + #$63D8, // $63D8 + #$63D9, // $63D9 + #$63DA, // $63DA + #$63DB, // $63DB + #$63DC, // $63DC + #$63DD, // $63DD + #$63DE, // $63DE + #$63DF, // $63DF + #$63E0, // $63E0 + #$63E1, // $63E1 + #$63E2, // $63E2 + #$63E3, // $63E3 + #$63E4, // $63E4 + #$63E5, // $63E5 + #$63E6, // $63E6 + #$63E7, // $63E7 + #$63E8, // $63E8 + #$63E9, // $63E9 + #$63EA, // $63EA + #$63EB, // $63EB + #$63EC, // $63EC + #$63ED, // $63ED + #$63EE, // $63EE + #$63EF, // $63EF + #$63F0, // $63F0 + #$63F1, // $63F1 + #$63F2, // $63F2 + #$63F3, // $63F3 + #$63F4, // $63F4 + #$63F5, // $63F5 + #$63F6, // $63F6 + #$63F7, // $63F7 + #$63F8, // $63F8 + #$63F9, // $63F9 + #$63FA, // $63FA + #$63FB, // $63FB + #$63FC, // $63FC + #$63FD, // $63FD + #$63FE, // $63FE + #$63FF, // $63FF + #$6400, // $6400 + #$6401, // $6401 + #$6402, // $6402 + #$6403, // $6403 + #$6404, // $6404 + #$6405, // $6405 + #$6406, // $6406 + #$6407, // $6407 + #$6408, // $6408 + #$6409, // $6409 + #$640A, // $640A + #$640B, // $640B + #$640C, // $640C + #$640D, // $640D + #$640E, // $640E + #$640F, // $640F + #$6410, // $6410 + #$6411, // $6411 + #$6412, // $6412 + #$6413, // $6413 + #$6414, // $6414 + #$6415, // $6415 + #$6416, // $6416 + #$6417, // $6417 + #$6418, // $6418 + #$6419, // $6419 + #$641A, // $641A + #$641B, // $641B + #$641C, // $641C + #$641D, // $641D + #$641E, // $641E + #$641F, // $641F + #$6420, // $6420 + #$6421, // $6421 + #$6422, // $6422 + #$6423, // $6423 + #$6424, // $6424 + #$6425, // $6425 + #$6426, // $6426 + #$6427, // $6427 + #$6428, // $6428 + #$6429, // $6429 + #$642A, // $642A + #$642B, // $642B + #$642C, // $642C + #$642D, // $642D + #$642E, // $642E + #$642F, // $642F + #$6430, // $6430 + #$6431, // $6431 + #$6432, // $6432 + #$6433, // $6433 + #$6434, // $6434 + #$6435, // $6435 + #$6436, // $6436 + #$6437, // $6437 + #$6438, // $6438 + #$6439, // $6439 + #$643A, // $643A + #$643B, // $643B + #$643C, // $643C + #$643D, // $643D + #$643E, // $643E + #$643F, // $643F + #$6440, // $6440 + #$6441, // $6441 + #$6442, // $6442 + #$6443, // $6443 + #$6444, // $6444 + #$6445, // $6445 + #$6446, // $6446 + #$6447, // $6447 + #$6448, // $6448 + #$6449, // $6449 + #$644A, // $644A + #$644B, // $644B + #$644C, // $644C + #$644D, // $644D + #$644E, // $644E + #$644F, // $644F + #$6450, // $6450 + #$6451, // $6451 + #$6452, // $6452 + #$6453, // $6453 + #$6454, // $6454 + #$6455, // $6455 + #$6456, // $6456 + #$6457, // $6457 + #$6458, // $6458 + #$6459, // $6459 + #$645A, // $645A + #$645B, // $645B + #$645C, // $645C + #$645D, // $645D + #$645E, // $645E + #$645F, // $645F + #$6460, // $6460 + #$6461, // $6461 + #$6462, // $6462 + #$6463, // $6463 + #$6464, // $6464 + #$6465, // $6465 + #$6466, // $6466 + #$6467, // $6467 + #$6468, // $6468 + #$6469, // $6469 + #$646A, // $646A + #$646B, // $646B + #$646C, // $646C + #$646D, // $646D + #$646E, // $646E + #$646F, // $646F + #$6470, // $6470 + #$6471, // $6471 + #$6472, // $6472 + #$6473, // $6473 + #$6474, // $6474 + #$6475, // $6475 + #$6476, // $6476 + #$6477, // $6477 + #$6478, // $6478 + #$6479, // $6479 + #$647A, // $647A + #$647B, // $647B + #$647C, // $647C + #$647D, // $647D + #$647E, // $647E + #$647F, // $647F + #$6480, // $6480 + #$6481, // $6481 + #$6482, // $6482 + #$6483, // $6483 + #$6484, // $6484 + #$6485, // $6485 + #$6486, // $6486 + #$6487, // $6487 + #$6488, // $6488 + #$6489, // $6489 + #$648A, // $648A + #$648B, // $648B + #$648C, // $648C + #$648D, // $648D + #$648E, // $648E + #$648F, // $648F + #$6490, // $6490 + #$6491, // $6491 + #$6492, // $6492 + #$6493, // $6493 + #$6494, // $6494 + #$6495, // $6495 + #$6496, // $6496 + #$6497, // $6497 + #$6498, // $6498 + #$6499, // $6499 + #$649A, // $649A + #$649B, // $649B + #$649C, // $649C + #$649D, // $649D + #$649E, // $649E + #$649F, // $649F + #$64A0, // $64A0 + #$64A1, // $64A1 + #$64A2, // $64A2 + #$64A3, // $64A3 + #$64A4, // $64A4 + #$64A5, // $64A5 + #$64A6, // $64A6 + #$64A7, // $64A7 + #$64A8, // $64A8 + #$64A9, // $64A9 + #$64AA, // $64AA + #$64AB, // $64AB + #$64AC, // $64AC + #$64AD, // $64AD + #$64AE, // $64AE + #$64AF, // $64AF + #$64B0, // $64B0 + #$64B1, // $64B1 + #$64B2, // $64B2 + #$64B3, // $64B3 + #$64B4, // $64B4 + #$64B5, // $64B5 + #$64B6, // $64B6 + #$64B7, // $64B7 + #$64B8, // $64B8 + #$64B9, // $64B9 + #$64BA, // $64BA + #$64BB, // $64BB + #$64BC, // $64BC + #$64BD, // $64BD + #$64BE, // $64BE + #$64BF, // $64BF + #$64C0, // $64C0 + #$64C1, // $64C1 + #$64C2, // $64C2 + #$64C3, // $64C3 + #$64C4, // $64C4 + #$64C5, // $64C5 + #$64C6, // $64C6 + #$64C7, // $64C7 + #$64C8, // $64C8 + #$64C9, // $64C9 + #$64CA, // $64CA + #$64CB, // $64CB + #$64CC, // $64CC + #$64CD, // $64CD + #$64CE, // $64CE + #$64CF, // $64CF + #$64D0, // $64D0 + #$64D1, // $64D1 + #$64D2, // $64D2 + #$64D3, // $64D3 + #$64D4, // $64D4 + #$64D5, // $64D5 + #$64D6, // $64D6 + #$64D7, // $64D7 + #$64D8, // $64D8 + #$64D9, // $64D9 + #$64DA, // $64DA + #$64DB, // $64DB + #$64DC, // $64DC + #$64DD, // $64DD + #$64DE, // $64DE + #$64DF, // $64DF + #$64E0, // $64E0 + #$64E1, // $64E1 + #$64E2, // $64E2 + #$64E3, // $64E3 + #$64E4, // $64E4 + #$64E5, // $64E5 + #$64E6, // $64E6 + #$64E7, // $64E7 + #$64E8, // $64E8 + #$64E9, // $64E9 + #$64EA, // $64EA + #$64EB, // $64EB + #$64EC, // $64EC + #$64ED, // $64ED + #$64EE, // $64EE + #$64EF, // $64EF + #$64F0, // $64F0 + #$64F1, // $64F1 + #$64F2, // $64F2 + #$64F3, // $64F3 + #$64F4, // $64F4 + #$64F5, // $64F5 + #$64F6, // $64F6 + #$64F7, // $64F7 + #$64F8, // $64F8 + #$64F9, // $64F9 + #$64FA, // $64FA + #$64FB, // $64FB + #$64FC, // $64FC + #$64FD, // $64FD + #$64FE, // $64FE + #$64FF, // $64FF + #$6500, // $6500 + #$6501, // $6501 + #$6502, // $6502 + #$6503, // $6503 + #$6504, // $6504 + #$6505, // $6505 + #$6506, // $6506 + #$6507, // $6507 + #$6508, // $6508 + #$6509, // $6509 + #$650A, // $650A + #$650B, // $650B + #$650C, // $650C + #$650D, // $650D + #$650E, // $650E + #$650F, // $650F + #$6510, // $6510 + #$6511, // $6511 + #$6512, // $6512 + #$6513, // $6513 + #$6514, // $6514 + #$6515, // $6515 + #$6516, // $6516 + #$6517, // $6517 + #$6518, // $6518 + #$6519, // $6519 + #$651A, // $651A + #$651B, // $651B + #$651C, // $651C + #$651D, // $651D + #$651E, // $651E + #$651F, // $651F + #$6520, // $6520 + #$6521, // $6521 + #$6522, // $6522 + #$6523, // $6523 + #$6524, // $6524 + #$6525, // $6525 + #$6526, // $6526 + #$6527, // $6527 + #$6528, // $6528 + #$6529, // $6529 + #$652A, // $652A + #$652B, // $652B + #$652C, // $652C + #$652D, // $652D + #$652E, // $652E + #$652F, // $652F + #$6530, // $6530 + #$6531, // $6531 + #$6532, // $6532 + #$6533, // $6533 + #$6534, // $6534 + #$6535, // $6535 + #$6536, // $6536 + #$6537, // $6537 + #$6538, // $6538 + #$6539, // $6539 + #$653A, // $653A + #$653B, // $653B + #$653C, // $653C + #$653D, // $653D + #$653E, // $653E + #$653F, // $653F + #$6540, // $6540 + #$6541, // $6541 + #$6542, // $6542 + #$6543, // $6543 + #$6544, // $6544 + #$6545, // $6545 + #$6546, // $6546 + #$6547, // $6547 + #$6548, // $6548 + #$6549, // $6549 + #$654A, // $654A + #$654B, // $654B + #$654C, // $654C + #$654D, // $654D + #$654E, // $654E + #$654F, // $654F + #$6550, // $6550 + #$6551, // $6551 + #$6552, // $6552 + #$6553, // $6553 + #$6554, // $6554 + #$6555, // $6555 + #$6556, // $6556 + #$6557, // $6557 + #$6558, // $6558 + #$6559, // $6559 + #$655A, // $655A + #$655B, // $655B + #$655C, // $655C + #$655D, // $655D + #$655E, // $655E + #$655F, // $655F + #$6560, // $6560 + #$6561, // $6561 + #$6562, // $6562 + #$6563, // $6563 + #$6564, // $6564 + #$6565, // $6565 + #$6566, // $6566 + #$6567, // $6567 + #$6568, // $6568 + #$6569, // $6569 + #$656A, // $656A + #$656B, // $656B + #$656C, // $656C + #$656D, // $656D + #$656E, // $656E + #$656F, // $656F + #$6570, // $6570 + #$6571, // $6571 + #$6572, // $6572 + #$6573, // $6573 + #$6574, // $6574 + #$6575, // $6575 + #$6576, // $6576 + #$6577, // $6577 + #$6578, // $6578 + #$6579, // $6579 + #$657A, // $657A + #$657B, // $657B + #$657C, // $657C + #$657D, // $657D + #$657E, // $657E + #$657F, // $657F + #$6580, // $6580 + #$6581, // $6581 + #$6582, // $6582 + #$6583, // $6583 + #$6584, // $6584 + #$6585, // $6585 + #$6586, // $6586 + #$6587, // $6587 + #$6588, // $6588 + #$6589, // $6589 + #$658A, // $658A + #$658B, // $658B + #$658C, // $658C + #$658D, // $658D + #$658E, // $658E + #$658F, // $658F + #$6590, // $6590 + #$6591, // $6591 + #$6592, // $6592 + #$6593, // $6593 + #$6594, // $6594 + #$6595, // $6595 + #$6596, // $6596 + #$6597, // $6597 + #$6598, // $6598 + #$6599, // $6599 + #$659A, // $659A + #$659B, // $659B + #$659C, // $659C + #$659D, // $659D + #$659E, // $659E + #$659F, // $659F + #$65A0, // $65A0 + #$65A1, // $65A1 + #$65A2, // $65A2 + #$65A3, // $65A3 + #$65A4, // $65A4 + #$65A5, // $65A5 + #$65A6, // $65A6 + #$65A7, // $65A7 + #$65A8, // $65A8 + #$65A9, // $65A9 + #$65AA, // $65AA + #$65AB, // $65AB + #$65AC, // $65AC + #$65AD, // $65AD + #$65AE, // $65AE + #$65AF, // $65AF + #$65B0, // $65B0 + #$65B1, // $65B1 + #$65B2, // $65B2 + #$65B3, // $65B3 + #$65B4, // $65B4 + #$65B5, // $65B5 + #$65B6, // $65B6 + #$65B7, // $65B7 + #$65B8, // $65B8 + #$65B9, // $65B9 + #$65BA, // $65BA + #$65BB, // $65BB + #$65BC, // $65BC + #$65BD, // $65BD + #$65BE, // $65BE + #$65BF, // $65BF + #$65C0, // $65C0 + #$65C1, // $65C1 + #$65C2, // $65C2 + #$65C3, // $65C3 + #$65C4, // $65C4 + #$65C5, // $65C5 + #$65C6, // $65C6 + #$65C7, // $65C7 + #$65C8, // $65C8 + #$65C9, // $65C9 + #$65CA, // $65CA + #$65CB, // $65CB + #$65CC, // $65CC + #$65CD, // $65CD + #$65CE, // $65CE + #$65CF, // $65CF + #$65D0, // $65D0 + #$65D1, // $65D1 + #$65D2, // $65D2 + #$65D3, // $65D3 + #$65D4, // $65D4 + #$65D5, // $65D5 + #$65D6, // $65D6 + #$65D7, // $65D7 + #$65D8, // $65D8 + #$65D9, // $65D9 + #$65DA, // $65DA + #$65DB, // $65DB + #$65DC, // $65DC + #$65DD, // $65DD + #$65DE, // $65DE + #$65DF, // $65DF + #$65E0, // $65E0 + #$65E1, // $65E1 + #$65E2, // $65E2 + #$65E3, // $65E3 + #$65E4, // $65E4 + #$65E5, // $65E5 + #$65E6, // $65E6 + #$65E7, // $65E7 + #$65E8, // $65E8 + #$65E9, // $65E9 + #$65EA, // $65EA + #$65EB, // $65EB + #$65EC, // $65EC + #$65ED, // $65ED + #$65EE, // $65EE + #$65EF, // $65EF + #$65F0, // $65F0 + #$65F1, // $65F1 + #$65F2, // $65F2 + #$65F3, // $65F3 + #$65F4, // $65F4 + #$65F5, // $65F5 + #$65F6, // $65F6 + #$65F7, // $65F7 + #$65F8, // $65F8 + #$65F9, // $65F9 + #$65FA, // $65FA + #$65FB, // $65FB + #$65FC, // $65FC + #$65FD, // $65FD + #$65FE, // $65FE + #$65FF, // $65FF + #$6600, // $6600 + #$6601, // $6601 + #$6602, // $6602 + #$6603, // $6603 + #$6604, // $6604 + #$6605, // $6605 + #$6606, // $6606 + #$6607, // $6607 + #$6608, // $6608 + #$6609, // $6609 + #$660A, // $660A + #$660B, // $660B + #$660C, // $660C + #$660D, // $660D + #$660E, // $660E + #$660F, // $660F + #$6610, // $6610 + #$6611, // $6611 + #$6612, // $6612 + #$6613, // $6613 + #$6614, // $6614 + #$6615, // $6615 + #$6616, // $6616 + #$6617, // $6617 + #$6618, // $6618 + #$6619, // $6619 + #$661A, // $661A + #$661B, // $661B + #$661C, // $661C + #$661D, // $661D + #$661E, // $661E + #$661F, // $661F + #$6620, // $6620 + #$6621, // $6621 + #$6622, // $6622 + #$6623, // $6623 + #$6624, // $6624 + #$6625, // $6625 + #$6626, // $6626 + #$6627, // $6627 + #$6628, // $6628 + #$6629, // $6629 + #$662A, // $662A + #$662B, // $662B + #$662C, // $662C + #$662D, // $662D + #$662E, // $662E + #$662F, // $662F + #$6630, // $6630 + #$6631, // $6631 + #$6632, // $6632 + #$6633, // $6633 + #$6634, // $6634 + #$6635, // $6635 + #$6636, // $6636 + #$6637, // $6637 + #$6638, // $6638 + #$6639, // $6639 + #$663A, // $663A + #$663B, // $663B + #$663C, // $663C + #$663D, // $663D + #$663E, // $663E + #$663F, // $663F + #$6640, // $6640 + #$6641, // $6641 + #$6642, // $6642 + #$6643, // $6643 + #$6644, // $6644 + #$6645, // $6645 + #$6646, // $6646 + #$6647, // $6647 + #$6648, // $6648 + #$6649, // $6649 + #$664A, // $664A + #$664B, // $664B + #$664C, // $664C + #$664D, // $664D + #$664E, // $664E + #$664F, // $664F + #$6650, // $6650 + #$6651, // $6651 + #$6652, // $6652 + #$6653, // $6653 + #$6654, // $6654 + #$6655, // $6655 + #$6656, // $6656 + #$6657, // $6657 + #$6658, // $6658 + #$6659, // $6659 + #$665A, // $665A + #$665B, // $665B + #$665C, // $665C + #$665D, // $665D + #$665E, // $665E + #$665F, // $665F + #$6660, // $6660 + #$6661, // $6661 + #$6662, // $6662 + #$6663, // $6663 + #$6664, // $6664 + #$6665, // $6665 + #$6666, // $6666 + #$6667, // $6667 + #$6668, // $6668 + #$6669, // $6669 + #$666A, // $666A + #$666B, // $666B + #$666C, // $666C + #$666D, // $666D + #$666E, // $666E + #$666F, // $666F + #$6670, // $6670 + #$6671, // $6671 + #$6672, // $6672 + #$6673, // $6673 + #$6674, // $6674 + #$6675, // $6675 + #$6676, // $6676 + #$6677, // $6677 + #$6678, // $6678 + #$6679, // $6679 + #$667A, // $667A + #$667B, // $667B + #$667C, // $667C + #$667D, // $667D + #$667E, // $667E + #$667F, // $667F + #$6680, // $6680 + #$6681, // $6681 + #$6682, // $6682 + #$6683, // $6683 + #$6684, // $6684 + #$6685, // $6685 + #$6686, // $6686 + #$6687, // $6687 + #$6688, // $6688 + #$6689, // $6689 + #$668A, // $668A + #$668B, // $668B + #$668C, // $668C + #$668D, // $668D + #$668E, // $668E + #$668F, // $668F + #$6690, // $6690 + #$6691, // $6691 + #$6692, // $6692 + #$6693, // $6693 + #$6694, // $6694 + #$6695, // $6695 + #$6696, // $6696 + #$6697, // $6697 + #$6698, // $6698 + #$6699, // $6699 + #$669A, // $669A + #$669B, // $669B + #$669C, // $669C + #$669D, // $669D + #$669E, // $669E + #$669F, // $669F + #$66A0, // $66A0 + #$66A1, // $66A1 + #$66A2, // $66A2 + #$66A3, // $66A3 + #$66A4, // $66A4 + #$66A5, // $66A5 + #$66A6, // $66A6 + #$66A7, // $66A7 + #$66A8, // $66A8 + #$66A9, // $66A9 + #$66AA, // $66AA + #$66AB, // $66AB + #$66AC, // $66AC + #$66AD, // $66AD + #$66AE, // $66AE + #$66AF, // $66AF + #$66B0, // $66B0 + #$66B1, // $66B1 + #$66B2, // $66B2 + #$66B3, // $66B3 + #$66B4, // $66B4 + #$66B5, // $66B5 + #$66B6, // $66B6 + #$66B7, // $66B7 + #$66B8, // $66B8 + #$66B9, // $66B9 + #$66BA, // $66BA + #$66BB, // $66BB + #$66BC, // $66BC + #$66BD, // $66BD + #$66BE, // $66BE + #$66BF, // $66BF + #$66C0, // $66C0 + #$66C1, // $66C1 + #$66C2, // $66C2 + #$66C3, // $66C3 + #$66C4, // $66C4 + #$66C5, // $66C5 + #$66C6, // $66C6 + #$66C7, // $66C7 + #$66C8, // $66C8 + #$66C9, // $66C9 + #$66CA, // $66CA + #$66CB, // $66CB + #$66CC, // $66CC + #$66CD, // $66CD + #$66CE, // $66CE + #$66CF, // $66CF + #$66D0, // $66D0 + #$66D1, // $66D1 + #$66D2, // $66D2 + #$66D3, // $66D3 + #$66D4, // $66D4 + #$66D5, // $66D5 + #$66D6, // $66D6 + #$66D7, // $66D7 + #$66D8, // $66D8 + #$66D9, // $66D9 + #$66DA, // $66DA + #$66DB, // $66DB + #$66DC, // $66DC + #$66DD, // $66DD + #$66DE, // $66DE + #$66DF, // $66DF + #$66E0, // $66E0 + #$66E1, // $66E1 + #$66E2, // $66E2 + #$66E3, // $66E3 + #$66E4, // $66E4 + #$66E5, // $66E5 + #$66E6, // $66E6 + #$66E7, // $66E7 + #$66E8, // $66E8 + #$66E9, // $66E9 + #$66EA, // $66EA + #$66EB, // $66EB + #$66EC, // $66EC + #$66ED, // $66ED + #$66EE, // $66EE + #$66EF, // $66EF + #$66F0, // $66F0 + #$66F1, // $66F1 + #$66F2, // $66F2 + #$66F3, // $66F3 + #$66F4, // $66F4 + #$66F5, // $66F5 + #$66F6, // $66F6 + #$66F7, // $66F7 + #$66F8, // $66F8 + #$66F9, // $66F9 + #$66FA, // $66FA + #$66FB, // $66FB + #$66FC, // $66FC + #$66FD, // $66FD + #$66FE, // $66FE + #$66FF, // $66FF + #$6700, // $6700 + #$6701, // $6701 + #$6702, // $6702 + #$6703, // $6703 + #$6704, // $6704 + #$6705, // $6705 + #$6706, // $6706 + #$6707, // $6707 + #$6708, // $6708 + #$6709, // $6709 + #$670A, // $670A + #$670B, // $670B + #$670C, // $670C + #$670D, // $670D + #$670E, // $670E + #$670F, // $670F + #$6710, // $6710 + #$6711, // $6711 + #$6712, // $6712 + #$6713, // $6713 + #$6714, // $6714 + #$6715, // $6715 + #$6716, // $6716 + #$6717, // $6717 + #$6718, // $6718 + #$6719, // $6719 + #$671A, // $671A + #$671B, // $671B + #$671C, // $671C + #$671D, // $671D + #$671E, // $671E + #$671F, // $671F + #$6720, // $6720 + #$6721, // $6721 + #$6722, // $6722 + #$6723, // $6723 + #$6724, // $6724 + #$6725, // $6725 + #$6726, // $6726 + #$6727, // $6727 + #$6728, // $6728 + #$6729, // $6729 + #$672A, // $672A + #$672B, // $672B + #$672C, // $672C + #$672D, // $672D + #$672E, // $672E + #$672F, // $672F + #$6730, // $6730 + #$6731, // $6731 + #$6732, // $6732 + #$6733, // $6733 + #$6734, // $6734 + #$6735, // $6735 + #$6736, // $6736 + #$6737, // $6737 + #$6738, // $6738 + #$6739, // $6739 + #$673A, // $673A + #$673B, // $673B + #$673C, // $673C + #$673D, // $673D + #$673E, // $673E + #$673F, // $673F + #$6740, // $6740 + #$6741, // $6741 + #$6742, // $6742 + #$6743, // $6743 + #$6744, // $6744 + #$6745, // $6745 + #$6746, // $6746 + #$6747, // $6747 + #$6748, // $6748 + #$6749, // $6749 + #$674A, // $674A + #$674B, // $674B + #$674C, // $674C + #$674D, // $674D + #$674E, // $674E + #$674F, // $674F + #$6750, // $6750 + #$6751, // $6751 + #$6752, // $6752 + #$6753, // $6753 + #$6754, // $6754 + #$6755, // $6755 + #$6756, // $6756 + #$6757, // $6757 + #$6758, // $6758 + #$6759, // $6759 + #$675A, // $675A + #$675B, // $675B + #$675C, // $675C + #$675D, // $675D + #$675E, // $675E + #$675F, // $675F + #$6760, // $6760 + #$6761, // $6761 + #$6762, // $6762 + #$6763, // $6763 + #$6764, // $6764 + #$6765, // $6765 + #$6766, // $6766 + #$6767, // $6767 + #$6768, // $6768 + #$6769, // $6769 + #$676A, // $676A + #$676B, // $676B + #$676C, // $676C + #$676D, // $676D + #$676E, // $676E + #$676F, // $676F + #$6770, // $6770 + #$6771, // $6771 + #$6772, // $6772 + #$6773, // $6773 + #$6774, // $6774 + #$6775, // $6775 + #$6776, // $6776 + #$6777, // $6777 + #$6778, // $6778 + #$6779, // $6779 + #$677A, // $677A + #$677B, // $677B + #$677C, // $677C + #$677D, // $677D + #$677E, // $677E + #$677F, // $677F + #$6780, // $6780 + #$6781, // $6781 + #$6782, // $6782 + #$6783, // $6783 + #$6784, // $6784 + #$6785, // $6785 + #$6786, // $6786 + #$6787, // $6787 + #$6788, // $6788 + #$6789, // $6789 + #$678A, // $678A + #$678B, // $678B + #$678C, // $678C + #$678D, // $678D + #$678E, // $678E + #$678F, // $678F + #$6790, // $6790 + #$6791, // $6791 + #$6792, // $6792 + #$6793, // $6793 + #$6794, // $6794 + #$6795, // $6795 + #$6796, // $6796 + #$6797, // $6797 + #$6798, // $6798 + #$6799, // $6799 + #$679A, // $679A + #$679B, // $679B + #$679C, // $679C + #$679D, // $679D + #$679E, // $679E + #$679F, // $679F + #$67A0, // $67A0 + #$67A1, // $67A1 + #$67A2, // $67A2 + #$67A3, // $67A3 + #$67A4, // $67A4 + #$67A5, // $67A5 + #$67A6, // $67A6 + #$67A7, // $67A7 + #$67A8, // $67A8 + #$67A9, // $67A9 + #$67AA, // $67AA + #$67AB, // $67AB + #$67AC, // $67AC + #$67AD, // $67AD + #$67AE, // $67AE + #$67AF, // $67AF + #$67B0, // $67B0 + #$67B1, // $67B1 + #$67B2, // $67B2 + #$67B3, // $67B3 + #$67B4, // $67B4 + #$67B5, // $67B5 + #$67B6, // $67B6 + #$67B7, // $67B7 + #$67B8, // $67B8 + #$67B9, // $67B9 + #$67BA, // $67BA + #$67BB, // $67BB + #$67BC, // $67BC + #$67BD, // $67BD + #$67BE, // $67BE + #$67BF, // $67BF + #$67C0, // $67C0 + #$67C1, // $67C1 + #$67C2, // $67C2 + #$67C3, // $67C3 + #$67C4, // $67C4 + #$67C5, // $67C5 + #$67C6, // $67C6 + #$67C7, // $67C7 + #$67C8, // $67C8 + #$67C9, // $67C9 + #$67CA, // $67CA + #$67CB, // $67CB + #$67CC, // $67CC + #$67CD, // $67CD + #$67CE, // $67CE + #$67CF, // $67CF + #$67D0, // $67D0 + #$67D1, // $67D1 + #$67D2, // $67D2 + #$67D3, // $67D3 + #$67D4, // $67D4 + #$67D5, // $67D5 + #$67D6, // $67D6 + #$67D7, // $67D7 + #$67D8, // $67D8 + #$67D9, // $67D9 + #$67DA, // $67DA + #$67DB, // $67DB + #$67DC, // $67DC + #$67DD, // $67DD + #$67DE, // $67DE + #$67DF, // $67DF + #$67E0, // $67E0 + #$67E1, // $67E1 + #$67E2, // $67E2 + #$67E3, // $67E3 + #$67E4, // $67E4 + #$67E5, // $67E5 + #$67E6, // $67E6 + #$67E7, // $67E7 + #$67E8, // $67E8 + #$67E9, // $67E9 + #$67EA, // $67EA + #$67EB, // $67EB + #$67EC, // $67EC + #$67ED, // $67ED + #$67EE, // $67EE + #$67EF, // $67EF + #$67F0, // $67F0 + #$67F1, // $67F1 + #$67F2, // $67F2 + #$67F3, // $67F3 + #$67F4, // $67F4 + #$67F5, // $67F5 + #$67F6, // $67F6 + #$67F7, // $67F7 + #$67F8, // $67F8 + #$67F9, // $67F9 + #$67FA, // $67FA + #$67FB, // $67FB + #$67FC, // $67FC + #$67FD, // $67FD + #$67FE, // $67FE + #$67FF, // $67FF + #$6800, // $6800 + #$6801, // $6801 + #$6802, // $6802 + #$6803, // $6803 + #$6804, // $6804 + #$6805, // $6805 + #$6806, // $6806 + #$6807, // $6807 + #$6808, // $6808 + #$6809, // $6809 + #$680A, // $680A + #$680B, // $680B + #$680C, // $680C + #$680D, // $680D + #$680E, // $680E + #$680F, // $680F + #$6810, // $6810 + #$6811, // $6811 + #$6812, // $6812 + #$6813, // $6813 + #$6814, // $6814 + #$6815, // $6815 + #$6816, // $6816 + #$6817, // $6817 + #$6818, // $6818 + #$6819, // $6819 + #$681A, // $681A + #$681B, // $681B + #$681C, // $681C + #$681D, // $681D + #$681E, // $681E + #$681F, // $681F + #$6820, // $6820 + #$6821, // $6821 + #$6822, // $6822 + #$6823, // $6823 + #$6824, // $6824 + #$6825, // $6825 + #$6826, // $6826 + #$6827, // $6827 + #$6828, // $6828 + #$6829, // $6829 + #$682A, // $682A + #$682B, // $682B + #$682C, // $682C + #$682D, // $682D + #$682E, // $682E + #$682F, // $682F + #$6830, // $6830 + #$6831, // $6831 + #$6832, // $6832 + #$6833, // $6833 + #$6834, // $6834 + #$6835, // $6835 + #$6836, // $6836 + #$6837, // $6837 + #$6838, // $6838 + #$6839, // $6839 + #$683A, // $683A + #$683B, // $683B + #$683C, // $683C + #$683D, // $683D + #$683E, // $683E + #$683F, // $683F + #$6840, // $6840 + #$6841, // $6841 + #$6842, // $6842 + #$6843, // $6843 + #$6844, // $6844 + #$6845, // $6845 + #$6846, // $6846 + #$6847, // $6847 + #$6848, // $6848 + #$6849, // $6849 + #$684A, // $684A + #$684B, // $684B + #$684C, // $684C + #$684D, // $684D + #$684E, // $684E + #$684F, // $684F + #$6850, // $6850 + #$6851, // $6851 + #$6852, // $6852 + #$6853, // $6853 + #$6854, // $6854 + #$6855, // $6855 + #$6856, // $6856 + #$6857, // $6857 + #$6858, // $6858 + #$6859, // $6859 + #$685A, // $685A + #$685B, // $685B + #$685C, // $685C + #$685D, // $685D + #$685E, // $685E + #$685F, // $685F + #$6860, // $6860 + #$6861, // $6861 + #$6862, // $6862 + #$6863, // $6863 + #$6864, // $6864 + #$6865, // $6865 + #$6866, // $6866 + #$6867, // $6867 + #$6868, // $6868 + #$6869, // $6869 + #$686A, // $686A + #$686B, // $686B + #$686C, // $686C + #$686D, // $686D + #$686E, // $686E + #$686F, // $686F + #$6870, // $6870 + #$6871, // $6871 + #$6872, // $6872 + #$6873, // $6873 + #$6874, // $6874 + #$6875, // $6875 + #$6876, // $6876 + #$6877, // $6877 + #$6878, // $6878 + #$6879, // $6879 + #$687A, // $687A + #$687B, // $687B + #$687C, // $687C + #$687D, // $687D + #$687E, // $687E + #$687F, // $687F + #$6880, // $6880 + #$6881, // $6881 + #$6882, // $6882 + #$6883, // $6883 + #$6884, // $6884 + #$6885, // $6885 + #$6886, // $6886 + #$6887, // $6887 + #$6888, // $6888 + #$6889, // $6889 + #$688A, // $688A + #$688B, // $688B + #$688C, // $688C + #$688D, // $688D + #$688E, // $688E + #$688F, // $688F + #$6890, // $6890 + #$6891, // $6891 + #$6892, // $6892 + #$6893, // $6893 + #$6894, // $6894 + #$6895, // $6895 + #$6896, // $6896 + #$6897, // $6897 + #$6898, // $6898 + #$6899, // $6899 + #$689A, // $689A + #$689B, // $689B + #$689C, // $689C + #$689D, // $689D + #$689E, // $689E + #$689F, // $689F + #$68A0, // $68A0 + #$68A1, // $68A1 + #$68A2, // $68A2 + #$68A3, // $68A3 + #$68A4, // $68A4 + #$68A5, // $68A5 + #$68A6, // $68A6 + #$68A7, // $68A7 + #$68A8, // $68A8 + #$68A9, // $68A9 + #$68AA, // $68AA + #$68AB, // $68AB + #$68AC, // $68AC + #$68AD, // $68AD + #$68AE, // $68AE + #$68AF, // $68AF + #$68B0, // $68B0 + #$68B1, // $68B1 + #$68B2, // $68B2 + #$68B3, // $68B3 + #$68B4, // $68B4 + #$68B5, // $68B5 + #$68B6, // $68B6 + #$68B7, // $68B7 + #$68B8, // $68B8 + #$68B9, // $68B9 + #$68BA, // $68BA + #$68BB, // $68BB + #$68BC, // $68BC + #$68BD, // $68BD + #$68BE, // $68BE + #$68BF, // $68BF + #$68C0, // $68C0 + #$68C1, // $68C1 + #$68C2, // $68C2 + #$68C3, // $68C3 + #$68C4, // $68C4 + #$68C5, // $68C5 + #$68C6, // $68C6 + #$68C7, // $68C7 + #$68C8, // $68C8 + #$68C9, // $68C9 + #$68CA, // $68CA + #$68CB, // $68CB + #$68CC, // $68CC + #$68CD, // $68CD + #$68CE, // $68CE + #$68CF, // $68CF + #$68D0, // $68D0 + #$68D1, // $68D1 + #$68D2, // $68D2 + #$68D3, // $68D3 + #$68D4, // $68D4 + #$68D5, // $68D5 + #$68D6, // $68D6 + #$68D7, // $68D7 + #$68D8, // $68D8 + #$68D9, // $68D9 + #$68DA, // $68DA + #$68DB, // $68DB + #$68DC, // $68DC + #$68DD, // $68DD + #$68DE, // $68DE + #$68DF, // $68DF + #$68E0, // $68E0 + #$68E1, // $68E1 + #$68E2, // $68E2 + #$68E3, // $68E3 + #$68E4, // $68E4 + #$68E5, // $68E5 + #$68E6, // $68E6 + #$68E7, // $68E7 + #$68E8, // $68E8 + #$68E9, // $68E9 + #$68EA, // $68EA + #$68EB, // $68EB + #$68EC, // $68EC + #$68ED, // $68ED + #$68EE, // $68EE + #$68EF, // $68EF + #$68F0, // $68F0 + #$68F1, // $68F1 + #$68F2, // $68F2 + #$68F3, // $68F3 + #$68F4, // $68F4 + #$68F5, // $68F5 + #$68F6, // $68F6 + #$68F7, // $68F7 + #$68F8, // $68F8 + #$68F9, // $68F9 + #$68FA, // $68FA + #$68FB, // $68FB + #$68FC, // $68FC + #$68FD, // $68FD + #$68FE, // $68FE + #$68FF, // $68FF + #$6900, // $6900 + #$6901, // $6901 + #$6902, // $6902 + #$6903, // $6903 + #$6904, // $6904 + #$6905, // $6905 + #$6906, // $6906 + #$6907, // $6907 + #$6908, // $6908 + #$6909, // $6909 + #$690A, // $690A + #$690B, // $690B + #$690C, // $690C + #$690D, // $690D + #$690E, // $690E + #$690F, // $690F + #$6910, // $6910 + #$6911, // $6911 + #$6912, // $6912 + #$6913, // $6913 + #$6914, // $6914 + #$6915, // $6915 + #$6916, // $6916 + #$6917, // $6917 + #$6918, // $6918 + #$6919, // $6919 + #$691A, // $691A + #$691B, // $691B + #$691C, // $691C + #$691D, // $691D + #$691E, // $691E + #$691F, // $691F + #$6920, // $6920 + #$6921, // $6921 + #$6922, // $6922 + #$6923, // $6923 + #$6924, // $6924 + #$6925, // $6925 + #$6926, // $6926 + #$6927, // $6927 + #$6928, // $6928 + #$6929, // $6929 + #$692A, // $692A + #$692B, // $692B + #$692C, // $692C + #$692D, // $692D + #$692E, // $692E + #$692F, // $692F + #$6930, // $6930 + #$6931, // $6931 + #$6932, // $6932 + #$6933, // $6933 + #$6934, // $6934 + #$6935, // $6935 + #$6936, // $6936 + #$6937, // $6937 + #$6938, // $6938 + #$6939, // $6939 + #$693A, // $693A + #$693B, // $693B + #$693C, // $693C + #$693D, // $693D + #$693E, // $693E + #$693F, // $693F + #$6940, // $6940 + #$6941, // $6941 + #$6942, // $6942 + #$6943, // $6943 + #$6944, // $6944 + #$6945, // $6945 + #$6946, // $6946 + #$6947, // $6947 + #$6948, // $6948 + #$6949, // $6949 + #$694A, // $694A + #$694B, // $694B + #$694C, // $694C + #$694D, // $694D + #$694E, // $694E + #$694F, // $694F + #$6950, // $6950 + #$6951, // $6951 + #$6952, // $6952 + #$6953, // $6953 + #$6954, // $6954 + #$6955, // $6955 + #$6956, // $6956 + #$6957, // $6957 + #$6958, // $6958 + #$6959, // $6959 + #$695A, // $695A + #$695B, // $695B + #$695C, // $695C + #$695D, // $695D + #$695E, // $695E + #$695F, // $695F + #$6960, // $6960 + #$6961, // $6961 + #$6962, // $6962 + #$6963, // $6963 + #$6964, // $6964 + #$6965, // $6965 + #$6966, // $6966 + #$6967, // $6967 + #$6968, // $6968 + #$6969, // $6969 + #$696A, // $696A + #$696B, // $696B + #$696C, // $696C + #$696D, // $696D + #$696E, // $696E + #$696F, // $696F + #$6970, // $6970 + #$6971, // $6971 + #$6972, // $6972 + #$6973, // $6973 + #$6974, // $6974 + #$6975, // $6975 + #$6976, // $6976 + #$6977, // $6977 + #$6978, // $6978 + #$6979, // $6979 + #$697A, // $697A + #$697B, // $697B + #$697C, // $697C + #$697D, // $697D + #$697E, // $697E + #$697F, // $697F + #$6980, // $6980 + #$6981, // $6981 + #$6982, // $6982 + #$6983, // $6983 + #$6984, // $6984 + #$6985, // $6985 + #$6986, // $6986 + #$6987, // $6987 + #$6988, // $6988 + #$6989, // $6989 + #$698A, // $698A + #$698B, // $698B + #$698C, // $698C + #$698D, // $698D + #$698E, // $698E + #$698F, // $698F + #$6990, // $6990 + #$6991, // $6991 + #$6992, // $6992 + #$6993, // $6993 + #$6994, // $6994 + #$6995, // $6995 + #$6996, // $6996 + #$6997, // $6997 + #$6998, // $6998 + #$6999, // $6999 + #$699A, // $699A + #$699B, // $699B + #$699C, // $699C + #$699D, // $699D + #$699E, // $699E + #$699F, // $699F + #$69A0, // $69A0 + #$69A1, // $69A1 + #$69A2, // $69A2 + #$69A3, // $69A3 + #$69A4, // $69A4 + #$69A5, // $69A5 + #$69A6, // $69A6 + #$69A7, // $69A7 + #$69A8, // $69A8 + #$69A9, // $69A9 + #$69AA, // $69AA + #$69AB, // $69AB + #$69AC, // $69AC + #$69AD, // $69AD + #$69AE, // $69AE + #$69AF, // $69AF + #$69B0, // $69B0 + #$69B1, // $69B1 + #$69B2, // $69B2 + #$69B3, // $69B3 + #$69B4, // $69B4 + #$69B5, // $69B5 + #$69B6, // $69B6 + #$69B7, // $69B7 + #$69B8, // $69B8 + #$69B9, // $69B9 + #$69BA, // $69BA + #$69BB, // $69BB + #$69BC, // $69BC + #$69BD, // $69BD + #$69BE, // $69BE + #$69BF, // $69BF + #$69C0, // $69C0 + #$69C1, // $69C1 + #$69C2, // $69C2 + #$69C3, // $69C3 + #$69C4, // $69C4 + #$69C5, // $69C5 + #$69C6, // $69C6 + #$69C7, // $69C7 + #$69C8, // $69C8 + #$69C9, // $69C9 + #$69CA, // $69CA + #$69CB, // $69CB + #$69CC, // $69CC + #$69CD, // $69CD + #$69CE, // $69CE + #$69CF, // $69CF + #$69D0, // $69D0 + #$69D1, // $69D1 + #$69D2, // $69D2 + #$69D3, // $69D3 + #$69D4, // $69D4 + #$69D5, // $69D5 + #$69D6, // $69D6 + #$69D7, // $69D7 + #$69D8, // $69D8 + #$69D9, // $69D9 + #$69DA, // $69DA + #$69DB, // $69DB + #$69DC, // $69DC + #$69DD, // $69DD + #$69DE, // $69DE + #$69DF, // $69DF + #$69E0, // $69E0 + #$69E1, // $69E1 + #$69E2, // $69E2 + #$69E3, // $69E3 + #$69E4, // $69E4 + #$69E5, // $69E5 + #$69E6, // $69E6 + #$69E7, // $69E7 + #$69E8, // $69E8 + #$69E9, // $69E9 + #$69EA, // $69EA + #$69EB, // $69EB + #$69EC, // $69EC + #$69ED, // $69ED + #$69EE, // $69EE + #$69EF, // $69EF + #$69F0, // $69F0 + #$69F1, // $69F1 + #$69F2, // $69F2 + #$69F3, // $69F3 + #$69F4, // $69F4 + #$69F5, // $69F5 + #$69F6, // $69F6 + #$69F7, // $69F7 + #$69F8, // $69F8 + #$69F9, // $69F9 + #$69FA, // $69FA + #$69FB, // $69FB + #$69FC, // $69FC + #$69FD, // $69FD + #$69FE, // $69FE + #$69FF, // $69FF + #$6A00, // $6A00 + #$6A01, // $6A01 + #$6A02, // $6A02 + #$6A03, // $6A03 + #$6A04, // $6A04 + #$6A05, // $6A05 + #$6A06, // $6A06 + #$6A07, // $6A07 + #$6A08, // $6A08 + #$6A09, // $6A09 + #$6A0A, // $6A0A + #$6A0B, // $6A0B + #$6A0C, // $6A0C + #$6A0D, // $6A0D + #$6A0E, // $6A0E + #$6A0F, // $6A0F + #$6A10, // $6A10 + #$6A11, // $6A11 + #$6A12, // $6A12 + #$6A13, // $6A13 + #$6A14, // $6A14 + #$6A15, // $6A15 + #$6A16, // $6A16 + #$6A17, // $6A17 + #$6A18, // $6A18 + #$6A19, // $6A19 + #$6A1A, // $6A1A + #$6A1B, // $6A1B + #$6A1C, // $6A1C + #$6A1D, // $6A1D + #$6A1E, // $6A1E + #$6A1F, // $6A1F + #$6A20, // $6A20 + #$6A21, // $6A21 + #$6A22, // $6A22 + #$6A23, // $6A23 + #$6A24, // $6A24 + #$6A25, // $6A25 + #$6A26, // $6A26 + #$6A27, // $6A27 + #$6A28, // $6A28 + #$6A29, // $6A29 + #$6A2A, // $6A2A + #$6A2B, // $6A2B + #$6A2C, // $6A2C + #$6A2D, // $6A2D + #$6A2E, // $6A2E + #$6A2F, // $6A2F + #$6A30, // $6A30 + #$6A31, // $6A31 + #$6A32, // $6A32 + #$6A33, // $6A33 + #$6A34, // $6A34 + #$6A35, // $6A35 + #$6A36, // $6A36 + #$6A37, // $6A37 + #$6A38, // $6A38 + #$6A39, // $6A39 + #$6A3A, // $6A3A + #$6A3B, // $6A3B + #$6A3C, // $6A3C + #$6A3D, // $6A3D + #$6A3E, // $6A3E + #$6A3F, // $6A3F + #$6A40, // $6A40 + #$6A41, // $6A41 + #$6A42, // $6A42 + #$6A43, // $6A43 + #$6A44, // $6A44 + #$6A45, // $6A45 + #$6A46, // $6A46 + #$6A47, // $6A47 + #$6A48, // $6A48 + #$6A49, // $6A49 + #$6A4A, // $6A4A + #$6A4B, // $6A4B + #$6A4C, // $6A4C + #$6A4D, // $6A4D + #$6A4E, // $6A4E + #$6A4F, // $6A4F + #$6A50, // $6A50 + #$6A51, // $6A51 + #$6A52, // $6A52 + #$6A53, // $6A53 + #$6A54, // $6A54 + #$6A55, // $6A55 + #$6A56, // $6A56 + #$6A57, // $6A57 + #$6A58, // $6A58 + #$6A59, // $6A59 + #$6A5A, // $6A5A + #$6A5B, // $6A5B + #$6A5C, // $6A5C + #$6A5D, // $6A5D + #$6A5E, // $6A5E + #$6A5F, // $6A5F + #$6A60, // $6A60 + #$6A61, // $6A61 + #$6A62, // $6A62 + #$6A63, // $6A63 + #$6A64, // $6A64 + #$6A65, // $6A65 + #$6A66, // $6A66 + #$6A67, // $6A67 + #$6A68, // $6A68 + #$6A69, // $6A69 + #$6A6A, // $6A6A + #$6A6B, // $6A6B + #$6A6C, // $6A6C + #$6A6D, // $6A6D + #$6A6E, // $6A6E + #$6A6F, // $6A6F + #$6A70, // $6A70 + #$6A71, // $6A71 + #$6A72, // $6A72 + #$6A73, // $6A73 + #$6A74, // $6A74 + #$6A75, // $6A75 + #$6A76, // $6A76 + #$6A77, // $6A77 + #$6A78, // $6A78 + #$6A79, // $6A79 + #$6A7A, // $6A7A + #$6A7B, // $6A7B + #$6A7C, // $6A7C + #$6A7D, // $6A7D + #$6A7E, // $6A7E + #$6A7F, // $6A7F + #$6A80, // $6A80 + #$6A81, // $6A81 + #$6A82, // $6A82 + #$6A83, // $6A83 + #$6A84, // $6A84 + #$6A85, // $6A85 + #$6A86, // $6A86 + #$6A87, // $6A87 + #$6A88, // $6A88 + #$6A89, // $6A89 + #$6A8A, // $6A8A + #$6A8B, // $6A8B + #$6A8C, // $6A8C + #$6A8D, // $6A8D + #$6A8E, // $6A8E + #$6A8F, // $6A8F + #$6A90, // $6A90 + #$6A91, // $6A91 + #$6A92, // $6A92 + #$6A93, // $6A93 + #$6A94, // $6A94 + #$6A95, // $6A95 + #$6A96, // $6A96 + #$6A97, // $6A97 + #$6A98, // $6A98 + #$6A99, // $6A99 + #$6A9A, // $6A9A + #$6A9B, // $6A9B + #$6A9C, // $6A9C + #$6A9D, // $6A9D + #$6A9E, // $6A9E + #$6A9F, // $6A9F + #$6AA0, // $6AA0 + #$6AA1, // $6AA1 + #$6AA2, // $6AA2 + #$6AA3, // $6AA3 + #$6AA4, // $6AA4 + #$6AA5, // $6AA5 + #$6AA6, // $6AA6 + #$6AA7, // $6AA7 + #$6AA8, // $6AA8 + #$6AA9, // $6AA9 + #$6AAA, // $6AAA + #$6AAB, // $6AAB + #$6AAC, // $6AAC + #$6AAD, // $6AAD + #$6AAE, // $6AAE + #$6AAF, // $6AAF + #$6AB0, // $6AB0 + #$6AB1, // $6AB1 + #$6AB2, // $6AB2 + #$6AB3, // $6AB3 + #$6AB4, // $6AB4 + #$6AB5, // $6AB5 + #$6AB6, // $6AB6 + #$6AB7, // $6AB7 + #$6AB8, // $6AB8 + #$6AB9, // $6AB9 + #$6ABA, // $6ABA + #$6ABB, // $6ABB + #$6ABC, // $6ABC + #$6ABD, // $6ABD + #$6ABE, // $6ABE + #$6ABF, // $6ABF + #$6AC0, // $6AC0 + #$6AC1, // $6AC1 + #$6AC2, // $6AC2 + #$6AC3, // $6AC3 + #$6AC4, // $6AC4 + #$6AC5, // $6AC5 + #$6AC6, // $6AC6 + #$6AC7, // $6AC7 + #$6AC8, // $6AC8 + #$6AC9, // $6AC9 + #$6ACA, // $6ACA + #$6ACB, // $6ACB + #$6ACC, // $6ACC + #$6ACD, // $6ACD + #$6ACE, // $6ACE + #$6ACF, // $6ACF + #$6AD0, // $6AD0 + #$6AD1, // $6AD1 + #$6AD2, // $6AD2 + #$6AD3, // $6AD3 + #$6AD4, // $6AD4 + #$6AD5, // $6AD5 + #$6AD6, // $6AD6 + #$6AD7, // $6AD7 + #$6AD8, // $6AD8 + #$6AD9, // $6AD9 + #$6ADA, // $6ADA + #$6ADB, // $6ADB + #$6ADC, // $6ADC + #$6ADD, // $6ADD + #$6ADE, // $6ADE + #$6ADF, // $6ADF + #$6AE0, // $6AE0 + #$6AE1, // $6AE1 + #$6AE2, // $6AE2 + #$6AE3, // $6AE3 + #$6AE4, // $6AE4 + #$6AE5, // $6AE5 + #$6AE6, // $6AE6 + #$6AE7, // $6AE7 + #$6AE8, // $6AE8 + #$6AE9, // $6AE9 + #$6AEA, // $6AEA + #$6AEB, // $6AEB + #$6AEC, // $6AEC + #$6AED, // $6AED + #$6AEE, // $6AEE + #$6AEF, // $6AEF + #$6AF0, // $6AF0 + #$6AF1, // $6AF1 + #$6AF2, // $6AF2 + #$6AF3, // $6AF3 + #$6AF4, // $6AF4 + #$6AF5, // $6AF5 + #$6AF6, // $6AF6 + #$6AF7, // $6AF7 + #$6AF8, // $6AF8 + #$6AF9, // $6AF9 + #$6AFA, // $6AFA + #$6AFB, // $6AFB + #$6AFC, // $6AFC + #$6AFD, // $6AFD + #$6AFE, // $6AFE + #$6AFF, // $6AFF + #$6B00, // $6B00 + #$6B01, // $6B01 + #$6B02, // $6B02 + #$6B03, // $6B03 + #$6B04, // $6B04 + #$6B05, // $6B05 + #$6B06, // $6B06 + #$6B07, // $6B07 + #$6B08, // $6B08 + #$6B09, // $6B09 + #$6B0A, // $6B0A + #$6B0B, // $6B0B + #$6B0C, // $6B0C + #$6B0D, // $6B0D + #$6B0E, // $6B0E + #$6B0F, // $6B0F + #$6B10, // $6B10 + #$6B11, // $6B11 + #$6B12, // $6B12 + #$6B13, // $6B13 + #$6B14, // $6B14 + #$6B15, // $6B15 + #$6B16, // $6B16 + #$6B17, // $6B17 + #$6B18, // $6B18 + #$6B19, // $6B19 + #$6B1A, // $6B1A + #$6B1B, // $6B1B + #$6B1C, // $6B1C + #$6B1D, // $6B1D + #$6B1E, // $6B1E + #$6B1F, // $6B1F + #$6B20, // $6B20 + #$6B21, // $6B21 + #$6B22, // $6B22 + #$6B23, // $6B23 + #$6B24, // $6B24 + #$6B25, // $6B25 + #$6B26, // $6B26 + #$6B27, // $6B27 + #$6B28, // $6B28 + #$6B29, // $6B29 + #$6B2A, // $6B2A + #$6B2B, // $6B2B + #$6B2C, // $6B2C + #$6B2D, // $6B2D + #$6B2E, // $6B2E + #$6B2F, // $6B2F + #$6B30, // $6B30 + #$6B31, // $6B31 + #$6B32, // $6B32 + #$6B33, // $6B33 + #$6B34, // $6B34 + #$6B35, // $6B35 + #$6B36, // $6B36 + #$6B37, // $6B37 + #$6B38, // $6B38 + #$6B39, // $6B39 + #$6B3A, // $6B3A + #$6B3B, // $6B3B + #$6B3C, // $6B3C + #$6B3D, // $6B3D + #$6B3E, // $6B3E + #$6B3F, // $6B3F + #$6B40, // $6B40 + #$6B41, // $6B41 + #$6B42, // $6B42 + #$6B43, // $6B43 + #$6B44, // $6B44 + #$6B45, // $6B45 + #$6B46, // $6B46 + #$6B47, // $6B47 + #$6B48, // $6B48 + #$6B49, // $6B49 + #$6B4A, // $6B4A + #$6B4B, // $6B4B + #$6B4C, // $6B4C + #$6B4D, // $6B4D + #$6B4E, // $6B4E + #$6B4F, // $6B4F + #$6B50, // $6B50 + #$6B51, // $6B51 + #$6B52, // $6B52 + #$6B53, // $6B53 + #$6B54, // $6B54 + #$6B55, // $6B55 + #$6B56, // $6B56 + #$6B57, // $6B57 + #$6B58, // $6B58 + #$6B59, // $6B59 + #$6B5A, // $6B5A + #$6B5B, // $6B5B + #$6B5C, // $6B5C + #$6B5D, // $6B5D + #$6B5E, // $6B5E + #$6B5F, // $6B5F + #$6B60, // $6B60 + #$6B61, // $6B61 + #$6B62, // $6B62 + #$6B63, // $6B63 + #$6B64, // $6B64 + #$6B65, // $6B65 + #$6B66, // $6B66 + #$6B67, // $6B67 + #$6B68, // $6B68 + #$6B69, // $6B69 + #$6B6A, // $6B6A + #$6B6B, // $6B6B + #$6B6C, // $6B6C + #$6B6D, // $6B6D + #$6B6E, // $6B6E + #$6B6F, // $6B6F + #$6B70, // $6B70 + #$6B71, // $6B71 + #$6B72, // $6B72 + #$6B73, // $6B73 + #$6B74, // $6B74 + #$6B75, // $6B75 + #$6B76, // $6B76 + #$6B77, // $6B77 + #$6B78, // $6B78 + #$6B79, // $6B79 + #$6B7A, // $6B7A + #$6B7B, // $6B7B + #$6B7C, // $6B7C + #$6B7D, // $6B7D + #$6B7E, // $6B7E + #$6B7F, // $6B7F + #$6B80, // $6B80 + #$6B81, // $6B81 + #$6B82, // $6B82 + #$6B83, // $6B83 + #$6B84, // $6B84 + #$6B85, // $6B85 + #$6B86, // $6B86 + #$6B87, // $6B87 + #$6B88, // $6B88 + #$6B89, // $6B89 + #$6B8A, // $6B8A + #$6B8B, // $6B8B + #$6B8C, // $6B8C + #$6B8D, // $6B8D + #$6B8E, // $6B8E + #$6B8F, // $6B8F + #$6B90, // $6B90 + #$6B91, // $6B91 + #$6B92, // $6B92 + #$6B93, // $6B93 + #$6B94, // $6B94 + #$6B95, // $6B95 + #$6B96, // $6B96 + #$6B97, // $6B97 + #$6B98, // $6B98 + #$6B99, // $6B99 + #$6B9A, // $6B9A + #$6B9B, // $6B9B + #$6B9C, // $6B9C + #$6B9D, // $6B9D + #$6B9E, // $6B9E + #$6B9F, // $6B9F + #$6BA0, // $6BA0 + #$6BA1, // $6BA1 + #$6BA2, // $6BA2 + #$6BA3, // $6BA3 + #$6BA4, // $6BA4 + #$6BA5, // $6BA5 + #$6BA6, // $6BA6 + #$6BA7, // $6BA7 + #$6BA8, // $6BA8 + #$6BA9, // $6BA9 + #$6BAA, // $6BAA + #$6BAB, // $6BAB + #$6BAC, // $6BAC + #$6BAD, // $6BAD + #$6BAE, // $6BAE + #$6BAF, // $6BAF + #$6BB0, // $6BB0 + #$6BB1, // $6BB1 + #$6BB2, // $6BB2 + #$6BB3, // $6BB3 + #$6BB4, // $6BB4 + #$6BB5, // $6BB5 + #$6BB6, // $6BB6 + #$6BB7, // $6BB7 + #$6BB8, // $6BB8 + #$6BB9, // $6BB9 + #$6BBA, // $6BBA + #$6BBB, // $6BBB + #$6BBC, // $6BBC + #$6BBD, // $6BBD + #$6BBE, // $6BBE + #$6BBF, // $6BBF + #$6BC0, // $6BC0 + #$6BC1, // $6BC1 + #$6BC2, // $6BC2 + #$6BC3, // $6BC3 + #$6BC4, // $6BC4 + #$6BC5, // $6BC5 + #$6BC6, // $6BC6 + #$6BC7, // $6BC7 + #$6BC8, // $6BC8 + #$6BC9, // $6BC9 + #$6BCA, // $6BCA + #$6BCB, // $6BCB + #$6BCC, // $6BCC + #$6BCD, // $6BCD + #$6BCE, // $6BCE + #$6BCF, // $6BCF + #$6BD0, // $6BD0 + #$6BD1, // $6BD1 + #$6BD2, // $6BD2 + #$6BD3, // $6BD3 + #$6BD4, // $6BD4 + #$6BD5, // $6BD5 + #$6BD6, // $6BD6 + #$6BD7, // $6BD7 + #$6BD8, // $6BD8 + #$6BD9, // $6BD9 + #$6BDA, // $6BDA + #$6BDB, // $6BDB + #$6BDC, // $6BDC + #$6BDD, // $6BDD + #$6BDE, // $6BDE + #$6BDF, // $6BDF + #$6BE0, // $6BE0 + #$6BE1, // $6BE1 + #$6BE2, // $6BE2 + #$6BE3, // $6BE3 + #$6BE4, // $6BE4 + #$6BE5, // $6BE5 + #$6BE6, // $6BE6 + #$6BE7, // $6BE7 + #$6BE8, // $6BE8 + #$6BE9, // $6BE9 + #$6BEA, // $6BEA + #$6BEB, // $6BEB + #$6BEC, // $6BEC + #$6BED, // $6BED + #$6BEE, // $6BEE + #$6BEF, // $6BEF + #$6BF0, // $6BF0 + #$6BF1, // $6BF1 + #$6BF2, // $6BF2 + #$6BF3, // $6BF3 + #$6BF4, // $6BF4 + #$6BF5, // $6BF5 + #$6BF6, // $6BF6 + #$6BF7, // $6BF7 + #$6BF8, // $6BF8 + #$6BF9, // $6BF9 + #$6BFA, // $6BFA + #$6BFB, // $6BFB + #$6BFC, // $6BFC + #$6BFD, // $6BFD + #$6BFE, // $6BFE + #$6BFF, // $6BFF + #$6C00, // $6C00 + #$6C01, // $6C01 + #$6C02, // $6C02 + #$6C03, // $6C03 + #$6C04, // $6C04 + #$6C05, // $6C05 + #$6C06, // $6C06 + #$6C07, // $6C07 + #$6C08, // $6C08 + #$6C09, // $6C09 + #$6C0A, // $6C0A + #$6C0B, // $6C0B + #$6C0C, // $6C0C + #$6C0D, // $6C0D + #$6C0E, // $6C0E + #$6C0F, // $6C0F + #$6C10, // $6C10 + #$6C11, // $6C11 + #$6C12, // $6C12 + #$6C13, // $6C13 + #$6C14, // $6C14 + #$6C15, // $6C15 + #$6C16, // $6C16 + #$6C17, // $6C17 + #$6C18, // $6C18 + #$6C19, // $6C19 + #$6C1A, // $6C1A + #$6C1B, // $6C1B + #$6C1C, // $6C1C + #$6C1D, // $6C1D + #$6C1E, // $6C1E + #$6C1F, // $6C1F + #$6C20, // $6C20 + #$6C21, // $6C21 + #$6C22, // $6C22 + #$6C23, // $6C23 + #$6C24, // $6C24 + #$6C25, // $6C25 + #$6C26, // $6C26 + #$6C27, // $6C27 + #$6C28, // $6C28 + #$6C29, // $6C29 + #$6C2A, // $6C2A + #$6C2B, // $6C2B + #$6C2C, // $6C2C + #$6C2D, // $6C2D + #$6C2E, // $6C2E + #$6C2F, // $6C2F + #$6C30, // $6C30 + #$6C31, // $6C31 + #$6C32, // $6C32 + #$6C33, // $6C33 + #$6C34, // $6C34 + #$6C35, // $6C35 + #$6C36, // $6C36 + #$6C37, // $6C37 + #$6C38, // $6C38 + #$6C39, // $6C39 + #$6C3A, // $6C3A + #$6C3B, // $6C3B + #$6C3C, // $6C3C + #$6C3D, // $6C3D + #$6C3E, // $6C3E + #$6C3F, // $6C3F + #$6C40, // $6C40 + #$6C41, // $6C41 + #$6C42, // $6C42 + #$6C43, // $6C43 + #$6C44, // $6C44 + #$6C45, // $6C45 + #$6C46, // $6C46 + #$6C47, // $6C47 + #$6C48, // $6C48 + #$6C49, // $6C49 + #$6C4A, // $6C4A + #$6C4B, // $6C4B + #$6C4C, // $6C4C + #$6C4D, // $6C4D + #$6C4E, // $6C4E + #$6C4F, // $6C4F + #$6C50, // $6C50 + #$6C51, // $6C51 + #$6C52, // $6C52 + #$6C53, // $6C53 + #$6C54, // $6C54 + #$6C55, // $6C55 + #$6C56, // $6C56 + #$6C57, // $6C57 + #$6C58, // $6C58 + #$6C59, // $6C59 + #$6C5A, // $6C5A + #$6C5B, // $6C5B + #$6C5C, // $6C5C + #$6C5D, // $6C5D + #$6C5E, // $6C5E + #$6C5F, // $6C5F + #$6C60, // $6C60 + #$6C61, // $6C61 + #$6C62, // $6C62 + #$6C63, // $6C63 + #$6C64, // $6C64 + #$6C65, // $6C65 + #$6C66, // $6C66 + #$6C67, // $6C67 + #$6C68, // $6C68 + #$6C69, // $6C69 + #$6C6A, // $6C6A + #$6C6B, // $6C6B + #$6C6C, // $6C6C + #$6C6D, // $6C6D + #$6C6E, // $6C6E + #$6C6F, // $6C6F + #$6C70, // $6C70 + #$6C71, // $6C71 + #$6C72, // $6C72 + #$6C73, // $6C73 + #$6C74, // $6C74 + #$6C75, // $6C75 + #$6C76, // $6C76 + #$6C77, // $6C77 + #$6C78, // $6C78 + #$6C79, // $6C79 + #$6C7A, // $6C7A + #$6C7B, // $6C7B + #$6C7C, // $6C7C + #$6C7D, // $6C7D + #$6C7E, // $6C7E + #$6C7F, // $6C7F + #$6C80, // $6C80 + #$6C81, // $6C81 + #$6C82, // $6C82 + #$6C83, // $6C83 + #$6C84, // $6C84 + #$6C85, // $6C85 + #$6C86, // $6C86 + #$6C87, // $6C87 + #$6C88, // $6C88 + #$6C89, // $6C89 + #$6C8A, // $6C8A + #$6C8B, // $6C8B + #$6C8C, // $6C8C + #$6C8D, // $6C8D + #$6C8E, // $6C8E + #$6C8F, // $6C8F + #$6C90, // $6C90 + #$6C91, // $6C91 + #$6C92, // $6C92 + #$6C93, // $6C93 + #$6C94, // $6C94 + #$6C95, // $6C95 + #$6C96, // $6C96 + #$6C97, // $6C97 + #$6C98, // $6C98 + #$6C99, // $6C99 + #$6C9A, // $6C9A + #$6C9B, // $6C9B + #$6C9C, // $6C9C + #$6C9D, // $6C9D + #$6C9E, // $6C9E + #$6C9F, // $6C9F + #$6CA0, // $6CA0 + #$6CA1, // $6CA1 + #$6CA2, // $6CA2 + #$6CA3, // $6CA3 + #$6CA4, // $6CA4 + #$6CA5, // $6CA5 + #$6CA6, // $6CA6 + #$6CA7, // $6CA7 + #$6CA8, // $6CA8 + #$6CA9, // $6CA9 + #$6CAA, // $6CAA + #$6CAB, // $6CAB + #$6CAC, // $6CAC + #$6CAD, // $6CAD + #$6CAE, // $6CAE + #$6CAF, // $6CAF + #$6CB0, // $6CB0 + #$6CB1, // $6CB1 + #$6CB2, // $6CB2 + #$6CB3, // $6CB3 + #$6CB4, // $6CB4 + #$6CB5, // $6CB5 + #$6CB6, // $6CB6 + #$6CB7, // $6CB7 + #$6CB8, // $6CB8 + #$6CB9, // $6CB9 + #$6CBA, // $6CBA + #$6CBB, // $6CBB + #$6CBC, // $6CBC + #$6CBD, // $6CBD + #$6CBE, // $6CBE + #$6CBF, // $6CBF + #$6CC0, // $6CC0 + #$6CC1, // $6CC1 + #$6CC2, // $6CC2 + #$6CC3, // $6CC3 + #$6CC4, // $6CC4 + #$6CC5, // $6CC5 + #$6CC6, // $6CC6 + #$6CC7, // $6CC7 + #$6CC8, // $6CC8 + #$6CC9, // $6CC9 + #$6CCA, // $6CCA + #$6CCB, // $6CCB + #$6CCC, // $6CCC + #$6CCD, // $6CCD + #$6CCE, // $6CCE + #$6CCF, // $6CCF + #$6CD0, // $6CD0 + #$6CD1, // $6CD1 + #$6CD2, // $6CD2 + #$6CD3, // $6CD3 + #$6CD4, // $6CD4 + #$6CD5, // $6CD5 + #$6CD6, // $6CD6 + #$6CD7, // $6CD7 + #$6CD8, // $6CD8 + #$6CD9, // $6CD9 + #$6CDA, // $6CDA + #$6CDB, // $6CDB + #$6CDC, // $6CDC + #$6CDD, // $6CDD + #$6CDE, // $6CDE + #$6CDF, // $6CDF + #$6CE0, // $6CE0 + #$6CE1, // $6CE1 + #$6CE2, // $6CE2 + #$6CE3, // $6CE3 + #$6CE4, // $6CE4 + #$6CE5, // $6CE5 + #$6CE6, // $6CE6 + #$6CE7, // $6CE7 + #$6CE8, // $6CE8 + #$6CE9, // $6CE9 + #$6CEA, // $6CEA + #$6CEB, // $6CEB + #$6CEC, // $6CEC + #$6CED, // $6CED + #$6CEE, // $6CEE + #$6CEF, // $6CEF + #$6CF0, // $6CF0 + #$6CF1, // $6CF1 + #$6CF2, // $6CF2 + #$6CF3, // $6CF3 + #$6CF4, // $6CF4 + #$6CF5, // $6CF5 + #$6CF6, // $6CF6 + #$6CF7, // $6CF7 + #$6CF8, // $6CF8 + #$6CF9, // $6CF9 + #$6CFA, // $6CFA + #$6CFB, // $6CFB + #$6CFC, // $6CFC + #$6CFD, // $6CFD + #$6CFE, // $6CFE + #$6CFF, // $6CFF + #$6D00, // $6D00 + #$6D01, // $6D01 + #$6D02, // $6D02 + #$6D03, // $6D03 + #$6D04, // $6D04 + #$6D05, // $6D05 + #$6D06, // $6D06 + #$6D07, // $6D07 + #$6D08, // $6D08 + #$6D09, // $6D09 + #$6D0A, // $6D0A + #$6D0B, // $6D0B + #$6D0C, // $6D0C + #$6D0D, // $6D0D + #$6D0E, // $6D0E + #$6D0F, // $6D0F + #$6D10, // $6D10 + #$6D11, // $6D11 + #$6D12, // $6D12 + #$6D13, // $6D13 + #$6D14, // $6D14 + #$6D15, // $6D15 + #$6D16, // $6D16 + #$6D17, // $6D17 + #$6D18, // $6D18 + #$6D19, // $6D19 + #$6D1A, // $6D1A + #$6D1B, // $6D1B + #$6D1C, // $6D1C + #$6D1D, // $6D1D + #$6D1E, // $6D1E + #$6D1F, // $6D1F + #$6D20, // $6D20 + #$6D21, // $6D21 + #$6D22, // $6D22 + #$6D23, // $6D23 + #$6D24, // $6D24 + #$6D25, // $6D25 + #$6D26, // $6D26 + #$6D27, // $6D27 + #$6D28, // $6D28 + #$6D29, // $6D29 + #$6D2A, // $6D2A + #$6D2B, // $6D2B + #$6D2C, // $6D2C + #$6D2D, // $6D2D + #$6D2E, // $6D2E + #$6D2F, // $6D2F + #$6D30, // $6D30 + #$6D31, // $6D31 + #$6D32, // $6D32 + #$6D33, // $6D33 + #$6D34, // $6D34 + #$6D35, // $6D35 + #$6D36, // $6D36 + #$6D37, // $6D37 + #$6D38, // $6D38 + #$6D39, // $6D39 + #$6D3A, // $6D3A + #$6D3B, // $6D3B + #$6D3C, // $6D3C + #$6D3D, // $6D3D + #$6D3E, // $6D3E + #$6D3F, // $6D3F + #$6D40, // $6D40 + #$6D41, // $6D41 + #$6D42, // $6D42 + #$6D43, // $6D43 + #$6D44, // $6D44 + #$6D45, // $6D45 + #$6D46, // $6D46 + #$6D47, // $6D47 + #$6D48, // $6D48 + #$6D49, // $6D49 + #$6D4A, // $6D4A + #$6D4B, // $6D4B + #$6D4C, // $6D4C + #$6D4D, // $6D4D + #$6D4E, // $6D4E + #$6D4F, // $6D4F + #$6D50, // $6D50 + #$6D51, // $6D51 + #$6D52, // $6D52 + #$6D53, // $6D53 + #$6D54, // $6D54 + #$6D55, // $6D55 + #$6D56, // $6D56 + #$6D57, // $6D57 + #$6D58, // $6D58 + #$6D59, // $6D59 + #$6D5A, // $6D5A + #$6D5B, // $6D5B + #$6D5C, // $6D5C + #$6D5D, // $6D5D + #$6D5E, // $6D5E + #$6D5F, // $6D5F + #$6D60, // $6D60 + #$6D61, // $6D61 + #$6D62, // $6D62 + #$6D63, // $6D63 + #$6D64, // $6D64 + #$6D65, // $6D65 + #$6D66, // $6D66 + #$6D67, // $6D67 + #$6D68, // $6D68 + #$6D69, // $6D69 + #$6D6A, // $6D6A + #$6D6B, // $6D6B + #$6D6C, // $6D6C + #$6D6D, // $6D6D + #$6D6E, // $6D6E + #$6D6F, // $6D6F + #$6D70, // $6D70 + #$6D71, // $6D71 + #$6D72, // $6D72 + #$6D73, // $6D73 + #$6D74, // $6D74 + #$6D75, // $6D75 + #$6D76, // $6D76 + #$6D77, // $6D77 + #$6D78, // $6D78 + #$6D79, // $6D79 + #$6D7A, // $6D7A + #$6D7B, // $6D7B + #$6D7C, // $6D7C + #$6D7D, // $6D7D + #$6D7E, // $6D7E + #$6D7F, // $6D7F + #$6D80, // $6D80 + #$6D81, // $6D81 + #$6D82, // $6D82 + #$6D83, // $6D83 + #$6D84, // $6D84 + #$6D85, // $6D85 + #$6D86, // $6D86 + #$6D87, // $6D87 + #$6D88, // $6D88 + #$6D89, // $6D89 + #$6D8A, // $6D8A + #$6D8B, // $6D8B + #$6D8C, // $6D8C + #$6D8D, // $6D8D + #$6D8E, // $6D8E + #$6D8F, // $6D8F + #$6D90, // $6D90 + #$6D91, // $6D91 + #$6D92, // $6D92 + #$6D93, // $6D93 + #$6D94, // $6D94 + #$6D95, // $6D95 + #$6D96, // $6D96 + #$6D97, // $6D97 + #$6D98, // $6D98 + #$6D99, // $6D99 + #$6D9A, // $6D9A + #$6D9B, // $6D9B + #$6D9C, // $6D9C + #$6D9D, // $6D9D + #$6D9E, // $6D9E + #$6D9F, // $6D9F + #$6DA0, // $6DA0 + #$6DA1, // $6DA1 + #$6DA2, // $6DA2 + #$6DA3, // $6DA3 + #$6DA4, // $6DA4 + #$6DA5, // $6DA5 + #$6DA6, // $6DA6 + #$6DA7, // $6DA7 + #$6DA8, // $6DA8 + #$6DA9, // $6DA9 + #$6DAA, // $6DAA + #$6DAB, // $6DAB + #$6DAC, // $6DAC + #$6DAD, // $6DAD + #$6DAE, // $6DAE + #$6DAF, // $6DAF + #$6DB0, // $6DB0 + #$6DB1, // $6DB1 + #$6DB2, // $6DB2 + #$6DB3, // $6DB3 + #$6DB4, // $6DB4 + #$6DB5, // $6DB5 + #$6DB6, // $6DB6 + #$6DB7, // $6DB7 + #$6DB8, // $6DB8 + #$6DB9, // $6DB9 + #$6DBA, // $6DBA + #$6DBB, // $6DBB + #$6DBC, // $6DBC + #$6DBD, // $6DBD + #$6DBE, // $6DBE + #$6DBF, // $6DBF + #$6DC0, // $6DC0 + #$6DC1, // $6DC1 + #$6DC2, // $6DC2 + #$6DC3, // $6DC3 + #$6DC4, // $6DC4 + #$6DC5, // $6DC5 + #$6DC6, // $6DC6 + #$6DC7, // $6DC7 + #$6DC8, // $6DC8 + #$6DC9, // $6DC9 + #$6DCA, // $6DCA + #$6DCB, // $6DCB + #$6DCC, // $6DCC + #$6DCD, // $6DCD + #$6DCE, // $6DCE + #$6DCF, // $6DCF + #$6DD0, // $6DD0 + #$6DD1, // $6DD1 + #$6DD2, // $6DD2 + #$6DD3, // $6DD3 + #$6DD4, // $6DD4 + #$6DD5, // $6DD5 + #$6DD6, // $6DD6 + #$6DD7, // $6DD7 + #$6DD8, // $6DD8 + #$6DD9, // $6DD9 + #$6DDA, // $6DDA + #$6DDB, // $6DDB + #$6DDC, // $6DDC + #$6DDD, // $6DDD + #$6DDE, // $6DDE + #$6DDF, // $6DDF + #$6DE0, // $6DE0 + #$6DE1, // $6DE1 + #$6DE2, // $6DE2 + #$6DE3, // $6DE3 + #$6DE4, // $6DE4 + #$6DE5, // $6DE5 + #$6DE6, // $6DE6 + #$6DE7, // $6DE7 + #$6DE8, // $6DE8 + #$6DE9, // $6DE9 + #$6DEA, // $6DEA + #$6DEB, // $6DEB + #$6DEC, // $6DEC + #$6DED, // $6DED + #$6DEE, // $6DEE + #$6DEF, // $6DEF + #$6DF0, // $6DF0 + #$6DF1, // $6DF1 + #$6DF2, // $6DF2 + #$6DF3, // $6DF3 + #$6DF4, // $6DF4 + #$6DF5, // $6DF5 + #$6DF6, // $6DF6 + #$6DF7, // $6DF7 + #$6DF8, // $6DF8 + #$6DF9, // $6DF9 + #$6DFA, // $6DFA + #$6DFB, // $6DFB + #$6DFC, // $6DFC + #$6DFD, // $6DFD + #$6DFE, // $6DFE + #$6DFF, // $6DFF + #$6E00, // $6E00 + #$6E01, // $6E01 + #$6E02, // $6E02 + #$6E03, // $6E03 + #$6E04, // $6E04 + #$6E05, // $6E05 + #$6E06, // $6E06 + #$6E07, // $6E07 + #$6E08, // $6E08 + #$6E09, // $6E09 + #$6E0A, // $6E0A + #$6E0B, // $6E0B + #$6E0C, // $6E0C + #$6E0D, // $6E0D + #$6E0E, // $6E0E + #$6E0F, // $6E0F + #$6E10, // $6E10 + #$6E11, // $6E11 + #$6E12, // $6E12 + #$6E13, // $6E13 + #$6E14, // $6E14 + #$6E15, // $6E15 + #$6E16, // $6E16 + #$6E17, // $6E17 + #$6E18, // $6E18 + #$6E19, // $6E19 + #$6E1A, // $6E1A + #$6E1B, // $6E1B + #$6E1C, // $6E1C + #$6E1D, // $6E1D + #$6E1E, // $6E1E + #$6E1F, // $6E1F + #$6E20, // $6E20 + #$6E21, // $6E21 + #$6E22, // $6E22 + #$6E23, // $6E23 + #$6E24, // $6E24 + #$6E25, // $6E25 + #$6E26, // $6E26 + #$6E27, // $6E27 + #$6E28, // $6E28 + #$6E29, // $6E29 + #$6E2A, // $6E2A + #$6E2B, // $6E2B + #$6E2C, // $6E2C + #$6E2D, // $6E2D + #$6E2E, // $6E2E + #$6E2F, // $6E2F + #$6E30, // $6E30 + #$6E31, // $6E31 + #$6E32, // $6E32 + #$6E33, // $6E33 + #$6E34, // $6E34 + #$6E35, // $6E35 + #$6E36, // $6E36 + #$6E37, // $6E37 + #$6E38, // $6E38 + #$6E39, // $6E39 + #$6E3A, // $6E3A + #$6E3B, // $6E3B + #$6E3C, // $6E3C + #$6E3D, // $6E3D + #$6E3E, // $6E3E + #$6E3F, // $6E3F + #$6E40, // $6E40 + #$6E41, // $6E41 + #$6E42, // $6E42 + #$6E43, // $6E43 + #$6E44, // $6E44 + #$6E45, // $6E45 + #$6E46, // $6E46 + #$6E47, // $6E47 + #$6E48, // $6E48 + #$6E49, // $6E49 + #$6E4A, // $6E4A + #$6E4B, // $6E4B + #$6E4C, // $6E4C + #$6E4D, // $6E4D + #$6E4E, // $6E4E + #$6E4F, // $6E4F + #$6E50, // $6E50 + #$6E51, // $6E51 + #$6E52, // $6E52 + #$6E53, // $6E53 + #$6E54, // $6E54 + #$6E55, // $6E55 + #$6E56, // $6E56 + #$6E57, // $6E57 + #$6E58, // $6E58 + #$6E59, // $6E59 + #$6E5A, // $6E5A + #$6E5B, // $6E5B + #$6E5C, // $6E5C + #$6E5D, // $6E5D + #$6E5E, // $6E5E + #$6E5F, // $6E5F + #$6E60, // $6E60 + #$6E61, // $6E61 + #$6E62, // $6E62 + #$6E63, // $6E63 + #$6E64, // $6E64 + #$6E65, // $6E65 + #$6E66, // $6E66 + #$6E67, // $6E67 + #$6E68, // $6E68 + #$6E69, // $6E69 + #$6E6A, // $6E6A + #$6E6B, // $6E6B + #$6E6C, // $6E6C + #$6E6D, // $6E6D + #$6E6E, // $6E6E + #$6E6F, // $6E6F + #$6E70, // $6E70 + #$6E71, // $6E71 + #$6E72, // $6E72 + #$6E73, // $6E73 + #$6E74, // $6E74 + #$6E75, // $6E75 + #$6E76, // $6E76 + #$6E77, // $6E77 + #$6E78, // $6E78 + #$6E79, // $6E79 + #$6E7A, // $6E7A + #$6E7B, // $6E7B + #$6E7C, // $6E7C + #$6E7D, // $6E7D + #$6E7E, // $6E7E + #$6E7F, // $6E7F + #$6E80, // $6E80 + #$6E81, // $6E81 + #$6E82, // $6E82 + #$6E83, // $6E83 + #$6E84, // $6E84 + #$6E85, // $6E85 + #$6E86, // $6E86 + #$6E87, // $6E87 + #$6E88, // $6E88 + #$6E89, // $6E89 + #$6E8A, // $6E8A + #$6E8B, // $6E8B + #$6E8C, // $6E8C + #$6E8D, // $6E8D + #$6E8E, // $6E8E + #$6E8F, // $6E8F + #$6E90, // $6E90 + #$6E91, // $6E91 + #$6E92, // $6E92 + #$6E93, // $6E93 + #$6E94, // $6E94 + #$6E95, // $6E95 + #$6E96, // $6E96 + #$6E97, // $6E97 + #$6E98, // $6E98 + #$6E99, // $6E99 + #$6E9A, // $6E9A + #$6E9B, // $6E9B + #$6E9C, // $6E9C + #$6E9D, // $6E9D + #$6E9E, // $6E9E + #$6E9F, // $6E9F + #$6EA0, // $6EA0 + #$6EA1, // $6EA1 + #$6EA2, // $6EA2 + #$6EA3, // $6EA3 + #$6EA4, // $6EA4 + #$6EA5, // $6EA5 + #$6EA6, // $6EA6 + #$6EA7, // $6EA7 + #$6EA8, // $6EA8 + #$6EA9, // $6EA9 + #$6EAA, // $6EAA + #$6EAB, // $6EAB + #$6EAC, // $6EAC + #$6EAD, // $6EAD + #$6EAE, // $6EAE + #$6EAF, // $6EAF + #$6EB0, // $6EB0 + #$6EB1, // $6EB1 + #$6EB2, // $6EB2 + #$6EB3, // $6EB3 + #$6EB4, // $6EB4 + #$6EB5, // $6EB5 + #$6EB6, // $6EB6 + #$6EB7, // $6EB7 + #$6EB8, // $6EB8 + #$6EB9, // $6EB9 + #$6EBA, // $6EBA + #$6EBB, // $6EBB + #$6EBC, // $6EBC + #$6EBD, // $6EBD + #$6EBE, // $6EBE + #$6EBF, // $6EBF + #$6EC0, // $6EC0 + #$6EC1, // $6EC1 + #$6EC2, // $6EC2 + #$6EC3, // $6EC3 + #$6EC4, // $6EC4 + #$6EC5, // $6EC5 + #$6EC6, // $6EC6 + #$6EC7, // $6EC7 + #$6EC8, // $6EC8 + #$6EC9, // $6EC9 + #$6ECA, // $6ECA + #$6ECB, // $6ECB + #$6ECC, // $6ECC + #$6ECD, // $6ECD + #$6ECE, // $6ECE + #$6ECF, // $6ECF + #$6ED0, // $6ED0 + #$6ED1, // $6ED1 + #$6ED2, // $6ED2 + #$6ED3, // $6ED3 + #$6ED4, // $6ED4 + #$6ED5, // $6ED5 + #$6ED6, // $6ED6 + #$6ED7, // $6ED7 + #$6ED8, // $6ED8 + #$6ED9, // $6ED9 + #$6EDA, // $6EDA + #$6EDB, // $6EDB + #$6EDC, // $6EDC + #$6EDD, // $6EDD + #$6EDE, // $6EDE + #$6EDF, // $6EDF + #$6EE0, // $6EE0 + #$6EE1, // $6EE1 + #$6EE2, // $6EE2 + #$6EE3, // $6EE3 + #$6EE4, // $6EE4 + #$6EE5, // $6EE5 + #$6EE6, // $6EE6 + #$6EE7, // $6EE7 + #$6EE8, // $6EE8 + #$6EE9, // $6EE9 + #$6EEA, // $6EEA + #$6EEB, // $6EEB + #$6EEC, // $6EEC + #$6EED, // $6EED + #$6EEE, // $6EEE + #$6EEF, // $6EEF + #$6EF0, // $6EF0 + #$6EF1, // $6EF1 + #$6EF2, // $6EF2 + #$6EF3, // $6EF3 + #$6EF4, // $6EF4 + #$6EF5, // $6EF5 + #$6EF6, // $6EF6 + #$6EF7, // $6EF7 + #$6EF8, // $6EF8 + #$6EF9, // $6EF9 + #$6EFA, // $6EFA + #$6EFB, // $6EFB + #$6EFC, // $6EFC + #$6EFD, // $6EFD + #$6EFE, // $6EFE + #$6EFF, // $6EFF + #$6F00, // $6F00 + #$6F01, // $6F01 + #$6F02, // $6F02 + #$6F03, // $6F03 + #$6F04, // $6F04 + #$6F05, // $6F05 + #$6F06, // $6F06 + #$6F07, // $6F07 + #$6F08, // $6F08 + #$6F09, // $6F09 + #$6F0A, // $6F0A + #$6F0B, // $6F0B + #$6F0C, // $6F0C + #$6F0D, // $6F0D + #$6F0E, // $6F0E + #$6F0F, // $6F0F + #$6F10, // $6F10 + #$6F11, // $6F11 + #$6F12, // $6F12 + #$6F13, // $6F13 + #$6F14, // $6F14 + #$6F15, // $6F15 + #$6F16, // $6F16 + #$6F17, // $6F17 + #$6F18, // $6F18 + #$6F19, // $6F19 + #$6F1A, // $6F1A + #$6F1B, // $6F1B + #$6F1C, // $6F1C + #$6F1D, // $6F1D + #$6F1E, // $6F1E + #$6F1F, // $6F1F + #$6F20, // $6F20 + #$6F21, // $6F21 + #$6F22, // $6F22 + #$6F23, // $6F23 + #$6F24, // $6F24 + #$6F25, // $6F25 + #$6F26, // $6F26 + #$6F27, // $6F27 + #$6F28, // $6F28 + #$6F29, // $6F29 + #$6F2A, // $6F2A + #$6F2B, // $6F2B + #$6F2C, // $6F2C + #$6F2D, // $6F2D + #$6F2E, // $6F2E + #$6F2F, // $6F2F + #$6F30, // $6F30 + #$6F31, // $6F31 + #$6F32, // $6F32 + #$6F33, // $6F33 + #$6F34, // $6F34 + #$6F35, // $6F35 + #$6F36, // $6F36 + #$6F37, // $6F37 + #$6F38, // $6F38 + #$6F39, // $6F39 + #$6F3A, // $6F3A + #$6F3B, // $6F3B + #$6F3C, // $6F3C + #$6F3D, // $6F3D + #$6F3E, // $6F3E + #$6F3F, // $6F3F + #$6F40, // $6F40 + #$6F41, // $6F41 + #$6F42, // $6F42 + #$6F43, // $6F43 + #$6F44, // $6F44 + #$6F45, // $6F45 + #$6F46, // $6F46 + #$6F47, // $6F47 + #$6F48, // $6F48 + #$6F49, // $6F49 + #$6F4A, // $6F4A + #$6F4B, // $6F4B + #$6F4C, // $6F4C + #$6F4D, // $6F4D + #$6F4E, // $6F4E + #$6F4F, // $6F4F + #$6F50, // $6F50 + #$6F51, // $6F51 + #$6F52, // $6F52 + #$6F53, // $6F53 + #$6F54, // $6F54 + #$6F55, // $6F55 + #$6F56, // $6F56 + #$6F57, // $6F57 + #$6F58, // $6F58 + #$6F59, // $6F59 + #$6F5A, // $6F5A + #$6F5B, // $6F5B + #$6F5C, // $6F5C + #$6F5D, // $6F5D + #$6F5E, // $6F5E + #$6F5F, // $6F5F + #$6F60, // $6F60 + #$6F61, // $6F61 + #$6F62, // $6F62 + #$6F63, // $6F63 + #$6F64, // $6F64 + #$6F65, // $6F65 + #$6F66, // $6F66 + #$6F67, // $6F67 + #$6F68, // $6F68 + #$6F69, // $6F69 + #$6F6A, // $6F6A + #$6F6B, // $6F6B + #$6F6C, // $6F6C + #$6F6D, // $6F6D + #$6F6E, // $6F6E + #$6F6F, // $6F6F + #$6F70, // $6F70 + #$6F71, // $6F71 + #$6F72, // $6F72 + #$6F73, // $6F73 + #$6F74, // $6F74 + #$6F75, // $6F75 + #$6F76, // $6F76 + #$6F77, // $6F77 + #$6F78, // $6F78 + #$6F79, // $6F79 + #$6F7A, // $6F7A + #$6F7B, // $6F7B + #$6F7C, // $6F7C + #$6F7D, // $6F7D + #$6F7E, // $6F7E + #$6F7F, // $6F7F + #$6F80, // $6F80 + #$6F81, // $6F81 + #$6F82, // $6F82 + #$6F83, // $6F83 + #$6F84, // $6F84 + #$6F85, // $6F85 + #$6F86, // $6F86 + #$6F87, // $6F87 + #$6F88, // $6F88 + #$6F89, // $6F89 + #$6F8A, // $6F8A + #$6F8B, // $6F8B + #$6F8C, // $6F8C + #$6F8D, // $6F8D + #$6F8E, // $6F8E + #$6F8F, // $6F8F + #$6F90, // $6F90 + #$6F91, // $6F91 + #$6F92, // $6F92 + #$6F93, // $6F93 + #$6F94, // $6F94 + #$6F95, // $6F95 + #$6F96, // $6F96 + #$6F97, // $6F97 + #$6F98, // $6F98 + #$6F99, // $6F99 + #$6F9A, // $6F9A + #$6F9B, // $6F9B + #$6F9C, // $6F9C + #$6F9D, // $6F9D + #$6F9E, // $6F9E + #$6F9F, // $6F9F + #$6FA0, // $6FA0 + #$6FA1, // $6FA1 + #$6FA2, // $6FA2 + #$6FA3, // $6FA3 + #$6FA4, // $6FA4 + #$6FA5, // $6FA5 + #$6FA6, // $6FA6 + #$6FA7, // $6FA7 + #$6FA8, // $6FA8 + #$6FA9, // $6FA9 + #$6FAA, // $6FAA + #$6FAB, // $6FAB + #$6FAC, // $6FAC + #$6FAD, // $6FAD + #$6FAE, // $6FAE + #$6FAF, // $6FAF + #$6FB0, // $6FB0 + #$6FB1, // $6FB1 + #$6FB2, // $6FB2 + #$6FB3, // $6FB3 + #$6FB4, // $6FB4 + #$6FB5, // $6FB5 + #$6FB6, // $6FB6 + #$6FB7, // $6FB7 + #$6FB8, // $6FB8 + #$6FB9, // $6FB9 + #$6FBA, // $6FBA + #$6FBB, // $6FBB + #$6FBC, // $6FBC + #$6FBD, // $6FBD + #$6FBE, // $6FBE + #$6FBF, // $6FBF + #$6FC0, // $6FC0 + #$6FC1, // $6FC1 + #$6FC2, // $6FC2 + #$6FC3, // $6FC3 + #$6FC4, // $6FC4 + #$6FC5, // $6FC5 + #$6FC6, // $6FC6 + #$6FC7, // $6FC7 + #$6FC8, // $6FC8 + #$6FC9, // $6FC9 + #$6FCA, // $6FCA + #$6FCB, // $6FCB + #$6FCC, // $6FCC + #$6FCD, // $6FCD + #$6FCE, // $6FCE + #$6FCF, // $6FCF + #$6FD0, // $6FD0 + #$6FD1, // $6FD1 + #$6FD2, // $6FD2 + #$6FD3, // $6FD3 + #$6FD4, // $6FD4 + #$6FD5, // $6FD5 + #$6FD6, // $6FD6 + #$6FD7, // $6FD7 + #$6FD8, // $6FD8 + #$6FD9, // $6FD9 + #$6FDA, // $6FDA + #$6FDB, // $6FDB + #$6FDC, // $6FDC + #$6FDD, // $6FDD + #$6FDE, // $6FDE + #$6FDF, // $6FDF + #$6FE0, // $6FE0 + #$6FE1, // $6FE1 + #$6FE2, // $6FE2 + #$6FE3, // $6FE3 + #$6FE4, // $6FE4 + #$6FE5, // $6FE5 + #$6FE6, // $6FE6 + #$6FE7, // $6FE7 + #$6FE8, // $6FE8 + #$6FE9, // $6FE9 + #$6FEA, // $6FEA + #$6FEB, // $6FEB + #$6FEC, // $6FEC + #$6FED, // $6FED + #$6FEE, // $6FEE + #$6FEF, // $6FEF + #$6FF0, // $6FF0 + #$6FF1, // $6FF1 + #$6FF2, // $6FF2 + #$6FF3, // $6FF3 + #$6FF4, // $6FF4 + #$6FF5, // $6FF5 + #$6FF6, // $6FF6 + #$6FF7, // $6FF7 + #$6FF8, // $6FF8 + #$6FF9, // $6FF9 + #$6FFA, // $6FFA + #$6FFB, // $6FFB + #$6FFC, // $6FFC + #$6FFD, // $6FFD + #$6FFE, // $6FFE + #$6FFF, // $6FFF + #$7000, // $7000 + #$7001, // $7001 + #$7002, // $7002 + #$7003, // $7003 + #$7004, // $7004 + #$7005, // $7005 + #$7006, // $7006 + #$7007, // $7007 + #$7008, // $7008 + #$7009, // $7009 + #$700A, // $700A + #$700B, // $700B + #$700C, // $700C + #$700D, // $700D + #$700E, // $700E + #$700F, // $700F + #$7010, // $7010 + #$7011, // $7011 + #$7012, // $7012 + #$7013, // $7013 + #$7014, // $7014 + #$7015, // $7015 + #$7016, // $7016 + #$7017, // $7017 + #$7018, // $7018 + #$7019, // $7019 + #$701A, // $701A + #$701B, // $701B + #$701C, // $701C + #$701D, // $701D + #$701E, // $701E + #$701F, // $701F + #$7020, // $7020 + #$7021, // $7021 + #$7022, // $7022 + #$7023, // $7023 + #$7024, // $7024 + #$7025, // $7025 + #$7026, // $7026 + #$7027, // $7027 + #$7028, // $7028 + #$7029, // $7029 + #$702A, // $702A + #$702B, // $702B + #$702C, // $702C + #$702D, // $702D + #$702E, // $702E + #$702F, // $702F + #$7030, // $7030 + #$7031, // $7031 + #$7032, // $7032 + #$7033, // $7033 + #$7034, // $7034 + #$7035, // $7035 + #$7036, // $7036 + #$7037, // $7037 + #$7038, // $7038 + #$7039, // $7039 + #$703A, // $703A + #$703B, // $703B + #$703C, // $703C + #$703D, // $703D + #$703E, // $703E + #$703F, // $703F + #$7040, // $7040 + #$7041, // $7041 + #$7042, // $7042 + #$7043, // $7043 + #$7044, // $7044 + #$7045, // $7045 + #$7046, // $7046 + #$7047, // $7047 + #$7048, // $7048 + #$7049, // $7049 + #$704A, // $704A + #$704B, // $704B + #$704C, // $704C + #$704D, // $704D + #$704E, // $704E + #$704F, // $704F + #$7050, // $7050 + #$7051, // $7051 + #$7052, // $7052 + #$7053, // $7053 + #$7054, // $7054 + #$7055, // $7055 + #$7056, // $7056 + #$7057, // $7057 + #$7058, // $7058 + #$7059, // $7059 + #$705A, // $705A + #$705B, // $705B + #$705C, // $705C + #$705D, // $705D + #$705E, // $705E + #$705F, // $705F + #$7060, // $7060 + #$7061, // $7061 + #$7062, // $7062 + #$7063, // $7063 + #$7064, // $7064 + #$7065, // $7065 + #$7066, // $7066 + #$7067, // $7067 + #$7068, // $7068 + #$7069, // $7069 + #$706A, // $706A + #$706B, // $706B + #$706C, // $706C + #$706D, // $706D + #$706E, // $706E + #$706F, // $706F + #$7070, // $7070 + #$7071, // $7071 + #$7072, // $7072 + #$7073, // $7073 + #$7074, // $7074 + #$7075, // $7075 + #$7076, // $7076 + #$7077, // $7077 + #$7078, // $7078 + #$7079, // $7079 + #$707A, // $707A + #$707B, // $707B + #$707C, // $707C + #$707D, // $707D + #$707E, // $707E + #$707F, // $707F + #$7080, // $7080 + #$7081, // $7081 + #$7082, // $7082 + #$7083, // $7083 + #$7084, // $7084 + #$7085, // $7085 + #$7086, // $7086 + #$7087, // $7087 + #$7088, // $7088 + #$7089, // $7089 + #$708A, // $708A + #$708B, // $708B + #$708C, // $708C + #$708D, // $708D + #$708E, // $708E + #$708F, // $708F + #$7090, // $7090 + #$7091, // $7091 + #$7092, // $7092 + #$7093, // $7093 + #$7094, // $7094 + #$7095, // $7095 + #$7096, // $7096 + #$7097, // $7097 + #$7098, // $7098 + #$7099, // $7099 + #$709A, // $709A + #$709B, // $709B + #$709C, // $709C + #$709D, // $709D + #$709E, // $709E + #$709F, // $709F + #$70A0, // $70A0 + #$70A1, // $70A1 + #$70A2, // $70A2 + #$70A3, // $70A3 + #$70A4, // $70A4 + #$70A5, // $70A5 + #$70A6, // $70A6 + #$70A7, // $70A7 + #$70A8, // $70A8 + #$70A9, // $70A9 + #$70AA, // $70AA + #$70AB, // $70AB + #$70AC, // $70AC + #$70AD, // $70AD + #$70AE, // $70AE + #$70AF, // $70AF + #$70B0, // $70B0 + #$70B1, // $70B1 + #$70B2, // $70B2 + #$70B3, // $70B3 + #$70B4, // $70B4 + #$70B5, // $70B5 + #$70B6, // $70B6 + #$70B7, // $70B7 + #$70B8, // $70B8 + #$70B9, // $70B9 + #$70BA, // $70BA + #$70BB, // $70BB + #$70BC, // $70BC + #$70BD, // $70BD + #$70BE, // $70BE + #$70BF, // $70BF + #$70C0, // $70C0 + #$70C1, // $70C1 + #$70C2, // $70C2 + #$70C3, // $70C3 + #$70C4, // $70C4 + #$70C5, // $70C5 + #$70C6, // $70C6 + #$70C7, // $70C7 + #$70C8, // $70C8 + #$70C9, // $70C9 + #$70CA, // $70CA + #$70CB, // $70CB + #$70CC, // $70CC + #$70CD, // $70CD + #$70CE, // $70CE + #$70CF, // $70CF + #$70D0, // $70D0 + #$70D1, // $70D1 + #$70D2, // $70D2 + #$70D3, // $70D3 + #$70D4, // $70D4 + #$70D5, // $70D5 + #$70D6, // $70D6 + #$70D7, // $70D7 + #$70D8, // $70D8 + #$70D9, // $70D9 + #$70DA, // $70DA + #$70DB, // $70DB + #$70DC, // $70DC + #$70DD, // $70DD + #$70DE, // $70DE + #$70DF, // $70DF + #$70E0, // $70E0 + #$70E1, // $70E1 + #$70E2, // $70E2 + #$70E3, // $70E3 + #$70E4, // $70E4 + #$70E5, // $70E5 + #$70E6, // $70E6 + #$70E7, // $70E7 + #$70E8, // $70E8 + #$70E9, // $70E9 + #$70EA, // $70EA + #$70EB, // $70EB + #$70EC, // $70EC + #$70ED, // $70ED + #$70EE, // $70EE + #$70EF, // $70EF + #$70F0, // $70F0 + #$70F1, // $70F1 + #$70F2, // $70F2 + #$70F3, // $70F3 + #$70F4, // $70F4 + #$70F5, // $70F5 + #$70F6, // $70F6 + #$70F7, // $70F7 + #$70F8, // $70F8 + #$70F9, // $70F9 + #$70FA, // $70FA + #$70FB, // $70FB + #$70FC, // $70FC + #$70FD, // $70FD + #$70FE, // $70FE + #$70FF, // $70FF + #$7100, // $7100 + #$7101, // $7101 + #$7102, // $7102 + #$7103, // $7103 + #$7104, // $7104 + #$7105, // $7105 + #$7106, // $7106 + #$7107, // $7107 + #$7108, // $7108 + #$7109, // $7109 + #$710A, // $710A + #$710B, // $710B + #$710C, // $710C + #$710D, // $710D + #$710E, // $710E + #$710F, // $710F + #$7110, // $7110 + #$7111, // $7111 + #$7112, // $7112 + #$7113, // $7113 + #$7114, // $7114 + #$7115, // $7115 + #$7116, // $7116 + #$7117, // $7117 + #$7118, // $7118 + #$7119, // $7119 + #$711A, // $711A + #$711B, // $711B + #$711C, // $711C + #$711D, // $711D + #$711E, // $711E + #$711F, // $711F + #$7120, // $7120 + #$7121, // $7121 + #$7122, // $7122 + #$7123, // $7123 + #$7124, // $7124 + #$7125, // $7125 + #$7126, // $7126 + #$7127, // $7127 + #$7128, // $7128 + #$7129, // $7129 + #$712A, // $712A + #$712B, // $712B + #$712C, // $712C + #$712D, // $712D + #$712E, // $712E + #$712F, // $712F + #$7130, // $7130 + #$7131, // $7131 + #$7132, // $7132 + #$7133, // $7133 + #$7134, // $7134 + #$7135, // $7135 + #$7136, // $7136 + #$7137, // $7137 + #$7138, // $7138 + #$7139, // $7139 + #$713A, // $713A + #$713B, // $713B + #$713C, // $713C + #$713D, // $713D + #$713E, // $713E + #$713F, // $713F + #$7140, // $7140 + #$7141, // $7141 + #$7142, // $7142 + #$7143, // $7143 + #$7144, // $7144 + #$7145, // $7145 + #$7146, // $7146 + #$7147, // $7147 + #$7148, // $7148 + #$7149, // $7149 + #$714A, // $714A + #$714B, // $714B + #$714C, // $714C + #$714D, // $714D + #$714E, // $714E + #$714F, // $714F + #$7150, // $7150 + #$7151, // $7151 + #$7152, // $7152 + #$7153, // $7153 + #$7154, // $7154 + #$7155, // $7155 + #$7156, // $7156 + #$7157, // $7157 + #$7158, // $7158 + #$7159, // $7159 + #$715A, // $715A + #$715B, // $715B + #$715C, // $715C + #$715D, // $715D + #$715E, // $715E + #$715F, // $715F + #$7160, // $7160 + #$7161, // $7161 + #$7162, // $7162 + #$7163, // $7163 + #$7164, // $7164 + #$7165, // $7165 + #$7166, // $7166 + #$7167, // $7167 + #$7168, // $7168 + #$7169, // $7169 + #$716A, // $716A + #$716B, // $716B + #$716C, // $716C + #$716D, // $716D + #$716E, // $716E + #$716F, // $716F + #$7170, // $7170 + #$7171, // $7171 + #$7172, // $7172 + #$7173, // $7173 + #$7174, // $7174 + #$7175, // $7175 + #$7176, // $7176 + #$7177, // $7177 + #$7178, // $7178 + #$7179, // $7179 + #$717A, // $717A + #$717B, // $717B + #$717C, // $717C + #$717D, // $717D + #$717E, // $717E + #$717F, // $717F + #$7180, // $7180 + #$7181, // $7181 + #$7182, // $7182 + #$7183, // $7183 + #$7184, // $7184 + #$7185, // $7185 + #$7186, // $7186 + #$7187, // $7187 + #$7188, // $7188 + #$7189, // $7189 + #$718A, // $718A + #$718B, // $718B + #$718C, // $718C + #$718D, // $718D + #$718E, // $718E + #$718F, // $718F + #$7190, // $7190 + #$7191, // $7191 + #$7192, // $7192 + #$7193, // $7193 + #$7194, // $7194 + #$7195, // $7195 + #$7196, // $7196 + #$7197, // $7197 + #$7198, // $7198 + #$7199, // $7199 + #$719A, // $719A + #$719B, // $719B + #$719C, // $719C + #$719D, // $719D + #$719E, // $719E + #$719F, // $719F + #$71A0, // $71A0 + #$71A1, // $71A1 + #$71A2, // $71A2 + #$71A3, // $71A3 + #$71A4, // $71A4 + #$71A5, // $71A5 + #$71A6, // $71A6 + #$71A7, // $71A7 + #$71A8, // $71A8 + #$71A9, // $71A9 + #$71AA, // $71AA + #$71AB, // $71AB + #$71AC, // $71AC + #$71AD, // $71AD + #$71AE, // $71AE + #$71AF, // $71AF + #$71B0, // $71B0 + #$71B1, // $71B1 + #$71B2, // $71B2 + #$71B3, // $71B3 + #$71B4, // $71B4 + #$71B5, // $71B5 + #$71B6, // $71B6 + #$71B7, // $71B7 + #$71B8, // $71B8 + #$71B9, // $71B9 + #$71BA, // $71BA + #$71BB, // $71BB + #$71BC, // $71BC + #$71BD, // $71BD + #$71BE, // $71BE + #$71BF, // $71BF + #$71C0, // $71C0 + #$71C1, // $71C1 + #$71C2, // $71C2 + #$71C3, // $71C3 + #$71C4, // $71C4 + #$71C5, // $71C5 + #$71C6, // $71C6 + #$71C7, // $71C7 + #$71C8, // $71C8 + #$71C9, // $71C9 + #$71CA, // $71CA + #$71CB, // $71CB + #$71CC, // $71CC + #$71CD, // $71CD + #$71CE, // $71CE + #$71CF, // $71CF + #$71D0, // $71D0 + #$71D1, // $71D1 + #$71D2, // $71D2 + #$71D3, // $71D3 + #$71D4, // $71D4 + #$71D5, // $71D5 + #$71D6, // $71D6 + #$71D7, // $71D7 + #$71D8, // $71D8 + #$71D9, // $71D9 + #$71DA, // $71DA + #$71DB, // $71DB + #$71DC, // $71DC + #$71DD, // $71DD + #$71DE, // $71DE + #$71DF, // $71DF + #$71E0, // $71E0 + #$71E1, // $71E1 + #$71E2, // $71E2 + #$71E3, // $71E3 + #$71E4, // $71E4 + #$71E5, // $71E5 + #$71E6, // $71E6 + #$71E7, // $71E7 + #$71E8, // $71E8 + #$71E9, // $71E9 + #$71EA, // $71EA + #$71EB, // $71EB + #$71EC, // $71EC + #$71ED, // $71ED + #$71EE, // $71EE + #$71EF, // $71EF + #$71F0, // $71F0 + #$71F1, // $71F1 + #$71F2, // $71F2 + #$71F3, // $71F3 + #$71F4, // $71F4 + #$71F5, // $71F5 + #$71F6, // $71F6 + #$71F7, // $71F7 + #$71F8, // $71F8 + #$71F9, // $71F9 + #$71FA, // $71FA + #$71FB, // $71FB + #$71FC, // $71FC + #$71FD, // $71FD + #$71FE, // $71FE + #$71FF, // $71FF + #$7200, // $7200 + #$7201, // $7201 + #$7202, // $7202 + #$7203, // $7203 + #$7204, // $7204 + #$7205, // $7205 + #$7206, // $7206 + #$7207, // $7207 + #$7208, // $7208 + #$7209, // $7209 + #$720A, // $720A + #$720B, // $720B + #$720C, // $720C + #$720D, // $720D + #$720E, // $720E + #$720F, // $720F + #$7210, // $7210 + #$7211, // $7211 + #$7212, // $7212 + #$7213, // $7213 + #$7214, // $7214 + #$7215, // $7215 + #$7216, // $7216 + #$7217, // $7217 + #$7218, // $7218 + #$7219, // $7219 + #$721A, // $721A + #$721B, // $721B + #$721C, // $721C + #$721D, // $721D + #$721E, // $721E + #$721F, // $721F + #$7220, // $7220 + #$7221, // $7221 + #$7222, // $7222 + #$7223, // $7223 + #$7224, // $7224 + #$7225, // $7225 + #$7226, // $7226 + #$7227, // $7227 + #$7228, // $7228 + #$7229, // $7229 + #$722A, // $722A + #$722B, // $722B + #$722C, // $722C + #$722D, // $722D + #$722E, // $722E + #$722F, // $722F + #$7230, // $7230 + #$7231, // $7231 + #$7232, // $7232 + #$7233, // $7233 + #$7234, // $7234 + #$7235, // $7235 + #$7236, // $7236 + #$7237, // $7237 + #$7238, // $7238 + #$7239, // $7239 + #$723A, // $723A + #$723B, // $723B + #$723C, // $723C + #$723D, // $723D + #$723E, // $723E + #$723F, // $723F + #$7240, // $7240 + #$7241, // $7241 + #$7242, // $7242 + #$7243, // $7243 + #$7244, // $7244 + #$7245, // $7245 + #$7246, // $7246 + #$7247, // $7247 + #$7248, // $7248 + #$7249, // $7249 + #$724A, // $724A + #$724B, // $724B + #$724C, // $724C + #$724D, // $724D + #$724E, // $724E + #$724F, // $724F + #$7250, // $7250 + #$7251, // $7251 + #$7252, // $7252 + #$7253, // $7253 + #$7254, // $7254 + #$7255, // $7255 + #$7256, // $7256 + #$7257, // $7257 + #$7258, // $7258 + #$7259, // $7259 + #$725A, // $725A + #$725B, // $725B + #$725C, // $725C + #$725D, // $725D + #$725E, // $725E + #$725F, // $725F + #$7260, // $7260 + #$7261, // $7261 + #$7262, // $7262 + #$7263, // $7263 + #$7264, // $7264 + #$7265, // $7265 + #$7266, // $7266 + #$7267, // $7267 + #$7268, // $7268 + #$7269, // $7269 + #$726A, // $726A + #$726B, // $726B + #$726C, // $726C + #$726D, // $726D + #$726E, // $726E + #$726F, // $726F + #$7270, // $7270 + #$7271, // $7271 + #$7272, // $7272 + #$7273, // $7273 + #$7274, // $7274 + #$7275, // $7275 + #$7276, // $7276 + #$7277, // $7277 + #$7278, // $7278 + #$7279, // $7279 + #$727A, // $727A + #$727B, // $727B + #$727C, // $727C + #$727D, // $727D + #$727E, // $727E + #$727F, // $727F + #$7280, // $7280 + #$7281, // $7281 + #$7282, // $7282 + #$7283, // $7283 + #$7284, // $7284 + #$7285, // $7285 + #$7286, // $7286 + #$7287, // $7287 + #$7288, // $7288 + #$7289, // $7289 + #$728A, // $728A + #$728B, // $728B + #$728C, // $728C + #$728D, // $728D + #$728E, // $728E + #$728F, // $728F + #$7290, // $7290 + #$7291, // $7291 + #$7292, // $7292 + #$7293, // $7293 + #$7294, // $7294 + #$7295, // $7295 + #$7296, // $7296 + #$7297, // $7297 + #$7298, // $7298 + #$7299, // $7299 + #$729A, // $729A + #$729B, // $729B + #$729C, // $729C + #$729D, // $729D + #$729E, // $729E + #$729F, // $729F + #$72A0, // $72A0 + #$72A1, // $72A1 + #$72A2, // $72A2 + #$72A3, // $72A3 + #$72A4, // $72A4 + #$72A5, // $72A5 + #$72A6, // $72A6 + #$72A7, // $72A7 + #$72A8, // $72A8 + #$72A9, // $72A9 + #$72AA, // $72AA + #$72AB, // $72AB + #$72AC, // $72AC + #$72AD, // $72AD + #$72AE, // $72AE + #$72AF, // $72AF + #$72B0, // $72B0 + #$72B1, // $72B1 + #$72B2, // $72B2 + #$72B3, // $72B3 + #$72B4, // $72B4 + #$72B5, // $72B5 + #$72B6, // $72B6 + #$72B7, // $72B7 + #$72B8, // $72B8 + #$72B9, // $72B9 + #$72BA, // $72BA + #$72BB, // $72BB + #$72BC, // $72BC + #$72BD, // $72BD + #$72BE, // $72BE + #$72BF, // $72BF + #$72C0, // $72C0 + #$72C1, // $72C1 + #$72C2, // $72C2 + #$72C3, // $72C3 + #$72C4, // $72C4 + #$72C5, // $72C5 + #$72C6, // $72C6 + #$72C7, // $72C7 + #$72C8, // $72C8 + #$72C9, // $72C9 + #$72CA, // $72CA + #$72CB, // $72CB + #$72CC, // $72CC + #$72CD, // $72CD + #$72CE, // $72CE + #$72CF, // $72CF + #$72D0, // $72D0 + #$72D1, // $72D1 + #$72D2, // $72D2 + #$72D3, // $72D3 + #$72D4, // $72D4 + #$72D5, // $72D5 + #$72D6, // $72D6 + #$72D7, // $72D7 + #$72D8, // $72D8 + #$72D9, // $72D9 + #$72DA, // $72DA + #$72DB, // $72DB + #$72DC, // $72DC + #$72DD, // $72DD + #$72DE, // $72DE + #$72DF, // $72DF + #$72E0, // $72E0 + #$72E1, // $72E1 + #$72E2, // $72E2 + #$72E3, // $72E3 + #$72E4, // $72E4 + #$72E5, // $72E5 + #$72E6, // $72E6 + #$72E7, // $72E7 + #$72E8, // $72E8 + #$72E9, // $72E9 + #$72EA, // $72EA + #$72EB, // $72EB + #$72EC, // $72EC + #$72ED, // $72ED + #$72EE, // $72EE + #$72EF, // $72EF + #$72F0, // $72F0 + #$72F1, // $72F1 + #$72F2, // $72F2 + #$72F3, // $72F3 + #$72F4, // $72F4 + #$72F5, // $72F5 + #$72F6, // $72F6 + #$72F7, // $72F7 + #$72F8, // $72F8 + #$72F9, // $72F9 + #$72FA, // $72FA + #$72FB, // $72FB + #$72FC, // $72FC + #$72FD, // $72FD + #$72FE, // $72FE + #$72FF, // $72FF + #$7300, // $7300 + #$7301, // $7301 + #$7302, // $7302 + #$7303, // $7303 + #$7304, // $7304 + #$7305, // $7305 + #$7306, // $7306 + #$7307, // $7307 + #$7308, // $7308 + #$7309, // $7309 + #$730A, // $730A + #$730B, // $730B + #$730C, // $730C + #$730D, // $730D + #$730E, // $730E + #$730F, // $730F + #$7310, // $7310 + #$7311, // $7311 + #$7312, // $7312 + #$7313, // $7313 + #$7314, // $7314 + #$7315, // $7315 + #$7316, // $7316 + #$7317, // $7317 + #$7318, // $7318 + #$7319, // $7319 + #$731A, // $731A + #$731B, // $731B + #$731C, // $731C + #$731D, // $731D + #$731E, // $731E + #$731F, // $731F + #$7320, // $7320 + #$7321, // $7321 + #$7322, // $7322 + #$7323, // $7323 + #$7324, // $7324 + #$7325, // $7325 + #$7326, // $7326 + #$7327, // $7327 + #$7328, // $7328 + #$7329, // $7329 + #$732A, // $732A + #$732B, // $732B + #$732C, // $732C + #$732D, // $732D + #$732E, // $732E + #$732F, // $732F + #$7330, // $7330 + #$7331, // $7331 + #$7332, // $7332 + #$7333, // $7333 + #$7334, // $7334 + #$7335, // $7335 + #$7336, // $7336 + #$7337, // $7337 + #$7338, // $7338 + #$7339, // $7339 + #$733A, // $733A + #$733B, // $733B + #$733C, // $733C + #$733D, // $733D + #$733E, // $733E + #$733F, // $733F + #$7340, // $7340 + #$7341, // $7341 + #$7342, // $7342 + #$7343, // $7343 + #$7344, // $7344 + #$7345, // $7345 + #$7346, // $7346 + #$7347, // $7347 + #$7348, // $7348 + #$7349, // $7349 + #$734A, // $734A + #$734B, // $734B + #$734C, // $734C + #$734D, // $734D + #$734E, // $734E + #$734F, // $734F + #$7350, // $7350 + #$7351, // $7351 + #$7352, // $7352 + #$7353, // $7353 + #$7354, // $7354 + #$7355, // $7355 + #$7356, // $7356 + #$7357, // $7357 + #$7358, // $7358 + #$7359, // $7359 + #$735A, // $735A + #$735B, // $735B + #$735C, // $735C + #$735D, // $735D + #$735E, // $735E + #$735F, // $735F + #$7360, // $7360 + #$7361, // $7361 + #$7362, // $7362 + #$7363, // $7363 + #$7364, // $7364 + #$7365, // $7365 + #$7366, // $7366 + #$7367, // $7367 + #$7368, // $7368 + #$7369, // $7369 + #$736A, // $736A + #$736B, // $736B + #$736C, // $736C + #$736D, // $736D + #$736E, // $736E + #$736F, // $736F + #$7370, // $7370 + #$7371, // $7371 + #$7372, // $7372 + #$7373, // $7373 + #$7374, // $7374 + #$7375, // $7375 + #$7376, // $7376 + #$7377, // $7377 + #$7378, // $7378 + #$7379, // $7379 + #$737A, // $737A + #$737B, // $737B + #$737C, // $737C + #$737D, // $737D + #$737E, // $737E + #$737F, // $737F + #$7380, // $7380 + #$7381, // $7381 + #$7382, // $7382 + #$7383, // $7383 + #$7384, // $7384 + #$7385, // $7385 + #$7386, // $7386 + #$7387, // $7387 + #$7388, // $7388 + #$7389, // $7389 + #$738A, // $738A + #$738B, // $738B + #$738C, // $738C + #$738D, // $738D + #$738E, // $738E + #$738F, // $738F + #$7390, // $7390 + #$7391, // $7391 + #$7392, // $7392 + #$7393, // $7393 + #$7394, // $7394 + #$7395, // $7395 + #$7396, // $7396 + #$7397, // $7397 + #$7398, // $7398 + #$7399, // $7399 + #$739A, // $739A + #$739B, // $739B + #$739C, // $739C + #$739D, // $739D + #$739E, // $739E + #$739F, // $739F + #$73A0, // $73A0 + #$73A1, // $73A1 + #$73A2, // $73A2 + #$73A3, // $73A3 + #$73A4, // $73A4 + #$73A5, // $73A5 + #$73A6, // $73A6 + #$73A7, // $73A7 + #$73A8, // $73A8 + #$73A9, // $73A9 + #$73AA, // $73AA + #$73AB, // $73AB + #$73AC, // $73AC + #$73AD, // $73AD + #$73AE, // $73AE + #$73AF, // $73AF + #$73B0, // $73B0 + #$73B1, // $73B1 + #$73B2, // $73B2 + #$73B3, // $73B3 + #$73B4, // $73B4 + #$73B5, // $73B5 + #$73B6, // $73B6 + #$73B7, // $73B7 + #$73B8, // $73B8 + #$73B9, // $73B9 + #$73BA, // $73BA + #$73BB, // $73BB + #$73BC, // $73BC + #$73BD, // $73BD + #$73BE, // $73BE + #$73BF, // $73BF + #$73C0, // $73C0 + #$73C1, // $73C1 + #$73C2, // $73C2 + #$73C3, // $73C3 + #$73C4, // $73C4 + #$73C5, // $73C5 + #$73C6, // $73C6 + #$73C7, // $73C7 + #$73C8, // $73C8 + #$73C9, // $73C9 + #$73CA, // $73CA + #$73CB, // $73CB + #$73CC, // $73CC + #$73CD, // $73CD + #$73CE, // $73CE + #$73CF, // $73CF + #$73D0, // $73D0 + #$73D1, // $73D1 + #$73D2, // $73D2 + #$73D3, // $73D3 + #$73D4, // $73D4 + #$73D5, // $73D5 + #$73D6, // $73D6 + #$73D7, // $73D7 + #$73D8, // $73D8 + #$73D9, // $73D9 + #$73DA, // $73DA + #$73DB, // $73DB + #$73DC, // $73DC + #$73DD, // $73DD + #$73DE, // $73DE + #$73DF, // $73DF + #$73E0, // $73E0 + #$73E1, // $73E1 + #$73E2, // $73E2 + #$73E3, // $73E3 + #$73E4, // $73E4 + #$73E5, // $73E5 + #$73E6, // $73E6 + #$73E7, // $73E7 + #$73E8, // $73E8 + #$73E9, // $73E9 + #$73EA, // $73EA + #$73EB, // $73EB + #$73EC, // $73EC + #$73ED, // $73ED + #$73EE, // $73EE + #$73EF, // $73EF + #$73F0, // $73F0 + #$73F1, // $73F1 + #$73F2, // $73F2 + #$73F3, // $73F3 + #$73F4, // $73F4 + #$73F5, // $73F5 + #$73F6, // $73F6 + #$73F7, // $73F7 + #$73F8, // $73F8 + #$73F9, // $73F9 + #$73FA, // $73FA + #$73FB, // $73FB + #$73FC, // $73FC + #$73FD, // $73FD + #$73FE, // $73FE + #$73FF, // $73FF + #$7400, // $7400 + #$7401, // $7401 + #$7402, // $7402 + #$7403, // $7403 + #$7404, // $7404 + #$7405, // $7405 + #$7406, // $7406 + #$7407, // $7407 + #$7408, // $7408 + #$7409, // $7409 + #$740A, // $740A + #$740B, // $740B + #$740C, // $740C + #$740D, // $740D + #$740E, // $740E + #$740F, // $740F + #$7410, // $7410 + #$7411, // $7411 + #$7412, // $7412 + #$7413, // $7413 + #$7414, // $7414 + #$7415, // $7415 + #$7416, // $7416 + #$7417, // $7417 + #$7418, // $7418 + #$7419, // $7419 + #$741A, // $741A + #$741B, // $741B + #$741C, // $741C + #$741D, // $741D + #$741E, // $741E + #$741F, // $741F + #$7420, // $7420 + #$7421, // $7421 + #$7422, // $7422 + #$7423, // $7423 + #$7424, // $7424 + #$7425, // $7425 + #$7426, // $7426 + #$7427, // $7427 + #$7428, // $7428 + #$7429, // $7429 + #$742A, // $742A + #$742B, // $742B + #$742C, // $742C + #$742D, // $742D + #$742E, // $742E + #$742F, // $742F + #$7430, // $7430 + #$7431, // $7431 + #$7432, // $7432 + #$7433, // $7433 + #$7434, // $7434 + #$7435, // $7435 + #$7436, // $7436 + #$7437, // $7437 + #$7438, // $7438 + #$7439, // $7439 + #$743A, // $743A + #$743B, // $743B + #$743C, // $743C + #$743D, // $743D + #$743E, // $743E + #$743F, // $743F + #$7440, // $7440 + #$7441, // $7441 + #$7442, // $7442 + #$7443, // $7443 + #$7444, // $7444 + #$7445, // $7445 + #$7446, // $7446 + #$7447, // $7447 + #$7448, // $7448 + #$7449, // $7449 + #$744A, // $744A + #$744B, // $744B + #$744C, // $744C + #$744D, // $744D + #$744E, // $744E + #$744F, // $744F + #$7450, // $7450 + #$7451, // $7451 + #$7452, // $7452 + #$7453, // $7453 + #$7454, // $7454 + #$7455, // $7455 + #$7456, // $7456 + #$7457, // $7457 + #$7458, // $7458 + #$7459, // $7459 + #$745A, // $745A + #$745B, // $745B + #$745C, // $745C + #$745D, // $745D + #$745E, // $745E + #$745F, // $745F + #$7460, // $7460 + #$7461, // $7461 + #$7462, // $7462 + #$7463, // $7463 + #$7464, // $7464 + #$7465, // $7465 + #$7466, // $7466 + #$7467, // $7467 + #$7468, // $7468 + #$7469, // $7469 + #$746A, // $746A + #$746B, // $746B + #$746C, // $746C + #$746D, // $746D + #$746E, // $746E + #$746F, // $746F + #$7470, // $7470 + #$7471, // $7471 + #$7472, // $7472 + #$7473, // $7473 + #$7474, // $7474 + #$7475, // $7475 + #$7476, // $7476 + #$7477, // $7477 + #$7478, // $7478 + #$7479, // $7479 + #$747A, // $747A + #$747B, // $747B + #$747C, // $747C + #$747D, // $747D + #$747E, // $747E + #$747F, // $747F + #$7480, // $7480 + #$7481, // $7481 + #$7482, // $7482 + #$7483, // $7483 + #$7484, // $7484 + #$7485, // $7485 + #$7486, // $7486 + #$7487, // $7487 + #$7488, // $7488 + #$7489, // $7489 + #$748A, // $748A + #$748B, // $748B + #$748C, // $748C + #$748D, // $748D + #$748E, // $748E + #$748F, // $748F + #$7490, // $7490 + #$7491, // $7491 + #$7492, // $7492 + #$7493, // $7493 + #$7494, // $7494 + #$7495, // $7495 + #$7496, // $7496 + #$7497, // $7497 + #$7498, // $7498 + #$7499, // $7499 + #$749A, // $749A + #$749B, // $749B + #$749C, // $749C + #$749D, // $749D + #$749E, // $749E + #$749F, // $749F + #$74A0, // $74A0 + #$74A1, // $74A1 + #$74A2, // $74A2 + #$74A3, // $74A3 + #$74A4, // $74A4 + #$74A5, // $74A5 + #$74A6, // $74A6 + #$74A7, // $74A7 + #$74A8, // $74A8 + #$74A9, // $74A9 + #$74AA, // $74AA + #$74AB, // $74AB + #$74AC, // $74AC + #$74AD, // $74AD + #$74AE, // $74AE + #$74AF, // $74AF + #$74B0, // $74B0 + #$74B1, // $74B1 + #$74B2, // $74B2 + #$74B3, // $74B3 + #$74B4, // $74B4 + #$74B5, // $74B5 + #$74B6, // $74B6 + #$74B7, // $74B7 + #$74B8, // $74B8 + #$74B9, // $74B9 + #$74BA, // $74BA + #$74BB, // $74BB + #$74BC, // $74BC + #$74BD, // $74BD + #$74BE, // $74BE + #$74BF, // $74BF + #$74C0, // $74C0 + #$74C1, // $74C1 + #$74C2, // $74C2 + #$74C3, // $74C3 + #$74C4, // $74C4 + #$74C5, // $74C5 + #$74C6, // $74C6 + #$74C7, // $74C7 + #$74C8, // $74C8 + #$74C9, // $74C9 + #$74CA, // $74CA + #$74CB, // $74CB + #$74CC, // $74CC + #$74CD, // $74CD + #$74CE, // $74CE + #$74CF, // $74CF + #$74D0, // $74D0 + #$74D1, // $74D1 + #$74D2, // $74D2 + #$74D3, // $74D3 + #$74D4, // $74D4 + #$74D5, // $74D5 + #$74D6, // $74D6 + #$74D7, // $74D7 + #$74D8, // $74D8 + #$74D9, // $74D9 + #$74DA, // $74DA + #$74DB, // $74DB + #$74DC, // $74DC + #$74DD, // $74DD + #$74DE, // $74DE + #$74DF, // $74DF + #$74E0, // $74E0 + #$74E1, // $74E1 + #$74E2, // $74E2 + #$74E3, // $74E3 + #$74E4, // $74E4 + #$74E5, // $74E5 + #$74E6, // $74E6 + #$74E7, // $74E7 + #$74E8, // $74E8 + #$74E9, // $74E9 + #$74EA, // $74EA + #$74EB, // $74EB + #$74EC, // $74EC + #$74ED, // $74ED + #$74EE, // $74EE + #$74EF, // $74EF + #$74F0, // $74F0 + #$74F1, // $74F1 + #$74F2, // $74F2 + #$74F3, // $74F3 + #$74F4, // $74F4 + #$74F5, // $74F5 + #$74F6, // $74F6 + #$74F7, // $74F7 + #$74F8, // $74F8 + #$74F9, // $74F9 + #$74FA, // $74FA + #$74FB, // $74FB + #$74FC, // $74FC + #$74FD, // $74FD + #$74FE, // $74FE + #$74FF, // $74FF + #$7500, // $7500 + #$7501, // $7501 + #$7502, // $7502 + #$7503, // $7503 + #$7504, // $7504 + #$7505, // $7505 + #$7506, // $7506 + #$7507, // $7507 + #$7508, // $7508 + #$7509, // $7509 + #$750A, // $750A + #$750B, // $750B + #$750C, // $750C + #$750D, // $750D + #$750E, // $750E + #$750F, // $750F + #$7510, // $7510 + #$7511, // $7511 + #$7512, // $7512 + #$7513, // $7513 + #$7514, // $7514 + #$7515, // $7515 + #$7516, // $7516 + #$7517, // $7517 + #$7518, // $7518 + #$7519, // $7519 + #$751A, // $751A + #$751B, // $751B + #$751C, // $751C + #$751D, // $751D + #$751E, // $751E + #$751F, // $751F + #$7520, // $7520 + #$7521, // $7521 + #$7522, // $7522 + #$7523, // $7523 + #$7524, // $7524 + #$7525, // $7525 + #$7526, // $7526 + #$7527, // $7527 + #$7528, // $7528 + #$7529, // $7529 + #$752A, // $752A + #$752B, // $752B + #$752C, // $752C + #$752D, // $752D + #$752E, // $752E + #$752F, // $752F + #$7530, // $7530 + #$7531, // $7531 + #$7532, // $7532 + #$7533, // $7533 + #$7534, // $7534 + #$7535, // $7535 + #$7536, // $7536 + #$7537, // $7537 + #$7538, // $7538 + #$7539, // $7539 + #$753A, // $753A + #$753B, // $753B + #$753C, // $753C + #$753D, // $753D + #$753E, // $753E + #$753F, // $753F + #$7540, // $7540 + #$7541, // $7541 + #$7542, // $7542 + #$7543, // $7543 + #$7544, // $7544 + #$7545, // $7545 + #$7546, // $7546 + #$7547, // $7547 + #$7548, // $7548 + #$7549, // $7549 + #$754A, // $754A + #$754B, // $754B + #$754C, // $754C + #$754D, // $754D + #$754E, // $754E + #$754F, // $754F + #$7550, // $7550 + #$7551, // $7551 + #$7552, // $7552 + #$7553, // $7553 + #$7554, // $7554 + #$7555, // $7555 + #$7556, // $7556 + #$7557, // $7557 + #$7558, // $7558 + #$7559, // $7559 + #$755A, // $755A + #$755B, // $755B + #$755C, // $755C + #$755D, // $755D + #$755E, // $755E + #$755F, // $755F + #$7560, // $7560 + #$7561, // $7561 + #$7562, // $7562 + #$7563, // $7563 + #$7564, // $7564 + #$7565, // $7565 + #$7566, // $7566 + #$7567, // $7567 + #$7568, // $7568 + #$7569, // $7569 + #$756A, // $756A + #$756B, // $756B + #$756C, // $756C + #$756D, // $756D + #$756E, // $756E + #$756F, // $756F + #$7570, // $7570 + #$7571, // $7571 + #$7572, // $7572 + #$7573, // $7573 + #$7574, // $7574 + #$7575, // $7575 + #$7576, // $7576 + #$7577, // $7577 + #$7578, // $7578 + #$7579, // $7579 + #$757A, // $757A + #$757B, // $757B + #$757C, // $757C + #$757D, // $757D + #$757E, // $757E + #$757F, // $757F + #$7580, // $7580 + #$7581, // $7581 + #$7582, // $7582 + #$7583, // $7583 + #$7584, // $7584 + #$7585, // $7585 + #$7586, // $7586 + #$7587, // $7587 + #$7588, // $7588 + #$7589, // $7589 + #$758A, // $758A + #$758B, // $758B + #$758C, // $758C + #$758D, // $758D + #$758E, // $758E + #$758F, // $758F + #$7590, // $7590 + #$7591, // $7591 + #$7592, // $7592 + #$7593, // $7593 + #$7594, // $7594 + #$7595, // $7595 + #$7596, // $7596 + #$7597, // $7597 + #$7598, // $7598 + #$7599, // $7599 + #$759A, // $759A + #$759B, // $759B + #$759C, // $759C + #$759D, // $759D + #$759E, // $759E + #$759F, // $759F + #$75A0, // $75A0 + #$75A1, // $75A1 + #$75A2, // $75A2 + #$75A3, // $75A3 + #$75A4, // $75A4 + #$75A5, // $75A5 + #$75A6, // $75A6 + #$75A7, // $75A7 + #$75A8, // $75A8 + #$75A9, // $75A9 + #$75AA, // $75AA + #$75AB, // $75AB + #$75AC, // $75AC + #$75AD, // $75AD + #$75AE, // $75AE + #$75AF, // $75AF + #$75B0, // $75B0 + #$75B1, // $75B1 + #$75B2, // $75B2 + #$75B3, // $75B3 + #$75B4, // $75B4 + #$75B5, // $75B5 + #$75B6, // $75B6 + #$75B7, // $75B7 + #$75B8, // $75B8 + #$75B9, // $75B9 + #$75BA, // $75BA + #$75BB, // $75BB + #$75BC, // $75BC + #$75BD, // $75BD + #$75BE, // $75BE + #$75BF, // $75BF + #$75C0, // $75C0 + #$75C1, // $75C1 + #$75C2, // $75C2 + #$75C3, // $75C3 + #$75C4, // $75C4 + #$75C5, // $75C5 + #$75C6, // $75C6 + #$75C7, // $75C7 + #$75C8, // $75C8 + #$75C9, // $75C9 + #$75CA, // $75CA + #$75CB, // $75CB + #$75CC, // $75CC + #$75CD, // $75CD + #$75CE, // $75CE + #$75CF, // $75CF + #$75D0, // $75D0 + #$75D1, // $75D1 + #$75D2, // $75D2 + #$75D3, // $75D3 + #$75D4, // $75D4 + #$75D5, // $75D5 + #$75D6, // $75D6 + #$75D7, // $75D7 + #$75D8, // $75D8 + #$75D9, // $75D9 + #$75DA, // $75DA + #$75DB, // $75DB + #$75DC, // $75DC + #$75DD, // $75DD + #$75DE, // $75DE + #$75DF, // $75DF + #$75E0, // $75E0 + #$75E1, // $75E1 + #$75E2, // $75E2 + #$75E3, // $75E3 + #$75E4, // $75E4 + #$75E5, // $75E5 + #$75E6, // $75E6 + #$75E7, // $75E7 + #$75E8, // $75E8 + #$75E9, // $75E9 + #$75EA, // $75EA + #$75EB, // $75EB + #$75EC, // $75EC + #$75ED, // $75ED + #$75EE, // $75EE + #$75EF, // $75EF + #$75F0, // $75F0 + #$75F1, // $75F1 + #$75F2, // $75F2 + #$75F3, // $75F3 + #$75F4, // $75F4 + #$75F5, // $75F5 + #$75F6, // $75F6 + #$75F7, // $75F7 + #$75F8, // $75F8 + #$75F9, // $75F9 + #$75FA, // $75FA + #$75FB, // $75FB + #$75FC, // $75FC + #$75FD, // $75FD + #$75FE, // $75FE + #$75FF, // $75FF + #$7600, // $7600 + #$7601, // $7601 + #$7602, // $7602 + #$7603, // $7603 + #$7604, // $7604 + #$7605, // $7605 + #$7606, // $7606 + #$7607, // $7607 + #$7608, // $7608 + #$7609, // $7609 + #$760A, // $760A + #$760B, // $760B + #$760C, // $760C + #$760D, // $760D + #$760E, // $760E + #$760F, // $760F + #$7610, // $7610 + #$7611, // $7611 + #$7612, // $7612 + #$7613, // $7613 + #$7614, // $7614 + #$7615, // $7615 + #$7616, // $7616 + #$7617, // $7617 + #$7618, // $7618 + #$7619, // $7619 + #$761A, // $761A + #$761B, // $761B + #$761C, // $761C + #$761D, // $761D + #$761E, // $761E + #$761F, // $761F + #$7620, // $7620 + #$7621, // $7621 + #$7622, // $7622 + #$7623, // $7623 + #$7624, // $7624 + #$7625, // $7625 + #$7626, // $7626 + #$7627, // $7627 + #$7628, // $7628 + #$7629, // $7629 + #$762A, // $762A + #$762B, // $762B + #$762C, // $762C + #$762D, // $762D + #$762E, // $762E + #$762F, // $762F + #$7630, // $7630 + #$7631, // $7631 + #$7632, // $7632 + #$7633, // $7633 + #$7634, // $7634 + #$7635, // $7635 + #$7636, // $7636 + #$7637, // $7637 + #$7638, // $7638 + #$7639, // $7639 + #$763A, // $763A + #$763B, // $763B + #$763C, // $763C + #$763D, // $763D + #$763E, // $763E + #$763F, // $763F + #$7640, // $7640 + #$7641, // $7641 + #$7642, // $7642 + #$7643, // $7643 + #$7644, // $7644 + #$7645, // $7645 + #$7646, // $7646 + #$7647, // $7647 + #$7648, // $7648 + #$7649, // $7649 + #$764A, // $764A + #$764B, // $764B + #$764C, // $764C + #$764D, // $764D + #$764E, // $764E + #$764F, // $764F + #$7650, // $7650 + #$7651, // $7651 + #$7652, // $7652 + #$7653, // $7653 + #$7654, // $7654 + #$7655, // $7655 + #$7656, // $7656 + #$7657, // $7657 + #$7658, // $7658 + #$7659, // $7659 + #$765A, // $765A + #$765B, // $765B + #$765C, // $765C + #$765D, // $765D + #$765E, // $765E + #$765F, // $765F + #$7660, // $7660 + #$7661, // $7661 + #$7662, // $7662 + #$7663, // $7663 + #$7664, // $7664 + #$7665, // $7665 + #$7666, // $7666 + #$7667, // $7667 + #$7668, // $7668 + #$7669, // $7669 + #$766A, // $766A + #$766B, // $766B + #$766C, // $766C + #$766D, // $766D + #$766E, // $766E + #$766F, // $766F + #$7670, // $7670 + #$7671, // $7671 + #$7672, // $7672 + #$7673, // $7673 + #$7674, // $7674 + #$7675, // $7675 + #$7676, // $7676 + #$7677, // $7677 + #$7678, // $7678 + #$7679, // $7679 + #$767A, // $767A + #$767B, // $767B + #$767C, // $767C + #$767D, // $767D + #$767E, // $767E + #$767F, // $767F + #$7680, // $7680 + #$7681, // $7681 + #$7682, // $7682 + #$7683, // $7683 + #$7684, // $7684 + #$7685, // $7685 + #$7686, // $7686 + #$7687, // $7687 + #$7688, // $7688 + #$7689, // $7689 + #$768A, // $768A + #$768B, // $768B + #$768C, // $768C + #$768D, // $768D + #$768E, // $768E + #$768F, // $768F + #$7690, // $7690 + #$7691, // $7691 + #$7692, // $7692 + #$7693, // $7693 + #$7694, // $7694 + #$7695, // $7695 + #$7696, // $7696 + #$7697, // $7697 + #$7698, // $7698 + #$7699, // $7699 + #$769A, // $769A + #$769B, // $769B + #$769C, // $769C + #$769D, // $769D + #$769E, // $769E + #$769F, // $769F + #$76A0, // $76A0 + #$76A1, // $76A1 + #$76A2, // $76A2 + #$76A3, // $76A3 + #$76A4, // $76A4 + #$76A5, // $76A5 + #$76A6, // $76A6 + #$76A7, // $76A7 + #$76A8, // $76A8 + #$76A9, // $76A9 + #$76AA, // $76AA + #$76AB, // $76AB + #$76AC, // $76AC + #$76AD, // $76AD + #$76AE, // $76AE + #$76AF, // $76AF + #$76B0, // $76B0 + #$76B1, // $76B1 + #$76B2, // $76B2 + #$76B3, // $76B3 + #$76B4, // $76B4 + #$76B5, // $76B5 + #$76B6, // $76B6 + #$76B7, // $76B7 + #$76B8, // $76B8 + #$76B9, // $76B9 + #$76BA, // $76BA + #$76BB, // $76BB + #$76BC, // $76BC + #$76BD, // $76BD + #$76BE, // $76BE + #$76BF, // $76BF + #$76C0, // $76C0 + #$76C1, // $76C1 + #$76C2, // $76C2 + #$76C3, // $76C3 + #$76C4, // $76C4 + #$76C5, // $76C5 + #$76C6, // $76C6 + #$76C7, // $76C7 + #$76C8, // $76C8 + #$76C9, // $76C9 + #$76CA, // $76CA + #$76CB, // $76CB + #$76CC, // $76CC + #$76CD, // $76CD + #$76CE, // $76CE + #$76CF, // $76CF + #$76D0, // $76D0 + #$76D1, // $76D1 + #$76D2, // $76D2 + #$76D3, // $76D3 + #$76D4, // $76D4 + #$76D5, // $76D5 + #$76D6, // $76D6 + #$76D7, // $76D7 + #$76D8, // $76D8 + #$76D9, // $76D9 + #$76DA, // $76DA + #$76DB, // $76DB + #$76DC, // $76DC + #$76DD, // $76DD + #$76DE, // $76DE + #$76DF, // $76DF + #$76E0, // $76E0 + #$76E1, // $76E1 + #$76E2, // $76E2 + #$76E3, // $76E3 + #$76E4, // $76E4 + #$76E5, // $76E5 + #$76E6, // $76E6 + #$76E7, // $76E7 + #$76E8, // $76E8 + #$76E9, // $76E9 + #$76EA, // $76EA + #$76EB, // $76EB + #$76EC, // $76EC + #$76ED, // $76ED + #$76EE, // $76EE + #$76EF, // $76EF + #$76F0, // $76F0 + #$76F1, // $76F1 + #$76F2, // $76F2 + #$76F3, // $76F3 + #$76F4, // $76F4 + #$76F5, // $76F5 + #$76F6, // $76F6 + #$76F7, // $76F7 + #$76F8, // $76F8 + #$76F9, // $76F9 + #$76FA, // $76FA + #$76FB, // $76FB + #$76FC, // $76FC + #$76FD, // $76FD + #$76FE, // $76FE + #$76FF, // $76FF + #$7700, // $7700 + #$7701, // $7701 + #$7702, // $7702 + #$7703, // $7703 + #$7704, // $7704 + #$7705, // $7705 + #$7706, // $7706 + #$7707, // $7707 + #$7708, // $7708 + #$7709, // $7709 + #$770A, // $770A + #$770B, // $770B + #$770C, // $770C + #$770D, // $770D + #$770E, // $770E + #$770F, // $770F + #$7710, // $7710 + #$7711, // $7711 + #$7712, // $7712 + #$7713, // $7713 + #$7714, // $7714 + #$7715, // $7715 + #$7716, // $7716 + #$7717, // $7717 + #$7718, // $7718 + #$7719, // $7719 + #$771A, // $771A + #$771B, // $771B + #$771C, // $771C + #$771D, // $771D + #$771E, // $771E + #$771F, // $771F + #$7720, // $7720 + #$7721, // $7721 + #$7722, // $7722 + #$7723, // $7723 + #$7724, // $7724 + #$7725, // $7725 + #$7726, // $7726 + #$7727, // $7727 + #$7728, // $7728 + #$7729, // $7729 + #$772A, // $772A + #$772B, // $772B + #$772C, // $772C + #$772D, // $772D + #$772E, // $772E + #$772F, // $772F + #$7730, // $7730 + #$7731, // $7731 + #$7732, // $7732 + #$7733, // $7733 + #$7734, // $7734 + #$7735, // $7735 + #$7736, // $7736 + #$7737, // $7737 + #$7738, // $7738 + #$7739, // $7739 + #$773A, // $773A + #$773B, // $773B + #$773C, // $773C + #$773D, // $773D + #$773E, // $773E + #$773F, // $773F + #$7740, // $7740 + #$7741, // $7741 + #$7742, // $7742 + #$7743, // $7743 + #$7744, // $7744 + #$7745, // $7745 + #$7746, // $7746 + #$7747, // $7747 + #$7748, // $7748 + #$7749, // $7749 + #$774A, // $774A + #$774B, // $774B + #$774C, // $774C + #$774D, // $774D + #$774E, // $774E + #$774F, // $774F + #$7750, // $7750 + #$7751, // $7751 + #$7752, // $7752 + #$7753, // $7753 + #$7754, // $7754 + #$7755, // $7755 + #$7756, // $7756 + #$7757, // $7757 + #$7758, // $7758 + #$7759, // $7759 + #$775A, // $775A + #$775B, // $775B + #$775C, // $775C + #$775D, // $775D + #$775E, // $775E + #$775F, // $775F + #$7760, // $7760 + #$7761, // $7761 + #$7762, // $7762 + #$7763, // $7763 + #$7764, // $7764 + #$7765, // $7765 + #$7766, // $7766 + #$7767, // $7767 + #$7768, // $7768 + #$7769, // $7769 + #$776A, // $776A + #$776B, // $776B + #$776C, // $776C + #$776D, // $776D + #$776E, // $776E + #$776F, // $776F + #$7770, // $7770 + #$7771, // $7771 + #$7772, // $7772 + #$7773, // $7773 + #$7774, // $7774 + #$7775, // $7775 + #$7776, // $7776 + #$7777, // $7777 + #$7778, // $7778 + #$7779, // $7779 + #$777A, // $777A + #$777B, // $777B + #$777C, // $777C + #$777D, // $777D + #$777E, // $777E + #$777F, // $777F + #$7780, // $7780 + #$7781, // $7781 + #$7782, // $7782 + #$7783, // $7783 + #$7784, // $7784 + #$7785, // $7785 + #$7786, // $7786 + #$7787, // $7787 + #$7788, // $7788 + #$7789, // $7789 + #$778A, // $778A + #$778B, // $778B + #$778C, // $778C + #$778D, // $778D + #$778E, // $778E + #$778F, // $778F + #$7790, // $7790 + #$7791, // $7791 + #$7792, // $7792 + #$7793, // $7793 + #$7794, // $7794 + #$7795, // $7795 + #$7796, // $7796 + #$7797, // $7797 + #$7798, // $7798 + #$7799, // $7799 + #$779A, // $779A + #$779B, // $779B + #$779C, // $779C + #$779D, // $779D + #$779E, // $779E + #$779F, // $779F + #$77A0, // $77A0 + #$77A1, // $77A1 + #$77A2, // $77A2 + #$77A3, // $77A3 + #$77A4, // $77A4 + #$77A5, // $77A5 + #$77A6, // $77A6 + #$77A7, // $77A7 + #$77A8, // $77A8 + #$77A9, // $77A9 + #$77AA, // $77AA + #$77AB, // $77AB + #$77AC, // $77AC + #$77AD, // $77AD + #$77AE, // $77AE + #$77AF, // $77AF + #$77B0, // $77B0 + #$77B1, // $77B1 + #$77B2, // $77B2 + #$77B3, // $77B3 + #$77B4, // $77B4 + #$77B5, // $77B5 + #$77B6, // $77B6 + #$77B7, // $77B7 + #$77B8, // $77B8 + #$77B9, // $77B9 + #$77BA, // $77BA + #$77BB, // $77BB + #$77BC, // $77BC + #$77BD, // $77BD + #$77BE, // $77BE + #$77BF, // $77BF + #$77C0, // $77C0 + #$77C1, // $77C1 + #$77C2, // $77C2 + #$77C3, // $77C3 + #$77C4, // $77C4 + #$77C5, // $77C5 + #$77C6, // $77C6 + #$77C7, // $77C7 + #$77C8, // $77C8 + #$77C9, // $77C9 + #$77CA, // $77CA + #$77CB, // $77CB + #$77CC, // $77CC + #$77CD, // $77CD + #$77CE, // $77CE + #$77CF, // $77CF + #$77D0, // $77D0 + #$77D1, // $77D1 + #$77D2, // $77D2 + #$77D3, // $77D3 + #$77D4, // $77D4 + #$77D5, // $77D5 + #$77D6, // $77D6 + #$77D7, // $77D7 + #$77D8, // $77D8 + #$77D9, // $77D9 + #$77DA, // $77DA + #$77DB, // $77DB + #$77DC, // $77DC + #$77DD, // $77DD + #$77DE, // $77DE + #$77DF, // $77DF + #$77E0, // $77E0 + #$77E1, // $77E1 + #$77E2, // $77E2 + #$77E3, // $77E3 + #$77E4, // $77E4 + #$77E5, // $77E5 + #$77E6, // $77E6 + #$77E7, // $77E7 + #$77E8, // $77E8 + #$77E9, // $77E9 + #$77EA, // $77EA + #$77EB, // $77EB + #$77EC, // $77EC + #$77ED, // $77ED + #$77EE, // $77EE + #$77EF, // $77EF + #$77F0, // $77F0 + #$77F1, // $77F1 + #$77F2, // $77F2 + #$77F3, // $77F3 + #$77F4, // $77F4 + #$77F5, // $77F5 + #$77F6, // $77F6 + #$77F7, // $77F7 + #$77F8, // $77F8 + #$77F9, // $77F9 + #$77FA, // $77FA + #$77FB, // $77FB + #$77FC, // $77FC + #$77FD, // $77FD + #$77FE, // $77FE + #$77FF, // $77FF + #$7800, // $7800 + #$7801, // $7801 + #$7802, // $7802 + #$7803, // $7803 + #$7804, // $7804 + #$7805, // $7805 + #$7806, // $7806 + #$7807, // $7807 + #$7808, // $7808 + #$7809, // $7809 + #$780A, // $780A + #$780B, // $780B + #$780C, // $780C + #$780D, // $780D + #$780E, // $780E + #$780F, // $780F + #$7810, // $7810 + #$7811, // $7811 + #$7812, // $7812 + #$7813, // $7813 + #$7814, // $7814 + #$7815, // $7815 + #$7816, // $7816 + #$7817, // $7817 + #$7818, // $7818 + #$7819, // $7819 + #$781A, // $781A + #$781B, // $781B + #$781C, // $781C + #$781D, // $781D + #$781E, // $781E + #$781F, // $781F + #$7820, // $7820 + #$7821, // $7821 + #$7822, // $7822 + #$7823, // $7823 + #$7824, // $7824 + #$7825, // $7825 + #$7826, // $7826 + #$7827, // $7827 + #$7828, // $7828 + #$7829, // $7829 + #$782A, // $782A + #$782B, // $782B + #$782C, // $782C + #$782D, // $782D + #$782E, // $782E + #$782F, // $782F + #$7830, // $7830 + #$7831, // $7831 + #$7832, // $7832 + #$7833, // $7833 + #$7834, // $7834 + #$7835, // $7835 + #$7836, // $7836 + #$7837, // $7837 + #$7838, // $7838 + #$7839, // $7839 + #$783A, // $783A + #$783B, // $783B + #$783C, // $783C + #$783D, // $783D + #$783E, // $783E + #$783F, // $783F + #$7840, // $7840 + #$7841, // $7841 + #$7842, // $7842 + #$7843, // $7843 + #$7844, // $7844 + #$7845, // $7845 + #$7846, // $7846 + #$7847, // $7847 + #$7848, // $7848 + #$7849, // $7849 + #$784A, // $784A + #$784B, // $784B + #$784C, // $784C + #$784D, // $784D + #$784E, // $784E + #$784F, // $784F + #$7850, // $7850 + #$7851, // $7851 + #$7852, // $7852 + #$7853, // $7853 + #$7854, // $7854 + #$7855, // $7855 + #$7856, // $7856 + #$7857, // $7857 + #$7858, // $7858 + #$7859, // $7859 + #$785A, // $785A + #$785B, // $785B + #$785C, // $785C + #$785D, // $785D + #$785E, // $785E + #$785F, // $785F + #$7860, // $7860 + #$7861, // $7861 + #$7862, // $7862 + #$7863, // $7863 + #$7864, // $7864 + #$7865, // $7865 + #$7866, // $7866 + #$7867, // $7867 + #$7868, // $7868 + #$7869, // $7869 + #$786A, // $786A + #$786B, // $786B + #$786C, // $786C + #$786D, // $786D + #$786E, // $786E + #$786F, // $786F + #$7870, // $7870 + #$7871, // $7871 + #$7872, // $7872 + #$7873, // $7873 + #$7874, // $7874 + #$7875, // $7875 + #$7876, // $7876 + #$7877, // $7877 + #$7878, // $7878 + #$7879, // $7879 + #$787A, // $787A + #$787B, // $787B + #$787C, // $787C + #$787D, // $787D + #$787E, // $787E + #$787F, // $787F + #$7880, // $7880 + #$7881, // $7881 + #$7882, // $7882 + #$7883, // $7883 + #$7884, // $7884 + #$7885, // $7885 + #$7886, // $7886 + #$7887, // $7887 + #$7888, // $7888 + #$7889, // $7889 + #$788A, // $788A + #$788B, // $788B + #$788C, // $788C + #$788D, // $788D + #$788E, // $788E + #$788F, // $788F + #$7890, // $7890 + #$7891, // $7891 + #$7892, // $7892 + #$7893, // $7893 + #$7894, // $7894 + #$7895, // $7895 + #$7896, // $7896 + #$7897, // $7897 + #$7898, // $7898 + #$7899, // $7899 + #$789A, // $789A + #$789B, // $789B + #$789C, // $789C + #$789D, // $789D + #$789E, // $789E + #$789F, // $789F + #$78A0, // $78A0 + #$78A1, // $78A1 + #$78A2, // $78A2 + #$78A3, // $78A3 + #$78A4, // $78A4 + #$78A5, // $78A5 + #$78A6, // $78A6 + #$78A7, // $78A7 + #$78A8, // $78A8 + #$78A9, // $78A9 + #$78AA, // $78AA + #$78AB, // $78AB + #$78AC, // $78AC + #$78AD, // $78AD + #$78AE, // $78AE + #$78AF, // $78AF + #$78B0, // $78B0 + #$78B1, // $78B1 + #$78B2, // $78B2 + #$78B3, // $78B3 + #$78B4, // $78B4 + #$78B5, // $78B5 + #$78B6, // $78B6 + #$78B7, // $78B7 + #$78B8, // $78B8 + #$78B9, // $78B9 + #$78BA, // $78BA + #$78BB, // $78BB + #$78BC, // $78BC + #$78BD, // $78BD + #$78BE, // $78BE + #$78BF, // $78BF + #$78C0, // $78C0 + #$78C1, // $78C1 + #$78C2, // $78C2 + #$78C3, // $78C3 + #$78C4, // $78C4 + #$78C5, // $78C5 + #$78C6, // $78C6 + #$78C7, // $78C7 + #$78C8, // $78C8 + #$78C9, // $78C9 + #$78CA, // $78CA + #$78CB, // $78CB + #$78CC, // $78CC + #$78CD, // $78CD + #$78CE, // $78CE + #$78CF, // $78CF + #$78D0, // $78D0 + #$78D1, // $78D1 + #$78D2, // $78D2 + #$78D3, // $78D3 + #$78D4, // $78D4 + #$78D5, // $78D5 + #$78D6, // $78D6 + #$78D7, // $78D7 + #$78D8, // $78D8 + #$78D9, // $78D9 + #$78DA, // $78DA + #$78DB, // $78DB + #$78DC, // $78DC + #$78DD, // $78DD + #$78DE, // $78DE + #$78DF, // $78DF + #$78E0, // $78E0 + #$78E1, // $78E1 + #$78E2, // $78E2 + #$78E3, // $78E3 + #$78E4, // $78E4 + #$78E5, // $78E5 + #$78E6, // $78E6 + #$78E7, // $78E7 + #$78E8, // $78E8 + #$78E9, // $78E9 + #$78EA, // $78EA + #$78EB, // $78EB + #$78EC, // $78EC + #$78ED, // $78ED + #$78EE, // $78EE + #$78EF, // $78EF + #$78F0, // $78F0 + #$78F1, // $78F1 + #$78F2, // $78F2 + #$78F3, // $78F3 + #$78F4, // $78F4 + #$78F5, // $78F5 + #$78F6, // $78F6 + #$78F7, // $78F7 + #$78F8, // $78F8 + #$78F9, // $78F9 + #$78FA, // $78FA + #$78FB, // $78FB + #$78FC, // $78FC + #$78FD, // $78FD + #$78FE, // $78FE + #$78FF, // $78FF + #$7900, // $7900 + #$7901, // $7901 + #$7902, // $7902 + #$7903, // $7903 + #$7904, // $7904 + #$7905, // $7905 + #$7906, // $7906 + #$7907, // $7907 + #$7908, // $7908 + #$7909, // $7909 + #$790A, // $790A + #$790B, // $790B + #$790C, // $790C + #$790D, // $790D + #$790E, // $790E + #$790F, // $790F + #$7910, // $7910 + #$7911, // $7911 + #$7912, // $7912 + #$7913, // $7913 + #$7914, // $7914 + #$7915, // $7915 + #$7916, // $7916 + #$7917, // $7917 + #$7918, // $7918 + #$7919, // $7919 + #$791A, // $791A + #$791B, // $791B + #$791C, // $791C + #$791D, // $791D + #$791E, // $791E + #$791F, // $791F + #$7920, // $7920 + #$7921, // $7921 + #$7922, // $7922 + #$7923, // $7923 + #$7924, // $7924 + #$7925, // $7925 + #$7926, // $7926 + #$7927, // $7927 + #$7928, // $7928 + #$7929, // $7929 + #$792A, // $792A + #$792B, // $792B + #$792C, // $792C + #$792D, // $792D + #$792E, // $792E + #$792F, // $792F + #$7930, // $7930 + #$7931, // $7931 + #$7932, // $7932 + #$7933, // $7933 + #$7934, // $7934 + #$7935, // $7935 + #$7936, // $7936 + #$7937, // $7937 + #$7938, // $7938 + #$7939, // $7939 + #$793A, // $793A + #$793B, // $793B + #$793C, // $793C + #$793D, // $793D + #$793E, // $793E + #$793F, // $793F + #$7940, // $7940 + #$7941, // $7941 + #$7942, // $7942 + #$7943, // $7943 + #$7944, // $7944 + #$7945, // $7945 + #$7946, // $7946 + #$7947, // $7947 + #$7948, // $7948 + #$7949, // $7949 + #$794A, // $794A + #$794B, // $794B + #$794C, // $794C + #$794D, // $794D + #$794E, // $794E + #$794F, // $794F + #$7950, // $7950 + #$7951, // $7951 + #$7952, // $7952 + #$7953, // $7953 + #$7954, // $7954 + #$7955, // $7955 + #$7956, // $7956 + #$7957, // $7957 + #$7958, // $7958 + #$7959, // $7959 + #$795A, // $795A + #$795B, // $795B + #$795C, // $795C + #$795D, // $795D + #$795E, // $795E + #$795F, // $795F + #$7960, // $7960 + #$7961, // $7961 + #$7962, // $7962 + #$7963, // $7963 + #$7964, // $7964 + #$7965, // $7965 + #$7966, // $7966 + #$7967, // $7967 + #$7968, // $7968 + #$7969, // $7969 + #$796A, // $796A + #$796B, // $796B + #$796C, // $796C + #$796D, // $796D + #$796E, // $796E + #$796F, // $796F + #$7970, // $7970 + #$7971, // $7971 + #$7972, // $7972 + #$7973, // $7973 + #$7974, // $7974 + #$7975, // $7975 + #$7976, // $7976 + #$7977, // $7977 + #$7978, // $7978 + #$7979, // $7979 + #$797A, // $797A + #$797B, // $797B + #$797C, // $797C + #$797D, // $797D + #$797E, // $797E + #$797F, // $797F + #$7980, // $7980 + #$7981, // $7981 + #$7982, // $7982 + #$7983, // $7983 + #$7984, // $7984 + #$7985, // $7985 + #$7986, // $7986 + #$7987, // $7987 + #$7988, // $7988 + #$7989, // $7989 + #$798A, // $798A + #$798B, // $798B + #$798C, // $798C + #$798D, // $798D + #$798E, // $798E + #$798F, // $798F + #$7990, // $7990 + #$7991, // $7991 + #$7992, // $7992 + #$7993, // $7993 + #$7994, // $7994 + #$7995, // $7995 + #$7996, // $7996 + #$7997, // $7997 + #$7998, // $7998 + #$7999, // $7999 + #$799A, // $799A + #$799B, // $799B + #$799C, // $799C + #$799D, // $799D + #$799E, // $799E + #$799F, // $799F + #$79A0, // $79A0 + #$79A1, // $79A1 + #$79A2, // $79A2 + #$79A3, // $79A3 + #$79A4, // $79A4 + #$79A5, // $79A5 + #$79A6, // $79A6 + #$79A7, // $79A7 + #$79A8, // $79A8 + #$79A9, // $79A9 + #$79AA, // $79AA + #$79AB, // $79AB + #$79AC, // $79AC + #$79AD, // $79AD + #$79AE, // $79AE + #$79AF, // $79AF + #$79B0, // $79B0 + #$79B1, // $79B1 + #$79B2, // $79B2 + #$79B3, // $79B3 + #$79B4, // $79B4 + #$79B5, // $79B5 + #$79B6, // $79B6 + #$79B7, // $79B7 + #$79B8, // $79B8 + #$79B9, // $79B9 + #$79BA, // $79BA + #$79BB, // $79BB + #$79BC, // $79BC + #$79BD, // $79BD + #$79BE, // $79BE + #$79BF, // $79BF + #$79C0, // $79C0 + #$79C1, // $79C1 + #$79C2, // $79C2 + #$79C3, // $79C3 + #$79C4, // $79C4 + #$79C5, // $79C5 + #$79C6, // $79C6 + #$79C7, // $79C7 + #$79C8, // $79C8 + #$79C9, // $79C9 + #$79CA, // $79CA + #$79CB, // $79CB + #$79CC, // $79CC + #$79CD, // $79CD + #$79CE, // $79CE + #$79CF, // $79CF + #$79D0, // $79D0 + #$79D1, // $79D1 + #$79D2, // $79D2 + #$79D3, // $79D3 + #$79D4, // $79D4 + #$79D5, // $79D5 + #$79D6, // $79D6 + #$79D7, // $79D7 + #$79D8, // $79D8 + #$79D9, // $79D9 + #$79DA, // $79DA + #$79DB, // $79DB + #$79DC, // $79DC + #$79DD, // $79DD + #$79DE, // $79DE + #$79DF, // $79DF + #$79E0, // $79E0 + #$79E1, // $79E1 + #$79E2, // $79E2 + #$79E3, // $79E3 + #$79E4, // $79E4 + #$79E5, // $79E5 + #$79E6, // $79E6 + #$79E7, // $79E7 + #$79E8, // $79E8 + #$79E9, // $79E9 + #$79EA, // $79EA + #$79EB, // $79EB + #$79EC, // $79EC + #$79ED, // $79ED + #$79EE, // $79EE + #$79EF, // $79EF + #$79F0, // $79F0 + #$79F1, // $79F1 + #$79F2, // $79F2 + #$79F3, // $79F3 + #$79F4, // $79F4 + #$79F5, // $79F5 + #$79F6, // $79F6 + #$79F7, // $79F7 + #$79F8, // $79F8 + #$79F9, // $79F9 + #$79FA, // $79FA + #$79FB, // $79FB + #$79FC, // $79FC + #$79FD, // $79FD + #$79FE, // $79FE + #$79FF, // $79FF + #$7A00, // $7A00 + #$7A01, // $7A01 + #$7A02, // $7A02 + #$7A03, // $7A03 + #$7A04, // $7A04 + #$7A05, // $7A05 + #$7A06, // $7A06 + #$7A07, // $7A07 + #$7A08, // $7A08 + #$7A09, // $7A09 + #$7A0A, // $7A0A + #$7A0B, // $7A0B + #$7A0C, // $7A0C + #$7A0D, // $7A0D + #$7A0E, // $7A0E + #$7A0F, // $7A0F + #$7A10, // $7A10 + #$7A11, // $7A11 + #$7A12, // $7A12 + #$7A13, // $7A13 + #$7A14, // $7A14 + #$7A15, // $7A15 + #$7A16, // $7A16 + #$7A17, // $7A17 + #$7A18, // $7A18 + #$7A19, // $7A19 + #$7A1A, // $7A1A + #$7A1B, // $7A1B + #$7A1C, // $7A1C + #$7A1D, // $7A1D + #$7A1E, // $7A1E + #$7A1F, // $7A1F + #$7A20, // $7A20 + #$7A21, // $7A21 + #$7A22, // $7A22 + #$7A23, // $7A23 + #$7A24, // $7A24 + #$7A25, // $7A25 + #$7A26, // $7A26 + #$7A27, // $7A27 + #$7A28, // $7A28 + #$7A29, // $7A29 + #$7A2A, // $7A2A + #$7A2B, // $7A2B + #$7A2C, // $7A2C + #$7A2D, // $7A2D + #$7A2E, // $7A2E + #$7A2F, // $7A2F + #$7A30, // $7A30 + #$7A31, // $7A31 + #$7A32, // $7A32 + #$7A33, // $7A33 + #$7A34, // $7A34 + #$7A35, // $7A35 + #$7A36, // $7A36 + #$7A37, // $7A37 + #$7A38, // $7A38 + #$7A39, // $7A39 + #$7A3A, // $7A3A + #$7A3B, // $7A3B + #$7A3C, // $7A3C + #$7A3D, // $7A3D + #$7A3E, // $7A3E + #$7A3F, // $7A3F + #$7A40, // $7A40 + #$7A41, // $7A41 + #$7A42, // $7A42 + #$7A43, // $7A43 + #$7A44, // $7A44 + #$7A45, // $7A45 + #$7A46, // $7A46 + #$7A47, // $7A47 + #$7A48, // $7A48 + #$7A49, // $7A49 + #$7A4A, // $7A4A + #$7A4B, // $7A4B + #$7A4C, // $7A4C + #$7A4D, // $7A4D + #$7A4E, // $7A4E + #$7A4F, // $7A4F + #$7A50, // $7A50 + #$7A51, // $7A51 + #$7A52, // $7A52 + #$7A53, // $7A53 + #$7A54, // $7A54 + #$7A55, // $7A55 + #$7A56, // $7A56 + #$7A57, // $7A57 + #$7A58, // $7A58 + #$7A59, // $7A59 + #$7A5A, // $7A5A + #$7A5B, // $7A5B + #$7A5C, // $7A5C + #$7A5D, // $7A5D + #$7A5E, // $7A5E + #$7A5F, // $7A5F + #$7A60, // $7A60 + #$7A61, // $7A61 + #$7A62, // $7A62 + #$7A63, // $7A63 + #$7A64, // $7A64 + #$7A65, // $7A65 + #$7A66, // $7A66 + #$7A67, // $7A67 + #$7A68, // $7A68 + #$7A69, // $7A69 + #$7A6A, // $7A6A + #$7A6B, // $7A6B + #$7A6C, // $7A6C + #$7A6D, // $7A6D + #$7A6E, // $7A6E + #$7A6F, // $7A6F + #$7A70, // $7A70 + #$7A71, // $7A71 + #$7A72, // $7A72 + #$7A73, // $7A73 + #$7A74, // $7A74 + #$7A75, // $7A75 + #$7A76, // $7A76 + #$7A77, // $7A77 + #$7A78, // $7A78 + #$7A79, // $7A79 + #$7A7A, // $7A7A + #$7A7B, // $7A7B + #$7A7C, // $7A7C + #$7A7D, // $7A7D + #$7A7E, // $7A7E + #$7A7F, // $7A7F + #$7A80, // $7A80 + #$7A81, // $7A81 + #$7A82, // $7A82 + #$7A83, // $7A83 + #$7A84, // $7A84 + #$7A85, // $7A85 + #$7A86, // $7A86 + #$7A87, // $7A87 + #$7A88, // $7A88 + #$7A89, // $7A89 + #$7A8A, // $7A8A + #$7A8B, // $7A8B + #$7A8C, // $7A8C + #$7A8D, // $7A8D + #$7A8E, // $7A8E + #$7A8F, // $7A8F + #$7A90, // $7A90 + #$7A91, // $7A91 + #$7A92, // $7A92 + #$7A93, // $7A93 + #$7A94, // $7A94 + #$7A95, // $7A95 + #$7A96, // $7A96 + #$7A97, // $7A97 + #$7A98, // $7A98 + #$7A99, // $7A99 + #$7A9A, // $7A9A + #$7A9B, // $7A9B + #$7A9C, // $7A9C + #$7A9D, // $7A9D + #$7A9E, // $7A9E + #$7A9F, // $7A9F + #$7AA0, // $7AA0 + #$7AA1, // $7AA1 + #$7AA2, // $7AA2 + #$7AA3, // $7AA3 + #$7AA4, // $7AA4 + #$7AA5, // $7AA5 + #$7AA6, // $7AA6 + #$7AA7, // $7AA7 + #$7AA8, // $7AA8 + #$7AA9, // $7AA9 + #$7AAA, // $7AAA + #$7AAB, // $7AAB + #$7AAC, // $7AAC + #$7AAD, // $7AAD + #$7AAE, // $7AAE + #$7AAF, // $7AAF + #$7AB0, // $7AB0 + #$7AB1, // $7AB1 + #$7AB2, // $7AB2 + #$7AB3, // $7AB3 + #$7AB4, // $7AB4 + #$7AB5, // $7AB5 + #$7AB6, // $7AB6 + #$7AB7, // $7AB7 + #$7AB8, // $7AB8 + #$7AB9, // $7AB9 + #$7ABA, // $7ABA + #$7ABB, // $7ABB + #$7ABC, // $7ABC + #$7ABD, // $7ABD + #$7ABE, // $7ABE + #$7ABF, // $7ABF + #$7AC0, // $7AC0 + #$7AC1, // $7AC1 + #$7AC2, // $7AC2 + #$7AC3, // $7AC3 + #$7AC4, // $7AC4 + #$7AC5, // $7AC5 + #$7AC6, // $7AC6 + #$7AC7, // $7AC7 + #$7AC8, // $7AC8 + #$7AC9, // $7AC9 + #$7ACA, // $7ACA + #$7ACB, // $7ACB + #$7ACC, // $7ACC + #$7ACD, // $7ACD + #$7ACE, // $7ACE + #$7ACF, // $7ACF + #$7AD0, // $7AD0 + #$7AD1, // $7AD1 + #$7AD2, // $7AD2 + #$7AD3, // $7AD3 + #$7AD4, // $7AD4 + #$7AD5, // $7AD5 + #$7AD6, // $7AD6 + #$7AD7, // $7AD7 + #$7AD8, // $7AD8 + #$7AD9, // $7AD9 + #$7ADA, // $7ADA + #$7ADB, // $7ADB + #$7ADC, // $7ADC + #$7ADD, // $7ADD + #$7ADE, // $7ADE + #$7ADF, // $7ADF + #$7AE0, // $7AE0 + #$7AE1, // $7AE1 + #$7AE2, // $7AE2 + #$7AE3, // $7AE3 + #$7AE4, // $7AE4 + #$7AE5, // $7AE5 + #$7AE6, // $7AE6 + #$7AE7, // $7AE7 + #$7AE8, // $7AE8 + #$7AE9, // $7AE9 + #$7AEA, // $7AEA + #$7AEB, // $7AEB + #$7AEC, // $7AEC + #$7AED, // $7AED + #$7AEE, // $7AEE + #$7AEF, // $7AEF + #$7AF0, // $7AF0 + #$7AF1, // $7AF1 + #$7AF2, // $7AF2 + #$7AF3, // $7AF3 + #$7AF4, // $7AF4 + #$7AF5, // $7AF5 + #$7AF6, // $7AF6 + #$7AF7, // $7AF7 + #$7AF8, // $7AF8 + #$7AF9, // $7AF9 + #$7AFA, // $7AFA + #$7AFB, // $7AFB + #$7AFC, // $7AFC + #$7AFD, // $7AFD + #$7AFE, // $7AFE + #$7AFF, // $7AFF + #$7B00, // $7B00 + #$7B01, // $7B01 + #$7B02, // $7B02 + #$7B03, // $7B03 + #$7B04, // $7B04 + #$7B05, // $7B05 + #$7B06, // $7B06 + #$7B07, // $7B07 + #$7B08, // $7B08 + #$7B09, // $7B09 + #$7B0A, // $7B0A + #$7B0B, // $7B0B + #$7B0C, // $7B0C + #$7B0D, // $7B0D + #$7B0E, // $7B0E + #$7B0F, // $7B0F + #$7B10, // $7B10 + #$7B11, // $7B11 + #$7B12, // $7B12 + #$7B13, // $7B13 + #$7B14, // $7B14 + #$7B15, // $7B15 + #$7B16, // $7B16 + #$7B17, // $7B17 + #$7B18, // $7B18 + #$7B19, // $7B19 + #$7B1A, // $7B1A + #$7B1B, // $7B1B + #$7B1C, // $7B1C + #$7B1D, // $7B1D + #$7B1E, // $7B1E + #$7B1F, // $7B1F + #$7B20, // $7B20 + #$7B21, // $7B21 + #$7B22, // $7B22 + #$7B23, // $7B23 + #$7B24, // $7B24 + #$7B25, // $7B25 + #$7B26, // $7B26 + #$7B27, // $7B27 + #$7B28, // $7B28 + #$7B29, // $7B29 + #$7B2A, // $7B2A + #$7B2B, // $7B2B + #$7B2C, // $7B2C + #$7B2D, // $7B2D + #$7B2E, // $7B2E + #$7B2F, // $7B2F + #$7B30, // $7B30 + #$7B31, // $7B31 + #$7B32, // $7B32 + #$7B33, // $7B33 + #$7B34, // $7B34 + #$7B35, // $7B35 + #$7B36, // $7B36 + #$7B37, // $7B37 + #$7B38, // $7B38 + #$7B39, // $7B39 + #$7B3A, // $7B3A + #$7B3B, // $7B3B + #$7B3C, // $7B3C + #$7B3D, // $7B3D + #$7B3E, // $7B3E + #$7B3F, // $7B3F + #$7B40, // $7B40 + #$7B41, // $7B41 + #$7B42, // $7B42 + #$7B43, // $7B43 + #$7B44, // $7B44 + #$7B45, // $7B45 + #$7B46, // $7B46 + #$7B47, // $7B47 + #$7B48, // $7B48 + #$7B49, // $7B49 + #$7B4A, // $7B4A + #$7B4B, // $7B4B + #$7B4C, // $7B4C + #$7B4D, // $7B4D + #$7B4E, // $7B4E + #$7B4F, // $7B4F + #$7B50, // $7B50 + #$7B51, // $7B51 + #$7B52, // $7B52 + #$7B53, // $7B53 + #$7B54, // $7B54 + #$7B55, // $7B55 + #$7B56, // $7B56 + #$7B57, // $7B57 + #$7B58, // $7B58 + #$7B59, // $7B59 + #$7B5A, // $7B5A + #$7B5B, // $7B5B + #$7B5C, // $7B5C + #$7B5D, // $7B5D + #$7B5E, // $7B5E + #$7B5F, // $7B5F + #$7B60, // $7B60 + #$7B61, // $7B61 + #$7B62, // $7B62 + #$7B63, // $7B63 + #$7B64, // $7B64 + #$7B65, // $7B65 + #$7B66, // $7B66 + #$7B67, // $7B67 + #$7B68, // $7B68 + #$7B69, // $7B69 + #$7B6A, // $7B6A + #$7B6B, // $7B6B + #$7B6C, // $7B6C + #$7B6D, // $7B6D + #$7B6E, // $7B6E + #$7B6F, // $7B6F + #$7B70, // $7B70 + #$7B71, // $7B71 + #$7B72, // $7B72 + #$7B73, // $7B73 + #$7B74, // $7B74 + #$7B75, // $7B75 + #$7B76, // $7B76 + #$7B77, // $7B77 + #$7B78, // $7B78 + #$7B79, // $7B79 + #$7B7A, // $7B7A + #$7B7B, // $7B7B + #$7B7C, // $7B7C + #$7B7D, // $7B7D + #$7B7E, // $7B7E + #$7B7F, // $7B7F + #$7B80, // $7B80 + #$7B81, // $7B81 + #$7B82, // $7B82 + #$7B83, // $7B83 + #$7B84, // $7B84 + #$7B85, // $7B85 + #$7B86, // $7B86 + #$7B87, // $7B87 + #$7B88, // $7B88 + #$7B89, // $7B89 + #$7B8A, // $7B8A + #$7B8B, // $7B8B + #$7B8C, // $7B8C + #$7B8D, // $7B8D + #$7B8E, // $7B8E + #$7B8F, // $7B8F + #$7B90, // $7B90 + #$7B91, // $7B91 + #$7B92, // $7B92 + #$7B93, // $7B93 + #$7B94, // $7B94 + #$7B95, // $7B95 + #$7B96, // $7B96 + #$7B97, // $7B97 + #$7B98, // $7B98 + #$7B99, // $7B99 + #$7B9A, // $7B9A + #$7B9B, // $7B9B + #$7B9C, // $7B9C + #$7B9D, // $7B9D + #$7B9E, // $7B9E + #$7B9F, // $7B9F + #$7BA0, // $7BA0 + #$7BA1, // $7BA1 + #$7BA2, // $7BA2 + #$7BA3, // $7BA3 + #$7BA4, // $7BA4 + #$7BA5, // $7BA5 + #$7BA6, // $7BA6 + #$7BA7, // $7BA7 + #$7BA8, // $7BA8 + #$7BA9, // $7BA9 + #$7BAA, // $7BAA + #$7BAB, // $7BAB + #$7BAC, // $7BAC + #$7BAD, // $7BAD + #$7BAE, // $7BAE + #$7BAF, // $7BAF + #$7BB0, // $7BB0 + #$7BB1, // $7BB1 + #$7BB2, // $7BB2 + #$7BB3, // $7BB3 + #$7BB4, // $7BB4 + #$7BB5, // $7BB5 + #$7BB6, // $7BB6 + #$7BB7, // $7BB7 + #$7BB8, // $7BB8 + #$7BB9, // $7BB9 + #$7BBA, // $7BBA + #$7BBB, // $7BBB + #$7BBC, // $7BBC + #$7BBD, // $7BBD + #$7BBE, // $7BBE + #$7BBF, // $7BBF + #$7BC0, // $7BC0 + #$7BC1, // $7BC1 + #$7BC2, // $7BC2 + #$7BC3, // $7BC3 + #$7BC4, // $7BC4 + #$7BC5, // $7BC5 + #$7BC6, // $7BC6 + #$7BC7, // $7BC7 + #$7BC8, // $7BC8 + #$7BC9, // $7BC9 + #$7BCA, // $7BCA + #$7BCB, // $7BCB + #$7BCC, // $7BCC + #$7BCD, // $7BCD + #$7BCE, // $7BCE + #$7BCF, // $7BCF + #$7BD0, // $7BD0 + #$7BD1, // $7BD1 + #$7BD2, // $7BD2 + #$7BD3, // $7BD3 + #$7BD4, // $7BD4 + #$7BD5, // $7BD5 + #$7BD6, // $7BD6 + #$7BD7, // $7BD7 + #$7BD8, // $7BD8 + #$7BD9, // $7BD9 + #$7BDA, // $7BDA + #$7BDB, // $7BDB + #$7BDC, // $7BDC + #$7BDD, // $7BDD + #$7BDE, // $7BDE + #$7BDF, // $7BDF + #$7BE0, // $7BE0 + #$7BE1, // $7BE1 + #$7BE2, // $7BE2 + #$7BE3, // $7BE3 + #$7BE4, // $7BE4 + #$7BE5, // $7BE5 + #$7BE6, // $7BE6 + #$7BE7, // $7BE7 + #$7BE8, // $7BE8 + #$7BE9, // $7BE9 + #$7BEA, // $7BEA + #$7BEB, // $7BEB + #$7BEC, // $7BEC + #$7BED, // $7BED + #$7BEE, // $7BEE + #$7BEF, // $7BEF + #$7BF0, // $7BF0 + #$7BF1, // $7BF1 + #$7BF2, // $7BF2 + #$7BF3, // $7BF3 + #$7BF4, // $7BF4 + #$7BF5, // $7BF5 + #$7BF6, // $7BF6 + #$7BF7, // $7BF7 + #$7BF8, // $7BF8 + #$7BF9, // $7BF9 + #$7BFA, // $7BFA + #$7BFB, // $7BFB + #$7BFC, // $7BFC + #$7BFD, // $7BFD + #$7BFE, // $7BFE + #$7BFF, // $7BFF + #$7C00, // $7C00 + #$7C01, // $7C01 + #$7C02, // $7C02 + #$7C03, // $7C03 + #$7C04, // $7C04 + #$7C05, // $7C05 + #$7C06, // $7C06 + #$7C07, // $7C07 + #$7C08, // $7C08 + #$7C09, // $7C09 + #$7C0A, // $7C0A + #$7C0B, // $7C0B + #$7C0C, // $7C0C + #$7C0D, // $7C0D + #$7C0E, // $7C0E + #$7C0F, // $7C0F + #$7C10, // $7C10 + #$7C11, // $7C11 + #$7C12, // $7C12 + #$7C13, // $7C13 + #$7C14, // $7C14 + #$7C15, // $7C15 + #$7C16, // $7C16 + #$7C17, // $7C17 + #$7C18, // $7C18 + #$7C19, // $7C19 + #$7C1A, // $7C1A + #$7C1B, // $7C1B + #$7C1C, // $7C1C + #$7C1D, // $7C1D + #$7C1E, // $7C1E + #$7C1F, // $7C1F + #$7C20, // $7C20 + #$7C21, // $7C21 + #$7C22, // $7C22 + #$7C23, // $7C23 + #$7C24, // $7C24 + #$7C25, // $7C25 + #$7C26, // $7C26 + #$7C27, // $7C27 + #$7C28, // $7C28 + #$7C29, // $7C29 + #$7C2A, // $7C2A + #$7C2B, // $7C2B + #$7C2C, // $7C2C + #$7C2D, // $7C2D + #$7C2E, // $7C2E + #$7C2F, // $7C2F + #$7C30, // $7C30 + #$7C31, // $7C31 + #$7C32, // $7C32 + #$7C33, // $7C33 + #$7C34, // $7C34 + #$7C35, // $7C35 + #$7C36, // $7C36 + #$7C37, // $7C37 + #$7C38, // $7C38 + #$7C39, // $7C39 + #$7C3A, // $7C3A + #$7C3B, // $7C3B + #$7C3C, // $7C3C + #$7C3D, // $7C3D + #$7C3E, // $7C3E + #$7C3F, // $7C3F + #$7C40, // $7C40 + #$7C41, // $7C41 + #$7C42, // $7C42 + #$7C43, // $7C43 + #$7C44, // $7C44 + #$7C45, // $7C45 + #$7C46, // $7C46 + #$7C47, // $7C47 + #$7C48, // $7C48 + #$7C49, // $7C49 + #$7C4A, // $7C4A + #$7C4B, // $7C4B + #$7C4C, // $7C4C + #$7C4D, // $7C4D + #$7C4E, // $7C4E + #$7C4F, // $7C4F + #$7C50, // $7C50 + #$7C51, // $7C51 + #$7C52, // $7C52 + #$7C53, // $7C53 + #$7C54, // $7C54 + #$7C55, // $7C55 + #$7C56, // $7C56 + #$7C57, // $7C57 + #$7C58, // $7C58 + #$7C59, // $7C59 + #$7C5A, // $7C5A + #$7C5B, // $7C5B + #$7C5C, // $7C5C + #$7C5D, // $7C5D + #$7C5E, // $7C5E + #$7C5F, // $7C5F + #$7C60, // $7C60 + #$7C61, // $7C61 + #$7C62, // $7C62 + #$7C63, // $7C63 + #$7C64, // $7C64 + #$7C65, // $7C65 + #$7C66, // $7C66 + #$7C67, // $7C67 + #$7C68, // $7C68 + #$7C69, // $7C69 + #$7C6A, // $7C6A + #$7C6B, // $7C6B + #$7C6C, // $7C6C + #$7C6D, // $7C6D + #$7C6E, // $7C6E + #$7C6F, // $7C6F + #$7C70, // $7C70 + #$7C71, // $7C71 + #$7C72, // $7C72 + #$7C73, // $7C73 + #$7C74, // $7C74 + #$7C75, // $7C75 + #$7C76, // $7C76 + #$7C77, // $7C77 + #$7C78, // $7C78 + #$7C79, // $7C79 + #$7C7A, // $7C7A + #$7C7B, // $7C7B + #$7C7C, // $7C7C + #$7C7D, // $7C7D + #$7C7E, // $7C7E + #$7C7F, // $7C7F + #$7C80, // $7C80 + #$7C81, // $7C81 + #$7C82, // $7C82 + #$7C83, // $7C83 + #$7C84, // $7C84 + #$7C85, // $7C85 + #$7C86, // $7C86 + #$7C87, // $7C87 + #$7C88, // $7C88 + #$7C89, // $7C89 + #$7C8A, // $7C8A + #$7C8B, // $7C8B + #$7C8C, // $7C8C + #$7C8D, // $7C8D + #$7C8E, // $7C8E + #$7C8F, // $7C8F + #$7C90, // $7C90 + #$7C91, // $7C91 + #$7C92, // $7C92 + #$7C93, // $7C93 + #$7C94, // $7C94 + #$7C95, // $7C95 + #$7C96, // $7C96 + #$7C97, // $7C97 + #$7C98, // $7C98 + #$7C99, // $7C99 + #$7C9A, // $7C9A + #$7C9B, // $7C9B + #$7C9C, // $7C9C + #$7C9D, // $7C9D + #$7C9E, // $7C9E + #$7C9F, // $7C9F + #$7CA0, // $7CA0 + #$7CA1, // $7CA1 + #$7CA2, // $7CA2 + #$7CA3, // $7CA3 + #$7CA4, // $7CA4 + #$7CA5, // $7CA5 + #$7CA6, // $7CA6 + #$7CA7, // $7CA7 + #$7CA8, // $7CA8 + #$7CA9, // $7CA9 + #$7CAA, // $7CAA + #$7CAB, // $7CAB + #$7CAC, // $7CAC + #$7CAD, // $7CAD + #$7CAE, // $7CAE + #$7CAF, // $7CAF + #$7CB0, // $7CB0 + #$7CB1, // $7CB1 + #$7CB2, // $7CB2 + #$7CB3, // $7CB3 + #$7CB4, // $7CB4 + #$7CB5, // $7CB5 + #$7CB6, // $7CB6 + #$7CB7, // $7CB7 + #$7CB8, // $7CB8 + #$7CB9, // $7CB9 + #$7CBA, // $7CBA + #$7CBB, // $7CBB + #$7CBC, // $7CBC + #$7CBD, // $7CBD + #$7CBE, // $7CBE + #$7CBF, // $7CBF + #$7CC0, // $7CC0 + #$7CC1, // $7CC1 + #$7CC2, // $7CC2 + #$7CC3, // $7CC3 + #$7CC4, // $7CC4 + #$7CC5, // $7CC5 + #$7CC6, // $7CC6 + #$7CC7, // $7CC7 + #$7CC8, // $7CC8 + #$7CC9, // $7CC9 + #$7CCA, // $7CCA + #$7CCB, // $7CCB + #$7CCC, // $7CCC + #$7CCD, // $7CCD + #$7CCE, // $7CCE + #$7CCF, // $7CCF + #$7CD0, // $7CD0 + #$7CD1, // $7CD1 + #$7CD2, // $7CD2 + #$7CD3, // $7CD3 + #$7CD4, // $7CD4 + #$7CD5, // $7CD5 + #$7CD6, // $7CD6 + #$7CD7, // $7CD7 + #$7CD8, // $7CD8 + #$7CD9, // $7CD9 + #$7CDA, // $7CDA + #$7CDB, // $7CDB + #$7CDC, // $7CDC + #$7CDD, // $7CDD + #$7CDE, // $7CDE + #$7CDF, // $7CDF + #$7CE0, // $7CE0 + #$7CE1, // $7CE1 + #$7CE2, // $7CE2 + #$7CE3, // $7CE3 + #$7CE4, // $7CE4 + #$7CE5, // $7CE5 + #$7CE6, // $7CE6 + #$7CE7, // $7CE7 + #$7CE8, // $7CE8 + #$7CE9, // $7CE9 + #$7CEA, // $7CEA + #$7CEB, // $7CEB + #$7CEC, // $7CEC + #$7CED, // $7CED + #$7CEE, // $7CEE + #$7CEF, // $7CEF + #$7CF0, // $7CF0 + #$7CF1, // $7CF1 + #$7CF2, // $7CF2 + #$7CF3, // $7CF3 + #$7CF4, // $7CF4 + #$7CF5, // $7CF5 + #$7CF6, // $7CF6 + #$7CF7, // $7CF7 + #$7CF8, // $7CF8 + #$7CF9, // $7CF9 + #$7CFA, // $7CFA + #$7CFB, // $7CFB + #$7CFC, // $7CFC + #$7CFD, // $7CFD + #$7CFE, // $7CFE + #$7CFF, // $7CFF + #$7D00, // $7D00 + #$7D01, // $7D01 + #$7D02, // $7D02 + #$7D03, // $7D03 + #$7D04, // $7D04 + #$7D05, // $7D05 + #$7D06, // $7D06 + #$7D07, // $7D07 + #$7D08, // $7D08 + #$7D09, // $7D09 + #$7D0A, // $7D0A + #$7D0B, // $7D0B + #$7D0C, // $7D0C + #$7D0D, // $7D0D + #$7D0E, // $7D0E + #$7D0F, // $7D0F + #$7D10, // $7D10 + #$7D11, // $7D11 + #$7D12, // $7D12 + #$7D13, // $7D13 + #$7D14, // $7D14 + #$7D15, // $7D15 + #$7D16, // $7D16 + #$7D17, // $7D17 + #$7D18, // $7D18 + #$7D19, // $7D19 + #$7D1A, // $7D1A + #$7D1B, // $7D1B + #$7D1C, // $7D1C + #$7D1D, // $7D1D + #$7D1E, // $7D1E + #$7D1F, // $7D1F + #$7D20, // $7D20 + #$7D21, // $7D21 + #$7D22, // $7D22 + #$7D23, // $7D23 + #$7D24, // $7D24 + #$7D25, // $7D25 + #$7D26, // $7D26 + #$7D27, // $7D27 + #$7D28, // $7D28 + #$7D29, // $7D29 + #$7D2A, // $7D2A + #$7D2B, // $7D2B + #$7D2C, // $7D2C + #$7D2D, // $7D2D + #$7D2E, // $7D2E + #$7D2F, // $7D2F + #$7D30, // $7D30 + #$7D31, // $7D31 + #$7D32, // $7D32 + #$7D33, // $7D33 + #$7D34, // $7D34 + #$7D35, // $7D35 + #$7D36, // $7D36 + #$7D37, // $7D37 + #$7D38, // $7D38 + #$7D39, // $7D39 + #$7D3A, // $7D3A + #$7D3B, // $7D3B + #$7D3C, // $7D3C + #$7D3D, // $7D3D + #$7D3E, // $7D3E + #$7D3F, // $7D3F + #$7D40, // $7D40 + #$7D41, // $7D41 + #$7D42, // $7D42 + #$7D43, // $7D43 + #$7D44, // $7D44 + #$7D45, // $7D45 + #$7D46, // $7D46 + #$7D47, // $7D47 + #$7D48, // $7D48 + #$7D49, // $7D49 + #$7D4A, // $7D4A + #$7D4B, // $7D4B + #$7D4C, // $7D4C + #$7D4D, // $7D4D + #$7D4E, // $7D4E + #$7D4F, // $7D4F + #$7D50, // $7D50 + #$7D51, // $7D51 + #$7D52, // $7D52 + #$7D53, // $7D53 + #$7D54, // $7D54 + #$7D55, // $7D55 + #$7D56, // $7D56 + #$7D57, // $7D57 + #$7D58, // $7D58 + #$7D59, // $7D59 + #$7D5A, // $7D5A + #$7D5B, // $7D5B + #$7D5C, // $7D5C + #$7D5D, // $7D5D + #$7D5E, // $7D5E + #$7D5F, // $7D5F + #$7D60, // $7D60 + #$7D61, // $7D61 + #$7D62, // $7D62 + #$7D63, // $7D63 + #$7D64, // $7D64 + #$7D65, // $7D65 + #$7D66, // $7D66 + #$7D67, // $7D67 + #$7D68, // $7D68 + #$7D69, // $7D69 + #$7D6A, // $7D6A + #$7D6B, // $7D6B + #$7D6C, // $7D6C + #$7D6D, // $7D6D + #$7D6E, // $7D6E + #$7D6F, // $7D6F + #$7D70, // $7D70 + #$7D71, // $7D71 + #$7D72, // $7D72 + #$7D73, // $7D73 + #$7D74, // $7D74 + #$7D75, // $7D75 + #$7D76, // $7D76 + #$7D77, // $7D77 + #$7D78, // $7D78 + #$7D79, // $7D79 + #$7D7A, // $7D7A + #$7D7B, // $7D7B + #$7D7C, // $7D7C + #$7D7D, // $7D7D + #$7D7E, // $7D7E + #$7D7F, // $7D7F + #$7D80, // $7D80 + #$7D81, // $7D81 + #$7D82, // $7D82 + #$7D83, // $7D83 + #$7D84, // $7D84 + #$7D85, // $7D85 + #$7D86, // $7D86 + #$7D87, // $7D87 + #$7D88, // $7D88 + #$7D89, // $7D89 + #$7D8A, // $7D8A + #$7D8B, // $7D8B + #$7D8C, // $7D8C + #$7D8D, // $7D8D + #$7D8E, // $7D8E + #$7D8F, // $7D8F + #$7D90, // $7D90 + #$7D91, // $7D91 + #$7D92, // $7D92 + #$7D93, // $7D93 + #$7D94, // $7D94 + #$7D95, // $7D95 + #$7D96, // $7D96 + #$7D97, // $7D97 + #$7D98, // $7D98 + #$7D99, // $7D99 + #$7D9A, // $7D9A + #$7D9B, // $7D9B + #$7D9C, // $7D9C + #$7D9D, // $7D9D + #$7D9E, // $7D9E + #$7D9F, // $7D9F + #$7DA0, // $7DA0 + #$7DA1, // $7DA1 + #$7DA2, // $7DA2 + #$7DA3, // $7DA3 + #$7DA4, // $7DA4 + #$7DA5, // $7DA5 + #$7DA6, // $7DA6 + #$7DA7, // $7DA7 + #$7DA8, // $7DA8 + #$7DA9, // $7DA9 + #$7DAA, // $7DAA + #$7DAB, // $7DAB + #$7DAC, // $7DAC + #$7DAD, // $7DAD + #$7DAE, // $7DAE + #$7DAF, // $7DAF + #$7DB0, // $7DB0 + #$7DB1, // $7DB1 + #$7DB2, // $7DB2 + #$7DB3, // $7DB3 + #$7DB4, // $7DB4 + #$7DB5, // $7DB5 + #$7DB6, // $7DB6 + #$7DB7, // $7DB7 + #$7DB8, // $7DB8 + #$7DB9, // $7DB9 + #$7DBA, // $7DBA + #$7DBB, // $7DBB + #$7DBC, // $7DBC + #$7DBD, // $7DBD + #$7DBE, // $7DBE + #$7DBF, // $7DBF + #$7DC0, // $7DC0 + #$7DC1, // $7DC1 + #$7DC2, // $7DC2 + #$7DC3, // $7DC3 + #$7DC4, // $7DC4 + #$7DC5, // $7DC5 + #$7DC6, // $7DC6 + #$7DC7, // $7DC7 + #$7DC8, // $7DC8 + #$7DC9, // $7DC9 + #$7DCA, // $7DCA + #$7DCB, // $7DCB + #$7DCC, // $7DCC + #$7DCD, // $7DCD + #$7DCE, // $7DCE + #$7DCF, // $7DCF + #$7DD0, // $7DD0 + #$7DD1, // $7DD1 + #$7DD2, // $7DD2 + #$7DD3, // $7DD3 + #$7DD4, // $7DD4 + #$7DD5, // $7DD5 + #$7DD6, // $7DD6 + #$7DD7, // $7DD7 + #$7DD8, // $7DD8 + #$7DD9, // $7DD9 + #$7DDA, // $7DDA + #$7DDB, // $7DDB + #$7DDC, // $7DDC + #$7DDD, // $7DDD + #$7DDE, // $7DDE + #$7DDF, // $7DDF + #$7DE0, // $7DE0 + #$7DE1, // $7DE1 + #$7DE2, // $7DE2 + #$7DE3, // $7DE3 + #$7DE4, // $7DE4 + #$7DE5, // $7DE5 + #$7DE6, // $7DE6 + #$7DE7, // $7DE7 + #$7DE8, // $7DE8 + #$7DE9, // $7DE9 + #$7DEA, // $7DEA + #$7DEB, // $7DEB + #$7DEC, // $7DEC + #$7DED, // $7DED + #$7DEE, // $7DEE + #$7DEF, // $7DEF + #$7DF0, // $7DF0 + #$7DF1, // $7DF1 + #$7DF2, // $7DF2 + #$7DF3, // $7DF3 + #$7DF4, // $7DF4 + #$7DF5, // $7DF5 + #$7DF6, // $7DF6 + #$7DF7, // $7DF7 + #$7DF8, // $7DF8 + #$7DF9, // $7DF9 + #$7DFA, // $7DFA + #$7DFB, // $7DFB + #$7DFC, // $7DFC + #$7DFD, // $7DFD + #$7DFE, // $7DFE + #$7DFF, // $7DFF + #$7E00, // $7E00 + #$7E01, // $7E01 + #$7E02, // $7E02 + #$7E03, // $7E03 + #$7E04, // $7E04 + #$7E05, // $7E05 + #$7E06, // $7E06 + #$7E07, // $7E07 + #$7E08, // $7E08 + #$7E09, // $7E09 + #$7E0A, // $7E0A + #$7E0B, // $7E0B + #$7E0C, // $7E0C + #$7E0D, // $7E0D + #$7E0E, // $7E0E + #$7E0F, // $7E0F + #$7E10, // $7E10 + #$7E11, // $7E11 + #$7E12, // $7E12 + #$7E13, // $7E13 + #$7E14, // $7E14 + #$7E15, // $7E15 + #$7E16, // $7E16 + #$7E17, // $7E17 + #$7E18, // $7E18 + #$7E19, // $7E19 + #$7E1A, // $7E1A + #$7E1B, // $7E1B + #$7E1C, // $7E1C + #$7E1D, // $7E1D + #$7E1E, // $7E1E + #$7E1F, // $7E1F + #$7E20, // $7E20 + #$7E21, // $7E21 + #$7E22, // $7E22 + #$7E23, // $7E23 + #$7E24, // $7E24 + #$7E25, // $7E25 + #$7E26, // $7E26 + #$7E27, // $7E27 + #$7E28, // $7E28 + #$7E29, // $7E29 + #$7E2A, // $7E2A + #$7E2B, // $7E2B + #$7E2C, // $7E2C + #$7E2D, // $7E2D + #$7E2E, // $7E2E + #$7E2F, // $7E2F + #$7E30, // $7E30 + #$7E31, // $7E31 + #$7E32, // $7E32 + #$7E33, // $7E33 + #$7E34, // $7E34 + #$7E35, // $7E35 + #$7E36, // $7E36 + #$7E37, // $7E37 + #$7E38, // $7E38 + #$7E39, // $7E39 + #$7E3A, // $7E3A + #$7E3B, // $7E3B + #$7E3C, // $7E3C + #$7E3D, // $7E3D + #$7E3E, // $7E3E + #$7E3F, // $7E3F + #$7E40, // $7E40 + #$7E41, // $7E41 + #$7E42, // $7E42 + #$7E43, // $7E43 + #$7E44, // $7E44 + #$7E45, // $7E45 + #$7E46, // $7E46 + #$7E47, // $7E47 + #$7E48, // $7E48 + #$7E49, // $7E49 + #$7E4A, // $7E4A + #$7E4B, // $7E4B + #$7E4C, // $7E4C + #$7E4D, // $7E4D + #$7E4E, // $7E4E + #$7E4F, // $7E4F + #$7E50, // $7E50 + #$7E51, // $7E51 + #$7E52, // $7E52 + #$7E53, // $7E53 + #$7E54, // $7E54 + #$7E55, // $7E55 + #$7E56, // $7E56 + #$7E57, // $7E57 + #$7E58, // $7E58 + #$7E59, // $7E59 + #$7E5A, // $7E5A + #$7E5B, // $7E5B + #$7E5C, // $7E5C + #$7E5D, // $7E5D + #$7E5E, // $7E5E + #$7E5F, // $7E5F + #$7E60, // $7E60 + #$7E61, // $7E61 + #$7E62, // $7E62 + #$7E63, // $7E63 + #$7E64, // $7E64 + #$7E65, // $7E65 + #$7E66, // $7E66 + #$7E67, // $7E67 + #$7E68, // $7E68 + #$7E69, // $7E69 + #$7E6A, // $7E6A + #$7E6B, // $7E6B + #$7E6C, // $7E6C + #$7E6D, // $7E6D + #$7E6E, // $7E6E + #$7E6F, // $7E6F + #$7E70, // $7E70 + #$7E71, // $7E71 + #$7E72, // $7E72 + #$7E73, // $7E73 + #$7E74, // $7E74 + #$7E75, // $7E75 + #$7E76, // $7E76 + #$7E77, // $7E77 + #$7E78, // $7E78 + #$7E79, // $7E79 + #$7E7A, // $7E7A + #$7E7B, // $7E7B + #$7E7C, // $7E7C + #$7E7D, // $7E7D + #$7E7E, // $7E7E + #$7E7F, // $7E7F + #$7E80, // $7E80 + #$7E81, // $7E81 + #$7E82, // $7E82 + #$7E83, // $7E83 + #$7E84, // $7E84 + #$7E85, // $7E85 + #$7E86, // $7E86 + #$7E87, // $7E87 + #$7E88, // $7E88 + #$7E89, // $7E89 + #$7E8A, // $7E8A + #$7E8B, // $7E8B + #$7E8C, // $7E8C + #$7E8D, // $7E8D + #$7E8E, // $7E8E + #$7E8F, // $7E8F + #$7E90, // $7E90 + #$7E91, // $7E91 + #$7E92, // $7E92 + #$7E93, // $7E93 + #$7E94, // $7E94 + #$7E95, // $7E95 + #$7E96, // $7E96 + #$7E97, // $7E97 + #$7E98, // $7E98 + #$7E99, // $7E99 + #$7E9A, // $7E9A + #$7E9B, // $7E9B + #$7E9C, // $7E9C + #$7E9D, // $7E9D + #$7E9E, // $7E9E + #$7E9F, // $7E9F + #$7EA0, // $7EA0 + #$7EA1, // $7EA1 + #$7EA2, // $7EA2 + #$7EA3, // $7EA3 + #$7EA4, // $7EA4 + #$7EA5, // $7EA5 + #$7EA6, // $7EA6 + #$7EA7, // $7EA7 + #$7EA8, // $7EA8 + #$7EA9, // $7EA9 + #$7EAA, // $7EAA + #$7EAB, // $7EAB + #$7EAC, // $7EAC + #$7EAD, // $7EAD + #$7EAE, // $7EAE + #$7EAF, // $7EAF + #$7EB0, // $7EB0 + #$7EB1, // $7EB1 + #$7EB2, // $7EB2 + #$7EB3, // $7EB3 + #$7EB4, // $7EB4 + #$7EB5, // $7EB5 + #$7EB6, // $7EB6 + #$7EB7, // $7EB7 + #$7EB8, // $7EB8 + #$7EB9, // $7EB9 + #$7EBA, // $7EBA + #$7EBB, // $7EBB + #$7EBC, // $7EBC + #$7EBD, // $7EBD + #$7EBE, // $7EBE + #$7EBF, // $7EBF + #$7EC0, // $7EC0 + #$7EC1, // $7EC1 + #$7EC2, // $7EC2 + #$7EC3, // $7EC3 + #$7EC4, // $7EC4 + #$7EC5, // $7EC5 + #$7EC6, // $7EC6 + #$7EC7, // $7EC7 + #$7EC8, // $7EC8 + #$7EC9, // $7EC9 + #$7ECA, // $7ECA + #$7ECB, // $7ECB + #$7ECC, // $7ECC + #$7ECD, // $7ECD + #$7ECE, // $7ECE + #$7ECF, // $7ECF + #$7ED0, // $7ED0 + #$7ED1, // $7ED1 + #$7ED2, // $7ED2 + #$7ED3, // $7ED3 + #$7ED4, // $7ED4 + #$7ED5, // $7ED5 + #$7ED6, // $7ED6 + #$7ED7, // $7ED7 + #$7ED8, // $7ED8 + #$7ED9, // $7ED9 + #$7EDA, // $7EDA + #$7EDB, // $7EDB + #$7EDC, // $7EDC + #$7EDD, // $7EDD + #$7EDE, // $7EDE + #$7EDF, // $7EDF + #$7EE0, // $7EE0 + #$7EE1, // $7EE1 + #$7EE2, // $7EE2 + #$7EE3, // $7EE3 + #$7EE4, // $7EE4 + #$7EE5, // $7EE5 + #$7EE6, // $7EE6 + #$7EE7, // $7EE7 + #$7EE8, // $7EE8 + #$7EE9, // $7EE9 + #$7EEA, // $7EEA + #$7EEB, // $7EEB + #$7EEC, // $7EEC + #$7EED, // $7EED + #$7EEE, // $7EEE + #$7EEF, // $7EEF + #$7EF0, // $7EF0 + #$7EF1, // $7EF1 + #$7EF2, // $7EF2 + #$7EF3, // $7EF3 + #$7EF4, // $7EF4 + #$7EF5, // $7EF5 + #$7EF6, // $7EF6 + #$7EF7, // $7EF7 + #$7EF8, // $7EF8 + #$7EF9, // $7EF9 + #$7EFA, // $7EFA + #$7EFB, // $7EFB + #$7EFC, // $7EFC + #$7EFD, // $7EFD + #$7EFE, // $7EFE + #$7EFF, // $7EFF + #$7F00, // $7F00 + #$7F01, // $7F01 + #$7F02, // $7F02 + #$7F03, // $7F03 + #$7F04, // $7F04 + #$7F05, // $7F05 + #$7F06, // $7F06 + #$7F07, // $7F07 + #$7F08, // $7F08 + #$7F09, // $7F09 + #$7F0A, // $7F0A + #$7F0B, // $7F0B + #$7F0C, // $7F0C + #$7F0D, // $7F0D + #$7F0E, // $7F0E + #$7F0F, // $7F0F + #$7F10, // $7F10 + #$7F11, // $7F11 + #$7F12, // $7F12 + #$7F13, // $7F13 + #$7F14, // $7F14 + #$7F15, // $7F15 + #$7F16, // $7F16 + #$7F17, // $7F17 + #$7F18, // $7F18 + #$7F19, // $7F19 + #$7F1A, // $7F1A + #$7F1B, // $7F1B + #$7F1C, // $7F1C + #$7F1D, // $7F1D + #$7F1E, // $7F1E + #$7F1F, // $7F1F + #$7F20, // $7F20 + #$7F21, // $7F21 + #$7F22, // $7F22 + #$7F23, // $7F23 + #$7F24, // $7F24 + #$7F25, // $7F25 + #$7F26, // $7F26 + #$7F27, // $7F27 + #$7F28, // $7F28 + #$7F29, // $7F29 + #$7F2A, // $7F2A + #$7F2B, // $7F2B + #$7F2C, // $7F2C + #$7F2D, // $7F2D + #$7F2E, // $7F2E + #$7F2F, // $7F2F + #$7F30, // $7F30 + #$7F31, // $7F31 + #$7F32, // $7F32 + #$7F33, // $7F33 + #$7F34, // $7F34 + #$7F35, // $7F35 + #$7F36, // $7F36 + #$7F37, // $7F37 + #$7F38, // $7F38 + #$7F39, // $7F39 + #$7F3A, // $7F3A + #$7F3B, // $7F3B + #$7F3C, // $7F3C + #$7F3D, // $7F3D + #$7F3E, // $7F3E + #$7F3F, // $7F3F + #$7F40, // $7F40 + #$7F41, // $7F41 + #$7F42, // $7F42 + #$7F43, // $7F43 + #$7F44, // $7F44 + #$7F45, // $7F45 + #$7F46, // $7F46 + #$7F47, // $7F47 + #$7F48, // $7F48 + #$7F49, // $7F49 + #$7F4A, // $7F4A + #$7F4B, // $7F4B + #$7F4C, // $7F4C + #$7F4D, // $7F4D + #$7F4E, // $7F4E + #$7F4F, // $7F4F + #$7F50, // $7F50 + #$7F51, // $7F51 + #$7F52, // $7F52 + #$7F53, // $7F53 + #$7F54, // $7F54 + #$7F55, // $7F55 + #$7F56, // $7F56 + #$7F57, // $7F57 + #$7F58, // $7F58 + #$7F59, // $7F59 + #$7F5A, // $7F5A + #$7F5B, // $7F5B + #$7F5C, // $7F5C + #$7F5D, // $7F5D + #$7F5E, // $7F5E + #$7F5F, // $7F5F + #$7F60, // $7F60 + #$7F61, // $7F61 + #$7F62, // $7F62 + #$7F63, // $7F63 + #$7F64, // $7F64 + #$7F65, // $7F65 + #$7F66, // $7F66 + #$7F67, // $7F67 + #$7F68, // $7F68 + #$7F69, // $7F69 + #$7F6A, // $7F6A + #$7F6B, // $7F6B + #$7F6C, // $7F6C + #$7F6D, // $7F6D + #$7F6E, // $7F6E + #$7F6F, // $7F6F + #$7F70, // $7F70 + #$7F71, // $7F71 + #$7F72, // $7F72 + #$7F73, // $7F73 + #$7F74, // $7F74 + #$7F75, // $7F75 + #$7F76, // $7F76 + #$7F77, // $7F77 + #$7F78, // $7F78 + #$7F79, // $7F79 + #$7F7A, // $7F7A + #$7F7B, // $7F7B + #$7F7C, // $7F7C + #$7F7D, // $7F7D + #$7F7E, // $7F7E + #$7F7F, // $7F7F + #$7F80, // $7F80 + #$7F81, // $7F81 + #$7F82, // $7F82 + #$7F83, // $7F83 + #$7F84, // $7F84 + #$7F85, // $7F85 + #$7F86, // $7F86 + #$7F87, // $7F87 + #$7F88, // $7F88 + #$7F89, // $7F89 + #$7F8A, // $7F8A + #$7F8B, // $7F8B + #$7F8C, // $7F8C + #$7F8D, // $7F8D + #$7F8E, // $7F8E + #$7F8F, // $7F8F + #$7F90, // $7F90 + #$7F91, // $7F91 + #$7F92, // $7F92 + #$7F93, // $7F93 + #$7F94, // $7F94 + #$7F95, // $7F95 + #$7F96, // $7F96 + #$7F97, // $7F97 + #$7F98, // $7F98 + #$7F99, // $7F99 + #$7F9A, // $7F9A + #$7F9B, // $7F9B + #$7F9C, // $7F9C + #$7F9D, // $7F9D + #$7F9E, // $7F9E + #$7F9F, // $7F9F + #$7FA0, // $7FA0 + #$7FA1, // $7FA1 + #$7FA2, // $7FA2 + #$7FA3, // $7FA3 + #$7FA4, // $7FA4 + #$7FA5, // $7FA5 + #$7FA6, // $7FA6 + #$7FA7, // $7FA7 + #$7FA8, // $7FA8 + #$7FA9, // $7FA9 + #$7FAA, // $7FAA + #$7FAB, // $7FAB + #$7FAC, // $7FAC + #$7FAD, // $7FAD + #$7FAE, // $7FAE + #$7FAF, // $7FAF + #$7FB0, // $7FB0 + #$7FB1, // $7FB1 + #$7FB2, // $7FB2 + #$7FB3, // $7FB3 + #$7FB4, // $7FB4 + #$7FB5, // $7FB5 + #$7FB6, // $7FB6 + #$7FB7, // $7FB7 + #$7FB8, // $7FB8 + #$7FB9, // $7FB9 + #$7FBA, // $7FBA + #$7FBB, // $7FBB + #$7FBC, // $7FBC + #$7FBD, // $7FBD + #$7FBE, // $7FBE + #$7FBF, // $7FBF + #$7FC0, // $7FC0 + #$7FC1, // $7FC1 + #$7FC2, // $7FC2 + #$7FC3, // $7FC3 + #$7FC4, // $7FC4 + #$7FC5, // $7FC5 + #$7FC6, // $7FC6 + #$7FC7, // $7FC7 + #$7FC8, // $7FC8 + #$7FC9, // $7FC9 + #$7FCA, // $7FCA + #$7FCB, // $7FCB + #$7FCC, // $7FCC + #$7FCD, // $7FCD + #$7FCE, // $7FCE + #$7FCF, // $7FCF + #$7FD0, // $7FD0 + #$7FD1, // $7FD1 + #$7FD2, // $7FD2 + #$7FD3, // $7FD3 + #$7FD4, // $7FD4 + #$7FD5, // $7FD5 + #$7FD6, // $7FD6 + #$7FD7, // $7FD7 + #$7FD8, // $7FD8 + #$7FD9, // $7FD9 + #$7FDA, // $7FDA + #$7FDB, // $7FDB + #$7FDC, // $7FDC + #$7FDD, // $7FDD + #$7FDE, // $7FDE + #$7FDF, // $7FDF + #$7FE0, // $7FE0 + #$7FE1, // $7FE1 + #$7FE2, // $7FE2 + #$7FE3, // $7FE3 + #$7FE4, // $7FE4 + #$7FE5, // $7FE5 + #$7FE6, // $7FE6 + #$7FE7, // $7FE7 + #$7FE8, // $7FE8 + #$7FE9, // $7FE9 + #$7FEA, // $7FEA + #$7FEB, // $7FEB + #$7FEC, // $7FEC + #$7FED, // $7FED + #$7FEE, // $7FEE + #$7FEF, // $7FEF + #$7FF0, // $7FF0 + #$7FF1, // $7FF1 + #$7FF2, // $7FF2 + #$7FF3, // $7FF3 + #$7FF4, // $7FF4 + #$7FF5, // $7FF5 + #$7FF6, // $7FF6 + #$7FF7, // $7FF7 + #$7FF8, // $7FF8 + #$7FF9, // $7FF9 + #$7FFA, // $7FFA + #$7FFB, // $7FFB + #$7FFC, // $7FFC + #$7FFD, // $7FFD + #$7FFE, // $7FFE + #$7FFF, // $7FFF + #$8000, // $8000 + #$8001, // $8001 + #$8002, // $8002 + #$8003, // $8003 + #$8004, // $8004 + #$8005, // $8005 + #$8006, // $8006 + #$8007, // $8007 + #$8008, // $8008 + #$8009, // $8009 + #$800A, // $800A + #$800B, // $800B + #$800C, // $800C + #$800D, // $800D + #$800E, // $800E + #$800F, // $800F + #$8010, // $8010 + #$8011, // $8011 + #$8012, // $8012 + #$8013, // $8013 + #$8014, // $8014 + #$8015, // $8015 + #$8016, // $8016 + #$8017, // $8017 + #$8018, // $8018 + #$8019, // $8019 + #$801A, // $801A + #$801B, // $801B + #$801C, // $801C + #$801D, // $801D + #$801E, // $801E + #$801F, // $801F + #$8020, // $8020 + #$8021, // $8021 + #$8022, // $8022 + #$8023, // $8023 + #$8024, // $8024 + #$8025, // $8025 + #$8026, // $8026 + #$8027, // $8027 + #$8028, // $8028 + #$8029, // $8029 + #$802A, // $802A + #$802B, // $802B + #$802C, // $802C + #$802D, // $802D + #$802E, // $802E + #$802F, // $802F + #$8030, // $8030 + #$8031, // $8031 + #$8032, // $8032 + #$8033, // $8033 + #$8034, // $8034 + #$8035, // $8035 + #$8036, // $8036 + #$8037, // $8037 + #$8038, // $8038 + #$8039, // $8039 + #$803A, // $803A + #$803B, // $803B + #$803C, // $803C + #$803D, // $803D + #$803E, // $803E + #$803F, // $803F + #$8040, // $8040 + #$8041, // $8041 + #$8042, // $8042 + #$8043, // $8043 + #$8044, // $8044 + #$8045, // $8045 + #$8046, // $8046 + #$8047, // $8047 + #$8048, // $8048 + #$8049, // $8049 + #$804A, // $804A + #$804B, // $804B + #$804C, // $804C + #$804D, // $804D + #$804E, // $804E + #$804F, // $804F + #$8050, // $8050 + #$8051, // $8051 + #$8052, // $8052 + #$8053, // $8053 + #$8054, // $8054 + #$8055, // $8055 + #$8056, // $8056 + #$8057, // $8057 + #$8058, // $8058 + #$8059, // $8059 + #$805A, // $805A + #$805B, // $805B + #$805C, // $805C + #$805D, // $805D + #$805E, // $805E + #$805F, // $805F + #$8060, // $8060 + #$8061, // $8061 + #$8062, // $8062 + #$8063, // $8063 + #$8064, // $8064 + #$8065, // $8065 + #$8066, // $8066 + #$8067, // $8067 + #$8068, // $8068 + #$8069, // $8069 + #$806A, // $806A + #$806B, // $806B + #$806C, // $806C + #$806D, // $806D + #$806E, // $806E + #$806F, // $806F + #$8070, // $8070 + #$8071, // $8071 + #$8072, // $8072 + #$8073, // $8073 + #$8074, // $8074 + #$8075, // $8075 + #$8076, // $8076 + #$8077, // $8077 + #$8078, // $8078 + #$8079, // $8079 + #$807A, // $807A + #$807B, // $807B + #$807C, // $807C + #$807D, // $807D + #$807E, // $807E + #$807F, // $807F + #$8080, // $8080 + #$8081, // $8081 + #$8082, // $8082 + #$8083, // $8083 + #$8084, // $8084 + #$8085, // $8085 + #$8086, // $8086 + #$8087, // $8087 + #$8088, // $8088 + #$8089, // $8089 + #$808A, // $808A + #$808B, // $808B + #$808C, // $808C + #$808D, // $808D + #$808E, // $808E + #$808F, // $808F + #$8090, // $8090 + #$8091, // $8091 + #$8092, // $8092 + #$8093, // $8093 + #$8094, // $8094 + #$8095, // $8095 + #$8096, // $8096 + #$8097, // $8097 + #$8098, // $8098 + #$8099, // $8099 + #$809A, // $809A + #$809B, // $809B + #$809C, // $809C + #$809D, // $809D + #$809E, // $809E + #$809F, // $809F + #$80A0, // $80A0 + #$80A1, // $80A1 + #$80A2, // $80A2 + #$80A3, // $80A3 + #$80A4, // $80A4 + #$80A5, // $80A5 + #$80A6, // $80A6 + #$80A7, // $80A7 + #$80A8, // $80A8 + #$80A9, // $80A9 + #$80AA, // $80AA + #$80AB, // $80AB + #$80AC, // $80AC + #$80AD, // $80AD + #$80AE, // $80AE + #$80AF, // $80AF + #$80B0, // $80B0 + #$80B1, // $80B1 + #$80B2, // $80B2 + #$80B3, // $80B3 + #$80B4, // $80B4 + #$80B5, // $80B5 + #$80B6, // $80B6 + #$80B7, // $80B7 + #$80B8, // $80B8 + #$80B9, // $80B9 + #$80BA, // $80BA + #$80BB, // $80BB + #$80BC, // $80BC + #$80BD, // $80BD + #$80BE, // $80BE + #$80BF, // $80BF + #$80C0, // $80C0 + #$80C1, // $80C1 + #$80C2, // $80C2 + #$80C3, // $80C3 + #$80C4, // $80C4 + #$80C5, // $80C5 + #$80C6, // $80C6 + #$80C7, // $80C7 + #$80C8, // $80C8 + #$80C9, // $80C9 + #$80CA, // $80CA + #$80CB, // $80CB + #$80CC, // $80CC + #$80CD, // $80CD + #$80CE, // $80CE + #$80CF, // $80CF + #$80D0, // $80D0 + #$80D1, // $80D1 + #$80D2, // $80D2 + #$80D3, // $80D3 + #$80D4, // $80D4 + #$80D5, // $80D5 + #$80D6, // $80D6 + #$80D7, // $80D7 + #$80D8, // $80D8 + #$80D9, // $80D9 + #$80DA, // $80DA + #$80DB, // $80DB + #$80DC, // $80DC + #$80DD, // $80DD + #$80DE, // $80DE + #$80DF, // $80DF + #$80E0, // $80E0 + #$80E1, // $80E1 + #$80E2, // $80E2 + #$80E3, // $80E3 + #$80E4, // $80E4 + #$80E5, // $80E5 + #$80E6, // $80E6 + #$80E7, // $80E7 + #$80E8, // $80E8 + #$80E9, // $80E9 + #$80EA, // $80EA + #$80EB, // $80EB + #$80EC, // $80EC + #$80ED, // $80ED + #$80EE, // $80EE + #$80EF, // $80EF + #$80F0, // $80F0 + #$80F1, // $80F1 + #$80F2, // $80F2 + #$80F3, // $80F3 + #$80F4, // $80F4 + #$80F5, // $80F5 + #$80F6, // $80F6 + #$80F7, // $80F7 + #$80F8, // $80F8 + #$80F9, // $80F9 + #$80FA, // $80FA + #$80FB, // $80FB + #$80FC, // $80FC + #$80FD, // $80FD + #$80FE, // $80FE + #$80FF, // $80FF + #$8100, // $8100 + #$8101, // $8101 + #$8102, // $8102 + #$8103, // $8103 + #$8104, // $8104 + #$8105, // $8105 + #$8106, // $8106 + #$8107, // $8107 + #$8108, // $8108 + #$8109, // $8109 + #$810A, // $810A + #$810B, // $810B + #$810C, // $810C + #$810D, // $810D + #$810E, // $810E + #$810F, // $810F + #$8110, // $8110 + #$8111, // $8111 + #$8112, // $8112 + #$8113, // $8113 + #$8114, // $8114 + #$8115, // $8115 + #$8116, // $8116 + #$8117, // $8117 + #$8118, // $8118 + #$8119, // $8119 + #$811A, // $811A + #$811B, // $811B + #$811C, // $811C + #$811D, // $811D + #$811E, // $811E + #$811F, // $811F + #$8120, // $8120 + #$8121, // $8121 + #$8122, // $8122 + #$8123, // $8123 + #$8124, // $8124 + #$8125, // $8125 + #$8126, // $8126 + #$8127, // $8127 + #$8128, // $8128 + #$8129, // $8129 + #$812A, // $812A + #$812B, // $812B + #$812C, // $812C + #$812D, // $812D + #$812E, // $812E + #$812F, // $812F + #$8130, // $8130 + #$8131, // $8131 + #$8132, // $8132 + #$8133, // $8133 + #$8134, // $8134 + #$8135, // $8135 + #$8136, // $8136 + #$8137, // $8137 + #$8138, // $8138 + #$8139, // $8139 + #$813A, // $813A + #$813B, // $813B + #$813C, // $813C + #$813D, // $813D + #$813E, // $813E + #$813F, // $813F + #$8140, // $8140 + #$8141, // $8141 + #$8142, // $8142 + #$8143, // $8143 + #$8144, // $8144 + #$8145, // $8145 + #$8146, // $8146 + #$8147, // $8147 + #$8148, // $8148 + #$8149, // $8149 + #$814A, // $814A + #$814B, // $814B + #$814C, // $814C + #$814D, // $814D + #$814E, // $814E + #$814F, // $814F + #$8150, // $8150 + #$8151, // $8151 + #$8152, // $8152 + #$8153, // $8153 + #$8154, // $8154 + #$8155, // $8155 + #$8156, // $8156 + #$8157, // $8157 + #$8158, // $8158 + #$8159, // $8159 + #$815A, // $815A + #$815B, // $815B + #$815C, // $815C + #$815D, // $815D + #$815E, // $815E + #$815F, // $815F + #$8160, // $8160 + #$8161, // $8161 + #$8162, // $8162 + #$8163, // $8163 + #$8164, // $8164 + #$8165, // $8165 + #$8166, // $8166 + #$8167, // $8167 + #$8168, // $8168 + #$8169, // $8169 + #$816A, // $816A + #$816B, // $816B + #$816C, // $816C + #$816D, // $816D + #$816E, // $816E + #$816F, // $816F + #$8170, // $8170 + #$8171, // $8171 + #$8172, // $8172 + #$8173, // $8173 + #$8174, // $8174 + #$8175, // $8175 + #$8176, // $8176 + #$8177, // $8177 + #$8178, // $8178 + #$8179, // $8179 + #$817A, // $817A + #$817B, // $817B + #$817C, // $817C + #$817D, // $817D + #$817E, // $817E + #$817F, // $817F + #$8180, // $8180 + #$8181, // $8181 + #$8182, // $8182 + #$8183, // $8183 + #$8184, // $8184 + #$8185, // $8185 + #$8186, // $8186 + #$8187, // $8187 + #$8188, // $8188 + #$8189, // $8189 + #$818A, // $818A + #$818B, // $818B + #$818C, // $818C + #$818D, // $818D + #$818E, // $818E + #$818F, // $818F + #$8190, // $8190 + #$8191, // $8191 + #$8192, // $8192 + #$8193, // $8193 + #$8194, // $8194 + #$8195, // $8195 + #$8196, // $8196 + #$8197, // $8197 + #$8198, // $8198 + #$8199, // $8199 + #$819A, // $819A + #$819B, // $819B + #$819C, // $819C + #$819D, // $819D + #$819E, // $819E + #$819F, // $819F + #$81A0, // $81A0 + #$81A1, // $81A1 + #$81A2, // $81A2 + #$81A3, // $81A3 + #$81A4, // $81A4 + #$81A5, // $81A5 + #$81A6, // $81A6 + #$81A7, // $81A7 + #$81A8, // $81A8 + #$81A9, // $81A9 + #$81AA, // $81AA + #$81AB, // $81AB + #$81AC, // $81AC + #$81AD, // $81AD + #$81AE, // $81AE + #$81AF, // $81AF + #$81B0, // $81B0 + #$81B1, // $81B1 + #$81B2, // $81B2 + #$81B3, // $81B3 + #$81B4, // $81B4 + #$81B5, // $81B5 + #$81B6, // $81B6 + #$81B7, // $81B7 + #$81B8, // $81B8 + #$81B9, // $81B9 + #$81BA, // $81BA + #$81BB, // $81BB + #$81BC, // $81BC + #$81BD, // $81BD + #$81BE, // $81BE + #$81BF, // $81BF + #$81C0, // $81C0 + #$81C1, // $81C1 + #$81C2, // $81C2 + #$81C3, // $81C3 + #$81C4, // $81C4 + #$81C5, // $81C5 + #$81C6, // $81C6 + #$81C7, // $81C7 + #$81C8, // $81C8 + #$81C9, // $81C9 + #$81CA, // $81CA + #$81CB, // $81CB + #$81CC, // $81CC + #$81CD, // $81CD + #$81CE, // $81CE + #$81CF, // $81CF + #$81D0, // $81D0 + #$81D1, // $81D1 + #$81D2, // $81D2 + #$81D3, // $81D3 + #$81D4, // $81D4 + #$81D5, // $81D5 + #$81D6, // $81D6 + #$81D7, // $81D7 + #$81D8, // $81D8 + #$81D9, // $81D9 + #$81DA, // $81DA + #$81DB, // $81DB + #$81DC, // $81DC + #$81DD, // $81DD + #$81DE, // $81DE + #$81DF, // $81DF + #$81E0, // $81E0 + #$81E1, // $81E1 + #$81E2, // $81E2 + #$81E3, // $81E3 + #$81E4, // $81E4 + #$81E5, // $81E5 + #$81E6, // $81E6 + #$81E7, // $81E7 + #$81E8, // $81E8 + #$81E9, // $81E9 + #$81EA, // $81EA + #$81EB, // $81EB + #$81EC, // $81EC + #$81ED, // $81ED + #$81EE, // $81EE + #$81EF, // $81EF + #$81F0, // $81F0 + #$81F1, // $81F1 + #$81F2, // $81F2 + #$81F3, // $81F3 + #$81F4, // $81F4 + #$81F5, // $81F5 + #$81F6, // $81F6 + #$81F7, // $81F7 + #$81F8, // $81F8 + #$81F9, // $81F9 + #$81FA, // $81FA + #$81FB, // $81FB + #$81FC, // $81FC + #$81FD, // $81FD + #$81FE, // $81FE + #$81FF, // $81FF + #$8200, // $8200 + #$8201, // $8201 + #$8202, // $8202 + #$8203, // $8203 + #$8204, // $8204 + #$8205, // $8205 + #$8206, // $8206 + #$8207, // $8207 + #$8208, // $8208 + #$8209, // $8209 + #$820A, // $820A + #$820B, // $820B + #$820C, // $820C + #$820D, // $820D + #$820E, // $820E + #$820F, // $820F + #$8210, // $8210 + #$8211, // $8211 + #$8212, // $8212 + #$8213, // $8213 + #$8214, // $8214 + #$8215, // $8215 + #$8216, // $8216 + #$8217, // $8217 + #$8218, // $8218 + #$8219, // $8219 + #$821A, // $821A + #$821B, // $821B + #$821C, // $821C + #$821D, // $821D + #$821E, // $821E + #$821F, // $821F + #$8220, // $8220 + #$8221, // $8221 + #$8222, // $8222 + #$8223, // $8223 + #$8224, // $8224 + #$8225, // $8225 + #$8226, // $8226 + #$8227, // $8227 + #$8228, // $8228 + #$8229, // $8229 + #$822A, // $822A + #$822B, // $822B + #$822C, // $822C + #$822D, // $822D + #$822E, // $822E + #$822F, // $822F + #$8230, // $8230 + #$8231, // $8231 + #$8232, // $8232 + #$8233, // $8233 + #$8234, // $8234 + #$8235, // $8235 + #$8236, // $8236 + #$8237, // $8237 + #$8238, // $8238 + #$8239, // $8239 + #$823A, // $823A + #$823B, // $823B + #$823C, // $823C + #$823D, // $823D + #$823E, // $823E + #$823F, // $823F + #$8240, // $8240 + #$8241, // $8241 + #$8242, // $8242 + #$8243, // $8243 + #$8244, // $8244 + #$8245, // $8245 + #$8246, // $8246 + #$8247, // $8247 + #$8248, // $8248 + #$8249, // $8249 + #$824A, // $824A + #$824B, // $824B + #$824C, // $824C + #$824D, // $824D + #$824E, // $824E + #$824F, // $824F + #$8250, // $8250 + #$8251, // $8251 + #$8252, // $8252 + #$8253, // $8253 + #$8254, // $8254 + #$8255, // $8255 + #$8256, // $8256 + #$8257, // $8257 + #$8258, // $8258 + #$8259, // $8259 + #$825A, // $825A + #$825B, // $825B + #$825C, // $825C + #$825D, // $825D + #$825E, // $825E + #$825F, // $825F + #$8260, // $8260 + #$8261, // $8261 + #$8262, // $8262 + #$8263, // $8263 + #$8264, // $8264 + #$8265, // $8265 + #$8266, // $8266 + #$8267, // $8267 + #$8268, // $8268 + #$8269, // $8269 + #$826A, // $826A + #$826B, // $826B + #$826C, // $826C + #$826D, // $826D + #$826E, // $826E + #$826F, // $826F + #$8270, // $8270 + #$8271, // $8271 + #$8272, // $8272 + #$8273, // $8273 + #$8274, // $8274 + #$8275, // $8275 + #$8276, // $8276 + #$8277, // $8277 + #$8278, // $8278 + #$8279, // $8279 + #$827A, // $827A + #$827B, // $827B + #$827C, // $827C + #$827D, // $827D + #$827E, // $827E + #$827F, // $827F + #$8280, // $8280 + #$8281, // $8281 + #$8282, // $8282 + #$8283, // $8283 + #$8284, // $8284 + #$8285, // $8285 + #$8286, // $8286 + #$8287, // $8287 + #$8288, // $8288 + #$8289, // $8289 + #$828A, // $828A + #$828B, // $828B + #$828C, // $828C + #$828D, // $828D + #$828E, // $828E + #$828F, // $828F + #$8290, // $8290 + #$8291, // $8291 + #$8292, // $8292 + #$8293, // $8293 + #$8294, // $8294 + #$8295, // $8295 + #$8296, // $8296 + #$8297, // $8297 + #$8298, // $8298 + #$8299, // $8299 + #$829A, // $829A + #$829B, // $829B + #$829C, // $829C + #$829D, // $829D + #$829E, // $829E + #$829F, // $829F + #$82A0, // $82A0 + #$82A1, // $82A1 + #$82A2, // $82A2 + #$82A3, // $82A3 + #$82A4, // $82A4 + #$82A5, // $82A5 + #$82A6, // $82A6 + #$82A7, // $82A7 + #$82A8, // $82A8 + #$82A9, // $82A9 + #$82AA, // $82AA + #$82AB, // $82AB + #$82AC, // $82AC + #$82AD, // $82AD + #$82AE, // $82AE + #$82AF, // $82AF + #$82B0, // $82B0 + #$82B1, // $82B1 + #$82B2, // $82B2 + #$82B3, // $82B3 + #$82B4, // $82B4 + #$82B5, // $82B5 + #$82B6, // $82B6 + #$82B7, // $82B7 + #$82B8, // $82B8 + #$82B9, // $82B9 + #$82BA, // $82BA + #$82BB, // $82BB + #$82BC, // $82BC + #$82BD, // $82BD + #$82BE, // $82BE + #$82BF, // $82BF + #$82C0, // $82C0 + #$82C1, // $82C1 + #$82C2, // $82C2 + #$82C3, // $82C3 + #$82C4, // $82C4 + #$82C5, // $82C5 + #$82C6, // $82C6 + #$82C7, // $82C7 + #$82C8, // $82C8 + #$82C9, // $82C9 + #$82CA, // $82CA + #$82CB, // $82CB + #$82CC, // $82CC + #$82CD, // $82CD + #$82CE, // $82CE + #$82CF, // $82CF + #$82D0, // $82D0 + #$82D1, // $82D1 + #$82D2, // $82D2 + #$82D3, // $82D3 + #$82D4, // $82D4 + #$82D5, // $82D5 + #$82D6, // $82D6 + #$82D7, // $82D7 + #$82D8, // $82D8 + #$82D9, // $82D9 + #$82DA, // $82DA + #$82DB, // $82DB + #$82DC, // $82DC + #$82DD, // $82DD + #$82DE, // $82DE + #$82DF, // $82DF + #$82E0, // $82E0 + #$82E1, // $82E1 + #$82E2, // $82E2 + #$82E3, // $82E3 + #$82E4, // $82E4 + #$82E5, // $82E5 + #$82E6, // $82E6 + #$82E7, // $82E7 + #$82E8, // $82E8 + #$82E9, // $82E9 + #$82EA, // $82EA + #$82EB, // $82EB + #$82EC, // $82EC + #$82ED, // $82ED + #$82EE, // $82EE + #$82EF, // $82EF + #$82F0, // $82F0 + #$82F1, // $82F1 + #$82F2, // $82F2 + #$82F3, // $82F3 + #$82F4, // $82F4 + #$82F5, // $82F5 + #$82F6, // $82F6 + #$82F7, // $82F7 + #$82F8, // $82F8 + #$82F9, // $82F9 + #$82FA, // $82FA + #$82FB, // $82FB + #$82FC, // $82FC + #$82FD, // $82FD + #$82FE, // $82FE + #$82FF, // $82FF + #$8300, // $8300 + #$8301, // $8301 + #$8302, // $8302 + #$8303, // $8303 + #$8304, // $8304 + #$8305, // $8305 + #$8306, // $8306 + #$8307, // $8307 + #$8308, // $8308 + #$8309, // $8309 + #$830A, // $830A + #$830B, // $830B + #$830C, // $830C + #$830D, // $830D + #$830E, // $830E + #$830F, // $830F + #$8310, // $8310 + #$8311, // $8311 + #$8312, // $8312 + #$8313, // $8313 + #$8314, // $8314 + #$8315, // $8315 + #$8316, // $8316 + #$8317, // $8317 + #$8318, // $8318 + #$8319, // $8319 + #$831A, // $831A + #$831B, // $831B + #$831C, // $831C + #$831D, // $831D + #$831E, // $831E + #$831F, // $831F + #$8320, // $8320 + #$8321, // $8321 + #$8322, // $8322 + #$8323, // $8323 + #$8324, // $8324 + #$8325, // $8325 + #$8326, // $8326 + #$8327, // $8327 + #$8328, // $8328 + #$8329, // $8329 + #$832A, // $832A + #$832B, // $832B + #$832C, // $832C + #$832D, // $832D + #$832E, // $832E + #$832F, // $832F + #$8330, // $8330 + #$8331, // $8331 + #$8332, // $8332 + #$8333, // $8333 + #$8334, // $8334 + #$8335, // $8335 + #$8336, // $8336 + #$8337, // $8337 + #$8338, // $8338 + #$8339, // $8339 + #$833A, // $833A + #$833B, // $833B + #$833C, // $833C + #$833D, // $833D + #$833E, // $833E + #$833F, // $833F + #$8340, // $8340 + #$8341, // $8341 + #$8342, // $8342 + #$8343, // $8343 + #$8344, // $8344 + #$8345, // $8345 + #$8346, // $8346 + #$8347, // $8347 + #$8348, // $8348 + #$8349, // $8349 + #$834A, // $834A + #$834B, // $834B + #$834C, // $834C + #$834D, // $834D + #$834E, // $834E + #$834F, // $834F + #$8350, // $8350 + #$8351, // $8351 + #$8352, // $8352 + #$8353, // $8353 + #$8354, // $8354 + #$8355, // $8355 + #$8356, // $8356 + #$8357, // $8357 + #$8358, // $8358 + #$8359, // $8359 + #$835A, // $835A + #$835B, // $835B + #$835C, // $835C + #$835D, // $835D + #$835E, // $835E + #$835F, // $835F + #$8360, // $8360 + #$8361, // $8361 + #$8362, // $8362 + #$8363, // $8363 + #$8364, // $8364 + #$8365, // $8365 + #$8366, // $8366 + #$8367, // $8367 + #$8368, // $8368 + #$8369, // $8369 + #$836A, // $836A + #$836B, // $836B + #$836C, // $836C + #$836D, // $836D + #$836E, // $836E + #$836F, // $836F + #$8370, // $8370 + #$8371, // $8371 + #$8372, // $8372 + #$8373, // $8373 + #$8374, // $8374 + #$8375, // $8375 + #$8376, // $8376 + #$8377, // $8377 + #$8378, // $8378 + #$8379, // $8379 + #$837A, // $837A + #$837B, // $837B + #$837C, // $837C + #$837D, // $837D + #$837E, // $837E + #$837F, // $837F + #$8380, // $8380 + #$8381, // $8381 + #$8382, // $8382 + #$8383, // $8383 + #$8384, // $8384 + #$8385, // $8385 + #$8386, // $8386 + #$8387, // $8387 + #$8388, // $8388 + #$8389, // $8389 + #$838A, // $838A + #$838B, // $838B + #$838C, // $838C + #$838D, // $838D + #$838E, // $838E + #$838F, // $838F + #$8390, // $8390 + #$8391, // $8391 + #$8392, // $8392 + #$8393, // $8393 + #$8394, // $8394 + #$8395, // $8395 + #$8396, // $8396 + #$8397, // $8397 + #$8398, // $8398 + #$8399, // $8399 + #$839A, // $839A + #$839B, // $839B + #$839C, // $839C + #$839D, // $839D + #$839E, // $839E + #$839F, // $839F + #$83A0, // $83A0 + #$83A1, // $83A1 + #$83A2, // $83A2 + #$83A3, // $83A3 + #$83A4, // $83A4 + #$83A5, // $83A5 + #$83A6, // $83A6 + #$83A7, // $83A7 + #$83A8, // $83A8 + #$83A9, // $83A9 + #$83AA, // $83AA + #$83AB, // $83AB + #$83AC, // $83AC + #$83AD, // $83AD + #$83AE, // $83AE + #$83AF, // $83AF + #$83B0, // $83B0 + #$83B1, // $83B1 + #$83B2, // $83B2 + #$83B3, // $83B3 + #$83B4, // $83B4 + #$83B5, // $83B5 + #$83B6, // $83B6 + #$83B7, // $83B7 + #$83B8, // $83B8 + #$83B9, // $83B9 + #$83BA, // $83BA + #$83BB, // $83BB + #$83BC, // $83BC + #$83BD, // $83BD + #$83BE, // $83BE + #$83BF, // $83BF + #$83C0, // $83C0 + #$83C1, // $83C1 + #$83C2, // $83C2 + #$83C3, // $83C3 + #$83C4, // $83C4 + #$83C5, // $83C5 + #$83C6, // $83C6 + #$83C7, // $83C7 + #$83C8, // $83C8 + #$83C9, // $83C9 + #$83CA, // $83CA + #$83CB, // $83CB + #$83CC, // $83CC + #$83CD, // $83CD + #$83CE, // $83CE + #$83CF, // $83CF + #$83D0, // $83D0 + #$83D1, // $83D1 + #$83D2, // $83D2 + #$83D3, // $83D3 + #$83D4, // $83D4 + #$83D5, // $83D5 + #$83D6, // $83D6 + #$83D7, // $83D7 + #$83D8, // $83D8 + #$83D9, // $83D9 + #$83DA, // $83DA + #$83DB, // $83DB + #$83DC, // $83DC + #$83DD, // $83DD + #$83DE, // $83DE + #$83DF, // $83DF + #$83E0, // $83E0 + #$83E1, // $83E1 + #$83E2, // $83E2 + #$83E3, // $83E3 + #$83E4, // $83E4 + #$83E5, // $83E5 + #$83E6, // $83E6 + #$83E7, // $83E7 + #$83E8, // $83E8 + #$83E9, // $83E9 + #$83EA, // $83EA + #$83EB, // $83EB + #$83EC, // $83EC + #$83ED, // $83ED + #$83EE, // $83EE + #$83EF, // $83EF + #$83F0, // $83F0 + #$83F1, // $83F1 + #$83F2, // $83F2 + #$83F3, // $83F3 + #$83F4, // $83F4 + #$83F5, // $83F5 + #$83F6, // $83F6 + #$83F7, // $83F7 + #$83F8, // $83F8 + #$83F9, // $83F9 + #$83FA, // $83FA + #$83FB, // $83FB + #$83FC, // $83FC + #$83FD, // $83FD + #$83FE, // $83FE + #$83FF, // $83FF + #$8400, // $8400 + #$8401, // $8401 + #$8402, // $8402 + #$8403, // $8403 + #$8404, // $8404 + #$8405, // $8405 + #$8406, // $8406 + #$8407, // $8407 + #$8408, // $8408 + #$8409, // $8409 + #$840A, // $840A + #$840B, // $840B + #$840C, // $840C + #$840D, // $840D + #$840E, // $840E + #$840F, // $840F + #$8410, // $8410 + #$8411, // $8411 + #$8412, // $8412 + #$8413, // $8413 + #$8414, // $8414 + #$8415, // $8415 + #$8416, // $8416 + #$8417, // $8417 + #$8418, // $8418 + #$8419, // $8419 + #$841A, // $841A + #$841B, // $841B + #$841C, // $841C + #$841D, // $841D + #$841E, // $841E + #$841F, // $841F + #$8420, // $8420 + #$8421, // $8421 + #$8422, // $8422 + #$8423, // $8423 + #$8424, // $8424 + #$8425, // $8425 + #$8426, // $8426 + #$8427, // $8427 + #$8428, // $8428 + #$8429, // $8429 + #$842A, // $842A + #$842B, // $842B + #$842C, // $842C + #$842D, // $842D + #$842E, // $842E + #$842F, // $842F + #$8430, // $8430 + #$8431, // $8431 + #$8432, // $8432 + #$8433, // $8433 + #$8434, // $8434 + #$8435, // $8435 + #$8436, // $8436 + #$8437, // $8437 + #$8438, // $8438 + #$8439, // $8439 + #$843A, // $843A + #$843B, // $843B + #$843C, // $843C + #$843D, // $843D + #$843E, // $843E + #$843F, // $843F + #$8440, // $8440 + #$8441, // $8441 + #$8442, // $8442 + #$8443, // $8443 + #$8444, // $8444 + #$8445, // $8445 + #$8446, // $8446 + #$8447, // $8447 + #$8448, // $8448 + #$8449, // $8449 + #$844A, // $844A + #$844B, // $844B + #$844C, // $844C + #$844D, // $844D + #$844E, // $844E + #$844F, // $844F + #$8450, // $8450 + #$8451, // $8451 + #$8452, // $8452 + #$8453, // $8453 + #$8454, // $8454 + #$8455, // $8455 + #$8456, // $8456 + #$8457, // $8457 + #$8458, // $8458 + #$8459, // $8459 + #$845A, // $845A + #$845B, // $845B + #$845C, // $845C + #$845D, // $845D + #$845E, // $845E + #$845F, // $845F + #$8460, // $8460 + #$8461, // $8461 + #$8462, // $8462 + #$8463, // $8463 + #$8464, // $8464 + #$8465, // $8465 + #$8466, // $8466 + #$8467, // $8467 + #$8468, // $8468 + #$8469, // $8469 + #$846A, // $846A + #$846B, // $846B + #$846C, // $846C + #$846D, // $846D + #$846E, // $846E + #$846F, // $846F + #$8470, // $8470 + #$8471, // $8471 + #$8472, // $8472 + #$8473, // $8473 + #$8474, // $8474 + #$8475, // $8475 + #$8476, // $8476 + #$8477, // $8477 + #$8478, // $8478 + #$8479, // $8479 + #$847A, // $847A + #$847B, // $847B + #$847C, // $847C + #$847D, // $847D + #$847E, // $847E + #$847F, // $847F + #$8480, // $8480 + #$8481, // $8481 + #$8482, // $8482 + #$8483, // $8483 + #$8484, // $8484 + #$8485, // $8485 + #$8486, // $8486 + #$8487, // $8487 + #$8488, // $8488 + #$8489, // $8489 + #$848A, // $848A + #$848B, // $848B + #$848C, // $848C + #$848D, // $848D + #$848E, // $848E + #$848F, // $848F + #$8490, // $8490 + #$8491, // $8491 + #$8492, // $8492 + #$8493, // $8493 + #$8494, // $8494 + #$8495, // $8495 + #$8496, // $8496 + #$8497, // $8497 + #$8498, // $8498 + #$8499, // $8499 + #$849A, // $849A + #$849B, // $849B + #$849C, // $849C + #$849D, // $849D + #$849E, // $849E + #$849F, // $849F + #$84A0, // $84A0 + #$84A1, // $84A1 + #$84A2, // $84A2 + #$84A3, // $84A3 + #$84A4, // $84A4 + #$84A5, // $84A5 + #$84A6, // $84A6 + #$84A7, // $84A7 + #$84A8, // $84A8 + #$84A9, // $84A9 + #$84AA, // $84AA + #$84AB, // $84AB + #$84AC, // $84AC + #$84AD, // $84AD + #$84AE, // $84AE + #$84AF, // $84AF + #$84B0, // $84B0 + #$84B1, // $84B1 + #$84B2, // $84B2 + #$84B3, // $84B3 + #$84B4, // $84B4 + #$84B5, // $84B5 + #$84B6, // $84B6 + #$84B7, // $84B7 + #$84B8, // $84B8 + #$84B9, // $84B9 + #$84BA, // $84BA + #$84BB, // $84BB + #$84BC, // $84BC + #$84BD, // $84BD + #$84BE, // $84BE + #$84BF, // $84BF + #$84C0, // $84C0 + #$84C1, // $84C1 + #$84C2, // $84C2 + #$84C3, // $84C3 + #$84C4, // $84C4 + #$84C5, // $84C5 + #$84C6, // $84C6 + #$84C7, // $84C7 + #$84C8, // $84C8 + #$84C9, // $84C9 + #$84CA, // $84CA + #$84CB, // $84CB + #$84CC, // $84CC + #$84CD, // $84CD + #$84CE, // $84CE + #$84CF, // $84CF + #$84D0, // $84D0 + #$84D1, // $84D1 + #$84D2, // $84D2 + #$84D3, // $84D3 + #$84D4, // $84D4 + #$84D5, // $84D5 + #$84D6, // $84D6 + #$84D7, // $84D7 + #$84D8, // $84D8 + #$84D9, // $84D9 + #$84DA, // $84DA + #$84DB, // $84DB + #$84DC, // $84DC + #$84DD, // $84DD + #$84DE, // $84DE + #$84DF, // $84DF + #$84E0, // $84E0 + #$84E1, // $84E1 + #$84E2, // $84E2 + #$84E3, // $84E3 + #$84E4, // $84E4 + #$84E5, // $84E5 + #$84E6, // $84E6 + #$84E7, // $84E7 + #$84E8, // $84E8 + #$84E9, // $84E9 + #$84EA, // $84EA + #$84EB, // $84EB + #$84EC, // $84EC + #$84ED, // $84ED + #$84EE, // $84EE + #$84EF, // $84EF + #$84F0, // $84F0 + #$84F1, // $84F1 + #$84F2, // $84F2 + #$84F3, // $84F3 + #$84F4, // $84F4 + #$84F5, // $84F5 + #$84F6, // $84F6 + #$84F7, // $84F7 + #$84F8, // $84F8 + #$84F9, // $84F9 + #$84FA, // $84FA + #$84FB, // $84FB + #$84FC, // $84FC + #$84FD, // $84FD + #$84FE, // $84FE + #$84FF, // $84FF + #$8500, // $8500 + #$8501, // $8501 + #$8502, // $8502 + #$8503, // $8503 + #$8504, // $8504 + #$8505, // $8505 + #$8506, // $8506 + #$8507, // $8507 + #$8508, // $8508 + #$8509, // $8509 + #$850A, // $850A + #$850B, // $850B + #$850C, // $850C + #$850D, // $850D + #$850E, // $850E + #$850F, // $850F + #$8510, // $8510 + #$8511, // $8511 + #$8512, // $8512 + #$8513, // $8513 + #$8514, // $8514 + #$8515, // $8515 + #$8516, // $8516 + #$8517, // $8517 + #$8518, // $8518 + #$8519, // $8519 + #$851A, // $851A + #$851B, // $851B + #$851C, // $851C + #$851D, // $851D + #$851E, // $851E + #$851F, // $851F + #$8520, // $8520 + #$8521, // $8521 + #$8522, // $8522 + #$8523, // $8523 + #$8524, // $8524 + #$8525, // $8525 + #$8526, // $8526 + #$8527, // $8527 + #$8528, // $8528 + #$8529, // $8529 + #$852A, // $852A + #$852B, // $852B + #$852C, // $852C + #$852D, // $852D + #$852E, // $852E + #$852F, // $852F + #$8530, // $8530 + #$8531, // $8531 + #$8532, // $8532 + #$8533, // $8533 + #$8534, // $8534 + #$8535, // $8535 + #$8536, // $8536 + #$8537, // $8537 + #$8538, // $8538 + #$8539, // $8539 + #$853A, // $853A + #$853B, // $853B + #$853C, // $853C + #$853D, // $853D + #$853E, // $853E + #$853F, // $853F + #$8540, // $8540 + #$8541, // $8541 + #$8542, // $8542 + #$8543, // $8543 + #$8544, // $8544 + #$8545, // $8545 + #$8546, // $8546 + #$8547, // $8547 + #$8548, // $8548 + #$8549, // $8549 + #$854A, // $854A + #$854B, // $854B + #$854C, // $854C + #$854D, // $854D + #$854E, // $854E + #$854F, // $854F + #$8550, // $8550 + #$8551, // $8551 + #$8552, // $8552 + #$8553, // $8553 + #$8554, // $8554 + #$8555, // $8555 + #$8556, // $8556 + #$8557, // $8557 + #$8558, // $8558 + #$8559, // $8559 + #$855A, // $855A + #$855B, // $855B + #$855C, // $855C + #$855D, // $855D + #$855E, // $855E + #$855F, // $855F + #$8560, // $8560 + #$8561, // $8561 + #$8562, // $8562 + #$8563, // $8563 + #$8564, // $8564 + #$8565, // $8565 + #$8566, // $8566 + #$8567, // $8567 + #$8568, // $8568 + #$8569, // $8569 + #$856A, // $856A + #$856B, // $856B + #$856C, // $856C + #$856D, // $856D + #$856E, // $856E + #$856F, // $856F + #$8570, // $8570 + #$8571, // $8571 + #$8572, // $8572 + #$8573, // $8573 + #$8574, // $8574 + #$8575, // $8575 + #$8576, // $8576 + #$8577, // $8577 + #$8578, // $8578 + #$8579, // $8579 + #$857A, // $857A + #$857B, // $857B + #$857C, // $857C + #$857D, // $857D + #$857E, // $857E + #$857F, // $857F + #$8580, // $8580 + #$8581, // $8581 + #$8582, // $8582 + #$8583, // $8583 + #$8584, // $8584 + #$8585, // $8585 + #$8586, // $8586 + #$8587, // $8587 + #$8588, // $8588 + #$8589, // $8589 + #$858A, // $858A + #$858B, // $858B + #$858C, // $858C + #$858D, // $858D + #$858E, // $858E + #$858F, // $858F + #$8590, // $8590 + #$8591, // $8591 + #$8592, // $8592 + #$8593, // $8593 + #$8594, // $8594 + #$8595, // $8595 + #$8596, // $8596 + #$8597, // $8597 + #$8598, // $8598 + #$8599, // $8599 + #$859A, // $859A + #$859B, // $859B + #$859C, // $859C + #$859D, // $859D + #$859E, // $859E + #$859F, // $859F + #$85A0, // $85A0 + #$85A1, // $85A1 + #$85A2, // $85A2 + #$85A3, // $85A3 + #$85A4, // $85A4 + #$85A5, // $85A5 + #$85A6, // $85A6 + #$85A7, // $85A7 + #$85A8, // $85A8 + #$85A9, // $85A9 + #$85AA, // $85AA + #$85AB, // $85AB + #$85AC, // $85AC + #$85AD, // $85AD + #$85AE, // $85AE + #$85AF, // $85AF + #$85B0, // $85B0 + #$85B1, // $85B1 + #$85B2, // $85B2 + #$85B3, // $85B3 + #$85B4, // $85B4 + #$85B5, // $85B5 + #$85B6, // $85B6 + #$85B7, // $85B7 + #$85B8, // $85B8 + #$85B9, // $85B9 + #$85BA, // $85BA + #$85BB, // $85BB + #$85BC, // $85BC + #$85BD, // $85BD + #$85BE, // $85BE + #$85BF, // $85BF + #$85C0, // $85C0 + #$85C1, // $85C1 + #$85C2, // $85C2 + #$85C3, // $85C3 + #$85C4, // $85C4 + #$85C5, // $85C5 + #$85C6, // $85C6 + #$85C7, // $85C7 + #$85C8, // $85C8 + #$85C9, // $85C9 + #$85CA, // $85CA + #$85CB, // $85CB + #$85CC, // $85CC + #$85CD, // $85CD + #$85CE, // $85CE + #$85CF, // $85CF + #$85D0, // $85D0 + #$85D1, // $85D1 + #$85D2, // $85D2 + #$85D3, // $85D3 + #$85D4, // $85D4 + #$85D5, // $85D5 + #$85D6, // $85D6 + #$85D7, // $85D7 + #$85D8, // $85D8 + #$85D9, // $85D9 + #$85DA, // $85DA + #$85DB, // $85DB + #$85DC, // $85DC + #$85DD, // $85DD + #$85DE, // $85DE + #$85DF, // $85DF + #$85E0, // $85E0 + #$85E1, // $85E1 + #$85E2, // $85E2 + #$85E3, // $85E3 + #$85E4, // $85E4 + #$85E5, // $85E5 + #$85E6, // $85E6 + #$85E7, // $85E7 + #$85E8, // $85E8 + #$85E9, // $85E9 + #$85EA, // $85EA + #$85EB, // $85EB + #$85EC, // $85EC + #$85ED, // $85ED + #$85EE, // $85EE + #$85EF, // $85EF + #$85F0, // $85F0 + #$85F1, // $85F1 + #$85F2, // $85F2 + #$85F3, // $85F3 + #$85F4, // $85F4 + #$85F5, // $85F5 + #$85F6, // $85F6 + #$85F7, // $85F7 + #$85F8, // $85F8 + #$85F9, // $85F9 + #$85FA, // $85FA + #$85FB, // $85FB + #$85FC, // $85FC + #$85FD, // $85FD + #$85FE, // $85FE + #$85FF, // $85FF + #$8600, // $8600 + #$8601, // $8601 + #$8602, // $8602 + #$8603, // $8603 + #$8604, // $8604 + #$8605, // $8605 + #$8606, // $8606 + #$8607, // $8607 + #$8608, // $8608 + #$8609, // $8609 + #$860A, // $860A + #$860B, // $860B + #$860C, // $860C + #$860D, // $860D + #$860E, // $860E + #$860F, // $860F + #$8610, // $8610 + #$8611, // $8611 + #$8612, // $8612 + #$8613, // $8613 + #$8614, // $8614 + #$8615, // $8615 + #$8616, // $8616 + #$8617, // $8617 + #$8618, // $8618 + #$8619, // $8619 + #$861A, // $861A + #$861B, // $861B + #$861C, // $861C + #$861D, // $861D + #$861E, // $861E + #$861F, // $861F + #$8620, // $8620 + #$8621, // $8621 + #$8622, // $8622 + #$8623, // $8623 + #$8624, // $8624 + #$8625, // $8625 + #$8626, // $8626 + #$8627, // $8627 + #$8628, // $8628 + #$8629, // $8629 + #$862A, // $862A + #$862B, // $862B + #$862C, // $862C + #$862D, // $862D + #$862E, // $862E + #$862F, // $862F + #$8630, // $8630 + #$8631, // $8631 + #$8632, // $8632 + #$8633, // $8633 + #$8634, // $8634 + #$8635, // $8635 + #$8636, // $8636 + #$8637, // $8637 + #$8638, // $8638 + #$8639, // $8639 + #$863A, // $863A + #$863B, // $863B + #$863C, // $863C + #$863D, // $863D + #$863E, // $863E + #$863F, // $863F + #$8640, // $8640 + #$8641, // $8641 + #$8642, // $8642 + #$8643, // $8643 + #$8644, // $8644 + #$8645, // $8645 + #$8646, // $8646 + #$8647, // $8647 + #$8648, // $8648 + #$8649, // $8649 + #$864A, // $864A + #$864B, // $864B + #$864C, // $864C + #$864D, // $864D + #$864E, // $864E + #$864F, // $864F + #$8650, // $8650 + #$8651, // $8651 + #$8652, // $8652 + #$8653, // $8653 + #$8654, // $8654 + #$8655, // $8655 + #$8656, // $8656 + #$8657, // $8657 + #$8658, // $8658 + #$8659, // $8659 + #$865A, // $865A + #$865B, // $865B + #$865C, // $865C + #$865D, // $865D + #$865E, // $865E + #$865F, // $865F + #$8660, // $8660 + #$8661, // $8661 + #$8662, // $8662 + #$8663, // $8663 + #$8664, // $8664 + #$8665, // $8665 + #$8666, // $8666 + #$8667, // $8667 + #$8668, // $8668 + #$8669, // $8669 + #$866A, // $866A + #$866B, // $866B + #$866C, // $866C + #$866D, // $866D + #$866E, // $866E + #$866F, // $866F + #$8670, // $8670 + #$8671, // $8671 + #$8672, // $8672 + #$8673, // $8673 + #$8674, // $8674 + #$8675, // $8675 + #$8676, // $8676 + #$8677, // $8677 + #$8678, // $8678 + #$8679, // $8679 + #$867A, // $867A + #$867B, // $867B + #$867C, // $867C + #$867D, // $867D + #$867E, // $867E + #$867F, // $867F + #$8680, // $8680 + #$8681, // $8681 + #$8682, // $8682 + #$8683, // $8683 + #$8684, // $8684 + #$8685, // $8685 + #$8686, // $8686 + #$8687, // $8687 + #$8688, // $8688 + #$8689, // $8689 + #$868A, // $868A + #$868B, // $868B + #$868C, // $868C + #$868D, // $868D + #$868E, // $868E + #$868F, // $868F + #$8690, // $8690 + #$8691, // $8691 + #$8692, // $8692 + #$8693, // $8693 + #$8694, // $8694 + #$8695, // $8695 + #$8696, // $8696 + #$8697, // $8697 + #$8698, // $8698 + #$8699, // $8699 + #$869A, // $869A + #$869B, // $869B + #$869C, // $869C + #$869D, // $869D + #$869E, // $869E + #$869F, // $869F + #$86A0, // $86A0 + #$86A1, // $86A1 + #$86A2, // $86A2 + #$86A3, // $86A3 + #$86A4, // $86A4 + #$86A5, // $86A5 + #$86A6, // $86A6 + #$86A7, // $86A7 + #$86A8, // $86A8 + #$86A9, // $86A9 + #$86AA, // $86AA + #$86AB, // $86AB + #$86AC, // $86AC + #$86AD, // $86AD + #$86AE, // $86AE + #$86AF, // $86AF + #$86B0, // $86B0 + #$86B1, // $86B1 + #$86B2, // $86B2 + #$86B3, // $86B3 + #$86B4, // $86B4 + #$86B5, // $86B5 + #$86B6, // $86B6 + #$86B7, // $86B7 + #$86B8, // $86B8 + #$86B9, // $86B9 + #$86BA, // $86BA + #$86BB, // $86BB + #$86BC, // $86BC + #$86BD, // $86BD + #$86BE, // $86BE + #$86BF, // $86BF + #$86C0, // $86C0 + #$86C1, // $86C1 + #$86C2, // $86C2 + #$86C3, // $86C3 + #$86C4, // $86C4 + #$86C5, // $86C5 + #$86C6, // $86C6 + #$86C7, // $86C7 + #$86C8, // $86C8 + #$86C9, // $86C9 + #$86CA, // $86CA + #$86CB, // $86CB + #$86CC, // $86CC + #$86CD, // $86CD + #$86CE, // $86CE + #$86CF, // $86CF + #$86D0, // $86D0 + #$86D1, // $86D1 + #$86D2, // $86D2 + #$86D3, // $86D3 + #$86D4, // $86D4 + #$86D5, // $86D5 + #$86D6, // $86D6 + #$86D7, // $86D7 + #$86D8, // $86D8 + #$86D9, // $86D9 + #$86DA, // $86DA + #$86DB, // $86DB + #$86DC, // $86DC + #$86DD, // $86DD + #$86DE, // $86DE + #$86DF, // $86DF + #$86E0, // $86E0 + #$86E1, // $86E1 + #$86E2, // $86E2 + #$86E3, // $86E3 + #$86E4, // $86E4 + #$86E5, // $86E5 + #$86E6, // $86E6 + #$86E7, // $86E7 + #$86E8, // $86E8 + #$86E9, // $86E9 + #$86EA, // $86EA + #$86EB, // $86EB + #$86EC, // $86EC + #$86ED, // $86ED + #$86EE, // $86EE + #$86EF, // $86EF + #$86F0, // $86F0 + #$86F1, // $86F1 + #$86F2, // $86F2 + #$86F3, // $86F3 + #$86F4, // $86F4 + #$86F5, // $86F5 + #$86F6, // $86F6 + #$86F7, // $86F7 + #$86F8, // $86F8 + #$86F9, // $86F9 + #$86FA, // $86FA + #$86FB, // $86FB + #$86FC, // $86FC + #$86FD, // $86FD + #$86FE, // $86FE + #$86FF, // $86FF + #$8700, // $8700 + #$8701, // $8701 + #$8702, // $8702 + #$8703, // $8703 + #$8704, // $8704 + #$8705, // $8705 + #$8706, // $8706 + #$8707, // $8707 + #$8708, // $8708 + #$8709, // $8709 + #$870A, // $870A + #$870B, // $870B + #$870C, // $870C + #$870D, // $870D + #$870E, // $870E + #$870F, // $870F + #$8710, // $8710 + #$8711, // $8711 + #$8712, // $8712 + #$8713, // $8713 + #$8714, // $8714 + #$8715, // $8715 + #$8716, // $8716 + #$8717, // $8717 + #$8718, // $8718 + #$8719, // $8719 + #$871A, // $871A + #$871B, // $871B + #$871C, // $871C + #$871D, // $871D + #$871E, // $871E + #$871F, // $871F + #$8720, // $8720 + #$8721, // $8721 + #$8722, // $8722 + #$8723, // $8723 + #$8724, // $8724 + #$8725, // $8725 + #$8726, // $8726 + #$8727, // $8727 + #$8728, // $8728 + #$8729, // $8729 + #$872A, // $872A + #$872B, // $872B + #$872C, // $872C + #$872D, // $872D + #$872E, // $872E + #$872F, // $872F + #$8730, // $8730 + #$8731, // $8731 + #$8732, // $8732 + #$8733, // $8733 + #$8734, // $8734 + #$8735, // $8735 + #$8736, // $8736 + #$8737, // $8737 + #$8738, // $8738 + #$8739, // $8739 + #$873A, // $873A + #$873B, // $873B + #$873C, // $873C + #$873D, // $873D + #$873E, // $873E + #$873F, // $873F + #$8740, // $8740 + #$8741, // $8741 + #$8742, // $8742 + #$8743, // $8743 + #$8744, // $8744 + #$8745, // $8745 + #$8746, // $8746 + #$8747, // $8747 + #$8748, // $8748 + #$8749, // $8749 + #$874A, // $874A + #$874B, // $874B + #$874C, // $874C + #$874D, // $874D + #$874E, // $874E + #$874F, // $874F + #$8750, // $8750 + #$8751, // $8751 + #$8752, // $8752 + #$8753, // $8753 + #$8754, // $8754 + #$8755, // $8755 + #$8756, // $8756 + #$8757, // $8757 + #$8758, // $8758 + #$8759, // $8759 + #$875A, // $875A + #$875B, // $875B + #$875C, // $875C + #$875D, // $875D + #$875E, // $875E + #$875F, // $875F + #$8760, // $8760 + #$8761, // $8761 + #$8762, // $8762 + #$8763, // $8763 + #$8764, // $8764 + #$8765, // $8765 + #$8766, // $8766 + #$8767, // $8767 + #$8768, // $8768 + #$8769, // $8769 + #$876A, // $876A + #$876B, // $876B + #$876C, // $876C + #$876D, // $876D + #$876E, // $876E + #$876F, // $876F + #$8770, // $8770 + #$8771, // $8771 + #$8772, // $8772 + #$8773, // $8773 + #$8774, // $8774 + #$8775, // $8775 + #$8776, // $8776 + #$8777, // $8777 + #$8778, // $8778 + #$8779, // $8779 + #$877A, // $877A + #$877B, // $877B + #$877C, // $877C + #$877D, // $877D + #$877E, // $877E + #$877F, // $877F + #$8780, // $8780 + #$8781, // $8781 + #$8782, // $8782 + #$8783, // $8783 + #$8784, // $8784 + #$8785, // $8785 + #$8786, // $8786 + #$8787, // $8787 + #$8788, // $8788 + #$8789, // $8789 + #$878A, // $878A + #$878B, // $878B + #$878C, // $878C + #$878D, // $878D + #$878E, // $878E + #$878F, // $878F + #$8790, // $8790 + #$8791, // $8791 + #$8792, // $8792 + #$8793, // $8793 + #$8794, // $8794 + #$8795, // $8795 + #$8796, // $8796 + #$8797, // $8797 + #$8798, // $8798 + #$8799, // $8799 + #$879A, // $879A + #$879B, // $879B + #$879C, // $879C + #$879D, // $879D + #$879E, // $879E + #$879F, // $879F + #$87A0, // $87A0 + #$87A1, // $87A1 + #$87A2, // $87A2 + #$87A3, // $87A3 + #$87A4, // $87A4 + #$87A5, // $87A5 + #$87A6, // $87A6 + #$87A7, // $87A7 + #$87A8, // $87A8 + #$87A9, // $87A9 + #$87AA, // $87AA + #$87AB, // $87AB + #$87AC, // $87AC + #$87AD, // $87AD + #$87AE, // $87AE + #$87AF, // $87AF + #$87B0, // $87B0 + #$87B1, // $87B1 + #$87B2, // $87B2 + #$87B3, // $87B3 + #$87B4, // $87B4 + #$87B5, // $87B5 + #$87B6, // $87B6 + #$87B7, // $87B7 + #$87B8, // $87B8 + #$87B9, // $87B9 + #$87BA, // $87BA + #$87BB, // $87BB + #$87BC, // $87BC + #$87BD, // $87BD + #$87BE, // $87BE + #$87BF, // $87BF + #$87C0, // $87C0 + #$87C1, // $87C1 + #$87C2, // $87C2 + #$87C3, // $87C3 + #$87C4, // $87C4 + #$87C5, // $87C5 + #$87C6, // $87C6 + #$87C7, // $87C7 + #$87C8, // $87C8 + #$87C9, // $87C9 + #$87CA, // $87CA + #$87CB, // $87CB + #$87CC, // $87CC + #$87CD, // $87CD + #$87CE, // $87CE + #$87CF, // $87CF + #$87D0, // $87D0 + #$87D1, // $87D1 + #$87D2, // $87D2 + #$87D3, // $87D3 + #$87D4, // $87D4 + #$87D5, // $87D5 + #$87D6, // $87D6 + #$87D7, // $87D7 + #$87D8, // $87D8 + #$87D9, // $87D9 + #$87DA, // $87DA + #$87DB, // $87DB + #$87DC, // $87DC + #$87DD, // $87DD + #$87DE, // $87DE + #$87DF, // $87DF + #$87E0, // $87E0 + #$87E1, // $87E1 + #$87E2, // $87E2 + #$87E3, // $87E3 + #$87E4, // $87E4 + #$87E5, // $87E5 + #$87E6, // $87E6 + #$87E7, // $87E7 + #$87E8, // $87E8 + #$87E9, // $87E9 + #$87EA, // $87EA + #$87EB, // $87EB + #$87EC, // $87EC + #$87ED, // $87ED + #$87EE, // $87EE + #$87EF, // $87EF + #$87F0, // $87F0 + #$87F1, // $87F1 + #$87F2, // $87F2 + #$87F3, // $87F3 + #$87F4, // $87F4 + #$87F5, // $87F5 + #$87F6, // $87F6 + #$87F7, // $87F7 + #$87F8, // $87F8 + #$87F9, // $87F9 + #$87FA, // $87FA + #$87FB, // $87FB + #$87FC, // $87FC + #$87FD, // $87FD + #$87FE, // $87FE + #$87FF, // $87FF + #$8800, // $8800 + #$8801, // $8801 + #$8802, // $8802 + #$8803, // $8803 + #$8804, // $8804 + #$8805, // $8805 + #$8806, // $8806 + #$8807, // $8807 + #$8808, // $8808 + #$8809, // $8809 + #$880A, // $880A + #$880B, // $880B + #$880C, // $880C + #$880D, // $880D + #$880E, // $880E + #$880F, // $880F + #$8810, // $8810 + #$8811, // $8811 + #$8812, // $8812 + #$8813, // $8813 + #$8814, // $8814 + #$8815, // $8815 + #$8816, // $8816 + #$8817, // $8817 + #$8818, // $8818 + #$8819, // $8819 + #$881A, // $881A + #$881B, // $881B + #$881C, // $881C + #$881D, // $881D + #$881E, // $881E + #$881F, // $881F + #$8820, // $8820 + #$8821, // $8821 + #$8822, // $8822 + #$8823, // $8823 + #$8824, // $8824 + #$8825, // $8825 + #$8826, // $8826 + #$8827, // $8827 + #$8828, // $8828 + #$8829, // $8829 + #$882A, // $882A + #$882B, // $882B + #$882C, // $882C + #$882D, // $882D + #$882E, // $882E + #$882F, // $882F + #$8830, // $8830 + #$8831, // $8831 + #$8832, // $8832 + #$8833, // $8833 + #$8834, // $8834 + #$8835, // $8835 + #$8836, // $8836 + #$8837, // $8837 + #$8838, // $8838 + #$8839, // $8839 + #$883A, // $883A + #$883B, // $883B + #$883C, // $883C + #$883D, // $883D + #$883E, // $883E + #$883F, // $883F + #$8840, // $8840 + #$8841, // $8841 + #$8842, // $8842 + #$8843, // $8843 + #$8844, // $8844 + #$8845, // $8845 + #$8846, // $8846 + #$8847, // $8847 + #$8848, // $8848 + #$8849, // $8849 + #$884A, // $884A + #$884B, // $884B + #$884C, // $884C + #$884D, // $884D + #$884E, // $884E + #$884F, // $884F + #$8850, // $8850 + #$8851, // $8851 + #$8852, // $8852 + #$8853, // $8853 + #$8854, // $8854 + #$8855, // $8855 + #$8856, // $8856 + #$8857, // $8857 + #$8858, // $8858 + #$8859, // $8859 + #$885A, // $885A + #$885B, // $885B + #$885C, // $885C + #$885D, // $885D + #$885E, // $885E + #$885F, // $885F + #$8860, // $8860 + #$8861, // $8861 + #$8862, // $8862 + #$8863, // $8863 + #$8864, // $8864 + #$8865, // $8865 + #$8866, // $8866 + #$8867, // $8867 + #$8868, // $8868 + #$8869, // $8869 + #$886A, // $886A + #$886B, // $886B + #$886C, // $886C + #$886D, // $886D + #$886E, // $886E + #$886F, // $886F + #$8870, // $8870 + #$8871, // $8871 + #$8872, // $8872 + #$8873, // $8873 + #$8874, // $8874 + #$8875, // $8875 + #$8876, // $8876 + #$8877, // $8877 + #$8878, // $8878 + #$8879, // $8879 + #$887A, // $887A + #$887B, // $887B + #$887C, // $887C + #$887D, // $887D + #$887E, // $887E + #$887F, // $887F + #$8880, // $8880 + #$8881, // $8881 + #$8882, // $8882 + #$8883, // $8883 + #$8884, // $8884 + #$8885, // $8885 + #$8886, // $8886 + #$8887, // $8887 + #$8888, // $8888 + #$8889, // $8889 + #$888A, // $888A + #$888B, // $888B + #$888C, // $888C + #$888D, // $888D + #$888E, // $888E + #$888F, // $888F + #$8890, // $8890 + #$8891, // $8891 + #$8892, // $8892 + #$8893, // $8893 + #$8894, // $8894 + #$8895, // $8895 + #$8896, // $8896 + #$8897, // $8897 + #$8898, // $8898 + #$8899, // $8899 + #$889A, // $889A + #$889B, // $889B + #$889C, // $889C + #$889D, // $889D + #$889E, // $889E + #$889F, // $889F + #$88A0, // $88A0 + #$88A1, // $88A1 + #$88A2, // $88A2 + #$88A3, // $88A3 + #$88A4, // $88A4 + #$88A5, // $88A5 + #$88A6, // $88A6 + #$88A7, // $88A7 + #$88A8, // $88A8 + #$88A9, // $88A9 + #$88AA, // $88AA + #$88AB, // $88AB + #$88AC, // $88AC + #$88AD, // $88AD + #$88AE, // $88AE + #$88AF, // $88AF + #$88B0, // $88B0 + #$88B1, // $88B1 + #$88B2, // $88B2 + #$88B3, // $88B3 + #$88B4, // $88B4 + #$88B5, // $88B5 + #$88B6, // $88B6 + #$88B7, // $88B7 + #$88B8, // $88B8 + #$88B9, // $88B9 + #$88BA, // $88BA + #$88BB, // $88BB + #$88BC, // $88BC + #$88BD, // $88BD + #$88BE, // $88BE + #$88BF, // $88BF + #$88C0, // $88C0 + #$88C1, // $88C1 + #$88C2, // $88C2 + #$88C3, // $88C3 + #$88C4, // $88C4 + #$88C5, // $88C5 + #$88C6, // $88C6 + #$88C7, // $88C7 + #$88C8, // $88C8 + #$88C9, // $88C9 + #$88CA, // $88CA + #$88CB, // $88CB + #$88CC, // $88CC + #$88CD, // $88CD + #$88CE, // $88CE + #$88CF, // $88CF + #$88D0, // $88D0 + #$88D1, // $88D1 + #$88D2, // $88D2 + #$88D3, // $88D3 + #$88D4, // $88D4 + #$88D5, // $88D5 + #$88D6, // $88D6 + #$88D7, // $88D7 + #$88D8, // $88D8 + #$88D9, // $88D9 + #$88DA, // $88DA + #$88DB, // $88DB + #$88DC, // $88DC + #$88DD, // $88DD + #$88DE, // $88DE + #$88DF, // $88DF + #$88E0, // $88E0 + #$88E1, // $88E1 + #$88E2, // $88E2 + #$88E3, // $88E3 + #$88E4, // $88E4 + #$88E5, // $88E5 + #$88E6, // $88E6 + #$88E7, // $88E7 + #$88E8, // $88E8 + #$88E9, // $88E9 + #$88EA, // $88EA + #$88EB, // $88EB + #$88EC, // $88EC + #$88ED, // $88ED + #$88EE, // $88EE + #$88EF, // $88EF + #$88F0, // $88F0 + #$88F1, // $88F1 + #$88F2, // $88F2 + #$88F3, // $88F3 + #$88F4, // $88F4 + #$88F5, // $88F5 + #$88F6, // $88F6 + #$88F7, // $88F7 + #$88F8, // $88F8 + #$88F9, // $88F9 + #$88FA, // $88FA + #$88FB, // $88FB + #$88FC, // $88FC + #$88FD, // $88FD + #$88FE, // $88FE + #$88FF, // $88FF + #$8900, // $8900 + #$8901, // $8901 + #$8902, // $8902 + #$8903, // $8903 + #$8904, // $8904 + #$8905, // $8905 + #$8906, // $8906 + #$8907, // $8907 + #$8908, // $8908 + #$8909, // $8909 + #$890A, // $890A + #$890B, // $890B + #$890C, // $890C + #$890D, // $890D + #$890E, // $890E + #$890F, // $890F + #$8910, // $8910 + #$8911, // $8911 + #$8912, // $8912 + #$8913, // $8913 + #$8914, // $8914 + #$8915, // $8915 + #$8916, // $8916 + #$8917, // $8917 + #$8918, // $8918 + #$8919, // $8919 + #$891A, // $891A + #$891B, // $891B + #$891C, // $891C + #$891D, // $891D + #$891E, // $891E + #$891F, // $891F + #$8920, // $8920 + #$8921, // $8921 + #$8922, // $8922 + #$8923, // $8923 + #$8924, // $8924 + #$8925, // $8925 + #$8926, // $8926 + #$8927, // $8927 + #$8928, // $8928 + #$8929, // $8929 + #$892A, // $892A + #$892B, // $892B + #$892C, // $892C + #$892D, // $892D + #$892E, // $892E + #$892F, // $892F + #$8930, // $8930 + #$8931, // $8931 + #$8932, // $8932 + #$8933, // $8933 + #$8934, // $8934 + #$8935, // $8935 + #$8936, // $8936 + #$8937, // $8937 + #$8938, // $8938 + #$8939, // $8939 + #$893A, // $893A + #$893B, // $893B + #$893C, // $893C + #$893D, // $893D + #$893E, // $893E + #$893F, // $893F + #$8940, // $8940 + #$8941, // $8941 + #$8942, // $8942 + #$8943, // $8943 + #$8944, // $8944 + #$8945, // $8945 + #$8946, // $8946 + #$8947, // $8947 + #$8948, // $8948 + #$8949, // $8949 + #$894A, // $894A + #$894B, // $894B + #$894C, // $894C + #$894D, // $894D + #$894E, // $894E + #$894F, // $894F + #$8950, // $8950 + #$8951, // $8951 + #$8952, // $8952 + #$8953, // $8953 + #$8954, // $8954 + #$8955, // $8955 + #$8956, // $8956 + #$8957, // $8957 + #$8958, // $8958 + #$8959, // $8959 + #$895A, // $895A + #$895B, // $895B + #$895C, // $895C + #$895D, // $895D + #$895E, // $895E + #$895F, // $895F + #$8960, // $8960 + #$8961, // $8961 + #$8962, // $8962 + #$8963, // $8963 + #$8964, // $8964 + #$8965, // $8965 + #$8966, // $8966 + #$8967, // $8967 + #$8968, // $8968 + #$8969, // $8969 + #$896A, // $896A + #$896B, // $896B + #$896C, // $896C + #$896D, // $896D + #$896E, // $896E + #$896F, // $896F + #$8970, // $8970 + #$8971, // $8971 + #$8972, // $8972 + #$8973, // $8973 + #$8974, // $8974 + #$8975, // $8975 + #$8976, // $8976 + #$8977, // $8977 + #$8978, // $8978 + #$8979, // $8979 + #$897A, // $897A + #$897B, // $897B + #$897C, // $897C + #$897D, // $897D + #$897E, // $897E + #$897F, // $897F + #$8980, // $8980 + #$8981, // $8981 + #$8982, // $8982 + #$8983, // $8983 + #$8984, // $8984 + #$8985, // $8985 + #$8986, // $8986 + #$8987, // $8987 + #$8988, // $8988 + #$8989, // $8989 + #$898A, // $898A + #$898B, // $898B + #$898C, // $898C + #$898D, // $898D + #$898E, // $898E + #$898F, // $898F + #$8990, // $8990 + #$8991, // $8991 + #$8992, // $8992 + #$8993, // $8993 + #$8994, // $8994 + #$8995, // $8995 + #$8996, // $8996 + #$8997, // $8997 + #$8998, // $8998 + #$8999, // $8999 + #$899A, // $899A + #$899B, // $899B + #$899C, // $899C + #$899D, // $899D + #$899E, // $899E + #$899F, // $899F + #$89A0, // $89A0 + #$89A1, // $89A1 + #$89A2, // $89A2 + #$89A3, // $89A3 + #$89A4, // $89A4 + #$89A5, // $89A5 + #$89A6, // $89A6 + #$89A7, // $89A7 + #$89A8, // $89A8 + #$89A9, // $89A9 + #$89AA, // $89AA + #$89AB, // $89AB + #$89AC, // $89AC + #$89AD, // $89AD + #$89AE, // $89AE + #$89AF, // $89AF + #$89B0, // $89B0 + #$89B1, // $89B1 + #$89B2, // $89B2 + #$89B3, // $89B3 + #$89B4, // $89B4 + #$89B5, // $89B5 + #$89B6, // $89B6 + #$89B7, // $89B7 + #$89B8, // $89B8 + #$89B9, // $89B9 + #$89BA, // $89BA + #$89BB, // $89BB + #$89BC, // $89BC + #$89BD, // $89BD + #$89BE, // $89BE + #$89BF, // $89BF + #$89C0, // $89C0 + #$89C1, // $89C1 + #$89C2, // $89C2 + #$89C3, // $89C3 + #$89C4, // $89C4 + #$89C5, // $89C5 + #$89C6, // $89C6 + #$89C7, // $89C7 + #$89C8, // $89C8 + #$89C9, // $89C9 + #$89CA, // $89CA + #$89CB, // $89CB + #$89CC, // $89CC + #$89CD, // $89CD + #$89CE, // $89CE + #$89CF, // $89CF + #$89D0, // $89D0 + #$89D1, // $89D1 + #$89D2, // $89D2 + #$89D3, // $89D3 + #$89D4, // $89D4 + #$89D5, // $89D5 + #$89D6, // $89D6 + #$89D7, // $89D7 + #$89D8, // $89D8 + #$89D9, // $89D9 + #$89DA, // $89DA + #$89DB, // $89DB + #$89DC, // $89DC + #$89DD, // $89DD + #$89DE, // $89DE + #$89DF, // $89DF + #$89E0, // $89E0 + #$89E1, // $89E1 + #$89E2, // $89E2 + #$89E3, // $89E3 + #$89E4, // $89E4 + #$89E5, // $89E5 + #$89E6, // $89E6 + #$89E7, // $89E7 + #$89E8, // $89E8 + #$89E9, // $89E9 + #$89EA, // $89EA + #$89EB, // $89EB + #$89EC, // $89EC + #$89ED, // $89ED + #$89EE, // $89EE + #$89EF, // $89EF + #$89F0, // $89F0 + #$89F1, // $89F1 + #$89F2, // $89F2 + #$89F3, // $89F3 + #$89F4, // $89F4 + #$89F5, // $89F5 + #$89F6, // $89F6 + #$89F7, // $89F7 + #$89F8, // $89F8 + #$89F9, // $89F9 + #$89FA, // $89FA + #$89FB, // $89FB + #$89FC, // $89FC + #$89FD, // $89FD + #$89FE, // $89FE + #$89FF, // $89FF + #$8A00, // $8A00 + #$8A01, // $8A01 + #$8A02, // $8A02 + #$8A03, // $8A03 + #$8A04, // $8A04 + #$8A05, // $8A05 + #$8A06, // $8A06 + #$8A07, // $8A07 + #$8A08, // $8A08 + #$8A09, // $8A09 + #$8A0A, // $8A0A + #$8A0B, // $8A0B + #$8A0C, // $8A0C + #$8A0D, // $8A0D + #$8A0E, // $8A0E + #$8A0F, // $8A0F + #$8A10, // $8A10 + #$8A11, // $8A11 + #$8A12, // $8A12 + #$8A13, // $8A13 + #$8A14, // $8A14 + #$8A15, // $8A15 + #$8A16, // $8A16 + #$8A17, // $8A17 + #$8A18, // $8A18 + #$8A19, // $8A19 + #$8A1A, // $8A1A + #$8A1B, // $8A1B + #$8A1C, // $8A1C + #$8A1D, // $8A1D + #$8A1E, // $8A1E + #$8A1F, // $8A1F + #$8A20, // $8A20 + #$8A21, // $8A21 + #$8A22, // $8A22 + #$8A23, // $8A23 + #$8A24, // $8A24 + #$8A25, // $8A25 + #$8A26, // $8A26 + #$8A27, // $8A27 + #$8A28, // $8A28 + #$8A29, // $8A29 + #$8A2A, // $8A2A + #$8A2B, // $8A2B + #$8A2C, // $8A2C + #$8A2D, // $8A2D + #$8A2E, // $8A2E + #$8A2F, // $8A2F + #$8A30, // $8A30 + #$8A31, // $8A31 + #$8A32, // $8A32 + #$8A33, // $8A33 + #$8A34, // $8A34 + #$8A35, // $8A35 + #$8A36, // $8A36 + #$8A37, // $8A37 + #$8A38, // $8A38 + #$8A39, // $8A39 + #$8A3A, // $8A3A + #$8A3B, // $8A3B + #$8A3C, // $8A3C + #$8A3D, // $8A3D + #$8A3E, // $8A3E + #$8A3F, // $8A3F + #$8A40, // $8A40 + #$8A41, // $8A41 + #$8A42, // $8A42 + #$8A43, // $8A43 + #$8A44, // $8A44 + #$8A45, // $8A45 + #$8A46, // $8A46 + #$8A47, // $8A47 + #$8A48, // $8A48 + #$8A49, // $8A49 + #$8A4A, // $8A4A + #$8A4B, // $8A4B + #$8A4C, // $8A4C + #$8A4D, // $8A4D + #$8A4E, // $8A4E + #$8A4F, // $8A4F + #$8A50, // $8A50 + #$8A51, // $8A51 + #$8A52, // $8A52 + #$8A53, // $8A53 + #$8A54, // $8A54 + #$8A55, // $8A55 + #$8A56, // $8A56 + #$8A57, // $8A57 + #$8A58, // $8A58 + #$8A59, // $8A59 + #$8A5A, // $8A5A + #$8A5B, // $8A5B + #$8A5C, // $8A5C + #$8A5D, // $8A5D + #$8A5E, // $8A5E + #$8A5F, // $8A5F + #$8A60, // $8A60 + #$8A61, // $8A61 + #$8A62, // $8A62 + #$8A63, // $8A63 + #$8A64, // $8A64 + #$8A65, // $8A65 + #$8A66, // $8A66 + #$8A67, // $8A67 + #$8A68, // $8A68 + #$8A69, // $8A69 + #$8A6A, // $8A6A + #$8A6B, // $8A6B + #$8A6C, // $8A6C + #$8A6D, // $8A6D + #$8A6E, // $8A6E + #$8A6F, // $8A6F + #$8A70, // $8A70 + #$8A71, // $8A71 + #$8A72, // $8A72 + #$8A73, // $8A73 + #$8A74, // $8A74 + #$8A75, // $8A75 + #$8A76, // $8A76 + #$8A77, // $8A77 + #$8A78, // $8A78 + #$8A79, // $8A79 + #$8A7A, // $8A7A + #$8A7B, // $8A7B + #$8A7C, // $8A7C + #$8A7D, // $8A7D + #$8A7E, // $8A7E + #$8A7F, // $8A7F + #$8A80, // $8A80 + #$8A81, // $8A81 + #$8A82, // $8A82 + #$8A83, // $8A83 + #$8A84, // $8A84 + #$8A85, // $8A85 + #$8A86, // $8A86 + #$8A87, // $8A87 + #$8A88, // $8A88 + #$8A89, // $8A89 + #$8A8A, // $8A8A + #$8A8B, // $8A8B + #$8A8C, // $8A8C + #$8A8D, // $8A8D + #$8A8E, // $8A8E + #$8A8F, // $8A8F + #$8A90, // $8A90 + #$8A91, // $8A91 + #$8A92, // $8A92 + #$8A93, // $8A93 + #$8A94, // $8A94 + #$8A95, // $8A95 + #$8A96, // $8A96 + #$8A97, // $8A97 + #$8A98, // $8A98 + #$8A99, // $8A99 + #$8A9A, // $8A9A + #$8A9B, // $8A9B + #$8A9C, // $8A9C + #$8A9D, // $8A9D + #$8A9E, // $8A9E + #$8A9F, // $8A9F + #$8AA0, // $8AA0 + #$8AA1, // $8AA1 + #$8AA2, // $8AA2 + #$8AA3, // $8AA3 + #$8AA4, // $8AA4 + #$8AA5, // $8AA5 + #$8AA6, // $8AA6 + #$8AA7, // $8AA7 + #$8AA8, // $8AA8 + #$8AA9, // $8AA9 + #$8AAA, // $8AAA + #$8AAB, // $8AAB + #$8AAC, // $8AAC + #$8AAD, // $8AAD + #$8AAE, // $8AAE + #$8AAF, // $8AAF + #$8AB0, // $8AB0 + #$8AB1, // $8AB1 + #$8AB2, // $8AB2 + #$8AB3, // $8AB3 + #$8AB4, // $8AB4 + #$8AB5, // $8AB5 + #$8AB6, // $8AB6 + #$8AB7, // $8AB7 + #$8AB8, // $8AB8 + #$8AB9, // $8AB9 + #$8ABA, // $8ABA + #$8ABB, // $8ABB + #$8ABC, // $8ABC + #$8ABD, // $8ABD + #$8ABE, // $8ABE + #$8ABF, // $8ABF + #$8AC0, // $8AC0 + #$8AC1, // $8AC1 + #$8AC2, // $8AC2 + #$8AC3, // $8AC3 + #$8AC4, // $8AC4 + #$8AC5, // $8AC5 + #$8AC6, // $8AC6 + #$8AC7, // $8AC7 + #$8AC8, // $8AC8 + #$8AC9, // $8AC9 + #$8ACA, // $8ACA + #$8ACB, // $8ACB + #$8ACC, // $8ACC + #$8ACD, // $8ACD + #$8ACE, // $8ACE + #$8ACF, // $8ACF + #$8AD0, // $8AD0 + #$8AD1, // $8AD1 + #$8AD2, // $8AD2 + #$8AD3, // $8AD3 + #$8AD4, // $8AD4 + #$8AD5, // $8AD5 + #$8AD6, // $8AD6 + #$8AD7, // $8AD7 + #$8AD8, // $8AD8 + #$8AD9, // $8AD9 + #$8ADA, // $8ADA + #$8ADB, // $8ADB + #$8ADC, // $8ADC + #$8ADD, // $8ADD + #$8ADE, // $8ADE + #$8ADF, // $8ADF + #$8AE0, // $8AE0 + #$8AE1, // $8AE1 + #$8AE2, // $8AE2 + #$8AE3, // $8AE3 + #$8AE4, // $8AE4 + #$8AE5, // $8AE5 + #$8AE6, // $8AE6 + #$8AE7, // $8AE7 + #$8AE8, // $8AE8 + #$8AE9, // $8AE9 + #$8AEA, // $8AEA + #$8AEB, // $8AEB + #$8AEC, // $8AEC + #$8AED, // $8AED + #$8AEE, // $8AEE + #$8AEF, // $8AEF + #$8AF0, // $8AF0 + #$8AF1, // $8AF1 + #$8AF2, // $8AF2 + #$8AF3, // $8AF3 + #$8AF4, // $8AF4 + #$8AF5, // $8AF5 + #$8AF6, // $8AF6 + #$8AF7, // $8AF7 + #$8AF8, // $8AF8 + #$8AF9, // $8AF9 + #$8AFA, // $8AFA + #$8AFB, // $8AFB + #$8AFC, // $8AFC + #$8AFD, // $8AFD + #$8AFE, // $8AFE + #$8AFF, // $8AFF + #$8B00, // $8B00 + #$8B01, // $8B01 + #$8B02, // $8B02 + #$8B03, // $8B03 + #$8B04, // $8B04 + #$8B05, // $8B05 + #$8B06, // $8B06 + #$8B07, // $8B07 + #$8B08, // $8B08 + #$8B09, // $8B09 + #$8B0A, // $8B0A + #$8B0B, // $8B0B + #$8B0C, // $8B0C + #$8B0D, // $8B0D + #$8B0E, // $8B0E + #$8B0F, // $8B0F + #$8B10, // $8B10 + #$8B11, // $8B11 + #$8B12, // $8B12 + #$8B13, // $8B13 + #$8B14, // $8B14 + #$8B15, // $8B15 + #$8B16, // $8B16 + #$8B17, // $8B17 + #$8B18, // $8B18 + #$8B19, // $8B19 + #$8B1A, // $8B1A + #$8B1B, // $8B1B + #$8B1C, // $8B1C + #$8B1D, // $8B1D + #$8B1E, // $8B1E + #$8B1F, // $8B1F + #$8B20, // $8B20 + #$8B21, // $8B21 + #$8B22, // $8B22 + #$8B23, // $8B23 + #$8B24, // $8B24 + #$8B25, // $8B25 + #$8B26, // $8B26 + #$8B27, // $8B27 + #$8B28, // $8B28 + #$8B29, // $8B29 + #$8B2A, // $8B2A + #$8B2B, // $8B2B + #$8B2C, // $8B2C + #$8B2D, // $8B2D + #$8B2E, // $8B2E + #$8B2F, // $8B2F + #$8B30, // $8B30 + #$8B31, // $8B31 + #$8B32, // $8B32 + #$8B33, // $8B33 + #$8B34, // $8B34 + #$8B35, // $8B35 + #$8B36, // $8B36 + #$8B37, // $8B37 + #$8B38, // $8B38 + #$8B39, // $8B39 + #$8B3A, // $8B3A + #$8B3B, // $8B3B + #$8B3C, // $8B3C + #$8B3D, // $8B3D + #$8B3E, // $8B3E + #$8B3F, // $8B3F + #$8B40, // $8B40 + #$8B41, // $8B41 + #$8B42, // $8B42 + #$8B43, // $8B43 + #$8B44, // $8B44 + #$8B45, // $8B45 + #$8B46, // $8B46 + #$8B47, // $8B47 + #$8B48, // $8B48 + #$8B49, // $8B49 + #$8B4A, // $8B4A + #$8B4B, // $8B4B + #$8B4C, // $8B4C + #$8B4D, // $8B4D + #$8B4E, // $8B4E + #$8B4F, // $8B4F + #$8B50, // $8B50 + #$8B51, // $8B51 + #$8B52, // $8B52 + #$8B53, // $8B53 + #$8B54, // $8B54 + #$8B55, // $8B55 + #$8B56, // $8B56 + #$8B57, // $8B57 + #$8B58, // $8B58 + #$8B59, // $8B59 + #$8B5A, // $8B5A + #$8B5B, // $8B5B + #$8B5C, // $8B5C + #$8B5D, // $8B5D + #$8B5E, // $8B5E + #$8B5F, // $8B5F + #$8B60, // $8B60 + #$8B61, // $8B61 + #$8B62, // $8B62 + #$8B63, // $8B63 + #$8B64, // $8B64 + #$8B65, // $8B65 + #$8B66, // $8B66 + #$8B67, // $8B67 + #$8B68, // $8B68 + #$8B69, // $8B69 + #$8B6A, // $8B6A + #$8B6B, // $8B6B + #$8B6C, // $8B6C + #$8B6D, // $8B6D + #$8B6E, // $8B6E + #$8B6F, // $8B6F + #$8B70, // $8B70 + #$8B71, // $8B71 + #$8B72, // $8B72 + #$8B73, // $8B73 + #$8B74, // $8B74 + #$8B75, // $8B75 + #$8B76, // $8B76 + #$8B77, // $8B77 + #$8B78, // $8B78 + #$8B79, // $8B79 + #$8B7A, // $8B7A + #$8B7B, // $8B7B + #$8B7C, // $8B7C + #$8B7D, // $8B7D + #$8B7E, // $8B7E + #$8B7F, // $8B7F + #$8B80, // $8B80 + #$8B81, // $8B81 + #$8B82, // $8B82 + #$8B83, // $8B83 + #$8B84, // $8B84 + #$8B85, // $8B85 + #$8B86, // $8B86 + #$8B87, // $8B87 + #$8B88, // $8B88 + #$8B89, // $8B89 + #$8B8A, // $8B8A + #$8B8B, // $8B8B + #$8B8C, // $8B8C + #$8B8D, // $8B8D + #$8B8E, // $8B8E + #$8B8F, // $8B8F + #$8B90, // $8B90 + #$8B91, // $8B91 + #$8B92, // $8B92 + #$8B93, // $8B93 + #$8B94, // $8B94 + #$8B95, // $8B95 + #$8B96, // $8B96 + #$8B97, // $8B97 + #$8B98, // $8B98 + #$8B99, // $8B99 + #$8B9A, // $8B9A + #$8B9B, // $8B9B + #$8B9C, // $8B9C + #$8B9D, // $8B9D + #$8B9E, // $8B9E + #$8B9F, // $8B9F + #$8BA0, // $8BA0 + #$8BA1, // $8BA1 + #$8BA2, // $8BA2 + #$8BA3, // $8BA3 + #$8BA4, // $8BA4 + #$8BA5, // $8BA5 + #$8BA6, // $8BA6 + #$8BA7, // $8BA7 + #$8BA8, // $8BA8 + #$8BA9, // $8BA9 + #$8BAA, // $8BAA + #$8BAB, // $8BAB + #$8BAC, // $8BAC + #$8BAD, // $8BAD + #$8BAE, // $8BAE + #$8BAF, // $8BAF + #$8BB0, // $8BB0 + #$8BB1, // $8BB1 + #$8BB2, // $8BB2 + #$8BB3, // $8BB3 + #$8BB4, // $8BB4 + #$8BB5, // $8BB5 + #$8BB6, // $8BB6 + #$8BB7, // $8BB7 + #$8BB8, // $8BB8 + #$8BB9, // $8BB9 + #$8BBA, // $8BBA + #$8BBB, // $8BBB + #$8BBC, // $8BBC + #$8BBD, // $8BBD + #$8BBE, // $8BBE + #$8BBF, // $8BBF + #$8BC0, // $8BC0 + #$8BC1, // $8BC1 + #$8BC2, // $8BC2 + #$8BC3, // $8BC3 + #$8BC4, // $8BC4 + #$8BC5, // $8BC5 + #$8BC6, // $8BC6 + #$8BC7, // $8BC7 + #$8BC8, // $8BC8 + #$8BC9, // $8BC9 + #$8BCA, // $8BCA + #$8BCB, // $8BCB + #$8BCC, // $8BCC + #$8BCD, // $8BCD + #$8BCE, // $8BCE + #$8BCF, // $8BCF + #$8BD0, // $8BD0 + #$8BD1, // $8BD1 + #$8BD2, // $8BD2 + #$8BD3, // $8BD3 + #$8BD4, // $8BD4 + #$8BD5, // $8BD5 + #$8BD6, // $8BD6 + #$8BD7, // $8BD7 + #$8BD8, // $8BD8 + #$8BD9, // $8BD9 + #$8BDA, // $8BDA + #$8BDB, // $8BDB + #$8BDC, // $8BDC + #$8BDD, // $8BDD + #$8BDE, // $8BDE + #$8BDF, // $8BDF + #$8BE0, // $8BE0 + #$8BE1, // $8BE1 + #$8BE2, // $8BE2 + #$8BE3, // $8BE3 + #$8BE4, // $8BE4 + #$8BE5, // $8BE5 + #$8BE6, // $8BE6 + #$8BE7, // $8BE7 + #$8BE8, // $8BE8 + #$8BE9, // $8BE9 + #$8BEA, // $8BEA + #$8BEB, // $8BEB + #$8BEC, // $8BEC + #$8BED, // $8BED + #$8BEE, // $8BEE + #$8BEF, // $8BEF + #$8BF0, // $8BF0 + #$8BF1, // $8BF1 + #$8BF2, // $8BF2 + #$8BF3, // $8BF3 + #$8BF4, // $8BF4 + #$8BF5, // $8BF5 + #$8BF6, // $8BF6 + #$8BF7, // $8BF7 + #$8BF8, // $8BF8 + #$8BF9, // $8BF9 + #$8BFA, // $8BFA + #$8BFB, // $8BFB + #$8BFC, // $8BFC + #$8BFD, // $8BFD + #$8BFE, // $8BFE + #$8BFF, // $8BFF + #$8C00, // $8C00 + #$8C01, // $8C01 + #$8C02, // $8C02 + #$8C03, // $8C03 + #$8C04, // $8C04 + #$8C05, // $8C05 + #$8C06, // $8C06 + #$8C07, // $8C07 + #$8C08, // $8C08 + #$8C09, // $8C09 + #$8C0A, // $8C0A + #$8C0B, // $8C0B + #$8C0C, // $8C0C + #$8C0D, // $8C0D + #$8C0E, // $8C0E + #$8C0F, // $8C0F + #$8C10, // $8C10 + #$8C11, // $8C11 + #$8C12, // $8C12 + #$8C13, // $8C13 + #$8C14, // $8C14 + #$8C15, // $8C15 + #$8C16, // $8C16 + #$8C17, // $8C17 + #$8C18, // $8C18 + #$8C19, // $8C19 + #$8C1A, // $8C1A + #$8C1B, // $8C1B + #$8C1C, // $8C1C + #$8C1D, // $8C1D + #$8C1E, // $8C1E + #$8C1F, // $8C1F + #$8C20, // $8C20 + #$8C21, // $8C21 + #$8C22, // $8C22 + #$8C23, // $8C23 + #$8C24, // $8C24 + #$8C25, // $8C25 + #$8C26, // $8C26 + #$8C27, // $8C27 + #$8C28, // $8C28 + #$8C29, // $8C29 + #$8C2A, // $8C2A + #$8C2B, // $8C2B + #$8C2C, // $8C2C + #$8C2D, // $8C2D + #$8C2E, // $8C2E + #$8C2F, // $8C2F + #$8C30, // $8C30 + #$8C31, // $8C31 + #$8C32, // $8C32 + #$8C33, // $8C33 + #$8C34, // $8C34 + #$8C35, // $8C35 + #$8C36, // $8C36 + #$8C37, // $8C37 + #$8C38, // $8C38 + #$8C39, // $8C39 + #$8C3A, // $8C3A + #$8C3B, // $8C3B + #$8C3C, // $8C3C + #$8C3D, // $8C3D + #$8C3E, // $8C3E + #$8C3F, // $8C3F + #$8C40, // $8C40 + #$8C41, // $8C41 + #$8C42, // $8C42 + #$8C43, // $8C43 + #$8C44, // $8C44 + #$8C45, // $8C45 + #$8C46, // $8C46 + #$8C47, // $8C47 + #$8C48, // $8C48 + #$8C49, // $8C49 + #$8C4A, // $8C4A + #$8C4B, // $8C4B + #$8C4C, // $8C4C + #$8C4D, // $8C4D + #$8C4E, // $8C4E + #$8C4F, // $8C4F + #$8C50, // $8C50 + #$8C51, // $8C51 + #$8C52, // $8C52 + #$8C53, // $8C53 + #$8C54, // $8C54 + #$8C55, // $8C55 + #$8C56, // $8C56 + #$8C57, // $8C57 + #$8C58, // $8C58 + #$8C59, // $8C59 + #$8C5A, // $8C5A + #$8C5B, // $8C5B + #$8C5C, // $8C5C + #$8C5D, // $8C5D + #$8C5E, // $8C5E + #$8C5F, // $8C5F + #$8C60, // $8C60 + #$8C61, // $8C61 + #$8C62, // $8C62 + #$8C63, // $8C63 + #$8C64, // $8C64 + #$8C65, // $8C65 + #$8C66, // $8C66 + #$8C67, // $8C67 + #$8C68, // $8C68 + #$8C69, // $8C69 + #$8C6A, // $8C6A + #$8C6B, // $8C6B + #$8C6C, // $8C6C + #$8C6D, // $8C6D + #$8C6E, // $8C6E + #$8C6F, // $8C6F + #$8C70, // $8C70 + #$8C71, // $8C71 + #$8C72, // $8C72 + #$8C73, // $8C73 + #$8C74, // $8C74 + #$8C75, // $8C75 + #$8C76, // $8C76 + #$8C77, // $8C77 + #$8C78, // $8C78 + #$8C79, // $8C79 + #$8C7A, // $8C7A + #$8C7B, // $8C7B + #$8C7C, // $8C7C + #$8C7D, // $8C7D + #$8C7E, // $8C7E + #$8C7F, // $8C7F + #$8C80, // $8C80 + #$8C81, // $8C81 + #$8C82, // $8C82 + #$8C83, // $8C83 + #$8C84, // $8C84 + #$8C85, // $8C85 + #$8C86, // $8C86 + #$8C87, // $8C87 + #$8C88, // $8C88 + #$8C89, // $8C89 + #$8C8A, // $8C8A + #$8C8B, // $8C8B + #$8C8C, // $8C8C + #$8C8D, // $8C8D + #$8C8E, // $8C8E + #$8C8F, // $8C8F + #$8C90, // $8C90 + #$8C91, // $8C91 + #$8C92, // $8C92 + #$8C93, // $8C93 + #$8C94, // $8C94 + #$8C95, // $8C95 + #$8C96, // $8C96 + #$8C97, // $8C97 + #$8C98, // $8C98 + #$8C99, // $8C99 + #$8C9A, // $8C9A + #$8C9B, // $8C9B + #$8C9C, // $8C9C + #$8C9D, // $8C9D + #$8C9E, // $8C9E + #$8C9F, // $8C9F + #$8CA0, // $8CA0 + #$8CA1, // $8CA1 + #$8CA2, // $8CA2 + #$8CA3, // $8CA3 + #$8CA4, // $8CA4 + #$8CA5, // $8CA5 + #$8CA6, // $8CA6 + #$8CA7, // $8CA7 + #$8CA8, // $8CA8 + #$8CA9, // $8CA9 + #$8CAA, // $8CAA + #$8CAB, // $8CAB + #$8CAC, // $8CAC + #$8CAD, // $8CAD + #$8CAE, // $8CAE + #$8CAF, // $8CAF + #$8CB0, // $8CB0 + #$8CB1, // $8CB1 + #$8CB2, // $8CB2 + #$8CB3, // $8CB3 + #$8CB4, // $8CB4 + #$8CB5, // $8CB5 + #$8CB6, // $8CB6 + #$8CB7, // $8CB7 + #$8CB8, // $8CB8 + #$8CB9, // $8CB9 + #$8CBA, // $8CBA + #$8CBB, // $8CBB + #$8CBC, // $8CBC + #$8CBD, // $8CBD + #$8CBE, // $8CBE + #$8CBF, // $8CBF + #$8CC0, // $8CC0 + #$8CC1, // $8CC1 + #$8CC2, // $8CC2 + #$8CC3, // $8CC3 + #$8CC4, // $8CC4 + #$8CC5, // $8CC5 + #$8CC6, // $8CC6 + #$8CC7, // $8CC7 + #$8CC8, // $8CC8 + #$8CC9, // $8CC9 + #$8CCA, // $8CCA + #$8CCB, // $8CCB + #$8CCC, // $8CCC + #$8CCD, // $8CCD + #$8CCE, // $8CCE + #$8CCF, // $8CCF + #$8CD0, // $8CD0 + #$8CD1, // $8CD1 + #$8CD2, // $8CD2 + #$8CD3, // $8CD3 + #$8CD4, // $8CD4 + #$8CD5, // $8CD5 + #$8CD6, // $8CD6 + #$8CD7, // $8CD7 + #$8CD8, // $8CD8 + #$8CD9, // $8CD9 + #$8CDA, // $8CDA + #$8CDB, // $8CDB + #$8CDC, // $8CDC + #$8CDD, // $8CDD + #$8CDE, // $8CDE + #$8CDF, // $8CDF + #$8CE0, // $8CE0 + #$8CE1, // $8CE1 + #$8CE2, // $8CE2 + #$8CE3, // $8CE3 + #$8CE4, // $8CE4 + #$8CE5, // $8CE5 + #$8CE6, // $8CE6 + #$8CE7, // $8CE7 + #$8CE8, // $8CE8 + #$8CE9, // $8CE9 + #$8CEA, // $8CEA + #$8CEB, // $8CEB + #$8CEC, // $8CEC + #$8CED, // $8CED + #$8CEE, // $8CEE + #$8CEF, // $8CEF + #$8CF0, // $8CF0 + #$8CF1, // $8CF1 + #$8CF2, // $8CF2 + #$8CF3, // $8CF3 + #$8CF4, // $8CF4 + #$8CF5, // $8CF5 + #$8CF6, // $8CF6 + #$8CF7, // $8CF7 + #$8CF8, // $8CF8 + #$8CF9, // $8CF9 + #$8CFA, // $8CFA + #$8CFB, // $8CFB + #$8CFC, // $8CFC + #$8CFD, // $8CFD + #$8CFE, // $8CFE + #$8CFF, // $8CFF + #$8D00, // $8D00 + #$8D01, // $8D01 + #$8D02, // $8D02 + #$8D03, // $8D03 + #$8D04, // $8D04 + #$8D05, // $8D05 + #$8D06, // $8D06 + #$8D07, // $8D07 + #$8D08, // $8D08 + #$8D09, // $8D09 + #$8D0A, // $8D0A + #$8D0B, // $8D0B + #$8D0C, // $8D0C + #$8D0D, // $8D0D + #$8D0E, // $8D0E + #$8D0F, // $8D0F + #$8D10, // $8D10 + #$8D11, // $8D11 + #$8D12, // $8D12 + #$8D13, // $8D13 + #$8D14, // $8D14 + #$8D15, // $8D15 + #$8D16, // $8D16 + #$8D17, // $8D17 + #$8D18, // $8D18 + #$8D19, // $8D19 + #$8D1A, // $8D1A + #$8D1B, // $8D1B + #$8D1C, // $8D1C + #$8D1D, // $8D1D + #$8D1E, // $8D1E + #$8D1F, // $8D1F + #$8D20, // $8D20 + #$8D21, // $8D21 + #$8D22, // $8D22 + #$8D23, // $8D23 + #$8D24, // $8D24 + #$8D25, // $8D25 + #$8D26, // $8D26 + #$8D27, // $8D27 + #$8D28, // $8D28 + #$8D29, // $8D29 + #$8D2A, // $8D2A + #$8D2B, // $8D2B + #$8D2C, // $8D2C + #$8D2D, // $8D2D + #$8D2E, // $8D2E + #$8D2F, // $8D2F + #$8D30, // $8D30 + #$8D31, // $8D31 + #$8D32, // $8D32 + #$8D33, // $8D33 + #$8D34, // $8D34 + #$8D35, // $8D35 + #$8D36, // $8D36 + #$8D37, // $8D37 + #$8D38, // $8D38 + #$8D39, // $8D39 + #$8D3A, // $8D3A + #$8D3B, // $8D3B + #$8D3C, // $8D3C + #$8D3D, // $8D3D + #$8D3E, // $8D3E + #$8D3F, // $8D3F + #$8D40, // $8D40 + #$8D41, // $8D41 + #$8D42, // $8D42 + #$8D43, // $8D43 + #$8D44, // $8D44 + #$8D45, // $8D45 + #$8D46, // $8D46 + #$8D47, // $8D47 + #$8D48, // $8D48 + #$8D49, // $8D49 + #$8D4A, // $8D4A + #$8D4B, // $8D4B + #$8D4C, // $8D4C + #$8D4D, // $8D4D + #$8D4E, // $8D4E + #$8D4F, // $8D4F + #$8D50, // $8D50 + #$8D51, // $8D51 + #$8D52, // $8D52 + #$8D53, // $8D53 + #$8D54, // $8D54 + #$8D55, // $8D55 + #$8D56, // $8D56 + #$8D57, // $8D57 + #$8D58, // $8D58 + #$8D59, // $8D59 + #$8D5A, // $8D5A + #$8D5B, // $8D5B + #$8D5C, // $8D5C + #$8D5D, // $8D5D + #$8D5E, // $8D5E + #$8D5F, // $8D5F + #$8D60, // $8D60 + #$8D61, // $8D61 + #$8D62, // $8D62 + #$8D63, // $8D63 + #$8D64, // $8D64 + #$8D65, // $8D65 + #$8D66, // $8D66 + #$8D67, // $8D67 + #$8D68, // $8D68 + #$8D69, // $8D69 + #$8D6A, // $8D6A + #$8D6B, // $8D6B + #$8D6C, // $8D6C + #$8D6D, // $8D6D + #$8D6E, // $8D6E + #$8D6F, // $8D6F + #$8D70, // $8D70 + #$8D71, // $8D71 + #$8D72, // $8D72 + #$8D73, // $8D73 + #$8D74, // $8D74 + #$8D75, // $8D75 + #$8D76, // $8D76 + #$8D77, // $8D77 + #$8D78, // $8D78 + #$8D79, // $8D79 + #$8D7A, // $8D7A + #$8D7B, // $8D7B + #$8D7C, // $8D7C + #$8D7D, // $8D7D + #$8D7E, // $8D7E + #$8D7F, // $8D7F + #$8D80, // $8D80 + #$8D81, // $8D81 + #$8D82, // $8D82 + #$8D83, // $8D83 + #$8D84, // $8D84 + #$8D85, // $8D85 + #$8D86, // $8D86 + #$8D87, // $8D87 + #$8D88, // $8D88 + #$8D89, // $8D89 + #$8D8A, // $8D8A + #$8D8B, // $8D8B + #$8D8C, // $8D8C + #$8D8D, // $8D8D + #$8D8E, // $8D8E + #$8D8F, // $8D8F + #$8D90, // $8D90 + #$8D91, // $8D91 + #$8D92, // $8D92 + #$8D93, // $8D93 + #$8D94, // $8D94 + #$8D95, // $8D95 + #$8D96, // $8D96 + #$8D97, // $8D97 + #$8D98, // $8D98 + #$8D99, // $8D99 + #$8D9A, // $8D9A + #$8D9B, // $8D9B + #$8D9C, // $8D9C + #$8D9D, // $8D9D + #$8D9E, // $8D9E + #$8D9F, // $8D9F + #$8DA0, // $8DA0 + #$8DA1, // $8DA1 + #$8DA2, // $8DA2 + #$8DA3, // $8DA3 + #$8DA4, // $8DA4 + #$8DA5, // $8DA5 + #$8DA6, // $8DA6 + #$8DA7, // $8DA7 + #$8DA8, // $8DA8 + #$8DA9, // $8DA9 + #$8DAA, // $8DAA + #$8DAB, // $8DAB + #$8DAC, // $8DAC + #$8DAD, // $8DAD + #$8DAE, // $8DAE + #$8DAF, // $8DAF + #$8DB0, // $8DB0 + #$8DB1, // $8DB1 + #$8DB2, // $8DB2 + #$8DB3, // $8DB3 + #$8DB4, // $8DB4 + #$8DB5, // $8DB5 + #$8DB6, // $8DB6 + #$8DB7, // $8DB7 + #$8DB8, // $8DB8 + #$8DB9, // $8DB9 + #$8DBA, // $8DBA + #$8DBB, // $8DBB + #$8DBC, // $8DBC + #$8DBD, // $8DBD + #$8DBE, // $8DBE + #$8DBF, // $8DBF + #$8DC0, // $8DC0 + #$8DC1, // $8DC1 + #$8DC2, // $8DC2 + #$8DC3, // $8DC3 + #$8DC4, // $8DC4 + #$8DC5, // $8DC5 + #$8DC6, // $8DC6 + #$8DC7, // $8DC7 + #$8DC8, // $8DC8 + #$8DC9, // $8DC9 + #$8DCA, // $8DCA + #$8DCB, // $8DCB + #$8DCC, // $8DCC + #$8DCD, // $8DCD + #$8DCE, // $8DCE + #$8DCF, // $8DCF + #$8DD0, // $8DD0 + #$8DD1, // $8DD1 + #$8DD2, // $8DD2 + #$8DD3, // $8DD3 + #$8DD4, // $8DD4 + #$8DD5, // $8DD5 + #$8DD6, // $8DD6 + #$8DD7, // $8DD7 + #$8DD8, // $8DD8 + #$8DD9, // $8DD9 + #$8DDA, // $8DDA + #$8DDB, // $8DDB + #$8DDC, // $8DDC + #$8DDD, // $8DDD + #$8DDE, // $8DDE + #$8DDF, // $8DDF + #$8DE0, // $8DE0 + #$8DE1, // $8DE1 + #$8DE2, // $8DE2 + #$8DE3, // $8DE3 + #$8DE4, // $8DE4 + #$8DE5, // $8DE5 + #$8DE6, // $8DE6 + #$8DE7, // $8DE7 + #$8DE8, // $8DE8 + #$8DE9, // $8DE9 + #$8DEA, // $8DEA + #$8DEB, // $8DEB + #$8DEC, // $8DEC + #$8DED, // $8DED + #$8DEE, // $8DEE + #$8DEF, // $8DEF + #$8DF0, // $8DF0 + #$8DF1, // $8DF1 + #$8DF2, // $8DF2 + #$8DF3, // $8DF3 + #$8DF4, // $8DF4 + #$8DF5, // $8DF5 + #$8DF6, // $8DF6 + #$8DF7, // $8DF7 + #$8DF8, // $8DF8 + #$8DF9, // $8DF9 + #$8DFA, // $8DFA + #$8DFB, // $8DFB + #$8DFC, // $8DFC + #$8DFD, // $8DFD + #$8DFE, // $8DFE + #$8DFF, // $8DFF + #$8E00, // $8E00 + #$8E01, // $8E01 + #$8E02, // $8E02 + #$8E03, // $8E03 + #$8E04, // $8E04 + #$8E05, // $8E05 + #$8E06, // $8E06 + #$8E07, // $8E07 + #$8E08, // $8E08 + #$8E09, // $8E09 + #$8E0A, // $8E0A + #$8E0B, // $8E0B + #$8E0C, // $8E0C + #$8E0D, // $8E0D + #$8E0E, // $8E0E + #$8E0F, // $8E0F + #$8E10, // $8E10 + #$8E11, // $8E11 + #$8E12, // $8E12 + #$8E13, // $8E13 + #$8E14, // $8E14 + #$8E15, // $8E15 + #$8E16, // $8E16 + #$8E17, // $8E17 + #$8E18, // $8E18 + #$8E19, // $8E19 + #$8E1A, // $8E1A + #$8E1B, // $8E1B + #$8E1C, // $8E1C + #$8E1D, // $8E1D + #$8E1E, // $8E1E + #$8E1F, // $8E1F + #$8E20, // $8E20 + #$8E21, // $8E21 + #$8E22, // $8E22 + #$8E23, // $8E23 + #$8E24, // $8E24 + #$8E25, // $8E25 + #$8E26, // $8E26 + #$8E27, // $8E27 + #$8E28, // $8E28 + #$8E29, // $8E29 + #$8E2A, // $8E2A + #$8E2B, // $8E2B + #$8E2C, // $8E2C + #$8E2D, // $8E2D + #$8E2E, // $8E2E + #$8E2F, // $8E2F + #$8E30, // $8E30 + #$8E31, // $8E31 + #$8E32, // $8E32 + #$8E33, // $8E33 + #$8E34, // $8E34 + #$8E35, // $8E35 + #$8E36, // $8E36 + #$8E37, // $8E37 + #$8E38, // $8E38 + #$8E39, // $8E39 + #$8E3A, // $8E3A + #$8E3B, // $8E3B + #$8E3C, // $8E3C + #$8E3D, // $8E3D + #$8E3E, // $8E3E + #$8E3F, // $8E3F + #$8E40, // $8E40 + #$8E41, // $8E41 + #$8E42, // $8E42 + #$8E43, // $8E43 + #$8E44, // $8E44 + #$8E45, // $8E45 + #$8E46, // $8E46 + #$8E47, // $8E47 + #$8E48, // $8E48 + #$8E49, // $8E49 + #$8E4A, // $8E4A + #$8E4B, // $8E4B + #$8E4C, // $8E4C + #$8E4D, // $8E4D + #$8E4E, // $8E4E + #$8E4F, // $8E4F + #$8E50, // $8E50 + #$8E51, // $8E51 + #$8E52, // $8E52 + #$8E53, // $8E53 + #$8E54, // $8E54 + #$8E55, // $8E55 + #$8E56, // $8E56 + #$8E57, // $8E57 + #$8E58, // $8E58 + #$8E59, // $8E59 + #$8E5A, // $8E5A + #$8E5B, // $8E5B + #$8E5C, // $8E5C + #$8E5D, // $8E5D + #$8E5E, // $8E5E + #$8E5F, // $8E5F + #$8E60, // $8E60 + #$8E61, // $8E61 + #$8E62, // $8E62 + #$8E63, // $8E63 + #$8E64, // $8E64 + #$8E65, // $8E65 + #$8E66, // $8E66 + #$8E67, // $8E67 + #$8E68, // $8E68 + #$8E69, // $8E69 + #$8E6A, // $8E6A + #$8E6B, // $8E6B + #$8E6C, // $8E6C + #$8E6D, // $8E6D + #$8E6E, // $8E6E + #$8E6F, // $8E6F + #$8E70, // $8E70 + #$8E71, // $8E71 + #$8E72, // $8E72 + #$8E73, // $8E73 + #$8E74, // $8E74 + #$8E75, // $8E75 + #$8E76, // $8E76 + #$8E77, // $8E77 + #$8E78, // $8E78 + #$8E79, // $8E79 + #$8E7A, // $8E7A + #$8E7B, // $8E7B + #$8E7C, // $8E7C + #$8E7D, // $8E7D + #$8E7E, // $8E7E + #$8E7F, // $8E7F + #$8E80, // $8E80 + #$8E81, // $8E81 + #$8E82, // $8E82 + #$8E83, // $8E83 + #$8E84, // $8E84 + #$8E85, // $8E85 + #$8E86, // $8E86 + #$8E87, // $8E87 + #$8E88, // $8E88 + #$8E89, // $8E89 + #$8E8A, // $8E8A + #$8E8B, // $8E8B + #$8E8C, // $8E8C + #$8E8D, // $8E8D + #$8E8E, // $8E8E + #$8E8F, // $8E8F + #$8E90, // $8E90 + #$8E91, // $8E91 + #$8E92, // $8E92 + #$8E93, // $8E93 + #$8E94, // $8E94 + #$8E95, // $8E95 + #$8E96, // $8E96 + #$8E97, // $8E97 + #$8E98, // $8E98 + #$8E99, // $8E99 + #$8E9A, // $8E9A + #$8E9B, // $8E9B + #$8E9C, // $8E9C + #$8E9D, // $8E9D + #$8E9E, // $8E9E + #$8E9F, // $8E9F + #$8EA0, // $8EA0 + #$8EA1, // $8EA1 + #$8EA2, // $8EA2 + #$8EA3, // $8EA3 + #$8EA4, // $8EA4 + #$8EA5, // $8EA5 + #$8EA6, // $8EA6 + #$8EA7, // $8EA7 + #$8EA8, // $8EA8 + #$8EA9, // $8EA9 + #$8EAA, // $8EAA + #$8EAB, // $8EAB + #$8EAC, // $8EAC + #$8EAD, // $8EAD + #$8EAE, // $8EAE + #$8EAF, // $8EAF + #$8EB0, // $8EB0 + #$8EB1, // $8EB1 + #$8EB2, // $8EB2 + #$8EB3, // $8EB3 + #$8EB4, // $8EB4 + #$8EB5, // $8EB5 + #$8EB6, // $8EB6 + #$8EB7, // $8EB7 + #$8EB8, // $8EB8 + #$8EB9, // $8EB9 + #$8EBA, // $8EBA + #$8EBB, // $8EBB + #$8EBC, // $8EBC + #$8EBD, // $8EBD + #$8EBE, // $8EBE + #$8EBF, // $8EBF + #$8EC0, // $8EC0 + #$8EC1, // $8EC1 + #$8EC2, // $8EC2 + #$8EC3, // $8EC3 + #$8EC4, // $8EC4 + #$8EC5, // $8EC5 + #$8EC6, // $8EC6 + #$8EC7, // $8EC7 + #$8EC8, // $8EC8 + #$8EC9, // $8EC9 + #$8ECA, // $8ECA + #$8ECB, // $8ECB + #$8ECC, // $8ECC + #$8ECD, // $8ECD + #$8ECE, // $8ECE + #$8ECF, // $8ECF + #$8ED0, // $8ED0 + #$8ED1, // $8ED1 + #$8ED2, // $8ED2 + #$8ED3, // $8ED3 + #$8ED4, // $8ED4 + #$8ED5, // $8ED5 + #$8ED6, // $8ED6 + #$8ED7, // $8ED7 + #$8ED8, // $8ED8 + #$8ED9, // $8ED9 + #$8EDA, // $8EDA + #$8EDB, // $8EDB + #$8EDC, // $8EDC + #$8EDD, // $8EDD + #$8EDE, // $8EDE + #$8EDF, // $8EDF + #$8EE0, // $8EE0 + #$8EE1, // $8EE1 + #$8EE2, // $8EE2 + #$8EE3, // $8EE3 + #$8EE4, // $8EE4 + #$8EE5, // $8EE5 + #$8EE6, // $8EE6 + #$8EE7, // $8EE7 + #$8EE8, // $8EE8 + #$8EE9, // $8EE9 + #$8EEA, // $8EEA + #$8EEB, // $8EEB + #$8EEC, // $8EEC + #$8EED, // $8EED + #$8EEE, // $8EEE + #$8EEF, // $8EEF + #$8EF0, // $8EF0 + #$8EF1, // $8EF1 + #$8EF2, // $8EF2 + #$8EF3, // $8EF3 + #$8EF4, // $8EF4 + #$8EF5, // $8EF5 + #$8EF6, // $8EF6 + #$8EF7, // $8EF7 + #$8EF8, // $8EF8 + #$8EF9, // $8EF9 + #$8EFA, // $8EFA + #$8EFB, // $8EFB + #$8EFC, // $8EFC + #$8EFD, // $8EFD + #$8EFE, // $8EFE + #$8EFF, // $8EFF + #$8F00, // $8F00 + #$8F01, // $8F01 + #$8F02, // $8F02 + #$8F03, // $8F03 + #$8F04, // $8F04 + #$8F05, // $8F05 + #$8F06, // $8F06 + #$8F07, // $8F07 + #$8F08, // $8F08 + #$8F09, // $8F09 + #$8F0A, // $8F0A + #$8F0B, // $8F0B + #$8F0C, // $8F0C + #$8F0D, // $8F0D + #$8F0E, // $8F0E + #$8F0F, // $8F0F + #$8F10, // $8F10 + #$8F11, // $8F11 + #$8F12, // $8F12 + #$8F13, // $8F13 + #$8F14, // $8F14 + #$8F15, // $8F15 + #$8F16, // $8F16 + #$8F17, // $8F17 + #$8F18, // $8F18 + #$8F19, // $8F19 + #$8F1A, // $8F1A + #$8F1B, // $8F1B + #$8F1C, // $8F1C + #$8F1D, // $8F1D + #$8F1E, // $8F1E + #$8F1F, // $8F1F + #$8F20, // $8F20 + #$8F21, // $8F21 + #$8F22, // $8F22 + #$8F23, // $8F23 + #$8F24, // $8F24 + #$8F25, // $8F25 + #$8F26, // $8F26 + #$8F27, // $8F27 + #$8F28, // $8F28 + #$8F29, // $8F29 + #$8F2A, // $8F2A + #$8F2B, // $8F2B + #$8F2C, // $8F2C + #$8F2D, // $8F2D + #$8F2E, // $8F2E + #$8F2F, // $8F2F + #$8F30, // $8F30 + #$8F31, // $8F31 + #$8F32, // $8F32 + #$8F33, // $8F33 + #$8F34, // $8F34 + #$8F35, // $8F35 + #$8F36, // $8F36 + #$8F37, // $8F37 + #$8F38, // $8F38 + #$8F39, // $8F39 + #$8F3A, // $8F3A + #$8F3B, // $8F3B + #$8F3C, // $8F3C + #$8F3D, // $8F3D + #$8F3E, // $8F3E + #$8F3F, // $8F3F + #$8F40, // $8F40 + #$8F41, // $8F41 + #$8F42, // $8F42 + #$8F43, // $8F43 + #$8F44, // $8F44 + #$8F45, // $8F45 + #$8F46, // $8F46 + #$8F47, // $8F47 + #$8F48, // $8F48 + #$8F49, // $8F49 + #$8F4A, // $8F4A + #$8F4B, // $8F4B + #$8F4C, // $8F4C + #$8F4D, // $8F4D + #$8F4E, // $8F4E + #$8F4F, // $8F4F + #$8F50, // $8F50 + #$8F51, // $8F51 + #$8F52, // $8F52 + #$8F53, // $8F53 + #$8F54, // $8F54 + #$8F55, // $8F55 + #$8F56, // $8F56 + #$8F57, // $8F57 + #$8F58, // $8F58 + #$8F59, // $8F59 + #$8F5A, // $8F5A + #$8F5B, // $8F5B + #$8F5C, // $8F5C + #$8F5D, // $8F5D + #$8F5E, // $8F5E + #$8F5F, // $8F5F + #$8F60, // $8F60 + #$8F61, // $8F61 + #$8F62, // $8F62 + #$8F63, // $8F63 + #$8F64, // $8F64 + #$8F65, // $8F65 + #$8F66, // $8F66 + #$8F67, // $8F67 + #$8F68, // $8F68 + #$8F69, // $8F69 + #$8F6A, // $8F6A + #$8F6B, // $8F6B + #$8F6C, // $8F6C + #$8F6D, // $8F6D + #$8F6E, // $8F6E + #$8F6F, // $8F6F + #$8F70, // $8F70 + #$8F71, // $8F71 + #$8F72, // $8F72 + #$8F73, // $8F73 + #$8F74, // $8F74 + #$8F75, // $8F75 + #$8F76, // $8F76 + #$8F77, // $8F77 + #$8F78, // $8F78 + #$8F79, // $8F79 + #$8F7A, // $8F7A + #$8F7B, // $8F7B + #$8F7C, // $8F7C + #$8F7D, // $8F7D + #$8F7E, // $8F7E + #$8F7F, // $8F7F + #$8F80, // $8F80 + #$8F81, // $8F81 + #$8F82, // $8F82 + #$8F83, // $8F83 + #$8F84, // $8F84 + #$8F85, // $8F85 + #$8F86, // $8F86 + #$8F87, // $8F87 + #$8F88, // $8F88 + #$8F89, // $8F89 + #$8F8A, // $8F8A + #$8F8B, // $8F8B + #$8F8C, // $8F8C + #$8F8D, // $8F8D + #$8F8E, // $8F8E + #$8F8F, // $8F8F + #$8F90, // $8F90 + #$8F91, // $8F91 + #$8F92, // $8F92 + #$8F93, // $8F93 + #$8F94, // $8F94 + #$8F95, // $8F95 + #$8F96, // $8F96 + #$8F97, // $8F97 + #$8F98, // $8F98 + #$8F99, // $8F99 + #$8F9A, // $8F9A + #$8F9B, // $8F9B + #$8F9C, // $8F9C + #$8F9D, // $8F9D + #$8F9E, // $8F9E + #$8F9F, // $8F9F + #$8FA0, // $8FA0 + #$8FA1, // $8FA1 + #$8FA2, // $8FA2 + #$8FA3, // $8FA3 + #$8FA4, // $8FA4 + #$8FA5, // $8FA5 + #$8FA6, // $8FA6 + #$8FA7, // $8FA7 + #$8FA8, // $8FA8 + #$8FA9, // $8FA9 + #$8FAA, // $8FAA + #$8FAB, // $8FAB + #$8FAC, // $8FAC + #$8FAD, // $8FAD + #$8FAE, // $8FAE + #$8FAF, // $8FAF + #$8FB0, // $8FB0 + #$8FB1, // $8FB1 + #$8FB2, // $8FB2 + #$8FB3, // $8FB3 + #$8FB4, // $8FB4 + #$8FB5, // $8FB5 + #$8FB6, // $8FB6 + #$8FB7, // $8FB7 + #$8FB8, // $8FB8 + #$8FB9, // $8FB9 + #$8FBA, // $8FBA + #$8FBB, // $8FBB + #$8FBC, // $8FBC + #$8FBD, // $8FBD + #$8FBE, // $8FBE + #$8FBF, // $8FBF + #$8FC0, // $8FC0 + #$8FC1, // $8FC1 + #$8FC2, // $8FC2 + #$8FC3, // $8FC3 + #$8FC4, // $8FC4 + #$8FC5, // $8FC5 + #$8FC6, // $8FC6 + #$8FC7, // $8FC7 + #$8FC8, // $8FC8 + #$8FC9, // $8FC9 + #$8FCA, // $8FCA + #$8FCB, // $8FCB + #$8FCC, // $8FCC + #$8FCD, // $8FCD + #$8FCE, // $8FCE + #$8FCF, // $8FCF + #$8FD0, // $8FD0 + #$8FD1, // $8FD1 + #$8FD2, // $8FD2 + #$8FD3, // $8FD3 + #$8FD4, // $8FD4 + #$8FD5, // $8FD5 + #$8FD6, // $8FD6 + #$8FD7, // $8FD7 + #$8FD8, // $8FD8 + #$8FD9, // $8FD9 + #$8FDA, // $8FDA + #$8FDB, // $8FDB + #$8FDC, // $8FDC + #$8FDD, // $8FDD + #$8FDE, // $8FDE + #$8FDF, // $8FDF + #$8FE0, // $8FE0 + #$8FE1, // $8FE1 + #$8FE2, // $8FE2 + #$8FE3, // $8FE3 + #$8FE4, // $8FE4 + #$8FE5, // $8FE5 + #$8FE6, // $8FE6 + #$8FE7, // $8FE7 + #$8FE8, // $8FE8 + #$8FE9, // $8FE9 + #$8FEA, // $8FEA + #$8FEB, // $8FEB + #$8FEC, // $8FEC + #$8FED, // $8FED + #$8FEE, // $8FEE + #$8FEF, // $8FEF + #$8FF0, // $8FF0 + #$8FF1, // $8FF1 + #$8FF2, // $8FF2 + #$8FF3, // $8FF3 + #$8FF4, // $8FF4 + #$8FF5, // $8FF5 + #$8FF6, // $8FF6 + #$8FF7, // $8FF7 + #$8FF8, // $8FF8 + #$8FF9, // $8FF9 + #$8FFA, // $8FFA + #$8FFB, // $8FFB + #$8FFC, // $8FFC + #$8FFD, // $8FFD + #$8FFE, // $8FFE + #$8FFF, // $8FFF + #$9000, // $9000 + #$9001, // $9001 + #$9002, // $9002 + #$9003, // $9003 + #$9004, // $9004 + #$9005, // $9005 + #$9006, // $9006 + #$9007, // $9007 + #$9008, // $9008 + #$9009, // $9009 + #$900A, // $900A + #$900B, // $900B + #$900C, // $900C + #$900D, // $900D + #$900E, // $900E + #$900F, // $900F + #$9010, // $9010 + #$9011, // $9011 + #$9012, // $9012 + #$9013, // $9013 + #$9014, // $9014 + #$9015, // $9015 + #$9016, // $9016 + #$9017, // $9017 + #$9018, // $9018 + #$9019, // $9019 + #$901A, // $901A + #$901B, // $901B + #$901C, // $901C + #$901D, // $901D + #$901E, // $901E + #$901F, // $901F + #$9020, // $9020 + #$9021, // $9021 + #$9022, // $9022 + #$9023, // $9023 + #$9024, // $9024 + #$9025, // $9025 + #$9026, // $9026 + #$9027, // $9027 + #$9028, // $9028 + #$9029, // $9029 + #$902A, // $902A + #$902B, // $902B + #$902C, // $902C + #$902D, // $902D + #$902E, // $902E + #$902F, // $902F + #$9030, // $9030 + #$9031, // $9031 + #$9032, // $9032 + #$9033, // $9033 + #$9034, // $9034 + #$9035, // $9035 + #$9036, // $9036 + #$9037, // $9037 + #$9038, // $9038 + #$9039, // $9039 + #$903A, // $903A + #$903B, // $903B + #$903C, // $903C + #$903D, // $903D + #$903E, // $903E + #$903F, // $903F + #$9040, // $9040 + #$9041, // $9041 + #$9042, // $9042 + #$9043, // $9043 + #$9044, // $9044 + #$9045, // $9045 + #$9046, // $9046 + #$9047, // $9047 + #$9048, // $9048 + #$9049, // $9049 + #$904A, // $904A + #$904B, // $904B + #$904C, // $904C + #$904D, // $904D + #$904E, // $904E + #$904F, // $904F + #$9050, // $9050 + #$9051, // $9051 + #$9052, // $9052 + #$9053, // $9053 + #$9054, // $9054 + #$9055, // $9055 + #$9056, // $9056 + #$9057, // $9057 + #$9058, // $9058 + #$9059, // $9059 + #$905A, // $905A + #$905B, // $905B + #$905C, // $905C + #$905D, // $905D + #$905E, // $905E + #$905F, // $905F + #$9060, // $9060 + #$9061, // $9061 + #$9062, // $9062 + #$9063, // $9063 + #$9064, // $9064 + #$9065, // $9065 + #$9066, // $9066 + #$9067, // $9067 + #$9068, // $9068 + #$9069, // $9069 + #$906A, // $906A + #$906B, // $906B + #$906C, // $906C + #$906D, // $906D + #$906E, // $906E + #$906F, // $906F + #$9070, // $9070 + #$9071, // $9071 + #$9072, // $9072 + #$9073, // $9073 + #$9074, // $9074 + #$9075, // $9075 + #$9076, // $9076 + #$9077, // $9077 + #$9078, // $9078 + #$9079, // $9079 + #$907A, // $907A + #$907B, // $907B + #$907C, // $907C + #$907D, // $907D + #$907E, // $907E + #$907F, // $907F + #$9080, // $9080 + #$9081, // $9081 + #$9082, // $9082 + #$9083, // $9083 + #$9084, // $9084 + #$9085, // $9085 + #$9086, // $9086 + #$9087, // $9087 + #$9088, // $9088 + #$9089, // $9089 + #$908A, // $908A + #$908B, // $908B + #$908C, // $908C + #$908D, // $908D + #$908E, // $908E + #$908F, // $908F + #$9090, // $9090 + #$9091, // $9091 + #$9092, // $9092 + #$9093, // $9093 + #$9094, // $9094 + #$9095, // $9095 + #$9096, // $9096 + #$9097, // $9097 + #$9098, // $9098 + #$9099, // $9099 + #$909A, // $909A + #$909B, // $909B + #$909C, // $909C + #$909D, // $909D + #$909E, // $909E + #$909F, // $909F + #$90A0, // $90A0 + #$90A1, // $90A1 + #$90A2, // $90A2 + #$90A3, // $90A3 + #$90A4, // $90A4 + #$90A5, // $90A5 + #$90A6, // $90A6 + #$90A7, // $90A7 + #$90A8, // $90A8 + #$90A9, // $90A9 + #$90AA, // $90AA + #$90AB, // $90AB + #$90AC, // $90AC + #$90AD, // $90AD + #$90AE, // $90AE + #$90AF, // $90AF + #$90B0, // $90B0 + #$90B1, // $90B1 + #$90B2, // $90B2 + #$90B3, // $90B3 + #$90B4, // $90B4 + #$90B5, // $90B5 + #$90B6, // $90B6 + #$90B7, // $90B7 + #$90B8, // $90B8 + #$90B9, // $90B9 + #$90BA, // $90BA + #$90BB, // $90BB + #$90BC, // $90BC + #$90BD, // $90BD + #$90BE, // $90BE + #$90BF, // $90BF + #$90C0, // $90C0 + #$90C1, // $90C1 + #$90C2, // $90C2 + #$90C3, // $90C3 + #$90C4, // $90C4 + #$90C5, // $90C5 + #$90C6, // $90C6 + #$90C7, // $90C7 + #$90C8, // $90C8 + #$90C9, // $90C9 + #$90CA, // $90CA + #$90CB, // $90CB + #$90CC, // $90CC + #$90CD, // $90CD + #$90CE, // $90CE + #$90CF, // $90CF + #$90D0, // $90D0 + #$90D1, // $90D1 + #$90D2, // $90D2 + #$90D3, // $90D3 + #$90D4, // $90D4 + #$90D5, // $90D5 + #$90D6, // $90D6 + #$90D7, // $90D7 + #$90D8, // $90D8 + #$90D9, // $90D9 + #$90DA, // $90DA + #$90DB, // $90DB + #$90DC, // $90DC + #$90DD, // $90DD + #$90DE, // $90DE + #$90DF, // $90DF + #$90E0, // $90E0 + #$90E1, // $90E1 + #$90E2, // $90E2 + #$90E3, // $90E3 + #$90E4, // $90E4 + #$90E5, // $90E5 + #$90E6, // $90E6 + #$90E7, // $90E7 + #$90E8, // $90E8 + #$90E9, // $90E9 + #$90EA, // $90EA + #$90EB, // $90EB + #$90EC, // $90EC + #$90ED, // $90ED + #$90EE, // $90EE + #$90EF, // $90EF + #$90F0, // $90F0 + #$90F1, // $90F1 + #$90F2, // $90F2 + #$90F3, // $90F3 + #$90F4, // $90F4 + #$90F5, // $90F5 + #$90F6, // $90F6 + #$90F7, // $90F7 + #$90F8, // $90F8 + #$90F9, // $90F9 + #$90FA, // $90FA + #$90FB, // $90FB + #$90FC, // $90FC + #$90FD, // $90FD + #$90FE, // $90FE + #$90FF, // $90FF + #$9100, // $9100 + #$9101, // $9101 + #$9102, // $9102 + #$9103, // $9103 + #$9104, // $9104 + #$9105, // $9105 + #$9106, // $9106 + #$9107, // $9107 + #$9108, // $9108 + #$9109, // $9109 + #$910A, // $910A + #$910B, // $910B + #$910C, // $910C + #$910D, // $910D + #$910E, // $910E + #$910F, // $910F + #$9110, // $9110 + #$9111, // $9111 + #$9112, // $9112 + #$9113, // $9113 + #$9114, // $9114 + #$9115, // $9115 + #$9116, // $9116 + #$9117, // $9117 + #$9118, // $9118 + #$9119, // $9119 + #$911A, // $911A + #$911B, // $911B + #$911C, // $911C + #$911D, // $911D + #$911E, // $911E + #$911F, // $911F + #$9120, // $9120 + #$9121, // $9121 + #$9122, // $9122 + #$9123, // $9123 + #$9124, // $9124 + #$9125, // $9125 + #$9126, // $9126 + #$9127, // $9127 + #$9128, // $9128 + #$9129, // $9129 + #$912A, // $912A + #$912B, // $912B + #$912C, // $912C + #$912D, // $912D + #$912E, // $912E + #$912F, // $912F + #$9130, // $9130 + #$9131, // $9131 + #$9132, // $9132 + #$9133, // $9133 + #$9134, // $9134 + #$9135, // $9135 + #$9136, // $9136 + #$9137, // $9137 + #$9138, // $9138 + #$9139, // $9139 + #$913A, // $913A + #$913B, // $913B + #$913C, // $913C + #$913D, // $913D + #$913E, // $913E + #$913F, // $913F + #$9140, // $9140 + #$9141, // $9141 + #$9142, // $9142 + #$9143, // $9143 + #$9144, // $9144 + #$9145, // $9145 + #$9146, // $9146 + #$9147, // $9147 + #$9148, // $9148 + #$9149, // $9149 + #$914A, // $914A + #$914B, // $914B + #$914C, // $914C + #$914D, // $914D + #$914E, // $914E + #$914F, // $914F + #$9150, // $9150 + #$9151, // $9151 + #$9152, // $9152 + #$9153, // $9153 + #$9154, // $9154 + #$9155, // $9155 + #$9156, // $9156 + #$9157, // $9157 + #$9158, // $9158 + #$9159, // $9159 + #$915A, // $915A + #$915B, // $915B + #$915C, // $915C + #$915D, // $915D + #$915E, // $915E + #$915F, // $915F + #$9160, // $9160 + #$9161, // $9161 + #$9162, // $9162 + #$9163, // $9163 + #$9164, // $9164 + #$9165, // $9165 + #$9166, // $9166 + #$9167, // $9167 + #$9168, // $9168 + #$9169, // $9169 + #$916A, // $916A + #$916B, // $916B + #$916C, // $916C + #$916D, // $916D + #$916E, // $916E + #$916F, // $916F + #$9170, // $9170 + #$9171, // $9171 + #$9172, // $9172 + #$9173, // $9173 + #$9174, // $9174 + #$9175, // $9175 + #$9176, // $9176 + #$9177, // $9177 + #$9178, // $9178 + #$9179, // $9179 + #$917A, // $917A + #$917B, // $917B + #$917C, // $917C + #$917D, // $917D + #$917E, // $917E + #$917F, // $917F + #$9180, // $9180 + #$9181, // $9181 + #$9182, // $9182 + #$9183, // $9183 + #$9184, // $9184 + #$9185, // $9185 + #$9186, // $9186 + #$9187, // $9187 + #$9188, // $9188 + #$9189, // $9189 + #$918A, // $918A + #$918B, // $918B + #$918C, // $918C + #$918D, // $918D + #$918E, // $918E + #$918F, // $918F + #$9190, // $9190 + #$9191, // $9191 + #$9192, // $9192 + #$9193, // $9193 + #$9194, // $9194 + #$9195, // $9195 + #$9196, // $9196 + #$9197, // $9197 + #$9198, // $9198 + #$9199, // $9199 + #$919A, // $919A + #$919B, // $919B + #$919C, // $919C + #$919D, // $919D + #$919E, // $919E + #$919F, // $919F + #$91A0, // $91A0 + #$91A1, // $91A1 + #$91A2, // $91A2 + #$91A3, // $91A3 + #$91A4, // $91A4 + #$91A5, // $91A5 + #$91A6, // $91A6 + #$91A7, // $91A7 + #$91A8, // $91A8 + #$91A9, // $91A9 + #$91AA, // $91AA + #$91AB, // $91AB + #$91AC, // $91AC + #$91AD, // $91AD + #$91AE, // $91AE + #$91AF, // $91AF + #$91B0, // $91B0 + #$91B1, // $91B1 + #$91B2, // $91B2 + #$91B3, // $91B3 + #$91B4, // $91B4 + #$91B5, // $91B5 + #$91B6, // $91B6 + #$91B7, // $91B7 + #$91B8, // $91B8 + #$91B9, // $91B9 + #$91BA, // $91BA + #$91BB, // $91BB + #$91BC, // $91BC + #$91BD, // $91BD + #$91BE, // $91BE + #$91BF, // $91BF + #$91C0, // $91C0 + #$91C1, // $91C1 + #$91C2, // $91C2 + #$91C3, // $91C3 + #$91C4, // $91C4 + #$91C5, // $91C5 + #$91C6, // $91C6 + #$91C7, // $91C7 + #$91C8, // $91C8 + #$91C9, // $91C9 + #$91CA, // $91CA + #$91CB, // $91CB + #$91CC, // $91CC + #$91CD, // $91CD + #$91CE, // $91CE + #$91CF, // $91CF + #$91D0, // $91D0 + #$91D1, // $91D1 + #$91D2, // $91D2 + #$91D3, // $91D3 + #$91D4, // $91D4 + #$91D5, // $91D5 + #$91D6, // $91D6 + #$91D7, // $91D7 + #$91D8, // $91D8 + #$91D9, // $91D9 + #$91DA, // $91DA + #$91DB, // $91DB + #$91DC, // $91DC + #$91DD, // $91DD + #$91DE, // $91DE + #$91DF, // $91DF + #$91E0, // $91E0 + #$91E1, // $91E1 + #$91E2, // $91E2 + #$91E3, // $91E3 + #$91E4, // $91E4 + #$91E5, // $91E5 + #$91E6, // $91E6 + #$91E7, // $91E7 + #$91E8, // $91E8 + #$91E9, // $91E9 + #$91EA, // $91EA + #$91EB, // $91EB + #$91EC, // $91EC + #$91ED, // $91ED + #$91EE, // $91EE + #$91EF, // $91EF + #$91F0, // $91F0 + #$91F1, // $91F1 + #$91F2, // $91F2 + #$91F3, // $91F3 + #$91F4, // $91F4 + #$91F5, // $91F5 + #$91F6, // $91F6 + #$91F7, // $91F7 + #$91F8, // $91F8 + #$91F9, // $91F9 + #$91FA, // $91FA + #$91FB, // $91FB + #$91FC, // $91FC + #$91FD, // $91FD + #$91FE, // $91FE + #$91FF, // $91FF + #$9200, // $9200 + #$9201, // $9201 + #$9202, // $9202 + #$9203, // $9203 + #$9204, // $9204 + #$9205, // $9205 + #$9206, // $9206 + #$9207, // $9207 + #$9208, // $9208 + #$9209, // $9209 + #$920A, // $920A + #$920B, // $920B + #$920C, // $920C + #$920D, // $920D + #$920E, // $920E + #$920F, // $920F + #$9210, // $9210 + #$9211, // $9211 + #$9212, // $9212 + #$9213, // $9213 + #$9214, // $9214 + #$9215, // $9215 + #$9216, // $9216 + #$9217, // $9217 + #$9218, // $9218 + #$9219, // $9219 + #$921A, // $921A + #$921B, // $921B + #$921C, // $921C + #$921D, // $921D + #$921E, // $921E + #$921F, // $921F + #$9220, // $9220 + #$9221, // $9221 + #$9222, // $9222 + #$9223, // $9223 + #$9224, // $9224 + #$9225, // $9225 + #$9226, // $9226 + #$9227, // $9227 + #$9228, // $9228 + #$9229, // $9229 + #$922A, // $922A + #$922B, // $922B + #$922C, // $922C + #$922D, // $922D + #$922E, // $922E + #$922F, // $922F + #$9230, // $9230 + #$9231, // $9231 + #$9232, // $9232 + #$9233, // $9233 + #$9234, // $9234 + #$9235, // $9235 + #$9236, // $9236 + #$9237, // $9237 + #$9238, // $9238 + #$9239, // $9239 + #$923A, // $923A + #$923B, // $923B + #$923C, // $923C + #$923D, // $923D + #$923E, // $923E + #$923F, // $923F + #$9240, // $9240 + #$9241, // $9241 + #$9242, // $9242 + #$9243, // $9243 + #$9244, // $9244 + #$9245, // $9245 + #$9246, // $9246 + #$9247, // $9247 + #$9248, // $9248 + #$9249, // $9249 + #$924A, // $924A + #$924B, // $924B + #$924C, // $924C + #$924D, // $924D + #$924E, // $924E + #$924F, // $924F + #$9250, // $9250 + #$9251, // $9251 + #$9252, // $9252 + #$9253, // $9253 + #$9254, // $9254 + #$9255, // $9255 + #$9256, // $9256 + #$9257, // $9257 + #$9258, // $9258 + #$9259, // $9259 + #$925A, // $925A + #$925B, // $925B + #$925C, // $925C + #$925D, // $925D + #$925E, // $925E + #$925F, // $925F + #$9260, // $9260 + #$9261, // $9261 + #$9262, // $9262 + #$9263, // $9263 + #$9264, // $9264 + #$9265, // $9265 + #$9266, // $9266 + #$9267, // $9267 + #$9268, // $9268 + #$9269, // $9269 + #$926A, // $926A + #$926B, // $926B + #$926C, // $926C + #$926D, // $926D + #$926E, // $926E + #$926F, // $926F + #$9270, // $9270 + #$9271, // $9271 + #$9272, // $9272 + #$9273, // $9273 + #$9274, // $9274 + #$9275, // $9275 + #$9276, // $9276 + #$9277, // $9277 + #$9278, // $9278 + #$9279, // $9279 + #$927A, // $927A + #$927B, // $927B + #$927C, // $927C + #$927D, // $927D + #$927E, // $927E + #$927F, // $927F + #$9280, // $9280 + #$9281, // $9281 + #$9282, // $9282 + #$9283, // $9283 + #$9284, // $9284 + #$9285, // $9285 + #$9286, // $9286 + #$9287, // $9287 + #$9288, // $9288 + #$9289, // $9289 + #$928A, // $928A + #$928B, // $928B + #$928C, // $928C + #$928D, // $928D + #$928E, // $928E + #$928F, // $928F + #$9290, // $9290 + #$9291, // $9291 + #$9292, // $9292 + #$9293, // $9293 + #$9294, // $9294 + #$9295, // $9295 + #$9296, // $9296 + #$9297, // $9297 + #$9298, // $9298 + #$9299, // $9299 + #$929A, // $929A + #$929B, // $929B + #$929C, // $929C + #$929D, // $929D + #$929E, // $929E + #$929F, // $929F + #$92A0, // $92A0 + #$92A1, // $92A1 + #$92A2, // $92A2 + #$92A3, // $92A3 + #$92A4, // $92A4 + #$92A5, // $92A5 + #$92A6, // $92A6 + #$92A7, // $92A7 + #$92A8, // $92A8 + #$92A9, // $92A9 + #$92AA, // $92AA + #$92AB, // $92AB + #$92AC, // $92AC + #$92AD, // $92AD + #$92AE, // $92AE + #$92AF, // $92AF + #$92B0, // $92B0 + #$92B1, // $92B1 + #$92B2, // $92B2 + #$92B3, // $92B3 + #$92B4, // $92B4 + #$92B5, // $92B5 + #$92B6, // $92B6 + #$92B7, // $92B7 + #$92B8, // $92B8 + #$92B9, // $92B9 + #$92BA, // $92BA + #$92BB, // $92BB + #$92BC, // $92BC + #$92BD, // $92BD + #$92BE, // $92BE + #$92BF, // $92BF + #$92C0, // $92C0 + #$92C1, // $92C1 + #$92C2, // $92C2 + #$92C3, // $92C3 + #$92C4, // $92C4 + #$92C5, // $92C5 + #$92C6, // $92C6 + #$92C7, // $92C7 + #$92C8, // $92C8 + #$92C9, // $92C9 + #$92CA, // $92CA + #$92CB, // $92CB + #$92CC, // $92CC + #$92CD, // $92CD + #$92CE, // $92CE + #$92CF, // $92CF + #$92D0, // $92D0 + #$92D1, // $92D1 + #$92D2, // $92D2 + #$92D3, // $92D3 + #$92D4, // $92D4 + #$92D5, // $92D5 + #$92D6, // $92D6 + #$92D7, // $92D7 + #$92D8, // $92D8 + #$92D9, // $92D9 + #$92DA, // $92DA + #$92DB, // $92DB + #$92DC, // $92DC + #$92DD, // $92DD + #$92DE, // $92DE + #$92DF, // $92DF + #$92E0, // $92E0 + #$92E1, // $92E1 + #$92E2, // $92E2 + #$92E3, // $92E3 + #$92E4, // $92E4 + #$92E5, // $92E5 + #$92E6, // $92E6 + #$92E7, // $92E7 + #$92E8, // $92E8 + #$92E9, // $92E9 + #$92EA, // $92EA + #$92EB, // $92EB + #$92EC, // $92EC + #$92ED, // $92ED + #$92EE, // $92EE + #$92EF, // $92EF + #$92F0, // $92F0 + #$92F1, // $92F1 + #$92F2, // $92F2 + #$92F3, // $92F3 + #$92F4, // $92F4 + #$92F5, // $92F5 + #$92F6, // $92F6 + #$92F7, // $92F7 + #$92F8, // $92F8 + #$92F9, // $92F9 + #$92FA, // $92FA + #$92FB, // $92FB + #$92FC, // $92FC + #$92FD, // $92FD + #$92FE, // $92FE + #$92FF, // $92FF + #$9300, // $9300 + #$9301, // $9301 + #$9302, // $9302 + #$9303, // $9303 + #$9304, // $9304 + #$9305, // $9305 + #$9306, // $9306 + #$9307, // $9307 + #$9308, // $9308 + #$9309, // $9309 + #$930A, // $930A + #$930B, // $930B + #$930C, // $930C + #$930D, // $930D + #$930E, // $930E + #$930F, // $930F + #$9310, // $9310 + #$9311, // $9311 + #$9312, // $9312 + #$9313, // $9313 + #$9314, // $9314 + #$9315, // $9315 + #$9316, // $9316 + #$9317, // $9317 + #$9318, // $9318 + #$9319, // $9319 + #$931A, // $931A + #$931B, // $931B + #$931C, // $931C + #$931D, // $931D + #$931E, // $931E + #$931F, // $931F + #$9320, // $9320 + #$9321, // $9321 + #$9322, // $9322 + #$9323, // $9323 + #$9324, // $9324 + #$9325, // $9325 + #$9326, // $9326 + #$9327, // $9327 + #$9328, // $9328 + #$9329, // $9329 + #$932A, // $932A + #$932B, // $932B + #$932C, // $932C + #$932D, // $932D + #$932E, // $932E + #$932F, // $932F + #$9330, // $9330 + #$9331, // $9331 + #$9332, // $9332 + #$9333, // $9333 + #$9334, // $9334 + #$9335, // $9335 + #$9336, // $9336 + #$9337, // $9337 + #$9338, // $9338 + #$9339, // $9339 + #$933A, // $933A + #$933B, // $933B + #$933C, // $933C + #$933D, // $933D + #$933E, // $933E + #$933F, // $933F + #$9340, // $9340 + #$9341, // $9341 + #$9342, // $9342 + #$9343, // $9343 + #$9344, // $9344 + #$9345, // $9345 + #$9346, // $9346 + #$9347, // $9347 + #$9348, // $9348 + #$9349, // $9349 + #$934A, // $934A + #$934B, // $934B + #$934C, // $934C + #$934D, // $934D + #$934E, // $934E + #$934F, // $934F + #$9350, // $9350 + #$9351, // $9351 + #$9352, // $9352 + #$9353, // $9353 + #$9354, // $9354 + #$9355, // $9355 + #$9356, // $9356 + #$9357, // $9357 + #$9358, // $9358 + #$9359, // $9359 + #$935A, // $935A + #$935B, // $935B + #$935C, // $935C + #$935D, // $935D + #$935E, // $935E + #$935F, // $935F + #$9360, // $9360 + #$9361, // $9361 + #$9362, // $9362 + #$9363, // $9363 + #$9364, // $9364 + #$9365, // $9365 + #$9366, // $9366 + #$9367, // $9367 + #$9368, // $9368 + #$9369, // $9369 + #$936A, // $936A + #$936B, // $936B + #$936C, // $936C + #$936D, // $936D + #$936E, // $936E + #$936F, // $936F + #$9370, // $9370 + #$9371, // $9371 + #$9372, // $9372 + #$9373, // $9373 + #$9374, // $9374 + #$9375, // $9375 + #$9376, // $9376 + #$9377, // $9377 + #$9378, // $9378 + #$9379, // $9379 + #$937A, // $937A + #$937B, // $937B + #$937C, // $937C + #$937D, // $937D + #$937E, // $937E + #$937F, // $937F + #$9380, // $9380 + #$9381, // $9381 + #$9382, // $9382 + #$9383, // $9383 + #$9384, // $9384 + #$9385, // $9385 + #$9386, // $9386 + #$9387, // $9387 + #$9388, // $9388 + #$9389, // $9389 + #$938A, // $938A + #$938B, // $938B + #$938C, // $938C + #$938D, // $938D + #$938E, // $938E + #$938F, // $938F + #$9390, // $9390 + #$9391, // $9391 + #$9392, // $9392 + #$9393, // $9393 + #$9394, // $9394 + #$9395, // $9395 + #$9396, // $9396 + #$9397, // $9397 + #$9398, // $9398 + #$9399, // $9399 + #$939A, // $939A + #$939B, // $939B + #$939C, // $939C + #$939D, // $939D + #$939E, // $939E + #$939F, // $939F + #$93A0, // $93A0 + #$93A1, // $93A1 + #$93A2, // $93A2 + #$93A3, // $93A3 + #$93A4, // $93A4 + #$93A5, // $93A5 + #$93A6, // $93A6 + #$93A7, // $93A7 + #$93A8, // $93A8 + #$93A9, // $93A9 + #$93AA, // $93AA + #$93AB, // $93AB + #$93AC, // $93AC + #$93AD, // $93AD + #$93AE, // $93AE + #$93AF, // $93AF + #$93B0, // $93B0 + #$93B1, // $93B1 + #$93B2, // $93B2 + #$93B3, // $93B3 + #$93B4, // $93B4 + #$93B5, // $93B5 + #$93B6, // $93B6 + #$93B7, // $93B7 + #$93B8, // $93B8 + #$93B9, // $93B9 + #$93BA, // $93BA + #$93BB, // $93BB + #$93BC, // $93BC + #$93BD, // $93BD + #$93BE, // $93BE + #$93BF, // $93BF + #$93C0, // $93C0 + #$93C1, // $93C1 + #$93C2, // $93C2 + #$93C3, // $93C3 + #$93C4, // $93C4 + #$93C5, // $93C5 + #$93C6, // $93C6 + #$93C7, // $93C7 + #$93C8, // $93C8 + #$93C9, // $93C9 + #$93CA, // $93CA + #$93CB, // $93CB + #$93CC, // $93CC + #$93CD, // $93CD + #$93CE, // $93CE + #$93CF, // $93CF + #$93D0, // $93D0 + #$93D1, // $93D1 + #$93D2, // $93D2 + #$93D3, // $93D3 + #$93D4, // $93D4 + #$93D5, // $93D5 + #$93D6, // $93D6 + #$93D7, // $93D7 + #$93D8, // $93D8 + #$93D9, // $93D9 + #$93DA, // $93DA + #$93DB, // $93DB + #$93DC, // $93DC + #$93DD, // $93DD + #$93DE, // $93DE + #$93DF, // $93DF + #$93E0, // $93E0 + #$93E1, // $93E1 + #$93E2, // $93E2 + #$93E3, // $93E3 + #$93E4, // $93E4 + #$93E5, // $93E5 + #$93E6, // $93E6 + #$93E7, // $93E7 + #$93E8, // $93E8 + #$93E9, // $93E9 + #$93EA, // $93EA + #$93EB, // $93EB + #$93EC, // $93EC + #$93ED, // $93ED + #$93EE, // $93EE + #$93EF, // $93EF + #$93F0, // $93F0 + #$93F1, // $93F1 + #$93F2, // $93F2 + #$93F3, // $93F3 + #$93F4, // $93F4 + #$93F5, // $93F5 + #$93F6, // $93F6 + #$93F7, // $93F7 + #$93F8, // $93F8 + #$93F9, // $93F9 + #$93FA, // $93FA + #$93FB, // $93FB + #$93FC, // $93FC + #$93FD, // $93FD + #$93FE, // $93FE + #$93FF, // $93FF + #$9400, // $9400 + #$9401, // $9401 + #$9402, // $9402 + #$9403, // $9403 + #$9404, // $9404 + #$9405, // $9405 + #$9406, // $9406 + #$9407, // $9407 + #$9408, // $9408 + #$9409, // $9409 + #$940A, // $940A + #$940B, // $940B + #$940C, // $940C + #$940D, // $940D + #$940E, // $940E + #$940F, // $940F + #$9410, // $9410 + #$9411, // $9411 + #$9412, // $9412 + #$9413, // $9413 + #$9414, // $9414 + #$9415, // $9415 + #$9416, // $9416 + #$9417, // $9417 + #$9418, // $9418 + #$9419, // $9419 + #$941A, // $941A + #$941B, // $941B + #$941C, // $941C + #$941D, // $941D + #$941E, // $941E + #$941F, // $941F + #$9420, // $9420 + #$9421, // $9421 + #$9422, // $9422 + #$9423, // $9423 + #$9424, // $9424 + #$9425, // $9425 + #$9426, // $9426 + #$9427, // $9427 + #$9428, // $9428 + #$9429, // $9429 + #$942A, // $942A + #$942B, // $942B + #$942C, // $942C + #$942D, // $942D + #$942E, // $942E + #$942F, // $942F + #$9430, // $9430 + #$9431, // $9431 + #$9432, // $9432 + #$9433, // $9433 + #$9434, // $9434 + #$9435, // $9435 + #$9436, // $9436 + #$9437, // $9437 + #$9438, // $9438 + #$9439, // $9439 + #$943A, // $943A + #$943B, // $943B + #$943C, // $943C + #$943D, // $943D + #$943E, // $943E + #$943F, // $943F + #$9440, // $9440 + #$9441, // $9441 + #$9442, // $9442 + #$9443, // $9443 + #$9444, // $9444 + #$9445, // $9445 + #$9446, // $9446 + #$9447, // $9447 + #$9448, // $9448 + #$9449, // $9449 + #$944A, // $944A + #$944B, // $944B + #$944C, // $944C + #$944D, // $944D + #$944E, // $944E + #$944F, // $944F + #$9450, // $9450 + #$9451, // $9451 + #$9452, // $9452 + #$9453, // $9453 + #$9454, // $9454 + #$9455, // $9455 + #$9456, // $9456 + #$9457, // $9457 + #$9458, // $9458 + #$9459, // $9459 + #$945A, // $945A + #$945B, // $945B + #$945C, // $945C + #$945D, // $945D + #$945E, // $945E + #$945F, // $945F + #$9460, // $9460 + #$9461, // $9461 + #$9462, // $9462 + #$9463, // $9463 + #$9464, // $9464 + #$9465, // $9465 + #$9466, // $9466 + #$9467, // $9467 + #$9468, // $9468 + #$9469, // $9469 + #$946A, // $946A + #$946B, // $946B + #$946C, // $946C + #$946D, // $946D + #$946E, // $946E + #$946F, // $946F + #$9470, // $9470 + #$9471, // $9471 + #$9472, // $9472 + #$9473, // $9473 + #$9474, // $9474 + #$9475, // $9475 + #$9476, // $9476 + #$9477, // $9477 + #$9478, // $9478 + #$9479, // $9479 + #$947A, // $947A + #$947B, // $947B + #$947C, // $947C + #$947D, // $947D + #$947E, // $947E + #$947F, // $947F + #$9480, // $9480 + #$9481, // $9481 + #$9482, // $9482 + #$9483, // $9483 + #$9484, // $9484 + #$9485, // $9485 + #$9486, // $9486 + #$9487, // $9487 + #$9488, // $9488 + #$9489, // $9489 + #$948A, // $948A + #$948B, // $948B + #$948C, // $948C + #$948D, // $948D + #$948E, // $948E + #$948F, // $948F + #$9490, // $9490 + #$9491, // $9491 + #$9492, // $9492 + #$9493, // $9493 + #$9494, // $9494 + #$9495, // $9495 + #$9496, // $9496 + #$9497, // $9497 + #$9498, // $9498 + #$9499, // $9499 + #$949A, // $949A + #$949B, // $949B + #$949C, // $949C + #$949D, // $949D + #$949E, // $949E + #$949F, // $949F + #$94A0, // $94A0 + #$94A1, // $94A1 + #$94A2, // $94A2 + #$94A3, // $94A3 + #$94A4, // $94A4 + #$94A5, // $94A5 + #$94A6, // $94A6 + #$94A7, // $94A7 + #$94A8, // $94A8 + #$94A9, // $94A9 + #$94AA, // $94AA + #$94AB, // $94AB + #$94AC, // $94AC + #$94AD, // $94AD + #$94AE, // $94AE + #$94AF, // $94AF + #$94B0, // $94B0 + #$94B1, // $94B1 + #$94B2, // $94B2 + #$94B3, // $94B3 + #$94B4, // $94B4 + #$94B5, // $94B5 + #$94B6, // $94B6 + #$94B7, // $94B7 + #$94B8, // $94B8 + #$94B9, // $94B9 + #$94BA, // $94BA + #$94BB, // $94BB + #$94BC, // $94BC + #$94BD, // $94BD + #$94BE, // $94BE + #$94BF, // $94BF + #$94C0, // $94C0 + #$94C1, // $94C1 + #$94C2, // $94C2 + #$94C3, // $94C3 + #$94C4, // $94C4 + #$94C5, // $94C5 + #$94C6, // $94C6 + #$94C7, // $94C7 + #$94C8, // $94C8 + #$94C9, // $94C9 + #$94CA, // $94CA + #$94CB, // $94CB + #$94CC, // $94CC + #$94CD, // $94CD + #$94CE, // $94CE + #$94CF, // $94CF + #$94D0, // $94D0 + #$94D1, // $94D1 + #$94D2, // $94D2 + #$94D3, // $94D3 + #$94D4, // $94D4 + #$94D5, // $94D5 + #$94D6, // $94D6 + #$94D7, // $94D7 + #$94D8, // $94D8 + #$94D9, // $94D9 + #$94DA, // $94DA + #$94DB, // $94DB + #$94DC, // $94DC + #$94DD, // $94DD + #$94DE, // $94DE + #$94DF, // $94DF + #$94E0, // $94E0 + #$94E1, // $94E1 + #$94E2, // $94E2 + #$94E3, // $94E3 + #$94E4, // $94E4 + #$94E5, // $94E5 + #$94E6, // $94E6 + #$94E7, // $94E7 + #$94E8, // $94E8 + #$94E9, // $94E9 + #$94EA, // $94EA + #$94EB, // $94EB + #$94EC, // $94EC + #$94ED, // $94ED + #$94EE, // $94EE + #$94EF, // $94EF + #$94F0, // $94F0 + #$94F1, // $94F1 + #$94F2, // $94F2 + #$94F3, // $94F3 + #$94F4, // $94F4 + #$94F5, // $94F5 + #$94F6, // $94F6 + #$94F7, // $94F7 + #$94F8, // $94F8 + #$94F9, // $94F9 + #$94FA, // $94FA + #$94FB, // $94FB + #$94FC, // $94FC + #$94FD, // $94FD + #$94FE, // $94FE + #$94FF, // $94FF + #$9500, // $9500 + #$9501, // $9501 + #$9502, // $9502 + #$9503, // $9503 + #$9504, // $9504 + #$9505, // $9505 + #$9506, // $9506 + #$9507, // $9507 + #$9508, // $9508 + #$9509, // $9509 + #$950A, // $950A + #$950B, // $950B + #$950C, // $950C + #$950D, // $950D + #$950E, // $950E + #$950F, // $950F + #$9510, // $9510 + #$9511, // $9511 + #$9512, // $9512 + #$9513, // $9513 + #$9514, // $9514 + #$9515, // $9515 + #$9516, // $9516 + #$9517, // $9517 + #$9518, // $9518 + #$9519, // $9519 + #$951A, // $951A + #$951B, // $951B + #$951C, // $951C + #$951D, // $951D + #$951E, // $951E + #$951F, // $951F + #$9520, // $9520 + #$9521, // $9521 + #$9522, // $9522 + #$9523, // $9523 + #$9524, // $9524 + #$9525, // $9525 + #$9526, // $9526 + #$9527, // $9527 + #$9528, // $9528 + #$9529, // $9529 + #$952A, // $952A + #$952B, // $952B + #$952C, // $952C + #$952D, // $952D + #$952E, // $952E + #$952F, // $952F + #$9530, // $9530 + #$9531, // $9531 + #$9532, // $9532 + #$9533, // $9533 + #$9534, // $9534 + #$9535, // $9535 + #$9536, // $9536 + #$9537, // $9537 + #$9538, // $9538 + #$9539, // $9539 + #$953A, // $953A + #$953B, // $953B + #$953C, // $953C + #$953D, // $953D + #$953E, // $953E + #$953F, // $953F + #$9540, // $9540 + #$9541, // $9541 + #$9542, // $9542 + #$9543, // $9543 + #$9544, // $9544 + #$9545, // $9545 + #$9546, // $9546 + #$9547, // $9547 + #$9548, // $9548 + #$9549, // $9549 + #$954A, // $954A + #$954B, // $954B + #$954C, // $954C + #$954D, // $954D + #$954E, // $954E + #$954F, // $954F + #$9550, // $9550 + #$9551, // $9551 + #$9552, // $9552 + #$9553, // $9553 + #$9554, // $9554 + #$9555, // $9555 + #$9556, // $9556 + #$9557, // $9557 + #$9558, // $9558 + #$9559, // $9559 + #$955A, // $955A + #$955B, // $955B + #$955C, // $955C + #$955D, // $955D + #$955E, // $955E + #$955F, // $955F + #$9560, // $9560 + #$9561, // $9561 + #$9562, // $9562 + #$9563, // $9563 + #$9564, // $9564 + #$9565, // $9565 + #$9566, // $9566 + #$9567, // $9567 + #$9568, // $9568 + #$9569, // $9569 + #$956A, // $956A + #$956B, // $956B + #$956C, // $956C + #$956D, // $956D + #$956E, // $956E + #$956F, // $956F + #$9570, // $9570 + #$9571, // $9571 + #$9572, // $9572 + #$9573, // $9573 + #$9574, // $9574 + #$9575, // $9575 + #$9576, // $9576 + #$9577, // $9577 + #$9578, // $9578 + #$9579, // $9579 + #$957A, // $957A + #$957B, // $957B + #$957C, // $957C + #$957D, // $957D + #$957E, // $957E + #$957F, // $957F + #$9580, // $9580 + #$9581, // $9581 + #$9582, // $9582 + #$9583, // $9583 + #$9584, // $9584 + #$9585, // $9585 + #$9586, // $9586 + #$9587, // $9587 + #$9588, // $9588 + #$9589, // $9589 + #$958A, // $958A + #$958B, // $958B + #$958C, // $958C + #$958D, // $958D + #$958E, // $958E + #$958F, // $958F + #$9590, // $9590 + #$9591, // $9591 + #$9592, // $9592 + #$9593, // $9593 + #$9594, // $9594 + #$9595, // $9595 + #$9596, // $9596 + #$9597, // $9597 + #$9598, // $9598 + #$9599, // $9599 + #$959A, // $959A + #$959B, // $959B + #$959C, // $959C + #$959D, // $959D + #$959E, // $959E + #$959F, // $959F + #$95A0, // $95A0 + #$95A1, // $95A1 + #$95A2, // $95A2 + #$95A3, // $95A3 + #$95A4, // $95A4 + #$95A5, // $95A5 + #$95A6, // $95A6 + #$95A7, // $95A7 + #$95A8, // $95A8 + #$95A9, // $95A9 + #$95AA, // $95AA + #$95AB, // $95AB + #$95AC, // $95AC + #$95AD, // $95AD + #$95AE, // $95AE + #$95AF, // $95AF + #$95B0, // $95B0 + #$95B1, // $95B1 + #$95B2, // $95B2 + #$95B3, // $95B3 + #$95B4, // $95B4 + #$95B5, // $95B5 + #$95B6, // $95B6 + #$95B7, // $95B7 + #$95B8, // $95B8 + #$95B9, // $95B9 + #$95BA, // $95BA + #$95BB, // $95BB + #$95BC, // $95BC + #$95BD, // $95BD + #$95BE, // $95BE + #$95BF, // $95BF + #$95C0, // $95C0 + #$95C1, // $95C1 + #$95C2, // $95C2 + #$95C3, // $95C3 + #$95C4, // $95C4 + #$95C5, // $95C5 + #$95C6, // $95C6 + #$95C7, // $95C7 + #$95C8, // $95C8 + #$95C9, // $95C9 + #$95CA, // $95CA + #$95CB, // $95CB + #$95CC, // $95CC + #$95CD, // $95CD + #$95CE, // $95CE + #$95CF, // $95CF + #$95D0, // $95D0 + #$95D1, // $95D1 + #$95D2, // $95D2 + #$95D3, // $95D3 + #$95D4, // $95D4 + #$95D5, // $95D5 + #$95D6, // $95D6 + #$95D7, // $95D7 + #$95D8, // $95D8 + #$95D9, // $95D9 + #$95DA, // $95DA + #$95DB, // $95DB + #$95DC, // $95DC + #$95DD, // $95DD + #$95DE, // $95DE + #$95DF, // $95DF + #$95E0, // $95E0 + #$95E1, // $95E1 + #$95E2, // $95E2 + #$95E3, // $95E3 + #$95E4, // $95E4 + #$95E5, // $95E5 + #$95E6, // $95E6 + #$95E7, // $95E7 + #$95E8, // $95E8 + #$95E9, // $95E9 + #$95EA, // $95EA + #$95EB, // $95EB + #$95EC, // $95EC + #$95ED, // $95ED + #$95EE, // $95EE + #$95EF, // $95EF + #$95F0, // $95F0 + #$95F1, // $95F1 + #$95F2, // $95F2 + #$95F3, // $95F3 + #$95F4, // $95F4 + #$95F5, // $95F5 + #$95F6, // $95F6 + #$95F7, // $95F7 + #$95F8, // $95F8 + #$95F9, // $95F9 + #$95FA, // $95FA + #$95FB, // $95FB + #$95FC, // $95FC + #$95FD, // $95FD + #$95FE, // $95FE + #$95FF, // $95FF + #$9600, // $9600 + #$9601, // $9601 + #$9602, // $9602 + #$9603, // $9603 + #$9604, // $9604 + #$9605, // $9605 + #$9606, // $9606 + #$9607, // $9607 + #$9608, // $9608 + #$9609, // $9609 + #$960A, // $960A + #$960B, // $960B + #$960C, // $960C + #$960D, // $960D + #$960E, // $960E + #$960F, // $960F + #$9610, // $9610 + #$9611, // $9611 + #$9612, // $9612 + #$9613, // $9613 + #$9614, // $9614 + #$9615, // $9615 + #$9616, // $9616 + #$9617, // $9617 + #$9618, // $9618 + #$9619, // $9619 + #$961A, // $961A + #$961B, // $961B + #$961C, // $961C + #$961D, // $961D + #$961E, // $961E + #$961F, // $961F + #$9620, // $9620 + #$9621, // $9621 + #$9622, // $9622 + #$9623, // $9623 + #$9624, // $9624 + #$9625, // $9625 + #$9626, // $9626 + #$9627, // $9627 + #$9628, // $9628 + #$9629, // $9629 + #$962A, // $962A + #$962B, // $962B + #$962C, // $962C + #$962D, // $962D + #$962E, // $962E + #$962F, // $962F + #$9630, // $9630 + #$9631, // $9631 + #$9632, // $9632 + #$9633, // $9633 + #$9634, // $9634 + #$9635, // $9635 + #$9636, // $9636 + #$9637, // $9637 + #$9638, // $9638 + #$9639, // $9639 + #$963A, // $963A + #$963B, // $963B + #$963C, // $963C + #$963D, // $963D + #$963E, // $963E + #$963F, // $963F + #$9640, // $9640 + #$9641, // $9641 + #$9642, // $9642 + #$9643, // $9643 + #$9644, // $9644 + #$9645, // $9645 + #$9646, // $9646 + #$9647, // $9647 + #$9648, // $9648 + #$9649, // $9649 + #$964A, // $964A + #$964B, // $964B + #$964C, // $964C + #$964D, // $964D + #$964E, // $964E + #$964F, // $964F + #$9650, // $9650 + #$9651, // $9651 + #$9652, // $9652 + #$9653, // $9653 + #$9654, // $9654 + #$9655, // $9655 + #$9656, // $9656 + #$9657, // $9657 + #$9658, // $9658 + #$9659, // $9659 + #$965A, // $965A + #$965B, // $965B + #$965C, // $965C + #$965D, // $965D + #$965E, // $965E + #$965F, // $965F + #$9660, // $9660 + #$9661, // $9661 + #$9662, // $9662 + #$9663, // $9663 + #$9664, // $9664 + #$9665, // $9665 + #$9666, // $9666 + #$9667, // $9667 + #$9668, // $9668 + #$9669, // $9669 + #$966A, // $966A + #$966B, // $966B + #$966C, // $966C + #$966D, // $966D + #$966E, // $966E + #$966F, // $966F + #$9670, // $9670 + #$9671, // $9671 + #$9672, // $9672 + #$9673, // $9673 + #$9674, // $9674 + #$9675, // $9675 + #$9676, // $9676 + #$9677, // $9677 + #$9678, // $9678 + #$9679, // $9679 + #$967A, // $967A + #$967B, // $967B + #$967C, // $967C + #$967D, // $967D + #$967E, // $967E + #$967F, // $967F + #$9680, // $9680 + #$9681, // $9681 + #$9682, // $9682 + #$9683, // $9683 + #$9684, // $9684 + #$9685, // $9685 + #$9686, // $9686 + #$9687, // $9687 + #$9688, // $9688 + #$9689, // $9689 + #$968A, // $968A + #$968B, // $968B + #$968C, // $968C + #$968D, // $968D + #$968E, // $968E + #$968F, // $968F + #$9690, // $9690 + #$9691, // $9691 + #$9692, // $9692 + #$9693, // $9693 + #$9694, // $9694 + #$9695, // $9695 + #$9696, // $9696 + #$9697, // $9697 + #$9698, // $9698 + #$9699, // $9699 + #$969A, // $969A + #$969B, // $969B + #$969C, // $969C + #$969D, // $969D + #$969E, // $969E + #$969F, // $969F + #$96A0, // $96A0 + #$96A1, // $96A1 + #$96A2, // $96A2 + #$96A3, // $96A3 + #$96A4, // $96A4 + #$96A5, // $96A5 + #$96A6, // $96A6 + #$96A7, // $96A7 + #$96A8, // $96A8 + #$96A9, // $96A9 + #$96AA, // $96AA + #$96AB, // $96AB + #$96AC, // $96AC + #$96AD, // $96AD + #$96AE, // $96AE + #$96AF, // $96AF + #$96B0, // $96B0 + #$96B1, // $96B1 + #$96B2, // $96B2 + #$96B3, // $96B3 + #$96B4, // $96B4 + #$96B5, // $96B5 + #$96B6, // $96B6 + #$96B7, // $96B7 + #$96B8, // $96B8 + #$96B9, // $96B9 + #$96BA, // $96BA + #$96BB, // $96BB + #$96BC, // $96BC + #$96BD, // $96BD + #$96BE, // $96BE + #$96BF, // $96BF + #$96C0, // $96C0 + #$96C1, // $96C1 + #$96C2, // $96C2 + #$96C3, // $96C3 + #$96C4, // $96C4 + #$96C5, // $96C5 + #$96C6, // $96C6 + #$96C7, // $96C7 + #$96C8, // $96C8 + #$96C9, // $96C9 + #$96CA, // $96CA + #$96CB, // $96CB + #$96CC, // $96CC + #$96CD, // $96CD + #$96CE, // $96CE + #$96CF, // $96CF + #$96D0, // $96D0 + #$96D1, // $96D1 + #$96D2, // $96D2 + #$96D3, // $96D3 + #$96D4, // $96D4 + #$96D5, // $96D5 + #$96D6, // $96D6 + #$96D7, // $96D7 + #$96D8, // $96D8 + #$96D9, // $96D9 + #$96DA, // $96DA + #$96DB, // $96DB + #$96DC, // $96DC + #$96DD, // $96DD + #$96DE, // $96DE + #$96DF, // $96DF + #$96E0, // $96E0 + #$96E1, // $96E1 + #$96E2, // $96E2 + #$96E3, // $96E3 + #$96E4, // $96E4 + #$96E5, // $96E5 + #$96E6, // $96E6 + #$96E7, // $96E7 + #$96E8, // $96E8 + #$96E9, // $96E9 + #$96EA, // $96EA + #$96EB, // $96EB + #$96EC, // $96EC + #$96ED, // $96ED + #$96EE, // $96EE + #$96EF, // $96EF + #$96F0, // $96F0 + #$96F1, // $96F1 + #$96F2, // $96F2 + #$96F3, // $96F3 + #$96F4, // $96F4 + #$96F5, // $96F5 + #$96F6, // $96F6 + #$96F7, // $96F7 + #$96F8, // $96F8 + #$96F9, // $96F9 + #$96FA, // $96FA + #$96FB, // $96FB + #$96FC, // $96FC + #$96FD, // $96FD + #$96FE, // $96FE + #$96FF, // $96FF + #$9700, // $9700 + #$9701, // $9701 + #$9702, // $9702 + #$9703, // $9703 + #$9704, // $9704 + #$9705, // $9705 + #$9706, // $9706 + #$9707, // $9707 + #$9708, // $9708 + #$9709, // $9709 + #$970A, // $970A + #$970B, // $970B + #$970C, // $970C + #$970D, // $970D + #$970E, // $970E + #$970F, // $970F + #$9710, // $9710 + #$9711, // $9711 + #$9712, // $9712 + #$9713, // $9713 + #$9714, // $9714 + #$9715, // $9715 + #$9716, // $9716 + #$9717, // $9717 + #$9718, // $9718 + #$9719, // $9719 + #$971A, // $971A + #$971B, // $971B + #$971C, // $971C + #$971D, // $971D + #$971E, // $971E + #$971F, // $971F + #$9720, // $9720 + #$9721, // $9721 + #$9722, // $9722 + #$9723, // $9723 + #$9724, // $9724 + #$9725, // $9725 + #$9726, // $9726 + #$9727, // $9727 + #$9728, // $9728 + #$9729, // $9729 + #$972A, // $972A + #$972B, // $972B + #$972C, // $972C + #$972D, // $972D + #$972E, // $972E + #$972F, // $972F + #$9730, // $9730 + #$9731, // $9731 + #$9732, // $9732 + #$9733, // $9733 + #$9734, // $9734 + #$9735, // $9735 + #$9736, // $9736 + #$9737, // $9737 + #$9738, // $9738 + #$9739, // $9739 + #$973A, // $973A + #$973B, // $973B + #$973C, // $973C + #$973D, // $973D + #$973E, // $973E + #$973F, // $973F + #$9740, // $9740 + #$9741, // $9741 + #$9742, // $9742 + #$9743, // $9743 + #$9744, // $9744 + #$9745, // $9745 + #$9746, // $9746 + #$9747, // $9747 + #$9748, // $9748 + #$9749, // $9749 + #$974A, // $974A + #$974B, // $974B + #$974C, // $974C + #$974D, // $974D + #$974E, // $974E + #$974F, // $974F + #$9750, // $9750 + #$9751, // $9751 + #$9752, // $9752 + #$9753, // $9753 + #$9754, // $9754 + #$9755, // $9755 + #$9756, // $9756 + #$9757, // $9757 + #$9758, // $9758 + #$9759, // $9759 + #$975A, // $975A + #$975B, // $975B + #$975C, // $975C + #$975D, // $975D + #$975E, // $975E + #$975F, // $975F + #$9760, // $9760 + #$9761, // $9761 + #$9762, // $9762 + #$9763, // $9763 + #$9764, // $9764 + #$9765, // $9765 + #$9766, // $9766 + #$9767, // $9767 + #$9768, // $9768 + #$9769, // $9769 + #$976A, // $976A + #$976B, // $976B + #$976C, // $976C + #$976D, // $976D + #$976E, // $976E + #$976F, // $976F + #$9770, // $9770 + #$9771, // $9771 + #$9772, // $9772 + #$9773, // $9773 + #$9774, // $9774 + #$9775, // $9775 + #$9776, // $9776 + #$9777, // $9777 + #$9778, // $9778 + #$9779, // $9779 + #$977A, // $977A + #$977B, // $977B + #$977C, // $977C + #$977D, // $977D + #$977E, // $977E + #$977F, // $977F + #$9780, // $9780 + #$9781, // $9781 + #$9782, // $9782 + #$9783, // $9783 + #$9784, // $9784 + #$9785, // $9785 + #$9786, // $9786 + #$9787, // $9787 + #$9788, // $9788 + #$9789, // $9789 + #$978A, // $978A + #$978B, // $978B + #$978C, // $978C + #$978D, // $978D + #$978E, // $978E + #$978F, // $978F + #$9790, // $9790 + #$9791, // $9791 + #$9792, // $9792 + #$9793, // $9793 + #$9794, // $9794 + #$9795, // $9795 + #$9796, // $9796 + #$9797, // $9797 + #$9798, // $9798 + #$9799, // $9799 + #$979A, // $979A + #$979B, // $979B + #$979C, // $979C + #$979D, // $979D + #$979E, // $979E + #$979F, // $979F + #$97A0, // $97A0 + #$97A1, // $97A1 + #$97A2, // $97A2 + #$97A3, // $97A3 + #$97A4, // $97A4 + #$97A5, // $97A5 + #$97A6, // $97A6 + #$97A7, // $97A7 + #$97A8, // $97A8 + #$97A9, // $97A9 + #$97AA, // $97AA + #$97AB, // $97AB + #$97AC, // $97AC + #$97AD, // $97AD + #$97AE, // $97AE + #$97AF, // $97AF + #$97B0, // $97B0 + #$97B1, // $97B1 + #$97B2, // $97B2 + #$97B3, // $97B3 + #$97B4, // $97B4 + #$97B5, // $97B5 + #$97B6, // $97B6 + #$97B7, // $97B7 + #$97B8, // $97B8 + #$97B9, // $97B9 + #$97BA, // $97BA + #$97BB, // $97BB + #$97BC, // $97BC + #$97BD, // $97BD + #$97BE, // $97BE + #$97BF, // $97BF + #$97C0, // $97C0 + #$97C1, // $97C1 + #$97C2, // $97C2 + #$97C3, // $97C3 + #$97C4, // $97C4 + #$97C5, // $97C5 + #$97C6, // $97C6 + #$97C7, // $97C7 + #$97C8, // $97C8 + #$97C9, // $97C9 + #$97CA, // $97CA + #$97CB, // $97CB + #$97CC, // $97CC + #$97CD, // $97CD + #$97CE, // $97CE + #$97CF, // $97CF + #$97D0, // $97D0 + #$97D1, // $97D1 + #$97D2, // $97D2 + #$97D3, // $97D3 + #$97D4, // $97D4 + #$97D5, // $97D5 + #$97D6, // $97D6 + #$97D7, // $97D7 + #$97D8, // $97D8 + #$97D9, // $97D9 + #$97DA, // $97DA + #$97DB, // $97DB + #$97DC, // $97DC + #$97DD, // $97DD + #$97DE, // $97DE + #$97DF, // $97DF + #$97E0, // $97E0 + #$97E1, // $97E1 + #$97E2, // $97E2 + #$97E3, // $97E3 + #$97E4, // $97E4 + #$97E5, // $97E5 + #$97E6, // $97E6 + #$97E7, // $97E7 + #$97E8, // $97E8 + #$97E9, // $97E9 + #$97EA, // $97EA + #$97EB, // $97EB + #$97EC, // $97EC + #$97ED, // $97ED + #$97EE, // $97EE + #$97EF, // $97EF + #$97F0, // $97F0 + #$97F1, // $97F1 + #$97F2, // $97F2 + #$97F3, // $97F3 + #$97F4, // $97F4 + #$97F5, // $97F5 + #$97F6, // $97F6 + #$97F7, // $97F7 + #$97F8, // $97F8 + #$97F9, // $97F9 + #$97FA, // $97FA + #$97FB, // $97FB + #$97FC, // $97FC + #$97FD, // $97FD + #$97FE, // $97FE + #$97FF, // $97FF + #$9800, // $9800 + #$9801, // $9801 + #$9802, // $9802 + #$9803, // $9803 + #$9804, // $9804 + #$9805, // $9805 + #$9806, // $9806 + #$9807, // $9807 + #$9808, // $9808 + #$9809, // $9809 + #$980A, // $980A + #$980B, // $980B + #$980C, // $980C + #$980D, // $980D + #$980E, // $980E + #$980F, // $980F + #$9810, // $9810 + #$9811, // $9811 + #$9812, // $9812 + #$9813, // $9813 + #$9814, // $9814 + #$9815, // $9815 + #$9816, // $9816 + #$9817, // $9817 + #$9818, // $9818 + #$9819, // $9819 + #$981A, // $981A + #$981B, // $981B + #$981C, // $981C + #$981D, // $981D + #$981E, // $981E + #$981F, // $981F + #$9820, // $9820 + #$9821, // $9821 + #$9822, // $9822 + #$9823, // $9823 + #$9824, // $9824 + #$9825, // $9825 + #$9826, // $9826 + #$9827, // $9827 + #$9828, // $9828 + #$9829, // $9829 + #$982A, // $982A + #$982B, // $982B + #$982C, // $982C + #$982D, // $982D + #$982E, // $982E + #$982F, // $982F + #$9830, // $9830 + #$9831, // $9831 + #$9832, // $9832 + #$9833, // $9833 + #$9834, // $9834 + #$9835, // $9835 + #$9836, // $9836 + #$9837, // $9837 + #$9838, // $9838 + #$9839, // $9839 + #$983A, // $983A + #$983B, // $983B + #$983C, // $983C + #$983D, // $983D + #$983E, // $983E + #$983F, // $983F + #$9840, // $9840 + #$9841, // $9841 + #$9842, // $9842 + #$9843, // $9843 + #$9844, // $9844 + #$9845, // $9845 + #$9846, // $9846 + #$9847, // $9847 + #$9848, // $9848 + #$9849, // $9849 + #$984A, // $984A + #$984B, // $984B + #$984C, // $984C + #$984D, // $984D + #$984E, // $984E + #$984F, // $984F + #$9850, // $9850 + #$9851, // $9851 + #$9852, // $9852 + #$9853, // $9853 + #$9854, // $9854 + #$9855, // $9855 + #$9856, // $9856 + #$9857, // $9857 + #$9858, // $9858 + #$9859, // $9859 + #$985A, // $985A + #$985B, // $985B + #$985C, // $985C + #$985D, // $985D + #$985E, // $985E + #$985F, // $985F + #$9860, // $9860 + #$9861, // $9861 + #$9862, // $9862 + #$9863, // $9863 + #$9864, // $9864 + #$9865, // $9865 + #$9866, // $9866 + #$9867, // $9867 + #$9868, // $9868 + #$9869, // $9869 + #$986A, // $986A + #$986B, // $986B + #$986C, // $986C + #$986D, // $986D + #$986E, // $986E + #$986F, // $986F + #$9870, // $9870 + #$9871, // $9871 + #$9872, // $9872 + #$9873, // $9873 + #$9874, // $9874 + #$9875, // $9875 + #$9876, // $9876 + #$9877, // $9877 + #$9878, // $9878 + #$9879, // $9879 + #$987A, // $987A + #$987B, // $987B + #$987C, // $987C + #$987D, // $987D + #$987E, // $987E + #$987F, // $987F + #$9880, // $9880 + #$9881, // $9881 + #$9882, // $9882 + #$9883, // $9883 + #$9884, // $9884 + #$9885, // $9885 + #$9886, // $9886 + #$9887, // $9887 + #$9888, // $9888 + #$9889, // $9889 + #$988A, // $988A + #$988B, // $988B + #$988C, // $988C + #$988D, // $988D + #$988E, // $988E + #$988F, // $988F + #$9890, // $9890 + #$9891, // $9891 + #$9892, // $9892 + #$9893, // $9893 + #$9894, // $9894 + #$9895, // $9895 + #$9896, // $9896 + #$9897, // $9897 + #$9898, // $9898 + #$9899, // $9899 + #$989A, // $989A + #$989B, // $989B + #$989C, // $989C + #$989D, // $989D + #$989E, // $989E + #$989F, // $989F + #$98A0, // $98A0 + #$98A1, // $98A1 + #$98A2, // $98A2 + #$98A3, // $98A3 + #$98A4, // $98A4 + #$98A5, // $98A5 + #$98A6, // $98A6 + #$98A7, // $98A7 + #$98A8, // $98A8 + #$98A9, // $98A9 + #$98AA, // $98AA + #$98AB, // $98AB + #$98AC, // $98AC + #$98AD, // $98AD + #$98AE, // $98AE + #$98AF, // $98AF + #$98B0, // $98B0 + #$98B1, // $98B1 + #$98B2, // $98B2 + #$98B3, // $98B3 + #$98B4, // $98B4 + #$98B5, // $98B5 + #$98B6, // $98B6 + #$98B7, // $98B7 + #$98B8, // $98B8 + #$98B9, // $98B9 + #$98BA, // $98BA + #$98BB, // $98BB + #$98BC, // $98BC + #$98BD, // $98BD + #$98BE, // $98BE + #$98BF, // $98BF + #$98C0, // $98C0 + #$98C1, // $98C1 + #$98C2, // $98C2 + #$98C3, // $98C3 + #$98C4, // $98C4 + #$98C5, // $98C5 + #$98C6, // $98C6 + #$98C7, // $98C7 + #$98C8, // $98C8 + #$98C9, // $98C9 + #$98CA, // $98CA + #$98CB, // $98CB + #$98CC, // $98CC + #$98CD, // $98CD + #$98CE, // $98CE + #$98CF, // $98CF + #$98D0, // $98D0 + #$98D1, // $98D1 + #$98D2, // $98D2 + #$98D3, // $98D3 + #$98D4, // $98D4 + #$98D5, // $98D5 + #$98D6, // $98D6 + #$98D7, // $98D7 + #$98D8, // $98D8 + #$98D9, // $98D9 + #$98DA, // $98DA + #$98DB, // $98DB + #$98DC, // $98DC + #$98DD, // $98DD + #$98DE, // $98DE + #$98DF, // $98DF + #$98E0, // $98E0 + #$98E1, // $98E1 + #$98E2, // $98E2 + #$98E3, // $98E3 + #$98E4, // $98E4 + #$98E5, // $98E5 + #$98E6, // $98E6 + #$98E7, // $98E7 + #$98E8, // $98E8 + #$98E9, // $98E9 + #$98EA, // $98EA + #$98EB, // $98EB + #$98EC, // $98EC + #$98ED, // $98ED + #$98EE, // $98EE + #$98EF, // $98EF + #$98F0, // $98F0 + #$98F1, // $98F1 + #$98F2, // $98F2 + #$98F3, // $98F3 + #$98F4, // $98F4 + #$98F5, // $98F5 + #$98F6, // $98F6 + #$98F7, // $98F7 + #$98F8, // $98F8 + #$98F9, // $98F9 + #$98FA, // $98FA + #$98FB, // $98FB + #$98FC, // $98FC + #$98FD, // $98FD + #$98FE, // $98FE + #$98FF, // $98FF + #$9900, // $9900 + #$9901, // $9901 + #$9902, // $9902 + #$9903, // $9903 + #$9904, // $9904 + #$9905, // $9905 + #$9906, // $9906 + #$9907, // $9907 + #$9908, // $9908 + #$9909, // $9909 + #$990A, // $990A + #$990B, // $990B + #$990C, // $990C + #$990D, // $990D + #$990E, // $990E + #$990F, // $990F + #$9910, // $9910 + #$9911, // $9911 + #$9912, // $9912 + #$9913, // $9913 + #$9914, // $9914 + #$9915, // $9915 + #$9916, // $9916 + #$9917, // $9917 + #$9918, // $9918 + #$9919, // $9919 + #$991A, // $991A + #$991B, // $991B + #$991C, // $991C + #$991D, // $991D + #$991E, // $991E + #$991F, // $991F + #$9920, // $9920 + #$9921, // $9921 + #$9922, // $9922 + #$9923, // $9923 + #$9924, // $9924 + #$9925, // $9925 + #$9926, // $9926 + #$9927, // $9927 + #$9928, // $9928 + #$9929, // $9929 + #$992A, // $992A + #$992B, // $992B + #$992C, // $992C + #$992D, // $992D + #$992E, // $992E + #$992F, // $992F + #$9930, // $9930 + #$9931, // $9931 + #$9932, // $9932 + #$9933, // $9933 + #$9934, // $9934 + #$9935, // $9935 + #$9936, // $9936 + #$9937, // $9937 + #$9938, // $9938 + #$9939, // $9939 + #$993A, // $993A + #$993B, // $993B + #$993C, // $993C + #$993D, // $993D + #$993E, // $993E + #$993F, // $993F + #$9940, // $9940 + #$9941, // $9941 + #$9942, // $9942 + #$9943, // $9943 + #$9944, // $9944 + #$9945, // $9945 + #$9946, // $9946 + #$9947, // $9947 + #$9948, // $9948 + #$9949, // $9949 + #$994A, // $994A + #$994B, // $994B + #$994C, // $994C + #$994D, // $994D + #$994E, // $994E + #$994F, // $994F + #$9950, // $9950 + #$9951, // $9951 + #$9952, // $9952 + #$9953, // $9953 + #$9954, // $9954 + #$9955, // $9955 + #$9956, // $9956 + #$9957, // $9957 + #$9958, // $9958 + #$9959, // $9959 + #$995A, // $995A + #$995B, // $995B + #$995C, // $995C + #$995D, // $995D + #$995E, // $995E + #$995F, // $995F + #$9960, // $9960 + #$9961, // $9961 + #$9962, // $9962 + #$9963, // $9963 + #$9964, // $9964 + #$9965, // $9965 + #$9966, // $9966 + #$9967, // $9967 + #$9968, // $9968 + #$9969, // $9969 + #$996A, // $996A + #$996B, // $996B + #$996C, // $996C + #$996D, // $996D + #$996E, // $996E + #$996F, // $996F + #$9970, // $9970 + #$9971, // $9971 + #$9972, // $9972 + #$9973, // $9973 + #$9974, // $9974 + #$9975, // $9975 + #$9976, // $9976 + #$9977, // $9977 + #$9978, // $9978 + #$9979, // $9979 + #$997A, // $997A + #$997B, // $997B + #$997C, // $997C + #$997D, // $997D + #$997E, // $997E + #$997F, // $997F + #$9980, // $9980 + #$9981, // $9981 + #$9982, // $9982 + #$9983, // $9983 + #$9984, // $9984 + #$9985, // $9985 + #$9986, // $9986 + #$9987, // $9987 + #$9988, // $9988 + #$9989, // $9989 + #$998A, // $998A + #$998B, // $998B + #$998C, // $998C + #$998D, // $998D + #$998E, // $998E + #$998F, // $998F + #$9990, // $9990 + #$9991, // $9991 + #$9992, // $9992 + #$9993, // $9993 + #$9994, // $9994 + #$9995, // $9995 + #$9996, // $9996 + #$9997, // $9997 + #$9998, // $9998 + #$9999, // $9999 + #$999A, // $999A + #$999B, // $999B + #$999C, // $999C + #$999D, // $999D + #$999E, // $999E + #$999F, // $999F + #$99A0, // $99A0 + #$99A1, // $99A1 + #$99A2, // $99A2 + #$99A3, // $99A3 + #$99A4, // $99A4 + #$99A5, // $99A5 + #$99A6, // $99A6 + #$99A7, // $99A7 + #$99A8, // $99A8 + #$99A9, // $99A9 + #$99AA, // $99AA + #$99AB, // $99AB + #$99AC, // $99AC + #$99AD, // $99AD + #$99AE, // $99AE + #$99AF, // $99AF + #$99B0, // $99B0 + #$99B1, // $99B1 + #$99B2, // $99B2 + #$99B3, // $99B3 + #$99B4, // $99B4 + #$99B5, // $99B5 + #$99B6, // $99B6 + #$99B7, // $99B7 + #$99B8, // $99B8 + #$99B9, // $99B9 + #$99BA, // $99BA + #$99BB, // $99BB + #$99BC, // $99BC + #$99BD, // $99BD + #$99BE, // $99BE + #$99BF, // $99BF + #$99C0, // $99C0 + #$99C1, // $99C1 + #$99C2, // $99C2 + #$99C3, // $99C3 + #$99C4, // $99C4 + #$99C5, // $99C5 + #$99C6, // $99C6 + #$99C7, // $99C7 + #$99C8, // $99C8 + #$99C9, // $99C9 + #$99CA, // $99CA + #$99CB, // $99CB + #$99CC, // $99CC + #$99CD, // $99CD + #$99CE, // $99CE + #$99CF, // $99CF + #$99D0, // $99D0 + #$99D1, // $99D1 + #$99D2, // $99D2 + #$99D3, // $99D3 + #$99D4, // $99D4 + #$99D5, // $99D5 + #$99D6, // $99D6 + #$99D7, // $99D7 + #$99D8, // $99D8 + #$99D9, // $99D9 + #$99DA, // $99DA + #$99DB, // $99DB + #$99DC, // $99DC + #$99DD, // $99DD + #$99DE, // $99DE + #$99DF, // $99DF + #$99E0, // $99E0 + #$99E1, // $99E1 + #$99E2, // $99E2 + #$99E3, // $99E3 + #$99E4, // $99E4 + #$99E5, // $99E5 + #$99E6, // $99E6 + #$99E7, // $99E7 + #$99E8, // $99E8 + #$99E9, // $99E9 + #$99EA, // $99EA + #$99EB, // $99EB + #$99EC, // $99EC + #$99ED, // $99ED + #$99EE, // $99EE + #$99EF, // $99EF + #$99F0, // $99F0 + #$99F1, // $99F1 + #$99F2, // $99F2 + #$99F3, // $99F3 + #$99F4, // $99F4 + #$99F5, // $99F5 + #$99F6, // $99F6 + #$99F7, // $99F7 + #$99F8, // $99F8 + #$99F9, // $99F9 + #$99FA, // $99FA + #$99FB, // $99FB + #$99FC, // $99FC + #$99FD, // $99FD + #$99FE, // $99FE + #$99FF, // $99FF + #$9A00, // $9A00 + #$9A01, // $9A01 + #$9A02, // $9A02 + #$9A03, // $9A03 + #$9A04, // $9A04 + #$9A05, // $9A05 + #$9A06, // $9A06 + #$9A07, // $9A07 + #$9A08, // $9A08 + #$9A09, // $9A09 + #$9A0A, // $9A0A + #$9A0B, // $9A0B + #$9A0C, // $9A0C + #$9A0D, // $9A0D + #$9A0E, // $9A0E + #$9A0F, // $9A0F + #$9A10, // $9A10 + #$9A11, // $9A11 + #$9A12, // $9A12 + #$9A13, // $9A13 + #$9A14, // $9A14 + #$9A15, // $9A15 + #$9A16, // $9A16 + #$9A17, // $9A17 + #$9A18, // $9A18 + #$9A19, // $9A19 + #$9A1A, // $9A1A + #$9A1B, // $9A1B + #$9A1C, // $9A1C + #$9A1D, // $9A1D + #$9A1E, // $9A1E + #$9A1F, // $9A1F + #$9A20, // $9A20 + #$9A21, // $9A21 + #$9A22, // $9A22 + #$9A23, // $9A23 + #$9A24, // $9A24 + #$9A25, // $9A25 + #$9A26, // $9A26 + #$9A27, // $9A27 + #$9A28, // $9A28 + #$9A29, // $9A29 + #$9A2A, // $9A2A + #$9A2B, // $9A2B + #$9A2C, // $9A2C + #$9A2D, // $9A2D + #$9A2E, // $9A2E + #$9A2F, // $9A2F + #$9A30, // $9A30 + #$9A31, // $9A31 + #$9A32, // $9A32 + #$9A33, // $9A33 + #$9A34, // $9A34 + #$9A35, // $9A35 + #$9A36, // $9A36 + #$9A37, // $9A37 + #$9A38, // $9A38 + #$9A39, // $9A39 + #$9A3A, // $9A3A + #$9A3B, // $9A3B + #$9A3C, // $9A3C + #$9A3D, // $9A3D + #$9A3E, // $9A3E + #$9A3F, // $9A3F + #$9A40, // $9A40 + #$9A41, // $9A41 + #$9A42, // $9A42 + #$9A43, // $9A43 + #$9A44, // $9A44 + #$9A45, // $9A45 + #$9A46, // $9A46 + #$9A47, // $9A47 + #$9A48, // $9A48 + #$9A49, // $9A49 + #$9A4A, // $9A4A + #$9A4B, // $9A4B + #$9A4C, // $9A4C + #$9A4D, // $9A4D + #$9A4E, // $9A4E + #$9A4F, // $9A4F + #$9A50, // $9A50 + #$9A51, // $9A51 + #$9A52, // $9A52 + #$9A53, // $9A53 + #$9A54, // $9A54 + #$9A55, // $9A55 + #$9A56, // $9A56 + #$9A57, // $9A57 + #$9A58, // $9A58 + #$9A59, // $9A59 + #$9A5A, // $9A5A + #$9A5B, // $9A5B + #$9A5C, // $9A5C + #$9A5D, // $9A5D + #$9A5E, // $9A5E + #$9A5F, // $9A5F + #$9A60, // $9A60 + #$9A61, // $9A61 + #$9A62, // $9A62 + #$9A63, // $9A63 + #$9A64, // $9A64 + #$9A65, // $9A65 + #$9A66, // $9A66 + #$9A67, // $9A67 + #$9A68, // $9A68 + #$9A69, // $9A69 + #$9A6A, // $9A6A + #$9A6B, // $9A6B + #$9A6C, // $9A6C + #$9A6D, // $9A6D + #$9A6E, // $9A6E + #$9A6F, // $9A6F + #$9A70, // $9A70 + #$9A71, // $9A71 + #$9A72, // $9A72 + #$9A73, // $9A73 + #$9A74, // $9A74 + #$9A75, // $9A75 + #$9A76, // $9A76 + #$9A77, // $9A77 + #$9A78, // $9A78 + #$9A79, // $9A79 + #$9A7A, // $9A7A + #$9A7B, // $9A7B + #$9A7C, // $9A7C + #$9A7D, // $9A7D + #$9A7E, // $9A7E + #$9A7F, // $9A7F + #$9A80, // $9A80 + #$9A81, // $9A81 + #$9A82, // $9A82 + #$9A83, // $9A83 + #$9A84, // $9A84 + #$9A85, // $9A85 + #$9A86, // $9A86 + #$9A87, // $9A87 + #$9A88, // $9A88 + #$9A89, // $9A89 + #$9A8A, // $9A8A + #$9A8B, // $9A8B + #$9A8C, // $9A8C + #$9A8D, // $9A8D + #$9A8E, // $9A8E + #$9A8F, // $9A8F + #$9A90, // $9A90 + #$9A91, // $9A91 + #$9A92, // $9A92 + #$9A93, // $9A93 + #$9A94, // $9A94 + #$9A95, // $9A95 + #$9A96, // $9A96 + #$9A97, // $9A97 + #$9A98, // $9A98 + #$9A99, // $9A99 + #$9A9A, // $9A9A + #$9A9B, // $9A9B + #$9A9C, // $9A9C + #$9A9D, // $9A9D + #$9A9E, // $9A9E + #$9A9F, // $9A9F + #$9AA0, // $9AA0 + #$9AA1, // $9AA1 + #$9AA2, // $9AA2 + #$9AA3, // $9AA3 + #$9AA4, // $9AA4 + #$9AA5, // $9AA5 + #$9AA6, // $9AA6 + #$9AA7, // $9AA7 + #$9AA8, // $9AA8 + #$9AA9, // $9AA9 + #$9AAA, // $9AAA + #$9AAB, // $9AAB + #$9AAC, // $9AAC + #$9AAD, // $9AAD + #$9AAE, // $9AAE + #$9AAF, // $9AAF + #$9AB0, // $9AB0 + #$9AB1, // $9AB1 + #$9AB2, // $9AB2 + #$9AB3, // $9AB3 + #$9AB4, // $9AB4 + #$9AB5, // $9AB5 + #$9AB6, // $9AB6 + #$9AB7, // $9AB7 + #$9AB8, // $9AB8 + #$9AB9, // $9AB9 + #$9ABA, // $9ABA + #$9ABB, // $9ABB + #$9ABC, // $9ABC + #$9ABD, // $9ABD + #$9ABE, // $9ABE + #$9ABF, // $9ABF + #$9AC0, // $9AC0 + #$9AC1, // $9AC1 + #$9AC2, // $9AC2 + #$9AC3, // $9AC3 + #$9AC4, // $9AC4 + #$9AC5, // $9AC5 + #$9AC6, // $9AC6 + #$9AC7, // $9AC7 + #$9AC8, // $9AC8 + #$9AC9, // $9AC9 + #$9ACA, // $9ACA + #$9ACB, // $9ACB + #$9ACC, // $9ACC + #$9ACD, // $9ACD + #$9ACE, // $9ACE + #$9ACF, // $9ACF + #$9AD0, // $9AD0 + #$9AD1, // $9AD1 + #$9AD2, // $9AD2 + #$9AD3, // $9AD3 + #$9AD4, // $9AD4 + #$9AD5, // $9AD5 + #$9AD6, // $9AD6 + #$9AD7, // $9AD7 + #$9AD8, // $9AD8 + #$9AD9, // $9AD9 + #$9ADA, // $9ADA + #$9ADB, // $9ADB + #$9ADC, // $9ADC + #$9ADD, // $9ADD + #$9ADE, // $9ADE + #$9ADF, // $9ADF + #$9AE0, // $9AE0 + #$9AE1, // $9AE1 + #$9AE2, // $9AE2 + #$9AE3, // $9AE3 + #$9AE4, // $9AE4 + #$9AE5, // $9AE5 + #$9AE6, // $9AE6 + #$9AE7, // $9AE7 + #$9AE8, // $9AE8 + #$9AE9, // $9AE9 + #$9AEA, // $9AEA + #$9AEB, // $9AEB + #$9AEC, // $9AEC + #$9AED, // $9AED + #$9AEE, // $9AEE + #$9AEF, // $9AEF + #$9AF0, // $9AF0 + #$9AF1, // $9AF1 + #$9AF2, // $9AF2 + #$9AF3, // $9AF3 + #$9AF4, // $9AF4 + #$9AF5, // $9AF5 + #$9AF6, // $9AF6 + #$9AF7, // $9AF7 + #$9AF8, // $9AF8 + #$9AF9, // $9AF9 + #$9AFA, // $9AFA + #$9AFB, // $9AFB + #$9AFC, // $9AFC + #$9AFD, // $9AFD + #$9AFE, // $9AFE + #$9AFF, // $9AFF + #$9B00, // $9B00 + #$9B01, // $9B01 + #$9B02, // $9B02 + #$9B03, // $9B03 + #$9B04, // $9B04 + #$9B05, // $9B05 + #$9B06, // $9B06 + #$9B07, // $9B07 + #$9B08, // $9B08 + #$9B09, // $9B09 + #$9B0A, // $9B0A + #$9B0B, // $9B0B + #$9B0C, // $9B0C + #$9B0D, // $9B0D + #$9B0E, // $9B0E + #$9B0F, // $9B0F + #$9B10, // $9B10 + #$9B11, // $9B11 + #$9B12, // $9B12 + #$9B13, // $9B13 + #$9B14, // $9B14 + #$9B15, // $9B15 + #$9B16, // $9B16 + #$9B17, // $9B17 + #$9B18, // $9B18 + #$9B19, // $9B19 + #$9B1A, // $9B1A + #$9B1B, // $9B1B + #$9B1C, // $9B1C + #$9B1D, // $9B1D + #$9B1E, // $9B1E + #$9B1F, // $9B1F + #$9B20, // $9B20 + #$9B21, // $9B21 + #$9B22, // $9B22 + #$9B23, // $9B23 + #$9B24, // $9B24 + #$9B25, // $9B25 + #$9B26, // $9B26 + #$9B27, // $9B27 + #$9B28, // $9B28 + #$9B29, // $9B29 + #$9B2A, // $9B2A + #$9B2B, // $9B2B + #$9B2C, // $9B2C + #$9B2D, // $9B2D + #$9B2E, // $9B2E + #$9B2F, // $9B2F + #$9B30, // $9B30 + #$9B31, // $9B31 + #$9B32, // $9B32 + #$9B33, // $9B33 + #$9B34, // $9B34 + #$9B35, // $9B35 + #$9B36, // $9B36 + #$9B37, // $9B37 + #$9B38, // $9B38 + #$9B39, // $9B39 + #$9B3A, // $9B3A + #$9B3B, // $9B3B + #$9B3C, // $9B3C + #$9B3D, // $9B3D + #$9B3E, // $9B3E + #$9B3F, // $9B3F + #$9B40, // $9B40 + #$9B41, // $9B41 + #$9B42, // $9B42 + #$9B43, // $9B43 + #$9B44, // $9B44 + #$9B45, // $9B45 + #$9B46, // $9B46 + #$9B47, // $9B47 + #$9B48, // $9B48 + #$9B49, // $9B49 + #$9B4A, // $9B4A + #$9B4B, // $9B4B + #$9B4C, // $9B4C + #$9B4D, // $9B4D + #$9B4E, // $9B4E + #$9B4F, // $9B4F + #$9B50, // $9B50 + #$9B51, // $9B51 + #$9B52, // $9B52 + #$9B53, // $9B53 + #$9B54, // $9B54 + #$9B55, // $9B55 + #$9B56, // $9B56 + #$9B57, // $9B57 + #$9B58, // $9B58 + #$9B59, // $9B59 + #$9B5A, // $9B5A + #$9B5B, // $9B5B + #$9B5C, // $9B5C + #$9B5D, // $9B5D + #$9B5E, // $9B5E + #$9B5F, // $9B5F + #$9B60, // $9B60 + #$9B61, // $9B61 + #$9B62, // $9B62 + #$9B63, // $9B63 + #$9B64, // $9B64 + #$9B65, // $9B65 + #$9B66, // $9B66 + #$9B67, // $9B67 + #$9B68, // $9B68 + #$9B69, // $9B69 + #$9B6A, // $9B6A + #$9B6B, // $9B6B + #$9B6C, // $9B6C + #$9B6D, // $9B6D + #$9B6E, // $9B6E + #$9B6F, // $9B6F + #$9B70, // $9B70 + #$9B71, // $9B71 + #$9B72, // $9B72 + #$9B73, // $9B73 + #$9B74, // $9B74 + #$9B75, // $9B75 + #$9B76, // $9B76 + #$9B77, // $9B77 + #$9B78, // $9B78 + #$9B79, // $9B79 + #$9B7A, // $9B7A + #$9B7B, // $9B7B + #$9B7C, // $9B7C + #$9B7D, // $9B7D + #$9B7E, // $9B7E + #$9B7F, // $9B7F + #$9B80, // $9B80 + #$9B81, // $9B81 + #$9B82, // $9B82 + #$9B83, // $9B83 + #$9B84, // $9B84 + #$9B85, // $9B85 + #$9B86, // $9B86 + #$9B87, // $9B87 + #$9B88, // $9B88 + #$9B89, // $9B89 + #$9B8A, // $9B8A + #$9B8B, // $9B8B + #$9B8C, // $9B8C + #$9B8D, // $9B8D + #$9B8E, // $9B8E + #$9B8F, // $9B8F + #$9B90, // $9B90 + #$9B91, // $9B91 + #$9B92, // $9B92 + #$9B93, // $9B93 + #$9B94, // $9B94 + #$9B95, // $9B95 + #$9B96, // $9B96 + #$9B97, // $9B97 + #$9B98, // $9B98 + #$9B99, // $9B99 + #$9B9A, // $9B9A + #$9B9B, // $9B9B + #$9B9C, // $9B9C + #$9B9D, // $9B9D + #$9B9E, // $9B9E + #$9B9F, // $9B9F + #$9BA0, // $9BA0 + #$9BA1, // $9BA1 + #$9BA2, // $9BA2 + #$9BA3, // $9BA3 + #$9BA4, // $9BA4 + #$9BA5, // $9BA5 + #$9BA6, // $9BA6 + #$9BA7, // $9BA7 + #$9BA8, // $9BA8 + #$9BA9, // $9BA9 + #$9BAA, // $9BAA + #$9BAB, // $9BAB + #$9BAC, // $9BAC + #$9BAD, // $9BAD + #$9BAE, // $9BAE + #$9BAF, // $9BAF + #$9BB0, // $9BB0 + #$9BB1, // $9BB1 + #$9BB2, // $9BB2 + #$9BB3, // $9BB3 + #$9BB4, // $9BB4 + #$9BB5, // $9BB5 + #$9BB6, // $9BB6 + #$9BB7, // $9BB7 + #$9BB8, // $9BB8 + #$9BB9, // $9BB9 + #$9BBA, // $9BBA + #$9BBB, // $9BBB + #$9BBC, // $9BBC + #$9BBD, // $9BBD + #$9BBE, // $9BBE + #$9BBF, // $9BBF + #$9BC0, // $9BC0 + #$9BC1, // $9BC1 + #$9BC2, // $9BC2 + #$9BC3, // $9BC3 + #$9BC4, // $9BC4 + #$9BC5, // $9BC5 + #$9BC6, // $9BC6 + #$9BC7, // $9BC7 + #$9BC8, // $9BC8 + #$9BC9, // $9BC9 + #$9BCA, // $9BCA + #$9BCB, // $9BCB + #$9BCC, // $9BCC + #$9BCD, // $9BCD + #$9BCE, // $9BCE + #$9BCF, // $9BCF + #$9BD0, // $9BD0 + #$9BD1, // $9BD1 + #$9BD2, // $9BD2 + #$9BD3, // $9BD3 + #$9BD4, // $9BD4 + #$9BD5, // $9BD5 + #$9BD6, // $9BD6 + #$9BD7, // $9BD7 + #$9BD8, // $9BD8 + #$9BD9, // $9BD9 + #$9BDA, // $9BDA + #$9BDB, // $9BDB + #$9BDC, // $9BDC + #$9BDD, // $9BDD + #$9BDE, // $9BDE + #$9BDF, // $9BDF + #$9BE0, // $9BE0 + #$9BE1, // $9BE1 + #$9BE2, // $9BE2 + #$9BE3, // $9BE3 + #$9BE4, // $9BE4 + #$9BE5, // $9BE5 + #$9BE6, // $9BE6 + #$9BE7, // $9BE7 + #$9BE8, // $9BE8 + #$9BE9, // $9BE9 + #$9BEA, // $9BEA + #$9BEB, // $9BEB + #$9BEC, // $9BEC + #$9BED, // $9BED + #$9BEE, // $9BEE + #$9BEF, // $9BEF + #$9BF0, // $9BF0 + #$9BF1, // $9BF1 + #$9BF2, // $9BF2 + #$9BF3, // $9BF3 + #$9BF4, // $9BF4 + #$9BF5, // $9BF5 + #$9BF6, // $9BF6 + #$9BF7, // $9BF7 + #$9BF8, // $9BF8 + #$9BF9, // $9BF9 + #$9BFA, // $9BFA + #$9BFB, // $9BFB + #$9BFC, // $9BFC + #$9BFD, // $9BFD + #$9BFE, // $9BFE + #$9BFF, // $9BFF + #$9C00, // $9C00 + #$9C01, // $9C01 + #$9C02, // $9C02 + #$9C03, // $9C03 + #$9C04, // $9C04 + #$9C05, // $9C05 + #$9C06, // $9C06 + #$9C07, // $9C07 + #$9C08, // $9C08 + #$9C09, // $9C09 + #$9C0A, // $9C0A + #$9C0B, // $9C0B + #$9C0C, // $9C0C + #$9C0D, // $9C0D + #$9C0E, // $9C0E + #$9C0F, // $9C0F + #$9C10, // $9C10 + #$9C11, // $9C11 + #$9C12, // $9C12 + #$9C13, // $9C13 + #$9C14, // $9C14 + #$9C15, // $9C15 + #$9C16, // $9C16 + #$9C17, // $9C17 + #$9C18, // $9C18 + #$9C19, // $9C19 + #$9C1A, // $9C1A + #$9C1B, // $9C1B + #$9C1C, // $9C1C + #$9C1D, // $9C1D + #$9C1E, // $9C1E + #$9C1F, // $9C1F + #$9C20, // $9C20 + #$9C21, // $9C21 + #$9C22, // $9C22 + #$9C23, // $9C23 + #$9C24, // $9C24 + #$9C25, // $9C25 + #$9C26, // $9C26 + #$9C27, // $9C27 + #$9C28, // $9C28 + #$9C29, // $9C29 + #$9C2A, // $9C2A + #$9C2B, // $9C2B + #$9C2C, // $9C2C + #$9C2D, // $9C2D + #$9C2E, // $9C2E + #$9C2F, // $9C2F + #$9C30, // $9C30 + #$9C31, // $9C31 + #$9C32, // $9C32 + #$9C33, // $9C33 + #$9C34, // $9C34 + #$9C35, // $9C35 + #$9C36, // $9C36 + #$9C37, // $9C37 + #$9C38, // $9C38 + #$9C39, // $9C39 + #$9C3A, // $9C3A + #$9C3B, // $9C3B + #$9C3C, // $9C3C + #$9C3D, // $9C3D + #$9C3E, // $9C3E + #$9C3F, // $9C3F + #$9C40, // $9C40 + #$9C41, // $9C41 + #$9C42, // $9C42 + #$9C43, // $9C43 + #$9C44, // $9C44 + #$9C45, // $9C45 + #$9C46, // $9C46 + #$9C47, // $9C47 + #$9C48, // $9C48 + #$9C49, // $9C49 + #$9C4A, // $9C4A + #$9C4B, // $9C4B + #$9C4C, // $9C4C + #$9C4D, // $9C4D + #$9C4E, // $9C4E + #$9C4F, // $9C4F + #$9C50, // $9C50 + #$9C51, // $9C51 + #$9C52, // $9C52 + #$9C53, // $9C53 + #$9C54, // $9C54 + #$9C55, // $9C55 + #$9C56, // $9C56 + #$9C57, // $9C57 + #$9C58, // $9C58 + #$9C59, // $9C59 + #$9C5A, // $9C5A + #$9C5B, // $9C5B + #$9C5C, // $9C5C + #$9C5D, // $9C5D + #$9C5E, // $9C5E + #$9C5F, // $9C5F + #$9C60, // $9C60 + #$9C61, // $9C61 + #$9C62, // $9C62 + #$9C63, // $9C63 + #$9C64, // $9C64 + #$9C65, // $9C65 + #$9C66, // $9C66 + #$9C67, // $9C67 + #$9C68, // $9C68 + #$9C69, // $9C69 + #$9C6A, // $9C6A + #$9C6B, // $9C6B + #$9C6C, // $9C6C + #$9C6D, // $9C6D + #$9C6E, // $9C6E + #$9C6F, // $9C6F + #$9C70, // $9C70 + #$9C71, // $9C71 + #$9C72, // $9C72 + #$9C73, // $9C73 + #$9C74, // $9C74 + #$9C75, // $9C75 + #$9C76, // $9C76 + #$9C77, // $9C77 + #$9C78, // $9C78 + #$9C79, // $9C79 + #$9C7A, // $9C7A + #$9C7B, // $9C7B + #$9C7C, // $9C7C + #$9C7D, // $9C7D + #$9C7E, // $9C7E + #$9C7F, // $9C7F + #$9C80, // $9C80 + #$9C81, // $9C81 + #$9C82, // $9C82 + #$9C83, // $9C83 + #$9C84, // $9C84 + #$9C85, // $9C85 + #$9C86, // $9C86 + #$9C87, // $9C87 + #$9C88, // $9C88 + #$9C89, // $9C89 + #$9C8A, // $9C8A + #$9C8B, // $9C8B + #$9C8C, // $9C8C + #$9C8D, // $9C8D + #$9C8E, // $9C8E + #$9C8F, // $9C8F + #$9C90, // $9C90 + #$9C91, // $9C91 + #$9C92, // $9C92 + #$9C93, // $9C93 + #$9C94, // $9C94 + #$9C95, // $9C95 + #$9C96, // $9C96 + #$9C97, // $9C97 + #$9C98, // $9C98 + #$9C99, // $9C99 + #$9C9A, // $9C9A + #$9C9B, // $9C9B + #$9C9C, // $9C9C + #$9C9D, // $9C9D + #$9C9E, // $9C9E + #$9C9F, // $9C9F + #$9CA0, // $9CA0 + #$9CA1, // $9CA1 + #$9CA2, // $9CA2 + #$9CA3, // $9CA3 + #$9CA4, // $9CA4 + #$9CA5, // $9CA5 + #$9CA6, // $9CA6 + #$9CA7, // $9CA7 + #$9CA8, // $9CA8 + #$9CA9, // $9CA9 + #$9CAA, // $9CAA + #$9CAB, // $9CAB + #$9CAC, // $9CAC + #$9CAD, // $9CAD + #$9CAE, // $9CAE + #$9CAF, // $9CAF + #$9CB0, // $9CB0 + #$9CB1, // $9CB1 + #$9CB2, // $9CB2 + #$9CB3, // $9CB3 + #$9CB4, // $9CB4 + #$9CB5, // $9CB5 + #$9CB6, // $9CB6 + #$9CB7, // $9CB7 + #$9CB8, // $9CB8 + #$9CB9, // $9CB9 + #$9CBA, // $9CBA + #$9CBB, // $9CBB + #$9CBC, // $9CBC + #$9CBD, // $9CBD + #$9CBE, // $9CBE + #$9CBF, // $9CBF + #$9CC0, // $9CC0 + #$9CC1, // $9CC1 + #$9CC2, // $9CC2 + #$9CC3, // $9CC3 + #$9CC4, // $9CC4 + #$9CC5, // $9CC5 + #$9CC6, // $9CC6 + #$9CC7, // $9CC7 + #$9CC8, // $9CC8 + #$9CC9, // $9CC9 + #$9CCA, // $9CCA + #$9CCB, // $9CCB + #$9CCC, // $9CCC + #$9CCD, // $9CCD + #$9CCE, // $9CCE + #$9CCF, // $9CCF + #$9CD0, // $9CD0 + #$9CD1, // $9CD1 + #$9CD2, // $9CD2 + #$9CD3, // $9CD3 + #$9CD4, // $9CD4 + #$9CD5, // $9CD5 + #$9CD6, // $9CD6 + #$9CD7, // $9CD7 + #$9CD8, // $9CD8 + #$9CD9, // $9CD9 + #$9CDA, // $9CDA + #$9CDB, // $9CDB + #$9CDC, // $9CDC + #$9CDD, // $9CDD + #$9CDE, // $9CDE + #$9CDF, // $9CDF + #$9CE0, // $9CE0 + #$9CE1, // $9CE1 + #$9CE2, // $9CE2 + #$9CE3, // $9CE3 + #$9CE4, // $9CE4 + #$9CE5, // $9CE5 + #$9CE6, // $9CE6 + #$9CE7, // $9CE7 + #$9CE8, // $9CE8 + #$9CE9, // $9CE9 + #$9CEA, // $9CEA + #$9CEB, // $9CEB + #$9CEC, // $9CEC + #$9CED, // $9CED + #$9CEE, // $9CEE + #$9CEF, // $9CEF + #$9CF0, // $9CF0 + #$9CF1, // $9CF1 + #$9CF2, // $9CF2 + #$9CF3, // $9CF3 + #$9CF4, // $9CF4 + #$9CF5, // $9CF5 + #$9CF6, // $9CF6 + #$9CF7, // $9CF7 + #$9CF8, // $9CF8 + #$9CF9, // $9CF9 + #$9CFA, // $9CFA + #$9CFB, // $9CFB + #$9CFC, // $9CFC + #$9CFD, // $9CFD + #$9CFE, // $9CFE + #$9CFF, // $9CFF + #$9D00, // $9D00 + #$9D01, // $9D01 + #$9D02, // $9D02 + #$9D03, // $9D03 + #$9D04, // $9D04 + #$9D05, // $9D05 + #$9D06, // $9D06 + #$9D07, // $9D07 + #$9D08, // $9D08 + #$9D09, // $9D09 + #$9D0A, // $9D0A + #$9D0B, // $9D0B + #$9D0C, // $9D0C + #$9D0D, // $9D0D + #$9D0E, // $9D0E + #$9D0F, // $9D0F + #$9D10, // $9D10 + #$9D11, // $9D11 + #$9D12, // $9D12 + #$9D13, // $9D13 + #$9D14, // $9D14 + #$9D15, // $9D15 + #$9D16, // $9D16 + #$9D17, // $9D17 + #$9D18, // $9D18 + #$9D19, // $9D19 + #$9D1A, // $9D1A + #$9D1B, // $9D1B + #$9D1C, // $9D1C + #$9D1D, // $9D1D + #$9D1E, // $9D1E + #$9D1F, // $9D1F + #$9D20, // $9D20 + #$9D21, // $9D21 + #$9D22, // $9D22 + #$9D23, // $9D23 + #$9D24, // $9D24 + #$9D25, // $9D25 + #$9D26, // $9D26 + #$9D27, // $9D27 + #$9D28, // $9D28 + #$9D29, // $9D29 + #$9D2A, // $9D2A + #$9D2B, // $9D2B + #$9D2C, // $9D2C + #$9D2D, // $9D2D + #$9D2E, // $9D2E + #$9D2F, // $9D2F + #$9D30, // $9D30 + #$9D31, // $9D31 + #$9D32, // $9D32 + #$9D33, // $9D33 + #$9D34, // $9D34 + #$9D35, // $9D35 + #$9D36, // $9D36 + #$9D37, // $9D37 + #$9D38, // $9D38 + #$9D39, // $9D39 + #$9D3A, // $9D3A + #$9D3B, // $9D3B + #$9D3C, // $9D3C + #$9D3D, // $9D3D + #$9D3E, // $9D3E + #$9D3F, // $9D3F + #$9D40, // $9D40 + #$9D41, // $9D41 + #$9D42, // $9D42 + #$9D43, // $9D43 + #$9D44, // $9D44 + #$9D45, // $9D45 + #$9D46, // $9D46 + #$9D47, // $9D47 + #$9D48, // $9D48 + #$9D49, // $9D49 + #$9D4A, // $9D4A + #$9D4B, // $9D4B + #$9D4C, // $9D4C + #$9D4D, // $9D4D + #$9D4E, // $9D4E + #$9D4F, // $9D4F + #$9D50, // $9D50 + #$9D51, // $9D51 + #$9D52, // $9D52 + #$9D53, // $9D53 + #$9D54, // $9D54 + #$9D55, // $9D55 + #$9D56, // $9D56 + #$9D57, // $9D57 + #$9D58, // $9D58 + #$9D59, // $9D59 + #$9D5A, // $9D5A + #$9D5B, // $9D5B + #$9D5C, // $9D5C + #$9D5D, // $9D5D + #$9D5E, // $9D5E + #$9D5F, // $9D5F + #$9D60, // $9D60 + #$9D61, // $9D61 + #$9D62, // $9D62 + #$9D63, // $9D63 + #$9D64, // $9D64 + #$9D65, // $9D65 + #$9D66, // $9D66 + #$9D67, // $9D67 + #$9D68, // $9D68 + #$9D69, // $9D69 + #$9D6A, // $9D6A + #$9D6B, // $9D6B + #$9D6C, // $9D6C + #$9D6D, // $9D6D + #$9D6E, // $9D6E + #$9D6F, // $9D6F + #$9D70, // $9D70 + #$9D71, // $9D71 + #$9D72, // $9D72 + #$9D73, // $9D73 + #$9D74, // $9D74 + #$9D75, // $9D75 + #$9D76, // $9D76 + #$9D77, // $9D77 + #$9D78, // $9D78 + #$9D79, // $9D79 + #$9D7A, // $9D7A + #$9D7B, // $9D7B + #$9D7C, // $9D7C + #$9D7D, // $9D7D + #$9D7E, // $9D7E + #$9D7F, // $9D7F + #$9D80, // $9D80 + #$9D81, // $9D81 + #$9D82, // $9D82 + #$9D83, // $9D83 + #$9D84, // $9D84 + #$9D85, // $9D85 + #$9D86, // $9D86 + #$9D87, // $9D87 + #$9D88, // $9D88 + #$9D89, // $9D89 + #$9D8A, // $9D8A + #$9D8B, // $9D8B + #$9D8C, // $9D8C + #$9D8D, // $9D8D + #$9D8E, // $9D8E + #$9D8F, // $9D8F + #$9D90, // $9D90 + #$9D91, // $9D91 + #$9D92, // $9D92 + #$9D93, // $9D93 + #$9D94, // $9D94 + #$9D95, // $9D95 + #$9D96, // $9D96 + #$9D97, // $9D97 + #$9D98, // $9D98 + #$9D99, // $9D99 + #$9D9A, // $9D9A + #$9D9B, // $9D9B + #$9D9C, // $9D9C + #$9D9D, // $9D9D + #$9D9E, // $9D9E + #$9D9F, // $9D9F + #$9DA0, // $9DA0 + #$9DA1, // $9DA1 + #$9DA2, // $9DA2 + #$9DA3, // $9DA3 + #$9DA4, // $9DA4 + #$9DA5, // $9DA5 + #$9DA6, // $9DA6 + #$9DA7, // $9DA7 + #$9DA8, // $9DA8 + #$9DA9, // $9DA9 + #$9DAA, // $9DAA + #$9DAB, // $9DAB + #$9DAC, // $9DAC + #$9DAD, // $9DAD + #$9DAE, // $9DAE + #$9DAF, // $9DAF + #$9DB0, // $9DB0 + #$9DB1, // $9DB1 + #$9DB2, // $9DB2 + #$9DB3, // $9DB3 + #$9DB4, // $9DB4 + #$9DB5, // $9DB5 + #$9DB6, // $9DB6 + #$9DB7, // $9DB7 + #$9DB8, // $9DB8 + #$9DB9, // $9DB9 + #$9DBA, // $9DBA + #$9DBB, // $9DBB + #$9DBC, // $9DBC + #$9DBD, // $9DBD + #$9DBE, // $9DBE + #$9DBF, // $9DBF + #$9DC0, // $9DC0 + #$9DC1, // $9DC1 + #$9DC2, // $9DC2 + #$9DC3, // $9DC3 + #$9DC4, // $9DC4 + #$9DC5, // $9DC5 + #$9DC6, // $9DC6 + #$9DC7, // $9DC7 + #$9DC8, // $9DC8 + #$9DC9, // $9DC9 + #$9DCA, // $9DCA + #$9DCB, // $9DCB + #$9DCC, // $9DCC + #$9DCD, // $9DCD + #$9DCE, // $9DCE + #$9DCF, // $9DCF + #$9DD0, // $9DD0 + #$9DD1, // $9DD1 + #$9DD2, // $9DD2 + #$9DD3, // $9DD3 + #$9DD4, // $9DD4 + #$9DD5, // $9DD5 + #$9DD6, // $9DD6 + #$9DD7, // $9DD7 + #$9DD8, // $9DD8 + #$9DD9, // $9DD9 + #$9DDA, // $9DDA + #$9DDB, // $9DDB + #$9DDC, // $9DDC + #$9DDD, // $9DDD + #$9DDE, // $9DDE + #$9DDF, // $9DDF + #$9DE0, // $9DE0 + #$9DE1, // $9DE1 + #$9DE2, // $9DE2 + #$9DE3, // $9DE3 + #$9DE4, // $9DE4 + #$9DE5, // $9DE5 + #$9DE6, // $9DE6 + #$9DE7, // $9DE7 + #$9DE8, // $9DE8 + #$9DE9, // $9DE9 + #$9DEA, // $9DEA + #$9DEB, // $9DEB + #$9DEC, // $9DEC + #$9DED, // $9DED + #$9DEE, // $9DEE + #$9DEF, // $9DEF + #$9DF0, // $9DF0 + #$9DF1, // $9DF1 + #$9DF2, // $9DF2 + #$9DF3, // $9DF3 + #$9DF4, // $9DF4 + #$9DF5, // $9DF5 + #$9DF6, // $9DF6 + #$9DF7, // $9DF7 + #$9DF8, // $9DF8 + #$9DF9, // $9DF9 + #$9DFA, // $9DFA + #$9DFB, // $9DFB + #$9DFC, // $9DFC + #$9DFD, // $9DFD + #$9DFE, // $9DFE + #$9DFF, // $9DFF + #$9E00, // $9E00 + #$9E01, // $9E01 + #$9E02, // $9E02 + #$9E03, // $9E03 + #$9E04, // $9E04 + #$9E05, // $9E05 + #$9E06, // $9E06 + #$9E07, // $9E07 + #$9E08, // $9E08 + #$9E09, // $9E09 + #$9E0A, // $9E0A + #$9E0B, // $9E0B + #$9E0C, // $9E0C + #$9E0D, // $9E0D + #$9E0E, // $9E0E + #$9E0F, // $9E0F + #$9E10, // $9E10 + #$9E11, // $9E11 + #$9E12, // $9E12 + #$9E13, // $9E13 + #$9E14, // $9E14 + #$9E15, // $9E15 + #$9E16, // $9E16 + #$9E17, // $9E17 + #$9E18, // $9E18 + #$9E19, // $9E19 + #$9E1A, // $9E1A + #$9E1B, // $9E1B + #$9E1C, // $9E1C + #$9E1D, // $9E1D + #$9E1E, // $9E1E + #$9E1F, // $9E1F + #$9E20, // $9E20 + #$9E21, // $9E21 + #$9E22, // $9E22 + #$9E23, // $9E23 + #$9E24, // $9E24 + #$9E25, // $9E25 + #$9E26, // $9E26 + #$9E27, // $9E27 + #$9E28, // $9E28 + #$9E29, // $9E29 + #$9E2A, // $9E2A + #$9E2B, // $9E2B + #$9E2C, // $9E2C + #$9E2D, // $9E2D + #$9E2E, // $9E2E + #$9E2F, // $9E2F + #$9E30, // $9E30 + #$9E31, // $9E31 + #$9E32, // $9E32 + #$9E33, // $9E33 + #$9E34, // $9E34 + #$9E35, // $9E35 + #$9E36, // $9E36 + #$9E37, // $9E37 + #$9E38, // $9E38 + #$9E39, // $9E39 + #$9E3A, // $9E3A + #$9E3B, // $9E3B + #$9E3C, // $9E3C + #$9E3D, // $9E3D + #$9E3E, // $9E3E + #$9E3F, // $9E3F + #$9E40, // $9E40 + #$9E41, // $9E41 + #$9E42, // $9E42 + #$9E43, // $9E43 + #$9E44, // $9E44 + #$9E45, // $9E45 + #$9E46, // $9E46 + #$9E47, // $9E47 + #$9E48, // $9E48 + #$9E49, // $9E49 + #$9E4A, // $9E4A + #$9E4B, // $9E4B + #$9E4C, // $9E4C + #$9E4D, // $9E4D + #$9E4E, // $9E4E + #$9E4F, // $9E4F + #$9E50, // $9E50 + #$9E51, // $9E51 + #$9E52, // $9E52 + #$9E53, // $9E53 + #$9E54, // $9E54 + #$9E55, // $9E55 + #$9E56, // $9E56 + #$9E57, // $9E57 + #$9E58, // $9E58 + #$9E59, // $9E59 + #$9E5A, // $9E5A + #$9E5B, // $9E5B + #$9E5C, // $9E5C + #$9E5D, // $9E5D + #$9E5E, // $9E5E + #$9E5F, // $9E5F + #$9E60, // $9E60 + #$9E61, // $9E61 + #$9E62, // $9E62 + #$9E63, // $9E63 + #$9E64, // $9E64 + #$9E65, // $9E65 + #$9E66, // $9E66 + #$9E67, // $9E67 + #$9E68, // $9E68 + #$9E69, // $9E69 + #$9E6A, // $9E6A + #$9E6B, // $9E6B + #$9E6C, // $9E6C + #$9E6D, // $9E6D + #$9E6E, // $9E6E + #$9E6F, // $9E6F + #$9E70, // $9E70 + #$9E71, // $9E71 + #$9E72, // $9E72 + #$9E73, // $9E73 + #$9E74, // $9E74 + #$9E75, // $9E75 + #$9E76, // $9E76 + #$9E77, // $9E77 + #$9E78, // $9E78 + #$9E79, // $9E79 + #$9E7A, // $9E7A + #$9E7B, // $9E7B + #$9E7C, // $9E7C + #$9E7D, // $9E7D + #$9E7E, // $9E7E + #$9E7F, // $9E7F + #$9E80, // $9E80 + #$9E81, // $9E81 + #$9E82, // $9E82 + #$9E83, // $9E83 + #$9E84, // $9E84 + #$9E85, // $9E85 + #$9E86, // $9E86 + #$9E87, // $9E87 + #$9E88, // $9E88 + #$9E89, // $9E89 + #$9E8A, // $9E8A + #$9E8B, // $9E8B + #$9E8C, // $9E8C + #$9E8D, // $9E8D + #$9E8E, // $9E8E + #$9E8F, // $9E8F + #$9E90, // $9E90 + #$9E91, // $9E91 + #$9E92, // $9E92 + #$9E93, // $9E93 + #$9E94, // $9E94 + #$9E95, // $9E95 + #$9E96, // $9E96 + #$9E97, // $9E97 + #$9E98, // $9E98 + #$9E99, // $9E99 + #$9E9A, // $9E9A + #$9E9B, // $9E9B + #$9E9C, // $9E9C + #$9E9D, // $9E9D + #$9E9E, // $9E9E + #$9E9F, // $9E9F + #$9EA0, // $9EA0 + #$9EA1, // $9EA1 + #$9EA2, // $9EA2 + #$9EA3, // $9EA3 + #$9EA4, // $9EA4 + #$9EA5, // $9EA5 + #$9EA6, // $9EA6 + #$9EA7, // $9EA7 + #$9EA8, // $9EA8 + #$9EA9, // $9EA9 + #$9EAA, // $9EAA + #$9EAB, // $9EAB + #$9EAC, // $9EAC + #$9EAD, // $9EAD + #$9EAE, // $9EAE + #$9EAF, // $9EAF + #$9EB0, // $9EB0 + #$9EB1, // $9EB1 + #$9EB2, // $9EB2 + #$9EB3, // $9EB3 + #$9EB4, // $9EB4 + #$9EB5, // $9EB5 + #$9EB6, // $9EB6 + #$9EB7, // $9EB7 + #$9EB8, // $9EB8 + #$9EB9, // $9EB9 + #$9EBA, // $9EBA + #$9EBB, // $9EBB + #$9EBC, // $9EBC + #$9EBD, // $9EBD + #$9EBE, // $9EBE + #$9EBF, // $9EBF + #$9EC0, // $9EC0 + #$9EC1, // $9EC1 + #$9EC2, // $9EC2 + #$9EC3, // $9EC3 + #$9EC4, // $9EC4 + #$9EC5, // $9EC5 + #$9EC6, // $9EC6 + #$9EC7, // $9EC7 + #$9EC8, // $9EC8 + #$9EC9, // $9EC9 + #$9ECA, // $9ECA + #$9ECB, // $9ECB + #$9ECC, // $9ECC + #$9ECD, // $9ECD + #$9ECE, // $9ECE + #$9ECF, // $9ECF + #$9ED0, // $9ED0 + #$9ED1, // $9ED1 + #$9ED2, // $9ED2 + #$9ED3, // $9ED3 + #$9ED4, // $9ED4 + #$9ED5, // $9ED5 + #$9ED6, // $9ED6 + #$9ED7, // $9ED7 + #$9ED8, // $9ED8 + #$9ED9, // $9ED9 + #$9EDA, // $9EDA + #$9EDB, // $9EDB + #$9EDC, // $9EDC + #$9EDD, // $9EDD + #$9EDE, // $9EDE + #$9EDF, // $9EDF + #$9EE0, // $9EE0 + #$9EE1, // $9EE1 + #$9EE2, // $9EE2 + #$9EE3, // $9EE3 + #$9EE4, // $9EE4 + #$9EE5, // $9EE5 + #$9EE6, // $9EE6 + #$9EE7, // $9EE7 + #$9EE8, // $9EE8 + #$9EE9, // $9EE9 + #$9EEA, // $9EEA + #$9EEB, // $9EEB + #$9EEC, // $9EEC + #$9EED, // $9EED + #$9EEE, // $9EEE + #$9EEF, // $9EEF + #$9EF0, // $9EF0 + #$9EF1, // $9EF1 + #$9EF2, // $9EF2 + #$9EF3, // $9EF3 + #$9EF4, // $9EF4 + #$9EF5, // $9EF5 + #$9EF6, // $9EF6 + #$9EF7, // $9EF7 + #$9EF8, // $9EF8 + #$9EF9, // $9EF9 + #$9EFA, // $9EFA + #$9EFB, // $9EFB + #$9EFC, // $9EFC + #$9EFD, // $9EFD + #$9EFE, // $9EFE + #$9EFF, // $9EFF + #$9F00, // $9F00 + #$9F01, // $9F01 + #$9F02, // $9F02 + #$9F03, // $9F03 + #$9F04, // $9F04 + #$9F05, // $9F05 + #$9F06, // $9F06 + #$9F07, // $9F07 + #$9F08, // $9F08 + #$9F09, // $9F09 + #$9F0A, // $9F0A + #$9F0B, // $9F0B + #$9F0C, // $9F0C + #$9F0D, // $9F0D + #$9F0E, // $9F0E + #$9F0F, // $9F0F + #$9F10, // $9F10 + #$9F11, // $9F11 + #$9F12, // $9F12 + #$9F13, // $9F13 + #$9F14, // $9F14 + #$9F15, // $9F15 + #$9F16, // $9F16 + #$9F17, // $9F17 + #$9F18, // $9F18 + #$9F19, // $9F19 + #$9F1A, // $9F1A + #$9F1B, // $9F1B + #$9F1C, // $9F1C + #$9F1D, // $9F1D + #$9F1E, // $9F1E + #$9F1F, // $9F1F + #$9F20, // $9F20 + #$9F21, // $9F21 + #$9F22, // $9F22 + #$9F23, // $9F23 + #$9F24, // $9F24 + #$9F25, // $9F25 + #$9F26, // $9F26 + #$9F27, // $9F27 + #$9F28, // $9F28 + #$9F29, // $9F29 + #$9F2A, // $9F2A + #$9F2B, // $9F2B + #$9F2C, // $9F2C + #$9F2D, // $9F2D + #$9F2E, // $9F2E + #$9F2F, // $9F2F + #$9F30, // $9F30 + #$9F31, // $9F31 + #$9F32, // $9F32 + #$9F33, // $9F33 + #$9F34, // $9F34 + #$9F35, // $9F35 + #$9F36, // $9F36 + #$9F37, // $9F37 + #$9F38, // $9F38 + #$9F39, // $9F39 + #$9F3A, // $9F3A + #$9F3B, // $9F3B + #$9F3C, // $9F3C + #$9F3D, // $9F3D + #$9F3E, // $9F3E + #$9F3F, // $9F3F + #$9F40, // $9F40 + #$9F41, // $9F41 + #$9F42, // $9F42 + #$9F43, // $9F43 + #$9F44, // $9F44 + #$9F45, // $9F45 + #$9F46, // $9F46 + #$9F47, // $9F47 + #$9F48, // $9F48 + #$9F49, // $9F49 + #$9F4A, // $9F4A + #$9F4B, // $9F4B + #$9F4C, // $9F4C + #$9F4D, // $9F4D + #$9F4E, // $9F4E + #$9F4F, // $9F4F + #$9F50, // $9F50 + #$9F51, // $9F51 + #$9F52, // $9F52 + #$9F53, // $9F53 + #$9F54, // $9F54 + #$9F55, // $9F55 + #$9F56, // $9F56 + #$9F57, // $9F57 + #$9F58, // $9F58 + #$9F59, // $9F59 + #$9F5A, // $9F5A + #$9F5B, // $9F5B + #$9F5C, // $9F5C + #$9F5D, // $9F5D + #$9F5E, // $9F5E + #$9F5F, // $9F5F + #$9F60, // $9F60 + #$9F61, // $9F61 + #$9F62, // $9F62 + #$9F63, // $9F63 + #$9F64, // $9F64 + #$9F65, // $9F65 + #$9F66, // $9F66 + #$9F67, // $9F67 + #$9F68, // $9F68 + #$9F69, // $9F69 + #$9F6A, // $9F6A + #$9F6B, // $9F6B + #$9F6C, // $9F6C + #$9F6D, // $9F6D + #$9F6E, // $9F6E + #$9F6F, // $9F6F + #$9F70, // $9F70 + #$9F71, // $9F71 + #$9F72, // $9F72 + #$9F73, // $9F73 + #$9F74, // $9F74 + #$9F75, // $9F75 + #$9F76, // $9F76 + #$9F77, // $9F77 + #$9F78, // $9F78 + #$9F79, // $9F79 + #$9F7A, // $9F7A + #$9F7B, // $9F7B + #$9F7C, // $9F7C + #$9F7D, // $9F7D + #$9F7E, // $9F7E + #$9F7F, // $9F7F + #$9F80, // $9F80 + #$9F81, // $9F81 + #$9F82, // $9F82 + #$9F83, // $9F83 + #$9F84, // $9F84 + #$9F85, // $9F85 + #$9F86, // $9F86 + #$9F87, // $9F87 + #$9F88, // $9F88 + #$9F89, // $9F89 + #$9F8A, // $9F8A + #$9F8B, // $9F8B + #$9F8C, // $9F8C + #$9F8D, // $9F8D + #$9F8E, // $9F8E + #$9F8F, // $9F8F + #$9F90, // $9F90 + #$9F91, // $9F91 + #$9F92, // $9F92 + #$9F93, // $9F93 + #$9F94, // $9F94 + #$9F95, // $9F95 + #$9F96, // $9F96 + #$9F97, // $9F97 + #$9F98, // $9F98 + #$9F99, // $9F99 + #$9F9A, // $9F9A + #$9F9B, // $9F9B + #$9F9C, // $9F9C + #$9F9D, // $9F9D + #$9F9E, // $9F9E + #$9F9F, // $9F9F + #$9FA0, // $9FA0 + #$9FA1, // $9FA1 + #$9FA2, // $9FA2 + #$9FA3, // $9FA3 + #$9FA4, // $9FA4 + #$9FA5, // $9FA5 + #$9FA6, // $9FA6 + #$9FA7, // $9FA7 + #$9FA8, // $9FA8 + #$9FA9, // $9FA9 + #$9FAA, // $9FAA + #$9FAB, // $9FAB + #$9FAC, // $9FAC + #$9FAD, // $9FAD + #$9FAE, // $9FAE + #$9FAF, // $9FAF + #$9FB0, // $9FB0 + #$9FB1, // $9FB1 + #$9FB2, // $9FB2 + #$9FB3, // $9FB3 + #$9FB4, // $9FB4 + #$9FB5, // $9FB5 + #$9FB6, // $9FB6 + #$9FB7, // $9FB7 + #$9FB8, // $9FB8 + #$9FB9, // $9FB9 + #$9FBA, // $9FBA + #$9FBB, // $9FBB + #$9FBC, // $9FBC + #$9FBD, // $9FBD + #$9FBE, // $9FBE + #$9FBF, // $9FBF + #$9FC0, // $9FC0 + #$9FC1, // $9FC1 + #$9FC2, // $9FC2 + #$9FC3, // $9FC3 + #$9FC4, // $9FC4 + #$9FC5, // $9FC5 + #$9FC6, // $9FC6 + #$9FC7, // $9FC7 + #$9FC8, // $9FC8 + #$9FC9, // $9FC9 + #$9FCA, // $9FCA + #$9FCB, // $9FCB + #$9FCC, // $9FCC + #$9FCD, // $9FCD + #$9FCE, // $9FCE + #$9FCF, // $9FCF + #$9FD0, // $9FD0 + #$9FD1, // $9FD1 + #$9FD2, // $9FD2 + #$9FD3, // $9FD3 + #$9FD4, // $9FD4 + #$9FD5, // $9FD5 + #$9FD6, // $9FD6 + #$9FD7, // $9FD7 + #$9FD8, // $9FD8 + #$9FD9, // $9FD9 + #$9FDA, // $9FDA + #$9FDB, // $9FDB + #$9FDC, // $9FDC + #$9FDD, // $9FDD + #$9FDE, // $9FDE + #$9FDF, // $9FDF + #$9FE0, // $9FE0 + #$9FE1, // $9FE1 + #$9FE2, // $9FE2 + #$9FE3, // $9FE3 + #$9FE4, // $9FE4 + #$9FE5, // $9FE5 + #$9FE6, // $9FE6 + #$9FE7, // $9FE7 + #$9FE8, // $9FE8 + #$9FE9, // $9FE9 + #$9FEA, // $9FEA + #$9FEB, // $9FEB + #$9FEC, // $9FEC + #$9FED, // $9FED + #$9FEE, // $9FEE + #$9FEF, // $9FEF + #$9FF0, // $9FF0 + #$9FF1, // $9FF1 + #$9FF2, // $9FF2 + #$9FF3, // $9FF3 + #$9FF4, // $9FF4 + #$9FF5, // $9FF5 + #$9FF6, // $9FF6 + #$9FF7, // $9FF7 + #$9FF8, // $9FF8 + #$9FF9, // $9FF9 + #$9FFA, // $9FFA + #$9FFB, // $9FFB + #$9FFC, // $9FFC + #$9FFD, // $9FFD + #$9FFE, // $9FFE + #$9FFF, // $9FFF + #$A000, // $A000 + #$A001, // $A001 + #$A002, // $A002 + #$A003, // $A003 + #$A004, // $A004 + #$A005, // $A005 + #$A006, // $A006 + #$A007, // $A007 + #$A008, // $A008 + #$A009, // $A009 + #$A00A, // $A00A + #$A00B, // $A00B + #$A00C, // $A00C + #$A00D, // $A00D + #$A00E, // $A00E + #$A00F, // $A00F + #$A010, // $A010 + #$A011, // $A011 + #$A012, // $A012 + #$A013, // $A013 + #$A014, // $A014 + #$A015, // $A015 + #$A016, // $A016 + #$A017, // $A017 + #$A018, // $A018 + #$A019, // $A019 + #$A01A, // $A01A + #$A01B, // $A01B + #$A01C, // $A01C + #$A01D, // $A01D + #$A01E, // $A01E + #$A01F, // $A01F + #$A020, // $A020 + #$A021, // $A021 + #$A022, // $A022 + #$A023, // $A023 + #$A024, // $A024 + #$A025, // $A025 + #$A026, // $A026 + #$A027, // $A027 + #$A028, // $A028 + #$A029, // $A029 + #$A02A, // $A02A + #$A02B, // $A02B + #$A02C, // $A02C + #$A02D, // $A02D + #$A02E, // $A02E + #$A02F, // $A02F + #$A030, // $A030 + #$A031, // $A031 + #$A032, // $A032 + #$A033, // $A033 + #$A034, // $A034 + #$A035, // $A035 + #$A036, // $A036 + #$A037, // $A037 + #$A038, // $A038 + #$A039, // $A039 + #$A03A, // $A03A + #$A03B, // $A03B + #$A03C, // $A03C + #$A03D, // $A03D + #$A03E, // $A03E + #$A03F, // $A03F + #$A040, // $A040 + #$A041, // $A041 + #$A042, // $A042 + #$A043, // $A043 + #$A044, // $A044 + #$A045, // $A045 + #$A046, // $A046 + #$A047, // $A047 + #$A048, // $A048 + #$A049, // $A049 + #$A04A, // $A04A + #$A04B, // $A04B + #$A04C, // $A04C + #$A04D, // $A04D + #$A04E, // $A04E + #$A04F, // $A04F + #$A050, // $A050 + #$A051, // $A051 + #$A052, // $A052 + #$A053, // $A053 + #$A054, // $A054 + #$A055, // $A055 + #$A056, // $A056 + #$A057, // $A057 + #$A058, // $A058 + #$A059, // $A059 + #$A05A, // $A05A + #$A05B, // $A05B + #$A05C, // $A05C + #$A05D, // $A05D + #$A05E, // $A05E + #$A05F, // $A05F + #$A060, // $A060 + #$A061, // $A061 + #$A062, // $A062 + #$A063, // $A063 + #$A064, // $A064 + #$A065, // $A065 + #$A066, // $A066 + #$A067, // $A067 + #$A068, // $A068 + #$A069, // $A069 + #$A06A, // $A06A + #$A06B, // $A06B + #$A06C, // $A06C + #$A06D, // $A06D + #$A06E, // $A06E + #$A06F, // $A06F + #$A070, // $A070 + #$A071, // $A071 + #$A072, // $A072 + #$A073, // $A073 + #$A074, // $A074 + #$A075, // $A075 + #$A076, // $A076 + #$A077, // $A077 + #$A078, // $A078 + #$A079, // $A079 + #$A07A, // $A07A + #$A07B, // $A07B + #$A07C, // $A07C + #$A07D, // $A07D + #$A07E, // $A07E + #$A07F, // $A07F + #$A080, // $A080 + #$A081, // $A081 + #$A082, // $A082 + #$A083, // $A083 + #$A084, // $A084 + #$A085, // $A085 + #$A086, // $A086 + #$A087, // $A087 + #$A088, // $A088 + #$A089, // $A089 + #$A08A, // $A08A + #$A08B, // $A08B + #$A08C, // $A08C + #$A08D, // $A08D + #$A08E, // $A08E + #$A08F, // $A08F + #$A090, // $A090 + #$A091, // $A091 + #$A092, // $A092 + #$A093, // $A093 + #$A094, // $A094 + #$A095, // $A095 + #$A096, // $A096 + #$A097, // $A097 + #$A098, // $A098 + #$A099, // $A099 + #$A09A, // $A09A + #$A09B, // $A09B + #$A09C, // $A09C + #$A09D, // $A09D + #$A09E, // $A09E + #$A09F, // $A09F + #$A0A0, // $A0A0 + #$A0A1, // $A0A1 + #$A0A2, // $A0A2 + #$A0A3, // $A0A3 + #$A0A4, // $A0A4 + #$A0A5, // $A0A5 + #$A0A6, // $A0A6 + #$A0A7, // $A0A7 + #$A0A8, // $A0A8 + #$A0A9, // $A0A9 + #$A0AA, // $A0AA + #$A0AB, // $A0AB + #$A0AC, // $A0AC + #$A0AD, // $A0AD + #$A0AE, // $A0AE + #$A0AF, // $A0AF + #$A0B0, // $A0B0 + #$A0B1, // $A0B1 + #$A0B2, // $A0B2 + #$A0B3, // $A0B3 + #$A0B4, // $A0B4 + #$A0B5, // $A0B5 + #$A0B6, // $A0B6 + #$A0B7, // $A0B7 + #$A0B8, // $A0B8 + #$A0B9, // $A0B9 + #$A0BA, // $A0BA + #$A0BB, // $A0BB + #$A0BC, // $A0BC + #$A0BD, // $A0BD + #$A0BE, // $A0BE + #$A0BF, // $A0BF + #$A0C0, // $A0C0 + #$A0C1, // $A0C1 + #$A0C2, // $A0C2 + #$A0C3, // $A0C3 + #$A0C4, // $A0C4 + #$A0C5, // $A0C5 + #$A0C6, // $A0C6 + #$A0C7, // $A0C7 + #$A0C8, // $A0C8 + #$A0C9, // $A0C9 + #$A0CA, // $A0CA + #$A0CB, // $A0CB + #$A0CC, // $A0CC + #$A0CD, // $A0CD + #$A0CE, // $A0CE + #$A0CF, // $A0CF + #$A0D0, // $A0D0 + #$A0D1, // $A0D1 + #$A0D2, // $A0D2 + #$A0D3, // $A0D3 + #$A0D4, // $A0D4 + #$A0D5, // $A0D5 + #$A0D6, // $A0D6 + #$A0D7, // $A0D7 + #$A0D8, // $A0D8 + #$A0D9, // $A0D9 + #$A0DA, // $A0DA + #$A0DB, // $A0DB + #$A0DC, // $A0DC + #$A0DD, // $A0DD + #$A0DE, // $A0DE + #$A0DF, // $A0DF + #$A0E0, // $A0E0 + #$A0E1, // $A0E1 + #$A0E2, // $A0E2 + #$A0E3, // $A0E3 + #$A0E4, // $A0E4 + #$A0E5, // $A0E5 + #$A0E6, // $A0E6 + #$A0E7, // $A0E7 + #$A0E8, // $A0E8 + #$A0E9, // $A0E9 + #$A0EA, // $A0EA + #$A0EB, // $A0EB + #$A0EC, // $A0EC + #$A0ED, // $A0ED + #$A0EE, // $A0EE + #$A0EF, // $A0EF + #$A0F0, // $A0F0 + #$A0F1, // $A0F1 + #$A0F2, // $A0F2 + #$A0F3, // $A0F3 + #$A0F4, // $A0F4 + #$A0F5, // $A0F5 + #$A0F6, // $A0F6 + #$A0F7, // $A0F7 + #$A0F8, // $A0F8 + #$A0F9, // $A0F9 + #$A0FA, // $A0FA + #$A0FB, // $A0FB + #$A0FC, // $A0FC + #$A0FD, // $A0FD + #$A0FE, // $A0FE + #$A0FF, // $A0FF + #$A100, // $A100 + #$A101, // $A101 + #$A102, // $A102 + #$A103, // $A103 + #$A104, // $A104 + #$A105, // $A105 + #$A106, // $A106 + #$A107, // $A107 + #$A108, // $A108 + #$A109, // $A109 + #$A10A, // $A10A + #$A10B, // $A10B + #$A10C, // $A10C + #$A10D, // $A10D + #$A10E, // $A10E + #$A10F, // $A10F + #$A110, // $A110 + #$A111, // $A111 + #$A112, // $A112 + #$A113, // $A113 + #$A114, // $A114 + #$A115, // $A115 + #$A116, // $A116 + #$A117, // $A117 + #$A118, // $A118 + #$A119, // $A119 + #$A11A, // $A11A + #$A11B, // $A11B + #$A11C, // $A11C + #$A11D, // $A11D + #$A11E, // $A11E + #$A11F, // $A11F + #$A120, // $A120 + #$A121, // $A121 + #$A122, // $A122 + #$A123, // $A123 + #$A124, // $A124 + #$A125, // $A125 + #$A126, // $A126 + #$A127, // $A127 + #$A128, // $A128 + #$A129, // $A129 + #$A12A, // $A12A + #$A12B, // $A12B + #$A12C, // $A12C + #$A12D, // $A12D + #$A12E, // $A12E + #$A12F, // $A12F + #$A130, // $A130 + #$A131, // $A131 + #$A132, // $A132 + #$A133, // $A133 + #$A134, // $A134 + #$A135, // $A135 + #$A136, // $A136 + #$A137, // $A137 + #$A138, // $A138 + #$A139, // $A139 + #$A13A, // $A13A + #$A13B, // $A13B + #$A13C, // $A13C + #$A13D, // $A13D + #$A13E, // $A13E + #$A13F, // $A13F + #$A140, // $A140 + #$A141, // $A141 + #$A142, // $A142 + #$A143, // $A143 + #$A144, // $A144 + #$A145, // $A145 + #$A146, // $A146 + #$A147, // $A147 + #$A148, // $A148 + #$A149, // $A149 + #$A14A, // $A14A + #$A14B, // $A14B + #$A14C, // $A14C + #$A14D, // $A14D + #$A14E, // $A14E + #$A14F, // $A14F + #$A150, // $A150 + #$A151, // $A151 + #$A152, // $A152 + #$A153, // $A153 + #$A154, // $A154 + #$A155, // $A155 + #$A156, // $A156 + #$A157, // $A157 + #$A158, // $A158 + #$A159, // $A159 + #$A15A, // $A15A + #$A15B, // $A15B + #$A15C, // $A15C + #$A15D, // $A15D + #$A15E, // $A15E + #$A15F, // $A15F + #$A160, // $A160 + #$A161, // $A161 + #$A162, // $A162 + #$A163, // $A163 + #$A164, // $A164 + #$A165, // $A165 + #$A166, // $A166 + #$A167, // $A167 + #$A168, // $A168 + #$A169, // $A169 + #$A16A, // $A16A + #$A16B, // $A16B + #$A16C, // $A16C + #$A16D, // $A16D + #$A16E, // $A16E + #$A16F, // $A16F + #$A170, // $A170 + #$A171, // $A171 + #$A172, // $A172 + #$A173, // $A173 + #$A174, // $A174 + #$A175, // $A175 + #$A176, // $A176 + #$A177, // $A177 + #$A178, // $A178 + #$A179, // $A179 + #$A17A, // $A17A + #$A17B, // $A17B + #$A17C, // $A17C + #$A17D, // $A17D + #$A17E, // $A17E + #$A17F, // $A17F + #$A180, // $A180 + #$A181, // $A181 + #$A182, // $A182 + #$A183, // $A183 + #$A184, // $A184 + #$A185, // $A185 + #$A186, // $A186 + #$A187, // $A187 + #$A188, // $A188 + #$A189, // $A189 + #$A18A, // $A18A + #$A18B, // $A18B + #$A18C, // $A18C + #$A18D, // $A18D + #$A18E, // $A18E + #$A18F, // $A18F + #$A190, // $A190 + #$A191, // $A191 + #$A192, // $A192 + #$A193, // $A193 + #$A194, // $A194 + #$A195, // $A195 + #$A196, // $A196 + #$A197, // $A197 + #$A198, // $A198 + #$A199, // $A199 + #$A19A, // $A19A + #$A19B, // $A19B + #$A19C, // $A19C + #$A19D, // $A19D + #$A19E, // $A19E + #$A19F, // $A19F + #$A1A0, // $A1A0 + #$A1A1, // $A1A1 + #$A1A2, // $A1A2 + #$A1A3, // $A1A3 + #$A1A4, // $A1A4 + #$A1A5, // $A1A5 + #$A1A6, // $A1A6 + #$A1A7, // $A1A7 + #$A1A8, // $A1A8 + #$A1A9, // $A1A9 + #$A1AA, // $A1AA + #$A1AB, // $A1AB + #$A1AC, // $A1AC + #$A1AD, // $A1AD + #$A1AE, // $A1AE + #$A1AF, // $A1AF + #$A1B0, // $A1B0 + #$A1B1, // $A1B1 + #$A1B2, // $A1B2 + #$A1B3, // $A1B3 + #$A1B4, // $A1B4 + #$A1B5, // $A1B5 + #$A1B6, // $A1B6 + #$A1B7, // $A1B7 + #$A1B8, // $A1B8 + #$A1B9, // $A1B9 + #$A1BA, // $A1BA + #$A1BB, // $A1BB + #$A1BC, // $A1BC + #$A1BD, // $A1BD + #$A1BE, // $A1BE + #$A1BF, // $A1BF + #$A1C0, // $A1C0 + #$A1C1, // $A1C1 + #$A1C2, // $A1C2 + #$A1C3, // $A1C3 + #$A1C4, // $A1C4 + #$A1C5, // $A1C5 + #$A1C6, // $A1C6 + #$A1C7, // $A1C7 + #$A1C8, // $A1C8 + #$A1C9, // $A1C9 + #$A1CA, // $A1CA + #$A1CB, // $A1CB + #$A1CC, // $A1CC + #$A1CD, // $A1CD + #$A1CE, // $A1CE + #$A1CF, // $A1CF + #$A1D0, // $A1D0 + #$A1D1, // $A1D1 + #$A1D2, // $A1D2 + #$A1D3, // $A1D3 + #$A1D4, // $A1D4 + #$A1D5, // $A1D5 + #$A1D6, // $A1D6 + #$A1D7, // $A1D7 + #$A1D8, // $A1D8 + #$A1D9, // $A1D9 + #$A1DA, // $A1DA + #$A1DB, // $A1DB + #$A1DC, // $A1DC + #$A1DD, // $A1DD + #$A1DE, // $A1DE + #$A1DF, // $A1DF + #$A1E0, // $A1E0 + #$A1E1, // $A1E1 + #$A1E2, // $A1E2 + #$A1E3, // $A1E3 + #$A1E4, // $A1E4 + #$A1E5, // $A1E5 + #$A1E6, // $A1E6 + #$A1E7, // $A1E7 + #$A1E8, // $A1E8 + #$A1E9, // $A1E9 + #$A1EA, // $A1EA + #$A1EB, // $A1EB + #$A1EC, // $A1EC + #$A1ED, // $A1ED + #$A1EE, // $A1EE + #$A1EF, // $A1EF + #$A1F0, // $A1F0 + #$A1F1, // $A1F1 + #$A1F2, // $A1F2 + #$A1F3, // $A1F3 + #$A1F4, // $A1F4 + #$A1F5, // $A1F5 + #$A1F6, // $A1F6 + #$A1F7, // $A1F7 + #$A1F8, // $A1F8 + #$A1F9, // $A1F9 + #$A1FA, // $A1FA + #$A1FB, // $A1FB + #$A1FC, // $A1FC + #$A1FD, // $A1FD + #$A1FE, // $A1FE + #$A1FF, // $A1FF + #$A200, // $A200 + #$A201, // $A201 + #$A202, // $A202 + #$A203, // $A203 + #$A204, // $A204 + #$A205, // $A205 + #$A206, // $A206 + #$A207, // $A207 + #$A208, // $A208 + #$A209, // $A209 + #$A20A, // $A20A + #$A20B, // $A20B + #$A20C, // $A20C + #$A20D, // $A20D + #$A20E, // $A20E + #$A20F, // $A20F + #$A210, // $A210 + #$A211, // $A211 + #$A212, // $A212 + #$A213, // $A213 + #$A214, // $A214 + #$A215, // $A215 + #$A216, // $A216 + #$A217, // $A217 + #$A218, // $A218 + #$A219, // $A219 + #$A21A, // $A21A + #$A21B, // $A21B + #$A21C, // $A21C + #$A21D, // $A21D + #$A21E, // $A21E + #$A21F, // $A21F + #$A220, // $A220 + #$A221, // $A221 + #$A222, // $A222 + #$A223, // $A223 + #$A224, // $A224 + #$A225, // $A225 + #$A226, // $A226 + #$A227, // $A227 + #$A228, // $A228 + #$A229, // $A229 + #$A22A, // $A22A + #$A22B, // $A22B + #$A22C, // $A22C + #$A22D, // $A22D + #$A22E, // $A22E + #$A22F, // $A22F + #$A230, // $A230 + #$A231, // $A231 + #$A232, // $A232 + #$A233, // $A233 + #$A234, // $A234 + #$A235, // $A235 + #$A236, // $A236 + #$A237, // $A237 + #$A238, // $A238 + #$A239, // $A239 + #$A23A, // $A23A + #$A23B, // $A23B + #$A23C, // $A23C + #$A23D, // $A23D + #$A23E, // $A23E + #$A23F, // $A23F + #$A240, // $A240 + #$A241, // $A241 + #$A242, // $A242 + #$A243, // $A243 + #$A244, // $A244 + #$A245, // $A245 + #$A246, // $A246 + #$A247, // $A247 + #$A248, // $A248 + #$A249, // $A249 + #$A24A, // $A24A + #$A24B, // $A24B + #$A24C, // $A24C + #$A24D, // $A24D + #$A24E, // $A24E + #$A24F, // $A24F + #$A250, // $A250 + #$A251, // $A251 + #$A252, // $A252 + #$A253, // $A253 + #$A254, // $A254 + #$A255, // $A255 + #$A256, // $A256 + #$A257, // $A257 + #$A258, // $A258 + #$A259, // $A259 + #$A25A, // $A25A + #$A25B, // $A25B + #$A25C, // $A25C + #$A25D, // $A25D + #$A25E, // $A25E + #$A25F, // $A25F + #$A260, // $A260 + #$A261, // $A261 + #$A262, // $A262 + #$A263, // $A263 + #$A264, // $A264 + #$A265, // $A265 + #$A266, // $A266 + #$A267, // $A267 + #$A268, // $A268 + #$A269, // $A269 + #$A26A, // $A26A + #$A26B, // $A26B + #$A26C, // $A26C + #$A26D, // $A26D + #$A26E, // $A26E + #$A26F, // $A26F + #$A270, // $A270 + #$A271, // $A271 + #$A272, // $A272 + #$A273, // $A273 + #$A274, // $A274 + #$A275, // $A275 + #$A276, // $A276 + #$A277, // $A277 + #$A278, // $A278 + #$A279, // $A279 + #$A27A, // $A27A + #$A27B, // $A27B + #$A27C, // $A27C + #$A27D, // $A27D + #$A27E, // $A27E + #$A27F, // $A27F + #$A280, // $A280 + #$A281, // $A281 + #$A282, // $A282 + #$A283, // $A283 + #$A284, // $A284 + #$A285, // $A285 + #$A286, // $A286 + #$A287, // $A287 + #$A288, // $A288 + #$A289, // $A289 + #$A28A, // $A28A + #$A28B, // $A28B + #$A28C, // $A28C + #$A28D, // $A28D + #$A28E, // $A28E + #$A28F, // $A28F + #$A290, // $A290 + #$A291, // $A291 + #$A292, // $A292 + #$A293, // $A293 + #$A294, // $A294 + #$A295, // $A295 + #$A296, // $A296 + #$A297, // $A297 + #$A298, // $A298 + #$A299, // $A299 + #$A29A, // $A29A + #$A29B, // $A29B + #$A29C, // $A29C + #$A29D, // $A29D + #$A29E, // $A29E + #$A29F, // $A29F + #$A2A0, // $A2A0 + #$A2A1, // $A2A1 + #$A2A2, // $A2A2 + #$A2A3, // $A2A3 + #$A2A4, // $A2A4 + #$A2A5, // $A2A5 + #$A2A6, // $A2A6 + #$A2A7, // $A2A7 + #$A2A8, // $A2A8 + #$A2A9, // $A2A9 + #$A2AA, // $A2AA + #$A2AB, // $A2AB + #$A2AC, // $A2AC + #$A2AD, // $A2AD + #$A2AE, // $A2AE + #$A2AF, // $A2AF + #$A2B0, // $A2B0 + #$A2B1, // $A2B1 + #$A2B2, // $A2B2 + #$A2B3, // $A2B3 + #$A2B4, // $A2B4 + #$A2B5, // $A2B5 + #$A2B6, // $A2B6 + #$A2B7, // $A2B7 + #$A2B8, // $A2B8 + #$A2B9, // $A2B9 + #$A2BA, // $A2BA + #$A2BB, // $A2BB + #$A2BC, // $A2BC + #$A2BD, // $A2BD + #$A2BE, // $A2BE + #$A2BF, // $A2BF + #$A2C0, // $A2C0 + #$A2C1, // $A2C1 + #$A2C2, // $A2C2 + #$A2C3, // $A2C3 + #$A2C4, // $A2C4 + #$A2C5, // $A2C5 + #$A2C6, // $A2C6 + #$A2C7, // $A2C7 + #$A2C8, // $A2C8 + #$A2C9, // $A2C9 + #$A2CA, // $A2CA + #$A2CB, // $A2CB + #$A2CC, // $A2CC + #$A2CD, // $A2CD + #$A2CE, // $A2CE + #$A2CF, // $A2CF + #$A2D0, // $A2D0 + #$A2D1, // $A2D1 + #$A2D2, // $A2D2 + #$A2D3, // $A2D3 + #$A2D4, // $A2D4 + #$A2D5, // $A2D5 + #$A2D6, // $A2D6 + #$A2D7, // $A2D7 + #$A2D8, // $A2D8 + #$A2D9, // $A2D9 + #$A2DA, // $A2DA + #$A2DB, // $A2DB + #$A2DC, // $A2DC + #$A2DD, // $A2DD + #$A2DE, // $A2DE + #$A2DF, // $A2DF + #$A2E0, // $A2E0 + #$A2E1, // $A2E1 + #$A2E2, // $A2E2 + #$A2E3, // $A2E3 + #$A2E4, // $A2E4 + #$A2E5, // $A2E5 + #$A2E6, // $A2E6 + #$A2E7, // $A2E7 + #$A2E8, // $A2E8 + #$A2E9, // $A2E9 + #$A2EA, // $A2EA + #$A2EB, // $A2EB + #$A2EC, // $A2EC + #$A2ED, // $A2ED + #$A2EE, // $A2EE + #$A2EF, // $A2EF + #$A2F0, // $A2F0 + #$A2F1, // $A2F1 + #$A2F2, // $A2F2 + #$A2F3, // $A2F3 + #$A2F4, // $A2F4 + #$A2F5, // $A2F5 + #$A2F6, // $A2F6 + #$A2F7, // $A2F7 + #$A2F8, // $A2F8 + #$A2F9, // $A2F9 + #$A2FA, // $A2FA + #$A2FB, // $A2FB + #$A2FC, // $A2FC + #$A2FD, // $A2FD + #$A2FE, // $A2FE + #$A2FF, // $A2FF + #$A300, // $A300 + #$A301, // $A301 + #$A302, // $A302 + #$A303, // $A303 + #$A304, // $A304 + #$A305, // $A305 + #$A306, // $A306 + #$A307, // $A307 + #$A308, // $A308 + #$A309, // $A309 + #$A30A, // $A30A + #$A30B, // $A30B + #$A30C, // $A30C + #$A30D, // $A30D + #$A30E, // $A30E + #$A30F, // $A30F + #$A310, // $A310 + #$A311, // $A311 + #$A312, // $A312 + #$A313, // $A313 + #$A314, // $A314 + #$A315, // $A315 + #$A316, // $A316 + #$A317, // $A317 + #$A318, // $A318 + #$A319, // $A319 + #$A31A, // $A31A + #$A31B, // $A31B + #$A31C, // $A31C + #$A31D, // $A31D + #$A31E, // $A31E + #$A31F, // $A31F + #$A320, // $A320 + #$A321, // $A321 + #$A322, // $A322 + #$A323, // $A323 + #$A324, // $A324 + #$A325, // $A325 + #$A326, // $A326 + #$A327, // $A327 + #$A328, // $A328 + #$A329, // $A329 + #$A32A, // $A32A + #$A32B, // $A32B + #$A32C, // $A32C + #$A32D, // $A32D + #$A32E, // $A32E + #$A32F, // $A32F + #$A330, // $A330 + #$A331, // $A331 + #$A332, // $A332 + #$A333, // $A333 + #$A334, // $A334 + #$A335, // $A335 + #$A336, // $A336 + #$A337, // $A337 + #$A338, // $A338 + #$A339, // $A339 + #$A33A, // $A33A + #$A33B, // $A33B + #$A33C, // $A33C + #$A33D, // $A33D + #$A33E, // $A33E + #$A33F, // $A33F + #$A340, // $A340 + #$A341, // $A341 + #$A342, // $A342 + #$A343, // $A343 + #$A344, // $A344 + #$A345, // $A345 + #$A346, // $A346 + #$A347, // $A347 + #$A348, // $A348 + #$A349, // $A349 + #$A34A, // $A34A + #$A34B, // $A34B + #$A34C, // $A34C + #$A34D, // $A34D + #$A34E, // $A34E + #$A34F, // $A34F + #$A350, // $A350 + #$A351, // $A351 + #$A352, // $A352 + #$A353, // $A353 + #$A354, // $A354 + #$A355, // $A355 + #$A356, // $A356 + #$A357, // $A357 + #$A358, // $A358 + #$A359, // $A359 + #$A35A, // $A35A + #$A35B, // $A35B + #$A35C, // $A35C + #$A35D, // $A35D + #$A35E, // $A35E + #$A35F, // $A35F + #$A360, // $A360 + #$A361, // $A361 + #$A362, // $A362 + #$A363, // $A363 + #$A364, // $A364 + #$A365, // $A365 + #$A366, // $A366 + #$A367, // $A367 + #$A368, // $A368 + #$A369, // $A369 + #$A36A, // $A36A + #$A36B, // $A36B + #$A36C, // $A36C + #$A36D, // $A36D + #$A36E, // $A36E + #$A36F, // $A36F + #$A370, // $A370 + #$A371, // $A371 + #$A372, // $A372 + #$A373, // $A373 + #$A374, // $A374 + #$A375, // $A375 + #$A376, // $A376 + #$A377, // $A377 + #$A378, // $A378 + #$A379, // $A379 + #$A37A, // $A37A + #$A37B, // $A37B + #$A37C, // $A37C + #$A37D, // $A37D + #$A37E, // $A37E + #$A37F, // $A37F + #$A380, // $A380 + #$A381, // $A381 + #$A382, // $A382 + #$A383, // $A383 + #$A384, // $A384 + #$A385, // $A385 + #$A386, // $A386 + #$A387, // $A387 + #$A388, // $A388 + #$A389, // $A389 + #$A38A, // $A38A + #$A38B, // $A38B + #$A38C, // $A38C + #$A38D, // $A38D + #$A38E, // $A38E + #$A38F, // $A38F + #$A390, // $A390 + #$A391, // $A391 + #$A392, // $A392 + #$A393, // $A393 + #$A394, // $A394 + #$A395, // $A395 + #$A396, // $A396 + #$A397, // $A397 + #$A398, // $A398 + #$A399, // $A399 + #$A39A, // $A39A + #$A39B, // $A39B + #$A39C, // $A39C + #$A39D, // $A39D + #$A39E, // $A39E + #$A39F, // $A39F + #$A3A0, // $A3A0 + #$A3A1, // $A3A1 + #$A3A2, // $A3A2 + #$A3A3, // $A3A3 + #$A3A4, // $A3A4 + #$A3A5, // $A3A5 + #$A3A6, // $A3A6 + #$A3A7, // $A3A7 + #$A3A8, // $A3A8 + #$A3A9, // $A3A9 + #$A3AA, // $A3AA + #$A3AB, // $A3AB + #$A3AC, // $A3AC + #$A3AD, // $A3AD + #$A3AE, // $A3AE + #$A3AF, // $A3AF + #$A3B0, // $A3B0 + #$A3B1, // $A3B1 + #$A3B2, // $A3B2 + #$A3B3, // $A3B3 + #$A3B4, // $A3B4 + #$A3B5, // $A3B5 + #$A3B6, // $A3B6 + #$A3B7, // $A3B7 + #$A3B8, // $A3B8 + #$A3B9, // $A3B9 + #$A3BA, // $A3BA + #$A3BB, // $A3BB + #$A3BC, // $A3BC + #$A3BD, // $A3BD + #$A3BE, // $A3BE + #$A3BF, // $A3BF + #$A3C0, // $A3C0 + #$A3C1, // $A3C1 + #$A3C2, // $A3C2 + #$A3C3, // $A3C3 + #$A3C4, // $A3C4 + #$A3C5, // $A3C5 + #$A3C6, // $A3C6 + #$A3C7, // $A3C7 + #$A3C8, // $A3C8 + #$A3C9, // $A3C9 + #$A3CA, // $A3CA + #$A3CB, // $A3CB + #$A3CC, // $A3CC + #$A3CD, // $A3CD + #$A3CE, // $A3CE + #$A3CF, // $A3CF + #$A3D0, // $A3D0 + #$A3D1, // $A3D1 + #$A3D2, // $A3D2 + #$A3D3, // $A3D3 + #$A3D4, // $A3D4 + #$A3D5, // $A3D5 + #$A3D6, // $A3D6 + #$A3D7, // $A3D7 + #$A3D8, // $A3D8 + #$A3D9, // $A3D9 + #$A3DA, // $A3DA + #$A3DB, // $A3DB + #$A3DC, // $A3DC + #$A3DD, // $A3DD + #$A3DE, // $A3DE + #$A3DF, // $A3DF + #$A3E0, // $A3E0 + #$A3E1, // $A3E1 + #$A3E2, // $A3E2 + #$A3E3, // $A3E3 + #$A3E4, // $A3E4 + #$A3E5, // $A3E5 + #$A3E6, // $A3E6 + #$A3E7, // $A3E7 + #$A3E8, // $A3E8 + #$A3E9, // $A3E9 + #$A3EA, // $A3EA + #$A3EB, // $A3EB + #$A3EC, // $A3EC + #$A3ED, // $A3ED + #$A3EE, // $A3EE + #$A3EF, // $A3EF + #$A3F0, // $A3F0 + #$A3F1, // $A3F1 + #$A3F2, // $A3F2 + #$A3F3, // $A3F3 + #$A3F4, // $A3F4 + #$A3F5, // $A3F5 + #$A3F6, // $A3F6 + #$A3F7, // $A3F7 + #$A3F8, // $A3F8 + #$A3F9, // $A3F9 + #$A3FA, // $A3FA + #$A3FB, // $A3FB + #$A3FC, // $A3FC + #$A3FD, // $A3FD + #$A3FE, // $A3FE + #$A3FF, // $A3FF + #$A400, // $A400 + #$A401, // $A401 + #$A402, // $A402 + #$A403, // $A403 + #$A404, // $A404 + #$A405, // $A405 + #$A406, // $A406 + #$A407, // $A407 + #$A408, // $A408 + #$A409, // $A409 + #$A40A, // $A40A + #$A40B, // $A40B + #$A40C, // $A40C + #$A40D, // $A40D + #$A40E, // $A40E + #$A40F, // $A40F + #$A410, // $A410 + #$A411, // $A411 + #$A412, // $A412 + #$A413, // $A413 + #$A414, // $A414 + #$A415, // $A415 + #$A416, // $A416 + #$A417, // $A417 + #$A418, // $A418 + #$A419, // $A419 + #$A41A, // $A41A + #$A41B, // $A41B + #$A41C, // $A41C + #$A41D, // $A41D + #$A41E, // $A41E + #$A41F, // $A41F + #$A420, // $A420 + #$A421, // $A421 + #$A422, // $A422 + #$A423, // $A423 + #$A424, // $A424 + #$A425, // $A425 + #$A426, // $A426 + #$A427, // $A427 + #$A428, // $A428 + #$A429, // $A429 + #$A42A, // $A42A + #$A42B, // $A42B + #$A42C, // $A42C + #$A42D, // $A42D + #$A42E, // $A42E + #$A42F, // $A42F + #$A430, // $A430 + #$A431, // $A431 + #$A432, // $A432 + #$A433, // $A433 + #$A434, // $A434 + #$A435, // $A435 + #$A436, // $A436 + #$A437, // $A437 + #$A438, // $A438 + #$A439, // $A439 + #$A43A, // $A43A + #$A43B, // $A43B + #$A43C, // $A43C + #$A43D, // $A43D + #$A43E, // $A43E + #$A43F, // $A43F + #$A440, // $A440 + #$A441, // $A441 + #$A442, // $A442 + #$A443, // $A443 + #$A444, // $A444 + #$A445, // $A445 + #$A446, // $A446 + #$A447, // $A447 + #$A448, // $A448 + #$A449, // $A449 + #$A44A, // $A44A + #$A44B, // $A44B + #$A44C, // $A44C + #$A44D, // $A44D + #$A44E, // $A44E + #$A44F, // $A44F + #$A450, // $A450 + #$A451, // $A451 + #$A452, // $A452 + #$A453, // $A453 + #$A454, // $A454 + #$A455, // $A455 + #$A456, // $A456 + #$A457, // $A457 + #$A458, // $A458 + #$A459, // $A459 + #$A45A, // $A45A + #$A45B, // $A45B + #$A45C, // $A45C + #$A45D, // $A45D + #$A45E, // $A45E + #$A45F, // $A45F + #$A460, // $A460 + #$A461, // $A461 + #$A462, // $A462 + #$A463, // $A463 + #$A464, // $A464 + #$A465, // $A465 + #$A466, // $A466 + #$A467, // $A467 + #$A468, // $A468 + #$A469, // $A469 + #$A46A, // $A46A + #$A46B, // $A46B + #$A46C, // $A46C + #$A46D, // $A46D + #$A46E, // $A46E + #$A46F, // $A46F + #$A470, // $A470 + #$A471, // $A471 + #$A472, // $A472 + #$A473, // $A473 + #$A474, // $A474 + #$A475, // $A475 + #$A476, // $A476 + #$A477, // $A477 + #$A478, // $A478 + #$A479, // $A479 + #$A47A, // $A47A + #$A47B, // $A47B + #$A47C, // $A47C + #$A47D, // $A47D + #$A47E, // $A47E + #$A47F, // $A47F + #$A480, // $A480 + #$A481, // $A481 + #$A482, // $A482 + #$A483, // $A483 + #$A484, // $A484 + #$A485, // $A485 + #$A486, // $A486 + #$A487, // $A487 + #$A488, // $A488 + #$A489, // $A489 + #$A48A, // $A48A + #$A48B, // $A48B + #$A48C, // $A48C + #$A48D, // $A48D + #$A48E, // $A48E + #$A48F, // $A48F + #$A490, // $A490 + #$A491, // $A491 + #$A492, // $A492 + #$A493, // $A493 + #$A494, // $A494 + #$A495, // $A495 + #$A496, // $A496 + #$A497, // $A497 + #$A498, // $A498 + #$A499, // $A499 + #$A49A, // $A49A + #$A49B, // $A49B + #$A49C, // $A49C + #$A49D, // $A49D + #$A49E, // $A49E + #$A49F, // $A49F + #$A4A0, // $A4A0 + #$A4A1, // $A4A1 + #$A4A2, // $A4A2 + #$A4A3, // $A4A3 + #$A4A4, // $A4A4 + #$A4A5, // $A4A5 + #$A4A6, // $A4A6 + #$A4A7, // $A4A7 + #$A4A8, // $A4A8 + #$A4A9, // $A4A9 + #$A4AA, // $A4AA + #$A4AB, // $A4AB + #$A4AC, // $A4AC + #$A4AD, // $A4AD + #$A4AE, // $A4AE + #$A4AF, // $A4AF + #$A4B0, // $A4B0 + #$A4B1, // $A4B1 + #$A4B2, // $A4B2 + #$A4B3, // $A4B3 + #$A4B4, // $A4B4 + #$A4B5, // $A4B5 + #$A4B6, // $A4B6 + #$A4B7, // $A4B7 + #$A4B8, // $A4B8 + #$A4B9, // $A4B9 + #$A4BA, // $A4BA + #$A4BB, // $A4BB + #$A4BC, // $A4BC + #$A4BD, // $A4BD + #$A4BE, // $A4BE + #$A4BF, // $A4BF + #$A4C0, // $A4C0 + #$A4C1, // $A4C1 + #$A4C2, // $A4C2 + #$A4C3, // $A4C3 + #$A4C4, // $A4C4 + #$A4C5, // $A4C5 + #$A4C6, // $A4C6 + #$A4C7, // $A4C7 + #$A4C8, // $A4C8 + #$A4C9, // $A4C9 + #$A4CA, // $A4CA + #$A4CB, // $A4CB + #$A4CC, // $A4CC + #$A4CD, // $A4CD + #$A4CE, // $A4CE + #$A4CF, // $A4CF + #$A4D0, // $A4D0 + #$A4D1, // $A4D1 + #$A4D2, // $A4D2 + #$A4D3, // $A4D3 + #$A4D4, // $A4D4 + #$A4D5, // $A4D5 + #$A4D6, // $A4D6 + #$A4D7, // $A4D7 + #$A4D8, // $A4D8 + #$A4D9, // $A4D9 + #$A4DA, // $A4DA + #$A4DB, // $A4DB + #$A4DC, // $A4DC + #$A4DD, // $A4DD + #$A4DE, // $A4DE + #$A4DF, // $A4DF + #$A4E0, // $A4E0 + #$A4E1, // $A4E1 + #$A4E2, // $A4E2 + #$A4E3, // $A4E3 + #$A4E4, // $A4E4 + #$A4E5, // $A4E5 + #$A4E6, // $A4E6 + #$A4E7, // $A4E7 + #$A4E8, // $A4E8 + #$A4E9, // $A4E9 + #$A4EA, // $A4EA + #$A4EB, // $A4EB + #$A4EC, // $A4EC + #$A4ED, // $A4ED + #$A4EE, // $A4EE + #$A4EF, // $A4EF + #$A4F0, // $A4F0 + #$A4F1, // $A4F1 + #$A4F2, // $A4F2 + #$A4F3, // $A4F3 + #$A4F4, // $A4F4 + #$A4F5, // $A4F5 + #$A4F6, // $A4F6 + #$A4F7, // $A4F7 + #$A4F8, // $A4F8 + #$A4F9, // $A4F9 + #$A4FA, // $A4FA + #$A4FB, // $A4FB + #$A4FC, // $A4FC + #$A4FD, // $A4FD + #$A4FE, // $A4FE + #$A4FF, // $A4FF + #$A500, // $A500 + #$A501, // $A501 + #$A502, // $A502 + #$A503, // $A503 + #$A504, // $A504 + #$A505, // $A505 + #$A506, // $A506 + #$A507, // $A507 + #$A508, // $A508 + #$A509, // $A509 + #$A50A, // $A50A + #$A50B, // $A50B + #$A50C, // $A50C + #$A50D, // $A50D + #$A50E, // $A50E + #$A50F, // $A50F + #$A510, // $A510 + #$A511, // $A511 + #$A512, // $A512 + #$A513, // $A513 + #$A514, // $A514 + #$A515, // $A515 + #$A516, // $A516 + #$A517, // $A517 + #$A518, // $A518 + #$A519, // $A519 + #$A51A, // $A51A + #$A51B, // $A51B + #$A51C, // $A51C + #$A51D, // $A51D + #$A51E, // $A51E + #$A51F, // $A51F + #$A520, // $A520 + #$A521, // $A521 + #$A522, // $A522 + #$A523, // $A523 + #$A524, // $A524 + #$A525, // $A525 + #$A526, // $A526 + #$A527, // $A527 + #$A528, // $A528 + #$A529, // $A529 + #$A52A, // $A52A + #$A52B, // $A52B + #$A52C, // $A52C + #$A52D, // $A52D + #$A52E, // $A52E + #$A52F, // $A52F + #$A530, // $A530 + #$A531, // $A531 + #$A532, // $A532 + #$A533, // $A533 + #$A534, // $A534 + #$A535, // $A535 + #$A536, // $A536 + #$A537, // $A537 + #$A538, // $A538 + #$A539, // $A539 + #$A53A, // $A53A + #$A53B, // $A53B + #$A53C, // $A53C + #$A53D, // $A53D + #$A53E, // $A53E + #$A53F, // $A53F + #$A540, // $A540 + #$A541, // $A541 + #$A542, // $A542 + #$A543, // $A543 + #$A544, // $A544 + #$A545, // $A545 + #$A546, // $A546 + #$A547, // $A547 + #$A548, // $A548 + #$A549, // $A549 + #$A54A, // $A54A + #$A54B, // $A54B + #$A54C, // $A54C + #$A54D, // $A54D + #$A54E, // $A54E + #$A54F, // $A54F + #$A550, // $A550 + #$A551, // $A551 + #$A552, // $A552 + #$A553, // $A553 + #$A554, // $A554 + #$A555, // $A555 + #$A556, // $A556 + #$A557, // $A557 + #$A558, // $A558 + #$A559, // $A559 + #$A55A, // $A55A + #$A55B, // $A55B + #$A55C, // $A55C + #$A55D, // $A55D + #$A55E, // $A55E + #$A55F, // $A55F + #$A560, // $A560 + #$A561, // $A561 + #$A562, // $A562 + #$A563, // $A563 + #$A564, // $A564 + #$A565, // $A565 + #$A566, // $A566 + #$A567, // $A567 + #$A568, // $A568 + #$A569, // $A569 + #$A56A, // $A56A + #$A56B, // $A56B + #$A56C, // $A56C + #$A56D, // $A56D + #$A56E, // $A56E + #$A56F, // $A56F + #$A570, // $A570 + #$A571, // $A571 + #$A572, // $A572 + #$A573, // $A573 + #$A574, // $A574 + #$A575, // $A575 + #$A576, // $A576 + #$A577, // $A577 + #$A578, // $A578 + #$A579, // $A579 + #$A57A, // $A57A + #$A57B, // $A57B + #$A57C, // $A57C + #$A57D, // $A57D + #$A57E, // $A57E + #$A57F, // $A57F + #$A580, // $A580 + #$A581, // $A581 + #$A582, // $A582 + #$A583, // $A583 + #$A584, // $A584 + #$A585, // $A585 + #$A586, // $A586 + #$A587, // $A587 + #$A588, // $A588 + #$A589, // $A589 + #$A58A, // $A58A + #$A58B, // $A58B + #$A58C, // $A58C + #$A58D, // $A58D + #$A58E, // $A58E + #$A58F, // $A58F + #$A590, // $A590 + #$A591, // $A591 + #$A592, // $A592 + #$A593, // $A593 + #$A594, // $A594 + #$A595, // $A595 + #$A596, // $A596 + #$A597, // $A597 + #$A598, // $A598 + #$A599, // $A599 + #$A59A, // $A59A + #$A59B, // $A59B + #$A59C, // $A59C + #$A59D, // $A59D + #$A59E, // $A59E + #$A59F, // $A59F + #$A5A0, // $A5A0 + #$A5A1, // $A5A1 + #$A5A2, // $A5A2 + #$A5A3, // $A5A3 + #$A5A4, // $A5A4 + #$A5A5, // $A5A5 + #$A5A6, // $A5A6 + #$A5A7, // $A5A7 + #$A5A8, // $A5A8 + #$A5A9, // $A5A9 + #$A5AA, // $A5AA + #$A5AB, // $A5AB + #$A5AC, // $A5AC + #$A5AD, // $A5AD + #$A5AE, // $A5AE + #$A5AF, // $A5AF + #$A5B0, // $A5B0 + #$A5B1, // $A5B1 + #$A5B2, // $A5B2 + #$A5B3, // $A5B3 + #$A5B4, // $A5B4 + #$A5B5, // $A5B5 + #$A5B6, // $A5B6 + #$A5B7, // $A5B7 + #$A5B8, // $A5B8 + #$A5B9, // $A5B9 + #$A5BA, // $A5BA + #$A5BB, // $A5BB + #$A5BC, // $A5BC + #$A5BD, // $A5BD + #$A5BE, // $A5BE + #$A5BF, // $A5BF + #$A5C0, // $A5C0 + #$A5C1, // $A5C1 + #$A5C2, // $A5C2 + #$A5C3, // $A5C3 + #$A5C4, // $A5C4 + #$A5C5, // $A5C5 + #$A5C6, // $A5C6 + #$A5C7, // $A5C7 + #$A5C8, // $A5C8 + #$A5C9, // $A5C9 + #$A5CA, // $A5CA + #$A5CB, // $A5CB + #$A5CC, // $A5CC + #$A5CD, // $A5CD + #$A5CE, // $A5CE + #$A5CF, // $A5CF + #$A5D0, // $A5D0 + #$A5D1, // $A5D1 + #$A5D2, // $A5D2 + #$A5D3, // $A5D3 + #$A5D4, // $A5D4 + #$A5D5, // $A5D5 + #$A5D6, // $A5D6 + #$A5D7, // $A5D7 + #$A5D8, // $A5D8 + #$A5D9, // $A5D9 + #$A5DA, // $A5DA + #$A5DB, // $A5DB + #$A5DC, // $A5DC + #$A5DD, // $A5DD + #$A5DE, // $A5DE + #$A5DF, // $A5DF + #$A5E0, // $A5E0 + #$A5E1, // $A5E1 + #$A5E2, // $A5E2 + #$A5E3, // $A5E3 + #$A5E4, // $A5E4 + #$A5E5, // $A5E5 + #$A5E6, // $A5E6 + #$A5E7, // $A5E7 + #$A5E8, // $A5E8 + #$A5E9, // $A5E9 + #$A5EA, // $A5EA + #$A5EB, // $A5EB + #$A5EC, // $A5EC + #$A5ED, // $A5ED + #$A5EE, // $A5EE + #$A5EF, // $A5EF + #$A5F0, // $A5F0 + #$A5F1, // $A5F1 + #$A5F2, // $A5F2 + #$A5F3, // $A5F3 + #$A5F4, // $A5F4 + #$A5F5, // $A5F5 + #$A5F6, // $A5F6 + #$A5F7, // $A5F7 + #$A5F8, // $A5F8 + #$A5F9, // $A5F9 + #$A5FA, // $A5FA + #$A5FB, // $A5FB + #$A5FC, // $A5FC + #$A5FD, // $A5FD + #$A5FE, // $A5FE + #$A5FF, // $A5FF + #$A600, // $A600 + #$A601, // $A601 + #$A602, // $A602 + #$A603, // $A603 + #$A604, // $A604 + #$A605, // $A605 + #$A606, // $A606 + #$A607, // $A607 + #$A608, // $A608 + #$A609, // $A609 + #$A60A, // $A60A + #$A60B, // $A60B + #$A60C, // $A60C + #$A60D, // $A60D + #$A60E, // $A60E + #$A60F, // $A60F + #$A610, // $A610 + #$A611, // $A611 + #$A612, // $A612 + #$A613, // $A613 + #$A614, // $A614 + #$A615, // $A615 + #$A616, // $A616 + #$A617, // $A617 + #$A618, // $A618 + #$A619, // $A619 + #$A61A, // $A61A + #$A61B, // $A61B + #$A61C, // $A61C + #$A61D, // $A61D + #$A61E, // $A61E + #$A61F, // $A61F + #$A620, // $A620 + #$A621, // $A621 + #$A622, // $A622 + #$A623, // $A623 + #$A624, // $A624 + #$A625, // $A625 + #$A626, // $A626 + #$A627, // $A627 + #$A628, // $A628 + #$A629, // $A629 + #$A62A, // $A62A + #$A62B, // $A62B + #$A62C, // $A62C + #$A62D, // $A62D + #$A62E, // $A62E + #$A62F, // $A62F + #$A630, // $A630 + #$A631, // $A631 + #$A632, // $A632 + #$A633, // $A633 + #$A634, // $A634 + #$A635, // $A635 + #$A636, // $A636 + #$A637, // $A637 + #$A638, // $A638 + #$A639, // $A639 + #$A63A, // $A63A + #$A63B, // $A63B + #$A63C, // $A63C + #$A63D, // $A63D + #$A63E, // $A63E + #$A63F, // $A63F + #$A640, // $A640 + #$A640, // $A641 + #$A642, // $A642 + #$A642, // $A643 + #$A644, // $A644 + #$A644, // $A645 + #$A646, // $A646 + #$A646, // $A647 + #$A648, // $A648 + #$A648, // $A649 + #$A64A, // $A64A + #$A64A, // $A64B + #$A64C, // $A64C + #$A64C, // $A64D + #$A64E, // $A64E + #$A64E, // $A64F + #$A650, // $A650 + #$A650, // $A651 + #$A652, // $A652 + #$A652, // $A653 + #$A654, // $A654 + #$A654, // $A655 + #$A656, // $A656 + #$A656, // $A657 + #$A658, // $A658 + #$A658, // $A659 + #$A65A, // $A65A + #$A65A, // $A65B + #$A65C, // $A65C + #$A65C, // $A65D + #$A65E, // $A65E + #$A65E, // $A65F + #$A660, // $A660 + #$A660, // $A661 + #$A662, // $A662 + #$A662, // $A663 + #$A664, // $A664 + #$A664, // $A665 + #$A666, // $A666 + #$A666, // $A667 + #$A668, // $A668 + #$A668, // $A669 + #$A66A, // $A66A + #$A66A, // $A66B + #$A66C, // $A66C + #$A66C, // $A66D + #$A66E, // $A66E + #$A66F, // $A66F + #$A670, // $A670 + #$A671, // $A671 + #$A672, // $A672 + #$A673, // $A673 + #$A674, // $A674 + #$A675, // $A675 + #$A676, // $A676 + #$A677, // $A677 + #$A678, // $A678 + #$A679, // $A679 + #$A67A, // $A67A + #$A67B, // $A67B + #$A67C, // $A67C + #$A67D, // $A67D + #$A67E, // $A67E + #$A67F, // $A67F + #$A680, // $A680 + #$A680, // $A681 + #$A682, // $A682 + #$A682, // $A683 + #$A684, // $A684 + #$A684, // $A685 + #$A686, // $A686 + #$A686, // $A687 + #$A688, // $A688 + #$A688, // $A689 + #$A68A, // $A68A + #$A68A, // $A68B + #$A68C, // $A68C + #$A68C, // $A68D + #$A68E, // $A68E + #$A68E, // $A68F + #$A690, // $A690 + #$A690, // $A691 + #$A692, // $A692 + #$A692, // $A693 + #$A694, // $A694 + #$A694, // $A695 + #$A696, // $A696 + #$A696, // $A697 + #$A698, // $A698 + #$A698, // $A699 + #$A69A, // $A69A + #$A69A, // $A69B + #$A69C, // $A69C + #$A69D, // $A69D + #$A69E, // $A69E + #$A69F, // $A69F + #$A6A0, // $A6A0 + #$A6A1, // $A6A1 + #$A6A2, // $A6A2 + #$A6A3, // $A6A3 + #$A6A4, // $A6A4 + #$A6A5, // $A6A5 + #$A6A6, // $A6A6 + #$A6A7, // $A6A7 + #$A6A8, // $A6A8 + #$A6A9, // $A6A9 + #$A6AA, // $A6AA + #$A6AB, // $A6AB + #$A6AC, // $A6AC + #$A6AD, // $A6AD + #$A6AE, // $A6AE + #$A6AF, // $A6AF + #$A6B0, // $A6B0 + #$A6B1, // $A6B1 + #$A6B2, // $A6B2 + #$A6B3, // $A6B3 + #$A6B4, // $A6B4 + #$A6B5, // $A6B5 + #$A6B6, // $A6B6 + #$A6B7, // $A6B7 + #$A6B8, // $A6B8 + #$A6B9, // $A6B9 + #$A6BA, // $A6BA + #$A6BB, // $A6BB + #$A6BC, // $A6BC + #$A6BD, // $A6BD + #$A6BE, // $A6BE + #$A6BF, // $A6BF + #$A6C0, // $A6C0 + #$A6C1, // $A6C1 + #$A6C2, // $A6C2 + #$A6C3, // $A6C3 + #$A6C4, // $A6C4 + #$A6C5, // $A6C5 + #$A6C6, // $A6C6 + #$A6C7, // $A6C7 + #$A6C8, // $A6C8 + #$A6C9, // $A6C9 + #$A6CA, // $A6CA + #$A6CB, // $A6CB + #$A6CC, // $A6CC + #$A6CD, // $A6CD + #$A6CE, // $A6CE + #$A6CF, // $A6CF + #$A6D0, // $A6D0 + #$A6D1, // $A6D1 + #$A6D2, // $A6D2 + #$A6D3, // $A6D3 + #$A6D4, // $A6D4 + #$A6D5, // $A6D5 + #$A6D6, // $A6D6 + #$A6D7, // $A6D7 + #$A6D8, // $A6D8 + #$A6D9, // $A6D9 + #$A6DA, // $A6DA + #$A6DB, // $A6DB + #$A6DC, // $A6DC + #$A6DD, // $A6DD + #$A6DE, // $A6DE + #$A6DF, // $A6DF + #$A6E0, // $A6E0 + #$A6E1, // $A6E1 + #$A6E2, // $A6E2 + #$A6E3, // $A6E3 + #$A6E4, // $A6E4 + #$A6E5, // $A6E5 + #$A6E6, // $A6E6 + #$A6E7, // $A6E7 + #$A6E8, // $A6E8 + #$A6E9, // $A6E9 + #$A6EA, // $A6EA + #$A6EB, // $A6EB + #$A6EC, // $A6EC + #$A6ED, // $A6ED + #$A6EE, // $A6EE + #$A6EF, // $A6EF + #$A6F0, // $A6F0 + #$A6F1, // $A6F1 + #$A6F2, // $A6F2 + #$A6F3, // $A6F3 + #$A6F4, // $A6F4 + #$A6F5, // $A6F5 + #$A6F6, // $A6F6 + #$A6F7, // $A6F7 + #$A6F8, // $A6F8 + #$A6F9, // $A6F9 + #$A6FA, // $A6FA + #$A6FB, // $A6FB + #$A6FC, // $A6FC + #$A6FD, // $A6FD + #$A6FE, // $A6FE + #$A6FF, // $A6FF + #$A700, // $A700 + #$A701, // $A701 + #$A702, // $A702 + #$A703, // $A703 + #$A704, // $A704 + #$A705, // $A705 + #$A706, // $A706 + #$A707, // $A707 + #$A708, // $A708 + #$A709, // $A709 + #$A70A, // $A70A + #$A70B, // $A70B + #$A70C, // $A70C + #$A70D, // $A70D + #$A70E, // $A70E + #$A70F, // $A70F + #$A710, // $A710 + #$A711, // $A711 + #$A712, // $A712 + #$A713, // $A713 + #$A714, // $A714 + #$A715, // $A715 + #$A716, // $A716 + #$A717, // $A717 + #$A718, // $A718 + #$A719, // $A719 + #$A71A, // $A71A + #$A71B, // $A71B + #$A71C, // $A71C + #$A71D, // $A71D + #$A71E, // $A71E + #$A71F, // $A71F + #$A720, // $A720 + #$A721, // $A721 + #$A722, // $A722 + #$A722, // $A723 + #$A724, // $A724 + #$A724, // $A725 + #$A726, // $A726 + #$A726, // $A727 + #$A728, // $A728 + #$A728, // $A729 + #$A72A, // $A72A + #$A72A, // $A72B + #$A72C, // $A72C + #$A72C, // $A72D + #$A72E, // $A72E + #$A72E, // $A72F + #$A730, // $A730 + #$A731, // $A731 + #$A732, // $A732 + #$A732, // $A733 + #$A734, // $A734 + #$A734, // $A735 + #$A736, // $A736 + #$A736, // $A737 + #$A738, // $A738 + #$A738, // $A739 + #$A73A, // $A73A + #$A73A, // $A73B + #$A73C, // $A73C + #$A73C, // $A73D + #$A73E, // $A73E + #$A73E, // $A73F + #$A740, // $A740 + #$A740, // $A741 + #$A742, // $A742 + #$A742, // $A743 + #$A744, // $A744 + #$A744, // $A745 + #$A746, // $A746 + #$A746, // $A747 + #$A748, // $A748 + #$A748, // $A749 + #$A74A, // $A74A + #$A74A, // $A74B + #$A74C, // $A74C + #$A74C, // $A74D + #$A74E, // $A74E + #$A74E, // $A74F + #$A750, // $A750 + #$A750, // $A751 + #$A752, // $A752 + #$A752, // $A753 + #$A754, // $A754 + #$A754, // $A755 + #$A756, // $A756 + #$A756, // $A757 + #$A758, // $A758 + #$A758, // $A759 + #$A75A, // $A75A + #$A75A, // $A75B + #$A75C, // $A75C + #$A75C, // $A75D + #$A75E, // $A75E + #$A75E, // $A75F + #$A760, // $A760 + #$A760, // $A761 + #$A762, // $A762 + #$A762, // $A763 + #$A764, // $A764 + #$A764, // $A765 + #$A766, // $A766 + #$A766, // $A767 + #$A768, // $A768 + #$A768, // $A769 + #$A76A, // $A76A + #$A76A, // $A76B + #$A76C, // $A76C + #$A76C, // $A76D + #$A76E, // $A76E + #$A76E, // $A76F + #$A770, // $A770 + #$A771, // $A771 + #$A772, // $A772 + #$A773, // $A773 + #$A774, // $A774 + #$A775, // $A775 + #$A776, // $A776 + #$A777, // $A777 + #$A778, // $A778 + #$A779, // $A779 + #$A779, // $A77A + #$A77B, // $A77B + #$A77B, // $A77C + #$A77D, // $A77D + #$A77E, // $A77E + #$A77E, // $A77F + #$A780, // $A780 + #$A780, // $A781 + #$A782, // $A782 + #$A782, // $A783 + #$A784, // $A784 + #$A784, // $A785 + #$A786, // $A786 + #$A786, // $A787 + #$A788, // $A788 + #$A789, // $A789 + #$A78A, // $A78A + #$A78B, // $A78B + #$A78B, // $A78C + #$A78D, // $A78D + #$A78E, // $A78E + #$A78F, // $A78F + #$A790, // $A790 + #$A790, // $A791 + #$A792, // $A792 + #$A792, // $A793 + #$A794, // $A794 + #$A795, // $A795 + #$A796, // $A796 + #$A796, // $A797 + #$A798, // $A798 + #$A798, // $A799 + #$A79A, // $A79A + #$A79A, // $A79B + #$A79C, // $A79C + #$A79C, // $A79D + #$A79E, // $A79E + #$A79E, // $A79F + #$A7A0, // $A7A0 + #$A7A0, // $A7A1 + #$A7A2, // $A7A2 + #$A7A2, // $A7A3 + #$A7A4, // $A7A4 + #$A7A4, // $A7A5 + #$A7A6, // $A7A6 + #$A7A6, // $A7A7 + #$A7A8, // $A7A8 + #$A7A8, // $A7A9 + #$A7AA, // $A7AA + #$A7AB, // $A7AB + #$A7AC, // $A7AC + #$A7AD, // $A7AD + #$A7AE, // $A7AE + #$A7AF, // $A7AF + #$A7B0, // $A7B0 + #$A7B1, // $A7B1 + #$A7B2, // $A7B2 + #$A7B3, // $A7B3 + #$A7B4, // $A7B4 + #$A7B4, // $A7B5 + #$A7B6, // $A7B6 + #$A7B6, // $A7B7 + #$A7B8, // $A7B8 + #$A7B9, // $A7B9 + #$A7BA, // $A7BA + #$A7BB, // $A7BB + #$A7BC, // $A7BC + #$A7BD, // $A7BD + #$A7BE, // $A7BE + #$A7BF, // $A7BF + #$A7C0, // $A7C0 + #$A7C1, // $A7C1 + #$A7C2, // $A7C2 + #$A7C3, // $A7C3 + #$A7C4, // $A7C4 + #$A7C5, // $A7C5 + #$A7C6, // $A7C6 + #$A7C7, // $A7C7 + #$A7C8, // $A7C8 + #$A7C9, // $A7C9 + #$A7CA, // $A7CA + #$A7CB, // $A7CB + #$A7CC, // $A7CC + #$A7CD, // $A7CD + #$A7CE, // $A7CE + #$A7CF, // $A7CF + #$A7D0, // $A7D0 + #$A7D1, // $A7D1 + #$A7D2, // $A7D2 + #$A7D3, // $A7D3 + #$A7D4, // $A7D4 + #$A7D5, // $A7D5 + #$A7D6, // $A7D6 + #$A7D7, // $A7D7 + #$A7D8, // $A7D8 + #$A7D9, // $A7D9 + #$A7DA, // $A7DA + #$A7DB, // $A7DB + #$A7DC, // $A7DC + #$A7DD, // $A7DD + #$A7DE, // $A7DE + #$A7DF, // $A7DF + #$A7E0, // $A7E0 + #$A7E1, // $A7E1 + #$A7E2, // $A7E2 + #$A7E3, // $A7E3 + #$A7E4, // $A7E4 + #$A7E5, // $A7E5 + #$A7E6, // $A7E6 + #$A7E7, // $A7E7 + #$A7E8, // $A7E8 + #$A7E9, // $A7E9 + #$A7EA, // $A7EA + #$A7EB, // $A7EB + #$A7EC, // $A7EC + #$A7ED, // $A7ED + #$A7EE, // $A7EE + #$A7EF, // $A7EF + #$A7F0, // $A7F0 + #$A7F1, // $A7F1 + #$A7F2, // $A7F2 + #$A7F3, // $A7F3 + #$A7F4, // $A7F4 + #$A7F5, // $A7F5 + #$A7F6, // $A7F6 + #$A7F7, // $A7F7 + #$A7F8, // $A7F8 + #$A7F9, // $A7F9 + #$A7FA, // $A7FA + #$A7FB, // $A7FB + #$A7FC, // $A7FC + #$A7FD, // $A7FD + #$A7FE, // $A7FE + #$A7FF, // $A7FF + #$A800, // $A800 + #$A801, // $A801 + #$A802, // $A802 + #$A803, // $A803 + #$A804, // $A804 + #$A805, // $A805 + #$A806, // $A806 + #$A807, // $A807 + #$A808, // $A808 + #$A809, // $A809 + #$A80A, // $A80A + #$A80B, // $A80B + #$A80C, // $A80C + #$A80D, // $A80D + #$A80E, // $A80E + #$A80F, // $A80F + #$A810, // $A810 + #$A811, // $A811 + #$A812, // $A812 + #$A813, // $A813 + #$A814, // $A814 + #$A815, // $A815 + #$A816, // $A816 + #$A817, // $A817 + #$A818, // $A818 + #$A819, // $A819 + #$A81A, // $A81A + #$A81B, // $A81B + #$A81C, // $A81C + #$A81D, // $A81D + #$A81E, // $A81E + #$A81F, // $A81F + #$A820, // $A820 + #$A821, // $A821 + #$A822, // $A822 + #$A823, // $A823 + #$A824, // $A824 + #$A825, // $A825 + #$A826, // $A826 + #$A827, // $A827 + #$A828, // $A828 + #$A829, // $A829 + #$A82A, // $A82A + #$A82B, // $A82B + #$A82C, // $A82C + #$A82D, // $A82D + #$A82E, // $A82E + #$A82F, // $A82F + #$A830, // $A830 + #$A831, // $A831 + #$A832, // $A832 + #$A833, // $A833 + #$A834, // $A834 + #$A835, // $A835 + #$A836, // $A836 + #$A837, // $A837 + #$A838, // $A838 + #$A839, // $A839 + #$A83A, // $A83A + #$A83B, // $A83B + #$A83C, // $A83C + #$A83D, // $A83D + #$A83E, // $A83E + #$A83F, // $A83F + #$A840, // $A840 + #$A841, // $A841 + #$A842, // $A842 + #$A843, // $A843 + #$A844, // $A844 + #$A845, // $A845 + #$A846, // $A846 + #$A847, // $A847 + #$A848, // $A848 + #$A849, // $A849 + #$A84A, // $A84A + #$A84B, // $A84B + #$A84C, // $A84C + #$A84D, // $A84D + #$A84E, // $A84E + #$A84F, // $A84F + #$A850, // $A850 + #$A851, // $A851 + #$A852, // $A852 + #$A853, // $A853 + #$A854, // $A854 + #$A855, // $A855 + #$A856, // $A856 + #$A857, // $A857 + #$A858, // $A858 + #$A859, // $A859 + #$A85A, // $A85A + #$A85B, // $A85B + #$A85C, // $A85C + #$A85D, // $A85D + #$A85E, // $A85E + #$A85F, // $A85F + #$A860, // $A860 + #$A861, // $A861 + #$A862, // $A862 + #$A863, // $A863 + #$A864, // $A864 + #$A865, // $A865 + #$A866, // $A866 + #$A867, // $A867 + #$A868, // $A868 + #$A869, // $A869 + #$A86A, // $A86A + #$A86B, // $A86B + #$A86C, // $A86C + #$A86D, // $A86D + #$A86E, // $A86E + #$A86F, // $A86F + #$A870, // $A870 + #$A871, // $A871 + #$A872, // $A872 + #$A873, // $A873 + #$A874, // $A874 + #$A875, // $A875 + #$A876, // $A876 + #$A877, // $A877 + #$A878, // $A878 + #$A879, // $A879 + #$A87A, // $A87A + #$A87B, // $A87B + #$A87C, // $A87C + #$A87D, // $A87D + #$A87E, // $A87E + #$A87F, // $A87F + #$A880, // $A880 + #$A881, // $A881 + #$A882, // $A882 + #$A883, // $A883 + #$A884, // $A884 + #$A885, // $A885 + #$A886, // $A886 + #$A887, // $A887 + #$A888, // $A888 + #$A889, // $A889 + #$A88A, // $A88A + #$A88B, // $A88B + #$A88C, // $A88C + #$A88D, // $A88D + #$A88E, // $A88E + #$A88F, // $A88F + #$A890, // $A890 + #$A891, // $A891 + #$A892, // $A892 + #$A893, // $A893 + #$A894, // $A894 + #$A895, // $A895 + #$A896, // $A896 + #$A897, // $A897 + #$A898, // $A898 + #$A899, // $A899 + #$A89A, // $A89A + #$A89B, // $A89B + #$A89C, // $A89C + #$A89D, // $A89D + #$A89E, // $A89E + #$A89F, // $A89F + #$A8A0, // $A8A0 + #$A8A1, // $A8A1 + #$A8A2, // $A8A2 + #$A8A3, // $A8A3 + #$A8A4, // $A8A4 + #$A8A5, // $A8A5 + #$A8A6, // $A8A6 + #$A8A7, // $A8A7 + #$A8A8, // $A8A8 + #$A8A9, // $A8A9 + #$A8AA, // $A8AA + #$A8AB, // $A8AB + #$A8AC, // $A8AC + #$A8AD, // $A8AD + #$A8AE, // $A8AE + #$A8AF, // $A8AF + #$A8B0, // $A8B0 + #$A8B1, // $A8B1 + #$A8B2, // $A8B2 + #$A8B3, // $A8B3 + #$A8B4, // $A8B4 + #$A8B5, // $A8B5 + #$A8B6, // $A8B6 + #$A8B7, // $A8B7 + #$A8B8, // $A8B8 + #$A8B9, // $A8B9 + #$A8BA, // $A8BA + #$A8BB, // $A8BB + #$A8BC, // $A8BC + #$A8BD, // $A8BD + #$A8BE, // $A8BE + #$A8BF, // $A8BF + #$A8C0, // $A8C0 + #$A8C1, // $A8C1 + #$A8C2, // $A8C2 + #$A8C3, // $A8C3 + #$A8C4, // $A8C4 + #$A8C5, // $A8C5 + #$A8C6, // $A8C6 + #$A8C7, // $A8C7 + #$A8C8, // $A8C8 + #$A8C9, // $A8C9 + #$A8CA, // $A8CA + #$A8CB, // $A8CB + #$A8CC, // $A8CC + #$A8CD, // $A8CD + #$A8CE, // $A8CE + #$A8CF, // $A8CF + #$A8D0, // $A8D0 + #$A8D1, // $A8D1 + #$A8D2, // $A8D2 + #$A8D3, // $A8D3 + #$A8D4, // $A8D4 + #$A8D5, // $A8D5 + #$A8D6, // $A8D6 + #$A8D7, // $A8D7 + #$A8D8, // $A8D8 + #$A8D9, // $A8D9 + #$A8DA, // $A8DA + #$A8DB, // $A8DB + #$A8DC, // $A8DC + #$A8DD, // $A8DD + #$A8DE, // $A8DE + #$A8DF, // $A8DF + #$A8E0, // $A8E0 + #$A8E1, // $A8E1 + #$A8E2, // $A8E2 + #$A8E3, // $A8E3 + #$A8E4, // $A8E4 + #$A8E5, // $A8E5 + #$A8E6, // $A8E6 + #$A8E7, // $A8E7 + #$A8E8, // $A8E8 + #$A8E9, // $A8E9 + #$A8EA, // $A8EA + #$A8EB, // $A8EB + #$A8EC, // $A8EC + #$A8ED, // $A8ED + #$A8EE, // $A8EE + #$A8EF, // $A8EF + #$A8F0, // $A8F0 + #$A8F1, // $A8F1 + #$A8F2, // $A8F2 + #$A8F3, // $A8F3 + #$A8F4, // $A8F4 + #$A8F5, // $A8F5 + #$A8F6, // $A8F6 + #$A8F7, // $A8F7 + #$A8F8, // $A8F8 + #$A8F9, // $A8F9 + #$A8FA, // $A8FA + #$A8FB, // $A8FB + #$A8FC, // $A8FC + #$A8FD, // $A8FD + #$A8FE, // $A8FE + #$A8FF, // $A8FF + #$A900, // $A900 + #$A901, // $A901 + #$A902, // $A902 + #$A903, // $A903 + #$A904, // $A904 + #$A905, // $A905 + #$A906, // $A906 + #$A907, // $A907 + #$A908, // $A908 + #$A909, // $A909 + #$A90A, // $A90A + #$A90B, // $A90B + #$A90C, // $A90C + #$A90D, // $A90D + #$A90E, // $A90E + #$A90F, // $A90F + #$A910, // $A910 + #$A911, // $A911 + #$A912, // $A912 + #$A913, // $A913 + #$A914, // $A914 + #$A915, // $A915 + #$A916, // $A916 + #$A917, // $A917 + #$A918, // $A918 + #$A919, // $A919 + #$A91A, // $A91A + #$A91B, // $A91B + #$A91C, // $A91C + #$A91D, // $A91D + #$A91E, // $A91E + #$A91F, // $A91F + #$A920, // $A920 + #$A921, // $A921 + #$A922, // $A922 + #$A923, // $A923 + #$A924, // $A924 + #$A925, // $A925 + #$A926, // $A926 + #$A927, // $A927 + #$A928, // $A928 + #$A929, // $A929 + #$A92A, // $A92A + #$A92B, // $A92B + #$A92C, // $A92C + #$A92D, // $A92D + #$A92E, // $A92E + #$A92F, // $A92F + #$A930, // $A930 + #$A931, // $A931 + #$A932, // $A932 + #$A933, // $A933 + #$A934, // $A934 + #$A935, // $A935 + #$A936, // $A936 + #$A937, // $A937 + #$A938, // $A938 + #$A939, // $A939 + #$A93A, // $A93A + #$A93B, // $A93B + #$A93C, // $A93C + #$A93D, // $A93D + #$A93E, // $A93E + #$A93F, // $A93F + #$A940, // $A940 + #$A941, // $A941 + #$A942, // $A942 + #$A943, // $A943 + #$A944, // $A944 + #$A945, // $A945 + #$A946, // $A946 + #$A947, // $A947 + #$A948, // $A948 + #$A949, // $A949 + #$A94A, // $A94A + #$A94B, // $A94B + #$A94C, // $A94C + #$A94D, // $A94D + #$A94E, // $A94E + #$A94F, // $A94F + #$A950, // $A950 + #$A951, // $A951 + #$A952, // $A952 + #$A953, // $A953 + #$A954, // $A954 + #$A955, // $A955 + #$A956, // $A956 + #$A957, // $A957 + #$A958, // $A958 + #$A959, // $A959 + #$A95A, // $A95A + #$A95B, // $A95B + #$A95C, // $A95C + #$A95D, // $A95D + #$A95E, // $A95E + #$A95F, // $A95F + #$A960, // $A960 + #$A961, // $A961 + #$A962, // $A962 + #$A963, // $A963 + #$A964, // $A964 + #$A965, // $A965 + #$A966, // $A966 + #$A967, // $A967 + #$A968, // $A968 + #$A969, // $A969 + #$A96A, // $A96A + #$A96B, // $A96B + #$A96C, // $A96C + #$A96D, // $A96D + #$A96E, // $A96E + #$A96F, // $A96F + #$A970, // $A970 + #$A971, // $A971 + #$A972, // $A972 + #$A973, // $A973 + #$A974, // $A974 + #$A975, // $A975 + #$A976, // $A976 + #$A977, // $A977 + #$A978, // $A978 + #$A979, // $A979 + #$A97A, // $A97A + #$A97B, // $A97B + #$A97C, // $A97C + #$A97D, // $A97D + #$A97E, // $A97E + #$A97F, // $A97F + #$A980, // $A980 + #$A981, // $A981 + #$A982, // $A982 + #$A983, // $A983 + #$A984, // $A984 + #$A985, // $A985 + #$A986, // $A986 + #$A987, // $A987 + #$A988, // $A988 + #$A989, // $A989 + #$A98A, // $A98A + #$A98B, // $A98B + #$A98C, // $A98C + #$A98D, // $A98D + #$A98E, // $A98E + #$A98F, // $A98F + #$A990, // $A990 + #$A991, // $A991 + #$A992, // $A992 + #$A993, // $A993 + #$A994, // $A994 + #$A995, // $A995 + #$A996, // $A996 + #$A997, // $A997 + #$A998, // $A998 + #$A999, // $A999 + #$A99A, // $A99A + #$A99B, // $A99B + #$A99C, // $A99C + #$A99D, // $A99D + #$A99E, // $A99E + #$A99F, // $A99F + #$A9A0, // $A9A0 + #$A9A1, // $A9A1 + #$A9A2, // $A9A2 + #$A9A3, // $A9A3 + #$A9A4, // $A9A4 + #$A9A5, // $A9A5 + #$A9A6, // $A9A6 + #$A9A7, // $A9A7 + #$A9A8, // $A9A8 + #$A9A9, // $A9A9 + #$A9AA, // $A9AA + #$A9AB, // $A9AB + #$A9AC, // $A9AC + #$A9AD, // $A9AD + #$A9AE, // $A9AE + #$A9AF, // $A9AF + #$A9B0, // $A9B0 + #$A9B1, // $A9B1 + #$A9B2, // $A9B2 + #$A9B3, // $A9B3 + #$A9B4, // $A9B4 + #$A9B5, // $A9B5 + #$A9B6, // $A9B6 + #$A9B7, // $A9B7 + #$A9B8, // $A9B8 + #$A9B9, // $A9B9 + #$A9BA, // $A9BA + #$A9BB, // $A9BB + #$A9BC, // $A9BC + #$A9BD, // $A9BD + #$A9BE, // $A9BE + #$A9BF, // $A9BF + #$A9C0, // $A9C0 + #$A9C1, // $A9C1 + #$A9C2, // $A9C2 + #$A9C3, // $A9C3 + #$A9C4, // $A9C4 + #$A9C5, // $A9C5 + #$A9C6, // $A9C6 + #$A9C7, // $A9C7 + #$A9C8, // $A9C8 + #$A9C9, // $A9C9 + #$A9CA, // $A9CA + #$A9CB, // $A9CB + #$A9CC, // $A9CC + #$A9CD, // $A9CD + #$A9CE, // $A9CE + #$A9CF, // $A9CF + #$A9D0, // $A9D0 + #$A9D1, // $A9D1 + #$A9D2, // $A9D2 + #$A9D3, // $A9D3 + #$A9D4, // $A9D4 + #$A9D5, // $A9D5 + #$A9D6, // $A9D6 + #$A9D7, // $A9D7 + #$A9D8, // $A9D8 + #$A9D9, // $A9D9 + #$A9DA, // $A9DA + #$A9DB, // $A9DB + #$A9DC, // $A9DC + #$A9DD, // $A9DD + #$A9DE, // $A9DE + #$A9DF, // $A9DF + #$A9E0, // $A9E0 + #$A9E1, // $A9E1 + #$A9E2, // $A9E2 + #$A9E3, // $A9E3 + #$A9E4, // $A9E4 + #$A9E5, // $A9E5 + #$A9E6, // $A9E6 + #$A9E7, // $A9E7 + #$A9E8, // $A9E8 + #$A9E9, // $A9E9 + #$A9EA, // $A9EA + #$A9EB, // $A9EB + #$A9EC, // $A9EC + #$A9ED, // $A9ED + #$A9EE, // $A9EE + #$A9EF, // $A9EF + #$A9F0, // $A9F0 + #$A9F1, // $A9F1 + #$A9F2, // $A9F2 + #$A9F3, // $A9F3 + #$A9F4, // $A9F4 + #$A9F5, // $A9F5 + #$A9F6, // $A9F6 + #$A9F7, // $A9F7 + #$A9F8, // $A9F8 + #$A9F9, // $A9F9 + #$A9FA, // $A9FA + #$A9FB, // $A9FB + #$A9FC, // $A9FC + #$A9FD, // $A9FD + #$A9FE, // $A9FE + #$A9FF, // $A9FF + #$AA00, // $AA00 + #$AA01, // $AA01 + #$AA02, // $AA02 + #$AA03, // $AA03 + #$AA04, // $AA04 + #$AA05, // $AA05 + #$AA06, // $AA06 + #$AA07, // $AA07 + #$AA08, // $AA08 + #$AA09, // $AA09 + #$AA0A, // $AA0A + #$AA0B, // $AA0B + #$AA0C, // $AA0C + #$AA0D, // $AA0D + #$AA0E, // $AA0E + #$AA0F, // $AA0F + #$AA10, // $AA10 + #$AA11, // $AA11 + #$AA12, // $AA12 + #$AA13, // $AA13 + #$AA14, // $AA14 + #$AA15, // $AA15 + #$AA16, // $AA16 + #$AA17, // $AA17 + #$AA18, // $AA18 + #$AA19, // $AA19 + #$AA1A, // $AA1A + #$AA1B, // $AA1B + #$AA1C, // $AA1C + #$AA1D, // $AA1D + #$AA1E, // $AA1E + #$AA1F, // $AA1F + #$AA20, // $AA20 + #$AA21, // $AA21 + #$AA22, // $AA22 + #$AA23, // $AA23 + #$AA24, // $AA24 + #$AA25, // $AA25 + #$AA26, // $AA26 + #$AA27, // $AA27 + #$AA28, // $AA28 + #$AA29, // $AA29 + #$AA2A, // $AA2A + #$AA2B, // $AA2B + #$AA2C, // $AA2C + #$AA2D, // $AA2D + #$AA2E, // $AA2E + #$AA2F, // $AA2F + #$AA30, // $AA30 + #$AA31, // $AA31 + #$AA32, // $AA32 + #$AA33, // $AA33 + #$AA34, // $AA34 + #$AA35, // $AA35 + #$AA36, // $AA36 + #$AA37, // $AA37 + #$AA38, // $AA38 + #$AA39, // $AA39 + #$AA3A, // $AA3A + #$AA3B, // $AA3B + #$AA3C, // $AA3C + #$AA3D, // $AA3D + #$AA3E, // $AA3E + #$AA3F, // $AA3F + #$AA40, // $AA40 + #$AA41, // $AA41 + #$AA42, // $AA42 + #$AA43, // $AA43 + #$AA44, // $AA44 + #$AA45, // $AA45 + #$AA46, // $AA46 + #$AA47, // $AA47 + #$AA48, // $AA48 + #$AA49, // $AA49 + #$AA4A, // $AA4A + #$AA4B, // $AA4B + #$AA4C, // $AA4C + #$AA4D, // $AA4D + #$AA4E, // $AA4E + #$AA4F, // $AA4F + #$AA50, // $AA50 + #$AA51, // $AA51 + #$AA52, // $AA52 + #$AA53, // $AA53 + #$AA54, // $AA54 + #$AA55, // $AA55 + #$AA56, // $AA56 + #$AA57, // $AA57 + #$AA58, // $AA58 + #$AA59, // $AA59 + #$AA5A, // $AA5A + #$AA5B, // $AA5B + #$AA5C, // $AA5C + #$AA5D, // $AA5D + #$AA5E, // $AA5E + #$AA5F, // $AA5F + #$AA60, // $AA60 + #$AA61, // $AA61 + #$AA62, // $AA62 + #$AA63, // $AA63 + #$AA64, // $AA64 + #$AA65, // $AA65 + #$AA66, // $AA66 + #$AA67, // $AA67 + #$AA68, // $AA68 + #$AA69, // $AA69 + #$AA6A, // $AA6A + #$AA6B, // $AA6B + #$AA6C, // $AA6C + #$AA6D, // $AA6D + #$AA6E, // $AA6E + #$AA6F, // $AA6F + #$AA70, // $AA70 + #$AA71, // $AA71 + #$AA72, // $AA72 + #$AA73, // $AA73 + #$AA74, // $AA74 + #$AA75, // $AA75 + #$AA76, // $AA76 + #$AA77, // $AA77 + #$AA78, // $AA78 + #$AA79, // $AA79 + #$AA7A, // $AA7A + #$AA7B, // $AA7B + #$AA7C, // $AA7C + #$AA7D, // $AA7D + #$AA7E, // $AA7E + #$AA7F, // $AA7F + #$AA80, // $AA80 + #$AA81, // $AA81 + #$AA82, // $AA82 + #$AA83, // $AA83 + #$AA84, // $AA84 + #$AA85, // $AA85 + #$AA86, // $AA86 + #$AA87, // $AA87 + #$AA88, // $AA88 + #$AA89, // $AA89 + #$AA8A, // $AA8A + #$AA8B, // $AA8B + #$AA8C, // $AA8C + #$AA8D, // $AA8D + #$AA8E, // $AA8E + #$AA8F, // $AA8F + #$AA90, // $AA90 + #$AA91, // $AA91 + #$AA92, // $AA92 + #$AA93, // $AA93 + #$AA94, // $AA94 + #$AA95, // $AA95 + #$AA96, // $AA96 + #$AA97, // $AA97 + #$AA98, // $AA98 + #$AA99, // $AA99 + #$AA9A, // $AA9A + #$AA9B, // $AA9B + #$AA9C, // $AA9C + #$AA9D, // $AA9D + #$AA9E, // $AA9E + #$AA9F, // $AA9F + #$AAA0, // $AAA0 + #$AAA1, // $AAA1 + #$AAA2, // $AAA2 + #$AAA3, // $AAA3 + #$AAA4, // $AAA4 + #$AAA5, // $AAA5 + #$AAA6, // $AAA6 + #$AAA7, // $AAA7 + #$AAA8, // $AAA8 + #$AAA9, // $AAA9 + #$AAAA, // $AAAA + #$AAAB, // $AAAB + #$AAAC, // $AAAC + #$AAAD, // $AAAD + #$AAAE, // $AAAE + #$AAAF, // $AAAF + #$AAB0, // $AAB0 + #$AAB1, // $AAB1 + #$AAB2, // $AAB2 + #$AAB3, // $AAB3 + #$AAB4, // $AAB4 + #$AAB5, // $AAB5 + #$AAB6, // $AAB6 + #$AAB7, // $AAB7 + #$AAB8, // $AAB8 + #$AAB9, // $AAB9 + #$AABA, // $AABA + #$AABB, // $AABB + #$AABC, // $AABC + #$AABD, // $AABD + #$AABE, // $AABE + #$AABF, // $AABF + #$AAC0, // $AAC0 + #$AAC1, // $AAC1 + #$AAC2, // $AAC2 + #$AAC3, // $AAC3 + #$AAC4, // $AAC4 + #$AAC5, // $AAC5 + #$AAC6, // $AAC6 + #$AAC7, // $AAC7 + #$AAC8, // $AAC8 + #$AAC9, // $AAC9 + #$AACA, // $AACA + #$AACB, // $AACB + #$AACC, // $AACC + #$AACD, // $AACD + #$AACE, // $AACE + #$AACF, // $AACF + #$AAD0, // $AAD0 + #$AAD1, // $AAD1 + #$AAD2, // $AAD2 + #$AAD3, // $AAD3 + #$AAD4, // $AAD4 + #$AAD5, // $AAD5 + #$AAD6, // $AAD6 + #$AAD7, // $AAD7 + #$AAD8, // $AAD8 + #$AAD9, // $AAD9 + #$AADA, // $AADA + #$AADB, // $AADB + #$AADC, // $AADC + #$AADD, // $AADD + #$AADE, // $AADE + #$AADF, // $AADF + #$AAE0, // $AAE0 + #$AAE1, // $AAE1 + #$AAE2, // $AAE2 + #$AAE3, // $AAE3 + #$AAE4, // $AAE4 + #$AAE5, // $AAE5 + #$AAE6, // $AAE6 + #$AAE7, // $AAE7 + #$AAE8, // $AAE8 + #$AAE9, // $AAE9 + #$AAEA, // $AAEA + #$AAEB, // $AAEB + #$AAEC, // $AAEC + #$AAED, // $AAED + #$AAEE, // $AAEE + #$AAEF, // $AAEF + #$AAF0, // $AAF0 + #$AAF1, // $AAF1 + #$AAF2, // $AAF2 + #$AAF3, // $AAF3 + #$AAF4, // $AAF4 + #$AAF5, // $AAF5 + #$AAF6, // $AAF6 + #$AAF7, // $AAF7 + #$AAF8, // $AAF8 + #$AAF9, // $AAF9 + #$AAFA, // $AAFA + #$AAFB, // $AAFB + #$AAFC, // $AAFC + #$AAFD, // $AAFD + #$AAFE, // $AAFE + #$AAFF, // $AAFF + #$AB00, // $AB00 + #$AB01, // $AB01 + #$AB02, // $AB02 + #$AB03, // $AB03 + #$AB04, // $AB04 + #$AB05, // $AB05 + #$AB06, // $AB06 + #$AB07, // $AB07 + #$AB08, // $AB08 + #$AB09, // $AB09 + #$AB0A, // $AB0A + #$AB0B, // $AB0B + #$AB0C, // $AB0C + #$AB0D, // $AB0D + #$AB0E, // $AB0E + #$AB0F, // $AB0F + #$AB10, // $AB10 + #$AB11, // $AB11 + #$AB12, // $AB12 + #$AB13, // $AB13 + #$AB14, // $AB14 + #$AB15, // $AB15 + #$AB16, // $AB16 + #$AB17, // $AB17 + #$AB18, // $AB18 + #$AB19, // $AB19 + #$AB1A, // $AB1A + #$AB1B, // $AB1B + #$AB1C, // $AB1C + #$AB1D, // $AB1D + #$AB1E, // $AB1E + #$AB1F, // $AB1F + #$AB20, // $AB20 + #$AB21, // $AB21 + #$AB22, // $AB22 + #$AB23, // $AB23 + #$AB24, // $AB24 + #$AB25, // $AB25 + #$AB26, // $AB26 + #$AB27, // $AB27 + #$AB28, // $AB28 + #$AB29, // $AB29 + #$AB2A, // $AB2A + #$AB2B, // $AB2B + #$AB2C, // $AB2C + #$AB2D, // $AB2D + #$AB2E, // $AB2E + #$AB2F, // $AB2F + #$AB30, // $AB30 + #$AB31, // $AB31 + #$AB32, // $AB32 + #$AB33, // $AB33 + #$AB34, // $AB34 + #$AB35, // $AB35 + #$AB36, // $AB36 + #$AB37, // $AB37 + #$AB38, // $AB38 + #$AB39, // $AB39 + #$AB3A, // $AB3A + #$AB3B, // $AB3B + #$AB3C, // $AB3C + #$AB3D, // $AB3D + #$AB3E, // $AB3E + #$AB3F, // $AB3F + #$AB40, // $AB40 + #$AB41, // $AB41 + #$AB42, // $AB42 + #$AB43, // $AB43 + #$AB44, // $AB44 + #$AB45, // $AB45 + #$AB46, // $AB46 + #$AB47, // $AB47 + #$AB48, // $AB48 + #$AB49, // $AB49 + #$AB4A, // $AB4A + #$AB4B, // $AB4B + #$AB4C, // $AB4C + #$AB4D, // $AB4D + #$AB4E, // $AB4E + #$AB4F, // $AB4F + #$AB50, // $AB50 + #$AB51, // $AB51 + #$AB52, // $AB52 + #$A7B3, // $AB53 + #$AB54, // $AB54 + #$AB55, // $AB55 + #$AB56, // $AB56 + #$AB57, // $AB57 + #$AB58, // $AB58 + #$AB59, // $AB59 + #$AB5A, // $AB5A + #$AB5B, // $AB5B + #$AB5C, // $AB5C + #$AB5D, // $AB5D + #$AB5E, // $AB5E + #$AB5F, // $AB5F + #$AB60, // $AB60 + #$AB61, // $AB61 + #$AB62, // $AB62 + #$AB63, // $AB63 + #$AB64, // $AB64 + #$AB65, // $AB65 + #$AB66, // $AB66 + #$AB67, // $AB67 + #$AB68, // $AB68 + #$AB69, // $AB69 + #$AB6A, // $AB6A + #$AB6B, // $AB6B + #$AB6C, // $AB6C + #$AB6D, // $AB6D + #$AB6E, // $AB6E + #$AB6F, // $AB6F + #$13A0, // $AB70 + #$13A1, // $AB71 + #$13A2, // $AB72 + #$13A3, // $AB73 + #$13A4, // $AB74 + #$13A5, // $AB75 + #$13A6, // $AB76 + #$13A7, // $AB77 + #$13A8, // $AB78 + #$13A9, // $AB79 + #$13AA, // $AB7A + #$13AB, // $AB7B + #$13AC, // $AB7C + #$13AD, // $AB7D + #$13AE, // $AB7E + #$13AF, // $AB7F + #$13B0, // $AB80 + #$13B1, // $AB81 + #$13B2, // $AB82 + #$13B3, // $AB83 + #$13B4, // $AB84 + #$13B5, // $AB85 + #$13B6, // $AB86 + #$13B7, // $AB87 + #$13B8, // $AB88 + #$13B9, // $AB89 + #$13BA, // $AB8A + #$13BB, // $AB8B + #$13BC, // $AB8C + #$13BD, // $AB8D + #$13BE, // $AB8E + #$13BF, // $AB8F + #$13C0, // $AB90 + #$13C1, // $AB91 + #$13C2, // $AB92 + #$13C3, // $AB93 + #$13C4, // $AB94 + #$13C5, // $AB95 + #$13C6, // $AB96 + #$13C7, // $AB97 + #$13C8, // $AB98 + #$13C9, // $AB99 + #$13CA, // $AB9A + #$13CB, // $AB9B + #$13CC, // $AB9C + #$13CD, // $AB9D + #$13CE, // $AB9E + #$13CF, // $AB9F + #$13D0, // $ABA0 + #$13D1, // $ABA1 + #$13D2, // $ABA2 + #$13D3, // $ABA3 + #$13D4, // $ABA4 + #$13D5, // $ABA5 + #$13D6, // $ABA6 + #$13D7, // $ABA7 + #$13D8, // $ABA8 + #$13D9, // $ABA9 + #$13DA, // $ABAA + #$13DB, // $ABAB + #$13DC, // $ABAC + #$13DD, // $ABAD + #$13DE, // $ABAE + #$13DF, // $ABAF + #$13E0, // $ABB0 + #$13E1, // $ABB1 + #$13E2, // $ABB2 + #$13E3, // $ABB3 + #$13E4, // $ABB4 + #$13E5, // $ABB5 + #$13E6, // $ABB6 + #$13E7, // $ABB7 + #$13E8, // $ABB8 + #$13E9, // $ABB9 + #$13EA, // $ABBA + #$13EB, // $ABBB + #$13EC, // $ABBC + #$13ED, // $ABBD + #$13EE, // $ABBE + #$13EF, // $ABBF + #$ABC0, // $ABC0 + #$ABC1, // $ABC1 + #$ABC2, // $ABC2 + #$ABC3, // $ABC3 + #$ABC4, // $ABC4 + #$ABC5, // $ABC5 + #$ABC6, // $ABC6 + #$ABC7, // $ABC7 + #$ABC8, // $ABC8 + #$ABC9, // $ABC9 + #$ABCA, // $ABCA + #$ABCB, // $ABCB + #$ABCC, // $ABCC + #$ABCD, // $ABCD + #$ABCE, // $ABCE + #$ABCF, // $ABCF + #$ABD0, // $ABD0 + #$ABD1, // $ABD1 + #$ABD2, // $ABD2 + #$ABD3, // $ABD3 + #$ABD4, // $ABD4 + #$ABD5, // $ABD5 + #$ABD6, // $ABD6 + #$ABD7, // $ABD7 + #$ABD8, // $ABD8 + #$ABD9, // $ABD9 + #$ABDA, // $ABDA + #$ABDB, // $ABDB + #$ABDC, // $ABDC + #$ABDD, // $ABDD + #$ABDE, // $ABDE + #$ABDF, // $ABDF + #$ABE0, // $ABE0 + #$ABE1, // $ABE1 + #$ABE2, // $ABE2 + #$ABE3, // $ABE3 + #$ABE4, // $ABE4 + #$ABE5, // $ABE5 + #$ABE6, // $ABE6 + #$ABE7, // $ABE7 + #$ABE8, // $ABE8 + #$ABE9, // $ABE9 + #$ABEA, // $ABEA + #$ABEB, // $ABEB + #$ABEC, // $ABEC + #$ABED, // $ABED + #$ABEE, // $ABEE + #$ABEF, // $ABEF + #$ABF0, // $ABF0 + #$ABF1, // $ABF1 + #$ABF2, // $ABF2 + #$ABF3, // $ABF3 + #$ABF4, // $ABF4 + #$ABF5, // $ABF5 + #$ABF6, // $ABF6 + #$ABF7, // $ABF7 + #$ABF8, // $ABF8 + #$ABF9, // $ABF9 + #$ABFA, // $ABFA + #$ABFB, // $ABFB + #$ABFC, // $ABFC + #$ABFD, // $ABFD + #$ABFE, // $ABFE + #$ABFF, // $ABFF + #$AC00, // $AC00 + #$AC01, // $AC01 + #$AC02, // $AC02 + #$AC03, // $AC03 + #$AC04, // $AC04 + #$AC05, // $AC05 + #$AC06, // $AC06 + #$AC07, // $AC07 + #$AC08, // $AC08 + #$AC09, // $AC09 + #$AC0A, // $AC0A + #$AC0B, // $AC0B + #$AC0C, // $AC0C + #$AC0D, // $AC0D + #$AC0E, // $AC0E + #$AC0F, // $AC0F + #$AC10, // $AC10 + #$AC11, // $AC11 + #$AC12, // $AC12 + #$AC13, // $AC13 + #$AC14, // $AC14 + #$AC15, // $AC15 + #$AC16, // $AC16 + #$AC17, // $AC17 + #$AC18, // $AC18 + #$AC19, // $AC19 + #$AC1A, // $AC1A + #$AC1B, // $AC1B + #$AC1C, // $AC1C + #$AC1D, // $AC1D + #$AC1E, // $AC1E + #$AC1F, // $AC1F + #$AC20, // $AC20 + #$AC21, // $AC21 + #$AC22, // $AC22 + #$AC23, // $AC23 + #$AC24, // $AC24 + #$AC25, // $AC25 + #$AC26, // $AC26 + #$AC27, // $AC27 + #$AC28, // $AC28 + #$AC29, // $AC29 + #$AC2A, // $AC2A + #$AC2B, // $AC2B + #$AC2C, // $AC2C + #$AC2D, // $AC2D + #$AC2E, // $AC2E + #$AC2F, // $AC2F + #$AC30, // $AC30 + #$AC31, // $AC31 + #$AC32, // $AC32 + #$AC33, // $AC33 + #$AC34, // $AC34 + #$AC35, // $AC35 + #$AC36, // $AC36 + #$AC37, // $AC37 + #$AC38, // $AC38 + #$AC39, // $AC39 + #$AC3A, // $AC3A + #$AC3B, // $AC3B + #$AC3C, // $AC3C + #$AC3D, // $AC3D + #$AC3E, // $AC3E + #$AC3F, // $AC3F + #$AC40, // $AC40 + #$AC41, // $AC41 + #$AC42, // $AC42 + #$AC43, // $AC43 + #$AC44, // $AC44 + #$AC45, // $AC45 + #$AC46, // $AC46 + #$AC47, // $AC47 + #$AC48, // $AC48 + #$AC49, // $AC49 + #$AC4A, // $AC4A + #$AC4B, // $AC4B + #$AC4C, // $AC4C + #$AC4D, // $AC4D + #$AC4E, // $AC4E + #$AC4F, // $AC4F + #$AC50, // $AC50 + #$AC51, // $AC51 + #$AC52, // $AC52 + #$AC53, // $AC53 + #$AC54, // $AC54 + #$AC55, // $AC55 + #$AC56, // $AC56 + #$AC57, // $AC57 + #$AC58, // $AC58 + #$AC59, // $AC59 + #$AC5A, // $AC5A + #$AC5B, // $AC5B + #$AC5C, // $AC5C + #$AC5D, // $AC5D + #$AC5E, // $AC5E + #$AC5F, // $AC5F + #$AC60, // $AC60 + #$AC61, // $AC61 + #$AC62, // $AC62 + #$AC63, // $AC63 + #$AC64, // $AC64 + #$AC65, // $AC65 + #$AC66, // $AC66 + #$AC67, // $AC67 + #$AC68, // $AC68 + #$AC69, // $AC69 + #$AC6A, // $AC6A + #$AC6B, // $AC6B + #$AC6C, // $AC6C + #$AC6D, // $AC6D + #$AC6E, // $AC6E + #$AC6F, // $AC6F + #$AC70, // $AC70 + #$AC71, // $AC71 + #$AC72, // $AC72 + #$AC73, // $AC73 + #$AC74, // $AC74 + #$AC75, // $AC75 + #$AC76, // $AC76 + #$AC77, // $AC77 + #$AC78, // $AC78 + #$AC79, // $AC79 + #$AC7A, // $AC7A + #$AC7B, // $AC7B + #$AC7C, // $AC7C + #$AC7D, // $AC7D + #$AC7E, // $AC7E + #$AC7F, // $AC7F + #$AC80, // $AC80 + #$AC81, // $AC81 + #$AC82, // $AC82 + #$AC83, // $AC83 + #$AC84, // $AC84 + #$AC85, // $AC85 + #$AC86, // $AC86 + #$AC87, // $AC87 + #$AC88, // $AC88 + #$AC89, // $AC89 + #$AC8A, // $AC8A + #$AC8B, // $AC8B + #$AC8C, // $AC8C + #$AC8D, // $AC8D + #$AC8E, // $AC8E + #$AC8F, // $AC8F + #$AC90, // $AC90 + #$AC91, // $AC91 + #$AC92, // $AC92 + #$AC93, // $AC93 + #$AC94, // $AC94 + #$AC95, // $AC95 + #$AC96, // $AC96 + #$AC97, // $AC97 + #$AC98, // $AC98 + #$AC99, // $AC99 + #$AC9A, // $AC9A + #$AC9B, // $AC9B + #$AC9C, // $AC9C + #$AC9D, // $AC9D + #$AC9E, // $AC9E + #$AC9F, // $AC9F + #$ACA0, // $ACA0 + #$ACA1, // $ACA1 + #$ACA2, // $ACA2 + #$ACA3, // $ACA3 + #$ACA4, // $ACA4 + #$ACA5, // $ACA5 + #$ACA6, // $ACA6 + #$ACA7, // $ACA7 + #$ACA8, // $ACA8 + #$ACA9, // $ACA9 + #$ACAA, // $ACAA + #$ACAB, // $ACAB + #$ACAC, // $ACAC + #$ACAD, // $ACAD + #$ACAE, // $ACAE + #$ACAF, // $ACAF + #$ACB0, // $ACB0 + #$ACB1, // $ACB1 + #$ACB2, // $ACB2 + #$ACB3, // $ACB3 + #$ACB4, // $ACB4 + #$ACB5, // $ACB5 + #$ACB6, // $ACB6 + #$ACB7, // $ACB7 + #$ACB8, // $ACB8 + #$ACB9, // $ACB9 + #$ACBA, // $ACBA + #$ACBB, // $ACBB + #$ACBC, // $ACBC + #$ACBD, // $ACBD + #$ACBE, // $ACBE + #$ACBF, // $ACBF + #$ACC0, // $ACC0 + #$ACC1, // $ACC1 + #$ACC2, // $ACC2 + #$ACC3, // $ACC3 + #$ACC4, // $ACC4 + #$ACC5, // $ACC5 + #$ACC6, // $ACC6 + #$ACC7, // $ACC7 + #$ACC8, // $ACC8 + #$ACC9, // $ACC9 + #$ACCA, // $ACCA + #$ACCB, // $ACCB + #$ACCC, // $ACCC + #$ACCD, // $ACCD + #$ACCE, // $ACCE + #$ACCF, // $ACCF + #$ACD0, // $ACD0 + #$ACD1, // $ACD1 + #$ACD2, // $ACD2 + #$ACD3, // $ACD3 + #$ACD4, // $ACD4 + #$ACD5, // $ACD5 + #$ACD6, // $ACD6 + #$ACD7, // $ACD7 + #$ACD8, // $ACD8 + #$ACD9, // $ACD9 + #$ACDA, // $ACDA + #$ACDB, // $ACDB + #$ACDC, // $ACDC + #$ACDD, // $ACDD + #$ACDE, // $ACDE + #$ACDF, // $ACDF + #$ACE0, // $ACE0 + #$ACE1, // $ACE1 + #$ACE2, // $ACE2 + #$ACE3, // $ACE3 + #$ACE4, // $ACE4 + #$ACE5, // $ACE5 + #$ACE6, // $ACE6 + #$ACE7, // $ACE7 + #$ACE8, // $ACE8 + #$ACE9, // $ACE9 + #$ACEA, // $ACEA + #$ACEB, // $ACEB + #$ACEC, // $ACEC + #$ACED, // $ACED + #$ACEE, // $ACEE + #$ACEF, // $ACEF + #$ACF0, // $ACF0 + #$ACF1, // $ACF1 + #$ACF2, // $ACF2 + #$ACF3, // $ACF3 + #$ACF4, // $ACF4 + #$ACF5, // $ACF5 + #$ACF6, // $ACF6 + #$ACF7, // $ACF7 + #$ACF8, // $ACF8 + #$ACF9, // $ACF9 + #$ACFA, // $ACFA + #$ACFB, // $ACFB + #$ACFC, // $ACFC + #$ACFD, // $ACFD + #$ACFE, // $ACFE + #$ACFF, // $ACFF + #$AD00, // $AD00 + #$AD01, // $AD01 + #$AD02, // $AD02 + #$AD03, // $AD03 + #$AD04, // $AD04 + #$AD05, // $AD05 + #$AD06, // $AD06 + #$AD07, // $AD07 + #$AD08, // $AD08 + #$AD09, // $AD09 + #$AD0A, // $AD0A + #$AD0B, // $AD0B + #$AD0C, // $AD0C + #$AD0D, // $AD0D + #$AD0E, // $AD0E + #$AD0F, // $AD0F + #$AD10, // $AD10 + #$AD11, // $AD11 + #$AD12, // $AD12 + #$AD13, // $AD13 + #$AD14, // $AD14 + #$AD15, // $AD15 + #$AD16, // $AD16 + #$AD17, // $AD17 + #$AD18, // $AD18 + #$AD19, // $AD19 + #$AD1A, // $AD1A + #$AD1B, // $AD1B + #$AD1C, // $AD1C + #$AD1D, // $AD1D + #$AD1E, // $AD1E + #$AD1F, // $AD1F + #$AD20, // $AD20 + #$AD21, // $AD21 + #$AD22, // $AD22 + #$AD23, // $AD23 + #$AD24, // $AD24 + #$AD25, // $AD25 + #$AD26, // $AD26 + #$AD27, // $AD27 + #$AD28, // $AD28 + #$AD29, // $AD29 + #$AD2A, // $AD2A + #$AD2B, // $AD2B + #$AD2C, // $AD2C + #$AD2D, // $AD2D + #$AD2E, // $AD2E + #$AD2F, // $AD2F + #$AD30, // $AD30 + #$AD31, // $AD31 + #$AD32, // $AD32 + #$AD33, // $AD33 + #$AD34, // $AD34 + #$AD35, // $AD35 + #$AD36, // $AD36 + #$AD37, // $AD37 + #$AD38, // $AD38 + #$AD39, // $AD39 + #$AD3A, // $AD3A + #$AD3B, // $AD3B + #$AD3C, // $AD3C + #$AD3D, // $AD3D + #$AD3E, // $AD3E + #$AD3F, // $AD3F + #$AD40, // $AD40 + #$AD41, // $AD41 + #$AD42, // $AD42 + #$AD43, // $AD43 + #$AD44, // $AD44 + #$AD45, // $AD45 + #$AD46, // $AD46 + #$AD47, // $AD47 + #$AD48, // $AD48 + #$AD49, // $AD49 + #$AD4A, // $AD4A + #$AD4B, // $AD4B + #$AD4C, // $AD4C + #$AD4D, // $AD4D + #$AD4E, // $AD4E + #$AD4F, // $AD4F + #$AD50, // $AD50 + #$AD51, // $AD51 + #$AD52, // $AD52 + #$AD53, // $AD53 + #$AD54, // $AD54 + #$AD55, // $AD55 + #$AD56, // $AD56 + #$AD57, // $AD57 + #$AD58, // $AD58 + #$AD59, // $AD59 + #$AD5A, // $AD5A + #$AD5B, // $AD5B + #$AD5C, // $AD5C + #$AD5D, // $AD5D + #$AD5E, // $AD5E + #$AD5F, // $AD5F + #$AD60, // $AD60 + #$AD61, // $AD61 + #$AD62, // $AD62 + #$AD63, // $AD63 + #$AD64, // $AD64 + #$AD65, // $AD65 + #$AD66, // $AD66 + #$AD67, // $AD67 + #$AD68, // $AD68 + #$AD69, // $AD69 + #$AD6A, // $AD6A + #$AD6B, // $AD6B + #$AD6C, // $AD6C + #$AD6D, // $AD6D + #$AD6E, // $AD6E + #$AD6F, // $AD6F + #$AD70, // $AD70 + #$AD71, // $AD71 + #$AD72, // $AD72 + #$AD73, // $AD73 + #$AD74, // $AD74 + #$AD75, // $AD75 + #$AD76, // $AD76 + #$AD77, // $AD77 + #$AD78, // $AD78 + #$AD79, // $AD79 + #$AD7A, // $AD7A + #$AD7B, // $AD7B + #$AD7C, // $AD7C + #$AD7D, // $AD7D + #$AD7E, // $AD7E + #$AD7F, // $AD7F + #$AD80, // $AD80 + #$AD81, // $AD81 + #$AD82, // $AD82 + #$AD83, // $AD83 + #$AD84, // $AD84 + #$AD85, // $AD85 + #$AD86, // $AD86 + #$AD87, // $AD87 + #$AD88, // $AD88 + #$AD89, // $AD89 + #$AD8A, // $AD8A + #$AD8B, // $AD8B + #$AD8C, // $AD8C + #$AD8D, // $AD8D + #$AD8E, // $AD8E + #$AD8F, // $AD8F + #$AD90, // $AD90 + #$AD91, // $AD91 + #$AD92, // $AD92 + #$AD93, // $AD93 + #$AD94, // $AD94 + #$AD95, // $AD95 + #$AD96, // $AD96 + #$AD97, // $AD97 + #$AD98, // $AD98 + #$AD99, // $AD99 + #$AD9A, // $AD9A + #$AD9B, // $AD9B + #$AD9C, // $AD9C + #$AD9D, // $AD9D + #$AD9E, // $AD9E + #$AD9F, // $AD9F + #$ADA0, // $ADA0 + #$ADA1, // $ADA1 + #$ADA2, // $ADA2 + #$ADA3, // $ADA3 + #$ADA4, // $ADA4 + #$ADA5, // $ADA5 + #$ADA6, // $ADA6 + #$ADA7, // $ADA7 + #$ADA8, // $ADA8 + #$ADA9, // $ADA9 + #$ADAA, // $ADAA + #$ADAB, // $ADAB + #$ADAC, // $ADAC + #$ADAD, // $ADAD + #$ADAE, // $ADAE + #$ADAF, // $ADAF + #$ADB0, // $ADB0 + #$ADB1, // $ADB1 + #$ADB2, // $ADB2 + #$ADB3, // $ADB3 + #$ADB4, // $ADB4 + #$ADB5, // $ADB5 + #$ADB6, // $ADB6 + #$ADB7, // $ADB7 + #$ADB8, // $ADB8 + #$ADB9, // $ADB9 + #$ADBA, // $ADBA + #$ADBB, // $ADBB + #$ADBC, // $ADBC + #$ADBD, // $ADBD + #$ADBE, // $ADBE + #$ADBF, // $ADBF + #$ADC0, // $ADC0 + #$ADC1, // $ADC1 + #$ADC2, // $ADC2 + #$ADC3, // $ADC3 + #$ADC4, // $ADC4 + #$ADC5, // $ADC5 + #$ADC6, // $ADC6 + #$ADC7, // $ADC7 + #$ADC8, // $ADC8 + #$ADC9, // $ADC9 + #$ADCA, // $ADCA + #$ADCB, // $ADCB + #$ADCC, // $ADCC + #$ADCD, // $ADCD + #$ADCE, // $ADCE + #$ADCF, // $ADCF + #$ADD0, // $ADD0 + #$ADD1, // $ADD1 + #$ADD2, // $ADD2 + #$ADD3, // $ADD3 + #$ADD4, // $ADD4 + #$ADD5, // $ADD5 + #$ADD6, // $ADD6 + #$ADD7, // $ADD7 + #$ADD8, // $ADD8 + #$ADD9, // $ADD9 + #$ADDA, // $ADDA + #$ADDB, // $ADDB + #$ADDC, // $ADDC + #$ADDD, // $ADDD + #$ADDE, // $ADDE + #$ADDF, // $ADDF + #$ADE0, // $ADE0 + #$ADE1, // $ADE1 + #$ADE2, // $ADE2 + #$ADE3, // $ADE3 + #$ADE4, // $ADE4 + #$ADE5, // $ADE5 + #$ADE6, // $ADE6 + #$ADE7, // $ADE7 + #$ADE8, // $ADE8 + #$ADE9, // $ADE9 + #$ADEA, // $ADEA + #$ADEB, // $ADEB + #$ADEC, // $ADEC + #$ADED, // $ADED + #$ADEE, // $ADEE + #$ADEF, // $ADEF + #$ADF0, // $ADF0 + #$ADF1, // $ADF1 + #$ADF2, // $ADF2 + #$ADF3, // $ADF3 + #$ADF4, // $ADF4 + #$ADF5, // $ADF5 + #$ADF6, // $ADF6 + #$ADF7, // $ADF7 + #$ADF8, // $ADF8 + #$ADF9, // $ADF9 + #$ADFA, // $ADFA + #$ADFB, // $ADFB + #$ADFC, // $ADFC + #$ADFD, // $ADFD + #$ADFE, // $ADFE + #$ADFF, // $ADFF + #$AE00, // $AE00 + #$AE01, // $AE01 + #$AE02, // $AE02 + #$AE03, // $AE03 + #$AE04, // $AE04 + #$AE05, // $AE05 + #$AE06, // $AE06 + #$AE07, // $AE07 + #$AE08, // $AE08 + #$AE09, // $AE09 + #$AE0A, // $AE0A + #$AE0B, // $AE0B + #$AE0C, // $AE0C + #$AE0D, // $AE0D + #$AE0E, // $AE0E + #$AE0F, // $AE0F + #$AE10, // $AE10 + #$AE11, // $AE11 + #$AE12, // $AE12 + #$AE13, // $AE13 + #$AE14, // $AE14 + #$AE15, // $AE15 + #$AE16, // $AE16 + #$AE17, // $AE17 + #$AE18, // $AE18 + #$AE19, // $AE19 + #$AE1A, // $AE1A + #$AE1B, // $AE1B + #$AE1C, // $AE1C + #$AE1D, // $AE1D + #$AE1E, // $AE1E + #$AE1F, // $AE1F + #$AE20, // $AE20 + #$AE21, // $AE21 + #$AE22, // $AE22 + #$AE23, // $AE23 + #$AE24, // $AE24 + #$AE25, // $AE25 + #$AE26, // $AE26 + #$AE27, // $AE27 + #$AE28, // $AE28 + #$AE29, // $AE29 + #$AE2A, // $AE2A + #$AE2B, // $AE2B + #$AE2C, // $AE2C + #$AE2D, // $AE2D + #$AE2E, // $AE2E + #$AE2F, // $AE2F + #$AE30, // $AE30 + #$AE31, // $AE31 + #$AE32, // $AE32 + #$AE33, // $AE33 + #$AE34, // $AE34 + #$AE35, // $AE35 + #$AE36, // $AE36 + #$AE37, // $AE37 + #$AE38, // $AE38 + #$AE39, // $AE39 + #$AE3A, // $AE3A + #$AE3B, // $AE3B + #$AE3C, // $AE3C + #$AE3D, // $AE3D + #$AE3E, // $AE3E + #$AE3F, // $AE3F + #$AE40, // $AE40 + #$AE41, // $AE41 + #$AE42, // $AE42 + #$AE43, // $AE43 + #$AE44, // $AE44 + #$AE45, // $AE45 + #$AE46, // $AE46 + #$AE47, // $AE47 + #$AE48, // $AE48 + #$AE49, // $AE49 + #$AE4A, // $AE4A + #$AE4B, // $AE4B + #$AE4C, // $AE4C + #$AE4D, // $AE4D + #$AE4E, // $AE4E + #$AE4F, // $AE4F + #$AE50, // $AE50 + #$AE51, // $AE51 + #$AE52, // $AE52 + #$AE53, // $AE53 + #$AE54, // $AE54 + #$AE55, // $AE55 + #$AE56, // $AE56 + #$AE57, // $AE57 + #$AE58, // $AE58 + #$AE59, // $AE59 + #$AE5A, // $AE5A + #$AE5B, // $AE5B + #$AE5C, // $AE5C + #$AE5D, // $AE5D + #$AE5E, // $AE5E + #$AE5F, // $AE5F + #$AE60, // $AE60 + #$AE61, // $AE61 + #$AE62, // $AE62 + #$AE63, // $AE63 + #$AE64, // $AE64 + #$AE65, // $AE65 + #$AE66, // $AE66 + #$AE67, // $AE67 + #$AE68, // $AE68 + #$AE69, // $AE69 + #$AE6A, // $AE6A + #$AE6B, // $AE6B + #$AE6C, // $AE6C + #$AE6D, // $AE6D + #$AE6E, // $AE6E + #$AE6F, // $AE6F + #$AE70, // $AE70 + #$AE71, // $AE71 + #$AE72, // $AE72 + #$AE73, // $AE73 + #$AE74, // $AE74 + #$AE75, // $AE75 + #$AE76, // $AE76 + #$AE77, // $AE77 + #$AE78, // $AE78 + #$AE79, // $AE79 + #$AE7A, // $AE7A + #$AE7B, // $AE7B + #$AE7C, // $AE7C + #$AE7D, // $AE7D + #$AE7E, // $AE7E + #$AE7F, // $AE7F + #$AE80, // $AE80 + #$AE81, // $AE81 + #$AE82, // $AE82 + #$AE83, // $AE83 + #$AE84, // $AE84 + #$AE85, // $AE85 + #$AE86, // $AE86 + #$AE87, // $AE87 + #$AE88, // $AE88 + #$AE89, // $AE89 + #$AE8A, // $AE8A + #$AE8B, // $AE8B + #$AE8C, // $AE8C + #$AE8D, // $AE8D + #$AE8E, // $AE8E + #$AE8F, // $AE8F + #$AE90, // $AE90 + #$AE91, // $AE91 + #$AE92, // $AE92 + #$AE93, // $AE93 + #$AE94, // $AE94 + #$AE95, // $AE95 + #$AE96, // $AE96 + #$AE97, // $AE97 + #$AE98, // $AE98 + #$AE99, // $AE99 + #$AE9A, // $AE9A + #$AE9B, // $AE9B + #$AE9C, // $AE9C + #$AE9D, // $AE9D + #$AE9E, // $AE9E + #$AE9F, // $AE9F + #$AEA0, // $AEA0 + #$AEA1, // $AEA1 + #$AEA2, // $AEA2 + #$AEA3, // $AEA3 + #$AEA4, // $AEA4 + #$AEA5, // $AEA5 + #$AEA6, // $AEA6 + #$AEA7, // $AEA7 + #$AEA8, // $AEA8 + #$AEA9, // $AEA9 + #$AEAA, // $AEAA + #$AEAB, // $AEAB + #$AEAC, // $AEAC + #$AEAD, // $AEAD + #$AEAE, // $AEAE + #$AEAF, // $AEAF + #$AEB0, // $AEB0 + #$AEB1, // $AEB1 + #$AEB2, // $AEB2 + #$AEB3, // $AEB3 + #$AEB4, // $AEB4 + #$AEB5, // $AEB5 + #$AEB6, // $AEB6 + #$AEB7, // $AEB7 + #$AEB8, // $AEB8 + #$AEB9, // $AEB9 + #$AEBA, // $AEBA + #$AEBB, // $AEBB + #$AEBC, // $AEBC + #$AEBD, // $AEBD + #$AEBE, // $AEBE + #$AEBF, // $AEBF + #$AEC0, // $AEC0 + #$AEC1, // $AEC1 + #$AEC2, // $AEC2 + #$AEC3, // $AEC3 + #$AEC4, // $AEC4 + #$AEC5, // $AEC5 + #$AEC6, // $AEC6 + #$AEC7, // $AEC7 + #$AEC8, // $AEC8 + #$AEC9, // $AEC9 + #$AECA, // $AECA + #$AECB, // $AECB + #$AECC, // $AECC + #$AECD, // $AECD + #$AECE, // $AECE + #$AECF, // $AECF + #$AED0, // $AED0 + #$AED1, // $AED1 + #$AED2, // $AED2 + #$AED3, // $AED3 + #$AED4, // $AED4 + #$AED5, // $AED5 + #$AED6, // $AED6 + #$AED7, // $AED7 + #$AED8, // $AED8 + #$AED9, // $AED9 + #$AEDA, // $AEDA + #$AEDB, // $AEDB + #$AEDC, // $AEDC + #$AEDD, // $AEDD + #$AEDE, // $AEDE + #$AEDF, // $AEDF + #$AEE0, // $AEE0 + #$AEE1, // $AEE1 + #$AEE2, // $AEE2 + #$AEE3, // $AEE3 + #$AEE4, // $AEE4 + #$AEE5, // $AEE5 + #$AEE6, // $AEE6 + #$AEE7, // $AEE7 + #$AEE8, // $AEE8 + #$AEE9, // $AEE9 + #$AEEA, // $AEEA + #$AEEB, // $AEEB + #$AEEC, // $AEEC + #$AEED, // $AEED + #$AEEE, // $AEEE + #$AEEF, // $AEEF + #$AEF0, // $AEF0 + #$AEF1, // $AEF1 + #$AEF2, // $AEF2 + #$AEF3, // $AEF3 + #$AEF4, // $AEF4 + #$AEF5, // $AEF5 + #$AEF6, // $AEF6 + #$AEF7, // $AEF7 + #$AEF8, // $AEF8 + #$AEF9, // $AEF9 + #$AEFA, // $AEFA + #$AEFB, // $AEFB + #$AEFC, // $AEFC + #$AEFD, // $AEFD + #$AEFE, // $AEFE + #$AEFF, // $AEFF + #$AF00, // $AF00 + #$AF01, // $AF01 + #$AF02, // $AF02 + #$AF03, // $AF03 + #$AF04, // $AF04 + #$AF05, // $AF05 + #$AF06, // $AF06 + #$AF07, // $AF07 + #$AF08, // $AF08 + #$AF09, // $AF09 + #$AF0A, // $AF0A + #$AF0B, // $AF0B + #$AF0C, // $AF0C + #$AF0D, // $AF0D + #$AF0E, // $AF0E + #$AF0F, // $AF0F + #$AF10, // $AF10 + #$AF11, // $AF11 + #$AF12, // $AF12 + #$AF13, // $AF13 + #$AF14, // $AF14 + #$AF15, // $AF15 + #$AF16, // $AF16 + #$AF17, // $AF17 + #$AF18, // $AF18 + #$AF19, // $AF19 + #$AF1A, // $AF1A + #$AF1B, // $AF1B + #$AF1C, // $AF1C + #$AF1D, // $AF1D + #$AF1E, // $AF1E + #$AF1F, // $AF1F + #$AF20, // $AF20 + #$AF21, // $AF21 + #$AF22, // $AF22 + #$AF23, // $AF23 + #$AF24, // $AF24 + #$AF25, // $AF25 + #$AF26, // $AF26 + #$AF27, // $AF27 + #$AF28, // $AF28 + #$AF29, // $AF29 + #$AF2A, // $AF2A + #$AF2B, // $AF2B + #$AF2C, // $AF2C + #$AF2D, // $AF2D + #$AF2E, // $AF2E + #$AF2F, // $AF2F + #$AF30, // $AF30 + #$AF31, // $AF31 + #$AF32, // $AF32 + #$AF33, // $AF33 + #$AF34, // $AF34 + #$AF35, // $AF35 + #$AF36, // $AF36 + #$AF37, // $AF37 + #$AF38, // $AF38 + #$AF39, // $AF39 + #$AF3A, // $AF3A + #$AF3B, // $AF3B + #$AF3C, // $AF3C + #$AF3D, // $AF3D + #$AF3E, // $AF3E + #$AF3F, // $AF3F + #$AF40, // $AF40 + #$AF41, // $AF41 + #$AF42, // $AF42 + #$AF43, // $AF43 + #$AF44, // $AF44 + #$AF45, // $AF45 + #$AF46, // $AF46 + #$AF47, // $AF47 + #$AF48, // $AF48 + #$AF49, // $AF49 + #$AF4A, // $AF4A + #$AF4B, // $AF4B + #$AF4C, // $AF4C + #$AF4D, // $AF4D + #$AF4E, // $AF4E + #$AF4F, // $AF4F + #$AF50, // $AF50 + #$AF51, // $AF51 + #$AF52, // $AF52 + #$AF53, // $AF53 + #$AF54, // $AF54 + #$AF55, // $AF55 + #$AF56, // $AF56 + #$AF57, // $AF57 + #$AF58, // $AF58 + #$AF59, // $AF59 + #$AF5A, // $AF5A + #$AF5B, // $AF5B + #$AF5C, // $AF5C + #$AF5D, // $AF5D + #$AF5E, // $AF5E + #$AF5F, // $AF5F + #$AF60, // $AF60 + #$AF61, // $AF61 + #$AF62, // $AF62 + #$AF63, // $AF63 + #$AF64, // $AF64 + #$AF65, // $AF65 + #$AF66, // $AF66 + #$AF67, // $AF67 + #$AF68, // $AF68 + #$AF69, // $AF69 + #$AF6A, // $AF6A + #$AF6B, // $AF6B + #$AF6C, // $AF6C + #$AF6D, // $AF6D + #$AF6E, // $AF6E + #$AF6F, // $AF6F + #$AF70, // $AF70 + #$AF71, // $AF71 + #$AF72, // $AF72 + #$AF73, // $AF73 + #$AF74, // $AF74 + #$AF75, // $AF75 + #$AF76, // $AF76 + #$AF77, // $AF77 + #$AF78, // $AF78 + #$AF79, // $AF79 + #$AF7A, // $AF7A + #$AF7B, // $AF7B + #$AF7C, // $AF7C + #$AF7D, // $AF7D + #$AF7E, // $AF7E + #$AF7F, // $AF7F + #$AF80, // $AF80 + #$AF81, // $AF81 + #$AF82, // $AF82 + #$AF83, // $AF83 + #$AF84, // $AF84 + #$AF85, // $AF85 + #$AF86, // $AF86 + #$AF87, // $AF87 + #$AF88, // $AF88 + #$AF89, // $AF89 + #$AF8A, // $AF8A + #$AF8B, // $AF8B + #$AF8C, // $AF8C + #$AF8D, // $AF8D + #$AF8E, // $AF8E + #$AF8F, // $AF8F + #$AF90, // $AF90 + #$AF91, // $AF91 + #$AF92, // $AF92 + #$AF93, // $AF93 + #$AF94, // $AF94 + #$AF95, // $AF95 + #$AF96, // $AF96 + #$AF97, // $AF97 + #$AF98, // $AF98 + #$AF99, // $AF99 + #$AF9A, // $AF9A + #$AF9B, // $AF9B + #$AF9C, // $AF9C + #$AF9D, // $AF9D + #$AF9E, // $AF9E + #$AF9F, // $AF9F + #$AFA0, // $AFA0 + #$AFA1, // $AFA1 + #$AFA2, // $AFA2 + #$AFA3, // $AFA3 + #$AFA4, // $AFA4 + #$AFA5, // $AFA5 + #$AFA6, // $AFA6 + #$AFA7, // $AFA7 + #$AFA8, // $AFA8 + #$AFA9, // $AFA9 + #$AFAA, // $AFAA + #$AFAB, // $AFAB + #$AFAC, // $AFAC + #$AFAD, // $AFAD + #$AFAE, // $AFAE + #$AFAF, // $AFAF + #$AFB0, // $AFB0 + #$AFB1, // $AFB1 + #$AFB2, // $AFB2 + #$AFB3, // $AFB3 + #$AFB4, // $AFB4 + #$AFB5, // $AFB5 + #$AFB6, // $AFB6 + #$AFB7, // $AFB7 + #$AFB8, // $AFB8 + #$AFB9, // $AFB9 + #$AFBA, // $AFBA + #$AFBB, // $AFBB + #$AFBC, // $AFBC + #$AFBD, // $AFBD + #$AFBE, // $AFBE + #$AFBF, // $AFBF + #$AFC0, // $AFC0 + #$AFC1, // $AFC1 + #$AFC2, // $AFC2 + #$AFC3, // $AFC3 + #$AFC4, // $AFC4 + #$AFC5, // $AFC5 + #$AFC6, // $AFC6 + #$AFC7, // $AFC7 + #$AFC8, // $AFC8 + #$AFC9, // $AFC9 + #$AFCA, // $AFCA + #$AFCB, // $AFCB + #$AFCC, // $AFCC + #$AFCD, // $AFCD + #$AFCE, // $AFCE + #$AFCF, // $AFCF + #$AFD0, // $AFD0 + #$AFD1, // $AFD1 + #$AFD2, // $AFD2 + #$AFD3, // $AFD3 + #$AFD4, // $AFD4 + #$AFD5, // $AFD5 + #$AFD6, // $AFD6 + #$AFD7, // $AFD7 + #$AFD8, // $AFD8 + #$AFD9, // $AFD9 + #$AFDA, // $AFDA + #$AFDB, // $AFDB + #$AFDC, // $AFDC + #$AFDD, // $AFDD + #$AFDE, // $AFDE + #$AFDF, // $AFDF + #$AFE0, // $AFE0 + #$AFE1, // $AFE1 + #$AFE2, // $AFE2 + #$AFE3, // $AFE3 + #$AFE4, // $AFE4 + #$AFE5, // $AFE5 + #$AFE6, // $AFE6 + #$AFE7, // $AFE7 + #$AFE8, // $AFE8 + #$AFE9, // $AFE9 + #$AFEA, // $AFEA + #$AFEB, // $AFEB + #$AFEC, // $AFEC + #$AFED, // $AFED + #$AFEE, // $AFEE + #$AFEF, // $AFEF + #$AFF0, // $AFF0 + #$AFF1, // $AFF1 + #$AFF2, // $AFF2 + #$AFF3, // $AFF3 + #$AFF4, // $AFF4 + #$AFF5, // $AFF5 + #$AFF6, // $AFF6 + #$AFF7, // $AFF7 + #$AFF8, // $AFF8 + #$AFF9, // $AFF9 + #$AFFA, // $AFFA + #$AFFB, // $AFFB + #$AFFC, // $AFFC + #$AFFD, // $AFFD + #$AFFE, // $AFFE + #$AFFF, // $AFFF + #$B000, // $B000 + #$B001, // $B001 + #$B002, // $B002 + #$B003, // $B003 + #$B004, // $B004 + #$B005, // $B005 + #$B006, // $B006 + #$B007, // $B007 + #$B008, // $B008 + #$B009, // $B009 + #$B00A, // $B00A + #$B00B, // $B00B + #$B00C, // $B00C + #$B00D, // $B00D + #$B00E, // $B00E + #$B00F, // $B00F + #$B010, // $B010 + #$B011, // $B011 + #$B012, // $B012 + #$B013, // $B013 + #$B014, // $B014 + #$B015, // $B015 + #$B016, // $B016 + #$B017, // $B017 + #$B018, // $B018 + #$B019, // $B019 + #$B01A, // $B01A + #$B01B, // $B01B + #$B01C, // $B01C + #$B01D, // $B01D + #$B01E, // $B01E + #$B01F, // $B01F + #$B020, // $B020 + #$B021, // $B021 + #$B022, // $B022 + #$B023, // $B023 + #$B024, // $B024 + #$B025, // $B025 + #$B026, // $B026 + #$B027, // $B027 + #$B028, // $B028 + #$B029, // $B029 + #$B02A, // $B02A + #$B02B, // $B02B + #$B02C, // $B02C + #$B02D, // $B02D + #$B02E, // $B02E + #$B02F, // $B02F + #$B030, // $B030 + #$B031, // $B031 + #$B032, // $B032 + #$B033, // $B033 + #$B034, // $B034 + #$B035, // $B035 + #$B036, // $B036 + #$B037, // $B037 + #$B038, // $B038 + #$B039, // $B039 + #$B03A, // $B03A + #$B03B, // $B03B + #$B03C, // $B03C + #$B03D, // $B03D + #$B03E, // $B03E + #$B03F, // $B03F + #$B040, // $B040 + #$B041, // $B041 + #$B042, // $B042 + #$B043, // $B043 + #$B044, // $B044 + #$B045, // $B045 + #$B046, // $B046 + #$B047, // $B047 + #$B048, // $B048 + #$B049, // $B049 + #$B04A, // $B04A + #$B04B, // $B04B + #$B04C, // $B04C + #$B04D, // $B04D + #$B04E, // $B04E + #$B04F, // $B04F + #$B050, // $B050 + #$B051, // $B051 + #$B052, // $B052 + #$B053, // $B053 + #$B054, // $B054 + #$B055, // $B055 + #$B056, // $B056 + #$B057, // $B057 + #$B058, // $B058 + #$B059, // $B059 + #$B05A, // $B05A + #$B05B, // $B05B + #$B05C, // $B05C + #$B05D, // $B05D + #$B05E, // $B05E + #$B05F, // $B05F + #$B060, // $B060 + #$B061, // $B061 + #$B062, // $B062 + #$B063, // $B063 + #$B064, // $B064 + #$B065, // $B065 + #$B066, // $B066 + #$B067, // $B067 + #$B068, // $B068 + #$B069, // $B069 + #$B06A, // $B06A + #$B06B, // $B06B + #$B06C, // $B06C + #$B06D, // $B06D + #$B06E, // $B06E + #$B06F, // $B06F + #$B070, // $B070 + #$B071, // $B071 + #$B072, // $B072 + #$B073, // $B073 + #$B074, // $B074 + #$B075, // $B075 + #$B076, // $B076 + #$B077, // $B077 + #$B078, // $B078 + #$B079, // $B079 + #$B07A, // $B07A + #$B07B, // $B07B + #$B07C, // $B07C + #$B07D, // $B07D + #$B07E, // $B07E + #$B07F, // $B07F + #$B080, // $B080 + #$B081, // $B081 + #$B082, // $B082 + #$B083, // $B083 + #$B084, // $B084 + #$B085, // $B085 + #$B086, // $B086 + #$B087, // $B087 + #$B088, // $B088 + #$B089, // $B089 + #$B08A, // $B08A + #$B08B, // $B08B + #$B08C, // $B08C + #$B08D, // $B08D + #$B08E, // $B08E + #$B08F, // $B08F + #$B090, // $B090 + #$B091, // $B091 + #$B092, // $B092 + #$B093, // $B093 + #$B094, // $B094 + #$B095, // $B095 + #$B096, // $B096 + #$B097, // $B097 + #$B098, // $B098 + #$B099, // $B099 + #$B09A, // $B09A + #$B09B, // $B09B + #$B09C, // $B09C + #$B09D, // $B09D + #$B09E, // $B09E + #$B09F, // $B09F + #$B0A0, // $B0A0 + #$B0A1, // $B0A1 + #$B0A2, // $B0A2 + #$B0A3, // $B0A3 + #$B0A4, // $B0A4 + #$B0A5, // $B0A5 + #$B0A6, // $B0A6 + #$B0A7, // $B0A7 + #$B0A8, // $B0A8 + #$B0A9, // $B0A9 + #$B0AA, // $B0AA + #$B0AB, // $B0AB + #$B0AC, // $B0AC + #$B0AD, // $B0AD + #$B0AE, // $B0AE + #$B0AF, // $B0AF + #$B0B0, // $B0B0 + #$B0B1, // $B0B1 + #$B0B2, // $B0B2 + #$B0B3, // $B0B3 + #$B0B4, // $B0B4 + #$B0B5, // $B0B5 + #$B0B6, // $B0B6 + #$B0B7, // $B0B7 + #$B0B8, // $B0B8 + #$B0B9, // $B0B9 + #$B0BA, // $B0BA + #$B0BB, // $B0BB + #$B0BC, // $B0BC + #$B0BD, // $B0BD + #$B0BE, // $B0BE + #$B0BF, // $B0BF + #$B0C0, // $B0C0 + #$B0C1, // $B0C1 + #$B0C2, // $B0C2 + #$B0C3, // $B0C3 + #$B0C4, // $B0C4 + #$B0C5, // $B0C5 + #$B0C6, // $B0C6 + #$B0C7, // $B0C7 + #$B0C8, // $B0C8 + #$B0C9, // $B0C9 + #$B0CA, // $B0CA + #$B0CB, // $B0CB + #$B0CC, // $B0CC + #$B0CD, // $B0CD + #$B0CE, // $B0CE + #$B0CF, // $B0CF + #$B0D0, // $B0D0 + #$B0D1, // $B0D1 + #$B0D2, // $B0D2 + #$B0D3, // $B0D3 + #$B0D4, // $B0D4 + #$B0D5, // $B0D5 + #$B0D6, // $B0D6 + #$B0D7, // $B0D7 + #$B0D8, // $B0D8 + #$B0D9, // $B0D9 + #$B0DA, // $B0DA + #$B0DB, // $B0DB + #$B0DC, // $B0DC + #$B0DD, // $B0DD + #$B0DE, // $B0DE + #$B0DF, // $B0DF + #$B0E0, // $B0E0 + #$B0E1, // $B0E1 + #$B0E2, // $B0E2 + #$B0E3, // $B0E3 + #$B0E4, // $B0E4 + #$B0E5, // $B0E5 + #$B0E6, // $B0E6 + #$B0E7, // $B0E7 + #$B0E8, // $B0E8 + #$B0E9, // $B0E9 + #$B0EA, // $B0EA + #$B0EB, // $B0EB + #$B0EC, // $B0EC + #$B0ED, // $B0ED + #$B0EE, // $B0EE + #$B0EF, // $B0EF + #$B0F0, // $B0F0 + #$B0F1, // $B0F1 + #$B0F2, // $B0F2 + #$B0F3, // $B0F3 + #$B0F4, // $B0F4 + #$B0F5, // $B0F5 + #$B0F6, // $B0F6 + #$B0F7, // $B0F7 + #$B0F8, // $B0F8 + #$B0F9, // $B0F9 + #$B0FA, // $B0FA + #$B0FB, // $B0FB + #$B0FC, // $B0FC + #$B0FD, // $B0FD + #$B0FE, // $B0FE + #$B0FF, // $B0FF + #$B100, // $B100 + #$B101, // $B101 + #$B102, // $B102 + #$B103, // $B103 + #$B104, // $B104 + #$B105, // $B105 + #$B106, // $B106 + #$B107, // $B107 + #$B108, // $B108 + #$B109, // $B109 + #$B10A, // $B10A + #$B10B, // $B10B + #$B10C, // $B10C + #$B10D, // $B10D + #$B10E, // $B10E + #$B10F, // $B10F + #$B110, // $B110 + #$B111, // $B111 + #$B112, // $B112 + #$B113, // $B113 + #$B114, // $B114 + #$B115, // $B115 + #$B116, // $B116 + #$B117, // $B117 + #$B118, // $B118 + #$B119, // $B119 + #$B11A, // $B11A + #$B11B, // $B11B + #$B11C, // $B11C + #$B11D, // $B11D + #$B11E, // $B11E + #$B11F, // $B11F + #$B120, // $B120 + #$B121, // $B121 + #$B122, // $B122 + #$B123, // $B123 + #$B124, // $B124 + #$B125, // $B125 + #$B126, // $B126 + #$B127, // $B127 + #$B128, // $B128 + #$B129, // $B129 + #$B12A, // $B12A + #$B12B, // $B12B + #$B12C, // $B12C + #$B12D, // $B12D + #$B12E, // $B12E + #$B12F, // $B12F + #$B130, // $B130 + #$B131, // $B131 + #$B132, // $B132 + #$B133, // $B133 + #$B134, // $B134 + #$B135, // $B135 + #$B136, // $B136 + #$B137, // $B137 + #$B138, // $B138 + #$B139, // $B139 + #$B13A, // $B13A + #$B13B, // $B13B + #$B13C, // $B13C + #$B13D, // $B13D + #$B13E, // $B13E + #$B13F, // $B13F + #$B140, // $B140 + #$B141, // $B141 + #$B142, // $B142 + #$B143, // $B143 + #$B144, // $B144 + #$B145, // $B145 + #$B146, // $B146 + #$B147, // $B147 + #$B148, // $B148 + #$B149, // $B149 + #$B14A, // $B14A + #$B14B, // $B14B + #$B14C, // $B14C + #$B14D, // $B14D + #$B14E, // $B14E + #$B14F, // $B14F + #$B150, // $B150 + #$B151, // $B151 + #$B152, // $B152 + #$B153, // $B153 + #$B154, // $B154 + #$B155, // $B155 + #$B156, // $B156 + #$B157, // $B157 + #$B158, // $B158 + #$B159, // $B159 + #$B15A, // $B15A + #$B15B, // $B15B + #$B15C, // $B15C + #$B15D, // $B15D + #$B15E, // $B15E + #$B15F, // $B15F + #$B160, // $B160 + #$B161, // $B161 + #$B162, // $B162 + #$B163, // $B163 + #$B164, // $B164 + #$B165, // $B165 + #$B166, // $B166 + #$B167, // $B167 + #$B168, // $B168 + #$B169, // $B169 + #$B16A, // $B16A + #$B16B, // $B16B + #$B16C, // $B16C + #$B16D, // $B16D + #$B16E, // $B16E + #$B16F, // $B16F + #$B170, // $B170 + #$B171, // $B171 + #$B172, // $B172 + #$B173, // $B173 + #$B174, // $B174 + #$B175, // $B175 + #$B176, // $B176 + #$B177, // $B177 + #$B178, // $B178 + #$B179, // $B179 + #$B17A, // $B17A + #$B17B, // $B17B + #$B17C, // $B17C + #$B17D, // $B17D + #$B17E, // $B17E + #$B17F, // $B17F + #$B180, // $B180 + #$B181, // $B181 + #$B182, // $B182 + #$B183, // $B183 + #$B184, // $B184 + #$B185, // $B185 + #$B186, // $B186 + #$B187, // $B187 + #$B188, // $B188 + #$B189, // $B189 + #$B18A, // $B18A + #$B18B, // $B18B + #$B18C, // $B18C + #$B18D, // $B18D + #$B18E, // $B18E + #$B18F, // $B18F + #$B190, // $B190 + #$B191, // $B191 + #$B192, // $B192 + #$B193, // $B193 + #$B194, // $B194 + #$B195, // $B195 + #$B196, // $B196 + #$B197, // $B197 + #$B198, // $B198 + #$B199, // $B199 + #$B19A, // $B19A + #$B19B, // $B19B + #$B19C, // $B19C + #$B19D, // $B19D + #$B19E, // $B19E + #$B19F, // $B19F + #$B1A0, // $B1A0 + #$B1A1, // $B1A1 + #$B1A2, // $B1A2 + #$B1A3, // $B1A3 + #$B1A4, // $B1A4 + #$B1A5, // $B1A5 + #$B1A6, // $B1A6 + #$B1A7, // $B1A7 + #$B1A8, // $B1A8 + #$B1A9, // $B1A9 + #$B1AA, // $B1AA + #$B1AB, // $B1AB + #$B1AC, // $B1AC + #$B1AD, // $B1AD + #$B1AE, // $B1AE + #$B1AF, // $B1AF + #$B1B0, // $B1B0 + #$B1B1, // $B1B1 + #$B1B2, // $B1B2 + #$B1B3, // $B1B3 + #$B1B4, // $B1B4 + #$B1B5, // $B1B5 + #$B1B6, // $B1B6 + #$B1B7, // $B1B7 + #$B1B8, // $B1B8 + #$B1B9, // $B1B9 + #$B1BA, // $B1BA + #$B1BB, // $B1BB + #$B1BC, // $B1BC + #$B1BD, // $B1BD + #$B1BE, // $B1BE + #$B1BF, // $B1BF + #$B1C0, // $B1C0 + #$B1C1, // $B1C1 + #$B1C2, // $B1C2 + #$B1C3, // $B1C3 + #$B1C4, // $B1C4 + #$B1C5, // $B1C5 + #$B1C6, // $B1C6 + #$B1C7, // $B1C7 + #$B1C8, // $B1C8 + #$B1C9, // $B1C9 + #$B1CA, // $B1CA + #$B1CB, // $B1CB + #$B1CC, // $B1CC + #$B1CD, // $B1CD + #$B1CE, // $B1CE + #$B1CF, // $B1CF + #$B1D0, // $B1D0 + #$B1D1, // $B1D1 + #$B1D2, // $B1D2 + #$B1D3, // $B1D3 + #$B1D4, // $B1D4 + #$B1D5, // $B1D5 + #$B1D6, // $B1D6 + #$B1D7, // $B1D7 + #$B1D8, // $B1D8 + #$B1D9, // $B1D9 + #$B1DA, // $B1DA + #$B1DB, // $B1DB + #$B1DC, // $B1DC + #$B1DD, // $B1DD + #$B1DE, // $B1DE + #$B1DF, // $B1DF + #$B1E0, // $B1E0 + #$B1E1, // $B1E1 + #$B1E2, // $B1E2 + #$B1E3, // $B1E3 + #$B1E4, // $B1E4 + #$B1E5, // $B1E5 + #$B1E6, // $B1E6 + #$B1E7, // $B1E7 + #$B1E8, // $B1E8 + #$B1E9, // $B1E9 + #$B1EA, // $B1EA + #$B1EB, // $B1EB + #$B1EC, // $B1EC + #$B1ED, // $B1ED + #$B1EE, // $B1EE + #$B1EF, // $B1EF + #$B1F0, // $B1F0 + #$B1F1, // $B1F1 + #$B1F2, // $B1F2 + #$B1F3, // $B1F3 + #$B1F4, // $B1F4 + #$B1F5, // $B1F5 + #$B1F6, // $B1F6 + #$B1F7, // $B1F7 + #$B1F8, // $B1F8 + #$B1F9, // $B1F9 + #$B1FA, // $B1FA + #$B1FB, // $B1FB + #$B1FC, // $B1FC + #$B1FD, // $B1FD + #$B1FE, // $B1FE + #$B1FF, // $B1FF + #$B200, // $B200 + #$B201, // $B201 + #$B202, // $B202 + #$B203, // $B203 + #$B204, // $B204 + #$B205, // $B205 + #$B206, // $B206 + #$B207, // $B207 + #$B208, // $B208 + #$B209, // $B209 + #$B20A, // $B20A + #$B20B, // $B20B + #$B20C, // $B20C + #$B20D, // $B20D + #$B20E, // $B20E + #$B20F, // $B20F + #$B210, // $B210 + #$B211, // $B211 + #$B212, // $B212 + #$B213, // $B213 + #$B214, // $B214 + #$B215, // $B215 + #$B216, // $B216 + #$B217, // $B217 + #$B218, // $B218 + #$B219, // $B219 + #$B21A, // $B21A + #$B21B, // $B21B + #$B21C, // $B21C + #$B21D, // $B21D + #$B21E, // $B21E + #$B21F, // $B21F + #$B220, // $B220 + #$B221, // $B221 + #$B222, // $B222 + #$B223, // $B223 + #$B224, // $B224 + #$B225, // $B225 + #$B226, // $B226 + #$B227, // $B227 + #$B228, // $B228 + #$B229, // $B229 + #$B22A, // $B22A + #$B22B, // $B22B + #$B22C, // $B22C + #$B22D, // $B22D + #$B22E, // $B22E + #$B22F, // $B22F + #$B230, // $B230 + #$B231, // $B231 + #$B232, // $B232 + #$B233, // $B233 + #$B234, // $B234 + #$B235, // $B235 + #$B236, // $B236 + #$B237, // $B237 + #$B238, // $B238 + #$B239, // $B239 + #$B23A, // $B23A + #$B23B, // $B23B + #$B23C, // $B23C + #$B23D, // $B23D + #$B23E, // $B23E + #$B23F, // $B23F + #$B240, // $B240 + #$B241, // $B241 + #$B242, // $B242 + #$B243, // $B243 + #$B244, // $B244 + #$B245, // $B245 + #$B246, // $B246 + #$B247, // $B247 + #$B248, // $B248 + #$B249, // $B249 + #$B24A, // $B24A + #$B24B, // $B24B + #$B24C, // $B24C + #$B24D, // $B24D + #$B24E, // $B24E + #$B24F, // $B24F + #$B250, // $B250 + #$B251, // $B251 + #$B252, // $B252 + #$B253, // $B253 + #$B254, // $B254 + #$B255, // $B255 + #$B256, // $B256 + #$B257, // $B257 + #$B258, // $B258 + #$B259, // $B259 + #$B25A, // $B25A + #$B25B, // $B25B + #$B25C, // $B25C + #$B25D, // $B25D + #$B25E, // $B25E + #$B25F, // $B25F + #$B260, // $B260 + #$B261, // $B261 + #$B262, // $B262 + #$B263, // $B263 + #$B264, // $B264 + #$B265, // $B265 + #$B266, // $B266 + #$B267, // $B267 + #$B268, // $B268 + #$B269, // $B269 + #$B26A, // $B26A + #$B26B, // $B26B + #$B26C, // $B26C + #$B26D, // $B26D + #$B26E, // $B26E + #$B26F, // $B26F + #$B270, // $B270 + #$B271, // $B271 + #$B272, // $B272 + #$B273, // $B273 + #$B274, // $B274 + #$B275, // $B275 + #$B276, // $B276 + #$B277, // $B277 + #$B278, // $B278 + #$B279, // $B279 + #$B27A, // $B27A + #$B27B, // $B27B + #$B27C, // $B27C + #$B27D, // $B27D + #$B27E, // $B27E + #$B27F, // $B27F + #$B280, // $B280 + #$B281, // $B281 + #$B282, // $B282 + #$B283, // $B283 + #$B284, // $B284 + #$B285, // $B285 + #$B286, // $B286 + #$B287, // $B287 + #$B288, // $B288 + #$B289, // $B289 + #$B28A, // $B28A + #$B28B, // $B28B + #$B28C, // $B28C + #$B28D, // $B28D + #$B28E, // $B28E + #$B28F, // $B28F + #$B290, // $B290 + #$B291, // $B291 + #$B292, // $B292 + #$B293, // $B293 + #$B294, // $B294 + #$B295, // $B295 + #$B296, // $B296 + #$B297, // $B297 + #$B298, // $B298 + #$B299, // $B299 + #$B29A, // $B29A + #$B29B, // $B29B + #$B29C, // $B29C + #$B29D, // $B29D + #$B29E, // $B29E + #$B29F, // $B29F + #$B2A0, // $B2A0 + #$B2A1, // $B2A1 + #$B2A2, // $B2A2 + #$B2A3, // $B2A3 + #$B2A4, // $B2A4 + #$B2A5, // $B2A5 + #$B2A6, // $B2A6 + #$B2A7, // $B2A7 + #$B2A8, // $B2A8 + #$B2A9, // $B2A9 + #$B2AA, // $B2AA + #$B2AB, // $B2AB + #$B2AC, // $B2AC + #$B2AD, // $B2AD + #$B2AE, // $B2AE + #$B2AF, // $B2AF + #$B2B0, // $B2B0 + #$B2B1, // $B2B1 + #$B2B2, // $B2B2 + #$B2B3, // $B2B3 + #$B2B4, // $B2B4 + #$B2B5, // $B2B5 + #$B2B6, // $B2B6 + #$B2B7, // $B2B7 + #$B2B8, // $B2B8 + #$B2B9, // $B2B9 + #$B2BA, // $B2BA + #$B2BB, // $B2BB + #$B2BC, // $B2BC + #$B2BD, // $B2BD + #$B2BE, // $B2BE + #$B2BF, // $B2BF + #$B2C0, // $B2C0 + #$B2C1, // $B2C1 + #$B2C2, // $B2C2 + #$B2C3, // $B2C3 + #$B2C4, // $B2C4 + #$B2C5, // $B2C5 + #$B2C6, // $B2C6 + #$B2C7, // $B2C7 + #$B2C8, // $B2C8 + #$B2C9, // $B2C9 + #$B2CA, // $B2CA + #$B2CB, // $B2CB + #$B2CC, // $B2CC + #$B2CD, // $B2CD + #$B2CE, // $B2CE + #$B2CF, // $B2CF + #$B2D0, // $B2D0 + #$B2D1, // $B2D1 + #$B2D2, // $B2D2 + #$B2D3, // $B2D3 + #$B2D4, // $B2D4 + #$B2D5, // $B2D5 + #$B2D6, // $B2D6 + #$B2D7, // $B2D7 + #$B2D8, // $B2D8 + #$B2D9, // $B2D9 + #$B2DA, // $B2DA + #$B2DB, // $B2DB + #$B2DC, // $B2DC + #$B2DD, // $B2DD + #$B2DE, // $B2DE + #$B2DF, // $B2DF + #$B2E0, // $B2E0 + #$B2E1, // $B2E1 + #$B2E2, // $B2E2 + #$B2E3, // $B2E3 + #$B2E4, // $B2E4 + #$B2E5, // $B2E5 + #$B2E6, // $B2E6 + #$B2E7, // $B2E7 + #$B2E8, // $B2E8 + #$B2E9, // $B2E9 + #$B2EA, // $B2EA + #$B2EB, // $B2EB + #$B2EC, // $B2EC + #$B2ED, // $B2ED + #$B2EE, // $B2EE + #$B2EF, // $B2EF + #$B2F0, // $B2F0 + #$B2F1, // $B2F1 + #$B2F2, // $B2F2 + #$B2F3, // $B2F3 + #$B2F4, // $B2F4 + #$B2F5, // $B2F5 + #$B2F6, // $B2F6 + #$B2F7, // $B2F7 + #$B2F8, // $B2F8 + #$B2F9, // $B2F9 + #$B2FA, // $B2FA + #$B2FB, // $B2FB + #$B2FC, // $B2FC + #$B2FD, // $B2FD + #$B2FE, // $B2FE + #$B2FF, // $B2FF + #$B300, // $B300 + #$B301, // $B301 + #$B302, // $B302 + #$B303, // $B303 + #$B304, // $B304 + #$B305, // $B305 + #$B306, // $B306 + #$B307, // $B307 + #$B308, // $B308 + #$B309, // $B309 + #$B30A, // $B30A + #$B30B, // $B30B + #$B30C, // $B30C + #$B30D, // $B30D + #$B30E, // $B30E + #$B30F, // $B30F + #$B310, // $B310 + #$B311, // $B311 + #$B312, // $B312 + #$B313, // $B313 + #$B314, // $B314 + #$B315, // $B315 + #$B316, // $B316 + #$B317, // $B317 + #$B318, // $B318 + #$B319, // $B319 + #$B31A, // $B31A + #$B31B, // $B31B + #$B31C, // $B31C + #$B31D, // $B31D + #$B31E, // $B31E + #$B31F, // $B31F + #$B320, // $B320 + #$B321, // $B321 + #$B322, // $B322 + #$B323, // $B323 + #$B324, // $B324 + #$B325, // $B325 + #$B326, // $B326 + #$B327, // $B327 + #$B328, // $B328 + #$B329, // $B329 + #$B32A, // $B32A + #$B32B, // $B32B + #$B32C, // $B32C + #$B32D, // $B32D + #$B32E, // $B32E + #$B32F, // $B32F + #$B330, // $B330 + #$B331, // $B331 + #$B332, // $B332 + #$B333, // $B333 + #$B334, // $B334 + #$B335, // $B335 + #$B336, // $B336 + #$B337, // $B337 + #$B338, // $B338 + #$B339, // $B339 + #$B33A, // $B33A + #$B33B, // $B33B + #$B33C, // $B33C + #$B33D, // $B33D + #$B33E, // $B33E + #$B33F, // $B33F + #$B340, // $B340 + #$B341, // $B341 + #$B342, // $B342 + #$B343, // $B343 + #$B344, // $B344 + #$B345, // $B345 + #$B346, // $B346 + #$B347, // $B347 + #$B348, // $B348 + #$B349, // $B349 + #$B34A, // $B34A + #$B34B, // $B34B + #$B34C, // $B34C + #$B34D, // $B34D + #$B34E, // $B34E + #$B34F, // $B34F + #$B350, // $B350 + #$B351, // $B351 + #$B352, // $B352 + #$B353, // $B353 + #$B354, // $B354 + #$B355, // $B355 + #$B356, // $B356 + #$B357, // $B357 + #$B358, // $B358 + #$B359, // $B359 + #$B35A, // $B35A + #$B35B, // $B35B + #$B35C, // $B35C + #$B35D, // $B35D + #$B35E, // $B35E + #$B35F, // $B35F + #$B360, // $B360 + #$B361, // $B361 + #$B362, // $B362 + #$B363, // $B363 + #$B364, // $B364 + #$B365, // $B365 + #$B366, // $B366 + #$B367, // $B367 + #$B368, // $B368 + #$B369, // $B369 + #$B36A, // $B36A + #$B36B, // $B36B + #$B36C, // $B36C + #$B36D, // $B36D + #$B36E, // $B36E + #$B36F, // $B36F + #$B370, // $B370 + #$B371, // $B371 + #$B372, // $B372 + #$B373, // $B373 + #$B374, // $B374 + #$B375, // $B375 + #$B376, // $B376 + #$B377, // $B377 + #$B378, // $B378 + #$B379, // $B379 + #$B37A, // $B37A + #$B37B, // $B37B + #$B37C, // $B37C + #$B37D, // $B37D + #$B37E, // $B37E + #$B37F, // $B37F + #$B380, // $B380 + #$B381, // $B381 + #$B382, // $B382 + #$B383, // $B383 + #$B384, // $B384 + #$B385, // $B385 + #$B386, // $B386 + #$B387, // $B387 + #$B388, // $B388 + #$B389, // $B389 + #$B38A, // $B38A + #$B38B, // $B38B + #$B38C, // $B38C + #$B38D, // $B38D + #$B38E, // $B38E + #$B38F, // $B38F + #$B390, // $B390 + #$B391, // $B391 + #$B392, // $B392 + #$B393, // $B393 + #$B394, // $B394 + #$B395, // $B395 + #$B396, // $B396 + #$B397, // $B397 + #$B398, // $B398 + #$B399, // $B399 + #$B39A, // $B39A + #$B39B, // $B39B + #$B39C, // $B39C + #$B39D, // $B39D + #$B39E, // $B39E + #$B39F, // $B39F + #$B3A0, // $B3A0 + #$B3A1, // $B3A1 + #$B3A2, // $B3A2 + #$B3A3, // $B3A3 + #$B3A4, // $B3A4 + #$B3A5, // $B3A5 + #$B3A6, // $B3A6 + #$B3A7, // $B3A7 + #$B3A8, // $B3A8 + #$B3A9, // $B3A9 + #$B3AA, // $B3AA + #$B3AB, // $B3AB + #$B3AC, // $B3AC + #$B3AD, // $B3AD + #$B3AE, // $B3AE + #$B3AF, // $B3AF + #$B3B0, // $B3B0 + #$B3B1, // $B3B1 + #$B3B2, // $B3B2 + #$B3B3, // $B3B3 + #$B3B4, // $B3B4 + #$B3B5, // $B3B5 + #$B3B6, // $B3B6 + #$B3B7, // $B3B7 + #$B3B8, // $B3B8 + #$B3B9, // $B3B9 + #$B3BA, // $B3BA + #$B3BB, // $B3BB + #$B3BC, // $B3BC + #$B3BD, // $B3BD + #$B3BE, // $B3BE + #$B3BF, // $B3BF + #$B3C0, // $B3C0 + #$B3C1, // $B3C1 + #$B3C2, // $B3C2 + #$B3C3, // $B3C3 + #$B3C4, // $B3C4 + #$B3C5, // $B3C5 + #$B3C6, // $B3C6 + #$B3C7, // $B3C7 + #$B3C8, // $B3C8 + #$B3C9, // $B3C9 + #$B3CA, // $B3CA + #$B3CB, // $B3CB + #$B3CC, // $B3CC + #$B3CD, // $B3CD + #$B3CE, // $B3CE + #$B3CF, // $B3CF + #$B3D0, // $B3D0 + #$B3D1, // $B3D1 + #$B3D2, // $B3D2 + #$B3D3, // $B3D3 + #$B3D4, // $B3D4 + #$B3D5, // $B3D5 + #$B3D6, // $B3D6 + #$B3D7, // $B3D7 + #$B3D8, // $B3D8 + #$B3D9, // $B3D9 + #$B3DA, // $B3DA + #$B3DB, // $B3DB + #$B3DC, // $B3DC + #$B3DD, // $B3DD + #$B3DE, // $B3DE + #$B3DF, // $B3DF + #$B3E0, // $B3E0 + #$B3E1, // $B3E1 + #$B3E2, // $B3E2 + #$B3E3, // $B3E3 + #$B3E4, // $B3E4 + #$B3E5, // $B3E5 + #$B3E6, // $B3E6 + #$B3E7, // $B3E7 + #$B3E8, // $B3E8 + #$B3E9, // $B3E9 + #$B3EA, // $B3EA + #$B3EB, // $B3EB + #$B3EC, // $B3EC + #$B3ED, // $B3ED + #$B3EE, // $B3EE + #$B3EF, // $B3EF + #$B3F0, // $B3F0 + #$B3F1, // $B3F1 + #$B3F2, // $B3F2 + #$B3F3, // $B3F3 + #$B3F4, // $B3F4 + #$B3F5, // $B3F5 + #$B3F6, // $B3F6 + #$B3F7, // $B3F7 + #$B3F8, // $B3F8 + #$B3F9, // $B3F9 + #$B3FA, // $B3FA + #$B3FB, // $B3FB + #$B3FC, // $B3FC + #$B3FD, // $B3FD + #$B3FE, // $B3FE + #$B3FF, // $B3FF + #$B400, // $B400 + #$B401, // $B401 + #$B402, // $B402 + #$B403, // $B403 + #$B404, // $B404 + #$B405, // $B405 + #$B406, // $B406 + #$B407, // $B407 + #$B408, // $B408 + #$B409, // $B409 + #$B40A, // $B40A + #$B40B, // $B40B + #$B40C, // $B40C + #$B40D, // $B40D + #$B40E, // $B40E + #$B40F, // $B40F + #$B410, // $B410 + #$B411, // $B411 + #$B412, // $B412 + #$B413, // $B413 + #$B414, // $B414 + #$B415, // $B415 + #$B416, // $B416 + #$B417, // $B417 + #$B418, // $B418 + #$B419, // $B419 + #$B41A, // $B41A + #$B41B, // $B41B + #$B41C, // $B41C + #$B41D, // $B41D + #$B41E, // $B41E + #$B41F, // $B41F + #$B420, // $B420 + #$B421, // $B421 + #$B422, // $B422 + #$B423, // $B423 + #$B424, // $B424 + #$B425, // $B425 + #$B426, // $B426 + #$B427, // $B427 + #$B428, // $B428 + #$B429, // $B429 + #$B42A, // $B42A + #$B42B, // $B42B + #$B42C, // $B42C + #$B42D, // $B42D + #$B42E, // $B42E + #$B42F, // $B42F + #$B430, // $B430 + #$B431, // $B431 + #$B432, // $B432 + #$B433, // $B433 + #$B434, // $B434 + #$B435, // $B435 + #$B436, // $B436 + #$B437, // $B437 + #$B438, // $B438 + #$B439, // $B439 + #$B43A, // $B43A + #$B43B, // $B43B + #$B43C, // $B43C + #$B43D, // $B43D + #$B43E, // $B43E + #$B43F, // $B43F + #$B440, // $B440 + #$B441, // $B441 + #$B442, // $B442 + #$B443, // $B443 + #$B444, // $B444 + #$B445, // $B445 + #$B446, // $B446 + #$B447, // $B447 + #$B448, // $B448 + #$B449, // $B449 + #$B44A, // $B44A + #$B44B, // $B44B + #$B44C, // $B44C + #$B44D, // $B44D + #$B44E, // $B44E + #$B44F, // $B44F + #$B450, // $B450 + #$B451, // $B451 + #$B452, // $B452 + #$B453, // $B453 + #$B454, // $B454 + #$B455, // $B455 + #$B456, // $B456 + #$B457, // $B457 + #$B458, // $B458 + #$B459, // $B459 + #$B45A, // $B45A + #$B45B, // $B45B + #$B45C, // $B45C + #$B45D, // $B45D + #$B45E, // $B45E + #$B45F, // $B45F + #$B460, // $B460 + #$B461, // $B461 + #$B462, // $B462 + #$B463, // $B463 + #$B464, // $B464 + #$B465, // $B465 + #$B466, // $B466 + #$B467, // $B467 + #$B468, // $B468 + #$B469, // $B469 + #$B46A, // $B46A + #$B46B, // $B46B + #$B46C, // $B46C + #$B46D, // $B46D + #$B46E, // $B46E + #$B46F, // $B46F + #$B470, // $B470 + #$B471, // $B471 + #$B472, // $B472 + #$B473, // $B473 + #$B474, // $B474 + #$B475, // $B475 + #$B476, // $B476 + #$B477, // $B477 + #$B478, // $B478 + #$B479, // $B479 + #$B47A, // $B47A + #$B47B, // $B47B + #$B47C, // $B47C + #$B47D, // $B47D + #$B47E, // $B47E + #$B47F, // $B47F + #$B480, // $B480 + #$B481, // $B481 + #$B482, // $B482 + #$B483, // $B483 + #$B484, // $B484 + #$B485, // $B485 + #$B486, // $B486 + #$B487, // $B487 + #$B488, // $B488 + #$B489, // $B489 + #$B48A, // $B48A + #$B48B, // $B48B + #$B48C, // $B48C + #$B48D, // $B48D + #$B48E, // $B48E + #$B48F, // $B48F + #$B490, // $B490 + #$B491, // $B491 + #$B492, // $B492 + #$B493, // $B493 + #$B494, // $B494 + #$B495, // $B495 + #$B496, // $B496 + #$B497, // $B497 + #$B498, // $B498 + #$B499, // $B499 + #$B49A, // $B49A + #$B49B, // $B49B + #$B49C, // $B49C + #$B49D, // $B49D + #$B49E, // $B49E + #$B49F, // $B49F + #$B4A0, // $B4A0 + #$B4A1, // $B4A1 + #$B4A2, // $B4A2 + #$B4A3, // $B4A3 + #$B4A4, // $B4A4 + #$B4A5, // $B4A5 + #$B4A6, // $B4A6 + #$B4A7, // $B4A7 + #$B4A8, // $B4A8 + #$B4A9, // $B4A9 + #$B4AA, // $B4AA + #$B4AB, // $B4AB + #$B4AC, // $B4AC + #$B4AD, // $B4AD + #$B4AE, // $B4AE + #$B4AF, // $B4AF + #$B4B0, // $B4B0 + #$B4B1, // $B4B1 + #$B4B2, // $B4B2 + #$B4B3, // $B4B3 + #$B4B4, // $B4B4 + #$B4B5, // $B4B5 + #$B4B6, // $B4B6 + #$B4B7, // $B4B7 + #$B4B8, // $B4B8 + #$B4B9, // $B4B9 + #$B4BA, // $B4BA + #$B4BB, // $B4BB + #$B4BC, // $B4BC + #$B4BD, // $B4BD + #$B4BE, // $B4BE + #$B4BF, // $B4BF + #$B4C0, // $B4C0 + #$B4C1, // $B4C1 + #$B4C2, // $B4C2 + #$B4C3, // $B4C3 + #$B4C4, // $B4C4 + #$B4C5, // $B4C5 + #$B4C6, // $B4C6 + #$B4C7, // $B4C7 + #$B4C8, // $B4C8 + #$B4C9, // $B4C9 + #$B4CA, // $B4CA + #$B4CB, // $B4CB + #$B4CC, // $B4CC + #$B4CD, // $B4CD + #$B4CE, // $B4CE + #$B4CF, // $B4CF + #$B4D0, // $B4D0 + #$B4D1, // $B4D1 + #$B4D2, // $B4D2 + #$B4D3, // $B4D3 + #$B4D4, // $B4D4 + #$B4D5, // $B4D5 + #$B4D6, // $B4D6 + #$B4D7, // $B4D7 + #$B4D8, // $B4D8 + #$B4D9, // $B4D9 + #$B4DA, // $B4DA + #$B4DB, // $B4DB + #$B4DC, // $B4DC + #$B4DD, // $B4DD + #$B4DE, // $B4DE + #$B4DF, // $B4DF + #$B4E0, // $B4E0 + #$B4E1, // $B4E1 + #$B4E2, // $B4E2 + #$B4E3, // $B4E3 + #$B4E4, // $B4E4 + #$B4E5, // $B4E5 + #$B4E6, // $B4E6 + #$B4E7, // $B4E7 + #$B4E8, // $B4E8 + #$B4E9, // $B4E9 + #$B4EA, // $B4EA + #$B4EB, // $B4EB + #$B4EC, // $B4EC + #$B4ED, // $B4ED + #$B4EE, // $B4EE + #$B4EF, // $B4EF + #$B4F0, // $B4F0 + #$B4F1, // $B4F1 + #$B4F2, // $B4F2 + #$B4F3, // $B4F3 + #$B4F4, // $B4F4 + #$B4F5, // $B4F5 + #$B4F6, // $B4F6 + #$B4F7, // $B4F7 + #$B4F8, // $B4F8 + #$B4F9, // $B4F9 + #$B4FA, // $B4FA + #$B4FB, // $B4FB + #$B4FC, // $B4FC + #$B4FD, // $B4FD + #$B4FE, // $B4FE + #$B4FF, // $B4FF + #$B500, // $B500 + #$B501, // $B501 + #$B502, // $B502 + #$B503, // $B503 + #$B504, // $B504 + #$B505, // $B505 + #$B506, // $B506 + #$B507, // $B507 + #$B508, // $B508 + #$B509, // $B509 + #$B50A, // $B50A + #$B50B, // $B50B + #$B50C, // $B50C + #$B50D, // $B50D + #$B50E, // $B50E + #$B50F, // $B50F + #$B510, // $B510 + #$B511, // $B511 + #$B512, // $B512 + #$B513, // $B513 + #$B514, // $B514 + #$B515, // $B515 + #$B516, // $B516 + #$B517, // $B517 + #$B518, // $B518 + #$B519, // $B519 + #$B51A, // $B51A + #$B51B, // $B51B + #$B51C, // $B51C + #$B51D, // $B51D + #$B51E, // $B51E + #$B51F, // $B51F + #$B520, // $B520 + #$B521, // $B521 + #$B522, // $B522 + #$B523, // $B523 + #$B524, // $B524 + #$B525, // $B525 + #$B526, // $B526 + #$B527, // $B527 + #$B528, // $B528 + #$B529, // $B529 + #$B52A, // $B52A + #$B52B, // $B52B + #$B52C, // $B52C + #$B52D, // $B52D + #$B52E, // $B52E + #$B52F, // $B52F + #$B530, // $B530 + #$B531, // $B531 + #$B532, // $B532 + #$B533, // $B533 + #$B534, // $B534 + #$B535, // $B535 + #$B536, // $B536 + #$B537, // $B537 + #$B538, // $B538 + #$B539, // $B539 + #$B53A, // $B53A + #$B53B, // $B53B + #$B53C, // $B53C + #$B53D, // $B53D + #$B53E, // $B53E + #$B53F, // $B53F + #$B540, // $B540 + #$B541, // $B541 + #$B542, // $B542 + #$B543, // $B543 + #$B544, // $B544 + #$B545, // $B545 + #$B546, // $B546 + #$B547, // $B547 + #$B548, // $B548 + #$B549, // $B549 + #$B54A, // $B54A + #$B54B, // $B54B + #$B54C, // $B54C + #$B54D, // $B54D + #$B54E, // $B54E + #$B54F, // $B54F + #$B550, // $B550 + #$B551, // $B551 + #$B552, // $B552 + #$B553, // $B553 + #$B554, // $B554 + #$B555, // $B555 + #$B556, // $B556 + #$B557, // $B557 + #$B558, // $B558 + #$B559, // $B559 + #$B55A, // $B55A + #$B55B, // $B55B + #$B55C, // $B55C + #$B55D, // $B55D + #$B55E, // $B55E + #$B55F, // $B55F + #$B560, // $B560 + #$B561, // $B561 + #$B562, // $B562 + #$B563, // $B563 + #$B564, // $B564 + #$B565, // $B565 + #$B566, // $B566 + #$B567, // $B567 + #$B568, // $B568 + #$B569, // $B569 + #$B56A, // $B56A + #$B56B, // $B56B + #$B56C, // $B56C + #$B56D, // $B56D + #$B56E, // $B56E + #$B56F, // $B56F + #$B570, // $B570 + #$B571, // $B571 + #$B572, // $B572 + #$B573, // $B573 + #$B574, // $B574 + #$B575, // $B575 + #$B576, // $B576 + #$B577, // $B577 + #$B578, // $B578 + #$B579, // $B579 + #$B57A, // $B57A + #$B57B, // $B57B + #$B57C, // $B57C + #$B57D, // $B57D + #$B57E, // $B57E + #$B57F, // $B57F + #$B580, // $B580 + #$B581, // $B581 + #$B582, // $B582 + #$B583, // $B583 + #$B584, // $B584 + #$B585, // $B585 + #$B586, // $B586 + #$B587, // $B587 + #$B588, // $B588 + #$B589, // $B589 + #$B58A, // $B58A + #$B58B, // $B58B + #$B58C, // $B58C + #$B58D, // $B58D + #$B58E, // $B58E + #$B58F, // $B58F + #$B590, // $B590 + #$B591, // $B591 + #$B592, // $B592 + #$B593, // $B593 + #$B594, // $B594 + #$B595, // $B595 + #$B596, // $B596 + #$B597, // $B597 + #$B598, // $B598 + #$B599, // $B599 + #$B59A, // $B59A + #$B59B, // $B59B + #$B59C, // $B59C + #$B59D, // $B59D + #$B59E, // $B59E + #$B59F, // $B59F + #$B5A0, // $B5A0 + #$B5A1, // $B5A1 + #$B5A2, // $B5A2 + #$B5A3, // $B5A3 + #$B5A4, // $B5A4 + #$B5A5, // $B5A5 + #$B5A6, // $B5A6 + #$B5A7, // $B5A7 + #$B5A8, // $B5A8 + #$B5A9, // $B5A9 + #$B5AA, // $B5AA + #$B5AB, // $B5AB + #$B5AC, // $B5AC + #$B5AD, // $B5AD + #$B5AE, // $B5AE + #$B5AF, // $B5AF + #$B5B0, // $B5B0 + #$B5B1, // $B5B1 + #$B5B2, // $B5B2 + #$B5B3, // $B5B3 + #$B5B4, // $B5B4 + #$B5B5, // $B5B5 + #$B5B6, // $B5B6 + #$B5B7, // $B5B7 + #$B5B8, // $B5B8 + #$B5B9, // $B5B9 + #$B5BA, // $B5BA + #$B5BB, // $B5BB + #$B5BC, // $B5BC + #$B5BD, // $B5BD + #$B5BE, // $B5BE + #$B5BF, // $B5BF + #$B5C0, // $B5C0 + #$B5C1, // $B5C1 + #$B5C2, // $B5C2 + #$B5C3, // $B5C3 + #$B5C4, // $B5C4 + #$B5C5, // $B5C5 + #$B5C6, // $B5C6 + #$B5C7, // $B5C7 + #$B5C8, // $B5C8 + #$B5C9, // $B5C9 + #$B5CA, // $B5CA + #$B5CB, // $B5CB + #$B5CC, // $B5CC + #$B5CD, // $B5CD + #$B5CE, // $B5CE + #$B5CF, // $B5CF + #$B5D0, // $B5D0 + #$B5D1, // $B5D1 + #$B5D2, // $B5D2 + #$B5D3, // $B5D3 + #$B5D4, // $B5D4 + #$B5D5, // $B5D5 + #$B5D6, // $B5D6 + #$B5D7, // $B5D7 + #$B5D8, // $B5D8 + #$B5D9, // $B5D9 + #$B5DA, // $B5DA + #$B5DB, // $B5DB + #$B5DC, // $B5DC + #$B5DD, // $B5DD + #$B5DE, // $B5DE + #$B5DF, // $B5DF + #$B5E0, // $B5E0 + #$B5E1, // $B5E1 + #$B5E2, // $B5E2 + #$B5E3, // $B5E3 + #$B5E4, // $B5E4 + #$B5E5, // $B5E5 + #$B5E6, // $B5E6 + #$B5E7, // $B5E7 + #$B5E8, // $B5E8 + #$B5E9, // $B5E9 + #$B5EA, // $B5EA + #$B5EB, // $B5EB + #$B5EC, // $B5EC + #$B5ED, // $B5ED + #$B5EE, // $B5EE + #$B5EF, // $B5EF + #$B5F0, // $B5F0 + #$B5F1, // $B5F1 + #$B5F2, // $B5F2 + #$B5F3, // $B5F3 + #$B5F4, // $B5F4 + #$B5F5, // $B5F5 + #$B5F6, // $B5F6 + #$B5F7, // $B5F7 + #$B5F8, // $B5F8 + #$B5F9, // $B5F9 + #$B5FA, // $B5FA + #$B5FB, // $B5FB + #$B5FC, // $B5FC + #$B5FD, // $B5FD + #$B5FE, // $B5FE + #$B5FF, // $B5FF + #$B600, // $B600 + #$B601, // $B601 + #$B602, // $B602 + #$B603, // $B603 + #$B604, // $B604 + #$B605, // $B605 + #$B606, // $B606 + #$B607, // $B607 + #$B608, // $B608 + #$B609, // $B609 + #$B60A, // $B60A + #$B60B, // $B60B + #$B60C, // $B60C + #$B60D, // $B60D + #$B60E, // $B60E + #$B60F, // $B60F + #$B610, // $B610 + #$B611, // $B611 + #$B612, // $B612 + #$B613, // $B613 + #$B614, // $B614 + #$B615, // $B615 + #$B616, // $B616 + #$B617, // $B617 + #$B618, // $B618 + #$B619, // $B619 + #$B61A, // $B61A + #$B61B, // $B61B + #$B61C, // $B61C + #$B61D, // $B61D + #$B61E, // $B61E + #$B61F, // $B61F + #$B620, // $B620 + #$B621, // $B621 + #$B622, // $B622 + #$B623, // $B623 + #$B624, // $B624 + #$B625, // $B625 + #$B626, // $B626 + #$B627, // $B627 + #$B628, // $B628 + #$B629, // $B629 + #$B62A, // $B62A + #$B62B, // $B62B + #$B62C, // $B62C + #$B62D, // $B62D + #$B62E, // $B62E + #$B62F, // $B62F + #$B630, // $B630 + #$B631, // $B631 + #$B632, // $B632 + #$B633, // $B633 + #$B634, // $B634 + #$B635, // $B635 + #$B636, // $B636 + #$B637, // $B637 + #$B638, // $B638 + #$B639, // $B639 + #$B63A, // $B63A + #$B63B, // $B63B + #$B63C, // $B63C + #$B63D, // $B63D + #$B63E, // $B63E + #$B63F, // $B63F + #$B640, // $B640 + #$B641, // $B641 + #$B642, // $B642 + #$B643, // $B643 + #$B644, // $B644 + #$B645, // $B645 + #$B646, // $B646 + #$B647, // $B647 + #$B648, // $B648 + #$B649, // $B649 + #$B64A, // $B64A + #$B64B, // $B64B + #$B64C, // $B64C + #$B64D, // $B64D + #$B64E, // $B64E + #$B64F, // $B64F + #$B650, // $B650 + #$B651, // $B651 + #$B652, // $B652 + #$B653, // $B653 + #$B654, // $B654 + #$B655, // $B655 + #$B656, // $B656 + #$B657, // $B657 + #$B658, // $B658 + #$B659, // $B659 + #$B65A, // $B65A + #$B65B, // $B65B + #$B65C, // $B65C + #$B65D, // $B65D + #$B65E, // $B65E + #$B65F, // $B65F + #$B660, // $B660 + #$B661, // $B661 + #$B662, // $B662 + #$B663, // $B663 + #$B664, // $B664 + #$B665, // $B665 + #$B666, // $B666 + #$B667, // $B667 + #$B668, // $B668 + #$B669, // $B669 + #$B66A, // $B66A + #$B66B, // $B66B + #$B66C, // $B66C + #$B66D, // $B66D + #$B66E, // $B66E + #$B66F, // $B66F + #$B670, // $B670 + #$B671, // $B671 + #$B672, // $B672 + #$B673, // $B673 + #$B674, // $B674 + #$B675, // $B675 + #$B676, // $B676 + #$B677, // $B677 + #$B678, // $B678 + #$B679, // $B679 + #$B67A, // $B67A + #$B67B, // $B67B + #$B67C, // $B67C + #$B67D, // $B67D + #$B67E, // $B67E + #$B67F, // $B67F + #$B680, // $B680 + #$B681, // $B681 + #$B682, // $B682 + #$B683, // $B683 + #$B684, // $B684 + #$B685, // $B685 + #$B686, // $B686 + #$B687, // $B687 + #$B688, // $B688 + #$B689, // $B689 + #$B68A, // $B68A + #$B68B, // $B68B + #$B68C, // $B68C + #$B68D, // $B68D + #$B68E, // $B68E + #$B68F, // $B68F + #$B690, // $B690 + #$B691, // $B691 + #$B692, // $B692 + #$B693, // $B693 + #$B694, // $B694 + #$B695, // $B695 + #$B696, // $B696 + #$B697, // $B697 + #$B698, // $B698 + #$B699, // $B699 + #$B69A, // $B69A + #$B69B, // $B69B + #$B69C, // $B69C + #$B69D, // $B69D + #$B69E, // $B69E + #$B69F, // $B69F + #$B6A0, // $B6A0 + #$B6A1, // $B6A1 + #$B6A2, // $B6A2 + #$B6A3, // $B6A3 + #$B6A4, // $B6A4 + #$B6A5, // $B6A5 + #$B6A6, // $B6A6 + #$B6A7, // $B6A7 + #$B6A8, // $B6A8 + #$B6A9, // $B6A9 + #$B6AA, // $B6AA + #$B6AB, // $B6AB + #$B6AC, // $B6AC + #$B6AD, // $B6AD + #$B6AE, // $B6AE + #$B6AF, // $B6AF + #$B6B0, // $B6B0 + #$B6B1, // $B6B1 + #$B6B2, // $B6B2 + #$B6B3, // $B6B3 + #$B6B4, // $B6B4 + #$B6B5, // $B6B5 + #$B6B6, // $B6B6 + #$B6B7, // $B6B7 + #$B6B8, // $B6B8 + #$B6B9, // $B6B9 + #$B6BA, // $B6BA + #$B6BB, // $B6BB + #$B6BC, // $B6BC + #$B6BD, // $B6BD + #$B6BE, // $B6BE + #$B6BF, // $B6BF + #$B6C0, // $B6C0 + #$B6C1, // $B6C1 + #$B6C2, // $B6C2 + #$B6C3, // $B6C3 + #$B6C4, // $B6C4 + #$B6C5, // $B6C5 + #$B6C6, // $B6C6 + #$B6C7, // $B6C7 + #$B6C8, // $B6C8 + #$B6C9, // $B6C9 + #$B6CA, // $B6CA + #$B6CB, // $B6CB + #$B6CC, // $B6CC + #$B6CD, // $B6CD + #$B6CE, // $B6CE + #$B6CF, // $B6CF + #$B6D0, // $B6D0 + #$B6D1, // $B6D1 + #$B6D2, // $B6D2 + #$B6D3, // $B6D3 + #$B6D4, // $B6D4 + #$B6D5, // $B6D5 + #$B6D6, // $B6D6 + #$B6D7, // $B6D7 + #$B6D8, // $B6D8 + #$B6D9, // $B6D9 + #$B6DA, // $B6DA + #$B6DB, // $B6DB + #$B6DC, // $B6DC + #$B6DD, // $B6DD + #$B6DE, // $B6DE + #$B6DF, // $B6DF + #$B6E0, // $B6E0 + #$B6E1, // $B6E1 + #$B6E2, // $B6E2 + #$B6E3, // $B6E3 + #$B6E4, // $B6E4 + #$B6E5, // $B6E5 + #$B6E6, // $B6E6 + #$B6E7, // $B6E7 + #$B6E8, // $B6E8 + #$B6E9, // $B6E9 + #$B6EA, // $B6EA + #$B6EB, // $B6EB + #$B6EC, // $B6EC + #$B6ED, // $B6ED + #$B6EE, // $B6EE + #$B6EF, // $B6EF + #$B6F0, // $B6F0 + #$B6F1, // $B6F1 + #$B6F2, // $B6F2 + #$B6F3, // $B6F3 + #$B6F4, // $B6F4 + #$B6F5, // $B6F5 + #$B6F6, // $B6F6 + #$B6F7, // $B6F7 + #$B6F8, // $B6F8 + #$B6F9, // $B6F9 + #$B6FA, // $B6FA + #$B6FB, // $B6FB + #$B6FC, // $B6FC + #$B6FD, // $B6FD + #$B6FE, // $B6FE + #$B6FF, // $B6FF + #$B700, // $B700 + #$B701, // $B701 + #$B702, // $B702 + #$B703, // $B703 + #$B704, // $B704 + #$B705, // $B705 + #$B706, // $B706 + #$B707, // $B707 + #$B708, // $B708 + #$B709, // $B709 + #$B70A, // $B70A + #$B70B, // $B70B + #$B70C, // $B70C + #$B70D, // $B70D + #$B70E, // $B70E + #$B70F, // $B70F + #$B710, // $B710 + #$B711, // $B711 + #$B712, // $B712 + #$B713, // $B713 + #$B714, // $B714 + #$B715, // $B715 + #$B716, // $B716 + #$B717, // $B717 + #$B718, // $B718 + #$B719, // $B719 + #$B71A, // $B71A + #$B71B, // $B71B + #$B71C, // $B71C + #$B71D, // $B71D + #$B71E, // $B71E + #$B71F, // $B71F + #$B720, // $B720 + #$B721, // $B721 + #$B722, // $B722 + #$B723, // $B723 + #$B724, // $B724 + #$B725, // $B725 + #$B726, // $B726 + #$B727, // $B727 + #$B728, // $B728 + #$B729, // $B729 + #$B72A, // $B72A + #$B72B, // $B72B + #$B72C, // $B72C + #$B72D, // $B72D + #$B72E, // $B72E + #$B72F, // $B72F + #$B730, // $B730 + #$B731, // $B731 + #$B732, // $B732 + #$B733, // $B733 + #$B734, // $B734 + #$B735, // $B735 + #$B736, // $B736 + #$B737, // $B737 + #$B738, // $B738 + #$B739, // $B739 + #$B73A, // $B73A + #$B73B, // $B73B + #$B73C, // $B73C + #$B73D, // $B73D + #$B73E, // $B73E + #$B73F, // $B73F + #$B740, // $B740 + #$B741, // $B741 + #$B742, // $B742 + #$B743, // $B743 + #$B744, // $B744 + #$B745, // $B745 + #$B746, // $B746 + #$B747, // $B747 + #$B748, // $B748 + #$B749, // $B749 + #$B74A, // $B74A + #$B74B, // $B74B + #$B74C, // $B74C + #$B74D, // $B74D + #$B74E, // $B74E + #$B74F, // $B74F + #$B750, // $B750 + #$B751, // $B751 + #$B752, // $B752 + #$B753, // $B753 + #$B754, // $B754 + #$B755, // $B755 + #$B756, // $B756 + #$B757, // $B757 + #$B758, // $B758 + #$B759, // $B759 + #$B75A, // $B75A + #$B75B, // $B75B + #$B75C, // $B75C + #$B75D, // $B75D + #$B75E, // $B75E + #$B75F, // $B75F + #$B760, // $B760 + #$B761, // $B761 + #$B762, // $B762 + #$B763, // $B763 + #$B764, // $B764 + #$B765, // $B765 + #$B766, // $B766 + #$B767, // $B767 + #$B768, // $B768 + #$B769, // $B769 + #$B76A, // $B76A + #$B76B, // $B76B + #$B76C, // $B76C + #$B76D, // $B76D + #$B76E, // $B76E + #$B76F, // $B76F + #$B770, // $B770 + #$B771, // $B771 + #$B772, // $B772 + #$B773, // $B773 + #$B774, // $B774 + #$B775, // $B775 + #$B776, // $B776 + #$B777, // $B777 + #$B778, // $B778 + #$B779, // $B779 + #$B77A, // $B77A + #$B77B, // $B77B + #$B77C, // $B77C + #$B77D, // $B77D + #$B77E, // $B77E + #$B77F, // $B77F + #$B780, // $B780 + #$B781, // $B781 + #$B782, // $B782 + #$B783, // $B783 + #$B784, // $B784 + #$B785, // $B785 + #$B786, // $B786 + #$B787, // $B787 + #$B788, // $B788 + #$B789, // $B789 + #$B78A, // $B78A + #$B78B, // $B78B + #$B78C, // $B78C + #$B78D, // $B78D + #$B78E, // $B78E + #$B78F, // $B78F + #$B790, // $B790 + #$B791, // $B791 + #$B792, // $B792 + #$B793, // $B793 + #$B794, // $B794 + #$B795, // $B795 + #$B796, // $B796 + #$B797, // $B797 + #$B798, // $B798 + #$B799, // $B799 + #$B79A, // $B79A + #$B79B, // $B79B + #$B79C, // $B79C + #$B79D, // $B79D + #$B79E, // $B79E + #$B79F, // $B79F + #$B7A0, // $B7A0 + #$B7A1, // $B7A1 + #$B7A2, // $B7A2 + #$B7A3, // $B7A3 + #$B7A4, // $B7A4 + #$B7A5, // $B7A5 + #$B7A6, // $B7A6 + #$B7A7, // $B7A7 + #$B7A8, // $B7A8 + #$B7A9, // $B7A9 + #$B7AA, // $B7AA + #$B7AB, // $B7AB + #$B7AC, // $B7AC + #$B7AD, // $B7AD + #$B7AE, // $B7AE + #$B7AF, // $B7AF + #$B7B0, // $B7B0 + #$B7B1, // $B7B1 + #$B7B2, // $B7B2 + #$B7B3, // $B7B3 + #$B7B4, // $B7B4 + #$B7B5, // $B7B5 + #$B7B6, // $B7B6 + #$B7B7, // $B7B7 + #$B7B8, // $B7B8 + #$B7B9, // $B7B9 + #$B7BA, // $B7BA + #$B7BB, // $B7BB + #$B7BC, // $B7BC + #$B7BD, // $B7BD + #$B7BE, // $B7BE + #$B7BF, // $B7BF + #$B7C0, // $B7C0 + #$B7C1, // $B7C1 + #$B7C2, // $B7C2 + #$B7C3, // $B7C3 + #$B7C4, // $B7C4 + #$B7C5, // $B7C5 + #$B7C6, // $B7C6 + #$B7C7, // $B7C7 + #$B7C8, // $B7C8 + #$B7C9, // $B7C9 + #$B7CA, // $B7CA + #$B7CB, // $B7CB + #$B7CC, // $B7CC + #$B7CD, // $B7CD + #$B7CE, // $B7CE + #$B7CF, // $B7CF + #$B7D0, // $B7D0 + #$B7D1, // $B7D1 + #$B7D2, // $B7D2 + #$B7D3, // $B7D3 + #$B7D4, // $B7D4 + #$B7D5, // $B7D5 + #$B7D6, // $B7D6 + #$B7D7, // $B7D7 + #$B7D8, // $B7D8 + #$B7D9, // $B7D9 + #$B7DA, // $B7DA + #$B7DB, // $B7DB + #$B7DC, // $B7DC + #$B7DD, // $B7DD + #$B7DE, // $B7DE + #$B7DF, // $B7DF + #$B7E0, // $B7E0 + #$B7E1, // $B7E1 + #$B7E2, // $B7E2 + #$B7E3, // $B7E3 + #$B7E4, // $B7E4 + #$B7E5, // $B7E5 + #$B7E6, // $B7E6 + #$B7E7, // $B7E7 + #$B7E8, // $B7E8 + #$B7E9, // $B7E9 + #$B7EA, // $B7EA + #$B7EB, // $B7EB + #$B7EC, // $B7EC + #$B7ED, // $B7ED + #$B7EE, // $B7EE + #$B7EF, // $B7EF + #$B7F0, // $B7F0 + #$B7F1, // $B7F1 + #$B7F2, // $B7F2 + #$B7F3, // $B7F3 + #$B7F4, // $B7F4 + #$B7F5, // $B7F5 + #$B7F6, // $B7F6 + #$B7F7, // $B7F7 + #$B7F8, // $B7F8 + #$B7F9, // $B7F9 + #$B7FA, // $B7FA + #$B7FB, // $B7FB + #$B7FC, // $B7FC + #$B7FD, // $B7FD + #$B7FE, // $B7FE + #$B7FF, // $B7FF + #$B800, // $B800 + #$B801, // $B801 + #$B802, // $B802 + #$B803, // $B803 + #$B804, // $B804 + #$B805, // $B805 + #$B806, // $B806 + #$B807, // $B807 + #$B808, // $B808 + #$B809, // $B809 + #$B80A, // $B80A + #$B80B, // $B80B + #$B80C, // $B80C + #$B80D, // $B80D + #$B80E, // $B80E + #$B80F, // $B80F + #$B810, // $B810 + #$B811, // $B811 + #$B812, // $B812 + #$B813, // $B813 + #$B814, // $B814 + #$B815, // $B815 + #$B816, // $B816 + #$B817, // $B817 + #$B818, // $B818 + #$B819, // $B819 + #$B81A, // $B81A + #$B81B, // $B81B + #$B81C, // $B81C + #$B81D, // $B81D + #$B81E, // $B81E + #$B81F, // $B81F + #$B820, // $B820 + #$B821, // $B821 + #$B822, // $B822 + #$B823, // $B823 + #$B824, // $B824 + #$B825, // $B825 + #$B826, // $B826 + #$B827, // $B827 + #$B828, // $B828 + #$B829, // $B829 + #$B82A, // $B82A + #$B82B, // $B82B + #$B82C, // $B82C + #$B82D, // $B82D + #$B82E, // $B82E + #$B82F, // $B82F + #$B830, // $B830 + #$B831, // $B831 + #$B832, // $B832 + #$B833, // $B833 + #$B834, // $B834 + #$B835, // $B835 + #$B836, // $B836 + #$B837, // $B837 + #$B838, // $B838 + #$B839, // $B839 + #$B83A, // $B83A + #$B83B, // $B83B + #$B83C, // $B83C + #$B83D, // $B83D + #$B83E, // $B83E + #$B83F, // $B83F + #$B840, // $B840 + #$B841, // $B841 + #$B842, // $B842 + #$B843, // $B843 + #$B844, // $B844 + #$B845, // $B845 + #$B846, // $B846 + #$B847, // $B847 + #$B848, // $B848 + #$B849, // $B849 + #$B84A, // $B84A + #$B84B, // $B84B + #$B84C, // $B84C + #$B84D, // $B84D + #$B84E, // $B84E + #$B84F, // $B84F + #$B850, // $B850 + #$B851, // $B851 + #$B852, // $B852 + #$B853, // $B853 + #$B854, // $B854 + #$B855, // $B855 + #$B856, // $B856 + #$B857, // $B857 + #$B858, // $B858 + #$B859, // $B859 + #$B85A, // $B85A + #$B85B, // $B85B + #$B85C, // $B85C + #$B85D, // $B85D + #$B85E, // $B85E + #$B85F, // $B85F + #$B860, // $B860 + #$B861, // $B861 + #$B862, // $B862 + #$B863, // $B863 + #$B864, // $B864 + #$B865, // $B865 + #$B866, // $B866 + #$B867, // $B867 + #$B868, // $B868 + #$B869, // $B869 + #$B86A, // $B86A + #$B86B, // $B86B + #$B86C, // $B86C + #$B86D, // $B86D + #$B86E, // $B86E + #$B86F, // $B86F + #$B870, // $B870 + #$B871, // $B871 + #$B872, // $B872 + #$B873, // $B873 + #$B874, // $B874 + #$B875, // $B875 + #$B876, // $B876 + #$B877, // $B877 + #$B878, // $B878 + #$B879, // $B879 + #$B87A, // $B87A + #$B87B, // $B87B + #$B87C, // $B87C + #$B87D, // $B87D + #$B87E, // $B87E + #$B87F, // $B87F + #$B880, // $B880 + #$B881, // $B881 + #$B882, // $B882 + #$B883, // $B883 + #$B884, // $B884 + #$B885, // $B885 + #$B886, // $B886 + #$B887, // $B887 + #$B888, // $B888 + #$B889, // $B889 + #$B88A, // $B88A + #$B88B, // $B88B + #$B88C, // $B88C + #$B88D, // $B88D + #$B88E, // $B88E + #$B88F, // $B88F + #$B890, // $B890 + #$B891, // $B891 + #$B892, // $B892 + #$B893, // $B893 + #$B894, // $B894 + #$B895, // $B895 + #$B896, // $B896 + #$B897, // $B897 + #$B898, // $B898 + #$B899, // $B899 + #$B89A, // $B89A + #$B89B, // $B89B + #$B89C, // $B89C + #$B89D, // $B89D + #$B89E, // $B89E + #$B89F, // $B89F + #$B8A0, // $B8A0 + #$B8A1, // $B8A1 + #$B8A2, // $B8A2 + #$B8A3, // $B8A3 + #$B8A4, // $B8A4 + #$B8A5, // $B8A5 + #$B8A6, // $B8A6 + #$B8A7, // $B8A7 + #$B8A8, // $B8A8 + #$B8A9, // $B8A9 + #$B8AA, // $B8AA + #$B8AB, // $B8AB + #$B8AC, // $B8AC + #$B8AD, // $B8AD + #$B8AE, // $B8AE + #$B8AF, // $B8AF + #$B8B0, // $B8B0 + #$B8B1, // $B8B1 + #$B8B2, // $B8B2 + #$B8B3, // $B8B3 + #$B8B4, // $B8B4 + #$B8B5, // $B8B5 + #$B8B6, // $B8B6 + #$B8B7, // $B8B7 + #$B8B8, // $B8B8 + #$B8B9, // $B8B9 + #$B8BA, // $B8BA + #$B8BB, // $B8BB + #$B8BC, // $B8BC + #$B8BD, // $B8BD + #$B8BE, // $B8BE + #$B8BF, // $B8BF + #$B8C0, // $B8C0 + #$B8C1, // $B8C1 + #$B8C2, // $B8C2 + #$B8C3, // $B8C3 + #$B8C4, // $B8C4 + #$B8C5, // $B8C5 + #$B8C6, // $B8C6 + #$B8C7, // $B8C7 + #$B8C8, // $B8C8 + #$B8C9, // $B8C9 + #$B8CA, // $B8CA + #$B8CB, // $B8CB + #$B8CC, // $B8CC + #$B8CD, // $B8CD + #$B8CE, // $B8CE + #$B8CF, // $B8CF + #$B8D0, // $B8D0 + #$B8D1, // $B8D1 + #$B8D2, // $B8D2 + #$B8D3, // $B8D3 + #$B8D4, // $B8D4 + #$B8D5, // $B8D5 + #$B8D6, // $B8D6 + #$B8D7, // $B8D7 + #$B8D8, // $B8D8 + #$B8D9, // $B8D9 + #$B8DA, // $B8DA + #$B8DB, // $B8DB + #$B8DC, // $B8DC + #$B8DD, // $B8DD + #$B8DE, // $B8DE + #$B8DF, // $B8DF + #$B8E0, // $B8E0 + #$B8E1, // $B8E1 + #$B8E2, // $B8E2 + #$B8E3, // $B8E3 + #$B8E4, // $B8E4 + #$B8E5, // $B8E5 + #$B8E6, // $B8E6 + #$B8E7, // $B8E7 + #$B8E8, // $B8E8 + #$B8E9, // $B8E9 + #$B8EA, // $B8EA + #$B8EB, // $B8EB + #$B8EC, // $B8EC + #$B8ED, // $B8ED + #$B8EE, // $B8EE + #$B8EF, // $B8EF + #$B8F0, // $B8F0 + #$B8F1, // $B8F1 + #$B8F2, // $B8F2 + #$B8F3, // $B8F3 + #$B8F4, // $B8F4 + #$B8F5, // $B8F5 + #$B8F6, // $B8F6 + #$B8F7, // $B8F7 + #$B8F8, // $B8F8 + #$B8F9, // $B8F9 + #$B8FA, // $B8FA + #$B8FB, // $B8FB + #$B8FC, // $B8FC + #$B8FD, // $B8FD + #$B8FE, // $B8FE + #$B8FF, // $B8FF + #$B900, // $B900 + #$B901, // $B901 + #$B902, // $B902 + #$B903, // $B903 + #$B904, // $B904 + #$B905, // $B905 + #$B906, // $B906 + #$B907, // $B907 + #$B908, // $B908 + #$B909, // $B909 + #$B90A, // $B90A + #$B90B, // $B90B + #$B90C, // $B90C + #$B90D, // $B90D + #$B90E, // $B90E + #$B90F, // $B90F + #$B910, // $B910 + #$B911, // $B911 + #$B912, // $B912 + #$B913, // $B913 + #$B914, // $B914 + #$B915, // $B915 + #$B916, // $B916 + #$B917, // $B917 + #$B918, // $B918 + #$B919, // $B919 + #$B91A, // $B91A + #$B91B, // $B91B + #$B91C, // $B91C + #$B91D, // $B91D + #$B91E, // $B91E + #$B91F, // $B91F + #$B920, // $B920 + #$B921, // $B921 + #$B922, // $B922 + #$B923, // $B923 + #$B924, // $B924 + #$B925, // $B925 + #$B926, // $B926 + #$B927, // $B927 + #$B928, // $B928 + #$B929, // $B929 + #$B92A, // $B92A + #$B92B, // $B92B + #$B92C, // $B92C + #$B92D, // $B92D + #$B92E, // $B92E + #$B92F, // $B92F + #$B930, // $B930 + #$B931, // $B931 + #$B932, // $B932 + #$B933, // $B933 + #$B934, // $B934 + #$B935, // $B935 + #$B936, // $B936 + #$B937, // $B937 + #$B938, // $B938 + #$B939, // $B939 + #$B93A, // $B93A + #$B93B, // $B93B + #$B93C, // $B93C + #$B93D, // $B93D + #$B93E, // $B93E + #$B93F, // $B93F + #$B940, // $B940 + #$B941, // $B941 + #$B942, // $B942 + #$B943, // $B943 + #$B944, // $B944 + #$B945, // $B945 + #$B946, // $B946 + #$B947, // $B947 + #$B948, // $B948 + #$B949, // $B949 + #$B94A, // $B94A + #$B94B, // $B94B + #$B94C, // $B94C + #$B94D, // $B94D + #$B94E, // $B94E + #$B94F, // $B94F + #$B950, // $B950 + #$B951, // $B951 + #$B952, // $B952 + #$B953, // $B953 + #$B954, // $B954 + #$B955, // $B955 + #$B956, // $B956 + #$B957, // $B957 + #$B958, // $B958 + #$B959, // $B959 + #$B95A, // $B95A + #$B95B, // $B95B + #$B95C, // $B95C + #$B95D, // $B95D + #$B95E, // $B95E + #$B95F, // $B95F + #$B960, // $B960 + #$B961, // $B961 + #$B962, // $B962 + #$B963, // $B963 + #$B964, // $B964 + #$B965, // $B965 + #$B966, // $B966 + #$B967, // $B967 + #$B968, // $B968 + #$B969, // $B969 + #$B96A, // $B96A + #$B96B, // $B96B + #$B96C, // $B96C + #$B96D, // $B96D + #$B96E, // $B96E + #$B96F, // $B96F + #$B970, // $B970 + #$B971, // $B971 + #$B972, // $B972 + #$B973, // $B973 + #$B974, // $B974 + #$B975, // $B975 + #$B976, // $B976 + #$B977, // $B977 + #$B978, // $B978 + #$B979, // $B979 + #$B97A, // $B97A + #$B97B, // $B97B + #$B97C, // $B97C + #$B97D, // $B97D + #$B97E, // $B97E + #$B97F, // $B97F + #$B980, // $B980 + #$B981, // $B981 + #$B982, // $B982 + #$B983, // $B983 + #$B984, // $B984 + #$B985, // $B985 + #$B986, // $B986 + #$B987, // $B987 + #$B988, // $B988 + #$B989, // $B989 + #$B98A, // $B98A + #$B98B, // $B98B + #$B98C, // $B98C + #$B98D, // $B98D + #$B98E, // $B98E + #$B98F, // $B98F + #$B990, // $B990 + #$B991, // $B991 + #$B992, // $B992 + #$B993, // $B993 + #$B994, // $B994 + #$B995, // $B995 + #$B996, // $B996 + #$B997, // $B997 + #$B998, // $B998 + #$B999, // $B999 + #$B99A, // $B99A + #$B99B, // $B99B + #$B99C, // $B99C + #$B99D, // $B99D + #$B99E, // $B99E + #$B99F, // $B99F + #$B9A0, // $B9A0 + #$B9A1, // $B9A1 + #$B9A2, // $B9A2 + #$B9A3, // $B9A3 + #$B9A4, // $B9A4 + #$B9A5, // $B9A5 + #$B9A6, // $B9A6 + #$B9A7, // $B9A7 + #$B9A8, // $B9A8 + #$B9A9, // $B9A9 + #$B9AA, // $B9AA + #$B9AB, // $B9AB + #$B9AC, // $B9AC + #$B9AD, // $B9AD + #$B9AE, // $B9AE + #$B9AF, // $B9AF + #$B9B0, // $B9B0 + #$B9B1, // $B9B1 + #$B9B2, // $B9B2 + #$B9B3, // $B9B3 + #$B9B4, // $B9B4 + #$B9B5, // $B9B5 + #$B9B6, // $B9B6 + #$B9B7, // $B9B7 + #$B9B8, // $B9B8 + #$B9B9, // $B9B9 + #$B9BA, // $B9BA + #$B9BB, // $B9BB + #$B9BC, // $B9BC + #$B9BD, // $B9BD + #$B9BE, // $B9BE + #$B9BF, // $B9BF + #$B9C0, // $B9C0 + #$B9C1, // $B9C1 + #$B9C2, // $B9C2 + #$B9C3, // $B9C3 + #$B9C4, // $B9C4 + #$B9C5, // $B9C5 + #$B9C6, // $B9C6 + #$B9C7, // $B9C7 + #$B9C8, // $B9C8 + #$B9C9, // $B9C9 + #$B9CA, // $B9CA + #$B9CB, // $B9CB + #$B9CC, // $B9CC + #$B9CD, // $B9CD + #$B9CE, // $B9CE + #$B9CF, // $B9CF + #$B9D0, // $B9D0 + #$B9D1, // $B9D1 + #$B9D2, // $B9D2 + #$B9D3, // $B9D3 + #$B9D4, // $B9D4 + #$B9D5, // $B9D5 + #$B9D6, // $B9D6 + #$B9D7, // $B9D7 + #$B9D8, // $B9D8 + #$B9D9, // $B9D9 + #$B9DA, // $B9DA + #$B9DB, // $B9DB + #$B9DC, // $B9DC + #$B9DD, // $B9DD + #$B9DE, // $B9DE + #$B9DF, // $B9DF + #$B9E0, // $B9E0 + #$B9E1, // $B9E1 + #$B9E2, // $B9E2 + #$B9E3, // $B9E3 + #$B9E4, // $B9E4 + #$B9E5, // $B9E5 + #$B9E6, // $B9E6 + #$B9E7, // $B9E7 + #$B9E8, // $B9E8 + #$B9E9, // $B9E9 + #$B9EA, // $B9EA + #$B9EB, // $B9EB + #$B9EC, // $B9EC + #$B9ED, // $B9ED + #$B9EE, // $B9EE + #$B9EF, // $B9EF + #$B9F0, // $B9F0 + #$B9F1, // $B9F1 + #$B9F2, // $B9F2 + #$B9F3, // $B9F3 + #$B9F4, // $B9F4 + #$B9F5, // $B9F5 + #$B9F6, // $B9F6 + #$B9F7, // $B9F7 + #$B9F8, // $B9F8 + #$B9F9, // $B9F9 + #$B9FA, // $B9FA + #$B9FB, // $B9FB + #$B9FC, // $B9FC + #$B9FD, // $B9FD + #$B9FE, // $B9FE + #$B9FF, // $B9FF + #$BA00, // $BA00 + #$BA01, // $BA01 + #$BA02, // $BA02 + #$BA03, // $BA03 + #$BA04, // $BA04 + #$BA05, // $BA05 + #$BA06, // $BA06 + #$BA07, // $BA07 + #$BA08, // $BA08 + #$BA09, // $BA09 + #$BA0A, // $BA0A + #$BA0B, // $BA0B + #$BA0C, // $BA0C + #$BA0D, // $BA0D + #$BA0E, // $BA0E + #$BA0F, // $BA0F + #$BA10, // $BA10 + #$BA11, // $BA11 + #$BA12, // $BA12 + #$BA13, // $BA13 + #$BA14, // $BA14 + #$BA15, // $BA15 + #$BA16, // $BA16 + #$BA17, // $BA17 + #$BA18, // $BA18 + #$BA19, // $BA19 + #$BA1A, // $BA1A + #$BA1B, // $BA1B + #$BA1C, // $BA1C + #$BA1D, // $BA1D + #$BA1E, // $BA1E + #$BA1F, // $BA1F + #$BA20, // $BA20 + #$BA21, // $BA21 + #$BA22, // $BA22 + #$BA23, // $BA23 + #$BA24, // $BA24 + #$BA25, // $BA25 + #$BA26, // $BA26 + #$BA27, // $BA27 + #$BA28, // $BA28 + #$BA29, // $BA29 + #$BA2A, // $BA2A + #$BA2B, // $BA2B + #$BA2C, // $BA2C + #$BA2D, // $BA2D + #$BA2E, // $BA2E + #$BA2F, // $BA2F + #$BA30, // $BA30 + #$BA31, // $BA31 + #$BA32, // $BA32 + #$BA33, // $BA33 + #$BA34, // $BA34 + #$BA35, // $BA35 + #$BA36, // $BA36 + #$BA37, // $BA37 + #$BA38, // $BA38 + #$BA39, // $BA39 + #$BA3A, // $BA3A + #$BA3B, // $BA3B + #$BA3C, // $BA3C + #$BA3D, // $BA3D + #$BA3E, // $BA3E + #$BA3F, // $BA3F + #$BA40, // $BA40 + #$BA41, // $BA41 + #$BA42, // $BA42 + #$BA43, // $BA43 + #$BA44, // $BA44 + #$BA45, // $BA45 + #$BA46, // $BA46 + #$BA47, // $BA47 + #$BA48, // $BA48 + #$BA49, // $BA49 + #$BA4A, // $BA4A + #$BA4B, // $BA4B + #$BA4C, // $BA4C + #$BA4D, // $BA4D + #$BA4E, // $BA4E + #$BA4F, // $BA4F + #$BA50, // $BA50 + #$BA51, // $BA51 + #$BA52, // $BA52 + #$BA53, // $BA53 + #$BA54, // $BA54 + #$BA55, // $BA55 + #$BA56, // $BA56 + #$BA57, // $BA57 + #$BA58, // $BA58 + #$BA59, // $BA59 + #$BA5A, // $BA5A + #$BA5B, // $BA5B + #$BA5C, // $BA5C + #$BA5D, // $BA5D + #$BA5E, // $BA5E + #$BA5F, // $BA5F + #$BA60, // $BA60 + #$BA61, // $BA61 + #$BA62, // $BA62 + #$BA63, // $BA63 + #$BA64, // $BA64 + #$BA65, // $BA65 + #$BA66, // $BA66 + #$BA67, // $BA67 + #$BA68, // $BA68 + #$BA69, // $BA69 + #$BA6A, // $BA6A + #$BA6B, // $BA6B + #$BA6C, // $BA6C + #$BA6D, // $BA6D + #$BA6E, // $BA6E + #$BA6F, // $BA6F + #$BA70, // $BA70 + #$BA71, // $BA71 + #$BA72, // $BA72 + #$BA73, // $BA73 + #$BA74, // $BA74 + #$BA75, // $BA75 + #$BA76, // $BA76 + #$BA77, // $BA77 + #$BA78, // $BA78 + #$BA79, // $BA79 + #$BA7A, // $BA7A + #$BA7B, // $BA7B + #$BA7C, // $BA7C + #$BA7D, // $BA7D + #$BA7E, // $BA7E + #$BA7F, // $BA7F + #$BA80, // $BA80 + #$BA81, // $BA81 + #$BA82, // $BA82 + #$BA83, // $BA83 + #$BA84, // $BA84 + #$BA85, // $BA85 + #$BA86, // $BA86 + #$BA87, // $BA87 + #$BA88, // $BA88 + #$BA89, // $BA89 + #$BA8A, // $BA8A + #$BA8B, // $BA8B + #$BA8C, // $BA8C + #$BA8D, // $BA8D + #$BA8E, // $BA8E + #$BA8F, // $BA8F + #$BA90, // $BA90 + #$BA91, // $BA91 + #$BA92, // $BA92 + #$BA93, // $BA93 + #$BA94, // $BA94 + #$BA95, // $BA95 + #$BA96, // $BA96 + #$BA97, // $BA97 + #$BA98, // $BA98 + #$BA99, // $BA99 + #$BA9A, // $BA9A + #$BA9B, // $BA9B + #$BA9C, // $BA9C + #$BA9D, // $BA9D + #$BA9E, // $BA9E + #$BA9F, // $BA9F + #$BAA0, // $BAA0 + #$BAA1, // $BAA1 + #$BAA2, // $BAA2 + #$BAA3, // $BAA3 + #$BAA4, // $BAA4 + #$BAA5, // $BAA5 + #$BAA6, // $BAA6 + #$BAA7, // $BAA7 + #$BAA8, // $BAA8 + #$BAA9, // $BAA9 + #$BAAA, // $BAAA + #$BAAB, // $BAAB + #$BAAC, // $BAAC + #$BAAD, // $BAAD + #$BAAE, // $BAAE + #$BAAF, // $BAAF + #$BAB0, // $BAB0 + #$BAB1, // $BAB1 + #$BAB2, // $BAB2 + #$BAB3, // $BAB3 + #$BAB4, // $BAB4 + #$BAB5, // $BAB5 + #$BAB6, // $BAB6 + #$BAB7, // $BAB7 + #$BAB8, // $BAB8 + #$BAB9, // $BAB9 + #$BABA, // $BABA + #$BABB, // $BABB + #$BABC, // $BABC + #$BABD, // $BABD + #$BABE, // $BABE + #$BABF, // $BABF + #$BAC0, // $BAC0 + #$BAC1, // $BAC1 + #$BAC2, // $BAC2 + #$BAC3, // $BAC3 + #$BAC4, // $BAC4 + #$BAC5, // $BAC5 + #$BAC6, // $BAC6 + #$BAC7, // $BAC7 + #$BAC8, // $BAC8 + #$BAC9, // $BAC9 + #$BACA, // $BACA + #$BACB, // $BACB + #$BACC, // $BACC + #$BACD, // $BACD + #$BACE, // $BACE + #$BACF, // $BACF + #$BAD0, // $BAD0 + #$BAD1, // $BAD1 + #$BAD2, // $BAD2 + #$BAD3, // $BAD3 + #$BAD4, // $BAD4 + #$BAD5, // $BAD5 + #$BAD6, // $BAD6 + #$BAD7, // $BAD7 + #$BAD8, // $BAD8 + #$BAD9, // $BAD9 + #$BADA, // $BADA + #$BADB, // $BADB + #$BADC, // $BADC + #$BADD, // $BADD + #$BADE, // $BADE + #$BADF, // $BADF + #$BAE0, // $BAE0 + #$BAE1, // $BAE1 + #$BAE2, // $BAE2 + #$BAE3, // $BAE3 + #$BAE4, // $BAE4 + #$BAE5, // $BAE5 + #$BAE6, // $BAE6 + #$BAE7, // $BAE7 + #$BAE8, // $BAE8 + #$BAE9, // $BAE9 + #$BAEA, // $BAEA + #$BAEB, // $BAEB + #$BAEC, // $BAEC + #$BAED, // $BAED + #$BAEE, // $BAEE + #$BAEF, // $BAEF + #$BAF0, // $BAF0 + #$BAF1, // $BAF1 + #$BAF2, // $BAF2 + #$BAF3, // $BAF3 + #$BAF4, // $BAF4 + #$BAF5, // $BAF5 + #$BAF6, // $BAF6 + #$BAF7, // $BAF7 + #$BAF8, // $BAF8 + #$BAF9, // $BAF9 + #$BAFA, // $BAFA + #$BAFB, // $BAFB + #$BAFC, // $BAFC + #$BAFD, // $BAFD + #$BAFE, // $BAFE + #$BAFF, // $BAFF + #$BB00, // $BB00 + #$BB01, // $BB01 + #$BB02, // $BB02 + #$BB03, // $BB03 + #$BB04, // $BB04 + #$BB05, // $BB05 + #$BB06, // $BB06 + #$BB07, // $BB07 + #$BB08, // $BB08 + #$BB09, // $BB09 + #$BB0A, // $BB0A + #$BB0B, // $BB0B + #$BB0C, // $BB0C + #$BB0D, // $BB0D + #$BB0E, // $BB0E + #$BB0F, // $BB0F + #$BB10, // $BB10 + #$BB11, // $BB11 + #$BB12, // $BB12 + #$BB13, // $BB13 + #$BB14, // $BB14 + #$BB15, // $BB15 + #$BB16, // $BB16 + #$BB17, // $BB17 + #$BB18, // $BB18 + #$BB19, // $BB19 + #$BB1A, // $BB1A + #$BB1B, // $BB1B + #$BB1C, // $BB1C + #$BB1D, // $BB1D + #$BB1E, // $BB1E + #$BB1F, // $BB1F + #$BB20, // $BB20 + #$BB21, // $BB21 + #$BB22, // $BB22 + #$BB23, // $BB23 + #$BB24, // $BB24 + #$BB25, // $BB25 + #$BB26, // $BB26 + #$BB27, // $BB27 + #$BB28, // $BB28 + #$BB29, // $BB29 + #$BB2A, // $BB2A + #$BB2B, // $BB2B + #$BB2C, // $BB2C + #$BB2D, // $BB2D + #$BB2E, // $BB2E + #$BB2F, // $BB2F + #$BB30, // $BB30 + #$BB31, // $BB31 + #$BB32, // $BB32 + #$BB33, // $BB33 + #$BB34, // $BB34 + #$BB35, // $BB35 + #$BB36, // $BB36 + #$BB37, // $BB37 + #$BB38, // $BB38 + #$BB39, // $BB39 + #$BB3A, // $BB3A + #$BB3B, // $BB3B + #$BB3C, // $BB3C + #$BB3D, // $BB3D + #$BB3E, // $BB3E + #$BB3F, // $BB3F + #$BB40, // $BB40 + #$BB41, // $BB41 + #$BB42, // $BB42 + #$BB43, // $BB43 + #$BB44, // $BB44 + #$BB45, // $BB45 + #$BB46, // $BB46 + #$BB47, // $BB47 + #$BB48, // $BB48 + #$BB49, // $BB49 + #$BB4A, // $BB4A + #$BB4B, // $BB4B + #$BB4C, // $BB4C + #$BB4D, // $BB4D + #$BB4E, // $BB4E + #$BB4F, // $BB4F + #$BB50, // $BB50 + #$BB51, // $BB51 + #$BB52, // $BB52 + #$BB53, // $BB53 + #$BB54, // $BB54 + #$BB55, // $BB55 + #$BB56, // $BB56 + #$BB57, // $BB57 + #$BB58, // $BB58 + #$BB59, // $BB59 + #$BB5A, // $BB5A + #$BB5B, // $BB5B + #$BB5C, // $BB5C + #$BB5D, // $BB5D + #$BB5E, // $BB5E + #$BB5F, // $BB5F + #$BB60, // $BB60 + #$BB61, // $BB61 + #$BB62, // $BB62 + #$BB63, // $BB63 + #$BB64, // $BB64 + #$BB65, // $BB65 + #$BB66, // $BB66 + #$BB67, // $BB67 + #$BB68, // $BB68 + #$BB69, // $BB69 + #$BB6A, // $BB6A + #$BB6B, // $BB6B + #$BB6C, // $BB6C + #$BB6D, // $BB6D + #$BB6E, // $BB6E + #$BB6F, // $BB6F + #$BB70, // $BB70 + #$BB71, // $BB71 + #$BB72, // $BB72 + #$BB73, // $BB73 + #$BB74, // $BB74 + #$BB75, // $BB75 + #$BB76, // $BB76 + #$BB77, // $BB77 + #$BB78, // $BB78 + #$BB79, // $BB79 + #$BB7A, // $BB7A + #$BB7B, // $BB7B + #$BB7C, // $BB7C + #$BB7D, // $BB7D + #$BB7E, // $BB7E + #$BB7F, // $BB7F + #$BB80, // $BB80 + #$BB81, // $BB81 + #$BB82, // $BB82 + #$BB83, // $BB83 + #$BB84, // $BB84 + #$BB85, // $BB85 + #$BB86, // $BB86 + #$BB87, // $BB87 + #$BB88, // $BB88 + #$BB89, // $BB89 + #$BB8A, // $BB8A + #$BB8B, // $BB8B + #$BB8C, // $BB8C + #$BB8D, // $BB8D + #$BB8E, // $BB8E + #$BB8F, // $BB8F + #$BB90, // $BB90 + #$BB91, // $BB91 + #$BB92, // $BB92 + #$BB93, // $BB93 + #$BB94, // $BB94 + #$BB95, // $BB95 + #$BB96, // $BB96 + #$BB97, // $BB97 + #$BB98, // $BB98 + #$BB99, // $BB99 + #$BB9A, // $BB9A + #$BB9B, // $BB9B + #$BB9C, // $BB9C + #$BB9D, // $BB9D + #$BB9E, // $BB9E + #$BB9F, // $BB9F + #$BBA0, // $BBA0 + #$BBA1, // $BBA1 + #$BBA2, // $BBA2 + #$BBA3, // $BBA3 + #$BBA4, // $BBA4 + #$BBA5, // $BBA5 + #$BBA6, // $BBA6 + #$BBA7, // $BBA7 + #$BBA8, // $BBA8 + #$BBA9, // $BBA9 + #$BBAA, // $BBAA + #$BBAB, // $BBAB + #$BBAC, // $BBAC + #$BBAD, // $BBAD + #$BBAE, // $BBAE + #$BBAF, // $BBAF + #$BBB0, // $BBB0 + #$BBB1, // $BBB1 + #$BBB2, // $BBB2 + #$BBB3, // $BBB3 + #$BBB4, // $BBB4 + #$BBB5, // $BBB5 + #$BBB6, // $BBB6 + #$BBB7, // $BBB7 + #$BBB8, // $BBB8 + #$BBB9, // $BBB9 + #$BBBA, // $BBBA + #$BBBB, // $BBBB + #$BBBC, // $BBBC + #$BBBD, // $BBBD + #$BBBE, // $BBBE + #$BBBF, // $BBBF + #$BBC0, // $BBC0 + #$BBC1, // $BBC1 + #$BBC2, // $BBC2 + #$BBC3, // $BBC3 + #$BBC4, // $BBC4 + #$BBC5, // $BBC5 + #$BBC6, // $BBC6 + #$BBC7, // $BBC7 + #$BBC8, // $BBC8 + #$BBC9, // $BBC9 + #$BBCA, // $BBCA + #$BBCB, // $BBCB + #$BBCC, // $BBCC + #$BBCD, // $BBCD + #$BBCE, // $BBCE + #$BBCF, // $BBCF + #$BBD0, // $BBD0 + #$BBD1, // $BBD1 + #$BBD2, // $BBD2 + #$BBD3, // $BBD3 + #$BBD4, // $BBD4 + #$BBD5, // $BBD5 + #$BBD6, // $BBD6 + #$BBD7, // $BBD7 + #$BBD8, // $BBD8 + #$BBD9, // $BBD9 + #$BBDA, // $BBDA + #$BBDB, // $BBDB + #$BBDC, // $BBDC + #$BBDD, // $BBDD + #$BBDE, // $BBDE + #$BBDF, // $BBDF + #$BBE0, // $BBE0 + #$BBE1, // $BBE1 + #$BBE2, // $BBE2 + #$BBE3, // $BBE3 + #$BBE4, // $BBE4 + #$BBE5, // $BBE5 + #$BBE6, // $BBE6 + #$BBE7, // $BBE7 + #$BBE8, // $BBE8 + #$BBE9, // $BBE9 + #$BBEA, // $BBEA + #$BBEB, // $BBEB + #$BBEC, // $BBEC + #$BBED, // $BBED + #$BBEE, // $BBEE + #$BBEF, // $BBEF + #$BBF0, // $BBF0 + #$BBF1, // $BBF1 + #$BBF2, // $BBF2 + #$BBF3, // $BBF3 + #$BBF4, // $BBF4 + #$BBF5, // $BBF5 + #$BBF6, // $BBF6 + #$BBF7, // $BBF7 + #$BBF8, // $BBF8 + #$BBF9, // $BBF9 + #$BBFA, // $BBFA + #$BBFB, // $BBFB + #$BBFC, // $BBFC + #$BBFD, // $BBFD + #$BBFE, // $BBFE + #$BBFF, // $BBFF + #$BC00, // $BC00 + #$BC01, // $BC01 + #$BC02, // $BC02 + #$BC03, // $BC03 + #$BC04, // $BC04 + #$BC05, // $BC05 + #$BC06, // $BC06 + #$BC07, // $BC07 + #$BC08, // $BC08 + #$BC09, // $BC09 + #$BC0A, // $BC0A + #$BC0B, // $BC0B + #$BC0C, // $BC0C + #$BC0D, // $BC0D + #$BC0E, // $BC0E + #$BC0F, // $BC0F + #$BC10, // $BC10 + #$BC11, // $BC11 + #$BC12, // $BC12 + #$BC13, // $BC13 + #$BC14, // $BC14 + #$BC15, // $BC15 + #$BC16, // $BC16 + #$BC17, // $BC17 + #$BC18, // $BC18 + #$BC19, // $BC19 + #$BC1A, // $BC1A + #$BC1B, // $BC1B + #$BC1C, // $BC1C + #$BC1D, // $BC1D + #$BC1E, // $BC1E + #$BC1F, // $BC1F + #$BC20, // $BC20 + #$BC21, // $BC21 + #$BC22, // $BC22 + #$BC23, // $BC23 + #$BC24, // $BC24 + #$BC25, // $BC25 + #$BC26, // $BC26 + #$BC27, // $BC27 + #$BC28, // $BC28 + #$BC29, // $BC29 + #$BC2A, // $BC2A + #$BC2B, // $BC2B + #$BC2C, // $BC2C + #$BC2D, // $BC2D + #$BC2E, // $BC2E + #$BC2F, // $BC2F + #$BC30, // $BC30 + #$BC31, // $BC31 + #$BC32, // $BC32 + #$BC33, // $BC33 + #$BC34, // $BC34 + #$BC35, // $BC35 + #$BC36, // $BC36 + #$BC37, // $BC37 + #$BC38, // $BC38 + #$BC39, // $BC39 + #$BC3A, // $BC3A + #$BC3B, // $BC3B + #$BC3C, // $BC3C + #$BC3D, // $BC3D + #$BC3E, // $BC3E + #$BC3F, // $BC3F + #$BC40, // $BC40 + #$BC41, // $BC41 + #$BC42, // $BC42 + #$BC43, // $BC43 + #$BC44, // $BC44 + #$BC45, // $BC45 + #$BC46, // $BC46 + #$BC47, // $BC47 + #$BC48, // $BC48 + #$BC49, // $BC49 + #$BC4A, // $BC4A + #$BC4B, // $BC4B + #$BC4C, // $BC4C + #$BC4D, // $BC4D + #$BC4E, // $BC4E + #$BC4F, // $BC4F + #$BC50, // $BC50 + #$BC51, // $BC51 + #$BC52, // $BC52 + #$BC53, // $BC53 + #$BC54, // $BC54 + #$BC55, // $BC55 + #$BC56, // $BC56 + #$BC57, // $BC57 + #$BC58, // $BC58 + #$BC59, // $BC59 + #$BC5A, // $BC5A + #$BC5B, // $BC5B + #$BC5C, // $BC5C + #$BC5D, // $BC5D + #$BC5E, // $BC5E + #$BC5F, // $BC5F + #$BC60, // $BC60 + #$BC61, // $BC61 + #$BC62, // $BC62 + #$BC63, // $BC63 + #$BC64, // $BC64 + #$BC65, // $BC65 + #$BC66, // $BC66 + #$BC67, // $BC67 + #$BC68, // $BC68 + #$BC69, // $BC69 + #$BC6A, // $BC6A + #$BC6B, // $BC6B + #$BC6C, // $BC6C + #$BC6D, // $BC6D + #$BC6E, // $BC6E + #$BC6F, // $BC6F + #$BC70, // $BC70 + #$BC71, // $BC71 + #$BC72, // $BC72 + #$BC73, // $BC73 + #$BC74, // $BC74 + #$BC75, // $BC75 + #$BC76, // $BC76 + #$BC77, // $BC77 + #$BC78, // $BC78 + #$BC79, // $BC79 + #$BC7A, // $BC7A + #$BC7B, // $BC7B + #$BC7C, // $BC7C + #$BC7D, // $BC7D + #$BC7E, // $BC7E + #$BC7F, // $BC7F + #$BC80, // $BC80 + #$BC81, // $BC81 + #$BC82, // $BC82 + #$BC83, // $BC83 + #$BC84, // $BC84 + #$BC85, // $BC85 + #$BC86, // $BC86 + #$BC87, // $BC87 + #$BC88, // $BC88 + #$BC89, // $BC89 + #$BC8A, // $BC8A + #$BC8B, // $BC8B + #$BC8C, // $BC8C + #$BC8D, // $BC8D + #$BC8E, // $BC8E + #$BC8F, // $BC8F + #$BC90, // $BC90 + #$BC91, // $BC91 + #$BC92, // $BC92 + #$BC93, // $BC93 + #$BC94, // $BC94 + #$BC95, // $BC95 + #$BC96, // $BC96 + #$BC97, // $BC97 + #$BC98, // $BC98 + #$BC99, // $BC99 + #$BC9A, // $BC9A + #$BC9B, // $BC9B + #$BC9C, // $BC9C + #$BC9D, // $BC9D + #$BC9E, // $BC9E + #$BC9F, // $BC9F + #$BCA0, // $BCA0 + #$BCA1, // $BCA1 + #$BCA2, // $BCA2 + #$BCA3, // $BCA3 + #$BCA4, // $BCA4 + #$BCA5, // $BCA5 + #$BCA6, // $BCA6 + #$BCA7, // $BCA7 + #$BCA8, // $BCA8 + #$BCA9, // $BCA9 + #$BCAA, // $BCAA + #$BCAB, // $BCAB + #$BCAC, // $BCAC + #$BCAD, // $BCAD + #$BCAE, // $BCAE + #$BCAF, // $BCAF + #$BCB0, // $BCB0 + #$BCB1, // $BCB1 + #$BCB2, // $BCB2 + #$BCB3, // $BCB3 + #$BCB4, // $BCB4 + #$BCB5, // $BCB5 + #$BCB6, // $BCB6 + #$BCB7, // $BCB7 + #$BCB8, // $BCB8 + #$BCB9, // $BCB9 + #$BCBA, // $BCBA + #$BCBB, // $BCBB + #$BCBC, // $BCBC + #$BCBD, // $BCBD + #$BCBE, // $BCBE + #$BCBF, // $BCBF + #$BCC0, // $BCC0 + #$BCC1, // $BCC1 + #$BCC2, // $BCC2 + #$BCC3, // $BCC3 + #$BCC4, // $BCC4 + #$BCC5, // $BCC5 + #$BCC6, // $BCC6 + #$BCC7, // $BCC7 + #$BCC8, // $BCC8 + #$BCC9, // $BCC9 + #$BCCA, // $BCCA + #$BCCB, // $BCCB + #$BCCC, // $BCCC + #$BCCD, // $BCCD + #$BCCE, // $BCCE + #$BCCF, // $BCCF + #$BCD0, // $BCD0 + #$BCD1, // $BCD1 + #$BCD2, // $BCD2 + #$BCD3, // $BCD3 + #$BCD4, // $BCD4 + #$BCD5, // $BCD5 + #$BCD6, // $BCD6 + #$BCD7, // $BCD7 + #$BCD8, // $BCD8 + #$BCD9, // $BCD9 + #$BCDA, // $BCDA + #$BCDB, // $BCDB + #$BCDC, // $BCDC + #$BCDD, // $BCDD + #$BCDE, // $BCDE + #$BCDF, // $BCDF + #$BCE0, // $BCE0 + #$BCE1, // $BCE1 + #$BCE2, // $BCE2 + #$BCE3, // $BCE3 + #$BCE4, // $BCE4 + #$BCE5, // $BCE5 + #$BCE6, // $BCE6 + #$BCE7, // $BCE7 + #$BCE8, // $BCE8 + #$BCE9, // $BCE9 + #$BCEA, // $BCEA + #$BCEB, // $BCEB + #$BCEC, // $BCEC + #$BCED, // $BCED + #$BCEE, // $BCEE + #$BCEF, // $BCEF + #$BCF0, // $BCF0 + #$BCF1, // $BCF1 + #$BCF2, // $BCF2 + #$BCF3, // $BCF3 + #$BCF4, // $BCF4 + #$BCF5, // $BCF5 + #$BCF6, // $BCF6 + #$BCF7, // $BCF7 + #$BCF8, // $BCF8 + #$BCF9, // $BCF9 + #$BCFA, // $BCFA + #$BCFB, // $BCFB + #$BCFC, // $BCFC + #$BCFD, // $BCFD + #$BCFE, // $BCFE + #$BCFF, // $BCFF + #$BD00, // $BD00 + #$BD01, // $BD01 + #$BD02, // $BD02 + #$BD03, // $BD03 + #$BD04, // $BD04 + #$BD05, // $BD05 + #$BD06, // $BD06 + #$BD07, // $BD07 + #$BD08, // $BD08 + #$BD09, // $BD09 + #$BD0A, // $BD0A + #$BD0B, // $BD0B + #$BD0C, // $BD0C + #$BD0D, // $BD0D + #$BD0E, // $BD0E + #$BD0F, // $BD0F + #$BD10, // $BD10 + #$BD11, // $BD11 + #$BD12, // $BD12 + #$BD13, // $BD13 + #$BD14, // $BD14 + #$BD15, // $BD15 + #$BD16, // $BD16 + #$BD17, // $BD17 + #$BD18, // $BD18 + #$BD19, // $BD19 + #$BD1A, // $BD1A + #$BD1B, // $BD1B + #$BD1C, // $BD1C + #$BD1D, // $BD1D + #$BD1E, // $BD1E + #$BD1F, // $BD1F + #$BD20, // $BD20 + #$BD21, // $BD21 + #$BD22, // $BD22 + #$BD23, // $BD23 + #$BD24, // $BD24 + #$BD25, // $BD25 + #$BD26, // $BD26 + #$BD27, // $BD27 + #$BD28, // $BD28 + #$BD29, // $BD29 + #$BD2A, // $BD2A + #$BD2B, // $BD2B + #$BD2C, // $BD2C + #$BD2D, // $BD2D + #$BD2E, // $BD2E + #$BD2F, // $BD2F + #$BD30, // $BD30 + #$BD31, // $BD31 + #$BD32, // $BD32 + #$BD33, // $BD33 + #$BD34, // $BD34 + #$BD35, // $BD35 + #$BD36, // $BD36 + #$BD37, // $BD37 + #$BD38, // $BD38 + #$BD39, // $BD39 + #$BD3A, // $BD3A + #$BD3B, // $BD3B + #$BD3C, // $BD3C + #$BD3D, // $BD3D + #$BD3E, // $BD3E + #$BD3F, // $BD3F + #$BD40, // $BD40 + #$BD41, // $BD41 + #$BD42, // $BD42 + #$BD43, // $BD43 + #$BD44, // $BD44 + #$BD45, // $BD45 + #$BD46, // $BD46 + #$BD47, // $BD47 + #$BD48, // $BD48 + #$BD49, // $BD49 + #$BD4A, // $BD4A + #$BD4B, // $BD4B + #$BD4C, // $BD4C + #$BD4D, // $BD4D + #$BD4E, // $BD4E + #$BD4F, // $BD4F + #$BD50, // $BD50 + #$BD51, // $BD51 + #$BD52, // $BD52 + #$BD53, // $BD53 + #$BD54, // $BD54 + #$BD55, // $BD55 + #$BD56, // $BD56 + #$BD57, // $BD57 + #$BD58, // $BD58 + #$BD59, // $BD59 + #$BD5A, // $BD5A + #$BD5B, // $BD5B + #$BD5C, // $BD5C + #$BD5D, // $BD5D + #$BD5E, // $BD5E + #$BD5F, // $BD5F + #$BD60, // $BD60 + #$BD61, // $BD61 + #$BD62, // $BD62 + #$BD63, // $BD63 + #$BD64, // $BD64 + #$BD65, // $BD65 + #$BD66, // $BD66 + #$BD67, // $BD67 + #$BD68, // $BD68 + #$BD69, // $BD69 + #$BD6A, // $BD6A + #$BD6B, // $BD6B + #$BD6C, // $BD6C + #$BD6D, // $BD6D + #$BD6E, // $BD6E + #$BD6F, // $BD6F + #$BD70, // $BD70 + #$BD71, // $BD71 + #$BD72, // $BD72 + #$BD73, // $BD73 + #$BD74, // $BD74 + #$BD75, // $BD75 + #$BD76, // $BD76 + #$BD77, // $BD77 + #$BD78, // $BD78 + #$BD79, // $BD79 + #$BD7A, // $BD7A + #$BD7B, // $BD7B + #$BD7C, // $BD7C + #$BD7D, // $BD7D + #$BD7E, // $BD7E + #$BD7F, // $BD7F + #$BD80, // $BD80 + #$BD81, // $BD81 + #$BD82, // $BD82 + #$BD83, // $BD83 + #$BD84, // $BD84 + #$BD85, // $BD85 + #$BD86, // $BD86 + #$BD87, // $BD87 + #$BD88, // $BD88 + #$BD89, // $BD89 + #$BD8A, // $BD8A + #$BD8B, // $BD8B + #$BD8C, // $BD8C + #$BD8D, // $BD8D + #$BD8E, // $BD8E + #$BD8F, // $BD8F + #$BD90, // $BD90 + #$BD91, // $BD91 + #$BD92, // $BD92 + #$BD93, // $BD93 + #$BD94, // $BD94 + #$BD95, // $BD95 + #$BD96, // $BD96 + #$BD97, // $BD97 + #$BD98, // $BD98 + #$BD99, // $BD99 + #$BD9A, // $BD9A + #$BD9B, // $BD9B + #$BD9C, // $BD9C + #$BD9D, // $BD9D + #$BD9E, // $BD9E + #$BD9F, // $BD9F + #$BDA0, // $BDA0 + #$BDA1, // $BDA1 + #$BDA2, // $BDA2 + #$BDA3, // $BDA3 + #$BDA4, // $BDA4 + #$BDA5, // $BDA5 + #$BDA6, // $BDA6 + #$BDA7, // $BDA7 + #$BDA8, // $BDA8 + #$BDA9, // $BDA9 + #$BDAA, // $BDAA + #$BDAB, // $BDAB + #$BDAC, // $BDAC + #$BDAD, // $BDAD + #$BDAE, // $BDAE + #$BDAF, // $BDAF + #$BDB0, // $BDB0 + #$BDB1, // $BDB1 + #$BDB2, // $BDB2 + #$BDB3, // $BDB3 + #$BDB4, // $BDB4 + #$BDB5, // $BDB5 + #$BDB6, // $BDB6 + #$BDB7, // $BDB7 + #$BDB8, // $BDB8 + #$BDB9, // $BDB9 + #$BDBA, // $BDBA + #$BDBB, // $BDBB + #$BDBC, // $BDBC + #$BDBD, // $BDBD + #$BDBE, // $BDBE + #$BDBF, // $BDBF + #$BDC0, // $BDC0 + #$BDC1, // $BDC1 + #$BDC2, // $BDC2 + #$BDC3, // $BDC3 + #$BDC4, // $BDC4 + #$BDC5, // $BDC5 + #$BDC6, // $BDC6 + #$BDC7, // $BDC7 + #$BDC8, // $BDC8 + #$BDC9, // $BDC9 + #$BDCA, // $BDCA + #$BDCB, // $BDCB + #$BDCC, // $BDCC + #$BDCD, // $BDCD + #$BDCE, // $BDCE + #$BDCF, // $BDCF + #$BDD0, // $BDD0 + #$BDD1, // $BDD1 + #$BDD2, // $BDD2 + #$BDD3, // $BDD3 + #$BDD4, // $BDD4 + #$BDD5, // $BDD5 + #$BDD6, // $BDD6 + #$BDD7, // $BDD7 + #$BDD8, // $BDD8 + #$BDD9, // $BDD9 + #$BDDA, // $BDDA + #$BDDB, // $BDDB + #$BDDC, // $BDDC + #$BDDD, // $BDDD + #$BDDE, // $BDDE + #$BDDF, // $BDDF + #$BDE0, // $BDE0 + #$BDE1, // $BDE1 + #$BDE2, // $BDE2 + #$BDE3, // $BDE3 + #$BDE4, // $BDE4 + #$BDE5, // $BDE5 + #$BDE6, // $BDE6 + #$BDE7, // $BDE7 + #$BDE8, // $BDE8 + #$BDE9, // $BDE9 + #$BDEA, // $BDEA + #$BDEB, // $BDEB + #$BDEC, // $BDEC + #$BDED, // $BDED + #$BDEE, // $BDEE + #$BDEF, // $BDEF + #$BDF0, // $BDF0 + #$BDF1, // $BDF1 + #$BDF2, // $BDF2 + #$BDF3, // $BDF3 + #$BDF4, // $BDF4 + #$BDF5, // $BDF5 + #$BDF6, // $BDF6 + #$BDF7, // $BDF7 + #$BDF8, // $BDF8 + #$BDF9, // $BDF9 + #$BDFA, // $BDFA + #$BDFB, // $BDFB + #$BDFC, // $BDFC + #$BDFD, // $BDFD + #$BDFE, // $BDFE + #$BDFF, // $BDFF + #$BE00, // $BE00 + #$BE01, // $BE01 + #$BE02, // $BE02 + #$BE03, // $BE03 + #$BE04, // $BE04 + #$BE05, // $BE05 + #$BE06, // $BE06 + #$BE07, // $BE07 + #$BE08, // $BE08 + #$BE09, // $BE09 + #$BE0A, // $BE0A + #$BE0B, // $BE0B + #$BE0C, // $BE0C + #$BE0D, // $BE0D + #$BE0E, // $BE0E + #$BE0F, // $BE0F + #$BE10, // $BE10 + #$BE11, // $BE11 + #$BE12, // $BE12 + #$BE13, // $BE13 + #$BE14, // $BE14 + #$BE15, // $BE15 + #$BE16, // $BE16 + #$BE17, // $BE17 + #$BE18, // $BE18 + #$BE19, // $BE19 + #$BE1A, // $BE1A + #$BE1B, // $BE1B + #$BE1C, // $BE1C + #$BE1D, // $BE1D + #$BE1E, // $BE1E + #$BE1F, // $BE1F + #$BE20, // $BE20 + #$BE21, // $BE21 + #$BE22, // $BE22 + #$BE23, // $BE23 + #$BE24, // $BE24 + #$BE25, // $BE25 + #$BE26, // $BE26 + #$BE27, // $BE27 + #$BE28, // $BE28 + #$BE29, // $BE29 + #$BE2A, // $BE2A + #$BE2B, // $BE2B + #$BE2C, // $BE2C + #$BE2D, // $BE2D + #$BE2E, // $BE2E + #$BE2F, // $BE2F + #$BE30, // $BE30 + #$BE31, // $BE31 + #$BE32, // $BE32 + #$BE33, // $BE33 + #$BE34, // $BE34 + #$BE35, // $BE35 + #$BE36, // $BE36 + #$BE37, // $BE37 + #$BE38, // $BE38 + #$BE39, // $BE39 + #$BE3A, // $BE3A + #$BE3B, // $BE3B + #$BE3C, // $BE3C + #$BE3D, // $BE3D + #$BE3E, // $BE3E + #$BE3F, // $BE3F + #$BE40, // $BE40 + #$BE41, // $BE41 + #$BE42, // $BE42 + #$BE43, // $BE43 + #$BE44, // $BE44 + #$BE45, // $BE45 + #$BE46, // $BE46 + #$BE47, // $BE47 + #$BE48, // $BE48 + #$BE49, // $BE49 + #$BE4A, // $BE4A + #$BE4B, // $BE4B + #$BE4C, // $BE4C + #$BE4D, // $BE4D + #$BE4E, // $BE4E + #$BE4F, // $BE4F + #$BE50, // $BE50 + #$BE51, // $BE51 + #$BE52, // $BE52 + #$BE53, // $BE53 + #$BE54, // $BE54 + #$BE55, // $BE55 + #$BE56, // $BE56 + #$BE57, // $BE57 + #$BE58, // $BE58 + #$BE59, // $BE59 + #$BE5A, // $BE5A + #$BE5B, // $BE5B + #$BE5C, // $BE5C + #$BE5D, // $BE5D + #$BE5E, // $BE5E + #$BE5F, // $BE5F + #$BE60, // $BE60 + #$BE61, // $BE61 + #$BE62, // $BE62 + #$BE63, // $BE63 + #$BE64, // $BE64 + #$BE65, // $BE65 + #$BE66, // $BE66 + #$BE67, // $BE67 + #$BE68, // $BE68 + #$BE69, // $BE69 + #$BE6A, // $BE6A + #$BE6B, // $BE6B + #$BE6C, // $BE6C + #$BE6D, // $BE6D + #$BE6E, // $BE6E + #$BE6F, // $BE6F + #$BE70, // $BE70 + #$BE71, // $BE71 + #$BE72, // $BE72 + #$BE73, // $BE73 + #$BE74, // $BE74 + #$BE75, // $BE75 + #$BE76, // $BE76 + #$BE77, // $BE77 + #$BE78, // $BE78 + #$BE79, // $BE79 + #$BE7A, // $BE7A + #$BE7B, // $BE7B + #$BE7C, // $BE7C + #$BE7D, // $BE7D + #$BE7E, // $BE7E + #$BE7F, // $BE7F + #$BE80, // $BE80 + #$BE81, // $BE81 + #$BE82, // $BE82 + #$BE83, // $BE83 + #$BE84, // $BE84 + #$BE85, // $BE85 + #$BE86, // $BE86 + #$BE87, // $BE87 + #$BE88, // $BE88 + #$BE89, // $BE89 + #$BE8A, // $BE8A + #$BE8B, // $BE8B + #$BE8C, // $BE8C + #$BE8D, // $BE8D + #$BE8E, // $BE8E + #$BE8F, // $BE8F + #$BE90, // $BE90 + #$BE91, // $BE91 + #$BE92, // $BE92 + #$BE93, // $BE93 + #$BE94, // $BE94 + #$BE95, // $BE95 + #$BE96, // $BE96 + #$BE97, // $BE97 + #$BE98, // $BE98 + #$BE99, // $BE99 + #$BE9A, // $BE9A + #$BE9B, // $BE9B + #$BE9C, // $BE9C + #$BE9D, // $BE9D + #$BE9E, // $BE9E + #$BE9F, // $BE9F + #$BEA0, // $BEA0 + #$BEA1, // $BEA1 + #$BEA2, // $BEA2 + #$BEA3, // $BEA3 + #$BEA4, // $BEA4 + #$BEA5, // $BEA5 + #$BEA6, // $BEA6 + #$BEA7, // $BEA7 + #$BEA8, // $BEA8 + #$BEA9, // $BEA9 + #$BEAA, // $BEAA + #$BEAB, // $BEAB + #$BEAC, // $BEAC + #$BEAD, // $BEAD + #$BEAE, // $BEAE + #$BEAF, // $BEAF + #$BEB0, // $BEB0 + #$BEB1, // $BEB1 + #$BEB2, // $BEB2 + #$BEB3, // $BEB3 + #$BEB4, // $BEB4 + #$BEB5, // $BEB5 + #$BEB6, // $BEB6 + #$BEB7, // $BEB7 + #$BEB8, // $BEB8 + #$BEB9, // $BEB9 + #$BEBA, // $BEBA + #$BEBB, // $BEBB + #$BEBC, // $BEBC + #$BEBD, // $BEBD + #$BEBE, // $BEBE + #$BEBF, // $BEBF + #$BEC0, // $BEC0 + #$BEC1, // $BEC1 + #$BEC2, // $BEC2 + #$BEC3, // $BEC3 + #$BEC4, // $BEC4 + #$BEC5, // $BEC5 + #$BEC6, // $BEC6 + #$BEC7, // $BEC7 + #$BEC8, // $BEC8 + #$BEC9, // $BEC9 + #$BECA, // $BECA + #$BECB, // $BECB + #$BECC, // $BECC + #$BECD, // $BECD + #$BECE, // $BECE + #$BECF, // $BECF + #$BED0, // $BED0 + #$BED1, // $BED1 + #$BED2, // $BED2 + #$BED3, // $BED3 + #$BED4, // $BED4 + #$BED5, // $BED5 + #$BED6, // $BED6 + #$BED7, // $BED7 + #$BED8, // $BED8 + #$BED9, // $BED9 + #$BEDA, // $BEDA + #$BEDB, // $BEDB + #$BEDC, // $BEDC + #$BEDD, // $BEDD + #$BEDE, // $BEDE + #$BEDF, // $BEDF + #$BEE0, // $BEE0 + #$BEE1, // $BEE1 + #$BEE2, // $BEE2 + #$BEE3, // $BEE3 + #$BEE4, // $BEE4 + #$BEE5, // $BEE5 + #$BEE6, // $BEE6 + #$BEE7, // $BEE7 + #$BEE8, // $BEE8 + #$BEE9, // $BEE9 + #$BEEA, // $BEEA + #$BEEB, // $BEEB + #$BEEC, // $BEEC + #$BEED, // $BEED + #$BEEE, // $BEEE + #$BEEF, // $BEEF + #$BEF0, // $BEF0 + #$BEF1, // $BEF1 + #$BEF2, // $BEF2 + #$BEF3, // $BEF3 + #$BEF4, // $BEF4 + #$BEF5, // $BEF5 + #$BEF6, // $BEF6 + #$BEF7, // $BEF7 + #$BEF8, // $BEF8 + #$BEF9, // $BEF9 + #$BEFA, // $BEFA + #$BEFB, // $BEFB + #$BEFC, // $BEFC + #$BEFD, // $BEFD + #$BEFE, // $BEFE + #$BEFF, // $BEFF + #$BF00, // $BF00 + #$BF01, // $BF01 + #$BF02, // $BF02 + #$BF03, // $BF03 + #$BF04, // $BF04 + #$BF05, // $BF05 + #$BF06, // $BF06 + #$BF07, // $BF07 + #$BF08, // $BF08 + #$BF09, // $BF09 + #$BF0A, // $BF0A + #$BF0B, // $BF0B + #$BF0C, // $BF0C + #$BF0D, // $BF0D + #$BF0E, // $BF0E + #$BF0F, // $BF0F + #$BF10, // $BF10 + #$BF11, // $BF11 + #$BF12, // $BF12 + #$BF13, // $BF13 + #$BF14, // $BF14 + #$BF15, // $BF15 + #$BF16, // $BF16 + #$BF17, // $BF17 + #$BF18, // $BF18 + #$BF19, // $BF19 + #$BF1A, // $BF1A + #$BF1B, // $BF1B + #$BF1C, // $BF1C + #$BF1D, // $BF1D + #$BF1E, // $BF1E + #$BF1F, // $BF1F + #$BF20, // $BF20 + #$BF21, // $BF21 + #$BF22, // $BF22 + #$BF23, // $BF23 + #$BF24, // $BF24 + #$BF25, // $BF25 + #$BF26, // $BF26 + #$BF27, // $BF27 + #$BF28, // $BF28 + #$BF29, // $BF29 + #$BF2A, // $BF2A + #$BF2B, // $BF2B + #$BF2C, // $BF2C + #$BF2D, // $BF2D + #$BF2E, // $BF2E + #$BF2F, // $BF2F + #$BF30, // $BF30 + #$BF31, // $BF31 + #$BF32, // $BF32 + #$BF33, // $BF33 + #$BF34, // $BF34 + #$BF35, // $BF35 + #$BF36, // $BF36 + #$BF37, // $BF37 + #$BF38, // $BF38 + #$BF39, // $BF39 + #$BF3A, // $BF3A + #$BF3B, // $BF3B + #$BF3C, // $BF3C + #$BF3D, // $BF3D + #$BF3E, // $BF3E + #$BF3F, // $BF3F + #$BF40, // $BF40 + #$BF41, // $BF41 + #$BF42, // $BF42 + #$BF43, // $BF43 + #$BF44, // $BF44 + #$BF45, // $BF45 + #$BF46, // $BF46 + #$BF47, // $BF47 + #$BF48, // $BF48 + #$BF49, // $BF49 + #$BF4A, // $BF4A + #$BF4B, // $BF4B + #$BF4C, // $BF4C + #$BF4D, // $BF4D + #$BF4E, // $BF4E + #$BF4F, // $BF4F + #$BF50, // $BF50 + #$BF51, // $BF51 + #$BF52, // $BF52 + #$BF53, // $BF53 + #$BF54, // $BF54 + #$BF55, // $BF55 + #$BF56, // $BF56 + #$BF57, // $BF57 + #$BF58, // $BF58 + #$BF59, // $BF59 + #$BF5A, // $BF5A + #$BF5B, // $BF5B + #$BF5C, // $BF5C + #$BF5D, // $BF5D + #$BF5E, // $BF5E + #$BF5F, // $BF5F + #$BF60, // $BF60 + #$BF61, // $BF61 + #$BF62, // $BF62 + #$BF63, // $BF63 + #$BF64, // $BF64 + #$BF65, // $BF65 + #$BF66, // $BF66 + #$BF67, // $BF67 + #$BF68, // $BF68 + #$BF69, // $BF69 + #$BF6A, // $BF6A + #$BF6B, // $BF6B + #$BF6C, // $BF6C + #$BF6D, // $BF6D + #$BF6E, // $BF6E + #$BF6F, // $BF6F + #$BF70, // $BF70 + #$BF71, // $BF71 + #$BF72, // $BF72 + #$BF73, // $BF73 + #$BF74, // $BF74 + #$BF75, // $BF75 + #$BF76, // $BF76 + #$BF77, // $BF77 + #$BF78, // $BF78 + #$BF79, // $BF79 + #$BF7A, // $BF7A + #$BF7B, // $BF7B + #$BF7C, // $BF7C + #$BF7D, // $BF7D + #$BF7E, // $BF7E + #$BF7F, // $BF7F + #$BF80, // $BF80 + #$BF81, // $BF81 + #$BF82, // $BF82 + #$BF83, // $BF83 + #$BF84, // $BF84 + #$BF85, // $BF85 + #$BF86, // $BF86 + #$BF87, // $BF87 + #$BF88, // $BF88 + #$BF89, // $BF89 + #$BF8A, // $BF8A + #$BF8B, // $BF8B + #$BF8C, // $BF8C + #$BF8D, // $BF8D + #$BF8E, // $BF8E + #$BF8F, // $BF8F + #$BF90, // $BF90 + #$BF91, // $BF91 + #$BF92, // $BF92 + #$BF93, // $BF93 + #$BF94, // $BF94 + #$BF95, // $BF95 + #$BF96, // $BF96 + #$BF97, // $BF97 + #$BF98, // $BF98 + #$BF99, // $BF99 + #$BF9A, // $BF9A + #$BF9B, // $BF9B + #$BF9C, // $BF9C + #$BF9D, // $BF9D + #$BF9E, // $BF9E + #$BF9F, // $BF9F + #$BFA0, // $BFA0 + #$BFA1, // $BFA1 + #$BFA2, // $BFA2 + #$BFA3, // $BFA3 + #$BFA4, // $BFA4 + #$BFA5, // $BFA5 + #$BFA6, // $BFA6 + #$BFA7, // $BFA7 + #$BFA8, // $BFA8 + #$BFA9, // $BFA9 + #$BFAA, // $BFAA + #$BFAB, // $BFAB + #$BFAC, // $BFAC + #$BFAD, // $BFAD + #$BFAE, // $BFAE + #$BFAF, // $BFAF + #$BFB0, // $BFB0 + #$BFB1, // $BFB1 + #$BFB2, // $BFB2 + #$BFB3, // $BFB3 + #$BFB4, // $BFB4 + #$BFB5, // $BFB5 + #$BFB6, // $BFB6 + #$BFB7, // $BFB7 + #$BFB8, // $BFB8 + #$BFB9, // $BFB9 + #$BFBA, // $BFBA + #$BFBB, // $BFBB + #$BFBC, // $BFBC + #$BFBD, // $BFBD + #$BFBE, // $BFBE + #$BFBF, // $BFBF + #$BFC0, // $BFC0 + #$BFC1, // $BFC1 + #$BFC2, // $BFC2 + #$BFC3, // $BFC3 + #$BFC4, // $BFC4 + #$BFC5, // $BFC5 + #$BFC6, // $BFC6 + #$BFC7, // $BFC7 + #$BFC8, // $BFC8 + #$BFC9, // $BFC9 + #$BFCA, // $BFCA + #$BFCB, // $BFCB + #$BFCC, // $BFCC + #$BFCD, // $BFCD + #$BFCE, // $BFCE + #$BFCF, // $BFCF + #$BFD0, // $BFD0 + #$BFD1, // $BFD1 + #$BFD2, // $BFD2 + #$BFD3, // $BFD3 + #$BFD4, // $BFD4 + #$BFD5, // $BFD5 + #$BFD6, // $BFD6 + #$BFD7, // $BFD7 + #$BFD8, // $BFD8 + #$BFD9, // $BFD9 + #$BFDA, // $BFDA + #$BFDB, // $BFDB + #$BFDC, // $BFDC + #$BFDD, // $BFDD + #$BFDE, // $BFDE + #$BFDF, // $BFDF + #$BFE0, // $BFE0 + #$BFE1, // $BFE1 + #$BFE2, // $BFE2 + #$BFE3, // $BFE3 + #$BFE4, // $BFE4 + #$BFE5, // $BFE5 + #$BFE6, // $BFE6 + #$BFE7, // $BFE7 + #$BFE8, // $BFE8 + #$BFE9, // $BFE9 + #$BFEA, // $BFEA + #$BFEB, // $BFEB + #$BFEC, // $BFEC + #$BFED, // $BFED + #$BFEE, // $BFEE + #$BFEF, // $BFEF + #$BFF0, // $BFF0 + #$BFF1, // $BFF1 + #$BFF2, // $BFF2 + #$BFF3, // $BFF3 + #$BFF4, // $BFF4 + #$BFF5, // $BFF5 + #$BFF6, // $BFF6 + #$BFF7, // $BFF7 + #$BFF8, // $BFF8 + #$BFF9, // $BFF9 + #$BFFA, // $BFFA + #$BFFB, // $BFFB + #$BFFC, // $BFFC + #$BFFD, // $BFFD + #$BFFE, // $BFFE + #$BFFF, // $BFFF + #$C000, // $C000 + #$C001, // $C001 + #$C002, // $C002 + #$C003, // $C003 + #$C004, // $C004 + #$C005, // $C005 + #$C006, // $C006 + #$C007, // $C007 + #$C008, // $C008 + #$C009, // $C009 + #$C00A, // $C00A + #$C00B, // $C00B + #$C00C, // $C00C + #$C00D, // $C00D + #$C00E, // $C00E + #$C00F, // $C00F + #$C010, // $C010 + #$C011, // $C011 + #$C012, // $C012 + #$C013, // $C013 + #$C014, // $C014 + #$C015, // $C015 + #$C016, // $C016 + #$C017, // $C017 + #$C018, // $C018 + #$C019, // $C019 + #$C01A, // $C01A + #$C01B, // $C01B + #$C01C, // $C01C + #$C01D, // $C01D + #$C01E, // $C01E + #$C01F, // $C01F + #$C020, // $C020 + #$C021, // $C021 + #$C022, // $C022 + #$C023, // $C023 + #$C024, // $C024 + #$C025, // $C025 + #$C026, // $C026 + #$C027, // $C027 + #$C028, // $C028 + #$C029, // $C029 + #$C02A, // $C02A + #$C02B, // $C02B + #$C02C, // $C02C + #$C02D, // $C02D + #$C02E, // $C02E + #$C02F, // $C02F + #$C030, // $C030 + #$C031, // $C031 + #$C032, // $C032 + #$C033, // $C033 + #$C034, // $C034 + #$C035, // $C035 + #$C036, // $C036 + #$C037, // $C037 + #$C038, // $C038 + #$C039, // $C039 + #$C03A, // $C03A + #$C03B, // $C03B + #$C03C, // $C03C + #$C03D, // $C03D + #$C03E, // $C03E + #$C03F, // $C03F + #$C040, // $C040 + #$C041, // $C041 + #$C042, // $C042 + #$C043, // $C043 + #$C044, // $C044 + #$C045, // $C045 + #$C046, // $C046 + #$C047, // $C047 + #$C048, // $C048 + #$C049, // $C049 + #$C04A, // $C04A + #$C04B, // $C04B + #$C04C, // $C04C + #$C04D, // $C04D + #$C04E, // $C04E + #$C04F, // $C04F + #$C050, // $C050 + #$C051, // $C051 + #$C052, // $C052 + #$C053, // $C053 + #$C054, // $C054 + #$C055, // $C055 + #$C056, // $C056 + #$C057, // $C057 + #$C058, // $C058 + #$C059, // $C059 + #$C05A, // $C05A + #$C05B, // $C05B + #$C05C, // $C05C + #$C05D, // $C05D + #$C05E, // $C05E + #$C05F, // $C05F + #$C060, // $C060 + #$C061, // $C061 + #$C062, // $C062 + #$C063, // $C063 + #$C064, // $C064 + #$C065, // $C065 + #$C066, // $C066 + #$C067, // $C067 + #$C068, // $C068 + #$C069, // $C069 + #$C06A, // $C06A + #$C06B, // $C06B + #$C06C, // $C06C + #$C06D, // $C06D + #$C06E, // $C06E + #$C06F, // $C06F + #$C070, // $C070 + #$C071, // $C071 + #$C072, // $C072 + #$C073, // $C073 + #$C074, // $C074 + #$C075, // $C075 + #$C076, // $C076 + #$C077, // $C077 + #$C078, // $C078 + #$C079, // $C079 + #$C07A, // $C07A + #$C07B, // $C07B + #$C07C, // $C07C + #$C07D, // $C07D + #$C07E, // $C07E + #$C07F, // $C07F + #$C080, // $C080 + #$C081, // $C081 + #$C082, // $C082 + #$C083, // $C083 + #$C084, // $C084 + #$C085, // $C085 + #$C086, // $C086 + #$C087, // $C087 + #$C088, // $C088 + #$C089, // $C089 + #$C08A, // $C08A + #$C08B, // $C08B + #$C08C, // $C08C + #$C08D, // $C08D + #$C08E, // $C08E + #$C08F, // $C08F + #$C090, // $C090 + #$C091, // $C091 + #$C092, // $C092 + #$C093, // $C093 + #$C094, // $C094 + #$C095, // $C095 + #$C096, // $C096 + #$C097, // $C097 + #$C098, // $C098 + #$C099, // $C099 + #$C09A, // $C09A + #$C09B, // $C09B + #$C09C, // $C09C + #$C09D, // $C09D + #$C09E, // $C09E + #$C09F, // $C09F + #$C0A0, // $C0A0 + #$C0A1, // $C0A1 + #$C0A2, // $C0A2 + #$C0A3, // $C0A3 + #$C0A4, // $C0A4 + #$C0A5, // $C0A5 + #$C0A6, // $C0A6 + #$C0A7, // $C0A7 + #$C0A8, // $C0A8 + #$C0A9, // $C0A9 + #$C0AA, // $C0AA + #$C0AB, // $C0AB + #$C0AC, // $C0AC + #$C0AD, // $C0AD + #$C0AE, // $C0AE + #$C0AF, // $C0AF + #$C0B0, // $C0B0 + #$C0B1, // $C0B1 + #$C0B2, // $C0B2 + #$C0B3, // $C0B3 + #$C0B4, // $C0B4 + #$C0B5, // $C0B5 + #$C0B6, // $C0B6 + #$C0B7, // $C0B7 + #$C0B8, // $C0B8 + #$C0B9, // $C0B9 + #$C0BA, // $C0BA + #$C0BB, // $C0BB + #$C0BC, // $C0BC + #$C0BD, // $C0BD + #$C0BE, // $C0BE + #$C0BF, // $C0BF + #$C0C0, // $C0C0 + #$C0C1, // $C0C1 + #$C0C2, // $C0C2 + #$C0C3, // $C0C3 + #$C0C4, // $C0C4 + #$C0C5, // $C0C5 + #$C0C6, // $C0C6 + #$C0C7, // $C0C7 + #$C0C8, // $C0C8 + #$C0C9, // $C0C9 + #$C0CA, // $C0CA + #$C0CB, // $C0CB + #$C0CC, // $C0CC + #$C0CD, // $C0CD + #$C0CE, // $C0CE + #$C0CF, // $C0CF + #$C0D0, // $C0D0 + #$C0D1, // $C0D1 + #$C0D2, // $C0D2 + #$C0D3, // $C0D3 + #$C0D4, // $C0D4 + #$C0D5, // $C0D5 + #$C0D6, // $C0D6 + #$C0D7, // $C0D7 + #$C0D8, // $C0D8 + #$C0D9, // $C0D9 + #$C0DA, // $C0DA + #$C0DB, // $C0DB + #$C0DC, // $C0DC + #$C0DD, // $C0DD + #$C0DE, // $C0DE + #$C0DF, // $C0DF + #$C0E0, // $C0E0 + #$C0E1, // $C0E1 + #$C0E2, // $C0E2 + #$C0E3, // $C0E3 + #$C0E4, // $C0E4 + #$C0E5, // $C0E5 + #$C0E6, // $C0E6 + #$C0E7, // $C0E7 + #$C0E8, // $C0E8 + #$C0E9, // $C0E9 + #$C0EA, // $C0EA + #$C0EB, // $C0EB + #$C0EC, // $C0EC + #$C0ED, // $C0ED + #$C0EE, // $C0EE + #$C0EF, // $C0EF + #$C0F0, // $C0F0 + #$C0F1, // $C0F1 + #$C0F2, // $C0F2 + #$C0F3, // $C0F3 + #$C0F4, // $C0F4 + #$C0F5, // $C0F5 + #$C0F6, // $C0F6 + #$C0F7, // $C0F7 + #$C0F8, // $C0F8 + #$C0F9, // $C0F9 + #$C0FA, // $C0FA + #$C0FB, // $C0FB + #$C0FC, // $C0FC + #$C0FD, // $C0FD + #$C0FE, // $C0FE + #$C0FF, // $C0FF + #$C100, // $C100 + #$C101, // $C101 + #$C102, // $C102 + #$C103, // $C103 + #$C104, // $C104 + #$C105, // $C105 + #$C106, // $C106 + #$C107, // $C107 + #$C108, // $C108 + #$C109, // $C109 + #$C10A, // $C10A + #$C10B, // $C10B + #$C10C, // $C10C + #$C10D, // $C10D + #$C10E, // $C10E + #$C10F, // $C10F + #$C110, // $C110 + #$C111, // $C111 + #$C112, // $C112 + #$C113, // $C113 + #$C114, // $C114 + #$C115, // $C115 + #$C116, // $C116 + #$C117, // $C117 + #$C118, // $C118 + #$C119, // $C119 + #$C11A, // $C11A + #$C11B, // $C11B + #$C11C, // $C11C + #$C11D, // $C11D + #$C11E, // $C11E + #$C11F, // $C11F + #$C120, // $C120 + #$C121, // $C121 + #$C122, // $C122 + #$C123, // $C123 + #$C124, // $C124 + #$C125, // $C125 + #$C126, // $C126 + #$C127, // $C127 + #$C128, // $C128 + #$C129, // $C129 + #$C12A, // $C12A + #$C12B, // $C12B + #$C12C, // $C12C + #$C12D, // $C12D + #$C12E, // $C12E + #$C12F, // $C12F + #$C130, // $C130 + #$C131, // $C131 + #$C132, // $C132 + #$C133, // $C133 + #$C134, // $C134 + #$C135, // $C135 + #$C136, // $C136 + #$C137, // $C137 + #$C138, // $C138 + #$C139, // $C139 + #$C13A, // $C13A + #$C13B, // $C13B + #$C13C, // $C13C + #$C13D, // $C13D + #$C13E, // $C13E + #$C13F, // $C13F + #$C140, // $C140 + #$C141, // $C141 + #$C142, // $C142 + #$C143, // $C143 + #$C144, // $C144 + #$C145, // $C145 + #$C146, // $C146 + #$C147, // $C147 + #$C148, // $C148 + #$C149, // $C149 + #$C14A, // $C14A + #$C14B, // $C14B + #$C14C, // $C14C + #$C14D, // $C14D + #$C14E, // $C14E + #$C14F, // $C14F + #$C150, // $C150 + #$C151, // $C151 + #$C152, // $C152 + #$C153, // $C153 + #$C154, // $C154 + #$C155, // $C155 + #$C156, // $C156 + #$C157, // $C157 + #$C158, // $C158 + #$C159, // $C159 + #$C15A, // $C15A + #$C15B, // $C15B + #$C15C, // $C15C + #$C15D, // $C15D + #$C15E, // $C15E + #$C15F, // $C15F + #$C160, // $C160 + #$C161, // $C161 + #$C162, // $C162 + #$C163, // $C163 + #$C164, // $C164 + #$C165, // $C165 + #$C166, // $C166 + #$C167, // $C167 + #$C168, // $C168 + #$C169, // $C169 + #$C16A, // $C16A + #$C16B, // $C16B + #$C16C, // $C16C + #$C16D, // $C16D + #$C16E, // $C16E + #$C16F, // $C16F + #$C170, // $C170 + #$C171, // $C171 + #$C172, // $C172 + #$C173, // $C173 + #$C174, // $C174 + #$C175, // $C175 + #$C176, // $C176 + #$C177, // $C177 + #$C178, // $C178 + #$C179, // $C179 + #$C17A, // $C17A + #$C17B, // $C17B + #$C17C, // $C17C + #$C17D, // $C17D + #$C17E, // $C17E + #$C17F, // $C17F + #$C180, // $C180 + #$C181, // $C181 + #$C182, // $C182 + #$C183, // $C183 + #$C184, // $C184 + #$C185, // $C185 + #$C186, // $C186 + #$C187, // $C187 + #$C188, // $C188 + #$C189, // $C189 + #$C18A, // $C18A + #$C18B, // $C18B + #$C18C, // $C18C + #$C18D, // $C18D + #$C18E, // $C18E + #$C18F, // $C18F + #$C190, // $C190 + #$C191, // $C191 + #$C192, // $C192 + #$C193, // $C193 + #$C194, // $C194 + #$C195, // $C195 + #$C196, // $C196 + #$C197, // $C197 + #$C198, // $C198 + #$C199, // $C199 + #$C19A, // $C19A + #$C19B, // $C19B + #$C19C, // $C19C + #$C19D, // $C19D + #$C19E, // $C19E + #$C19F, // $C19F + #$C1A0, // $C1A0 + #$C1A1, // $C1A1 + #$C1A2, // $C1A2 + #$C1A3, // $C1A3 + #$C1A4, // $C1A4 + #$C1A5, // $C1A5 + #$C1A6, // $C1A6 + #$C1A7, // $C1A7 + #$C1A8, // $C1A8 + #$C1A9, // $C1A9 + #$C1AA, // $C1AA + #$C1AB, // $C1AB + #$C1AC, // $C1AC + #$C1AD, // $C1AD + #$C1AE, // $C1AE + #$C1AF, // $C1AF + #$C1B0, // $C1B0 + #$C1B1, // $C1B1 + #$C1B2, // $C1B2 + #$C1B3, // $C1B3 + #$C1B4, // $C1B4 + #$C1B5, // $C1B5 + #$C1B6, // $C1B6 + #$C1B7, // $C1B7 + #$C1B8, // $C1B8 + #$C1B9, // $C1B9 + #$C1BA, // $C1BA + #$C1BB, // $C1BB + #$C1BC, // $C1BC + #$C1BD, // $C1BD + #$C1BE, // $C1BE + #$C1BF, // $C1BF + #$C1C0, // $C1C0 + #$C1C1, // $C1C1 + #$C1C2, // $C1C2 + #$C1C3, // $C1C3 + #$C1C4, // $C1C4 + #$C1C5, // $C1C5 + #$C1C6, // $C1C6 + #$C1C7, // $C1C7 + #$C1C8, // $C1C8 + #$C1C9, // $C1C9 + #$C1CA, // $C1CA + #$C1CB, // $C1CB + #$C1CC, // $C1CC + #$C1CD, // $C1CD + #$C1CE, // $C1CE + #$C1CF, // $C1CF + #$C1D0, // $C1D0 + #$C1D1, // $C1D1 + #$C1D2, // $C1D2 + #$C1D3, // $C1D3 + #$C1D4, // $C1D4 + #$C1D5, // $C1D5 + #$C1D6, // $C1D6 + #$C1D7, // $C1D7 + #$C1D8, // $C1D8 + #$C1D9, // $C1D9 + #$C1DA, // $C1DA + #$C1DB, // $C1DB + #$C1DC, // $C1DC + #$C1DD, // $C1DD + #$C1DE, // $C1DE + #$C1DF, // $C1DF + #$C1E0, // $C1E0 + #$C1E1, // $C1E1 + #$C1E2, // $C1E2 + #$C1E3, // $C1E3 + #$C1E4, // $C1E4 + #$C1E5, // $C1E5 + #$C1E6, // $C1E6 + #$C1E7, // $C1E7 + #$C1E8, // $C1E8 + #$C1E9, // $C1E9 + #$C1EA, // $C1EA + #$C1EB, // $C1EB + #$C1EC, // $C1EC + #$C1ED, // $C1ED + #$C1EE, // $C1EE + #$C1EF, // $C1EF + #$C1F0, // $C1F0 + #$C1F1, // $C1F1 + #$C1F2, // $C1F2 + #$C1F3, // $C1F3 + #$C1F4, // $C1F4 + #$C1F5, // $C1F5 + #$C1F6, // $C1F6 + #$C1F7, // $C1F7 + #$C1F8, // $C1F8 + #$C1F9, // $C1F9 + #$C1FA, // $C1FA + #$C1FB, // $C1FB + #$C1FC, // $C1FC + #$C1FD, // $C1FD + #$C1FE, // $C1FE + #$C1FF, // $C1FF + #$C200, // $C200 + #$C201, // $C201 + #$C202, // $C202 + #$C203, // $C203 + #$C204, // $C204 + #$C205, // $C205 + #$C206, // $C206 + #$C207, // $C207 + #$C208, // $C208 + #$C209, // $C209 + #$C20A, // $C20A + #$C20B, // $C20B + #$C20C, // $C20C + #$C20D, // $C20D + #$C20E, // $C20E + #$C20F, // $C20F + #$C210, // $C210 + #$C211, // $C211 + #$C212, // $C212 + #$C213, // $C213 + #$C214, // $C214 + #$C215, // $C215 + #$C216, // $C216 + #$C217, // $C217 + #$C218, // $C218 + #$C219, // $C219 + #$C21A, // $C21A + #$C21B, // $C21B + #$C21C, // $C21C + #$C21D, // $C21D + #$C21E, // $C21E + #$C21F, // $C21F + #$C220, // $C220 + #$C221, // $C221 + #$C222, // $C222 + #$C223, // $C223 + #$C224, // $C224 + #$C225, // $C225 + #$C226, // $C226 + #$C227, // $C227 + #$C228, // $C228 + #$C229, // $C229 + #$C22A, // $C22A + #$C22B, // $C22B + #$C22C, // $C22C + #$C22D, // $C22D + #$C22E, // $C22E + #$C22F, // $C22F + #$C230, // $C230 + #$C231, // $C231 + #$C232, // $C232 + #$C233, // $C233 + #$C234, // $C234 + #$C235, // $C235 + #$C236, // $C236 + #$C237, // $C237 + #$C238, // $C238 + #$C239, // $C239 + #$C23A, // $C23A + #$C23B, // $C23B + #$C23C, // $C23C + #$C23D, // $C23D + #$C23E, // $C23E + #$C23F, // $C23F + #$C240, // $C240 + #$C241, // $C241 + #$C242, // $C242 + #$C243, // $C243 + #$C244, // $C244 + #$C245, // $C245 + #$C246, // $C246 + #$C247, // $C247 + #$C248, // $C248 + #$C249, // $C249 + #$C24A, // $C24A + #$C24B, // $C24B + #$C24C, // $C24C + #$C24D, // $C24D + #$C24E, // $C24E + #$C24F, // $C24F + #$C250, // $C250 + #$C251, // $C251 + #$C252, // $C252 + #$C253, // $C253 + #$C254, // $C254 + #$C255, // $C255 + #$C256, // $C256 + #$C257, // $C257 + #$C258, // $C258 + #$C259, // $C259 + #$C25A, // $C25A + #$C25B, // $C25B + #$C25C, // $C25C + #$C25D, // $C25D + #$C25E, // $C25E + #$C25F, // $C25F + #$C260, // $C260 + #$C261, // $C261 + #$C262, // $C262 + #$C263, // $C263 + #$C264, // $C264 + #$C265, // $C265 + #$C266, // $C266 + #$C267, // $C267 + #$C268, // $C268 + #$C269, // $C269 + #$C26A, // $C26A + #$C26B, // $C26B + #$C26C, // $C26C + #$C26D, // $C26D + #$C26E, // $C26E + #$C26F, // $C26F + #$C270, // $C270 + #$C271, // $C271 + #$C272, // $C272 + #$C273, // $C273 + #$C274, // $C274 + #$C275, // $C275 + #$C276, // $C276 + #$C277, // $C277 + #$C278, // $C278 + #$C279, // $C279 + #$C27A, // $C27A + #$C27B, // $C27B + #$C27C, // $C27C + #$C27D, // $C27D + #$C27E, // $C27E + #$C27F, // $C27F + #$C280, // $C280 + #$C281, // $C281 + #$C282, // $C282 + #$C283, // $C283 + #$C284, // $C284 + #$C285, // $C285 + #$C286, // $C286 + #$C287, // $C287 + #$C288, // $C288 + #$C289, // $C289 + #$C28A, // $C28A + #$C28B, // $C28B + #$C28C, // $C28C + #$C28D, // $C28D + #$C28E, // $C28E + #$C28F, // $C28F + #$C290, // $C290 + #$C291, // $C291 + #$C292, // $C292 + #$C293, // $C293 + #$C294, // $C294 + #$C295, // $C295 + #$C296, // $C296 + #$C297, // $C297 + #$C298, // $C298 + #$C299, // $C299 + #$C29A, // $C29A + #$C29B, // $C29B + #$C29C, // $C29C + #$C29D, // $C29D + #$C29E, // $C29E + #$C29F, // $C29F + #$C2A0, // $C2A0 + #$C2A1, // $C2A1 + #$C2A2, // $C2A2 + #$C2A3, // $C2A3 + #$C2A4, // $C2A4 + #$C2A5, // $C2A5 + #$C2A6, // $C2A6 + #$C2A7, // $C2A7 + #$C2A8, // $C2A8 + #$C2A9, // $C2A9 + #$C2AA, // $C2AA + #$C2AB, // $C2AB + #$C2AC, // $C2AC + #$C2AD, // $C2AD + #$C2AE, // $C2AE + #$C2AF, // $C2AF + #$C2B0, // $C2B0 + #$C2B1, // $C2B1 + #$C2B2, // $C2B2 + #$C2B3, // $C2B3 + #$C2B4, // $C2B4 + #$C2B5, // $C2B5 + #$C2B6, // $C2B6 + #$C2B7, // $C2B7 + #$C2B8, // $C2B8 + #$C2B9, // $C2B9 + #$C2BA, // $C2BA + #$C2BB, // $C2BB + #$C2BC, // $C2BC + #$C2BD, // $C2BD + #$C2BE, // $C2BE + #$C2BF, // $C2BF + #$C2C0, // $C2C0 + #$C2C1, // $C2C1 + #$C2C2, // $C2C2 + #$C2C3, // $C2C3 + #$C2C4, // $C2C4 + #$C2C5, // $C2C5 + #$C2C6, // $C2C6 + #$C2C7, // $C2C7 + #$C2C8, // $C2C8 + #$C2C9, // $C2C9 + #$C2CA, // $C2CA + #$C2CB, // $C2CB + #$C2CC, // $C2CC + #$C2CD, // $C2CD + #$C2CE, // $C2CE + #$C2CF, // $C2CF + #$C2D0, // $C2D0 + #$C2D1, // $C2D1 + #$C2D2, // $C2D2 + #$C2D3, // $C2D3 + #$C2D4, // $C2D4 + #$C2D5, // $C2D5 + #$C2D6, // $C2D6 + #$C2D7, // $C2D7 + #$C2D8, // $C2D8 + #$C2D9, // $C2D9 + #$C2DA, // $C2DA + #$C2DB, // $C2DB + #$C2DC, // $C2DC + #$C2DD, // $C2DD + #$C2DE, // $C2DE + #$C2DF, // $C2DF + #$C2E0, // $C2E0 + #$C2E1, // $C2E1 + #$C2E2, // $C2E2 + #$C2E3, // $C2E3 + #$C2E4, // $C2E4 + #$C2E5, // $C2E5 + #$C2E6, // $C2E6 + #$C2E7, // $C2E7 + #$C2E8, // $C2E8 + #$C2E9, // $C2E9 + #$C2EA, // $C2EA + #$C2EB, // $C2EB + #$C2EC, // $C2EC + #$C2ED, // $C2ED + #$C2EE, // $C2EE + #$C2EF, // $C2EF + #$C2F0, // $C2F0 + #$C2F1, // $C2F1 + #$C2F2, // $C2F2 + #$C2F3, // $C2F3 + #$C2F4, // $C2F4 + #$C2F5, // $C2F5 + #$C2F6, // $C2F6 + #$C2F7, // $C2F7 + #$C2F8, // $C2F8 + #$C2F9, // $C2F9 + #$C2FA, // $C2FA + #$C2FB, // $C2FB + #$C2FC, // $C2FC + #$C2FD, // $C2FD + #$C2FE, // $C2FE + #$C2FF, // $C2FF + #$C300, // $C300 + #$C301, // $C301 + #$C302, // $C302 + #$C303, // $C303 + #$C304, // $C304 + #$C305, // $C305 + #$C306, // $C306 + #$C307, // $C307 + #$C308, // $C308 + #$C309, // $C309 + #$C30A, // $C30A + #$C30B, // $C30B + #$C30C, // $C30C + #$C30D, // $C30D + #$C30E, // $C30E + #$C30F, // $C30F + #$C310, // $C310 + #$C311, // $C311 + #$C312, // $C312 + #$C313, // $C313 + #$C314, // $C314 + #$C315, // $C315 + #$C316, // $C316 + #$C317, // $C317 + #$C318, // $C318 + #$C319, // $C319 + #$C31A, // $C31A + #$C31B, // $C31B + #$C31C, // $C31C + #$C31D, // $C31D + #$C31E, // $C31E + #$C31F, // $C31F + #$C320, // $C320 + #$C321, // $C321 + #$C322, // $C322 + #$C323, // $C323 + #$C324, // $C324 + #$C325, // $C325 + #$C326, // $C326 + #$C327, // $C327 + #$C328, // $C328 + #$C329, // $C329 + #$C32A, // $C32A + #$C32B, // $C32B + #$C32C, // $C32C + #$C32D, // $C32D + #$C32E, // $C32E + #$C32F, // $C32F + #$C330, // $C330 + #$C331, // $C331 + #$C332, // $C332 + #$C333, // $C333 + #$C334, // $C334 + #$C335, // $C335 + #$C336, // $C336 + #$C337, // $C337 + #$C338, // $C338 + #$C339, // $C339 + #$C33A, // $C33A + #$C33B, // $C33B + #$C33C, // $C33C + #$C33D, // $C33D + #$C33E, // $C33E + #$C33F, // $C33F + #$C340, // $C340 + #$C341, // $C341 + #$C342, // $C342 + #$C343, // $C343 + #$C344, // $C344 + #$C345, // $C345 + #$C346, // $C346 + #$C347, // $C347 + #$C348, // $C348 + #$C349, // $C349 + #$C34A, // $C34A + #$C34B, // $C34B + #$C34C, // $C34C + #$C34D, // $C34D + #$C34E, // $C34E + #$C34F, // $C34F + #$C350, // $C350 + #$C351, // $C351 + #$C352, // $C352 + #$C353, // $C353 + #$C354, // $C354 + #$C355, // $C355 + #$C356, // $C356 + #$C357, // $C357 + #$C358, // $C358 + #$C359, // $C359 + #$C35A, // $C35A + #$C35B, // $C35B + #$C35C, // $C35C + #$C35D, // $C35D + #$C35E, // $C35E + #$C35F, // $C35F + #$C360, // $C360 + #$C361, // $C361 + #$C362, // $C362 + #$C363, // $C363 + #$C364, // $C364 + #$C365, // $C365 + #$C366, // $C366 + #$C367, // $C367 + #$C368, // $C368 + #$C369, // $C369 + #$C36A, // $C36A + #$C36B, // $C36B + #$C36C, // $C36C + #$C36D, // $C36D + #$C36E, // $C36E + #$C36F, // $C36F + #$C370, // $C370 + #$C371, // $C371 + #$C372, // $C372 + #$C373, // $C373 + #$C374, // $C374 + #$C375, // $C375 + #$C376, // $C376 + #$C377, // $C377 + #$C378, // $C378 + #$C379, // $C379 + #$C37A, // $C37A + #$C37B, // $C37B + #$C37C, // $C37C + #$C37D, // $C37D + #$C37E, // $C37E + #$C37F, // $C37F + #$C380, // $C380 + #$C381, // $C381 + #$C382, // $C382 + #$C383, // $C383 + #$C384, // $C384 + #$C385, // $C385 + #$C386, // $C386 + #$C387, // $C387 + #$C388, // $C388 + #$C389, // $C389 + #$C38A, // $C38A + #$C38B, // $C38B + #$C38C, // $C38C + #$C38D, // $C38D + #$C38E, // $C38E + #$C38F, // $C38F + #$C390, // $C390 + #$C391, // $C391 + #$C392, // $C392 + #$C393, // $C393 + #$C394, // $C394 + #$C395, // $C395 + #$C396, // $C396 + #$C397, // $C397 + #$C398, // $C398 + #$C399, // $C399 + #$C39A, // $C39A + #$C39B, // $C39B + #$C39C, // $C39C + #$C39D, // $C39D + #$C39E, // $C39E + #$C39F, // $C39F + #$C3A0, // $C3A0 + #$C3A1, // $C3A1 + #$C3A2, // $C3A2 + #$C3A3, // $C3A3 + #$C3A4, // $C3A4 + #$C3A5, // $C3A5 + #$C3A6, // $C3A6 + #$C3A7, // $C3A7 + #$C3A8, // $C3A8 + #$C3A9, // $C3A9 + #$C3AA, // $C3AA + #$C3AB, // $C3AB + #$C3AC, // $C3AC + #$C3AD, // $C3AD + #$C3AE, // $C3AE + #$C3AF, // $C3AF + #$C3B0, // $C3B0 + #$C3B1, // $C3B1 + #$C3B2, // $C3B2 + #$C3B3, // $C3B3 + #$C3B4, // $C3B4 + #$C3B5, // $C3B5 + #$C3B6, // $C3B6 + #$C3B7, // $C3B7 + #$C3B8, // $C3B8 + #$C3B9, // $C3B9 + #$C3BA, // $C3BA + #$C3BB, // $C3BB + #$C3BC, // $C3BC + #$C3BD, // $C3BD + #$C3BE, // $C3BE + #$C3BF, // $C3BF + #$C3C0, // $C3C0 + #$C3C1, // $C3C1 + #$C3C2, // $C3C2 + #$C3C3, // $C3C3 + #$C3C4, // $C3C4 + #$C3C5, // $C3C5 + #$C3C6, // $C3C6 + #$C3C7, // $C3C7 + #$C3C8, // $C3C8 + #$C3C9, // $C3C9 + #$C3CA, // $C3CA + #$C3CB, // $C3CB + #$C3CC, // $C3CC + #$C3CD, // $C3CD + #$C3CE, // $C3CE + #$C3CF, // $C3CF + #$C3D0, // $C3D0 + #$C3D1, // $C3D1 + #$C3D2, // $C3D2 + #$C3D3, // $C3D3 + #$C3D4, // $C3D4 + #$C3D5, // $C3D5 + #$C3D6, // $C3D6 + #$C3D7, // $C3D7 + #$C3D8, // $C3D8 + #$C3D9, // $C3D9 + #$C3DA, // $C3DA + #$C3DB, // $C3DB + #$C3DC, // $C3DC + #$C3DD, // $C3DD + #$C3DE, // $C3DE + #$C3DF, // $C3DF + #$C3E0, // $C3E0 + #$C3E1, // $C3E1 + #$C3E2, // $C3E2 + #$C3E3, // $C3E3 + #$C3E4, // $C3E4 + #$C3E5, // $C3E5 + #$C3E6, // $C3E6 + #$C3E7, // $C3E7 + #$C3E8, // $C3E8 + #$C3E9, // $C3E9 + #$C3EA, // $C3EA + #$C3EB, // $C3EB + #$C3EC, // $C3EC + #$C3ED, // $C3ED + #$C3EE, // $C3EE + #$C3EF, // $C3EF + #$C3F0, // $C3F0 + #$C3F1, // $C3F1 + #$C3F2, // $C3F2 + #$C3F3, // $C3F3 + #$C3F4, // $C3F4 + #$C3F5, // $C3F5 + #$C3F6, // $C3F6 + #$C3F7, // $C3F7 + #$C3F8, // $C3F8 + #$C3F9, // $C3F9 + #$C3FA, // $C3FA + #$C3FB, // $C3FB + #$C3FC, // $C3FC + #$C3FD, // $C3FD + #$C3FE, // $C3FE + #$C3FF, // $C3FF + #$C400, // $C400 + #$C401, // $C401 + #$C402, // $C402 + #$C403, // $C403 + #$C404, // $C404 + #$C405, // $C405 + #$C406, // $C406 + #$C407, // $C407 + #$C408, // $C408 + #$C409, // $C409 + #$C40A, // $C40A + #$C40B, // $C40B + #$C40C, // $C40C + #$C40D, // $C40D + #$C40E, // $C40E + #$C40F, // $C40F + #$C410, // $C410 + #$C411, // $C411 + #$C412, // $C412 + #$C413, // $C413 + #$C414, // $C414 + #$C415, // $C415 + #$C416, // $C416 + #$C417, // $C417 + #$C418, // $C418 + #$C419, // $C419 + #$C41A, // $C41A + #$C41B, // $C41B + #$C41C, // $C41C + #$C41D, // $C41D + #$C41E, // $C41E + #$C41F, // $C41F + #$C420, // $C420 + #$C421, // $C421 + #$C422, // $C422 + #$C423, // $C423 + #$C424, // $C424 + #$C425, // $C425 + #$C426, // $C426 + #$C427, // $C427 + #$C428, // $C428 + #$C429, // $C429 + #$C42A, // $C42A + #$C42B, // $C42B + #$C42C, // $C42C + #$C42D, // $C42D + #$C42E, // $C42E + #$C42F, // $C42F + #$C430, // $C430 + #$C431, // $C431 + #$C432, // $C432 + #$C433, // $C433 + #$C434, // $C434 + #$C435, // $C435 + #$C436, // $C436 + #$C437, // $C437 + #$C438, // $C438 + #$C439, // $C439 + #$C43A, // $C43A + #$C43B, // $C43B + #$C43C, // $C43C + #$C43D, // $C43D + #$C43E, // $C43E + #$C43F, // $C43F + #$C440, // $C440 + #$C441, // $C441 + #$C442, // $C442 + #$C443, // $C443 + #$C444, // $C444 + #$C445, // $C445 + #$C446, // $C446 + #$C447, // $C447 + #$C448, // $C448 + #$C449, // $C449 + #$C44A, // $C44A + #$C44B, // $C44B + #$C44C, // $C44C + #$C44D, // $C44D + #$C44E, // $C44E + #$C44F, // $C44F + #$C450, // $C450 + #$C451, // $C451 + #$C452, // $C452 + #$C453, // $C453 + #$C454, // $C454 + #$C455, // $C455 + #$C456, // $C456 + #$C457, // $C457 + #$C458, // $C458 + #$C459, // $C459 + #$C45A, // $C45A + #$C45B, // $C45B + #$C45C, // $C45C + #$C45D, // $C45D + #$C45E, // $C45E + #$C45F, // $C45F + #$C460, // $C460 + #$C461, // $C461 + #$C462, // $C462 + #$C463, // $C463 + #$C464, // $C464 + #$C465, // $C465 + #$C466, // $C466 + #$C467, // $C467 + #$C468, // $C468 + #$C469, // $C469 + #$C46A, // $C46A + #$C46B, // $C46B + #$C46C, // $C46C + #$C46D, // $C46D + #$C46E, // $C46E + #$C46F, // $C46F + #$C470, // $C470 + #$C471, // $C471 + #$C472, // $C472 + #$C473, // $C473 + #$C474, // $C474 + #$C475, // $C475 + #$C476, // $C476 + #$C477, // $C477 + #$C478, // $C478 + #$C479, // $C479 + #$C47A, // $C47A + #$C47B, // $C47B + #$C47C, // $C47C + #$C47D, // $C47D + #$C47E, // $C47E + #$C47F, // $C47F + #$C480, // $C480 + #$C481, // $C481 + #$C482, // $C482 + #$C483, // $C483 + #$C484, // $C484 + #$C485, // $C485 + #$C486, // $C486 + #$C487, // $C487 + #$C488, // $C488 + #$C489, // $C489 + #$C48A, // $C48A + #$C48B, // $C48B + #$C48C, // $C48C + #$C48D, // $C48D + #$C48E, // $C48E + #$C48F, // $C48F + #$C490, // $C490 + #$C491, // $C491 + #$C492, // $C492 + #$C493, // $C493 + #$C494, // $C494 + #$C495, // $C495 + #$C496, // $C496 + #$C497, // $C497 + #$C498, // $C498 + #$C499, // $C499 + #$C49A, // $C49A + #$C49B, // $C49B + #$C49C, // $C49C + #$C49D, // $C49D + #$C49E, // $C49E + #$C49F, // $C49F + #$C4A0, // $C4A0 + #$C4A1, // $C4A1 + #$C4A2, // $C4A2 + #$C4A3, // $C4A3 + #$C4A4, // $C4A4 + #$C4A5, // $C4A5 + #$C4A6, // $C4A6 + #$C4A7, // $C4A7 + #$C4A8, // $C4A8 + #$C4A9, // $C4A9 + #$C4AA, // $C4AA + #$C4AB, // $C4AB + #$C4AC, // $C4AC + #$C4AD, // $C4AD + #$C4AE, // $C4AE + #$C4AF, // $C4AF + #$C4B0, // $C4B0 + #$C4B1, // $C4B1 + #$C4B2, // $C4B2 + #$C4B3, // $C4B3 + #$C4B4, // $C4B4 + #$C4B5, // $C4B5 + #$C4B6, // $C4B6 + #$C4B7, // $C4B7 + #$C4B8, // $C4B8 + #$C4B9, // $C4B9 + #$C4BA, // $C4BA + #$C4BB, // $C4BB + #$C4BC, // $C4BC + #$C4BD, // $C4BD + #$C4BE, // $C4BE + #$C4BF, // $C4BF + #$C4C0, // $C4C0 + #$C4C1, // $C4C1 + #$C4C2, // $C4C2 + #$C4C3, // $C4C3 + #$C4C4, // $C4C4 + #$C4C5, // $C4C5 + #$C4C6, // $C4C6 + #$C4C7, // $C4C7 + #$C4C8, // $C4C8 + #$C4C9, // $C4C9 + #$C4CA, // $C4CA + #$C4CB, // $C4CB + #$C4CC, // $C4CC + #$C4CD, // $C4CD + #$C4CE, // $C4CE + #$C4CF, // $C4CF + #$C4D0, // $C4D0 + #$C4D1, // $C4D1 + #$C4D2, // $C4D2 + #$C4D3, // $C4D3 + #$C4D4, // $C4D4 + #$C4D5, // $C4D5 + #$C4D6, // $C4D6 + #$C4D7, // $C4D7 + #$C4D8, // $C4D8 + #$C4D9, // $C4D9 + #$C4DA, // $C4DA + #$C4DB, // $C4DB + #$C4DC, // $C4DC + #$C4DD, // $C4DD + #$C4DE, // $C4DE + #$C4DF, // $C4DF + #$C4E0, // $C4E0 + #$C4E1, // $C4E1 + #$C4E2, // $C4E2 + #$C4E3, // $C4E3 + #$C4E4, // $C4E4 + #$C4E5, // $C4E5 + #$C4E6, // $C4E6 + #$C4E7, // $C4E7 + #$C4E8, // $C4E8 + #$C4E9, // $C4E9 + #$C4EA, // $C4EA + #$C4EB, // $C4EB + #$C4EC, // $C4EC + #$C4ED, // $C4ED + #$C4EE, // $C4EE + #$C4EF, // $C4EF + #$C4F0, // $C4F0 + #$C4F1, // $C4F1 + #$C4F2, // $C4F2 + #$C4F3, // $C4F3 + #$C4F4, // $C4F4 + #$C4F5, // $C4F5 + #$C4F6, // $C4F6 + #$C4F7, // $C4F7 + #$C4F8, // $C4F8 + #$C4F9, // $C4F9 + #$C4FA, // $C4FA + #$C4FB, // $C4FB + #$C4FC, // $C4FC + #$C4FD, // $C4FD + #$C4FE, // $C4FE + #$C4FF, // $C4FF + #$C500, // $C500 + #$C501, // $C501 + #$C502, // $C502 + #$C503, // $C503 + #$C504, // $C504 + #$C505, // $C505 + #$C506, // $C506 + #$C507, // $C507 + #$C508, // $C508 + #$C509, // $C509 + #$C50A, // $C50A + #$C50B, // $C50B + #$C50C, // $C50C + #$C50D, // $C50D + #$C50E, // $C50E + #$C50F, // $C50F + #$C510, // $C510 + #$C511, // $C511 + #$C512, // $C512 + #$C513, // $C513 + #$C514, // $C514 + #$C515, // $C515 + #$C516, // $C516 + #$C517, // $C517 + #$C518, // $C518 + #$C519, // $C519 + #$C51A, // $C51A + #$C51B, // $C51B + #$C51C, // $C51C + #$C51D, // $C51D + #$C51E, // $C51E + #$C51F, // $C51F + #$C520, // $C520 + #$C521, // $C521 + #$C522, // $C522 + #$C523, // $C523 + #$C524, // $C524 + #$C525, // $C525 + #$C526, // $C526 + #$C527, // $C527 + #$C528, // $C528 + #$C529, // $C529 + #$C52A, // $C52A + #$C52B, // $C52B + #$C52C, // $C52C + #$C52D, // $C52D + #$C52E, // $C52E + #$C52F, // $C52F + #$C530, // $C530 + #$C531, // $C531 + #$C532, // $C532 + #$C533, // $C533 + #$C534, // $C534 + #$C535, // $C535 + #$C536, // $C536 + #$C537, // $C537 + #$C538, // $C538 + #$C539, // $C539 + #$C53A, // $C53A + #$C53B, // $C53B + #$C53C, // $C53C + #$C53D, // $C53D + #$C53E, // $C53E + #$C53F, // $C53F + #$C540, // $C540 + #$C541, // $C541 + #$C542, // $C542 + #$C543, // $C543 + #$C544, // $C544 + #$C545, // $C545 + #$C546, // $C546 + #$C547, // $C547 + #$C548, // $C548 + #$C549, // $C549 + #$C54A, // $C54A + #$C54B, // $C54B + #$C54C, // $C54C + #$C54D, // $C54D + #$C54E, // $C54E + #$C54F, // $C54F + #$C550, // $C550 + #$C551, // $C551 + #$C552, // $C552 + #$C553, // $C553 + #$C554, // $C554 + #$C555, // $C555 + #$C556, // $C556 + #$C557, // $C557 + #$C558, // $C558 + #$C559, // $C559 + #$C55A, // $C55A + #$C55B, // $C55B + #$C55C, // $C55C + #$C55D, // $C55D + #$C55E, // $C55E + #$C55F, // $C55F + #$C560, // $C560 + #$C561, // $C561 + #$C562, // $C562 + #$C563, // $C563 + #$C564, // $C564 + #$C565, // $C565 + #$C566, // $C566 + #$C567, // $C567 + #$C568, // $C568 + #$C569, // $C569 + #$C56A, // $C56A + #$C56B, // $C56B + #$C56C, // $C56C + #$C56D, // $C56D + #$C56E, // $C56E + #$C56F, // $C56F + #$C570, // $C570 + #$C571, // $C571 + #$C572, // $C572 + #$C573, // $C573 + #$C574, // $C574 + #$C575, // $C575 + #$C576, // $C576 + #$C577, // $C577 + #$C578, // $C578 + #$C579, // $C579 + #$C57A, // $C57A + #$C57B, // $C57B + #$C57C, // $C57C + #$C57D, // $C57D + #$C57E, // $C57E + #$C57F, // $C57F + #$C580, // $C580 + #$C581, // $C581 + #$C582, // $C582 + #$C583, // $C583 + #$C584, // $C584 + #$C585, // $C585 + #$C586, // $C586 + #$C587, // $C587 + #$C588, // $C588 + #$C589, // $C589 + #$C58A, // $C58A + #$C58B, // $C58B + #$C58C, // $C58C + #$C58D, // $C58D + #$C58E, // $C58E + #$C58F, // $C58F + #$C590, // $C590 + #$C591, // $C591 + #$C592, // $C592 + #$C593, // $C593 + #$C594, // $C594 + #$C595, // $C595 + #$C596, // $C596 + #$C597, // $C597 + #$C598, // $C598 + #$C599, // $C599 + #$C59A, // $C59A + #$C59B, // $C59B + #$C59C, // $C59C + #$C59D, // $C59D + #$C59E, // $C59E + #$C59F, // $C59F + #$C5A0, // $C5A0 + #$C5A1, // $C5A1 + #$C5A2, // $C5A2 + #$C5A3, // $C5A3 + #$C5A4, // $C5A4 + #$C5A5, // $C5A5 + #$C5A6, // $C5A6 + #$C5A7, // $C5A7 + #$C5A8, // $C5A8 + #$C5A9, // $C5A9 + #$C5AA, // $C5AA + #$C5AB, // $C5AB + #$C5AC, // $C5AC + #$C5AD, // $C5AD + #$C5AE, // $C5AE + #$C5AF, // $C5AF + #$C5B0, // $C5B0 + #$C5B1, // $C5B1 + #$C5B2, // $C5B2 + #$C5B3, // $C5B3 + #$C5B4, // $C5B4 + #$C5B5, // $C5B5 + #$C5B6, // $C5B6 + #$C5B7, // $C5B7 + #$C5B8, // $C5B8 + #$C5B9, // $C5B9 + #$C5BA, // $C5BA + #$C5BB, // $C5BB + #$C5BC, // $C5BC + #$C5BD, // $C5BD + #$C5BE, // $C5BE + #$C5BF, // $C5BF + #$C5C0, // $C5C0 + #$C5C1, // $C5C1 + #$C5C2, // $C5C2 + #$C5C3, // $C5C3 + #$C5C4, // $C5C4 + #$C5C5, // $C5C5 + #$C5C6, // $C5C6 + #$C5C7, // $C5C7 + #$C5C8, // $C5C8 + #$C5C9, // $C5C9 + #$C5CA, // $C5CA + #$C5CB, // $C5CB + #$C5CC, // $C5CC + #$C5CD, // $C5CD + #$C5CE, // $C5CE + #$C5CF, // $C5CF + #$C5D0, // $C5D0 + #$C5D1, // $C5D1 + #$C5D2, // $C5D2 + #$C5D3, // $C5D3 + #$C5D4, // $C5D4 + #$C5D5, // $C5D5 + #$C5D6, // $C5D6 + #$C5D7, // $C5D7 + #$C5D8, // $C5D8 + #$C5D9, // $C5D9 + #$C5DA, // $C5DA + #$C5DB, // $C5DB + #$C5DC, // $C5DC + #$C5DD, // $C5DD + #$C5DE, // $C5DE + #$C5DF, // $C5DF + #$C5E0, // $C5E0 + #$C5E1, // $C5E1 + #$C5E2, // $C5E2 + #$C5E3, // $C5E3 + #$C5E4, // $C5E4 + #$C5E5, // $C5E5 + #$C5E6, // $C5E6 + #$C5E7, // $C5E7 + #$C5E8, // $C5E8 + #$C5E9, // $C5E9 + #$C5EA, // $C5EA + #$C5EB, // $C5EB + #$C5EC, // $C5EC + #$C5ED, // $C5ED + #$C5EE, // $C5EE + #$C5EF, // $C5EF + #$C5F0, // $C5F0 + #$C5F1, // $C5F1 + #$C5F2, // $C5F2 + #$C5F3, // $C5F3 + #$C5F4, // $C5F4 + #$C5F5, // $C5F5 + #$C5F6, // $C5F6 + #$C5F7, // $C5F7 + #$C5F8, // $C5F8 + #$C5F9, // $C5F9 + #$C5FA, // $C5FA + #$C5FB, // $C5FB + #$C5FC, // $C5FC + #$C5FD, // $C5FD + #$C5FE, // $C5FE + #$C5FF, // $C5FF + #$C600, // $C600 + #$C601, // $C601 + #$C602, // $C602 + #$C603, // $C603 + #$C604, // $C604 + #$C605, // $C605 + #$C606, // $C606 + #$C607, // $C607 + #$C608, // $C608 + #$C609, // $C609 + #$C60A, // $C60A + #$C60B, // $C60B + #$C60C, // $C60C + #$C60D, // $C60D + #$C60E, // $C60E + #$C60F, // $C60F + #$C610, // $C610 + #$C611, // $C611 + #$C612, // $C612 + #$C613, // $C613 + #$C614, // $C614 + #$C615, // $C615 + #$C616, // $C616 + #$C617, // $C617 + #$C618, // $C618 + #$C619, // $C619 + #$C61A, // $C61A + #$C61B, // $C61B + #$C61C, // $C61C + #$C61D, // $C61D + #$C61E, // $C61E + #$C61F, // $C61F + #$C620, // $C620 + #$C621, // $C621 + #$C622, // $C622 + #$C623, // $C623 + #$C624, // $C624 + #$C625, // $C625 + #$C626, // $C626 + #$C627, // $C627 + #$C628, // $C628 + #$C629, // $C629 + #$C62A, // $C62A + #$C62B, // $C62B + #$C62C, // $C62C + #$C62D, // $C62D + #$C62E, // $C62E + #$C62F, // $C62F + #$C630, // $C630 + #$C631, // $C631 + #$C632, // $C632 + #$C633, // $C633 + #$C634, // $C634 + #$C635, // $C635 + #$C636, // $C636 + #$C637, // $C637 + #$C638, // $C638 + #$C639, // $C639 + #$C63A, // $C63A + #$C63B, // $C63B + #$C63C, // $C63C + #$C63D, // $C63D + #$C63E, // $C63E + #$C63F, // $C63F + #$C640, // $C640 + #$C641, // $C641 + #$C642, // $C642 + #$C643, // $C643 + #$C644, // $C644 + #$C645, // $C645 + #$C646, // $C646 + #$C647, // $C647 + #$C648, // $C648 + #$C649, // $C649 + #$C64A, // $C64A + #$C64B, // $C64B + #$C64C, // $C64C + #$C64D, // $C64D + #$C64E, // $C64E + #$C64F, // $C64F + #$C650, // $C650 + #$C651, // $C651 + #$C652, // $C652 + #$C653, // $C653 + #$C654, // $C654 + #$C655, // $C655 + #$C656, // $C656 + #$C657, // $C657 + #$C658, // $C658 + #$C659, // $C659 + #$C65A, // $C65A + #$C65B, // $C65B + #$C65C, // $C65C + #$C65D, // $C65D + #$C65E, // $C65E + #$C65F, // $C65F + #$C660, // $C660 + #$C661, // $C661 + #$C662, // $C662 + #$C663, // $C663 + #$C664, // $C664 + #$C665, // $C665 + #$C666, // $C666 + #$C667, // $C667 + #$C668, // $C668 + #$C669, // $C669 + #$C66A, // $C66A + #$C66B, // $C66B + #$C66C, // $C66C + #$C66D, // $C66D + #$C66E, // $C66E + #$C66F, // $C66F + #$C670, // $C670 + #$C671, // $C671 + #$C672, // $C672 + #$C673, // $C673 + #$C674, // $C674 + #$C675, // $C675 + #$C676, // $C676 + #$C677, // $C677 + #$C678, // $C678 + #$C679, // $C679 + #$C67A, // $C67A + #$C67B, // $C67B + #$C67C, // $C67C + #$C67D, // $C67D + #$C67E, // $C67E + #$C67F, // $C67F + #$C680, // $C680 + #$C681, // $C681 + #$C682, // $C682 + #$C683, // $C683 + #$C684, // $C684 + #$C685, // $C685 + #$C686, // $C686 + #$C687, // $C687 + #$C688, // $C688 + #$C689, // $C689 + #$C68A, // $C68A + #$C68B, // $C68B + #$C68C, // $C68C + #$C68D, // $C68D + #$C68E, // $C68E + #$C68F, // $C68F + #$C690, // $C690 + #$C691, // $C691 + #$C692, // $C692 + #$C693, // $C693 + #$C694, // $C694 + #$C695, // $C695 + #$C696, // $C696 + #$C697, // $C697 + #$C698, // $C698 + #$C699, // $C699 + #$C69A, // $C69A + #$C69B, // $C69B + #$C69C, // $C69C + #$C69D, // $C69D + #$C69E, // $C69E + #$C69F, // $C69F + #$C6A0, // $C6A0 + #$C6A1, // $C6A1 + #$C6A2, // $C6A2 + #$C6A3, // $C6A3 + #$C6A4, // $C6A4 + #$C6A5, // $C6A5 + #$C6A6, // $C6A6 + #$C6A7, // $C6A7 + #$C6A8, // $C6A8 + #$C6A9, // $C6A9 + #$C6AA, // $C6AA + #$C6AB, // $C6AB + #$C6AC, // $C6AC + #$C6AD, // $C6AD + #$C6AE, // $C6AE + #$C6AF, // $C6AF + #$C6B0, // $C6B0 + #$C6B1, // $C6B1 + #$C6B2, // $C6B2 + #$C6B3, // $C6B3 + #$C6B4, // $C6B4 + #$C6B5, // $C6B5 + #$C6B6, // $C6B6 + #$C6B7, // $C6B7 + #$C6B8, // $C6B8 + #$C6B9, // $C6B9 + #$C6BA, // $C6BA + #$C6BB, // $C6BB + #$C6BC, // $C6BC + #$C6BD, // $C6BD + #$C6BE, // $C6BE + #$C6BF, // $C6BF + #$C6C0, // $C6C0 + #$C6C1, // $C6C1 + #$C6C2, // $C6C2 + #$C6C3, // $C6C3 + #$C6C4, // $C6C4 + #$C6C5, // $C6C5 + #$C6C6, // $C6C6 + #$C6C7, // $C6C7 + #$C6C8, // $C6C8 + #$C6C9, // $C6C9 + #$C6CA, // $C6CA + #$C6CB, // $C6CB + #$C6CC, // $C6CC + #$C6CD, // $C6CD + #$C6CE, // $C6CE + #$C6CF, // $C6CF + #$C6D0, // $C6D0 + #$C6D1, // $C6D1 + #$C6D2, // $C6D2 + #$C6D3, // $C6D3 + #$C6D4, // $C6D4 + #$C6D5, // $C6D5 + #$C6D6, // $C6D6 + #$C6D7, // $C6D7 + #$C6D8, // $C6D8 + #$C6D9, // $C6D9 + #$C6DA, // $C6DA + #$C6DB, // $C6DB + #$C6DC, // $C6DC + #$C6DD, // $C6DD + #$C6DE, // $C6DE + #$C6DF, // $C6DF + #$C6E0, // $C6E0 + #$C6E1, // $C6E1 + #$C6E2, // $C6E2 + #$C6E3, // $C6E3 + #$C6E4, // $C6E4 + #$C6E5, // $C6E5 + #$C6E6, // $C6E6 + #$C6E7, // $C6E7 + #$C6E8, // $C6E8 + #$C6E9, // $C6E9 + #$C6EA, // $C6EA + #$C6EB, // $C6EB + #$C6EC, // $C6EC + #$C6ED, // $C6ED + #$C6EE, // $C6EE + #$C6EF, // $C6EF + #$C6F0, // $C6F0 + #$C6F1, // $C6F1 + #$C6F2, // $C6F2 + #$C6F3, // $C6F3 + #$C6F4, // $C6F4 + #$C6F5, // $C6F5 + #$C6F6, // $C6F6 + #$C6F7, // $C6F7 + #$C6F8, // $C6F8 + #$C6F9, // $C6F9 + #$C6FA, // $C6FA + #$C6FB, // $C6FB + #$C6FC, // $C6FC + #$C6FD, // $C6FD + #$C6FE, // $C6FE + #$C6FF, // $C6FF + #$C700, // $C700 + #$C701, // $C701 + #$C702, // $C702 + #$C703, // $C703 + #$C704, // $C704 + #$C705, // $C705 + #$C706, // $C706 + #$C707, // $C707 + #$C708, // $C708 + #$C709, // $C709 + #$C70A, // $C70A + #$C70B, // $C70B + #$C70C, // $C70C + #$C70D, // $C70D + #$C70E, // $C70E + #$C70F, // $C70F + #$C710, // $C710 + #$C711, // $C711 + #$C712, // $C712 + #$C713, // $C713 + #$C714, // $C714 + #$C715, // $C715 + #$C716, // $C716 + #$C717, // $C717 + #$C718, // $C718 + #$C719, // $C719 + #$C71A, // $C71A + #$C71B, // $C71B + #$C71C, // $C71C + #$C71D, // $C71D + #$C71E, // $C71E + #$C71F, // $C71F + #$C720, // $C720 + #$C721, // $C721 + #$C722, // $C722 + #$C723, // $C723 + #$C724, // $C724 + #$C725, // $C725 + #$C726, // $C726 + #$C727, // $C727 + #$C728, // $C728 + #$C729, // $C729 + #$C72A, // $C72A + #$C72B, // $C72B + #$C72C, // $C72C + #$C72D, // $C72D + #$C72E, // $C72E + #$C72F, // $C72F + #$C730, // $C730 + #$C731, // $C731 + #$C732, // $C732 + #$C733, // $C733 + #$C734, // $C734 + #$C735, // $C735 + #$C736, // $C736 + #$C737, // $C737 + #$C738, // $C738 + #$C739, // $C739 + #$C73A, // $C73A + #$C73B, // $C73B + #$C73C, // $C73C + #$C73D, // $C73D + #$C73E, // $C73E + #$C73F, // $C73F + #$C740, // $C740 + #$C741, // $C741 + #$C742, // $C742 + #$C743, // $C743 + #$C744, // $C744 + #$C745, // $C745 + #$C746, // $C746 + #$C747, // $C747 + #$C748, // $C748 + #$C749, // $C749 + #$C74A, // $C74A + #$C74B, // $C74B + #$C74C, // $C74C + #$C74D, // $C74D + #$C74E, // $C74E + #$C74F, // $C74F + #$C750, // $C750 + #$C751, // $C751 + #$C752, // $C752 + #$C753, // $C753 + #$C754, // $C754 + #$C755, // $C755 + #$C756, // $C756 + #$C757, // $C757 + #$C758, // $C758 + #$C759, // $C759 + #$C75A, // $C75A + #$C75B, // $C75B + #$C75C, // $C75C + #$C75D, // $C75D + #$C75E, // $C75E + #$C75F, // $C75F + #$C760, // $C760 + #$C761, // $C761 + #$C762, // $C762 + #$C763, // $C763 + #$C764, // $C764 + #$C765, // $C765 + #$C766, // $C766 + #$C767, // $C767 + #$C768, // $C768 + #$C769, // $C769 + #$C76A, // $C76A + #$C76B, // $C76B + #$C76C, // $C76C + #$C76D, // $C76D + #$C76E, // $C76E + #$C76F, // $C76F + #$C770, // $C770 + #$C771, // $C771 + #$C772, // $C772 + #$C773, // $C773 + #$C774, // $C774 + #$C775, // $C775 + #$C776, // $C776 + #$C777, // $C777 + #$C778, // $C778 + #$C779, // $C779 + #$C77A, // $C77A + #$C77B, // $C77B + #$C77C, // $C77C + #$C77D, // $C77D + #$C77E, // $C77E + #$C77F, // $C77F + #$C780, // $C780 + #$C781, // $C781 + #$C782, // $C782 + #$C783, // $C783 + #$C784, // $C784 + #$C785, // $C785 + #$C786, // $C786 + #$C787, // $C787 + #$C788, // $C788 + #$C789, // $C789 + #$C78A, // $C78A + #$C78B, // $C78B + #$C78C, // $C78C + #$C78D, // $C78D + #$C78E, // $C78E + #$C78F, // $C78F + #$C790, // $C790 + #$C791, // $C791 + #$C792, // $C792 + #$C793, // $C793 + #$C794, // $C794 + #$C795, // $C795 + #$C796, // $C796 + #$C797, // $C797 + #$C798, // $C798 + #$C799, // $C799 + #$C79A, // $C79A + #$C79B, // $C79B + #$C79C, // $C79C + #$C79D, // $C79D + #$C79E, // $C79E + #$C79F, // $C79F + #$C7A0, // $C7A0 + #$C7A1, // $C7A1 + #$C7A2, // $C7A2 + #$C7A3, // $C7A3 + #$C7A4, // $C7A4 + #$C7A5, // $C7A5 + #$C7A6, // $C7A6 + #$C7A7, // $C7A7 + #$C7A8, // $C7A8 + #$C7A9, // $C7A9 + #$C7AA, // $C7AA + #$C7AB, // $C7AB + #$C7AC, // $C7AC + #$C7AD, // $C7AD + #$C7AE, // $C7AE + #$C7AF, // $C7AF + #$C7B0, // $C7B0 + #$C7B1, // $C7B1 + #$C7B2, // $C7B2 + #$C7B3, // $C7B3 + #$C7B4, // $C7B4 + #$C7B5, // $C7B5 + #$C7B6, // $C7B6 + #$C7B7, // $C7B7 + #$C7B8, // $C7B8 + #$C7B9, // $C7B9 + #$C7BA, // $C7BA + #$C7BB, // $C7BB + #$C7BC, // $C7BC + #$C7BD, // $C7BD + #$C7BE, // $C7BE + #$C7BF, // $C7BF + #$C7C0, // $C7C0 + #$C7C1, // $C7C1 + #$C7C2, // $C7C2 + #$C7C3, // $C7C3 + #$C7C4, // $C7C4 + #$C7C5, // $C7C5 + #$C7C6, // $C7C6 + #$C7C7, // $C7C7 + #$C7C8, // $C7C8 + #$C7C9, // $C7C9 + #$C7CA, // $C7CA + #$C7CB, // $C7CB + #$C7CC, // $C7CC + #$C7CD, // $C7CD + #$C7CE, // $C7CE + #$C7CF, // $C7CF + #$C7D0, // $C7D0 + #$C7D1, // $C7D1 + #$C7D2, // $C7D2 + #$C7D3, // $C7D3 + #$C7D4, // $C7D4 + #$C7D5, // $C7D5 + #$C7D6, // $C7D6 + #$C7D7, // $C7D7 + #$C7D8, // $C7D8 + #$C7D9, // $C7D9 + #$C7DA, // $C7DA + #$C7DB, // $C7DB + #$C7DC, // $C7DC + #$C7DD, // $C7DD + #$C7DE, // $C7DE + #$C7DF, // $C7DF + #$C7E0, // $C7E0 + #$C7E1, // $C7E1 + #$C7E2, // $C7E2 + #$C7E3, // $C7E3 + #$C7E4, // $C7E4 + #$C7E5, // $C7E5 + #$C7E6, // $C7E6 + #$C7E7, // $C7E7 + #$C7E8, // $C7E8 + #$C7E9, // $C7E9 + #$C7EA, // $C7EA + #$C7EB, // $C7EB + #$C7EC, // $C7EC + #$C7ED, // $C7ED + #$C7EE, // $C7EE + #$C7EF, // $C7EF + #$C7F0, // $C7F0 + #$C7F1, // $C7F1 + #$C7F2, // $C7F2 + #$C7F3, // $C7F3 + #$C7F4, // $C7F4 + #$C7F5, // $C7F5 + #$C7F6, // $C7F6 + #$C7F7, // $C7F7 + #$C7F8, // $C7F8 + #$C7F9, // $C7F9 + #$C7FA, // $C7FA + #$C7FB, // $C7FB + #$C7FC, // $C7FC + #$C7FD, // $C7FD + #$C7FE, // $C7FE + #$C7FF, // $C7FF + #$C800, // $C800 + #$C801, // $C801 + #$C802, // $C802 + #$C803, // $C803 + #$C804, // $C804 + #$C805, // $C805 + #$C806, // $C806 + #$C807, // $C807 + #$C808, // $C808 + #$C809, // $C809 + #$C80A, // $C80A + #$C80B, // $C80B + #$C80C, // $C80C + #$C80D, // $C80D + #$C80E, // $C80E + #$C80F, // $C80F + #$C810, // $C810 + #$C811, // $C811 + #$C812, // $C812 + #$C813, // $C813 + #$C814, // $C814 + #$C815, // $C815 + #$C816, // $C816 + #$C817, // $C817 + #$C818, // $C818 + #$C819, // $C819 + #$C81A, // $C81A + #$C81B, // $C81B + #$C81C, // $C81C + #$C81D, // $C81D + #$C81E, // $C81E + #$C81F, // $C81F + #$C820, // $C820 + #$C821, // $C821 + #$C822, // $C822 + #$C823, // $C823 + #$C824, // $C824 + #$C825, // $C825 + #$C826, // $C826 + #$C827, // $C827 + #$C828, // $C828 + #$C829, // $C829 + #$C82A, // $C82A + #$C82B, // $C82B + #$C82C, // $C82C + #$C82D, // $C82D + #$C82E, // $C82E + #$C82F, // $C82F + #$C830, // $C830 + #$C831, // $C831 + #$C832, // $C832 + #$C833, // $C833 + #$C834, // $C834 + #$C835, // $C835 + #$C836, // $C836 + #$C837, // $C837 + #$C838, // $C838 + #$C839, // $C839 + #$C83A, // $C83A + #$C83B, // $C83B + #$C83C, // $C83C + #$C83D, // $C83D + #$C83E, // $C83E + #$C83F, // $C83F + #$C840, // $C840 + #$C841, // $C841 + #$C842, // $C842 + #$C843, // $C843 + #$C844, // $C844 + #$C845, // $C845 + #$C846, // $C846 + #$C847, // $C847 + #$C848, // $C848 + #$C849, // $C849 + #$C84A, // $C84A + #$C84B, // $C84B + #$C84C, // $C84C + #$C84D, // $C84D + #$C84E, // $C84E + #$C84F, // $C84F + #$C850, // $C850 + #$C851, // $C851 + #$C852, // $C852 + #$C853, // $C853 + #$C854, // $C854 + #$C855, // $C855 + #$C856, // $C856 + #$C857, // $C857 + #$C858, // $C858 + #$C859, // $C859 + #$C85A, // $C85A + #$C85B, // $C85B + #$C85C, // $C85C + #$C85D, // $C85D + #$C85E, // $C85E + #$C85F, // $C85F + #$C860, // $C860 + #$C861, // $C861 + #$C862, // $C862 + #$C863, // $C863 + #$C864, // $C864 + #$C865, // $C865 + #$C866, // $C866 + #$C867, // $C867 + #$C868, // $C868 + #$C869, // $C869 + #$C86A, // $C86A + #$C86B, // $C86B + #$C86C, // $C86C + #$C86D, // $C86D + #$C86E, // $C86E + #$C86F, // $C86F + #$C870, // $C870 + #$C871, // $C871 + #$C872, // $C872 + #$C873, // $C873 + #$C874, // $C874 + #$C875, // $C875 + #$C876, // $C876 + #$C877, // $C877 + #$C878, // $C878 + #$C879, // $C879 + #$C87A, // $C87A + #$C87B, // $C87B + #$C87C, // $C87C + #$C87D, // $C87D + #$C87E, // $C87E + #$C87F, // $C87F + #$C880, // $C880 + #$C881, // $C881 + #$C882, // $C882 + #$C883, // $C883 + #$C884, // $C884 + #$C885, // $C885 + #$C886, // $C886 + #$C887, // $C887 + #$C888, // $C888 + #$C889, // $C889 + #$C88A, // $C88A + #$C88B, // $C88B + #$C88C, // $C88C + #$C88D, // $C88D + #$C88E, // $C88E + #$C88F, // $C88F + #$C890, // $C890 + #$C891, // $C891 + #$C892, // $C892 + #$C893, // $C893 + #$C894, // $C894 + #$C895, // $C895 + #$C896, // $C896 + #$C897, // $C897 + #$C898, // $C898 + #$C899, // $C899 + #$C89A, // $C89A + #$C89B, // $C89B + #$C89C, // $C89C + #$C89D, // $C89D + #$C89E, // $C89E + #$C89F, // $C89F + #$C8A0, // $C8A0 + #$C8A1, // $C8A1 + #$C8A2, // $C8A2 + #$C8A3, // $C8A3 + #$C8A4, // $C8A4 + #$C8A5, // $C8A5 + #$C8A6, // $C8A6 + #$C8A7, // $C8A7 + #$C8A8, // $C8A8 + #$C8A9, // $C8A9 + #$C8AA, // $C8AA + #$C8AB, // $C8AB + #$C8AC, // $C8AC + #$C8AD, // $C8AD + #$C8AE, // $C8AE + #$C8AF, // $C8AF + #$C8B0, // $C8B0 + #$C8B1, // $C8B1 + #$C8B2, // $C8B2 + #$C8B3, // $C8B3 + #$C8B4, // $C8B4 + #$C8B5, // $C8B5 + #$C8B6, // $C8B6 + #$C8B7, // $C8B7 + #$C8B8, // $C8B8 + #$C8B9, // $C8B9 + #$C8BA, // $C8BA + #$C8BB, // $C8BB + #$C8BC, // $C8BC + #$C8BD, // $C8BD + #$C8BE, // $C8BE + #$C8BF, // $C8BF + #$C8C0, // $C8C0 + #$C8C1, // $C8C1 + #$C8C2, // $C8C2 + #$C8C3, // $C8C3 + #$C8C4, // $C8C4 + #$C8C5, // $C8C5 + #$C8C6, // $C8C6 + #$C8C7, // $C8C7 + #$C8C8, // $C8C8 + #$C8C9, // $C8C9 + #$C8CA, // $C8CA + #$C8CB, // $C8CB + #$C8CC, // $C8CC + #$C8CD, // $C8CD + #$C8CE, // $C8CE + #$C8CF, // $C8CF + #$C8D0, // $C8D0 + #$C8D1, // $C8D1 + #$C8D2, // $C8D2 + #$C8D3, // $C8D3 + #$C8D4, // $C8D4 + #$C8D5, // $C8D5 + #$C8D6, // $C8D6 + #$C8D7, // $C8D7 + #$C8D8, // $C8D8 + #$C8D9, // $C8D9 + #$C8DA, // $C8DA + #$C8DB, // $C8DB + #$C8DC, // $C8DC + #$C8DD, // $C8DD + #$C8DE, // $C8DE + #$C8DF, // $C8DF + #$C8E0, // $C8E0 + #$C8E1, // $C8E1 + #$C8E2, // $C8E2 + #$C8E3, // $C8E3 + #$C8E4, // $C8E4 + #$C8E5, // $C8E5 + #$C8E6, // $C8E6 + #$C8E7, // $C8E7 + #$C8E8, // $C8E8 + #$C8E9, // $C8E9 + #$C8EA, // $C8EA + #$C8EB, // $C8EB + #$C8EC, // $C8EC + #$C8ED, // $C8ED + #$C8EE, // $C8EE + #$C8EF, // $C8EF + #$C8F0, // $C8F0 + #$C8F1, // $C8F1 + #$C8F2, // $C8F2 + #$C8F3, // $C8F3 + #$C8F4, // $C8F4 + #$C8F5, // $C8F5 + #$C8F6, // $C8F6 + #$C8F7, // $C8F7 + #$C8F8, // $C8F8 + #$C8F9, // $C8F9 + #$C8FA, // $C8FA + #$C8FB, // $C8FB + #$C8FC, // $C8FC + #$C8FD, // $C8FD + #$C8FE, // $C8FE + #$C8FF, // $C8FF + #$C900, // $C900 + #$C901, // $C901 + #$C902, // $C902 + #$C903, // $C903 + #$C904, // $C904 + #$C905, // $C905 + #$C906, // $C906 + #$C907, // $C907 + #$C908, // $C908 + #$C909, // $C909 + #$C90A, // $C90A + #$C90B, // $C90B + #$C90C, // $C90C + #$C90D, // $C90D + #$C90E, // $C90E + #$C90F, // $C90F + #$C910, // $C910 + #$C911, // $C911 + #$C912, // $C912 + #$C913, // $C913 + #$C914, // $C914 + #$C915, // $C915 + #$C916, // $C916 + #$C917, // $C917 + #$C918, // $C918 + #$C919, // $C919 + #$C91A, // $C91A + #$C91B, // $C91B + #$C91C, // $C91C + #$C91D, // $C91D + #$C91E, // $C91E + #$C91F, // $C91F + #$C920, // $C920 + #$C921, // $C921 + #$C922, // $C922 + #$C923, // $C923 + #$C924, // $C924 + #$C925, // $C925 + #$C926, // $C926 + #$C927, // $C927 + #$C928, // $C928 + #$C929, // $C929 + #$C92A, // $C92A + #$C92B, // $C92B + #$C92C, // $C92C + #$C92D, // $C92D + #$C92E, // $C92E + #$C92F, // $C92F + #$C930, // $C930 + #$C931, // $C931 + #$C932, // $C932 + #$C933, // $C933 + #$C934, // $C934 + #$C935, // $C935 + #$C936, // $C936 + #$C937, // $C937 + #$C938, // $C938 + #$C939, // $C939 + #$C93A, // $C93A + #$C93B, // $C93B + #$C93C, // $C93C + #$C93D, // $C93D + #$C93E, // $C93E + #$C93F, // $C93F + #$C940, // $C940 + #$C941, // $C941 + #$C942, // $C942 + #$C943, // $C943 + #$C944, // $C944 + #$C945, // $C945 + #$C946, // $C946 + #$C947, // $C947 + #$C948, // $C948 + #$C949, // $C949 + #$C94A, // $C94A + #$C94B, // $C94B + #$C94C, // $C94C + #$C94D, // $C94D + #$C94E, // $C94E + #$C94F, // $C94F + #$C950, // $C950 + #$C951, // $C951 + #$C952, // $C952 + #$C953, // $C953 + #$C954, // $C954 + #$C955, // $C955 + #$C956, // $C956 + #$C957, // $C957 + #$C958, // $C958 + #$C959, // $C959 + #$C95A, // $C95A + #$C95B, // $C95B + #$C95C, // $C95C + #$C95D, // $C95D + #$C95E, // $C95E + #$C95F, // $C95F + #$C960, // $C960 + #$C961, // $C961 + #$C962, // $C962 + #$C963, // $C963 + #$C964, // $C964 + #$C965, // $C965 + #$C966, // $C966 + #$C967, // $C967 + #$C968, // $C968 + #$C969, // $C969 + #$C96A, // $C96A + #$C96B, // $C96B + #$C96C, // $C96C + #$C96D, // $C96D + #$C96E, // $C96E + #$C96F, // $C96F + #$C970, // $C970 + #$C971, // $C971 + #$C972, // $C972 + #$C973, // $C973 + #$C974, // $C974 + #$C975, // $C975 + #$C976, // $C976 + #$C977, // $C977 + #$C978, // $C978 + #$C979, // $C979 + #$C97A, // $C97A + #$C97B, // $C97B + #$C97C, // $C97C + #$C97D, // $C97D + #$C97E, // $C97E + #$C97F, // $C97F + #$C980, // $C980 + #$C981, // $C981 + #$C982, // $C982 + #$C983, // $C983 + #$C984, // $C984 + #$C985, // $C985 + #$C986, // $C986 + #$C987, // $C987 + #$C988, // $C988 + #$C989, // $C989 + #$C98A, // $C98A + #$C98B, // $C98B + #$C98C, // $C98C + #$C98D, // $C98D + #$C98E, // $C98E + #$C98F, // $C98F + #$C990, // $C990 + #$C991, // $C991 + #$C992, // $C992 + #$C993, // $C993 + #$C994, // $C994 + #$C995, // $C995 + #$C996, // $C996 + #$C997, // $C997 + #$C998, // $C998 + #$C999, // $C999 + #$C99A, // $C99A + #$C99B, // $C99B + #$C99C, // $C99C + #$C99D, // $C99D + #$C99E, // $C99E + #$C99F, // $C99F + #$C9A0, // $C9A0 + #$C9A1, // $C9A1 + #$C9A2, // $C9A2 + #$C9A3, // $C9A3 + #$C9A4, // $C9A4 + #$C9A5, // $C9A5 + #$C9A6, // $C9A6 + #$C9A7, // $C9A7 + #$C9A8, // $C9A8 + #$C9A9, // $C9A9 + #$C9AA, // $C9AA + #$C9AB, // $C9AB + #$C9AC, // $C9AC + #$C9AD, // $C9AD + #$C9AE, // $C9AE + #$C9AF, // $C9AF + #$C9B0, // $C9B0 + #$C9B1, // $C9B1 + #$C9B2, // $C9B2 + #$C9B3, // $C9B3 + #$C9B4, // $C9B4 + #$C9B5, // $C9B5 + #$C9B6, // $C9B6 + #$C9B7, // $C9B7 + #$C9B8, // $C9B8 + #$C9B9, // $C9B9 + #$C9BA, // $C9BA + #$C9BB, // $C9BB + #$C9BC, // $C9BC + #$C9BD, // $C9BD + #$C9BE, // $C9BE + #$C9BF, // $C9BF + #$C9C0, // $C9C0 + #$C9C1, // $C9C1 + #$C9C2, // $C9C2 + #$C9C3, // $C9C3 + #$C9C4, // $C9C4 + #$C9C5, // $C9C5 + #$C9C6, // $C9C6 + #$C9C7, // $C9C7 + #$C9C8, // $C9C8 + #$C9C9, // $C9C9 + #$C9CA, // $C9CA + #$C9CB, // $C9CB + #$C9CC, // $C9CC + #$C9CD, // $C9CD + #$C9CE, // $C9CE + #$C9CF, // $C9CF + #$C9D0, // $C9D0 + #$C9D1, // $C9D1 + #$C9D2, // $C9D2 + #$C9D3, // $C9D3 + #$C9D4, // $C9D4 + #$C9D5, // $C9D5 + #$C9D6, // $C9D6 + #$C9D7, // $C9D7 + #$C9D8, // $C9D8 + #$C9D9, // $C9D9 + #$C9DA, // $C9DA + #$C9DB, // $C9DB + #$C9DC, // $C9DC + #$C9DD, // $C9DD + #$C9DE, // $C9DE + #$C9DF, // $C9DF + #$C9E0, // $C9E0 + #$C9E1, // $C9E1 + #$C9E2, // $C9E2 + #$C9E3, // $C9E3 + #$C9E4, // $C9E4 + #$C9E5, // $C9E5 + #$C9E6, // $C9E6 + #$C9E7, // $C9E7 + #$C9E8, // $C9E8 + #$C9E9, // $C9E9 + #$C9EA, // $C9EA + #$C9EB, // $C9EB + #$C9EC, // $C9EC + #$C9ED, // $C9ED + #$C9EE, // $C9EE + #$C9EF, // $C9EF + #$C9F0, // $C9F0 + #$C9F1, // $C9F1 + #$C9F2, // $C9F2 + #$C9F3, // $C9F3 + #$C9F4, // $C9F4 + #$C9F5, // $C9F5 + #$C9F6, // $C9F6 + #$C9F7, // $C9F7 + #$C9F8, // $C9F8 + #$C9F9, // $C9F9 + #$C9FA, // $C9FA + #$C9FB, // $C9FB + #$C9FC, // $C9FC + #$C9FD, // $C9FD + #$C9FE, // $C9FE + #$C9FF, // $C9FF + #$CA00, // $CA00 + #$CA01, // $CA01 + #$CA02, // $CA02 + #$CA03, // $CA03 + #$CA04, // $CA04 + #$CA05, // $CA05 + #$CA06, // $CA06 + #$CA07, // $CA07 + #$CA08, // $CA08 + #$CA09, // $CA09 + #$CA0A, // $CA0A + #$CA0B, // $CA0B + #$CA0C, // $CA0C + #$CA0D, // $CA0D + #$CA0E, // $CA0E + #$CA0F, // $CA0F + #$CA10, // $CA10 + #$CA11, // $CA11 + #$CA12, // $CA12 + #$CA13, // $CA13 + #$CA14, // $CA14 + #$CA15, // $CA15 + #$CA16, // $CA16 + #$CA17, // $CA17 + #$CA18, // $CA18 + #$CA19, // $CA19 + #$CA1A, // $CA1A + #$CA1B, // $CA1B + #$CA1C, // $CA1C + #$CA1D, // $CA1D + #$CA1E, // $CA1E + #$CA1F, // $CA1F + #$CA20, // $CA20 + #$CA21, // $CA21 + #$CA22, // $CA22 + #$CA23, // $CA23 + #$CA24, // $CA24 + #$CA25, // $CA25 + #$CA26, // $CA26 + #$CA27, // $CA27 + #$CA28, // $CA28 + #$CA29, // $CA29 + #$CA2A, // $CA2A + #$CA2B, // $CA2B + #$CA2C, // $CA2C + #$CA2D, // $CA2D + #$CA2E, // $CA2E + #$CA2F, // $CA2F + #$CA30, // $CA30 + #$CA31, // $CA31 + #$CA32, // $CA32 + #$CA33, // $CA33 + #$CA34, // $CA34 + #$CA35, // $CA35 + #$CA36, // $CA36 + #$CA37, // $CA37 + #$CA38, // $CA38 + #$CA39, // $CA39 + #$CA3A, // $CA3A + #$CA3B, // $CA3B + #$CA3C, // $CA3C + #$CA3D, // $CA3D + #$CA3E, // $CA3E + #$CA3F, // $CA3F + #$CA40, // $CA40 + #$CA41, // $CA41 + #$CA42, // $CA42 + #$CA43, // $CA43 + #$CA44, // $CA44 + #$CA45, // $CA45 + #$CA46, // $CA46 + #$CA47, // $CA47 + #$CA48, // $CA48 + #$CA49, // $CA49 + #$CA4A, // $CA4A + #$CA4B, // $CA4B + #$CA4C, // $CA4C + #$CA4D, // $CA4D + #$CA4E, // $CA4E + #$CA4F, // $CA4F + #$CA50, // $CA50 + #$CA51, // $CA51 + #$CA52, // $CA52 + #$CA53, // $CA53 + #$CA54, // $CA54 + #$CA55, // $CA55 + #$CA56, // $CA56 + #$CA57, // $CA57 + #$CA58, // $CA58 + #$CA59, // $CA59 + #$CA5A, // $CA5A + #$CA5B, // $CA5B + #$CA5C, // $CA5C + #$CA5D, // $CA5D + #$CA5E, // $CA5E + #$CA5F, // $CA5F + #$CA60, // $CA60 + #$CA61, // $CA61 + #$CA62, // $CA62 + #$CA63, // $CA63 + #$CA64, // $CA64 + #$CA65, // $CA65 + #$CA66, // $CA66 + #$CA67, // $CA67 + #$CA68, // $CA68 + #$CA69, // $CA69 + #$CA6A, // $CA6A + #$CA6B, // $CA6B + #$CA6C, // $CA6C + #$CA6D, // $CA6D + #$CA6E, // $CA6E + #$CA6F, // $CA6F + #$CA70, // $CA70 + #$CA71, // $CA71 + #$CA72, // $CA72 + #$CA73, // $CA73 + #$CA74, // $CA74 + #$CA75, // $CA75 + #$CA76, // $CA76 + #$CA77, // $CA77 + #$CA78, // $CA78 + #$CA79, // $CA79 + #$CA7A, // $CA7A + #$CA7B, // $CA7B + #$CA7C, // $CA7C + #$CA7D, // $CA7D + #$CA7E, // $CA7E + #$CA7F, // $CA7F + #$CA80, // $CA80 + #$CA81, // $CA81 + #$CA82, // $CA82 + #$CA83, // $CA83 + #$CA84, // $CA84 + #$CA85, // $CA85 + #$CA86, // $CA86 + #$CA87, // $CA87 + #$CA88, // $CA88 + #$CA89, // $CA89 + #$CA8A, // $CA8A + #$CA8B, // $CA8B + #$CA8C, // $CA8C + #$CA8D, // $CA8D + #$CA8E, // $CA8E + #$CA8F, // $CA8F + #$CA90, // $CA90 + #$CA91, // $CA91 + #$CA92, // $CA92 + #$CA93, // $CA93 + #$CA94, // $CA94 + #$CA95, // $CA95 + #$CA96, // $CA96 + #$CA97, // $CA97 + #$CA98, // $CA98 + #$CA99, // $CA99 + #$CA9A, // $CA9A + #$CA9B, // $CA9B + #$CA9C, // $CA9C + #$CA9D, // $CA9D + #$CA9E, // $CA9E + #$CA9F, // $CA9F + #$CAA0, // $CAA0 + #$CAA1, // $CAA1 + #$CAA2, // $CAA2 + #$CAA3, // $CAA3 + #$CAA4, // $CAA4 + #$CAA5, // $CAA5 + #$CAA6, // $CAA6 + #$CAA7, // $CAA7 + #$CAA8, // $CAA8 + #$CAA9, // $CAA9 + #$CAAA, // $CAAA + #$CAAB, // $CAAB + #$CAAC, // $CAAC + #$CAAD, // $CAAD + #$CAAE, // $CAAE + #$CAAF, // $CAAF + #$CAB0, // $CAB0 + #$CAB1, // $CAB1 + #$CAB2, // $CAB2 + #$CAB3, // $CAB3 + #$CAB4, // $CAB4 + #$CAB5, // $CAB5 + #$CAB6, // $CAB6 + #$CAB7, // $CAB7 + #$CAB8, // $CAB8 + #$CAB9, // $CAB9 + #$CABA, // $CABA + #$CABB, // $CABB + #$CABC, // $CABC + #$CABD, // $CABD + #$CABE, // $CABE + #$CABF, // $CABF + #$CAC0, // $CAC0 + #$CAC1, // $CAC1 + #$CAC2, // $CAC2 + #$CAC3, // $CAC3 + #$CAC4, // $CAC4 + #$CAC5, // $CAC5 + #$CAC6, // $CAC6 + #$CAC7, // $CAC7 + #$CAC8, // $CAC8 + #$CAC9, // $CAC9 + #$CACA, // $CACA + #$CACB, // $CACB + #$CACC, // $CACC + #$CACD, // $CACD + #$CACE, // $CACE + #$CACF, // $CACF + #$CAD0, // $CAD0 + #$CAD1, // $CAD1 + #$CAD2, // $CAD2 + #$CAD3, // $CAD3 + #$CAD4, // $CAD4 + #$CAD5, // $CAD5 + #$CAD6, // $CAD6 + #$CAD7, // $CAD7 + #$CAD8, // $CAD8 + #$CAD9, // $CAD9 + #$CADA, // $CADA + #$CADB, // $CADB + #$CADC, // $CADC + #$CADD, // $CADD + #$CADE, // $CADE + #$CADF, // $CADF + #$CAE0, // $CAE0 + #$CAE1, // $CAE1 + #$CAE2, // $CAE2 + #$CAE3, // $CAE3 + #$CAE4, // $CAE4 + #$CAE5, // $CAE5 + #$CAE6, // $CAE6 + #$CAE7, // $CAE7 + #$CAE8, // $CAE8 + #$CAE9, // $CAE9 + #$CAEA, // $CAEA + #$CAEB, // $CAEB + #$CAEC, // $CAEC + #$CAED, // $CAED + #$CAEE, // $CAEE + #$CAEF, // $CAEF + #$CAF0, // $CAF0 + #$CAF1, // $CAF1 + #$CAF2, // $CAF2 + #$CAF3, // $CAF3 + #$CAF4, // $CAF4 + #$CAF5, // $CAF5 + #$CAF6, // $CAF6 + #$CAF7, // $CAF7 + #$CAF8, // $CAF8 + #$CAF9, // $CAF9 + #$CAFA, // $CAFA + #$CAFB, // $CAFB + #$CAFC, // $CAFC + #$CAFD, // $CAFD + #$CAFE, // $CAFE + #$CAFF, // $CAFF + #$CB00, // $CB00 + #$CB01, // $CB01 + #$CB02, // $CB02 + #$CB03, // $CB03 + #$CB04, // $CB04 + #$CB05, // $CB05 + #$CB06, // $CB06 + #$CB07, // $CB07 + #$CB08, // $CB08 + #$CB09, // $CB09 + #$CB0A, // $CB0A + #$CB0B, // $CB0B + #$CB0C, // $CB0C + #$CB0D, // $CB0D + #$CB0E, // $CB0E + #$CB0F, // $CB0F + #$CB10, // $CB10 + #$CB11, // $CB11 + #$CB12, // $CB12 + #$CB13, // $CB13 + #$CB14, // $CB14 + #$CB15, // $CB15 + #$CB16, // $CB16 + #$CB17, // $CB17 + #$CB18, // $CB18 + #$CB19, // $CB19 + #$CB1A, // $CB1A + #$CB1B, // $CB1B + #$CB1C, // $CB1C + #$CB1D, // $CB1D + #$CB1E, // $CB1E + #$CB1F, // $CB1F + #$CB20, // $CB20 + #$CB21, // $CB21 + #$CB22, // $CB22 + #$CB23, // $CB23 + #$CB24, // $CB24 + #$CB25, // $CB25 + #$CB26, // $CB26 + #$CB27, // $CB27 + #$CB28, // $CB28 + #$CB29, // $CB29 + #$CB2A, // $CB2A + #$CB2B, // $CB2B + #$CB2C, // $CB2C + #$CB2D, // $CB2D + #$CB2E, // $CB2E + #$CB2F, // $CB2F + #$CB30, // $CB30 + #$CB31, // $CB31 + #$CB32, // $CB32 + #$CB33, // $CB33 + #$CB34, // $CB34 + #$CB35, // $CB35 + #$CB36, // $CB36 + #$CB37, // $CB37 + #$CB38, // $CB38 + #$CB39, // $CB39 + #$CB3A, // $CB3A + #$CB3B, // $CB3B + #$CB3C, // $CB3C + #$CB3D, // $CB3D + #$CB3E, // $CB3E + #$CB3F, // $CB3F + #$CB40, // $CB40 + #$CB41, // $CB41 + #$CB42, // $CB42 + #$CB43, // $CB43 + #$CB44, // $CB44 + #$CB45, // $CB45 + #$CB46, // $CB46 + #$CB47, // $CB47 + #$CB48, // $CB48 + #$CB49, // $CB49 + #$CB4A, // $CB4A + #$CB4B, // $CB4B + #$CB4C, // $CB4C + #$CB4D, // $CB4D + #$CB4E, // $CB4E + #$CB4F, // $CB4F + #$CB50, // $CB50 + #$CB51, // $CB51 + #$CB52, // $CB52 + #$CB53, // $CB53 + #$CB54, // $CB54 + #$CB55, // $CB55 + #$CB56, // $CB56 + #$CB57, // $CB57 + #$CB58, // $CB58 + #$CB59, // $CB59 + #$CB5A, // $CB5A + #$CB5B, // $CB5B + #$CB5C, // $CB5C + #$CB5D, // $CB5D + #$CB5E, // $CB5E + #$CB5F, // $CB5F + #$CB60, // $CB60 + #$CB61, // $CB61 + #$CB62, // $CB62 + #$CB63, // $CB63 + #$CB64, // $CB64 + #$CB65, // $CB65 + #$CB66, // $CB66 + #$CB67, // $CB67 + #$CB68, // $CB68 + #$CB69, // $CB69 + #$CB6A, // $CB6A + #$CB6B, // $CB6B + #$CB6C, // $CB6C + #$CB6D, // $CB6D + #$CB6E, // $CB6E + #$CB6F, // $CB6F + #$CB70, // $CB70 + #$CB71, // $CB71 + #$CB72, // $CB72 + #$CB73, // $CB73 + #$CB74, // $CB74 + #$CB75, // $CB75 + #$CB76, // $CB76 + #$CB77, // $CB77 + #$CB78, // $CB78 + #$CB79, // $CB79 + #$CB7A, // $CB7A + #$CB7B, // $CB7B + #$CB7C, // $CB7C + #$CB7D, // $CB7D + #$CB7E, // $CB7E + #$CB7F, // $CB7F + #$CB80, // $CB80 + #$CB81, // $CB81 + #$CB82, // $CB82 + #$CB83, // $CB83 + #$CB84, // $CB84 + #$CB85, // $CB85 + #$CB86, // $CB86 + #$CB87, // $CB87 + #$CB88, // $CB88 + #$CB89, // $CB89 + #$CB8A, // $CB8A + #$CB8B, // $CB8B + #$CB8C, // $CB8C + #$CB8D, // $CB8D + #$CB8E, // $CB8E + #$CB8F, // $CB8F + #$CB90, // $CB90 + #$CB91, // $CB91 + #$CB92, // $CB92 + #$CB93, // $CB93 + #$CB94, // $CB94 + #$CB95, // $CB95 + #$CB96, // $CB96 + #$CB97, // $CB97 + #$CB98, // $CB98 + #$CB99, // $CB99 + #$CB9A, // $CB9A + #$CB9B, // $CB9B + #$CB9C, // $CB9C + #$CB9D, // $CB9D + #$CB9E, // $CB9E + #$CB9F, // $CB9F + #$CBA0, // $CBA0 + #$CBA1, // $CBA1 + #$CBA2, // $CBA2 + #$CBA3, // $CBA3 + #$CBA4, // $CBA4 + #$CBA5, // $CBA5 + #$CBA6, // $CBA6 + #$CBA7, // $CBA7 + #$CBA8, // $CBA8 + #$CBA9, // $CBA9 + #$CBAA, // $CBAA + #$CBAB, // $CBAB + #$CBAC, // $CBAC + #$CBAD, // $CBAD + #$CBAE, // $CBAE + #$CBAF, // $CBAF + #$CBB0, // $CBB0 + #$CBB1, // $CBB1 + #$CBB2, // $CBB2 + #$CBB3, // $CBB3 + #$CBB4, // $CBB4 + #$CBB5, // $CBB5 + #$CBB6, // $CBB6 + #$CBB7, // $CBB7 + #$CBB8, // $CBB8 + #$CBB9, // $CBB9 + #$CBBA, // $CBBA + #$CBBB, // $CBBB + #$CBBC, // $CBBC + #$CBBD, // $CBBD + #$CBBE, // $CBBE + #$CBBF, // $CBBF + #$CBC0, // $CBC0 + #$CBC1, // $CBC1 + #$CBC2, // $CBC2 + #$CBC3, // $CBC3 + #$CBC4, // $CBC4 + #$CBC5, // $CBC5 + #$CBC6, // $CBC6 + #$CBC7, // $CBC7 + #$CBC8, // $CBC8 + #$CBC9, // $CBC9 + #$CBCA, // $CBCA + #$CBCB, // $CBCB + #$CBCC, // $CBCC + #$CBCD, // $CBCD + #$CBCE, // $CBCE + #$CBCF, // $CBCF + #$CBD0, // $CBD0 + #$CBD1, // $CBD1 + #$CBD2, // $CBD2 + #$CBD3, // $CBD3 + #$CBD4, // $CBD4 + #$CBD5, // $CBD5 + #$CBD6, // $CBD6 + #$CBD7, // $CBD7 + #$CBD8, // $CBD8 + #$CBD9, // $CBD9 + #$CBDA, // $CBDA + #$CBDB, // $CBDB + #$CBDC, // $CBDC + #$CBDD, // $CBDD + #$CBDE, // $CBDE + #$CBDF, // $CBDF + #$CBE0, // $CBE0 + #$CBE1, // $CBE1 + #$CBE2, // $CBE2 + #$CBE3, // $CBE3 + #$CBE4, // $CBE4 + #$CBE5, // $CBE5 + #$CBE6, // $CBE6 + #$CBE7, // $CBE7 + #$CBE8, // $CBE8 + #$CBE9, // $CBE9 + #$CBEA, // $CBEA + #$CBEB, // $CBEB + #$CBEC, // $CBEC + #$CBED, // $CBED + #$CBEE, // $CBEE + #$CBEF, // $CBEF + #$CBF0, // $CBF0 + #$CBF1, // $CBF1 + #$CBF2, // $CBF2 + #$CBF3, // $CBF3 + #$CBF4, // $CBF4 + #$CBF5, // $CBF5 + #$CBF6, // $CBF6 + #$CBF7, // $CBF7 + #$CBF8, // $CBF8 + #$CBF9, // $CBF9 + #$CBFA, // $CBFA + #$CBFB, // $CBFB + #$CBFC, // $CBFC + #$CBFD, // $CBFD + #$CBFE, // $CBFE + #$CBFF, // $CBFF + #$CC00, // $CC00 + #$CC01, // $CC01 + #$CC02, // $CC02 + #$CC03, // $CC03 + #$CC04, // $CC04 + #$CC05, // $CC05 + #$CC06, // $CC06 + #$CC07, // $CC07 + #$CC08, // $CC08 + #$CC09, // $CC09 + #$CC0A, // $CC0A + #$CC0B, // $CC0B + #$CC0C, // $CC0C + #$CC0D, // $CC0D + #$CC0E, // $CC0E + #$CC0F, // $CC0F + #$CC10, // $CC10 + #$CC11, // $CC11 + #$CC12, // $CC12 + #$CC13, // $CC13 + #$CC14, // $CC14 + #$CC15, // $CC15 + #$CC16, // $CC16 + #$CC17, // $CC17 + #$CC18, // $CC18 + #$CC19, // $CC19 + #$CC1A, // $CC1A + #$CC1B, // $CC1B + #$CC1C, // $CC1C + #$CC1D, // $CC1D + #$CC1E, // $CC1E + #$CC1F, // $CC1F + #$CC20, // $CC20 + #$CC21, // $CC21 + #$CC22, // $CC22 + #$CC23, // $CC23 + #$CC24, // $CC24 + #$CC25, // $CC25 + #$CC26, // $CC26 + #$CC27, // $CC27 + #$CC28, // $CC28 + #$CC29, // $CC29 + #$CC2A, // $CC2A + #$CC2B, // $CC2B + #$CC2C, // $CC2C + #$CC2D, // $CC2D + #$CC2E, // $CC2E + #$CC2F, // $CC2F + #$CC30, // $CC30 + #$CC31, // $CC31 + #$CC32, // $CC32 + #$CC33, // $CC33 + #$CC34, // $CC34 + #$CC35, // $CC35 + #$CC36, // $CC36 + #$CC37, // $CC37 + #$CC38, // $CC38 + #$CC39, // $CC39 + #$CC3A, // $CC3A + #$CC3B, // $CC3B + #$CC3C, // $CC3C + #$CC3D, // $CC3D + #$CC3E, // $CC3E + #$CC3F, // $CC3F + #$CC40, // $CC40 + #$CC41, // $CC41 + #$CC42, // $CC42 + #$CC43, // $CC43 + #$CC44, // $CC44 + #$CC45, // $CC45 + #$CC46, // $CC46 + #$CC47, // $CC47 + #$CC48, // $CC48 + #$CC49, // $CC49 + #$CC4A, // $CC4A + #$CC4B, // $CC4B + #$CC4C, // $CC4C + #$CC4D, // $CC4D + #$CC4E, // $CC4E + #$CC4F, // $CC4F + #$CC50, // $CC50 + #$CC51, // $CC51 + #$CC52, // $CC52 + #$CC53, // $CC53 + #$CC54, // $CC54 + #$CC55, // $CC55 + #$CC56, // $CC56 + #$CC57, // $CC57 + #$CC58, // $CC58 + #$CC59, // $CC59 + #$CC5A, // $CC5A + #$CC5B, // $CC5B + #$CC5C, // $CC5C + #$CC5D, // $CC5D + #$CC5E, // $CC5E + #$CC5F, // $CC5F + #$CC60, // $CC60 + #$CC61, // $CC61 + #$CC62, // $CC62 + #$CC63, // $CC63 + #$CC64, // $CC64 + #$CC65, // $CC65 + #$CC66, // $CC66 + #$CC67, // $CC67 + #$CC68, // $CC68 + #$CC69, // $CC69 + #$CC6A, // $CC6A + #$CC6B, // $CC6B + #$CC6C, // $CC6C + #$CC6D, // $CC6D + #$CC6E, // $CC6E + #$CC6F, // $CC6F + #$CC70, // $CC70 + #$CC71, // $CC71 + #$CC72, // $CC72 + #$CC73, // $CC73 + #$CC74, // $CC74 + #$CC75, // $CC75 + #$CC76, // $CC76 + #$CC77, // $CC77 + #$CC78, // $CC78 + #$CC79, // $CC79 + #$CC7A, // $CC7A + #$CC7B, // $CC7B + #$CC7C, // $CC7C + #$CC7D, // $CC7D + #$CC7E, // $CC7E + #$CC7F, // $CC7F + #$CC80, // $CC80 + #$CC81, // $CC81 + #$CC82, // $CC82 + #$CC83, // $CC83 + #$CC84, // $CC84 + #$CC85, // $CC85 + #$CC86, // $CC86 + #$CC87, // $CC87 + #$CC88, // $CC88 + #$CC89, // $CC89 + #$CC8A, // $CC8A + #$CC8B, // $CC8B + #$CC8C, // $CC8C + #$CC8D, // $CC8D + #$CC8E, // $CC8E + #$CC8F, // $CC8F + #$CC90, // $CC90 + #$CC91, // $CC91 + #$CC92, // $CC92 + #$CC93, // $CC93 + #$CC94, // $CC94 + #$CC95, // $CC95 + #$CC96, // $CC96 + #$CC97, // $CC97 + #$CC98, // $CC98 + #$CC99, // $CC99 + #$CC9A, // $CC9A + #$CC9B, // $CC9B + #$CC9C, // $CC9C + #$CC9D, // $CC9D + #$CC9E, // $CC9E + #$CC9F, // $CC9F + #$CCA0, // $CCA0 + #$CCA1, // $CCA1 + #$CCA2, // $CCA2 + #$CCA3, // $CCA3 + #$CCA4, // $CCA4 + #$CCA5, // $CCA5 + #$CCA6, // $CCA6 + #$CCA7, // $CCA7 + #$CCA8, // $CCA8 + #$CCA9, // $CCA9 + #$CCAA, // $CCAA + #$CCAB, // $CCAB + #$CCAC, // $CCAC + #$CCAD, // $CCAD + #$CCAE, // $CCAE + #$CCAF, // $CCAF + #$CCB0, // $CCB0 + #$CCB1, // $CCB1 + #$CCB2, // $CCB2 + #$CCB3, // $CCB3 + #$CCB4, // $CCB4 + #$CCB5, // $CCB5 + #$CCB6, // $CCB6 + #$CCB7, // $CCB7 + #$CCB8, // $CCB8 + #$CCB9, // $CCB9 + #$CCBA, // $CCBA + #$CCBB, // $CCBB + #$CCBC, // $CCBC + #$CCBD, // $CCBD + #$CCBE, // $CCBE + #$CCBF, // $CCBF + #$CCC0, // $CCC0 + #$CCC1, // $CCC1 + #$CCC2, // $CCC2 + #$CCC3, // $CCC3 + #$CCC4, // $CCC4 + #$CCC5, // $CCC5 + #$CCC6, // $CCC6 + #$CCC7, // $CCC7 + #$CCC8, // $CCC8 + #$CCC9, // $CCC9 + #$CCCA, // $CCCA + #$CCCB, // $CCCB + #$CCCC, // $CCCC + #$CCCD, // $CCCD + #$CCCE, // $CCCE + #$CCCF, // $CCCF + #$CCD0, // $CCD0 + #$CCD1, // $CCD1 + #$CCD2, // $CCD2 + #$CCD3, // $CCD3 + #$CCD4, // $CCD4 + #$CCD5, // $CCD5 + #$CCD6, // $CCD6 + #$CCD7, // $CCD7 + #$CCD8, // $CCD8 + #$CCD9, // $CCD9 + #$CCDA, // $CCDA + #$CCDB, // $CCDB + #$CCDC, // $CCDC + #$CCDD, // $CCDD + #$CCDE, // $CCDE + #$CCDF, // $CCDF + #$CCE0, // $CCE0 + #$CCE1, // $CCE1 + #$CCE2, // $CCE2 + #$CCE3, // $CCE3 + #$CCE4, // $CCE4 + #$CCE5, // $CCE5 + #$CCE6, // $CCE6 + #$CCE7, // $CCE7 + #$CCE8, // $CCE8 + #$CCE9, // $CCE9 + #$CCEA, // $CCEA + #$CCEB, // $CCEB + #$CCEC, // $CCEC + #$CCED, // $CCED + #$CCEE, // $CCEE + #$CCEF, // $CCEF + #$CCF0, // $CCF0 + #$CCF1, // $CCF1 + #$CCF2, // $CCF2 + #$CCF3, // $CCF3 + #$CCF4, // $CCF4 + #$CCF5, // $CCF5 + #$CCF6, // $CCF6 + #$CCF7, // $CCF7 + #$CCF8, // $CCF8 + #$CCF9, // $CCF9 + #$CCFA, // $CCFA + #$CCFB, // $CCFB + #$CCFC, // $CCFC + #$CCFD, // $CCFD + #$CCFE, // $CCFE + #$CCFF, // $CCFF + #$CD00, // $CD00 + #$CD01, // $CD01 + #$CD02, // $CD02 + #$CD03, // $CD03 + #$CD04, // $CD04 + #$CD05, // $CD05 + #$CD06, // $CD06 + #$CD07, // $CD07 + #$CD08, // $CD08 + #$CD09, // $CD09 + #$CD0A, // $CD0A + #$CD0B, // $CD0B + #$CD0C, // $CD0C + #$CD0D, // $CD0D + #$CD0E, // $CD0E + #$CD0F, // $CD0F + #$CD10, // $CD10 + #$CD11, // $CD11 + #$CD12, // $CD12 + #$CD13, // $CD13 + #$CD14, // $CD14 + #$CD15, // $CD15 + #$CD16, // $CD16 + #$CD17, // $CD17 + #$CD18, // $CD18 + #$CD19, // $CD19 + #$CD1A, // $CD1A + #$CD1B, // $CD1B + #$CD1C, // $CD1C + #$CD1D, // $CD1D + #$CD1E, // $CD1E + #$CD1F, // $CD1F + #$CD20, // $CD20 + #$CD21, // $CD21 + #$CD22, // $CD22 + #$CD23, // $CD23 + #$CD24, // $CD24 + #$CD25, // $CD25 + #$CD26, // $CD26 + #$CD27, // $CD27 + #$CD28, // $CD28 + #$CD29, // $CD29 + #$CD2A, // $CD2A + #$CD2B, // $CD2B + #$CD2C, // $CD2C + #$CD2D, // $CD2D + #$CD2E, // $CD2E + #$CD2F, // $CD2F + #$CD30, // $CD30 + #$CD31, // $CD31 + #$CD32, // $CD32 + #$CD33, // $CD33 + #$CD34, // $CD34 + #$CD35, // $CD35 + #$CD36, // $CD36 + #$CD37, // $CD37 + #$CD38, // $CD38 + #$CD39, // $CD39 + #$CD3A, // $CD3A + #$CD3B, // $CD3B + #$CD3C, // $CD3C + #$CD3D, // $CD3D + #$CD3E, // $CD3E + #$CD3F, // $CD3F + #$CD40, // $CD40 + #$CD41, // $CD41 + #$CD42, // $CD42 + #$CD43, // $CD43 + #$CD44, // $CD44 + #$CD45, // $CD45 + #$CD46, // $CD46 + #$CD47, // $CD47 + #$CD48, // $CD48 + #$CD49, // $CD49 + #$CD4A, // $CD4A + #$CD4B, // $CD4B + #$CD4C, // $CD4C + #$CD4D, // $CD4D + #$CD4E, // $CD4E + #$CD4F, // $CD4F + #$CD50, // $CD50 + #$CD51, // $CD51 + #$CD52, // $CD52 + #$CD53, // $CD53 + #$CD54, // $CD54 + #$CD55, // $CD55 + #$CD56, // $CD56 + #$CD57, // $CD57 + #$CD58, // $CD58 + #$CD59, // $CD59 + #$CD5A, // $CD5A + #$CD5B, // $CD5B + #$CD5C, // $CD5C + #$CD5D, // $CD5D + #$CD5E, // $CD5E + #$CD5F, // $CD5F + #$CD60, // $CD60 + #$CD61, // $CD61 + #$CD62, // $CD62 + #$CD63, // $CD63 + #$CD64, // $CD64 + #$CD65, // $CD65 + #$CD66, // $CD66 + #$CD67, // $CD67 + #$CD68, // $CD68 + #$CD69, // $CD69 + #$CD6A, // $CD6A + #$CD6B, // $CD6B + #$CD6C, // $CD6C + #$CD6D, // $CD6D + #$CD6E, // $CD6E + #$CD6F, // $CD6F + #$CD70, // $CD70 + #$CD71, // $CD71 + #$CD72, // $CD72 + #$CD73, // $CD73 + #$CD74, // $CD74 + #$CD75, // $CD75 + #$CD76, // $CD76 + #$CD77, // $CD77 + #$CD78, // $CD78 + #$CD79, // $CD79 + #$CD7A, // $CD7A + #$CD7B, // $CD7B + #$CD7C, // $CD7C + #$CD7D, // $CD7D + #$CD7E, // $CD7E + #$CD7F, // $CD7F + #$CD80, // $CD80 + #$CD81, // $CD81 + #$CD82, // $CD82 + #$CD83, // $CD83 + #$CD84, // $CD84 + #$CD85, // $CD85 + #$CD86, // $CD86 + #$CD87, // $CD87 + #$CD88, // $CD88 + #$CD89, // $CD89 + #$CD8A, // $CD8A + #$CD8B, // $CD8B + #$CD8C, // $CD8C + #$CD8D, // $CD8D + #$CD8E, // $CD8E + #$CD8F, // $CD8F + #$CD90, // $CD90 + #$CD91, // $CD91 + #$CD92, // $CD92 + #$CD93, // $CD93 + #$CD94, // $CD94 + #$CD95, // $CD95 + #$CD96, // $CD96 + #$CD97, // $CD97 + #$CD98, // $CD98 + #$CD99, // $CD99 + #$CD9A, // $CD9A + #$CD9B, // $CD9B + #$CD9C, // $CD9C + #$CD9D, // $CD9D + #$CD9E, // $CD9E + #$CD9F, // $CD9F + #$CDA0, // $CDA0 + #$CDA1, // $CDA1 + #$CDA2, // $CDA2 + #$CDA3, // $CDA3 + #$CDA4, // $CDA4 + #$CDA5, // $CDA5 + #$CDA6, // $CDA6 + #$CDA7, // $CDA7 + #$CDA8, // $CDA8 + #$CDA9, // $CDA9 + #$CDAA, // $CDAA + #$CDAB, // $CDAB + #$CDAC, // $CDAC + #$CDAD, // $CDAD + #$CDAE, // $CDAE + #$CDAF, // $CDAF + #$CDB0, // $CDB0 + #$CDB1, // $CDB1 + #$CDB2, // $CDB2 + #$CDB3, // $CDB3 + #$CDB4, // $CDB4 + #$CDB5, // $CDB5 + #$CDB6, // $CDB6 + #$CDB7, // $CDB7 + #$CDB8, // $CDB8 + #$CDB9, // $CDB9 + #$CDBA, // $CDBA + #$CDBB, // $CDBB + #$CDBC, // $CDBC + #$CDBD, // $CDBD + #$CDBE, // $CDBE + #$CDBF, // $CDBF + #$CDC0, // $CDC0 + #$CDC1, // $CDC1 + #$CDC2, // $CDC2 + #$CDC3, // $CDC3 + #$CDC4, // $CDC4 + #$CDC5, // $CDC5 + #$CDC6, // $CDC6 + #$CDC7, // $CDC7 + #$CDC8, // $CDC8 + #$CDC9, // $CDC9 + #$CDCA, // $CDCA + #$CDCB, // $CDCB + #$CDCC, // $CDCC + #$CDCD, // $CDCD + #$CDCE, // $CDCE + #$CDCF, // $CDCF + #$CDD0, // $CDD0 + #$CDD1, // $CDD1 + #$CDD2, // $CDD2 + #$CDD3, // $CDD3 + #$CDD4, // $CDD4 + #$CDD5, // $CDD5 + #$CDD6, // $CDD6 + #$CDD7, // $CDD7 + #$CDD8, // $CDD8 + #$CDD9, // $CDD9 + #$CDDA, // $CDDA + #$CDDB, // $CDDB + #$CDDC, // $CDDC + #$CDDD, // $CDDD + #$CDDE, // $CDDE + #$CDDF, // $CDDF + #$CDE0, // $CDE0 + #$CDE1, // $CDE1 + #$CDE2, // $CDE2 + #$CDE3, // $CDE3 + #$CDE4, // $CDE4 + #$CDE5, // $CDE5 + #$CDE6, // $CDE6 + #$CDE7, // $CDE7 + #$CDE8, // $CDE8 + #$CDE9, // $CDE9 + #$CDEA, // $CDEA + #$CDEB, // $CDEB + #$CDEC, // $CDEC + #$CDED, // $CDED + #$CDEE, // $CDEE + #$CDEF, // $CDEF + #$CDF0, // $CDF0 + #$CDF1, // $CDF1 + #$CDF2, // $CDF2 + #$CDF3, // $CDF3 + #$CDF4, // $CDF4 + #$CDF5, // $CDF5 + #$CDF6, // $CDF6 + #$CDF7, // $CDF7 + #$CDF8, // $CDF8 + #$CDF9, // $CDF9 + #$CDFA, // $CDFA + #$CDFB, // $CDFB + #$CDFC, // $CDFC + #$CDFD, // $CDFD + #$CDFE, // $CDFE + #$CDFF, // $CDFF + #$CE00, // $CE00 + #$CE01, // $CE01 + #$CE02, // $CE02 + #$CE03, // $CE03 + #$CE04, // $CE04 + #$CE05, // $CE05 + #$CE06, // $CE06 + #$CE07, // $CE07 + #$CE08, // $CE08 + #$CE09, // $CE09 + #$CE0A, // $CE0A + #$CE0B, // $CE0B + #$CE0C, // $CE0C + #$CE0D, // $CE0D + #$CE0E, // $CE0E + #$CE0F, // $CE0F + #$CE10, // $CE10 + #$CE11, // $CE11 + #$CE12, // $CE12 + #$CE13, // $CE13 + #$CE14, // $CE14 + #$CE15, // $CE15 + #$CE16, // $CE16 + #$CE17, // $CE17 + #$CE18, // $CE18 + #$CE19, // $CE19 + #$CE1A, // $CE1A + #$CE1B, // $CE1B + #$CE1C, // $CE1C + #$CE1D, // $CE1D + #$CE1E, // $CE1E + #$CE1F, // $CE1F + #$CE20, // $CE20 + #$CE21, // $CE21 + #$CE22, // $CE22 + #$CE23, // $CE23 + #$CE24, // $CE24 + #$CE25, // $CE25 + #$CE26, // $CE26 + #$CE27, // $CE27 + #$CE28, // $CE28 + #$CE29, // $CE29 + #$CE2A, // $CE2A + #$CE2B, // $CE2B + #$CE2C, // $CE2C + #$CE2D, // $CE2D + #$CE2E, // $CE2E + #$CE2F, // $CE2F + #$CE30, // $CE30 + #$CE31, // $CE31 + #$CE32, // $CE32 + #$CE33, // $CE33 + #$CE34, // $CE34 + #$CE35, // $CE35 + #$CE36, // $CE36 + #$CE37, // $CE37 + #$CE38, // $CE38 + #$CE39, // $CE39 + #$CE3A, // $CE3A + #$CE3B, // $CE3B + #$CE3C, // $CE3C + #$CE3D, // $CE3D + #$CE3E, // $CE3E + #$CE3F, // $CE3F + #$CE40, // $CE40 + #$CE41, // $CE41 + #$CE42, // $CE42 + #$CE43, // $CE43 + #$CE44, // $CE44 + #$CE45, // $CE45 + #$CE46, // $CE46 + #$CE47, // $CE47 + #$CE48, // $CE48 + #$CE49, // $CE49 + #$CE4A, // $CE4A + #$CE4B, // $CE4B + #$CE4C, // $CE4C + #$CE4D, // $CE4D + #$CE4E, // $CE4E + #$CE4F, // $CE4F + #$CE50, // $CE50 + #$CE51, // $CE51 + #$CE52, // $CE52 + #$CE53, // $CE53 + #$CE54, // $CE54 + #$CE55, // $CE55 + #$CE56, // $CE56 + #$CE57, // $CE57 + #$CE58, // $CE58 + #$CE59, // $CE59 + #$CE5A, // $CE5A + #$CE5B, // $CE5B + #$CE5C, // $CE5C + #$CE5D, // $CE5D + #$CE5E, // $CE5E + #$CE5F, // $CE5F + #$CE60, // $CE60 + #$CE61, // $CE61 + #$CE62, // $CE62 + #$CE63, // $CE63 + #$CE64, // $CE64 + #$CE65, // $CE65 + #$CE66, // $CE66 + #$CE67, // $CE67 + #$CE68, // $CE68 + #$CE69, // $CE69 + #$CE6A, // $CE6A + #$CE6B, // $CE6B + #$CE6C, // $CE6C + #$CE6D, // $CE6D + #$CE6E, // $CE6E + #$CE6F, // $CE6F + #$CE70, // $CE70 + #$CE71, // $CE71 + #$CE72, // $CE72 + #$CE73, // $CE73 + #$CE74, // $CE74 + #$CE75, // $CE75 + #$CE76, // $CE76 + #$CE77, // $CE77 + #$CE78, // $CE78 + #$CE79, // $CE79 + #$CE7A, // $CE7A + #$CE7B, // $CE7B + #$CE7C, // $CE7C + #$CE7D, // $CE7D + #$CE7E, // $CE7E + #$CE7F, // $CE7F + #$CE80, // $CE80 + #$CE81, // $CE81 + #$CE82, // $CE82 + #$CE83, // $CE83 + #$CE84, // $CE84 + #$CE85, // $CE85 + #$CE86, // $CE86 + #$CE87, // $CE87 + #$CE88, // $CE88 + #$CE89, // $CE89 + #$CE8A, // $CE8A + #$CE8B, // $CE8B + #$CE8C, // $CE8C + #$CE8D, // $CE8D + #$CE8E, // $CE8E + #$CE8F, // $CE8F + #$CE90, // $CE90 + #$CE91, // $CE91 + #$CE92, // $CE92 + #$CE93, // $CE93 + #$CE94, // $CE94 + #$CE95, // $CE95 + #$CE96, // $CE96 + #$CE97, // $CE97 + #$CE98, // $CE98 + #$CE99, // $CE99 + #$CE9A, // $CE9A + #$CE9B, // $CE9B + #$CE9C, // $CE9C + #$CE9D, // $CE9D + #$CE9E, // $CE9E + #$CE9F, // $CE9F + #$CEA0, // $CEA0 + #$CEA1, // $CEA1 + #$CEA2, // $CEA2 + #$CEA3, // $CEA3 + #$CEA4, // $CEA4 + #$CEA5, // $CEA5 + #$CEA6, // $CEA6 + #$CEA7, // $CEA7 + #$CEA8, // $CEA8 + #$CEA9, // $CEA9 + #$CEAA, // $CEAA + #$CEAB, // $CEAB + #$CEAC, // $CEAC + #$CEAD, // $CEAD + #$CEAE, // $CEAE + #$CEAF, // $CEAF + #$CEB0, // $CEB0 + #$CEB1, // $CEB1 + #$CEB2, // $CEB2 + #$CEB3, // $CEB3 + #$CEB4, // $CEB4 + #$CEB5, // $CEB5 + #$CEB6, // $CEB6 + #$CEB7, // $CEB7 + #$CEB8, // $CEB8 + #$CEB9, // $CEB9 + #$CEBA, // $CEBA + #$CEBB, // $CEBB + #$CEBC, // $CEBC + #$CEBD, // $CEBD + #$CEBE, // $CEBE + #$CEBF, // $CEBF + #$CEC0, // $CEC0 + #$CEC1, // $CEC1 + #$CEC2, // $CEC2 + #$CEC3, // $CEC3 + #$CEC4, // $CEC4 + #$CEC5, // $CEC5 + #$CEC6, // $CEC6 + #$CEC7, // $CEC7 + #$CEC8, // $CEC8 + #$CEC9, // $CEC9 + #$CECA, // $CECA + #$CECB, // $CECB + #$CECC, // $CECC + #$CECD, // $CECD + #$CECE, // $CECE + #$CECF, // $CECF + #$CED0, // $CED0 + #$CED1, // $CED1 + #$CED2, // $CED2 + #$CED3, // $CED3 + #$CED4, // $CED4 + #$CED5, // $CED5 + #$CED6, // $CED6 + #$CED7, // $CED7 + #$CED8, // $CED8 + #$CED9, // $CED9 + #$CEDA, // $CEDA + #$CEDB, // $CEDB + #$CEDC, // $CEDC + #$CEDD, // $CEDD + #$CEDE, // $CEDE + #$CEDF, // $CEDF + #$CEE0, // $CEE0 + #$CEE1, // $CEE1 + #$CEE2, // $CEE2 + #$CEE3, // $CEE3 + #$CEE4, // $CEE4 + #$CEE5, // $CEE5 + #$CEE6, // $CEE6 + #$CEE7, // $CEE7 + #$CEE8, // $CEE8 + #$CEE9, // $CEE9 + #$CEEA, // $CEEA + #$CEEB, // $CEEB + #$CEEC, // $CEEC + #$CEED, // $CEED + #$CEEE, // $CEEE + #$CEEF, // $CEEF + #$CEF0, // $CEF0 + #$CEF1, // $CEF1 + #$CEF2, // $CEF2 + #$CEF3, // $CEF3 + #$CEF4, // $CEF4 + #$CEF5, // $CEF5 + #$CEF6, // $CEF6 + #$CEF7, // $CEF7 + #$CEF8, // $CEF8 + #$CEF9, // $CEF9 + #$CEFA, // $CEFA + #$CEFB, // $CEFB + #$CEFC, // $CEFC + #$CEFD, // $CEFD + #$CEFE, // $CEFE + #$CEFF, // $CEFF + #$CF00, // $CF00 + #$CF01, // $CF01 + #$CF02, // $CF02 + #$CF03, // $CF03 + #$CF04, // $CF04 + #$CF05, // $CF05 + #$CF06, // $CF06 + #$CF07, // $CF07 + #$CF08, // $CF08 + #$CF09, // $CF09 + #$CF0A, // $CF0A + #$CF0B, // $CF0B + #$CF0C, // $CF0C + #$CF0D, // $CF0D + #$CF0E, // $CF0E + #$CF0F, // $CF0F + #$CF10, // $CF10 + #$CF11, // $CF11 + #$CF12, // $CF12 + #$CF13, // $CF13 + #$CF14, // $CF14 + #$CF15, // $CF15 + #$CF16, // $CF16 + #$CF17, // $CF17 + #$CF18, // $CF18 + #$CF19, // $CF19 + #$CF1A, // $CF1A + #$CF1B, // $CF1B + #$CF1C, // $CF1C + #$CF1D, // $CF1D + #$CF1E, // $CF1E + #$CF1F, // $CF1F + #$CF20, // $CF20 + #$CF21, // $CF21 + #$CF22, // $CF22 + #$CF23, // $CF23 + #$CF24, // $CF24 + #$CF25, // $CF25 + #$CF26, // $CF26 + #$CF27, // $CF27 + #$CF28, // $CF28 + #$CF29, // $CF29 + #$CF2A, // $CF2A + #$CF2B, // $CF2B + #$CF2C, // $CF2C + #$CF2D, // $CF2D + #$CF2E, // $CF2E + #$CF2F, // $CF2F + #$CF30, // $CF30 + #$CF31, // $CF31 + #$CF32, // $CF32 + #$CF33, // $CF33 + #$CF34, // $CF34 + #$CF35, // $CF35 + #$CF36, // $CF36 + #$CF37, // $CF37 + #$CF38, // $CF38 + #$CF39, // $CF39 + #$CF3A, // $CF3A + #$CF3B, // $CF3B + #$CF3C, // $CF3C + #$CF3D, // $CF3D + #$CF3E, // $CF3E + #$CF3F, // $CF3F + #$CF40, // $CF40 + #$CF41, // $CF41 + #$CF42, // $CF42 + #$CF43, // $CF43 + #$CF44, // $CF44 + #$CF45, // $CF45 + #$CF46, // $CF46 + #$CF47, // $CF47 + #$CF48, // $CF48 + #$CF49, // $CF49 + #$CF4A, // $CF4A + #$CF4B, // $CF4B + #$CF4C, // $CF4C + #$CF4D, // $CF4D + #$CF4E, // $CF4E + #$CF4F, // $CF4F + #$CF50, // $CF50 + #$CF51, // $CF51 + #$CF52, // $CF52 + #$CF53, // $CF53 + #$CF54, // $CF54 + #$CF55, // $CF55 + #$CF56, // $CF56 + #$CF57, // $CF57 + #$CF58, // $CF58 + #$CF59, // $CF59 + #$CF5A, // $CF5A + #$CF5B, // $CF5B + #$CF5C, // $CF5C + #$CF5D, // $CF5D + #$CF5E, // $CF5E + #$CF5F, // $CF5F + #$CF60, // $CF60 + #$CF61, // $CF61 + #$CF62, // $CF62 + #$CF63, // $CF63 + #$CF64, // $CF64 + #$CF65, // $CF65 + #$CF66, // $CF66 + #$CF67, // $CF67 + #$CF68, // $CF68 + #$CF69, // $CF69 + #$CF6A, // $CF6A + #$CF6B, // $CF6B + #$CF6C, // $CF6C + #$CF6D, // $CF6D + #$CF6E, // $CF6E + #$CF6F, // $CF6F + #$CF70, // $CF70 + #$CF71, // $CF71 + #$CF72, // $CF72 + #$CF73, // $CF73 + #$CF74, // $CF74 + #$CF75, // $CF75 + #$CF76, // $CF76 + #$CF77, // $CF77 + #$CF78, // $CF78 + #$CF79, // $CF79 + #$CF7A, // $CF7A + #$CF7B, // $CF7B + #$CF7C, // $CF7C + #$CF7D, // $CF7D + #$CF7E, // $CF7E + #$CF7F, // $CF7F + #$CF80, // $CF80 + #$CF81, // $CF81 + #$CF82, // $CF82 + #$CF83, // $CF83 + #$CF84, // $CF84 + #$CF85, // $CF85 + #$CF86, // $CF86 + #$CF87, // $CF87 + #$CF88, // $CF88 + #$CF89, // $CF89 + #$CF8A, // $CF8A + #$CF8B, // $CF8B + #$CF8C, // $CF8C + #$CF8D, // $CF8D + #$CF8E, // $CF8E + #$CF8F, // $CF8F + #$CF90, // $CF90 + #$CF91, // $CF91 + #$CF92, // $CF92 + #$CF93, // $CF93 + #$CF94, // $CF94 + #$CF95, // $CF95 + #$CF96, // $CF96 + #$CF97, // $CF97 + #$CF98, // $CF98 + #$CF99, // $CF99 + #$CF9A, // $CF9A + #$CF9B, // $CF9B + #$CF9C, // $CF9C + #$CF9D, // $CF9D + #$CF9E, // $CF9E + #$CF9F, // $CF9F + #$CFA0, // $CFA0 + #$CFA1, // $CFA1 + #$CFA2, // $CFA2 + #$CFA3, // $CFA3 + #$CFA4, // $CFA4 + #$CFA5, // $CFA5 + #$CFA6, // $CFA6 + #$CFA7, // $CFA7 + #$CFA8, // $CFA8 + #$CFA9, // $CFA9 + #$CFAA, // $CFAA + #$CFAB, // $CFAB + #$CFAC, // $CFAC + #$CFAD, // $CFAD + #$CFAE, // $CFAE + #$CFAF, // $CFAF + #$CFB0, // $CFB0 + #$CFB1, // $CFB1 + #$CFB2, // $CFB2 + #$CFB3, // $CFB3 + #$CFB4, // $CFB4 + #$CFB5, // $CFB5 + #$CFB6, // $CFB6 + #$CFB7, // $CFB7 + #$CFB8, // $CFB8 + #$CFB9, // $CFB9 + #$CFBA, // $CFBA + #$CFBB, // $CFBB + #$CFBC, // $CFBC + #$CFBD, // $CFBD + #$CFBE, // $CFBE + #$CFBF, // $CFBF + #$CFC0, // $CFC0 + #$CFC1, // $CFC1 + #$CFC2, // $CFC2 + #$CFC3, // $CFC3 + #$CFC4, // $CFC4 + #$CFC5, // $CFC5 + #$CFC6, // $CFC6 + #$CFC7, // $CFC7 + #$CFC8, // $CFC8 + #$CFC9, // $CFC9 + #$CFCA, // $CFCA + #$CFCB, // $CFCB + #$CFCC, // $CFCC + #$CFCD, // $CFCD + #$CFCE, // $CFCE + #$CFCF, // $CFCF + #$CFD0, // $CFD0 + #$CFD1, // $CFD1 + #$CFD2, // $CFD2 + #$CFD3, // $CFD3 + #$CFD4, // $CFD4 + #$CFD5, // $CFD5 + #$CFD6, // $CFD6 + #$CFD7, // $CFD7 + #$CFD8, // $CFD8 + #$CFD9, // $CFD9 + #$CFDA, // $CFDA + #$CFDB, // $CFDB + #$CFDC, // $CFDC + #$CFDD, // $CFDD + #$CFDE, // $CFDE + #$CFDF, // $CFDF + #$CFE0, // $CFE0 + #$CFE1, // $CFE1 + #$CFE2, // $CFE2 + #$CFE3, // $CFE3 + #$CFE4, // $CFE4 + #$CFE5, // $CFE5 + #$CFE6, // $CFE6 + #$CFE7, // $CFE7 + #$CFE8, // $CFE8 + #$CFE9, // $CFE9 + #$CFEA, // $CFEA + #$CFEB, // $CFEB + #$CFEC, // $CFEC + #$CFED, // $CFED + #$CFEE, // $CFEE + #$CFEF, // $CFEF + #$CFF0, // $CFF0 + #$CFF1, // $CFF1 + #$CFF2, // $CFF2 + #$CFF3, // $CFF3 + #$CFF4, // $CFF4 + #$CFF5, // $CFF5 + #$CFF6, // $CFF6 + #$CFF7, // $CFF7 + #$CFF8, // $CFF8 + #$CFF9, // $CFF9 + #$CFFA, // $CFFA + #$CFFB, // $CFFB + #$CFFC, // $CFFC + #$CFFD, // $CFFD + #$CFFE, // $CFFE + #$CFFF, // $CFFF + #$D000, // $D000 + #$D001, // $D001 + #$D002, // $D002 + #$D003, // $D003 + #$D004, // $D004 + #$D005, // $D005 + #$D006, // $D006 + #$D007, // $D007 + #$D008, // $D008 + #$D009, // $D009 + #$D00A, // $D00A + #$D00B, // $D00B + #$D00C, // $D00C + #$D00D, // $D00D + #$D00E, // $D00E + #$D00F, // $D00F + #$D010, // $D010 + #$D011, // $D011 + #$D012, // $D012 + #$D013, // $D013 + #$D014, // $D014 + #$D015, // $D015 + #$D016, // $D016 + #$D017, // $D017 + #$D018, // $D018 + #$D019, // $D019 + #$D01A, // $D01A + #$D01B, // $D01B + #$D01C, // $D01C + #$D01D, // $D01D + #$D01E, // $D01E + #$D01F, // $D01F + #$D020, // $D020 + #$D021, // $D021 + #$D022, // $D022 + #$D023, // $D023 + #$D024, // $D024 + #$D025, // $D025 + #$D026, // $D026 + #$D027, // $D027 + #$D028, // $D028 + #$D029, // $D029 + #$D02A, // $D02A + #$D02B, // $D02B + #$D02C, // $D02C + #$D02D, // $D02D + #$D02E, // $D02E + #$D02F, // $D02F + #$D030, // $D030 + #$D031, // $D031 + #$D032, // $D032 + #$D033, // $D033 + #$D034, // $D034 + #$D035, // $D035 + #$D036, // $D036 + #$D037, // $D037 + #$D038, // $D038 + #$D039, // $D039 + #$D03A, // $D03A + #$D03B, // $D03B + #$D03C, // $D03C + #$D03D, // $D03D + #$D03E, // $D03E + #$D03F, // $D03F + #$D040, // $D040 + #$D041, // $D041 + #$D042, // $D042 + #$D043, // $D043 + #$D044, // $D044 + #$D045, // $D045 + #$D046, // $D046 + #$D047, // $D047 + #$D048, // $D048 + #$D049, // $D049 + #$D04A, // $D04A + #$D04B, // $D04B + #$D04C, // $D04C + #$D04D, // $D04D + #$D04E, // $D04E + #$D04F, // $D04F + #$D050, // $D050 + #$D051, // $D051 + #$D052, // $D052 + #$D053, // $D053 + #$D054, // $D054 + #$D055, // $D055 + #$D056, // $D056 + #$D057, // $D057 + #$D058, // $D058 + #$D059, // $D059 + #$D05A, // $D05A + #$D05B, // $D05B + #$D05C, // $D05C + #$D05D, // $D05D + #$D05E, // $D05E + #$D05F, // $D05F + #$D060, // $D060 + #$D061, // $D061 + #$D062, // $D062 + #$D063, // $D063 + #$D064, // $D064 + #$D065, // $D065 + #$D066, // $D066 + #$D067, // $D067 + #$D068, // $D068 + #$D069, // $D069 + #$D06A, // $D06A + #$D06B, // $D06B + #$D06C, // $D06C + #$D06D, // $D06D + #$D06E, // $D06E + #$D06F, // $D06F + #$D070, // $D070 + #$D071, // $D071 + #$D072, // $D072 + #$D073, // $D073 + #$D074, // $D074 + #$D075, // $D075 + #$D076, // $D076 + #$D077, // $D077 + #$D078, // $D078 + #$D079, // $D079 + #$D07A, // $D07A + #$D07B, // $D07B + #$D07C, // $D07C + #$D07D, // $D07D + #$D07E, // $D07E + #$D07F, // $D07F + #$D080, // $D080 + #$D081, // $D081 + #$D082, // $D082 + #$D083, // $D083 + #$D084, // $D084 + #$D085, // $D085 + #$D086, // $D086 + #$D087, // $D087 + #$D088, // $D088 + #$D089, // $D089 + #$D08A, // $D08A + #$D08B, // $D08B + #$D08C, // $D08C + #$D08D, // $D08D + #$D08E, // $D08E + #$D08F, // $D08F + #$D090, // $D090 + #$D091, // $D091 + #$D092, // $D092 + #$D093, // $D093 + #$D094, // $D094 + #$D095, // $D095 + #$D096, // $D096 + #$D097, // $D097 + #$D098, // $D098 + #$D099, // $D099 + #$D09A, // $D09A + #$D09B, // $D09B + #$D09C, // $D09C + #$D09D, // $D09D + #$D09E, // $D09E + #$D09F, // $D09F + #$D0A0, // $D0A0 + #$D0A1, // $D0A1 + #$D0A2, // $D0A2 + #$D0A3, // $D0A3 + #$D0A4, // $D0A4 + #$D0A5, // $D0A5 + #$D0A6, // $D0A6 + #$D0A7, // $D0A7 + #$D0A8, // $D0A8 + #$D0A9, // $D0A9 + #$D0AA, // $D0AA + #$D0AB, // $D0AB + #$D0AC, // $D0AC + #$D0AD, // $D0AD + #$D0AE, // $D0AE + #$D0AF, // $D0AF + #$D0B0, // $D0B0 + #$D0B1, // $D0B1 + #$D0B2, // $D0B2 + #$D0B3, // $D0B3 + #$D0B4, // $D0B4 + #$D0B5, // $D0B5 + #$D0B6, // $D0B6 + #$D0B7, // $D0B7 + #$D0B8, // $D0B8 + #$D0B9, // $D0B9 + #$D0BA, // $D0BA + #$D0BB, // $D0BB + #$D0BC, // $D0BC + #$D0BD, // $D0BD + #$D0BE, // $D0BE + #$D0BF, // $D0BF + #$D0C0, // $D0C0 + #$D0C1, // $D0C1 + #$D0C2, // $D0C2 + #$D0C3, // $D0C3 + #$D0C4, // $D0C4 + #$D0C5, // $D0C5 + #$D0C6, // $D0C6 + #$D0C7, // $D0C7 + #$D0C8, // $D0C8 + #$D0C9, // $D0C9 + #$D0CA, // $D0CA + #$D0CB, // $D0CB + #$D0CC, // $D0CC + #$D0CD, // $D0CD + #$D0CE, // $D0CE + #$D0CF, // $D0CF + #$D0D0, // $D0D0 + #$D0D1, // $D0D1 + #$D0D2, // $D0D2 + #$D0D3, // $D0D3 + #$D0D4, // $D0D4 + #$D0D5, // $D0D5 + #$D0D6, // $D0D6 + #$D0D7, // $D0D7 + #$D0D8, // $D0D8 + #$D0D9, // $D0D9 + #$D0DA, // $D0DA + #$D0DB, // $D0DB + #$D0DC, // $D0DC + #$D0DD, // $D0DD + #$D0DE, // $D0DE + #$D0DF, // $D0DF + #$D0E0, // $D0E0 + #$D0E1, // $D0E1 + #$D0E2, // $D0E2 + #$D0E3, // $D0E3 + #$D0E4, // $D0E4 + #$D0E5, // $D0E5 + #$D0E6, // $D0E6 + #$D0E7, // $D0E7 + #$D0E8, // $D0E8 + #$D0E9, // $D0E9 + #$D0EA, // $D0EA + #$D0EB, // $D0EB + #$D0EC, // $D0EC + #$D0ED, // $D0ED + #$D0EE, // $D0EE + #$D0EF, // $D0EF + #$D0F0, // $D0F0 + #$D0F1, // $D0F1 + #$D0F2, // $D0F2 + #$D0F3, // $D0F3 + #$D0F4, // $D0F4 + #$D0F5, // $D0F5 + #$D0F6, // $D0F6 + #$D0F7, // $D0F7 + #$D0F8, // $D0F8 + #$D0F9, // $D0F9 + #$D0FA, // $D0FA + #$D0FB, // $D0FB + #$D0FC, // $D0FC + #$D0FD, // $D0FD + #$D0FE, // $D0FE + #$D0FF, // $D0FF + #$D100, // $D100 + #$D101, // $D101 + #$D102, // $D102 + #$D103, // $D103 + #$D104, // $D104 + #$D105, // $D105 + #$D106, // $D106 + #$D107, // $D107 + #$D108, // $D108 + #$D109, // $D109 + #$D10A, // $D10A + #$D10B, // $D10B + #$D10C, // $D10C + #$D10D, // $D10D + #$D10E, // $D10E + #$D10F, // $D10F + #$D110, // $D110 + #$D111, // $D111 + #$D112, // $D112 + #$D113, // $D113 + #$D114, // $D114 + #$D115, // $D115 + #$D116, // $D116 + #$D117, // $D117 + #$D118, // $D118 + #$D119, // $D119 + #$D11A, // $D11A + #$D11B, // $D11B + #$D11C, // $D11C + #$D11D, // $D11D + #$D11E, // $D11E + #$D11F, // $D11F + #$D120, // $D120 + #$D121, // $D121 + #$D122, // $D122 + #$D123, // $D123 + #$D124, // $D124 + #$D125, // $D125 + #$D126, // $D126 + #$D127, // $D127 + #$D128, // $D128 + #$D129, // $D129 + #$D12A, // $D12A + #$D12B, // $D12B + #$D12C, // $D12C + #$D12D, // $D12D + #$D12E, // $D12E + #$D12F, // $D12F + #$D130, // $D130 + #$D131, // $D131 + #$D132, // $D132 + #$D133, // $D133 + #$D134, // $D134 + #$D135, // $D135 + #$D136, // $D136 + #$D137, // $D137 + #$D138, // $D138 + #$D139, // $D139 + #$D13A, // $D13A + #$D13B, // $D13B + #$D13C, // $D13C + #$D13D, // $D13D + #$D13E, // $D13E + #$D13F, // $D13F + #$D140, // $D140 + #$D141, // $D141 + #$D142, // $D142 + #$D143, // $D143 + #$D144, // $D144 + #$D145, // $D145 + #$D146, // $D146 + #$D147, // $D147 + #$D148, // $D148 + #$D149, // $D149 + #$D14A, // $D14A + #$D14B, // $D14B + #$D14C, // $D14C + #$D14D, // $D14D + #$D14E, // $D14E + #$D14F, // $D14F + #$D150, // $D150 + #$D151, // $D151 + #$D152, // $D152 + #$D153, // $D153 + #$D154, // $D154 + #$D155, // $D155 + #$D156, // $D156 + #$D157, // $D157 + #$D158, // $D158 + #$D159, // $D159 + #$D15A, // $D15A + #$D15B, // $D15B + #$D15C, // $D15C + #$D15D, // $D15D + #$D15E, // $D15E + #$D15F, // $D15F + #$D160, // $D160 + #$D161, // $D161 + #$D162, // $D162 + #$D163, // $D163 + #$D164, // $D164 + #$D165, // $D165 + #$D166, // $D166 + #$D167, // $D167 + #$D168, // $D168 + #$D169, // $D169 + #$D16A, // $D16A + #$D16B, // $D16B + #$D16C, // $D16C + #$D16D, // $D16D + #$D16E, // $D16E + #$D16F, // $D16F + #$D170, // $D170 + #$D171, // $D171 + #$D172, // $D172 + #$D173, // $D173 + #$D174, // $D174 + #$D175, // $D175 + #$D176, // $D176 + #$D177, // $D177 + #$D178, // $D178 + #$D179, // $D179 + #$D17A, // $D17A + #$D17B, // $D17B + #$D17C, // $D17C + #$D17D, // $D17D + #$D17E, // $D17E + #$D17F, // $D17F + #$D180, // $D180 + #$D181, // $D181 + #$D182, // $D182 + #$D183, // $D183 + #$D184, // $D184 + #$D185, // $D185 + #$D186, // $D186 + #$D187, // $D187 + #$D188, // $D188 + #$D189, // $D189 + #$D18A, // $D18A + #$D18B, // $D18B + #$D18C, // $D18C + #$D18D, // $D18D + #$D18E, // $D18E + #$D18F, // $D18F + #$D190, // $D190 + #$D191, // $D191 + #$D192, // $D192 + #$D193, // $D193 + #$D194, // $D194 + #$D195, // $D195 + #$D196, // $D196 + #$D197, // $D197 + #$D198, // $D198 + #$D199, // $D199 + #$D19A, // $D19A + #$D19B, // $D19B + #$D19C, // $D19C + #$D19D, // $D19D + #$D19E, // $D19E + #$D19F, // $D19F + #$D1A0, // $D1A0 + #$D1A1, // $D1A1 + #$D1A2, // $D1A2 + #$D1A3, // $D1A3 + #$D1A4, // $D1A4 + #$D1A5, // $D1A5 + #$D1A6, // $D1A6 + #$D1A7, // $D1A7 + #$D1A8, // $D1A8 + #$D1A9, // $D1A9 + #$D1AA, // $D1AA + #$D1AB, // $D1AB + #$D1AC, // $D1AC + #$D1AD, // $D1AD + #$D1AE, // $D1AE + #$D1AF, // $D1AF + #$D1B0, // $D1B0 + #$D1B1, // $D1B1 + #$D1B2, // $D1B2 + #$D1B3, // $D1B3 + #$D1B4, // $D1B4 + #$D1B5, // $D1B5 + #$D1B6, // $D1B6 + #$D1B7, // $D1B7 + #$D1B8, // $D1B8 + #$D1B9, // $D1B9 + #$D1BA, // $D1BA + #$D1BB, // $D1BB + #$D1BC, // $D1BC + #$D1BD, // $D1BD + #$D1BE, // $D1BE + #$D1BF, // $D1BF + #$D1C0, // $D1C0 + #$D1C1, // $D1C1 + #$D1C2, // $D1C2 + #$D1C3, // $D1C3 + #$D1C4, // $D1C4 + #$D1C5, // $D1C5 + #$D1C6, // $D1C6 + #$D1C7, // $D1C7 + #$D1C8, // $D1C8 + #$D1C9, // $D1C9 + #$D1CA, // $D1CA + #$D1CB, // $D1CB + #$D1CC, // $D1CC + #$D1CD, // $D1CD + #$D1CE, // $D1CE + #$D1CF, // $D1CF + #$D1D0, // $D1D0 + #$D1D1, // $D1D1 + #$D1D2, // $D1D2 + #$D1D3, // $D1D3 + #$D1D4, // $D1D4 + #$D1D5, // $D1D5 + #$D1D6, // $D1D6 + #$D1D7, // $D1D7 + #$D1D8, // $D1D8 + #$D1D9, // $D1D9 + #$D1DA, // $D1DA + #$D1DB, // $D1DB + #$D1DC, // $D1DC + #$D1DD, // $D1DD + #$D1DE, // $D1DE + #$D1DF, // $D1DF + #$D1E0, // $D1E0 + #$D1E1, // $D1E1 + #$D1E2, // $D1E2 + #$D1E3, // $D1E3 + #$D1E4, // $D1E4 + #$D1E5, // $D1E5 + #$D1E6, // $D1E6 + #$D1E7, // $D1E7 + #$D1E8, // $D1E8 + #$D1E9, // $D1E9 + #$D1EA, // $D1EA + #$D1EB, // $D1EB + #$D1EC, // $D1EC + #$D1ED, // $D1ED + #$D1EE, // $D1EE + #$D1EF, // $D1EF + #$D1F0, // $D1F0 + #$D1F1, // $D1F1 + #$D1F2, // $D1F2 + #$D1F3, // $D1F3 + #$D1F4, // $D1F4 + #$D1F5, // $D1F5 + #$D1F6, // $D1F6 + #$D1F7, // $D1F7 + #$D1F8, // $D1F8 + #$D1F9, // $D1F9 + #$D1FA, // $D1FA + #$D1FB, // $D1FB + #$D1FC, // $D1FC + #$D1FD, // $D1FD + #$D1FE, // $D1FE + #$D1FF, // $D1FF + #$D200, // $D200 + #$D201, // $D201 + #$D202, // $D202 + #$D203, // $D203 + #$D204, // $D204 + #$D205, // $D205 + #$D206, // $D206 + #$D207, // $D207 + #$D208, // $D208 + #$D209, // $D209 + #$D20A, // $D20A + #$D20B, // $D20B + #$D20C, // $D20C + #$D20D, // $D20D + #$D20E, // $D20E + #$D20F, // $D20F + #$D210, // $D210 + #$D211, // $D211 + #$D212, // $D212 + #$D213, // $D213 + #$D214, // $D214 + #$D215, // $D215 + #$D216, // $D216 + #$D217, // $D217 + #$D218, // $D218 + #$D219, // $D219 + #$D21A, // $D21A + #$D21B, // $D21B + #$D21C, // $D21C + #$D21D, // $D21D + #$D21E, // $D21E + #$D21F, // $D21F + #$D220, // $D220 + #$D221, // $D221 + #$D222, // $D222 + #$D223, // $D223 + #$D224, // $D224 + #$D225, // $D225 + #$D226, // $D226 + #$D227, // $D227 + #$D228, // $D228 + #$D229, // $D229 + #$D22A, // $D22A + #$D22B, // $D22B + #$D22C, // $D22C + #$D22D, // $D22D + #$D22E, // $D22E + #$D22F, // $D22F + #$D230, // $D230 + #$D231, // $D231 + #$D232, // $D232 + #$D233, // $D233 + #$D234, // $D234 + #$D235, // $D235 + #$D236, // $D236 + #$D237, // $D237 + #$D238, // $D238 + #$D239, // $D239 + #$D23A, // $D23A + #$D23B, // $D23B + #$D23C, // $D23C + #$D23D, // $D23D + #$D23E, // $D23E + #$D23F, // $D23F + #$D240, // $D240 + #$D241, // $D241 + #$D242, // $D242 + #$D243, // $D243 + #$D244, // $D244 + #$D245, // $D245 + #$D246, // $D246 + #$D247, // $D247 + #$D248, // $D248 + #$D249, // $D249 + #$D24A, // $D24A + #$D24B, // $D24B + #$D24C, // $D24C + #$D24D, // $D24D + #$D24E, // $D24E + #$D24F, // $D24F + #$D250, // $D250 + #$D251, // $D251 + #$D252, // $D252 + #$D253, // $D253 + #$D254, // $D254 + #$D255, // $D255 + #$D256, // $D256 + #$D257, // $D257 + #$D258, // $D258 + #$D259, // $D259 + #$D25A, // $D25A + #$D25B, // $D25B + #$D25C, // $D25C + #$D25D, // $D25D + #$D25E, // $D25E + #$D25F, // $D25F + #$D260, // $D260 + #$D261, // $D261 + #$D262, // $D262 + #$D263, // $D263 + #$D264, // $D264 + #$D265, // $D265 + #$D266, // $D266 + #$D267, // $D267 + #$D268, // $D268 + #$D269, // $D269 + #$D26A, // $D26A + #$D26B, // $D26B + #$D26C, // $D26C + #$D26D, // $D26D + #$D26E, // $D26E + #$D26F, // $D26F + #$D270, // $D270 + #$D271, // $D271 + #$D272, // $D272 + #$D273, // $D273 + #$D274, // $D274 + #$D275, // $D275 + #$D276, // $D276 + #$D277, // $D277 + #$D278, // $D278 + #$D279, // $D279 + #$D27A, // $D27A + #$D27B, // $D27B + #$D27C, // $D27C + #$D27D, // $D27D + #$D27E, // $D27E + #$D27F, // $D27F + #$D280, // $D280 + #$D281, // $D281 + #$D282, // $D282 + #$D283, // $D283 + #$D284, // $D284 + #$D285, // $D285 + #$D286, // $D286 + #$D287, // $D287 + #$D288, // $D288 + #$D289, // $D289 + #$D28A, // $D28A + #$D28B, // $D28B + #$D28C, // $D28C + #$D28D, // $D28D + #$D28E, // $D28E + #$D28F, // $D28F + #$D290, // $D290 + #$D291, // $D291 + #$D292, // $D292 + #$D293, // $D293 + #$D294, // $D294 + #$D295, // $D295 + #$D296, // $D296 + #$D297, // $D297 + #$D298, // $D298 + #$D299, // $D299 + #$D29A, // $D29A + #$D29B, // $D29B + #$D29C, // $D29C + #$D29D, // $D29D + #$D29E, // $D29E + #$D29F, // $D29F + #$D2A0, // $D2A0 + #$D2A1, // $D2A1 + #$D2A2, // $D2A2 + #$D2A3, // $D2A3 + #$D2A4, // $D2A4 + #$D2A5, // $D2A5 + #$D2A6, // $D2A6 + #$D2A7, // $D2A7 + #$D2A8, // $D2A8 + #$D2A9, // $D2A9 + #$D2AA, // $D2AA + #$D2AB, // $D2AB + #$D2AC, // $D2AC + #$D2AD, // $D2AD + #$D2AE, // $D2AE + #$D2AF, // $D2AF + #$D2B0, // $D2B0 + #$D2B1, // $D2B1 + #$D2B2, // $D2B2 + #$D2B3, // $D2B3 + #$D2B4, // $D2B4 + #$D2B5, // $D2B5 + #$D2B6, // $D2B6 + #$D2B7, // $D2B7 + #$D2B8, // $D2B8 + #$D2B9, // $D2B9 + #$D2BA, // $D2BA + #$D2BB, // $D2BB + #$D2BC, // $D2BC + #$D2BD, // $D2BD + #$D2BE, // $D2BE + #$D2BF, // $D2BF + #$D2C0, // $D2C0 + #$D2C1, // $D2C1 + #$D2C2, // $D2C2 + #$D2C3, // $D2C3 + #$D2C4, // $D2C4 + #$D2C5, // $D2C5 + #$D2C6, // $D2C6 + #$D2C7, // $D2C7 + #$D2C8, // $D2C8 + #$D2C9, // $D2C9 + #$D2CA, // $D2CA + #$D2CB, // $D2CB + #$D2CC, // $D2CC + #$D2CD, // $D2CD + #$D2CE, // $D2CE + #$D2CF, // $D2CF + #$D2D0, // $D2D0 + #$D2D1, // $D2D1 + #$D2D2, // $D2D2 + #$D2D3, // $D2D3 + #$D2D4, // $D2D4 + #$D2D5, // $D2D5 + #$D2D6, // $D2D6 + #$D2D7, // $D2D7 + #$D2D8, // $D2D8 + #$D2D9, // $D2D9 + #$D2DA, // $D2DA + #$D2DB, // $D2DB + #$D2DC, // $D2DC + #$D2DD, // $D2DD + #$D2DE, // $D2DE + #$D2DF, // $D2DF + #$D2E0, // $D2E0 + #$D2E1, // $D2E1 + #$D2E2, // $D2E2 + #$D2E3, // $D2E3 + #$D2E4, // $D2E4 + #$D2E5, // $D2E5 + #$D2E6, // $D2E6 + #$D2E7, // $D2E7 + #$D2E8, // $D2E8 + #$D2E9, // $D2E9 + #$D2EA, // $D2EA + #$D2EB, // $D2EB + #$D2EC, // $D2EC + #$D2ED, // $D2ED + #$D2EE, // $D2EE + #$D2EF, // $D2EF + #$D2F0, // $D2F0 + #$D2F1, // $D2F1 + #$D2F2, // $D2F2 + #$D2F3, // $D2F3 + #$D2F4, // $D2F4 + #$D2F5, // $D2F5 + #$D2F6, // $D2F6 + #$D2F7, // $D2F7 + #$D2F8, // $D2F8 + #$D2F9, // $D2F9 + #$D2FA, // $D2FA + #$D2FB, // $D2FB + #$D2FC, // $D2FC + #$D2FD, // $D2FD + #$D2FE, // $D2FE + #$D2FF, // $D2FF + #$D300, // $D300 + #$D301, // $D301 + #$D302, // $D302 + #$D303, // $D303 + #$D304, // $D304 + #$D305, // $D305 + #$D306, // $D306 + #$D307, // $D307 + #$D308, // $D308 + #$D309, // $D309 + #$D30A, // $D30A + #$D30B, // $D30B + #$D30C, // $D30C + #$D30D, // $D30D + #$D30E, // $D30E + #$D30F, // $D30F + #$D310, // $D310 + #$D311, // $D311 + #$D312, // $D312 + #$D313, // $D313 + #$D314, // $D314 + #$D315, // $D315 + #$D316, // $D316 + #$D317, // $D317 + #$D318, // $D318 + #$D319, // $D319 + #$D31A, // $D31A + #$D31B, // $D31B + #$D31C, // $D31C + #$D31D, // $D31D + #$D31E, // $D31E + #$D31F, // $D31F + #$D320, // $D320 + #$D321, // $D321 + #$D322, // $D322 + #$D323, // $D323 + #$D324, // $D324 + #$D325, // $D325 + #$D326, // $D326 + #$D327, // $D327 + #$D328, // $D328 + #$D329, // $D329 + #$D32A, // $D32A + #$D32B, // $D32B + #$D32C, // $D32C + #$D32D, // $D32D + #$D32E, // $D32E + #$D32F, // $D32F + #$D330, // $D330 + #$D331, // $D331 + #$D332, // $D332 + #$D333, // $D333 + #$D334, // $D334 + #$D335, // $D335 + #$D336, // $D336 + #$D337, // $D337 + #$D338, // $D338 + #$D339, // $D339 + #$D33A, // $D33A + #$D33B, // $D33B + #$D33C, // $D33C + #$D33D, // $D33D + #$D33E, // $D33E + #$D33F, // $D33F + #$D340, // $D340 + #$D341, // $D341 + #$D342, // $D342 + #$D343, // $D343 + #$D344, // $D344 + #$D345, // $D345 + #$D346, // $D346 + #$D347, // $D347 + #$D348, // $D348 + #$D349, // $D349 + #$D34A, // $D34A + #$D34B, // $D34B + #$D34C, // $D34C + #$D34D, // $D34D + #$D34E, // $D34E + #$D34F, // $D34F + #$D350, // $D350 + #$D351, // $D351 + #$D352, // $D352 + #$D353, // $D353 + #$D354, // $D354 + #$D355, // $D355 + #$D356, // $D356 + #$D357, // $D357 + #$D358, // $D358 + #$D359, // $D359 + #$D35A, // $D35A + #$D35B, // $D35B + #$D35C, // $D35C + #$D35D, // $D35D + #$D35E, // $D35E + #$D35F, // $D35F + #$D360, // $D360 + #$D361, // $D361 + #$D362, // $D362 + #$D363, // $D363 + #$D364, // $D364 + #$D365, // $D365 + #$D366, // $D366 + #$D367, // $D367 + #$D368, // $D368 + #$D369, // $D369 + #$D36A, // $D36A + #$D36B, // $D36B + #$D36C, // $D36C + #$D36D, // $D36D + #$D36E, // $D36E + #$D36F, // $D36F + #$D370, // $D370 + #$D371, // $D371 + #$D372, // $D372 + #$D373, // $D373 + #$D374, // $D374 + #$D375, // $D375 + #$D376, // $D376 + #$D377, // $D377 + #$D378, // $D378 + #$D379, // $D379 + #$D37A, // $D37A + #$D37B, // $D37B + #$D37C, // $D37C + #$D37D, // $D37D + #$D37E, // $D37E + #$D37F, // $D37F + #$D380, // $D380 + #$D381, // $D381 + #$D382, // $D382 + #$D383, // $D383 + #$D384, // $D384 + #$D385, // $D385 + #$D386, // $D386 + #$D387, // $D387 + #$D388, // $D388 + #$D389, // $D389 + #$D38A, // $D38A + #$D38B, // $D38B + #$D38C, // $D38C + #$D38D, // $D38D + #$D38E, // $D38E + #$D38F, // $D38F + #$D390, // $D390 + #$D391, // $D391 + #$D392, // $D392 + #$D393, // $D393 + #$D394, // $D394 + #$D395, // $D395 + #$D396, // $D396 + #$D397, // $D397 + #$D398, // $D398 + #$D399, // $D399 + #$D39A, // $D39A + #$D39B, // $D39B + #$D39C, // $D39C + #$D39D, // $D39D + #$D39E, // $D39E + #$D39F, // $D39F + #$D3A0, // $D3A0 + #$D3A1, // $D3A1 + #$D3A2, // $D3A2 + #$D3A3, // $D3A3 + #$D3A4, // $D3A4 + #$D3A5, // $D3A5 + #$D3A6, // $D3A6 + #$D3A7, // $D3A7 + #$D3A8, // $D3A8 + #$D3A9, // $D3A9 + #$D3AA, // $D3AA + #$D3AB, // $D3AB + #$D3AC, // $D3AC + #$D3AD, // $D3AD + #$D3AE, // $D3AE + #$D3AF, // $D3AF + #$D3B0, // $D3B0 + #$D3B1, // $D3B1 + #$D3B2, // $D3B2 + #$D3B3, // $D3B3 + #$D3B4, // $D3B4 + #$D3B5, // $D3B5 + #$D3B6, // $D3B6 + #$D3B7, // $D3B7 + #$D3B8, // $D3B8 + #$D3B9, // $D3B9 + #$D3BA, // $D3BA + #$D3BB, // $D3BB + #$D3BC, // $D3BC + #$D3BD, // $D3BD + #$D3BE, // $D3BE + #$D3BF, // $D3BF + #$D3C0, // $D3C0 + #$D3C1, // $D3C1 + #$D3C2, // $D3C2 + #$D3C3, // $D3C3 + #$D3C4, // $D3C4 + #$D3C5, // $D3C5 + #$D3C6, // $D3C6 + #$D3C7, // $D3C7 + #$D3C8, // $D3C8 + #$D3C9, // $D3C9 + #$D3CA, // $D3CA + #$D3CB, // $D3CB + #$D3CC, // $D3CC + #$D3CD, // $D3CD + #$D3CE, // $D3CE + #$D3CF, // $D3CF + #$D3D0, // $D3D0 + #$D3D1, // $D3D1 + #$D3D2, // $D3D2 + #$D3D3, // $D3D3 + #$D3D4, // $D3D4 + #$D3D5, // $D3D5 + #$D3D6, // $D3D6 + #$D3D7, // $D3D7 + #$D3D8, // $D3D8 + #$D3D9, // $D3D9 + #$D3DA, // $D3DA + #$D3DB, // $D3DB + #$D3DC, // $D3DC + #$D3DD, // $D3DD + #$D3DE, // $D3DE + #$D3DF, // $D3DF + #$D3E0, // $D3E0 + #$D3E1, // $D3E1 + #$D3E2, // $D3E2 + #$D3E3, // $D3E3 + #$D3E4, // $D3E4 + #$D3E5, // $D3E5 + #$D3E6, // $D3E6 + #$D3E7, // $D3E7 + #$D3E8, // $D3E8 + #$D3E9, // $D3E9 + #$D3EA, // $D3EA + #$D3EB, // $D3EB + #$D3EC, // $D3EC + #$D3ED, // $D3ED + #$D3EE, // $D3EE + #$D3EF, // $D3EF + #$D3F0, // $D3F0 + #$D3F1, // $D3F1 + #$D3F2, // $D3F2 + #$D3F3, // $D3F3 + #$D3F4, // $D3F4 + #$D3F5, // $D3F5 + #$D3F6, // $D3F6 + #$D3F7, // $D3F7 + #$D3F8, // $D3F8 + #$D3F9, // $D3F9 + #$D3FA, // $D3FA + #$D3FB, // $D3FB + #$D3FC, // $D3FC + #$D3FD, // $D3FD + #$D3FE, // $D3FE + #$D3FF, // $D3FF + #$D400, // $D400 + #$D401, // $D401 + #$D402, // $D402 + #$D403, // $D403 + #$D404, // $D404 + #$D405, // $D405 + #$D406, // $D406 + #$D407, // $D407 + #$D408, // $D408 + #$D409, // $D409 + #$D40A, // $D40A + #$D40B, // $D40B + #$D40C, // $D40C + #$D40D, // $D40D + #$D40E, // $D40E + #$D40F, // $D40F + #$D410, // $D410 + #$D411, // $D411 + #$D412, // $D412 + #$D413, // $D413 + #$D414, // $D414 + #$D415, // $D415 + #$D416, // $D416 + #$D417, // $D417 + #$D418, // $D418 + #$D419, // $D419 + #$D41A, // $D41A + #$D41B, // $D41B + #$D41C, // $D41C + #$D41D, // $D41D + #$D41E, // $D41E + #$D41F, // $D41F + #$D420, // $D420 + #$D421, // $D421 + #$D422, // $D422 + #$D423, // $D423 + #$D424, // $D424 + #$D425, // $D425 + #$D426, // $D426 + #$D427, // $D427 + #$D428, // $D428 + #$D429, // $D429 + #$D42A, // $D42A + #$D42B, // $D42B + #$D42C, // $D42C + #$D42D, // $D42D + #$D42E, // $D42E + #$D42F, // $D42F + #$D430, // $D430 + #$D431, // $D431 + #$D432, // $D432 + #$D433, // $D433 + #$D434, // $D434 + #$D435, // $D435 + #$D436, // $D436 + #$D437, // $D437 + #$D438, // $D438 + #$D439, // $D439 + #$D43A, // $D43A + #$D43B, // $D43B + #$D43C, // $D43C + #$D43D, // $D43D + #$D43E, // $D43E + #$D43F, // $D43F + #$D440, // $D440 + #$D441, // $D441 + #$D442, // $D442 + #$D443, // $D443 + #$D444, // $D444 + #$D445, // $D445 + #$D446, // $D446 + #$D447, // $D447 + #$D448, // $D448 + #$D449, // $D449 + #$D44A, // $D44A + #$D44B, // $D44B + #$D44C, // $D44C + #$D44D, // $D44D + #$D44E, // $D44E + #$D44F, // $D44F + #$D450, // $D450 + #$D451, // $D451 + #$D452, // $D452 + #$D453, // $D453 + #$D454, // $D454 + #$D455, // $D455 + #$D456, // $D456 + #$D457, // $D457 + #$D458, // $D458 + #$D459, // $D459 + #$D45A, // $D45A + #$D45B, // $D45B + #$D45C, // $D45C + #$D45D, // $D45D + #$D45E, // $D45E + #$D45F, // $D45F + #$D460, // $D460 + #$D461, // $D461 + #$D462, // $D462 + #$D463, // $D463 + #$D464, // $D464 + #$D465, // $D465 + #$D466, // $D466 + #$D467, // $D467 + #$D468, // $D468 + #$D469, // $D469 + #$D46A, // $D46A + #$D46B, // $D46B + #$D46C, // $D46C + #$D46D, // $D46D + #$D46E, // $D46E + #$D46F, // $D46F + #$D470, // $D470 + #$D471, // $D471 + #$D472, // $D472 + #$D473, // $D473 + #$D474, // $D474 + #$D475, // $D475 + #$D476, // $D476 + #$D477, // $D477 + #$D478, // $D478 + #$D479, // $D479 + #$D47A, // $D47A + #$D47B, // $D47B + #$D47C, // $D47C + #$D47D, // $D47D + #$D47E, // $D47E + #$D47F, // $D47F + #$D480, // $D480 + #$D481, // $D481 + #$D482, // $D482 + #$D483, // $D483 + #$D484, // $D484 + #$D485, // $D485 + #$D486, // $D486 + #$D487, // $D487 + #$D488, // $D488 + #$D489, // $D489 + #$D48A, // $D48A + #$D48B, // $D48B + #$D48C, // $D48C + #$D48D, // $D48D + #$D48E, // $D48E + #$D48F, // $D48F + #$D490, // $D490 + #$D491, // $D491 + #$D492, // $D492 + #$D493, // $D493 + #$D494, // $D494 + #$D495, // $D495 + #$D496, // $D496 + #$D497, // $D497 + #$D498, // $D498 + #$D499, // $D499 + #$D49A, // $D49A + #$D49B, // $D49B + #$D49C, // $D49C + #$D49D, // $D49D + #$D49E, // $D49E + #$D49F, // $D49F + #$D4A0, // $D4A0 + #$D4A1, // $D4A1 + #$D4A2, // $D4A2 + #$D4A3, // $D4A3 + #$D4A4, // $D4A4 + #$D4A5, // $D4A5 + #$D4A6, // $D4A6 + #$D4A7, // $D4A7 + #$D4A8, // $D4A8 + #$D4A9, // $D4A9 + #$D4AA, // $D4AA + #$D4AB, // $D4AB + #$D4AC, // $D4AC + #$D4AD, // $D4AD + #$D4AE, // $D4AE + #$D4AF, // $D4AF + #$D4B0, // $D4B0 + #$D4B1, // $D4B1 + #$D4B2, // $D4B2 + #$D4B3, // $D4B3 + #$D4B4, // $D4B4 + #$D4B5, // $D4B5 + #$D4B6, // $D4B6 + #$D4B7, // $D4B7 + #$D4B8, // $D4B8 + #$D4B9, // $D4B9 + #$D4BA, // $D4BA + #$D4BB, // $D4BB + #$D4BC, // $D4BC + #$D4BD, // $D4BD + #$D4BE, // $D4BE + #$D4BF, // $D4BF + #$D4C0, // $D4C0 + #$D4C1, // $D4C1 + #$D4C2, // $D4C2 + #$D4C3, // $D4C3 + #$D4C4, // $D4C4 + #$D4C5, // $D4C5 + #$D4C6, // $D4C6 + #$D4C7, // $D4C7 + #$D4C8, // $D4C8 + #$D4C9, // $D4C9 + #$D4CA, // $D4CA + #$D4CB, // $D4CB + #$D4CC, // $D4CC + #$D4CD, // $D4CD + #$D4CE, // $D4CE + #$D4CF, // $D4CF + #$D4D0, // $D4D0 + #$D4D1, // $D4D1 + #$D4D2, // $D4D2 + #$D4D3, // $D4D3 + #$D4D4, // $D4D4 + #$D4D5, // $D4D5 + #$D4D6, // $D4D6 + #$D4D7, // $D4D7 + #$D4D8, // $D4D8 + #$D4D9, // $D4D9 + #$D4DA, // $D4DA + #$D4DB, // $D4DB + #$D4DC, // $D4DC + #$D4DD, // $D4DD + #$D4DE, // $D4DE + #$D4DF, // $D4DF + #$D4E0, // $D4E0 + #$D4E1, // $D4E1 + #$D4E2, // $D4E2 + #$D4E3, // $D4E3 + #$D4E4, // $D4E4 + #$D4E5, // $D4E5 + #$D4E6, // $D4E6 + #$D4E7, // $D4E7 + #$D4E8, // $D4E8 + #$D4E9, // $D4E9 + #$D4EA, // $D4EA + #$D4EB, // $D4EB + #$D4EC, // $D4EC + #$D4ED, // $D4ED + #$D4EE, // $D4EE + #$D4EF, // $D4EF + #$D4F0, // $D4F0 + #$D4F1, // $D4F1 + #$D4F2, // $D4F2 + #$D4F3, // $D4F3 + #$D4F4, // $D4F4 + #$D4F5, // $D4F5 + #$D4F6, // $D4F6 + #$D4F7, // $D4F7 + #$D4F8, // $D4F8 + #$D4F9, // $D4F9 + #$D4FA, // $D4FA + #$D4FB, // $D4FB + #$D4FC, // $D4FC + #$D4FD, // $D4FD + #$D4FE, // $D4FE + #$D4FF, // $D4FF + #$D500, // $D500 + #$D501, // $D501 + #$D502, // $D502 + #$D503, // $D503 + #$D504, // $D504 + #$D505, // $D505 + #$D506, // $D506 + #$D507, // $D507 + #$D508, // $D508 + #$D509, // $D509 + #$D50A, // $D50A + #$D50B, // $D50B + #$D50C, // $D50C + #$D50D, // $D50D + #$D50E, // $D50E + #$D50F, // $D50F + #$D510, // $D510 + #$D511, // $D511 + #$D512, // $D512 + #$D513, // $D513 + #$D514, // $D514 + #$D515, // $D515 + #$D516, // $D516 + #$D517, // $D517 + #$D518, // $D518 + #$D519, // $D519 + #$D51A, // $D51A + #$D51B, // $D51B + #$D51C, // $D51C + #$D51D, // $D51D + #$D51E, // $D51E + #$D51F, // $D51F + #$D520, // $D520 + #$D521, // $D521 + #$D522, // $D522 + #$D523, // $D523 + #$D524, // $D524 + #$D525, // $D525 + #$D526, // $D526 + #$D527, // $D527 + #$D528, // $D528 + #$D529, // $D529 + #$D52A, // $D52A + #$D52B, // $D52B + #$D52C, // $D52C + #$D52D, // $D52D + #$D52E, // $D52E + #$D52F, // $D52F + #$D530, // $D530 + #$D531, // $D531 + #$D532, // $D532 + #$D533, // $D533 + #$D534, // $D534 + #$D535, // $D535 + #$D536, // $D536 + #$D537, // $D537 + #$D538, // $D538 + #$D539, // $D539 + #$D53A, // $D53A + #$D53B, // $D53B + #$D53C, // $D53C + #$D53D, // $D53D + #$D53E, // $D53E + #$D53F, // $D53F + #$D540, // $D540 + #$D541, // $D541 + #$D542, // $D542 + #$D543, // $D543 + #$D544, // $D544 + #$D545, // $D545 + #$D546, // $D546 + #$D547, // $D547 + #$D548, // $D548 + #$D549, // $D549 + #$D54A, // $D54A + #$D54B, // $D54B + #$D54C, // $D54C + #$D54D, // $D54D + #$D54E, // $D54E + #$D54F, // $D54F + #$D550, // $D550 + #$D551, // $D551 + #$D552, // $D552 + #$D553, // $D553 + #$D554, // $D554 + #$D555, // $D555 + #$D556, // $D556 + #$D557, // $D557 + #$D558, // $D558 + #$D559, // $D559 + #$D55A, // $D55A + #$D55B, // $D55B + #$D55C, // $D55C + #$D55D, // $D55D + #$D55E, // $D55E + #$D55F, // $D55F + #$D560, // $D560 + #$D561, // $D561 + #$D562, // $D562 + #$D563, // $D563 + #$D564, // $D564 + #$D565, // $D565 + #$D566, // $D566 + #$D567, // $D567 + #$D568, // $D568 + #$D569, // $D569 + #$D56A, // $D56A + #$D56B, // $D56B + #$D56C, // $D56C + #$D56D, // $D56D + #$D56E, // $D56E + #$D56F, // $D56F + #$D570, // $D570 + #$D571, // $D571 + #$D572, // $D572 + #$D573, // $D573 + #$D574, // $D574 + #$D575, // $D575 + #$D576, // $D576 + #$D577, // $D577 + #$D578, // $D578 + #$D579, // $D579 + #$D57A, // $D57A + #$D57B, // $D57B + #$D57C, // $D57C + #$D57D, // $D57D + #$D57E, // $D57E + #$D57F, // $D57F + #$D580, // $D580 + #$D581, // $D581 + #$D582, // $D582 + #$D583, // $D583 + #$D584, // $D584 + #$D585, // $D585 + #$D586, // $D586 + #$D587, // $D587 + #$D588, // $D588 + #$D589, // $D589 + #$D58A, // $D58A + #$D58B, // $D58B + #$D58C, // $D58C + #$D58D, // $D58D + #$D58E, // $D58E + #$D58F, // $D58F + #$D590, // $D590 + #$D591, // $D591 + #$D592, // $D592 + #$D593, // $D593 + #$D594, // $D594 + #$D595, // $D595 + #$D596, // $D596 + #$D597, // $D597 + #$D598, // $D598 + #$D599, // $D599 + #$D59A, // $D59A + #$D59B, // $D59B + #$D59C, // $D59C + #$D59D, // $D59D + #$D59E, // $D59E + #$D59F, // $D59F + #$D5A0, // $D5A0 + #$D5A1, // $D5A1 + #$D5A2, // $D5A2 + #$D5A3, // $D5A3 + #$D5A4, // $D5A4 + #$D5A5, // $D5A5 + #$D5A6, // $D5A6 + #$D5A7, // $D5A7 + #$D5A8, // $D5A8 + #$D5A9, // $D5A9 + #$D5AA, // $D5AA + #$D5AB, // $D5AB + #$D5AC, // $D5AC + #$D5AD, // $D5AD + #$D5AE, // $D5AE + #$D5AF, // $D5AF + #$D5B0, // $D5B0 + #$D5B1, // $D5B1 + #$D5B2, // $D5B2 + #$D5B3, // $D5B3 + #$D5B4, // $D5B4 + #$D5B5, // $D5B5 + #$D5B6, // $D5B6 + #$D5B7, // $D5B7 + #$D5B8, // $D5B8 + #$D5B9, // $D5B9 + #$D5BA, // $D5BA + #$D5BB, // $D5BB + #$D5BC, // $D5BC + #$D5BD, // $D5BD + #$D5BE, // $D5BE + #$D5BF, // $D5BF + #$D5C0, // $D5C0 + #$D5C1, // $D5C1 + #$D5C2, // $D5C2 + #$D5C3, // $D5C3 + #$D5C4, // $D5C4 + #$D5C5, // $D5C5 + #$D5C6, // $D5C6 + #$D5C7, // $D5C7 + #$D5C8, // $D5C8 + #$D5C9, // $D5C9 + #$D5CA, // $D5CA + #$D5CB, // $D5CB + #$D5CC, // $D5CC + #$D5CD, // $D5CD + #$D5CE, // $D5CE + #$D5CF, // $D5CF + #$D5D0, // $D5D0 + #$D5D1, // $D5D1 + #$D5D2, // $D5D2 + #$D5D3, // $D5D3 + #$D5D4, // $D5D4 + #$D5D5, // $D5D5 + #$D5D6, // $D5D6 + #$D5D7, // $D5D7 + #$D5D8, // $D5D8 + #$D5D9, // $D5D9 + #$D5DA, // $D5DA + #$D5DB, // $D5DB + #$D5DC, // $D5DC + #$D5DD, // $D5DD + #$D5DE, // $D5DE + #$D5DF, // $D5DF + #$D5E0, // $D5E0 + #$D5E1, // $D5E1 + #$D5E2, // $D5E2 + #$D5E3, // $D5E3 + #$D5E4, // $D5E4 + #$D5E5, // $D5E5 + #$D5E6, // $D5E6 + #$D5E7, // $D5E7 + #$D5E8, // $D5E8 + #$D5E9, // $D5E9 + #$D5EA, // $D5EA + #$D5EB, // $D5EB + #$D5EC, // $D5EC + #$D5ED, // $D5ED + #$D5EE, // $D5EE + #$D5EF, // $D5EF + #$D5F0, // $D5F0 + #$D5F1, // $D5F1 + #$D5F2, // $D5F2 + #$D5F3, // $D5F3 + #$D5F4, // $D5F4 + #$D5F5, // $D5F5 + #$D5F6, // $D5F6 + #$D5F7, // $D5F7 + #$D5F8, // $D5F8 + #$D5F9, // $D5F9 + #$D5FA, // $D5FA + #$D5FB, // $D5FB + #$D5FC, // $D5FC + #$D5FD, // $D5FD + #$D5FE, // $D5FE + #$D5FF, // $D5FF + #$D600, // $D600 + #$D601, // $D601 + #$D602, // $D602 + #$D603, // $D603 + #$D604, // $D604 + #$D605, // $D605 + #$D606, // $D606 + #$D607, // $D607 + #$D608, // $D608 + #$D609, // $D609 + #$D60A, // $D60A + #$D60B, // $D60B + #$D60C, // $D60C + #$D60D, // $D60D + #$D60E, // $D60E + #$D60F, // $D60F + #$D610, // $D610 + #$D611, // $D611 + #$D612, // $D612 + #$D613, // $D613 + #$D614, // $D614 + #$D615, // $D615 + #$D616, // $D616 + #$D617, // $D617 + #$D618, // $D618 + #$D619, // $D619 + #$D61A, // $D61A + #$D61B, // $D61B + #$D61C, // $D61C + #$D61D, // $D61D + #$D61E, // $D61E + #$D61F, // $D61F + #$D620, // $D620 + #$D621, // $D621 + #$D622, // $D622 + #$D623, // $D623 + #$D624, // $D624 + #$D625, // $D625 + #$D626, // $D626 + #$D627, // $D627 + #$D628, // $D628 + #$D629, // $D629 + #$D62A, // $D62A + #$D62B, // $D62B + #$D62C, // $D62C + #$D62D, // $D62D + #$D62E, // $D62E + #$D62F, // $D62F + #$D630, // $D630 + #$D631, // $D631 + #$D632, // $D632 + #$D633, // $D633 + #$D634, // $D634 + #$D635, // $D635 + #$D636, // $D636 + #$D637, // $D637 + #$D638, // $D638 + #$D639, // $D639 + #$D63A, // $D63A + #$D63B, // $D63B + #$D63C, // $D63C + #$D63D, // $D63D + #$D63E, // $D63E + #$D63F, // $D63F + #$D640, // $D640 + #$D641, // $D641 + #$D642, // $D642 + #$D643, // $D643 + #$D644, // $D644 + #$D645, // $D645 + #$D646, // $D646 + #$D647, // $D647 + #$D648, // $D648 + #$D649, // $D649 + #$D64A, // $D64A + #$D64B, // $D64B + #$D64C, // $D64C + #$D64D, // $D64D + #$D64E, // $D64E + #$D64F, // $D64F + #$D650, // $D650 + #$D651, // $D651 + #$D652, // $D652 + #$D653, // $D653 + #$D654, // $D654 + #$D655, // $D655 + #$D656, // $D656 + #$D657, // $D657 + #$D658, // $D658 + #$D659, // $D659 + #$D65A, // $D65A + #$D65B, // $D65B + #$D65C, // $D65C + #$D65D, // $D65D + #$D65E, // $D65E + #$D65F, // $D65F + #$D660, // $D660 + #$D661, // $D661 + #$D662, // $D662 + #$D663, // $D663 + #$D664, // $D664 + #$D665, // $D665 + #$D666, // $D666 + #$D667, // $D667 + #$D668, // $D668 + #$D669, // $D669 + #$D66A, // $D66A + #$D66B, // $D66B + #$D66C, // $D66C + #$D66D, // $D66D + #$D66E, // $D66E + #$D66F, // $D66F + #$D670, // $D670 + #$D671, // $D671 + #$D672, // $D672 + #$D673, // $D673 + #$D674, // $D674 + #$D675, // $D675 + #$D676, // $D676 + #$D677, // $D677 + #$D678, // $D678 + #$D679, // $D679 + #$D67A, // $D67A + #$D67B, // $D67B + #$D67C, // $D67C + #$D67D, // $D67D + #$D67E, // $D67E + #$D67F, // $D67F + #$D680, // $D680 + #$D681, // $D681 + #$D682, // $D682 + #$D683, // $D683 + #$D684, // $D684 + #$D685, // $D685 + #$D686, // $D686 + #$D687, // $D687 + #$D688, // $D688 + #$D689, // $D689 + #$D68A, // $D68A + #$D68B, // $D68B + #$D68C, // $D68C + #$D68D, // $D68D + #$D68E, // $D68E + #$D68F, // $D68F + #$D690, // $D690 + #$D691, // $D691 + #$D692, // $D692 + #$D693, // $D693 + #$D694, // $D694 + #$D695, // $D695 + #$D696, // $D696 + #$D697, // $D697 + #$D698, // $D698 + #$D699, // $D699 + #$D69A, // $D69A + #$D69B, // $D69B + #$D69C, // $D69C + #$D69D, // $D69D + #$D69E, // $D69E + #$D69F, // $D69F + #$D6A0, // $D6A0 + #$D6A1, // $D6A1 + #$D6A2, // $D6A2 + #$D6A3, // $D6A3 + #$D6A4, // $D6A4 + #$D6A5, // $D6A5 + #$D6A6, // $D6A6 + #$D6A7, // $D6A7 + #$D6A8, // $D6A8 + #$D6A9, // $D6A9 + #$D6AA, // $D6AA + #$D6AB, // $D6AB + #$D6AC, // $D6AC + #$D6AD, // $D6AD + #$D6AE, // $D6AE + #$D6AF, // $D6AF + #$D6B0, // $D6B0 + #$D6B1, // $D6B1 + #$D6B2, // $D6B2 + #$D6B3, // $D6B3 + #$D6B4, // $D6B4 + #$D6B5, // $D6B5 + #$D6B6, // $D6B6 + #$D6B7, // $D6B7 + #$D6B8, // $D6B8 + #$D6B9, // $D6B9 + #$D6BA, // $D6BA + #$D6BB, // $D6BB + #$D6BC, // $D6BC + #$D6BD, // $D6BD + #$D6BE, // $D6BE + #$D6BF, // $D6BF + #$D6C0, // $D6C0 + #$D6C1, // $D6C1 + #$D6C2, // $D6C2 + #$D6C3, // $D6C3 + #$D6C4, // $D6C4 + #$D6C5, // $D6C5 + #$D6C6, // $D6C6 + #$D6C7, // $D6C7 + #$D6C8, // $D6C8 + #$D6C9, // $D6C9 + #$D6CA, // $D6CA + #$D6CB, // $D6CB + #$D6CC, // $D6CC + #$D6CD, // $D6CD + #$D6CE, // $D6CE + #$D6CF, // $D6CF + #$D6D0, // $D6D0 + #$D6D1, // $D6D1 + #$D6D2, // $D6D2 + #$D6D3, // $D6D3 + #$D6D4, // $D6D4 + #$D6D5, // $D6D5 + #$D6D6, // $D6D6 + #$D6D7, // $D6D7 + #$D6D8, // $D6D8 + #$D6D9, // $D6D9 + #$D6DA, // $D6DA + #$D6DB, // $D6DB + #$D6DC, // $D6DC + #$D6DD, // $D6DD + #$D6DE, // $D6DE + #$D6DF, // $D6DF + #$D6E0, // $D6E0 + #$D6E1, // $D6E1 + #$D6E2, // $D6E2 + #$D6E3, // $D6E3 + #$D6E4, // $D6E4 + #$D6E5, // $D6E5 + #$D6E6, // $D6E6 + #$D6E7, // $D6E7 + #$D6E8, // $D6E8 + #$D6E9, // $D6E9 + #$D6EA, // $D6EA + #$D6EB, // $D6EB + #$D6EC, // $D6EC + #$D6ED, // $D6ED + #$D6EE, // $D6EE + #$D6EF, // $D6EF + #$D6F0, // $D6F0 + #$D6F1, // $D6F1 + #$D6F2, // $D6F2 + #$D6F3, // $D6F3 + #$D6F4, // $D6F4 + #$D6F5, // $D6F5 + #$D6F6, // $D6F6 + #$D6F7, // $D6F7 + #$D6F8, // $D6F8 + #$D6F9, // $D6F9 + #$D6FA, // $D6FA + #$D6FB, // $D6FB + #$D6FC, // $D6FC + #$D6FD, // $D6FD + #$D6FE, // $D6FE + #$D6FF, // $D6FF + #$D700, // $D700 + #$D701, // $D701 + #$D702, // $D702 + #$D703, // $D703 + #$D704, // $D704 + #$D705, // $D705 + #$D706, // $D706 + #$D707, // $D707 + #$D708, // $D708 + #$D709, // $D709 + #$D70A, // $D70A + #$D70B, // $D70B + #$D70C, // $D70C + #$D70D, // $D70D + #$D70E, // $D70E + #$D70F, // $D70F + #$D710, // $D710 + #$D711, // $D711 + #$D712, // $D712 + #$D713, // $D713 + #$D714, // $D714 + #$D715, // $D715 + #$D716, // $D716 + #$D717, // $D717 + #$D718, // $D718 + #$D719, // $D719 + #$D71A, // $D71A + #$D71B, // $D71B + #$D71C, // $D71C + #$D71D, // $D71D + #$D71E, // $D71E + #$D71F, // $D71F + #$D720, // $D720 + #$D721, // $D721 + #$D722, // $D722 + #$D723, // $D723 + #$D724, // $D724 + #$D725, // $D725 + #$D726, // $D726 + #$D727, // $D727 + #$D728, // $D728 + #$D729, // $D729 + #$D72A, // $D72A + #$D72B, // $D72B + #$D72C, // $D72C + #$D72D, // $D72D + #$D72E, // $D72E + #$D72F, // $D72F + #$D730, // $D730 + #$D731, // $D731 + #$D732, // $D732 + #$D733, // $D733 + #$D734, // $D734 + #$D735, // $D735 + #$D736, // $D736 + #$D737, // $D737 + #$D738, // $D738 + #$D739, // $D739 + #$D73A, // $D73A + #$D73B, // $D73B + #$D73C, // $D73C + #$D73D, // $D73D + #$D73E, // $D73E + #$D73F, // $D73F + #$D740, // $D740 + #$D741, // $D741 + #$D742, // $D742 + #$D743, // $D743 + #$D744, // $D744 + #$D745, // $D745 + #$D746, // $D746 + #$D747, // $D747 + #$D748, // $D748 + #$D749, // $D749 + #$D74A, // $D74A + #$D74B, // $D74B + #$D74C, // $D74C + #$D74D, // $D74D + #$D74E, // $D74E + #$D74F, // $D74F + #$D750, // $D750 + #$D751, // $D751 + #$D752, // $D752 + #$D753, // $D753 + #$D754, // $D754 + #$D755, // $D755 + #$D756, // $D756 + #$D757, // $D757 + #$D758, // $D758 + #$D759, // $D759 + #$D75A, // $D75A + #$D75B, // $D75B + #$D75C, // $D75C + #$D75D, // $D75D + #$D75E, // $D75E + #$D75F, // $D75F + #$D760, // $D760 + #$D761, // $D761 + #$D762, // $D762 + #$D763, // $D763 + #$D764, // $D764 + #$D765, // $D765 + #$D766, // $D766 + #$D767, // $D767 + #$D768, // $D768 + #$D769, // $D769 + #$D76A, // $D76A + #$D76B, // $D76B + #$D76C, // $D76C + #$D76D, // $D76D + #$D76E, // $D76E + #$D76F, // $D76F + #$D770, // $D770 + #$D771, // $D771 + #$D772, // $D772 + #$D773, // $D773 + #$D774, // $D774 + #$D775, // $D775 + #$D776, // $D776 + #$D777, // $D777 + #$D778, // $D778 + #$D779, // $D779 + #$D77A, // $D77A + #$D77B, // $D77B + #$D77C, // $D77C + #$D77D, // $D77D + #$D77E, // $D77E + #$D77F, // $D77F + #$D780, // $D780 + #$D781, // $D781 + #$D782, // $D782 + #$D783, // $D783 + #$D784, // $D784 + #$D785, // $D785 + #$D786, // $D786 + #$D787, // $D787 + #$D788, // $D788 + #$D789, // $D789 + #$D78A, // $D78A + #$D78B, // $D78B + #$D78C, // $D78C + #$D78D, // $D78D + #$D78E, // $D78E + #$D78F, // $D78F + #$D790, // $D790 + #$D791, // $D791 + #$D792, // $D792 + #$D793, // $D793 + #$D794, // $D794 + #$D795, // $D795 + #$D796, // $D796 + #$D797, // $D797 + #$D798, // $D798 + #$D799, // $D799 + #$D79A, // $D79A + #$D79B, // $D79B + #$D79C, // $D79C + #$D79D, // $D79D + #$D79E, // $D79E + #$D79F, // $D79F + #$D7A0, // $D7A0 + #$D7A1, // $D7A1 + #$D7A2, // $D7A2 + #$D7A3, // $D7A3 + #$D7A4, // $D7A4 + #$D7A5, // $D7A5 + #$D7A6, // $D7A6 + #$D7A7, // $D7A7 + #$D7A8, // $D7A8 + #$D7A9, // $D7A9 + #$D7AA, // $D7AA + #$D7AB, // $D7AB + #$D7AC, // $D7AC + #$D7AD, // $D7AD + #$D7AE, // $D7AE + #$D7AF, // $D7AF + #$D7B0, // $D7B0 + #$D7B1, // $D7B1 + #$D7B2, // $D7B2 + #$D7B3, // $D7B3 + #$D7B4, // $D7B4 + #$D7B5, // $D7B5 + #$D7B6, // $D7B6 + #$D7B7, // $D7B7 + #$D7B8, // $D7B8 + #$D7B9, // $D7B9 + #$D7BA, // $D7BA + #$D7BB, // $D7BB + #$D7BC, // $D7BC + #$D7BD, // $D7BD + #$D7BE, // $D7BE + #$D7BF, // $D7BF + #$D7C0, // $D7C0 + #$D7C1, // $D7C1 + #$D7C2, // $D7C2 + #$D7C3, // $D7C3 + #$D7C4, // $D7C4 + #$D7C5, // $D7C5 + #$D7C6, // $D7C6 + #$D7C7, // $D7C7 + #$D7C8, // $D7C8 + #$D7C9, // $D7C9 + #$D7CA, // $D7CA + #$D7CB, // $D7CB + #$D7CC, // $D7CC + #$D7CD, // $D7CD + #$D7CE, // $D7CE + #$D7CF, // $D7CF + #$D7D0, // $D7D0 + #$D7D1, // $D7D1 + #$D7D2, // $D7D2 + #$D7D3, // $D7D3 + #$D7D4, // $D7D4 + #$D7D5, // $D7D5 + #$D7D6, // $D7D6 + #$D7D7, // $D7D7 + #$D7D8, // $D7D8 + #$D7D9, // $D7D9 + #$D7DA, // $D7DA + #$D7DB, // $D7DB + #$D7DC, // $D7DC + #$D7DD, // $D7DD + #$D7DE, // $D7DE + #$D7DF, // $D7DF + #$D7E0, // $D7E0 + #$D7E1, // $D7E1 + #$D7E2, // $D7E2 + #$D7E3, // $D7E3 + #$D7E4, // $D7E4 + #$D7E5, // $D7E5 + #$D7E6, // $D7E6 + #$D7E7, // $D7E7 + #$D7E8, // $D7E8 + #$D7E9, // $D7E9 + #$D7EA, // $D7EA + #$D7EB, // $D7EB + #$D7EC, // $D7EC + #$D7ED, // $D7ED + #$D7EE, // $D7EE + #$D7EF, // $D7EF + #$D7F0, // $D7F0 + #$D7F1, // $D7F1 + #$D7F2, // $D7F2 + #$D7F3, // $D7F3 + #$D7F4, // $D7F4 + #$D7F5, // $D7F5 + #$D7F6, // $D7F6 + #$D7F7, // $D7F7 + #$D7F8, // $D7F8 + #$D7F9, // $D7F9 + #$D7FA, // $D7FA + #$D7FB, // $D7FB + #$D7FC, // $D7FC + #$D7FD, // $D7FD + #$D7FE, // $D7FE + #$D7FF, // $D7FF + #$D800, // $D800 + #$D801, // $D801 + #$D802, // $D802 + #$D803, // $D803 + #$D804, // $D804 + #$D805, // $D805 + #$D806, // $D806 + #$D807, // $D807 + #$D808, // $D808 + #$D809, // $D809 + #$D80A, // $D80A + #$D80B, // $D80B + #$D80C, // $D80C + #$D80D, // $D80D + #$D80E, // $D80E + #$D80F, // $D80F + #$D810, // $D810 + #$D811, // $D811 + #$D812, // $D812 + #$D813, // $D813 + #$D814, // $D814 + #$D815, // $D815 + #$D816, // $D816 + #$D817, // $D817 + #$D818, // $D818 + #$D819, // $D819 + #$D81A, // $D81A + #$D81B, // $D81B + #$D81C, // $D81C + #$D81D, // $D81D + #$D81E, // $D81E + #$D81F, // $D81F + #$D820, // $D820 + #$D821, // $D821 + #$D822, // $D822 + #$D823, // $D823 + #$D824, // $D824 + #$D825, // $D825 + #$D826, // $D826 + #$D827, // $D827 + #$D828, // $D828 + #$D829, // $D829 + #$D82A, // $D82A + #$D82B, // $D82B + #$D82C, // $D82C + #$D82D, // $D82D + #$D82E, // $D82E + #$D82F, // $D82F + #$D830, // $D830 + #$D831, // $D831 + #$D832, // $D832 + #$D833, // $D833 + #$D834, // $D834 + #$D835, // $D835 + #$D836, // $D836 + #$D837, // $D837 + #$D838, // $D838 + #$D839, // $D839 + #$D83A, // $D83A + #$D83B, // $D83B + #$D83C, // $D83C + #$D83D, // $D83D + #$D83E, // $D83E + #$D83F, // $D83F + #$D840, // $D840 + #$D841, // $D841 + #$D842, // $D842 + #$D843, // $D843 + #$D844, // $D844 + #$D845, // $D845 + #$D846, // $D846 + #$D847, // $D847 + #$D848, // $D848 + #$D849, // $D849 + #$D84A, // $D84A + #$D84B, // $D84B + #$D84C, // $D84C + #$D84D, // $D84D + #$D84E, // $D84E + #$D84F, // $D84F + #$D850, // $D850 + #$D851, // $D851 + #$D852, // $D852 + #$D853, // $D853 + #$D854, // $D854 + #$D855, // $D855 + #$D856, // $D856 + #$D857, // $D857 + #$D858, // $D858 + #$D859, // $D859 + #$D85A, // $D85A + #$D85B, // $D85B + #$D85C, // $D85C + #$D85D, // $D85D + #$D85E, // $D85E + #$D85F, // $D85F + #$D860, // $D860 + #$D861, // $D861 + #$D862, // $D862 + #$D863, // $D863 + #$D864, // $D864 + #$D865, // $D865 + #$D866, // $D866 + #$D867, // $D867 + #$D868, // $D868 + #$D869, // $D869 + #$D86A, // $D86A + #$D86B, // $D86B + #$D86C, // $D86C + #$D86D, // $D86D + #$D86E, // $D86E + #$D86F, // $D86F + #$D870, // $D870 + #$D871, // $D871 + #$D872, // $D872 + #$D873, // $D873 + #$D874, // $D874 + #$D875, // $D875 + #$D876, // $D876 + #$D877, // $D877 + #$D878, // $D878 + #$D879, // $D879 + #$D87A, // $D87A + #$D87B, // $D87B + #$D87C, // $D87C + #$D87D, // $D87D + #$D87E, // $D87E + #$D87F, // $D87F + #$D880, // $D880 + #$D881, // $D881 + #$D882, // $D882 + #$D883, // $D883 + #$D884, // $D884 + #$D885, // $D885 + #$D886, // $D886 + #$D887, // $D887 + #$D888, // $D888 + #$D889, // $D889 + #$D88A, // $D88A + #$D88B, // $D88B + #$D88C, // $D88C + #$D88D, // $D88D + #$D88E, // $D88E + #$D88F, // $D88F + #$D890, // $D890 + #$D891, // $D891 + #$D892, // $D892 + #$D893, // $D893 + #$D894, // $D894 + #$D895, // $D895 + #$D896, // $D896 + #$D897, // $D897 + #$D898, // $D898 + #$D899, // $D899 + #$D89A, // $D89A + #$D89B, // $D89B + #$D89C, // $D89C + #$D89D, // $D89D + #$D89E, // $D89E + #$D89F, // $D89F + #$D8A0, // $D8A0 + #$D8A1, // $D8A1 + #$D8A2, // $D8A2 + #$D8A3, // $D8A3 + #$D8A4, // $D8A4 + #$D8A5, // $D8A5 + #$D8A6, // $D8A6 + #$D8A7, // $D8A7 + #$D8A8, // $D8A8 + #$D8A9, // $D8A9 + #$D8AA, // $D8AA + #$D8AB, // $D8AB + #$D8AC, // $D8AC + #$D8AD, // $D8AD + #$D8AE, // $D8AE + #$D8AF, // $D8AF + #$D8B0, // $D8B0 + #$D8B1, // $D8B1 + #$D8B2, // $D8B2 + #$D8B3, // $D8B3 + #$D8B4, // $D8B4 + #$D8B5, // $D8B5 + #$D8B6, // $D8B6 + #$D8B7, // $D8B7 + #$D8B8, // $D8B8 + #$D8B9, // $D8B9 + #$D8BA, // $D8BA + #$D8BB, // $D8BB + #$D8BC, // $D8BC + #$D8BD, // $D8BD + #$D8BE, // $D8BE + #$D8BF, // $D8BF + #$D8C0, // $D8C0 + #$D8C1, // $D8C1 + #$D8C2, // $D8C2 + #$D8C3, // $D8C3 + #$D8C4, // $D8C4 + #$D8C5, // $D8C5 + #$D8C6, // $D8C6 + #$D8C7, // $D8C7 + #$D8C8, // $D8C8 + #$D8C9, // $D8C9 + #$D8CA, // $D8CA + #$D8CB, // $D8CB + #$D8CC, // $D8CC + #$D8CD, // $D8CD + #$D8CE, // $D8CE + #$D8CF, // $D8CF + #$D8D0, // $D8D0 + #$D8D1, // $D8D1 + #$D8D2, // $D8D2 + #$D8D3, // $D8D3 + #$D8D4, // $D8D4 + #$D8D5, // $D8D5 + #$D8D6, // $D8D6 + #$D8D7, // $D8D7 + #$D8D8, // $D8D8 + #$D8D9, // $D8D9 + #$D8DA, // $D8DA + #$D8DB, // $D8DB + #$D8DC, // $D8DC + #$D8DD, // $D8DD + #$D8DE, // $D8DE + #$D8DF, // $D8DF + #$D8E0, // $D8E0 + #$D8E1, // $D8E1 + #$D8E2, // $D8E2 + #$D8E3, // $D8E3 + #$D8E4, // $D8E4 + #$D8E5, // $D8E5 + #$D8E6, // $D8E6 + #$D8E7, // $D8E7 + #$D8E8, // $D8E8 + #$D8E9, // $D8E9 + #$D8EA, // $D8EA + #$D8EB, // $D8EB + #$D8EC, // $D8EC + #$D8ED, // $D8ED + #$D8EE, // $D8EE + #$D8EF, // $D8EF + #$D8F0, // $D8F0 + #$D8F1, // $D8F1 + #$D8F2, // $D8F2 + #$D8F3, // $D8F3 + #$D8F4, // $D8F4 + #$D8F5, // $D8F5 + #$D8F6, // $D8F6 + #$D8F7, // $D8F7 + #$D8F8, // $D8F8 + #$D8F9, // $D8F9 + #$D8FA, // $D8FA + #$D8FB, // $D8FB + #$D8FC, // $D8FC + #$D8FD, // $D8FD + #$D8FE, // $D8FE + #$D8FF, // $D8FF + #$D900, // $D900 + #$D901, // $D901 + #$D902, // $D902 + #$D903, // $D903 + #$D904, // $D904 + #$D905, // $D905 + #$D906, // $D906 + #$D907, // $D907 + #$D908, // $D908 + #$D909, // $D909 + #$D90A, // $D90A + #$D90B, // $D90B + #$D90C, // $D90C + #$D90D, // $D90D + #$D90E, // $D90E + #$D90F, // $D90F + #$D910, // $D910 + #$D911, // $D911 + #$D912, // $D912 + #$D913, // $D913 + #$D914, // $D914 + #$D915, // $D915 + #$D916, // $D916 + #$D917, // $D917 + #$D918, // $D918 + #$D919, // $D919 + #$D91A, // $D91A + #$D91B, // $D91B + #$D91C, // $D91C + #$D91D, // $D91D + #$D91E, // $D91E + #$D91F, // $D91F + #$D920, // $D920 + #$D921, // $D921 + #$D922, // $D922 + #$D923, // $D923 + #$D924, // $D924 + #$D925, // $D925 + #$D926, // $D926 + #$D927, // $D927 + #$D928, // $D928 + #$D929, // $D929 + #$D92A, // $D92A + #$D92B, // $D92B + #$D92C, // $D92C + #$D92D, // $D92D + #$D92E, // $D92E + #$D92F, // $D92F + #$D930, // $D930 + #$D931, // $D931 + #$D932, // $D932 + #$D933, // $D933 + #$D934, // $D934 + #$D935, // $D935 + #$D936, // $D936 + #$D937, // $D937 + #$D938, // $D938 + #$D939, // $D939 + #$D93A, // $D93A + #$D93B, // $D93B + #$D93C, // $D93C + #$D93D, // $D93D + #$D93E, // $D93E + #$D93F, // $D93F + #$D940, // $D940 + #$D941, // $D941 + #$D942, // $D942 + #$D943, // $D943 + #$D944, // $D944 + #$D945, // $D945 + #$D946, // $D946 + #$D947, // $D947 + #$D948, // $D948 + #$D949, // $D949 + #$D94A, // $D94A + #$D94B, // $D94B + #$D94C, // $D94C + #$D94D, // $D94D + #$D94E, // $D94E + #$D94F, // $D94F + #$D950, // $D950 + #$D951, // $D951 + #$D952, // $D952 + #$D953, // $D953 + #$D954, // $D954 + #$D955, // $D955 + #$D956, // $D956 + #$D957, // $D957 + #$D958, // $D958 + #$D959, // $D959 + #$D95A, // $D95A + #$D95B, // $D95B + #$D95C, // $D95C + #$D95D, // $D95D + #$D95E, // $D95E + #$D95F, // $D95F + #$D960, // $D960 + #$D961, // $D961 + #$D962, // $D962 + #$D963, // $D963 + #$D964, // $D964 + #$D965, // $D965 + #$D966, // $D966 + #$D967, // $D967 + #$D968, // $D968 + #$D969, // $D969 + #$D96A, // $D96A + #$D96B, // $D96B + #$D96C, // $D96C + #$D96D, // $D96D + #$D96E, // $D96E + #$D96F, // $D96F + #$D970, // $D970 + #$D971, // $D971 + #$D972, // $D972 + #$D973, // $D973 + #$D974, // $D974 + #$D975, // $D975 + #$D976, // $D976 + #$D977, // $D977 + #$D978, // $D978 + #$D979, // $D979 + #$D97A, // $D97A + #$D97B, // $D97B + #$D97C, // $D97C + #$D97D, // $D97D + #$D97E, // $D97E + #$D97F, // $D97F + #$D980, // $D980 + #$D981, // $D981 + #$D982, // $D982 + #$D983, // $D983 + #$D984, // $D984 + #$D985, // $D985 + #$D986, // $D986 + #$D987, // $D987 + #$D988, // $D988 + #$D989, // $D989 + #$D98A, // $D98A + #$D98B, // $D98B + #$D98C, // $D98C + #$D98D, // $D98D + #$D98E, // $D98E + #$D98F, // $D98F + #$D990, // $D990 + #$D991, // $D991 + #$D992, // $D992 + #$D993, // $D993 + #$D994, // $D994 + #$D995, // $D995 + #$D996, // $D996 + #$D997, // $D997 + #$D998, // $D998 + #$D999, // $D999 + #$D99A, // $D99A + #$D99B, // $D99B + #$D99C, // $D99C + #$D99D, // $D99D + #$D99E, // $D99E + #$D99F, // $D99F + #$D9A0, // $D9A0 + #$D9A1, // $D9A1 + #$D9A2, // $D9A2 + #$D9A3, // $D9A3 + #$D9A4, // $D9A4 + #$D9A5, // $D9A5 + #$D9A6, // $D9A6 + #$D9A7, // $D9A7 + #$D9A8, // $D9A8 + #$D9A9, // $D9A9 + #$D9AA, // $D9AA + #$D9AB, // $D9AB + #$D9AC, // $D9AC + #$D9AD, // $D9AD + #$D9AE, // $D9AE + #$D9AF, // $D9AF + #$D9B0, // $D9B0 + #$D9B1, // $D9B1 + #$D9B2, // $D9B2 + #$D9B3, // $D9B3 + #$D9B4, // $D9B4 + #$D9B5, // $D9B5 + #$D9B6, // $D9B6 + #$D9B7, // $D9B7 + #$D9B8, // $D9B8 + #$D9B9, // $D9B9 + #$D9BA, // $D9BA + #$D9BB, // $D9BB + #$D9BC, // $D9BC + #$D9BD, // $D9BD + #$D9BE, // $D9BE + #$D9BF, // $D9BF + #$D9C0, // $D9C0 + #$D9C1, // $D9C1 + #$D9C2, // $D9C2 + #$D9C3, // $D9C3 + #$D9C4, // $D9C4 + #$D9C5, // $D9C5 + #$D9C6, // $D9C6 + #$D9C7, // $D9C7 + #$D9C8, // $D9C8 + #$D9C9, // $D9C9 + #$D9CA, // $D9CA + #$D9CB, // $D9CB + #$D9CC, // $D9CC + #$D9CD, // $D9CD + #$D9CE, // $D9CE + #$D9CF, // $D9CF + #$D9D0, // $D9D0 + #$D9D1, // $D9D1 + #$D9D2, // $D9D2 + #$D9D3, // $D9D3 + #$D9D4, // $D9D4 + #$D9D5, // $D9D5 + #$D9D6, // $D9D6 + #$D9D7, // $D9D7 + #$D9D8, // $D9D8 + #$D9D9, // $D9D9 + #$D9DA, // $D9DA + #$D9DB, // $D9DB + #$D9DC, // $D9DC + #$D9DD, // $D9DD + #$D9DE, // $D9DE + #$D9DF, // $D9DF + #$D9E0, // $D9E0 + #$D9E1, // $D9E1 + #$D9E2, // $D9E2 + #$D9E3, // $D9E3 + #$D9E4, // $D9E4 + #$D9E5, // $D9E5 + #$D9E6, // $D9E6 + #$D9E7, // $D9E7 + #$D9E8, // $D9E8 + #$D9E9, // $D9E9 + #$D9EA, // $D9EA + #$D9EB, // $D9EB + #$D9EC, // $D9EC + #$D9ED, // $D9ED + #$D9EE, // $D9EE + #$D9EF, // $D9EF + #$D9F0, // $D9F0 + #$D9F1, // $D9F1 + #$D9F2, // $D9F2 + #$D9F3, // $D9F3 + #$D9F4, // $D9F4 + #$D9F5, // $D9F5 + #$D9F6, // $D9F6 + #$D9F7, // $D9F7 + #$D9F8, // $D9F8 + #$D9F9, // $D9F9 + #$D9FA, // $D9FA + #$D9FB, // $D9FB + #$D9FC, // $D9FC + #$D9FD, // $D9FD + #$D9FE, // $D9FE + #$D9FF, // $D9FF + #$DA00, // $DA00 + #$DA01, // $DA01 + #$DA02, // $DA02 + #$DA03, // $DA03 + #$DA04, // $DA04 + #$DA05, // $DA05 + #$DA06, // $DA06 + #$DA07, // $DA07 + #$DA08, // $DA08 + #$DA09, // $DA09 + #$DA0A, // $DA0A + #$DA0B, // $DA0B + #$DA0C, // $DA0C + #$DA0D, // $DA0D + #$DA0E, // $DA0E + #$DA0F, // $DA0F + #$DA10, // $DA10 + #$DA11, // $DA11 + #$DA12, // $DA12 + #$DA13, // $DA13 + #$DA14, // $DA14 + #$DA15, // $DA15 + #$DA16, // $DA16 + #$DA17, // $DA17 + #$DA18, // $DA18 + #$DA19, // $DA19 + #$DA1A, // $DA1A + #$DA1B, // $DA1B + #$DA1C, // $DA1C + #$DA1D, // $DA1D + #$DA1E, // $DA1E + #$DA1F, // $DA1F + #$DA20, // $DA20 + #$DA21, // $DA21 + #$DA22, // $DA22 + #$DA23, // $DA23 + #$DA24, // $DA24 + #$DA25, // $DA25 + #$DA26, // $DA26 + #$DA27, // $DA27 + #$DA28, // $DA28 + #$DA29, // $DA29 + #$DA2A, // $DA2A + #$DA2B, // $DA2B + #$DA2C, // $DA2C + #$DA2D, // $DA2D + #$DA2E, // $DA2E + #$DA2F, // $DA2F + #$DA30, // $DA30 + #$DA31, // $DA31 + #$DA32, // $DA32 + #$DA33, // $DA33 + #$DA34, // $DA34 + #$DA35, // $DA35 + #$DA36, // $DA36 + #$DA37, // $DA37 + #$DA38, // $DA38 + #$DA39, // $DA39 + #$DA3A, // $DA3A + #$DA3B, // $DA3B + #$DA3C, // $DA3C + #$DA3D, // $DA3D + #$DA3E, // $DA3E + #$DA3F, // $DA3F + #$DA40, // $DA40 + #$DA41, // $DA41 + #$DA42, // $DA42 + #$DA43, // $DA43 + #$DA44, // $DA44 + #$DA45, // $DA45 + #$DA46, // $DA46 + #$DA47, // $DA47 + #$DA48, // $DA48 + #$DA49, // $DA49 + #$DA4A, // $DA4A + #$DA4B, // $DA4B + #$DA4C, // $DA4C + #$DA4D, // $DA4D + #$DA4E, // $DA4E + #$DA4F, // $DA4F + #$DA50, // $DA50 + #$DA51, // $DA51 + #$DA52, // $DA52 + #$DA53, // $DA53 + #$DA54, // $DA54 + #$DA55, // $DA55 + #$DA56, // $DA56 + #$DA57, // $DA57 + #$DA58, // $DA58 + #$DA59, // $DA59 + #$DA5A, // $DA5A + #$DA5B, // $DA5B + #$DA5C, // $DA5C + #$DA5D, // $DA5D + #$DA5E, // $DA5E + #$DA5F, // $DA5F + #$DA60, // $DA60 + #$DA61, // $DA61 + #$DA62, // $DA62 + #$DA63, // $DA63 + #$DA64, // $DA64 + #$DA65, // $DA65 + #$DA66, // $DA66 + #$DA67, // $DA67 + #$DA68, // $DA68 + #$DA69, // $DA69 + #$DA6A, // $DA6A + #$DA6B, // $DA6B + #$DA6C, // $DA6C + #$DA6D, // $DA6D + #$DA6E, // $DA6E + #$DA6F, // $DA6F + #$DA70, // $DA70 + #$DA71, // $DA71 + #$DA72, // $DA72 + #$DA73, // $DA73 + #$DA74, // $DA74 + #$DA75, // $DA75 + #$DA76, // $DA76 + #$DA77, // $DA77 + #$DA78, // $DA78 + #$DA79, // $DA79 + #$DA7A, // $DA7A + #$DA7B, // $DA7B + #$DA7C, // $DA7C + #$DA7D, // $DA7D + #$DA7E, // $DA7E + #$DA7F, // $DA7F + #$DA80, // $DA80 + #$DA81, // $DA81 + #$DA82, // $DA82 + #$DA83, // $DA83 + #$DA84, // $DA84 + #$DA85, // $DA85 + #$DA86, // $DA86 + #$DA87, // $DA87 + #$DA88, // $DA88 + #$DA89, // $DA89 + #$DA8A, // $DA8A + #$DA8B, // $DA8B + #$DA8C, // $DA8C + #$DA8D, // $DA8D + #$DA8E, // $DA8E + #$DA8F, // $DA8F + #$DA90, // $DA90 + #$DA91, // $DA91 + #$DA92, // $DA92 + #$DA93, // $DA93 + #$DA94, // $DA94 + #$DA95, // $DA95 + #$DA96, // $DA96 + #$DA97, // $DA97 + #$DA98, // $DA98 + #$DA99, // $DA99 + #$DA9A, // $DA9A + #$DA9B, // $DA9B + #$DA9C, // $DA9C + #$DA9D, // $DA9D + #$DA9E, // $DA9E + #$DA9F, // $DA9F + #$DAA0, // $DAA0 + #$DAA1, // $DAA1 + #$DAA2, // $DAA2 + #$DAA3, // $DAA3 + #$DAA4, // $DAA4 + #$DAA5, // $DAA5 + #$DAA6, // $DAA6 + #$DAA7, // $DAA7 + #$DAA8, // $DAA8 + #$DAA9, // $DAA9 + #$DAAA, // $DAAA + #$DAAB, // $DAAB + #$DAAC, // $DAAC + #$DAAD, // $DAAD + #$DAAE, // $DAAE + #$DAAF, // $DAAF + #$DAB0, // $DAB0 + #$DAB1, // $DAB1 + #$DAB2, // $DAB2 + #$DAB3, // $DAB3 + #$DAB4, // $DAB4 + #$DAB5, // $DAB5 + #$DAB6, // $DAB6 + #$DAB7, // $DAB7 + #$DAB8, // $DAB8 + #$DAB9, // $DAB9 + #$DABA, // $DABA + #$DABB, // $DABB + #$DABC, // $DABC + #$DABD, // $DABD + #$DABE, // $DABE + #$DABF, // $DABF + #$DAC0, // $DAC0 + #$DAC1, // $DAC1 + #$DAC2, // $DAC2 + #$DAC3, // $DAC3 + #$DAC4, // $DAC4 + #$DAC5, // $DAC5 + #$DAC6, // $DAC6 + #$DAC7, // $DAC7 + #$DAC8, // $DAC8 + #$DAC9, // $DAC9 + #$DACA, // $DACA + #$DACB, // $DACB + #$DACC, // $DACC + #$DACD, // $DACD + #$DACE, // $DACE + #$DACF, // $DACF + #$DAD0, // $DAD0 + #$DAD1, // $DAD1 + #$DAD2, // $DAD2 + #$DAD3, // $DAD3 + #$DAD4, // $DAD4 + #$DAD5, // $DAD5 + #$DAD6, // $DAD6 + #$DAD7, // $DAD7 + #$DAD8, // $DAD8 + #$DAD9, // $DAD9 + #$DADA, // $DADA + #$DADB, // $DADB + #$DADC, // $DADC + #$DADD, // $DADD + #$DADE, // $DADE + #$DADF, // $DADF + #$DAE0, // $DAE0 + #$DAE1, // $DAE1 + #$DAE2, // $DAE2 + #$DAE3, // $DAE3 + #$DAE4, // $DAE4 + #$DAE5, // $DAE5 + #$DAE6, // $DAE6 + #$DAE7, // $DAE7 + #$DAE8, // $DAE8 + #$DAE9, // $DAE9 + #$DAEA, // $DAEA + #$DAEB, // $DAEB + #$DAEC, // $DAEC + #$DAED, // $DAED + #$DAEE, // $DAEE + #$DAEF, // $DAEF + #$DAF0, // $DAF0 + #$DAF1, // $DAF1 + #$DAF2, // $DAF2 + #$DAF3, // $DAF3 + #$DAF4, // $DAF4 + #$DAF5, // $DAF5 + #$DAF6, // $DAF6 + #$DAF7, // $DAF7 + #$DAF8, // $DAF8 + #$DAF9, // $DAF9 + #$DAFA, // $DAFA + #$DAFB, // $DAFB + #$DAFC, // $DAFC + #$DAFD, // $DAFD + #$DAFE, // $DAFE + #$DAFF, // $DAFF + #$DB00, // $DB00 + #$DB01, // $DB01 + #$DB02, // $DB02 + #$DB03, // $DB03 + #$DB04, // $DB04 + #$DB05, // $DB05 + #$DB06, // $DB06 + #$DB07, // $DB07 + #$DB08, // $DB08 + #$DB09, // $DB09 + #$DB0A, // $DB0A + #$DB0B, // $DB0B + #$DB0C, // $DB0C + #$DB0D, // $DB0D + #$DB0E, // $DB0E + #$DB0F, // $DB0F + #$DB10, // $DB10 + #$DB11, // $DB11 + #$DB12, // $DB12 + #$DB13, // $DB13 + #$DB14, // $DB14 + #$DB15, // $DB15 + #$DB16, // $DB16 + #$DB17, // $DB17 + #$DB18, // $DB18 + #$DB19, // $DB19 + #$DB1A, // $DB1A + #$DB1B, // $DB1B + #$DB1C, // $DB1C + #$DB1D, // $DB1D + #$DB1E, // $DB1E + #$DB1F, // $DB1F + #$DB20, // $DB20 + #$DB21, // $DB21 + #$DB22, // $DB22 + #$DB23, // $DB23 + #$DB24, // $DB24 + #$DB25, // $DB25 + #$DB26, // $DB26 + #$DB27, // $DB27 + #$DB28, // $DB28 + #$DB29, // $DB29 + #$DB2A, // $DB2A + #$DB2B, // $DB2B + #$DB2C, // $DB2C + #$DB2D, // $DB2D + #$DB2E, // $DB2E + #$DB2F, // $DB2F + #$DB30, // $DB30 + #$DB31, // $DB31 + #$DB32, // $DB32 + #$DB33, // $DB33 + #$DB34, // $DB34 + #$DB35, // $DB35 + #$DB36, // $DB36 + #$DB37, // $DB37 + #$DB38, // $DB38 + #$DB39, // $DB39 + #$DB3A, // $DB3A + #$DB3B, // $DB3B + #$DB3C, // $DB3C + #$DB3D, // $DB3D + #$DB3E, // $DB3E + #$DB3F, // $DB3F + #$DB40, // $DB40 + #$DB41, // $DB41 + #$DB42, // $DB42 + #$DB43, // $DB43 + #$DB44, // $DB44 + #$DB45, // $DB45 + #$DB46, // $DB46 + #$DB47, // $DB47 + #$DB48, // $DB48 + #$DB49, // $DB49 + #$DB4A, // $DB4A + #$DB4B, // $DB4B + #$DB4C, // $DB4C + #$DB4D, // $DB4D + #$DB4E, // $DB4E + #$DB4F, // $DB4F + #$DB50, // $DB50 + #$DB51, // $DB51 + #$DB52, // $DB52 + #$DB53, // $DB53 + #$DB54, // $DB54 + #$DB55, // $DB55 + #$DB56, // $DB56 + #$DB57, // $DB57 + #$DB58, // $DB58 + #$DB59, // $DB59 + #$DB5A, // $DB5A + #$DB5B, // $DB5B + #$DB5C, // $DB5C + #$DB5D, // $DB5D + #$DB5E, // $DB5E + #$DB5F, // $DB5F + #$DB60, // $DB60 + #$DB61, // $DB61 + #$DB62, // $DB62 + #$DB63, // $DB63 + #$DB64, // $DB64 + #$DB65, // $DB65 + #$DB66, // $DB66 + #$DB67, // $DB67 + #$DB68, // $DB68 + #$DB69, // $DB69 + #$DB6A, // $DB6A + #$DB6B, // $DB6B + #$DB6C, // $DB6C + #$DB6D, // $DB6D + #$DB6E, // $DB6E + #$DB6F, // $DB6F + #$DB70, // $DB70 + #$DB71, // $DB71 + #$DB72, // $DB72 + #$DB73, // $DB73 + #$DB74, // $DB74 + #$DB75, // $DB75 + #$DB76, // $DB76 + #$DB77, // $DB77 + #$DB78, // $DB78 + #$DB79, // $DB79 + #$DB7A, // $DB7A + #$DB7B, // $DB7B + #$DB7C, // $DB7C + #$DB7D, // $DB7D + #$DB7E, // $DB7E + #$DB7F, // $DB7F + #$DB80, // $DB80 + #$DB81, // $DB81 + #$DB82, // $DB82 + #$DB83, // $DB83 + #$DB84, // $DB84 + #$DB85, // $DB85 + #$DB86, // $DB86 + #$DB87, // $DB87 + #$DB88, // $DB88 + #$DB89, // $DB89 + #$DB8A, // $DB8A + #$DB8B, // $DB8B + #$DB8C, // $DB8C + #$DB8D, // $DB8D + #$DB8E, // $DB8E + #$DB8F, // $DB8F + #$DB90, // $DB90 + #$DB91, // $DB91 + #$DB92, // $DB92 + #$DB93, // $DB93 + #$DB94, // $DB94 + #$DB95, // $DB95 + #$DB96, // $DB96 + #$DB97, // $DB97 + #$DB98, // $DB98 + #$DB99, // $DB99 + #$DB9A, // $DB9A + #$DB9B, // $DB9B + #$DB9C, // $DB9C + #$DB9D, // $DB9D + #$DB9E, // $DB9E + #$DB9F, // $DB9F + #$DBA0, // $DBA0 + #$DBA1, // $DBA1 + #$DBA2, // $DBA2 + #$DBA3, // $DBA3 + #$DBA4, // $DBA4 + #$DBA5, // $DBA5 + #$DBA6, // $DBA6 + #$DBA7, // $DBA7 + #$DBA8, // $DBA8 + #$DBA9, // $DBA9 + #$DBAA, // $DBAA + #$DBAB, // $DBAB + #$DBAC, // $DBAC + #$DBAD, // $DBAD + #$DBAE, // $DBAE + #$DBAF, // $DBAF + #$DBB0, // $DBB0 + #$DBB1, // $DBB1 + #$DBB2, // $DBB2 + #$DBB3, // $DBB3 + #$DBB4, // $DBB4 + #$DBB5, // $DBB5 + #$DBB6, // $DBB6 + #$DBB7, // $DBB7 + #$DBB8, // $DBB8 + #$DBB9, // $DBB9 + #$DBBA, // $DBBA + #$DBBB, // $DBBB + #$DBBC, // $DBBC + #$DBBD, // $DBBD + #$DBBE, // $DBBE + #$DBBF, // $DBBF + #$DBC0, // $DBC0 + #$DBC1, // $DBC1 + #$DBC2, // $DBC2 + #$DBC3, // $DBC3 + #$DBC4, // $DBC4 + #$DBC5, // $DBC5 + #$DBC6, // $DBC6 + #$DBC7, // $DBC7 + #$DBC8, // $DBC8 + #$DBC9, // $DBC9 + #$DBCA, // $DBCA + #$DBCB, // $DBCB + #$DBCC, // $DBCC + #$DBCD, // $DBCD + #$DBCE, // $DBCE + #$DBCF, // $DBCF + #$DBD0, // $DBD0 + #$DBD1, // $DBD1 + #$DBD2, // $DBD2 + #$DBD3, // $DBD3 + #$DBD4, // $DBD4 + #$DBD5, // $DBD5 + #$DBD6, // $DBD6 + #$DBD7, // $DBD7 + #$DBD8, // $DBD8 + #$DBD9, // $DBD9 + #$DBDA, // $DBDA + #$DBDB, // $DBDB + #$DBDC, // $DBDC + #$DBDD, // $DBDD + #$DBDE, // $DBDE + #$DBDF, // $DBDF + #$DBE0, // $DBE0 + #$DBE1, // $DBE1 + #$DBE2, // $DBE2 + #$DBE3, // $DBE3 + #$DBE4, // $DBE4 + #$DBE5, // $DBE5 + #$DBE6, // $DBE6 + #$DBE7, // $DBE7 + #$DBE8, // $DBE8 + #$DBE9, // $DBE9 + #$DBEA, // $DBEA + #$DBEB, // $DBEB + #$DBEC, // $DBEC + #$DBED, // $DBED + #$DBEE, // $DBEE + #$DBEF, // $DBEF + #$DBF0, // $DBF0 + #$DBF1, // $DBF1 + #$DBF2, // $DBF2 + #$DBF3, // $DBF3 + #$DBF4, // $DBF4 + #$DBF5, // $DBF5 + #$DBF6, // $DBF6 + #$DBF7, // $DBF7 + #$DBF8, // $DBF8 + #$DBF9, // $DBF9 + #$DBFA, // $DBFA + #$DBFB, // $DBFB + #$DBFC, // $DBFC + #$DBFD, // $DBFD + #$DBFE, // $DBFE + #$DBFF, // $DBFF + #$DC00, // $DC00 + #$DC01, // $DC01 + #$DC02, // $DC02 + #$DC03, // $DC03 + #$DC04, // $DC04 + #$DC05, // $DC05 + #$DC06, // $DC06 + #$DC07, // $DC07 + #$DC08, // $DC08 + #$DC09, // $DC09 + #$DC0A, // $DC0A + #$DC0B, // $DC0B + #$DC0C, // $DC0C + #$DC0D, // $DC0D + #$DC0E, // $DC0E + #$DC0F, // $DC0F + #$DC10, // $DC10 + #$DC11, // $DC11 + #$DC12, // $DC12 + #$DC13, // $DC13 + #$DC14, // $DC14 + #$DC15, // $DC15 + #$DC16, // $DC16 + #$DC17, // $DC17 + #$DC18, // $DC18 + #$DC19, // $DC19 + #$DC1A, // $DC1A + #$DC1B, // $DC1B + #$DC1C, // $DC1C + #$DC1D, // $DC1D + #$DC1E, // $DC1E + #$DC1F, // $DC1F + #$DC20, // $DC20 + #$DC21, // $DC21 + #$DC22, // $DC22 + #$DC23, // $DC23 + #$DC24, // $DC24 + #$DC25, // $DC25 + #$DC26, // $DC26 + #$DC27, // $DC27 + #$DC28, // $DC28 + #$DC29, // $DC29 + #$DC2A, // $DC2A + #$DC2B, // $DC2B + #$DC2C, // $DC2C + #$DC2D, // $DC2D + #$DC2E, // $DC2E + #$DC2F, // $DC2F + #$DC30, // $DC30 + #$DC31, // $DC31 + #$DC32, // $DC32 + #$DC33, // $DC33 + #$DC34, // $DC34 + #$DC35, // $DC35 + #$DC36, // $DC36 + #$DC37, // $DC37 + #$DC38, // $DC38 + #$DC39, // $DC39 + #$DC3A, // $DC3A + #$DC3B, // $DC3B + #$DC3C, // $DC3C + #$DC3D, // $DC3D + #$DC3E, // $DC3E + #$DC3F, // $DC3F + #$DC40, // $DC40 + #$DC41, // $DC41 + #$DC42, // $DC42 + #$DC43, // $DC43 + #$DC44, // $DC44 + #$DC45, // $DC45 + #$DC46, // $DC46 + #$DC47, // $DC47 + #$DC48, // $DC48 + #$DC49, // $DC49 + #$DC4A, // $DC4A + #$DC4B, // $DC4B + #$DC4C, // $DC4C + #$DC4D, // $DC4D + #$DC4E, // $DC4E + #$DC4F, // $DC4F + #$DC50, // $DC50 + #$DC51, // $DC51 + #$DC52, // $DC52 + #$DC53, // $DC53 + #$DC54, // $DC54 + #$DC55, // $DC55 + #$DC56, // $DC56 + #$DC57, // $DC57 + #$DC58, // $DC58 + #$DC59, // $DC59 + #$DC5A, // $DC5A + #$DC5B, // $DC5B + #$DC5C, // $DC5C + #$DC5D, // $DC5D + #$DC5E, // $DC5E + #$DC5F, // $DC5F + #$DC60, // $DC60 + #$DC61, // $DC61 + #$DC62, // $DC62 + #$DC63, // $DC63 + #$DC64, // $DC64 + #$DC65, // $DC65 + #$DC66, // $DC66 + #$DC67, // $DC67 + #$DC68, // $DC68 + #$DC69, // $DC69 + #$DC6A, // $DC6A + #$DC6B, // $DC6B + #$DC6C, // $DC6C + #$DC6D, // $DC6D + #$DC6E, // $DC6E + #$DC6F, // $DC6F + #$DC70, // $DC70 + #$DC71, // $DC71 + #$DC72, // $DC72 + #$DC73, // $DC73 + #$DC74, // $DC74 + #$DC75, // $DC75 + #$DC76, // $DC76 + #$DC77, // $DC77 + #$DC78, // $DC78 + #$DC79, // $DC79 + #$DC7A, // $DC7A + #$DC7B, // $DC7B + #$DC7C, // $DC7C + #$DC7D, // $DC7D + #$DC7E, // $DC7E + #$DC7F, // $DC7F + #$DC80, // $DC80 + #$DC81, // $DC81 + #$DC82, // $DC82 + #$DC83, // $DC83 + #$DC84, // $DC84 + #$DC85, // $DC85 + #$DC86, // $DC86 + #$DC87, // $DC87 + #$DC88, // $DC88 + #$DC89, // $DC89 + #$DC8A, // $DC8A + #$DC8B, // $DC8B + #$DC8C, // $DC8C + #$DC8D, // $DC8D + #$DC8E, // $DC8E + #$DC8F, // $DC8F + #$DC90, // $DC90 + #$DC91, // $DC91 + #$DC92, // $DC92 + #$DC93, // $DC93 + #$DC94, // $DC94 + #$DC95, // $DC95 + #$DC96, // $DC96 + #$DC97, // $DC97 + #$DC98, // $DC98 + #$DC99, // $DC99 + #$DC9A, // $DC9A + #$DC9B, // $DC9B + #$DC9C, // $DC9C + #$DC9D, // $DC9D + #$DC9E, // $DC9E + #$DC9F, // $DC9F + #$DCA0, // $DCA0 + #$DCA1, // $DCA1 + #$DCA2, // $DCA2 + #$DCA3, // $DCA3 + #$DCA4, // $DCA4 + #$DCA5, // $DCA5 + #$DCA6, // $DCA6 + #$DCA7, // $DCA7 + #$DCA8, // $DCA8 + #$DCA9, // $DCA9 + #$DCAA, // $DCAA + #$DCAB, // $DCAB + #$DCAC, // $DCAC + #$DCAD, // $DCAD + #$DCAE, // $DCAE + #$DCAF, // $DCAF + #$DCB0, // $DCB0 + #$DCB1, // $DCB1 + #$DCB2, // $DCB2 + #$DCB3, // $DCB3 + #$DCB4, // $DCB4 + #$DCB5, // $DCB5 + #$DCB6, // $DCB6 + #$DCB7, // $DCB7 + #$DCB8, // $DCB8 + #$DCB9, // $DCB9 + #$DCBA, // $DCBA + #$DCBB, // $DCBB + #$DCBC, // $DCBC + #$DCBD, // $DCBD + #$DCBE, // $DCBE + #$DCBF, // $DCBF + #$DCC0, // $DCC0 + #$DCC1, // $DCC1 + #$DCC2, // $DCC2 + #$DCC3, // $DCC3 + #$DCC4, // $DCC4 + #$DCC5, // $DCC5 + #$DCC6, // $DCC6 + #$DCC7, // $DCC7 + #$DCC8, // $DCC8 + #$DCC9, // $DCC9 + #$DCCA, // $DCCA + #$DCCB, // $DCCB + #$DCCC, // $DCCC + #$DCCD, // $DCCD + #$DCCE, // $DCCE + #$DCCF, // $DCCF + #$DCD0, // $DCD0 + #$DCD1, // $DCD1 + #$DCD2, // $DCD2 + #$DCD3, // $DCD3 + #$DCD4, // $DCD4 + #$DCD5, // $DCD5 + #$DCD6, // $DCD6 + #$DCD7, // $DCD7 + #$DCD8, // $DCD8 + #$DCD9, // $DCD9 + #$DCDA, // $DCDA + #$DCDB, // $DCDB + #$DCDC, // $DCDC + #$DCDD, // $DCDD + #$DCDE, // $DCDE + #$DCDF, // $DCDF + #$DCE0, // $DCE0 + #$DCE1, // $DCE1 + #$DCE2, // $DCE2 + #$DCE3, // $DCE3 + #$DCE4, // $DCE4 + #$DCE5, // $DCE5 + #$DCE6, // $DCE6 + #$DCE7, // $DCE7 + #$DCE8, // $DCE8 + #$DCE9, // $DCE9 + #$DCEA, // $DCEA + #$DCEB, // $DCEB + #$DCEC, // $DCEC + #$DCED, // $DCED + #$DCEE, // $DCEE + #$DCEF, // $DCEF + #$DCF0, // $DCF0 + #$DCF1, // $DCF1 + #$DCF2, // $DCF2 + #$DCF3, // $DCF3 + #$DCF4, // $DCF4 + #$DCF5, // $DCF5 + #$DCF6, // $DCF6 + #$DCF7, // $DCF7 + #$DCF8, // $DCF8 + #$DCF9, // $DCF9 + #$DCFA, // $DCFA + #$DCFB, // $DCFB + #$DCFC, // $DCFC + #$DCFD, // $DCFD + #$DCFE, // $DCFE + #$DCFF, // $DCFF + #$DD00, // $DD00 + #$DD01, // $DD01 + #$DD02, // $DD02 + #$DD03, // $DD03 + #$DD04, // $DD04 + #$DD05, // $DD05 + #$DD06, // $DD06 + #$DD07, // $DD07 + #$DD08, // $DD08 + #$DD09, // $DD09 + #$DD0A, // $DD0A + #$DD0B, // $DD0B + #$DD0C, // $DD0C + #$DD0D, // $DD0D + #$DD0E, // $DD0E + #$DD0F, // $DD0F + #$DD10, // $DD10 + #$DD11, // $DD11 + #$DD12, // $DD12 + #$DD13, // $DD13 + #$DD14, // $DD14 + #$DD15, // $DD15 + #$DD16, // $DD16 + #$DD17, // $DD17 + #$DD18, // $DD18 + #$DD19, // $DD19 + #$DD1A, // $DD1A + #$DD1B, // $DD1B + #$DD1C, // $DD1C + #$DD1D, // $DD1D + #$DD1E, // $DD1E + #$DD1F, // $DD1F + #$DD20, // $DD20 + #$DD21, // $DD21 + #$DD22, // $DD22 + #$DD23, // $DD23 + #$DD24, // $DD24 + #$DD25, // $DD25 + #$DD26, // $DD26 + #$DD27, // $DD27 + #$DD28, // $DD28 + #$DD29, // $DD29 + #$DD2A, // $DD2A + #$DD2B, // $DD2B + #$DD2C, // $DD2C + #$DD2D, // $DD2D + #$DD2E, // $DD2E + #$DD2F, // $DD2F + #$DD30, // $DD30 + #$DD31, // $DD31 + #$DD32, // $DD32 + #$DD33, // $DD33 + #$DD34, // $DD34 + #$DD35, // $DD35 + #$DD36, // $DD36 + #$DD37, // $DD37 + #$DD38, // $DD38 + #$DD39, // $DD39 + #$DD3A, // $DD3A + #$DD3B, // $DD3B + #$DD3C, // $DD3C + #$DD3D, // $DD3D + #$DD3E, // $DD3E + #$DD3F, // $DD3F + #$DD40, // $DD40 + #$DD41, // $DD41 + #$DD42, // $DD42 + #$DD43, // $DD43 + #$DD44, // $DD44 + #$DD45, // $DD45 + #$DD46, // $DD46 + #$DD47, // $DD47 + #$DD48, // $DD48 + #$DD49, // $DD49 + #$DD4A, // $DD4A + #$DD4B, // $DD4B + #$DD4C, // $DD4C + #$DD4D, // $DD4D + #$DD4E, // $DD4E + #$DD4F, // $DD4F + #$DD50, // $DD50 + #$DD51, // $DD51 + #$DD52, // $DD52 + #$DD53, // $DD53 + #$DD54, // $DD54 + #$DD55, // $DD55 + #$DD56, // $DD56 + #$DD57, // $DD57 + #$DD58, // $DD58 + #$DD59, // $DD59 + #$DD5A, // $DD5A + #$DD5B, // $DD5B + #$DD5C, // $DD5C + #$DD5D, // $DD5D + #$DD5E, // $DD5E + #$DD5F, // $DD5F + #$DD60, // $DD60 + #$DD61, // $DD61 + #$DD62, // $DD62 + #$DD63, // $DD63 + #$DD64, // $DD64 + #$DD65, // $DD65 + #$DD66, // $DD66 + #$DD67, // $DD67 + #$DD68, // $DD68 + #$DD69, // $DD69 + #$DD6A, // $DD6A + #$DD6B, // $DD6B + #$DD6C, // $DD6C + #$DD6D, // $DD6D + #$DD6E, // $DD6E + #$DD6F, // $DD6F + #$DD70, // $DD70 + #$DD71, // $DD71 + #$DD72, // $DD72 + #$DD73, // $DD73 + #$DD74, // $DD74 + #$DD75, // $DD75 + #$DD76, // $DD76 + #$DD77, // $DD77 + #$DD78, // $DD78 + #$DD79, // $DD79 + #$DD7A, // $DD7A + #$DD7B, // $DD7B + #$DD7C, // $DD7C + #$DD7D, // $DD7D + #$DD7E, // $DD7E + #$DD7F, // $DD7F + #$DD80, // $DD80 + #$DD81, // $DD81 + #$DD82, // $DD82 + #$DD83, // $DD83 + #$DD84, // $DD84 + #$DD85, // $DD85 + #$DD86, // $DD86 + #$DD87, // $DD87 + #$DD88, // $DD88 + #$DD89, // $DD89 + #$DD8A, // $DD8A + #$DD8B, // $DD8B + #$DD8C, // $DD8C + #$DD8D, // $DD8D + #$DD8E, // $DD8E + #$DD8F, // $DD8F + #$DD90, // $DD90 + #$DD91, // $DD91 + #$DD92, // $DD92 + #$DD93, // $DD93 + #$DD94, // $DD94 + #$DD95, // $DD95 + #$DD96, // $DD96 + #$DD97, // $DD97 + #$DD98, // $DD98 + #$DD99, // $DD99 + #$DD9A, // $DD9A + #$DD9B, // $DD9B + #$DD9C, // $DD9C + #$DD9D, // $DD9D + #$DD9E, // $DD9E + #$DD9F, // $DD9F + #$DDA0, // $DDA0 + #$DDA1, // $DDA1 + #$DDA2, // $DDA2 + #$DDA3, // $DDA3 + #$DDA4, // $DDA4 + #$DDA5, // $DDA5 + #$DDA6, // $DDA6 + #$DDA7, // $DDA7 + #$DDA8, // $DDA8 + #$DDA9, // $DDA9 + #$DDAA, // $DDAA + #$DDAB, // $DDAB + #$DDAC, // $DDAC + #$DDAD, // $DDAD + #$DDAE, // $DDAE + #$DDAF, // $DDAF + #$DDB0, // $DDB0 + #$DDB1, // $DDB1 + #$DDB2, // $DDB2 + #$DDB3, // $DDB3 + #$DDB4, // $DDB4 + #$DDB5, // $DDB5 + #$DDB6, // $DDB6 + #$DDB7, // $DDB7 + #$DDB8, // $DDB8 + #$DDB9, // $DDB9 + #$DDBA, // $DDBA + #$DDBB, // $DDBB + #$DDBC, // $DDBC + #$DDBD, // $DDBD + #$DDBE, // $DDBE + #$DDBF, // $DDBF + #$DDC0, // $DDC0 + #$DDC1, // $DDC1 + #$DDC2, // $DDC2 + #$DDC3, // $DDC3 + #$DDC4, // $DDC4 + #$DDC5, // $DDC5 + #$DDC6, // $DDC6 + #$DDC7, // $DDC7 + #$DDC8, // $DDC8 + #$DDC9, // $DDC9 + #$DDCA, // $DDCA + #$DDCB, // $DDCB + #$DDCC, // $DDCC + #$DDCD, // $DDCD + #$DDCE, // $DDCE + #$DDCF, // $DDCF + #$DDD0, // $DDD0 + #$DDD1, // $DDD1 + #$DDD2, // $DDD2 + #$DDD3, // $DDD3 + #$DDD4, // $DDD4 + #$DDD5, // $DDD5 + #$DDD6, // $DDD6 + #$DDD7, // $DDD7 + #$DDD8, // $DDD8 + #$DDD9, // $DDD9 + #$DDDA, // $DDDA + #$DDDB, // $DDDB + #$DDDC, // $DDDC + #$DDDD, // $DDDD + #$DDDE, // $DDDE + #$DDDF, // $DDDF + #$DDE0, // $DDE0 + #$DDE1, // $DDE1 + #$DDE2, // $DDE2 + #$DDE3, // $DDE3 + #$DDE4, // $DDE4 + #$DDE5, // $DDE5 + #$DDE6, // $DDE6 + #$DDE7, // $DDE7 + #$DDE8, // $DDE8 + #$DDE9, // $DDE9 + #$DDEA, // $DDEA + #$DDEB, // $DDEB + #$DDEC, // $DDEC + #$DDED, // $DDED + #$DDEE, // $DDEE + #$DDEF, // $DDEF + #$DDF0, // $DDF0 + #$DDF1, // $DDF1 + #$DDF2, // $DDF2 + #$DDF3, // $DDF3 + #$DDF4, // $DDF4 + #$DDF5, // $DDF5 + #$DDF6, // $DDF6 + #$DDF7, // $DDF7 + #$DDF8, // $DDF8 + #$DDF9, // $DDF9 + #$DDFA, // $DDFA + #$DDFB, // $DDFB + #$DDFC, // $DDFC + #$DDFD, // $DDFD + #$DDFE, // $DDFE + #$DDFF, // $DDFF + #$DE00, // $DE00 + #$DE01, // $DE01 + #$DE02, // $DE02 + #$DE03, // $DE03 + #$DE04, // $DE04 + #$DE05, // $DE05 + #$DE06, // $DE06 + #$DE07, // $DE07 + #$DE08, // $DE08 + #$DE09, // $DE09 + #$DE0A, // $DE0A + #$DE0B, // $DE0B + #$DE0C, // $DE0C + #$DE0D, // $DE0D + #$DE0E, // $DE0E + #$DE0F, // $DE0F + #$DE10, // $DE10 + #$DE11, // $DE11 + #$DE12, // $DE12 + #$DE13, // $DE13 + #$DE14, // $DE14 + #$DE15, // $DE15 + #$DE16, // $DE16 + #$DE17, // $DE17 + #$DE18, // $DE18 + #$DE19, // $DE19 + #$DE1A, // $DE1A + #$DE1B, // $DE1B + #$DE1C, // $DE1C + #$DE1D, // $DE1D + #$DE1E, // $DE1E + #$DE1F, // $DE1F + #$DE20, // $DE20 + #$DE21, // $DE21 + #$DE22, // $DE22 + #$DE23, // $DE23 + #$DE24, // $DE24 + #$DE25, // $DE25 + #$DE26, // $DE26 + #$DE27, // $DE27 + #$DE28, // $DE28 + #$DE29, // $DE29 + #$DE2A, // $DE2A + #$DE2B, // $DE2B + #$DE2C, // $DE2C + #$DE2D, // $DE2D + #$DE2E, // $DE2E + #$DE2F, // $DE2F + #$DE30, // $DE30 + #$DE31, // $DE31 + #$DE32, // $DE32 + #$DE33, // $DE33 + #$DE34, // $DE34 + #$DE35, // $DE35 + #$DE36, // $DE36 + #$DE37, // $DE37 + #$DE38, // $DE38 + #$DE39, // $DE39 + #$DE3A, // $DE3A + #$DE3B, // $DE3B + #$DE3C, // $DE3C + #$DE3D, // $DE3D + #$DE3E, // $DE3E + #$DE3F, // $DE3F + #$DE40, // $DE40 + #$DE41, // $DE41 + #$DE42, // $DE42 + #$DE43, // $DE43 + #$DE44, // $DE44 + #$DE45, // $DE45 + #$DE46, // $DE46 + #$DE47, // $DE47 + #$DE48, // $DE48 + #$DE49, // $DE49 + #$DE4A, // $DE4A + #$DE4B, // $DE4B + #$DE4C, // $DE4C + #$DE4D, // $DE4D + #$DE4E, // $DE4E + #$DE4F, // $DE4F + #$DE50, // $DE50 + #$DE51, // $DE51 + #$DE52, // $DE52 + #$DE53, // $DE53 + #$DE54, // $DE54 + #$DE55, // $DE55 + #$DE56, // $DE56 + #$DE57, // $DE57 + #$DE58, // $DE58 + #$DE59, // $DE59 + #$DE5A, // $DE5A + #$DE5B, // $DE5B + #$DE5C, // $DE5C + #$DE5D, // $DE5D + #$DE5E, // $DE5E + #$DE5F, // $DE5F + #$DE60, // $DE60 + #$DE61, // $DE61 + #$DE62, // $DE62 + #$DE63, // $DE63 + #$DE64, // $DE64 + #$DE65, // $DE65 + #$DE66, // $DE66 + #$DE67, // $DE67 + #$DE68, // $DE68 + #$DE69, // $DE69 + #$DE6A, // $DE6A + #$DE6B, // $DE6B + #$DE6C, // $DE6C + #$DE6D, // $DE6D + #$DE6E, // $DE6E + #$DE6F, // $DE6F + #$DE70, // $DE70 + #$DE71, // $DE71 + #$DE72, // $DE72 + #$DE73, // $DE73 + #$DE74, // $DE74 + #$DE75, // $DE75 + #$DE76, // $DE76 + #$DE77, // $DE77 + #$DE78, // $DE78 + #$DE79, // $DE79 + #$DE7A, // $DE7A + #$DE7B, // $DE7B + #$DE7C, // $DE7C + #$DE7D, // $DE7D + #$DE7E, // $DE7E + #$DE7F, // $DE7F + #$DE80, // $DE80 + #$DE81, // $DE81 + #$DE82, // $DE82 + #$DE83, // $DE83 + #$DE84, // $DE84 + #$DE85, // $DE85 + #$DE86, // $DE86 + #$DE87, // $DE87 + #$DE88, // $DE88 + #$DE89, // $DE89 + #$DE8A, // $DE8A + #$DE8B, // $DE8B + #$DE8C, // $DE8C + #$DE8D, // $DE8D + #$DE8E, // $DE8E + #$DE8F, // $DE8F + #$DE90, // $DE90 + #$DE91, // $DE91 + #$DE92, // $DE92 + #$DE93, // $DE93 + #$DE94, // $DE94 + #$DE95, // $DE95 + #$DE96, // $DE96 + #$DE97, // $DE97 + #$DE98, // $DE98 + #$DE99, // $DE99 + #$DE9A, // $DE9A + #$DE9B, // $DE9B + #$DE9C, // $DE9C + #$DE9D, // $DE9D + #$DE9E, // $DE9E + #$DE9F, // $DE9F + #$DEA0, // $DEA0 + #$DEA1, // $DEA1 + #$DEA2, // $DEA2 + #$DEA3, // $DEA3 + #$DEA4, // $DEA4 + #$DEA5, // $DEA5 + #$DEA6, // $DEA6 + #$DEA7, // $DEA7 + #$DEA8, // $DEA8 + #$DEA9, // $DEA9 + #$DEAA, // $DEAA + #$DEAB, // $DEAB + #$DEAC, // $DEAC + #$DEAD, // $DEAD + #$DEAE, // $DEAE + #$DEAF, // $DEAF + #$DEB0, // $DEB0 + #$DEB1, // $DEB1 + #$DEB2, // $DEB2 + #$DEB3, // $DEB3 + #$DEB4, // $DEB4 + #$DEB5, // $DEB5 + #$DEB6, // $DEB6 + #$DEB7, // $DEB7 + #$DEB8, // $DEB8 + #$DEB9, // $DEB9 + #$DEBA, // $DEBA + #$DEBB, // $DEBB + #$DEBC, // $DEBC + #$DEBD, // $DEBD + #$DEBE, // $DEBE + #$DEBF, // $DEBF + #$DEC0, // $DEC0 + #$DEC1, // $DEC1 + #$DEC2, // $DEC2 + #$DEC3, // $DEC3 + #$DEC4, // $DEC4 + #$DEC5, // $DEC5 + #$DEC6, // $DEC6 + #$DEC7, // $DEC7 + #$DEC8, // $DEC8 + #$DEC9, // $DEC9 + #$DECA, // $DECA + #$DECB, // $DECB + #$DECC, // $DECC + #$DECD, // $DECD + #$DECE, // $DECE + #$DECF, // $DECF + #$DED0, // $DED0 + #$DED1, // $DED1 + #$DED2, // $DED2 + #$DED3, // $DED3 + #$DED4, // $DED4 + #$DED5, // $DED5 + #$DED6, // $DED6 + #$DED7, // $DED7 + #$DED8, // $DED8 + #$DED9, // $DED9 + #$DEDA, // $DEDA + #$DEDB, // $DEDB + #$DEDC, // $DEDC + #$DEDD, // $DEDD + #$DEDE, // $DEDE + #$DEDF, // $DEDF + #$DEE0, // $DEE0 + #$DEE1, // $DEE1 + #$DEE2, // $DEE2 + #$DEE3, // $DEE3 + #$DEE4, // $DEE4 + #$DEE5, // $DEE5 + #$DEE6, // $DEE6 + #$DEE7, // $DEE7 + #$DEE8, // $DEE8 + #$DEE9, // $DEE9 + #$DEEA, // $DEEA + #$DEEB, // $DEEB + #$DEEC, // $DEEC + #$DEED, // $DEED + #$DEEE, // $DEEE + #$DEEF, // $DEEF + #$DEF0, // $DEF0 + #$DEF1, // $DEF1 + #$DEF2, // $DEF2 + #$DEF3, // $DEF3 + #$DEF4, // $DEF4 + #$DEF5, // $DEF5 + #$DEF6, // $DEF6 + #$DEF7, // $DEF7 + #$DEF8, // $DEF8 + #$DEF9, // $DEF9 + #$DEFA, // $DEFA + #$DEFB, // $DEFB + #$DEFC, // $DEFC + #$DEFD, // $DEFD + #$DEFE, // $DEFE + #$DEFF, // $DEFF + #$DF00, // $DF00 + #$DF01, // $DF01 + #$DF02, // $DF02 + #$DF03, // $DF03 + #$DF04, // $DF04 + #$DF05, // $DF05 + #$DF06, // $DF06 + #$DF07, // $DF07 + #$DF08, // $DF08 + #$DF09, // $DF09 + #$DF0A, // $DF0A + #$DF0B, // $DF0B + #$DF0C, // $DF0C + #$DF0D, // $DF0D + #$DF0E, // $DF0E + #$DF0F, // $DF0F + #$DF10, // $DF10 + #$DF11, // $DF11 + #$DF12, // $DF12 + #$DF13, // $DF13 + #$DF14, // $DF14 + #$DF15, // $DF15 + #$DF16, // $DF16 + #$DF17, // $DF17 + #$DF18, // $DF18 + #$DF19, // $DF19 + #$DF1A, // $DF1A + #$DF1B, // $DF1B + #$DF1C, // $DF1C + #$DF1D, // $DF1D + #$DF1E, // $DF1E + #$DF1F, // $DF1F + #$DF20, // $DF20 + #$DF21, // $DF21 + #$DF22, // $DF22 + #$DF23, // $DF23 + #$DF24, // $DF24 + #$DF25, // $DF25 + #$DF26, // $DF26 + #$DF27, // $DF27 + #$DF28, // $DF28 + #$DF29, // $DF29 + #$DF2A, // $DF2A + #$DF2B, // $DF2B + #$DF2C, // $DF2C + #$DF2D, // $DF2D + #$DF2E, // $DF2E + #$DF2F, // $DF2F + #$DF30, // $DF30 + #$DF31, // $DF31 + #$DF32, // $DF32 + #$DF33, // $DF33 + #$DF34, // $DF34 + #$DF35, // $DF35 + #$DF36, // $DF36 + #$DF37, // $DF37 + #$DF38, // $DF38 + #$DF39, // $DF39 + #$DF3A, // $DF3A + #$DF3B, // $DF3B + #$DF3C, // $DF3C + #$DF3D, // $DF3D + #$DF3E, // $DF3E + #$DF3F, // $DF3F + #$DF40, // $DF40 + #$DF41, // $DF41 + #$DF42, // $DF42 + #$DF43, // $DF43 + #$DF44, // $DF44 + #$DF45, // $DF45 + #$DF46, // $DF46 + #$DF47, // $DF47 + #$DF48, // $DF48 + #$DF49, // $DF49 + #$DF4A, // $DF4A + #$DF4B, // $DF4B + #$DF4C, // $DF4C + #$DF4D, // $DF4D + #$DF4E, // $DF4E + #$DF4F, // $DF4F + #$DF50, // $DF50 + #$DF51, // $DF51 + #$DF52, // $DF52 + #$DF53, // $DF53 + #$DF54, // $DF54 + #$DF55, // $DF55 + #$DF56, // $DF56 + #$DF57, // $DF57 + #$DF58, // $DF58 + #$DF59, // $DF59 + #$DF5A, // $DF5A + #$DF5B, // $DF5B + #$DF5C, // $DF5C + #$DF5D, // $DF5D + #$DF5E, // $DF5E + #$DF5F, // $DF5F + #$DF60, // $DF60 + #$DF61, // $DF61 + #$DF62, // $DF62 + #$DF63, // $DF63 + #$DF64, // $DF64 + #$DF65, // $DF65 + #$DF66, // $DF66 + #$DF67, // $DF67 + #$DF68, // $DF68 + #$DF69, // $DF69 + #$DF6A, // $DF6A + #$DF6B, // $DF6B + #$DF6C, // $DF6C + #$DF6D, // $DF6D + #$DF6E, // $DF6E + #$DF6F, // $DF6F + #$DF70, // $DF70 + #$DF71, // $DF71 + #$DF72, // $DF72 + #$DF73, // $DF73 + #$DF74, // $DF74 + #$DF75, // $DF75 + #$DF76, // $DF76 + #$DF77, // $DF77 + #$DF78, // $DF78 + #$DF79, // $DF79 + #$DF7A, // $DF7A + #$DF7B, // $DF7B + #$DF7C, // $DF7C + #$DF7D, // $DF7D + #$DF7E, // $DF7E + #$DF7F, // $DF7F + #$DF80, // $DF80 + #$DF81, // $DF81 + #$DF82, // $DF82 + #$DF83, // $DF83 + #$DF84, // $DF84 + #$DF85, // $DF85 + #$DF86, // $DF86 + #$DF87, // $DF87 + #$DF88, // $DF88 + #$DF89, // $DF89 + #$DF8A, // $DF8A + #$DF8B, // $DF8B + #$DF8C, // $DF8C + #$DF8D, // $DF8D + #$DF8E, // $DF8E + #$DF8F, // $DF8F + #$DF90, // $DF90 + #$DF91, // $DF91 + #$DF92, // $DF92 + #$DF93, // $DF93 + #$DF94, // $DF94 + #$DF95, // $DF95 + #$DF96, // $DF96 + #$DF97, // $DF97 + #$DF98, // $DF98 + #$DF99, // $DF99 + #$DF9A, // $DF9A + #$DF9B, // $DF9B + #$DF9C, // $DF9C + #$DF9D, // $DF9D + #$DF9E, // $DF9E + #$DF9F, // $DF9F + #$DFA0, // $DFA0 + #$DFA1, // $DFA1 + #$DFA2, // $DFA2 + #$DFA3, // $DFA3 + #$DFA4, // $DFA4 + #$DFA5, // $DFA5 + #$DFA6, // $DFA6 + #$DFA7, // $DFA7 + #$DFA8, // $DFA8 + #$DFA9, // $DFA9 + #$DFAA, // $DFAA + #$DFAB, // $DFAB + #$DFAC, // $DFAC + #$DFAD, // $DFAD + #$DFAE, // $DFAE + #$DFAF, // $DFAF + #$DFB0, // $DFB0 + #$DFB1, // $DFB1 + #$DFB2, // $DFB2 + #$DFB3, // $DFB3 + #$DFB4, // $DFB4 + #$DFB5, // $DFB5 + #$DFB6, // $DFB6 + #$DFB7, // $DFB7 + #$DFB8, // $DFB8 + #$DFB9, // $DFB9 + #$DFBA, // $DFBA + #$DFBB, // $DFBB + #$DFBC, // $DFBC + #$DFBD, // $DFBD + #$DFBE, // $DFBE + #$DFBF, // $DFBF + #$DFC0, // $DFC0 + #$DFC1, // $DFC1 + #$DFC2, // $DFC2 + #$DFC3, // $DFC3 + #$DFC4, // $DFC4 + #$DFC5, // $DFC5 + #$DFC6, // $DFC6 + #$DFC7, // $DFC7 + #$DFC8, // $DFC8 + #$DFC9, // $DFC9 + #$DFCA, // $DFCA + #$DFCB, // $DFCB + #$DFCC, // $DFCC + #$DFCD, // $DFCD + #$DFCE, // $DFCE + #$DFCF, // $DFCF + #$DFD0, // $DFD0 + #$DFD1, // $DFD1 + #$DFD2, // $DFD2 + #$DFD3, // $DFD3 + #$DFD4, // $DFD4 + #$DFD5, // $DFD5 + #$DFD6, // $DFD6 + #$DFD7, // $DFD7 + #$DFD8, // $DFD8 + #$DFD9, // $DFD9 + #$DFDA, // $DFDA + #$DFDB, // $DFDB + #$DFDC, // $DFDC + #$DFDD, // $DFDD + #$DFDE, // $DFDE + #$DFDF, // $DFDF + #$DFE0, // $DFE0 + #$DFE1, // $DFE1 + #$DFE2, // $DFE2 + #$DFE3, // $DFE3 + #$DFE4, // $DFE4 + #$DFE5, // $DFE5 + #$DFE6, // $DFE6 + #$DFE7, // $DFE7 + #$DFE8, // $DFE8 + #$DFE9, // $DFE9 + #$DFEA, // $DFEA + #$DFEB, // $DFEB + #$DFEC, // $DFEC + #$DFED, // $DFED + #$DFEE, // $DFEE + #$DFEF, // $DFEF + #$DFF0, // $DFF0 + #$DFF1, // $DFF1 + #$DFF2, // $DFF2 + #$DFF3, // $DFF3 + #$DFF4, // $DFF4 + #$DFF5, // $DFF5 + #$DFF6, // $DFF6 + #$DFF7, // $DFF7 + #$DFF8, // $DFF8 + #$DFF9, // $DFF9 + #$DFFA, // $DFFA + #$DFFB, // $DFFB + #$DFFC, // $DFFC + #$DFFD, // $DFFD + #$DFFE, // $DFFE + #$DFFF, // $DFFF + #$E000, // $E000 + #$E001, // $E001 + #$E002, // $E002 + #$E003, // $E003 + #$E004, // $E004 + #$E005, // $E005 + #$E006, // $E006 + #$E007, // $E007 + #$E008, // $E008 + #$E009, // $E009 + #$E00A, // $E00A + #$E00B, // $E00B + #$E00C, // $E00C + #$E00D, // $E00D + #$E00E, // $E00E + #$E00F, // $E00F + #$E010, // $E010 + #$E011, // $E011 + #$E012, // $E012 + #$E013, // $E013 + #$E014, // $E014 + #$E015, // $E015 + #$E016, // $E016 + #$E017, // $E017 + #$E018, // $E018 + #$E019, // $E019 + #$E01A, // $E01A + #$E01B, // $E01B + #$E01C, // $E01C + #$E01D, // $E01D + #$E01E, // $E01E + #$E01F, // $E01F + #$E020, // $E020 + #$E021, // $E021 + #$E022, // $E022 + #$E023, // $E023 + #$E024, // $E024 + #$E025, // $E025 + #$E026, // $E026 + #$E027, // $E027 + #$E028, // $E028 + #$E029, // $E029 + #$E02A, // $E02A + #$E02B, // $E02B + #$E02C, // $E02C + #$E02D, // $E02D + #$E02E, // $E02E + #$E02F, // $E02F + #$E030, // $E030 + #$E031, // $E031 + #$E032, // $E032 + #$E033, // $E033 + #$E034, // $E034 + #$E035, // $E035 + #$E036, // $E036 + #$E037, // $E037 + #$E038, // $E038 + #$E039, // $E039 + #$E03A, // $E03A + #$E03B, // $E03B + #$E03C, // $E03C + #$E03D, // $E03D + #$E03E, // $E03E + #$E03F, // $E03F + #$E040, // $E040 + #$E041, // $E041 + #$E042, // $E042 + #$E043, // $E043 + #$E044, // $E044 + #$E045, // $E045 + #$E046, // $E046 + #$E047, // $E047 + #$E048, // $E048 + #$E049, // $E049 + #$E04A, // $E04A + #$E04B, // $E04B + #$E04C, // $E04C + #$E04D, // $E04D + #$E04E, // $E04E + #$E04F, // $E04F + #$E050, // $E050 + #$E051, // $E051 + #$E052, // $E052 + #$E053, // $E053 + #$E054, // $E054 + #$E055, // $E055 + #$E056, // $E056 + #$E057, // $E057 + #$E058, // $E058 + #$E059, // $E059 + #$E05A, // $E05A + #$E05B, // $E05B + #$E05C, // $E05C + #$E05D, // $E05D + #$E05E, // $E05E + #$E05F, // $E05F + #$E060, // $E060 + #$E061, // $E061 + #$E062, // $E062 + #$E063, // $E063 + #$E064, // $E064 + #$E065, // $E065 + #$E066, // $E066 + #$E067, // $E067 + #$E068, // $E068 + #$E069, // $E069 + #$E06A, // $E06A + #$E06B, // $E06B + #$E06C, // $E06C + #$E06D, // $E06D + #$E06E, // $E06E + #$E06F, // $E06F + #$E070, // $E070 + #$E071, // $E071 + #$E072, // $E072 + #$E073, // $E073 + #$E074, // $E074 + #$E075, // $E075 + #$E076, // $E076 + #$E077, // $E077 + #$E078, // $E078 + #$E079, // $E079 + #$E07A, // $E07A + #$E07B, // $E07B + #$E07C, // $E07C + #$E07D, // $E07D + #$E07E, // $E07E + #$E07F, // $E07F + #$E080, // $E080 + #$E081, // $E081 + #$E082, // $E082 + #$E083, // $E083 + #$E084, // $E084 + #$E085, // $E085 + #$E086, // $E086 + #$E087, // $E087 + #$E088, // $E088 + #$E089, // $E089 + #$E08A, // $E08A + #$E08B, // $E08B + #$E08C, // $E08C + #$E08D, // $E08D + #$E08E, // $E08E + #$E08F, // $E08F + #$E090, // $E090 + #$E091, // $E091 + #$E092, // $E092 + #$E093, // $E093 + #$E094, // $E094 + #$E095, // $E095 + #$E096, // $E096 + #$E097, // $E097 + #$E098, // $E098 + #$E099, // $E099 + #$E09A, // $E09A + #$E09B, // $E09B + #$E09C, // $E09C + #$E09D, // $E09D + #$E09E, // $E09E + #$E09F, // $E09F + #$E0A0, // $E0A0 + #$E0A1, // $E0A1 + #$E0A2, // $E0A2 + #$E0A3, // $E0A3 + #$E0A4, // $E0A4 + #$E0A5, // $E0A5 + #$E0A6, // $E0A6 + #$E0A7, // $E0A7 + #$E0A8, // $E0A8 + #$E0A9, // $E0A9 + #$E0AA, // $E0AA + #$E0AB, // $E0AB + #$E0AC, // $E0AC + #$E0AD, // $E0AD + #$E0AE, // $E0AE + #$E0AF, // $E0AF + #$E0B0, // $E0B0 + #$E0B1, // $E0B1 + #$E0B2, // $E0B2 + #$E0B3, // $E0B3 + #$E0B4, // $E0B4 + #$E0B5, // $E0B5 + #$E0B6, // $E0B6 + #$E0B7, // $E0B7 + #$E0B8, // $E0B8 + #$E0B9, // $E0B9 + #$E0BA, // $E0BA + #$E0BB, // $E0BB + #$E0BC, // $E0BC + #$E0BD, // $E0BD + #$E0BE, // $E0BE + #$E0BF, // $E0BF + #$E0C0, // $E0C0 + #$E0C1, // $E0C1 + #$E0C2, // $E0C2 + #$E0C3, // $E0C3 + #$E0C4, // $E0C4 + #$E0C5, // $E0C5 + #$E0C6, // $E0C6 + #$E0C7, // $E0C7 + #$E0C8, // $E0C8 + #$E0C9, // $E0C9 + #$E0CA, // $E0CA + #$E0CB, // $E0CB + #$E0CC, // $E0CC + #$E0CD, // $E0CD + #$E0CE, // $E0CE + #$E0CF, // $E0CF + #$E0D0, // $E0D0 + #$E0D1, // $E0D1 + #$E0D2, // $E0D2 + #$E0D3, // $E0D3 + #$E0D4, // $E0D4 + #$E0D5, // $E0D5 + #$E0D6, // $E0D6 + #$E0D7, // $E0D7 + #$E0D8, // $E0D8 + #$E0D9, // $E0D9 + #$E0DA, // $E0DA + #$E0DB, // $E0DB + #$E0DC, // $E0DC + #$E0DD, // $E0DD + #$E0DE, // $E0DE + #$E0DF, // $E0DF + #$E0E0, // $E0E0 + #$E0E1, // $E0E1 + #$E0E2, // $E0E2 + #$E0E3, // $E0E3 + #$E0E4, // $E0E4 + #$E0E5, // $E0E5 + #$E0E6, // $E0E6 + #$E0E7, // $E0E7 + #$E0E8, // $E0E8 + #$E0E9, // $E0E9 + #$E0EA, // $E0EA + #$E0EB, // $E0EB + #$E0EC, // $E0EC + #$E0ED, // $E0ED + #$E0EE, // $E0EE + #$E0EF, // $E0EF + #$E0F0, // $E0F0 + #$E0F1, // $E0F1 + #$E0F2, // $E0F2 + #$E0F3, // $E0F3 + #$E0F4, // $E0F4 + #$E0F5, // $E0F5 + #$E0F6, // $E0F6 + #$E0F7, // $E0F7 + #$E0F8, // $E0F8 + #$E0F9, // $E0F9 + #$E0FA, // $E0FA + #$E0FB, // $E0FB + #$E0FC, // $E0FC + #$E0FD, // $E0FD + #$E0FE, // $E0FE + #$E0FF, // $E0FF + #$E100, // $E100 + #$E101, // $E101 + #$E102, // $E102 + #$E103, // $E103 + #$E104, // $E104 + #$E105, // $E105 + #$E106, // $E106 + #$E107, // $E107 + #$E108, // $E108 + #$E109, // $E109 + #$E10A, // $E10A + #$E10B, // $E10B + #$E10C, // $E10C + #$E10D, // $E10D + #$E10E, // $E10E + #$E10F, // $E10F + #$E110, // $E110 + #$E111, // $E111 + #$E112, // $E112 + #$E113, // $E113 + #$E114, // $E114 + #$E115, // $E115 + #$E116, // $E116 + #$E117, // $E117 + #$E118, // $E118 + #$E119, // $E119 + #$E11A, // $E11A + #$E11B, // $E11B + #$E11C, // $E11C + #$E11D, // $E11D + #$E11E, // $E11E + #$E11F, // $E11F + #$E120, // $E120 + #$E121, // $E121 + #$E122, // $E122 + #$E123, // $E123 + #$E124, // $E124 + #$E125, // $E125 + #$E126, // $E126 + #$E127, // $E127 + #$E128, // $E128 + #$E129, // $E129 + #$E12A, // $E12A + #$E12B, // $E12B + #$E12C, // $E12C + #$E12D, // $E12D + #$E12E, // $E12E + #$E12F, // $E12F + #$E130, // $E130 + #$E131, // $E131 + #$E132, // $E132 + #$E133, // $E133 + #$E134, // $E134 + #$E135, // $E135 + #$E136, // $E136 + #$E137, // $E137 + #$E138, // $E138 + #$E139, // $E139 + #$E13A, // $E13A + #$E13B, // $E13B + #$E13C, // $E13C + #$E13D, // $E13D + #$E13E, // $E13E + #$E13F, // $E13F + #$E140, // $E140 + #$E141, // $E141 + #$E142, // $E142 + #$E143, // $E143 + #$E144, // $E144 + #$E145, // $E145 + #$E146, // $E146 + #$E147, // $E147 + #$E148, // $E148 + #$E149, // $E149 + #$E14A, // $E14A + #$E14B, // $E14B + #$E14C, // $E14C + #$E14D, // $E14D + #$E14E, // $E14E + #$E14F, // $E14F + #$E150, // $E150 + #$E151, // $E151 + #$E152, // $E152 + #$E153, // $E153 + #$E154, // $E154 + #$E155, // $E155 + #$E156, // $E156 + #$E157, // $E157 + #$E158, // $E158 + #$E159, // $E159 + #$E15A, // $E15A + #$E15B, // $E15B + #$E15C, // $E15C + #$E15D, // $E15D + #$E15E, // $E15E + #$E15F, // $E15F + #$E160, // $E160 + #$E161, // $E161 + #$E162, // $E162 + #$E163, // $E163 + #$E164, // $E164 + #$E165, // $E165 + #$E166, // $E166 + #$E167, // $E167 + #$E168, // $E168 + #$E169, // $E169 + #$E16A, // $E16A + #$E16B, // $E16B + #$E16C, // $E16C + #$E16D, // $E16D + #$E16E, // $E16E + #$E16F, // $E16F + #$E170, // $E170 + #$E171, // $E171 + #$E172, // $E172 + #$E173, // $E173 + #$E174, // $E174 + #$E175, // $E175 + #$E176, // $E176 + #$E177, // $E177 + #$E178, // $E178 + #$E179, // $E179 + #$E17A, // $E17A + #$E17B, // $E17B + #$E17C, // $E17C + #$E17D, // $E17D + #$E17E, // $E17E + #$E17F, // $E17F + #$E180, // $E180 + #$E181, // $E181 + #$E182, // $E182 + #$E183, // $E183 + #$E184, // $E184 + #$E185, // $E185 + #$E186, // $E186 + #$E187, // $E187 + #$E188, // $E188 + #$E189, // $E189 + #$E18A, // $E18A + #$E18B, // $E18B + #$E18C, // $E18C + #$E18D, // $E18D + #$E18E, // $E18E + #$E18F, // $E18F + #$E190, // $E190 + #$E191, // $E191 + #$E192, // $E192 + #$E193, // $E193 + #$E194, // $E194 + #$E195, // $E195 + #$E196, // $E196 + #$E197, // $E197 + #$E198, // $E198 + #$E199, // $E199 + #$E19A, // $E19A + #$E19B, // $E19B + #$E19C, // $E19C + #$E19D, // $E19D + #$E19E, // $E19E + #$E19F, // $E19F + #$E1A0, // $E1A0 + #$E1A1, // $E1A1 + #$E1A2, // $E1A2 + #$E1A3, // $E1A3 + #$E1A4, // $E1A4 + #$E1A5, // $E1A5 + #$E1A6, // $E1A6 + #$E1A7, // $E1A7 + #$E1A8, // $E1A8 + #$E1A9, // $E1A9 + #$E1AA, // $E1AA + #$E1AB, // $E1AB + #$E1AC, // $E1AC + #$E1AD, // $E1AD + #$E1AE, // $E1AE + #$E1AF, // $E1AF + #$E1B0, // $E1B0 + #$E1B1, // $E1B1 + #$E1B2, // $E1B2 + #$E1B3, // $E1B3 + #$E1B4, // $E1B4 + #$E1B5, // $E1B5 + #$E1B6, // $E1B6 + #$E1B7, // $E1B7 + #$E1B8, // $E1B8 + #$E1B9, // $E1B9 + #$E1BA, // $E1BA + #$E1BB, // $E1BB + #$E1BC, // $E1BC + #$E1BD, // $E1BD + #$E1BE, // $E1BE + #$E1BF, // $E1BF + #$E1C0, // $E1C0 + #$E1C1, // $E1C1 + #$E1C2, // $E1C2 + #$E1C3, // $E1C3 + #$E1C4, // $E1C4 + #$E1C5, // $E1C5 + #$E1C6, // $E1C6 + #$E1C7, // $E1C7 + #$E1C8, // $E1C8 + #$E1C9, // $E1C9 + #$E1CA, // $E1CA + #$E1CB, // $E1CB + #$E1CC, // $E1CC + #$E1CD, // $E1CD + #$E1CE, // $E1CE + #$E1CF, // $E1CF + #$E1D0, // $E1D0 + #$E1D1, // $E1D1 + #$E1D2, // $E1D2 + #$E1D3, // $E1D3 + #$E1D4, // $E1D4 + #$E1D5, // $E1D5 + #$E1D6, // $E1D6 + #$E1D7, // $E1D7 + #$E1D8, // $E1D8 + #$E1D9, // $E1D9 + #$E1DA, // $E1DA + #$E1DB, // $E1DB + #$E1DC, // $E1DC + #$E1DD, // $E1DD + #$E1DE, // $E1DE + #$E1DF, // $E1DF + #$E1E0, // $E1E0 + #$E1E1, // $E1E1 + #$E1E2, // $E1E2 + #$E1E3, // $E1E3 + #$E1E4, // $E1E4 + #$E1E5, // $E1E5 + #$E1E6, // $E1E6 + #$E1E7, // $E1E7 + #$E1E8, // $E1E8 + #$E1E9, // $E1E9 + #$E1EA, // $E1EA + #$E1EB, // $E1EB + #$E1EC, // $E1EC + #$E1ED, // $E1ED + #$E1EE, // $E1EE + #$E1EF, // $E1EF + #$E1F0, // $E1F0 + #$E1F1, // $E1F1 + #$E1F2, // $E1F2 + #$E1F3, // $E1F3 + #$E1F4, // $E1F4 + #$E1F5, // $E1F5 + #$E1F6, // $E1F6 + #$E1F7, // $E1F7 + #$E1F8, // $E1F8 + #$E1F9, // $E1F9 + #$E1FA, // $E1FA + #$E1FB, // $E1FB + #$E1FC, // $E1FC + #$E1FD, // $E1FD + #$E1FE, // $E1FE + #$E1FF, // $E1FF + #$E200, // $E200 + #$E201, // $E201 + #$E202, // $E202 + #$E203, // $E203 + #$E204, // $E204 + #$E205, // $E205 + #$E206, // $E206 + #$E207, // $E207 + #$E208, // $E208 + #$E209, // $E209 + #$E20A, // $E20A + #$E20B, // $E20B + #$E20C, // $E20C + #$E20D, // $E20D + #$E20E, // $E20E + #$E20F, // $E20F + #$E210, // $E210 + #$E211, // $E211 + #$E212, // $E212 + #$E213, // $E213 + #$E214, // $E214 + #$E215, // $E215 + #$E216, // $E216 + #$E217, // $E217 + #$E218, // $E218 + #$E219, // $E219 + #$E21A, // $E21A + #$E21B, // $E21B + #$E21C, // $E21C + #$E21D, // $E21D + #$E21E, // $E21E + #$E21F, // $E21F + #$E220, // $E220 + #$E221, // $E221 + #$E222, // $E222 + #$E223, // $E223 + #$E224, // $E224 + #$E225, // $E225 + #$E226, // $E226 + #$E227, // $E227 + #$E228, // $E228 + #$E229, // $E229 + #$E22A, // $E22A + #$E22B, // $E22B + #$E22C, // $E22C + #$E22D, // $E22D + #$E22E, // $E22E + #$E22F, // $E22F + #$E230, // $E230 + #$E231, // $E231 + #$E232, // $E232 + #$E233, // $E233 + #$E234, // $E234 + #$E235, // $E235 + #$E236, // $E236 + #$E237, // $E237 + #$E238, // $E238 + #$E239, // $E239 + #$E23A, // $E23A + #$E23B, // $E23B + #$E23C, // $E23C + #$E23D, // $E23D + #$E23E, // $E23E + #$E23F, // $E23F + #$E240, // $E240 + #$E241, // $E241 + #$E242, // $E242 + #$E243, // $E243 + #$E244, // $E244 + #$E245, // $E245 + #$E246, // $E246 + #$E247, // $E247 + #$E248, // $E248 + #$E249, // $E249 + #$E24A, // $E24A + #$E24B, // $E24B + #$E24C, // $E24C + #$E24D, // $E24D + #$E24E, // $E24E + #$E24F, // $E24F + #$E250, // $E250 + #$E251, // $E251 + #$E252, // $E252 + #$E253, // $E253 + #$E254, // $E254 + #$E255, // $E255 + #$E256, // $E256 + #$E257, // $E257 + #$E258, // $E258 + #$E259, // $E259 + #$E25A, // $E25A + #$E25B, // $E25B + #$E25C, // $E25C + #$E25D, // $E25D + #$E25E, // $E25E + #$E25F, // $E25F + #$E260, // $E260 + #$E261, // $E261 + #$E262, // $E262 + #$E263, // $E263 + #$E264, // $E264 + #$E265, // $E265 + #$E266, // $E266 + #$E267, // $E267 + #$E268, // $E268 + #$E269, // $E269 + #$E26A, // $E26A + #$E26B, // $E26B + #$E26C, // $E26C + #$E26D, // $E26D + #$E26E, // $E26E + #$E26F, // $E26F + #$E270, // $E270 + #$E271, // $E271 + #$E272, // $E272 + #$E273, // $E273 + #$E274, // $E274 + #$E275, // $E275 + #$E276, // $E276 + #$E277, // $E277 + #$E278, // $E278 + #$E279, // $E279 + #$E27A, // $E27A + #$E27B, // $E27B + #$E27C, // $E27C + #$E27D, // $E27D + #$E27E, // $E27E + #$E27F, // $E27F + #$E280, // $E280 + #$E281, // $E281 + #$E282, // $E282 + #$E283, // $E283 + #$E284, // $E284 + #$E285, // $E285 + #$E286, // $E286 + #$E287, // $E287 + #$E288, // $E288 + #$E289, // $E289 + #$E28A, // $E28A + #$E28B, // $E28B + #$E28C, // $E28C + #$E28D, // $E28D + #$E28E, // $E28E + #$E28F, // $E28F + #$E290, // $E290 + #$E291, // $E291 + #$E292, // $E292 + #$E293, // $E293 + #$E294, // $E294 + #$E295, // $E295 + #$E296, // $E296 + #$E297, // $E297 + #$E298, // $E298 + #$E299, // $E299 + #$E29A, // $E29A + #$E29B, // $E29B + #$E29C, // $E29C + #$E29D, // $E29D + #$E29E, // $E29E + #$E29F, // $E29F + #$E2A0, // $E2A0 + #$E2A1, // $E2A1 + #$E2A2, // $E2A2 + #$E2A3, // $E2A3 + #$E2A4, // $E2A4 + #$E2A5, // $E2A5 + #$E2A6, // $E2A6 + #$E2A7, // $E2A7 + #$E2A8, // $E2A8 + #$E2A9, // $E2A9 + #$E2AA, // $E2AA + #$E2AB, // $E2AB + #$E2AC, // $E2AC + #$E2AD, // $E2AD + #$E2AE, // $E2AE + #$E2AF, // $E2AF + #$E2B0, // $E2B0 + #$E2B1, // $E2B1 + #$E2B2, // $E2B2 + #$E2B3, // $E2B3 + #$E2B4, // $E2B4 + #$E2B5, // $E2B5 + #$E2B6, // $E2B6 + #$E2B7, // $E2B7 + #$E2B8, // $E2B8 + #$E2B9, // $E2B9 + #$E2BA, // $E2BA + #$E2BB, // $E2BB + #$E2BC, // $E2BC + #$E2BD, // $E2BD + #$E2BE, // $E2BE + #$E2BF, // $E2BF + #$E2C0, // $E2C0 + #$E2C1, // $E2C1 + #$E2C2, // $E2C2 + #$E2C3, // $E2C3 + #$E2C4, // $E2C4 + #$E2C5, // $E2C5 + #$E2C6, // $E2C6 + #$E2C7, // $E2C7 + #$E2C8, // $E2C8 + #$E2C9, // $E2C9 + #$E2CA, // $E2CA + #$E2CB, // $E2CB + #$E2CC, // $E2CC + #$E2CD, // $E2CD + #$E2CE, // $E2CE + #$E2CF, // $E2CF + #$E2D0, // $E2D0 + #$E2D1, // $E2D1 + #$E2D2, // $E2D2 + #$E2D3, // $E2D3 + #$E2D4, // $E2D4 + #$E2D5, // $E2D5 + #$E2D6, // $E2D6 + #$E2D7, // $E2D7 + #$E2D8, // $E2D8 + #$E2D9, // $E2D9 + #$E2DA, // $E2DA + #$E2DB, // $E2DB + #$E2DC, // $E2DC + #$E2DD, // $E2DD + #$E2DE, // $E2DE + #$E2DF, // $E2DF + #$E2E0, // $E2E0 + #$E2E1, // $E2E1 + #$E2E2, // $E2E2 + #$E2E3, // $E2E3 + #$E2E4, // $E2E4 + #$E2E5, // $E2E5 + #$E2E6, // $E2E6 + #$E2E7, // $E2E7 + #$E2E8, // $E2E8 + #$E2E9, // $E2E9 + #$E2EA, // $E2EA + #$E2EB, // $E2EB + #$E2EC, // $E2EC + #$E2ED, // $E2ED + #$E2EE, // $E2EE + #$E2EF, // $E2EF + #$E2F0, // $E2F0 + #$E2F1, // $E2F1 + #$E2F2, // $E2F2 + #$E2F3, // $E2F3 + #$E2F4, // $E2F4 + #$E2F5, // $E2F5 + #$E2F6, // $E2F6 + #$E2F7, // $E2F7 + #$E2F8, // $E2F8 + #$E2F9, // $E2F9 + #$E2FA, // $E2FA + #$E2FB, // $E2FB + #$E2FC, // $E2FC + #$E2FD, // $E2FD + #$E2FE, // $E2FE + #$E2FF, // $E2FF + #$E300, // $E300 + #$E301, // $E301 + #$E302, // $E302 + #$E303, // $E303 + #$E304, // $E304 + #$E305, // $E305 + #$E306, // $E306 + #$E307, // $E307 + #$E308, // $E308 + #$E309, // $E309 + #$E30A, // $E30A + #$E30B, // $E30B + #$E30C, // $E30C + #$E30D, // $E30D + #$E30E, // $E30E + #$E30F, // $E30F + #$E310, // $E310 + #$E311, // $E311 + #$E312, // $E312 + #$E313, // $E313 + #$E314, // $E314 + #$E315, // $E315 + #$E316, // $E316 + #$E317, // $E317 + #$E318, // $E318 + #$E319, // $E319 + #$E31A, // $E31A + #$E31B, // $E31B + #$E31C, // $E31C + #$E31D, // $E31D + #$E31E, // $E31E + #$E31F, // $E31F + #$E320, // $E320 + #$E321, // $E321 + #$E322, // $E322 + #$E323, // $E323 + #$E324, // $E324 + #$E325, // $E325 + #$E326, // $E326 + #$E327, // $E327 + #$E328, // $E328 + #$E329, // $E329 + #$E32A, // $E32A + #$E32B, // $E32B + #$E32C, // $E32C + #$E32D, // $E32D + #$E32E, // $E32E + #$E32F, // $E32F + #$E330, // $E330 + #$E331, // $E331 + #$E332, // $E332 + #$E333, // $E333 + #$E334, // $E334 + #$E335, // $E335 + #$E336, // $E336 + #$E337, // $E337 + #$E338, // $E338 + #$E339, // $E339 + #$E33A, // $E33A + #$E33B, // $E33B + #$E33C, // $E33C + #$E33D, // $E33D + #$E33E, // $E33E + #$E33F, // $E33F + #$E340, // $E340 + #$E341, // $E341 + #$E342, // $E342 + #$E343, // $E343 + #$E344, // $E344 + #$E345, // $E345 + #$E346, // $E346 + #$E347, // $E347 + #$E348, // $E348 + #$E349, // $E349 + #$E34A, // $E34A + #$E34B, // $E34B + #$E34C, // $E34C + #$E34D, // $E34D + #$E34E, // $E34E + #$E34F, // $E34F + #$E350, // $E350 + #$E351, // $E351 + #$E352, // $E352 + #$E353, // $E353 + #$E354, // $E354 + #$E355, // $E355 + #$E356, // $E356 + #$E357, // $E357 + #$E358, // $E358 + #$E359, // $E359 + #$E35A, // $E35A + #$E35B, // $E35B + #$E35C, // $E35C + #$E35D, // $E35D + #$E35E, // $E35E + #$E35F, // $E35F + #$E360, // $E360 + #$E361, // $E361 + #$E362, // $E362 + #$E363, // $E363 + #$E364, // $E364 + #$E365, // $E365 + #$E366, // $E366 + #$E367, // $E367 + #$E368, // $E368 + #$E369, // $E369 + #$E36A, // $E36A + #$E36B, // $E36B + #$E36C, // $E36C + #$E36D, // $E36D + #$E36E, // $E36E + #$E36F, // $E36F + #$E370, // $E370 + #$E371, // $E371 + #$E372, // $E372 + #$E373, // $E373 + #$E374, // $E374 + #$E375, // $E375 + #$E376, // $E376 + #$E377, // $E377 + #$E378, // $E378 + #$E379, // $E379 + #$E37A, // $E37A + #$E37B, // $E37B + #$E37C, // $E37C + #$E37D, // $E37D + #$E37E, // $E37E + #$E37F, // $E37F + #$E380, // $E380 + #$E381, // $E381 + #$E382, // $E382 + #$E383, // $E383 + #$E384, // $E384 + #$E385, // $E385 + #$E386, // $E386 + #$E387, // $E387 + #$E388, // $E388 + #$E389, // $E389 + #$E38A, // $E38A + #$E38B, // $E38B + #$E38C, // $E38C + #$E38D, // $E38D + #$E38E, // $E38E + #$E38F, // $E38F + #$E390, // $E390 + #$E391, // $E391 + #$E392, // $E392 + #$E393, // $E393 + #$E394, // $E394 + #$E395, // $E395 + #$E396, // $E396 + #$E397, // $E397 + #$E398, // $E398 + #$E399, // $E399 + #$E39A, // $E39A + #$E39B, // $E39B + #$E39C, // $E39C + #$E39D, // $E39D + #$E39E, // $E39E + #$E39F, // $E39F + #$E3A0, // $E3A0 + #$E3A1, // $E3A1 + #$E3A2, // $E3A2 + #$E3A3, // $E3A3 + #$E3A4, // $E3A4 + #$E3A5, // $E3A5 + #$E3A6, // $E3A6 + #$E3A7, // $E3A7 + #$E3A8, // $E3A8 + #$E3A9, // $E3A9 + #$E3AA, // $E3AA + #$E3AB, // $E3AB + #$E3AC, // $E3AC + #$E3AD, // $E3AD + #$E3AE, // $E3AE + #$E3AF, // $E3AF + #$E3B0, // $E3B0 + #$E3B1, // $E3B1 + #$E3B2, // $E3B2 + #$E3B3, // $E3B3 + #$E3B4, // $E3B4 + #$E3B5, // $E3B5 + #$E3B6, // $E3B6 + #$E3B7, // $E3B7 + #$E3B8, // $E3B8 + #$E3B9, // $E3B9 + #$E3BA, // $E3BA + #$E3BB, // $E3BB + #$E3BC, // $E3BC + #$E3BD, // $E3BD + #$E3BE, // $E3BE + #$E3BF, // $E3BF + #$E3C0, // $E3C0 + #$E3C1, // $E3C1 + #$E3C2, // $E3C2 + #$E3C3, // $E3C3 + #$E3C4, // $E3C4 + #$E3C5, // $E3C5 + #$E3C6, // $E3C6 + #$E3C7, // $E3C7 + #$E3C8, // $E3C8 + #$E3C9, // $E3C9 + #$E3CA, // $E3CA + #$E3CB, // $E3CB + #$E3CC, // $E3CC + #$E3CD, // $E3CD + #$E3CE, // $E3CE + #$E3CF, // $E3CF + #$E3D0, // $E3D0 + #$E3D1, // $E3D1 + #$E3D2, // $E3D2 + #$E3D3, // $E3D3 + #$E3D4, // $E3D4 + #$E3D5, // $E3D5 + #$E3D6, // $E3D6 + #$E3D7, // $E3D7 + #$E3D8, // $E3D8 + #$E3D9, // $E3D9 + #$E3DA, // $E3DA + #$E3DB, // $E3DB + #$E3DC, // $E3DC + #$E3DD, // $E3DD + #$E3DE, // $E3DE + #$E3DF, // $E3DF + #$E3E0, // $E3E0 + #$E3E1, // $E3E1 + #$E3E2, // $E3E2 + #$E3E3, // $E3E3 + #$E3E4, // $E3E4 + #$E3E5, // $E3E5 + #$E3E6, // $E3E6 + #$E3E7, // $E3E7 + #$E3E8, // $E3E8 + #$E3E9, // $E3E9 + #$E3EA, // $E3EA + #$E3EB, // $E3EB + #$E3EC, // $E3EC + #$E3ED, // $E3ED + #$E3EE, // $E3EE + #$E3EF, // $E3EF + #$E3F0, // $E3F0 + #$E3F1, // $E3F1 + #$E3F2, // $E3F2 + #$E3F3, // $E3F3 + #$E3F4, // $E3F4 + #$E3F5, // $E3F5 + #$E3F6, // $E3F6 + #$E3F7, // $E3F7 + #$E3F8, // $E3F8 + #$E3F9, // $E3F9 + #$E3FA, // $E3FA + #$E3FB, // $E3FB + #$E3FC, // $E3FC + #$E3FD, // $E3FD + #$E3FE, // $E3FE + #$E3FF, // $E3FF + #$E400, // $E400 + #$E401, // $E401 + #$E402, // $E402 + #$E403, // $E403 + #$E404, // $E404 + #$E405, // $E405 + #$E406, // $E406 + #$E407, // $E407 + #$E408, // $E408 + #$E409, // $E409 + #$E40A, // $E40A + #$E40B, // $E40B + #$E40C, // $E40C + #$E40D, // $E40D + #$E40E, // $E40E + #$E40F, // $E40F + #$E410, // $E410 + #$E411, // $E411 + #$E412, // $E412 + #$E413, // $E413 + #$E414, // $E414 + #$E415, // $E415 + #$E416, // $E416 + #$E417, // $E417 + #$E418, // $E418 + #$E419, // $E419 + #$E41A, // $E41A + #$E41B, // $E41B + #$E41C, // $E41C + #$E41D, // $E41D + #$E41E, // $E41E + #$E41F, // $E41F + #$E420, // $E420 + #$E421, // $E421 + #$E422, // $E422 + #$E423, // $E423 + #$E424, // $E424 + #$E425, // $E425 + #$E426, // $E426 + #$E427, // $E427 + #$E428, // $E428 + #$E429, // $E429 + #$E42A, // $E42A + #$E42B, // $E42B + #$E42C, // $E42C + #$E42D, // $E42D + #$E42E, // $E42E + #$E42F, // $E42F + #$E430, // $E430 + #$E431, // $E431 + #$E432, // $E432 + #$E433, // $E433 + #$E434, // $E434 + #$E435, // $E435 + #$E436, // $E436 + #$E437, // $E437 + #$E438, // $E438 + #$E439, // $E439 + #$E43A, // $E43A + #$E43B, // $E43B + #$E43C, // $E43C + #$E43D, // $E43D + #$E43E, // $E43E + #$E43F, // $E43F + #$E440, // $E440 + #$E441, // $E441 + #$E442, // $E442 + #$E443, // $E443 + #$E444, // $E444 + #$E445, // $E445 + #$E446, // $E446 + #$E447, // $E447 + #$E448, // $E448 + #$E449, // $E449 + #$E44A, // $E44A + #$E44B, // $E44B + #$E44C, // $E44C + #$E44D, // $E44D + #$E44E, // $E44E + #$E44F, // $E44F + #$E450, // $E450 + #$E451, // $E451 + #$E452, // $E452 + #$E453, // $E453 + #$E454, // $E454 + #$E455, // $E455 + #$E456, // $E456 + #$E457, // $E457 + #$E458, // $E458 + #$E459, // $E459 + #$E45A, // $E45A + #$E45B, // $E45B + #$E45C, // $E45C + #$E45D, // $E45D + #$E45E, // $E45E + #$E45F, // $E45F + #$E460, // $E460 + #$E461, // $E461 + #$E462, // $E462 + #$E463, // $E463 + #$E464, // $E464 + #$E465, // $E465 + #$E466, // $E466 + #$E467, // $E467 + #$E468, // $E468 + #$E469, // $E469 + #$E46A, // $E46A + #$E46B, // $E46B + #$E46C, // $E46C + #$E46D, // $E46D + #$E46E, // $E46E + #$E46F, // $E46F + #$E470, // $E470 + #$E471, // $E471 + #$E472, // $E472 + #$E473, // $E473 + #$E474, // $E474 + #$E475, // $E475 + #$E476, // $E476 + #$E477, // $E477 + #$E478, // $E478 + #$E479, // $E479 + #$E47A, // $E47A + #$E47B, // $E47B + #$E47C, // $E47C + #$E47D, // $E47D + #$E47E, // $E47E + #$E47F, // $E47F + #$E480, // $E480 + #$E481, // $E481 + #$E482, // $E482 + #$E483, // $E483 + #$E484, // $E484 + #$E485, // $E485 + #$E486, // $E486 + #$E487, // $E487 + #$E488, // $E488 + #$E489, // $E489 + #$E48A, // $E48A + #$E48B, // $E48B + #$E48C, // $E48C + #$E48D, // $E48D + #$E48E, // $E48E + #$E48F, // $E48F + #$E490, // $E490 + #$E491, // $E491 + #$E492, // $E492 + #$E493, // $E493 + #$E494, // $E494 + #$E495, // $E495 + #$E496, // $E496 + #$E497, // $E497 + #$E498, // $E498 + #$E499, // $E499 + #$E49A, // $E49A + #$E49B, // $E49B + #$E49C, // $E49C + #$E49D, // $E49D + #$E49E, // $E49E + #$E49F, // $E49F + #$E4A0, // $E4A0 + #$E4A1, // $E4A1 + #$E4A2, // $E4A2 + #$E4A3, // $E4A3 + #$E4A4, // $E4A4 + #$E4A5, // $E4A5 + #$E4A6, // $E4A6 + #$E4A7, // $E4A7 + #$E4A8, // $E4A8 + #$E4A9, // $E4A9 + #$E4AA, // $E4AA + #$E4AB, // $E4AB + #$E4AC, // $E4AC + #$E4AD, // $E4AD + #$E4AE, // $E4AE + #$E4AF, // $E4AF + #$E4B0, // $E4B0 + #$E4B1, // $E4B1 + #$E4B2, // $E4B2 + #$E4B3, // $E4B3 + #$E4B4, // $E4B4 + #$E4B5, // $E4B5 + #$E4B6, // $E4B6 + #$E4B7, // $E4B7 + #$E4B8, // $E4B8 + #$E4B9, // $E4B9 + #$E4BA, // $E4BA + #$E4BB, // $E4BB + #$E4BC, // $E4BC + #$E4BD, // $E4BD + #$E4BE, // $E4BE + #$E4BF, // $E4BF + #$E4C0, // $E4C0 + #$E4C1, // $E4C1 + #$E4C2, // $E4C2 + #$E4C3, // $E4C3 + #$E4C4, // $E4C4 + #$E4C5, // $E4C5 + #$E4C6, // $E4C6 + #$E4C7, // $E4C7 + #$E4C8, // $E4C8 + #$E4C9, // $E4C9 + #$E4CA, // $E4CA + #$E4CB, // $E4CB + #$E4CC, // $E4CC + #$E4CD, // $E4CD + #$E4CE, // $E4CE + #$E4CF, // $E4CF + #$E4D0, // $E4D0 + #$E4D1, // $E4D1 + #$E4D2, // $E4D2 + #$E4D3, // $E4D3 + #$E4D4, // $E4D4 + #$E4D5, // $E4D5 + #$E4D6, // $E4D6 + #$E4D7, // $E4D7 + #$E4D8, // $E4D8 + #$E4D9, // $E4D9 + #$E4DA, // $E4DA + #$E4DB, // $E4DB + #$E4DC, // $E4DC + #$E4DD, // $E4DD + #$E4DE, // $E4DE + #$E4DF, // $E4DF + #$E4E0, // $E4E0 + #$E4E1, // $E4E1 + #$E4E2, // $E4E2 + #$E4E3, // $E4E3 + #$E4E4, // $E4E4 + #$E4E5, // $E4E5 + #$E4E6, // $E4E6 + #$E4E7, // $E4E7 + #$E4E8, // $E4E8 + #$E4E9, // $E4E9 + #$E4EA, // $E4EA + #$E4EB, // $E4EB + #$E4EC, // $E4EC + #$E4ED, // $E4ED + #$E4EE, // $E4EE + #$E4EF, // $E4EF + #$E4F0, // $E4F0 + #$E4F1, // $E4F1 + #$E4F2, // $E4F2 + #$E4F3, // $E4F3 + #$E4F4, // $E4F4 + #$E4F5, // $E4F5 + #$E4F6, // $E4F6 + #$E4F7, // $E4F7 + #$E4F8, // $E4F8 + #$E4F9, // $E4F9 + #$E4FA, // $E4FA + #$E4FB, // $E4FB + #$E4FC, // $E4FC + #$E4FD, // $E4FD + #$E4FE, // $E4FE + #$E4FF, // $E4FF + #$E500, // $E500 + #$E501, // $E501 + #$E502, // $E502 + #$E503, // $E503 + #$E504, // $E504 + #$E505, // $E505 + #$E506, // $E506 + #$E507, // $E507 + #$E508, // $E508 + #$E509, // $E509 + #$E50A, // $E50A + #$E50B, // $E50B + #$E50C, // $E50C + #$E50D, // $E50D + #$E50E, // $E50E + #$E50F, // $E50F + #$E510, // $E510 + #$E511, // $E511 + #$E512, // $E512 + #$E513, // $E513 + #$E514, // $E514 + #$E515, // $E515 + #$E516, // $E516 + #$E517, // $E517 + #$E518, // $E518 + #$E519, // $E519 + #$E51A, // $E51A + #$E51B, // $E51B + #$E51C, // $E51C + #$E51D, // $E51D + #$E51E, // $E51E + #$E51F, // $E51F + #$E520, // $E520 + #$E521, // $E521 + #$E522, // $E522 + #$E523, // $E523 + #$E524, // $E524 + #$E525, // $E525 + #$E526, // $E526 + #$E527, // $E527 + #$E528, // $E528 + #$E529, // $E529 + #$E52A, // $E52A + #$E52B, // $E52B + #$E52C, // $E52C + #$E52D, // $E52D + #$E52E, // $E52E + #$E52F, // $E52F + #$E530, // $E530 + #$E531, // $E531 + #$E532, // $E532 + #$E533, // $E533 + #$E534, // $E534 + #$E535, // $E535 + #$E536, // $E536 + #$E537, // $E537 + #$E538, // $E538 + #$E539, // $E539 + #$E53A, // $E53A + #$E53B, // $E53B + #$E53C, // $E53C + #$E53D, // $E53D + #$E53E, // $E53E + #$E53F, // $E53F + #$E540, // $E540 + #$E541, // $E541 + #$E542, // $E542 + #$E543, // $E543 + #$E544, // $E544 + #$E545, // $E545 + #$E546, // $E546 + #$E547, // $E547 + #$E548, // $E548 + #$E549, // $E549 + #$E54A, // $E54A + #$E54B, // $E54B + #$E54C, // $E54C + #$E54D, // $E54D + #$E54E, // $E54E + #$E54F, // $E54F + #$E550, // $E550 + #$E551, // $E551 + #$E552, // $E552 + #$E553, // $E553 + #$E554, // $E554 + #$E555, // $E555 + #$E556, // $E556 + #$E557, // $E557 + #$E558, // $E558 + #$E559, // $E559 + #$E55A, // $E55A + #$E55B, // $E55B + #$E55C, // $E55C + #$E55D, // $E55D + #$E55E, // $E55E + #$E55F, // $E55F + #$E560, // $E560 + #$E561, // $E561 + #$E562, // $E562 + #$E563, // $E563 + #$E564, // $E564 + #$E565, // $E565 + #$E566, // $E566 + #$E567, // $E567 + #$E568, // $E568 + #$E569, // $E569 + #$E56A, // $E56A + #$E56B, // $E56B + #$E56C, // $E56C + #$E56D, // $E56D + #$E56E, // $E56E + #$E56F, // $E56F + #$E570, // $E570 + #$E571, // $E571 + #$E572, // $E572 + #$E573, // $E573 + #$E574, // $E574 + #$E575, // $E575 + #$E576, // $E576 + #$E577, // $E577 + #$E578, // $E578 + #$E579, // $E579 + #$E57A, // $E57A + #$E57B, // $E57B + #$E57C, // $E57C + #$E57D, // $E57D + #$E57E, // $E57E + #$E57F, // $E57F + #$E580, // $E580 + #$E581, // $E581 + #$E582, // $E582 + #$E583, // $E583 + #$E584, // $E584 + #$E585, // $E585 + #$E586, // $E586 + #$E587, // $E587 + #$E588, // $E588 + #$E589, // $E589 + #$E58A, // $E58A + #$E58B, // $E58B + #$E58C, // $E58C + #$E58D, // $E58D + #$E58E, // $E58E + #$E58F, // $E58F + #$E590, // $E590 + #$E591, // $E591 + #$E592, // $E592 + #$E593, // $E593 + #$E594, // $E594 + #$E595, // $E595 + #$E596, // $E596 + #$E597, // $E597 + #$E598, // $E598 + #$E599, // $E599 + #$E59A, // $E59A + #$E59B, // $E59B + #$E59C, // $E59C + #$E59D, // $E59D + #$E59E, // $E59E + #$E59F, // $E59F + #$E5A0, // $E5A0 + #$E5A1, // $E5A1 + #$E5A2, // $E5A2 + #$E5A3, // $E5A3 + #$E5A4, // $E5A4 + #$E5A5, // $E5A5 + #$E5A6, // $E5A6 + #$E5A7, // $E5A7 + #$E5A8, // $E5A8 + #$E5A9, // $E5A9 + #$E5AA, // $E5AA + #$E5AB, // $E5AB + #$E5AC, // $E5AC + #$E5AD, // $E5AD + #$E5AE, // $E5AE + #$E5AF, // $E5AF + #$E5B0, // $E5B0 + #$E5B1, // $E5B1 + #$E5B2, // $E5B2 + #$E5B3, // $E5B3 + #$E5B4, // $E5B4 + #$E5B5, // $E5B5 + #$E5B6, // $E5B6 + #$E5B7, // $E5B7 + #$E5B8, // $E5B8 + #$E5B9, // $E5B9 + #$E5BA, // $E5BA + #$E5BB, // $E5BB + #$E5BC, // $E5BC + #$E5BD, // $E5BD + #$E5BE, // $E5BE + #$E5BF, // $E5BF + #$E5C0, // $E5C0 + #$E5C1, // $E5C1 + #$E5C2, // $E5C2 + #$E5C3, // $E5C3 + #$E5C4, // $E5C4 + #$E5C5, // $E5C5 + #$E5C6, // $E5C6 + #$E5C7, // $E5C7 + #$E5C8, // $E5C8 + #$E5C9, // $E5C9 + #$E5CA, // $E5CA + #$E5CB, // $E5CB + #$E5CC, // $E5CC + #$E5CD, // $E5CD + #$E5CE, // $E5CE + #$E5CF, // $E5CF + #$E5D0, // $E5D0 + #$E5D1, // $E5D1 + #$E5D2, // $E5D2 + #$E5D3, // $E5D3 + #$E5D4, // $E5D4 + #$E5D5, // $E5D5 + #$E5D6, // $E5D6 + #$E5D7, // $E5D7 + #$E5D8, // $E5D8 + #$E5D9, // $E5D9 + #$E5DA, // $E5DA + #$E5DB, // $E5DB + #$E5DC, // $E5DC + #$E5DD, // $E5DD + #$E5DE, // $E5DE + #$E5DF, // $E5DF + #$E5E0, // $E5E0 + #$E5E1, // $E5E1 + #$E5E2, // $E5E2 + #$E5E3, // $E5E3 + #$E5E4, // $E5E4 + #$E5E5, // $E5E5 + #$E5E6, // $E5E6 + #$E5E7, // $E5E7 + #$E5E8, // $E5E8 + #$E5E9, // $E5E9 + #$E5EA, // $E5EA + #$E5EB, // $E5EB + #$E5EC, // $E5EC + #$E5ED, // $E5ED + #$E5EE, // $E5EE + #$E5EF, // $E5EF + #$E5F0, // $E5F0 + #$E5F1, // $E5F1 + #$E5F2, // $E5F2 + #$E5F3, // $E5F3 + #$E5F4, // $E5F4 + #$E5F5, // $E5F5 + #$E5F6, // $E5F6 + #$E5F7, // $E5F7 + #$E5F8, // $E5F8 + #$E5F9, // $E5F9 + #$E5FA, // $E5FA + #$E5FB, // $E5FB + #$E5FC, // $E5FC + #$E5FD, // $E5FD + #$E5FE, // $E5FE + #$E5FF, // $E5FF + #$E600, // $E600 + #$E601, // $E601 + #$E602, // $E602 + #$E603, // $E603 + #$E604, // $E604 + #$E605, // $E605 + #$E606, // $E606 + #$E607, // $E607 + #$E608, // $E608 + #$E609, // $E609 + #$E60A, // $E60A + #$E60B, // $E60B + #$E60C, // $E60C + #$E60D, // $E60D + #$E60E, // $E60E + #$E60F, // $E60F + #$E610, // $E610 + #$E611, // $E611 + #$E612, // $E612 + #$E613, // $E613 + #$E614, // $E614 + #$E615, // $E615 + #$E616, // $E616 + #$E617, // $E617 + #$E618, // $E618 + #$E619, // $E619 + #$E61A, // $E61A + #$E61B, // $E61B + #$E61C, // $E61C + #$E61D, // $E61D + #$E61E, // $E61E + #$E61F, // $E61F + #$E620, // $E620 + #$E621, // $E621 + #$E622, // $E622 + #$E623, // $E623 + #$E624, // $E624 + #$E625, // $E625 + #$E626, // $E626 + #$E627, // $E627 + #$E628, // $E628 + #$E629, // $E629 + #$E62A, // $E62A + #$E62B, // $E62B + #$E62C, // $E62C + #$E62D, // $E62D + #$E62E, // $E62E + #$E62F, // $E62F + #$E630, // $E630 + #$E631, // $E631 + #$E632, // $E632 + #$E633, // $E633 + #$E634, // $E634 + #$E635, // $E635 + #$E636, // $E636 + #$E637, // $E637 + #$E638, // $E638 + #$E639, // $E639 + #$E63A, // $E63A + #$E63B, // $E63B + #$E63C, // $E63C + #$E63D, // $E63D + #$E63E, // $E63E + #$E63F, // $E63F + #$E640, // $E640 + #$E641, // $E641 + #$E642, // $E642 + #$E643, // $E643 + #$E644, // $E644 + #$E645, // $E645 + #$E646, // $E646 + #$E647, // $E647 + #$E648, // $E648 + #$E649, // $E649 + #$E64A, // $E64A + #$E64B, // $E64B + #$E64C, // $E64C + #$E64D, // $E64D + #$E64E, // $E64E + #$E64F, // $E64F + #$E650, // $E650 + #$E651, // $E651 + #$E652, // $E652 + #$E653, // $E653 + #$E654, // $E654 + #$E655, // $E655 + #$E656, // $E656 + #$E657, // $E657 + #$E658, // $E658 + #$E659, // $E659 + #$E65A, // $E65A + #$E65B, // $E65B + #$E65C, // $E65C + #$E65D, // $E65D + #$E65E, // $E65E + #$E65F, // $E65F + #$E660, // $E660 + #$E661, // $E661 + #$E662, // $E662 + #$E663, // $E663 + #$E664, // $E664 + #$E665, // $E665 + #$E666, // $E666 + #$E667, // $E667 + #$E668, // $E668 + #$E669, // $E669 + #$E66A, // $E66A + #$E66B, // $E66B + #$E66C, // $E66C + #$E66D, // $E66D + #$E66E, // $E66E + #$E66F, // $E66F + #$E670, // $E670 + #$E671, // $E671 + #$E672, // $E672 + #$E673, // $E673 + #$E674, // $E674 + #$E675, // $E675 + #$E676, // $E676 + #$E677, // $E677 + #$E678, // $E678 + #$E679, // $E679 + #$E67A, // $E67A + #$E67B, // $E67B + #$E67C, // $E67C + #$E67D, // $E67D + #$E67E, // $E67E + #$E67F, // $E67F + #$E680, // $E680 + #$E681, // $E681 + #$E682, // $E682 + #$E683, // $E683 + #$E684, // $E684 + #$E685, // $E685 + #$E686, // $E686 + #$E687, // $E687 + #$E688, // $E688 + #$E689, // $E689 + #$E68A, // $E68A + #$E68B, // $E68B + #$E68C, // $E68C + #$E68D, // $E68D + #$E68E, // $E68E + #$E68F, // $E68F + #$E690, // $E690 + #$E691, // $E691 + #$E692, // $E692 + #$E693, // $E693 + #$E694, // $E694 + #$E695, // $E695 + #$E696, // $E696 + #$E697, // $E697 + #$E698, // $E698 + #$E699, // $E699 + #$E69A, // $E69A + #$E69B, // $E69B + #$E69C, // $E69C + #$E69D, // $E69D + #$E69E, // $E69E + #$E69F, // $E69F + #$E6A0, // $E6A0 + #$E6A1, // $E6A1 + #$E6A2, // $E6A2 + #$E6A3, // $E6A3 + #$E6A4, // $E6A4 + #$E6A5, // $E6A5 + #$E6A6, // $E6A6 + #$E6A7, // $E6A7 + #$E6A8, // $E6A8 + #$E6A9, // $E6A9 + #$E6AA, // $E6AA + #$E6AB, // $E6AB + #$E6AC, // $E6AC + #$E6AD, // $E6AD + #$E6AE, // $E6AE + #$E6AF, // $E6AF + #$E6B0, // $E6B0 + #$E6B1, // $E6B1 + #$E6B2, // $E6B2 + #$E6B3, // $E6B3 + #$E6B4, // $E6B4 + #$E6B5, // $E6B5 + #$E6B6, // $E6B6 + #$E6B7, // $E6B7 + #$E6B8, // $E6B8 + #$E6B9, // $E6B9 + #$E6BA, // $E6BA + #$E6BB, // $E6BB + #$E6BC, // $E6BC + #$E6BD, // $E6BD + #$E6BE, // $E6BE + #$E6BF, // $E6BF + #$E6C0, // $E6C0 + #$E6C1, // $E6C1 + #$E6C2, // $E6C2 + #$E6C3, // $E6C3 + #$E6C4, // $E6C4 + #$E6C5, // $E6C5 + #$E6C6, // $E6C6 + #$E6C7, // $E6C7 + #$E6C8, // $E6C8 + #$E6C9, // $E6C9 + #$E6CA, // $E6CA + #$E6CB, // $E6CB + #$E6CC, // $E6CC + #$E6CD, // $E6CD + #$E6CE, // $E6CE + #$E6CF, // $E6CF + #$E6D0, // $E6D0 + #$E6D1, // $E6D1 + #$E6D2, // $E6D2 + #$E6D3, // $E6D3 + #$E6D4, // $E6D4 + #$E6D5, // $E6D5 + #$E6D6, // $E6D6 + #$E6D7, // $E6D7 + #$E6D8, // $E6D8 + #$E6D9, // $E6D9 + #$E6DA, // $E6DA + #$E6DB, // $E6DB + #$E6DC, // $E6DC + #$E6DD, // $E6DD + #$E6DE, // $E6DE + #$E6DF, // $E6DF + #$E6E0, // $E6E0 + #$E6E1, // $E6E1 + #$E6E2, // $E6E2 + #$E6E3, // $E6E3 + #$E6E4, // $E6E4 + #$E6E5, // $E6E5 + #$E6E6, // $E6E6 + #$E6E7, // $E6E7 + #$E6E8, // $E6E8 + #$E6E9, // $E6E9 + #$E6EA, // $E6EA + #$E6EB, // $E6EB + #$E6EC, // $E6EC + #$E6ED, // $E6ED + #$E6EE, // $E6EE + #$E6EF, // $E6EF + #$E6F0, // $E6F0 + #$E6F1, // $E6F1 + #$E6F2, // $E6F2 + #$E6F3, // $E6F3 + #$E6F4, // $E6F4 + #$E6F5, // $E6F5 + #$E6F6, // $E6F6 + #$E6F7, // $E6F7 + #$E6F8, // $E6F8 + #$E6F9, // $E6F9 + #$E6FA, // $E6FA + #$E6FB, // $E6FB + #$E6FC, // $E6FC + #$E6FD, // $E6FD + #$E6FE, // $E6FE + #$E6FF, // $E6FF + #$E700, // $E700 + #$E701, // $E701 + #$E702, // $E702 + #$E703, // $E703 + #$E704, // $E704 + #$E705, // $E705 + #$E706, // $E706 + #$E707, // $E707 + #$E708, // $E708 + #$E709, // $E709 + #$E70A, // $E70A + #$E70B, // $E70B + #$E70C, // $E70C + #$E70D, // $E70D + #$E70E, // $E70E + #$E70F, // $E70F + #$E710, // $E710 + #$E711, // $E711 + #$E712, // $E712 + #$E713, // $E713 + #$E714, // $E714 + #$E715, // $E715 + #$E716, // $E716 + #$E717, // $E717 + #$E718, // $E718 + #$E719, // $E719 + #$E71A, // $E71A + #$E71B, // $E71B + #$E71C, // $E71C + #$E71D, // $E71D + #$E71E, // $E71E + #$E71F, // $E71F + #$E720, // $E720 + #$E721, // $E721 + #$E722, // $E722 + #$E723, // $E723 + #$E724, // $E724 + #$E725, // $E725 + #$E726, // $E726 + #$E727, // $E727 + #$E728, // $E728 + #$E729, // $E729 + #$E72A, // $E72A + #$E72B, // $E72B + #$E72C, // $E72C + #$E72D, // $E72D + #$E72E, // $E72E + #$E72F, // $E72F + #$E730, // $E730 + #$E731, // $E731 + #$E732, // $E732 + #$E733, // $E733 + #$E734, // $E734 + #$E735, // $E735 + #$E736, // $E736 + #$E737, // $E737 + #$E738, // $E738 + #$E739, // $E739 + #$E73A, // $E73A + #$E73B, // $E73B + #$E73C, // $E73C + #$E73D, // $E73D + #$E73E, // $E73E + #$E73F, // $E73F + #$E740, // $E740 + #$E741, // $E741 + #$E742, // $E742 + #$E743, // $E743 + #$E744, // $E744 + #$E745, // $E745 + #$E746, // $E746 + #$E747, // $E747 + #$E748, // $E748 + #$E749, // $E749 + #$E74A, // $E74A + #$E74B, // $E74B + #$E74C, // $E74C + #$E74D, // $E74D + #$E74E, // $E74E + #$E74F, // $E74F + #$E750, // $E750 + #$E751, // $E751 + #$E752, // $E752 + #$E753, // $E753 + #$E754, // $E754 + #$E755, // $E755 + #$E756, // $E756 + #$E757, // $E757 + #$E758, // $E758 + #$E759, // $E759 + #$E75A, // $E75A + #$E75B, // $E75B + #$E75C, // $E75C + #$E75D, // $E75D + #$E75E, // $E75E + #$E75F, // $E75F + #$E760, // $E760 + #$E761, // $E761 + #$E762, // $E762 + #$E763, // $E763 + #$E764, // $E764 + #$E765, // $E765 + #$E766, // $E766 + #$E767, // $E767 + #$E768, // $E768 + #$E769, // $E769 + #$E76A, // $E76A + #$E76B, // $E76B + #$E76C, // $E76C + #$E76D, // $E76D + #$E76E, // $E76E + #$E76F, // $E76F + #$E770, // $E770 + #$E771, // $E771 + #$E772, // $E772 + #$E773, // $E773 + #$E774, // $E774 + #$E775, // $E775 + #$E776, // $E776 + #$E777, // $E777 + #$E778, // $E778 + #$E779, // $E779 + #$E77A, // $E77A + #$E77B, // $E77B + #$E77C, // $E77C + #$E77D, // $E77D + #$E77E, // $E77E + #$E77F, // $E77F + #$E780, // $E780 + #$E781, // $E781 + #$E782, // $E782 + #$E783, // $E783 + #$E784, // $E784 + #$E785, // $E785 + #$E786, // $E786 + #$E787, // $E787 + #$E788, // $E788 + #$E789, // $E789 + #$E78A, // $E78A + #$E78B, // $E78B + #$E78C, // $E78C + #$E78D, // $E78D + #$E78E, // $E78E + #$E78F, // $E78F + #$E790, // $E790 + #$E791, // $E791 + #$E792, // $E792 + #$E793, // $E793 + #$E794, // $E794 + #$E795, // $E795 + #$E796, // $E796 + #$E797, // $E797 + #$E798, // $E798 + #$E799, // $E799 + #$E79A, // $E79A + #$E79B, // $E79B + #$E79C, // $E79C + #$E79D, // $E79D + #$E79E, // $E79E + #$E79F, // $E79F + #$E7A0, // $E7A0 + #$E7A1, // $E7A1 + #$E7A2, // $E7A2 + #$E7A3, // $E7A3 + #$E7A4, // $E7A4 + #$E7A5, // $E7A5 + #$E7A6, // $E7A6 + #$E7A7, // $E7A7 + #$E7A8, // $E7A8 + #$E7A9, // $E7A9 + #$E7AA, // $E7AA + #$E7AB, // $E7AB + #$E7AC, // $E7AC + #$E7AD, // $E7AD + #$E7AE, // $E7AE + #$E7AF, // $E7AF + #$E7B0, // $E7B0 + #$E7B1, // $E7B1 + #$E7B2, // $E7B2 + #$E7B3, // $E7B3 + #$E7B4, // $E7B4 + #$E7B5, // $E7B5 + #$E7B6, // $E7B6 + #$E7B7, // $E7B7 + #$E7B8, // $E7B8 + #$E7B9, // $E7B9 + #$E7BA, // $E7BA + #$E7BB, // $E7BB + #$E7BC, // $E7BC + #$E7BD, // $E7BD + #$E7BE, // $E7BE + #$E7BF, // $E7BF + #$E7C0, // $E7C0 + #$E7C1, // $E7C1 + #$E7C2, // $E7C2 + #$E7C3, // $E7C3 + #$E7C4, // $E7C4 + #$E7C5, // $E7C5 + #$E7C6, // $E7C6 + #$E7C7, // $E7C7 + #$E7C8, // $E7C8 + #$E7C9, // $E7C9 + #$E7CA, // $E7CA + #$E7CB, // $E7CB + #$E7CC, // $E7CC + #$E7CD, // $E7CD + #$E7CE, // $E7CE + #$E7CF, // $E7CF + #$E7D0, // $E7D0 + #$E7D1, // $E7D1 + #$E7D2, // $E7D2 + #$E7D3, // $E7D3 + #$E7D4, // $E7D4 + #$E7D5, // $E7D5 + #$E7D6, // $E7D6 + #$E7D7, // $E7D7 + #$E7D8, // $E7D8 + #$E7D9, // $E7D9 + #$E7DA, // $E7DA + #$E7DB, // $E7DB + #$E7DC, // $E7DC + #$E7DD, // $E7DD + #$E7DE, // $E7DE + #$E7DF, // $E7DF + #$E7E0, // $E7E0 + #$E7E1, // $E7E1 + #$E7E2, // $E7E2 + #$E7E3, // $E7E3 + #$E7E4, // $E7E4 + #$E7E5, // $E7E5 + #$E7E6, // $E7E6 + #$E7E7, // $E7E7 + #$E7E8, // $E7E8 + #$E7E9, // $E7E9 + #$E7EA, // $E7EA + #$E7EB, // $E7EB + #$E7EC, // $E7EC + #$E7ED, // $E7ED + #$E7EE, // $E7EE + #$E7EF, // $E7EF + #$E7F0, // $E7F0 + #$E7F1, // $E7F1 + #$E7F2, // $E7F2 + #$E7F3, // $E7F3 + #$E7F4, // $E7F4 + #$E7F5, // $E7F5 + #$E7F6, // $E7F6 + #$E7F7, // $E7F7 + #$E7F8, // $E7F8 + #$E7F9, // $E7F9 + #$E7FA, // $E7FA + #$E7FB, // $E7FB + #$E7FC, // $E7FC + #$E7FD, // $E7FD + #$E7FE, // $E7FE + #$E7FF, // $E7FF + #$E800, // $E800 + #$E801, // $E801 + #$E802, // $E802 + #$E803, // $E803 + #$E804, // $E804 + #$E805, // $E805 + #$E806, // $E806 + #$E807, // $E807 + #$E808, // $E808 + #$E809, // $E809 + #$E80A, // $E80A + #$E80B, // $E80B + #$E80C, // $E80C + #$E80D, // $E80D + #$E80E, // $E80E + #$E80F, // $E80F + #$E810, // $E810 + #$E811, // $E811 + #$E812, // $E812 + #$E813, // $E813 + #$E814, // $E814 + #$E815, // $E815 + #$E816, // $E816 + #$E817, // $E817 + #$E818, // $E818 + #$E819, // $E819 + #$E81A, // $E81A + #$E81B, // $E81B + #$E81C, // $E81C + #$E81D, // $E81D + #$E81E, // $E81E + #$E81F, // $E81F + #$E820, // $E820 + #$E821, // $E821 + #$E822, // $E822 + #$E823, // $E823 + #$E824, // $E824 + #$E825, // $E825 + #$E826, // $E826 + #$E827, // $E827 + #$E828, // $E828 + #$E829, // $E829 + #$E82A, // $E82A + #$E82B, // $E82B + #$E82C, // $E82C + #$E82D, // $E82D + #$E82E, // $E82E + #$E82F, // $E82F + #$E830, // $E830 + #$E831, // $E831 + #$E832, // $E832 + #$E833, // $E833 + #$E834, // $E834 + #$E835, // $E835 + #$E836, // $E836 + #$E837, // $E837 + #$E838, // $E838 + #$E839, // $E839 + #$E83A, // $E83A + #$E83B, // $E83B + #$E83C, // $E83C + #$E83D, // $E83D + #$E83E, // $E83E + #$E83F, // $E83F + #$E840, // $E840 + #$E841, // $E841 + #$E842, // $E842 + #$E843, // $E843 + #$E844, // $E844 + #$E845, // $E845 + #$E846, // $E846 + #$E847, // $E847 + #$E848, // $E848 + #$E849, // $E849 + #$E84A, // $E84A + #$E84B, // $E84B + #$E84C, // $E84C + #$E84D, // $E84D + #$E84E, // $E84E + #$E84F, // $E84F + #$E850, // $E850 + #$E851, // $E851 + #$E852, // $E852 + #$E853, // $E853 + #$E854, // $E854 + #$E855, // $E855 + #$E856, // $E856 + #$E857, // $E857 + #$E858, // $E858 + #$E859, // $E859 + #$E85A, // $E85A + #$E85B, // $E85B + #$E85C, // $E85C + #$E85D, // $E85D + #$E85E, // $E85E + #$E85F, // $E85F + #$E860, // $E860 + #$E861, // $E861 + #$E862, // $E862 + #$E863, // $E863 + #$E864, // $E864 + #$E865, // $E865 + #$E866, // $E866 + #$E867, // $E867 + #$E868, // $E868 + #$E869, // $E869 + #$E86A, // $E86A + #$E86B, // $E86B + #$E86C, // $E86C + #$E86D, // $E86D + #$E86E, // $E86E + #$E86F, // $E86F + #$E870, // $E870 + #$E871, // $E871 + #$E872, // $E872 + #$E873, // $E873 + #$E874, // $E874 + #$E875, // $E875 + #$E876, // $E876 + #$E877, // $E877 + #$E878, // $E878 + #$E879, // $E879 + #$E87A, // $E87A + #$E87B, // $E87B + #$E87C, // $E87C + #$E87D, // $E87D + #$E87E, // $E87E + #$E87F, // $E87F + #$E880, // $E880 + #$E881, // $E881 + #$E882, // $E882 + #$E883, // $E883 + #$E884, // $E884 + #$E885, // $E885 + #$E886, // $E886 + #$E887, // $E887 + #$E888, // $E888 + #$E889, // $E889 + #$E88A, // $E88A + #$E88B, // $E88B + #$E88C, // $E88C + #$E88D, // $E88D + #$E88E, // $E88E + #$E88F, // $E88F + #$E890, // $E890 + #$E891, // $E891 + #$E892, // $E892 + #$E893, // $E893 + #$E894, // $E894 + #$E895, // $E895 + #$E896, // $E896 + #$E897, // $E897 + #$E898, // $E898 + #$E899, // $E899 + #$E89A, // $E89A + #$E89B, // $E89B + #$E89C, // $E89C + #$E89D, // $E89D + #$E89E, // $E89E + #$E89F, // $E89F + #$E8A0, // $E8A0 + #$E8A1, // $E8A1 + #$E8A2, // $E8A2 + #$E8A3, // $E8A3 + #$E8A4, // $E8A4 + #$E8A5, // $E8A5 + #$E8A6, // $E8A6 + #$E8A7, // $E8A7 + #$E8A8, // $E8A8 + #$E8A9, // $E8A9 + #$E8AA, // $E8AA + #$E8AB, // $E8AB + #$E8AC, // $E8AC + #$E8AD, // $E8AD + #$E8AE, // $E8AE + #$E8AF, // $E8AF + #$E8B0, // $E8B0 + #$E8B1, // $E8B1 + #$E8B2, // $E8B2 + #$E8B3, // $E8B3 + #$E8B4, // $E8B4 + #$E8B5, // $E8B5 + #$E8B6, // $E8B6 + #$E8B7, // $E8B7 + #$E8B8, // $E8B8 + #$E8B9, // $E8B9 + #$E8BA, // $E8BA + #$E8BB, // $E8BB + #$E8BC, // $E8BC + #$E8BD, // $E8BD + #$E8BE, // $E8BE + #$E8BF, // $E8BF + #$E8C0, // $E8C0 + #$E8C1, // $E8C1 + #$E8C2, // $E8C2 + #$E8C3, // $E8C3 + #$E8C4, // $E8C4 + #$E8C5, // $E8C5 + #$E8C6, // $E8C6 + #$E8C7, // $E8C7 + #$E8C8, // $E8C8 + #$E8C9, // $E8C9 + #$E8CA, // $E8CA + #$E8CB, // $E8CB + #$E8CC, // $E8CC + #$E8CD, // $E8CD + #$E8CE, // $E8CE + #$E8CF, // $E8CF + #$E8D0, // $E8D0 + #$E8D1, // $E8D1 + #$E8D2, // $E8D2 + #$E8D3, // $E8D3 + #$E8D4, // $E8D4 + #$E8D5, // $E8D5 + #$E8D6, // $E8D6 + #$E8D7, // $E8D7 + #$E8D8, // $E8D8 + #$E8D9, // $E8D9 + #$E8DA, // $E8DA + #$E8DB, // $E8DB + #$E8DC, // $E8DC + #$E8DD, // $E8DD + #$E8DE, // $E8DE + #$E8DF, // $E8DF + #$E8E0, // $E8E0 + #$E8E1, // $E8E1 + #$E8E2, // $E8E2 + #$E8E3, // $E8E3 + #$E8E4, // $E8E4 + #$E8E5, // $E8E5 + #$E8E6, // $E8E6 + #$E8E7, // $E8E7 + #$E8E8, // $E8E8 + #$E8E9, // $E8E9 + #$E8EA, // $E8EA + #$E8EB, // $E8EB + #$E8EC, // $E8EC + #$E8ED, // $E8ED + #$E8EE, // $E8EE + #$E8EF, // $E8EF + #$E8F0, // $E8F0 + #$E8F1, // $E8F1 + #$E8F2, // $E8F2 + #$E8F3, // $E8F3 + #$E8F4, // $E8F4 + #$E8F5, // $E8F5 + #$E8F6, // $E8F6 + #$E8F7, // $E8F7 + #$E8F8, // $E8F8 + #$E8F9, // $E8F9 + #$E8FA, // $E8FA + #$E8FB, // $E8FB + #$E8FC, // $E8FC + #$E8FD, // $E8FD + #$E8FE, // $E8FE + #$E8FF, // $E8FF + #$E900, // $E900 + #$E901, // $E901 + #$E902, // $E902 + #$E903, // $E903 + #$E904, // $E904 + #$E905, // $E905 + #$E906, // $E906 + #$E907, // $E907 + #$E908, // $E908 + #$E909, // $E909 + #$E90A, // $E90A + #$E90B, // $E90B + #$E90C, // $E90C + #$E90D, // $E90D + #$E90E, // $E90E + #$E90F, // $E90F + #$E910, // $E910 + #$E911, // $E911 + #$E912, // $E912 + #$E913, // $E913 + #$E914, // $E914 + #$E915, // $E915 + #$E916, // $E916 + #$E917, // $E917 + #$E918, // $E918 + #$E919, // $E919 + #$E91A, // $E91A + #$E91B, // $E91B + #$E91C, // $E91C + #$E91D, // $E91D + #$E91E, // $E91E + #$E91F, // $E91F + #$E920, // $E920 + #$E921, // $E921 + #$E922, // $E922 + #$E923, // $E923 + #$E924, // $E924 + #$E925, // $E925 + #$E926, // $E926 + #$E927, // $E927 + #$E928, // $E928 + #$E929, // $E929 + #$E92A, // $E92A + #$E92B, // $E92B + #$E92C, // $E92C + #$E92D, // $E92D + #$E92E, // $E92E + #$E92F, // $E92F + #$E930, // $E930 + #$E931, // $E931 + #$E932, // $E932 + #$E933, // $E933 + #$E934, // $E934 + #$E935, // $E935 + #$E936, // $E936 + #$E937, // $E937 + #$E938, // $E938 + #$E939, // $E939 + #$E93A, // $E93A + #$E93B, // $E93B + #$E93C, // $E93C + #$E93D, // $E93D + #$E93E, // $E93E + #$E93F, // $E93F + #$E940, // $E940 + #$E941, // $E941 + #$E942, // $E942 + #$E943, // $E943 + #$E944, // $E944 + #$E945, // $E945 + #$E946, // $E946 + #$E947, // $E947 + #$E948, // $E948 + #$E949, // $E949 + #$E94A, // $E94A + #$E94B, // $E94B + #$E94C, // $E94C + #$E94D, // $E94D + #$E94E, // $E94E + #$E94F, // $E94F + #$E950, // $E950 + #$E951, // $E951 + #$E952, // $E952 + #$E953, // $E953 + #$E954, // $E954 + #$E955, // $E955 + #$E956, // $E956 + #$E957, // $E957 + #$E958, // $E958 + #$E959, // $E959 + #$E95A, // $E95A + #$E95B, // $E95B + #$E95C, // $E95C + #$E95D, // $E95D + #$E95E, // $E95E + #$E95F, // $E95F + #$E960, // $E960 + #$E961, // $E961 + #$E962, // $E962 + #$E963, // $E963 + #$E964, // $E964 + #$E965, // $E965 + #$E966, // $E966 + #$E967, // $E967 + #$E968, // $E968 + #$E969, // $E969 + #$E96A, // $E96A + #$E96B, // $E96B + #$E96C, // $E96C + #$E96D, // $E96D + #$E96E, // $E96E + #$E96F, // $E96F + #$E970, // $E970 + #$E971, // $E971 + #$E972, // $E972 + #$E973, // $E973 + #$E974, // $E974 + #$E975, // $E975 + #$E976, // $E976 + #$E977, // $E977 + #$E978, // $E978 + #$E979, // $E979 + #$E97A, // $E97A + #$E97B, // $E97B + #$E97C, // $E97C + #$E97D, // $E97D + #$E97E, // $E97E + #$E97F, // $E97F + #$E980, // $E980 + #$E981, // $E981 + #$E982, // $E982 + #$E983, // $E983 + #$E984, // $E984 + #$E985, // $E985 + #$E986, // $E986 + #$E987, // $E987 + #$E988, // $E988 + #$E989, // $E989 + #$E98A, // $E98A + #$E98B, // $E98B + #$E98C, // $E98C + #$E98D, // $E98D + #$E98E, // $E98E + #$E98F, // $E98F + #$E990, // $E990 + #$E991, // $E991 + #$E992, // $E992 + #$E993, // $E993 + #$E994, // $E994 + #$E995, // $E995 + #$E996, // $E996 + #$E997, // $E997 + #$E998, // $E998 + #$E999, // $E999 + #$E99A, // $E99A + #$E99B, // $E99B + #$E99C, // $E99C + #$E99D, // $E99D + #$E99E, // $E99E + #$E99F, // $E99F + #$E9A0, // $E9A0 + #$E9A1, // $E9A1 + #$E9A2, // $E9A2 + #$E9A3, // $E9A3 + #$E9A4, // $E9A4 + #$E9A5, // $E9A5 + #$E9A6, // $E9A6 + #$E9A7, // $E9A7 + #$E9A8, // $E9A8 + #$E9A9, // $E9A9 + #$E9AA, // $E9AA + #$E9AB, // $E9AB + #$E9AC, // $E9AC + #$E9AD, // $E9AD + #$E9AE, // $E9AE + #$E9AF, // $E9AF + #$E9B0, // $E9B0 + #$E9B1, // $E9B1 + #$E9B2, // $E9B2 + #$E9B3, // $E9B3 + #$E9B4, // $E9B4 + #$E9B5, // $E9B5 + #$E9B6, // $E9B6 + #$E9B7, // $E9B7 + #$E9B8, // $E9B8 + #$E9B9, // $E9B9 + #$E9BA, // $E9BA + #$E9BB, // $E9BB + #$E9BC, // $E9BC + #$E9BD, // $E9BD + #$E9BE, // $E9BE + #$E9BF, // $E9BF + #$E9C0, // $E9C0 + #$E9C1, // $E9C1 + #$E9C2, // $E9C2 + #$E9C3, // $E9C3 + #$E9C4, // $E9C4 + #$E9C5, // $E9C5 + #$E9C6, // $E9C6 + #$E9C7, // $E9C7 + #$E9C8, // $E9C8 + #$E9C9, // $E9C9 + #$E9CA, // $E9CA + #$E9CB, // $E9CB + #$E9CC, // $E9CC + #$E9CD, // $E9CD + #$E9CE, // $E9CE + #$E9CF, // $E9CF + #$E9D0, // $E9D0 + #$E9D1, // $E9D1 + #$E9D2, // $E9D2 + #$E9D3, // $E9D3 + #$E9D4, // $E9D4 + #$E9D5, // $E9D5 + #$E9D6, // $E9D6 + #$E9D7, // $E9D7 + #$E9D8, // $E9D8 + #$E9D9, // $E9D9 + #$E9DA, // $E9DA + #$E9DB, // $E9DB + #$E9DC, // $E9DC + #$E9DD, // $E9DD + #$E9DE, // $E9DE + #$E9DF, // $E9DF + #$E9E0, // $E9E0 + #$E9E1, // $E9E1 + #$E9E2, // $E9E2 + #$E9E3, // $E9E3 + #$E9E4, // $E9E4 + #$E9E5, // $E9E5 + #$E9E6, // $E9E6 + #$E9E7, // $E9E7 + #$E9E8, // $E9E8 + #$E9E9, // $E9E9 + #$E9EA, // $E9EA + #$E9EB, // $E9EB + #$E9EC, // $E9EC + #$E9ED, // $E9ED + #$E9EE, // $E9EE + #$E9EF, // $E9EF + #$E9F0, // $E9F0 + #$E9F1, // $E9F1 + #$E9F2, // $E9F2 + #$E9F3, // $E9F3 + #$E9F4, // $E9F4 + #$E9F5, // $E9F5 + #$E9F6, // $E9F6 + #$E9F7, // $E9F7 + #$E9F8, // $E9F8 + #$E9F9, // $E9F9 + #$E9FA, // $E9FA + #$E9FB, // $E9FB + #$E9FC, // $E9FC + #$E9FD, // $E9FD + #$E9FE, // $E9FE + #$E9FF, // $E9FF + #$EA00, // $EA00 + #$EA01, // $EA01 + #$EA02, // $EA02 + #$EA03, // $EA03 + #$EA04, // $EA04 + #$EA05, // $EA05 + #$EA06, // $EA06 + #$EA07, // $EA07 + #$EA08, // $EA08 + #$EA09, // $EA09 + #$EA0A, // $EA0A + #$EA0B, // $EA0B + #$EA0C, // $EA0C + #$EA0D, // $EA0D + #$EA0E, // $EA0E + #$EA0F, // $EA0F + #$EA10, // $EA10 + #$EA11, // $EA11 + #$EA12, // $EA12 + #$EA13, // $EA13 + #$EA14, // $EA14 + #$EA15, // $EA15 + #$EA16, // $EA16 + #$EA17, // $EA17 + #$EA18, // $EA18 + #$EA19, // $EA19 + #$EA1A, // $EA1A + #$EA1B, // $EA1B + #$EA1C, // $EA1C + #$EA1D, // $EA1D + #$EA1E, // $EA1E + #$EA1F, // $EA1F + #$EA20, // $EA20 + #$EA21, // $EA21 + #$EA22, // $EA22 + #$EA23, // $EA23 + #$EA24, // $EA24 + #$EA25, // $EA25 + #$EA26, // $EA26 + #$EA27, // $EA27 + #$EA28, // $EA28 + #$EA29, // $EA29 + #$EA2A, // $EA2A + #$EA2B, // $EA2B + #$EA2C, // $EA2C + #$EA2D, // $EA2D + #$EA2E, // $EA2E + #$EA2F, // $EA2F + #$EA30, // $EA30 + #$EA31, // $EA31 + #$EA32, // $EA32 + #$EA33, // $EA33 + #$EA34, // $EA34 + #$EA35, // $EA35 + #$EA36, // $EA36 + #$EA37, // $EA37 + #$EA38, // $EA38 + #$EA39, // $EA39 + #$EA3A, // $EA3A + #$EA3B, // $EA3B + #$EA3C, // $EA3C + #$EA3D, // $EA3D + #$EA3E, // $EA3E + #$EA3F, // $EA3F + #$EA40, // $EA40 + #$EA41, // $EA41 + #$EA42, // $EA42 + #$EA43, // $EA43 + #$EA44, // $EA44 + #$EA45, // $EA45 + #$EA46, // $EA46 + #$EA47, // $EA47 + #$EA48, // $EA48 + #$EA49, // $EA49 + #$EA4A, // $EA4A + #$EA4B, // $EA4B + #$EA4C, // $EA4C + #$EA4D, // $EA4D + #$EA4E, // $EA4E + #$EA4F, // $EA4F + #$EA50, // $EA50 + #$EA51, // $EA51 + #$EA52, // $EA52 + #$EA53, // $EA53 + #$EA54, // $EA54 + #$EA55, // $EA55 + #$EA56, // $EA56 + #$EA57, // $EA57 + #$EA58, // $EA58 + #$EA59, // $EA59 + #$EA5A, // $EA5A + #$EA5B, // $EA5B + #$EA5C, // $EA5C + #$EA5D, // $EA5D + #$EA5E, // $EA5E + #$EA5F, // $EA5F + #$EA60, // $EA60 + #$EA61, // $EA61 + #$EA62, // $EA62 + #$EA63, // $EA63 + #$EA64, // $EA64 + #$EA65, // $EA65 + #$EA66, // $EA66 + #$EA67, // $EA67 + #$EA68, // $EA68 + #$EA69, // $EA69 + #$EA6A, // $EA6A + #$EA6B, // $EA6B + #$EA6C, // $EA6C + #$EA6D, // $EA6D + #$EA6E, // $EA6E + #$EA6F, // $EA6F + #$EA70, // $EA70 + #$EA71, // $EA71 + #$EA72, // $EA72 + #$EA73, // $EA73 + #$EA74, // $EA74 + #$EA75, // $EA75 + #$EA76, // $EA76 + #$EA77, // $EA77 + #$EA78, // $EA78 + #$EA79, // $EA79 + #$EA7A, // $EA7A + #$EA7B, // $EA7B + #$EA7C, // $EA7C + #$EA7D, // $EA7D + #$EA7E, // $EA7E + #$EA7F, // $EA7F + #$EA80, // $EA80 + #$EA81, // $EA81 + #$EA82, // $EA82 + #$EA83, // $EA83 + #$EA84, // $EA84 + #$EA85, // $EA85 + #$EA86, // $EA86 + #$EA87, // $EA87 + #$EA88, // $EA88 + #$EA89, // $EA89 + #$EA8A, // $EA8A + #$EA8B, // $EA8B + #$EA8C, // $EA8C + #$EA8D, // $EA8D + #$EA8E, // $EA8E + #$EA8F, // $EA8F + #$EA90, // $EA90 + #$EA91, // $EA91 + #$EA92, // $EA92 + #$EA93, // $EA93 + #$EA94, // $EA94 + #$EA95, // $EA95 + #$EA96, // $EA96 + #$EA97, // $EA97 + #$EA98, // $EA98 + #$EA99, // $EA99 + #$EA9A, // $EA9A + #$EA9B, // $EA9B + #$EA9C, // $EA9C + #$EA9D, // $EA9D + #$EA9E, // $EA9E + #$EA9F, // $EA9F + #$EAA0, // $EAA0 + #$EAA1, // $EAA1 + #$EAA2, // $EAA2 + #$EAA3, // $EAA3 + #$EAA4, // $EAA4 + #$EAA5, // $EAA5 + #$EAA6, // $EAA6 + #$EAA7, // $EAA7 + #$EAA8, // $EAA8 + #$EAA9, // $EAA9 + #$EAAA, // $EAAA + #$EAAB, // $EAAB + #$EAAC, // $EAAC + #$EAAD, // $EAAD + #$EAAE, // $EAAE + #$EAAF, // $EAAF + #$EAB0, // $EAB0 + #$EAB1, // $EAB1 + #$EAB2, // $EAB2 + #$EAB3, // $EAB3 + #$EAB4, // $EAB4 + #$EAB5, // $EAB5 + #$EAB6, // $EAB6 + #$EAB7, // $EAB7 + #$EAB8, // $EAB8 + #$EAB9, // $EAB9 + #$EABA, // $EABA + #$EABB, // $EABB + #$EABC, // $EABC + #$EABD, // $EABD + #$EABE, // $EABE + #$EABF, // $EABF + #$EAC0, // $EAC0 + #$EAC1, // $EAC1 + #$EAC2, // $EAC2 + #$EAC3, // $EAC3 + #$EAC4, // $EAC4 + #$EAC5, // $EAC5 + #$EAC6, // $EAC6 + #$EAC7, // $EAC7 + #$EAC8, // $EAC8 + #$EAC9, // $EAC9 + #$EACA, // $EACA + #$EACB, // $EACB + #$EACC, // $EACC + #$EACD, // $EACD + #$EACE, // $EACE + #$EACF, // $EACF + #$EAD0, // $EAD0 + #$EAD1, // $EAD1 + #$EAD2, // $EAD2 + #$EAD3, // $EAD3 + #$EAD4, // $EAD4 + #$EAD5, // $EAD5 + #$EAD6, // $EAD6 + #$EAD7, // $EAD7 + #$EAD8, // $EAD8 + #$EAD9, // $EAD9 + #$EADA, // $EADA + #$EADB, // $EADB + #$EADC, // $EADC + #$EADD, // $EADD + #$EADE, // $EADE + #$EADF, // $EADF + #$EAE0, // $EAE0 + #$EAE1, // $EAE1 + #$EAE2, // $EAE2 + #$EAE3, // $EAE3 + #$EAE4, // $EAE4 + #$EAE5, // $EAE5 + #$EAE6, // $EAE6 + #$EAE7, // $EAE7 + #$EAE8, // $EAE8 + #$EAE9, // $EAE9 + #$EAEA, // $EAEA + #$EAEB, // $EAEB + #$EAEC, // $EAEC + #$EAED, // $EAED + #$EAEE, // $EAEE + #$EAEF, // $EAEF + #$EAF0, // $EAF0 + #$EAF1, // $EAF1 + #$EAF2, // $EAF2 + #$EAF3, // $EAF3 + #$EAF4, // $EAF4 + #$EAF5, // $EAF5 + #$EAF6, // $EAF6 + #$EAF7, // $EAF7 + #$EAF8, // $EAF8 + #$EAF9, // $EAF9 + #$EAFA, // $EAFA + #$EAFB, // $EAFB + #$EAFC, // $EAFC + #$EAFD, // $EAFD + #$EAFE, // $EAFE + #$EAFF, // $EAFF + #$EB00, // $EB00 + #$EB01, // $EB01 + #$EB02, // $EB02 + #$EB03, // $EB03 + #$EB04, // $EB04 + #$EB05, // $EB05 + #$EB06, // $EB06 + #$EB07, // $EB07 + #$EB08, // $EB08 + #$EB09, // $EB09 + #$EB0A, // $EB0A + #$EB0B, // $EB0B + #$EB0C, // $EB0C + #$EB0D, // $EB0D + #$EB0E, // $EB0E + #$EB0F, // $EB0F + #$EB10, // $EB10 + #$EB11, // $EB11 + #$EB12, // $EB12 + #$EB13, // $EB13 + #$EB14, // $EB14 + #$EB15, // $EB15 + #$EB16, // $EB16 + #$EB17, // $EB17 + #$EB18, // $EB18 + #$EB19, // $EB19 + #$EB1A, // $EB1A + #$EB1B, // $EB1B + #$EB1C, // $EB1C + #$EB1D, // $EB1D + #$EB1E, // $EB1E + #$EB1F, // $EB1F + #$EB20, // $EB20 + #$EB21, // $EB21 + #$EB22, // $EB22 + #$EB23, // $EB23 + #$EB24, // $EB24 + #$EB25, // $EB25 + #$EB26, // $EB26 + #$EB27, // $EB27 + #$EB28, // $EB28 + #$EB29, // $EB29 + #$EB2A, // $EB2A + #$EB2B, // $EB2B + #$EB2C, // $EB2C + #$EB2D, // $EB2D + #$EB2E, // $EB2E + #$EB2F, // $EB2F + #$EB30, // $EB30 + #$EB31, // $EB31 + #$EB32, // $EB32 + #$EB33, // $EB33 + #$EB34, // $EB34 + #$EB35, // $EB35 + #$EB36, // $EB36 + #$EB37, // $EB37 + #$EB38, // $EB38 + #$EB39, // $EB39 + #$EB3A, // $EB3A + #$EB3B, // $EB3B + #$EB3C, // $EB3C + #$EB3D, // $EB3D + #$EB3E, // $EB3E + #$EB3F, // $EB3F + #$EB40, // $EB40 + #$EB41, // $EB41 + #$EB42, // $EB42 + #$EB43, // $EB43 + #$EB44, // $EB44 + #$EB45, // $EB45 + #$EB46, // $EB46 + #$EB47, // $EB47 + #$EB48, // $EB48 + #$EB49, // $EB49 + #$EB4A, // $EB4A + #$EB4B, // $EB4B + #$EB4C, // $EB4C + #$EB4D, // $EB4D + #$EB4E, // $EB4E + #$EB4F, // $EB4F + #$EB50, // $EB50 + #$EB51, // $EB51 + #$EB52, // $EB52 + #$EB53, // $EB53 + #$EB54, // $EB54 + #$EB55, // $EB55 + #$EB56, // $EB56 + #$EB57, // $EB57 + #$EB58, // $EB58 + #$EB59, // $EB59 + #$EB5A, // $EB5A + #$EB5B, // $EB5B + #$EB5C, // $EB5C + #$EB5D, // $EB5D + #$EB5E, // $EB5E + #$EB5F, // $EB5F + #$EB60, // $EB60 + #$EB61, // $EB61 + #$EB62, // $EB62 + #$EB63, // $EB63 + #$EB64, // $EB64 + #$EB65, // $EB65 + #$EB66, // $EB66 + #$EB67, // $EB67 + #$EB68, // $EB68 + #$EB69, // $EB69 + #$EB6A, // $EB6A + #$EB6B, // $EB6B + #$EB6C, // $EB6C + #$EB6D, // $EB6D + #$EB6E, // $EB6E + #$EB6F, // $EB6F + #$EB70, // $EB70 + #$EB71, // $EB71 + #$EB72, // $EB72 + #$EB73, // $EB73 + #$EB74, // $EB74 + #$EB75, // $EB75 + #$EB76, // $EB76 + #$EB77, // $EB77 + #$EB78, // $EB78 + #$EB79, // $EB79 + #$EB7A, // $EB7A + #$EB7B, // $EB7B + #$EB7C, // $EB7C + #$EB7D, // $EB7D + #$EB7E, // $EB7E + #$EB7F, // $EB7F + #$EB80, // $EB80 + #$EB81, // $EB81 + #$EB82, // $EB82 + #$EB83, // $EB83 + #$EB84, // $EB84 + #$EB85, // $EB85 + #$EB86, // $EB86 + #$EB87, // $EB87 + #$EB88, // $EB88 + #$EB89, // $EB89 + #$EB8A, // $EB8A + #$EB8B, // $EB8B + #$EB8C, // $EB8C + #$EB8D, // $EB8D + #$EB8E, // $EB8E + #$EB8F, // $EB8F + #$EB90, // $EB90 + #$EB91, // $EB91 + #$EB92, // $EB92 + #$EB93, // $EB93 + #$EB94, // $EB94 + #$EB95, // $EB95 + #$EB96, // $EB96 + #$EB97, // $EB97 + #$EB98, // $EB98 + #$EB99, // $EB99 + #$EB9A, // $EB9A + #$EB9B, // $EB9B + #$EB9C, // $EB9C + #$EB9D, // $EB9D + #$EB9E, // $EB9E + #$EB9F, // $EB9F + #$EBA0, // $EBA0 + #$EBA1, // $EBA1 + #$EBA2, // $EBA2 + #$EBA3, // $EBA3 + #$EBA4, // $EBA4 + #$EBA5, // $EBA5 + #$EBA6, // $EBA6 + #$EBA7, // $EBA7 + #$EBA8, // $EBA8 + #$EBA9, // $EBA9 + #$EBAA, // $EBAA + #$EBAB, // $EBAB + #$EBAC, // $EBAC + #$EBAD, // $EBAD + #$EBAE, // $EBAE + #$EBAF, // $EBAF + #$EBB0, // $EBB0 + #$EBB1, // $EBB1 + #$EBB2, // $EBB2 + #$EBB3, // $EBB3 + #$EBB4, // $EBB4 + #$EBB5, // $EBB5 + #$EBB6, // $EBB6 + #$EBB7, // $EBB7 + #$EBB8, // $EBB8 + #$EBB9, // $EBB9 + #$EBBA, // $EBBA + #$EBBB, // $EBBB + #$EBBC, // $EBBC + #$EBBD, // $EBBD + #$EBBE, // $EBBE + #$EBBF, // $EBBF + #$EBC0, // $EBC0 + #$EBC1, // $EBC1 + #$EBC2, // $EBC2 + #$EBC3, // $EBC3 + #$EBC4, // $EBC4 + #$EBC5, // $EBC5 + #$EBC6, // $EBC6 + #$EBC7, // $EBC7 + #$EBC8, // $EBC8 + #$EBC9, // $EBC9 + #$EBCA, // $EBCA + #$EBCB, // $EBCB + #$EBCC, // $EBCC + #$EBCD, // $EBCD + #$EBCE, // $EBCE + #$EBCF, // $EBCF + #$EBD0, // $EBD0 + #$EBD1, // $EBD1 + #$EBD2, // $EBD2 + #$EBD3, // $EBD3 + #$EBD4, // $EBD4 + #$EBD5, // $EBD5 + #$EBD6, // $EBD6 + #$EBD7, // $EBD7 + #$EBD8, // $EBD8 + #$EBD9, // $EBD9 + #$EBDA, // $EBDA + #$EBDB, // $EBDB + #$EBDC, // $EBDC + #$EBDD, // $EBDD + #$EBDE, // $EBDE + #$EBDF, // $EBDF + #$EBE0, // $EBE0 + #$EBE1, // $EBE1 + #$EBE2, // $EBE2 + #$EBE3, // $EBE3 + #$EBE4, // $EBE4 + #$EBE5, // $EBE5 + #$EBE6, // $EBE6 + #$EBE7, // $EBE7 + #$EBE8, // $EBE8 + #$EBE9, // $EBE9 + #$EBEA, // $EBEA + #$EBEB, // $EBEB + #$EBEC, // $EBEC + #$EBED, // $EBED + #$EBEE, // $EBEE + #$EBEF, // $EBEF + #$EBF0, // $EBF0 + #$EBF1, // $EBF1 + #$EBF2, // $EBF2 + #$EBF3, // $EBF3 + #$EBF4, // $EBF4 + #$EBF5, // $EBF5 + #$EBF6, // $EBF6 + #$EBF7, // $EBF7 + #$EBF8, // $EBF8 + #$EBF9, // $EBF9 + #$EBFA, // $EBFA + #$EBFB, // $EBFB + #$EBFC, // $EBFC + #$EBFD, // $EBFD + #$EBFE, // $EBFE + #$EBFF, // $EBFF + #$EC00, // $EC00 + #$EC01, // $EC01 + #$EC02, // $EC02 + #$EC03, // $EC03 + #$EC04, // $EC04 + #$EC05, // $EC05 + #$EC06, // $EC06 + #$EC07, // $EC07 + #$EC08, // $EC08 + #$EC09, // $EC09 + #$EC0A, // $EC0A + #$EC0B, // $EC0B + #$EC0C, // $EC0C + #$EC0D, // $EC0D + #$EC0E, // $EC0E + #$EC0F, // $EC0F + #$EC10, // $EC10 + #$EC11, // $EC11 + #$EC12, // $EC12 + #$EC13, // $EC13 + #$EC14, // $EC14 + #$EC15, // $EC15 + #$EC16, // $EC16 + #$EC17, // $EC17 + #$EC18, // $EC18 + #$EC19, // $EC19 + #$EC1A, // $EC1A + #$EC1B, // $EC1B + #$EC1C, // $EC1C + #$EC1D, // $EC1D + #$EC1E, // $EC1E + #$EC1F, // $EC1F + #$EC20, // $EC20 + #$EC21, // $EC21 + #$EC22, // $EC22 + #$EC23, // $EC23 + #$EC24, // $EC24 + #$EC25, // $EC25 + #$EC26, // $EC26 + #$EC27, // $EC27 + #$EC28, // $EC28 + #$EC29, // $EC29 + #$EC2A, // $EC2A + #$EC2B, // $EC2B + #$EC2C, // $EC2C + #$EC2D, // $EC2D + #$EC2E, // $EC2E + #$EC2F, // $EC2F + #$EC30, // $EC30 + #$EC31, // $EC31 + #$EC32, // $EC32 + #$EC33, // $EC33 + #$EC34, // $EC34 + #$EC35, // $EC35 + #$EC36, // $EC36 + #$EC37, // $EC37 + #$EC38, // $EC38 + #$EC39, // $EC39 + #$EC3A, // $EC3A + #$EC3B, // $EC3B + #$EC3C, // $EC3C + #$EC3D, // $EC3D + #$EC3E, // $EC3E + #$EC3F, // $EC3F + #$EC40, // $EC40 + #$EC41, // $EC41 + #$EC42, // $EC42 + #$EC43, // $EC43 + #$EC44, // $EC44 + #$EC45, // $EC45 + #$EC46, // $EC46 + #$EC47, // $EC47 + #$EC48, // $EC48 + #$EC49, // $EC49 + #$EC4A, // $EC4A + #$EC4B, // $EC4B + #$EC4C, // $EC4C + #$EC4D, // $EC4D + #$EC4E, // $EC4E + #$EC4F, // $EC4F + #$EC50, // $EC50 + #$EC51, // $EC51 + #$EC52, // $EC52 + #$EC53, // $EC53 + #$EC54, // $EC54 + #$EC55, // $EC55 + #$EC56, // $EC56 + #$EC57, // $EC57 + #$EC58, // $EC58 + #$EC59, // $EC59 + #$EC5A, // $EC5A + #$EC5B, // $EC5B + #$EC5C, // $EC5C + #$EC5D, // $EC5D + #$EC5E, // $EC5E + #$EC5F, // $EC5F + #$EC60, // $EC60 + #$EC61, // $EC61 + #$EC62, // $EC62 + #$EC63, // $EC63 + #$EC64, // $EC64 + #$EC65, // $EC65 + #$EC66, // $EC66 + #$EC67, // $EC67 + #$EC68, // $EC68 + #$EC69, // $EC69 + #$EC6A, // $EC6A + #$EC6B, // $EC6B + #$EC6C, // $EC6C + #$EC6D, // $EC6D + #$EC6E, // $EC6E + #$EC6F, // $EC6F + #$EC70, // $EC70 + #$EC71, // $EC71 + #$EC72, // $EC72 + #$EC73, // $EC73 + #$EC74, // $EC74 + #$EC75, // $EC75 + #$EC76, // $EC76 + #$EC77, // $EC77 + #$EC78, // $EC78 + #$EC79, // $EC79 + #$EC7A, // $EC7A + #$EC7B, // $EC7B + #$EC7C, // $EC7C + #$EC7D, // $EC7D + #$EC7E, // $EC7E + #$EC7F, // $EC7F + #$EC80, // $EC80 + #$EC81, // $EC81 + #$EC82, // $EC82 + #$EC83, // $EC83 + #$EC84, // $EC84 + #$EC85, // $EC85 + #$EC86, // $EC86 + #$EC87, // $EC87 + #$EC88, // $EC88 + #$EC89, // $EC89 + #$EC8A, // $EC8A + #$EC8B, // $EC8B + #$EC8C, // $EC8C + #$EC8D, // $EC8D + #$EC8E, // $EC8E + #$EC8F, // $EC8F + #$EC90, // $EC90 + #$EC91, // $EC91 + #$EC92, // $EC92 + #$EC93, // $EC93 + #$EC94, // $EC94 + #$EC95, // $EC95 + #$EC96, // $EC96 + #$EC97, // $EC97 + #$EC98, // $EC98 + #$EC99, // $EC99 + #$EC9A, // $EC9A + #$EC9B, // $EC9B + #$EC9C, // $EC9C + #$EC9D, // $EC9D + #$EC9E, // $EC9E + #$EC9F, // $EC9F + #$ECA0, // $ECA0 + #$ECA1, // $ECA1 + #$ECA2, // $ECA2 + #$ECA3, // $ECA3 + #$ECA4, // $ECA4 + #$ECA5, // $ECA5 + #$ECA6, // $ECA6 + #$ECA7, // $ECA7 + #$ECA8, // $ECA8 + #$ECA9, // $ECA9 + #$ECAA, // $ECAA + #$ECAB, // $ECAB + #$ECAC, // $ECAC + #$ECAD, // $ECAD + #$ECAE, // $ECAE + #$ECAF, // $ECAF + #$ECB0, // $ECB0 + #$ECB1, // $ECB1 + #$ECB2, // $ECB2 + #$ECB3, // $ECB3 + #$ECB4, // $ECB4 + #$ECB5, // $ECB5 + #$ECB6, // $ECB6 + #$ECB7, // $ECB7 + #$ECB8, // $ECB8 + #$ECB9, // $ECB9 + #$ECBA, // $ECBA + #$ECBB, // $ECBB + #$ECBC, // $ECBC + #$ECBD, // $ECBD + #$ECBE, // $ECBE + #$ECBF, // $ECBF + #$ECC0, // $ECC0 + #$ECC1, // $ECC1 + #$ECC2, // $ECC2 + #$ECC3, // $ECC3 + #$ECC4, // $ECC4 + #$ECC5, // $ECC5 + #$ECC6, // $ECC6 + #$ECC7, // $ECC7 + #$ECC8, // $ECC8 + #$ECC9, // $ECC9 + #$ECCA, // $ECCA + #$ECCB, // $ECCB + #$ECCC, // $ECCC + #$ECCD, // $ECCD + #$ECCE, // $ECCE + #$ECCF, // $ECCF + #$ECD0, // $ECD0 + #$ECD1, // $ECD1 + #$ECD2, // $ECD2 + #$ECD3, // $ECD3 + #$ECD4, // $ECD4 + #$ECD5, // $ECD5 + #$ECD6, // $ECD6 + #$ECD7, // $ECD7 + #$ECD8, // $ECD8 + #$ECD9, // $ECD9 + #$ECDA, // $ECDA + #$ECDB, // $ECDB + #$ECDC, // $ECDC + #$ECDD, // $ECDD + #$ECDE, // $ECDE + #$ECDF, // $ECDF + #$ECE0, // $ECE0 + #$ECE1, // $ECE1 + #$ECE2, // $ECE2 + #$ECE3, // $ECE3 + #$ECE4, // $ECE4 + #$ECE5, // $ECE5 + #$ECE6, // $ECE6 + #$ECE7, // $ECE7 + #$ECE8, // $ECE8 + #$ECE9, // $ECE9 + #$ECEA, // $ECEA + #$ECEB, // $ECEB + #$ECEC, // $ECEC + #$ECED, // $ECED + #$ECEE, // $ECEE + #$ECEF, // $ECEF + #$ECF0, // $ECF0 + #$ECF1, // $ECF1 + #$ECF2, // $ECF2 + #$ECF3, // $ECF3 + #$ECF4, // $ECF4 + #$ECF5, // $ECF5 + #$ECF6, // $ECF6 + #$ECF7, // $ECF7 + #$ECF8, // $ECF8 + #$ECF9, // $ECF9 + #$ECFA, // $ECFA + #$ECFB, // $ECFB + #$ECFC, // $ECFC + #$ECFD, // $ECFD + #$ECFE, // $ECFE + #$ECFF, // $ECFF + #$ED00, // $ED00 + #$ED01, // $ED01 + #$ED02, // $ED02 + #$ED03, // $ED03 + #$ED04, // $ED04 + #$ED05, // $ED05 + #$ED06, // $ED06 + #$ED07, // $ED07 + #$ED08, // $ED08 + #$ED09, // $ED09 + #$ED0A, // $ED0A + #$ED0B, // $ED0B + #$ED0C, // $ED0C + #$ED0D, // $ED0D + #$ED0E, // $ED0E + #$ED0F, // $ED0F + #$ED10, // $ED10 + #$ED11, // $ED11 + #$ED12, // $ED12 + #$ED13, // $ED13 + #$ED14, // $ED14 + #$ED15, // $ED15 + #$ED16, // $ED16 + #$ED17, // $ED17 + #$ED18, // $ED18 + #$ED19, // $ED19 + #$ED1A, // $ED1A + #$ED1B, // $ED1B + #$ED1C, // $ED1C + #$ED1D, // $ED1D + #$ED1E, // $ED1E + #$ED1F, // $ED1F + #$ED20, // $ED20 + #$ED21, // $ED21 + #$ED22, // $ED22 + #$ED23, // $ED23 + #$ED24, // $ED24 + #$ED25, // $ED25 + #$ED26, // $ED26 + #$ED27, // $ED27 + #$ED28, // $ED28 + #$ED29, // $ED29 + #$ED2A, // $ED2A + #$ED2B, // $ED2B + #$ED2C, // $ED2C + #$ED2D, // $ED2D + #$ED2E, // $ED2E + #$ED2F, // $ED2F + #$ED30, // $ED30 + #$ED31, // $ED31 + #$ED32, // $ED32 + #$ED33, // $ED33 + #$ED34, // $ED34 + #$ED35, // $ED35 + #$ED36, // $ED36 + #$ED37, // $ED37 + #$ED38, // $ED38 + #$ED39, // $ED39 + #$ED3A, // $ED3A + #$ED3B, // $ED3B + #$ED3C, // $ED3C + #$ED3D, // $ED3D + #$ED3E, // $ED3E + #$ED3F, // $ED3F + #$ED40, // $ED40 + #$ED41, // $ED41 + #$ED42, // $ED42 + #$ED43, // $ED43 + #$ED44, // $ED44 + #$ED45, // $ED45 + #$ED46, // $ED46 + #$ED47, // $ED47 + #$ED48, // $ED48 + #$ED49, // $ED49 + #$ED4A, // $ED4A + #$ED4B, // $ED4B + #$ED4C, // $ED4C + #$ED4D, // $ED4D + #$ED4E, // $ED4E + #$ED4F, // $ED4F + #$ED50, // $ED50 + #$ED51, // $ED51 + #$ED52, // $ED52 + #$ED53, // $ED53 + #$ED54, // $ED54 + #$ED55, // $ED55 + #$ED56, // $ED56 + #$ED57, // $ED57 + #$ED58, // $ED58 + #$ED59, // $ED59 + #$ED5A, // $ED5A + #$ED5B, // $ED5B + #$ED5C, // $ED5C + #$ED5D, // $ED5D + #$ED5E, // $ED5E + #$ED5F, // $ED5F + #$ED60, // $ED60 + #$ED61, // $ED61 + #$ED62, // $ED62 + #$ED63, // $ED63 + #$ED64, // $ED64 + #$ED65, // $ED65 + #$ED66, // $ED66 + #$ED67, // $ED67 + #$ED68, // $ED68 + #$ED69, // $ED69 + #$ED6A, // $ED6A + #$ED6B, // $ED6B + #$ED6C, // $ED6C + #$ED6D, // $ED6D + #$ED6E, // $ED6E + #$ED6F, // $ED6F + #$ED70, // $ED70 + #$ED71, // $ED71 + #$ED72, // $ED72 + #$ED73, // $ED73 + #$ED74, // $ED74 + #$ED75, // $ED75 + #$ED76, // $ED76 + #$ED77, // $ED77 + #$ED78, // $ED78 + #$ED79, // $ED79 + #$ED7A, // $ED7A + #$ED7B, // $ED7B + #$ED7C, // $ED7C + #$ED7D, // $ED7D + #$ED7E, // $ED7E + #$ED7F, // $ED7F + #$ED80, // $ED80 + #$ED81, // $ED81 + #$ED82, // $ED82 + #$ED83, // $ED83 + #$ED84, // $ED84 + #$ED85, // $ED85 + #$ED86, // $ED86 + #$ED87, // $ED87 + #$ED88, // $ED88 + #$ED89, // $ED89 + #$ED8A, // $ED8A + #$ED8B, // $ED8B + #$ED8C, // $ED8C + #$ED8D, // $ED8D + #$ED8E, // $ED8E + #$ED8F, // $ED8F + #$ED90, // $ED90 + #$ED91, // $ED91 + #$ED92, // $ED92 + #$ED93, // $ED93 + #$ED94, // $ED94 + #$ED95, // $ED95 + #$ED96, // $ED96 + #$ED97, // $ED97 + #$ED98, // $ED98 + #$ED99, // $ED99 + #$ED9A, // $ED9A + #$ED9B, // $ED9B + #$ED9C, // $ED9C + #$ED9D, // $ED9D + #$ED9E, // $ED9E + #$ED9F, // $ED9F + #$EDA0, // $EDA0 + #$EDA1, // $EDA1 + #$EDA2, // $EDA2 + #$EDA3, // $EDA3 + #$EDA4, // $EDA4 + #$EDA5, // $EDA5 + #$EDA6, // $EDA6 + #$EDA7, // $EDA7 + #$EDA8, // $EDA8 + #$EDA9, // $EDA9 + #$EDAA, // $EDAA + #$EDAB, // $EDAB + #$EDAC, // $EDAC + #$EDAD, // $EDAD + #$EDAE, // $EDAE + #$EDAF, // $EDAF + #$EDB0, // $EDB0 + #$EDB1, // $EDB1 + #$EDB2, // $EDB2 + #$EDB3, // $EDB3 + #$EDB4, // $EDB4 + #$EDB5, // $EDB5 + #$EDB6, // $EDB6 + #$EDB7, // $EDB7 + #$EDB8, // $EDB8 + #$EDB9, // $EDB9 + #$EDBA, // $EDBA + #$EDBB, // $EDBB + #$EDBC, // $EDBC + #$EDBD, // $EDBD + #$EDBE, // $EDBE + #$EDBF, // $EDBF + #$EDC0, // $EDC0 + #$EDC1, // $EDC1 + #$EDC2, // $EDC2 + #$EDC3, // $EDC3 + #$EDC4, // $EDC4 + #$EDC5, // $EDC5 + #$EDC6, // $EDC6 + #$EDC7, // $EDC7 + #$EDC8, // $EDC8 + #$EDC9, // $EDC9 + #$EDCA, // $EDCA + #$EDCB, // $EDCB + #$EDCC, // $EDCC + #$EDCD, // $EDCD + #$EDCE, // $EDCE + #$EDCF, // $EDCF + #$EDD0, // $EDD0 + #$EDD1, // $EDD1 + #$EDD2, // $EDD2 + #$EDD3, // $EDD3 + #$EDD4, // $EDD4 + #$EDD5, // $EDD5 + #$EDD6, // $EDD6 + #$EDD7, // $EDD7 + #$EDD8, // $EDD8 + #$EDD9, // $EDD9 + #$EDDA, // $EDDA + #$EDDB, // $EDDB + #$EDDC, // $EDDC + #$EDDD, // $EDDD + #$EDDE, // $EDDE + #$EDDF, // $EDDF + #$EDE0, // $EDE0 + #$EDE1, // $EDE1 + #$EDE2, // $EDE2 + #$EDE3, // $EDE3 + #$EDE4, // $EDE4 + #$EDE5, // $EDE5 + #$EDE6, // $EDE6 + #$EDE7, // $EDE7 + #$EDE8, // $EDE8 + #$EDE9, // $EDE9 + #$EDEA, // $EDEA + #$EDEB, // $EDEB + #$EDEC, // $EDEC + #$EDED, // $EDED + #$EDEE, // $EDEE + #$EDEF, // $EDEF + #$EDF0, // $EDF0 + #$EDF1, // $EDF1 + #$EDF2, // $EDF2 + #$EDF3, // $EDF3 + #$EDF4, // $EDF4 + #$EDF5, // $EDF5 + #$EDF6, // $EDF6 + #$EDF7, // $EDF7 + #$EDF8, // $EDF8 + #$EDF9, // $EDF9 + #$EDFA, // $EDFA + #$EDFB, // $EDFB + #$EDFC, // $EDFC + #$EDFD, // $EDFD + #$EDFE, // $EDFE + #$EDFF, // $EDFF + #$EE00, // $EE00 + #$EE01, // $EE01 + #$EE02, // $EE02 + #$EE03, // $EE03 + #$EE04, // $EE04 + #$EE05, // $EE05 + #$EE06, // $EE06 + #$EE07, // $EE07 + #$EE08, // $EE08 + #$EE09, // $EE09 + #$EE0A, // $EE0A + #$EE0B, // $EE0B + #$EE0C, // $EE0C + #$EE0D, // $EE0D + #$EE0E, // $EE0E + #$EE0F, // $EE0F + #$EE10, // $EE10 + #$EE11, // $EE11 + #$EE12, // $EE12 + #$EE13, // $EE13 + #$EE14, // $EE14 + #$EE15, // $EE15 + #$EE16, // $EE16 + #$EE17, // $EE17 + #$EE18, // $EE18 + #$EE19, // $EE19 + #$EE1A, // $EE1A + #$EE1B, // $EE1B + #$EE1C, // $EE1C + #$EE1D, // $EE1D + #$EE1E, // $EE1E + #$EE1F, // $EE1F + #$EE20, // $EE20 + #$EE21, // $EE21 + #$EE22, // $EE22 + #$EE23, // $EE23 + #$EE24, // $EE24 + #$EE25, // $EE25 + #$EE26, // $EE26 + #$EE27, // $EE27 + #$EE28, // $EE28 + #$EE29, // $EE29 + #$EE2A, // $EE2A + #$EE2B, // $EE2B + #$EE2C, // $EE2C + #$EE2D, // $EE2D + #$EE2E, // $EE2E + #$EE2F, // $EE2F + #$EE30, // $EE30 + #$EE31, // $EE31 + #$EE32, // $EE32 + #$EE33, // $EE33 + #$EE34, // $EE34 + #$EE35, // $EE35 + #$EE36, // $EE36 + #$EE37, // $EE37 + #$EE38, // $EE38 + #$EE39, // $EE39 + #$EE3A, // $EE3A + #$EE3B, // $EE3B + #$EE3C, // $EE3C + #$EE3D, // $EE3D + #$EE3E, // $EE3E + #$EE3F, // $EE3F + #$EE40, // $EE40 + #$EE41, // $EE41 + #$EE42, // $EE42 + #$EE43, // $EE43 + #$EE44, // $EE44 + #$EE45, // $EE45 + #$EE46, // $EE46 + #$EE47, // $EE47 + #$EE48, // $EE48 + #$EE49, // $EE49 + #$EE4A, // $EE4A + #$EE4B, // $EE4B + #$EE4C, // $EE4C + #$EE4D, // $EE4D + #$EE4E, // $EE4E + #$EE4F, // $EE4F + #$EE50, // $EE50 + #$EE51, // $EE51 + #$EE52, // $EE52 + #$EE53, // $EE53 + #$EE54, // $EE54 + #$EE55, // $EE55 + #$EE56, // $EE56 + #$EE57, // $EE57 + #$EE58, // $EE58 + #$EE59, // $EE59 + #$EE5A, // $EE5A + #$EE5B, // $EE5B + #$EE5C, // $EE5C + #$EE5D, // $EE5D + #$EE5E, // $EE5E + #$EE5F, // $EE5F + #$EE60, // $EE60 + #$EE61, // $EE61 + #$EE62, // $EE62 + #$EE63, // $EE63 + #$EE64, // $EE64 + #$EE65, // $EE65 + #$EE66, // $EE66 + #$EE67, // $EE67 + #$EE68, // $EE68 + #$EE69, // $EE69 + #$EE6A, // $EE6A + #$EE6B, // $EE6B + #$EE6C, // $EE6C + #$EE6D, // $EE6D + #$EE6E, // $EE6E + #$EE6F, // $EE6F + #$EE70, // $EE70 + #$EE71, // $EE71 + #$EE72, // $EE72 + #$EE73, // $EE73 + #$EE74, // $EE74 + #$EE75, // $EE75 + #$EE76, // $EE76 + #$EE77, // $EE77 + #$EE78, // $EE78 + #$EE79, // $EE79 + #$EE7A, // $EE7A + #$EE7B, // $EE7B + #$EE7C, // $EE7C + #$EE7D, // $EE7D + #$EE7E, // $EE7E + #$EE7F, // $EE7F + #$EE80, // $EE80 + #$EE81, // $EE81 + #$EE82, // $EE82 + #$EE83, // $EE83 + #$EE84, // $EE84 + #$EE85, // $EE85 + #$EE86, // $EE86 + #$EE87, // $EE87 + #$EE88, // $EE88 + #$EE89, // $EE89 + #$EE8A, // $EE8A + #$EE8B, // $EE8B + #$EE8C, // $EE8C + #$EE8D, // $EE8D + #$EE8E, // $EE8E + #$EE8F, // $EE8F + #$EE90, // $EE90 + #$EE91, // $EE91 + #$EE92, // $EE92 + #$EE93, // $EE93 + #$EE94, // $EE94 + #$EE95, // $EE95 + #$EE96, // $EE96 + #$EE97, // $EE97 + #$EE98, // $EE98 + #$EE99, // $EE99 + #$EE9A, // $EE9A + #$EE9B, // $EE9B + #$EE9C, // $EE9C + #$EE9D, // $EE9D + #$EE9E, // $EE9E + #$EE9F, // $EE9F + #$EEA0, // $EEA0 + #$EEA1, // $EEA1 + #$EEA2, // $EEA2 + #$EEA3, // $EEA3 + #$EEA4, // $EEA4 + #$EEA5, // $EEA5 + #$EEA6, // $EEA6 + #$EEA7, // $EEA7 + #$EEA8, // $EEA8 + #$EEA9, // $EEA9 + #$EEAA, // $EEAA + #$EEAB, // $EEAB + #$EEAC, // $EEAC + #$EEAD, // $EEAD + #$EEAE, // $EEAE + #$EEAF, // $EEAF + #$EEB0, // $EEB0 + #$EEB1, // $EEB1 + #$EEB2, // $EEB2 + #$EEB3, // $EEB3 + #$EEB4, // $EEB4 + #$EEB5, // $EEB5 + #$EEB6, // $EEB6 + #$EEB7, // $EEB7 + #$EEB8, // $EEB8 + #$EEB9, // $EEB9 + #$EEBA, // $EEBA + #$EEBB, // $EEBB + #$EEBC, // $EEBC + #$EEBD, // $EEBD + #$EEBE, // $EEBE + #$EEBF, // $EEBF + #$EEC0, // $EEC0 + #$EEC1, // $EEC1 + #$EEC2, // $EEC2 + #$EEC3, // $EEC3 + #$EEC4, // $EEC4 + #$EEC5, // $EEC5 + #$EEC6, // $EEC6 + #$EEC7, // $EEC7 + #$EEC8, // $EEC8 + #$EEC9, // $EEC9 + #$EECA, // $EECA + #$EECB, // $EECB + #$EECC, // $EECC + #$EECD, // $EECD + #$EECE, // $EECE + #$EECF, // $EECF + #$EED0, // $EED0 + #$EED1, // $EED1 + #$EED2, // $EED2 + #$EED3, // $EED3 + #$EED4, // $EED4 + #$EED5, // $EED5 + #$EED6, // $EED6 + #$EED7, // $EED7 + #$EED8, // $EED8 + #$EED9, // $EED9 + #$EEDA, // $EEDA + #$EEDB, // $EEDB + #$EEDC, // $EEDC + #$EEDD, // $EEDD + #$EEDE, // $EEDE + #$EEDF, // $EEDF + #$EEE0, // $EEE0 + #$EEE1, // $EEE1 + #$EEE2, // $EEE2 + #$EEE3, // $EEE3 + #$EEE4, // $EEE4 + #$EEE5, // $EEE5 + #$EEE6, // $EEE6 + #$EEE7, // $EEE7 + #$EEE8, // $EEE8 + #$EEE9, // $EEE9 + #$EEEA, // $EEEA + #$EEEB, // $EEEB + #$EEEC, // $EEEC + #$EEED, // $EEED + #$EEEE, // $EEEE + #$EEEF, // $EEEF + #$EEF0, // $EEF0 + #$EEF1, // $EEF1 + #$EEF2, // $EEF2 + #$EEF3, // $EEF3 + #$EEF4, // $EEF4 + #$EEF5, // $EEF5 + #$EEF6, // $EEF6 + #$EEF7, // $EEF7 + #$EEF8, // $EEF8 + #$EEF9, // $EEF9 + #$EEFA, // $EEFA + #$EEFB, // $EEFB + #$EEFC, // $EEFC + #$EEFD, // $EEFD + #$EEFE, // $EEFE + #$EEFF, // $EEFF + #$EF00, // $EF00 + #$EF01, // $EF01 + #$EF02, // $EF02 + #$EF03, // $EF03 + #$EF04, // $EF04 + #$EF05, // $EF05 + #$EF06, // $EF06 + #$EF07, // $EF07 + #$EF08, // $EF08 + #$EF09, // $EF09 + #$EF0A, // $EF0A + #$EF0B, // $EF0B + #$EF0C, // $EF0C + #$EF0D, // $EF0D + #$EF0E, // $EF0E + #$EF0F, // $EF0F + #$EF10, // $EF10 + #$EF11, // $EF11 + #$EF12, // $EF12 + #$EF13, // $EF13 + #$EF14, // $EF14 + #$EF15, // $EF15 + #$EF16, // $EF16 + #$EF17, // $EF17 + #$EF18, // $EF18 + #$EF19, // $EF19 + #$EF1A, // $EF1A + #$EF1B, // $EF1B + #$EF1C, // $EF1C + #$EF1D, // $EF1D + #$EF1E, // $EF1E + #$EF1F, // $EF1F + #$EF20, // $EF20 + #$EF21, // $EF21 + #$EF22, // $EF22 + #$EF23, // $EF23 + #$EF24, // $EF24 + #$EF25, // $EF25 + #$EF26, // $EF26 + #$EF27, // $EF27 + #$EF28, // $EF28 + #$EF29, // $EF29 + #$EF2A, // $EF2A + #$EF2B, // $EF2B + #$EF2C, // $EF2C + #$EF2D, // $EF2D + #$EF2E, // $EF2E + #$EF2F, // $EF2F + #$EF30, // $EF30 + #$EF31, // $EF31 + #$EF32, // $EF32 + #$EF33, // $EF33 + #$EF34, // $EF34 + #$EF35, // $EF35 + #$EF36, // $EF36 + #$EF37, // $EF37 + #$EF38, // $EF38 + #$EF39, // $EF39 + #$EF3A, // $EF3A + #$EF3B, // $EF3B + #$EF3C, // $EF3C + #$EF3D, // $EF3D + #$EF3E, // $EF3E + #$EF3F, // $EF3F + #$EF40, // $EF40 + #$EF41, // $EF41 + #$EF42, // $EF42 + #$EF43, // $EF43 + #$EF44, // $EF44 + #$EF45, // $EF45 + #$EF46, // $EF46 + #$EF47, // $EF47 + #$EF48, // $EF48 + #$EF49, // $EF49 + #$EF4A, // $EF4A + #$EF4B, // $EF4B + #$EF4C, // $EF4C + #$EF4D, // $EF4D + #$EF4E, // $EF4E + #$EF4F, // $EF4F + #$EF50, // $EF50 + #$EF51, // $EF51 + #$EF52, // $EF52 + #$EF53, // $EF53 + #$EF54, // $EF54 + #$EF55, // $EF55 + #$EF56, // $EF56 + #$EF57, // $EF57 + #$EF58, // $EF58 + #$EF59, // $EF59 + #$EF5A, // $EF5A + #$EF5B, // $EF5B + #$EF5C, // $EF5C + #$EF5D, // $EF5D + #$EF5E, // $EF5E + #$EF5F, // $EF5F + #$EF60, // $EF60 + #$EF61, // $EF61 + #$EF62, // $EF62 + #$EF63, // $EF63 + #$EF64, // $EF64 + #$EF65, // $EF65 + #$EF66, // $EF66 + #$EF67, // $EF67 + #$EF68, // $EF68 + #$EF69, // $EF69 + #$EF6A, // $EF6A + #$EF6B, // $EF6B + #$EF6C, // $EF6C + #$EF6D, // $EF6D + #$EF6E, // $EF6E + #$EF6F, // $EF6F + #$EF70, // $EF70 + #$EF71, // $EF71 + #$EF72, // $EF72 + #$EF73, // $EF73 + #$EF74, // $EF74 + #$EF75, // $EF75 + #$EF76, // $EF76 + #$EF77, // $EF77 + #$EF78, // $EF78 + #$EF79, // $EF79 + #$EF7A, // $EF7A + #$EF7B, // $EF7B + #$EF7C, // $EF7C + #$EF7D, // $EF7D + #$EF7E, // $EF7E + #$EF7F, // $EF7F + #$EF80, // $EF80 + #$EF81, // $EF81 + #$EF82, // $EF82 + #$EF83, // $EF83 + #$EF84, // $EF84 + #$EF85, // $EF85 + #$EF86, // $EF86 + #$EF87, // $EF87 + #$EF88, // $EF88 + #$EF89, // $EF89 + #$EF8A, // $EF8A + #$EF8B, // $EF8B + #$EF8C, // $EF8C + #$EF8D, // $EF8D + #$EF8E, // $EF8E + #$EF8F, // $EF8F + #$EF90, // $EF90 + #$EF91, // $EF91 + #$EF92, // $EF92 + #$EF93, // $EF93 + #$EF94, // $EF94 + #$EF95, // $EF95 + #$EF96, // $EF96 + #$EF97, // $EF97 + #$EF98, // $EF98 + #$EF99, // $EF99 + #$EF9A, // $EF9A + #$EF9B, // $EF9B + #$EF9C, // $EF9C + #$EF9D, // $EF9D + #$EF9E, // $EF9E + #$EF9F, // $EF9F + #$EFA0, // $EFA0 + #$EFA1, // $EFA1 + #$EFA2, // $EFA2 + #$EFA3, // $EFA3 + #$EFA4, // $EFA4 + #$EFA5, // $EFA5 + #$EFA6, // $EFA6 + #$EFA7, // $EFA7 + #$EFA8, // $EFA8 + #$EFA9, // $EFA9 + #$EFAA, // $EFAA + #$EFAB, // $EFAB + #$EFAC, // $EFAC + #$EFAD, // $EFAD + #$EFAE, // $EFAE + #$EFAF, // $EFAF + #$EFB0, // $EFB0 + #$EFB1, // $EFB1 + #$EFB2, // $EFB2 + #$EFB3, // $EFB3 + #$EFB4, // $EFB4 + #$EFB5, // $EFB5 + #$EFB6, // $EFB6 + #$EFB7, // $EFB7 + #$EFB8, // $EFB8 + #$EFB9, // $EFB9 + #$EFBA, // $EFBA + #$EFBB, // $EFBB + #$EFBC, // $EFBC + #$EFBD, // $EFBD + #$EFBE, // $EFBE + #$EFBF, // $EFBF + #$EFC0, // $EFC0 + #$EFC1, // $EFC1 + #$EFC2, // $EFC2 + #$EFC3, // $EFC3 + #$EFC4, // $EFC4 + #$EFC5, // $EFC5 + #$EFC6, // $EFC6 + #$EFC7, // $EFC7 + #$EFC8, // $EFC8 + #$EFC9, // $EFC9 + #$EFCA, // $EFCA + #$EFCB, // $EFCB + #$EFCC, // $EFCC + #$EFCD, // $EFCD + #$EFCE, // $EFCE + #$EFCF, // $EFCF + #$EFD0, // $EFD0 + #$EFD1, // $EFD1 + #$EFD2, // $EFD2 + #$EFD3, // $EFD3 + #$EFD4, // $EFD4 + #$EFD5, // $EFD5 + #$EFD6, // $EFD6 + #$EFD7, // $EFD7 + #$EFD8, // $EFD8 + #$EFD9, // $EFD9 + #$EFDA, // $EFDA + #$EFDB, // $EFDB + #$EFDC, // $EFDC + #$EFDD, // $EFDD + #$EFDE, // $EFDE + #$EFDF, // $EFDF + #$EFE0, // $EFE0 + #$EFE1, // $EFE1 + #$EFE2, // $EFE2 + #$EFE3, // $EFE3 + #$EFE4, // $EFE4 + #$EFE5, // $EFE5 + #$EFE6, // $EFE6 + #$EFE7, // $EFE7 + #$EFE8, // $EFE8 + #$EFE9, // $EFE9 + #$EFEA, // $EFEA + #$EFEB, // $EFEB + #$EFEC, // $EFEC + #$EFED, // $EFED + #$EFEE, // $EFEE + #$EFEF, // $EFEF + #$EFF0, // $EFF0 + #$EFF1, // $EFF1 + #$EFF2, // $EFF2 + #$EFF3, // $EFF3 + #$EFF4, // $EFF4 + #$EFF5, // $EFF5 + #$EFF6, // $EFF6 + #$EFF7, // $EFF7 + #$EFF8, // $EFF8 + #$EFF9, // $EFF9 + #$EFFA, // $EFFA + #$EFFB, // $EFFB + #$EFFC, // $EFFC + #$EFFD, // $EFFD + #$EFFE, // $EFFE + #$EFFF, // $EFFF + #$F000, // $F000 + #$F001, // $F001 + #$F002, // $F002 + #$F003, // $F003 + #$F004, // $F004 + #$F005, // $F005 + #$F006, // $F006 + #$F007, // $F007 + #$F008, // $F008 + #$F009, // $F009 + #$F00A, // $F00A + #$F00B, // $F00B + #$F00C, // $F00C + #$F00D, // $F00D + #$F00E, // $F00E + #$F00F, // $F00F + #$F010, // $F010 + #$F011, // $F011 + #$F012, // $F012 + #$F013, // $F013 + #$F014, // $F014 + #$F015, // $F015 + #$F016, // $F016 + #$F017, // $F017 + #$F018, // $F018 + #$F019, // $F019 + #$F01A, // $F01A + #$F01B, // $F01B + #$F01C, // $F01C + #$F01D, // $F01D + #$F01E, // $F01E + #$F01F, // $F01F + #$F020, // $F020 + #$F021, // $F021 + #$F022, // $F022 + #$F023, // $F023 + #$F024, // $F024 + #$F025, // $F025 + #$F026, // $F026 + #$F027, // $F027 + #$F028, // $F028 + #$F029, // $F029 + #$F02A, // $F02A + #$F02B, // $F02B + #$F02C, // $F02C + #$F02D, // $F02D + #$F02E, // $F02E + #$F02F, // $F02F + #$F030, // $F030 + #$F031, // $F031 + #$F032, // $F032 + #$F033, // $F033 + #$F034, // $F034 + #$F035, // $F035 + #$F036, // $F036 + #$F037, // $F037 + #$F038, // $F038 + #$F039, // $F039 + #$F03A, // $F03A + #$F03B, // $F03B + #$F03C, // $F03C + #$F03D, // $F03D + #$F03E, // $F03E + #$F03F, // $F03F + #$F040, // $F040 + #$F041, // $F041 + #$F042, // $F042 + #$F043, // $F043 + #$F044, // $F044 + #$F045, // $F045 + #$F046, // $F046 + #$F047, // $F047 + #$F048, // $F048 + #$F049, // $F049 + #$F04A, // $F04A + #$F04B, // $F04B + #$F04C, // $F04C + #$F04D, // $F04D + #$F04E, // $F04E + #$F04F, // $F04F + #$F050, // $F050 + #$F051, // $F051 + #$F052, // $F052 + #$F053, // $F053 + #$F054, // $F054 + #$F055, // $F055 + #$F056, // $F056 + #$F057, // $F057 + #$F058, // $F058 + #$F059, // $F059 + #$F05A, // $F05A + #$F05B, // $F05B + #$F05C, // $F05C + #$F05D, // $F05D + #$F05E, // $F05E + #$F05F, // $F05F + #$F060, // $F060 + #$F061, // $F061 + #$F062, // $F062 + #$F063, // $F063 + #$F064, // $F064 + #$F065, // $F065 + #$F066, // $F066 + #$F067, // $F067 + #$F068, // $F068 + #$F069, // $F069 + #$F06A, // $F06A + #$F06B, // $F06B + #$F06C, // $F06C + #$F06D, // $F06D + #$F06E, // $F06E + #$F06F, // $F06F + #$F070, // $F070 + #$F071, // $F071 + #$F072, // $F072 + #$F073, // $F073 + #$F074, // $F074 + #$F075, // $F075 + #$F076, // $F076 + #$F077, // $F077 + #$F078, // $F078 + #$F079, // $F079 + #$F07A, // $F07A + #$F07B, // $F07B + #$F07C, // $F07C + #$F07D, // $F07D + #$F07E, // $F07E + #$F07F, // $F07F + #$F080, // $F080 + #$F081, // $F081 + #$F082, // $F082 + #$F083, // $F083 + #$F084, // $F084 + #$F085, // $F085 + #$F086, // $F086 + #$F087, // $F087 + #$F088, // $F088 + #$F089, // $F089 + #$F08A, // $F08A + #$F08B, // $F08B + #$F08C, // $F08C + #$F08D, // $F08D + #$F08E, // $F08E + #$F08F, // $F08F + #$F090, // $F090 + #$F091, // $F091 + #$F092, // $F092 + #$F093, // $F093 + #$F094, // $F094 + #$F095, // $F095 + #$F096, // $F096 + #$F097, // $F097 + #$F098, // $F098 + #$F099, // $F099 + #$F09A, // $F09A + #$F09B, // $F09B + #$F09C, // $F09C + #$F09D, // $F09D + #$F09E, // $F09E + #$F09F, // $F09F + #$F0A0, // $F0A0 + #$F0A1, // $F0A1 + #$F0A2, // $F0A2 + #$F0A3, // $F0A3 + #$F0A4, // $F0A4 + #$F0A5, // $F0A5 + #$F0A6, // $F0A6 + #$F0A7, // $F0A7 + #$F0A8, // $F0A8 + #$F0A9, // $F0A9 + #$F0AA, // $F0AA + #$F0AB, // $F0AB + #$F0AC, // $F0AC + #$F0AD, // $F0AD + #$F0AE, // $F0AE + #$F0AF, // $F0AF + #$F0B0, // $F0B0 + #$F0B1, // $F0B1 + #$F0B2, // $F0B2 + #$F0B3, // $F0B3 + #$F0B4, // $F0B4 + #$F0B5, // $F0B5 + #$F0B6, // $F0B6 + #$F0B7, // $F0B7 + #$F0B8, // $F0B8 + #$F0B9, // $F0B9 + #$F0BA, // $F0BA + #$F0BB, // $F0BB + #$F0BC, // $F0BC + #$F0BD, // $F0BD + #$F0BE, // $F0BE + #$F0BF, // $F0BF + #$F0C0, // $F0C0 + #$F0C1, // $F0C1 + #$F0C2, // $F0C2 + #$F0C3, // $F0C3 + #$F0C4, // $F0C4 + #$F0C5, // $F0C5 + #$F0C6, // $F0C6 + #$F0C7, // $F0C7 + #$F0C8, // $F0C8 + #$F0C9, // $F0C9 + #$F0CA, // $F0CA + #$F0CB, // $F0CB + #$F0CC, // $F0CC + #$F0CD, // $F0CD + #$F0CE, // $F0CE + #$F0CF, // $F0CF + #$F0D0, // $F0D0 + #$F0D1, // $F0D1 + #$F0D2, // $F0D2 + #$F0D3, // $F0D3 + #$F0D4, // $F0D4 + #$F0D5, // $F0D5 + #$F0D6, // $F0D6 + #$F0D7, // $F0D7 + #$F0D8, // $F0D8 + #$F0D9, // $F0D9 + #$F0DA, // $F0DA + #$F0DB, // $F0DB + #$F0DC, // $F0DC + #$F0DD, // $F0DD + #$F0DE, // $F0DE + #$F0DF, // $F0DF + #$F0E0, // $F0E0 + #$F0E1, // $F0E1 + #$F0E2, // $F0E2 + #$F0E3, // $F0E3 + #$F0E4, // $F0E4 + #$F0E5, // $F0E5 + #$F0E6, // $F0E6 + #$F0E7, // $F0E7 + #$F0E8, // $F0E8 + #$F0E9, // $F0E9 + #$F0EA, // $F0EA + #$F0EB, // $F0EB + #$F0EC, // $F0EC + #$F0ED, // $F0ED + #$F0EE, // $F0EE + #$F0EF, // $F0EF + #$F0F0, // $F0F0 + #$F0F1, // $F0F1 + #$F0F2, // $F0F2 + #$F0F3, // $F0F3 + #$F0F4, // $F0F4 + #$F0F5, // $F0F5 + #$F0F6, // $F0F6 + #$F0F7, // $F0F7 + #$F0F8, // $F0F8 + #$F0F9, // $F0F9 + #$F0FA, // $F0FA + #$F0FB, // $F0FB + #$F0FC, // $F0FC + #$F0FD, // $F0FD + #$F0FE, // $F0FE + #$F0FF, // $F0FF + #$F100, // $F100 + #$F101, // $F101 + #$F102, // $F102 + #$F103, // $F103 + #$F104, // $F104 + #$F105, // $F105 + #$F106, // $F106 + #$F107, // $F107 + #$F108, // $F108 + #$F109, // $F109 + #$F10A, // $F10A + #$F10B, // $F10B + #$F10C, // $F10C + #$F10D, // $F10D + #$F10E, // $F10E + #$F10F, // $F10F + #$F110, // $F110 + #$F111, // $F111 + #$F112, // $F112 + #$F113, // $F113 + #$F114, // $F114 + #$F115, // $F115 + #$F116, // $F116 + #$F117, // $F117 + #$F118, // $F118 + #$F119, // $F119 + #$F11A, // $F11A + #$F11B, // $F11B + #$F11C, // $F11C + #$F11D, // $F11D + #$F11E, // $F11E + #$F11F, // $F11F + #$F120, // $F120 + #$F121, // $F121 + #$F122, // $F122 + #$F123, // $F123 + #$F124, // $F124 + #$F125, // $F125 + #$F126, // $F126 + #$F127, // $F127 + #$F128, // $F128 + #$F129, // $F129 + #$F12A, // $F12A + #$F12B, // $F12B + #$F12C, // $F12C + #$F12D, // $F12D + #$F12E, // $F12E + #$F12F, // $F12F + #$F130, // $F130 + #$F131, // $F131 + #$F132, // $F132 + #$F133, // $F133 + #$F134, // $F134 + #$F135, // $F135 + #$F136, // $F136 + #$F137, // $F137 + #$F138, // $F138 + #$F139, // $F139 + #$F13A, // $F13A + #$F13B, // $F13B + #$F13C, // $F13C + #$F13D, // $F13D + #$F13E, // $F13E + #$F13F, // $F13F + #$F140, // $F140 + #$F141, // $F141 + #$F142, // $F142 + #$F143, // $F143 + #$F144, // $F144 + #$F145, // $F145 + #$F146, // $F146 + #$F147, // $F147 + #$F148, // $F148 + #$F149, // $F149 + #$F14A, // $F14A + #$F14B, // $F14B + #$F14C, // $F14C + #$F14D, // $F14D + #$F14E, // $F14E + #$F14F, // $F14F + #$F150, // $F150 + #$F151, // $F151 + #$F152, // $F152 + #$F153, // $F153 + #$F154, // $F154 + #$F155, // $F155 + #$F156, // $F156 + #$F157, // $F157 + #$F158, // $F158 + #$F159, // $F159 + #$F15A, // $F15A + #$F15B, // $F15B + #$F15C, // $F15C + #$F15D, // $F15D + #$F15E, // $F15E + #$F15F, // $F15F + #$F160, // $F160 + #$F161, // $F161 + #$F162, // $F162 + #$F163, // $F163 + #$F164, // $F164 + #$F165, // $F165 + #$F166, // $F166 + #$F167, // $F167 + #$F168, // $F168 + #$F169, // $F169 + #$F16A, // $F16A + #$F16B, // $F16B + #$F16C, // $F16C + #$F16D, // $F16D + #$F16E, // $F16E + #$F16F, // $F16F + #$F170, // $F170 + #$F171, // $F171 + #$F172, // $F172 + #$F173, // $F173 + #$F174, // $F174 + #$F175, // $F175 + #$F176, // $F176 + #$F177, // $F177 + #$F178, // $F178 + #$F179, // $F179 + #$F17A, // $F17A + #$F17B, // $F17B + #$F17C, // $F17C + #$F17D, // $F17D + #$F17E, // $F17E + #$F17F, // $F17F + #$F180, // $F180 + #$F181, // $F181 + #$F182, // $F182 + #$F183, // $F183 + #$F184, // $F184 + #$F185, // $F185 + #$F186, // $F186 + #$F187, // $F187 + #$F188, // $F188 + #$F189, // $F189 + #$F18A, // $F18A + #$F18B, // $F18B + #$F18C, // $F18C + #$F18D, // $F18D + #$F18E, // $F18E + #$F18F, // $F18F + #$F190, // $F190 + #$F191, // $F191 + #$F192, // $F192 + #$F193, // $F193 + #$F194, // $F194 + #$F195, // $F195 + #$F196, // $F196 + #$F197, // $F197 + #$F198, // $F198 + #$F199, // $F199 + #$F19A, // $F19A + #$F19B, // $F19B + #$F19C, // $F19C + #$F19D, // $F19D + #$F19E, // $F19E + #$F19F, // $F19F + #$F1A0, // $F1A0 + #$F1A1, // $F1A1 + #$F1A2, // $F1A2 + #$F1A3, // $F1A3 + #$F1A4, // $F1A4 + #$F1A5, // $F1A5 + #$F1A6, // $F1A6 + #$F1A7, // $F1A7 + #$F1A8, // $F1A8 + #$F1A9, // $F1A9 + #$F1AA, // $F1AA + #$F1AB, // $F1AB + #$F1AC, // $F1AC + #$F1AD, // $F1AD + #$F1AE, // $F1AE + #$F1AF, // $F1AF + #$F1B0, // $F1B0 + #$F1B1, // $F1B1 + #$F1B2, // $F1B2 + #$F1B3, // $F1B3 + #$F1B4, // $F1B4 + #$F1B5, // $F1B5 + #$F1B6, // $F1B6 + #$F1B7, // $F1B7 + #$F1B8, // $F1B8 + #$F1B9, // $F1B9 + #$F1BA, // $F1BA + #$F1BB, // $F1BB + #$F1BC, // $F1BC + #$F1BD, // $F1BD + #$F1BE, // $F1BE + #$F1BF, // $F1BF + #$F1C0, // $F1C0 + #$F1C1, // $F1C1 + #$F1C2, // $F1C2 + #$F1C3, // $F1C3 + #$F1C4, // $F1C4 + #$F1C5, // $F1C5 + #$F1C6, // $F1C6 + #$F1C7, // $F1C7 + #$F1C8, // $F1C8 + #$F1C9, // $F1C9 + #$F1CA, // $F1CA + #$F1CB, // $F1CB + #$F1CC, // $F1CC + #$F1CD, // $F1CD + #$F1CE, // $F1CE + #$F1CF, // $F1CF + #$F1D0, // $F1D0 + #$F1D1, // $F1D1 + #$F1D2, // $F1D2 + #$F1D3, // $F1D3 + #$F1D4, // $F1D4 + #$F1D5, // $F1D5 + #$F1D6, // $F1D6 + #$F1D7, // $F1D7 + #$F1D8, // $F1D8 + #$F1D9, // $F1D9 + #$F1DA, // $F1DA + #$F1DB, // $F1DB + #$F1DC, // $F1DC + #$F1DD, // $F1DD + #$F1DE, // $F1DE + #$F1DF, // $F1DF + #$F1E0, // $F1E0 + #$F1E1, // $F1E1 + #$F1E2, // $F1E2 + #$F1E3, // $F1E3 + #$F1E4, // $F1E4 + #$F1E5, // $F1E5 + #$F1E6, // $F1E6 + #$F1E7, // $F1E7 + #$F1E8, // $F1E8 + #$F1E9, // $F1E9 + #$F1EA, // $F1EA + #$F1EB, // $F1EB + #$F1EC, // $F1EC + #$F1ED, // $F1ED + #$F1EE, // $F1EE + #$F1EF, // $F1EF + #$F1F0, // $F1F0 + #$F1F1, // $F1F1 + #$F1F2, // $F1F2 + #$F1F3, // $F1F3 + #$F1F4, // $F1F4 + #$F1F5, // $F1F5 + #$F1F6, // $F1F6 + #$F1F7, // $F1F7 + #$F1F8, // $F1F8 + #$F1F9, // $F1F9 + #$F1FA, // $F1FA + #$F1FB, // $F1FB + #$F1FC, // $F1FC + #$F1FD, // $F1FD + #$F1FE, // $F1FE + #$F1FF, // $F1FF + #$F200, // $F200 + #$F201, // $F201 + #$F202, // $F202 + #$F203, // $F203 + #$F204, // $F204 + #$F205, // $F205 + #$F206, // $F206 + #$F207, // $F207 + #$F208, // $F208 + #$F209, // $F209 + #$F20A, // $F20A + #$F20B, // $F20B + #$F20C, // $F20C + #$F20D, // $F20D + #$F20E, // $F20E + #$F20F, // $F20F + #$F210, // $F210 + #$F211, // $F211 + #$F212, // $F212 + #$F213, // $F213 + #$F214, // $F214 + #$F215, // $F215 + #$F216, // $F216 + #$F217, // $F217 + #$F218, // $F218 + #$F219, // $F219 + #$F21A, // $F21A + #$F21B, // $F21B + #$F21C, // $F21C + #$F21D, // $F21D + #$F21E, // $F21E + #$F21F, // $F21F + #$F220, // $F220 + #$F221, // $F221 + #$F222, // $F222 + #$F223, // $F223 + #$F224, // $F224 + #$F225, // $F225 + #$F226, // $F226 + #$F227, // $F227 + #$F228, // $F228 + #$F229, // $F229 + #$F22A, // $F22A + #$F22B, // $F22B + #$F22C, // $F22C + #$F22D, // $F22D + #$F22E, // $F22E + #$F22F, // $F22F + #$F230, // $F230 + #$F231, // $F231 + #$F232, // $F232 + #$F233, // $F233 + #$F234, // $F234 + #$F235, // $F235 + #$F236, // $F236 + #$F237, // $F237 + #$F238, // $F238 + #$F239, // $F239 + #$F23A, // $F23A + #$F23B, // $F23B + #$F23C, // $F23C + #$F23D, // $F23D + #$F23E, // $F23E + #$F23F, // $F23F + #$F240, // $F240 + #$F241, // $F241 + #$F242, // $F242 + #$F243, // $F243 + #$F244, // $F244 + #$F245, // $F245 + #$F246, // $F246 + #$F247, // $F247 + #$F248, // $F248 + #$F249, // $F249 + #$F24A, // $F24A + #$F24B, // $F24B + #$F24C, // $F24C + #$F24D, // $F24D + #$F24E, // $F24E + #$F24F, // $F24F + #$F250, // $F250 + #$F251, // $F251 + #$F252, // $F252 + #$F253, // $F253 + #$F254, // $F254 + #$F255, // $F255 + #$F256, // $F256 + #$F257, // $F257 + #$F258, // $F258 + #$F259, // $F259 + #$F25A, // $F25A + #$F25B, // $F25B + #$F25C, // $F25C + #$F25D, // $F25D + #$F25E, // $F25E + #$F25F, // $F25F + #$F260, // $F260 + #$F261, // $F261 + #$F262, // $F262 + #$F263, // $F263 + #$F264, // $F264 + #$F265, // $F265 + #$F266, // $F266 + #$F267, // $F267 + #$F268, // $F268 + #$F269, // $F269 + #$F26A, // $F26A + #$F26B, // $F26B + #$F26C, // $F26C + #$F26D, // $F26D + #$F26E, // $F26E + #$F26F, // $F26F + #$F270, // $F270 + #$F271, // $F271 + #$F272, // $F272 + #$F273, // $F273 + #$F274, // $F274 + #$F275, // $F275 + #$F276, // $F276 + #$F277, // $F277 + #$F278, // $F278 + #$F279, // $F279 + #$F27A, // $F27A + #$F27B, // $F27B + #$F27C, // $F27C + #$F27D, // $F27D + #$F27E, // $F27E + #$F27F, // $F27F + #$F280, // $F280 + #$F281, // $F281 + #$F282, // $F282 + #$F283, // $F283 + #$F284, // $F284 + #$F285, // $F285 + #$F286, // $F286 + #$F287, // $F287 + #$F288, // $F288 + #$F289, // $F289 + #$F28A, // $F28A + #$F28B, // $F28B + #$F28C, // $F28C + #$F28D, // $F28D + #$F28E, // $F28E + #$F28F, // $F28F + #$F290, // $F290 + #$F291, // $F291 + #$F292, // $F292 + #$F293, // $F293 + #$F294, // $F294 + #$F295, // $F295 + #$F296, // $F296 + #$F297, // $F297 + #$F298, // $F298 + #$F299, // $F299 + #$F29A, // $F29A + #$F29B, // $F29B + #$F29C, // $F29C + #$F29D, // $F29D + #$F29E, // $F29E + #$F29F, // $F29F + #$F2A0, // $F2A0 + #$F2A1, // $F2A1 + #$F2A2, // $F2A2 + #$F2A3, // $F2A3 + #$F2A4, // $F2A4 + #$F2A5, // $F2A5 + #$F2A6, // $F2A6 + #$F2A7, // $F2A7 + #$F2A8, // $F2A8 + #$F2A9, // $F2A9 + #$F2AA, // $F2AA + #$F2AB, // $F2AB + #$F2AC, // $F2AC + #$F2AD, // $F2AD + #$F2AE, // $F2AE + #$F2AF, // $F2AF + #$F2B0, // $F2B0 + #$F2B1, // $F2B1 + #$F2B2, // $F2B2 + #$F2B3, // $F2B3 + #$F2B4, // $F2B4 + #$F2B5, // $F2B5 + #$F2B6, // $F2B6 + #$F2B7, // $F2B7 + #$F2B8, // $F2B8 + #$F2B9, // $F2B9 + #$F2BA, // $F2BA + #$F2BB, // $F2BB + #$F2BC, // $F2BC + #$F2BD, // $F2BD + #$F2BE, // $F2BE + #$F2BF, // $F2BF + #$F2C0, // $F2C0 + #$F2C1, // $F2C1 + #$F2C2, // $F2C2 + #$F2C3, // $F2C3 + #$F2C4, // $F2C4 + #$F2C5, // $F2C5 + #$F2C6, // $F2C6 + #$F2C7, // $F2C7 + #$F2C8, // $F2C8 + #$F2C9, // $F2C9 + #$F2CA, // $F2CA + #$F2CB, // $F2CB + #$F2CC, // $F2CC + #$F2CD, // $F2CD + #$F2CE, // $F2CE + #$F2CF, // $F2CF + #$F2D0, // $F2D0 + #$F2D1, // $F2D1 + #$F2D2, // $F2D2 + #$F2D3, // $F2D3 + #$F2D4, // $F2D4 + #$F2D5, // $F2D5 + #$F2D6, // $F2D6 + #$F2D7, // $F2D7 + #$F2D8, // $F2D8 + #$F2D9, // $F2D9 + #$F2DA, // $F2DA + #$F2DB, // $F2DB + #$F2DC, // $F2DC + #$F2DD, // $F2DD + #$F2DE, // $F2DE + #$F2DF, // $F2DF + #$F2E0, // $F2E0 + #$F2E1, // $F2E1 + #$F2E2, // $F2E2 + #$F2E3, // $F2E3 + #$F2E4, // $F2E4 + #$F2E5, // $F2E5 + #$F2E6, // $F2E6 + #$F2E7, // $F2E7 + #$F2E8, // $F2E8 + #$F2E9, // $F2E9 + #$F2EA, // $F2EA + #$F2EB, // $F2EB + #$F2EC, // $F2EC + #$F2ED, // $F2ED + #$F2EE, // $F2EE + #$F2EF, // $F2EF + #$F2F0, // $F2F0 + #$F2F1, // $F2F1 + #$F2F2, // $F2F2 + #$F2F3, // $F2F3 + #$F2F4, // $F2F4 + #$F2F5, // $F2F5 + #$F2F6, // $F2F6 + #$F2F7, // $F2F7 + #$F2F8, // $F2F8 + #$F2F9, // $F2F9 + #$F2FA, // $F2FA + #$F2FB, // $F2FB + #$F2FC, // $F2FC + #$F2FD, // $F2FD + #$F2FE, // $F2FE + #$F2FF, // $F2FF + #$F300, // $F300 + #$F301, // $F301 + #$F302, // $F302 + #$F303, // $F303 + #$F304, // $F304 + #$F305, // $F305 + #$F306, // $F306 + #$F307, // $F307 + #$F308, // $F308 + #$F309, // $F309 + #$F30A, // $F30A + #$F30B, // $F30B + #$F30C, // $F30C + #$F30D, // $F30D + #$F30E, // $F30E + #$F30F, // $F30F + #$F310, // $F310 + #$F311, // $F311 + #$F312, // $F312 + #$F313, // $F313 + #$F314, // $F314 + #$F315, // $F315 + #$F316, // $F316 + #$F317, // $F317 + #$F318, // $F318 + #$F319, // $F319 + #$F31A, // $F31A + #$F31B, // $F31B + #$F31C, // $F31C + #$F31D, // $F31D + #$F31E, // $F31E + #$F31F, // $F31F + #$F320, // $F320 + #$F321, // $F321 + #$F322, // $F322 + #$F323, // $F323 + #$F324, // $F324 + #$F325, // $F325 + #$F326, // $F326 + #$F327, // $F327 + #$F328, // $F328 + #$F329, // $F329 + #$F32A, // $F32A + #$F32B, // $F32B + #$F32C, // $F32C + #$F32D, // $F32D + #$F32E, // $F32E + #$F32F, // $F32F + #$F330, // $F330 + #$F331, // $F331 + #$F332, // $F332 + #$F333, // $F333 + #$F334, // $F334 + #$F335, // $F335 + #$F336, // $F336 + #$F337, // $F337 + #$F338, // $F338 + #$F339, // $F339 + #$F33A, // $F33A + #$F33B, // $F33B + #$F33C, // $F33C + #$F33D, // $F33D + #$F33E, // $F33E + #$F33F, // $F33F + #$F340, // $F340 + #$F341, // $F341 + #$F342, // $F342 + #$F343, // $F343 + #$F344, // $F344 + #$F345, // $F345 + #$F346, // $F346 + #$F347, // $F347 + #$F348, // $F348 + #$F349, // $F349 + #$F34A, // $F34A + #$F34B, // $F34B + #$F34C, // $F34C + #$F34D, // $F34D + #$F34E, // $F34E + #$F34F, // $F34F + #$F350, // $F350 + #$F351, // $F351 + #$F352, // $F352 + #$F353, // $F353 + #$F354, // $F354 + #$F355, // $F355 + #$F356, // $F356 + #$F357, // $F357 + #$F358, // $F358 + #$F359, // $F359 + #$F35A, // $F35A + #$F35B, // $F35B + #$F35C, // $F35C + #$F35D, // $F35D + #$F35E, // $F35E + #$F35F, // $F35F + #$F360, // $F360 + #$F361, // $F361 + #$F362, // $F362 + #$F363, // $F363 + #$F364, // $F364 + #$F365, // $F365 + #$F366, // $F366 + #$F367, // $F367 + #$F368, // $F368 + #$F369, // $F369 + #$F36A, // $F36A + #$F36B, // $F36B + #$F36C, // $F36C + #$F36D, // $F36D + #$F36E, // $F36E + #$F36F, // $F36F + #$F370, // $F370 + #$F371, // $F371 + #$F372, // $F372 + #$F373, // $F373 + #$F374, // $F374 + #$F375, // $F375 + #$F376, // $F376 + #$F377, // $F377 + #$F378, // $F378 + #$F379, // $F379 + #$F37A, // $F37A + #$F37B, // $F37B + #$F37C, // $F37C + #$F37D, // $F37D + #$F37E, // $F37E + #$F37F, // $F37F + #$F380, // $F380 + #$F381, // $F381 + #$F382, // $F382 + #$F383, // $F383 + #$F384, // $F384 + #$F385, // $F385 + #$F386, // $F386 + #$F387, // $F387 + #$F388, // $F388 + #$F389, // $F389 + #$F38A, // $F38A + #$F38B, // $F38B + #$F38C, // $F38C + #$F38D, // $F38D + #$F38E, // $F38E + #$F38F, // $F38F + #$F390, // $F390 + #$F391, // $F391 + #$F392, // $F392 + #$F393, // $F393 + #$F394, // $F394 + #$F395, // $F395 + #$F396, // $F396 + #$F397, // $F397 + #$F398, // $F398 + #$F399, // $F399 + #$F39A, // $F39A + #$F39B, // $F39B + #$F39C, // $F39C + #$F39D, // $F39D + #$F39E, // $F39E + #$F39F, // $F39F + #$F3A0, // $F3A0 + #$F3A1, // $F3A1 + #$F3A2, // $F3A2 + #$F3A3, // $F3A3 + #$F3A4, // $F3A4 + #$F3A5, // $F3A5 + #$F3A6, // $F3A6 + #$F3A7, // $F3A7 + #$F3A8, // $F3A8 + #$F3A9, // $F3A9 + #$F3AA, // $F3AA + #$F3AB, // $F3AB + #$F3AC, // $F3AC + #$F3AD, // $F3AD + #$F3AE, // $F3AE + #$F3AF, // $F3AF + #$F3B0, // $F3B0 + #$F3B1, // $F3B1 + #$F3B2, // $F3B2 + #$F3B3, // $F3B3 + #$F3B4, // $F3B4 + #$F3B5, // $F3B5 + #$F3B6, // $F3B6 + #$F3B7, // $F3B7 + #$F3B8, // $F3B8 + #$F3B9, // $F3B9 + #$F3BA, // $F3BA + #$F3BB, // $F3BB + #$F3BC, // $F3BC + #$F3BD, // $F3BD + #$F3BE, // $F3BE + #$F3BF, // $F3BF + #$F3C0, // $F3C0 + #$F3C1, // $F3C1 + #$F3C2, // $F3C2 + #$F3C3, // $F3C3 + #$F3C4, // $F3C4 + #$F3C5, // $F3C5 + #$F3C6, // $F3C6 + #$F3C7, // $F3C7 + #$F3C8, // $F3C8 + #$F3C9, // $F3C9 + #$F3CA, // $F3CA + #$F3CB, // $F3CB + #$F3CC, // $F3CC + #$F3CD, // $F3CD + #$F3CE, // $F3CE + #$F3CF, // $F3CF + #$F3D0, // $F3D0 + #$F3D1, // $F3D1 + #$F3D2, // $F3D2 + #$F3D3, // $F3D3 + #$F3D4, // $F3D4 + #$F3D5, // $F3D5 + #$F3D6, // $F3D6 + #$F3D7, // $F3D7 + #$F3D8, // $F3D8 + #$F3D9, // $F3D9 + #$F3DA, // $F3DA + #$F3DB, // $F3DB + #$F3DC, // $F3DC + #$F3DD, // $F3DD + #$F3DE, // $F3DE + #$F3DF, // $F3DF + #$F3E0, // $F3E0 + #$F3E1, // $F3E1 + #$F3E2, // $F3E2 + #$F3E3, // $F3E3 + #$F3E4, // $F3E4 + #$F3E5, // $F3E5 + #$F3E6, // $F3E6 + #$F3E7, // $F3E7 + #$F3E8, // $F3E8 + #$F3E9, // $F3E9 + #$F3EA, // $F3EA + #$F3EB, // $F3EB + #$F3EC, // $F3EC + #$F3ED, // $F3ED + #$F3EE, // $F3EE + #$F3EF, // $F3EF + #$F3F0, // $F3F0 + #$F3F1, // $F3F1 + #$F3F2, // $F3F2 + #$F3F3, // $F3F3 + #$F3F4, // $F3F4 + #$F3F5, // $F3F5 + #$F3F6, // $F3F6 + #$F3F7, // $F3F7 + #$F3F8, // $F3F8 + #$F3F9, // $F3F9 + #$F3FA, // $F3FA + #$F3FB, // $F3FB + #$F3FC, // $F3FC + #$F3FD, // $F3FD + #$F3FE, // $F3FE + #$F3FF, // $F3FF + #$F400, // $F400 + #$F401, // $F401 + #$F402, // $F402 + #$F403, // $F403 + #$F404, // $F404 + #$F405, // $F405 + #$F406, // $F406 + #$F407, // $F407 + #$F408, // $F408 + #$F409, // $F409 + #$F40A, // $F40A + #$F40B, // $F40B + #$F40C, // $F40C + #$F40D, // $F40D + #$F40E, // $F40E + #$F40F, // $F40F + #$F410, // $F410 + #$F411, // $F411 + #$F412, // $F412 + #$F413, // $F413 + #$F414, // $F414 + #$F415, // $F415 + #$F416, // $F416 + #$F417, // $F417 + #$F418, // $F418 + #$F419, // $F419 + #$F41A, // $F41A + #$F41B, // $F41B + #$F41C, // $F41C + #$F41D, // $F41D + #$F41E, // $F41E + #$F41F, // $F41F + #$F420, // $F420 + #$F421, // $F421 + #$F422, // $F422 + #$F423, // $F423 + #$F424, // $F424 + #$F425, // $F425 + #$F426, // $F426 + #$F427, // $F427 + #$F428, // $F428 + #$F429, // $F429 + #$F42A, // $F42A + #$F42B, // $F42B + #$F42C, // $F42C + #$F42D, // $F42D + #$F42E, // $F42E + #$F42F, // $F42F + #$F430, // $F430 + #$F431, // $F431 + #$F432, // $F432 + #$F433, // $F433 + #$F434, // $F434 + #$F435, // $F435 + #$F436, // $F436 + #$F437, // $F437 + #$F438, // $F438 + #$F439, // $F439 + #$F43A, // $F43A + #$F43B, // $F43B + #$F43C, // $F43C + #$F43D, // $F43D + #$F43E, // $F43E + #$F43F, // $F43F + #$F440, // $F440 + #$F441, // $F441 + #$F442, // $F442 + #$F443, // $F443 + #$F444, // $F444 + #$F445, // $F445 + #$F446, // $F446 + #$F447, // $F447 + #$F448, // $F448 + #$F449, // $F449 + #$F44A, // $F44A + #$F44B, // $F44B + #$F44C, // $F44C + #$F44D, // $F44D + #$F44E, // $F44E + #$F44F, // $F44F + #$F450, // $F450 + #$F451, // $F451 + #$F452, // $F452 + #$F453, // $F453 + #$F454, // $F454 + #$F455, // $F455 + #$F456, // $F456 + #$F457, // $F457 + #$F458, // $F458 + #$F459, // $F459 + #$F45A, // $F45A + #$F45B, // $F45B + #$F45C, // $F45C + #$F45D, // $F45D + #$F45E, // $F45E + #$F45F, // $F45F + #$F460, // $F460 + #$F461, // $F461 + #$F462, // $F462 + #$F463, // $F463 + #$F464, // $F464 + #$F465, // $F465 + #$F466, // $F466 + #$F467, // $F467 + #$F468, // $F468 + #$F469, // $F469 + #$F46A, // $F46A + #$F46B, // $F46B + #$F46C, // $F46C + #$F46D, // $F46D + #$F46E, // $F46E + #$F46F, // $F46F + #$F470, // $F470 + #$F471, // $F471 + #$F472, // $F472 + #$F473, // $F473 + #$F474, // $F474 + #$F475, // $F475 + #$F476, // $F476 + #$F477, // $F477 + #$F478, // $F478 + #$F479, // $F479 + #$F47A, // $F47A + #$F47B, // $F47B + #$F47C, // $F47C + #$F47D, // $F47D + #$F47E, // $F47E + #$F47F, // $F47F + #$F480, // $F480 + #$F481, // $F481 + #$F482, // $F482 + #$F483, // $F483 + #$F484, // $F484 + #$F485, // $F485 + #$F486, // $F486 + #$F487, // $F487 + #$F488, // $F488 + #$F489, // $F489 + #$F48A, // $F48A + #$F48B, // $F48B + #$F48C, // $F48C + #$F48D, // $F48D + #$F48E, // $F48E + #$F48F, // $F48F + #$F490, // $F490 + #$F491, // $F491 + #$F492, // $F492 + #$F493, // $F493 + #$F494, // $F494 + #$F495, // $F495 + #$F496, // $F496 + #$F497, // $F497 + #$F498, // $F498 + #$F499, // $F499 + #$F49A, // $F49A + #$F49B, // $F49B + #$F49C, // $F49C + #$F49D, // $F49D + #$F49E, // $F49E + #$F49F, // $F49F + #$F4A0, // $F4A0 + #$F4A1, // $F4A1 + #$F4A2, // $F4A2 + #$F4A3, // $F4A3 + #$F4A4, // $F4A4 + #$F4A5, // $F4A5 + #$F4A6, // $F4A6 + #$F4A7, // $F4A7 + #$F4A8, // $F4A8 + #$F4A9, // $F4A9 + #$F4AA, // $F4AA + #$F4AB, // $F4AB + #$F4AC, // $F4AC + #$F4AD, // $F4AD + #$F4AE, // $F4AE + #$F4AF, // $F4AF + #$F4B0, // $F4B0 + #$F4B1, // $F4B1 + #$F4B2, // $F4B2 + #$F4B3, // $F4B3 + #$F4B4, // $F4B4 + #$F4B5, // $F4B5 + #$F4B6, // $F4B6 + #$F4B7, // $F4B7 + #$F4B8, // $F4B8 + #$F4B9, // $F4B9 + #$F4BA, // $F4BA + #$F4BB, // $F4BB + #$F4BC, // $F4BC + #$F4BD, // $F4BD + #$F4BE, // $F4BE + #$F4BF, // $F4BF + #$F4C0, // $F4C0 + #$F4C1, // $F4C1 + #$F4C2, // $F4C2 + #$F4C3, // $F4C3 + #$F4C4, // $F4C4 + #$F4C5, // $F4C5 + #$F4C6, // $F4C6 + #$F4C7, // $F4C7 + #$F4C8, // $F4C8 + #$F4C9, // $F4C9 + #$F4CA, // $F4CA + #$F4CB, // $F4CB + #$F4CC, // $F4CC + #$F4CD, // $F4CD + #$F4CE, // $F4CE + #$F4CF, // $F4CF + #$F4D0, // $F4D0 + #$F4D1, // $F4D1 + #$F4D2, // $F4D2 + #$F4D3, // $F4D3 + #$F4D4, // $F4D4 + #$F4D5, // $F4D5 + #$F4D6, // $F4D6 + #$F4D7, // $F4D7 + #$F4D8, // $F4D8 + #$F4D9, // $F4D9 + #$F4DA, // $F4DA + #$F4DB, // $F4DB + #$F4DC, // $F4DC + #$F4DD, // $F4DD + #$F4DE, // $F4DE + #$F4DF, // $F4DF + #$F4E0, // $F4E0 + #$F4E1, // $F4E1 + #$F4E2, // $F4E2 + #$F4E3, // $F4E3 + #$F4E4, // $F4E4 + #$F4E5, // $F4E5 + #$F4E6, // $F4E6 + #$F4E7, // $F4E7 + #$F4E8, // $F4E8 + #$F4E9, // $F4E9 + #$F4EA, // $F4EA + #$F4EB, // $F4EB + #$F4EC, // $F4EC + #$F4ED, // $F4ED + #$F4EE, // $F4EE + #$F4EF, // $F4EF + #$F4F0, // $F4F0 + #$F4F1, // $F4F1 + #$F4F2, // $F4F2 + #$F4F3, // $F4F3 + #$F4F4, // $F4F4 + #$F4F5, // $F4F5 + #$F4F6, // $F4F6 + #$F4F7, // $F4F7 + #$F4F8, // $F4F8 + #$F4F9, // $F4F9 + #$F4FA, // $F4FA + #$F4FB, // $F4FB + #$F4FC, // $F4FC + #$F4FD, // $F4FD + #$F4FE, // $F4FE + #$F4FF, // $F4FF + #$F500, // $F500 + #$F501, // $F501 + #$F502, // $F502 + #$F503, // $F503 + #$F504, // $F504 + #$F505, // $F505 + #$F506, // $F506 + #$F507, // $F507 + #$F508, // $F508 + #$F509, // $F509 + #$F50A, // $F50A + #$F50B, // $F50B + #$F50C, // $F50C + #$F50D, // $F50D + #$F50E, // $F50E + #$F50F, // $F50F + #$F510, // $F510 + #$F511, // $F511 + #$F512, // $F512 + #$F513, // $F513 + #$F514, // $F514 + #$F515, // $F515 + #$F516, // $F516 + #$F517, // $F517 + #$F518, // $F518 + #$F519, // $F519 + #$F51A, // $F51A + #$F51B, // $F51B + #$F51C, // $F51C + #$F51D, // $F51D + #$F51E, // $F51E + #$F51F, // $F51F + #$F520, // $F520 + #$F521, // $F521 + #$F522, // $F522 + #$F523, // $F523 + #$F524, // $F524 + #$F525, // $F525 + #$F526, // $F526 + #$F527, // $F527 + #$F528, // $F528 + #$F529, // $F529 + #$F52A, // $F52A + #$F52B, // $F52B + #$F52C, // $F52C + #$F52D, // $F52D + #$F52E, // $F52E + #$F52F, // $F52F + #$F530, // $F530 + #$F531, // $F531 + #$F532, // $F532 + #$F533, // $F533 + #$F534, // $F534 + #$F535, // $F535 + #$F536, // $F536 + #$F537, // $F537 + #$F538, // $F538 + #$F539, // $F539 + #$F53A, // $F53A + #$F53B, // $F53B + #$F53C, // $F53C + #$F53D, // $F53D + #$F53E, // $F53E + #$F53F, // $F53F + #$F540, // $F540 + #$F541, // $F541 + #$F542, // $F542 + #$F543, // $F543 + #$F544, // $F544 + #$F545, // $F545 + #$F546, // $F546 + #$F547, // $F547 + #$F548, // $F548 + #$F549, // $F549 + #$F54A, // $F54A + #$F54B, // $F54B + #$F54C, // $F54C + #$F54D, // $F54D + #$F54E, // $F54E + #$F54F, // $F54F + #$F550, // $F550 + #$F551, // $F551 + #$F552, // $F552 + #$F553, // $F553 + #$F554, // $F554 + #$F555, // $F555 + #$F556, // $F556 + #$F557, // $F557 + #$F558, // $F558 + #$F559, // $F559 + #$F55A, // $F55A + #$F55B, // $F55B + #$F55C, // $F55C + #$F55D, // $F55D + #$F55E, // $F55E + #$F55F, // $F55F + #$F560, // $F560 + #$F561, // $F561 + #$F562, // $F562 + #$F563, // $F563 + #$F564, // $F564 + #$F565, // $F565 + #$F566, // $F566 + #$F567, // $F567 + #$F568, // $F568 + #$F569, // $F569 + #$F56A, // $F56A + #$F56B, // $F56B + #$F56C, // $F56C + #$F56D, // $F56D + #$F56E, // $F56E + #$F56F, // $F56F + #$F570, // $F570 + #$F571, // $F571 + #$F572, // $F572 + #$F573, // $F573 + #$F574, // $F574 + #$F575, // $F575 + #$F576, // $F576 + #$F577, // $F577 + #$F578, // $F578 + #$F579, // $F579 + #$F57A, // $F57A + #$F57B, // $F57B + #$F57C, // $F57C + #$F57D, // $F57D + #$F57E, // $F57E + #$F57F, // $F57F + #$F580, // $F580 + #$F581, // $F581 + #$F582, // $F582 + #$F583, // $F583 + #$F584, // $F584 + #$F585, // $F585 + #$F586, // $F586 + #$F587, // $F587 + #$F588, // $F588 + #$F589, // $F589 + #$F58A, // $F58A + #$F58B, // $F58B + #$F58C, // $F58C + #$F58D, // $F58D + #$F58E, // $F58E + #$F58F, // $F58F + #$F590, // $F590 + #$F591, // $F591 + #$F592, // $F592 + #$F593, // $F593 + #$F594, // $F594 + #$F595, // $F595 + #$F596, // $F596 + #$F597, // $F597 + #$F598, // $F598 + #$F599, // $F599 + #$F59A, // $F59A + #$F59B, // $F59B + #$F59C, // $F59C + #$F59D, // $F59D + #$F59E, // $F59E + #$F59F, // $F59F + #$F5A0, // $F5A0 + #$F5A1, // $F5A1 + #$F5A2, // $F5A2 + #$F5A3, // $F5A3 + #$F5A4, // $F5A4 + #$F5A5, // $F5A5 + #$F5A6, // $F5A6 + #$F5A7, // $F5A7 + #$F5A8, // $F5A8 + #$F5A9, // $F5A9 + #$F5AA, // $F5AA + #$F5AB, // $F5AB + #$F5AC, // $F5AC + #$F5AD, // $F5AD + #$F5AE, // $F5AE + #$F5AF, // $F5AF + #$F5B0, // $F5B0 + #$F5B1, // $F5B1 + #$F5B2, // $F5B2 + #$F5B3, // $F5B3 + #$F5B4, // $F5B4 + #$F5B5, // $F5B5 + #$F5B6, // $F5B6 + #$F5B7, // $F5B7 + #$F5B8, // $F5B8 + #$F5B9, // $F5B9 + #$F5BA, // $F5BA + #$F5BB, // $F5BB + #$F5BC, // $F5BC + #$F5BD, // $F5BD + #$F5BE, // $F5BE + #$F5BF, // $F5BF + #$F5C0, // $F5C0 + #$F5C1, // $F5C1 + #$F5C2, // $F5C2 + #$F5C3, // $F5C3 + #$F5C4, // $F5C4 + #$F5C5, // $F5C5 + #$F5C6, // $F5C6 + #$F5C7, // $F5C7 + #$F5C8, // $F5C8 + #$F5C9, // $F5C9 + #$F5CA, // $F5CA + #$F5CB, // $F5CB + #$F5CC, // $F5CC + #$F5CD, // $F5CD + #$F5CE, // $F5CE + #$F5CF, // $F5CF + #$F5D0, // $F5D0 + #$F5D1, // $F5D1 + #$F5D2, // $F5D2 + #$F5D3, // $F5D3 + #$F5D4, // $F5D4 + #$F5D5, // $F5D5 + #$F5D6, // $F5D6 + #$F5D7, // $F5D7 + #$F5D8, // $F5D8 + #$F5D9, // $F5D9 + #$F5DA, // $F5DA + #$F5DB, // $F5DB + #$F5DC, // $F5DC + #$F5DD, // $F5DD + #$F5DE, // $F5DE + #$F5DF, // $F5DF + #$F5E0, // $F5E0 + #$F5E1, // $F5E1 + #$F5E2, // $F5E2 + #$F5E3, // $F5E3 + #$F5E4, // $F5E4 + #$F5E5, // $F5E5 + #$F5E6, // $F5E6 + #$F5E7, // $F5E7 + #$F5E8, // $F5E8 + #$F5E9, // $F5E9 + #$F5EA, // $F5EA + #$F5EB, // $F5EB + #$F5EC, // $F5EC + #$F5ED, // $F5ED + #$F5EE, // $F5EE + #$F5EF, // $F5EF + #$F5F0, // $F5F0 + #$F5F1, // $F5F1 + #$F5F2, // $F5F2 + #$F5F3, // $F5F3 + #$F5F4, // $F5F4 + #$F5F5, // $F5F5 + #$F5F6, // $F5F6 + #$F5F7, // $F5F7 + #$F5F8, // $F5F8 + #$F5F9, // $F5F9 + #$F5FA, // $F5FA + #$F5FB, // $F5FB + #$F5FC, // $F5FC + #$F5FD, // $F5FD + #$F5FE, // $F5FE + #$F5FF, // $F5FF + #$F600, // $F600 + #$F601, // $F601 + #$F602, // $F602 + #$F603, // $F603 + #$F604, // $F604 + #$F605, // $F605 + #$F606, // $F606 + #$F607, // $F607 + #$F608, // $F608 + #$F609, // $F609 + #$F60A, // $F60A + #$F60B, // $F60B + #$F60C, // $F60C + #$F60D, // $F60D + #$F60E, // $F60E + #$F60F, // $F60F + #$F610, // $F610 + #$F611, // $F611 + #$F612, // $F612 + #$F613, // $F613 + #$F614, // $F614 + #$F615, // $F615 + #$F616, // $F616 + #$F617, // $F617 + #$F618, // $F618 + #$F619, // $F619 + #$F61A, // $F61A + #$F61B, // $F61B + #$F61C, // $F61C + #$F61D, // $F61D + #$F61E, // $F61E + #$F61F, // $F61F + #$F620, // $F620 + #$F621, // $F621 + #$F622, // $F622 + #$F623, // $F623 + #$F624, // $F624 + #$F625, // $F625 + #$F626, // $F626 + #$F627, // $F627 + #$F628, // $F628 + #$F629, // $F629 + #$F62A, // $F62A + #$F62B, // $F62B + #$F62C, // $F62C + #$F62D, // $F62D + #$F62E, // $F62E + #$F62F, // $F62F + #$F630, // $F630 + #$F631, // $F631 + #$F632, // $F632 + #$F633, // $F633 + #$F634, // $F634 + #$F635, // $F635 + #$F636, // $F636 + #$F637, // $F637 + #$F638, // $F638 + #$F639, // $F639 + #$F63A, // $F63A + #$F63B, // $F63B + #$F63C, // $F63C + #$F63D, // $F63D + #$F63E, // $F63E + #$F63F, // $F63F + #$F640, // $F640 + #$F641, // $F641 + #$F642, // $F642 + #$F643, // $F643 + #$F644, // $F644 + #$F645, // $F645 + #$F646, // $F646 + #$F647, // $F647 + #$F648, // $F648 + #$F649, // $F649 + #$F64A, // $F64A + #$F64B, // $F64B + #$F64C, // $F64C + #$F64D, // $F64D + #$F64E, // $F64E + #$F64F, // $F64F + #$F650, // $F650 + #$F651, // $F651 + #$F652, // $F652 + #$F653, // $F653 + #$F654, // $F654 + #$F655, // $F655 + #$F656, // $F656 + #$F657, // $F657 + #$F658, // $F658 + #$F659, // $F659 + #$F65A, // $F65A + #$F65B, // $F65B + #$F65C, // $F65C + #$F65D, // $F65D + #$F65E, // $F65E + #$F65F, // $F65F + #$F660, // $F660 + #$F661, // $F661 + #$F662, // $F662 + #$F663, // $F663 + #$F664, // $F664 + #$F665, // $F665 + #$F666, // $F666 + #$F667, // $F667 + #$F668, // $F668 + #$F669, // $F669 + #$F66A, // $F66A + #$F66B, // $F66B + #$F66C, // $F66C + #$F66D, // $F66D + #$F66E, // $F66E + #$F66F, // $F66F + #$F670, // $F670 + #$F671, // $F671 + #$F672, // $F672 + #$F673, // $F673 + #$F674, // $F674 + #$F675, // $F675 + #$F676, // $F676 + #$F677, // $F677 + #$F678, // $F678 + #$F679, // $F679 + #$F67A, // $F67A + #$F67B, // $F67B + #$F67C, // $F67C + #$F67D, // $F67D + #$F67E, // $F67E + #$F67F, // $F67F + #$F680, // $F680 + #$F681, // $F681 + #$F682, // $F682 + #$F683, // $F683 + #$F684, // $F684 + #$F685, // $F685 + #$F686, // $F686 + #$F687, // $F687 + #$F688, // $F688 + #$F689, // $F689 + #$F68A, // $F68A + #$F68B, // $F68B + #$F68C, // $F68C + #$F68D, // $F68D + #$F68E, // $F68E + #$F68F, // $F68F + #$F690, // $F690 + #$F691, // $F691 + #$F692, // $F692 + #$F693, // $F693 + #$F694, // $F694 + #$F695, // $F695 + #$F696, // $F696 + #$F697, // $F697 + #$F698, // $F698 + #$F699, // $F699 + #$F69A, // $F69A + #$F69B, // $F69B + #$F69C, // $F69C + #$F69D, // $F69D + #$F69E, // $F69E + #$F69F, // $F69F + #$F6A0, // $F6A0 + #$F6A1, // $F6A1 + #$F6A2, // $F6A2 + #$F6A3, // $F6A3 + #$F6A4, // $F6A4 + #$F6A5, // $F6A5 + #$F6A6, // $F6A6 + #$F6A7, // $F6A7 + #$F6A8, // $F6A8 + #$F6A9, // $F6A9 + #$F6AA, // $F6AA + #$F6AB, // $F6AB + #$F6AC, // $F6AC + #$F6AD, // $F6AD + #$F6AE, // $F6AE + #$F6AF, // $F6AF + #$F6B0, // $F6B0 + #$F6B1, // $F6B1 + #$F6B2, // $F6B2 + #$F6B3, // $F6B3 + #$F6B4, // $F6B4 + #$F6B5, // $F6B5 + #$F6B6, // $F6B6 + #$F6B7, // $F6B7 + #$F6B8, // $F6B8 + #$F6B9, // $F6B9 + #$F6BA, // $F6BA + #$F6BB, // $F6BB + #$F6BC, // $F6BC + #$F6BD, // $F6BD + #$F6BE, // $F6BE + #$F6BF, // $F6BF + #$F6C0, // $F6C0 + #$F6C1, // $F6C1 + #$F6C2, // $F6C2 + #$F6C3, // $F6C3 + #$F6C4, // $F6C4 + #$F6C5, // $F6C5 + #$F6C6, // $F6C6 + #$F6C7, // $F6C7 + #$F6C8, // $F6C8 + #$F6C9, // $F6C9 + #$F6CA, // $F6CA + #$F6CB, // $F6CB + #$F6CC, // $F6CC + #$F6CD, // $F6CD + #$F6CE, // $F6CE + #$F6CF, // $F6CF + #$F6D0, // $F6D0 + #$F6D1, // $F6D1 + #$F6D2, // $F6D2 + #$F6D3, // $F6D3 + #$F6D4, // $F6D4 + #$F6D5, // $F6D5 + #$F6D6, // $F6D6 + #$F6D7, // $F6D7 + #$F6D8, // $F6D8 + #$F6D9, // $F6D9 + #$F6DA, // $F6DA + #$F6DB, // $F6DB + #$F6DC, // $F6DC + #$F6DD, // $F6DD + #$F6DE, // $F6DE + #$F6DF, // $F6DF + #$F6E0, // $F6E0 + #$F6E1, // $F6E1 + #$F6E2, // $F6E2 + #$F6E3, // $F6E3 + #$F6E4, // $F6E4 + #$F6E5, // $F6E5 + #$F6E6, // $F6E6 + #$F6E7, // $F6E7 + #$F6E8, // $F6E8 + #$F6E9, // $F6E9 + #$F6EA, // $F6EA + #$F6EB, // $F6EB + #$F6EC, // $F6EC + #$F6ED, // $F6ED + #$F6EE, // $F6EE + #$F6EF, // $F6EF + #$F6F0, // $F6F0 + #$F6F1, // $F6F1 + #$F6F2, // $F6F2 + #$F6F3, // $F6F3 + #$F6F4, // $F6F4 + #$F6F5, // $F6F5 + #$F6F6, // $F6F6 + #$F6F7, // $F6F7 + #$F6F8, // $F6F8 + #$F6F9, // $F6F9 + #$F6FA, // $F6FA + #$F6FB, // $F6FB + #$F6FC, // $F6FC + #$F6FD, // $F6FD + #$F6FE, // $F6FE + #$F6FF, // $F6FF + #$F700, // $F700 + #$F701, // $F701 + #$F702, // $F702 + #$F703, // $F703 + #$F704, // $F704 + #$F705, // $F705 + #$F706, // $F706 + #$F707, // $F707 + #$F708, // $F708 + #$F709, // $F709 + #$F70A, // $F70A + #$F70B, // $F70B + #$F70C, // $F70C + #$F70D, // $F70D + #$F70E, // $F70E + #$F70F, // $F70F + #$F710, // $F710 + #$F711, // $F711 + #$F712, // $F712 + #$F713, // $F713 + #$F714, // $F714 + #$F715, // $F715 + #$F716, // $F716 + #$F717, // $F717 + #$F718, // $F718 + #$F719, // $F719 + #$F71A, // $F71A + #$F71B, // $F71B + #$F71C, // $F71C + #$F71D, // $F71D + #$F71E, // $F71E + #$F71F, // $F71F + #$F720, // $F720 + #$F721, // $F721 + #$F722, // $F722 + #$F723, // $F723 + #$F724, // $F724 + #$F725, // $F725 + #$F726, // $F726 + #$F727, // $F727 + #$F728, // $F728 + #$F729, // $F729 + #$F72A, // $F72A + #$F72B, // $F72B + #$F72C, // $F72C + #$F72D, // $F72D + #$F72E, // $F72E + #$F72F, // $F72F + #$F730, // $F730 + #$F731, // $F731 + #$F732, // $F732 + #$F733, // $F733 + #$F734, // $F734 + #$F735, // $F735 + #$F736, // $F736 + #$F737, // $F737 + #$F738, // $F738 + #$F739, // $F739 + #$F73A, // $F73A + #$F73B, // $F73B + #$F73C, // $F73C + #$F73D, // $F73D + #$F73E, // $F73E + #$F73F, // $F73F + #$F740, // $F740 + #$F741, // $F741 + #$F742, // $F742 + #$F743, // $F743 + #$F744, // $F744 + #$F745, // $F745 + #$F746, // $F746 + #$F747, // $F747 + #$F748, // $F748 + #$F749, // $F749 + #$F74A, // $F74A + #$F74B, // $F74B + #$F74C, // $F74C + #$F74D, // $F74D + #$F74E, // $F74E + #$F74F, // $F74F + #$F750, // $F750 + #$F751, // $F751 + #$F752, // $F752 + #$F753, // $F753 + #$F754, // $F754 + #$F755, // $F755 + #$F756, // $F756 + #$F757, // $F757 + #$F758, // $F758 + #$F759, // $F759 + #$F75A, // $F75A + #$F75B, // $F75B + #$F75C, // $F75C + #$F75D, // $F75D + #$F75E, // $F75E + #$F75F, // $F75F + #$F760, // $F760 + #$F761, // $F761 + #$F762, // $F762 + #$F763, // $F763 + #$F764, // $F764 + #$F765, // $F765 + #$F766, // $F766 + #$F767, // $F767 + #$F768, // $F768 + #$F769, // $F769 + #$F76A, // $F76A + #$F76B, // $F76B + #$F76C, // $F76C + #$F76D, // $F76D + #$F76E, // $F76E + #$F76F, // $F76F + #$F770, // $F770 + #$F771, // $F771 + #$F772, // $F772 + #$F773, // $F773 + #$F774, // $F774 + #$F775, // $F775 + #$F776, // $F776 + #$F777, // $F777 + #$F778, // $F778 + #$F779, // $F779 + #$F77A, // $F77A + #$F77B, // $F77B + #$F77C, // $F77C + #$F77D, // $F77D + #$F77E, // $F77E + #$F77F, // $F77F + #$F780, // $F780 + #$F781, // $F781 + #$F782, // $F782 + #$F783, // $F783 + #$F784, // $F784 + #$F785, // $F785 + #$F786, // $F786 + #$F787, // $F787 + #$F788, // $F788 + #$F789, // $F789 + #$F78A, // $F78A + #$F78B, // $F78B + #$F78C, // $F78C + #$F78D, // $F78D + #$F78E, // $F78E + #$F78F, // $F78F + #$F790, // $F790 + #$F791, // $F791 + #$F792, // $F792 + #$F793, // $F793 + #$F794, // $F794 + #$F795, // $F795 + #$F796, // $F796 + #$F797, // $F797 + #$F798, // $F798 + #$F799, // $F799 + #$F79A, // $F79A + #$F79B, // $F79B + #$F79C, // $F79C + #$F79D, // $F79D + #$F79E, // $F79E + #$F79F, // $F79F + #$F7A0, // $F7A0 + #$F7A1, // $F7A1 + #$F7A2, // $F7A2 + #$F7A3, // $F7A3 + #$F7A4, // $F7A4 + #$F7A5, // $F7A5 + #$F7A6, // $F7A6 + #$F7A7, // $F7A7 + #$F7A8, // $F7A8 + #$F7A9, // $F7A9 + #$F7AA, // $F7AA + #$F7AB, // $F7AB + #$F7AC, // $F7AC + #$F7AD, // $F7AD + #$F7AE, // $F7AE + #$F7AF, // $F7AF + #$F7B0, // $F7B0 + #$F7B1, // $F7B1 + #$F7B2, // $F7B2 + #$F7B3, // $F7B3 + #$F7B4, // $F7B4 + #$F7B5, // $F7B5 + #$F7B6, // $F7B6 + #$F7B7, // $F7B7 + #$F7B8, // $F7B8 + #$F7B9, // $F7B9 + #$F7BA, // $F7BA + #$F7BB, // $F7BB + #$F7BC, // $F7BC + #$F7BD, // $F7BD + #$F7BE, // $F7BE + #$F7BF, // $F7BF + #$F7C0, // $F7C0 + #$F7C1, // $F7C1 + #$F7C2, // $F7C2 + #$F7C3, // $F7C3 + #$F7C4, // $F7C4 + #$F7C5, // $F7C5 + #$F7C6, // $F7C6 + #$F7C7, // $F7C7 + #$F7C8, // $F7C8 + #$F7C9, // $F7C9 + #$F7CA, // $F7CA + #$F7CB, // $F7CB + #$F7CC, // $F7CC + #$F7CD, // $F7CD + #$F7CE, // $F7CE + #$F7CF, // $F7CF + #$F7D0, // $F7D0 + #$F7D1, // $F7D1 + #$F7D2, // $F7D2 + #$F7D3, // $F7D3 + #$F7D4, // $F7D4 + #$F7D5, // $F7D5 + #$F7D6, // $F7D6 + #$F7D7, // $F7D7 + #$F7D8, // $F7D8 + #$F7D9, // $F7D9 + #$F7DA, // $F7DA + #$F7DB, // $F7DB + #$F7DC, // $F7DC + #$F7DD, // $F7DD + #$F7DE, // $F7DE + #$F7DF, // $F7DF + #$F7E0, // $F7E0 + #$F7E1, // $F7E1 + #$F7E2, // $F7E2 + #$F7E3, // $F7E3 + #$F7E4, // $F7E4 + #$F7E5, // $F7E5 + #$F7E6, // $F7E6 + #$F7E7, // $F7E7 + #$F7E8, // $F7E8 + #$F7E9, // $F7E9 + #$F7EA, // $F7EA + #$F7EB, // $F7EB + #$F7EC, // $F7EC + #$F7ED, // $F7ED + #$F7EE, // $F7EE + #$F7EF, // $F7EF + #$F7F0, // $F7F0 + #$F7F1, // $F7F1 + #$F7F2, // $F7F2 + #$F7F3, // $F7F3 + #$F7F4, // $F7F4 + #$F7F5, // $F7F5 + #$F7F6, // $F7F6 + #$F7F7, // $F7F7 + #$F7F8, // $F7F8 + #$F7F9, // $F7F9 + #$F7FA, // $F7FA + #$F7FB, // $F7FB + #$F7FC, // $F7FC + #$F7FD, // $F7FD + #$F7FE, // $F7FE + #$F7FF, // $F7FF + #$F800, // $F800 + #$F801, // $F801 + #$F802, // $F802 + #$F803, // $F803 + #$F804, // $F804 + #$F805, // $F805 + #$F806, // $F806 + #$F807, // $F807 + #$F808, // $F808 + #$F809, // $F809 + #$F80A, // $F80A + #$F80B, // $F80B + #$F80C, // $F80C + #$F80D, // $F80D + #$F80E, // $F80E + #$F80F, // $F80F + #$F810, // $F810 + #$F811, // $F811 + #$F812, // $F812 + #$F813, // $F813 + #$F814, // $F814 + #$F815, // $F815 + #$F816, // $F816 + #$F817, // $F817 + #$F818, // $F818 + #$F819, // $F819 + #$F81A, // $F81A + #$F81B, // $F81B + #$F81C, // $F81C + #$F81D, // $F81D + #$F81E, // $F81E + #$F81F, // $F81F + #$F820, // $F820 + #$F821, // $F821 + #$F822, // $F822 + #$F823, // $F823 + #$F824, // $F824 + #$F825, // $F825 + #$F826, // $F826 + #$F827, // $F827 + #$F828, // $F828 + #$F829, // $F829 + #$F82A, // $F82A + #$F82B, // $F82B + #$F82C, // $F82C + #$F82D, // $F82D + #$F82E, // $F82E + #$F82F, // $F82F + #$F830, // $F830 + #$F831, // $F831 + #$F832, // $F832 + #$F833, // $F833 + #$F834, // $F834 + #$F835, // $F835 + #$F836, // $F836 + #$F837, // $F837 + #$F838, // $F838 + #$F839, // $F839 + #$F83A, // $F83A + #$F83B, // $F83B + #$F83C, // $F83C + #$F83D, // $F83D + #$F83E, // $F83E + #$F83F, // $F83F + #$F840, // $F840 + #$F841, // $F841 + #$F842, // $F842 + #$F843, // $F843 + #$F844, // $F844 + #$F845, // $F845 + #$F846, // $F846 + #$F847, // $F847 + #$F848, // $F848 + #$F849, // $F849 + #$F84A, // $F84A + #$F84B, // $F84B + #$F84C, // $F84C + #$F84D, // $F84D + #$F84E, // $F84E + #$F84F, // $F84F + #$F850, // $F850 + #$F851, // $F851 + #$F852, // $F852 + #$F853, // $F853 + #$F854, // $F854 + #$F855, // $F855 + #$F856, // $F856 + #$F857, // $F857 + #$F858, // $F858 + #$F859, // $F859 + #$F85A, // $F85A + #$F85B, // $F85B + #$F85C, // $F85C + #$F85D, // $F85D + #$F85E, // $F85E + #$F85F, // $F85F + #$F860, // $F860 + #$F861, // $F861 + #$F862, // $F862 + #$F863, // $F863 + #$F864, // $F864 + #$F865, // $F865 + #$F866, // $F866 + #$F867, // $F867 + #$F868, // $F868 + #$F869, // $F869 + #$F86A, // $F86A + #$F86B, // $F86B + #$F86C, // $F86C + #$F86D, // $F86D + #$F86E, // $F86E + #$F86F, // $F86F + #$F870, // $F870 + #$F871, // $F871 + #$F872, // $F872 + #$F873, // $F873 + #$F874, // $F874 + #$F875, // $F875 + #$F876, // $F876 + #$F877, // $F877 + #$F878, // $F878 + #$F879, // $F879 + #$F87A, // $F87A + #$F87B, // $F87B + #$F87C, // $F87C + #$F87D, // $F87D + #$F87E, // $F87E + #$F87F, // $F87F + #$F880, // $F880 + #$F881, // $F881 + #$F882, // $F882 + #$F883, // $F883 + #$F884, // $F884 + #$F885, // $F885 + #$F886, // $F886 + #$F887, // $F887 + #$F888, // $F888 + #$F889, // $F889 + #$F88A, // $F88A + #$F88B, // $F88B + #$F88C, // $F88C + #$F88D, // $F88D + #$F88E, // $F88E + #$F88F, // $F88F + #$F890, // $F890 + #$F891, // $F891 + #$F892, // $F892 + #$F893, // $F893 + #$F894, // $F894 + #$F895, // $F895 + #$F896, // $F896 + #$F897, // $F897 + #$F898, // $F898 + #$F899, // $F899 + #$F89A, // $F89A + #$F89B, // $F89B + #$F89C, // $F89C + #$F89D, // $F89D + #$F89E, // $F89E + #$F89F, // $F89F + #$F8A0, // $F8A0 + #$F8A1, // $F8A1 + #$F8A2, // $F8A2 + #$F8A3, // $F8A3 + #$F8A4, // $F8A4 + #$F8A5, // $F8A5 + #$F8A6, // $F8A6 + #$F8A7, // $F8A7 + #$F8A8, // $F8A8 + #$F8A9, // $F8A9 + #$F8AA, // $F8AA + #$F8AB, // $F8AB + #$F8AC, // $F8AC + #$F8AD, // $F8AD + #$F8AE, // $F8AE + #$F8AF, // $F8AF + #$F8B0, // $F8B0 + #$F8B1, // $F8B1 + #$F8B2, // $F8B2 + #$F8B3, // $F8B3 + #$F8B4, // $F8B4 + #$F8B5, // $F8B5 + #$F8B6, // $F8B6 + #$F8B7, // $F8B7 + #$F8B8, // $F8B8 + #$F8B9, // $F8B9 + #$F8BA, // $F8BA + #$F8BB, // $F8BB + #$F8BC, // $F8BC + #$F8BD, // $F8BD + #$F8BE, // $F8BE + #$F8BF, // $F8BF + #$F8C0, // $F8C0 + #$F8C1, // $F8C1 + #$F8C2, // $F8C2 + #$F8C3, // $F8C3 + #$F8C4, // $F8C4 + #$F8C5, // $F8C5 + #$F8C6, // $F8C6 + #$F8C7, // $F8C7 + #$F8C8, // $F8C8 + #$F8C9, // $F8C9 + #$F8CA, // $F8CA + #$F8CB, // $F8CB + #$F8CC, // $F8CC + #$F8CD, // $F8CD + #$F8CE, // $F8CE + #$F8CF, // $F8CF + #$F8D0, // $F8D0 + #$F8D1, // $F8D1 + #$F8D2, // $F8D2 + #$F8D3, // $F8D3 + #$F8D4, // $F8D4 + #$F8D5, // $F8D5 + #$F8D6, // $F8D6 + #$F8D7, // $F8D7 + #$F8D8, // $F8D8 + #$F8D9, // $F8D9 + #$F8DA, // $F8DA + #$F8DB, // $F8DB + #$F8DC, // $F8DC + #$F8DD, // $F8DD + #$F8DE, // $F8DE + #$F8DF, // $F8DF + #$F8E0, // $F8E0 + #$F8E1, // $F8E1 + #$F8E2, // $F8E2 + #$F8E3, // $F8E3 + #$F8E4, // $F8E4 + #$F8E5, // $F8E5 + #$F8E6, // $F8E6 + #$F8E7, // $F8E7 + #$F8E8, // $F8E8 + #$F8E9, // $F8E9 + #$F8EA, // $F8EA + #$F8EB, // $F8EB + #$F8EC, // $F8EC + #$F8ED, // $F8ED + #$F8EE, // $F8EE + #$F8EF, // $F8EF + #$F8F0, // $F8F0 + #$F8F1, // $F8F1 + #$F8F2, // $F8F2 + #$F8F3, // $F8F3 + #$F8F4, // $F8F4 + #$F8F5, // $F8F5 + #$F8F6, // $F8F6 + #$F8F7, // $F8F7 + #$F8F8, // $F8F8 + #$F8F9, // $F8F9 + #$F8FA, // $F8FA + #$F8FB, // $F8FB + #$F8FC, // $F8FC + #$F8FD, // $F8FD + #$F8FE, // $F8FE + #$F8FF, // $F8FF + #$F900, // $F900 + #$F901, // $F901 + #$F902, // $F902 + #$F903, // $F903 + #$F904, // $F904 + #$F905, // $F905 + #$F906, // $F906 + #$F907, // $F907 + #$F908, // $F908 + #$F909, // $F909 + #$F90A, // $F90A + #$F90B, // $F90B + #$F90C, // $F90C + #$F90D, // $F90D + #$F90E, // $F90E + #$F90F, // $F90F + #$F910, // $F910 + #$F911, // $F911 + #$F912, // $F912 + #$F913, // $F913 + #$F914, // $F914 + #$F915, // $F915 + #$F916, // $F916 + #$F917, // $F917 + #$F918, // $F918 + #$F919, // $F919 + #$F91A, // $F91A + #$F91B, // $F91B + #$F91C, // $F91C + #$F91D, // $F91D + #$F91E, // $F91E + #$F91F, // $F91F + #$F920, // $F920 + #$F921, // $F921 + #$F922, // $F922 + #$F923, // $F923 + #$F924, // $F924 + #$F925, // $F925 + #$F926, // $F926 + #$F927, // $F927 + #$F928, // $F928 + #$F929, // $F929 + #$F92A, // $F92A + #$F92B, // $F92B + #$F92C, // $F92C + #$F92D, // $F92D + #$F92E, // $F92E + #$F92F, // $F92F + #$F930, // $F930 + #$F931, // $F931 + #$F932, // $F932 + #$F933, // $F933 + #$F934, // $F934 + #$F935, // $F935 + #$F936, // $F936 + #$F937, // $F937 + #$F938, // $F938 + #$F939, // $F939 + #$F93A, // $F93A + #$F93B, // $F93B + #$F93C, // $F93C + #$F93D, // $F93D + #$F93E, // $F93E + #$F93F, // $F93F + #$F940, // $F940 + #$F941, // $F941 + #$F942, // $F942 + #$F943, // $F943 + #$F944, // $F944 + #$F945, // $F945 + #$F946, // $F946 + #$F947, // $F947 + #$F948, // $F948 + #$F949, // $F949 + #$F94A, // $F94A + #$F94B, // $F94B + #$F94C, // $F94C + #$F94D, // $F94D + #$F94E, // $F94E + #$F94F, // $F94F + #$F950, // $F950 + #$F951, // $F951 + #$F952, // $F952 + #$F953, // $F953 + #$F954, // $F954 + #$F955, // $F955 + #$F956, // $F956 + #$F957, // $F957 + #$F958, // $F958 + #$F959, // $F959 + #$F95A, // $F95A + #$F95B, // $F95B + #$F95C, // $F95C + #$F95D, // $F95D + #$F95E, // $F95E + #$F95F, // $F95F + #$F960, // $F960 + #$F961, // $F961 + #$F962, // $F962 + #$F963, // $F963 + #$F964, // $F964 + #$F965, // $F965 + #$F966, // $F966 + #$F967, // $F967 + #$F968, // $F968 + #$F969, // $F969 + #$F96A, // $F96A + #$F96B, // $F96B + #$F96C, // $F96C + #$F96D, // $F96D + #$F96E, // $F96E + #$F96F, // $F96F + #$F970, // $F970 + #$F971, // $F971 + #$F972, // $F972 + #$F973, // $F973 + #$F974, // $F974 + #$F975, // $F975 + #$F976, // $F976 + #$F977, // $F977 + #$F978, // $F978 + #$F979, // $F979 + #$F97A, // $F97A + #$F97B, // $F97B + #$F97C, // $F97C + #$F97D, // $F97D + #$F97E, // $F97E + #$F97F, // $F97F + #$F980, // $F980 + #$F981, // $F981 + #$F982, // $F982 + #$F983, // $F983 + #$F984, // $F984 + #$F985, // $F985 + #$F986, // $F986 + #$F987, // $F987 + #$F988, // $F988 + #$F989, // $F989 + #$F98A, // $F98A + #$F98B, // $F98B + #$F98C, // $F98C + #$F98D, // $F98D + #$F98E, // $F98E + #$F98F, // $F98F + #$F990, // $F990 + #$F991, // $F991 + #$F992, // $F992 + #$F993, // $F993 + #$F994, // $F994 + #$F995, // $F995 + #$F996, // $F996 + #$F997, // $F997 + #$F998, // $F998 + #$F999, // $F999 + #$F99A, // $F99A + #$F99B, // $F99B + #$F99C, // $F99C + #$F99D, // $F99D + #$F99E, // $F99E + #$F99F, // $F99F + #$F9A0, // $F9A0 + #$F9A1, // $F9A1 + #$F9A2, // $F9A2 + #$F9A3, // $F9A3 + #$F9A4, // $F9A4 + #$F9A5, // $F9A5 + #$F9A6, // $F9A6 + #$F9A7, // $F9A7 + #$F9A8, // $F9A8 + #$F9A9, // $F9A9 + #$F9AA, // $F9AA + #$F9AB, // $F9AB + #$F9AC, // $F9AC + #$F9AD, // $F9AD + #$F9AE, // $F9AE + #$F9AF, // $F9AF + #$F9B0, // $F9B0 + #$F9B1, // $F9B1 + #$F9B2, // $F9B2 + #$F9B3, // $F9B3 + #$F9B4, // $F9B4 + #$F9B5, // $F9B5 + #$F9B6, // $F9B6 + #$F9B7, // $F9B7 + #$F9B8, // $F9B8 + #$F9B9, // $F9B9 + #$F9BA, // $F9BA + #$F9BB, // $F9BB + #$F9BC, // $F9BC + #$F9BD, // $F9BD + #$F9BE, // $F9BE + #$F9BF, // $F9BF + #$F9C0, // $F9C0 + #$F9C1, // $F9C1 + #$F9C2, // $F9C2 + #$F9C3, // $F9C3 + #$F9C4, // $F9C4 + #$F9C5, // $F9C5 + #$F9C6, // $F9C6 + #$F9C7, // $F9C7 + #$F9C8, // $F9C8 + #$F9C9, // $F9C9 + #$F9CA, // $F9CA + #$F9CB, // $F9CB + #$F9CC, // $F9CC + #$F9CD, // $F9CD + #$F9CE, // $F9CE + #$F9CF, // $F9CF + #$F9D0, // $F9D0 + #$F9D1, // $F9D1 + #$F9D2, // $F9D2 + #$F9D3, // $F9D3 + #$F9D4, // $F9D4 + #$F9D5, // $F9D5 + #$F9D6, // $F9D6 + #$F9D7, // $F9D7 + #$F9D8, // $F9D8 + #$F9D9, // $F9D9 + #$F9DA, // $F9DA + #$F9DB, // $F9DB + #$F9DC, // $F9DC + #$F9DD, // $F9DD + #$F9DE, // $F9DE + #$F9DF, // $F9DF + #$F9E0, // $F9E0 + #$F9E1, // $F9E1 + #$F9E2, // $F9E2 + #$F9E3, // $F9E3 + #$F9E4, // $F9E4 + #$F9E5, // $F9E5 + #$F9E6, // $F9E6 + #$F9E7, // $F9E7 + #$F9E8, // $F9E8 + #$F9E9, // $F9E9 + #$F9EA, // $F9EA + #$F9EB, // $F9EB + #$F9EC, // $F9EC + #$F9ED, // $F9ED + #$F9EE, // $F9EE + #$F9EF, // $F9EF + #$F9F0, // $F9F0 + #$F9F1, // $F9F1 + #$F9F2, // $F9F2 + #$F9F3, // $F9F3 + #$F9F4, // $F9F4 + #$F9F5, // $F9F5 + #$F9F6, // $F9F6 + #$F9F7, // $F9F7 + #$F9F8, // $F9F8 + #$F9F9, // $F9F9 + #$F9FA, // $F9FA + #$F9FB, // $F9FB + #$F9FC, // $F9FC + #$F9FD, // $F9FD + #$F9FE, // $F9FE + #$F9FF, // $F9FF + #$FA00, // $FA00 + #$FA01, // $FA01 + #$FA02, // $FA02 + #$FA03, // $FA03 + #$FA04, // $FA04 + #$FA05, // $FA05 + #$FA06, // $FA06 + #$FA07, // $FA07 + #$FA08, // $FA08 + #$FA09, // $FA09 + #$FA0A, // $FA0A + #$FA0B, // $FA0B + #$FA0C, // $FA0C + #$FA0D, // $FA0D + #$FA0E, // $FA0E + #$FA0F, // $FA0F + #$FA10, // $FA10 + #$FA11, // $FA11 + #$FA12, // $FA12 + #$FA13, // $FA13 + #$FA14, // $FA14 + #$FA15, // $FA15 + #$FA16, // $FA16 + #$FA17, // $FA17 + #$FA18, // $FA18 + #$FA19, // $FA19 + #$FA1A, // $FA1A + #$FA1B, // $FA1B + #$FA1C, // $FA1C + #$FA1D, // $FA1D + #$FA1E, // $FA1E + #$FA1F, // $FA1F + #$FA20, // $FA20 + #$FA21, // $FA21 + #$FA22, // $FA22 + #$FA23, // $FA23 + #$FA24, // $FA24 + #$FA25, // $FA25 + #$FA26, // $FA26 + #$FA27, // $FA27 + #$FA28, // $FA28 + #$FA29, // $FA29 + #$FA2A, // $FA2A + #$FA2B, // $FA2B + #$FA2C, // $FA2C + #$FA2D, // $FA2D + #$FA2E, // $FA2E + #$FA2F, // $FA2F + #$FA30, // $FA30 + #$FA31, // $FA31 + #$FA32, // $FA32 + #$FA33, // $FA33 + #$FA34, // $FA34 + #$FA35, // $FA35 + #$FA36, // $FA36 + #$FA37, // $FA37 + #$FA38, // $FA38 + #$FA39, // $FA39 + #$FA3A, // $FA3A + #$FA3B, // $FA3B + #$FA3C, // $FA3C + #$FA3D, // $FA3D + #$FA3E, // $FA3E + #$FA3F, // $FA3F + #$FA40, // $FA40 + #$FA41, // $FA41 + #$FA42, // $FA42 + #$FA43, // $FA43 + #$FA44, // $FA44 + #$FA45, // $FA45 + #$FA46, // $FA46 + #$FA47, // $FA47 + #$FA48, // $FA48 + #$FA49, // $FA49 + #$FA4A, // $FA4A + #$FA4B, // $FA4B + #$FA4C, // $FA4C + #$FA4D, // $FA4D + #$FA4E, // $FA4E + #$FA4F, // $FA4F + #$FA50, // $FA50 + #$FA51, // $FA51 + #$FA52, // $FA52 + #$FA53, // $FA53 + #$FA54, // $FA54 + #$FA55, // $FA55 + #$FA56, // $FA56 + #$FA57, // $FA57 + #$FA58, // $FA58 + #$FA59, // $FA59 + #$FA5A, // $FA5A + #$FA5B, // $FA5B + #$FA5C, // $FA5C + #$FA5D, // $FA5D + #$FA5E, // $FA5E + #$FA5F, // $FA5F + #$FA60, // $FA60 + #$FA61, // $FA61 + #$FA62, // $FA62 + #$FA63, // $FA63 + #$FA64, // $FA64 + #$FA65, // $FA65 + #$FA66, // $FA66 + #$FA67, // $FA67 + #$FA68, // $FA68 + #$FA69, // $FA69 + #$FA6A, // $FA6A + #$FA6B, // $FA6B + #$FA6C, // $FA6C + #$FA6D, // $FA6D + #$FA6E, // $FA6E + #$FA6F, // $FA6F + #$FA70, // $FA70 + #$FA71, // $FA71 + #$FA72, // $FA72 + #$FA73, // $FA73 + #$FA74, // $FA74 + #$FA75, // $FA75 + #$FA76, // $FA76 + #$FA77, // $FA77 + #$FA78, // $FA78 + #$FA79, // $FA79 + #$FA7A, // $FA7A + #$FA7B, // $FA7B + #$FA7C, // $FA7C + #$FA7D, // $FA7D + #$FA7E, // $FA7E + #$FA7F, // $FA7F + #$FA80, // $FA80 + #$FA81, // $FA81 + #$FA82, // $FA82 + #$FA83, // $FA83 + #$FA84, // $FA84 + #$FA85, // $FA85 + #$FA86, // $FA86 + #$FA87, // $FA87 + #$FA88, // $FA88 + #$FA89, // $FA89 + #$FA8A, // $FA8A + #$FA8B, // $FA8B + #$FA8C, // $FA8C + #$FA8D, // $FA8D + #$FA8E, // $FA8E + #$FA8F, // $FA8F + #$FA90, // $FA90 + #$FA91, // $FA91 + #$FA92, // $FA92 + #$FA93, // $FA93 + #$FA94, // $FA94 + #$FA95, // $FA95 + #$FA96, // $FA96 + #$FA97, // $FA97 + #$FA98, // $FA98 + #$FA99, // $FA99 + #$FA9A, // $FA9A + #$FA9B, // $FA9B + #$FA9C, // $FA9C + #$FA9D, // $FA9D + #$FA9E, // $FA9E + #$FA9F, // $FA9F + #$FAA0, // $FAA0 + #$FAA1, // $FAA1 + #$FAA2, // $FAA2 + #$FAA3, // $FAA3 + #$FAA4, // $FAA4 + #$FAA5, // $FAA5 + #$FAA6, // $FAA6 + #$FAA7, // $FAA7 + #$FAA8, // $FAA8 + #$FAA9, // $FAA9 + #$FAAA, // $FAAA + #$FAAB, // $FAAB + #$FAAC, // $FAAC + #$FAAD, // $FAAD + #$FAAE, // $FAAE + #$FAAF, // $FAAF + #$FAB0, // $FAB0 + #$FAB1, // $FAB1 + #$FAB2, // $FAB2 + #$FAB3, // $FAB3 + #$FAB4, // $FAB4 + #$FAB5, // $FAB5 + #$FAB6, // $FAB6 + #$FAB7, // $FAB7 + #$FAB8, // $FAB8 + #$FAB9, // $FAB9 + #$FABA, // $FABA + #$FABB, // $FABB + #$FABC, // $FABC + #$FABD, // $FABD + #$FABE, // $FABE + #$FABF, // $FABF + #$FAC0, // $FAC0 + #$FAC1, // $FAC1 + #$FAC2, // $FAC2 + #$FAC3, // $FAC3 + #$FAC4, // $FAC4 + #$FAC5, // $FAC5 + #$FAC6, // $FAC6 + #$FAC7, // $FAC7 + #$FAC8, // $FAC8 + #$FAC9, // $FAC9 + #$FACA, // $FACA + #$FACB, // $FACB + #$FACC, // $FACC + #$FACD, // $FACD + #$FACE, // $FACE + #$FACF, // $FACF + #$FAD0, // $FAD0 + #$FAD1, // $FAD1 + #$FAD2, // $FAD2 + #$FAD3, // $FAD3 + #$FAD4, // $FAD4 + #$FAD5, // $FAD5 + #$FAD6, // $FAD6 + #$FAD7, // $FAD7 + #$FAD8, // $FAD8 + #$FAD9, // $FAD9 + #$FADA, // $FADA + #$FADB, // $FADB + #$FADC, // $FADC + #$FADD, // $FADD + #$FADE, // $FADE + #$FADF, // $FADF + #$FAE0, // $FAE0 + #$FAE1, // $FAE1 + #$FAE2, // $FAE2 + #$FAE3, // $FAE3 + #$FAE4, // $FAE4 + #$FAE5, // $FAE5 + #$FAE6, // $FAE6 + #$FAE7, // $FAE7 + #$FAE8, // $FAE8 + #$FAE9, // $FAE9 + #$FAEA, // $FAEA + #$FAEB, // $FAEB + #$FAEC, // $FAEC + #$FAED, // $FAED + #$FAEE, // $FAEE + #$FAEF, // $FAEF + #$FAF0, // $FAF0 + #$FAF1, // $FAF1 + #$FAF2, // $FAF2 + #$FAF3, // $FAF3 + #$FAF4, // $FAF4 + #$FAF5, // $FAF5 + #$FAF6, // $FAF6 + #$FAF7, // $FAF7 + #$FAF8, // $FAF8 + #$FAF9, // $FAF9 + #$FAFA, // $FAFA + #$FAFB, // $FAFB + #$FAFC, // $FAFC + #$FAFD, // $FAFD + #$FAFE, // $FAFE + #$FAFF, // $FAFF + #$FB00, // $FB00 + #$FB01, // $FB01 + #$FB02, // $FB02 + #$FB03, // $FB03 + #$FB04, // $FB04 + #$FB05, // $FB05 + #$FB06, // $FB06 + #$FB07, // $FB07 + #$FB08, // $FB08 + #$FB09, // $FB09 + #$FB0A, // $FB0A + #$FB0B, // $FB0B + #$FB0C, // $FB0C + #$FB0D, // $FB0D + #$FB0E, // $FB0E + #$FB0F, // $FB0F + #$FB10, // $FB10 + #$FB11, // $FB11 + #$FB12, // $FB12 + #$FB13, // $FB13 + #$FB14, // $FB14 + #$FB15, // $FB15 + #$FB16, // $FB16 + #$FB17, // $FB17 + #$FB18, // $FB18 + #$FB19, // $FB19 + #$FB1A, // $FB1A + #$FB1B, // $FB1B + #$FB1C, // $FB1C + #$FB1D, // $FB1D + #$FB1E, // $FB1E + #$FB1F, // $FB1F + #$FB20, // $FB20 + #$FB21, // $FB21 + #$FB22, // $FB22 + #$FB23, // $FB23 + #$FB24, // $FB24 + #$FB25, // $FB25 + #$FB26, // $FB26 + #$FB27, // $FB27 + #$FB28, // $FB28 + #$FB29, // $FB29 + #$FB2A, // $FB2A + #$FB2B, // $FB2B + #$FB2C, // $FB2C + #$FB2D, // $FB2D + #$FB2E, // $FB2E + #$FB2F, // $FB2F + #$FB30, // $FB30 + #$FB31, // $FB31 + #$FB32, // $FB32 + #$FB33, // $FB33 + #$FB34, // $FB34 + #$FB35, // $FB35 + #$FB36, // $FB36 + #$FB37, // $FB37 + #$FB38, // $FB38 + #$FB39, // $FB39 + #$FB3A, // $FB3A + #$FB3B, // $FB3B + #$FB3C, // $FB3C + #$FB3D, // $FB3D + #$FB3E, // $FB3E + #$FB3F, // $FB3F + #$FB40, // $FB40 + #$FB41, // $FB41 + #$FB42, // $FB42 + #$FB43, // $FB43 + #$FB44, // $FB44 + #$FB45, // $FB45 + #$FB46, // $FB46 + #$FB47, // $FB47 + #$FB48, // $FB48 + #$FB49, // $FB49 + #$FB4A, // $FB4A + #$FB4B, // $FB4B + #$FB4C, // $FB4C + #$FB4D, // $FB4D + #$FB4E, // $FB4E + #$FB4F, // $FB4F + #$FB50, // $FB50 + #$FB51, // $FB51 + #$FB52, // $FB52 + #$FB53, // $FB53 + #$FB54, // $FB54 + #$FB55, // $FB55 + #$FB56, // $FB56 + #$FB57, // $FB57 + #$FB58, // $FB58 + #$FB59, // $FB59 + #$FB5A, // $FB5A + #$FB5B, // $FB5B + #$FB5C, // $FB5C + #$FB5D, // $FB5D + #$FB5E, // $FB5E + #$FB5F, // $FB5F + #$FB60, // $FB60 + #$FB61, // $FB61 + #$FB62, // $FB62 + #$FB63, // $FB63 + #$FB64, // $FB64 + #$FB65, // $FB65 + #$FB66, // $FB66 + #$FB67, // $FB67 + #$FB68, // $FB68 + #$FB69, // $FB69 + #$FB6A, // $FB6A + #$FB6B, // $FB6B + #$FB6C, // $FB6C + #$FB6D, // $FB6D + #$FB6E, // $FB6E + #$FB6F, // $FB6F + #$FB70, // $FB70 + #$FB71, // $FB71 + #$FB72, // $FB72 + #$FB73, // $FB73 + #$FB74, // $FB74 + #$FB75, // $FB75 + #$FB76, // $FB76 + #$FB77, // $FB77 + #$FB78, // $FB78 + #$FB79, // $FB79 + #$FB7A, // $FB7A + #$FB7B, // $FB7B + #$FB7C, // $FB7C + #$FB7D, // $FB7D + #$FB7E, // $FB7E + #$FB7F, // $FB7F + #$FB80, // $FB80 + #$FB81, // $FB81 + #$FB82, // $FB82 + #$FB83, // $FB83 + #$FB84, // $FB84 + #$FB85, // $FB85 + #$FB86, // $FB86 + #$FB87, // $FB87 + #$FB88, // $FB88 + #$FB89, // $FB89 + #$FB8A, // $FB8A + #$FB8B, // $FB8B + #$FB8C, // $FB8C + #$FB8D, // $FB8D + #$FB8E, // $FB8E + #$FB8F, // $FB8F + #$FB90, // $FB90 + #$FB91, // $FB91 + #$FB92, // $FB92 + #$FB93, // $FB93 + #$FB94, // $FB94 + #$FB95, // $FB95 + #$FB96, // $FB96 + #$FB97, // $FB97 + #$FB98, // $FB98 + #$FB99, // $FB99 + #$FB9A, // $FB9A + #$FB9B, // $FB9B + #$FB9C, // $FB9C + #$FB9D, // $FB9D + #$FB9E, // $FB9E + #$FB9F, // $FB9F + #$FBA0, // $FBA0 + #$FBA1, // $FBA1 + #$FBA2, // $FBA2 + #$FBA3, // $FBA3 + #$FBA4, // $FBA4 + #$FBA5, // $FBA5 + #$FBA6, // $FBA6 + #$FBA7, // $FBA7 + #$FBA8, // $FBA8 + #$FBA9, // $FBA9 + #$FBAA, // $FBAA + #$FBAB, // $FBAB + #$FBAC, // $FBAC + #$FBAD, // $FBAD + #$FBAE, // $FBAE + #$FBAF, // $FBAF + #$FBB0, // $FBB0 + #$FBB1, // $FBB1 + #$FBB2, // $FBB2 + #$FBB3, // $FBB3 + #$FBB4, // $FBB4 + #$FBB5, // $FBB5 + #$FBB6, // $FBB6 + #$FBB7, // $FBB7 + #$FBB8, // $FBB8 + #$FBB9, // $FBB9 + #$FBBA, // $FBBA + #$FBBB, // $FBBB + #$FBBC, // $FBBC + #$FBBD, // $FBBD + #$FBBE, // $FBBE + #$FBBF, // $FBBF + #$FBC0, // $FBC0 + #$FBC1, // $FBC1 + #$FBC2, // $FBC2 + #$FBC3, // $FBC3 + #$FBC4, // $FBC4 + #$FBC5, // $FBC5 + #$FBC6, // $FBC6 + #$FBC7, // $FBC7 + #$FBC8, // $FBC8 + #$FBC9, // $FBC9 + #$FBCA, // $FBCA + #$FBCB, // $FBCB + #$FBCC, // $FBCC + #$FBCD, // $FBCD + #$FBCE, // $FBCE + #$FBCF, // $FBCF + #$FBD0, // $FBD0 + #$FBD1, // $FBD1 + #$FBD2, // $FBD2 + #$FBD3, // $FBD3 + #$FBD4, // $FBD4 + #$FBD5, // $FBD5 + #$FBD6, // $FBD6 + #$FBD7, // $FBD7 + #$FBD8, // $FBD8 + #$FBD9, // $FBD9 + #$FBDA, // $FBDA + #$FBDB, // $FBDB + #$FBDC, // $FBDC + #$FBDD, // $FBDD + #$FBDE, // $FBDE + #$FBDF, // $FBDF + #$FBE0, // $FBE0 + #$FBE1, // $FBE1 + #$FBE2, // $FBE2 + #$FBE3, // $FBE3 + #$FBE4, // $FBE4 + #$FBE5, // $FBE5 + #$FBE6, // $FBE6 + #$FBE7, // $FBE7 + #$FBE8, // $FBE8 + #$FBE9, // $FBE9 + #$FBEA, // $FBEA + #$FBEB, // $FBEB + #$FBEC, // $FBEC + #$FBED, // $FBED + #$FBEE, // $FBEE + #$FBEF, // $FBEF + #$FBF0, // $FBF0 + #$FBF1, // $FBF1 + #$FBF2, // $FBF2 + #$FBF3, // $FBF3 + #$FBF4, // $FBF4 + #$FBF5, // $FBF5 + #$FBF6, // $FBF6 + #$FBF7, // $FBF7 + #$FBF8, // $FBF8 + #$FBF9, // $FBF9 + #$FBFA, // $FBFA + #$FBFB, // $FBFB + #$FBFC, // $FBFC + #$FBFD, // $FBFD + #$FBFE, // $FBFE + #$FBFF, // $FBFF + #$FC00, // $FC00 + #$FC01, // $FC01 + #$FC02, // $FC02 + #$FC03, // $FC03 + #$FC04, // $FC04 + #$FC05, // $FC05 + #$FC06, // $FC06 + #$FC07, // $FC07 + #$FC08, // $FC08 + #$FC09, // $FC09 + #$FC0A, // $FC0A + #$FC0B, // $FC0B + #$FC0C, // $FC0C + #$FC0D, // $FC0D + #$FC0E, // $FC0E + #$FC0F, // $FC0F + #$FC10, // $FC10 + #$FC11, // $FC11 + #$FC12, // $FC12 + #$FC13, // $FC13 + #$FC14, // $FC14 + #$FC15, // $FC15 + #$FC16, // $FC16 + #$FC17, // $FC17 + #$FC18, // $FC18 + #$FC19, // $FC19 + #$FC1A, // $FC1A + #$FC1B, // $FC1B + #$FC1C, // $FC1C + #$FC1D, // $FC1D + #$FC1E, // $FC1E + #$FC1F, // $FC1F + #$FC20, // $FC20 + #$FC21, // $FC21 + #$FC22, // $FC22 + #$FC23, // $FC23 + #$FC24, // $FC24 + #$FC25, // $FC25 + #$FC26, // $FC26 + #$FC27, // $FC27 + #$FC28, // $FC28 + #$FC29, // $FC29 + #$FC2A, // $FC2A + #$FC2B, // $FC2B + #$FC2C, // $FC2C + #$FC2D, // $FC2D + #$FC2E, // $FC2E + #$FC2F, // $FC2F + #$FC30, // $FC30 + #$FC31, // $FC31 + #$FC32, // $FC32 + #$FC33, // $FC33 + #$FC34, // $FC34 + #$FC35, // $FC35 + #$FC36, // $FC36 + #$FC37, // $FC37 + #$FC38, // $FC38 + #$FC39, // $FC39 + #$FC3A, // $FC3A + #$FC3B, // $FC3B + #$FC3C, // $FC3C + #$FC3D, // $FC3D + #$FC3E, // $FC3E + #$FC3F, // $FC3F + #$FC40, // $FC40 + #$FC41, // $FC41 + #$FC42, // $FC42 + #$FC43, // $FC43 + #$FC44, // $FC44 + #$FC45, // $FC45 + #$FC46, // $FC46 + #$FC47, // $FC47 + #$FC48, // $FC48 + #$FC49, // $FC49 + #$FC4A, // $FC4A + #$FC4B, // $FC4B + #$FC4C, // $FC4C + #$FC4D, // $FC4D + #$FC4E, // $FC4E + #$FC4F, // $FC4F + #$FC50, // $FC50 + #$FC51, // $FC51 + #$FC52, // $FC52 + #$FC53, // $FC53 + #$FC54, // $FC54 + #$FC55, // $FC55 + #$FC56, // $FC56 + #$FC57, // $FC57 + #$FC58, // $FC58 + #$FC59, // $FC59 + #$FC5A, // $FC5A + #$FC5B, // $FC5B + #$FC5C, // $FC5C + #$FC5D, // $FC5D + #$FC5E, // $FC5E + #$FC5F, // $FC5F + #$FC60, // $FC60 + #$FC61, // $FC61 + #$FC62, // $FC62 + #$FC63, // $FC63 + #$FC64, // $FC64 + #$FC65, // $FC65 + #$FC66, // $FC66 + #$FC67, // $FC67 + #$FC68, // $FC68 + #$FC69, // $FC69 + #$FC6A, // $FC6A + #$FC6B, // $FC6B + #$FC6C, // $FC6C + #$FC6D, // $FC6D + #$FC6E, // $FC6E + #$FC6F, // $FC6F + #$FC70, // $FC70 + #$FC71, // $FC71 + #$FC72, // $FC72 + #$FC73, // $FC73 + #$FC74, // $FC74 + #$FC75, // $FC75 + #$FC76, // $FC76 + #$FC77, // $FC77 + #$FC78, // $FC78 + #$FC79, // $FC79 + #$FC7A, // $FC7A + #$FC7B, // $FC7B + #$FC7C, // $FC7C + #$FC7D, // $FC7D + #$FC7E, // $FC7E + #$FC7F, // $FC7F + #$FC80, // $FC80 + #$FC81, // $FC81 + #$FC82, // $FC82 + #$FC83, // $FC83 + #$FC84, // $FC84 + #$FC85, // $FC85 + #$FC86, // $FC86 + #$FC87, // $FC87 + #$FC88, // $FC88 + #$FC89, // $FC89 + #$FC8A, // $FC8A + #$FC8B, // $FC8B + #$FC8C, // $FC8C + #$FC8D, // $FC8D + #$FC8E, // $FC8E + #$FC8F, // $FC8F + #$FC90, // $FC90 + #$FC91, // $FC91 + #$FC92, // $FC92 + #$FC93, // $FC93 + #$FC94, // $FC94 + #$FC95, // $FC95 + #$FC96, // $FC96 + #$FC97, // $FC97 + #$FC98, // $FC98 + #$FC99, // $FC99 + #$FC9A, // $FC9A + #$FC9B, // $FC9B + #$FC9C, // $FC9C + #$FC9D, // $FC9D + #$FC9E, // $FC9E + #$FC9F, // $FC9F + #$FCA0, // $FCA0 + #$FCA1, // $FCA1 + #$FCA2, // $FCA2 + #$FCA3, // $FCA3 + #$FCA4, // $FCA4 + #$FCA5, // $FCA5 + #$FCA6, // $FCA6 + #$FCA7, // $FCA7 + #$FCA8, // $FCA8 + #$FCA9, // $FCA9 + #$FCAA, // $FCAA + #$FCAB, // $FCAB + #$FCAC, // $FCAC + #$FCAD, // $FCAD + #$FCAE, // $FCAE + #$FCAF, // $FCAF + #$FCB0, // $FCB0 + #$FCB1, // $FCB1 + #$FCB2, // $FCB2 + #$FCB3, // $FCB3 + #$FCB4, // $FCB4 + #$FCB5, // $FCB5 + #$FCB6, // $FCB6 + #$FCB7, // $FCB7 + #$FCB8, // $FCB8 + #$FCB9, // $FCB9 + #$FCBA, // $FCBA + #$FCBB, // $FCBB + #$FCBC, // $FCBC + #$FCBD, // $FCBD + #$FCBE, // $FCBE + #$FCBF, // $FCBF + #$FCC0, // $FCC0 + #$FCC1, // $FCC1 + #$FCC2, // $FCC2 + #$FCC3, // $FCC3 + #$FCC4, // $FCC4 + #$FCC5, // $FCC5 + #$FCC6, // $FCC6 + #$FCC7, // $FCC7 + #$FCC8, // $FCC8 + #$FCC9, // $FCC9 + #$FCCA, // $FCCA + #$FCCB, // $FCCB + #$FCCC, // $FCCC + #$FCCD, // $FCCD + #$FCCE, // $FCCE + #$FCCF, // $FCCF + #$FCD0, // $FCD0 + #$FCD1, // $FCD1 + #$FCD2, // $FCD2 + #$FCD3, // $FCD3 + #$FCD4, // $FCD4 + #$FCD5, // $FCD5 + #$FCD6, // $FCD6 + #$FCD7, // $FCD7 + #$FCD8, // $FCD8 + #$FCD9, // $FCD9 + #$FCDA, // $FCDA + #$FCDB, // $FCDB + #$FCDC, // $FCDC + #$FCDD, // $FCDD + #$FCDE, // $FCDE + #$FCDF, // $FCDF + #$FCE0, // $FCE0 + #$FCE1, // $FCE1 + #$FCE2, // $FCE2 + #$FCE3, // $FCE3 + #$FCE4, // $FCE4 + #$FCE5, // $FCE5 + #$FCE6, // $FCE6 + #$FCE7, // $FCE7 + #$FCE8, // $FCE8 + #$FCE9, // $FCE9 + #$FCEA, // $FCEA + #$FCEB, // $FCEB + #$FCEC, // $FCEC + #$FCED, // $FCED + #$FCEE, // $FCEE + #$FCEF, // $FCEF + #$FCF0, // $FCF0 + #$FCF1, // $FCF1 + #$FCF2, // $FCF2 + #$FCF3, // $FCF3 + #$FCF4, // $FCF4 + #$FCF5, // $FCF5 + #$FCF6, // $FCF6 + #$FCF7, // $FCF7 + #$FCF8, // $FCF8 + #$FCF9, // $FCF9 + #$FCFA, // $FCFA + #$FCFB, // $FCFB + #$FCFC, // $FCFC + #$FCFD, // $FCFD + #$FCFE, // $FCFE + #$FCFF, // $FCFF + #$FD00, // $FD00 + #$FD01, // $FD01 + #$FD02, // $FD02 + #$FD03, // $FD03 + #$FD04, // $FD04 + #$FD05, // $FD05 + #$FD06, // $FD06 + #$FD07, // $FD07 + #$FD08, // $FD08 + #$FD09, // $FD09 + #$FD0A, // $FD0A + #$FD0B, // $FD0B + #$FD0C, // $FD0C + #$FD0D, // $FD0D + #$FD0E, // $FD0E + #$FD0F, // $FD0F + #$FD10, // $FD10 + #$FD11, // $FD11 + #$FD12, // $FD12 + #$FD13, // $FD13 + #$FD14, // $FD14 + #$FD15, // $FD15 + #$FD16, // $FD16 + #$FD17, // $FD17 + #$FD18, // $FD18 + #$FD19, // $FD19 + #$FD1A, // $FD1A + #$FD1B, // $FD1B + #$FD1C, // $FD1C + #$FD1D, // $FD1D + #$FD1E, // $FD1E + #$FD1F, // $FD1F + #$FD20, // $FD20 + #$FD21, // $FD21 + #$FD22, // $FD22 + #$FD23, // $FD23 + #$FD24, // $FD24 + #$FD25, // $FD25 + #$FD26, // $FD26 + #$FD27, // $FD27 + #$FD28, // $FD28 + #$FD29, // $FD29 + #$FD2A, // $FD2A + #$FD2B, // $FD2B + #$FD2C, // $FD2C + #$FD2D, // $FD2D + #$FD2E, // $FD2E + #$FD2F, // $FD2F + #$FD30, // $FD30 + #$FD31, // $FD31 + #$FD32, // $FD32 + #$FD33, // $FD33 + #$FD34, // $FD34 + #$FD35, // $FD35 + #$FD36, // $FD36 + #$FD37, // $FD37 + #$FD38, // $FD38 + #$FD39, // $FD39 + #$FD3A, // $FD3A + #$FD3B, // $FD3B + #$FD3C, // $FD3C + #$FD3D, // $FD3D + #$FD3E, // $FD3E + #$FD3F, // $FD3F + #$FD40, // $FD40 + #$FD41, // $FD41 + #$FD42, // $FD42 + #$FD43, // $FD43 + #$FD44, // $FD44 + #$FD45, // $FD45 + #$FD46, // $FD46 + #$FD47, // $FD47 + #$FD48, // $FD48 + #$FD49, // $FD49 + #$FD4A, // $FD4A + #$FD4B, // $FD4B + #$FD4C, // $FD4C + #$FD4D, // $FD4D + #$FD4E, // $FD4E + #$FD4F, // $FD4F + #$FD50, // $FD50 + #$FD51, // $FD51 + #$FD52, // $FD52 + #$FD53, // $FD53 + #$FD54, // $FD54 + #$FD55, // $FD55 + #$FD56, // $FD56 + #$FD57, // $FD57 + #$FD58, // $FD58 + #$FD59, // $FD59 + #$FD5A, // $FD5A + #$FD5B, // $FD5B + #$FD5C, // $FD5C + #$FD5D, // $FD5D + #$FD5E, // $FD5E + #$FD5F, // $FD5F + #$FD60, // $FD60 + #$FD61, // $FD61 + #$FD62, // $FD62 + #$FD63, // $FD63 + #$FD64, // $FD64 + #$FD65, // $FD65 + #$FD66, // $FD66 + #$FD67, // $FD67 + #$FD68, // $FD68 + #$FD69, // $FD69 + #$FD6A, // $FD6A + #$FD6B, // $FD6B + #$FD6C, // $FD6C + #$FD6D, // $FD6D + #$FD6E, // $FD6E + #$FD6F, // $FD6F + #$FD70, // $FD70 + #$FD71, // $FD71 + #$FD72, // $FD72 + #$FD73, // $FD73 + #$FD74, // $FD74 + #$FD75, // $FD75 + #$FD76, // $FD76 + #$FD77, // $FD77 + #$FD78, // $FD78 + #$FD79, // $FD79 + #$FD7A, // $FD7A + #$FD7B, // $FD7B + #$FD7C, // $FD7C + #$FD7D, // $FD7D + #$FD7E, // $FD7E + #$FD7F, // $FD7F + #$FD80, // $FD80 + #$FD81, // $FD81 + #$FD82, // $FD82 + #$FD83, // $FD83 + #$FD84, // $FD84 + #$FD85, // $FD85 + #$FD86, // $FD86 + #$FD87, // $FD87 + #$FD88, // $FD88 + #$FD89, // $FD89 + #$FD8A, // $FD8A + #$FD8B, // $FD8B + #$FD8C, // $FD8C + #$FD8D, // $FD8D + #$FD8E, // $FD8E + #$FD8F, // $FD8F + #$FD90, // $FD90 + #$FD91, // $FD91 + #$FD92, // $FD92 + #$FD93, // $FD93 + #$FD94, // $FD94 + #$FD95, // $FD95 + #$FD96, // $FD96 + #$FD97, // $FD97 + #$FD98, // $FD98 + #$FD99, // $FD99 + #$FD9A, // $FD9A + #$FD9B, // $FD9B + #$FD9C, // $FD9C + #$FD9D, // $FD9D + #$FD9E, // $FD9E + #$FD9F, // $FD9F + #$FDA0, // $FDA0 + #$FDA1, // $FDA1 + #$FDA2, // $FDA2 + #$FDA3, // $FDA3 + #$FDA4, // $FDA4 + #$FDA5, // $FDA5 + #$FDA6, // $FDA6 + #$FDA7, // $FDA7 + #$FDA8, // $FDA8 + #$FDA9, // $FDA9 + #$FDAA, // $FDAA + #$FDAB, // $FDAB + #$FDAC, // $FDAC + #$FDAD, // $FDAD + #$FDAE, // $FDAE + #$FDAF, // $FDAF + #$FDB0, // $FDB0 + #$FDB1, // $FDB1 + #$FDB2, // $FDB2 + #$FDB3, // $FDB3 + #$FDB4, // $FDB4 + #$FDB5, // $FDB5 + #$FDB6, // $FDB6 + #$FDB7, // $FDB7 + #$FDB8, // $FDB8 + #$FDB9, // $FDB9 + #$FDBA, // $FDBA + #$FDBB, // $FDBB + #$FDBC, // $FDBC + #$FDBD, // $FDBD + #$FDBE, // $FDBE + #$FDBF, // $FDBF + #$FDC0, // $FDC0 + #$FDC1, // $FDC1 + #$FDC2, // $FDC2 + #$FDC3, // $FDC3 + #$FDC4, // $FDC4 + #$FDC5, // $FDC5 + #$FDC6, // $FDC6 + #$FDC7, // $FDC7 + #$FDC8, // $FDC8 + #$FDC9, // $FDC9 + #$FDCA, // $FDCA + #$FDCB, // $FDCB + #$FDCC, // $FDCC + #$FDCD, // $FDCD + #$FDCE, // $FDCE + #$FDCF, // $FDCF + #$FDD0, // $FDD0 + #$FDD1, // $FDD1 + #$FDD2, // $FDD2 + #$FDD3, // $FDD3 + #$FDD4, // $FDD4 + #$FDD5, // $FDD5 + #$FDD6, // $FDD6 + #$FDD7, // $FDD7 + #$FDD8, // $FDD8 + #$FDD9, // $FDD9 + #$FDDA, // $FDDA + #$FDDB, // $FDDB + #$FDDC, // $FDDC + #$FDDD, // $FDDD + #$FDDE, // $FDDE + #$FDDF, // $FDDF + #$FDE0, // $FDE0 + #$FDE1, // $FDE1 + #$FDE2, // $FDE2 + #$FDE3, // $FDE3 + #$FDE4, // $FDE4 + #$FDE5, // $FDE5 + #$FDE6, // $FDE6 + #$FDE7, // $FDE7 + #$FDE8, // $FDE8 + #$FDE9, // $FDE9 + #$FDEA, // $FDEA + #$FDEB, // $FDEB + #$FDEC, // $FDEC + #$FDED, // $FDED + #$FDEE, // $FDEE + #$FDEF, // $FDEF + #$FDF0, // $FDF0 + #$FDF1, // $FDF1 + #$FDF2, // $FDF2 + #$FDF3, // $FDF3 + #$FDF4, // $FDF4 + #$FDF5, // $FDF5 + #$FDF6, // $FDF6 + #$FDF7, // $FDF7 + #$FDF8, // $FDF8 + #$FDF9, // $FDF9 + #$FDFA, // $FDFA + #$FDFB, // $FDFB + #$FDFC, // $FDFC + #$FDFD, // $FDFD + #$FDFE, // $FDFE + #$FDFF, // $FDFF + #$FE00, // $FE00 + #$FE01, // $FE01 + #$FE02, // $FE02 + #$FE03, // $FE03 + #$FE04, // $FE04 + #$FE05, // $FE05 + #$FE06, // $FE06 + #$FE07, // $FE07 + #$FE08, // $FE08 + #$FE09, // $FE09 + #$FE0A, // $FE0A + #$FE0B, // $FE0B + #$FE0C, // $FE0C + #$FE0D, // $FE0D + #$FE0E, // $FE0E + #$FE0F, // $FE0F + #$FE10, // $FE10 + #$FE11, // $FE11 + #$FE12, // $FE12 + #$FE13, // $FE13 + #$FE14, // $FE14 + #$FE15, // $FE15 + #$FE16, // $FE16 + #$FE17, // $FE17 + #$FE18, // $FE18 + #$FE19, // $FE19 + #$FE1A, // $FE1A + #$FE1B, // $FE1B + #$FE1C, // $FE1C + #$FE1D, // $FE1D + #$FE1E, // $FE1E + #$FE1F, // $FE1F + #$FE20, // $FE20 + #$FE21, // $FE21 + #$FE22, // $FE22 + #$FE23, // $FE23 + #$FE24, // $FE24 + #$FE25, // $FE25 + #$FE26, // $FE26 + #$FE27, // $FE27 + #$FE28, // $FE28 + #$FE29, // $FE29 + #$FE2A, // $FE2A + #$FE2B, // $FE2B + #$FE2C, // $FE2C + #$FE2D, // $FE2D + #$FE2E, // $FE2E + #$FE2F, // $FE2F + #$FE30, // $FE30 + #$FE31, // $FE31 + #$FE32, // $FE32 + #$FE33, // $FE33 + #$FE34, // $FE34 + #$FE35, // $FE35 + #$FE36, // $FE36 + #$FE37, // $FE37 + #$FE38, // $FE38 + #$FE39, // $FE39 + #$FE3A, // $FE3A + #$FE3B, // $FE3B + #$FE3C, // $FE3C + #$FE3D, // $FE3D + #$FE3E, // $FE3E + #$FE3F, // $FE3F + #$FE40, // $FE40 + #$FE41, // $FE41 + #$FE42, // $FE42 + #$FE43, // $FE43 + #$FE44, // $FE44 + #$FE45, // $FE45 + #$FE46, // $FE46 + #$FE47, // $FE47 + #$FE48, // $FE48 + #$FE49, // $FE49 + #$FE4A, // $FE4A + #$FE4B, // $FE4B + #$FE4C, // $FE4C + #$FE4D, // $FE4D + #$FE4E, // $FE4E + #$FE4F, // $FE4F + #$FE50, // $FE50 + #$FE51, // $FE51 + #$FE52, // $FE52 + #$FE53, // $FE53 + #$FE54, // $FE54 + #$FE55, // $FE55 + #$FE56, // $FE56 + #$FE57, // $FE57 + #$FE58, // $FE58 + #$FE59, // $FE59 + #$FE5A, // $FE5A + #$FE5B, // $FE5B + #$FE5C, // $FE5C + #$FE5D, // $FE5D + #$FE5E, // $FE5E + #$FE5F, // $FE5F + #$FE60, // $FE60 + #$FE61, // $FE61 + #$FE62, // $FE62 + #$FE63, // $FE63 + #$FE64, // $FE64 + #$FE65, // $FE65 + #$FE66, // $FE66 + #$FE67, // $FE67 + #$FE68, // $FE68 + #$FE69, // $FE69 + #$FE6A, // $FE6A + #$FE6B, // $FE6B + #$FE6C, // $FE6C + #$FE6D, // $FE6D + #$FE6E, // $FE6E + #$FE6F, // $FE6F + #$FE70, // $FE70 + #$FE71, // $FE71 + #$FE72, // $FE72 + #$FE73, // $FE73 + #$FE74, // $FE74 + #$FE75, // $FE75 + #$FE76, // $FE76 + #$FE77, // $FE77 + #$FE78, // $FE78 + #$FE79, // $FE79 + #$FE7A, // $FE7A + #$FE7B, // $FE7B + #$FE7C, // $FE7C + #$FE7D, // $FE7D + #$FE7E, // $FE7E + #$FE7F, // $FE7F + #$FE80, // $FE80 + #$FE81, // $FE81 + #$FE82, // $FE82 + #$FE83, // $FE83 + #$FE84, // $FE84 + #$FE85, // $FE85 + #$FE86, // $FE86 + #$FE87, // $FE87 + #$FE88, // $FE88 + #$FE89, // $FE89 + #$FE8A, // $FE8A + #$FE8B, // $FE8B + #$FE8C, // $FE8C + #$FE8D, // $FE8D + #$FE8E, // $FE8E + #$FE8F, // $FE8F + #$FE90, // $FE90 + #$FE91, // $FE91 + #$FE92, // $FE92 + #$FE93, // $FE93 + #$FE94, // $FE94 + #$FE95, // $FE95 + #$FE96, // $FE96 + #$FE97, // $FE97 + #$FE98, // $FE98 + #$FE99, // $FE99 + #$FE9A, // $FE9A + #$FE9B, // $FE9B + #$FE9C, // $FE9C + #$FE9D, // $FE9D + #$FE9E, // $FE9E + #$FE9F, // $FE9F + #$FEA0, // $FEA0 + #$FEA1, // $FEA1 + #$FEA2, // $FEA2 + #$FEA3, // $FEA3 + #$FEA4, // $FEA4 + #$FEA5, // $FEA5 + #$FEA6, // $FEA6 + #$FEA7, // $FEA7 + #$FEA8, // $FEA8 + #$FEA9, // $FEA9 + #$FEAA, // $FEAA + #$FEAB, // $FEAB + #$FEAC, // $FEAC + #$FEAD, // $FEAD + #$FEAE, // $FEAE + #$FEAF, // $FEAF + #$FEB0, // $FEB0 + #$FEB1, // $FEB1 + #$FEB2, // $FEB2 + #$FEB3, // $FEB3 + #$FEB4, // $FEB4 + #$FEB5, // $FEB5 + #$FEB6, // $FEB6 + #$FEB7, // $FEB7 + #$FEB8, // $FEB8 + #$FEB9, // $FEB9 + #$FEBA, // $FEBA + #$FEBB, // $FEBB + #$FEBC, // $FEBC + #$FEBD, // $FEBD + #$FEBE, // $FEBE + #$FEBF, // $FEBF + #$FEC0, // $FEC0 + #$FEC1, // $FEC1 + #$FEC2, // $FEC2 + #$FEC3, // $FEC3 + #$FEC4, // $FEC4 + #$FEC5, // $FEC5 + #$FEC6, // $FEC6 + #$FEC7, // $FEC7 + #$FEC8, // $FEC8 + #$FEC9, // $FEC9 + #$FECA, // $FECA + #$FECB, // $FECB + #$FECC, // $FECC + #$FECD, // $FECD + #$FECE, // $FECE + #$FECF, // $FECF + #$FED0, // $FED0 + #$FED1, // $FED1 + #$FED2, // $FED2 + #$FED3, // $FED3 + #$FED4, // $FED4 + #$FED5, // $FED5 + #$FED6, // $FED6 + #$FED7, // $FED7 + #$FED8, // $FED8 + #$FED9, // $FED9 + #$FEDA, // $FEDA + #$FEDB, // $FEDB + #$FEDC, // $FEDC + #$FEDD, // $FEDD + #$FEDE, // $FEDE + #$FEDF, // $FEDF + #$FEE0, // $FEE0 + #$FEE1, // $FEE1 + #$FEE2, // $FEE2 + #$FEE3, // $FEE3 + #$FEE4, // $FEE4 + #$FEE5, // $FEE5 + #$FEE6, // $FEE6 + #$FEE7, // $FEE7 + #$FEE8, // $FEE8 + #$FEE9, // $FEE9 + #$FEEA, // $FEEA + #$FEEB, // $FEEB + #$FEEC, // $FEEC + #$FEED, // $FEED + #$FEEE, // $FEEE + #$FEEF, // $FEEF + #$FEF0, // $FEF0 + #$FEF1, // $FEF1 + #$FEF2, // $FEF2 + #$FEF3, // $FEF3 + #$FEF4, // $FEF4 + #$FEF5, // $FEF5 + #$FEF6, // $FEF6 + #$FEF7, // $FEF7 + #$FEF8, // $FEF8 + #$FEF9, // $FEF9 + #$FEFA, // $FEFA + #$FEFB, // $FEFB + #$FEFC, // $FEFC + #$FEFD, // $FEFD + #$FEFE, // $FEFE + #$FEFF, // $FEFF + #$FF00, // $FF00 + #$FF01, // $FF01 + #$FF02, // $FF02 + #$FF03, // $FF03 + #$FF04, // $FF04 + #$FF05, // $FF05 + #$FF06, // $FF06 + #$FF07, // $FF07 + #$FF08, // $FF08 + #$FF09, // $FF09 + #$FF0A, // $FF0A + #$FF0B, // $FF0B + #$FF0C, // $FF0C + #$FF0D, // $FF0D + #$FF0E, // $FF0E + #$FF0F, // $FF0F + #$FF10, // $FF10 + #$FF11, // $FF11 + #$FF12, // $FF12 + #$FF13, // $FF13 + #$FF14, // $FF14 + #$FF15, // $FF15 + #$FF16, // $FF16 + #$FF17, // $FF17 + #$FF18, // $FF18 + #$FF19, // $FF19 + #$FF1A, // $FF1A + #$FF1B, // $FF1B + #$FF1C, // $FF1C + #$FF1D, // $FF1D + #$FF1E, // $FF1E + #$FF1F, // $FF1F + #$FF20, // $FF20 + #$FF21, // $FF21 + #$FF22, // $FF22 + #$FF23, // $FF23 + #$FF24, // $FF24 + #$FF25, // $FF25 + #$FF26, // $FF26 + #$FF27, // $FF27 + #$FF28, // $FF28 + #$FF29, // $FF29 + #$FF2A, // $FF2A + #$FF2B, // $FF2B + #$FF2C, // $FF2C + #$FF2D, // $FF2D + #$FF2E, // $FF2E + #$FF2F, // $FF2F + #$FF30, // $FF30 + #$FF31, // $FF31 + #$FF32, // $FF32 + #$FF33, // $FF33 + #$FF34, // $FF34 + #$FF35, // $FF35 + #$FF36, // $FF36 + #$FF37, // $FF37 + #$FF38, // $FF38 + #$FF39, // $FF39 + #$FF3A, // $FF3A + #$FF3B, // $FF3B + #$FF3C, // $FF3C + #$FF3D, // $FF3D + #$FF3E, // $FF3E + #$FF3F, // $FF3F + #$FF40, // $FF40 + #$FF21, // $FF41 + #$FF22, // $FF42 + #$FF23, // $FF43 + #$FF24, // $FF44 + #$FF25, // $FF45 + #$FF26, // $FF46 + #$FF27, // $FF47 + #$FF28, // $FF48 + #$FF29, // $FF49 + #$FF2A, // $FF4A + #$FF2B, // $FF4B + #$FF2C, // $FF4C + #$FF2D, // $FF4D + #$FF2E, // $FF4E + #$FF2F, // $FF4F + #$FF30, // $FF50 + #$FF31, // $FF51 + #$FF32, // $FF52 + #$FF33, // $FF53 + #$FF34, // $FF54 + #$FF35, // $FF55 + #$FF36, // $FF56 + #$FF37, // $FF57 + #$FF38, // $FF58 + #$FF39, // $FF59 + #$FF3A, // $FF5A + #$FF5B, // $FF5B + #$FF5C, // $FF5C + #$FF5D, // $FF5D + #$FF5E, // $FF5E + #$FF5F, // $FF5F + #$FF60, // $FF60 + #$FF61, // $FF61 + #$FF62, // $FF62 + #$FF63, // $FF63 + #$FF64, // $FF64 + #$FF65, // $FF65 + #$FF66, // $FF66 + #$FF67, // $FF67 + #$FF68, // $FF68 + #$FF69, // $FF69 + #$FF6A, // $FF6A + #$FF6B, // $FF6B + #$FF6C, // $FF6C + #$FF6D, // $FF6D + #$FF6E, // $FF6E + #$FF6F, // $FF6F + #$FF70, // $FF70 + #$FF71, // $FF71 + #$FF72, // $FF72 + #$FF73, // $FF73 + #$FF74, // $FF74 + #$FF75, // $FF75 + #$FF76, // $FF76 + #$FF77, // $FF77 + #$FF78, // $FF78 + #$FF79, // $FF79 + #$FF7A, // $FF7A + #$FF7B, // $FF7B + #$FF7C, // $FF7C + #$FF7D, // $FF7D + #$FF7E, // $FF7E + #$FF7F, // $FF7F + #$FF80, // $FF80 + #$FF81, // $FF81 + #$FF82, // $FF82 + #$FF83, // $FF83 + #$FF84, // $FF84 + #$FF85, // $FF85 + #$FF86, // $FF86 + #$FF87, // $FF87 + #$FF88, // $FF88 + #$FF89, // $FF89 + #$FF8A, // $FF8A + #$FF8B, // $FF8B + #$FF8C, // $FF8C + #$FF8D, // $FF8D + #$FF8E, // $FF8E + #$FF8F, // $FF8F + #$FF90, // $FF90 + #$FF91, // $FF91 + #$FF92, // $FF92 + #$FF93, // $FF93 + #$FF94, // $FF94 + #$FF95, // $FF95 + #$FF96, // $FF96 + #$FF97, // $FF97 + #$FF98, // $FF98 + #$FF99, // $FF99 + #$FF9A, // $FF9A + #$FF9B, // $FF9B + #$FF9C, // $FF9C + #$FF9D, // $FF9D + #$FF9E, // $FF9E + #$FF9F, // $FF9F + #$FFA0, // $FFA0 + #$FFA1, // $FFA1 + #$FFA2, // $FFA2 + #$FFA3, // $FFA3 + #$FFA4, // $FFA4 + #$FFA5, // $FFA5 + #$FFA6, // $FFA6 + #$FFA7, // $FFA7 + #$FFA8, // $FFA8 + #$FFA9, // $FFA9 + #$FFAA, // $FFAA + #$FFAB, // $FFAB + #$FFAC, // $FFAC + #$FFAD, // $FFAD + #$FFAE, // $FFAE + #$FFAF, // $FFAF + #$FFB0, // $FFB0 + #$FFB1, // $FFB1 + #$FFB2, // $FFB2 + #$FFB3, // $FFB3 + #$FFB4, // $FFB4 + #$FFB5, // $FFB5 + #$FFB6, // $FFB6 + #$FFB7, // $FFB7 + #$FFB8, // $FFB8 + #$FFB9, // $FFB9 + #$FFBA, // $FFBA + #$FFBB, // $FFBB + #$FFBC, // $FFBC + #$FFBD, // $FFBD + #$FFBE, // $FFBE + #$FFBF, // $FFBF + #$FFC0, // $FFC0 + #$FFC1, // $FFC1 + #$FFC2, // $FFC2 + #$FFC3, // $FFC3 + #$FFC4, // $FFC4 + #$FFC5, // $FFC5 + #$FFC6, // $FFC6 + #$FFC7, // $FFC7 + #$FFC8, // $FFC8 + #$FFC9, // $FFC9 + #$FFCA, // $FFCA + #$FFCB, // $FFCB + #$FFCC, // $FFCC + #$FFCD, // $FFCD + #$FFCE, // $FFCE + #$FFCF, // $FFCF + #$FFD0, // $FFD0 + #$FFD1, // $FFD1 + #$FFD2, // $FFD2 + #$FFD3, // $FFD3 + #$FFD4, // $FFD4 + #$FFD5, // $FFD5 + #$FFD6, // $FFD6 + #$FFD7, // $FFD7 + #$FFD8, // $FFD8 + #$FFD9, // $FFD9 + #$FFDA, // $FFDA + #$FFDB, // $FFDB + #$FFDC, // $FFDC + #$FFDD, // $FFDD + #$FFDE, // $FFDE + #$FFDF, // $FFDF + #$FFE0, // $FFE0 + #$FFE1, // $FFE1 + #$FFE2, // $FFE2 + #$FFE3, // $FFE3 + #$FFE4, // $FFE4 + #$FFE5, // $FFE5 + #$FFE6, // $FFE6 + #$FFE7, // $FFE7 + #$FFE8, // $FFE8 + #$FFE9, // $FFE9 + #$FFEA, // $FFEA + #$FFEB, // $FFEB + #$FFEC, // $FFEC + #$FFED, // $FFED + #$FFEE, // $FFEE + #$FFEF, // $FFEF + #$FFF0, // $FFF0 + #$FFF1, // $FFF1 + #$FFF2, // $FFF2 + #$FFF3, // $FFF3 + #$FFF4, // $FFF4 + #$FFF5, // $FFF5 + #$FFF6, // $FFF6 + #$FFF7, // $FFF7 + #$FFF8, // $FFF8 + #$FFF9, // $FFF9 + #$FFFA, // $FFFA + #$FFFB, // $FFFB + #$FFFC, // $FFFC + #$FFFD, // $FFFD + #$FFFE, // $FFFE + #$FFFF // $FFFF + ); + + CharLowerArray: packed array[0..$FFFF] of WideChar = ( + #$0000, // $0000 + #$0001, // $0001 + #$0002, // $0002 + #$0003, // $0003 + #$0004, // $0004 + #$0005, // $0005 + #$0006, // $0006 + #$0007, // $0007 + #$0008, // $0008 + #$0009, // $0009 + #$000A, // $000A + #$000B, // $000B + #$000C, // $000C + #$000D, // $000D + #$000E, // $000E + #$000F, // $000F + #$0010, // $0010 + #$0011, // $0011 + #$0012, // $0012 + #$0013, // $0013 + #$0014, // $0014 + #$0015, // $0015 + #$0016, // $0016 + #$0017, // $0017 + #$0018, // $0018 + #$0019, // $0019 + #$001A, // $001A + #$001B, // $001B + #$001C, // $001C + #$001D, // $001D + #$001E, // $001E + #$001F, // $001F + #$0020, // $0020 + #$0021, // $0021 + #$0022, // $0022 + #$0023, // $0023 + #$0024, // $0024 + #$0025, // $0025 + #$0026, // $0026 + #$0027, // $0027 + #$0028, // $0028 + #$0029, // $0029 + #$002A, // $002A + #$002B, // $002B + #$002C, // $002C + #$002D, // $002D + #$002E, // $002E + #$002F, // $002F + #$0030, // $0030 + #$0031, // $0031 + #$0032, // $0032 + #$0033, // $0033 + #$0034, // $0034 + #$0035, // $0035 + #$0036, // $0036 + #$0037, // $0037 + #$0038, // $0038 + #$0039, // $0039 + #$003A, // $003A + #$003B, // $003B + #$003C, // $003C + #$003D, // $003D + #$003E, // $003E + #$003F, // $003F + #$0040, // $0040 + #$0061, // $0041 + #$0062, // $0042 + #$0063, // $0043 + #$0064, // $0044 + #$0065, // $0045 + #$0066, // $0046 + #$0067, // $0047 + #$0068, // $0048 + #$0069, // $0049 + #$006A, // $004A + #$006B, // $004B + #$006C, // $004C + #$006D, // $004D + #$006E, // $004E + #$006F, // $004F + #$0070, // $0050 + #$0071, // $0051 + #$0072, // $0052 + #$0073, // $0053 + #$0074, // $0054 + #$0075, // $0055 + #$0076, // $0056 + #$0077, // $0057 + #$0078, // $0058 + #$0079, // $0059 + #$007A, // $005A + #$005B, // $005B + #$005C, // $005C + #$005D, // $005D + #$005E, // $005E + #$005F, // $005F + #$0060, // $0060 + #$0061, // $0061 + #$0062, // $0062 + #$0063, // $0063 + #$0064, // $0064 + #$0065, // $0065 + #$0066, // $0066 + #$0067, // $0067 + #$0068, // $0068 + #$0069, // $0069 + #$006A, // $006A + #$006B, // $006B + #$006C, // $006C + #$006D, // $006D + #$006E, // $006E + #$006F, // $006F + #$0070, // $0070 + #$0071, // $0071 + #$0072, // $0072 + #$0073, // $0073 + #$0074, // $0074 + #$0075, // $0075 + #$0076, // $0076 + #$0077, // $0077 + #$0078, // $0078 + #$0079, // $0079 + #$007A, // $007A + #$007B, // $007B + #$007C, // $007C + #$007D, // $007D + #$007E, // $007E + #$007F, // $007F + #$0080, // $0080 + #$0081, // $0081 + #$0082, // $0082 + #$0083, // $0083 + #$0084, // $0084 + #$0085, // $0085 + #$0086, // $0086 + #$0087, // $0087 + #$0088, // $0088 + #$0089, // $0089 + #$008A, // $008A + #$008B, // $008B + #$008C, // $008C + #$008D, // $008D + #$008E, // $008E + #$008F, // $008F + #$0090, // $0090 + #$0091, // $0091 + #$0092, // $0092 + #$0093, // $0093 + #$0094, // $0094 + #$0095, // $0095 + #$0096, // $0096 + #$0097, // $0097 + #$0098, // $0098 + #$0099, // $0099 + #$009A, // $009A + #$009B, // $009B + #$009C, // $009C + #$009D, // $009D + #$009E, // $009E + #$009F, // $009F + #$00A0, // $00A0 + #$00A1, // $00A1 + #$00A2, // $00A2 + #$00A3, // $00A3 + #$00A4, // $00A4 + #$00A5, // $00A5 + #$00A6, // $00A6 + #$00A7, // $00A7 + #$00A8, // $00A8 + #$00A9, // $00A9 + #$00AA, // $00AA + #$00AB, // $00AB + #$00AC, // $00AC + #$00AD, // $00AD + #$00AE, // $00AE + #$00AF, // $00AF + #$00B0, // $00B0 + #$00B1, // $00B1 + #$00B2, // $00B2 + #$00B3, // $00B3 + #$00B4, // $00B4 + #$00B5, // $00B5 + #$00B6, // $00B6 + #$00B7, // $00B7 + #$00B8, // $00B8 + #$00B9, // $00B9 + #$00BA, // $00BA + #$00BB, // $00BB + #$00BC, // $00BC + #$00BD, // $00BD + #$00BE, // $00BE + #$00BF, // $00BF + #$00E0, // $00C0 + #$00E1, // $00C1 + #$00E2, // $00C2 + #$00E3, // $00C3 + #$00E4, // $00C4 + #$00E5, // $00C5 + #$00E6, // $00C6 + #$00E7, // $00C7 + #$00E8, // $00C8 + #$00E9, // $00C9 + #$00EA, // $00CA + #$00EB, // $00CB + #$00EC, // $00CC + #$00ED, // $00CD + #$00EE, // $00CE + #$00EF, // $00CF + #$00F0, // $00D0 + #$00F1, // $00D1 + #$00F2, // $00D2 + #$00F3, // $00D3 + #$00F4, // $00D4 + #$00F5, // $00D5 + #$00F6, // $00D6 + #$00D7, // $00D7 + #$00F8, // $00D8 + #$00F9, // $00D9 + #$00FA, // $00DA + #$00FB, // $00DB + #$00FC, // $00DC + #$00FD, // $00DD + #$00FE, // $00DE + #$00DF, // $00DF + #$00E0, // $00E0 + #$00E1, // $00E1 + #$00E2, // $00E2 + #$00E3, // $00E3 + #$00E4, // $00E4 + #$00E5, // $00E5 + #$00E6, // $00E6 + #$00E7, // $00E7 + #$00E8, // $00E8 + #$00E9, // $00E9 + #$00EA, // $00EA + #$00EB, // $00EB + #$00EC, // $00EC + #$00ED, // $00ED + #$00EE, // $00EE + #$00EF, // $00EF + #$00F0, // $00F0 + #$00F1, // $00F1 + #$00F2, // $00F2 + #$00F3, // $00F3 + #$00F4, // $00F4 + #$00F5, // $00F5 + #$00F6, // $00F6 + #$00F7, // $00F7 + #$00F8, // $00F8 + #$00F9, // $00F9 + #$00FA, // $00FA + #$00FB, // $00FB + #$00FC, // $00FC + #$00FD, // $00FD + #$00FE, // $00FE + #$00FF, // $00FF + #$0101, // $0100 + #$0101, // $0101 + #$0103, // $0102 + #$0103, // $0103 + #$0105, // $0104 + #$0105, // $0105 + #$0107, // $0106 + #$0107, // $0107 + #$0109, // $0108 + #$0109, // $0109 + #$010B, // $010A + #$010B, // $010B + #$010D, // $010C + #$010D, // $010D + #$010F, // $010E + #$010F, // $010F + #$0111, // $0110 + #$0111, // $0111 + #$0113, // $0112 + #$0113, // $0113 + #$0115, // $0114 + #$0115, // $0115 + #$0117, // $0116 + #$0117, // $0117 + #$0119, // $0118 + #$0119, // $0119 + #$011B, // $011A + #$011B, // $011B + #$011D, // $011C + #$011D, // $011D + #$011F, // $011E + #$011F, // $011F + #$0121, // $0120 + #$0121, // $0121 + #$0123, // $0122 + #$0123, // $0123 + #$0125, // $0124 + #$0125, // $0125 + #$0127, // $0126 + #$0127, // $0127 + #$0129, // $0128 + #$0129, // $0129 + #$012B, // $012A + #$012B, // $012B + #$012D, // $012C + #$012D, // $012D + #$012F, // $012E + #$012F, // $012F + #$0069, // $0130 + #$0131, // $0131 + #$0133, // $0132 + #$0133, // $0133 + #$0135, // $0134 + #$0135, // $0135 + #$0137, // $0136 + #$0137, // $0137 + #$0138, // $0138 + #$013A, // $0139 + #$013A, // $013A + #$013C, // $013B + #$013C, // $013C + #$013E, // $013D + #$013E, // $013E + #$0140, // $013F + #$0140, // $0140 + #$0142, // $0141 + #$0142, // $0142 + #$0144, // $0143 + #$0144, // $0144 + #$0146, // $0145 + #$0146, // $0146 + #$0148, // $0147 + #$0148, // $0148 + #$0149, // $0149 + #$014B, // $014A + #$014B, // $014B + #$014D, // $014C + #$014D, // $014D + #$014F, // $014E + #$014F, // $014F + #$0151, // $0150 + #$0151, // $0151 + #$0153, // $0152 + #$0153, // $0153 + #$0155, // $0154 + #$0155, // $0155 + #$0157, // $0156 + #$0157, // $0157 + #$0159, // $0158 + #$0159, // $0159 + #$015B, // $015A + #$015B, // $015B + #$015D, // $015C + #$015D, // $015D + #$015F, // $015E + #$015F, // $015F + #$0161, // $0160 + #$0161, // $0161 + #$0163, // $0162 + #$0163, // $0163 + #$0165, // $0164 + #$0165, // $0165 + #$0167, // $0166 + #$0167, // $0167 + #$0169, // $0168 + #$0169, // $0169 + #$016B, // $016A + #$016B, // $016B + #$016D, // $016C + #$016D, // $016D + #$016F, // $016E + #$016F, // $016F + #$0171, // $0170 + #$0171, // $0171 + #$0173, // $0172 + #$0173, // $0173 + #$0175, // $0174 + #$0175, // $0175 + #$0177, // $0176 + #$0177, // $0177 + #$00FF, // $0178 + #$017A, // $0179 + #$017A, // $017A + #$017C, // $017B + #$017C, // $017C + #$017E, // $017D + #$017E, // $017E + #$017F, // $017F + #$0180, // $0180 + #$0253, // $0181 + #$0183, // $0182 + #$0183, // $0183 + #$0185, // $0184 + #$0185, // $0185 + #$0254, // $0186 + #$0188, // $0187 + #$0188, // $0188 + #$0256, // $0189 + #$0257, // $018A + #$018C, // $018B + #$018C, // $018C + #$018D, // $018D + #$01DD, // $018E + #$0259, // $018F + #$025B, // $0190 + #$0192, // $0191 + #$0192, // $0192 + #$0260, // $0193 + #$0263, // $0194 + #$0195, // $0195 + #$0269, // $0196 + #$0268, // $0197 + #$0199, // $0198 + #$0199, // $0199 + #$019A, // $019A + #$019B, // $019B + #$026F, // $019C + #$0272, // $019D + #$019E, // $019E + #$0275, // $019F + #$01A1, // $01A0 + #$01A1, // $01A1 + #$01A3, // $01A2 + #$01A3, // $01A3 + #$01A5, // $01A4 + #$01A5, // $01A5 + #$0280, // $01A6 + #$01A8, // $01A7 + #$01A8, // $01A8 + #$0283, // $01A9 + #$01AA, // $01AA + #$01AB, // $01AB + #$01AD, // $01AC + #$01AD, // $01AD + #$0288, // $01AE + #$01B0, // $01AF + #$01B0, // $01B0 + #$028A, // $01B1 + #$028B, // $01B2 + #$01B4, // $01B3 + #$01B4, // $01B4 + #$01B6, // $01B5 + #$01B6, // $01B6 + #$0292, // $01B7 + #$01B9, // $01B8 + #$01B9, // $01B9 + #$01BA, // $01BA + #$01BB, // $01BB + #$01BD, // $01BC + #$01BD, // $01BD + #$01BE, // $01BE + #$01BF, // $01BF + #$01C0, // $01C0 + #$01C1, // $01C1 + #$01C2, // $01C2 + #$01C3, // $01C3 + #$01C6, // $01C4 + #$01C6, // $01C5 + #$01C6, // $01C6 + #$01C9, // $01C7 + #$01C9, // $01C8 + #$01C9, // $01C9 + #$01CC, // $01CA + #$01CC, // $01CB + #$01CC, // $01CC + #$01CE, // $01CD + #$01CE, // $01CE + #$01D0, // $01CF + #$01D0, // $01D0 + #$01D2, // $01D1 + #$01D2, // $01D2 + #$01D4, // $01D3 + #$01D4, // $01D4 + #$01D6, // $01D5 + #$01D6, // $01D6 + #$01D8, // $01D7 + #$01D8, // $01D8 + #$01DA, // $01D9 + #$01DA, // $01DA + #$01DC, // $01DB + #$01DC, // $01DC + #$01DD, // $01DD + #$01DF, // $01DE + #$01DF, // $01DF + #$01E1, // $01E0 + #$01E1, // $01E1 + #$01E3, // $01E2 + #$01E3, // $01E3 + #$01E5, // $01E4 + #$01E5, // $01E5 + #$01E7, // $01E6 + #$01E7, // $01E7 + #$01E9, // $01E8 + #$01E9, // $01E9 + #$01EB, // $01EA + #$01EB, // $01EB + #$01ED, // $01EC + #$01ED, // $01ED + #$01EF, // $01EE + #$01EF, // $01EF + #$01F0, // $01F0 + #$01F3, // $01F1 + #$01F3, // $01F2 + #$01F3, // $01F3 + #$01F5, // $01F4 + #$01F5, // $01F5 + #$0195, // $01F6 + #$01BF, // $01F7 + #$01F9, // $01F8 + #$01F9, // $01F9 + #$01FB, // $01FA + #$01FB, // $01FB + #$01FD, // $01FC + #$01FD, // $01FD + #$01FF, // $01FE + #$01FF, // $01FF + #$0201, // $0200 + #$0201, // $0201 + #$0203, // $0202 + #$0203, // $0203 + #$0205, // $0204 + #$0205, // $0205 + #$0207, // $0206 + #$0207, // $0207 + #$0209, // $0208 + #$0209, // $0209 + #$020B, // $020A + #$020B, // $020B + #$020D, // $020C + #$020D, // $020D + #$020F, // $020E + #$020F, // $020F + #$0211, // $0210 + #$0211, // $0211 + #$0213, // $0212 + #$0213, // $0213 + #$0215, // $0214 + #$0215, // $0215 + #$0217, // $0216 + #$0217, // $0217 + #$0219, // $0218 + #$0219, // $0219 + #$021B, // $021A + #$021B, // $021B + #$021D, // $021C + #$021D, // $021D + #$021F, // $021E + #$021F, // $021F + #$019E, // $0220 + #$0221, // $0221 + #$0223, // $0222 + #$0223, // $0223 + #$0225, // $0224 + #$0225, // $0225 + #$0227, // $0226 + #$0227, // $0227 + #$0229, // $0228 + #$0229, // $0229 + #$022B, // $022A + #$022B, // $022B + #$022D, // $022C + #$022D, // $022D + #$022F, // $022E + #$022F, // $022F + #$0231, // $0230 + #$0231, // $0231 + #$0233, // $0232 + #$0233, // $0233 + #$0234, // $0234 + #$0235, // $0235 + #$0236, // $0236 + #$0237, // $0237 + #$0238, // $0238 + #$0239, // $0239 + #$2C65, // $023A + #$023C, // $023B + #$023C, // $023C + #$019A, // $023D + #$2C66, // $023E + #$023F, // $023F + #$0240, // $0240 + #$0242, // $0241 + #$0242, // $0242 + #$0180, // $0243 + #$0289, // $0244 + #$028C, // $0245 + #$0247, // $0246 + #$0247, // $0247 + #$0249, // $0248 + #$0249, // $0249 + #$024B, // $024A + #$024B, // $024B + #$024D, // $024C + #$024D, // $024D + #$024F, // $024E + #$024F, // $024F + #$0250, // $0250 + #$0251, // $0251 + #$0252, // $0252 + #$0253, // $0253 + #$0254, // $0254 + #$0255, // $0255 + #$0256, // $0256 + #$0257, // $0257 + #$0258, // $0258 + #$0259, // $0259 + #$025A, // $025A + #$025B, // $025B + #$025C, // $025C + #$025D, // $025D + #$025E, // $025E + #$025F, // $025F + #$0260, // $0260 + #$0261, // $0261 + #$0262, // $0262 + #$0263, // $0263 + #$0264, // $0264 + #$0265, // $0265 + #$0266, // $0266 + #$0267, // $0267 + #$0268, // $0268 + #$0269, // $0269 + #$026A, // $026A + #$026B, // $026B + #$026C, // $026C + #$026D, // $026D + #$026E, // $026E + #$026F, // $026F + #$0270, // $0270 + #$0271, // $0271 + #$0272, // $0272 + #$0273, // $0273 + #$0274, // $0274 + #$0275, // $0275 + #$0276, // $0276 + #$0277, // $0277 + #$0278, // $0278 + #$0279, // $0279 + #$027A, // $027A + #$027B, // $027B + #$027C, // $027C + #$027D, // $027D + #$027E, // $027E + #$027F, // $027F + #$0280, // $0280 + #$0281, // $0281 + #$0282, // $0282 + #$0283, // $0283 + #$0284, // $0284 + #$0285, // $0285 + #$0286, // $0286 + #$0287, // $0287 + #$0288, // $0288 + #$0289, // $0289 + #$028A, // $028A + #$028B, // $028B + #$028C, // $028C + #$028D, // $028D + #$028E, // $028E + #$028F, // $028F + #$0290, // $0290 + #$0291, // $0291 + #$0292, // $0292 + #$0293, // $0293 + #$0294, // $0294 + #$0295, // $0295 + #$0296, // $0296 + #$0297, // $0297 + #$0298, // $0298 + #$0299, // $0299 + #$029A, // $029A + #$029B, // $029B + #$029C, // $029C + #$029D, // $029D + #$029E, // $029E + #$029F, // $029F + #$02A0, // $02A0 + #$02A1, // $02A1 + #$02A2, // $02A2 + #$02A3, // $02A3 + #$02A4, // $02A4 + #$02A5, // $02A5 + #$02A6, // $02A6 + #$02A7, // $02A7 + #$02A8, // $02A8 + #$02A9, // $02A9 + #$02AA, // $02AA + #$02AB, // $02AB + #$02AC, // $02AC + #$02AD, // $02AD + #$02AE, // $02AE + #$02AF, // $02AF + #$02B0, // $02B0 + #$02B1, // $02B1 + #$02B2, // $02B2 + #$02B3, // $02B3 + #$02B4, // $02B4 + #$02B5, // $02B5 + #$02B6, // $02B6 + #$02B7, // $02B7 + #$02B8, // $02B8 + #$02B9, // $02B9 + #$02BA, // $02BA + #$02BB, // $02BB + #$02BC, // $02BC + #$02BD, // $02BD + #$02BE, // $02BE + #$02BF, // $02BF + #$02C0, // $02C0 + #$02C1, // $02C1 + #$02C2, // $02C2 + #$02C3, // $02C3 + #$02C4, // $02C4 + #$02C5, // $02C5 + #$02C6, // $02C6 + #$02C7, // $02C7 + #$02C8, // $02C8 + #$02C9, // $02C9 + #$02CA, // $02CA + #$02CB, // $02CB + #$02CC, // $02CC + #$02CD, // $02CD + #$02CE, // $02CE + #$02CF, // $02CF + #$02D0, // $02D0 + #$02D1, // $02D1 + #$02D2, // $02D2 + #$02D3, // $02D3 + #$02D4, // $02D4 + #$02D5, // $02D5 + #$02D6, // $02D6 + #$02D7, // $02D7 + #$02D8, // $02D8 + #$02D9, // $02D9 + #$02DA, // $02DA + #$02DB, // $02DB + #$02DC, // $02DC + #$02DD, // $02DD + #$02DE, // $02DE + #$02DF, // $02DF + #$02E0, // $02E0 + #$02E1, // $02E1 + #$02E2, // $02E2 + #$02E3, // $02E3 + #$02E4, // $02E4 + #$02E5, // $02E5 + #$02E6, // $02E6 + #$02E7, // $02E7 + #$02E8, // $02E8 + #$02E9, // $02E9 + #$02EA, // $02EA + #$02EB, // $02EB + #$02EC, // $02EC + #$02ED, // $02ED + #$02EE, // $02EE + #$02EF, // $02EF + #$02F0, // $02F0 + #$02F1, // $02F1 + #$02F2, // $02F2 + #$02F3, // $02F3 + #$02F4, // $02F4 + #$02F5, // $02F5 + #$02F6, // $02F6 + #$02F7, // $02F7 + #$02F8, // $02F8 + #$02F9, // $02F9 + #$02FA, // $02FA + #$02FB, // $02FB + #$02FC, // $02FC + #$02FD, // $02FD + #$02FE, // $02FE + #$02FF, // $02FF + #$0300, // $0300 + #$0301, // $0301 + #$0302, // $0302 + #$0303, // $0303 + #$0304, // $0304 + #$0305, // $0305 + #$0306, // $0306 + #$0307, // $0307 + #$0308, // $0308 + #$0309, // $0309 + #$030A, // $030A + #$030B, // $030B + #$030C, // $030C + #$030D, // $030D + #$030E, // $030E + #$030F, // $030F + #$0310, // $0310 + #$0311, // $0311 + #$0312, // $0312 + #$0313, // $0313 + #$0314, // $0314 + #$0315, // $0315 + #$0316, // $0316 + #$0317, // $0317 + #$0318, // $0318 + #$0319, // $0319 + #$031A, // $031A + #$031B, // $031B + #$031C, // $031C + #$031D, // $031D + #$031E, // $031E + #$031F, // $031F + #$0320, // $0320 + #$0321, // $0321 + #$0322, // $0322 + #$0323, // $0323 + #$0324, // $0324 + #$0325, // $0325 + #$0326, // $0326 + #$0327, // $0327 + #$0328, // $0328 + #$0329, // $0329 + #$032A, // $032A + #$032B, // $032B + #$032C, // $032C + #$032D, // $032D + #$032E, // $032E + #$032F, // $032F + #$0330, // $0330 + #$0331, // $0331 + #$0332, // $0332 + #$0333, // $0333 + #$0334, // $0334 + #$0335, // $0335 + #$0336, // $0336 + #$0337, // $0337 + #$0338, // $0338 + #$0339, // $0339 + #$033A, // $033A + #$033B, // $033B + #$033C, // $033C + #$033D, // $033D + #$033E, // $033E + #$033F, // $033F + #$0340, // $0340 + #$0341, // $0341 + #$0342, // $0342 + #$0343, // $0343 + #$0344, // $0344 + #$0345, // $0345 + #$0346, // $0346 + #$0347, // $0347 + #$0348, // $0348 + #$0349, // $0349 + #$034A, // $034A + #$034B, // $034B + #$034C, // $034C + #$034D, // $034D + #$034E, // $034E + #$034F, // $034F + #$0350, // $0350 + #$0351, // $0351 + #$0352, // $0352 + #$0353, // $0353 + #$0354, // $0354 + #$0355, // $0355 + #$0356, // $0356 + #$0357, // $0357 + #$0358, // $0358 + #$0359, // $0359 + #$035A, // $035A + #$035B, // $035B + #$035C, // $035C + #$035D, // $035D + #$035E, // $035E + #$035F, // $035F + #$0360, // $0360 + #$0361, // $0361 + #$0362, // $0362 + #$0363, // $0363 + #$0364, // $0364 + #$0365, // $0365 + #$0366, // $0366 + #$0367, // $0367 + #$0368, // $0368 + #$0369, // $0369 + #$036A, // $036A + #$036B, // $036B + #$036C, // $036C + #$036D, // $036D + #$036E, // $036E + #$036F, // $036F + #$0371, // $0370 + #$0371, // $0371 + #$0373, // $0372 + #$0373, // $0373 + #$0374, // $0374 + #$0375, // $0375 + #$0377, // $0376 + #$0377, // $0377 + #$0378, // $0378 + #$0379, // $0379 + #$037A, // $037A + #$037B, // $037B + #$037C, // $037C + #$037D, // $037D + #$037E, // $037E + #$03F3, // $037F + #$0380, // $0380 + #$0381, // $0381 + #$0382, // $0382 + #$0383, // $0383 + #$0384, // $0384 + #$0385, // $0385 + #$03AC, // $0386 + #$0387, // $0387 + #$03AD, // $0388 + #$03AE, // $0389 + #$03AF, // $038A + #$038B, // $038B + #$03CC, // $038C + #$038D, // $038D + #$03CD, // $038E + #$03CE, // $038F + #$0390, // $0390 + #$03B1, // $0391 + #$03B2, // $0392 + #$03B3, // $0393 + #$03B4, // $0394 + #$03B5, // $0395 + #$03B6, // $0396 + #$03B7, // $0397 + #$03B8, // $0398 + #$03B9, // $0399 + #$03BA, // $039A + #$03BB, // $039B + #$03BC, // $039C + #$03BD, // $039D + #$03BE, // $039E + #$03BF, // $039F + #$03C0, // $03A0 + #$03C1, // $03A1 + #$03A2, // $03A2 + #$03C3, // $03A3 + #$03C4, // $03A4 + #$03C5, // $03A5 + #$03C6, // $03A6 + #$03C7, // $03A7 + #$03C8, // $03A8 + #$03C9, // $03A9 + #$03CA, // $03AA + #$03CB, // $03AB + #$03AC, // $03AC + #$03AD, // $03AD + #$03AE, // $03AE + #$03AF, // $03AF + #$03B0, // $03B0 + #$03B1, // $03B1 + #$03B2, // $03B2 + #$03B3, // $03B3 + #$03B4, // $03B4 + #$03B5, // $03B5 + #$03B6, // $03B6 + #$03B7, // $03B7 + #$03B8, // $03B8 + #$03B9, // $03B9 + #$03BA, // $03BA + #$03BB, // $03BB + #$03BC, // $03BC + #$03BD, // $03BD + #$03BE, // $03BE + #$03BF, // $03BF + #$03C0, // $03C0 + #$03C1, // $03C1 + #$03C2, // $03C2 + #$03C3, // $03C3 + #$03C4, // $03C4 + #$03C5, // $03C5 + #$03C6, // $03C6 + #$03C7, // $03C7 + #$03C8, // $03C8 + #$03C9, // $03C9 + #$03CA, // $03CA + #$03CB, // $03CB + #$03CC, // $03CC + #$03CD, // $03CD + #$03CE, // $03CE + #$03D7, // $03CF + #$03D0, // $03D0 + #$03D1, // $03D1 + #$03D2, // $03D2 + #$03D3, // $03D3 + #$03D4, // $03D4 + #$03D5, // $03D5 + #$03D6, // $03D6 + #$03D7, // $03D7 + #$03D9, // $03D8 + #$03D9, // $03D9 + #$03DB, // $03DA + #$03DB, // $03DB + #$03DD, // $03DC + #$03DD, // $03DD + #$03DF, // $03DE + #$03DF, // $03DF + #$03E1, // $03E0 + #$03E1, // $03E1 + #$03E3, // $03E2 + #$03E3, // $03E3 + #$03E5, // $03E4 + #$03E5, // $03E5 + #$03E7, // $03E6 + #$03E7, // $03E7 + #$03E9, // $03E8 + #$03E9, // $03E9 + #$03EB, // $03EA + #$03EB, // $03EB + #$03ED, // $03EC + #$03ED, // $03ED + #$03EF, // $03EE + #$03EF, // $03EF + #$03F0, // $03F0 + #$03F1, // $03F1 + #$03F2, // $03F2 + #$03F3, // $03F3 + #$03B8, // $03F4 + #$03F5, // $03F5 + #$03F6, // $03F6 + #$03F8, // $03F7 + #$03F8, // $03F8 + #$03F2, // $03F9 + #$03FB, // $03FA + #$03FB, // $03FB + #$03FC, // $03FC + #$037B, // $03FD + #$037C, // $03FE + #$037D, // $03FF + #$0450, // $0400 + #$0451, // $0401 + #$0452, // $0402 + #$0453, // $0403 + #$0454, // $0404 + #$0455, // $0405 + #$0456, // $0406 + #$0457, // $0407 + #$0458, // $0408 + #$0459, // $0409 + #$045A, // $040A + #$045B, // $040B + #$045C, // $040C + #$045D, // $040D + #$045E, // $040E + #$045F, // $040F + #$0430, // $0410 + #$0431, // $0411 + #$0432, // $0412 + #$0433, // $0413 + #$0434, // $0414 + #$0435, // $0415 + #$0436, // $0416 + #$0437, // $0417 + #$0438, // $0418 + #$0439, // $0419 + #$043A, // $041A + #$043B, // $041B + #$043C, // $041C + #$043D, // $041D + #$043E, // $041E + #$043F, // $041F + #$0440, // $0420 + #$0441, // $0421 + #$0442, // $0422 + #$0443, // $0423 + #$0444, // $0424 + #$0445, // $0425 + #$0446, // $0426 + #$0447, // $0427 + #$0448, // $0428 + #$0449, // $0429 + #$044A, // $042A + #$044B, // $042B + #$044C, // $042C + #$044D, // $042D + #$044E, // $042E + #$044F, // $042F + #$0430, // $0430 + #$0431, // $0431 + #$0432, // $0432 + #$0433, // $0433 + #$0434, // $0434 + #$0435, // $0435 + #$0436, // $0436 + #$0437, // $0437 + #$0438, // $0438 + #$0439, // $0439 + #$043A, // $043A + #$043B, // $043B + #$043C, // $043C + #$043D, // $043D + #$043E, // $043E + #$043F, // $043F + #$0440, // $0440 + #$0441, // $0441 + #$0442, // $0442 + #$0443, // $0443 + #$0444, // $0444 + #$0445, // $0445 + #$0446, // $0446 + #$0447, // $0447 + #$0448, // $0448 + #$0449, // $0449 + #$044A, // $044A + #$044B, // $044B + #$044C, // $044C + #$044D, // $044D + #$044E, // $044E + #$044F, // $044F + #$0450, // $0450 + #$0451, // $0451 + #$0452, // $0452 + #$0453, // $0453 + #$0454, // $0454 + #$0455, // $0455 + #$0456, // $0456 + #$0457, // $0457 + #$0458, // $0458 + #$0459, // $0459 + #$045A, // $045A + #$045B, // $045B + #$045C, // $045C + #$045D, // $045D + #$045E, // $045E + #$045F, // $045F + #$0461, // $0460 + #$0461, // $0461 + #$0463, // $0462 + #$0463, // $0463 + #$0465, // $0464 + #$0465, // $0465 + #$0467, // $0466 + #$0467, // $0467 + #$0469, // $0468 + #$0469, // $0469 + #$046B, // $046A + #$046B, // $046B + #$046D, // $046C + #$046D, // $046D + #$046F, // $046E + #$046F, // $046F + #$0471, // $0470 + #$0471, // $0471 + #$0473, // $0472 + #$0473, // $0473 + #$0475, // $0474 + #$0475, // $0475 + #$0477, // $0476 + #$0477, // $0477 + #$0479, // $0478 + #$0479, // $0479 + #$047B, // $047A + #$047B, // $047B + #$047D, // $047C + #$047D, // $047D + #$047F, // $047E + #$047F, // $047F + #$0481, // $0480 + #$0481, // $0481 + #$0482, // $0482 + #$0483, // $0483 + #$0484, // $0484 + #$0485, // $0485 + #$0486, // $0486 + #$0487, // $0487 + #$0488, // $0488 + #$0489, // $0489 + #$048B, // $048A + #$048B, // $048B + #$048D, // $048C + #$048D, // $048D + #$048F, // $048E + #$048F, // $048F + #$0491, // $0490 + #$0491, // $0491 + #$0493, // $0492 + #$0493, // $0493 + #$0495, // $0494 + #$0495, // $0495 + #$0497, // $0496 + #$0497, // $0497 + #$0499, // $0498 + #$0499, // $0499 + #$049B, // $049A + #$049B, // $049B + #$049D, // $049C + #$049D, // $049D + #$049F, // $049E + #$049F, // $049F + #$04A1, // $04A0 + #$04A1, // $04A1 + #$04A3, // $04A2 + #$04A3, // $04A3 + #$04A5, // $04A4 + #$04A5, // $04A5 + #$04A7, // $04A6 + #$04A7, // $04A7 + #$04A9, // $04A8 + #$04A9, // $04A9 + #$04AB, // $04AA + #$04AB, // $04AB + #$04AD, // $04AC + #$04AD, // $04AD + #$04AF, // $04AE + #$04AF, // $04AF + #$04B1, // $04B0 + #$04B1, // $04B1 + #$04B3, // $04B2 + #$04B3, // $04B3 + #$04B5, // $04B4 + #$04B5, // $04B5 + #$04B7, // $04B6 + #$04B7, // $04B7 + #$04B9, // $04B8 + #$04B9, // $04B9 + #$04BB, // $04BA + #$04BB, // $04BB + #$04BD, // $04BC + #$04BD, // $04BD + #$04BF, // $04BE + #$04BF, // $04BF + #$04CF, // $04C0 + #$04C2, // $04C1 + #$04C2, // $04C2 + #$04C4, // $04C3 + #$04C4, // $04C4 + #$04C6, // $04C5 + #$04C6, // $04C6 + #$04C8, // $04C7 + #$04C8, // $04C8 + #$04CA, // $04C9 + #$04CA, // $04CA + #$04CC, // $04CB + #$04CC, // $04CC + #$04CE, // $04CD + #$04CE, // $04CE + #$04CF, // $04CF + #$04D1, // $04D0 + #$04D1, // $04D1 + #$04D3, // $04D2 + #$04D3, // $04D3 + #$04D5, // $04D4 + #$04D5, // $04D5 + #$04D7, // $04D6 + #$04D7, // $04D7 + #$04D9, // $04D8 + #$04D9, // $04D9 + #$04DB, // $04DA + #$04DB, // $04DB + #$04DD, // $04DC + #$04DD, // $04DD + #$04DF, // $04DE + #$04DF, // $04DF + #$04E1, // $04E0 + #$04E1, // $04E1 + #$04E3, // $04E2 + #$04E3, // $04E3 + #$04E5, // $04E4 + #$04E5, // $04E5 + #$04E7, // $04E6 + #$04E7, // $04E7 + #$04E9, // $04E8 + #$04E9, // $04E9 + #$04EB, // $04EA + #$04EB, // $04EB + #$04ED, // $04EC + #$04ED, // $04ED + #$04EF, // $04EE + #$04EF, // $04EF + #$04F1, // $04F0 + #$04F1, // $04F1 + #$04F3, // $04F2 + #$04F3, // $04F3 + #$04F5, // $04F4 + #$04F5, // $04F5 + #$04F7, // $04F6 + #$04F7, // $04F7 + #$04F9, // $04F8 + #$04F9, // $04F9 + #$04FB, // $04FA + #$04FB, // $04FB + #$04FD, // $04FC + #$04FD, // $04FD + #$04FF, // $04FE + #$04FF, // $04FF + #$0501, // $0500 + #$0501, // $0501 + #$0503, // $0502 + #$0503, // $0503 + #$0505, // $0504 + #$0505, // $0505 + #$0507, // $0506 + #$0507, // $0507 + #$0509, // $0508 + #$0509, // $0509 + #$050B, // $050A + #$050B, // $050B + #$050D, // $050C + #$050D, // $050D + #$050F, // $050E + #$050F, // $050F + #$0511, // $0510 + #$0511, // $0511 + #$0513, // $0512 + #$0513, // $0513 + #$0515, // $0514 + #$0515, // $0515 + #$0517, // $0516 + #$0517, // $0517 + #$0519, // $0518 + #$0519, // $0519 + #$051B, // $051A + #$051B, // $051B + #$051D, // $051C + #$051D, // $051D + #$051F, // $051E + #$051F, // $051F + #$0521, // $0520 + #$0521, // $0521 + #$0523, // $0522 + #$0523, // $0523 + #$0525, // $0524 + #$0525, // $0525 + #$0527, // $0526 + #$0527, // $0527 + #$0529, // $0528 + #$0529, // $0529 + #$052B, // $052A + #$052B, // $052B + #$052D, // $052C + #$052D, // $052D + #$052F, // $052E + #$052F, // $052F + #$0530, // $0530 + #$0561, // $0531 + #$0562, // $0532 + #$0563, // $0533 + #$0564, // $0534 + #$0565, // $0535 + #$0566, // $0536 + #$0567, // $0537 + #$0568, // $0538 + #$0569, // $0539 + #$056A, // $053A + #$056B, // $053B + #$056C, // $053C + #$056D, // $053D + #$056E, // $053E + #$056F, // $053F + #$0570, // $0540 + #$0571, // $0541 + #$0572, // $0542 + #$0573, // $0543 + #$0574, // $0544 + #$0575, // $0545 + #$0576, // $0546 + #$0577, // $0547 + #$0578, // $0548 + #$0579, // $0549 + #$057A, // $054A + #$057B, // $054B + #$057C, // $054C + #$057D, // $054D + #$057E, // $054E + #$057F, // $054F + #$0580, // $0550 + #$0581, // $0551 + #$0582, // $0552 + #$0583, // $0553 + #$0584, // $0554 + #$0585, // $0555 + #$0586, // $0556 + #$0557, // $0557 + #$0558, // $0558 + #$0559, // $0559 + #$055A, // $055A + #$055B, // $055B + #$055C, // $055C + #$055D, // $055D + #$055E, // $055E + #$055F, // $055F + #$0560, // $0560 + #$0561, // $0561 + #$0562, // $0562 + #$0563, // $0563 + #$0564, // $0564 + #$0565, // $0565 + #$0566, // $0566 + #$0567, // $0567 + #$0568, // $0568 + #$0569, // $0569 + #$056A, // $056A + #$056B, // $056B + #$056C, // $056C + #$056D, // $056D + #$056E, // $056E + #$056F, // $056F + #$0570, // $0570 + #$0571, // $0571 + #$0572, // $0572 + #$0573, // $0573 + #$0574, // $0574 + #$0575, // $0575 + #$0576, // $0576 + #$0577, // $0577 + #$0578, // $0578 + #$0579, // $0579 + #$057A, // $057A + #$057B, // $057B + #$057C, // $057C + #$057D, // $057D + #$057E, // $057E + #$057F, // $057F + #$0580, // $0580 + #$0581, // $0581 + #$0582, // $0582 + #$0583, // $0583 + #$0584, // $0584 + #$0585, // $0585 + #$0586, // $0586 + #$0587, // $0587 + #$0588, // $0588 + #$0589, // $0589 + #$058A, // $058A + #$058B, // $058B + #$058C, // $058C + #$058D, // $058D + #$058E, // $058E + #$058F, // $058F + #$0590, // $0590 + #$0591, // $0591 + #$0592, // $0592 + #$0593, // $0593 + #$0594, // $0594 + #$0595, // $0595 + #$0596, // $0596 + #$0597, // $0597 + #$0598, // $0598 + #$0599, // $0599 + #$059A, // $059A + #$059B, // $059B + #$059C, // $059C + #$059D, // $059D + #$059E, // $059E + #$059F, // $059F + #$05A0, // $05A0 + #$05A1, // $05A1 + #$05A2, // $05A2 + #$05A3, // $05A3 + #$05A4, // $05A4 + #$05A5, // $05A5 + #$05A6, // $05A6 + #$05A7, // $05A7 + #$05A8, // $05A8 + #$05A9, // $05A9 + #$05AA, // $05AA + #$05AB, // $05AB + #$05AC, // $05AC + #$05AD, // $05AD + #$05AE, // $05AE + #$05AF, // $05AF + #$05B0, // $05B0 + #$05B1, // $05B1 + #$05B2, // $05B2 + #$05B3, // $05B3 + #$05B4, // $05B4 + #$05B5, // $05B5 + #$05B6, // $05B6 + #$05B7, // $05B7 + #$05B8, // $05B8 + #$05B9, // $05B9 + #$05BA, // $05BA + #$05BB, // $05BB + #$05BC, // $05BC + #$05BD, // $05BD + #$05BE, // $05BE + #$05BF, // $05BF + #$05C0, // $05C0 + #$05C1, // $05C1 + #$05C2, // $05C2 + #$05C3, // $05C3 + #$05C4, // $05C4 + #$05C5, // $05C5 + #$05C6, // $05C6 + #$05C7, // $05C7 + #$05C8, // $05C8 + #$05C9, // $05C9 + #$05CA, // $05CA + #$05CB, // $05CB + #$05CC, // $05CC + #$05CD, // $05CD + #$05CE, // $05CE + #$05CF, // $05CF + #$05D0, // $05D0 + #$05D1, // $05D1 + #$05D2, // $05D2 + #$05D3, // $05D3 + #$05D4, // $05D4 + #$05D5, // $05D5 + #$05D6, // $05D6 + #$05D7, // $05D7 + #$05D8, // $05D8 + #$05D9, // $05D9 + #$05DA, // $05DA + #$05DB, // $05DB + #$05DC, // $05DC + #$05DD, // $05DD + #$05DE, // $05DE + #$05DF, // $05DF + #$05E0, // $05E0 + #$05E1, // $05E1 + #$05E2, // $05E2 + #$05E3, // $05E3 + #$05E4, // $05E4 + #$05E5, // $05E5 + #$05E6, // $05E6 + #$05E7, // $05E7 + #$05E8, // $05E8 + #$05E9, // $05E9 + #$05EA, // $05EA + #$05EB, // $05EB + #$05EC, // $05EC + #$05ED, // $05ED + #$05EE, // $05EE + #$05EF, // $05EF + #$05F0, // $05F0 + #$05F1, // $05F1 + #$05F2, // $05F2 + #$05F3, // $05F3 + #$05F4, // $05F4 + #$05F5, // $05F5 + #$05F6, // $05F6 + #$05F7, // $05F7 + #$05F8, // $05F8 + #$05F9, // $05F9 + #$05FA, // $05FA + #$05FB, // $05FB + #$05FC, // $05FC + #$05FD, // $05FD + #$05FE, // $05FE + #$05FF, // $05FF + #$0600, // $0600 + #$0601, // $0601 + #$0602, // $0602 + #$0603, // $0603 + #$0604, // $0604 + #$0605, // $0605 + #$0606, // $0606 + #$0607, // $0607 + #$0608, // $0608 + #$0609, // $0609 + #$060A, // $060A + #$060B, // $060B + #$060C, // $060C + #$060D, // $060D + #$060E, // $060E + #$060F, // $060F + #$0610, // $0610 + #$0611, // $0611 + #$0612, // $0612 + #$0613, // $0613 + #$0614, // $0614 + #$0615, // $0615 + #$0616, // $0616 + #$0617, // $0617 + #$0618, // $0618 + #$0619, // $0619 + #$061A, // $061A + #$061B, // $061B + #$061C, // $061C + #$061D, // $061D + #$061E, // $061E + #$061F, // $061F + #$0620, // $0620 + #$0621, // $0621 + #$0622, // $0622 + #$0623, // $0623 + #$0624, // $0624 + #$0625, // $0625 + #$0626, // $0626 + #$0627, // $0627 + #$0628, // $0628 + #$0629, // $0629 + #$062A, // $062A + #$062B, // $062B + #$062C, // $062C + #$062D, // $062D + #$062E, // $062E + #$062F, // $062F + #$0630, // $0630 + #$0631, // $0631 + #$0632, // $0632 + #$0633, // $0633 + #$0634, // $0634 + #$0635, // $0635 + #$0636, // $0636 + #$0637, // $0637 + #$0638, // $0638 + #$0639, // $0639 + #$063A, // $063A + #$063B, // $063B + #$063C, // $063C + #$063D, // $063D + #$063E, // $063E + #$063F, // $063F + #$0640, // $0640 + #$0641, // $0641 + #$0642, // $0642 + #$0643, // $0643 + #$0644, // $0644 + #$0645, // $0645 + #$0646, // $0646 + #$0647, // $0647 + #$0648, // $0648 + #$0649, // $0649 + #$064A, // $064A + #$064B, // $064B + #$064C, // $064C + #$064D, // $064D + #$064E, // $064E + #$064F, // $064F + #$0650, // $0650 + #$0651, // $0651 + #$0652, // $0652 + #$0653, // $0653 + #$0654, // $0654 + #$0655, // $0655 + #$0656, // $0656 + #$0657, // $0657 + #$0658, // $0658 + #$0659, // $0659 + #$065A, // $065A + #$065B, // $065B + #$065C, // $065C + #$065D, // $065D + #$065E, // $065E + #$065F, // $065F + #$0660, // $0660 + #$0661, // $0661 + #$0662, // $0662 + #$0663, // $0663 + #$0664, // $0664 + #$0665, // $0665 + #$0666, // $0666 + #$0667, // $0667 + #$0668, // $0668 + #$0669, // $0669 + #$066A, // $066A + #$066B, // $066B + #$066C, // $066C + #$066D, // $066D + #$066E, // $066E + #$066F, // $066F + #$0670, // $0670 + #$0671, // $0671 + #$0672, // $0672 + #$0673, // $0673 + #$0674, // $0674 + #$0675, // $0675 + #$0676, // $0676 + #$0677, // $0677 + #$0678, // $0678 + #$0679, // $0679 + #$067A, // $067A + #$067B, // $067B + #$067C, // $067C + #$067D, // $067D + #$067E, // $067E + #$067F, // $067F + #$0680, // $0680 + #$0681, // $0681 + #$0682, // $0682 + #$0683, // $0683 + #$0684, // $0684 + #$0685, // $0685 + #$0686, // $0686 + #$0687, // $0687 + #$0688, // $0688 + #$0689, // $0689 + #$068A, // $068A + #$068B, // $068B + #$068C, // $068C + #$068D, // $068D + #$068E, // $068E + #$068F, // $068F + #$0690, // $0690 + #$0691, // $0691 + #$0692, // $0692 + #$0693, // $0693 + #$0694, // $0694 + #$0695, // $0695 + #$0696, // $0696 + #$0697, // $0697 + #$0698, // $0698 + #$0699, // $0699 + #$069A, // $069A + #$069B, // $069B + #$069C, // $069C + #$069D, // $069D + #$069E, // $069E + #$069F, // $069F + #$06A0, // $06A0 + #$06A1, // $06A1 + #$06A2, // $06A2 + #$06A3, // $06A3 + #$06A4, // $06A4 + #$06A5, // $06A5 + #$06A6, // $06A6 + #$06A7, // $06A7 + #$06A8, // $06A8 + #$06A9, // $06A9 + #$06AA, // $06AA + #$06AB, // $06AB + #$06AC, // $06AC + #$06AD, // $06AD + #$06AE, // $06AE + #$06AF, // $06AF + #$06B0, // $06B0 + #$06B1, // $06B1 + #$06B2, // $06B2 + #$06B3, // $06B3 + #$06B4, // $06B4 + #$06B5, // $06B5 + #$06B6, // $06B6 + #$06B7, // $06B7 + #$06B8, // $06B8 + #$06B9, // $06B9 + #$06BA, // $06BA + #$06BB, // $06BB + #$06BC, // $06BC + #$06BD, // $06BD + #$06BE, // $06BE + #$06BF, // $06BF + #$06C0, // $06C0 + #$06C1, // $06C1 + #$06C2, // $06C2 + #$06C3, // $06C3 + #$06C4, // $06C4 + #$06C5, // $06C5 + #$06C6, // $06C6 + #$06C7, // $06C7 + #$06C8, // $06C8 + #$06C9, // $06C9 + #$06CA, // $06CA + #$06CB, // $06CB + #$06CC, // $06CC + #$06CD, // $06CD + #$06CE, // $06CE + #$06CF, // $06CF + #$06D0, // $06D0 + #$06D1, // $06D1 + #$06D2, // $06D2 + #$06D3, // $06D3 + #$06D4, // $06D4 + #$06D5, // $06D5 + #$06D6, // $06D6 + #$06D7, // $06D7 + #$06D8, // $06D8 + #$06D9, // $06D9 + #$06DA, // $06DA + #$06DB, // $06DB + #$06DC, // $06DC + #$06DD, // $06DD + #$06DE, // $06DE + #$06DF, // $06DF + #$06E0, // $06E0 + #$06E1, // $06E1 + #$06E2, // $06E2 + #$06E3, // $06E3 + #$06E4, // $06E4 + #$06E5, // $06E5 + #$06E6, // $06E6 + #$06E7, // $06E7 + #$06E8, // $06E8 + #$06E9, // $06E9 + #$06EA, // $06EA + #$06EB, // $06EB + #$06EC, // $06EC + #$06ED, // $06ED + #$06EE, // $06EE + #$06EF, // $06EF + #$06F0, // $06F0 + #$06F1, // $06F1 + #$06F2, // $06F2 + #$06F3, // $06F3 + #$06F4, // $06F4 + #$06F5, // $06F5 + #$06F6, // $06F6 + #$06F7, // $06F7 + #$06F8, // $06F8 + #$06F9, // $06F9 + #$06FA, // $06FA + #$06FB, // $06FB + #$06FC, // $06FC + #$06FD, // $06FD + #$06FE, // $06FE + #$06FF, // $06FF + #$0700, // $0700 + #$0701, // $0701 + #$0702, // $0702 + #$0703, // $0703 + #$0704, // $0704 + #$0705, // $0705 + #$0706, // $0706 + #$0707, // $0707 + #$0708, // $0708 + #$0709, // $0709 + #$070A, // $070A + #$070B, // $070B + #$070C, // $070C + #$070D, // $070D + #$070E, // $070E + #$070F, // $070F + #$0710, // $0710 + #$0711, // $0711 + #$0712, // $0712 + #$0713, // $0713 + #$0714, // $0714 + #$0715, // $0715 + #$0716, // $0716 + #$0717, // $0717 + #$0718, // $0718 + #$0719, // $0719 + #$071A, // $071A + #$071B, // $071B + #$071C, // $071C + #$071D, // $071D + #$071E, // $071E + #$071F, // $071F + #$0720, // $0720 + #$0721, // $0721 + #$0722, // $0722 + #$0723, // $0723 + #$0724, // $0724 + #$0725, // $0725 + #$0726, // $0726 + #$0727, // $0727 + #$0728, // $0728 + #$0729, // $0729 + #$072A, // $072A + #$072B, // $072B + #$072C, // $072C + #$072D, // $072D + #$072E, // $072E + #$072F, // $072F + #$0730, // $0730 + #$0731, // $0731 + #$0732, // $0732 + #$0733, // $0733 + #$0734, // $0734 + #$0735, // $0735 + #$0736, // $0736 + #$0737, // $0737 + #$0738, // $0738 + #$0739, // $0739 + #$073A, // $073A + #$073B, // $073B + #$073C, // $073C + #$073D, // $073D + #$073E, // $073E + #$073F, // $073F + #$0740, // $0740 + #$0741, // $0741 + #$0742, // $0742 + #$0743, // $0743 + #$0744, // $0744 + #$0745, // $0745 + #$0746, // $0746 + #$0747, // $0747 + #$0748, // $0748 + #$0749, // $0749 + #$074A, // $074A + #$074B, // $074B + #$074C, // $074C + #$074D, // $074D + #$074E, // $074E + #$074F, // $074F + #$0750, // $0750 + #$0751, // $0751 + #$0752, // $0752 + #$0753, // $0753 + #$0754, // $0754 + #$0755, // $0755 + #$0756, // $0756 + #$0757, // $0757 + #$0758, // $0758 + #$0759, // $0759 + #$075A, // $075A + #$075B, // $075B + #$075C, // $075C + #$075D, // $075D + #$075E, // $075E + #$075F, // $075F + #$0760, // $0760 + #$0761, // $0761 + #$0762, // $0762 + #$0763, // $0763 + #$0764, // $0764 + #$0765, // $0765 + #$0766, // $0766 + #$0767, // $0767 + #$0768, // $0768 + #$0769, // $0769 + #$076A, // $076A + #$076B, // $076B + #$076C, // $076C + #$076D, // $076D + #$076E, // $076E + #$076F, // $076F + #$0770, // $0770 + #$0771, // $0771 + #$0772, // $0772 + #$0773, // $0773 + #$0774, // $0774 + #$0775, // $0775 + #$0776, // $0776 + #$0777, // $0777 + #$0778, // $0778 + #$0779, // $0779 + #$077A, // $077A + #$077B, // $077B + #$077C, // $077C + #$077D, // $077D + #$077E, // $077E + #$077F, // $077F + #$0780, // $0780 + #$0781, // $0781 + #$0782, // $0782 + #$0783, // $0783 + #$0784, // $0784 + #$0785, // $0785 + #$0786, // $0786 + #$0787, // $0787 + #$0788, // $0788 + #$0789, // $0789 + #$078A, // $078A + #$078B, // $078B + #$078C, // $078C + #$078D, // $078D + #$078E, // $078E + #$078F, // $078F + #$0790, // $0790 + #$0791, // $0791 + #$0792, // $0792 + #$0793, // $0793 + #$0794, // $0794 + #$0795, // $0795 + #$0796, // $0796 + #$0797, // $0797 + #$0798, // $0798 + #$0799, // $0799 + #$079A, // $079A + #$079B, // $079B + #$079C, // $079C + #$079D, // $079D + #$079E, // $079E + #$079F, // $079F + #$07A0, // $07A0 + #$07A1, // $07A1 + #$07A2, // $07A2 + #$07A3, // $07A3 + #$07A4, // $07A4 + #$07A5, // $07A5 + #$07A6, // $07A6 + #$07A7, // $07A7 + #$07A8, // $07A8 + #$07A9, // $07A9 + #$07AA, // $07AA + #$07AB, // $07AB + #$07AC, // $07AC + #$07AD, // $07AD + #$07AE, // $07AE + #$07AF, // $07AF + #$07B0, // $07B0 + #$07B1, // $07B1 + #$07B2, // $07B2 + #$07B3, // $07B3 + #$07B4, // $07B4 + #$07B5, // $07B5 + #$07B6, // $07B6 + #$07B7, // $07B7 + #$07B8, // $07B8 + #$07B9, // $07B9 + #$07BA, // $07BA + #$07BB, // $07BB + #$07BC, // $07BC + #$07BD, // $07BD + #$07BE, // $07BE + #$07BF, // $07BF + #$07C0, // $07C0 + #$07C1, // $07C1 + #$07C2, // $07C2 + #$07C3, // $07C3 + #$07C4, // $07C4 + #$07C5, // $07C5 + #$07C6, // $07C6 + #$07C7, // $07C7 + #$07C8, // $07C8 + #$07C9, // $07C9 + #$07CA, // $07CA + #$07CB, // $07CB + #$07CC, // $07CC + #$07CD, // $07CD + #$07CE, // $07CE + #$07CF, // $07CF + #$07D0, // $07D0 + #$07D1, // $07D1 + #$07D2, // $07D2 + #$07D3, // $07D3 + #$07D4, // $07D4 + #$07D5, // $07D5 + #$07D6, // $07D6 + #$07D7, // $07D7 + #$07D8, // $07D8 + #$07D9, // $07D9 + #$07DA, // $07DA + #$07DB, // $07DB + #$07DC, // $07DC + #$07DD, // $07DD + #$07DE, // $07DE + #$07DF, // $07DF + #$07E0, // $07E0 + #$07E1, // $07E1 + #$07E2, // $07E2 + #$07E3, // $07E3 + #$07E4, // $07E4 + #$07E5, // $07E5 + #$07E6, // $07E6 + #$07E7, // $07E7 + #$07E8, // $07E8 + #$07E9, // $07E9 + #$07EA, // $07EA + #$07EB, // $07EB + #$07EC, // $07EC + #$07ED, // $07ED + #$07EE, // $07EE + #$07EF, // $07EF + #$07F0, // $07F0 + #$07F1, // $07F1 + #$07F2, // $07F2 + #$07F3, // $07F3 + #$07F4, // $07F4 + #$07F5, // $07F5 + #$07F6, // $07F6 + #$07F7, // $07F7 + #$07F8, // $07F8 + #$07F9, // $07F9 + #$07FA, // $07FA + #$07FB, // $07FB + #$07FC, // $07FC + #$07FD, // $07FD + #$07FE, // $07FE + #$07FF, // $07FF + #$0800, // $0800 + #$0801, // $0801 + #$0802, // $0802 + #$0803, // $0803 + #$0804, // $0804 + #$0805, // $0805 + #$0806, // $0806 + #$0807, // $0807 + #$0808, // $0808 + #$0809, // $0809 + #$080A, // $080A + #$080B, // $080B + #$080C, // $080C + #$080D, // $080D + #$080E, // $080E + #$080F, // $080F + #$0810, // $0810 + #$0811, // $0811 + #$0812, // $0812 + #$0813, // $0813 + #$0814, // $0814 + #$0815, // $0815 + #$0816, // $0816 + #$0817, // $0817 + #$0818, // $0818 + #$0819, // $0819 + #$081A, // $081A + #$081B, // $081B + #$081C, // $081C + #$081D, // $081D + #$081E, // $081E + #$081F, // $081F + #$0820, // $0820 + #$0821, // $0821 + #$0822, // $0822 + #$0823, // $0823 + #$0824, // $0824 + #$0825, // $0825 + #$0826, // $0826 + #$0827, // $0827 + #$0828, // $0828 + #$0829, // $0829 + #$082A, // $082A + #$082B, // $082B + #$082C, // $082C + #$082D, // $082D + #$082E, // $082E + #$082F, // $082F + #$0830, // $0830 + #$0831, // $0831 + #$0832, // $0832 + #$0833, // $0833 + #$0834, // $0834 + #$0835, // $0835 + #$0836, // $0836 + #$0837, // $0837 + #$0838, // $0838 + #$0839, // $0839 + #$083A, // $083A + #$083B, // $083B + #$083C, // $083C + #$083D, // $083D + #$083E, // $083E + #$083F, // $083F + #$0840, // $0840 + #$0841, // $0841 + #$0842, // $0842 + #$0843, // $0843 + #$0844, // $0844 + #$0845, // $0845 + #$0846, // $0846 + #$0847, // $0847 + #$0848, // $0848 + #$0849, // $0849 + #$084A, // $084A + #$084B, // $084B + #$084C, // $084C + #$084D, // $084D + #$084E, // $084E + #$084F, // $084F + #$0850, // $0850 + #$0851, // $0851 + #$0852, // $0852 + #$0853, // $0853 + #$0854, // $0854 + #$0855, // $0855 + #$0856, // $0856 + #$0857, // $0857 + #$0858, // $0858 + #$0859, // $0859 + #$085A, // $085A + #$085B, // $085B + #$085C, // $085C + #$085D, // $085D + #$085E, // $085E + #$085F, // $085F + #$0860, // $0860 + #$0861, // $0861 + #$0862, // $0862 + #$0863, // $0863 + #$0864, // $0864 + #$0865, // $0865 + #$0866, // $0866 + #$0867, // $0867 + #$0868, // $0868 + #$0869, // $0869 + #$086A, // $086A + #$086B, // $086B + #$086C, // $086C + #$086D, // $086D + #$086E, // $086E + #$086F, // $086F + #$0870, // $0870 + #$0871, // $0871 + #$0872, // $0872 + #$0873, // $0873 + #$0874, // $0874 + #$0875, // $0875 + #$0876, // $0876 + #$0877, // $0877 + #$0878, // $0878 + #$0879, // $0879 + #$087A, // $087A + #$087B, // $087B + #$087C, // $087C + #$087D, // $087D + #$087E, // $087E + #$087F, // $087F + #$0880, // $0880 + #$0881, // $0881 + #$0882, // $0882 + #$0883, // $0883 + #$0884, // $0884 + #$0885, // $0885 + #$0886, // $0886 + #$0887, // $0887 + #$0888, // $0888 + #$0889, // $0889 + #$088A, // $088A + #$088B, // $088B + #$088C, // $088C + #$088D, // $088D + #$088E, // $088E + #$088F, // $088F + #$0890, // $0890 + #$0891, // $0891 + #$0892, // $0892 + #$0893, // $0893 + #$0894, // $0894 + #$0895, // $0895 + #$0896, // $0896 + #$0897, // $0897 + #$0898, // $0898 + #$0899, // $0899 + #$089A, // $089A + #$089B, // $089B + #$089C, // $089C + #$089D, // $089D + #$089E, // $089E + #$089F, // $089F + #$08A0, // $08A0 + #$08A1, // $08A1 + #$08A2, // $08A2 + #$08A3, // $08A3 + #$08A4, // $08A4 + #$08A5, // $08A5 + #$08A6, // $08A6 + #$08A7, // $08A7 + #$08A8, // $08A8 + #$08A9, // $08A9 + #$08AA, // $08AA + #$08AB, // $08AB + #$08AC, // $08AC + #$08AD, // $08AD + #$08AE, // $08AE + #$08AF, // $08AF + #$08B0, // $08B0 + #$08B1, // $08B1 + #$08B2, // $08B2 + #$08B3, // $08B3 + #$08B4, // $08B4 + #$08B5, // $08B5 + #$08B6, // $08B6 + #$08B7, // $08B7 + #$08B8, // $08B8 + #$08B9, // $08B9 + #$08BA, // $08BA + #$08BB, // $08BB + #$08BC, // $08BC + #$08BD, // $08BD + #$08BE, // $08BE + #$08BF, // $08BF + #$08C0, // $08C0 + #$08C1, // $08C1 + #$08C2, // $08C2 + #$08C3, // $08C3 + #$08C4, // $08C4 + #$08C5, // $08C5 + #$08C6, // $08C6 + #$08C7, // $08C7 + #$08C8, // $08C8 + #$08C9, // $08C9 + #$08CA, // $08CA + #$08CB, // $08CB + #$08CC, // $08CC + #$08CD, // $08CD + #$08CE, // $08CE + #$08CF, // $08CF + #$08D0, // $08D0 + #$08D1, // $08D1 + #$08D2, // $08D2 + #$08D3, // $08D3 + #$08D4, // $08D4 + #$08D5, // $08D5 + #$08D6, // $08D6 + #$08D7, // $08D7 + #$08D8, // $08D8 + #$08D9, // $08D9 + #$08DA, // $08DA + #$08DB, // $08DB + #$08DC, // $08DC + #$08DD, // $08DD + #$08DE, // $08DE + #$08DF, // $08DF + #$08E0, // $08E0 + #$08E1, // $08E1 + #$08E2, // $08E2 + #$08E3, // $08E3 + #$08E4, // $08E4 + #$08E5, // $08E5 + #$08E6, // $08E6 + #$08E7, // $08E7 + #$08E8, // $08E8 + #$08E9, // $08E9 + #$08EA, // $08EA + #$08EB, // $08EB + #$08EC, // $08EC + #$08ED, // $08ED + #$08EE, // $08EE + #$08EF, // $08EF + #$08F0, // $08F0 + #$08F1, // $08F1 + #$08F2, // $08F2 + #$08F3, // $08F3 + #$08F4, // $08F4 + #$08F5, // $08F5 + #$08F6, // $08F6 + #$08F7, // $08F7 + #$08F8, // $08F8 + #$08F9, // $08F9 + #$08FA, // $08FA + #$08FB, // $08FB + #$08FC, // $08FC + #$08FD, // $08FD + #$08FE, // $08FE + #$08FF, // $08FF + #$0900, // $0900 + #$0901, // $0901 + #$0902, // $0902 + #$0903, // $0903 + #$0904, // $0904 + #$0905, // $0905 + #$0906, // $0906 + #$0907, // $0907 + #$0908, // $0908 + #$0909, // $0909 + #$090A, // $090A + #$090B, // $090B + #$090C, // $090C + #$090D, // $090D + #$090E, // $090E + #$090F, // $090F + #$0910, // $0910 + #$0911, // $0911 + #$0912, // $0912 + #$0913, // $0913 + #$0914, // $0914 + #$0915, // $0915 + #$0916, // $0916 + #$0917, // $0917 + #$0918, // $0918 + #$0919, // $0919 + #$091A, // $091A + #$091B, // $091B + #$091C, // $091C + #$091D, // $091D + #$091E, // $091E + #$091F, // $091F + #$0920, // $0920 + #$0921, // $0921 + #$0922, // $0922 + #$0923, // $0923 + #$0924, // $0924 + #$0925, // $0925 + #$0926, // $0926 + #$0927, // $0927 + #$0928, // $0928 + #$0929, // $0929 + #$092A, // $092A + #$092B, // $092B + #$092C, // $092C + #$092D, // $092D + #$092E, // $092E + #$092F, // $092F + #$0930, // $0930 + #$0931, // $0931 + #$0932, // $0932 + #$0933, // $0933 + #$0934, // $0934 + #$0935, // $0935 + #$0936, // $0936 + #$0937, // $0937 + #$0938, // $0938 + #$0939, // $0939 + #$093A, // $093A + #$093B, // $093B + #$093C, // $093C + #$093D, // $093D + #$093E, // $093E + #$093F, // $093F + #$0940, // $0940 + #$0941, // $0941 + #$0942, // $0942 + #$0943, // $0943 + #$0944, // $0944 + #$0945, // $0945 + #$0946, // $0946 + #$0947, // $0947 + #$0948, // $0948 + #$0949, // $0949 + #$094A, // $094A + #$094B, // $094B + #$094C, // $094C + #$094D, // $094D + #$094E, // $094E + #$094F, // $094F + #$0950, // $0950 + #$0951, // $0951 + #$0952, // $0952 + #$0953, // $0953 + #$0954, // $0954 + #$0955, // $0955 + #$0956, // $0956 + #$0957, // $0957 + #$0958, // $0958 + #$0959, // $0959 + #$095A, // $095A + #$095B, // $095B + #$095C, // $095C + #$095D, // $095D + #$095E, // $095E + #$095F, // $095F + #$0960, // $0960 + #$0961, // $0961 + #$0962, // $0962 + #$0963, // $0963 + #$0964, // $0964 + #$0965, // $0965 + #$0966, // $0966 + #$0967, // $0967 + #$0968, // $0968 + #$0969, // $0969 + #$096A, // $096A + #$096B, // $096B + #$096C, // $096C + #$096D, // $096D + #$096E, // $096E + #$096F, // $096F + #$0970, // $0970 + #$0971, // $0971 + #$0972, // $0972 + #$0973, // $0973 + #$0974, // $0974 + #$0975, // $0975 + #$0976, // $0976 + #$0977, // $0977 + #$0978, // $0978 + #$0979, // $0979 + #$097A, // $097A + #$097B, // $097B + #$097C, // $097C + #$097D, // $097D + #$097E, // $097E + #$097F, // $097F + #$0980, // $0980 + #$0981, // $0981 + #$0982, // $0982 + #$0983, // $0983 + #$0984, // $0984 + #$0985, // $0985 + #$0986, // $0986 + #$0987, // $0987 + #$0988, // $0988 + #$0989, // $0989 + #$098A, // $098A + #$098B, // $098B + #$098C, // $098C + #$098D, // $098D + #$098E, // $098E + #$098F, // $098F + #$0990, // $0990 + #$0991, // $0991 + #$0992, // $0992 + #$0993, // $0993 + #$0994, // $0994 + #$0995, // $0995 + #$0996, // $0996 + #$0997, // $0997 + #$0998, // $0998 + #$0999, // $0999 + #$099A, // $099A + #$099B, // $099B + #$099C, // $099C + #$099D, // $099D + #$099E, // $099E + #$099F, // $099F + #$09A0, // $09A0 + #$09A1, // $09A1 + #$09A2, // $09A2 + #$09A3, // $09A3 + #$09A4, // $09A4 + #$09A5, // $09A5 + #$09A6, // $09A6 + #$09A7, // $09A7 + #$09A8, // $09A8 + #$09A9, // $09A9 + #$09AA, // $09AA + #$09AB, // $09AB + #$09AC, // $09AC + #$09AD, // $09AD + #$09AE, // $09AE + #$09AF, // $09AF + #$09B0, // $09B0 + #$09B1, // $09B1 + #$09B2, // $09B2 + #$09B3, // $09B3 + #$09B4, // $09B4 + #$09B5, // $09B5 + #$09B6, // $09B6 + #$09B7, // $09B7 + #$09B8, // $09B8 + #$09B9, // $09B9 + #$09BA, // $09BA + #$09BB, // $09BB + #$09BC, // $09BC + #$09BD, // $09BD + #$09BE, // $09BE + #$09BF, // $09BF + #$09C0, // $09C0 + #$09C1, // $09C1 + #$09C2, // $09C2 + #$09C3, // $09C3 + #$09C4, // $09C4 + #$09C5, // $09C5 + #$09C6, // $09C6 + #$09C7, // $09C7 + #$09C8, // $09C8 + #$09C9, // $09C9 + #$09CA, // $09CA + #$09CB, // $09CB + #$09CC, // $09CC + #$09CD, // $09CD + #$09CE, // $09CE + #$09CF, // $09CF + #$09D0, // $09D0 + #$09D1, // $09D1 + #$09D2, // $09D2 + #$09D3, // $09D3 + #$09D4, // $09D4 + #$09D5, // $09D5 + #$09D6, // $09D6 + #$09D7, // $09D7 + #$09D8, // $09D8 + #$09D9, // $09D9 + #$09DA, // $09DA + #$09DB, // $09DB + #$09DC, // $09DC + #$09DD, // $09DD + #$09DE, // $09DE + #$09DF, // $09DF + #$09E0, // $09E0 + #$09E1, // $09E1 + #$09E2, // $09E2 + #$09E3, // $09E3 + #$09E4, // $09E4 + #$09E5, // $09E5 + #$09E6, // $09E6 + #$09E7, // $09E7 + #$09E8, // $09E8 + #$09E9, // $09E9 + #$09EA, // $09EA + #$09EB, // $09EB + #$09EC, // $09EC + #$09ED, // $09ED + #$09EE, // $09EE + #$09EF, // $09EF + #$09F0, // $09F0 + #$09F1, // $09F1 + #$09F2, // $09F2 + #$09F3, // $09F3 + #$09F4, // $09F4 + #$09F5, // $09F5 + #$09F6, // $09F6 + #$09F7, // $09F7 + #$09F8, // $09F8 + #$09F9, // $09F9 + #$09FA, // $09FA + #$09FB, // $09FB + #$09FC, // $09FC + #$09FD, // $09FD + #$09FE, // $09FE + #$09FF, // $09FF + #$0A00, // $0A00 + #$0A01, // $0A01 + #$0A02, // $0A02 + #$0A03, // $0A03 + #$0A04, // $0A04 + #$0A05, // $0A05 + #$0A06, // $0A06 + #$0A07, // $0A07 + #$0A08, // $0A08 + #$0A09, // $0A09 + #$0A0A, // $0A0A + #$0A0B, // $0A0B + #$0A0C, // $0A0C + #$0A0D, // $0A0D + #$0A0E, // $0A0E + #$0A0F, // $0A0F + #$0A10, // $0A10 + #$0A11, // $0A11 + #$0A12, // $0A12 + #$0A13, // $0A13 + #$0A14, // $0A14 + #$0A15, // $0A15 + #$0A16, // $0A16 + #$0A17, // $0A17 + #$0A18, // $0A18 + #$0A19, // $0A19 + #$0A1A, // $0A1A + #$0A1B, // $0A1B + #$0A1C, // $0A1C + #$0A1D, // $0A1D + #$0A1E, // $0A1E + #$0A1F, // $0A1F + #$0A20, // $0A20 + #$0A21, // $0A21 + #$0A22, // $0A22 + #$0A23, // $0A23 + #$0A24, // $0A24 + #$0A25, // $0A25 + #$0A26, // $0A26 + #$0A27, // $0A27 + #$0A28, // $0A28 + #$0A29, // $0A29 + #$0A2A, // $0A2A + #$0A2B, // $0A2B + #$0A2C, // $0A2C + #$0A2D, // $0A2D + #$0A2E, // $0A2E + #$0A2F, // $0A2F + #$0A30, // $0A30 + #$0A31, // $0A31 + #$0A32, // $0A32 + #$0A33, // $0A33 + #$0A34, // $0A34 + #$0A35, // $0A35 + #$0A36, // $0A36 + #$0A37, // $0A37 + #$0A38, // $0A38 + #$0A39, // $0A39 + #$0A3A, // $0A3A + #$0A3B, // $0A3B + #$0A3C, // $0A3C + #$0A3D, // $0A3D + #$0A3E, // $0A3E + #$0A3F, // $0A3F + #$0A40, // $0A40 + #$0A41, // $0A41 + #$0A42, // $0A42 + #$0A43, // $0A43 + #$0A44, // $0A44 + #$0A45, // $0A45 + #$0A46, // $0A46 + #$0A47, // $0A47 + #$0A48, // $0A48 + #$0A49, // $0A49 + #$0A4A, // $0A4A + #$0A4B, // $0A4B + #$0A4C, // $0A4C + #$0A4D, // $0A4D + #$0A4E, // $0A4E + #$0A4F, // $0A4F + #$0A50, // $0A50 + #$0A51, // $0A51 + #$0A52, // $0A52 + #$0A53, // $0A53 + #$0A54, // $0A54 + #$0A55, // $0A55 + #$0A56, // $0A56 + #$0A57, // $0A57 + #$0A58, // $0A58 + #$0A59, // $0A59 + #$0A5A, // $0A5A + #$0A5B, // $0A5B + #$0A5C, // $0A5C + #$0A5D, // $0A5D + #$0A5E, // $0A5E + #$0A5F, // $0A5F + #$0A60, // $0A60 + #$0A61, // $0A61 + #$0A62, // $0A62 + #$0A63, // $0A63 + #$0A64, // $0A64 + #$0A65, // $0A65 + #$0A66, // $0A66 + #$0A67, // $0A67 + #$0A68, // $0A68 + #$0A69, // $0A69 + #$0A6A, // $0A6A + #$0A6B, // $0A6B + #$0A6C, // $0A6C + #$0A6D, // $0A6D + #$0A6E, // $0A6E + #$0A6F, // $0A6F + #$0A70, // $0A70 + #$0A71, // $0A71 + #$0A72, // $0A72 + #$0A73, // $0A73 + #$0A74, // $0A74 + #$0A75, // $0A75 + #$0A76, // $0A76 + #$0A77, // $0A77 + #$0A78, // $0A78 + #$0A79, // $0A79 + #$0A7A, // $0A7A + #$0A7B, // $0A7B + #$0A7C, // $0A7C + #$0A7D, // $0A7D + #$0A7E, // $0A7E + #$0A7F, // $0A7F + #$0A80, // $0A80 + #$0A81, // $0A81 + #$0A82, // $0A82 + #$0A83, // $0A83 + #$0A84, // $0A84 + #$0A85, // $0A85 + #$0A86, // $0A86 + #$0A87, // $0A87 + #$0A88, // $0A88 + #$0A89, // $0A89 + #$0A8A, // $0A8A + #$0A8B, // $0A8B + #$0A8C, // $0A8C + #$0A8D, // $0A8D + #$0A8E, // $0A8E + #$0A8F, // $0A8F + #$0A90, // $0A90 + #$0A91, // $0A91 + #$0A92, // $0A92 + #$0A93, // $0A93 + #$0A94, // $0A94 + #$0A95, // $0A95 + #$0A96, // $0A96 + #$0A97, // $0A97 + #$0A98, // $0A98 + #$0A99, // $0A99 + #$0A9A, // $0A9A + #$0A9B, // $0A9B + #$0A9C, // $0A9C + #$0A9D, // $0A9D + #$0A9E, // $0A9E + #$0A9F, // $0A9F + #$0AA0, // $0AA0 + #$0AA1, // $0AA1 + #$0AA2, // $0AA2 + #$0AA3, // $0AA3 + #$0AA4, // $0AA4 + #$0AA5, // $0AA5 + #$0AA6, // $0AA6 + #$0AA7, // $0AA7 + #$0AA8, // $0AA8 + #$0AA9, // $0AA9 + #$0AAA, // $0AAA + #$0AAB, // $0AAB + #$0AAC, // $0AAC + #$0AAD, // $0AAD + #$0AAE, // $0AAE + #$0AAF, // $0AAF + #$0AB0, // $0AB0 + #$0AB1, // $0AB1 + #$0AB2, // $0AB2 + #$0AB3, // $0AB3 + #$0AB4, // $0AB4 + #$0AB5, // $0AB5 + #$0AB6, // $0AB6 + #$0AB7, // $0AB7 + #$0AB8, // $0AB8 + #$0AB9, // $0AB9 + #$0ABA, // $0ABA + #$0ABB, // $0ABB + #$0ABC, // $0ABC + #$0ABD, // $0ABD + #$0ABE, // $0ABE + #$0ABF, // $0ABF + #$0AC0, // $0AC0 + #$0AC1, // $0AC1 + #$0AC2, // $0AC2 + #$0AC3, // $0AC3 + #$0AC4, // $0AC4 + #$0AC5, // $0AC5 + #$0AC6, // $0AC6 + #$0AC7, // $0AC7 + #$0AC8, // $0AC8 + #$0AC9, // $0AC9 + #$0ACA, // $0ACA + #$0ACB, // $0ACB + #$0ACC, // $0ACC + #$0ACD, // $0ACD + #$0ACE, // $0ACE + #$0ACF, // $0ACF + #$0AD0, // $0AD0 + #$0AD1, // $0AD1 + #$0AD2, // $0AD2 + #$0AD3, // $0AD3 + #$0AD4, // $0AD4 + #$0AD5, // $0AD5 + #$0AD6, // $0AD6 + #$0AD7, // $0AD7 + #$0AD8, // $0AD8 + #$0AD9, // $0AD9 + #$0ADA, // $0ADA + #$0ADB, // $0ADB + #$0ADC, // $0ADC + #$0ADD, // $0ADD + #$0ADE, // $0ADE + #$0ADF, // $0ADF + #$0AE0, // $0AE0 + #$0AE1, // $0AE1 + #$0AE2, // $0AE2 + #$0AE3, // $0AE3 + #$0AE4, // $0AE4 + #$0AE5, // $0AE5 + #$0AE6, // $0AE6 + #$0AE7, // $0AE7 + #$0AE8, // $0AE8 + #$0AE9, // $0AE9 + #$0AEA, // $0AEA + #$0AEB, // $0AEB + #$0AEC, // $0AEC + #$0AED, // $0AED + #$0AEE, // $0AEE + #$0AEF, // $0AEF + #$0AF0, // $0AF0 + #$0AF1, // $0AF1 + #$0AF2, // $0AF2 + #$0AF3, // $0AF3 + #$0AF4, // $0AF4 + #$0AF5, // $0AF5 + #$0AF6, // $0AF6 + #$0AF7, // $0AF7 + #$0AF8, // $0AF8 + #$0AF9, // $0AF9 + #$0AFA, // $0AFA + #$0AFB, // $0AFB + #$0AFC, // $0AFC + #$0AFD, // $0AFD + #$0AFE, // $0AFE + #$0AFF, // $0AFF + #$0B00, // $0B00 + #$0B01, // $0B01 + #$0B02, // $0B02 + #$0B03, // $0B03 + #$0B04, // $0B04 + #$0B05, // $0B05 + #$0B06, // $0B06 + #$0B07, // $0B07 + #$0B08, // $0B08 + #$0B09, // $0B09 + #$0B0A, // $0B0A + #$0B0B, // $0B0B + #$0B0C, // $0B0C + #$0B0D, // $0B0D + #$0B0E, // $0B0E + #$0B0F, // $0B0F + #$0B10, // $0B10 + #$0B11, // $0B11 + #$0B12, // $0B12 + #$0B13, // $0B13 + #$0B14, // $0B14 + #$0B15, // $0B15 + #$0B16, // $0B16 + #$0B17, // $0B17 + #$0B18, // $0B18 + #$0B19, // $0B19 + #$0B1A, // $0B1A + #$0B1B, // $0B1B + #$0B1C, // $0B1C + #$0B1D, // $0B1D + #$0B1E, // $0B1E + #$0B1F, // $0B1F + #$0B20, // $0B20 + #$0B21, // $0B21 + #$0B22, // $0B22 + #$0B23, // $0B23 + #$0B24, // $0B24 + #$0B25, // $0B25 + #$0B26, // $0B26 + #$0B27, // $0B27 + #$0B28, // $0B28 + #$0B29, // $0B29 + #$0B2A, // $0B2A + #$0B2B, // $0B2B + #$0B2C, // $0B2C + #$0B2D, // $0B2D + #$0B2E, // $0B2E + #$0B2F, // $0B2F + #$0B30, // $0B30 + #$0B31, // $0B31 + #$0B32, // $0B32 + #$0B33, // $0B33 + #$0B34, // $0B34 + #$0B35, // $0B35 + #$0B36, // $0B36 + #$0B37, // $0B37 + #$0B38, // $0B38 + #$0B39, // $0B39 + #$0B3A, // $0B3A + #$0B3B, // $0B3B + #$0B3C, // $0B3C + #$0B3D, // $0B3D + #$0B3E, // $0B3E + #$0B3F, // $0B3F + #$0B40, // $0B40 + #$0B41, // $0B41 + #$0B42, // $0B42 + #$0B43, // $0B43 + #$0B44, // $0B44 + #$0B45, // $0B45 + #$0B46, // $0B46 + #$0B47, // $0B47 + #$0B48, // $0B48 + #$0B49, // $0B49 + #$0B4A, // $0B4A + #$0B4B, // $0B4B + #$0B4C, // $0B4C + #$0B4D, // $0B4D + #$0B4E, // $0B4E + #$0B4F, // $0B4F + #$0B50, // $0B50 + #$0B51, // $0B51 + #$0B52, // $0B52 + #$0B53, // $0B53 + #$0B54, // $0B54 + #$0B55, // $0B55 + #$0B56, // $0B56 + #$0B57, // $0B57 + #$0B58, // $0B58 + #$0B59, // $0B59 + #$0B5A, // $0B5A + #$0B5B, // $0B5B + #$0B5C, // $0B5C + #$0B5D, // $0B5D + #$0B5E, // $0B5E + #$0B5F, // $0B5F + #$0B60, // $0B60 + #$0B61, // $0B61 + #$0B62, // $0B62 + #$0B63, // $0B63 + #$0B64, // $0B64 + #$0B65, // $0B65 + #$0B66, // $0B66 + #$0B67, // $0B67 + #$0B68, // $0B68 + #$0B69, // $0B69 + #$0B6A, // $0B6A + #$0B6B, // $0B6B + #$0B6C, // $0B6C + #$0B6D, // $0B6D + #$0B6E, // $0B6E + #$0B6F, // $0B6F + #$0B70, // $0B70 + #$0B71, // $0B71 + #$0B72, // $0B72 + #$0B73, // $0B73 + #$0B74, // $0B74 + #$0B75, // $0B75 + #$0B76, // $0B76 + #$0B77, // $0B77 + #$0B78, // $0B78 + #$0B79, // $0B79 + #$0B7A, // $0B7A + #$0B7B, // $0B7B + #$0B7C, // $0B7C + #$0B7D, // $0B7D + #$0B7E, // $0B7E + #$0B7F, // $0B7F + #$0B80, // $0B80 + #$0B81, // $0B81 + #$0B82, // $0B82 + #$0B83, // $0B83 + #$0B84, // $0B84 + #$0B85, // $0B85 + #$0B86, // $0B86 + #$0B87, // $0B87 + #$0B88, // $0B88 + #$0B89, // $0B89 + #$0B8A, // $0B8A + #$0B8B, // $0B8B + #$0B8C, // $0B8C + #$0B8D, // $0B8D + #$0B8E, // $0B8E + #$0B8F, // $0B8F + #$0B90, // $0B90 + #$0B91, // $0B91 + #$0B92, // $0B92 + #$0B93, // $0B93 + #$0B94, // $0B94 + #$0B95, // $0B95 + #$0B96, // $0B96 + #$0B97, // $0B97 + #$0B98, // $0B98 + #$0B99, // $0B99 + #$0B9A, // $0B9A + #$0B9B, // $0B9B + #$0B9C, // $0B9C + #$0B9D, // $0B9D + #$0B9E, // $0B9E + #$0B9F, // $0B9F + #$0BA0, // $0BA0 + #$0BA1, // $0BA1 + #$0BA2, // $0BA2 + #$0BA3, // $0BA3 + #$0BA4, // $0BA4 + #$0BA5, // $0BA5 + #$0BA6, // $0BA6 + #$0BA7, // $0BA7 + #$0BA8, // $0BA8 + #$0BA9, // $0BA9 + #$0BAA, // $0BAA + #$0BAB, // $0BAB + #$0BAC, // $0BAC + #$0BAD, // $0BAD + #$0BAE, // $0BAE + #$0BAF, // $0BAF + #$0BB0, // $0BB0 + #$0BB1, // $0BB1 + #$0BB2, // $0BB2 + #$0BB3, // $0BB3 + #$0BB4, // $0BB4 + #$0BB5, // $0BB5 + #$0BB6, // $0BB6 + #$0BB7, // $0BB7 + #$0BB8, // $0BB8 + #$0BB9, // $0BB9 + #$0BBA, // $0BBA + #$0BBB, // $0BBB + #$0BBC, // $0BBC + #$0BBD, // $0BBD + #$0BBE, // $0BBE + #$0BBF, // $0BBF + #$0BC0, // $0BC0 + #$0BC1, // $0BC1 + #$0BC2, // $0BC2 + #$0BC3, // $0BC3 + #$0BC4, // $0BC4 + #$0BC5, // $0BC5 + #$0BC6, // $0BC6 + #$0BC7, // $0BC7 + #$0BC8, // $0BC8 + #$0BC9, // $0BC9 + #$0BCA, // $0BCA + #$0BCB, // $0BCB + #$0BCC, // $0BCC + #$0BCD, // $0BCD + #$0BCE, // $0BCE + #$0BCF, // $0BCF + #$0BD0, // $0BD0 + #$0BD1, // $0BD1 + #$0BD2, // $0BD2 + #$0BD3, // $0BD3 + #$0BD4, // $0BD4 + #$0BD5, // $0BD5 + #$0BD6, // $0BD6 + #$0BD7, // $0BD7 + #$0BD8, // $0BD8 + #$0BD9, // $0BD9 + #$0BDA, // $0BDA + #$0BDB, // $0BDB + #$0BDC, // $0BDC + #$0BDD, // $0BDD + #$0BDE, // $0BDE + #$0BDF, // $0BDF + #$0BE0, // $0BE0 + #$0BE1, // $0BE1 + #$0BE2, // $0BE2 + #$0BE3, // $0BE3 + #$0BE4, // $0BE4 + #$0BE5, // $0BE5 + #$0BE6, // $0BE6 + #$0BE7, // $0BE7 + #$0BE8, // $0BE8 + #$0BE9, // $0BE9 + #$0BEA, // $0BEA + #$0BEB, // $0BEB + #$0BEC, // $0BEC + #$0BED, // $0BED + #$0BEE, // $0BEE + #$0BEF, // $0BEF + #$0BF0, // $0BF0 + #$0BF1, // $0BF1 + #$0BF2, // $0BF2 + #$0BF3, // $0BF3 + #$0BF4, // $0BF4 + #$0BF5, // $0BF5 + #$0BF6, // $0BF6 + #$0BF7, // $0BF7 + #$0BF8, // $0BF8 + #$0BF9, // $0BF9 + #$0BFA, // $0BFA + #$0BFB, // $0BFB + #$0BFC, // $0BFC + #$0BFD, // $0BFD + #$0BFE, // $0BFE + #$0BFF, // $0BFF + #$0C00, // $0C00 + #$0C01, // $0C01 + #$0C02, // $0C02 + #$0C03, // $0C03 + #$0C04, // $0C04 + #$0C05, // $0C05 + #$0C06, // $0C06 + #$0C07, // $0C07 + #$0C08, // $0C08 + #$0C09, // $0C09 + #$0C0A, // $0C0A + #$0C0B, // $0C0B + #$0C0C, // $0C0C + #$0C0D, // $0C0D + #$0C0E, // $0C0E + #$0C0F, // $0C0F + #$0C10, // $0C10 + #$0C11, // $0C11 + #$0C12, // $0C12 + #$0C13, // $0C13 + #$0C14, // $0C14 + #$0C15, // $0C15 + #$0C16, // $0C16 + #$0C17, // $0C17 + #$0C18, // $0C18 + #$0C19, // $0C19 + #$0C1A, // $0C1A + #$0C1B, // $0C1B + #$0C1C, // $0C1C + #$0C1D, // $0C1D + #$0C1E, // $0C1E + #$0C1F, // $0C1F + #$0C20, // $0C20 + #$0C21, // $0C21 + #$0C22, // $0C22 + #$0C23, // $0C23 + #$0C24, // $0C24 + #$0C25, // $0C25 + #$0C26, // $0C26 + #$0C27, // $0C27 + #$0C28, // $0C28 + #$0C29, // $0C29 + #$0C2A, // $0C2A + #$0C2B, // $0C2B + #$0C2C, // $0C2C + #$0C2D, // $0C2D + #$0C2E, // $0C2E + #$0C2F, // $0C2F + #$0C30, // $0C30 + #$0C31, // $0C31 + #$0C32, // $0C32 + #$0C33, // $0C33 + #$0C34, // $0C34 + #$0C35, // $0C35 + #$0C36, // $0C36 + #$0C37, // $0C37 + #$0C38, // $0C38 + #$0C39, // $0C39 + #$0C3A, // $0C3A + #$0C3B, // $0C3B + #$0C3C, // $0C3C + #$0C3D, // $0C3D + #$0C3E, // $0C3E + #$0C3F, // $0C3F + #$0C40, // $0C40 + #$0C41, // $0C41 + #$0C42, // $0C42 + #$0C43, // $0C43 + #$0C44, // $0C44 + #$0C45, // $0C45 + #$0C46, // $0C46 + #$0C47, // $0C47 + #$0C48, // $0C48 + #$0C49, // $0C49 + #$0C4A, // $0C4A + #$0C4B, // $0C4B + #$0C4C, // $0C4C + #$0C4D, // $0C4D + #$0C4E, // $0C4E + #$0C4F, // $0C4F + #$0C50, // $0C50 + #$0C51, // $0C51 + #$0C52, // $0C52 + #$0C53, // $0C53 + #$0C54, // $0C54 + #$0C55, // $0C55 + #$0C56, // $0C56 + #$0C57, // $0C57 + #$0C58, // $0C58 + #$0C59, // $0C59 + #$0C5A, // $0C5A + #$0C5B, // $0C5B + #$0C5C, // $0C5C + #$0C5D, // $0C5D + #$0C5E, // $0C5E + #$0C5F, // $0C5F + #$0C60, // $0C60 + #$0C61, // $0C61 + #$0C62, // $0C62 + #$0C63, // $0C63 + #$0C64, // $0C64 + #$0C65, // $0C65 + #$0C66, // $0C66 + #$0C67, // $0C67 + #$0C68, // $0C68 + #$0C69, // $0C69 + #$0C6A, // $0C6A + #$0C6B, // $0C6B + #$0C6C, // $0C6C + #$0C6D, // $0C6D + #$0C6E, // $0C6E + #$0C6F, // $0C6F + #$0C70, // $0C70 + #$0C71, // $0C71 + #$0C72, // $0C72 + #$0C73, // $0C73 + #$0C74, // $0C74 + #$0C75, // $0C75 + #$0C76, // $0C76 + #$0C77, // $0C77 + #$0C78, // $0C78 + #$0C79, // $0C79 + #$0C7A, // $0C7A + #$0C7B, // $0C7B + #$0C7C, // $0C7C + #$0C7D, // $0C7D + #$0C7E, // $0C7E + #$0C7F, // $0C7F + #$0C80, // $0C80 + #$0C81, // $0C81 + #$0C82, // $0C82 + #$0C83, // $0C83 + #$0C84, // $0C84 + #$0C85, // $0C85 + #$0C86, // $0C86 + #$0C87, // $0C87 + #$0C88, // $0C88 + #$0C89, // $0C89 + #$0C8A, // $0C8A + #$0C8B, // $0C8B + #$0C8C, // $0C8C + #$0C8D, // $0C8D + #$0C8E, // $0C8E + #$0C8F, // $0C8F + #$0C90, // $0C90 + #$0C91, // $0C91 + #$0C92, // $0C92 + #$0C93, // $0C93 + #$0C94, // $0C94 + #$0C95, // $0C95 + #$0C96, // $0C96 + #$0C97, // $0C97 + #$0C98, // $0C98 + #$0C99, // $0C99 + #$0C9A, // $0C9A + #$0C9B, // $0C9B + #$0C9C, // $0C9C + #$0C9D, // $0C9D + #$0C9E, // $0C9E + #$0C9F, // $0C9F + #$0CA0, // $0CA0 + #$0CA1, // $0CA1 + #$0CA2, // $0CA2 + #$0CA3, // $0CA3 + #$0CA4, // $0CA4 + #$0CA5, // $0CA5 + #$0CA6, // $0CA6 + #$0CA7, // $0CA7 + #$0CA8, // $0CA8 + #$0CA9, // $0CA9 + #$0CAA, // $0CAA + #$0CAB, // $0CAB + #$0CAC, // $0CAC + #$0CAD, // $0CAD + #$0CAE, // $0CAE + #$0CAF, // $0CAF + #$0CB0, // $0CB0 + #$0CB1, // $0CB1 + #$0CB2, // $0CB2 + #$0CB3, // $0CB3 + #$0CB4, // $0CB4 + #$0CB5, // $0CB5 + #$0CB6, // $0CB6 + #$0CB7, // $0CB7 + #$0CB8, // $0CB8 + #$0CB9, // $0CB9 + #$0CBA, // $0CBA + #$0CBB, // $0CBB + #$0CBC, // $0CBC + #$0CBD, // $0CBD + #$0CBE, // $0CBE + #$0CBF, // $0CBF + #$0CC0, // $0CC0 + #$0CC1, // $0CC1 + #$0CC2, // $0CC2 + #$0CC3, // $0CC3 + #$0CC4, // $0CC4 + #$0CC5, // $0CC5 + #$0CC6, // $0CC6 + #$0CC7, // $0CC7 + #$0CC8, // $0CC8 + #$0CC9, // $0CC9 + #$0CCA, // $0CCA + #$0CCB, // $0CCB + #$0CCC, // $0CCC + #$0CCD, // $0CCD + #$0CCE, // $0CCE + #$0CCF, // $0CCF + #$0CD0, // $0CD0 + #$0CD1, // $0CD1 + #$0CD2, // $0CD2 + #$0CD3, // $0CD3 + #$0CD4, // $0CD4 + #$0CD5, // $0CD5 + #$0CD6, // $0CD6 + #$0CD7, // $0CD7 + #$0CD8, // $0CD8 + #$0CD9, // $0CD9 + #$0CDA, // $0CDA + #$0CDB, // $0CDB + #$0CDC, // $0CDC + #$0CDD, // $0CDD + #$0CDE, // $0CDE + #$0CDF, // $0CDF + #$0CE0, // $0CE0 + #$0CE1, // $0CE1 + #$0CE2, // $0CE2 + #$0CE3, // $0CE3 + #$0CE4, // $0CE4 + #$0CE5, // $0CE5 + #$0CE6, // $0CE6 + #$0CE7, // $0CE7 + #$0CE8, // $0CE8 + #$0CE9, // $0CE9 + #$0CEA, // $0CEA + #$0CEB, // $0CEB + #$0CEC, // $0CEC + #$0CED, // $0CED + #$0CEE, // $0CEE + #$0CEF, // $0CEF + #$0CF0, // $0CF0 + #$0CF1, // $0CF1 + #$0CF2, // $0CF2 + #$0CF3, // $0CF3 + #$0CF4, // $0CF4 + #$0CF5, // $0CF5 + #$0CF6, // $0CF6 + #$0CF7, // $0CF7 + #$0CF8, // $0CF8 + #$0CF9, // $0CF9 + #$0CFA, // $0CFA + #$0CFB, // $0CFB + #$0CFC, // $0CFC + #$0CFD, // $0CFD + #$0CFE, // $0CFE + #$0CFF, // $0CFF + #$0D00, // $0D00 + #$0D01, // $0D01 + #$0D02, // $0D02 + #$0D03, // $0D03 + #$0D04, // $0D04 + #$0D05, // $0D05 + #$0D06, // $0D06 + #$0D07, // $0D07 + #$0D08, // $0D08 + #$0D09, // $0D09 + #$0D0A, // $0D0A + #$0D0B, // $0D0B + #$0D0C, // $0D0C + #$0D0D, // $0D0D + #$0D0E, // $0D0E + #$0D0F, // $0D0F + #$0D10, // $0D10 + #$0D11, // $0D11 + #$0D12, // $0D12 + #$0D13, // $0D13 + #$0D14, // $0D14 + #$0D15, // $0D15 + #$0D16, // $0D16 + #$0D17, // $0D17 + #$0D18, // $0D18 + #$0D19, // $0D19 + #$0D1A, // $0D1A + #$0D1B, // $0D1B + #$0D1C, // $0D1C + #$0D1D, // $0D1D + #$0D1E, // $0D1E + #$0D1F, // $0D1F + #$0D20, // $0D20 + #$0D21, // $0D21 + #$0D22, // $0D22 + #$0D23, // $0D23 + #$0D24, // $0D24 + #$0D25, // $0D25 + #$0D26, // $0D26 + #$0D27, // $0D27 + #$0D28, // $0D28 + #$0D29, // $0D29 + #$0D2A, // $0D2A + #$0D2B, // $0D2B + #$0D2C, // $0D2C + #$0D2D, // $0D2D + #$0D2E, // $0D2E + #$0D2F, // $0D2F + #$0D30, // $0D30 + #$0D31, // $0D31 + #$0D32, // $0D32 + #$0D33, // $0D33 + #$0D34, // $0D34 + #$0D35, // $0D35 + #$0D36, // $0D36 + #$0D37, // $0D37 + #$0D38, // $0D38 + #$0D39, // $0D39 + #$0D3A, // $0D3A + #$0D3B, // $0D3B + #$0D3C, // $0D3C + #$0D3D, // $0D3D + #$0D3E, // $0D3E + #$0D3F, // $0D3F + #$0D40, // $0D40 + #$0D41, // $0D41 + #$0D42, // $0D42 + #$0D43, // $0D43 + #$0D44, // $0D44 + #$0D45, // $0D45 + #$0D46, // $0D46 + #$0D47, // $0D47 + #$0D48, // $0D48 + #$0D49, // $0D49 + #$0D4A, // $0D4A + #$0D4B, // $0D4B + #$0D4C, // $0D4C + #$0D4D, // $0D4D + #$0D4E, // $0D4E + #$0D4F, // $0D4F + #$0D50, // $0D50 + #$0D51, // $0D51 + #$0D52, // $0D52 + #$0D53, // $0D53 + #$0D54, // $0D54 + #$0D55, // $0D55 + #$0D56, // $0D56 + #$0D57, // $0D57 + #$0D58, // $0D58 + #$0D59, // $0D59 + #$0D5A, // $0D5A + #$0D5B, // $0D5B + #$0D5C, // $0D5C + #$0D5D, // $0D5D + #$0D5E, // $0D5E + #$0D5F, // $0D5F + #$0D60, // $0D60 + #$0D61, // $0D61 + #$0D62, // $0D62 + #$0D63, // $0D63 + #$0D64, // $0D64 + #$0D65, // $0D65 + #$0D66, // $0D66 + #$0D67, // $0D67 + #$0D68, // $0D68 + #$0D69, // $0D69 + #$0D6A, // $0D6A + #$0D6B, // $0D6B + #$0D6C, // $0D6C + #$0D6D, // $0D6D + #$0D6E, // $0D6E + #$0D6F, // $0D6F + #$0D70, // $0D70 + #$0D71, // $0D71 + #$0D72, // $0D72 + #$0D73, // $0D73 + #$0D74, // $0D74 + #$0D75, // $0D75 + #$0D76, // $0D76 + #$0D77, // $0D77 + #$0D78, // $0D78 + #$0D79, // $0D79 + #$0D7A, // $0D7A + #$0D7B, // $0D7B + #$0D7C, // $0D7C + #$0D7D, // $0D7D + #$0D7E, // $0D7E + #$0D7F, // $0D7F + #$0D80, // $0D80 + #$0D81, // $0D81 + #$0D82, // $0D82 + #$0D83, // $0D83 + #$0D84, // $0D84 + #$0D85, // $0D85 + #$0D86, // $0D86 + #$0D87, // $0D87 + #$0D88, // $0D88 + #$0D89, // $0D89 + #$0D8A, // $0D8A + #$0D8B, // $0D8B + #$0D8C, // $0D8C + #$0D8D, // $0D8D + #$0D8E, // $0D8E + #$0D8F, // $0D8F + #$0D90, // $0D90 + #$0D91, // $0D91 + #$0D92, // $0D92 + #$0D93, // $0D93 + #$0D94, // $0D94 + #$0D95, // $0D95 + #$0D96, // $0D96 + #$0D97, // $0D97 + #$0D98, // $0D98 + #$0D99, // $0D99 + #$0D9A, // $0D9A + #$0D9B, // $0D9B + #$0D9C, // $0D9C + #$0D9D, // $0D9D + #$0D9E, // $0D9E + #$0D9F, // $0D9F + #$0DA0, // $0DA0 + #$0DA1, // $0DA1 + #$0DA2, // $0DA2 + #$0DA3, // $0DA3 + #$0DA4, // $0DA4 + #$0DA5, // $0DA5 + #$0DA6, // $0DA6 + #$0DA7, // $0DA7 + #$0DA8, // $0DA8 + #$0DA9, // $0DA9 + #$0DAA, // $0DAA + #$0DAB, // $0DAB + #$0DAC, // $0DAC + #$0DAD, // $0DAD + #$0DAE, // $0DAE + #$0DAF, // $0DAF + #$0DB0, // $0DB0 + #$0DB1, // $0DB1 + #$0DB2, // $0DB2 + #$0DB3, // $0DB3 + #$0DB4, // $0DB4 + #$0DB5, // $0DB5 + #$0DB6, // $0DB6 + #$0DB7, // $0DB7 + #$0DB8, // $0DB8 + #$0DB9, // $0DB9 + #$0DBA, // $0DBA + #$0DBB, // $0DBB + #$0DBC, // $0DBC + #$0DBD, // $0DBD + #$0DBE, // $0DBE + #$0DBF, // $0DBF + #$0DC0, // $0DC0 + #$0DC1, // $0DC1 + #$0DC2, // $0DC2 + #$0DC3, // $0DC3 + #$0DC4, // $0DC4 + #$0DC5, // $0DC5 + #$0DC6, // $0DC6 + #$0DC7, // $0DC7 + #$0DC8, // $0DC8 + #$0DC9, // $0DC9 + #$0DCA, // $0DCA + #$0DCB, // $0DCB + #$0DCC, // $0DCC + #$0DCD, // $0DCD + #$0DCE, // $0DCE + #$0DCF, // $0DCF + #$0DD0, // $0DD0 + #$0DD1, // $0DD1 + #$0DD2, // $0DD2 + #$0DD3, // $0DD3 + #$0DD4, // $0DD4 + #$0DD5, // $0DD5 + #$0DD6, // $0DD6 + #$0DD7, // $0DD7 + #$0DD8, // $0DD8 + #$0DD9, // $0DD9 + #$0DDA, // $0DDA + #$0DDB, // $0DDB + #$0DDC, // $0DDC + #$0DDD, // $0DDD + #$0DDE, // $0DDE + #$0DDF, // $0DDF + #$0DE0, // $0DE0 + #$0DE1, // $0DE1 + #$0DE2, // $0DE2 + #$0DE3, // $0DE3 + #$0DE4, // $0DE4 + #$0DE5, // $0DE5 + #$0DE6, // $0DE6 + #$0DE7, // $0DE7 + #$0DE8, // $0DE8 + #$0DE9, // $0DE9 + #$0DEA, // $0DEA + #$0DEB, // $0DEB + #$0DEC, // $0DEC + #$0DED, // $0DED + #$0DEE, // $0DEE + #$0DEF, // $0DEF + #$0DF0, // $0DF0 + #$0DF1, // $0DF1 + #$0DF2, // $0DF2 + #$0DF3, // $0DF3 + #$0DF4, // $0DF4 + #$0DF5, // $0DF5 + #$0DF6, // $0DF6 + #$0DF7, // $0DF7 + #$0DF8, // $0DF8 + #$0DF9, // $0DF9 + #$0DFA, // $0DFA + #$0DFB, // $0DFB + #$0DFC, // $0DFC + #$0DFD, // $0DFD + #$0DFE, // $0DFE + #$0DFF, // $0DFF + #$0E00, // $0E00 + #$0E01, // $0E01 + #$0E02, // $0E02 + #$0E03, // $0E03 + #$0E04, // $0E04 + #$0E05, // $0E05 + #$0E06, // $0E06 + #$0E07, // $0E07 + #$0E08, // $0E08 + #$0E09, // $0E09 + #$0E0A, // $0E0A + #$0E0B, // $0E0B + #$0E0C, // $0E0C + #$0E0D, // $0E0D + #$0E0E, // $0E0E + #$0E0F, // $0E0F + #$0E10, // $0E10 + #$0E11, // $0E11 + #$0E12, // $0E12 + #$0E13, // $0E13 + #$0E14, // $0E14 + #$0E15, // $0E15 + #$0E16, // $0E16 + #$0E17, // $0E17 + #$0E18, // $0E18 + #$0E19, // $0E19 + #$0E1A, // $0E1A + #$0E1B, // $0E1B + #$0E1C, // $0E1C + #$0E1D, // $0E1D + #$0E1E, // $0E1E + #$0E1F, // $0E1F + #$0E20, // $0E20 + #$0E21, // $0E21 + #$0E22, // $0E22 + #$0E23, // $0E23 + #$0E24, // $0E24 + #$0E25, // $0E25 + #$0E26, // $0E26 + #$0E27, // $0E27 + #$0E28, // $0E28 + #$0E29, // $0E29 + #$0E2A, // $0E2A + #$0E2B, // $0E2B + #$0E2C, // $0E2C + #$0E2D, // $0E2D + #$0E2E, // $0E2E + #$0E2F, // $0E2F + #$0E30, // $0E30 + #$0E31, // $0E31 + #$0E32, // $0E32 + #$0E33, // $0E33 + #$0E34, // $0E34 + #$0E35, // $0E35 + #$0E36, // $0E36 + #$0E37, // $0E37 + #$0E38, // $0E38 + #$0E39, // $0E39 + #$0E3A, // $0E3A + #$0E3B, // $0E3B + #$0E3C, // $0E3C + #$0E3D, // $0E3D + #$0E3E, // $0E3E + #$0E3F, // $0E3F + #$0E40, // $0E40 + #$0E41, // $0E41 + #$0E42, // $0E42 + #$0E43, // $0E43 + #$0E44, // $0E44 + #$0E45, // $0E45 + #$0E46, // $0E46 + #$0E47, // $0E47 + #$0E48, // $0E48 + #$0E49, // $0E49 + #$0E4A, // $0E4A + #$0E4B, // $0E4B + #$0E4C, // $0E4C + #$0E4D, // $0E4D + #$0E4E, // $0E4E + #$0E4F, // $0E4F + #$0E50, // $0E50 + #$0E51, // $0E51 + #$0E52, // $0E52 + #$0E53, // $0E53 + #$0E54, // $0E54 + #$0E55, // $0E55 + #$0E56, // $0E56 + #$0E57, // $0E57 + #$0E58, // $0E58 + #$0E59, // $0E59 + #$0E5A, // $0E5A + #$0E5B, // $0E5B + #$0E5C, // $0E5C + #$0E5D, // $0E5D + #$0E5E, // $0E5E + #$0E5F, // $0E5F + #$0E60, // $0E60 + #$0E61, // $0E61 + #$0E62, // $0E62 + #$0E63, // $0E63 + #$0E64, // $0E64 + #$0E65, // $0E65 + #$0E66, // $0E66 + #$0E67, // $0E67 + #$0E68, // $0E68 + #$0E69, // $0E69 + #$0E6A, // $0E6A + #$0E6B, // $0E6B + #$0E6C, // $0E6C + #$0E6D, // $0E6D + #$0E6E, // $0E6E + #$0E6F, // $0E6F + #$0E70, // $0E70 + #$0E71, // $0E71 + #$0E72, // $0E72 + #$0E73, // $0E73 + #$0E74, // $0E74 + #$0E75, // $0E75 + #$0E76, // $0E76 + #$0E77, // $0E77 + #$0E78, // $0E78 + #$0E79, // $0E79 + #$0E7A, // $0E7A + #$0E7B, // $0E7B + #$0E7C, // $0E7C + #$0E7D, // $0E7D + #$0E7E, // $0E7E + #$0E7F, // $0E7F + #$0E80, // $0E80 + #$0E81, // $0E81 + #$0E82, // $0E82 + #$0E83, // $0E83 + #$0E84, // $0E84 + #$0E85, // $0E85 + #$0E86, // $0E86 + #$0E87, // $0E87 + #$0E88, // $0E88 + #$0E89, // $0E89 + #$0E8A, // $0E8A + #$0E8B, // $0E8B + #$0E8C, // $0E8C + #$0E8D, // $0E8D + #$0E8E, // $0E8E + #$0E8F, // $0E8F + #$0E90, // $0E90 + #$0E91, // $0E91 + #$0E92, // $0E92 + #$0E93, // $0E93 + #$0E94, // $0E94 + #$0E95, // $0E95 + #$0E96, // $0E96 + #$0E97, // $0E97 + #$0E98, // $0E98 + #$0E99, // $0E99 + #$0E9A, // $0E9A + #$0E9B, // $0E9B + #$0E9C, // $0E9C + #$0E9D, // $0E9D + #$0E9E, // $0E9E + #$0E9F, // $0E9F + #$0EA0, // $0EA0 + #$0EA1, // $0EA1 + #$0EA2, // $0EA2 + #$0EA3, // $0EA3 + #$0EA4, // $0EA4 + #$0EA5, // $0EA5 + #$0EA6, // $0EA6 + #$0EA7, // $0EA7 + #$0EA8, // $0EA8 + #$0EA9, // $0EA9 + #$0EAA, // $0EAA + #$0EAB, // $0EAB + #$0EAC, // $0EAC + #$0EAD, // $0EAD + #$0EAE, // $0EAE + #$0EAF, // $0EAF + #$0EB0, // $0EB0 + #$0EB1, // $0EB1 + #$0EB2, // $0EB2 + #$0EB3, // $0EB3 + #$0EB4, // $0EB4 + #$0EB5, // $0EB5 + #$0EB6, // $0EB6 + #$0EB7, // $0EB7 + #$0EB8, // $0EB8 + #$0EB9, // $0EB9 + #$0EBA, // $0EBA + #$0EBB, // $0EBB + #$0EBC, // $0EBC + #$0EBD, // $0EBD + #$0EBE, // $0EBE + #$0EBF, // $0EBF + #$0EC0, // $0EC0 + #$0EC1, // $0EC1 + #$0EC2, // $0EC2 + #$0EC3, // $0EC3 + #$0EC4, // $0EC4 + #$0EC5, // $0EC5 + #$0EC6, // $0EC6 + #$0EC7, // $0EC7 + #$0EC8, // $0EC8 + #$0EC9, // $0EC9 + #$0ECA, // $0ECA + #$0ECB, // $0ECB + #$0ECC, // $0ECC + #$0ECD, // $0ECD + #$0ECE, // $0ECE + #$0ECF, // $0ECF + #$0ED0, // $0ED0 + #$0ED1, // $0ED1 + #$0ED2, // $0ED2 + #$0ED3, // $0ED3 + #$0ED4, // $0ED4 + #$0ED5, // $0ED5 + #$0ED6, // $0ED6 + #$0ED7, // $0ED7 + #$0ED8, // $0ED8 + #$0ED9, // $0ED9 + #$0EDA, // $0EDA + #$0EDB, // $0EDB + #$0EDC, // $0EDC + #$0EDD, // $0EDD + #$0EDE, // $0EDE + #$0EDF, // $0EDF + #$0EE0, // $0EE0 + #$0EE1, // $0EE1 + #$0EE2, // $0EE2 + #$0EE3, // $0EE3 + #$0EE4, // $0EE4 + #$0EE5, // $0EE5 + #$0EE6, // $0EE6 + #$0EE7, // $0EE7 + #$0EE8, // $0EE8 + #$0EE9, // $0EE9 + #$0EEA, // $0EEA + #$0EEB, // $0EEB + #$0EEC, // $0EEC + #$0EED, // $0EED + #$0EEE, // $0EEE + #$0EEF, // $0EEF + #$0EF0, // $0EF0 + #$0EF1, // $0EF1 + #$0EF2, // $0EF2 + #$0EF3, // $0EF3 + #$0EF4, // $0EF4 + #$0EF5, // $0EF5 + #$0EF6, // $0EF6 + #$0EF7, // $0EF7 + #$0EF8, // $0EF8 + #$0EF9, // $0EF9 + #$0EFA, // $0EFA + #$0EFB, // $0EFB + #$0EFC, // $0EFC + #$0EFD, // $0EFD + #$0EFE, // $0EFE + #$0EFF, // $0EFF + #$0F00, // $0F00 + #$0F01, // $0F01 + #$0F02, // $0F02 + #$0F03, // $0F03 + #$0F04, // $0F04 + #$0F05, // $0F05 + #$0F06, // $0F06 + #$0F07, // $0F07 + #$0F08, // $0F08 + #$0F09, // $0F09 + #$0F0A, // $0F0A + #$0F0B, // $0F0B + #$0F0C, // $0F0C + #$0F0D, // $0F0D + #$0F0E, // $0F0E + #$0F0F, // $0F0F + #$0F10, // $0F10 + #$0F11, // $0F11 + #$0F12, // $0F12 + #$0F13, // $0F13 + #$0F14, // $0F14 + #$0F15, // $0F15 + #$0F16, // $0F16 + #$0F17, // $0F17 + #$0F18, // $0F18 + #$0F19, // $0F19 + #$0F1A, // $0F1A + #$0F1B, // $0F1B + #$0F1C, // $0F1C + #$0F1D, // $0F1D + #$0F1E, // $0F1E + #$0F1F, // $0F1F + #$0F20, // $0F20 + #$0F21, // $0F21 + #$0F22, // $0F22 + #$0F23, // $0F23 + #$0F24, // $0F24 + #$0F25, // $0F25 + #$0F26, // $0F26 + #$0F27, // $0F27 + #$0F28, // $0F28 + #$0F29, // $0F29 + #$0F2A, // $0F2A + #$0F2B, // $0F2B + #$0F2C, // $0F2C + #$0F2D, // $0F2D + #$0F2E, // $0F2E + #$0F2F, // $0F2F + #$0F30, // $0F30 + #$0F31, // $0F31 + #$0F32, // $0F32 + #$0F33, // $0F33 + #$0F34, // $0F34 + #$0F35, // $0F35 + #$0F36, // $0F36 + #$0F37, // $0F37 + #$0F38, // $0F38 + #$0F39, // $0F39 + #$0F3A, // $0F3A + #$0F3B, // $0F3B + #$0F3C, // $0F3C + #$0F3D, // $0F3D + #$0F3E, // $0F3E + #$0F3F, // $0F3F + #$0F40, // $0F40 + #$0F41, // $0F41 + #$0F42, // $0F42 + #$0F43, // $0F43 + #$0F44, // $0F44 + #$0F45, // $0F45 + #$0F46, // $0F46 + #$0F47, // $0F47 + #$0F48, // $0F48 + #$0F49, // $0F49 + #$0F4A, // $0F4A + #$0F4B, // $0F4B + #$0F4C, // $0F4C + #$0F4D, // $0F4D + #$0F4E, // $0F4E + #$0F4F, // $0F4F + #$0F50, // $0F50 + #$0F51, // $0F51 + #$0F52, // $0F52 + #$0F53, // $0F53 + #$0F54, // $0F54 + #$0F55, // $0F55 + #$0F56, // $0F56 + #$0F57, // $0F57 + #$0F58, // $0F58 + #$0F59, // $0F59 + #$0F5A, // $0F5A + #$0F5B, // $0F5B + #$0F5C, // $0F5C + #$0F5D, // $0F5D + #$0F5E, // $0F5E + #$0F5F, // $0F5F + #$0F60, // $0F60 + #$0F61, // $0F61 + #$0F62, // $0F62 + #$0F63, // $0F63 + #$0F64, // $0F64 + #$0F65, // $0F65 + #$0F66, // $0F66 + #$0F67, // $0F67 + #$0F68, // $0F68 + #$0F69, // $0F69 + #$0F6A, // $0F6A + #$0F6B, // $0F6B + #$0F6C, // $0F6C + #$0F6D, // $0F6D + #$0F6E, // $0F6E + #$0F6F, // $0F6F + #$0F70, // $0F70 + #$0F71, // $0F71 + #$0F72, // $0F72 + #$0F73, // $0F73 + #$0F74, // $0F74 + #$0F75, // $0F75 + #$0F76, // $0F76 + #$0F77, // $0F77 + #$0F78, // $0F78 + #$0F79, // $0F79 + #$0F7A, // $0F7A + #$0F7B, // $0F7B + #$0F7C, // $0F7C + #$0F7D, // $0F7D + #$0F7E, // $0F7E + #$0F7F, // $0F7F + #$0F80, // $0F80 + #$0F81, // $0F81 + #$0F82, // $0F82 + #$0F83, // $0F83 + #$0F84, // $0F84 + #$0F85, // $0F85 + #$0F86, // $0F86 + #$0F87, // $0F87 + #$0F88, // $0F88 + #$0F89, // $0F89 + #$0F8A, // $0F8A + #$0F8B, // $0F8B + #$0F8C, // $0F8C + #$0F8D, // $0F8D + #$0F8E, // $0F8E + #$0F8F, // $0F8F + #$0F90, // $0F90 + #$0F91, // $0F91 + #$0F92, // $0F92 + #$0F93, // $0F93 + #$0F94, // $0F94 + #$0F95, // $0F95 + #$0F96, // $0F96 + #$0F97, // $0F97 + #$0F98, // $0F98 + #$0F99, // $0F99 + #$0F9A, // $0F9A + #$0F9B, // $0F9B + #$0F9C, // $0F9C + #$0F9D, // $0F9D + #$0F9E, // $0F9E + #$0F9F, // $0F9F + #$0FA0, // $0FA0 + #$0FA1, // $0FA1 + #$0FA2, // $0FA2 + #$0FA3, // $0FA3 + #$0FA4, // $0FA4 + #$0FA5, // $0FA5 + #$0FA6, // $0FA6 + #$0FA7, // $0FA7 + #$0FA8, // $0FA8 + #$0FA9, // $0FA9 + #$0FAA, // $0FAA + #$0FAB, // $0FAB + #$0FAC, // $0FAC + #$0FAD, // $0FAD + #$0FAE, // $0FAE + #$0FAF, // $0FAF + #$0FB0, // $0FB0 + #$0FB1, // $0FB1 + #$0FB2, // $0FB2 + #$0FB3, // $0FB3 + #$0FB4, // $0FB4 + #$0FB5, // $0FB5 + #$0FB6, // $0FB6 + #$0FB7, // $0FB7 + #$0FB8, // $0FB8 + #$0FB9, // $0FB9 + #$0FBA, // $0FBA + #$0FBB, // $0FBB + #$0FBC, // $0FBC + #$0FBD, // $0FBD + #$0FBE, // $0FBE + #$0FBF, // $0FBF + #$0FC0, // $0FC0 + #$0FC1, // $0FC1 + #$0FC2, // $0FC2 + #$0FC3, // $0FC3 + #$0FC4, // $0FC4 + #$0FC5, // $0FC5 + #$0FC6, // $0FC6 + #$0FC7, // $0FC7 + #$0FC8, // $0FC8 + #$0FC9, // $0FC9 + #$0FCA, // $0FCA + #$0FCB, // $0FCB + #$0FCC, // $0FCC + #$0FCD, // $0FCD + #$0FCE, // $0FCE + #$0FCF, // $0FCF + #$0FD0, // $0FD0 + #$0FD1, // $0FD1 + #$0FD2, // $0FD2 + #$0FD3, // $0FD3 + #$0FD4, // $0FD4 + #$0FD5, // $0FD5 + #$0FD6, // $0FD6 + #$0FD7, // $0FD7 + #$0FD8, // $0FD8 + #$0FD9, // $0FD9 + #$0FDA, // $0FDA + #$0FDB, // $0FDB + #$0FDC, // $0FDC + #$0FDD, // $0FDD + #$0FDE, // $0FDE + #$0FDF, // $0FDF + #$0FE0, // $0FE0 + #$0FE1, // $0FE1 + #$0FE2, // $0FE2 + #$0FE3, // $0FE3 + #$0FE4, // $0FE4 + #$0FE5, // $0FE5 + #$0FE6, // $0FE6 + #$0FE7, // $0FE7 + #$0FE8, // $0FE8 + #$0FE9, // $0FE9 + #$0FEA, // $0FEA + #$0FEB, // $0FEB + #$0FEC, // $0FEC + #$0FED, // $0FED + #$0FEE, // $0FEE + #$0FEF, // $0FEF + #$0FF0, // $0FF0 + #$0FF1, // $0FF1 + #$0FF2, // $0FF2 + #$0FF3, // $0FF3 + #$0FF4, // $0FF4 + #$0FF5, // $0FF5 + #$0FF6, // $0FF6 + #$0FF7, // $0FF7 + #$0FF8, // $0FF8 + #$0FF9, // $0FF9 + #$0FFA, // $0FFA + #$0FFB, // $0FFB + #$0FFC, // $0FFC + #$0FFD, // $0FFD + #$0FFE, // $0FFE + #$0FFF, // $0FFF + #$1000, // $1000 + #$1001, // $1001 + #$1002, // $1002 + #$1003, // $1003 + #$1004, // $1004 + #$1005, // $1005 + #$1006, // $1006 + #$1007, // $1007 + #$1008, // $1008 + #$1009, // $1009 + #$100A, // $100A + #$100B, // $100B + #$100C, // $100C + #$100D, // $100D + #$100E, // $100E + #$100F, // $100F + #$1010, // $1010 + #$1011, // $1011 + #$1012, // $1012 + #$1013, // $1013 + #$1014, // $1014 + #$1015, // $1015 + #$1016, // $1016 + #$1017, // $1017 + #$1018, // $1018 + #$1019, // $1019 + #$101A, // $101A + #$101B, // $101B + #$101C, // $101C + #$101D, // $101D + #$101E, // $101E + #$101F, // $101F + #$1020, // $1020 + #$1021, // $1021 + #$1022, // $1022 + #$1023, // $1023 + #$1024, // $1024 + #$1025, // $1025 + #$1026, // $1026 + #$1027, // $1027 + #$1028, // $1028 + #$1029, // $1029 + #$102A, // $102A + #$102B, // $102B + #$102C, // $102C + #$102D, // $102D + #$102E, // $102E + #$102F, // $102F + #$1030, // $1030 + #$1031, // $1031 + #$1032, // $1032 + #$1033, // $1033 + #$1034, // $1034 + #$1035, // $1035 + #$1036, // $1036 + #$1037, // $1037 + #$1038, // $1038 + #$1039, // $1039 + #$103A, // $103A + #$103B, // $103B + #$103C, // $103C + #$103D, // $103D + #$103E, // $103E + #$103F, // $103F + #$1040, // $1040 + #$1041, // $1041 + #$1042, // $1042 + #$1043, // $1043 + #$1044, // $1044 + #$1045, // $1045 + #$1046, // $1046 + #$1047, // $1047 + #$1048, // $1048 + #$1049, // $1049 + #$104A, // $104A + #$104B, // $104B + #$104C, // $104C + #$104D, // $104D + #$104E, // $104E + #$104F, // $104F + #$1050, // $1050 + #$1051, // $1051 + #$1052, // $1052 + #$1053, // $1053 + #$1054, // $1054 + #$1055, // $1055 + #$1056, // $1056 + #$1057, // $1057 + #$1058, // $1058 + #$1059, // $1059 + #$105A, // $105A + #$105B, // $105B + #$105C, // $105C + #$105D, // $105D + #$105E, // $105E + #$105F, // $105F + #$1060, // $1060 + #$1061, // $1061 + #$1062, // $1062 + #$1063, // $1063 + #$1064, // $1064 + #$1065, // $1065 + #$1066, // $1066 + #$1067, // $1067 + #$1068, // $1068 + #$1069, // $1069 + #$106A, // $106A + #$106B, // $106B + #$106C, // $106C + #$106D, // $106D + #$106E, // $106E + #$106F, // $106F + #$1070, // $1070 + #$1071, // $1071 + #$1072, // $1072 + #$1073, // $1073 + #$1074, // $1074 + #$1075, // $1075 + #$1076, // $1076 + #$1077, // $1077 + #$1078, // $1078 + #$1079, // $1079 + #$107A, // $107A + #$107B, // $107B + #$107C, // $107C + #$107D, // $107D + #$107E, // $107E + #$107F, // $107F + #$1080, // $1080 + #$1081, // $1081 + #$1082, // $1082 + #$1083, // $1083 + #$1084, // $1084 + #$1085, // $1085 + #$1086, // $1086 + #$1087, // $1087 + #$1088, // $1088 + #$1089, // $1089 + #$108A, // $108A + #$108B, // $108B + #$108C, // $108C + #$108D, // $108D + #$108E, // $108E + #$108F, // $108F + #$1090, // $1090 + #$1091, // $1091 + #$1092, // $1092 + #$1093, // $1093 + #$1094, // $1094 + #$1095, // $1095 + #$1096, // $1096 + #$1097, // $1097 + #$1098, // $1098 + #$1099, // $1099 + #$109A, // $109A + #$109B, // $109B + #$109C, // $109C + #$109D, // $109D + #$109E, // $109E + #$109F, // $109F + #$2D00, // $10A0 + #$2D01, // $10A1 + #$2D02, // $10A2 + #$2D03, // $10A3 + #$2D04, // $10A4 + #$2D05, // $10A5 + #$2D06, // $10A6 + #$2D07, // $10A7 + #$2D08, // $10A8 + #$2D09, // $10A9 + #$2D0A, // $10AA + #$2D0B, // $10AB + #$2D0C, // $10AC + #$2D0D, // $10AD + #$2D0E, // $10AE + #$2D0F, // $10AF + #$2D10, // $10B0 + #$2D11, // $10B1 + #$2D12, // $10B2 + #$2D13, // $10B3 + #$2D14, // $10B4 + #$2D15, // $10B5 + #$2D16, // $10B6 + #$2D17, // $10B7 + #$2D18, // $10B8 + #$2D19, // $10B9 + #$2D1A, // $10BA + #$2D1B, // $10BB + #$2D1C, // $10BC + #$2D1D, // $10BD + #$2D1E, // $10BE + #$2D1F, // $10BF + #$2D20, // $10C0 + #$2D21, // $10C1 + #$2D22, // $10C2 + #$2D23, // $10C3 + #$2D24, // $10C4 + #$2D25, // $10C5 + #$10C6, // $10C6 + #$2D27, // $10C7 + #$10C8, // $10C8 + #$10C9, // $10C9 + #$10CA, // $10CA + #$10CB, // $10CB + #$10CC, // $10CC + #$2D2D, // $10CD + #$10CE, // $10CE + #$10CF, // $10CF + #$10D0, // $10D0 + #$10D1, // $10D1 + #$10D2, // $10D2 + #$10D3, // $10D3 + #$10D4, // $10D4 + #$10D5, // $10D5 + #$10D6, // $10D6 + #$10D7, // $10D7 + #$10D8, // $10D8 + #$10D9, // $10D9 + #$10DA, // $10DA + #$10DB, // $10DB + #$10DC, // $10DC + #$10DD, // $10DD + #$10DE, // $10DE + #$10DF, // $10DF + #$10E0, // $10E0 + #$10E1, // $10E1 + #$10E2, // $10E2 + #$10E3, // $10E3 + #$10E4, // $10E4 + #$10E5, // $10E5 + #$10E6, // $10E6 + #$10E7, // $10E7 + #$10E8, // $10E8 + #$10E9, // $10E9 + #$10EA, // $10EA + #$10EB, // $10EB + #$10EC, // $10EC + #$10ED, // $10ED + #$10EE, // $10EE + #$10EF, // $10EF + #$10F0, // $10F0 + #$10F1, // $10F1 + #$10F2, // $10F2 + #$10F3, // $10F3 + #$10F4, // $10F4 + #$10F5, // $10F5 + #$10F6, // $10F6 + #$10F7, // $10F7 + #$10F8, // $10F8 + #$10F9, // $10F9 + #$10FA, // $10FA + #$10FB, // $10FB + #$10FC, // $10FC + #$10FD, // $10FD + #$10FE, // $10FE + #$10FF, // $10FF + #$1100, // $1100 + #$1101, // $1101 + #$1102, // $1102 + #$1103, // $1103 + #$1104, // $1104 + #$1105, // $1105 + #$1106, // $1106 + #$1107, // $1107 + #$1108, // $1108 + #$1109, // $1109 + #$110A, // $110A + #$110B, // $110B + #$110C, // $110C + #$110D, // $110D + #$110E, // $110E + #$110F, // $110F + #$1110, // $1110 + #$1111, // $1111 + #$1112, // $1112 + #$1113, // $1113 + #$1114, // $1114 + #$1115, // $1115 + #$1116, // $1116 + #$1117, // $1117 + #$1118, // $1118 + #$1119, // $1119 + #$111A, // $111A + #$111B, // $111B + #$111C, // $111C + #$111D, // $111D + #$111E, // $111E + #$111F, // $111F + #$1120, // $1120 + #$1121, // $1121 + #$1122, // $1122 + #$1123, // $1123 + #$1124, // $1124 + #$1125, // $1125 + #$1126, // $1126 + #$1127, // $1127 + #$1128, // $1128 + #$1129, // $1129 + #$112A, // $112A + #$112B, // $112B + #$112C, // $112C + #$112D, // $112D + #$112E, // $112E + #$112F, // $112F + #$1130, // $1130 + #$1131, // $1131 + #$1132, // $1132 + #$1133, // $1133 + #$1134, // $1134 + #$1135, // $1135 + #$1136, // $1136 + #$1137, // $1137 + #$1138, // $1138 + #$1139, // $1139 + #$113A, // $113A + #$113B, // $113B + #$113C, // $113C + #$113D, // $113D + #$113E, // $113E + #$113F, // $113F + #$1140, // $1140 + #$1141, // $1141 + #$1142, // $1142 + #$1143, // $1143 + #$1144, // $1144 + #$1145, // $1145 + #$1146, // $1146 + #$1147, // $1147 + #$1148, // $1148 + #$1149, // $1149 + #$114A, // $114A + #$114B, // $114B + #$114C, // $114C + #$114D, // $114D + #$114E, // $114E + #$114F, // $114F + #$1150, // $1150 + #$1151, // $1151 + #$1152, // $1152 + #$1153, // $1153 + #$1154, // $1154 + #$1155, // $1155 + #$1156, // $1156 + #$1157, // $1157 + #$1158, // $1158 + #$1159, // $1159 + #$115A, // $115A + #$115B, // $115B + #$115C, // $115C + #$115D, // $115D + #$115E, // $115E + #$115F, // $115F + #$1160, // $1160 + #$1161, // $1161 + #$1162, // $1162 + #$1163, // $1163 + #$1164, // $1164 + #$1165, // $1165 + #$1166, // $1166 + #$1167, // $1167 + #$1168, // $1168 + #$1169, // $1169 + #$116A, // $116A + #$116B, // $116B + #$116C, // $116C + #$116D, // $116D + #$116E, // $116E + #$116F, // $116F + #$1170, // $1170 + #$1171, // $1171 + #$1172, // $1172 + #$1173, // $1173 + #$1174, // $1174 + #$1175, // $1175 + #$1176, // $1176 + #$1177, // $1177 + #$1178, // $1178 + #$1179, // $1179 + #$117A, // $117A + #$117B, // $117B + #$117C, // $117C + #$117D, // $117D + #$117E, // $117E + #$117F, // $117F + #$1180, // $1180 + #$1181, // $1181 + #$1182, // $1182 + #$1183, // $1183 + #$1184, // $1184 + #$1185, // $1185 + #$1186, // $1186 + #$1187, // $1187 + #$1188, // $1188 + #$1189, // $1189 + #$118A, // $118A + #$118B, // $118B + #$118C, // $118C + #$118D, // $118D + #$118E, // $118E + #$118F, // $118F + #$1190, // $1190 + #$1191, // $1191 + #$1192, // $1192 + #$1193, // $1193 + #$1194, // $1194 + #$1195, // $1195 + #$1196, // $1196 + #$1197, // $1197 + #$1198, // $1198 + #$1199, // $1199 + #$119A, // $119A + #$119B, // $119B + #$119C, // $119C + #$119D, // $119D + #$119E, // $119E + #$119F, // $119F + #$11A0, // $11A0 + #$11A1, // $11A1 + #$11A2, // $11A2 + #$11A3, // $11A3 + #$11A4, // $11A4 + #$11A5, // $11A5 + #$11A6, // $11A6 + #$11A7, // $11A7 + #$11A8, // $11A8 + #$11A9, // $11A9 + #$11AA, // $11AA + #$11AB, // $11AB + #$11AC, // $11AC + #$11AD, // $11AD + #$11AE, // $11AE + #$11AF, // $11AF + #$11B0, // $11B0 + #$11B1, // $11B1 + #$11B2, // $11B2 + #$11B3, // $11B3 + #$11B4, // $11B4 + #$11B5, // $11B5 + #$11B6, // $11B6 + #$11B7, // $11B7 + #$11B8, // $11B8 + #$11B9, // $11B9 + #$11BA, // $11BA + #$11BB, // $11BB + #$11BC, // $11BC + #$11BD, // $11BD + #$11BE, // $11BE + #$11BF, // $11BF + #$11C0, // $11C0 + #$11C1, // $11C1 + #$11C2, // $11C2 + #$11C3, // $11C3 + #$11C4, // $11C4 + #$11C5, // $11C5 + #$11C6, // $11C6 + #$11C7, // $11C7 + #$11C8, // $11C8 + #$11C9, // $11C9 + #$11CA, // $11CA + #$11CB, // $11CB + #$11CC, // $11CC + #$11CD, // $11CD + #$11CE, // $11CE + #$11CF, // $11CF + #$11D0, // $11D0 + #$11D1, // $11D1 + #$11D2, // $11D2 + #$11D3, // $11D3 + #$11D4, // $11D4 + #$11D5, // $11D5 + #$11D6, // $11D6 + #$11D7, // $11D7 + #$11D8, // $11D8 + #$11D9, // $11D9 + #$11DA, // $11DA + #$11DB, // $11DB + #$11DC, // $11DC + #$11DD, // $11DD + #$11DE, // $11DE + #$11DF, // $11DF + #$11E0, // $11E0 + #$11E1, // $11E1 + #$11E2, // $11E2 + #$11E3, // $11E3 + #$11E4, // $11E4 + #$11E5, // $11E5 + #$11E6, // $11E6 + #$11E7, // $11E7 + #$11E8, // $11E8 + #$11E9, // $11E9 + #$11EA, // $11EA + #$11EB, // $11EB + #$11EC, // $11EC + #$11ED, // $11ED + #$11EE, // $11EE + #$11EF, // $11EF + #$11F0, // $11F0 + #$11F1, // $11F1 + #$11F2, // $11F2 + #$11F3, // $11F3 + #$11F4, // $11F4 + #$11F5, // $11F5 + #$11F6, // $11F6 + #$11F7, // $11F7 + #$11F8, // $11F8 + #$11F9, // $11F9 + #$11FA, // $11FA + #$11FB, // $11FB + #$11FC, // $11FC + #$11FD, // $11FD + #$11FE, // $11FE + #$11FF, // $11FF + #$1200, // $1200 + #$1201, // $1201 + #$1202, // $1202 + #$1203, // $1203 + #$1204, // $1204 + #$1205, // $1205 + #$1206, // $1206 + #$1207, // $1207 + #$1208, // $1208 + #$1209, // $1209 + #$120A, // $120A + #$120B, // $120B + #$120C, // $120C + #$120D, // $120D + #$120E, // $120E + #$120F, // $120F + #$1210, // $1210 + #$1211, // $1211 + #$1212, // $1212 + #$1213, // $1213 + #$1214, // $1214 + #$1215, // $1215 + #$1216, // $1216 + #$1217, // $1217 + #$1218, // $1218 + #$1219, // $1219 + #$121A, // $121A + #$121B, // $121B + #$121C, // $121C + #$121D, // $121D + #$121E, // $121E + #$121F, // $121F + #$1220, // $1220 + #$1221, // $1221 + #$1222, // $1222 + #$1223, // $1223 + #$1224, // $1224 + #$1225, // $1225 + #$1226, // $1226 + #$1227, // $1227 + #$1228, // $1228 + #$1229, // $1229 + #$122A, // $122A + #$122B, // $122B + #$122C, // $122C + #$122D, // $122D + #$122E, // $122E + #$122F, // $122F + #$1230, // $1230 + #$1231, // $1231 + #$1232, // $1232 + #$1233, // $1233 + #$1234, // $1234 + #$1235, // $1235 + #$1236, // $1236 + #$1237, // $1237 + #$1238, // $1238 + #$1239, // $1239 + #$123A, // $123A + #$123B, // $123B + #$123C, // $123C + #$123D, // $123D + #$123E, // $123E + #$123F, // $123F + #$1240, // $1240 + #$1241, // $1241 + #$1242, // $1242 + #$1243, // $1243 + #$1244, // $1244 + #$1245, // $1245 + #$1246, // $1246 + #$1247, // $1247 + #$1248, // $1248 + #$1249, // $1249 + #$124A, // $124A + #$124B, // $124B + #$124C, // $124C + #$124D, // $124D + #$124E, // $124E + #$124F, // $124F + #$1250, // $1250 + #$1251, // $1251 + #$1252, // $1252 + #$1253, // $1253 + #$1254, // $1254 + #$1255, // $1255 + #$1256, // $1256 + #$1257, // $1257 + #$1258, // $1258 + #$1259, // $1259 + #$125A, // $125A + #$125B, // $125B + #$125C, // $125C + #$125D, // $125D + #$125E, // $125E + #$125F, // $125F + #$1260, // $1260 + #$1261, // $1261 + #$1262, // $1262 + #$1263, // $1263 + #$1264, // $1264 + #$1265, // $1265 + #$1266, // $1266 + #$1267, // $1267 + #$1268, // $1268 + #$1269, // $1269 + #$126A, // $126A + #$126B, // $126B + #$126C, // $126C + #$126D, // $126D + #$126E, // $126E + #$126F, // $126F + #$1270, // $1270 + #$1271, // $1271 + #$1272, // $1272 + #$1273, // $1273 + #$1274, // $1274 + #$1275, // $1275 + #$1276, // $1276 + #$1277, // $1277 + #$1278, // $1278 + #$1279, // $1279 + #$127A, // $127A + #$127B, // $127B + #$127C, // $127C + #$127D, // $127D + #$127E, // $127E + #$127F, // $127F + #$1280, // $1280 + #$1281, // $1281 + #$1282, // $1282 + #$1283, // $1283 + #$1284, // $1284 + #$1285, // $1285 + #$1286, // $1286 + #$1287, // $1287 + #$1288, // $1288 + #$1289, // $1289 + #$128A, // $128A + #$128B, // $128B + #$128C, // $128C + #$128D, // $128D + #$128E, // $128E + #$128F, // $128F + #$1290, // $1290 + #$1291, // $1291 + #$1292, // $1292 + #$1293, // $1293 + #$1294, // $1294 + #$1295, // $1295 + #$1296, // $1296 + #$1297, // $1297 + #$1298, // $1298 + #$1299, // $1299 + #$129A, // $129A + #$129B, // $129B + #$129C, // $129C + #$129D, // $129D + #$129E, // $129E + #$129F, // $129F + #$12A0, // $12A0 + #$12A1, // $12A1 + #$12A2, // $12A2 + #$12A3, // $12A3 + #$12A4, // $12A4 + #$12A5, // $12A5 + #$12A6, // $12A6 + #$12A7, // $12A7 + #$12A8, // $12A8 + #$12A9, // $12A9 + #$12AA, // $12AA + #$12AB, // $12AB + #$12AC, // $12AC + #$12AD, // $12AD + #$12AE, // $12AE + #$12AF, // $12AF + #$12B0, // $12B0 + #$12B1, // $12B1 + #$12B2, // $12B2 + #$12B3, // $12B3 + #$12B4, // $12B4 + #$12B5, // $12B5 + #$12B6, // $12B6 + #$12B7, // $12B7 + #$12B8, // $12B8 + #$12B9, // $12B9 + #$12BA, // $12BA + #$12BB, // $12BB + #$12BC, // $12BC + #$12BD, // $12BD + #$12BE, // $12BE + #$12BF, // $12BF + #$12C0, // $12C0 + #$12C1, // $12C1 + #$12C2, // $12C2 + #$12C3, // $12C3 + #$12C4, // $12C4 + #$12C5, // $12C5 + #$12C6, // $12C6 + #$12C7, // $12C7 + #$12C8, // $12C8 + #$12C9, // $12C9 + #$12CA, // $12CA + #$12CB, // $12CB + #$12CC, // $12CC + #$12CD, // $12CD + #$12CE, // $12CE + #$12CF, // $12CF + #$12D0, // $12D0 + #$12D1, // $12D1 + #$12D2, // $12D2 + #$12D3, // $12D3 + #$12D4, // $12D4 + #$12D5, // $12D5 + #$12D6, // $12D6 + #$12D7, // $12D7 + #$12D8, // $12D8 + #$12D9, // $12D9 + #$12DA, // $12DA + #$12DB, // $12DB + #$12DC, // $12DC + #$12DD, // $12DD + #$12DE, // $12DE + #$12DF, // $12DF + #$12E0, // $12E0 + #$12E1, // $12E1 + #$12E2, // $12E2 + #$12E3, // $12E3 + #$12E4, // $12E4 + #$12E5, // $12E5 + #$12E6, // $12E6 + #$12E7, // $12E7 + #$12E8, // $12E8 + #$12E9, // $12E9 + #$12EA, // $12EA + #$12EB, // $12EB + #$12EC, // $12EC + #$12ED, // $12ED + #$12EE, // $12EE + #$12EF, // $12EF + #$12F0, // $12F0 + #$12F1, // $12F1 + #$12F2, // $12F2 + #$12F3, // $12F3 + #$12F4, // $12F4 + #$12F5, // $12F5 + #$12F6, // $12F6 + #$12F7, // $12F7 + #$12F8, // $12F8 + #$12F9, // $12F9 + #$12FA, // $12FA + #$12FB, // $12FB + #$12FC, // $12FC + #$12FD, // $12FD + #$12FE, // $12FE + #$12FF, // $12FF + #$1300, // $1300 + #$1301, // $1301 + #$1302, // $1302 + #$1303, // $1303 + #$1304, // $1304 + #$1305, // $1305 + #$1306, // $1306 + #$1307, // $1307 + #$1308, // $1308 + #$1309, // $1309 + #$130A, // $130A + #$130B, // $130B + #$130C, // $130C + #$130D, // $130D + #$130E, // $130E + #$130F, // $130F + #$1310, // $1310 + #$1311, // $1311 + #$1312, // $1312 + #$1313, // $1313 + #$1314, // $1314 + #$1315, // $1315 + #$1316, // $1316 + #$1317, // $1317 + #$1318, // $1318 + #$1319, // $1319 + #$131A, // $131A + #$131B, // $131B + #$131C, // $131C + #$131D, // $131D + #$131E, // $131E + #$131F, // $131F + #$1320, // $1320 + #$1321, // $1321 + #$1322, // $1322 + #$1323, // $1323 + #$1324, // $1324 + #$1325, // $1325 + #$1326, // $1326 + #$1327, // $1327 + #$1328, // $1328 + #$1329, // $1329 + #$132A, // $132A + #$132B, // $132B + #$132C, // $132C + #$132D, // $132D + #$132E, // $132E + #$132F, // $132F + #$1330, // $1330 + #$1331, // $1331 + #$1332, // $1332 + #$1333, // $1333 + #$1334, // $1334 + #$1335, // $1335 + #$1336, // $1336 + #$1337, // $1337 + #$1338, // $1338 + #$1339, // $1339 + #$133A, // $133A + #$133B, // $133B + #$133C, // $133C + #$133D, // $133D + #$133E, // $133E + #$133F, // $133F + #$1340, // $1340 + #$1341, // $1341 + #$1342, // $1342 + #$1343, // $1343 + #$1344, // $1344 + #$1345, // $1345 + #$1346, // $1346 + #$1347, // $1347 + #$1348, // $1348 + #$1349, // $1349 + #$134A, // $134A + #$134B, // $134B + #$134C, // $134C + #$134D, // $134D + #$134E, // $134E + #$134F, // $134F + #$1350, // $1350 + #$1351, // $1351 + #$1352, // $1352 + #$1353, // $1353 + #$1354, // $1354 + #$1355, // $1355 + #$1356, // $1356 + #$1357, // $1357 + #$1358, // $1358 + #$1359, // $1359 + #$135A, // $135A + #$135B, // $135B + #$135C, // $135C + #$135D, // $135D + #$135E, // $135E + #$135F, // $135F + #$1360, // $1360 + #$1361, // $1361 + #$1362, // $1362 + #$1363, // $1363 + #$1364, // $1364 + #$1365, // $1365 + #$1366, // $1366 + #$1367, // $1367 + #$1368, // $1368 + #$1369, // $1369 + #$136A, // $136A + #$136B, // $136B + #$136C, // $136C + #$136D, // $136D + #$136E, // $136E + #$136F, // $136F + #$1370, // $1370 + #$1371, // $1371 + #$1372, // $1372 + #$1373, // $1373 + #$1374, // $1374 + #$1375, // $1375 + #$1376, // $1376 + #$1377, // $1377 + #$1378, // $1378 + #$1379, // $1379 + #$137A, // $137A + #$137B, // $137B + #$137C, // $137C + #$137D, // $137D + #$137E, // $137E + #$137F, // $137F + #$1380, // $1380 + #$1381, // $1381 + #$1382, // $1382 + #$1383, // $1383 + #$1384, // $1384 + #$1385, // $1385 + #$1386, // $1386 + #$1387, // $1387 + #$1388, // $1388 + #$1389, // $1389 + #$138A, // $138A + #$138B, // $138B + #$138C, // $138C + #$138D, // $138D + #$138E, // $138E + #$138F, // $138F + #$1390, // $1390 + #$1391, // $1391 + #$1392, // $1392 + #$1393, // $1393 + #$1394, // $1394 + #$1395, // $1395 + #$1396, // $1396 + #$1397, // $1397 + #$1398, // $1398 + #$1399, // $1399 + #$139A, // $139A + #$139B, // $139B + #$139C, // $139C + #$139D, // $139D + #$139E, // $139E + #$139F, // $139F + #$AB70, // $13A0 + #$AB71, // $13A1 + #$AB72, // $13A2 + #$AB73, // $13A3 + #$AB74, // $13A4 + #$AB75, // $13A5 + #$AB76, // $13A6 + #$AB77, // $13A7 + #$AB78, // $13A8 + #$AB79, // $13A9 + #$AB7A, // $13AA + #$AB7B, // $13AB + #$AB7C, // $13AC + #$AB7D, // $13AD + #$AB7E, // $13AE + #$AB7F, // $13AF + #$AB80, // $13B0 + #$AB81, // $13B1 + #$AB82, // $13B2 + #$AB83, // $13B3 + #$AB84, // $13B4 + #$AB85, // $13B5 + #$AB86, // $13B6 + #$AB87, // $13B7 + #$AB88, // $13B8 + #$AB89, // $13B9 + #$AB8A, // $13BA + #$AB8B, // $13BB + #$AB8C, // $13BC + #$AB8D, // $13BD + #$AB8E, // $13BE + #$AB8F, // $13BF + #$AB90, // $13C0 + #$AB91, // $13C1 + #$AB92, // $13C2 + #$AB93, // $13C3 + #$AB94, // $13C4 + #$AB95, // $13C5 + #$AB96, // $13C6 + #$AB97, // $13C7 + #$AB98, // $13C8 + #$AB99, // $13C9 + #$AB9A, // $13CA + #$AB9B, // $13CB + #$AB9C, // $13CC + #$AB9D, // $13CD + #$AB9E, // $13CE + #$AB9F, // $13CF + #$ABA0, // $13D0 + #$ABA1, // $13D1 + #$ABA2, // $13D2 + #$ABA3, // $13D3 + #$ABA4, // $13D4 + #$ABA5, // $13D5 + #$ABA6, // $13D6 + #$ABA7, // $13D7 + #$ABA8, // $13D8 + #$ABA9, // $13D9 + #$ABAA, // $13DA + #$ABAB, // $13DB + #$ABAC, // $13DC + #$ABAD, // $13DD + #$ABAE, // $13DE + #$ABAF, // $13DF + #$ABB0, // $13E0 + #$ABB1, // $13E1 + #$ABB2, // $13E2 + #$ABB3, // $13E3 + #$ABB4, // $13E4 + #$ABB5, // $13E5 + #$ABB6, // $13E6 + #$ABB7, // $13E7 + #$ABB8, // $13E8 + #$ABB9, // $13E9 + #$ABBA, // $13EA + #$ABBB, // $13EB + #$ABBC, // $13EC + #$ABBD, // $13ED + #$ABBE, // $13EE + #$ABBF, // $13EF + #$13F8, // $13F0 + #$13F9, // $13F1 + #$13FA, // $13F2 + #$13FB, // $13F3 + #$13FC, // $13F4 + #$13FD, // $13F5 + #$13F6, // $13F6 + #$13F7, // $13F7 + #$13F8, // $13F8 + #$13F9, // $13F9 + #$13FA, // $13FA + #$13FB, // $13FB + #$13FC, // $13FC + #$13FD, // $13FD + #$13FE, // $13FE + #$13FF, // $13FF + #$1400, // $1400 + #$1401, // $1401 + #$1402, // $1402 + #$1403, // $1403 + #$1404, // $1404 + #$1405, // $1405 + #$1406, // $1406 + #$1407, // $1407 + #$1408, // $1408 + #$1409, // $1409 + #$140A, // $140A + #$140B, // $140B + #$140C, // $140C + #$140D, // $140D + #$140E, // $140E + #$140F, // $140F + #$1410, // $1410 + #$1411, // $1411 + #$1412, // $1412 + #$1413, // $1413 + #$1414, // $1414 + #$1415, // $1415 + #$1416, // $1416 + #$1417, // $1417 + #$1418, // $1418 + #$1419, // $1419 + #$141A, // $141A + #$141B, // $141B + #$141C, // $141C + #$141D, // $141D + #$141E, // $141E + #$141F, // $141F + #$1420, // $1420 + #$1421, // $1421 + #$1422, // $1422 + #$1423, // $1423 + #$1424, // $1424 + #$1425, // $1425 + #$1426, // $1426 + #$1427, // $1427 + #$1428, // $1428 + #$1429, // $1429 + #$142A, // $142A + #$142B, // $142B + #$142C, // $142C + #$142D, // $142D + #$142E, // $142E + #$142F, // $142F + #$1430, // $1430 + #$1431, // $1431 + #$1432, // $1432 + #$1433, // $1433 + #$1434, // $1434 + #$1435, // $1435 + #$1436, // $1436 + #$1437, // $1437 + #$1438, // $1438 + #$1439, // $1439 + #$143A, // $143A + #$143B, // $143B + #$143C, // $143C + #$143D, // $143D + #$143E, // $143E + #$143F, // $143F + #$1440, // $1440 + #$1441, // $1441 + #$1442, // $1442 + #$1443, // $1443 + #$1444, // $1444 + #$1445, // $1445 + #$1446, // $1446 + #$1447, // $1447 + #$1448, // $1448 + #$1449, // $1449 + #$144A, // $144A + #$144B, // $144B + #$144C, // $144C + #$144D, // $144D + #$144E, // $144E + #$144F, // $144F + #$1450, // $1450 + #$1451, // $1451 + #$1452, // $1452 + #$1453, // $1453 + #$1454, // $1454 + #$1455, // $1455 + #$1456, // $1456 + #$1457, // $1457 + #$1458, // $1458 + #$1459, // $1459 + #$145A, // $145A + #$145B, // $145B + #$145C, // $145C + #$145D, // $145D + #$145E, // $145E + #$145F, // $145F + #$1460, // $1460 + #$1461, // $1461 + #$1462, // $1462 + #$1463, // $1463 + #$1464, // $1464 + #$1465, // $1465 + #$1466, // $1466 + #$1467, // $1467 + #$1468, // $1468 + #$1469, // $1469 + #$146A, // $146A + #$146B, // $146B + #$146C, // $146C + #$146D, // $146D + #$146E, // $146E + #$146F, // $146F + #$1470, // $1470 + #$1471, // $1471 + #$1472, // $1472 + #$1473, // $1473 + #$1474, // $1474 + #$1475, // $1475 + #$1476, // $1476 + #$1477, // $1477 + #$1478, // $1478 + #$1479, // $1479 + #$147A, // $147A + #$147B, // $147B + #$147C, // $147C + #$147D, // $147D + #$147E, // $147E + #$147F, // $147F + #$1480, // $1480 + #$1481, // $1481 + #$1482, // $1482 + #$1483, // $1483 + #$1484, // $1484 + #$1485, // $1485 + #$1486, // $1486 + #$1487, // $1487 + #$1488, // $1488 + #$1489, // $1489 + #$148A, // $148A + #$148B, // $148B + #$148C, // $148C + #$148D, // $148D + #$148E, // $148E + #$148F, // $148F + #$1490, // $1490 + #$1491, // $1491 + #$1492, // $1492 + #$1493, // $1493 + #$1494, // $1494 + #$1495, // $1495 + #$1496, // $1496 + #$1497, // $1497 + #$1498, // $1498 + #$1499, // $1499 + #$149A, // $149A + #$149B, // $149B + #$149C, // $149C + #$149D, // $149D + #$149E, // $149E + #$149F, // $149F + #$14A0, // $14A0 + #$14A1, // $14A1 + #$14A2, // $14A2 + #$14A3, // $14A3 + #$14A4, // $14A4 + #$14A5, // $14A5 + #$14A6, // $14A6 + #$14A7, // $14A7 + #$14A8, // $14A8 + #$14A9, // $14A9 + #$14AA, // $14AA + #$14AB, // $14AB + #$14AC, // $14AC + #$14AD, // $14AD + #$14AE, // $14AE + #$14AF, // $14AF + #$14B0, // $14B0 + #$14B1, // $14B1 + #$14B2, // $14B2 + #$14B3, // $14B3 + #$14B4, // $14B4 + #$14B5, // $14B5 + #$14B6, // $14B6 + #$14B7, // $14B7 + #$14B8, // $14B8 + #$14B9, // $14B9 + #$14BA, // $14BA + #$14BB, // $14BB + #$14BC, // $14BC + #$14BD, // $14BD + #$14BE, // $14BE + #$14BF, // $14BF + #$14C0, // $14C0 + #$14C1, // $14C1 + #$14C2, // $14C2 + #$14C3, // $14C3 + #$14C4, // $14C4 + #$14C5, // $14C5 + #$14C6, // $14C6 + #$14C7, // $14C7 + #$14C8, // $14C8 + #$14C9, // $14C9 + #$14CA, // $14CA + #$14CB, // $14CB + #$14CC, // $14CC + #$14CD, // $14CD + #$14CE, // $14CE + #$14CF, // $14CF + #$14D0, // $14D0 + #$14D1, // $14D1 + #$14D2, // $14D2 + #$14D3, // $14D3 + #$14D4, // $14D4 + #$14D5, // $14D5 + #$14D6, // $14D6 + #$14D7, // $14D7 + #$14D8, // $14D8 + #$14D9, // $14D9 + #$14DA, // $14DA + #$14DB, // $14DB + #$14DC, // $14DC + #$14DD, // $14DD + #$14DE, // $14DE + #$14DF, // $14DF + #$14E0, // $14E0 + #$14E1, // $14E1 + #$14E2, // $14E2 + #$14E3, // $14E3 + #$14E4, // $14E4 + #$14E5, // $14E5 + #$14E6, // $14E6 + #$14E7, // $14E7 + #$14E8, // $14E8 + #$14E9, // $14E9 + #$14EA, // $14EA + #$14EB, // $14EB + #$14EC, // $14EC + #$14ED, // $14ED + #$14EE, // $14EE + #$14EF, // $14EF + #$14F0, // $14F0 + #$14F1, // $14F1 + #$14F2, // $14F2 + #$14F3, // $14F3 + #$14F4, // $14F4 + #$14F5, // $14F5 + #$14F6, // $14F6 + #$14F7, // $14F7 + #$14F8, // $14F8 + #$14F9, // $14F9 + #$14FA, // $14FA + #$14FB, // $14FB + #$14FC, // $14FC + #$14FD, // $14FD + #$14FE, // $14FE + #$14FF, // $14FF + #$1500, // $1500 + #$1501, // $1501 + #$1502, // $1502 + #$1503, // $1503 + #$1504, // $1504 + #$1505, // $1505 + #$1506, // $1506 + #$1507, // $1507 + #$1508, // $1508 + #$1509, // $1509 + #$150A, // $150A + #$150B, // $150B + #$150C, // $150C + #$150D, // $150D + #$150E, // $150E + #$150F, // $150F + #$1510, // $1510 + #$1511, // $1511 + #$1512, // $1512 + #$1513, // $1513 + #$1514, // $1514 + #$1515, // $1515 + #$1516, // $1516 + #$1517, // $1517 + #$1518, // $1518 + #$1519, // $1519 + #$151A, // $151A + #$151B, // $151B + #$151C, // $151C + #$151D, // $151D + #$151E, // $151E + #$151F, // $151F + #$1520, // $1520 + #$1521, // $1521 + #$1522, // $1522 + #$1523, // $1523 + #$1524, // $1524 + #$1525, // $1525 + #$1526, // $1526 + #$1527, // $1527 + #$1528, // $1528 + #$1529, // $1529 + #$152A, // $152A + #$152B, // $152B + #$152C, // $152C + #$152D, // $152D + #$152E, // $152E + #$152F, // $152F + #$1530, // $1530 + #$1531, // $1531 + #$1532, // $1532 + #$1533, // $1533 + #$1534, // $1534 + #$1535, // $1535 + #$1536, // $1536 + #$1537, // $1537 + #$1538, // $1538 + #$1539, // $1539 + #$153A, // $153A + #$153B, // $153B + #$153C, // $153C + #$153D, // $153D + #$153E, // $153E + #$153F, // $153F + #$1540, // $1540 + #$1541, // $1541 + #$1542, // $1542 + #$1543, // $1543 + #$1544, // $1544 + #$1545, // $1545 + #$1546, // $1546 + #$1547, // $1547 + #$1548, // $1548 + #$1549, // $1549 + #$154A, // $154A + #$154B, // $154B + #$154C, // $154C + #$154D, // $154D + #$154E, // $154E + #$154F, // $154F + #$1550, // $1550 + #$1551, // $1551 + #$1552, // $1552 + #$1553, // $1553 + #$1554, // $1554 + #$1555, // $1555 + #$1556, // $1556 + #$1557, // $1557 + #$1558, // $1558 + #$1559, // $1559 + #$155A, // $155A + #$155B, // $155B + #$155C, // $155C + #$155D, // $155D + #$155E, // $155E + #$155F, // $155F + #$1560, // $1560 + #$1561, // $1561 + #$1562, // $1562 + #$1563, // $1563 + #$1564, // $1564 + #$1565, // $1565 + #$1566, // $1566 + #$1567, // $1567 + #$1568, // $1568 + #$1569, // $1569 + #$156A, // $156A + #$156B, // $156B + #$156C, // $156C + #$156D, // $156D + #$156E, // $156E + #$156F, // $156F + #$1570, // $1570 + #$1571, // $1571 + #$1572, // $1572 + #$1573, // $1573 + #$1574, // $1574 + #$1575, // $1575 + #$1576, // $1576 + #$1577, // $1577 + #$1578, // $1578 + #$1579, // $1579 + #$157A, // $157A + #$157B, // $157B + #$157C, // $157C + #$157D, // $157D + #$157E, // $157E + #$157F, // $157F + #$1580, // $1580 + #$1581, // $1581 + #$1582, // $1582 + #$1583, // $1583 + #$1584, // $1584 + #$1585, // $1585 + #$1586, // $1586 + #$1587, // $1587 + #$1588, // $1588 + #$1589, // $1589 + #$158A, // $158A + #$158B, // $158B + #$158C, // $158C + #$158D, // $158D + #$158E, // $158E + #$158F, // $158F + #$1590, // $1590 + #$1591, // $1591 + #$1592, // $1592 + #$1593, // $1593 + #$1594, // $1594 + #$1595, // $1595 + #$1596, // $1596 + #$1597, // $1597 + #$1598, // $1598 + #$1599, // $1599 + #$159A, // $159A + #$159B, // $159B + #$159C, // $159C + #$159D, // $159D + #$159E, // $159E + #$159F, // $159F + #$15A0, // $15A0 + #$15A1, // $15A1 + #$15A2, // $15A2 + #$15A3, // $15A3 + #$15A4, // $15A4 + #$15A5, // $15A5 + #$15A6, // $15A6 + #$15A7, // $15A7 + #$15A8, // $15A8 + #$15A9, // $15A9 + #$15AA, // $15AA + #$15AB, // $15AB + #$15AC, // $15AC + #$15AD, // $15AD + #$15AE, // $15AE + #$15AF, // $15AF + #$15B0, // $15B0 + #$15B1, // $15B1 + #$15B2, // $15B2 + #$15B3, // $15B3 + #$15B4, // $15B4 + #$15B5, // $15B5 + #$15B6, // $15B6 + #$15B7, // $15B7 + #$15B8, // $15B8 + #$15B9, // $15B9 + #$15BA, // $15BA + #$15BB, // $15BB + #$15BC, // $15BC + #$15BD, // $15BD + #$15BE, // $15BE + #$15BF, // $15BF + #$15C0, // $15C0 + #$15C1, // $15C1 + #$15C2, // $15C2 + #$15C3, // $15C3 + #$15C4, // $15C4 + #$15C5, // $15C5 + #$15C6, // $15C6 + #$15C7, // $15C7 + #$15C8, // $15C8 + #$15C9, // $15C9 + #$15CA, // $15CA + #$15CB, // $15CB + #$15CC, // $15CC + #$15CD, // $15CD + #$15CE, // $15CE + #$15CF, // $15CF + #$15D0, // $15D0 + #$15D1, // $15D1 + #$15D2, // $15D2 + #$15D3, // $15D3 + #$15D4, // $15D4 + #$15D5, // $15D5 + #$15D6, // $15D6 + #$15D7, // $15D7 + #$15D8, // $15D8 + #$15D9, // $15D9 + #$15DA, // $15DA + #$15DB, // $15DB + #$15DC, // $15DC + #$15DD, // $15DD + #$15DE, // $15DE + #$15DF, // $15DF + #$15E0, // $15E0 + #$15E1, // $15E1 + #$15E2, // $15E2 + #$15E3, // $15E3 + #$15E4, // $15E4 + #$15E5, // $15E5 + #$15E6, // $15E6 + #$15E7, // $15E7 + #$15E8, // $15E8 + #$15E9, // $15E9 + #$15EA, // $15EA + #$15EB, // $15EB + #$15EC, // $15EC + #$15ED, // $15ED + #$15EE, // $15EE + #$15EF, // $15EF + #$15F0, // $15F0 + #$15F1, // $15F1 + #$15F2, // $15F2 + #$15F3, // $15F3 + #$15F4, // $15F4 + #$15F5, // $15F5 + #$15F6, // $15F6 + #$15F7, // $15F7 + #$15F8, // $15F8 + #$15F9, // $15F9 + #$15FA, // $15FA + #$15FB, // $15FB + #$15FC, // $15FC + #$15FD, // $15FD + #$15FE, // $15FE + #$15FF, // $15FF + #$1600, // $1600 + #$1601, // $1601 + #$1602, // $1602 + #$1603, // $1603 + #$1604, // $1604 + #$1605, // $1605 + #$1606, // $1606 + #$1607, // $1607 + #$1608, // $1608 + #$1609, // $1609 + #$160A, // $160A + #$160B, // $160B + #$160C, // $160C + #$160D, // $160D + #$160E, // $160E + #$160F, // $160F + #$1610, // $1610 + #$1611, // $1611 + #$1612, // $1612 + #$1613, // $1613 + #$1614, // $1614 + #$1615, // $1615 + #$1616, // $1616 + #$1617, // $1617 + #$1618, // $1618 + #$1619, // $1619 + #$161A, // $161A + #$161B, // $161B + #$161C, // $161C + #$161D, // $161D + #$161E, // $161E + #$161F, // $161F + #$1620, // $1620 + #$1621, // $1621 + #$1622, // $1622 + #$1623, // $1623 + #$1624, // $1624 + #$1625, // $1625 + #$1626, // $1626 + #$1627, // $1627 + #$1628, // $1628 + #$1629, // $1629 + #$162A, // $162A + #$162B, // $162B + #$162C, // $162C + #$162D, // $162D + #$162E, // $162E + #$162F, // $162F + #$1630, // $1630 + #$1631, // $1631 + #$1632, // $1632 + #$1633, // $1633 + #$1634, // $1634 + #$1635, // $1635 + #$1636, // $1636 + #$1637, // $1637 + #$1638, // $1638 + #$1639, // $1639 + #$163A, // $163A + #$163B, // $163B + #$163C, // $163C + #$163D, // $163D + #$163E, // $163E + #$163F, // $163F + #$1640, // $1640 + #$1641, // $1641 + #$1642, // $1642 + #$1643, // $1643 + #$1644, // $1644 + #$1645, // $1645 + #$1646, // $1646 + #$1647, // $1647 + #$1648, // $1648 + #$1649, // $1649 + #$164A, // $164A + #$164B, // $164B + #$164C, // $164C + #$164D, // $164D + #$164E, // $164E + #$164F, // $164F + #$1650, // $1650 + #$1651, // $1651 + #$1652, // $1652 + #$1653, // $1653 + #$1654, // $1654 + #$1655, // $1655 + #$1656, // $1656 + #$1657, // $1657 + #$1658, // $1658 + #$1659, // $1659 + #$165A, // $165A + #$165B, // $165B + #$165C, // $165C + #$165D, // $165D + #$165E, // $165E + #$165F, // $165F + #$1660, // $1660 + #$1661, // $1661 + #$1662, // $1662 + #$1663, // $1663 + #$1664, // $1664 + #$1665, // $1665 + #$1666, // $1666 + #$1667, // $1667 + #$1668, // $1668 + #$1669, // $1669 + #$166A, // $166A + #$166B, // $166B + #$166C, // $166C + #$166D, // $166D + #$166E, // $166E + #$166F, // $166F + #$1670, // $1670 + #$1671, // $1671 + #$1672, // $1672 + #$1673, // $1673 + #$1674, // $1674 + #$1675, // $1675 + #$1676, // $1676 + #$1677, // $1677 + #$1678, // $1678 + #$1679, // $1679 + #$167A, // $167A + #$167B, // $167B + #$167C, // $167C + #$167D, // $167D + #$167E, // $167E + #$167F, // $167F + #$1680, // $1680 + #$1681, // $1681 + #$1682, // $1682 + #$1683, // $1683 + #$1684, // $1684 + #$1685, // $1685 + #$1686, // $1686 + #$1687, // $1687 + #$1688, // $1688 + #$1689, // $1689 + #$168A, // $168A + #$168B, // $168B + #$168C, // $168C + #$168D, // $168D + #$168E, // $168E + #$168F, // $168F + #$1690, // $1690 + #$1691, // $1691 + #$1692, // $1692 + #$1693, // $1693 + #$1694, // $1694 + #$1695, // $1695 + #$1696, // $1696 + #$1697, // $1697 + #$1698, // $1698 + #$1699, // $1699 + #$169A, // $169A + #$169B, // $169B + #$169C, // $169C + #$169D, // $169D + #$169E, // $169E + #$169F, // $169F + #$16A0, // $16A0 + #$16A1, // $16A1 + #$16A2, // $16A2 + #$16A3, // $16A3 + #$16A4, // $16A4 + #$16A5, // $16A5 + #$16A6, // $16A6 + #$16A7, // $16A7 + #$16A8, // $16A8 + #$16A9, // $16A9 + #$16AA, // $16AA + #$16AB, // $16AB + #$16AC, // $16AC + #$16AD, // $16AD + #$16AE, // $16AE + #$16AF, // $16AF + #$16B0, // $16B0 + #$16B1, // $16B1 + #$16B2, // $16B2 + #$16B3, // $16B3 + #$16B4, // $16B4 + #$16B5, // $16B5 + #$16B6, // $16B6 + #$16B7, // $16B7 + #$16B8, // $16B8 + #$16B9, // $16B9 + #$16BA, // $16BA + #$16BB, // $16BB + #$16BC, // $16BC + #$16BD, // $16BD + #$16BE, // $16BE + #$16BF, // $16BF + #$16C0, // $16C0 + #$16C1, // $16C1 + #$16C2, // $16C2 + #$16C3, // $16C3 + #$16C4, // $16C4 + #$16C5, // $16C5 + #$16C6, // $16C6 + #$16C7, // $16C7 + #$16C8, // $16C8 + #$16C9, // $16C9 + #$16CA, // $16CA + #$16CB, // $16CB + #$16CC, // $16CC + #$16CD, // $16CD + #$16CE, // $16CE + #$16CF, // $16CF + #$16D0, // $16D0 + #$16D1, // $16D1 + #$16D2, // $16D2 + #$16D3, // $16D3 + #$16D4, // $16D4 + #$16D5, // $16D5 + #$16D6, // $16D6 + #$16D7, // $16D7 + #$16D8, // $16D8 + #$16D9, // $16D9 + #$16DA, // $16DA + #$16DB, // $16DB + #$16DC, // $16DC + #$16DD, // $16DD + #$16DE, // $16DE + #$16DF, // $16DF + #$16E0, // $16E0 + #$16E1, // $16E1 + #$16E2, // $16E2 + #$16E3, // $16E3 + #$16E4, // $16E4 + #$16E5, // $16E5 + #$16E6, // $16E6 + #$16E7, // $16E7 + #$16E8, // $16E8 + #$16E9, // $16E9 + #$16EA, // $16EA + #$16EB, // $16EB + #$16EC, // $16EC + #$16ED, // $16ED + #$16EE, // $16EE + #$16EF, // $16EF + #$16F0, // $16F0 + #$16F1, // $16F1 + #$16F2, // $16F2 + #$16F3, // $16F3 + #$16F4, // $16F4 + #$16F5, // $16F5 + #$16F6, // $16F6 + #$16F7, // $16F7 + #$16F8, // $16F8 + #$16F9, // $16F9 + #$16FA, // $16FA + #$16FB, // $16FB + #$16FC, // $16FC + #$16FD, // $16FD + #$16FE, // $16FE + #$16FF, // $16FF + #$1700, // $1700 + #$1701, // $1701 + #$1702, // $1702 + #$1703, // $1703 + #$1704, // $1704 + #$1705, // $1705 + #$1706, // $1706 + #$1707, // $1707 + #$1708, // $1708 + #$1709, // $1709 + #$170A, // $170A + #$170B, // $170B + #$170C, // $170C + #$170D, // $170D + #$170E, // $170E + #$170F, // $170F + #$1710, // $1710 + #$1711, // $1711 + #$1712, // $1712 + #$1713, // $1713 + #$1714, // $1714 + #$1715, // $1715 + #$1716, // $1716 + #$1717, // $1717 + #$1718, // $1718 + #$1719, // $1719 + #$171A, // $171A + #$171B, // $171B + #$171C, // $171C + #$171D, // $171D + #$171E, // $171E + #$171F, // $171F + #$1720, // $1720 + #$1721, // $1721 + #$1722, // $1722 + #$1723, // $1723 + #$1724, // $1724 + #$1725, // $1725 + #$1726, // $1726 + #$1727, // $1727 + #$1728, // $1728 + #$1729, // $1729 + #$172A, // $172A + #$172B, // $172B + #$172C, // $172C + #$172D, // $172D + #$172E, // $172E + #$172F, // $172F + #$1730, // $1730 + #$1731, // $1731 + #$1732, // $1732 + #$1733, // $1733 + #$1734, // $1734 + #$1735, // $1735 + #$1736, // $1736 + #$1737, // $1737 + #$1738, // $1738 + #$1739, // $1739 + #$173A, // $173A + #$173B, // $173B + #$173C, // $173C + #$173D, // $173D + #$173E, // $173E + #$173F, // $173F + #$1740, // $1740 + #$1741, // $1741 + #$1742, // $1742 + #$1743, // $1743 + #$1744, // $1744 + #$1745, // $1745 + #$1746, // $1746 + #$1747, // $1747 + #$1748, // $1748 + #$1749, // $1749 + #$174A, // $174A + #$174B, // $174B + #$174C, // $174C + #$174D, // $174D + #$174E, // $174E + #$174F, // $174F + #$1750, // $1750 + #$1751, // $1751 + #$1752, // $1752 + #$1753, // $1753 + #$1754, // $1754 + #$1755, // $1755 + #$1756, // $1756 + #$1757, // $1757 + #$1758, // $1758 + #$1759, // $1759 + #$175A, // $175A + #$175B, // $175B + #$175C, // $175C + #$175D, // $175D + #$175E, // $175E + #$175F, // $175F + #$1760, // $1760 + #$1761, // $1761 + #$1762, // $1762 + #$1763, // $1763 + #$1764, // $1764 + #$1765, // $1765 + #$1766, // $1766 + #$1767, // $1767 + #$1768, // $1768 + #$1769, // $1769 + #$176A, // $176A + #$176B, // $176B + #$176C, // $176C + #$176D, // $176D + #$176E, // $176E + #$176F, // $176F + #$1770, // $1770 + #$1771, // $1771 + #$1772, // $1772 + #$1773, // $1773 + #$1774, // $1774 + #$1775, // $1775 + #$1776, // $1776 + #$1777, // $1777 + #$1778, // $1778 + #$1779, // $1779 + #$177A, // $177A + #$177B, // $177B + #$177C, // $177C + #$177D, // $177D + #$177E, // $177E + #$177F, // $177F + #$1780, // $1780 + #$1781, // $1781 + #$1782, // $1782 + #$1783, // $1783 + #$1784, // $1784 + #$1785, // $1785 + #$1786, // $1786 + #$1787, // $1787 + #$1788, // $1788 + #$1789, // $1789 + #$178A, // $178A + #$178B, // $178B + #$178C, // $178C + #$178D, // $178D + #$178E, // $178E + #$178F, // $178F + #$1790, // $1790 + #$1791, // $1791 + #$1792, // $1792 + #$1793, // $1793 + #$1794, // $1794 + #$1795, // $1795 + #$1796, // $1796 + #$1797, // $1797 + #$1798, // $1798 + #$1799, // $1799 + #$179A, // $179A + #$179B, // $179B + #$179C, // $179C + #$179D, // $179D + #$179E, // $179E + #$179F, // $179F + #$17A0, // $17A0 + #$17A1, // $17A1 + #$17A2, // $17A2 + #$17A3, // $17A3 + #$17A4, // $17A4 + #$17A5, // $17A5 + #$17A6, // $17A6 + #$17A7, // $17A7 + #$17A8, // $17A8 + #$17A9, // $17A9 + #$17AA, // $17AA + #$17AB, // $17AB + #$17AC, // $17AC + #$17AD, // $17AD + #$17AE, // $17AE + #$17AF, // $17AF + #$17B0, // $17B0 + #$17B1, // $17B1 + #$17B2, // $17B2 + #$17B3, // $17B3 + #$17B4, // $17B4 + #$17B5, // $17B5 + #$17B6, // $17B6 + #$17B7, // $17B7 + #$17B8, // $17B8 + #$17B9, // $17B9 + #$17BA, // $17BA + #$17BB, // $17BB + #$17BC, // $17BC + #$17BD, // $17BD + #$17BE, // $17BE + #$17BF, // $17BF + #$17C0, // $17C0 + #$17C1, // $17C1 + #$17C2, // $17C2 + #$17C3, // $17C3 + #$17C4, // $17C4 + #$17C5, // $17C5 + #$17C6, // $17C6 + #$17C7, // $17C7 + #$17C8, // $17C8 + #$17C9, // $17C9 + #$17CA, // $17CA + #$17CB, // $17CB + #$17CC, // $17CC + #$17CD, // $17CD + #$17CE, // $17CE + #$17CF, // $17CF + #$17D0, // $17D0 + #$17D1, // $17D1 + #$17D2, // $17D2 + #$17D3, // $17D3 + #$17D4, // $17D4 + #$17D5, // $17D5 + #$17D6, // $17D6 + #$17D7, // $17D7 + #$17D8, // $17D8 + #$17D9, // $17D9 + #$17DA, // $17DA + #$17DB, // $17DB + #$17DC, // $17DC + #$17DD, // $17DD + #$17DE, // $17DE + #$17DF, // $17DF + #$17E0, // $17E0 + #$17E1, // $17E1 + #$17E2, // $17E2 + #$17E3, // $17E3 + #$17E4, // $17E4 + #$17E5, // $17E5 + #$17E6, // $17E6 + #$17E7, // $17E7 + #$17E8, // $17E8 + #$17E9, // $17E9 + #$17EA, // $17EA + #$17EB, // $17EB + #$17EC, // $17EC + #$17ED, // $17ED + #$17EE, // $17EE + #$17EF, // $17EF + #$17F0, // $17F0 + #$17F1, // $17F1 + #$17F2, // $17F2 + #$17F3, // $17F3 + #$17F4, // $17F4 + #$17F5, // $17F5 + #$17F6, // $17F6 + #$17F7, // $17F7 + #$17F8, // $17F8 + #$17F9, // $17F9 + #$17FA, // $17FA + #$17FB, // $17FB + #$17FC, // $17FC + #$17FD, // $17FD + #$17FE, // $17FE + #$17FF, // $17FF + #$1800, // $1800 + #$1801, // $1801 + #$1802, // $1802 + #$1803, // $1803 + #$1804, // $1804 + #$1805, // $1805 + #$1806, // $1806 + #$1807, // $1807 + #$1808, // $1808 + #$1809, // $1809 + #$180A, // $180A + #$180B, // $180B + #$180C, // $180C + #$180D, // $180D + #$180E, // $180E + #$180F, // $180F + #$1810, // $1810 + #$1811, // $1811 + #$1812, // $1812 + #$1813, // $1813 + #$1814, // $1814 + #$1815, // $1815 + #$1816, // $1816 + #$1817, // $1817 + #$1818, // $1818 + #$1819, // $1819 + #$181A, // $181A + #$181B, // $181B + #$181C, // $181C + #$181D, // $181D + #$181E, // $181E + #$181F, // $181F + #$1820, // $1820 + #$1821, // $1821 + #$1822, // $1822 + #$1823, // $1823 + #$1824, // $1824 + #$1825, // $1825 + #$1826, // $1826 + #$1827, // $1827 + #$1828, // $1828 + #$1829, // $1829 + #$182A, // $182A + #$182B, // $182B + #$182C, // $182C + #$182D, // $182D + #$182E, // $182E + #$182F, // $182F + #$1830, // $1830 + #$1831, // $1831 + #$1832, // $1832 + #$1833, // $1833 + #$1834, // $1834 + #$1835, // $1835 + #$1836, // $1836 + #$1837, // $1837 + #$1838, // $1838 + #$1839, // $1839 + #$183A, // $183A + #$183B, // $183B + #$183C, // $183C + #$183D, // $183D + #$183E, // $183E + #$183F, // $183F + #$1840, // $1840 + #$1841, // $1841 + #$1842, // $1842 + #$1843, // $1843 + #$1844, // $1844 + #$1845, // $1845 + #$1846, // $1846 + #$1847, // $1847 + #$1848, // $1848 + #$1849, // $1849 + #$184A, // $184A + #$184B, // $184B + #$184C, // $184C + #$184D, // $184D + #$184E, // $184E + #$184F, // $184F + #$1850, // $1850 + #$1851, // $1851 + #$1852, // $1852 + #$1853, // $1853 + #$1854, // $1854 + #$1855, // $1855 + #$1856, // $1856 + #$1857, // $1857 + #$1858, // $1858 + #$1859, // $1859 + #$185A, // $185A + #$185B, // $185B + #$185C, // $185C + #$185D, // $185D + #$185E, // $185E + #$185F, // $185F + #$1860, // $1860 + #$1861, // $1861 + #$1862, // $1862 + #$1863, // $1863 + #$1864, // $1864 + #$1865, // $1865 + #$1866, // $1866 + #$1867, // $1867 + #$1868, // $1868 + #$1869, // $1869 + #$186A, // $186A + #$186B, // $186B + #$186C, // $186C + #$186D, // $186D + #$186E, // $186E + #$186F, // $186F + #$1870, // $1870 + #$1871, // $1871 + #$1872, // $1872 + #$1873, // $1873 + #$1874, // $1874 + #$1875, // $1875 + #$1876, // $1876 + #$1877, // $1877 + #$1878, // $1878 + #$1879, // $1879 + #$187A, // $187A + #$187B, // $187B + #$187C, // $187C + #$187D, // $187D + #$187E, // $187E + #$187F, // $187F + #$1880, // $1880 + #$1881, // $1881 + #$1882, // $1882 + #$1883, // $1883 + #$1884, // $1884 + #$1885, // $1885 + #$1886, // $1886 + #$1887, // $1887 + #$1888, // $1888 + #$1889, // $1889 + #$188A, // $188A + #$188B, // $188B + #$188C, // $188C + #$188D, // $188D + #$188E, // $188E + #$188F, // $188F + #$1890, // $1890 + #$1891, // $1891 + #$1892, // $1892 + #$1893, // $1893 + #$1894, // $1894 + #$1895, // $1895 + #$1896, // $1896 + #$1897, // $1897 + #$1898, // $1898 + #$1899, // $1899 + #$189A, // $189A + #$189B, // $189B + #$189C, // $189C + #$189D, // $189D + #$189E, // $189E + #$189F, // $189F + #$18A0, // $18A0 + #$18A1, // $18A1 + #$18A2, // $18A2 + #$18A3, // $18A3 + #$18A4, // $18A4 + #$18A5, // $18A5 + #$18A6, // $18A6 + #$18A7, // $18A7 + #$18A8, // $18A8 + #$18A9, // $18A9 + #$18AA, // $18AA + #$18AB, // $18AB + #$18AC, // $18AC + #$18AD, // $18AD + #$18AE, // $18AE + #$18AF, // $18AF + #$18B0, // $18B0 + #$18B1, // $18B1 + #$18B2, // $18B2 + #$18B3, // $18B3 + #$18B4, // $18B4 + #$18B5, // $18B5 + #$18B6, // $18B6 + #$18B7, // $18B7 + #$18B8, // $18B8 + #$18B9, // $18B9 + #$18BA, // $18BA + #$18BB, // $18BB + #$18BC, // $18BC + #$18BD, // $18BD + #$18BE, // $18BE + #$18BF, // $18BF + #$18C0, // $18C0 + #$18C1, // $18C1 + #$18C2, // $18C2 + #$18C3, // $18C3 + #$18C4, // $18C4 + #$18C5, // $18C5 + #$18C6, // $18C6 + #$18C7, // $18C7 + #$18C8, // $18C8 + #$18C9, // $18C9 + #$18CA, // $18CA + #$18CB, // $18CB + #$18CC, // $18CC + #$18CD, // $18CD + #$18CE, // $18CE + #$18CF, // $18CF + #$18D0, // $18D0 + #$18D1, // $18D1 + #$18D2, // $18D2 + #$18D3, // $18D3 + #$18D4, // $18D4 + #$18D5, // $18D5 + #$18D6, // $18D6 + #$18D7, // $18D7 + #$18D8, // $18D8 + #$18D9, // $18D9 + #$18DA, // $18DA + #$18DB, // $18DB + #$18DC, // $18DC + #$18DD, // $18DD + #$18DE, // $18DE + #$18DF, // $18DF + #$18E0, // $18E0 + #$18E1, // $18E1 + #$18E2, // $18E2 + #$18E3, // $18E3 + #$18E4, // $18E4 + #$18E5, // $18E5 + #$18E6, // $18E6 + #$18E7, // $18E7 + #$18E8, // $18E8 + #$18E9, // $18E9 + #$18EA, // $18EA + #$18EB, // $18EB + #$18EC, // $18EC + #$18ED, // $18ED + #$18EE, // $18EE + #$18EF, // $18EF + #$18F0, // $18F0 + #$18F1, // $18F1 + #$18F2, // $18F2 + #$18F3, // $18F3 + #$18F4, // $18F4 + #$18F5, // $18F5 + #$18F6, // $18F6 + #$18F7, // $18F7 + #$18F8, // $18F8 + #$18F9, // $18F9 + #$18FA, // $18FA + #$18FB, // $18FB + #$18FC, // $18FC + #$18FD, // $18FD + #$18FE, // $18FE + #$18FF, // $18FF + #$1900, // $1900 + #$1901, // $1901 + #$1902, // $1902 + #$1903, // $1903 + #$1904, // $1904 + #$1905, // $1905 + #$1906, // $1906 + #$1907, // $1907 + #$1908, // $1908 + #$1909, // $1909 + #$190A, // $190A + #$190B, // $190B + #$190C, // $190C + #$190D, // $190D + #$190E, // $190E + #$190F, // $190F + #$1910, // $1910 + #$1911, // $1911 + #$1912, // $1912 + #$1913, // $1913 + #$1914, // $1914 + #$1915, // $1915 + #$1916, // $1916 + #$1917, // $1917 + #$1918, // $1918 + #$1919, // $1919 + #$191A, // $191A + #$191B, // $191B + #$191C, // $191C + #$191D, // $191D + #$191E, // $191E + #$191F, // $191F + #$1920, // $1920 + #$1921, // $1921 + #$1922, // $1922 + #$1923, // $1923 + #$1924, // $1924 + #$1925, // $1925 + #$1926, // $1926 + #$1927, // $1927 + #$1928, // $1928 + #$1929, // $1929 + #$192A, // $192A + #$192B, // $192B + #$192C, // $192C + #$192D, // $192D + #$192E, // $192E + #$192F, // $192F + #$1930, // $1930 + #$1931, // $1931 + #$1932, // $1932 + #$1933, // $1933 + #$1934, // $1934 + #$1935, // $1935 + #$1936, // $1936 + #$1937, // $1937 + #$1938, // $1938 + #$1939, // $1939 + #$193A, // $193A + #$193B, // $193B + #$193C, // $193C + #$193D, // $193D + #$193E, // $193E + #$193F, // $193F + #$1940, // $1940 + #$1941, // $1941 + #$1942, // $1942 + #$1943, // $1943 + #$1944, // $1944 + #$1945, // $1945 + #$1946, // $1946 + #$1947, // $1947 + #$1948, // $1948 + #$1949, // $1949 + #$194A, // $194A + #$194B, // $194B + #$194C, // $194C + #$194D, // $194D + #$194E, // $194E + #$194F, // $194F + #$1950, // $1950 + #$1951, // $1951 + #$1952, // $1952 + #$1953, // $1953 + #$1954, // $1954 + #$1955, // $1955 + #$1956, // $1956 + #$1957, // $1957 + #$1958, // $1958 + #$1959, // $1959 + #$195A, // $195A + #$195B, // $195B + #$195C, // $195C + #$195D, // $195D + #$195E, // $195E + #$195F, // $195F + #$1960, // $1960 + #$1961, // $1961 + #$1962, // $1962 + #$1963, // $1963 + #$1964, // $1964 + #$1965, // $1965 + #$1966, // $1966 + #$1967, // $1967 + #$1968, // $1968 + #$1969, // $1969 + #$196A, // $196A + #$196B, // $196B + #$196C, // $196C + #$196D, // $196D + #$196E, // $196E + #$196F, // $196F + #$1970, // $1970 + #$1971, // $1971 + #$1972, // $1972 + #$1973, // $1973 + #$1974, // $1974 + #$1975, // $1975 + #$1976, // $1976 + #$1977, // $1977 + #$1978, // $1978 + #$1979, // $1979 + #$197A, // $197A + #$197B, // $197B + #$197C, // $197C + #$197D, // $197D + #$197E, // $197E + #$197F, // $197F + #$1980, // $1980 + #$1981, // $1981 + #$1982, // $1982 + #$1983, // $1983 + #$1984, // $1984 + #$1985, // $1985 + #$1986, // $1986 + #$1987, // $1987 + #$1988, // $1988 + #$1989, // $1989 + #$198A, // $198A + #$198B, // $198B + #$198C, // $198C + #$198D, // $198D + #$198E, // $198E + #$198F, // $198F + #$1990, // $1990 + #$1991, // $1991 + #$1992, // $1992 + #$1993, // $1993 + #$1994, // $1994 + #$1995, // $1995 + #$1996, // $1996 + #$1997, // $1997 + #$1998, // $1998 + #$1999, // $1999 + #$199A, // $199A + #$199B, // $199B + #$199C, // $199C + #$199D, // $199D + #$199E, // $199E + #$199F, // $199F + #$19A0, // $19A0 + #$19A1, // $19A1 + #$19A2, // $19A2 + #$19A3, // $19A3 + #$19A4, // $19A4 + #$19A5, // $19A5 + #$19A6, // $19A6 + #$19A7, // $19A7 + #$19A8, // $19A8 + #$19A9, // $19A9 + #$19AA, // $19AA + #$19AB, // $19AB + #$19AC, // $19AC + #$19AD, // $19AD + #$19AE, // $19AE + #$19AF, // $19AF + #$19B0, // $19B0 + #$19B1, // $19B1 + #$19B2, // $19B2 + #$19B3, // $19B3 + #$19B4, // $19B4 + #$19B5, // $19B5 + #$19B6, // $19B6 + #$19B7, // $19B7 + #$19B8, // $19B8 + #$19B9, // $19B9 + #$19BA, // $19BA + #$19BB, // $19BB + #$19BC, // $19BC + #$19BD, // $19BD + #$19BE, // $19BE + #$19BF, // $19BF + #$19C0, // $19C0 + #$19C1, // $19C1 + #$19C2, // $19C2 + #$19C3, // $19C3 + #$19C4, // $19C4 + #$19C5, // $19C5 + #$19C6, // $19C6 + #$19C7, // $19C7 + #$19C8, // $19C8 + #$19C9, // $19C9 + #$19CA, // $19CA + #$19CB, // $19CB + #$19CC, // $19CC + #$19CD, // $19CD + #$19CE, // $19CE + #$19CF, // $19CF + #$19D0, // $19D0 + #$19D1, // $19D1 + #$19D2, // $19D2 + #$19D3, // $19D3 + #$19D4, // $19D4 + #$19D5, // $19D5 + #$19D6, // $19D6 + #$19D7, // $19D7 + #$19D8, // $19D8 + #$19D9, // $19D9 + #$19DA, // $19DA + #$19DB, // $19DB + #$19DC, // $19DC + #$19DD, // $19DD + #$19DE, // $19DE + #$19DF, // $19DF + #$19E0, // $19E0 + #$19E1, // $19E1 + #$19E2, // $19E2 + #$19E3, // $19E3 + #$19E4, // $19E4 + #$19E5, // $19E5 + #$19E6, // $19E6 + #$19E7, // $19E7 + #$19E8, // $19E8 + #$19E9, // $19E9 + #$19EA, // $19EA + #$19EB, // $19EB + #$19EC, // $19EC + #$19ED, // $19ED + #$19EE, // $19EE + #$19EF, // $19EF + #$19F0, // $19F0 + #$19F1, // $19F1 + #$19F2, // $19F2 + #$19F3, // $19F3 + #$19F4, // $19F4 + #$19F5, // $19F5 + #$19F6, // $19F6 + #$19F7, // $19F7 + #$19F8, // $19F8 + #$19F9, // $19F9 + #$19FA, // $19FA + #$19FB, // $19FB + #$19FC, // $19FC + #$19FD, // $19FD + #$19FE, // $19FE + #$19FF, // $19FF + #$1A00, // $1A00 + #$1A01, // $1A01 + #$1A02, // $1A02 + #$1A03, // $1A03 + #$1A04, // $1A04 + #$1A05, // $1A05 + #$1A06, // $1A06 + #$1A07, // $1A07 + #$1A08, // $1A08 + #$1A09, // $1A09 + #$1A0A, // $1A0A + #$1A0B, // $1A0B + #$1A0C, // $1A0C + #$1A0D, // $1A0D + #$1A0E, // $1A0E + #$1A0F, // $1A0F + #$1A10, // $1A10 + #$1A11, // $1A11 + #$1A12, // $1A12 + #$1A13, // $1A13 + #$1A14, // $1A14 + #$1A15, // $1A15 + #$1A16, // $1A16 + #$1A17, // $1A17 + #$1A18, // $1A18 + #$1A19, // $1A19 + #$1A1A, // $1A1A + #$1A1B, // $1A1B + #$1A1C, // $1A1C + #$1A1D, // $1A1D + #$1A1E, // $1A1E + #$1A1F, // $1A1F + #$1A20, // $1A20 + #$1A21, // $1A21 + #$1A22, // $1A22 + #$1A23, // $1A23 + #$1A24, // $1A24 + #$1A25, // $1A25 + #$1A26, // $1A26 + #$1A27, // $1A27 + #$1A28, // $1A28 + #$1A29, // $1A29 + #$1A2A, // $1A2A + #$1A2B, // $1A2B + #$1A2C, // $1A2C + #$1A2D, // $1A2D + #$1A2E, // $1A2E + #$1A2F, // $1A2F + #$1A30, // $1A30 + #$1A31, // $1A31 + #$1A32, // $1A32 + #$1A33, // $1A33 + #$1A34, // $1A34 + #$1A35, // $1A35 + #$1A36, // $1A36 + #$1A37, // $1A37 + #$1A38, // $1A38 + #$1A39, // $1A39 + #$1A3A, // $1A3A + #$1A3B, // $1A3B + #$1A3C, // $1A3C + #$1A3D, // $1A3D + #$1A3E, // $1A3E + #$1A3F, // $1A3F + #$1A40, // $1A40 + #$1A41, // $1A41 + #$1A42, // $1A42 + #$1A43, // $1A43 + #$1A44, // $1A44 + #$1A45, // $1A45 + #$1A46, // $1A46 + #$1A47, // $1A47 + #$1A48, // $1A48 + #$1A49, // $1A49 + #$1A4A, // $1A4A + #$1A4B, // $1A4B + #$1A4C, // $1A4C + #$1A4D, // $1A4D + #$1A4E, // $1A4E + #$1A4F, // $1A4F + #$1A50, // $1A50 + #$1A51, // $1A51 + #$1A52, // $1A52 + #$1A53, // $1A53 + #$1A54, // $1A54 + #$1A55, // $1A55 + #$1A56, // $1A56 + #$1A57, // $1A57 + #$1A58, // $1A58 + #$1A59, // $1A59 + #$1A5A, // $1A5A + #$1A5B, // $1A5B + #$1A5C, // $1A5C + #$1A5D, // $1A5D + #$1A5E, // $1A5E + #$1A5F, // $1A5F + #$1A60, // $1A60 + #$1A61, // $1A61 + #$1A62, // $1A62 + #$1A63, // $1A63 + #$1A64, // $1A64 + #$1A65, // $1A65 + #$1A66, // $1A66 + #$1A67, // $1A67 + #$1A68, // $1A68 + #$1A69, // $1A69 + #$1A6A, // $1A6A + #$1A6B, // $1A6B + #$1A6C, // $1A6C + #$1A6D, // $1A6D + #$1A6E, // $1A6E + #$1A6F, // $1A6F + #$1A70, // $1A70 + #$1A71, // $1A71 + #$1A72, // $1A72 + #$1A73, // $1A73 + #$1A74, // $1A74 + #$1A75, // $1A75 + #$1A76, // $1A76 + #$1A77, // $1A77 + #$1A78, // $1A78 + #$1A79, // $1A79 + #$1A7A, // $1A7A + #$1A7B, // $1A7B + #$1A7C, // $1A7C + #$1A7D, // $1A7D + #$1A7E, // $1A7E + #$1A7F, // $1A7F + #$1A80, // $1A80 + #$1A81, // $1A81 + #$1A82, // $1A82 + #$1A83, // $1A83 + #$1A84, // $1A84 + #$1A85, // $1A85 + #$1A86, // $1A86 + #$1A87, // $1A87 + #$1A88, // $1A88 + #$1A89, // $1A89 + #$1A8A, // $1A8A + #$1A8B, // $1A8B + #$1A8C, // $1A8C + #$1A8D, // $1A8D + #$1A8E, // $1A8E + #$1A8F, // $1A8F + #$1A90, // $1A90 + #$1A91, // $1A91 + #$1A92, // $1A92 + #$1A93, // $1A93 + #$1A94, // $1A94 + #$1A95, // $1A95 + #$1A96, // $1A96 + #$1A97, // $1A97 + #$1A98, // $1A98 + #$1A99, // $1A99 + #$1A9A, // $1A9A + #$1A9B, // $1A9B + #$1A9C, // $1A9C + #$1A9D, // $1A9D + #$1A9E, // $1A9E + #$1A9F, // $1A9F + #$1AA0, // $1AA0 + #$1AA1, // $1AA1 + #$1AA2, // $1AA2 + #$1AA3, // $1AA3 + #$1AA4, // $1AA4 + #$1AA5, // $1AA5 + #$1AA6, // $1AA6 + #$1AA7, // $1AA7 + #$1AA8, // $1AA8 + #$1AA9, // $1AA9 + #$1AAA, // $1AAA + #$1AAB, // $1AAB + #$1AAC, // $1AAC + #$1AAD, // $1AAD + #$1AAE, // $1AAE + #$1AAF, // $1AAF + #$1AB0, // $1AB0 + #$1AB1, // $1AB1 + #$1AB2, // $1AB2 + #$1AB3, // $1AB3 + #$1AB4, // $1AB4 + #$1AB5, // $1AB5 + #$1AB6, // $1AB6 + #$1AB7, // $1AB7 + #$1AB8, // $1AB8 + #$1AB9, // $1AB9 + #$1ABA, // $1ABA + #$1ABB, // $1ABB + #$1ABC, // $1ABC + #$1ABD, // $1ABD + #$1ABE, // $1ABE + #$1ABF, // $1ABF + #$1AC0, // $1AC0 + #$1AC1, // $1AC1 + #$1AC2, // $1AC2 + #$1AC3, // $1AC3 + #$1AC4, // $1AC4 + #$1AC5, // $1AC5 + #$1AC6, // $1AC6 + #$1AC7, // $1AC7 + #$1AC8, // $1AC8 + #$1AC9, // $1AC9 + #$1ACA, // $1ACA + #$1ACB, // $1ACB + #$1ACC, // $1ACC + #$1ACD, // $1ACD + #$1ACE, // $1ACE + #$1ACF, // $1ACF + #$1AD0, // $1AD0 + #$1AD1, // $1AD1 + #$1AD2, // $1AD2 + #$1AD3, // $1AD3 + #$1AD4, // $1AD4 + #$1AD5, // $1AD5 + #$1AD6, // $1AD6 + #$1AD7, // $1AD7 + #$1AD8, // $1AD8 + #$1AD9, // $1AD9 + #$1ADA, // $1ADA + #$1ADB, // $1ADB + #$1ADC, // $1ADC + #$1ADD, // $1ADD + #$1ADE, // $1ADE + #$1ADF, // $1ADF + #$1AE0, // $1AE0 + #$1AE1, // $1AE1 + #$1AE2, // $1AE2 + #$1AE3, // $1AE3 + #$1AE4, // $1AE4 + #$1AE5, // $1AE5 + #$1AE6, // $1AE6 + #$1AE7, // $1AE7 + #$1AE8, // $1AE8 + #$1AE9, // $1AE9 + #$1AEA, // $1AEA + #$1AEB, // $1AEB + #$1AEC, // $1AEC + #$1AED, // $1AED + #$1AEE, // $1AEE + #$1AEF, // $1AEF + #$1AF0, // $1AF0 + #$1AF1, // $1AF1 + #$1AF2, // $1AF2 + #$1AF3, // $1AF3 + #$1AF4, // $1AF4 + #$1AF5, // $1AF5 + #$1AF6, // $1AF6 + #$1AF7, // $1AF7 + #$1AF8, // $1AF8 + #$1AF9, // $1AF9 + #$1AFA, // $1AFA + #$1AFB, // $1AFB + #$1AFC, // $1AFC + #$1AFD, // $1AFD + #$1AFE, // $1AFE + #$1AFF, // $1AFF + #$1B00, // $1B00 + #$1B01, // $1B01 + #$1B02, // $1B02 + #$1B03, // $1B03 + #$1B04, // $1B04 + #$1B05, // $1B05 + #$1B06, // $1B06 + #$1B07, // $1B07 + #$1B08, // $1B08 + #$1B09, // $1B09 + #$1B0A, // $1B0A + #$1B0B, // $1B0B + #$1B0C, // $1B0C + #$1B0D, // $1B0D + #$1B0E, // $1B0E + #$1B0F, // $1B0F + #$1B10, // $1B10 + #$1B11, // $1B11 + #$1B12, // $1B12 + #$1B13, // $1B13 + #$1B14, // $1B14 + #$1B15, // $1B15 + #$1B16, // $1B16 + #$1B17, // $1B17 + #$1B18, // $1B18 + #$1B19, // $1B19 + #$1B1A, // $1B1A + #$1B1B, // $1B1B + #$1B1C, // $1B1C + #$1B1D, // $1B1D + #$1B1E, // $1B1E + #$1B1F, // $1B1F + #$1B20, // $1B20 + #$1B21, // $1B21 + #$1B22, // $1B22 + #$1B23, // $1B23 + #$1B24, // $1B24 + #$1B25, // $1B25 + #$1B26, // $1B26 + #$1B27, // $1B27 + #$1B28, // $1B28 + #$1B29, // $1B29 + #$1B2A, // $1B2A + #$1B2B, // $1B2B + #$1B2C, // $1B2C + #$1B2D, // $1B2D + #$1B2E, // $1B2E + #$1B2F, // $1B2F + #$1B30, // $1B30 + #$1B31, // $1B31 + #$1B32, // $1B32 + #$1B33, // $1B33 + #$1B34, // $1B34 + #$1B35, // $1B35 + #$1B36, // $1B36 + #$1B37, // $1B37 + #$1B38, // $1B38 + #$1B39, // $1B39 + #$1B3A, // $1B3A + #$1B3B, // $1B3B + #$1B3C, // $1B3C + #$1B3D, // $1B3D + #$1B3E, // $1B3E + #$1B3F, // $1B3F + #$1B40, // $1B40 + #$1B41, // $1B41 + #$1B42, // $1B42 + #$1B43, // $1B43 + #$1B44, // $1B44 + #$1B45, // $1B45 + #$1B46, // $1B46 + #$1B47, // $1B47 + #$1B48, // $1B48 + #$1B49, // $1B49 + #$1B4A, // $1B4A + #$1B4B, // $1B4B + #$1B4C, // $1B4C + #$1B4D, // $1B4D + #$1B4E, // $1B4E + #$1B4F, // $1B4F + #$1B50, // $1B50 + #$1B51, // $1B51 + #$1B52, // $1B52 + #$1B53, // $1B53 + #$1B54, // $1B54 + #$1B55, // $1B55 + #$1B56, // $1B56 + #$1B57, // $1B57 + #$1B58, // $1B58 + #$1B59, // $1B59 + #$1B5A, // $1B5A + #$1B5B, // $1B5B + #$1B5C, // $1B5C + #$1B5D, // $1B5D + #$1B5E, // $1B5E + #$1B5F, // $1B5F + #$1B60, // $1B60 + #$1B61, // $1B61 + #$1B62, // $1B62 + #$1B63, // $1B63 + #$1B64, // $1B64 + #$1B65, // $1B65 + #$1B66, // $1B66 + #$1B67, // $1B67 + #$1B68, // $1B68 + #$1B69, // $1B69 + #$1B6A, // $1B6A + #$1B6B, // $1B6B + #$1B6C, // $1B6C + #$1B6D, // $1B6D + #$1B6E, // $1B6E + #$1B6F, // $1B6F + #$1B70, // $1B70 + #$1B71, // $1B71 + #$1B72, // $1B72 + #$1B73, // $1B73 + #$1B74, // $1B74 + #$1B75, // $1B75 + #$1B76, // $1B76 + #$1B77, // $1B77 + #$1B78, // $1B78 + #$1B79, // $1B79 + #$1B7A, // $1B7A + #$1B7B, // $1B7B + #$1B7C, // $1B7C + #$1B7D, // $1B7D + #$1B7E, // $1B7E + #$1B7F, // $1B7F + #$1B80, // $1B80 + #$1B81, // $1B81 + #$1B82, // $1B82 + #$1B83, // $1B83 + #$1B84, // $1B84 + #$1B85, // $1B85 + #$1B86, // $1B86 + #$1B87, // $1B87 + #$1B88, // $1B88 + #$1B89, // $1B89 + #$1B8A, // $1B8A + #$1B8B, // $1B8B + #$1B8C, // $1B8C + #$1B8D, // $1B8D + #$1B8E, // $1B8E + #$1B8F, // $1B8F + #$1B90, // $1B90 + #$1B91, // $1B91 + #$1B92, // $1B92 + #$1B93, // $1B93 + #$1B94, // $1B94 + #$1B95, // $1B95 + #$1B96, // $1B96 + #$1B97, // $1B97 + #$1B98, // $1B98 + #$1B99, // $1B99 + #$1B9A, // $1B9A + #$1B9B, // $1B9B + #$1B9C, // $1B9C + #$1B9D, // $1B9D + #$1B9E, // $1B9E + #$1B9F, // $1B9F + #$1BA0, // $1BA0 + #$1BA1, // $1BA1 + #$1BA2, // $1BA2 + #$1BA3, // $1BA3 + #$1BA4, // $1BA4 + #$1BA5, // $1BA5 + #$1BA6, // $1BA6 + #$1BA7, // $1BA7 + #$1BA8, // $1BA8 + #$1BA9, // $1BA9 + #$1BAA, // $1BAA + #$1BAB, // $1BAB + #$1BAC, // $1BAC + #$1BAD, // $1BAD + #$1BAE, // $1BAE + #$1BAF, // $1BAF + #$1BB0, // $1BB0 + #$1BB1, // $1BB1 + #$1BB2, // $1BB2 + #$1BB3, // $1BB3 + #$1BB4, // $1BB4 + #$1BB5, // $1BB5 + #$1BB6, // $1BB6 + #$1BB7, // $1BB7 + #$1BB8, // $1BB8 + #$1BB9, // $1BB9 + #$1BBA, // $1BBA + #$1BBB, // $1BBB + #$1BBC, // $1BBC + #$1BBD, // $1BBD + #$1BBE, // $1BBE + #$1BBF, // $1BBF + #$1BC0, // $1BC0 + #$1BC1, // $1BC1 + #$1BC2, // $1BC2 + #$1BC3, // $1BC3 + #$1BC4, // $1BC4 + #$1BC5, // $1BC5 + #$1BC6, // $1BC6 + #$1BC7, // $1BC7 + #$1BC8, // $1BC8 + #$1BC9, // $1BC9 + #$1BCA, // $1BCA + #$1BCB, // $1BCB + #$1BCC, // $1BCC + #$1BCD, // $1BCD + #$1BCE, // $1BCE + #$1BCF, // $1BCF + #$1BD0, // $1BD0 + #$1BD1, // $1BD1 + #$1BD2, // $1BD2 + #$1BD3, // $1BD3 + #$1BD4, // $1BD4 + #$1BD5, // $1BD5 + #$1BD6, // $1BD6 + #$1BD7, // $1BD7 + #$1BD8, // $1BD8 + #$1BD9, // $1BD9 + #$1BDA, // $1BDA + #$1BDB, // $1BDB + #$1BDC, // $1BDC + #$1BDD, // $1BDD + #$1BDE, // $1BDE + #$1BDF, // $1BDF + #$1BE0, // $1BE0 + #$1BE1, // $1BE1 + #$1BE2, // $1BE2 + #$1BE3, // $1BE3 + #$1BE4, // $1BE4 + #$1BE5, // $1BE5 + #$1BE6, // $1BE6 + #$1BE7, // $1BE7 + #$1BE8, // $1BE8 + #$1BE9, // $1BE9 + #$1BEA, // $1BEA + #$1BEB, // $1BEB + #$1BEC, // $1BEC + #$1BED, // $1BED + #$1BEE, // $1BEE + #$1BEF, // $1BEF + #$1BF0, // $1BF0 + #$1BF1, // $1BF1 + #$1BF2, // $1BF2 + #$1BF3, // $1BF3 + #$1BF4, // $1BF4 + #$1BF5, // $1BF5 + #$1BF6, // $1BF6 + #$1BF7, // $1BF7 + #$1BF8, // $1BF8 + #$1BF9, // $1BF9 + #$1BFA, // $1BFA + #$1BFB, // $1BFB + #$1BFC, // $1BFC + #$1BFD, // $1BFD + #$1BFE, // $1BFE + #$1BFF, // $1BFF + #$1C00, // $1C00 + #$1C01, // $1C01 + #$1C02, // $1C02 + #$1C03, // $1C03 + #$1C04, // $1C04 + #$1C05, // $1C05 + #$1C06, // $1C06 + #$1C07, // $1C07 + #$1C08, // $1C08 + #$1C09, // $1C09 + #$1C0A, // $1C0A + #$1C0B, // $1C0B + #$1C0C, // $1C0C + #$1C0D, // $1C0D + #$1C0E, // $1C0E + #$1C0F, // $1C0F + #$1C10, // $1C10 + #$1C11, // $1C11 + #$1C12, // $1C12 + #$1C13, // $1C13 + #$1C14, // $1C14 + #$1C15, // $1C15 + #$1C16, // $1C16 + #$1C17, // $1C17 + #$1C18, // $1C18 + #$1C19, // $1C19 + #$1C1A, // $1C1A + #$1C1B, // $1C1B + #$1C1C, // $1C1C + #$1C1D, // $1C1D + #$1C1E, // $1C1E + #$1C1F, // $1C1F + #$1C20, // $1C20 + #$1C21, // $1C21 + #$1C22, // $1C22 + #$1C23, // $1C23 + #$1C24, // $1C24 + #$1C25, // $1C25 + #$1C26, // $1C26 + #$1C27, // $1C27 + #$1C28, // $1C28 + #$1C29, // $1C29 + #$1C2A, // $1C2A + #$1C2B, // $1C2B + #$1C2C, // $1C2C + #$1C2D, // $1C2D + #$1C2E, // $1C2E + #$1C2F, // $1C2F + #$1C30, // $1C30 + #$1C31, // $1C31 + #$1C32, // $1C32 + #$1C33, // $1C33 + #$1C34, // $1C34 + #$1C35, // $1C35 + #$1C36, // $1C36 + #$1C37, // $1C37 + #$1C38, // $1C38 + #$1C39, // $1C39 + #$1C3A, // $1C3A + #$1C3B, // $1C3B + #$1C3C, // $1C3C + #$1C3D, // $1C3D + #$1C3E, // $1C3E + #$1C3F, // $1C3F + #$1C40, // $1C40 + #$1C41, // $1C41 + #$1C42, // $1C42 + #$1C43, // $1C43 + #$1C44, // $1C44 + #$1C45, // $1C45 + #$1C46, // $1C46 + #$1C47, // $1C47 + #$1C48, // $1C48 + #$1C49, // $1C49 + #$1C4A, // $1C4A + #$1C4B, // $1C4B + #$1C4C, // $1C4C + #$1C4D, // $1C4D + #$1C4E, // $1C4E + #$1C4F, // $1C4F + #$1C50, // $1C50 + #$1C51, // $1C51 + #$1C52, // $1C52 + #$1C53, // $1C53 + #$1C54, // $1C54 + #$1C55, // $1C55 + #$1C56, // $1C56 + #$1C57, // $1C57 + #$1C58, // $1C58 + #$1C59, // $1C59 + #$1C5A, // $1C5A + #$1C5B, // $1C5B + #$1C5C, // $1C5C + #$1C5D, // $1C5D + #$1C5E, // $1C5E + #$1C5F, // $1C5F + #$1C60, // $1C60 + #$1C61, // $1C61 + #$1C62, // $1C62 + #$1C63, // $1C63 + #$1C64, // $1C64 + #$1C65, // $1C65 + #$1C66, // $1C66 + #$1C67, // $1C67 + #$1C68, // $1C68 + #$1C69, // $1C69 + #$1C6A, // $1C6A + #$1C6B, // $1C6B + #$1C6C, // $1C6C + #$1C6D, // $1C6D + #$1C6E, // $1C6E + #$1C6F, // $1C6F + #$1C70, // $1C70 + #$1C71, // $1C71 + #$1C72, // $1C72 + #$1C73, // $1C73 + #$1C74, // $1C74 + #$1C75, // $1C75 + #$1C76, // $1C76 + #$1C77, // $1C77 + #$1C78, // $1C78 + #$1C79, // $1C79 + #$1C7A, // $1C7A + #$1C7B, // $1C7B + #$1C7C, // $1C7C + #$1C7D, // $1C7D + #$1C7E, // $1C7E + #$1C7F, // $1C7F + #$1C80, // $1C80 + #$1C81, // $1C81 + #$1C82, // $1C82 + #$1C83, // $1C83 + #$1C84, // $1C84 + #$1C85, // $1C85 + #$1C86, // $1C86 + #$1C87, // $1C87 + #$1C88, // $1C88 + #$1C89, // $1C89 + #$1C8A, // $1C8A + #$1C8B, // $1C8B + #$1C8C, // $1C8C + #$1C8D, // $1C8D + #$1C8E, // $1C8E + #$1C8F, // $1C8F + #$1C90, // $1C90 + #$1C91, // $1C91 + #$1C92, // $1C92 + #$1C93, // $1C93 + #$1C94, // $1C94 + #$1C95, // $1C95 + #$1C96, // $1C96 + #$1C97, // $1C97 + #$1C98, // $1C98 + #$1C99, // $1C99 + #$1C9A, // $1C9A + #$1C9B, // $1C9B + #$1C9C, // $1C9C + #$1C9D, // $1C9D + #$1C9E, // $1C9E + #$1C9F, // $1C9F + #$1CA0, // $1CA0 + #$1CA1, // $1CA1 + #$1CA2, // $1CA2 + #$1CA3, // $1CA3 + #$1CA4, // $1CA4 + #$1CA5, // $1CA5 + #$1CA6, // $1CA6 + #$1CA7, // $1CA7 + #$1CA8, // $1CA8 + #$1CA9, // $1CA9 + #$1CAA, // $1CAA + #$1CAB, // $1CAB + #$1CAC, // $1CAC + #$1CAD, // $1CAD + #$1CAE, // $1CAE + #$1CAF, // $1CAF + #$1CB0, // $1CB0 + #$1CB1, // $1CB1 + #$1CB2, // $1CB2 + #$1CB3, // $1CB3 + #$1CB4, // $1CB4 + #$1CB5, // $1CB5 + #$1CB6, // $1CB6 + #$1CB7, // $1CB7 + #$1CB8, // $1CB8 + #$1CB9, // $1CB9 + #$1CBA, // $1CBA + #$1CBB, // $1CBB + #$1CBC, // $1CBC + #$1CBD, // $1CBD + #$1CBE, // $1CBE + #$1CBF, // $1CBF + #$1CC0, // $1CC0 + #$1CC1, // $1CC1 + #$1CC2, // $1CC2 + #$1CC3, // $1CC3 + #$1CC4, // $1CC4 + #$1CC5, // $1CC5 + #$1CC6, // $1CC6 + #$1CC7, // $1CC7 + #$1CC8, // $1CC8 + #$1CC9, // $1CC9 + #$1CCA, // $1CCA + #$1CCB, // $1CCB + #$1CCC, // $1CCC + #$1CCD, // $1CCD + #$1CCE, // $1CCE + #$1CCF, // $1CCF + #$1CD0, // $1CD0 + #$1CD1, // $1CD1 + #$1CD2, // $1CD2 + #$1CD3, // $1CD3 + #$1CD4, // $1CD4 + #$1CD5, // $1CD5 + #$1CD6, // $1CD6 + #$1CD7, // $1CD7 + #$1CD8, // $1CD8 + #$1CD9, // $1CD9 + #$1CDA, // $1CDA + #$1CDB, // $1CDB + #$1CDC, // $1CDC + #$1CDD, // $1CDD + #$1CDE, // $1CDE + #$1CDF, // $1CDF + #$1CE0, // $1CE0 + #$1CE1, // $1CE1 + #$1CE2, // $1CE2 + #$1CE3, // $1CE3 + #$1CE4, // $1CE4 + #$1CE5, // $1CE5 + #$1CE6, // $1CE6 + #$1CE7, // $1CE7 + #$1CE8, // $1CE8 + #$1CE9, // $1CE9 + #$1CEA, // $1CEA + #$1CEB, // $1CEB + #$1CEC, // $1CEC + #$1CED, // $1CED + #$1CEE, // $1CEE + #$1CEF, // $1CEF + #$1CF0, // $1CF0 + #$1CF1, // $1CF1 + #$1CF2, // $1CF2 + #$1CF3, // $1CF3 + #$1CF4, // $1CF4 + #$1CF5, // $1CF5 + #$1CF6, // $1CF6 + #$1CF7, // $1CF7 + #$1CF8, // $1CF8 + #$1CF9, // $1CF9 + #$1CFA, // $1CFA + #$1CFB, // $1CFB + #$1CFC, // $1CFC + #$1CFD, // $1CFD + #$1CFE, // $1CFE + #$1CFF, // $1CFF + #$1D00, // $1D00 + #$1D01, // $1D01 + #$1D02, // $1D02 + #$1D03, // $1D03 + #$1D04, // $1D04 + #$1D05, // $1D05 + #$1D06, // $1D06 + #$1D07, // $1D07 + #$1D08, // $1D08 + #$1D09, // $1D09 + #$1D0A, // $1D0A + #$1D0B, // $1D0B + #$1D0C, // $1D0C + #$1D0D, // $1D0D + #$1D0E, // $1D0E + #$1D0F, // $1D0F + #$1D10, // $1D10 + #$1D11, // $1D11 + #$1D12, // $1D12 + #$1D13, // $1D13 + #$1D14, // $1D14 + #$1D15, // $1D15 + #$1D16, // $1D16 + #$1D17, // $1D17 + #$1D18, // $1D18 + #$1D19, // $1D19 + #$1D1A, // $1D1A + #$1D1B, // $1D1B + #$1D1C, // $1D1C + #$1D1D, // $1D1D + #$1D1E, // $1D1E + #$1D1F, // $1D1F + #$1D20, // $1D20 + #$1D21, // $1D21 + #$1D22, // $1D22 + #$1D23, // $1D23 + #$1D24, // $1D24 + #$1D25, // $1D25 + #$1D26, // $1D26 + #$1D27, // $1D27 + #$1D28, // $1D28 + #$1D29, // $1D29 + #$1D2A, // $1D2A + #$1D2B, // $1D2B + #$1D2C, // $1D2C + #$1D2D, // $1D2D + #$1D2E, // $1D2E + #$1D2F, // $1D2F + #$1D30, // $1D30 + #$1D31, // $1D31 + #$1D32, // $1D32 + #$1D33, // $1D33 + #$1D34, // $1D34 + #$1D35, // $1D35 + #$1D36, // $1D36 + #$1D37, // $1D37 + #$1D38, // $1D38 + #$1D39, // $1D39 + #$1D3A, // $1D3A + #$1D3B, // $1D3B + #$1D3C, // $1D3C + #$1D3D, // $1D3D + #$1D3E, // $1D3E + #$1D3F, // $1D3F + #$1D40, // $1D40 + #$1D41, // $1D41 + #$1D42, // $1D42 + #$1D43, // $1D43 + #$1D44, // $1D44 + #$1D45, // $1D45 + #$1D46, // $1D46 + #$1D47, // $1D47 + #$1D48, // $1D48 + #$1D49, // $1D49 + #$1D4A, // $1D4A + #$1D4B, // $1D4B + #$1D4C, // $1D4C + #$1D4D, // $1D4D + #$1D4E, // $1D4E + #$1D4F, // $1D4F + #$1D50, // $1D50 + #$1D51, // $1D51 + #$1D52, // $1D52 + #$1D53, // $1D53 + #$1D54, // $1D54 + #$1D55, // $1D55 + #$1D56, // $1D56 + #$1D57, // $1D57 + #$1D58, // $1D58 + #$1D59, // $1D59 + #$1D5A, // $1D5A + #$1D5B, // $1D5B + #$1D5C, // $1D5C + #$1D5D, // $1D5D + #$1D5E, // $1D5E + #$1D5F, // $1D5F + #$1D60, // $1D60 + #$1D61, // $1D61 + #$1D62, // $1D62 + #$1D63, // $1D63 + #$1D64, // $1D64 + #$1D65, // $1D65 + #$1D66, // $1D66 + #$1D67, // $1D67 + #$1D68, // $1D68 + #$1D69, // $1D69 + #$1D6A, // $1D6A + #$1D6B, // $1D6B + #$1D6C, // $1D6C + #$1D6D, // $1D6D + #$1D6E, // $1D6E + #$1D6F, // $1D6F + #$1D70, // $1D70 + #$1D71, // $1D71 + #$1D72, // $1D72 + #$1D73, // $1D73 + #$1D74, // $1D74 + #$1D75, // $1D75 + #$1D76, // $1D76 + #$1D77, // $1D77 + #$1D78, // $1D78 + #$1D79, // $1D79 + #$1D7A, // $1D7A + #$1D7B, // $1D7B + #$1D7C, // $1D7C + #$1D7D, // $1D7D + #$1D7E, // $1D7E + #$1D7F, // $1D7F + #$1D80, // $1D80 + #$1D81, // $1D81 + #$1D82, // $1D82 + #$1D83, // $1D83 + #$1D84, // $1D84 + #$1D85, // $1D85 + #$1D86, // $1D86 + #$1D87, // $1D87 + #$1D88, // $1D88 + #$1D89, // $1D89 + #$1D8A, // $1D8A + #$1D8B, // $1D8B + #$1D8C, // $1D8C + #$1D8D, // $1D8D + #$1D8E, // $1D8E + #$1D8F, // $1D8F + #$1D90, // $1D90 + #$1D91, // $1D91 + #$1D92, // $1D92 + #$1D93, // $1D93 + #$1D94, // $1D94 + #$1D95, // $1D95 + #$1D96, // $1D96 + #$1D97, // $1D97 + #$1D98, // $1D98 + #$1D99, // $1D99 + #$1D9A, // $1D9A + #$1D9B, // $1D9B + #$1D9C, // $1D9C + #$1D9D, // $1D9D + #$1D9E, // $1D9E + #$1D9F, // $1D9F + #$1DA0, // $1DA0 + #$1DA1, // $1DA1 + #$1DA2, // $1DA2 + #$1DA3, // $1DA3 + #$1DA4, // $1DA4 + #$1DA5, // $1DA5 + #$1DA6, // $1DA6 + #$1DA7, // $1DA7 + #$1DA8, // $1DA8 + #$1DA9, // $1DA9 + #$1DAA, // $1DAA + #$1DAB, // $1DAB + #$1DAC, // $1DAC + #$1DAD, // $1DAD + #$1DAE, // $1DAE + #$1DAF, // $1DAF + #$1DB0, // $1DB0 + #$1DB1, // $1DB1 + #$1DB2, // $1DB2 + #$1DB3, // $1DB3 + #$1DB4, // $1DB4 + #$1DB5, // $1DB5 + #$1DB6, // $1DB6 + #$1DB7, // $1DB7 + #$1DB8, // $1DB8 + #$1DB9, // $1DB9 + #$1DBA, // $1DBA + #$1DBB, // $1DBB + #$1DBC, // $1DBC + #$1DBD, // $1DBD + #$1DBE, // $1DBE + #$1DBF, // $1DBF + #$1DC0, // $1DC0 + #$1DC1, // $1DC1 + #$1DC2, // $1DC2 + #$1DC3, // $1DC3 + #$1DC4, // $1DC4 + #$1DC5, // $1DC5 + #$1DC6, // $1DC6 + #$1DC7, // $1DC7 + #$1DC8, // $1DC8 + #$1DC9, // $1DC9 + #$1DCA, // $1DCA + #$1DCB, // $1DCB + #$1DCC, // $1DCC + #$1DCD, // $1DCD + #$1DCE, // $1DCE + #$1DCF, // $1DCF + #$1DD0, // $1DD0 + #$1DD1, // $1DD1 + #$1DD2, // $1DD2 + #$1DD3, // $1DD3 + #$1DD4, // $1DD4 + #$1DD5, // $1DD5 + #$1DD6, // $1DD6 + #$1DD7, // $1DD7 + #$1DD8, // $1DD8 + #$1DD9, // $1DD9 + #$1DDA, // $1DDA + #$1DDB, // $1DDB + #$1DDC, // $1DDC + #$1DDD, // $1DDD + #$1DDE, // $1DDE + #$1DDF, // $1DDF + #$1DE0, // $1DE0 + #$1DE1, // $1DE1 + #$1DE2, // $1DE2 + #$1DE3, // $1DE3 + #$1DE4, // $1DE4 + #$1DE5, // $1DE5 + #$1DE6, // $1DE6 + #$1DE7, // $1DE7 + #$1DE8, // $1DE8 + #$1DE9, // $1DE9 + #$1DEA, // $1DEA + #$1DEB, // $1DEB + #$1DEC, // $1DEC + #$1DED, // $1DED + #$1DEE, // $1DEE + #$1DEF, // $1DEF + #$1DF0, // $1DF0 + #$1DF1, // $1DF1 + #$1DF2, // $1DF2 + #$1DF3, // $1DF3 + #$1DF4, // $1DF4 + #$1DF5, // $1DF5 + #$1DF6, // $1DF6 + #$1DF7, // $1DF7 + #$1DF8, // $1DF8 + #$1DF9, // $1DF9 + #$1DFA, // $1DFA + #$1DFB, // $1DFB + #$1DFC, // $1DFC + #$1DFD, // $1DFD + #$1DFE, // $1DFE + #$1DFF, // $1DFF + #$1E01, // $1E00 + #$1E01, // $1E01 + #$1E03, // $1E02 + #$1E03, // $1E03 + #$1E05, // $1E04 + #$1E05, // $1E05 + #$1E07, // $1E06 + #$1E07, // $1E07 + #$1E09, // $1E08 + #$1E09, // $1E09 + #$1E0B, // $1E0A + #$1E0B, // $1E0B + #$1E0D, // $1E0C + #$1E0D, // $1E0D + #$1E0F, // $1E0E + #$1E0F, // $1E0F + #$1E11, // $1E10 + #$1E11, // $1E11 + #$1E13, // $1E12 + #$1E13, // $1E13 + #$1E15, // $1E14 + #$1E15, // $1E15 + #$1E17, // $1E16 + #$1E17, // $1E17 + #$1E19, // $1E18 + #$1E19, // $1E19 + #$1E1B, // $1E1A + #$1E1B, // $1E1B + #$1E1D, // $1E1C + #$1E1D, // $1E1D + #$1E1F, // $1E1E + #$1E1F, // $1E1F + #$1E21, // $1E20 + #$1E21, // $1E21 + #$1E23, // $1E22 + #$1E23, // $1E23 + #$1E25, // $1E24 + #$1E25, // $1E25 + #$1E27, // $1E26 + #$1E27, // $1E27 + #$1E29, // $1E28 + #$1E29, // $1E29 + #$1E2B, // $1E2A + #$1E2B, // $1E2B + #$1E2D, // $1E2C + #$1E2D, // $1E2D + #$1E2F, // $1E2E + #$1E2F, // $1E2F + #$1E31, // $1E30 + #$1E31, // $1E31 + #$1E33, // $1E32 + #$1E33, // $1E33 + #$1E35, // $1E34 + #$1E35, // $1E35 + #$1E37, // $1E36 + #$1E37, // $1E37 + #$1E39, // $1E38 + #$1E39, // $1E39 + #$1E3B, // $1E3A + #$1E3B, // $1E3B + #$1E3D, // $1E3C + #$1E3D, // $1E3D + #$1E3F, // $1E3E + #$1E3F, // $1E3F + #$1E41, // $1E40 + #$1E41, // $1E41 + #$1E43, // $1E42 + #$1E43, // $1E43 + #$1E45, // $1E44 + #$1E45, // $1E45 + #$1E47, // $1E46 + #$1E47, // $1E47 + #$1E49, // $1E48 + #$1E49, // $1E49 + #$1E4B, // $1E4A + #$1E4B, // $1E4B + #$1E4D, // $1E4C + #$1E4D, // $1E4D + #$1E4F, // $1E4E + #$1E4F, // $1E4F + #$1E51, // $1E50 + #$1E51, // $1E51 + #$1E53, // $1E52 + #$1E53, // $1E53 + #$1E55, // $1E54 + #$1E55, // $1E55 + #$1E57, // $1E56 + #$1E57, // $1E57 + #$1E59, // $1E58 + #$1E59, // $1E59 + #$1E5B, // $1E5A + #$1E5B, // $1E5B + #$1E5D, // $1E5C + #$1E5D, // $1E5D + #$1E5F, // $1E5E + #$1E5F, // $1E5F + #$1E61, // $1E60 + #$1E61, // $1E61 + #$1E63, // $1E62 + #$1E63, // $1E63 + #$1E65, // $1E64 + #$1E65, // $1E65 + #$1E67, // $1E66 + #$1E67, // $1E67 + #$1E69, // $1E68 + #$1E69, // $1E69 + #$1E6B, // $1E6A + #$1E6B, // $1E6B + #$1E6D, // $1E6C + #$1E6D, // $1E6D + #$1E6F, // $1E6E + #$1E6F, // $1E6F + #$1E71, // $1E70 + #$1E71, // $1E71 + #$1E73, // $1E72 + #$1E73, // $1E73 + #$1E75, // $1E74 + #$1E75, // $1E75 + #$1E77, // $1E76 + #$1E77, // $1E77 + #$1E79, // $1E78 + #$1E79, // $1E79 + #$1E7B, // $1E7A + #$1E7B, // $1E7B + #$1E7D, // $1E7C + #$1E7D, // $1E7D + #$1E7F, // $1E7E + #$1E7F, // $1E7F + #$1E81, // $1E80 + #$1E81, // $1E81 + #$1E83, // $1E82 + #$1E83, // $1E83 + #$1E85, // $1E84 + #$1E85, // $1E85 + #$1E87, // $1E86 + #$1E87, // $1E87 + #$1E89, // $1E88 + #$1E89, // $1E89 + #$1E8B, // $1E8A + #$1E8B, // $1E8B + #$1E8D, // $1E8C + #$1E8D, // $1E8D + #$1E8F, // $1E8E + #$1E8F, // $1E8F + #$1E91, // $1E90 + #$1E91, // $1E91 + #$1E93, // $1E92 + #$1E93, // $1E93 + #$1E95, // $1E94 + #$1E95, // $1E95 + #$1E96, // $1E96 + #$1E97, // $1E97 + #$1E98, // $1E98 + #$1E99, // $1E99 + #$1E9A, // $1E9A + #$1E9B, // $1E9B + #$1E9C, // $1E9C + #$1E9D, // $1E9D + #$00DF, // $1E9E + #$1E9F, // $1E9F + #$1EA1, // $1EA0 + #$1EA1, // $1EA1 + #$1EA3, // $1EA2 + #$1EA3, // $1EA3 + #$1EA5, // $1EA4 + #$1EA5, // $1EA5 + #$1EA7, // $1EA6 + #$1EA7, // $1EA7 + #$1EA9, // $1EA8 + #$1EA9, // $1EA9 + #$1EAB, // $1EAA + #$1EAB, // $1EAB + #$1EAD, // $1EAC + #$1EAD, // $1EAD + #$1EAF, // $1EAE + #$1EAF, // $1EAF + #$1EB1, // $1EB0 + #$1EB1, // $1EB1 + #$1EB3, // $1EB2 + #$1EB3, // $1EB3 + #$1EB5, // $1EB4 + #$1EB5, // $1EB5 + #$1EB7, // $1EB6 + #$1EB7, // $1EB7 + #$1EB9, // $1EB8 + #$1EB9, // $1EB9 + #$1EBB, // $1EBA + #$1EBB, // $1EBB + #$1EBD, // $1EBC + #$1EBD, // $1EBD + #$1EBF, // $1EBE + #$1EBF, // $1EBF + #$1EC1, // $1EC0 + #$1EC1, // $1EC1 + #$1EC3, // $1EC2 + #$1EC3, // $1EC3 + #$1EC5, // $1EC4 + #$1EC5, // $1EC5 + #$1EC7, // $1EC6 + #$1EC7, // $1EC7 + #$1EC9, // $1EC8 + #$1EC9, // $1EC9 + #$1ECB, // $1ECA + #$1ECB, // $1ECB + #$1ECD, // $1ECC + #$1ECD, // $1ECD + #$1ECF, // $1ECE + #$1ECF, // $1ECF + #$1ED1, // $1ED0 + #$1ED1, // $1ED1 + #$1ED3, // $1ED2 + #$1ED3, // $1ED3 + #$1ED5, // $1ED4 + #$1ED5, // $1ED5 + #$1ED7, // $1ED6 + #$1ED7, // $1ED7 + #$1ED9, // $1ED8 + #$1ED9, // $1ED9 + #$1EDB, // $1EDA + #$1EDB, // $1EDB + #$1EDD, // $1EDC + #$1EDD, // $1EDD + #$1EDF, // $1EDE + #$1EDF, // $1EDF + #$1EE1, // $1EE0 + #$1EE1, // $1EE1 + #$1EE3, // $1EE2 + #$1EE3, // $1EE3 + #$1EE5, // $1EE4 + #$1EE5, // $1EE5 + #$1EE7, // $1EE6 + #$1EE7, // $1EE7 + #$1EE9, // $1EE8 + #$1EE9, // $1EE9 + #$1EEB, // $1EEA + #$1EEB, // $1EEB + #$1EED, // $1EEC + #$1EED, // $1EED + #$1EEF, // $1EEE + #$1EEF, // $1EEF + #$1EF1, // $1EF0 + #$1EF1, // $1EF1 + #$1EF3, // $1EF2 + #$1EF3, // $1EF3 + #$1EF5, // $1EF4 + #$1EF5, // $1EF5 + #$1EF7, // $1EF6 + #$1EF7, // $1EF7 + #$1EF9, // $1EF8 + #$1EF9, // $1EF9 + #$1EFB, // $1EFA + #$1EFB, // $1EFB + #$1EFD, // $1EFC + #$1EFD, // $1EFD + #$1EFF, // $1EFE + #$1EFF, // $1EFF + #$1F00, // $1F00 + #$1F01, // $1F01 + #$1F02, // $1F02 + #$1F03, // $1F03 + #$1F04, // $1F04 + #$1F05, // $1F05 + #$1F06, // $1F06 + #$1F07, // $1F07 + #$1F00, // $1F08 + #$1F01, // $1F09 + #$1F02, // $1F0A + #$1F03, // $1F0B + #$1F04, // $1F0C + #$1F05, // $1F0D + #$1F06, // $1F0E + #$1F07, // $1F0F + #$1F10, // $1F10 + #$1F11, // $1F11 + #$1F12, // $1F12 + #$1F13, // $1F13 + #$1F14, // $1F14 + #$1F15, // $1F15 + #$1F16, // $1F16 + #$1F17, // $1F17 + #$1F10, // $1F18 + #$1F11, // $1F19 + #$1F12, // $1F1A + #$1F13, // $1F1B + #$1F14, // $1F1C + #$1F15, // $1F1D + #$1F1E, // $1F1E + #$1F1F, // $1F1F + #$1F20, // $1F20 + #$1F21, // $1F21 + #$1F22, // $1F22 + #$1F23, // $1F23 + #$1F24, // $1F24 + #$1F25, // $1F25 + #$1F26, // $1F26 + #$1F27, // $1F27 + #$1F20, // $1F28 + #$1F21, // $1F29 + #$1F22, // $1F2A + #$1F23, // $1F2B + #$1F24, // $1F2C + #$1F25, // $1F2D + #$1F26, // $1F2E + #$1F27, // $1F2F + #$1F30, // $1F30 + #$1F31, // $1F31 + #$1F32, // $1F32 + #$1F33, // $1F33 + #$1F34, // $1F34 + #$1F35, // $1F35 + #$1F36, // $1F36 + #$1F37, // $1F37 + #$1F30, // $1F38 + #$1F31, // $1F39 + #$1F32, // $1F3A + #$1F33, // $1F3B + #$1F34, // $1F3C + #$1F35, // $1F3D + #$1F36, // $1F3E + #$1F37, // $1F3F + #$1F40, // $1F40 + #$1F41, // $1F41 + #$1F42, // $1F42 + #$1F43, // $1F43 + #$1F44, // $1F44 + #$1F45, // $1F45 + #$1F46, // $1F46 + #$1F47, // $1F47 + #$1F40, // $1F48 + #$1F41, // $1F49 + #$1F42, // $1F4A + #$1F43, // $1F4B + #$1F44, // $1F4C + #$1F45, // $1F4D + #$1F4E, // $1F4E + #$1F4F, // $1F4F + #$1F50, // $1F50 + #$1F51, // $1F51 + #$1F52, // $1F52 + #$1F53, // $1F53 + #$1F54, // $1F54 + #$1F55, // $1F55 + #$1F56, // $1F56 + #$1F57, // $1F57 + #$1F58, // $1F58 + #$1F51, // $1F59 + #$1F5A, // $1F5A + #$1F53, // $1F5B + #$1F5C, // $1F5C + #$1F55, // $1F5D + #$1F5E, // $1F5E + #$1F57, // $1F5F + #$1F60, // $1F60 + #$1F61, // $1F61 + #$1F62, // $1F62 + #$1F63, // $1F63 + #$1F64, // $1F64 + #$1F65, // $1F65 + #$1F66, // $1F66 + #$1F67, // $1F67 + #$1F60, // $1F68 + #$1F61, // $1F69 + #$1F62, // $1F6A + #$1F63, // $1F6B + #$1F64, // $1F6C + #$1F65, // $1F6D + #$1F66, // $1F6E + #$1F67, // $1F6F + #$1F70, // $1F70 + #$1F71, // $1F71 + #$1F72, // $1F72 + #$1F73, // $1F73 + #$1F74, // $1F74 + #$1F75, // $1F75 + #$1F76, // $1F76 + #$1F77, // $1F77 + #$1F78, // $1F78 + #$1F79, // $1F79 + #$1F7A, // $1F7A + #$1F7B, // $1F7B + #$1F7C, // $1F7C + #$1F7D, // $1F7D + #$1F7E, // $1F7E + #$1F7F, // $1F7F + #$1F80, // $1F80 + #$1F81, // $1F81 + #$1F82, // $1F82 + #$1F83, // $1F83 + #$1F84, // $1F84 + #$1F85, // $1F85 + #$1F86, // $1F86 + #$1F87, // $1F87 + #$1F80, // $1F88 + #$1F81, // $1F89 + #$1F82, // $1F8A + #$1F83, // $1F8B + #$1F84, // $1F8C + #$1F85, // $1F8D + #$1F86, // $1F8E + #$1F87, // $1F8F + #$1F90, // $1F90 + #$1F91, // $1F91 + #$1F92, // $1F92 + #$1F93, // $1F93 + #$1F94, // $1F94 + #$1F95, // $1F95 + #$1F96, // $1F96 + #$1F97, // $1F97 + #$1F90, // $1F98 + #$1F91, // $1F99 + #$1F92, // $1F9A + #$1F93, // $1F9B + #$1F94, // $1F9C + #$1F95, // $1F9D + #$1F96, // $1F9E + #$1F97, // $1F9F + #$1FA0, // $1FA0 + #$1FA1, // $1FA1 + #$1FA2, // $1FA2 + #$1FA3, // $1FA3 + #$1FA4, // $1FA4 + #$1FA5, // $1FA5 + #$1FA6, // $1FA6 + #$1FA7, // $1FA7 + #$1FA0, // $1FA8 + #$1FA1, // $1FA9 + #$1FA2, // $1FAA + #$1FA3, // $1FAB + #$1FA4, // $1FAC + #$1FA5, // $1FAD + #$1FA6, // $1FAE + #$1FA7, // $1FAF + #$1FB0, // $1FB0 + #$1FB1, // $1FB1 + #$1FB2, // $1FB2 + #$1FB3, // $1FB3 + #$1FB4, // $1FB4 + #$1FB5, // $1FB5 + #$1FB6, // $1FB6 + #$1FB7, // $1FB7 + #$1FB0, // $1FB8 + #$1FB1, // $1FB9 + #$1F70, // $1FBA + #$1F71, // $1FBB + #$1FB3, // $1FBC + #$1FBD, // $1FBD + #$1FBE, // $1FBE + #$1FBF, // $1FBF + #$1FC0, // $1FC0 + #$1FC1, // $1FC1 + #$1FC2, // $1FC2 + #$1FC3, // $1FC3 + #$1FC4, // $1FC4 + #$1FC5, // $1FC5 + #$1FC6, // $1FC6 + #$1FC7, // $1FC7 + #$1F72, // $1FC8 + #$1F73, // $1FC9 + #$1F74, // $1FCA + #$1F75, // $1FCB + #$1FC3, // $1FCC + #$1FCD, // $1FCD + #$1FCE, // $1FCE + #$1FCF, // $1FCF + #$1FD0, // $1FD0 + #$1FD1, // $1FD1 + #$1FD2, // $1FD2 + #$1FD3, // $1FD3 + #$1FD4, // $1FD4 + #$1FD5, // $1FD5 + #$1FD6, // $1FD6 + #$1FD7, // $1FD7 + #$1FD0, // $1FD8 + #$1FD1, // $1FD9 + #$1F76, // $1FDA + #$1F77, // $1FDB + #$1FDC, // $1FDC + #$1FDD, // $1FDD + #$1FDE, // $1FDE + #$1FDF, // $1FDF + #$1FE0, // $1FE0 + #$1FE1, // $1FE1 + #$1FE2, // $1FE2 + #$1FE3, // $1FE3 + #$1FE4, // $1FE4 + #$1FE5, // $1FE5 + #$1FE6, // $1FE6 + #$1FE7, // $1FE7 + #$1FE0, // $1FE8 + #$1FE1, // $1FE9 + #$1F7A, // $1FEA + #$1F7B, // $1FEB + #$1FE5, // $1FEC + #$1FED, // $1FED + #$1FEE, // $1FEE + #$1FEF, // $1FEF + #$1FF0, // $1FF0 + #$1FF1, // $1FF1 + #$1FF2, // $1FF2 + #$1FF3, // $1FF3 + #$1FF4, // $1FF4 + #$1FF5, // $1FF5 + #$1FF6, // $1FF6 + #$1FF7, // $1FF7 + #$1F78, // $1FF8 + #$1F79, // $1FF9 + #$1F7C, // $1FFA + #$1F7D, // $1FFB + #$1FF3, // $1FFC + #$1FFD, // $1FFD + #$1FFE, // $1FFE + #$1FFF, // $1FFF + #$2000, // $2000 + #$2001, // $2001 + #$2002, // $2002 + #$2003, // $2003 + #$2004, // $2004 + #$2005, // $2005 + #$2006, // $2006 + #$2007, // $2007 + #$2008, // $2008 + #$2009, // $2009 + #$200A, // $200A + #$200B, // $200B + #$200C, // $200C + #$200D, // $200D + #$200E, // $200E + #$200F, // $200F + #$2010, // $2010 + #$2011, // $2011 + #$2012, // $2012 + #$2013, // $2013 + #$2014, // $2014 + #$2015, // $2015 + #$2016, // $2016 + #$2017, // $2017 + #$2018, // $2018 + #$2019, // $2019 + #$201A, // $201A + #$201B, // $201B + #$201C, // $201C + #$201D, // $201D + #$201E, // $201E + #$201F, // $201F + #$2020, // $2020 + #$2021, // $2021 + #$2022, // $2022 + #$2023, // $2023 + #$2024, // $2024 + #$2025, // $2025 + #$2026, // $2026 + #$2027, // $2027 + #$2028, // $2028 + #$2029, // $2029 + #$202A, // $202A + #$202B, // $202B + #$202C, // $202C + #$202D, // $202D + #$202E, // $202E + #$202F, // $202F + #$2030, // $2030 + #$2031, // $2031 + #$2032, // $2032 + #$2033, // $2033 + #$2034, // $2034 + #$2035, // $2035 + #$2036, // $2036 + #$2037, // $2037 + #$2038, // $2038 + #$2039, // $2039 + #$203A, // $203A + #$203B, // $203B + #$203C, // $203C + #$203D, // $203D + #$203E, // $203E + #$203F, // $203F + #$2040, // $2040 + #$2041, // $2041 + #$2042, // $2042 + #$2043, // $2043 + #$2044, // $2044 + #$2045, // $2045 + #$2046, // $2046 + #$2047, // $2047 + #$2048, // $2048 + #$2049, // $2049 + #$204A, // $204A + #$204B, // $204B + #$204C, // $204C + #$204D, // $204D + #$204E, // $204E + #$204F, // $204F + #$2050, // $2050 + #$2051, // $2051 + #$2052, // $2052 + #$2053, // $2053 + #$2054, // $2054 + #$2055, // $2055 + #$2056, // $2056 + #$2057, // $2057 + #$2058, // $2058 + #$2059, // $2059 + #$205A, // $205A + #$205B, // $205B + #$205C, // $205C + #$205D, // $205D + #$205E, // $205E + #$205F, // $205F + #$2060, // $2060 + #$2061, // $2061 + #$2062, // $2062 + #$2063, // $2063 + #$2064, // $2064 + #$2065, // $2065 + #$2066, // $2066 + #$2067, // $2067 + #$2068, // $2068 + #$2069, // $2069 + #$206A, // $206A + #$206B, // $206B + #$206C, // $206C + #$206D, // $206D + #$206E, // $206E + #$206F, // $206F + #$2070, // $2070 + #$2071, // $2071 + #$2072, // $2072 + #$2073, // $2073 + #$2074, // $2074 + #$2075, // $2075 + #$2076, // $2076 + #$2077, // $2077 + #$2078, // $2078 + #$2079, // $2079 + #$207A, // $207A + #$207B, // $207B + #$207C, // $207C + #$207D, // $207D + #$207E, // $207E + #$207F, // $207F + #$2080, // $2080 + #$2081, // $2081 + #$2082, // $2082 + #$2083, // $2083 + #$2084, // $2084 + #$2085, // $2085 + #$2086, // $2086 + #$2087, // $2087 + #$2088, // $2088 + #$2089, // $2089 + #$208A, // $208A + #$208B, // $208B + #$208C, // $208C + #$208D, // $208D + #$208E, // $208E + #$208F, // $208F + #$2090, // $2090 + #$2091, // $2091 + #$2092, // $2092 + #$2093, // $2093 + #$2094, // $2094 + #$2095, // $2095 + #$2096, // $2096 + #$2097, // $2097 + #$2098, // $2098 + #$2099, // $2099 + #$209A, // $209A + #$209B, // $209B + #$209C, // $209C + #$209D, // $209D + #$209E, // $209E + #$209F, // $209F + #$20A0, // $20A0 + #$20A1, // $20A1 + #$20A2, // $20A2 + #$20A3, // $20A3 + #$20A4, // $20A4 + #$20A5, // $20A5 + #$20A6, // $20A6 + #$20A7, // $20A7 + #$20A8, // $20A8 + #$20A9, // $20A9 + #$20AA, // $20AA + #$20AB, // $20AB + #$20AC, // $20AC + #$20AD, // $20AD + #$20AE, // $20AE + #$20AF, // $20AF + #$20B0, // $20B0 + #$20B1, // $20B1 + #$20B2, // $20B2 + #$20B3, // $20B3 + #$20B4, // $20B4 + #$20B5, // $20B5 + #$20B6, // $20B6 + #$20B7, // $20B7 + #$20B8, // $20B8 + #$20B9, // $20B9 + #$20BA, // $20BA + #$20BB, // $20BB + #$20BC, // $20BC + #$20BD, // $20BD + #$20BE, // $20BE + #$20BF, // $20BF + #$20C0, // $20C0 + #$20C1, // $20C1 + #$20C2, // $20C2 + #$20C3, // $20C3 + #$20C4, // $20C4 + #$20C5, // $20C5 + #$20C6, // $20C6 + #$20C7, // $20C7 + #$20C8, // $20C8 + #$20C9, // $20C9 + #$20CA, // $20CA + #$20CB, // $20CB + #$20CC, // $20CC + #$20CD, // $20CD + #$20CE, // $20CE + #$20CF, // $20CF + #$20D0, // $20D0 + #$20D1, // $20D1 + #$20D2, // $20D2 + #$20D3, // $20D3 + #$20D4, // $20D4 + #$20D5, // $20D5 + #$20D6, // $20D6 + #$20D7, // $20D7 + #$20D8, // $20D8 + #$20D9, // $20D9 + #$20DA, // $20DA + #$20DB, // $20DB + #$20DC, // $20DC + #$20DD, // $20DD + #$20DE, // $20DE + #$20DF, // $20DF + #$20E0, // $20E0 + #$20E1, // $20E1 + #$20E2, // $20E2 + #$20E3, // $20E3 + #$20E4, // $20E4 + #$20E5, // $20E5 + #$20E6, // $20E6 + #$20E7, // $20E7 + #$20E8, // $20E8 + #$20E9, // $20E9 + #$20EA, // $20EA + #$20EB, // $20EB + #$20EC, // $20EC + #$20ED, // $20ED + #$20EE, // $20EE + #$20EF, // $20EF + #$20F0, // $20F0 + #$20F1, // $20F1 + #$20F2, // $20F2 + #$20F3, // $20F3 + #$20F4, // $20F4 + #$20F5, // $20F5 + #$20F6, // $20F6 + #$20F7, // $20F7 + #$20F8, // $20F8 + #$20F9, // $20F9 + #$20FA, // $20FA + #$20FB, // $20FB + #$20FC, // $20FC + #$20FD, // $20FD + #$20FE, // $20FE + #$20FF, // $20FF + #$2100, // $2100 + #$2101, // $2101 + #$2102, // $2102 + #$2103, // $2103 + #$2104, // $2104 + #$2105, // $2105 + #$2106, // $2106 + #$2107, // $2107 + #$2108, // $2108 + #$2109, // $2109 + #$210A, // $210A + #$210B, // $210B + #$210C, // $210C + #$210D, // $210D + #$210E, // $210E + #$210F, // $210F + #$2110, // $2110 + #$2111, // $2111 + #$2112, // $2112 + #$2113, // $2113 + #$2114, // $2114 + #$2115, // $2115 + #$2116, // $2116 + #$2117, // $2117 + #$2118, // $2118 + #$2119, // $2119 + #$211A, // $211A + #$211B, // $211B + #$211C, // $211C + #$211D, // $211D + #$211E, // $211E + #$211F, // $211F + #$2120, // $2120 + #$2121, // $2121 + #$2122, // $2122 + #$2123, // $2123 + #$2124, // $2124 + #$2125, // $2125 + #$03C9, // $2126 + #$2127, // $2127 + #$2128, // $2128 + #$2129, // $2129 + #$006B, // $212A + #$00E5, // $212B + #$212C, // $212C + #$212D, // $212D + #$212E, // $212E + #$212F, // $212F + #$2130, // $2130 + #$2131, // $2131 + #$214E, // $2132 + #$2133, // $2133 + #$2134, // $2134 + #$2135, // $2135 + #$2136, // $2136 + #$2137, // $2137 + #$2138, // $2138 + #$2139, // $2139 + #$213A, // $213A + #$213B, // $213B + #$213C, // $213C + #$213D, // $213D + #$213E, // $213E + #$213F, // $213F + #$2140, // $2140 + #$2141, // $2141 + #$2142, // $2142 + #$2143, // $2143 + #$2144, // $2144 + #$2145, // $2145 + #$2146, // $2146 + #$2147, // $2147 + #$2148, // $2148 + #$2149, // $2149 + #$214A, // $214A + #$214B, // $214B + #$214C, // $214C + #$214D, // $214D + #$214E, // $214E + #$214F, // $214F + #$2150, // $2150 + #$2151, // $2151 + #$2152, // $2152 + #$2153, // $2153 + #$2154, // $2154 + #$2155, // $2155 + #$2156, // $2156 + #$2157, // $2157 + #$2158, // $2158 + #$2159, // $2159 + #$215A, // $215A + #$215B, // $215B + #$215C, // $215C + #$215D, // $215D + #$215E, // $215E + #$215F, // $215F + #$2170, // $2160 + #$2171, // $2161 + #$2172, // $2162 + #$2173, // $2163 + #$2174, // $2164 + #$2175, // $2165 + #$2176, // $2166 + #$2177, // $2167 + #$2178, // $2168 + #$2179, // $2169 + #$217A, // $216A + #$217B, // $216B + #$217C, // $216C + #$217D, // $216D + #$217E, // $216E + #$217F, // $216F + #$2170, // $2170 + #$2171, // $2171 + #$2172, // $2172 + #$2173, // $2173 + #$2174, // $2174 + #$2175, // $2175 + #$2176, // $2176 + #$2177, // $2177 + #$2178, // $2178 + #$2179, // $2179 + #$217A, // $217A + #$217B, // $217B + #$217C, // $217C + #$217D, // $217D + #$217E, // $217E + #$217F, // $217F + #$2180, // $2180 + #$2181, // $2181 + #$2182, // $2182 + #$2184, // $2183 + #$2184, // $2184 + #$2185, // $2185 + #$2186, // $2186 + #$2187, // $2187 + #$2188, // $2188 + #$2189, // $2189 + #$218A, // $218A + #$218B, // $218B + #$218C, // $218C + #$218D, // $218D + #$218E, // $218E + #$218F, // $218F + #$2190, // $2190 + #$2191, // $2191 + #$2192, // $2192 + #$2193, // $2193 + #$2194, // $2194 + #$2195, // $2195 + #$2196, // $2196 + #$2197, // $2197 + #$2198, // $2198 + #$2199, // $2199 + #$219A, // $219A + #$219B, // $219B + #$219C, // $219C + #$219D, // $219D + #$219E, // $219E + #$219F, // $219F + #$21A0, // $21A0 + #$21A1, // $21A1 + #$21A2, // $21A2 + #$21A3, // $21A3 + #$21A4, // $21A4 + #$21A5, // $21A5 + #$21A6, // $21A6 + #$21A7, // $21A7 + #$21A8, // $21A8 + #$21A9, // $21A9 + #$21AA, // $21AA + #$21AB, // $21AB + #$21AC, // $21AC + #$21AD, // $21AD + #$21AE, // $21AE + #$21AF, // $21AF + #$21B0, // $21B0 + #$21B1, // $21B1 + #$21B2, // $21B2 + #$21B3, // $21B3 + #$21B4, // $21B4 + #$21B5, // $21B5 + #$21B6, // $21B6 + #$21B7, // $21B7 + #$21B8, // $21B8 + #$21B9, // $21B9 + #$21BA, // $21BA + #$21BB, // $21BB + #$21BC, // $21BC + #$21BD, // $21BD + #$21BE, // $21BE + #$21BF, // $21BF + #$21C0, // $21C0 + #$21C1, // $21C1 + #$21C2, // $21C2 + #$21C3, // $21C3 + #$21C4, // $21C4 + #$21C5, // $21C5 + #$21C6, // $21C6 + #$21C7, // $21C7 + #$21C8, // $21C8 + #$21C9, // $21C9 + #$21CA, // $21CA + #$21CB, // $21CB + #$21CC, // $21CC + #$21CD, // $21CD + #$21CE, // $21CE + #$21CF, // $21CF + #$21D0, // $21D0 + #$21D1, // $21D1 + #$21D2, // $21D2 + #$21D3, // $21D3 + #$21D4, // $21D4 + #$21D5, // $21D5 + #$21D6, // $21D6 + #$21D7, // $21D7 + #$21D8, // $21D8 + #$21D9, // $21D9 + #$21DA, // $21DA + #$21DB, // $21DB + #$21DC, // $21DC + #$21DD, // $21DD + #$21DE, // $21DE + #$21DF, // $21DF + #$21E0, // $21E0 + #$21E1, // $21E1 + #$21E2, // $21E2 + #$21E3, // $21E3 + #$21E4, // $21E4 + #$21E5, // $21E5 + #$21E6, // $21E6 + #$21E7, // $21E7 + #$21E8, // $21E8 + #$21E9, // $21E9 + #$21EA, // $21EA + #$21EB, // $21EB + #$21EC, // $21EC + #$21ED, // $21ED + #$21EE, // $21EE + #$21EF, // $21EF + #$21F0, // $21F0 + #$21F1, // $21F1 + #$21F2, // $21F2 + #$21F3, // $21F3 + #$21F4, // $21F4 + #$21F5, // $21F5 + #$21F6, // $21F6 + #$21F7, // $21F7 + #$21F8, // $21F8 + #$21F9, // $21F9 + #$21FA, // $21FA + #$21FB, // $21FB + #$21FC, // $21FC + #$21FD, // $21FD + #$21FE, // $21FE + #$21FF, // $21FF + #$2200, // $2200 + #$2201, // $2201 + #$2202, // $2202 + #$2203, // $2203 + #$2204, // $2204 + #$2205, // $2205 + #$2206, // $2206 + #$2207, // $2207 + #$2208, // $2208 + #$2209, // $2209 + #$220A, // $220A + #$220B, // $220B + #$220C, // $220C + #$220D, // $220D + #$220E, // $220E + #$220F, // $220F + #$2210, // $2210 + #$2211, // $2211 + #$2212, // $2212 + #$2213, // $2213 + #$2214, // $2214 + #$2215, // $2215 + #$2216, // $2216 + #$2217, // $2217 + #$2218, // $2218 + #$2219, // $2219 + #$221A, // $221A + #$221B, // $221B + #$221C, // $221C + #$221D, // $221D + #$221E, // $221E + #$221F, // $221F + #$2220, // $2220 + #$2221, // $2221 + #$2222, // $2222 + #$2223, // $2223 + #$2224, // $2224 + #$2225, // $2225 + #$2226, // $2226 + #$2227, // $2227 + #$2228, // $2228 + #$2229, // $2229 + #$222A, // $222A + #$222B, // $222B + #$222C, // $222C + #$222D, // $222D + #$222E, // $222E + #$222F, // $222F + #$2230, // $2230 + #$2231, // $2231 + #$2232, // $2232 + #$2233, // $2233 + #$2234, // $2234 + #$2235, // $2235 + #$2236, // $2236 + #$2237, // $2237 + #$2238, // $2238 + #$2239, // $2239 + #$223A, // $223A + #$223B, // $223B + #$223C, // $223C + #$223D, // $223D + #$223E, // $223E + #$223F, // $223F + #$2240, // $2240 + #$2241, // $2241 + #$2242, // $2242 + #$2243, // $2243 + #$2244, // $2244 + #$2245, // $2245 + #$2246, // $2246 + #$2247, // $2247 + #$2248, // $2248 + #$2249, // $2249 + #$224A, // $224A + #$224B, // $224B + #$224C, // $224C + #$224D, // $224D + #$224E, // $224E + #$224F, // $224F + #$2250, // $2250 + #$2251, // $2251 + #$2252, // $2252 + #$2253, // $2253 + #$2254, // $2254 + #$2255, // $2255 + #$2256, // $2256 + #$2257, // $2257 + #$2258, // $2258 + #$2259, // $2259 + #$225A, // $225A + #$225B, // $225B + #$225C, // $225C + #$225D, // $225D + #$225E, // $225E + #$225F, // $225F + #$2260, // $2260 + #$2261, // $2261 + #$2262, // $2262 + #$2263, // $2263 + #$2264, // $2264 + #$2265, // $2265 + #$2266, // $2266 + #$2267, // $2267 + #$2268, // $2268 + #$2269, // $2269 + #$226A, // $226A + #$226B, // $226B + #$226C, // $226C + #$226D, // $226D + #$226E, // $226E + #$226F, // $226F + #$2270, // $2270 + #$2271, // $2271 + #$2272, // $2272 + #$2273, // $2273 + #$2274, // $2274 + #$2275, // $2275 + #$2276, // $2276 + #$2277, // $2277 + #$2278, // $2278 + #$2279, // $2279 + #$227A, // $227A + #$227B, // $227B + #$227C, // $227C + #$227D, // $227D + #$227E, // $227E + #$227F, // $227F + #$2280, // $2280 + #$2281, // $2281 + #$2282, // $2282 + #$2283, // $2283 + #$2284, // $2284 + #$2285, // $2285 + #$2286, // $2286 + #$2287, // $2287 + #$2288, // $2288 + #$2289, // $2289 + #$228A, // $228A + #$228B, // $228B + #$228C, // $228C + #$228D, // $228D + #$228E, // $228E + #$228F, // $228F + #$2290, // $2290 + #$2291, // $2291 + #$2292, // $2292 + #$2293, // $2293 + #$2294, // $2294 + #$2295, // $2295 + #$2296, // $2296 + #$2297, // $2297 + #$2298, // $2298 + #$2299, // $2299 + #$229A, // $229A + #$229B, // $229B + #$229C, // $229C + #$229D, // $229D + #$229E, // $229E + #$229F, // $229F + #$22A0, // $22A0 + #$22A1, // $22A1 + #$22A2, // $22A2 + #$22A3, // $22A3 + #$22A4, // $22A4 + #$22A5, // $22A5 + #$22A6, // $22A6 + #$22A7, // $22A7 + #$22A8, // $22A8 + #$22A9, // $22A9 + #$22AA, // $22AA + #$22AB, // $22AB + #$22AC, // $22AC + #$22AD, // $22AD + #$22AE, // $22AE + #$22AF, // $22AF + #$22B0, // $22B0 + #$22B1, // $22B1 + #$22B2, // $22B2 + #$22B3, // $22B3 + #$22B4, // $22B4 + #$22B5, // $22B5 + #$22B6, // $22B6 + #$22B7, // $22B7 + #$22B8, // $22B8 + #$22B9, // $22B9 + #$22BA, // $22BA + #$22BB, // $22BB + #$22BC, // $22BC + #$22BD, // $22BD + #$22BE, // $22BE + #$22BF, // $22BF + #$22C0, // $22C0 + #$22C1, // $22C1 + #$22C2, // $22C2 + #$22C3, // $22C3 + #$22C4, // $22C4 + #$22C5, // $22C5 + #$22C6, // $22C6 + #$22C7, // $22C7 + #$22C8, // $22C8 + #$22C9, // $22C9 + #$22CA, // $22CA + #$22CB, // $22CB + #$22CC, // $22CC + #$22CD, // $22CD + #$22CE, // $22CE + #$22CF, // $22CF + #$22D0, // $22D0 + #$22D1, // $22D1 + #$22D2, // $22D2 + #$22D3, // $22D3 + #$22D4, // $22D4 + #$22D5, // $22D5 + #$22D6, // $22D6 + #$22D7, // $22D7 + #$22D8, // $22D8 + #$22D9, // $22D9 + #$22DA, // $22DA + #$22DB, // $22DB + #$22DC, // $22DC + #$22DD, // $22DD + #$22DE, // $22DE + #$22DF, // $22DF + #$22E0, // $22E0 + #$22E1, // $22E1 + #$22E2, // $22E2 + #$22E3, // $22E3 + #$22E4, // $22E4 + #$22E5, // $22E5 + #$22E6, // $22E6 + #$22E7, // $22E7 + #$22E8, // $22E8 + #$22E9, // $22E9 + #$22EA, // $22EA + #$22EB, // $22EB + #$22EC, // $22EC + #$22ED, // $22ED + #$22EE, // $22EE + #$22EF, // $22EF + #$22F0, // $22F0 + #$22F1, // $22F1 + #$22F2, // $22F2 + #$22F3, // $22F3 + #$22F4, // $22F4 + #$22F5, // $22F5 + #$22F6, // $22F6 + #$22F7, // $22F7 + #$22F8, // $22F8 + #$22F9, // $22F9 + #$22FA, // $22FA + #$22FB, // $22FB + #$22FC, // $22FC + #$22FD, // $22FD + #$22FE, // $22FE + #$22FF, // $22FF + #$2300, // $2300 + #$2301, // $2301 + #$2302, // $2302 + #$2303, // $2303 + #$2304, // $2304 + #$2305, // $2305 + #$2306, // $2306 + #$2307, // $2307 + #$2308, // $2308 + #$2309, // $2309 + #$230A, // $230A + #$230B, // $230B + #$230C, // $230C + #$230D, // $230D + #$230E, // $230E + #$230F, // $230F + #$2310, // $2310 + #$2311, // $2311 + #$2312, // $2312 + #$2313, // $2313 + #$2314, // $2314 + #$2315, // $2315 + #$2316, // $2316 + #$2317, // $2317 + #$2318, // $2318 + #$2319, // $2319 + #$231A, // $231A + #$231B, // $231B + #$231C, // $231C + #$231D, // $231D + #$231E, // $231E + #$231F, // $231F + #$2320, // $2320 + #$2321, // $2321 + #$2322, // $2322 + #$2323, // $2323 + #$2324, // $2324 + #$2325, // $2325 + #$2326, // $2326 + #$2327, // $2327 + #$2328, // $2328 + #$2329, // $2329 + #$232A, // $232A + #$232B, // $232B + #$232C, // $232C + #$232D, // $232D + #$232E, // $232E + #$232F, // $232F + #$2330, // $2330 + #$2331, // $2331 + #$2332, // $2332 + #$2333, // $2333 + #$2334, // $2334 + #$2335, // $2335 + #$2336, // $2336 + #$2337, // $2337 + #$2338, // $2338 + #$2339, // $2339 + #$233A, // $233A + #$233B, // $233B + #$233C, // $233C + #$233D, // $233D + #$233E, // $233E + #$233F, // $233F + #$2340, // $2340 + #$2341, // $2341 + #$2342, // $2342 + #$2343, // $2343 + #$2344, // $2344 + #$2345, // $2345 + #$2346, // $2346 + #$2347, // $2347 + #$2348, // $2348 + #$2349, // $2349 + #$234A, // $234A + #$234B, // $234B + #$234C, // $234C + #$234D, // $234D + #$234E, // $234E + #$234F, // $234F + #$2350, // $2350 + #$2351, // $2351 + #$2352, // $2352 + #$2353, // $2353 + #$2354, // $2354 + #$2355, // $2355 + #$2356, // $2356 + #$2357, // $2357 + #$2358, // $2358 + #$2359, // $2359 + #$235A, // $235A + #$235B, // $235B + #$235C, // $235C + #$235D, // $235D + #$235E, // $235E + #$235F, // $235F + #$2360, // $2360 + #$2361, // $2361 + #$2362, // $2362 + #$2363, // $2363 + #$2364, // $2364 + #$2365, // $2365 + #$2366, // $2366 + #$2367, // $2367 + #$2368, // $2368 + #$2369, // $2369 + #$236A, // $236A + #$236B, // $236B + #$236C, // $236C + #$236D, // $236D + #$236E, // $236E + #$236F, // $236F + #$2370, // $2370 + #$2371, // $2371 + #$2372, // $2372 + #$2373, // $2373 + #$2374, // $2374 + #$2375, // $2375 + #$2376, // $2376 + #$2377, // $2377 + #$2378, // $2378 + #$2379, // $2379 + #$237A, // $237A + #$237B, // $237B + #$237C, // $237C + #$237D, // $237D + #$237E, // $237E + #$237F, // $237F + #$2380, // $2380 + #$2381, // $2381 + #$2382, // $2382 + #$2383, // $2383 + #$2384, // $2384 + #$2385, // $2385 + #$2386, // $2386 + #$2387, // $2387 + #$2388, // $2388 + #$2389, // $2389 + #$238A, // $238A + #$238B, // $238B + #$238C, // $238C + #$238D, // $238D + #$238E, // $238E + #$238F, // $238F + #$2390, // $2390 + #$2391, // $2391 + #$2392, // $2392 + #$2393, // $2393 + #$2394, // $2394 + #$2395, // $2395 + #$2396, // $2396 + #$2397, // $2397 + #$2398, // $2398 + #$2399, // $2399 + #$239A, // $239A + #$239B, // $239B + #$239C, // $239C + #$239D, // $239D + #$239E, // $239E + #$239F, // $239F + #$23A0, // $23A0 + #$23A1, // $23A1 + #$23A2, // $23A2 + #$23A3, // $23A3 + #$23A4, // $23A4 + #$23A5, // $23A5 + #$23A6, // $23A6 + #$23A7, // $23A7 + #$23A8, // $23A8 + #$23A9, // $23A9 + #$23AA, // $23AA + #$23AB, // $23AB + #$23AC, // $23AC + #$23AD, // $23AD + #$23AE, // $23AE + #$23AF, // $23AF + #$23B0, // $23B0 + #$23B1, // $23B1 + #$23B2, // $23B2 + #$23B3, // $23B3 + #$23B4, // $23B4 + #$23B5, // $23B5 + #$23B6, // $23B6 + #$23B7, // $23B7 + #$23B8, // $23B8 + #$23B9, // $23B9 + #$23BA, // $23BA + #$23BB, // $23BB + #$23BC, // $23BC + #$23BD, // $23BD + #$23BE, // $23BE + #$23BF, // $23BF + #$23C0, // $23C0 + #$23C1, // $23C1 + #$23C2, // $23C2 + #$23C3, // $23C3 + #$23C4, // $23C4 + #$23C5, // $23C5 + #$23C6, // $23C6 + #$23C7, // $23C7 + #$23C8, // $23C8 + #$23C9, // $23C9 + #$23CA, // $23CA + #$23CB, // $23CB + #$23CC, // $23CC + #$23CD, // $23CD + #$23CE, // $23CE + #$23CF, // $23CF + #$23D0, // $23D0 + #$23D1, // $23D1 + #$23D2, // $23D2 + #$23D3, // $23D3 + #$23D4, // $23D4 + #$23D5, // $23D5 + #$23D6, // $23D6 + #$23D7, // $23D7 + #$23D8, // $23D8 + #$23D9, // $23D9 + #$23DA, // $23DA + #$23DB, // $23DB + #$23DC, // $23DC + #$23DD, // $23DD + #$23DE, // $23DE + #$23DF, // $23DF + #$23E0, // $23E0 + #$23E1, // $23E1 + #$23E2, // $23E2 + #$23E3, // $23E3 + #$23E4, // $23E4 + #$23E5, // $23E5 + #$23E6, // $23E6 + #$23E7, // $23E7 + #$23E8, // $23E8 + #$23E9, // $23E9 + #$23EA, // $23EA + #$23EB, // $23EB + #$23EC, // $23EC + #$23ED, // $23ED + #$23EE, // $23EE + #$23EF, // $23EF + #$23F0, // $23F0 + #$23F1, // $23F1 + #$23F2, // $23F2 + #$23F3, // $23F3 + #$23F4, // $23F4 + #$23F5, // $23F5 + #$23F6, // $23F6 + #$23F7, // $23F7 + #$23F8, // $23F8 + #$23F9, // $23F9 + #$23FA, // $23FA + #$23FB, // $23FB + #$23FC, // $23FC + #$23FD, // $23FD + #$23FE, // $23FE + #$23FF, // $23FF + #$2400, // $2400 + #$2401, // $2401 + #$2402, // $2402 + #$2403, // $2403 + #$2404, // $2404 + #$2405, // $2405 + #$2406, // $2406 + #$2407, // $2407 + #$2408, // $2408 + #$2409, // $2409 + #$240A, // $240A + #$240B, // $240B + #$240C, // $240C + #$240D, // $240D + #$240E, // $240E + #$240F, // $240F + #$2410, // $2410 + #$2411, // $2411 + #$2412, // $2412 + #$2413, // $2413 + #$2414, // $2414 + #$2415, // $2415 + #$2416, // $2416 + #$2417, // $2417 + #$2418, // $2418 + #$2419, // $2419 + #$241A, // $241A + #$241B, // $241B + #$241C, // $241C + #$241D, // $241D + #$241E, // $241E + #$241F, // $241F + #$2420, // $2420 + #$2421, // $2421 + #$2422, // $2422 + #$2423, // $2423 + #$2424, // $2424 + #$2425, // $2425 + #$2426, // $2426 + #$2427, // $2427 + #$2428, // $2428 + #$2429, // $2429 + #$242A, // $242A + #$242B, // $242B + #$242C, // $242C + #$242D, // $242D + #$242E, // $242E + #$242F, // $242F + #$2430, // $2430 + #$2431, // $2431 + #$2432, // $2432 + #$2433, // $2433 + #$2434, // $2434 + #$2435, // $2435 + #$2436, // $2436 + #$2437, // $2437 + #$2438, // $2438 + #$2439, // $2439 + #$243A, // $243A + #$243B, // $243B + #$243C, // $243C + #$243D, // $243D + #$243E, // $243E + #$243F, // $243F + #$2440, // $2440 + #$2441, // $2441 + #$2442, // $2442 + #$2443, // $2443 + #$2444, // $2444 + #$2445, // $2445 + #$2446, // $2446 + #$2447, // $2447 + #$2448, // $2448 + #$2449, // $2449 + #$244A, // $244A + #$244B, // $244B + #$244C, // $244C + #$244D, // $244D + #$244E, // $244E + #$244F, // $244F + #$2450, // $2450 + #$2451, // $2451 + #$2452, // $2452 + #$2453, // $2453 + #$2454, // $2454 + #$2455, // $2455 + #$2456, // $2456 + #$2457, // $2457 + #$2458, // $2458 + #$2459, // $2459 + #$245A, // $245A + #$245B, // $245B + #$245C, // $245C + #$245D, // $245D + #$245E, // $245E + #$245F, // $245F + #$2460, // $2460 + #$2461, // $2461 + #$2462, // $2462 + #$2463, // $2463 + #$2464, // $2464 + #$2465, // $2465 + #$2466, // $2466 + #$2467, // $2467 + #$2468, // $2468 + #$2469, // $2469 + #$246A, // $246A + #$246B, // $246B + #$246C, // $246C + #$246D, // $246D + #$246E, // $246E + #$246F, // $246F + #$2470, // $2470 + #$2471, // $2471 + #$2472, // $2472 + #$2473, // $2473 + #$2474, // $2474 + #$2475, // $2475 + #$2476, // $2476 + #$2477, // $2477 + #$2478, // $2478 + #$2479, // $2479 + #$247A, // $247A + #$247B, // $247B + #$247C, // $247C + #$247D, // $247D + #$247E, // $247E + #$247F, // $247F + #$2480, // $2480 + #$2481, // $2481 + #$2482, // $2482 + #$2483, // $2483 + #$2484, // $2484 + #$2485, // $2485 + #$2486, // $2486 + #$2487, // $2487 + #$2488, // $2488 + #$2489, // $2489 + #$248A, // $248A + #$248B, // $248B + #$248C, // $248C + #$248D, // $248D + #$248E, // $248E + #$248F, // $248F + #$2490, // $2490 + #$2491, // $2491 + #$2492, // $2492 + #$2493, // $2493 + #$2494, // $2494 + #$2495, // $2495 + #$2496, // $2496 + #$2497, // $2497 + #$2498, // $2498 + #$2499, // $2499 + #$249A, // $249A + #$249B, // $249B + #$249C, // $249C + #$249D, // $249D + #$249E, // $249E + #$249F, // $249F + #$24A0, // $24A0 + #$24A1, // $24A1 + #$24A2, // $24A2 + #$24A3, // $24A3 + #$24A4, // $24A4 + #$24A5, // $24A5 + #$24A6, // $24A6 + #$24A7, // $24A7 + #$24A8, // $24A8 + #$24A9, // $24A9 + #$24AA, // $24AA + #$24AB, // $24AB + #$24AC, // $24AC + #$24AD, // $24AD + #$24AE, // $24AE + #$24AF, // $24AF + #$24B0, // $24B0 + #$24B1, // $24B1 + #$24B2, // $24B2 + #$24B3, // $24B3 + #$24B4, // $24B4 + #$24B5, // $24B5 + #$24D0, // $24B6 + #$24D1, // $24B7 + #$24D2, // $24B8 + #$24D3, // $24B9 + #$24D4, // $24BA + #$24D5, // $24BB + #$24D6, // $24BC + #$24D7, // $24BD + #$24D8, // $24BE + #$24D9, // $24BF + #$24DA, // $24C0 + #$24DB, // $24C1 + #$24DC, // $24C2 + #$24DD, // $24C3 + #$24DE, // $24C4 + #$24DF, // $24C5 + #$24E0, // $24C6 + #$24E1, // $24C7 + #$24E2, // $24C8 + #$24E3, // $24C9 + #$24E4, // $24CA + #$24E5, // $24CB + #$24E6, // $24CC + #$24E7, // $24CD + #$24E8, // $24CE + #$24E9, // $24CF + #$24D0, // $24D0 + #$24D1, // $24D1 + #$24D2, // $24D2 + #$24D3, // $24D3 + #$24D4, // $24D4 + #$24D5, // $24D5 + #$24D6, // $24D6 + #$24D7, // $24D7 + #$24D8, // $24D8 + #$24D9, // $24D9 + #$24DA, // $24DA + #$24DB, // $24DB + #$24DC, // $24DC + #$24DD, // $24DD + #$24DE, // $24DE + #$24DF, // $24DF + #$24E0, // $24E0 + #$24E1, // $24E1 + #$24E2, // $24E2 + #$24E3, // $24E3 + #$24E4, // $24E4 + #$24E5, // $24E5 + #$24E6, // $24E6 + #$24E7, // $24E7 + #$24E8, // $24E8 + #$24E9, // $24E9 + #$24EA, // $24EA + #$24EB, // $24EB + #$24EC, // $24EC + #$24ED, // $24ED + #$24EE, // $24EE + #$24EF, // $24EF + #$24F0, // $24F0 + #$24F1, // $24F1 + #$24F2, // $24F2 + #$24F3, // $24F3 + #$24F4, // $24F4 + #$24F5, // $24F5 + #$24F6, // $24F6 + #$24F7, // $24F7 + #$24F8, // $24F8 + #$24F9, // $24F9 + #$24FA, // $24FA + #$24FB, // $24FB + #$24FC, // $24FC + #$24FD, // $24FD + #$24FE, // $24FE + #$24FF, // $24FF + #$2500, // $2500 + #$2501, // $2501 + #$2502, // $2502 + #$2503, // $2503 + #$2504, // $2504 + #$2505, // $2505 + #$2506, // $2506 + #$2507, // $2507 + #$2508, // $2508 + #$2509, // $2509 + #$250A, // $250A + #$250B, // $250B + #$250C, // $250C + #$250D, // $250D + #$250E, // $250E + #$250F, // $250F + #$2510, // $2510 + #$2511, // $2511 + #$2512, // $2512 + #$2513, // $2513 + #$2514, // $2514 + #$2515, // $2515 + #$2516, // $2516 + #$2517, // $2517 + #$2518, // $2518 + #$2519, // $2519 + #$251A, // $251A + #$251B, // $251B + #$251C, // $251C + #$251D, // $251D + #$251E, // $251E + #$251F, // $251F + #$2520, // $2520 + #$2521, // $2521 + #$2522, // $2522 + #$2523, // $2523 + #$2524, // $2524 + #$2525, // $2525 + #$2526, // $2526 + #$2527, // $2527 + #$2528, // $2528 + #$2529, // $2529 + #$252A, // $252A + #$252B, // $252B + #$252C, // $252C + #$252D, // $252D + #$252E, // $252E + #$252F, // $252F + #$2530, // $2530 + #$2531, // $2531 + #$2532, // $2532 + #$2533, // $2533 + #$2534, // $2534 + #$2535, // $2535 + #$2536, // $2536 + #$2537, // $2537 + #$2538, // $2538 + #$2539, // $2539 + #$253A, // $253A + #$253B, // $253B + #$253C, // $253C + #$253D, // $253D + #$253E, // $253E + #$253F, // $253F + #$2540, // $2540 + #$2541, // $2541 + #$2542, // $2542 + #$2543, // $2543 + #$2544, // $2544 + #$2545, // $2545 + #$2546, // $2546 + #$2547, // $2547 + #$2548, // $2548 + #$2549, // $2549 + #$254A, // $254A + #$254B, // $254B + #$254C, // $254C + #$254D, // $254D + #$254E, // $254E + #$254F, // $254F + #$2550, // $2550 + #$2551, // $2551 + #$2552, // $2552 + #$2553, // $2553 + #$2554, // $2554 + #$2555, // $2555 + #$2556, // $2556 + #$2557, // $2557 + #$2558, // $2558 + #$2559, // $2559 + #$255A, // $255A + #$255B, // $255B + #$255C, // $255C + #$255D, // $255D + #$255E, // $255E + #$255F, // $255F + #$2560, // $2560 + #$2561, // $2561 + #$2562, // $2562 + #$2563, // $2563 + #$2564, // $2564 + #$2565, // $2565 + #$2566, // $2566 + #$2567, // $2567 + #$2568, // $2568 + #$2569, // $2569 + #$256A, // $256A + #$256B, // $256B + #$256C, // $256C + #$256D, // $256D + #$256E, // $256E + #$256F, // $256F + #$2570, // $2570 + #$2571, // $2571 + #$2572, // $2572 + #$2573, // $2573 + #$2574, // $2574 + #$2575, // $2575 + #$2576, // $2576 + #$2577, // $2577 + #$2578, // $2578 + #$2579, // $2579 + #$257A, // $257A + #$257B, // $257B + #$257C, // $257C + #$257D, // $257D + #$257E, // $257E + #$257F, // $257F + #$2580, // $2580 + #$2581, // $2581 + #$2582, // $2582 + #$2583, // $2583 + #$2584, // $2584 + #$2585, // $2585 + #$2586, // $2586 + #$2587, // $2587 + #$2588, // $2588 + #$2589, // $2589 + #$258A, // $258A + #$258B, // $258B + #$258C, // $258C + #$258D, // $258D + #$258E, // $258E + #$258F, // $258F + #$2590, // $2590 + #$2591, // $2591 + #$2592, // $2592 + #$2593, // $2593 + #$2594, // $2594 + #$2595, // $2595 + #$2596, // $2596 + #$2597, // $2597 + #$2598, // $2598 + #$2599, // $2599 + #$259A, // $259A + #$259B, // $259B + #$259C, // $259C + #$259D, // $259D + #$259E, // $259E + #$259F, // $259F + #$25A0, // $25A0 + #$25A1, // $25A1 + #$25A2, // $25A2 + #$25A3, // $25A3 + #$25A4, // $25A4 + #$25A5, // $25A5 + #$25A6, // $25A6 + #$25A7, // $25A7 + #$25A8, // $25A8 + #$25A9, // $25A9 + #$25AA, // $25AA + #$25AB, // $25AB + #$25AC, // $25AC + #$25AD, // $25AD + #$25AE, // $25AE + #$25AF, // $25AF + #$25B0, // $25B0 + #$25B1, // $25B1 + #$25B2, // $25B2 + #$25B3, // $25B3 + #$25B4, // $25B4 + #$25B5, // $25B5 + #$25B6, // $25B6 + #$25B7, // $25B7 + #$25B8, // $25B8 + #$25B9, // $25B9 + #$25BA, // $25BA + #$25BB, // $25BB + #$25BC, // $25BC + #$25BD, // $25BD + #$25BE, // $25BE + #$25BF, // $25BF + #$25C0, // $25C0 + #$25C1, // $25C1 + #$25C2, // $25C2 + #$25C3, // $25C3 + #$25C4, // $25C4 + #$25C5, // $25C5 + #$25C6, // $25C6 + #$25C7, // $25C7 + #$25C8, // $25C8 + #$25C9, // $25C9 + #$25CA, // $25CA + #$25CB, // $25CB + #$25CC, // $25CC + #$25CD, // $25CD + #$25CE, // $25CE + #$25CF, // $25CF + #$25D0, // $25D0 + #$25D1, // $25D1 + #$25D2, // $25D2 + #$25D3, // $25D3 + #$25D4, // $25D4 + #$25D5, // $25D5 + #$25D6, // $25D6 + #$25D7, // $25D7 + #$25D8, // $25D8 + #$25D9, // $25D9 + #$25DA, // $25DA + #$25DB, // $25DB + #$25DC, // $25DC + #$25DD, // $25DD + #$25DE, // $25DE + #$25DF, // $25DF + #$25E0, // $25E0 + #$25E1, // $25E1 + #$25E2, // $25E2 + #$25E3, // $25E3 + #$25E4, // $25E4 + #$25E5, // $25E5 + #$25E6, // $25E6 + #$25E7, // $25E7 + #$25E8, // $25E8 + #$25E9, // $25E9 + #$25EA, // $25EA + #$25EB, // $25EB + #$25EC, // $25EC + #$25ED, // $25ED + #$25EE, // $25EE + #$25EF, // $25EF + #$25F0, // $25F0 + #$25F1, // $25F1 + #$25F2, // $25F2 + #$25F3, // $25F3 + #$25F4, // $25F4 + #$25F5, // $25F5 + #$25F6, // $25F6 + #$25F7, // $25F7 + #$25F8, // $25F8 + #$25F9, // $25F9 + #$25FA, // $25FA + #$25FB, // $25FB + #$25FC, // $25FC + #$25FD, // $25FD + #$25FE, // $25FE + #$25FF, // $25FF + #$2600, // $2600 + #$2601, // $2601 + #$2602, // $2602 + #$2603, // $2603 + #$2604, // $2604 + #$2605, // $2605 + #$2606, // $2606 + #$2607, // $2607 + #$2608, // $2608 + #$2609, // $2609 + #$260A, // $260A + #$260B, // $260B + #$260C, // $260C + #$260D, // $260D + #$260E, // $260E + #$260F, // $260F + #$2610, // $2610 + #$2611, // $2611 + #$2612, // $2612 + #$2613, // $2613 + #$2614, // $2614 + #$2615, // $2615 + #$2616, // $2616 + #$2617, // $2617 + #$2618, // $2618 + #$2619, // $2619 + #$261A, // $261A + #$261B, // $261B + #$261C, // $261C + #$261D, // $261D + #$261E, // $261E + #$261F, // $261F + #$2620, // $2620 + #$2621, // $2621 + #$2622, // $2622 + #$2623, // $2623 + #$2624, // $2624 + #$2625, // $2625 + #$2626, // $2626 + #$2627, // $2627 + #$2628, // $2628 + #$2629, // $2629 + #$262A, // $262A + #$262B, // $262B + #$262C, // $262C + #$262D, // $262D + #$262E, // $262E + #$262F, // $262F + #$2630, // $2630 + #$2631, // $2631 + #$2632, // $2632 + #$2633, // $2633 + #$2634, // $2634 + #$2635, // $2635 + #$2636, // $2636 + #$2637, // $2637 + #$2638, // $2638 + #$2639, // $2639 + #$263A, // $263A + #$263B, // $263B + #$263C, // $263C + #$263D, // $263D + #$263E, // $263E + #$263F, // $263F + #$2640, // $2640 + #$2641, // $2641 + #$2642, // $2642 + #$2643, // $2643 + #$2644, // $2644 + #$2645, // $2645 + #$2646, // $2646 + #$2647, // $2647 + #$2648, // $2648 + #$2649, // $2649 + #$264A, // $264A + #$264B, // $264B + #$264C, // $264C + #$264D, // $264D + #$264E, // $264E + #$264F, // $264F + #$2650, // $2650 + #$2651, // $2651 + #$2652, // $2652 + #$2653, // $2653 + #$2654, // $2654 + #$2655, // $2655 + #$2656, // $2656 + #$2657, // $2657 + #$2658, // $2658 + #$2659, // $2659 + #$265A, // $265A + #$265B, // $265B + #$265C, // $265C + #$265D, // $265D + #$265E, // $265E + #$265F, // $265F + #$2660, // $2660 + #$2661, // $2661 + #$2662, // $2662 + #$2663, // $2663 + #$2664, // $2664 + #$2665, // $2665 + #$2666, // $2666 + #$2667, // $2667 + #$2668, // $2668 + #$2669, // $2669 + #$266A, // $266A + #$266B, // $266B + #$266C, // $266C + #$266D, // $266D + #$266E, // $266E + #$266F, // $266F + #$2670, // $2670 + #$2671, // $2671 + #$2672, // $2672 + #$2673, // $2673 + #$2674, // $2674 + #$2675, // $2675 + #$2676, // $2676 + #$2677, // $2677 + #$2678, // $2678 + #$2679, // $2679 + #$267A, // $267A + #$267B, // $267B + #$267C, // $267C + #$267D, // $267D + #$267E, // $267E + #$267F, // $267F + #$2680, // $2680 + #$2681, // $2681 + #$2682, // $2682 + #$2683, // $2683 + #$2684, // $2684 + #$2685, // $2685 + #$2686, // $2686 + #$2687, // $2687 + #$2688, // $2688 + #$2689, // $2689 + #$268A, // $268A + #$268B, // $268B + #$268C, // $268C + #$268D, // $268D + #$268E, // $268E + #$268F, // $268F + #$2690, // $2690 + #$2691, // $2691 + #$2692, // $2692 + #$2693, // $2693 + #$2694, // $2694 + #$2695, // $2695 + #$2696, // $2696 + #$2697, // $2697 + #$2698, // $2698 + #$2699, // $2699 + #$269A, // $269A + #$269B, // $269B + #$269C, // $269C + #$269D, // $269D + #$269E, // $269E + #$269F, // $269F + #$26A0, // $26A0 + #$26A1, // $26A1 + #$26A2, // $26A2 + #$26A3, // $26A3 + #$26A4, // $26A4 + #$26A5, // $26A5 + #$26A6, // $26A6 + #$26A7, // $26A7 + #$26A8, // $26A8 + #$26A9, // $26A9 + #$26AA, // $26AA + #$26AB, // $26AB + #$26AC, // $26AC + #$26AD, // $26AD + #$26AE, // $26AE + #$26AF, // $26AF + #$26B0, // $26B0 + #$26B1, // $26B1 + #$26B2, // $26B2 + #$26B3, // $26B3 + #$26B4, // $26B4 + #$26B5, // $26B5 + #$26B6, // $26B6 + #$26B7, // $26B7 + #$26B8, // $26B8 + #$26B9, // $26B9 + #$26BA, // $26BA + #$26BB, // $26BB + #$26BC, // $26BC + #$26BD, // $26BD + #$26BE, // $26BE + #$26BF, // $26BF + #$26C0, // $26C0 + #$26C1, // $26C1 + #$26C2, // $26C2 + #$26C3, // $26C3 + #$26C4, // $26C4 + #$26C5, // $26C5 + #$26C6, // $26C6 + #$26C7, // $26C7 + #$26C8, // $26C8 + #$26C9, // $26C9 + #$26CA, // $26CA + #$26CB, // $26CB + #$26CC, // $26CC + #$26CD, // $26CD + #$26CE, // $26CE + #$26CF, // $26CF + #$26D0, // $26D0 + #$26D1, // $26D1 + #$26D2, // $26D2 + #$26D3, // $26D3 + #$26D4, // $26D4 + #$26D5, // $26D5 + #$26D6, // $26D6 + #$26D7, // $26D7 + #$26D8, // $26D8 + #$26D9, // $26D9 + #$26DA, // $26DA + #$26DB, // $26DB + #$26DC, // $26DC + #$26DD, // $26DD + #$26DE, // $26DE + #$26DF, // $26DF + #$26E0, // $26E0 + #$26E1, // $26E1 + #$26E2, // $26E2 + #$26E3, // $26E3 + #$26E4, // $26E4 + #$26E5, // $26E5 + #$26E6, // $26E6 + #$26E7, // $26E7 + #$26E8, // $26E8 + #$26E9, // $26E9 + #$26EA, // $26EA + #$26EB, // $26EB + #$26EC, // $26EC + #$26ED, // $26ED + #$26EE, // $26EE + #$26EF, // $26EF + #$26F0, // $26F0 + #$26F1, // $26F1 + #$26F2, // $26F2 + #$26F3, // $26F3 + #$26F4, // $26F4 + #$26F5, // $26F5 + #$26F6, // $26F6 + #$26F7, // $26F7 + #$26F8, // $26F8 + #$26F9, // $26F9 + #$26FA, // $26FA + #$26FB, // $26FB + #$26FC, // $26FC + #$26FD, // $26FD + #$26FE, // $26FE + #$26FF, // $26FF + #$2700, // $2700 + #$2701, // $2701 + #$2702, // $2702 + #$2703, // $2703 + #$2704, // $2704 + #$2705, // $2705 + #$2706, // $2706 + #$2707, // $2707 + #$2708, // $2708 + #$2709, // $2709 + #$270A, // $270A + #$270B, // $270B + #$270C, // $270C + #$270D, // $270D + #$270E, // $270E + #$270F, // $270F + #$2710, // $2710 + #$2711, // $2711 + #$2712, // $2712 + #$2713, // $2713 + #$2714, // $2714 + #$2715, // $2715 + #$2716, // $2716 + #$2717, // $2717 + #$2718, // $2718 + #$2719, // $2719 + #$271A, // $271A + #$271B, // $271B + #$271C, // $271C + #$271D, // $271D + #$271E, // $271E + #$271F, // $271F + #$2720, // $2720 + #$2721, // $2721 + #$2722, // $2722 + #$2723, // $2723 + #$2724, // $2724 + #$2725, // $2725 + #$2726, // $2726 + #$2727, // $2727 + #$2728, // $2728 + #$2729, // $2729 + #$272A, // $272A + #$272B, // $272B + #$272C, // $272C + #$272D, // $272D + #$272E, // $272E + #$272F, // $272F + #$2730, // $2730 + #$2731, // $2731 + #$2732, // $2732 + #$2733, // $2733 + #$2734, // $2734 + #$2735, // $2735 + #$2736, // $2736 + #$2737, // $2737 + #$2738, // $2738 + #$2739, // $2739 + #$273A, // $273A + #$273B, // $273B + #$273C, // $273C + #$273D, // $273D + #$273E, // $273E + #$273F, // $273F + #$2740, // $2740 + #$2741, // $2741 + #$2742, // $2742 + #$2743, // $2743 + #$2744, // $2744 + #$2745, // $2745 + #$2746, // $2746 + #$2747, // $2747 + #$2748, // $2748 + #$2749, // $2749 + #$274A, // $274A + #$274B, // $274B + #$274C, // $274C + #$274D, // $274D + #$274E, // $274E + #$274F, // $274F + #$2750, // $2750 + #$2751, // $2751 + #$2752, // $2752 + #$2753, // $2753 + #$2754, // $2754 + #$2755, // $2755 + #$2756, // $2756 + #$2757, // $2757 + #$2758, // $2758 + #$2759, // $2759 + #$275A, // $275A + #$275B, // $275B + #$275C, // $275C + #$275D, // $275D + #$275E, // $275E + #$275F, // $275F + #$2760, // $2760 + #$2761, // $2761 + #$2762, // $2762 + #$2763, // $2763 + #$2764, // $2764 + #$2765, // $2765 + #$2766, // $2766 + #$2767, // $2767 + #$2768, // $2768 + #$2769, // $2769 + #$276A, // $276A + #$276B, // $276B + #$276C, // $276C + #$276D, // $276D + #$276E, // $276E + #$276F, // $276F + #$2770, // $2770 + #$2771, // $2771 + #$2772, // $2772 + #$2773, // $2773 + #$2774, // $2774 + #$2775, // $2775 + #$2776, // $2776 + #$2777, // $2777 + #$2778, // $2778 + #$2779, // $2779 + #$277A, // $277A + #$277B, // $277B + #$277C, // $277C + #$277D, // $277D + #$277E, // $277E + #$277F, // $277F + #$2780, // $2780 + #$2781, // $2781 + #$2782, // $2782 + #$2783, // $2783 + #$2784, // $2784 + #$2785, // $2785 + #$2786, // $2786 + #$2787, // $2787 + #$2788, // $2788 + #$2789, // $2789 + #$278A, // $278A + #$278B, // $278B + #$278C, // $278C + #$278D, // $278D + #$278E, // $278E + #$278F, // $278F + #$2790, // $2790 + #$2791, // $2791 + #$2792, // $2792 + #$2793, // $2793 + #$2794, // $2794 + #$2795, // $2795 + #$2796, // $2796 + #$2797, // $2797 + #$2798, // $2798 + #$2799, // $2799 + #$279A, // $279A + #$279B, // $279B + #$279C, // $279C + #$279D, // $279D + #$279E, // $279E + #$279F, // $279F + #$27A0, // $27A0 + #$27A1, // $27A1 + #$27A2, // $27A2 + #$27A3, // $27A3 + #$27A4, // $27A4 + #$27A5, // $27A5 + #$27A6, // $27A6 + #$27A7, // $27A7 + #$27A8, // $27A8 + #$27A9, // $27A9 + #$27AA, // $27AA + #$27AB, // $27AB + #$27AC, // $27AC + #$27AD, // $27AD + #$27AE, // $27AE + #$27AF, // $27AF + #$27B0, // $27B0 + #$27B1, // $27B1 + #$27B2, // $27B2 + #$27B3, // $27B3 + #$27B4, // $27B4 + #$27B5, // $27B5 + #$27B6, // $27B6 + #$27B7, // $27B7 + #$27B8, // $27B8 + #$27B9, // $27B9 + #$27BA, // $27BA + #$27BB, // $27BB + #$27BC, // $27BC + #$27BD, // $27BD + #$27BE, // $27BE + #$27BF, // $27BF + #$27C0, // $27C0 + #$27C1, // $27C1 + #$27C2, // $27C2 + #$27C3, // $27C3 + #$27C4, // $27C4 + #$27C5, // $27C5 + #$27C6, // $27C6 + #$27C7, // $27C7 + #$27C8, // $27C8 + #$27C9, // $27C9 + #$27CA, // $27CA + #$27CB, // $27CB + #$27CC, // $27CC + #$27CD, // $27CD + #$27CE, // $27CE + #$27CF, // $27CF + #$27D0, // $27D0 + #$27D1, // $27D1 + #$27D2, // $27D2 + #$27D3, // $27D3 + #$27D4, // $27D4 + #$27D5, // $27D5 + #$27D6, // $27D6 + #$27D7, // $27D7 + #$27D8, // $27D8 + #$27D9, // $27D9 + #$27DA, // $27DA + #$27DB, // $27DB + #$27DC, // $27DC + #$27DD, // $27DD + #$27DE, // $27DE + #$27DF, // $27DF + #$27E0, // $27E0 + #$27E1, // $27E1 + #$27E2, // $27E2 + #$27E3, // $27E3 + #$27E4, // $27E4 + #$27E5, // $27E5 + #$27E6, // $27E6 + #$27E7, // $27E7 + #$27E8, // $27E8 + #$27E9, // $27E9 + #$27EA, // $27EA + #$27EB, // $27EB + #$27EC, // $27EC + #$27ED, // $27ED + #$27EE, // $27EE + #$27EF, // $27EF + #$27F0, // $27F0 + #$27F1, // $27F1 + #$27F2, // $27F2 + #$27F3, // $27F3 + #$27F4, // $27F4 + #$27F5, // $27F5 + #$27F6, // $27F6 + #$27F7, // $27F7 + #$27F8, // $27F8 + #$27F9, // $27F9 + #$27FA, // $27FA + #$27FB, // $27FB + #$27FC, // $27FC + #$27FD, // $27FD + #$27FE, // $27FE + #$27FF, // $27FF + #$2800, // $2800 + #$2801, // $2801 + #$2802, // $2802 + #$2803, // $2803 + #$2804, // $2804 + #$2805, // $2805 + #$2806, // $2806 + #$2807, // $2807 + #$2808, // $2808 + #$2809, // $2809 + #$280A, // $280A + #$280B, // $280B + #$280C, // $280C + #$280D, // $280D + #$280E, // $280E + #$280F, // $280F + #$2810, // $2810 + #$2811, // $2811 + #$2812, // $2812 + #$2813, // $2813 + #$2814, // $2814 + #$2815, // $2815 + #$2816, // $2816 + #$2817, // $2817 + #$2818, // $2818 + #$2819, // $2819 + #$281A, // $281A + #$281B, // $281B + #$281C, // $281C + #$281D, // $281D + #$281E, // $281E + #$281F, // $281F + #$2820, // $2820 + #$2821, // $2821 + #$2822, // $2822 + #$2823, // $2823 + #$2824, // $2824 + #$2825, // $2825 + #$2826, // $2826 + #$2827, // $2827 + #$2828, // $2828 + #$2829, // $2829 + #$282A, // $282A + #$282B, // $282B + #$282C, // $282C + #$282D, // $282D + #$282E, // $282E + #$282F, // $282F + #$2830, // $2830 + #$2831, // $2831 + #$2832, // $2832 + #$2833, // $2833 + #$2834, // $2834 + #$2835, // $2835 + #$2836, // $2836 + #$2837, // $2837 + #$2838, // $2838 + #$2839, // $2839 + #$283A, // $283A + #$283B, // $283B + #$283C, // $283C + #$283D, // $283D + #$283E, // $283E + #$283F, // $283F + #$2840, // $2840 + #$2841, // $2841 + #$2842, // $2842 + #$2843, // $2843 + #$2844, // $2844 + #$2845, // $2845 + #$2846, // $2846 + #$2847, // $2847 + #$2848, // $2848 + #$2849, // $2849 + #$284A, // $284A + #$284B, // $284B + #$284C, // $284C + #$284D, // $284D + #$284E, // $284E + #$284F, // $284F + #$2850, // $2850 + #$2851, // $2851 + #$2852, // $2852 + #$2853, // $2853 + #$2854, // $2854 + #$2855, // $2855 + #$2856, // $2856 + #$2857, // $2857 + #$2858, // $2858 + #$2859, // $2859 + #$285A, // $285A + #$285B, // $285B + #$285C, // $285C + #$285D, // $285D + #$285E, // $285E + #$285F, // $285F + #$2860, // $2860 + #$2861, // $2861 + #$2862, // $2862 + #$2863, // $2863 + #$2864, // $2864 + #$2865, // $2865 + #$2866, // $2866 + #$2867, // $2867 + #$2868, // $2868 + #$2869, // $2869 + #$286A, // $286A + #$286B, // $286B + #$286C, // $286C + #$286D, // $286D + #$286E, // $286E + #$286F, // $286F + #$2870, // $2870 + #$2871, // $2871 + #$2872, // $2872 + #$2873, // $2873 + #$2874, // $2874 + #$2875, // $2875 + #$2876, // $2876 + #$2877, // $2877 + #$2878, // $2878 + #$2879, // $2879 + #$287A, // $287A + #$287B, // $287B + #$287C, // $287C + #$287D, // $287D + #$287E, // $287E + #$287F, // $287F + #$2880, // $2880 + #$2881, // $2881 + #$2882, // $2882 + #$2883, // $2883 + #$2884, // $2884 + #$2885, // $2885 + #$2886, // $2886 + #$2887, // $2887 + #$2888, // $2888 + #$2889, // $2889 + #$288A, // $288A + #$288B, // $288B + #$288C, // $288C + #$288D, // $288D + #$288E, // $288E + #$288F, // $288F + #$2890, // $2890 + #$2891, // $2891 + #$2892, // $2892 + #$2893, // $2893 + #$2894, // $2894 + #$2895, // $2895 + #$2896, // $2896 + #$2897, // $2897 + #$2898, // $2898 + #$2899, // $2899 + #$289A, // $289A + #$289B, // $289B + #$289C, // $289C + #$289D, // $289D + #$289E, // $289E + #$289F, // $289F + #$28A0, // $28A0 + #$28A1, // $28A1 + #$28A2, // $28A2 + #$28A3, // $28A3 + #$28A4, // $28A4 + #$28A5, // $28A5 + #$28A6, // $28A6 + #$28A7, // $28A7 + #$28A8, // $28A8 + #$28A9, // $28A9 + #$28AA, // $28AA + #$28AB, // $28AB + #$28AC, // $28AC + #$28AD, // $28AD + #$28AE, // $28AE + #$28AF, // $28AF + #$28B0, // $28B0 + #$28B1, // $28B1 + #$28B2, // $28B2 + #$28B3, // $28B3 + #$28B4, // $28B4 + #$28B5, // $28B5 + #$28B6, // $28B6 + #$28B7, // $28B7 + #$28B8, // $28B8 + #$28B9, // $28B9 + #$28BA, // $28BA + #$28BB, // $28BB + #$28BC, // $28BC + #$28BD, // $28BD + #$28BE, // $28BE + #$28BF, // $28BF + #$28C0, // $28C0 + #$28C1, // $28C1 + #$28C2, // $28C2 + #$28C3, // $28C3 + #$28C4, // $28C4 + #$28C5, // $28C5 + #$28C6, // $28C6 + #$28C7, // $28C7 + #$28C8, // $28C8 + #$28C9, // $28C9 + #$28CA, // $28CA + #$28CB, // $28CB + #$28CC, // $28CC + #$28CD, // $28CD + #$28CE, // $28CE + #$28CF, // $28CF + #$28D0, // $28D0 + #$28D1, // $28D1 + #$28D2, // $28D2 + #$28D3, // $28D3 + #$28D4, // $28D4 + #$28D5, // $28D5 + #$28D6, // $28D6 + #$28D7, // $28D7 + #$28D8, // $28D8 + #$28D9, // $28D9 + #$28DA, // $28DA + #$28DB, // $28DB + #$28DC, // $28DC + #$28DD, // $28DD + #$28DE, // $28DE + #$28DF, // $28DF + #$28E0, // $28E0 + #$28E1, // $28E1 + #$28E2, // $28E2 + #$28E3, // $28E3 + #$28E4, // $28E4 + #$28E5, // $28E5 + #$28E6, // $28E6 + #$28E7, // $28E7 + #$28E8, // $28E8 + #$28E9, // $28E9 + #$28EA, // $28EA + #$28EB, // $28EB + #$28EC, // $28EC + #$28ED, // $28ED + #$28EE, // $28EE + #$28EF, // $28EF + #$28F0, // $28F0 + #$28F1, // $28F1 + #$28F2, // $28F2 + #$28F3, // $28F3 + #$28F4, // $28F4 + #$28F5, // $28F5 + #$28F6, // $28F6 + #$28F7, // $28F7 + #$28F8, // $28F8 + #$28F9, // $28F9 + #$28FA, // $28FA + #$28FB, // $28FB + #$28FC, // $28FC + #$28FD, // $28FD + #$28FE, // $28FE + #$28FF, // $28FF + #$2900, // $2900 + #$2901, // $2901 + #$2902, // $2902 + #$2903, // $2903 + #$2904, // $2904 + #$2905, // $2905 + #$2906, // $2906 + #$2907, // $2907 + #$2908, // $2908 + #$2909, // $2909 + #$290A, // $290A + #$290B, // $290B + #$290C, // $290C + #$290D, // $290D + #$290E, // $290E + #$290F, // $290F + #$2910, // $2910 + #$2911, // $2911 + #$2912, // $2912 + #$2913, // $2913 + #$2914, // $2914 + #$2915, // $2915 + #$2916, // $2916 + #$2917, // $2917 + #$2918, // $2918 + #$2919, // $2919 + #$291A, // $291A + #$291B, // $291B + #$291C, // $291C + #$291D, // $291D + #$291E, // $291E + #$291F, // $291F + #$2920, // $2920 + #$2921, // $2921 + #$2922, // $2922 + #$2923, // $2923 + #$2924, // $2924 + #$2925, // $2925 + #$2926, // $2926 + #$2927, // $2927 + #$2928, // $2928 + #$2929, // $2929 + #$292A, // $292A + #$292B, // $292B + #$292C, // $292C + #$292D, // $292D + #$292E, // $292E + #$292F, // $292F + #$2930, // $2930 + #$2931, // $2931 + #$2932, // $2932 + #$2933, // $2933 + #$2934, // $2934 + #$2935, // $2935 + #$2936, // $2936 + #$2937, // $2937 + #$2938, // $2938 + #$2939, // $2939 + #$293A, // $293A + #$293B, // $293B + #$293C, // $293C + #$293D, // $293D + #$293E, // $293E + #$293F, // $293F + #$2940, // $2940 + #$2941, // $2941 + #$2942, // $2942 + #$2943, // $2943 + #$2944, // $2944 + #$2945, // $2945 + #$2946, // $2946 + #$2947, // $2947 + #$2948, // $2948 + #$2949, // $2949 + #$294A, // $294A + #$294B, // $294B + #$294C, // $294C + #$294D, // $294D + #$294E, // $294E + #$294F, // $294F + #$2950, // $2950 + #$2951, // $2951 + #$2952, // $2952 + #$2953, // $2953 + #$2954, // $2954 + #$2955, // $2955 + #$2956, // $2956 + #$2957, // $2957 + #$2958, // $2958 + #$2959, // $2959 + #$295A, // $295A + #$295B, // $295B + #$295C, // $295C + #$295D, // $295D + #$295E, // $295E + #$295F, // $295F + #$2960, // $2960 + #$2961, // $2961 + #$2962, // $2962 + #$2963, // $2963 + #$2964, // $2964 + #$2965, // $2965 + #$2966, // $2966 + #$2967, // $2967 + #$2968, // $2968 + #$2969, // $2969 + #$296A, // $296A + #$296B, // $296B + #$296C, // $296C + #$296D, // $296D + #$296E, // $296E + #$296F, // $296F + #$2970, // $2970 + #$2971, // $2971 + #$2972, // $2972 + #$2973, // $2973 + #$2974, // $2974 + #$2975, // $2975 + #$2976, // $2976 + #$2977, // $2977 + #$2978, // $2978 + #$2979, // $2979 + #$297A, // $297A + #$297B, // $297B + #$297C, // $297C + #$297D, // $297D + #$297E, // $297E + #$297F, // $297F + #$2980, // $2980 + #$2981, // $2981 + #$2982, // $2982 + #$2983, // $2983 + #$2984, // $2984 + #$2985, // $2985 + #$2986, // $2986 + #$2987, // $2987 + #$2988, // $2988 + #$2989, // $2989 + #$298A, // $298A + #$298B, // $298B + #$298C, // $298C + #$298D, // $298D + #$298E, // $298E + #$298F, // $298F + #$2990, // $2990 + #$2991, // $2991 + #$2992, // $2992 + #$2993, // $2993 + #$2994, // $2994 + #$2995, // $2995 + #$2996, // $2996 + #$2997, // $2997 + #$2998, // $2998 + #$2999, // $2999 + #$299A, // $299A + #$299B, // $299B + #$299C, // $299C + #$299D, // $299D + #$299E, // $299E + #$299F, // $299F + #$29A0, // $29A0 + #$29A1, // $29A1 + #$29A2, // $29A2 + #$29A3, // $29A3 + #$29A4, // $29A4 + #$29A5, // $29A5 + #$29A6, // $29A6 + #$29A7, // $29A7 + #$29A8, // $29A8 + #$29A9, // $29A9 + #$29AA, // $29AA + #$29AB, // $29AB + #$29AC, // $29AC + #$29AD, // $29AD + #$29AE, // $29AE + #$29AF, // $29AF + #$29B0, // $29B0 + #$29B1, // $29B1 + #$29B2, // $29B2 + #$29B3, // $29B3 + #$29B4, // $29B4 + #$29B5, // $29B5 + #$29B6, // $29B6 + #$29B7, // $29B7 + #$29B8, // $29B8 + #$29B9, // $29B9 + #$29BA, // $29BA + #$29BB, // $29BB + #$29BC, // $29BC + #$29BD, // $29BD + #$29BE, // $29BE + #$29BF, // $29BF + #$29C0, // $29C0 + #$29C1, // $29C1 + #$29C2, // $29C2 + #$29C3, // $29C3 + #$29C4, // $29C4 + #$29C5, // $29C5 + #$29C6, // $29C6 + #$29C7, // $29C7 + #$29C8, // $29C8 + #$29C9, // $29C9 + #$29CA, // $29CA + #$29CB, // $29CB + #$29CC, // $29CC + #$29CD, // $29CD + #$29CE, // $29CE + #$29CF, // $29CF + #$29D0, // $29D0 + #$29D1, // $29D1 + #$29D2, // $29D2 + #$29D3, // $29D3 + #$29D4, // $29D4 + #$29D5, // $29D5 + #$29D6, // $29D6 + #$29D7, // $29D7 + #$29D8, // $29D8 + #$29D9, // $29D9 + #$29DA, // $29DA + #$29DB, // $29DB + #$29DC, // $29DC + #$29DD, // $29DD + #$29DE, // $29DE + #$29DF, // $29DF + #$29E0, // $29E0 + #$29E1, // $29E1 + #$29E2, // $29E2 + #$29E3, // $29E3 + #$29E4, // $29E4 + #$29E5, // $29E5 + #$29E6, // $29E6 + #$29E7, // $29E7 + #$29E8, // $29E8 + #$29E9, // $29E9 + #$29EA, // $29EA + #$29EB, // $29EB + #$29EC, // $29EC + #$29ED, // $29ED + #$29EE, // $29EE + #$29EF, // $29EF + #$29F0, // $29F0 + #$29F1, // $29F1 + #$29F2, // $29F2 + #$29F3, // $29F3 + #$29F4, // $29F4 + #$29F5, // $29F5 + #$29F6, // $29F6 + #$29F7, // $29F7 + #$29F8, // $29F8 + #$29F9, // $29F9 + #$29FA, // $29FA + #$29FB, // $29FB + #$29FC, // $29FC + #$29FD, // $29FD + #$29FE, // $29FE + #$29FF, // $29FF + #$2A00, // $2A00 + #$2A01, // $2A01 + #$2A02, // $2A02 + #$2A03, // $2A03 + #$2A04, // $2A04 + #$2A05, // $2A05 + #$2A06, // $2A06 + #$2A07, // $2A07 + #$2A08, // $2A08 + #$2A09, // $2A09 + #$2A0A, // $2A0A + #$2A0B, // $2A0B + #$2A0C, // $2A0C + #$2A0D, // $2A0D + #$2A0E, // $2A0E + #$2A0F, // $2A0F + #$2A10, // $2A10 + #$2A11, // $2A11 + #$2A12, // $2A12 + #$2A13, // $2A13 + #$2A14, // $2A14 + #$2A15, // $2A15 + #$2A16, // $2A16 + #$2A17, // $2A17 + #$2A18, // $2A18 + #$2A19, // $2A19 + #$2A1A, // $2A1A + #$2A1B, // $2A1B + #$2A1C, // $2A1C + #$2A1D, // $2A1D + #$2A1E, // $2A1E + #$2A1F, // $2A1F + #$2A20, // $2A20 + #$2A21, // $2A21 + #$2A22, // $2A22 + #$2A23, // $2A23 + #$2A24, // $2A24 + #$2A25, // $2A25 + #$2A26, // $2A26 + #$2A27, // $2A27 + #$2A28, // $2A28 + #$2A29, // $2A29 + #$2A2A, // $2A2A + #$2A2B, // $2A2B + #$2A2C, // $2A2C + #$2A2D, // $2A2D + #$2A2E, // $2A2E + #$2A2F, // $2A2F + #$2A30, // $2A30 + #$2A31, // $2A31 + #$2A32, // $2A32 + #$2A33, // $2A33 + #$2A34, // $2A34 + #$2A35, // $2A35 + #$2A36, // $2A36 + #$2A37, // $2A37 + #$2A38, // $2A38 + #$2A39, // $2A39 + #$2A3A, // $2A3A + #$2A3B, // $2A3B + #$2A3C, // $2A3C + #$2A3D, // $2A3D + #$2A3E, // $2A3E + #$2A3F, // $2A3F + #$2A40, // $2A40 + #$2A41, // $2A41 + #$2A42, // $2A42 + #$2A43, // $2A43 + #$2A44, // $2A44 + #$2A45, // $2A45 + #$2A46, // $2A46 + #$2A47, // $2A47 + #$2A48, // $2A48 + #$2A49, // $2A49 + #$2A4A, // $2A4A + #$2A4B, // $2A4B + #$2A4C, // $2A4C + #$2A4D, // $2A4D + #$2A4E, // $2A4E + #$2A4F, // $2A4F + #$2A50, // $2A50 + #$2A51, // $2A51 + #$2A52, // $2A52 + #$2A53, // $2A53 + #$2A54, // $2A54 + #$2A55, // $2A55 + #$2A56, // $2A56 + #$2A57, // $2A57 + #$2A58, // $2A58 + #$2A59, // $2A59 + #$2A5A, // $2A5A + #$2A5B, // $2A5B + #$2A5C, // $2A5C + #$2A5D, // $2A5D + #$2A5E, // $2A5E + #$2A5F, // $2A5F + #$2A60, // $2A60 + #$2A61, // $2A61 + #$2A62, // $2A62 + #$2A63, // $2A63 + #$2A64, // $2A64 + #$2A65, // $2A65 + #$2A66, // $2A66 + #$2A67, // $2A67 + #$2A68, // $2A68 + #$2A69, // $2A69 + #$2A6A, // $2A6A + #$2A6B, // $2A6B + #$2A6C, // $2A6C + #$2A6D, // $2A6D + #$2A6E, // $2A6E + #$2A6F, // $2A6F + #$2A70, // $2A70 + #$2A71, // $2A71 + #$2A72, // $2A72 + #$2A73, // $2A73 + #$2A74, // $2A74 + #$2A75, // $2A75 + #$2A76, // $2A76 + #$2A77, // $2A77 + #$2A78, // $2A78 + #$2A79, // $2A79 + #$2A7A, // $2A7A + #$2A7B, // $2A7B + #$2A7C, // $2A7C + #$2A7D, // $2A7D + #$2A7E, // $2A7E + #$2A7F, // $2A7F + #$2A80, // $2A80 + #$2A81, // $2A81 + #$2A82, // $2A82 + #$2A83, // $2A83 + #$2A84, // $2A84 + #$2A85, // $2A85 + #$2A86, // $2A86 + #$2A87, // $2A87 + #$2A88, // $2A88 + #$2A89, // $2A89 + #$2A8A, // $2A8A + #$2A8B, // $2A8B + #$2A8C, // $2A8C + #$2A8D, // $2A8D + #$2A8E, // $2A8E + #$2A8F, // $2A8F + #$2A90, // $2A90 + #$2A91, // $2A91 + #$2A92, // $2A92 + #$2A93, // $2A93 + #$2A94, // $2A94 + #$2A95, // $2A95 + #$2A96, // $2A96 + #$2A97, // $2A97 + #$2A98, // $2A98 + #$2A99, // $2A99 + #$2A9A, // $2A9A + #$2A9B, // $2A9B + #$2A9C, // $2A9C + #$2A9D, // $2A9D + #$2A9E, // $2A9E + #$2A9F, // $2A9F + #$2AA0, // $2AA0 + #$2AA1, // $2AA1 + #$2AA2, // $2AA2 + #$2AA3, // $2AA3 + #$2AA4, // $2AA4 + #$2AA5, // $2AA5 + #$2AA6, // $2AA6 + #$2AA7, // $2AA7 + #$2AA8, // $2AA8 + #$2AA9, // $2AA9 + #$2AAA, // $2AAA + #$2AAB, // $2AAB + #$2AAC, // $2AAC + #$2AAD, // $2AAD + #$2AAE, // $2AAE + #$2AAF, // $2AAF + #$2AB0, // $2AB0 + #$2AB1, // $2AB1 + #$2AB2, // $2AB2 + #$2AB3, // $2AB3 + #$2AB4, // $2AB4 + #$2AB5, // $2AB5 + #$2AB6, // $2AB6 + #$2AB7, // $2AB7 + #$2AB8, // $2AB8 + #$2AB9, // $2AB9 + #$2ABA, // $2ABA + #$2ABB, // $2ABB + #$2ABC, // $2ABC + #$2ABD, // $2ABD + #$2ABE, // $2ABE + #$2ABF, // $2ABF + #$2AC0, // $2AC0 + #$2AC1, // $2AC1 + #$2AC2, // $2AC2 + #$2AC3, // $2AC3 + #$2AC4, // $2AC4 + #$2AC5, // $2AC5 + #$2AC6, // $2AC6 + #$2AC7, // $2AC7 + #$2AC8, // $2AC8 + #$2AC9, // $2AC9 + #$2ACA, // $2ACA + #$2ACB, // $2ACB + #$2ACC, // $2ACC + #$2ACD, // $2ACD + #$2ACE, // $2ACE + #$2ACF, // $2ACF + #$2AD0, // $2AD0 + #$2AD1, // $2AD1 + #$2AD2, // $2AD2 + #$2AD3, // $2AD3 + #$2AD4, // $2AD4 + #$2AD5, // $2AD5 + #$2AD6, // $2AD6 + #$2AD7, // $2AD7 + #$2AD8, // $2AD8 + #$2AD9, // $2AD9 + #$2ADA, // $2ADA + #$2ADB, // $2ADB + #$2ADC, // $2ADC + #$2ADD, // $2ADD + #$2ADE, // $2ADE + #$2ADF, // $2ADF + #$2AE0, // $2AE0 + #$2AE1, // $2AE1 + #$2AE2, // $2AE2 + #$2AE3, // $2AE3 + #$2AE4, // $2AE4 + #$2AE5, // $2AE5 + #$2AE6, // $2AE6 + #$2AE7, // $2AE7 + #$2AE8, // $2AE8 + #$2AE9, // $2AE9 + #$2AEA, // $2AEA + #$2AEB, // $2AEB + #$2AEC, // $2AEC + #$2AED, // $2AED + #$2AEE, // $2AEE + #$2AEF, // $2AEF + #$2AF0, // $2AF0 + #$2AF1, // $2AF1 + #$2AF2, // $2AF2 + #$2AF3, // $2AF3 + #$2AF4, // $2AF4 + #$2AF5, // $2AF5 + #$2AF6, // $2AF6 + #$2AF7, // $2AF7 + #$2AF8, // $2AF8 + #$2AF9, // $2AF9 + #$2AFA, // $2AFA + #$2AFB, // $2AFB + #$2AFC, // $2AFC + #$2AFD, // $2AFD + #$2AFE, // $2AFE + #$2AFF, // $2AFF + #$2B00, // $2B00 + #$2B01, // $2B01 + #$2B02, // $2B02 + #$2B03, // $2B03 + #$2B04, // $2B04 + #$2B05, // $2B05 + #$2B06, // $2B06 + #$2B07, // $2B07 + #$2B08, // $2B08 + #$2B09, // $2B09 + #$2B0A, // $2B0A + #$2B0B, // $2B0B + #$2B0C, // $2B0C + #$2B0D, // $2B0D + #$2B0E, // $2B0E + #$2B0F, // $2B0F + #$2B10, // $2B10 + #$2B11, // $2B11 + #$2B12, // $2B12 + #$2B13, // $2B13 + #$2B14, // $2B14 + #$2B15, // $2B15 + #$2B16, // $2B16 + #$2B17, // $2B17 + #$2B18, // $2B18 + #$2B19, // $2B19 + #$2B1A, // $2B1A + #$2B1B, // $2B1B + #$2B1C, // $2B1C + #$2B1D, // $2B1D + #$2B1E, // $2B1E + #$2B1F, // $2B1F + #$2B20, // $2B20 + #$2B21, // $2B21 + #$2B22, // $2B22 + #$2B23, // $2B23 + #$2B24, // $2B24 + #$2B25, // $2B25 + #$2B26, // $2B26 + #$2B27, // $2B27 + #$2B28, // $2B28 + #$2B29, // $2B29 + #$2B2A, // $2B2A + #$2B2B, // $2B2B + #$2B2C, // $2B2C + #$2B2D, // $2B2D + #$2B2E, // $2B2E + #$2B2F, // $2B2F + #$2B30, // $2B30 + #$2B31, // $2B31 + #$2B32, // $2B32 + #$2B33, // $2B33 + #$2B34, // $2B34 + #$2B35, // $2B35 + #$2B36, // $2B36 + #$2B37, // $2B37 + #$2B38, // $2B38 + #$2B39, // $2B39 + #$2B3A, // $2B3A + #$2B3B, // $2B3B + #$2B3C, // $2B3C + #$2B3D, // $2B3D + #$2B3E, // $2B3E + #$2B3F, // $2B3F + #$2B40, // $2B40 + #$2B41, // $2B41 + #$2B42, // $2B42 + #$2B43, // $2B43 + #$2B44, // $2B44 + #$2B45, // $2B45 + #$2B46, // $2B46 + #$2B47, // $2B47 + #$2B48, // $2B48 + #$2B49, // $2B49 + #$2B4A, // $2B4A + #$2B4B, // $2B4B + #$2B4C, // $2B4C + #$2B4D, // $2B4D + #$2B4E, // $2B4E + #$2B4F, // $2B4F + #$2B50, // $2B50 + #$2B51, // $2B51 + #$2B52, // $2B52 + #$2B53, // $2B53 + #$2B54, // $2B54 + #$2B55, // $2B55 + #$2B56, // $2B56 + #$2B57, // $2B57 + #$2B58, // $2B58 + #$2B59, // $2B59 + #$2B5A, // $2B5A + #$2B5B, // $2B5B + #$2B5C, // $2B5C + #$2B5D, // $2B5D + #$2B5E, // $2B5E + #$2B5F, // $2B5F + #$2B60, // $2B60 + #$2B61, // $2B61 + #$2B62, // $2B62 + #$2B63, // $2B63 + #$2B64, // $2B64 + #$2B65, // $2B65 + #$2B66, // $2B66 + #$2B67, // $2B67 + #$2B68, // $2B68 + #$2B69, // $2B69 + #$2B6A, // $2B6A + #$2B6B, // $2B6B + #$2B6C, // $2B6C + #$2B6D, // $2B6D + #$2B6E, // $2B6E + #$2B6F, // $2B6F + #$2B70, // $2B70 + #$2B71, // $2B71 + #$2B72, // $2B72 + #$2B73, // $2B73 + #$2B74, // $2B74 + #$2B75, // $2B75 + #$2B76, // $2B76 + #$2B77, // $2B77 + #$2B78, // $2B78 + #$2B79, // $2B79 + #$2B7A, // $2B7A + #$2B7B, // $2B7B + #$2B7C, // $2B7C + #$2B7D, // $2B7D + #$2B7E, // $2B7E + #$2B7F, // $2B7F + #$2B80, // $2B80 + #$2B81, // $2B81 + #$2B82, // $2B82 + #$2B83, // $2B83 + #$2B84, // $2B84 + #$2B85, // $2B85 + #$2B86, // $2B86 + #$2B87, // $2B87 + #$2B88, // $2B88 + #$2B89, // $2B89 + #$2B8A, // $2B8A + #$2B8B, // $2B8B + #$2B8C, // $2B8C + #$2B8D, // $2B8D + #$2B8E, // $2B8E + #$2B8F, // $2B8F + #$2B90, // $2B90 + #$2B91, // $2B91 + #$2B92, // $2B92 + #$2B93, // $2B93 + #$2B94, // $2B94 + #$2B95, // $2B95 + #$2B96, // $2B96 + #$2B97, // $2B97 + #$2B98, // $2B98 + #$2B99, // $2B99 + #$2B9A, // $2B9A + #$2B9B, // $2B9B + #$2B9C, // $2B9C + #$2B9D, // $2B9D + #$2B9E, // $2B9E + #$2B9F, // $2B9F + #$2BA0, // $2BA0 + #$2BA1, // $2BA1 + #$2BA2, // $2BA2 + #$2BA3, // $2BA3 + #$2BA4, // $2BA4 + #$2BA5, // $2BA5 + #$2BA6, // $2BA6 + #$2BA7, // $2BA7 + #$2BA8, // $2BA8 + #$2BA9, // $2BA9 + #$2BAA, // $2BAA + #$2BAB, // $2BAB + #$2BAC, // $2BAC + #$2BAD, // $2BAD + #$2BAE, // $2BAE + #$2BAF, // $2BAF + #$2BB0, // $2BB0 + #$2BB1, // $2BB1 + #$2BB2, // $2BB2 + #$2BB3, // $2BB3 + #$2BB4, // $2BB4 + #$2BB5, // $2BB5 + #$2BB6, // $2BB6 + #$2BB7, // $2BB7 + #$2BB8, // $2BB8 + #$2BB9, // $2BB9 + #$2BBA, // $2BBA + #$2BBB, // $2BBB + #$2BBC, // $2BBC + #$2BBD, // $2BBD + #$2BBE, // $2BBE + #$2BBF, // $2BBF + #$2BC0, // $2BC0 + #$2BC1, // $2BC1 + #$2BC2, // $2BC2 + #$2BC3, // $2BC3 + #$2BC4, // $2BC4 + #$2BC5, // $2BC5 + #$2BC6, // $2BC6 + #$2BC7, // $2BC7 + #$2BC8, // $2BC8 + #$2BC9, // $2BC9 + #$2BCA, // $2BCA + #$2BCB, // $2BCB + #$2BCC, // $2BCC + #$2BCD, // $2BCD + #$2BCE, // $2BCE + #$2BCF, // $2BCF + #$2BD0, // $2BD0 + #$2BD1, // $2BD1 + #$2BD2, // $2BD2 + #$2BD3, // $2BD3 + #$2BD4, // $2BD4 + #$2BD5, // $2BD5 + #$2BD6, // $2BD6 + #$2BD7, // $2BD7 + #$2BD8, // $2BD8 + #$2BD9, // $2BD9 + #$2BDA, // $2BDA + #$2BDB, // $2BDB + #$2BDC, // $2BDC + #$2BDD, // $2BDD + #$2BDE, // $2BDE + #$2BDF, // $2BDF + #$2BE0, // $2BE0 + #$2BE1, // $2BE1 + #$2BE2, // $2BE2 + #$2BE3, // $2BE3 + #$2BE4, // $2BE4 + #$2BE5, // $2BE5 + #$2BE6, // $2BE6 + #$2BE7, // $2BE7 + #$2BE8, // $2BE8 + #$2BE9, // $2BE9 + #$2BEA, // $2BEA + #$2BEB, // $2BEB + #$2BEC, // $2BEC + #$2BED, // $2BED + #$2BEE, // $2BEE + #$2BEF, // $2BEF + #$2BF0, // $2BF0 + #$2BF1, // $2BF1 + #$2BF2, // $2BF2 + #$2BF3, // $2BF3 + #$2BF4, // $2BF4 + #$2BF5, // $2BF5 + #$2BF6, // $2BF6 + #$2BF7, // $2BF7 + #$2BF8, // $2BF8 + #$2BF9, // $2BF9 + #$2BFA, // $2BFA + #$2BFB, // $2BFB + #$2BFC, // $2BFC + #$2BFD, // $2BFD + #$2BFE, // $2BFE + #$2BFF, // $2BFF + #$2C30, // $2C00 + #$2C31, // $2C01 + #$2C32, // $2C02 + #$2C33, // $2C03 + #$2C34, // $2C04 + #$2C35, // $2C05 + #$2C36, // $2C06 + #$2C37, // $2C07 + #$2C38, // $2C08 + #$2C39, // $2C09 + #$2C3A, // $2C0A + #$2C3B, // $2C0B + #$2C3C, // $2C0C + #$2C3D, // $2C0D + #$2C3E, // $2C0E + #$2C3F, // $2C0F + #$2C40, // $2C10 + #$2C41, // $2C11 + #$2C42, // $2C12 + #$2C43, // $2C13 + #$2C44, // $2C14 + #$2C45, // $2C15 + #$2C46, // $2C16 + #$2C47, // $2C17 + #$2C48, // $2C18 + #$2C49, // $2C19 + #$2C4A, // $2C1A + #$2C4B, // $2C1B + #$2C4C, // $2C1C + #$2C4D, // $2C1D + #$2C4E, // $2C1E + #$2C4F, // $2C1F + #$2C50, // $2C20 + #$2C51, // $2C21 + #$2C52, // $2C22 + #$2C53, // $2C23 + #$2C54, // $2C24 + #$2C55, // $2C25 + #$2C56, // $2C26 + #$2C57, // $2C27 + #$2C58, // $2C28 + #$2C59, // $2C29 + #$2C5A, // $2C2A + #$2C5B, // $2C2B + #$2C5C, // $2C2C + #$2C5D, // $2C2D + #$2C5E, // $2C2E + #$2C2F, // $2C2F + #$2C30, // $2C30 + #$2C31, // $2C31 + #$2C32, // $2C32 + #$2C33, // $2C33 + #$2C34, // $2C34 + #$2C35, // $2C35 + #$2C36, // $2C36 + #$2C37, // $2C37 + #$2C38, // $2C38 + #$2C39, // $2C39 + #$2C3A, // $2C3A + #$2C3B, // $2C3B + #$2C3C, // $2C3C + #$2C3D, // $2C3D + #$2C3E, // $2C3E + #$2C3F, // $2C3F + #$2C40, // $2C40 + #$2C41, // $2C41 + #$2C42, // $2C42 + #$2C43, // $2C43 + #$2C44, // $2C44 + #$2C45, // $2C45 + #$2C46, // $2C46 + #$2C47, // $2C47 + #$2C48, // $2C48 + #$2C49, // $2C49 + #$2C4A, // $2C4A + #$2C4B, // $2C4B + #$2C4C, // $2C4C + #$2C4D, // $2C4D + #$2C4E, // $2C4E + #$2C4F, // $2C4F + #$2C50, // $2C50 + #$2C51, // $2C51 + #$2C52, // $2C52 + #$2C53, // $2C53 + #$2C54, // $2C54 + #$2C55, // $2C55 + #$2C56, // $2C56 + #$2C57, // $2C57 + #$2C58, // $2C58 + #$2C59, // $2C59 + #$2C5A, // $2C5A + #$2C5B, // $2C5B + #$2C5C, // $2C5C + #$2C5D, // $2C5D + #$2C5E, // $2C5E + #$2C5F, // $2C5F + #$2C61, // $2C60 + #$2C61, // $2C61 + #$026B, // $2C62 + #$1D7D, // $2C63 + #$027D, // $2C64 + #$2C65, // $2C65 + #$2C66, // $2C66 + #$2C68, // $2C67 + #$2C68, // $2C68 + #$2C6A, // $2C69 + #$2C6A, // $2C6A + #$2C6C, // $2C6B + #$2C6C, // $2C6C + #$0251, // $2C6D + #$0271, // $2C6E + #$0250, // $2C6F + #$0252, // $2C70 + #$2C71, // $2C71 + #$2C73, // $2C72 + #$2C73, // $2C73 + #$2C74, // $2C74 + #$2C76, // $2C75 + #$2C76, // $2C76 + #$2C77, // $2C77 + #$2C78, // $2C78 + #$2C79, // $2C79 + #$2C7A, // $2C7A + #$2C7B, // $2C7B + #$2C7C, // $2C7C + #$2C7D, // $2C7D + #$023F, // $2C7E + #$0240, // $2C7F + #$2C81, // $2C80 + #$2C81, // $2C81 + #$2C83, // $2C82 + #$2C83, // $2C83 + #$2C85, // $2C84 + #$2C85, // $2C85 + #$2C87, // $2C86 + #$2C87, // $2C87 + #$2C89, // $2C88 + #$2C89, // $2C89 + #$2C8B, // $2C8A + #$2C8B, // $2C8B + #$2C8D, // $2C8C + #$2C8D, // $2C8D + #$2C8F, // $2C8E + #$2C8F, // $2C8F + #$2C91, // $2C90 + #$2C91, // $2C91 + #$2C93, // $2C92 + #$2C93, // $2C93 + #$2C95, // $2C94 + #$2C95, // $2C95 + #$2C97, // $2C96 + #$2C97, // $2C97 + #$2C99, // $2C98 + #$2C99, // $2C99 + #$2C9B, // $2C9A + #$2C9B, // $2C9B + #$2C9D, // $2C9C + #$2C9D, // $2C9D + #$2C9F, // $2C9E + #$2C9F, // $2C9F + #$2CA1, // $2CA0 + #$2CA1, // $2CA1 + #$2CA3, // $2CA2 + #$2CA3, // $2CA3 + #$2CA5, // $2CA4 + #$2CA5, // $2CA5 + #$2CA7, // $2CA6 + #$2CA7, // $2CA7 + #$2CA9, // $2CA8 + #$2CA9, // $2CA9 + #$2CAB, // $2CAA + #$2CAB, // $2CAB + #$2CAD, // $2CAC + #$2CAD, // $2CAD + #$2CAF, // $2CAE + #$2CAF, // $2CAF + #$2CB1, // $2CB0 + #$2CB1, // $2CB1 + #$2CB3, // $2CB2 + #$2CB3, // $2CB3 + #$2CB5, // $2CB4 + #$2CB5, // $2CB5 + #$2CB7, // $2CB6 + #$2CB7, // $2CB7 + #$2CB9, // $2CB8 + #$2CB9, // $2CB9 + #$2CBB, // $2CBA + #$2CBB, // $2CBB + #$2CBD, // $2CBC + #$2CBD, // $2CBD + #$2CBF, // $2CBE + #$2CBF, // $2CBF + #$2CC1, // $2CC0 + #$2CC1, // $2CC1 + #$2CC3, // $2CC2 + #$2CC3, // $2CC3 + #$2CC5, // $2CC4 + #$2CC5, // $2CC5 + #$2CC7, // $2CC6 + #$2CC7, // $2CC7 + #$2CC9, // $2CC8 + #$2CC9, // $2CC9 + #$2CCB, // $2CCA + #$2CCB, // $2CCB + #$2CCD, // $2CCC + #$2CCD, // $2CCD + #$2CCF, // $2CCE + #$2CCF, // $2CCF + #$2CD1, // $2CD0 + #$2CD1, // $2CD1 + #$2CD3, // $2CD2 + #$2CD3, // $2CD3 + #$2CD5, // $2CD4 + #$2CD5, // $2CD5 + #$2CD7, // $2CD6 + #$2CD7, // $2CD7 + #$2CD9, // $2CD8 + #$2CD9, // $2CD9 + #$2CDB, // $2CDA + #$2CDB, // $2CDB + #$2CDD, // $2CDC + #$2CDD, // $2CDD + #$2CDF, // $2CDE + #$2CDF, // $2CDF + #$2CE1, // $2CE0 + #$2CE1, // $2CE1 + #$2CE3, // $2CE2 + #$2CE3, // $2CE3 + #$2CE4, // $2CE4 + #$2CE5, // $2CE5 + #$2CE6, // $2CE6 + #$2CE7, // $2CE7 + #$2CE8, // $2CE8 + #$2CE9, // $2CE9 + #$2CEA, // $2CEA + #$2CEC, // $2CEB + #$2CEC, // $2CEC + #$2CEE, // $2CED + #$2CEE, // $2CEE + #$2CEF, // $2CEF + #$2CF0, // $2CF0 + #$2CF1, // $2CF1 + #$2CF3, // $2CF2 + #$2CF3, // $2CF3 + #$2CF4, // $2CF4 + #$2CF5, // $2CF5 + #$2CF6, // $2CF6 + #$2CF7, // $2CF7 + #$2CF8, // $2CF8 + #$2CF9, // $2CF9 + #$2CFA, // $2CFA + #$2CFB, // $2CFB + #$2CFC, // $2CFC + #$2CFD, // $2CFD + #$2CFE, // $2CFE + #$2CFF, // $2CFF + #$2D00, // $2D00 + #$2D01, // $2D01 + #$2D02, // $2D02 + #$2D03, // $2D03 + #$2D04, // $2D04 + #$2D05, // $2D05 + #$2D06, // $2D06 + #$2D07, // $2D07 + #$2D08, // $2D08 + #$2D09, // $2D09 + #$2D0A, // $2D0A + #$2D0B, // $2D0B + #$2D0C, // $2D0C + #$2D0D, // $2D0D + #$2D0E, // $2D0E + #$2D0F, // $2D0F + #$2D10, // $2D10 + #$2D11, // $2D11 + #$2D12, // $2D12 + #$2D13, // $2D13 + #$2D14, // $2D14 + #$2D15, // $2D15 + #$2D16, // $2D16 + #$2D17, // $2D17 + #$2D18, // $2D18 + #$2D19, // $2D19 + #$2D1A, // $2D1A + #$2D1B, // $2D1B + #$2D1C, // $2D1C + #$2D1D, // $2D1D + #$2D1E, // $2D1E + #$2D1F, // $2D1F + #$2D20, // $2D20 + #$2D21, // $2D21 + #$2D22, // $2D22 + #$2D23, // $2D23 + #$2D24, // $2D24 + #$2D25, // $2D25 + #$2D26, // $2D26 + #$2D27, // $2D27 + #$2D28, // $2D28 + #$2D29, // $2D29 + #$2D2A, // $2D2A + #$2D2B, // $2D2B + #$2D2C, // $2D2C + #$2D2D, // $2D2D + #$2D2E, // $2D2E + #$2D2F, // $2D2F + #$2D30, // $2D30 + #$2D31, // $2D31 + #$2D32, // $2D32 + #$2D33, // $2D33 + #$2D34, // $2D34 + #$2D35, // $2D35 + #$2D36, // $2D36 + #$2D37, // $2D37 + #$2D38, // $2D38 + #$2D39, // $2D39 + #$2D3A, // $2D3A + #$2D3B, // $2D3B + #$2D3C, // $2D3C + #$2D3D, // $2D3D + #$2D3E, // $2D3E + #$2D3F, // $2D3F + #$2D40, // $2D40 + #$2D41, // $2D41 + #$2D42, // $2D42 + #$2D43, // $2D43 + #$2D44, // $2D44 + #$2D45, // $2D45 + #$2D46, // $2D46 + #$2D47, // $2D47 + #$2D48, // $2D48 + #$2D49, // $2D49 + #$2D4A, // $2D4A + #$2D4B, // $2D4B + #$2D4C, // $2D4C + #$2D4D, // $2D4D + #$2D4E, // $2D4E + #$2D4F, // $2D4F + #$2D50, // $2D50 + #$2D51, // $2D51 + #$2D52, // $2D52 + #$2D53, // $2D53 + #$2D54, // $2D54 + #$2D55, // $2D55 + #$2D56, // $2D56 + #$2D57, // $2D57 + #$2D58, // $2D58 + #$2D59, // $2D59 + #$2D5A, // $2D5A + #$2D5B, // $2D5B + #$2D5C, // $2D5C + #$2D5D, // $2D5D + #$2D5E, // $2D5E + #$2D5F, // $2D5F + #$2D60, // $2D60 + #$2D61, // $2D61 + #$2D62, // $2D62 + #$2D63, // $2D63 + #$2D64, // $2D64 + #$2D65, // $2D65 + #$2D66, // $2D66 + #$2D67, // $2D67 + #$2D68, // $2D68 + #$2D69, // $2D69 + #$2D6A, // $2D6A + #$2D6B, // $2D6B + #$2D6C, // $2D6C + #$2D6D, // $2D6D + #$2D6E, // $2D6E + #$2D6F, // $2D6F + #$2D70, // $2D70 + #$2D71, // $2D71 + #$2D72, // $2D72 + #$2D73, // $2D73 + #$2D74, // $2D74 + #$2D75, // $2D75 + #$2D76, // $2D76 + #$2D77, // $2D77 + #$2D78, // $2D78 + #$2D79, // $2D79 + #$2D7A, // $2D7A + #$2D7B, // $2D7B + #$2D7C, // $2D7C + #$2D7D, // $2D7D + #$2D7E, // $2D7E + #$2D7F, // $2D7F + #$2D80, // $2D80 + #$2D81, // $2D81 + #$2D82, // $2D82 + #$2D83, // $2D83 + #$2D84, // $2D84 + #$2D85, // $2D85 + #$2D86, // $2D86 + #$2D87, // $2D87 + #$2D88, // $2D88 + #$2D89, // $2D89 + #$2D8A, // $2D8A + #$2D8B, // $2D8B + #$2D8C, // $2D8C + #$2D8D, // $2D8D + #$2D8E, // $2D8E + #$2D8F, // $2D8F + #$2D90, // $2D90 + #$2D91, // $2D91 + #$2D92, // $2D92 + #$2D93, // $2D93 + #$2D94, // $2D94 + #$2D95, // $2D95 + #$2D96, // $2D96 + #$2D97, // $2D97 + #$2D98, // $2D98 + #$2D99, // $2D99 + #$2D9A, // $2D9A + #$2D9B, // $2D9B + #$2D9C, // $2D9C + #$2D9D, // $2D9D + #$2D9E, // $2D9E + #$2D9F, // $2D9F + #$2DA0, // $2DA0 + #$2DA1, // $2DA1 + #$2DA2, // $2DA2 + #$2DA3, // $2DA3 + #$2DA4, // $2DA4 + #$2DA5, // $2DA5 + #$2DA6, // $2DA6 + #$2DA7, // $2DA7 + #$2DA8, // $2DA8 + #$2DA9, // $2DA9 + #$2DAA, // $2DAA + #$2DAB, // $2DAB + #$2DAC, // $2DAC + #$2DAD, // $2DAD + #$2DAE, // $2DAE + #$2DAF, // $2DAF + #$2DB0, // $2DB0 + #$2DB1, // $2DB1 + #$2DB2, // $2DB2 + #$2DB3, // $2DB3 + #$2DB4, // $2DB4 + #$2DB5, // $2DB5 + #$2DB6, // $2DB6 + #$2DB7, // $2DB7 + #$2DB8, // $2DB8 + #$2DB9, // $2DB9 + #$2DBA, // $2DBA + #$2DBB, // $2DBB + #$2DBC, // $2DBC + #$2DBD, // $2DBD + #$2DBE, // $2DBE + #$2DBF, // $2DBF + #$2DC0, // $2DC0 + #$2DC1, // $2DC1 + #$2DC2, // $2DC2 + #$2DC3, // $2DC3 + #$2DC4, // $2DC4 + #$2DC5, // $2DC5 + #$2DC6, // $2DC6 + #$2DC7, // $2DC7 + #$2DC8, // $2DC8 + #$2DC9, // $2DC9 + #$2DCA, // $2DCA + #$2DCB, // $2DCB + #$2DCC, // $2DCC + #$2DCD, // $2DCD + #$2DCE, // $2DCE + #$2DCF, // $2DCF + #$2DD0, // $2DD0 + #$2DD1, // $2DD1 + #$2DD2, // $2DD2 + #$2DD3, // $2DD3 + #$2DD4, // $2DD4 + #$2DD5, // $2DD5 + #$2DD6, // $2DD6 + #$2DD7, // $2DD7 + #$2DD8, // $2DD8 + #$2DD9, // $2DD9 + #$2DDA, // $2DDA + #$2DDB, // $2DDB + #$2DDC, // $2DDC + #$2DDD, // $2DDD + #$2DDE, // $2DDE + #$2DDF, // $2DDF + #$2DE0, // $2DE0 + #$2DE1, // $2DE1 + #$2DE2, // $2DE2 + #$2DE3, // $2DE3 + #$2DE4, // $2DE4 + #$2DE5, // $2DE5 + #$2DE6, // $2DE6 + #$2DE7, // $2DE7 + #$2DE8, // $2DE8 + #$2DE9, // $2DE9 + #$2DEA, // $2DEA + #$2DEB, // $2DEB + #$2DEC, // $2DEC + #$2DED, // $2DED + #$2DEE, // $2DEE + #$2DEF, // $2DEF + #$2DF0, // $2DF0 + #$2DF1, // $2DF1 + #$2DF2, // $2DF2 + #$2DF3, // $2DF3 + #$2DF4, // $2DF4 + #$2DF5, // $2DF5 + #$2DF6, // $2DF6 + #$2DF7, // $2DF7 + #$2DF8, // $2DF8 + #$2DF9, // $2DF9 + #$2DFA, // $2DFA + #$2DFB, // $2DFB + #$2DFC, // $2DFC + #$2DFD, // $2DFD + #$2DFE, // $2DFE + #$2DFF, // $2DFF + #$2E00, // $2E00 + #$2E01, // $2E01 + #$2E02, // $2E02 + #$2E03, // $2E03 + #$2E04, // $2E04 + #$2E05, // $2E05 + #$2E06, // $2E06 + #$2E07, // $2E07 + #$2E08, // $2E08 + #$2E09, // $2E09 + #$2E0A, // $2E0A + #$2E0B, // $2E0B + #$2E0C, // $2E0C + #$2E0D, // $2E0D + #$2E0E, // $2E0E + #$2E0F, // $2E0F + #$2E10, // $2E10 + #$2E11, // $2E11 + #$2E12, // $2E12 + #$2E13, // $2E13 + #$2E14, // $2E14 + #$2E15, // $2E15 + #$2E16, // $2E16 + #$2E17, // $2E17 + #$2E18, // $2E18 + #$2E19, // $2E19 + #$2E1A, // $2E1A + #$2E1B, // $2E1B + #$2E1C, // $2E1C + #$2E1D, // $2E1D + #$2E1E, // $2E1E + #$2E1F, // $2E1F + #$2E20, // $2E20 + #$2E21, // $2E21 + #$2E22, // $2E22 + #$2E23, // $2E23 + #$2E24, // $2E24 + #$2E25, // $2E25 + #$2E26, // $2E26 + #$2E27, // $2E27 + #$2E28, // $2E28 + #$2E29, // $2E29 + #$2E2A, // $2E2A + #$2E2B, // $2E2B + #$2E2C, // $2E2C + #$2E2D, // $2E2D + #$2E2E, // $2E2E + #$2E2F, // $2E2F + #$2E30, // $2E30 + #$2E31, // $2E31 + #$2E32, // $2E32 + #$2E33, // $2E33 + #$2E34, // $2E34 + #$2E35, // $2E35 + #$2E36, // $2E36 + #$2E37, // $2E37 + #$2E38, // $2E38 + #$2E39, // $2E39 + #$2E3A, // $2E3A + #$2E3B, // $2E3B + #$2E3C, // $2E3C + #$2E3D, // $2E3D + #$2E3E, // $2E3E + #$2E3F, // $2E3F + #$2E40, // $2E40 + #$2E41, // $2E41 + #$2E42, // $2E42 + #$2E43, // $2E43 + #$2E44, // $2E44 + #$2E45, // $2E45 + #$2E46, // $2E46 + #$2E47, // $2E47 + #$2E48, // $2E48 + #$2E49, // $2E49 + #$2E4A, // $2E4A + #$2E4B, // $2E4B + #$2E4C, // $2E4C + #$2E4D, // $2E4D + #$2E4E, // $2E4E + #$2E4F, // $2E4F + #$2E50, // $2E50 + #$2E51, // $2E51 + #$2E52, // $2E52 + #$2E53, // $2E53 + #$2E54, // $2E54 + #$2E55, // $2E55 + #$2E56, // $2E56 + #$2E57, // $2E57 + #$2E58, // $2E58 + #$2E59, // $2E59 + #$2E5A, // $2E5A + #$2E5B, // $2E5B + #$2E5C, // $2E5C + #$2E5D, // $2E5D + #$2E5E, // $2E5E + #$2E5F, // $2E5F + #$2E60, // $2E60 + #$2E61, // $2E61 + #$2E62, // $2E62 + #$2E63, // $2E63 + #$2E64, // $2E64 + #$2E65, // $2E65 + #$2E66, // $2E66 + #$2E67, // $2E67 + #$2E68, // $2E68 + #$2E69, // $2E69 + #$2E6A, // $2E6A + #$2E6B, // $2E6B + #$2E6C, // $2E6C + #$2E6D, // $2E6D + #$2E6E, // $2E6E + #$2E6F, // $2E6F + #$2E70, // $2E70 + #$2E71, // $2E71 + #$2E72, // $2E72 + #$2E73, // $2E73 + #$2E74, // $2E74 + #$2E75, // $2E75 + #$2E76, // $2E76 + #$2E77, // $2E77 + #$2E78, // $2E78 + #$2E79, // $2E79 + #$2E7A, // $2E7A + #$2E7B, // $2E7B + #$2E7C, // $2E7C + #$2E7D, // $2E7D + #$2E7E, // $2E7E + #$2E7F, // $2E7F + #$2E80, // $2E80 + #$2E81, // $2E81 + #$2E82, // $2E82 + #$2E83, // $2E83 + #$2E84, // $2E84 + #$2E85, // $2E85 + #$2E86, // $2E86 + #$2E87, // $2E87 + #$2E88, // $2E88 + #$2E89, // $2E89 + #$2E8A, // $2E8A + #$2E8B, // $2E8B + #$2E8C, // $2E8C + #$2E8D, // $2E8D + #$2E8E, // $2E8E + #$2E8F, // $2E8F + #$2E90, // $2E90 + #$2E91, // $2E91 + #$2E92, // $2E92 + #$2E93, // $2E93 + #$2E94, // $2E94 + #$2E95, // $2E95 + #$2E96, // $2E96 + #$2E97, // $2E97 + #$2E98, // $2E98 + #$2E99, // $2E99 + #$2E9A, // $2E9A + #$2E9B, // $2E9B + #$2E9C, // $2E9C + #$2E9D, // $2E9D + #$2E9E, // $2E9E + #$2E9F, // $2E9F + #$2EA0, // $2EA0 + #$2EA1, // $2EA1 + #$2EA2, // $2EA2 + #$2EA3, // $2EA3 + #$2EA4, // $2EA4 + #$2EA5, // $2EA5 + #$2EA6, // $2EA6 + #$2EA7, // $2EA7 + #$2EA8, // $2EA8 + #$2EA9, // $2EA9 + #$2EAA, // $2EAA + #$2EAB, // $2EAB + #$2EAC, // $2EAC + #$2EAD, // $2EAD + #$2EAE, // $2EAE + #$2EAF, // $2EAF + #$2EB0, // $2EB0 + #$2EB1, // $2EB1 + #$2EB2, // $2EB2 + #$2EB3, // $2EB3 + #$2EB4, // $2EB4 + #$2EB5, // $2EB5 + #$2EB6, // $2EB6 + #$2EB7, // $2EB7 + #$2EB8, // $2EB8 + #$2EB9, // $2EB9 + #$2EBA, // $2EBA + #$2EBB, // $2EBB + #$2EBC, // $2EBC + #$2EBD, // $2EBD + #$2EBE, // $2EBE + #$2EBF, // $2EBF + #$2EC0, // $2EC0 + #$2EC1, // $2EC1 + #$2EC2, // $2EC2 + #$2EC3, // $2EC3 + #$2EC4, // $2EC4 + #$2EC5, // $2EC5 + #$2EC6, // $2EC6 + #$2EC7, // $2EC7 + #$2EC8, // $2EC8 + #$2EC9, // $2EC9 + #$2ECA, // $2ECA + #$2ECB, // $2ECB + #$2ECC, // $2ECC + #$2ECD, // $2ECD + #$2ECE, // $2ECE + #$2ECF, // $2ECF + #$2ED0, // $2ED0 + #$2ED1, // $2ED1 + #$2ED2, // $2ED2 + #$2ED3, // $2ED3 + #$2ED4, // $2ED4 + #$2ED5, // $2ED5 + #$2ED6, // $2ED6 + #$2ED7, // $2ED7 + #$2ED8, // $2ED8 + #$2ED9, // $2ED9 + #$2EDA, // $2EDA + #$2EDB, // $2EDB + #$2EDC, // $2EDC + #$2EDD, // $2EDD + #$2EDE, // $2EDE + #$2EDF, // $2EDF + #$2EE0, // $2EE0 + #$2EE1, // $2EE1 + #$2EE2, // $2EE2 + #$2EE3, // $2EE3 + #$2EE4, // $2EE4 + #$2EE5, // $2EE5 + #$2EE6, // $2EE6 + #$2EE7, // $2EE7 + #$2EE8, // $2EE8 + #$2EE9, // $2EE9 + #$2EEA, // $2EEA + #$2EEB, // $2EEB + #$2EEC, // $2EEC + #$2EED, // $2EED + #$2EEE, // $2EEE + #$2EEF, // $2EEF + #$2EF0, // $2EF0 + #$2EF1, // $2EF1 + #$2EF2, // $2EF2 + #$2EF3, // $2EF3 + #$2EF4, // $2EF4 + #$2EF5, // $2EF5 + #$2EF6, // $2EF6 + #$2EF7, // $2EF7 + #$2EF8, // $2EF8 + #$2EF9, // $2EF9 + #$2EFA, // $2EFA + #$2EFB, // $2EFB + #$2EFC, // $2EFC + #$2EFD, // $2EFD + #$2EFE, // $2EFE + #$2EFF, // $2EFF + #$2F00, // $2F00 + #$2F01, // $2F01 + #$2F02, // $2F02 + #$2F03, // $2F03 + #$2F04, // $2F04 + #$2F05, // $2F05 + #$2F06, // $2F06 + #$2F07, // $2F07 + #$2F08, // $2F08 + #$2F09, // $2F09 + #$2F0A, // $2F0A + #$2F0B, // $2F0B + #$2F0C, // $2F0C + #$2F0D, // $2F0D + #$2F0E, // $2F0E + #$2F0F, // $2F0F + #$2F10, // $2F10 + #$2F11, // $2F11 + #$2F12, // $2F12 + #$2F13, // $2F13 + #$2F14, // $2F14 + #$2F15, // $2F15 + #$2F16, // $2F16 + #$2F17, // $2F17 + #$2F18, // $2F18 + #$2F19, // $2F19 + #$2F1A, // $2F1A + #$2F1B, // $2F1B + #$2F1C, // $2F1C + #$2F1D, // $2F1D + #$2F1E, // $2F1E + #$2F1F, // $2F1F + #$2F20, // $2F20 + #$2F21, // $2F21 + #$2F22, // $2F22 + #$2F23, // $2F23 + #$2F24, // $2F24 + #$2F25, // $2F25 + #$2F26, // $2F26 + #$2F27, // $2F27 + #$2F28, // $2F28 + #$2F29, // $2F29 + #$2F2A, // $2F2A + #$2F2B, // $2F2B + #$2F2C, // $2F2C + #$2F2D, // $2F2D + #$2F2E, // $2F2E + #$2F2F, // $2F2F + #$2F30, // $2F30 + #$2F31, // $2F31 + #$2F32, // $2F32 + #$2F33, // $2F33 + #$2F34, // $2F34 + #$2F35, // $2F35 + #$2F36, // $2F36 + #$2F37, // $2F37 + #$2F38, // $2F38 + #$2F39, // $2F39 + #$2F3A, // $2F3A + #$2F3B, // $2F3B + #$2F3C, // $2F3C + #$2F3D, // $2F3D + #$2F3E, // $2F3E + #$2F3F, // $2F3F + #$2F40, // $2F40 + #$2F41, // $2F41 + #$2F42, // $2F42 + #$2F43, // $2F43 + #$2F44, // $2F44 + #$2F45, // $2F45 + #$2F46, // $2F46 + #$2F47, // $2F47 + #$2F48, // $2F48 + #$2F49, // $2F49 + #$2F4A, // $2F4A + #$2F4B, // $2F4B + #$2F4C, // $2F4C + #$2F4D, // $2F4D + #$2F4E, // $2F4E + #$2F4F, // $2F4F + #$2F50, // $2F50 + #$2F51, // $2F51 + #$2F52, // $2F52 + #$2F53, // $2F53 + #$2F54, // $2F54 + #$2F55, // $2F55 + #$2F56, // $2F56 + #$2F57, // $2F57 + #$2F58, // $2F58 + #$2F59, // $2F59 + #$2F5A, // $2F5A + #$2F5B, // $2F5B + #$2F5C, // $2F5C + #$2F5D, // $2F5D + #$2F5E, // $2F5E + #$2F5F, // $2F5F + #$2F60, // $2F60 + #$2F61, // $2F61 + #$2F62, // $2F62 + #$2F63, // $2F63 + #$2F64, // $2F64 + #$2F65, // $2F65 + #$2F66, // $2F66 + #$2F67, // $2F67 + #$2F68, // $2F68 + #$2F69, // $2F69 + #$2F6A, // $2F6A + #$2F6B, // $2F6B + #$2F6C, // $2F6C + #$2F6D, // $2F6D + #$2F6E, // $2F6E + #$2F6F, // $2F6F + #$2F70, // $2F70 + #$2F71, // $2F71 + #$2F72, // $2F72 + #$2F73, // $2F73 + #$2F74, // $2F74 + #$2F75, // $2F75 + #$2F76, // $2F76 + #$2F77, // $2F77 + #$2F78, // $2F78 + #$2F79, // $2F79 + #$2F7A, // $2F7A + #$2F7B, // $2F7B + #$2F7C, // $2F7C + #$2F7D, // $2F7D + #$2F7E, // $2F7E + #$2F7F, // $2F7F + #$2F80, // $2F80 + #$2F81, // $2F81 + #$2F82, // $2F82 + #$2F83, // $2F83 + #$2F84, // $2F84 + #$2F85, // $2F85 + #$2F86, // $2F86 + #$2F87, // $2F87 + #$2F88, // $2F88 + #$2F89, // $2F89 + #$2F8A, // $2F8A + #$2F8B, // $2F8B + #$2F8C, // $2F8C + #$2F8D, // $2F8D + #$2F8E, // $2F8E + #$2F8F, // $2F8F + #$2F90, // $2F90 + #$2F91, // $2F91 + #$2F92, // $2F92 + #$2F93, // $2F93 + #$2F94, // $2F94 + #$2F95, // $2F95 + #$2F96, // $2F96 + #$2F97, // $2F97 + #$2F98, // $2F98 + #$2F99, // $2F99 + #$2F9A, // $2F9A + #$2F9B, // $2F9B + #$2F9C, // $2F9C + #$2F9D, // $2F9D + #$2F9E, // $2F9E + #$2F9F, // $2F9F + #$2FA0, // $2FA0 + #$2FA1, // $2FA1 + #$2FA2, // $2FA2 + #$2FA3, // $2FA3 + #$2FA4, // $2FA4 + #$2FA5, // $2FA5 + #$2FA6, // $2FA6 + #$2FA7, // $2FA7 + #$2FA8, // $2FA8 + #$2FA9, // $2FA9 + #$2FAA, // $2FAA + #$2FAB, // $2FAB + #$2FAC, // $2FAC + #$2FAD, // $2FAD + #$2FAE, // $2FAE + #$2FAF, // $2FAF + #$2FB0, // $2FB0 + #$2FB1, // $2FB1 + #$2FB2, // $2FB2 + #$2FB3, // $2FB3 + #$2FB4, // $2FB4 + #$2FB5, // $2FB5 + #$2FB6, // $2FB6 + #$2FB7, // $2FB7 + #$2FB8, // $2FB8 + #$2FB9, // $2FB9 + #$2FBA, // $2FBA + #$2FBB, // $2FBB + #$2FBC, // $2FBC + #$2FBD, // $2FBD + #$2FBE, // $2FBE + #$2FBF, // $2FBF + #$2FC0, // $2FC0 + #$2FC1, // $2FC1 + #$2FC2, // $2FC2 + #$2FC3, // $2FC3 + #$2FC4, // $2FC4 + #$2FC5, // $2FC5 + #$2FC6, // $2FC6 + #$2FC7, // $2FC7 + #$2FC8, // $2FC8 + #$2FC9, // $2FC9 + #$2FCA, // $2FCA + #$2FCB, // $2FCB + #$2FCC, // $2FCC + #$2FCD, // $2FCD + #$2FCE, // $2FCE + #$2FCF, // $2FCF + #$2FD0, // $2FD0 + #$2FD1, // $2FD1 + #$2FD2, // $2FD2 + #$2FD3, // $2FD3 + #$2FD4, // $2FD4 + #$2FD5, // $2FD5 + #$2FD6, // $2FD6 + #$2FD7, // $2FD7 + #$2FD8, // $2FD8 + #$2FD9, // $2FD9 + #$2FDA, // $2FDA + #$2FDB, // $2FDB + #$2FDC, // $2FDC + #$2FDD, // $2FDD + #$2FDE, // $2FDE + #$2FDF, // $2FDF + #$2FE0, // $2FE0 + #$2FE1, // $2FE1 + #$2FE2, // $2FE2 + #$2FE3, // $2FE3 + #$2FE4, // $2FE4 + #$2FE5, // $2FE5 + #$2FE6, // $2FE6 + #$2FE7, // $2FE7 + #$2FE8, // $2FE8 + #$2FE9, // $2FE9 + #$2FEA, // $2FEA + #$2FEB, // $2FEB + #$2FEC, // $2FEC + #$2FED, // $2FED + #$2FEE, // $2FEE + #$2FEF, // $2FEF + #$2FF0, // $2FF0 + #$2FF1, // $2FF1 + #$2FF2, // $2FF2 + #$2FF3, // $2FF3 + #$2FF4, // $2FF4 + #$2FF5, // $2FF5 + #$2FF6, // $2FF6 + #$2FF7, // $2FF7 + #$2FF8, // $2FF8 + #$2FF9, // $2FF9 + #$2FFA, // $2FFA + #$2FFB, // $2FFB + #$2FFC, // $2FFC + #$2FFD, // $2FFD + #$2FFE, // $2FFE + #$2FFF, // $2FFF + #$3000, // $3000 + #$3001, // $3001 + #$3002, // $3002 + #$3003, // $3003 + #$3004, // $3004 + #$3005, // $3005 + #$3006, // $3006 + #$3007, // $3007 + #$3008, // $3008 + #$3009, // $3009 + #$300A, // $300A + #$300B, // $300B + #$300C, // $300C + #$300D, // $300D + #$300E, // $300E + #$300F, // $300F + #$3010, // $3010 + #$3011, // $3011 + #$3012, // $3012 + #$3013, // $3013 + #$3014, // $3014 + #$3015, // $3015 + #$3016, // $3016 + #$3017, // $3017 + #$3018, // $3018 + #$3019, // $3019 + #$301A, // $301A + #$301B, // $301B + #$301C, // $301C + #$301D, // $301D + #$301E, // $301E + #$301F, // $301F + #$3020, // $3020 + #$3021, // $3021 + #$3022, // $3022 + #$3023, // $3023 + #$3024, // $3024 + #$3025, // $3025 + #$3026, // $3026 + #$3027, // $3027 + #$3028, // $3028 + #$3029, // $3029 + #$302A, // $302A + #$302B, // $302B + #$302C, // $302C + #$302D, // $302D + #$302E, // $302E + #$302F, // $302F + #$3030, // $3030 + #$3031, // $3031 + #$3032, // $3032 + #$3033, // $3033 + #$3034, // $3034 + #$3035, // $3035 + #$3036, // $3036 + #$3037, // $3037 + #$3038, // $3038 + #$3039, // $3039 + #$303A, // $303A + #$303B, // $303B + #$303C, // $303C + #$303D, // $303D + #$303E, // $303E + #$303F, // $303F + #$3040, // $3040 + #$3041, // $3041 + #$3042, // $3042 + #$3043, // $3043 + #$3044, // $3044 + #$3045, // $3045 + #$3046, // $3046 + #$3047, // $3047 + #$3048, // $3048 + #$3049, // $3049 + #$304A, // $304A + #$304B, // $304B + #$304C, // $304C + #$304D, // $304D + #$304E, // $304E + #$304F, // $304F + #$3050, // $3050 + #$3051, // $3051 + #$3052, // $3052 + #$3053, // $3053 + #$3054, // $3054 + #$3055, // $3055 + #$3056, // $3056 + #$3057, // $3057 + #$3058, // $3058 + #$3059, // $3059 + #$305A, // $305A + #$305B, // $305B + #$305C, // $305C + #$305D, // $305D + #$305E, // $305E + #$305F, // $305F + #$3060, // $3060 + #$3061, // $3061 + #$3062, // $3062 + #$3063, // $3063 + #$3064, // $3064 + #$3065, // $3065 + #$3066, // $3066 + #$3067, // $3067 + #$3068, // $3068 + #$3069, // $3069 + #$306A, // $306A + #$306B, // $306B + #$306C, // $306C + #$306D, // $306D + #$306E, // $306E + #$306F, // $306F + #$3070, // $3070 + #$3071, // $3071 + #$3072, // $3072 + #$3073, // $3073 + #$3074, // $3074 + #$3075, // $3075 + #$3076, // $3076 + #$3077, // $3077 + #$3078, // $3078 + #$3079, // $3079 + #$307A, // $307A + #$307B, // $307B + #$307C, // $307C + #$307D, // $307D + #$307E, // $307E + #$307F, // $307F + #$3080, // $3080 + #$3081, // $3081 + #$3082, // $3082 + #$3083, // $3083 + #$3084, // $3084 + #$3085, // $3085 + #$3086, // $3086 + #$3087, // $3087 + #$3088, // $3088 + #$3089, // $3089 + #$308A, // $308A + #$308B, // $308B + #$308C, // $308C + #$308D, // $308D + #$308E, // $308E + #$308F, // $308F + #$3090, // $3090 + #$3091, // $3091 + #$3092, // $3092 + #$3093, // $3093 + #$3094, // $3094 + #$3095, // $3095 + #$3096, // $3096 + #$3097, // $3097 + #$3098, // $3098 + #$3099, // $3099 + #$309A, // $309A + #$309B, // $309B + #$309C, // $309C + #$309D, // $309D + #$309E, // $309E + #$309F, // $309F + #$30A0, // $30A0 + #$30A1, // $30A1 + #$30A2, // $30A2 + #$30A3, // $30A3 + #$30A4, // $30A4 + #$30A5, // $30A5 + #$30A6, // $30A6 + #$30A7, // $30A7 + #$30A8, // $30A8 + #$30A9, // $30A9 + #$30AA, // $30AA + #$30AB, // $30AB + #$30AC, // $30AC + #$30AD, // $30AD + #$30AE, // $30AE + #$30AF, // $30AF + #$30B0, // $30B0 + #$30B1, // $30B1 + #$30B2, // $30B2 + #$30B3, // $30B3 + #$30B4, // $30B4 + #$30B5, // $30B5 + #$30B6, // $30B6 + #$30B7, // $30B7 + #$30B8, // $30B8 + #$30B9, // $30B9 + #$30BA, // $30BA + #$30BB, // $30BB + #$30BC, // $30BC + #$30BD, // $30BD + #$30BE, // $30BE + #$30BF, // $30BF + #$30C0, // $30C0 + #$30C1, // $30C1 + #$30C2, // $30C2 + #$30C3, // $30C3 + #$30C4, // $30C4 + #$30C5, // $30C5 + #$30C6, // $30C6 + #$30C7, // $30C7 + #$30C8, // $30C8 + #$30C9, // $30C9 + #$30CA, // $30CA + #$30CB, // $30CB + #$30CC, // $30CC + #$30CD, // $30CD + #$30CE, // $30CE + #$30CF, // $30CF + #$30D0, // $30D0 + #$30D1, // $30D1 + #$30D2, // $30D2 + #$30D3, // $30D3 + #$30D4, // $30D4 + #$30D5, // $30D5 + #$30D6, // $30D6 + #$30D7, // $30D7 + #$30D8, // $30D8 + #$30D9, // $30D9 + #$30DA, // $30DA + #$30DB, // $30DB + #$30DC, // $30DC + #$30DD, // $30DD + #$30DE, // $30DE + #$30DF, // $30DF + #$30E0, // $30E0 + #$30E1, // $30E1 + #$30E2, // $30E2 + #$30E3, // $30E3 + #$30E4, // $30E4 + #$30E5, // $30E5 + #$30E6, // $30E6 + #$30E7, // $30E7 + #$30E8, // $30E8 + #$30E9, // $30E9 + #$30EA, // $30EA + #$30EB, // $30EB + #$30EC, // $30EC + #$30ED, // $30ED + #$30EE, // $30EE + #$30EF, // $30EF + #$30F0, // $30F0 + #$30F1, // $30F1 + #$30F2, // $30F2 + #$30F3, // $30F3 + #$30F4, // $30F4 + #$30F5, // $30F5 + #$30F6, // $30F6 + #$30F7, // $30F7 + #$30F8, // $30F8 + #$30F9, // $30F9 + #$30FA, // $30FA + #$30FB, // $30FB + #$30FC, // $30FC + #$30FD, // $30FD + #$30FE, // $30FE + #$30FF, // $30FF + #$3100, // $3100 + #$3101, // $3101 + #$3102, // $3102 + #$3103, // $3103 + #$3104, // $3104 + #$3105, // $3105 + #$3106, // $3106 + #$3107, // $3107 + #$3108, // $3108 + #$3109, // $3109 + #$310A, // $310A + #$310B, // $310B + #$310C, // $310C + #$310D, // $310D + #$310E, // $310E + #$310F, // $310F + #$3110, // $3110 + #$3111, // $3111 + #$3112, // $3112 + #$3113, // $3113 + #$3114, // $3114 + #$3115, // $3115 + #$3116, // $3116 + #$3117, // $3117 + #$3118, // $3118 + #$3119, // $3119 + #$311A, // $311A + #$311B, // $311B + #$311C, // $311C + #$311D, // $311D + #$311E, // $311E + #$311F, // $311F + #$3120, // $3120 + #$3121, // $3121 + #$3122, // $3122 + #$3123, // $3123 + #$3124, // $3124 + #$3125, // $3125 + #$3126, // $3126 + #$3127, // $3127 + #$3128, // $3128 + #$3129, // $3129 + #$312A, // $312A + #$312B, // $312B + #$312C, // $312C + #$312D, // $312D + #$312E, // $312E + #$312F, // $312F + #$3130, // $3130 + #$3131, // $3131 + #$3132, // $3132 + #$3133, // $3133 + #$3134, // $3134 + #$3135, // $3135 + #$3136, // $3136 + #$3137, // $3137 + #$3138, // $3138 + #$3139, // $3139 + #$313A, // $313A + #$313B, // $313B + #$313C, // $313C + #$313D, // $313D + #$313E, // $313E + #$313F, // $313F + #$3140, // $3140 + #$3141, // $3141 + #$3142, // $3142 + #$3143, // $3143 + #$3144, // $3144 + #$3145, // $3145 + #$3146, // $3146 + #$3147, // $3147 + #$3148, // $3148 + #$3149, // $3149 + #$314A, // $314A + #$314B, // $314B + #$314C, // $314C + #$314D, // $314D + #$314E, // $314E + #$314F, // $314F + #$3150, // $3150 + #$3151, // $3151 + #$3152, // $3152 + #$3153, // $3153 + #$3154, // $3154 + #$3155, // $3155 + #$3156, // $3156 + #$3157, // $3157 + #$3158, // $3158 + #$3159, // $3159 + #$315A, // $315A + #$315B, // $315B + #$315C, // $315C + #$315D, // $315D + #$315E, // $315E + #$315F, // $315F + #$3160, // $3160 + #$3161, // $3161 + #$3162, // $3162 + #$3163, // $3163 + #$3164, // $3164 + #$3165, // $3165 + #$3166, // $3166 + #$3167, // $3167 + #$3168, // $3168 + #$3169, // $3169 + #$316A, // $316A + #$316B, // $316B + #$316C, // $316C + #$316D, // $316D + #$316E, // $316E + #$316F, // $316F + #$3170, // $3170 + #$3171, // $3171 + #$3172, // $3172 + #$3173, // $3173 + #$3174, // $3174 + #$3175, // $3175 + #$3176, // $3176 + #$3177, // $3177 + #$3178, // $3178 + #$3179, // $3179 + #$317A, // $317A + #$317B, // $317B + #$317C, // $317C + #$317D, // $317D + #$317E, // $317E + #$317F, // $317F + #$3180, // $3180 + #$3181, // $3181 + #$3182, // $3182 + #$3183, // $3183 + #$3184, // $3184 + #$3185, // $3185 + #$3186, // $3186 + #$3187, // $3187 + #$3188, // $3188 + #$3189, // $3189 + #$318A, // $318A + #$318B, // $318B + #$318C, // $318C + #$318D, // $318D + #$318E, // $318E + #$318F, // $318F + #$3190, // $3190 + #$3191, // $3191 + #$3192, // $3192 + #$3193, // $3193 + #$3194, // $3194 + #$3195, // $3195 + #$3196, // $3196 + #$3197, // $3197 + #$3198, // $3198 + #$3199, // $3199 + #$319A, // $319A + #$319B, // $319B + #$319C, // $319C + #$319D, // $319D + #$319E, // $319E + #$319F, // $319F + #$31A0, // $31A0 + #$31A1, // $31A1 + #$31A2, // $31A2 + #$31A3, // $31A3 + #$31A4, // $31A4 + #$31A5, // $31A5 + #$31A6, // $31A6 + #$31A7, // $31A7 + #$31A8, // $31A8 + #$31A9, // $31A9 + #$31AA, // $31AA + #$31AB, // $31AB + #$31AC, // $31AC + #$31AD, // $31AD + #$31AE, // $31AE + #$31AF, // $31AF + #$31B0, // $31B0 + #$31B1, // $31B1 + #$31B2, // $31B2 + #$31B3, // $31B3 + #$31B4, // $31B4 + #$31B5, // $31B5 + #$31B6, // $31B6 + #$31B7, // $31B7 + #$31B8, // $31B8 + #$31B9, // $31B9 + #$31BA, // $31BA + #$31BB, // $31BB + #$31BC, // $31BC + #$31BD, // $31BD + #$31BE, // $31BE + #$31BF, // $31BF + #$31C0, // $31C0 + #$31C1, // $31C1 + #$31C2, // $31C2 + #$31C3, // $31C3 + #$31C4, // $31C4 + #$31C5, // $31C5 + #$31C6, // $31C6 + #$31C7, // $31C7 + #$31C8, // $31C8 + #$31C9, // $31C9 + #$31CA, // $31CA + #$31CB, // $31CB + #$31CC, // $31CC + #$31CD, // $31CD + #$31CE, // $31CE + #$31CF, // $31CF + #$31D0, // $31D0 + #$31D1, // $31D1 + #$31D2, // $31D2 + #$31D3, // $31D3 + #$31D4, // $31D4 + #$31D5, // $31D5 + #$31D6, // $31D6 + #$31D7, // $31D7 + #$31D8, // $31D8 + #$31D9, // $31D9 + #$31DA, // $31DA + #$31DB, // $31DB + #$31DC, // $31DC + #$31DD, // $31DD + #$31DE, // $31DE + #$31DF, // $31DF + #$31E0, // $31E0 + #$31E1, // $31E1 + #$31E2, // $31E2 + #$31E3, // $31E3 + #$31E4, // $31E4 + #$31E5, // $31E5 + #$31E6, // $31E6 + #$31E7, // $31E7 + #$31E8, // $31E8 + #$31E9, // $31E9 + #$31EA, // $31EA + #$31EB, // $31EB + #$31EC, // $31EC + #$31ED, // $31ED + #$31EE, // $31EE + #$31EF, // $31EF + #$31F0, // $31F0 + #$31F1, // $31F1 + #$31F2, // $31F2 + #$31F3, // $31F3 + #$31F4, // $31F4 + #$31F5, // $31F5 + #$31F6, // $31F6 + #$31F7, // $31F7 + #$31F8, // $31F8 + #$31F9, // $31F9 + #$31FA, // $31FA + #$31FB, // $31FB + #$31FC, // $31FC + #$31FD, // $31FD + #$31FE, // $31FE + #$31FF, // $31FF + #$3200, // $3200 + #$3201, // $3201 + #$3202, // $3202 + #$3203, // $3203 + #$3204, // $3204 + #$3205, // $3205 + #$3206, // $3206 + #$3207, // $3207 + #$3208, // $3208 + #$3209, // $3209 + #$320A, // $320A + #$320B, // $320B + #$320C, // $320C + #$320D, // $320D + #$320E, // $320E + #$320F, // $320F + #$3210, // $3210 + #$3211, // $3211 + #$3212, // $3212 + #$3213, // $3213 + #$3214, // $3214 + #$3215, // $3215 + #$3216, // $3216 + #$3217, // $3217 + #$3218, // $3218 + #$3219, // $3219 + #$321A, // $321A + #$321B, // $321B + #$321C, // $321C + #$321D, // $321D + #$321E, // $321E + #$321F, // $321F + #$3220, // $3220 + #$3221, // $3221 + #$3222, // $3222 + #$3223, // $3223 + #$3224, // $3224 + #$3225, // $3225 + #$3226, // $3226 + #$3227, // $3227 + #$3228, // $3228 + #$3229, // $3229 + #$322A, // $322A + #$322B, // $322B + #$322C, // $322C + #$322D, // $322D + #$322E, // $322E + #$322F, // $322F + #$3230, // $3230 + #$3231, // $3231 + #$3232, // $3232 + #$3233, // $3233 + #$3234, // $3234 + #$3235, // $3235 + #$3236, // $3236 + #$3237, // $3237 + #$3238, // $3238 + #$3239, // $3239 + #$323A, // $323A + #$323B, // $323B + #$323C, // $323C + #$323D, // $323D + #$323E, // $323E + #$323F, // $323F + #$3240, // $3240 + #$3241, // $3241 + #$3242, // $3242 + #$3243, // $3243 + #$3244, // $3244 + #$3245, // $3245 + #$3246, // $3246 + #$3247, // $3247 + #$3248, // $3248 + #$3249, // $3249 + #$324A, // $324A + #$324B, // $324B + #$324C, // $324C + #$324D, // $324D + #$324E, // $324E + #$324F, // $324F + #$3250, // $3250 + #$3251, // $3251 + #$3252, // $3252 + #$3253, // $3253 + #$3254, // $3254 + #$3255, // $3255 + #$3256, // $3256 + #$3257, // $3257 + #$3258, // $3258 + #$3259, // $3259 + #$325A, // $325A + #$325B, // $325B + #$325C, // $325C + #$325D, // $325D + #$325E, // $325E + #$325F, // $325F + #$3260, // $3260 + #$3261, // $3261 + #$3262, // $3262 + #$3263, // $3263 + #$3264, // $3264 + #$3265, // $3265 + #$3266, // $3266 + #$3267, // $3267 + #$3268, // $3268 + #$3269, // $3269 + #$326A, // $326A + #$326B, // $326B + #$326C, // $326C + #$326D, // $326D + #$326E, // $326E + #$326F, // $326F + #$3270, // $3270 + #$3271, // $3271 + #$3272, // $3272 + #$3273, // $3273 + #$3274, // $3274 + #$3275, // $3275 + #$3276, // $3276 + #$3277, // $3277 + #$3278, // $3278 + #$3279, // $3279 + #$327A, // $327A + #$327B, // $327B + #$327C, // $327C + #$327D, // $327D + #$327E, // $327E + #$327F, // $327F + #$3280, // $3280 + #$3281, // $3281 + #$3282, // $3282 + #$3283, // $3283 + #$3284, // $3284 + #$3285, // $3285 + #$3286, // $3286 + #$3287, // $3287 + #$3288, // $3288 + #$3289, // $3289 + #$328A, // $328A + #$328B, // $328B + #$328C, // $328C + #$328D, // $328D + #$328E, // $328E + #$328F, // $328F + #$3290, // $3290 + #$3291, // $3291 + #$3292, // $3292 + #$3293, // $3293 + #$3294, // $3294 + #$3295, // $3295 + #$3296, // $3296 + #$3297, // $3297 + #$3298, // $3298 + #$3299, // $3299 + #$329A, // $329A + #$329B, // $329B + #$329C, // $329C + #$329D, // $329D + #$329E, // $329E + #$329F, // $329F + #$32A0, // $32A0 + #$32A1, // $32A1 + #$32A2, // $32A2 + #$32A3, // $32A3 + #$32A4, // $32A4 + #$32A5, // $32A5 + #$32A6, // $32A6 + #$32A7, // $32A7 + #$32A8, // $32A8 + #$32A9, // $32A9 + #$32AA, // $32AA + #$32AB, // $32AB + #$32AC, // $32AC + #$32AD, // $32AD + #$32AE, // $32AE + #$32AF, // $32AF + #$32B0, // $32B0 + #$32B1, // $32B1 + #$32B2, // $32B2 + #$32B3, // $32B3 + #$32B4, // $32B4 + #$32B5, // $32B5 + #$32B6, // $32B6 + #$32B7, // $32B7 + #$32B8, // $32B8 + #$32B9, // $32B9 + #$32BA, // $32BA + #$32BB, // $32BB + #$32BC, // $32BC + #$32BD, // $32BD + #$32BE, // $32BE + #$32BF, // $32BF + #$32C0, // $32C0 + #$32C1, // $32C1 + #$32C2, // $32C2 + #$32C3, // $32C3 + #$32C4, // $32C4 + #$32C5, // $32C5 + #$32C6, // $32C6 + #$32C7, // $32C7 + #$32C8, // $32C8 + #$32C9, // $32C9 + #$32CA, // $32CA + #$32CB, // $32CB + #$32CC, // $32CC + #$32CD, // $32CD + #$32CE, // $32CE + #$32CF, // $32CF + #$32D0, // $32D0 + #$32D1, // $32D1 + #$32D2, // $32D2 + #$32D3, // $32D3 + #$32D4, // $32D4 + #$32D5, // $32D5 + #$32D6, // $32D6 + #$32D7, // $32D7 + #$32D8, // $32D8 + #$32D9, // $32D9 + #$32DA, // $32DA + #$32DB, // $32DB + #$32DC, // $32DC + #$32DD, // $32DD + #$32DE, // $32DE + #$32DF, // $32DF + #$32E0, // $32E0 + #$32E1, // $32E1 + #$32E2, // $32E2 + #$32E3, // $32E3 + #$32E4, // $32E4 + #$32E5, // $32E5 + #$32E6, // $32E6 + #$32E7, // $32E7 + #$32E8, // $32E8 + #$32E9, // $32E9 + #$32EA, // $32EA + #$32EB, // $32EB + #$32EC, // $32EC + #$32ED, // $32ED + #$32EE, // $32EE + #$32EF, // $32EF + #$32F0, // $32F0 + #$32F1, // $32F1 + #$32F2, // $32F2 + #$32F3, // $32F3 + #$32F4, // $32F4 + #$32F5, // $32F5 + #$32F6, // $32F6 + #$32F7, // $32F7 + #$32F8, // $32F8 + #$32F9, // $32F9 + #$32FA, // $32FA + #$32FB, // $32FB + #$32FC, // $32FC + #$32FD, // $32FD + #$32FE, // $32FE + #$32FF, // $32FF + #$3300, // $3300 + #$3301, // $3301 + #$3302, // $3302 + #$3303, // $3303 + #$3304, // $3304 + #$3305, // $3305 + #$3306, // $3306 + #$3307, // $3307 + #$3308, // $3308 + #$3309, // $3309 + #$330A, // $330A + #$330B, // $330B + #$330C, // $330C + #$330D, // $330D + #$330E, // $330E + #$330F, // $330F + #$3310, // $3310 + #$3311, // $3311 + #$3312, // $3312 + #$3313, // $3313 + #$3314, // $3314 + #$3315, // $3315 + #$3316, // $3316 + #$3317, // $3317 + #$3318, // $3318 + #$3319, // $3319 + #$331A, // $331A + #$331B, // $331B + #$331C, // $331C + #$331D, // $331D + #$331E, // $331E + #$331F, // $331F + #$3320, // $3320 + #$3321, // $3321 + #$3322, // $3322 + #$3323, // $3323 + #$3324, // $3324 + #$3325, // $3325 + #$3326, // $3326 + #$3327, // $3327 + #$3328, // $3328 + #$3329, // $3329 + #$332A, // $332A + #$332B, // $332B + #$332C, // $332C + #$332D, // $332D + #$332E, // $332E + #$332F, // $332F + #$3330, // $3330 + #$3331, // $3331 + #$3332, // $3332 + #$3333, // $3333 + #$3334, // $3334 + #$3335, // $3335 + #$3336, // $3336 + #$3337, // $3337 + #$3338, // $3338 + #$3339, // $3339 + #$333A, // $333A + #$333B, // $333B + #$333C, // $333C + #$333D, // $333D + #$333E, // $333E + #$333F, // $333F + #$3340, // $3340 + #$3341, // $3341 + #$3342, // $3342 + #$3343, // $3343 + #$3344, // $3344 + #$3345, // $3345 + #$3346, // $3346 + #$3347, // $3347 + #$3348, // $3348 + #$3349, // $3349 + #$334A, // $334A + #$334B, // $334B + #$334C, // $334C + #$334D, // $334D + #$334E, // $334E + #$334F, // $334F + #$3350, // $3350 + #$3351, // $3351 + #$3352, // $3352 + #$3353, // $3353 + #$3354, // $3354 + #$3355, // $3355 + #$3356, // $3356 + #$3357, // $3357 + #$3358, // $3358 + #$3359, // $3359 + #$335A, // $335A + #$335B, // $335B + #$335C, // $335C + #$335D, // $335D + #$335E, // $335E + #$335F, // $335F + #$3360, // $3360 + #$3361, // $3361 + #$3362, // $3362 + #$3363, // $3363 + #$3364, // $3364 + #$3365, // $3365 + #$3366, // $3366 + #$3367, // $3367 + #$3368, // $3368 + #$3369, // $3369 + #$336A, // $336A + #$336B, // $336B + #$336C, // $336C + #$336D, // $336D + #$336E, // $336E + #$336F, // $336F + #$3370, // $3370 + #$3371, // $3371 + #$3372, // $3372 + #$3373, // $3373 + #$3374, // $3374 + #$3375, // $3375 + #$3376, // $3376 + #$3377, // $3377 + #$3378, // $3378 + #$3379, // $3379 + #$337A, // $337A + #$337B, // $337B + #$337C, // $337C + #$337D, // $337D + #$337E, // $337E + #$337F, // $337F + #$3380, // $3380 + #$3381, // $3381 + #$3382, // $3382 + #$3383, // $3383 + #$3384, // $3384 + #$3385, // $3385 + #$3386, // $3386 + #$3387, // $3387 + #$3388, // $3388 + #$3389, // $3389 + #$338A, // $338A + #$338B, // $338B + #$338C, // $338C + #$338D, // $338D + #$338E, // $338E + #$338F, // $338F + #$3390, // $3390 + #$3391, // $3391 + #$3392, // $3392 + #$3393, // $3393 + #$3394, // $3394 + #$3395, // $3395 + #$3396, // $3396 + #$3397, // $3397 + #$3398, // $3398 + #$3399, // $3399 + #$339A, // $339A + #$339B, // $339B + #$339C, // $339C + #$339D, // $339D + #$339E, // $339E + #$339F, // $339F + #$33A0, // $33A0 + #$33A1, // $33A1 + #$33A2, // $33A2 + #$33A3, // $33A3 + #$33A4, // $33A4 + #$33A5, // $33A5 + #$33A6, // $33A6 + #$33A7, // $33A7 + #$33A8, // $33A8 + #$33A9, // $33A9 + #$33AA, // $33AA + #$33AB, // $33AB + #$33AC, // $33AC + #$33AD, // $33AD + #$33AE, // $33AE + #$33AF, // $33AF + #$33B0, // $33B0 + #$33B1, // $33B1 + #$33B2, // $33B2 + #$33B3, // $33B3 + #$33B4, // $33B4 + #$33B5, // $33B5 + #$33B6, // $33B6 + #$33B7, // $33B7 + #$33B8, // $33B8 + #$33B9, // $33B9 + #$33BA, // $33BA + #$33BB, // $33BB + #$33BC, // $33BC + #$33BD, // $33BD + #$33BE, // $33BE + #$33BF, // $33BF + #$33C0, // $33C0 + #$33C1, // $33C1 + #$33C2, // $33C2 + #$33C3, // $33C3 + #$33C4, // $33C4 + #$33C5, // $33C5 + #$33C6, // $33C6 + #$33C7, // $33C7 + #$33C8, // $33C8 + #$33C9, // $33C9 + #$33CA, // $33CA + #$33CB, // $33CB + #$33CC, // $33CC + #$33CD, // $33CD + #$33CE, // $33CE + #$33CF, // $33CF + #$33D0, // $33D0 + #$33D1, // $33D1 + #$33D2, // $33D2 + #$33D3, // $33D3 + #$33D4, // $33D4 + #$33D5, // $33D5 + #$33D6, // $33D6 + #$33D7, // $33D7 + #$33D8, // $33D8 + #$33D9, // $33D9 + #$33DA, // $33DA + #$33DB, // $33DB + #$33DC, // $33DC + #$33DD, // $33DD + #$33DE, // $33DE + #$33DF, // $33DF + #$33E0, // $33E0 + #$33E1, // $33E1 + #$33E2, // $33E2 + #$33E3, // $33E3 + #$33E4, // $33E4 + #$33E5, // $33E5 + #$33E6, // $33E6 + #$33E7, // $33E7 + #$33E8, // $33E8 + #$33E9, // $33E9 + #$33EA, // $33EA + #$33EB, // $33EB + #$33EC, // $33EC + #$33ED, // $33ED + #$33EE, // $33EE + #$33EF, // $33EF + #$33F0, // $33F0 + #$33F1, // $33F1 + #$33F2, // $33F2 + #$33F3, // $33F3 + #$33F4, // $33F4 + #$33F5, // $33F5 + #$33F6, // $33F6 + #$33F7, // $33F7 + #$33F8, // $33F8 + #$33F9, // $33F9 + #$33FA, // $33FA + #$33FB, // $33FB + #$33FC, // $33FC + #$33FD, // $33FD + #$33FE, // $33FE + #$33FF, // $33FF + #$3400, // $3400 + #$3401, // $3401 + #$3402, // $3402 + #$3403, // $3403 + #$3404, // $3404 + #$3405, // $3405 + #$3406, // $3406 + #$3407, // $3407 + #$3408, // $3408 + #$3409, // $3409 + #$340A, // $340A + #$340B, // $340B + #$340C, // $340C + #$340D, // $340D + #$340E, // $340E + #$340F, // $340F + #$3410, // $3410 + #$3411, // $3411 + #$3412, // $3412 + #$3413, // $3413 + #$3414, // $3414 + #$3415, // $3415 + #$3416, // $3416 + #$3417, // $3417 + #$3418, // $3418 + #$3419, // $3419 + #$341A, // $341A + #$341B, // $341B + #$341C, // $341C + #$341D, // $341D + #$341E, // $341E + #$341F, // $341F + #$3420, // $3420 + #$3421, // $3421 + #$3422, // $3422 + #$3423, // $3423 + #$3424, // $3424 + #$3425, // $3425 + #$3426, // $3426 + #$3427, // $3427 + #$3428, // $3428 + #$3429, // $3429 + #$342A, // $342A + #$342B, // $342B + #$342C, // $342C + #$342D, // $342D + #$342E, // $342E + #$342F, // $342F + #$3430, // $3430 + #$3431, // $3431 + #$3432, // $3432 + #$3433, // $3433 + #$3434, // $3434 + #$3435, // $3435 + #$3436, // $3436 + #$3437, // $3437 + #$3438, // $3438 + #$3439, // $3439 + #$343A, // $343A + #$343B, // $343B + #$343C, // $343C + #$343D, // $343D + #$343E, // $343E + #$343F, // $343F + #$3440, // $3440 + #$3441, // $3441 + #$3442, // $3442 + #$3443, // $3443 + #$3444, // $3444 + #$3445, // $3445 + #$3446, // $3446 + #$3447, // $3447 + #$3448, // $3448 + #$3449, // $3449 + #$344A, // $344A + #$344B, // $344B + #$344C, // $344C + #$344D, // $344D + #$344E, // $344E + #$344F, // $344F + #$3450, // $3450 + #$3451, // $3451 + #$3452, // $3452 + #$3453, // $3453 + #$3454, // $3454 + #$3455, // $3455 + #$3456, // $3456 + #$3457, // $3457 + #$3458, // $3458 + #$3459, // $3459 + #$345A, // $345A + #$345B, // $345B + #$345C, // $345C + #$345D, // $345D + #$345E, // $345E + #$345F, // $345F + #$3460, // $3460 + #$3461, // $3461 + #$3462, // $3462 + #$3463, // $3463 + #$3464, // $3464 + #$3465, // $3465 + #$3466, // $3466 + #$3467, // $3467 + #$3468, // $3468 + #$3469, // $3469 + #$346A, // $346A + #$346B, // $346B + #$346C, // $346C + #$346D, // $346D + #$346E, // $346E + #$346F, // $346F + #$3470, // $3470 + #$3471, // $3471 + #$3472, // $3472 + #$3473, // $3473 + #$3474, // $3474 + #$3475, // $3475 + #$3476, // $3476 + #$3477, // $3477 + #$3478, // $3478 + #$3479, // $3479 + #$347A, // $347A + #$347B, // $347B + #$347C, // $347C + #$347D, // $347D + #$347E, // $347E + #$347F, // $347F + #$3480, // $3480 + #$3481, // $3481 + #$3482, // $3482 + #$3483, // $3483 + #$3484, // $3484 + #$3485, // $3485 + #$3486, // $3486 + #$3487, // $3487 + #$3488, // $3488 + #$3489, // $3489 + #$348A, // $348A + #$348B, // $348B + #$348C, // $348C + #$348D, // $348D + #$348E, // $348E + #$348F, // $348F + #$3490, // $3490 + #$3491, // $3491 + #$3492, // $3492 + #$3493, // $3493 + #$3494, // $3494 + #$3495, // $3495 + #$3496, // $3496 + #$3497, // $3497 + #$3498, // $3498 + #$3499, // $3499 + #$349A, // $349A + #$349B, // $349B + #$349C, // $349C + #$349D, // $349D + #$349E, // $349E + #$349F, // $349F + #$34A0, // $34A0 + #$34A1, // $34A1 + #$34A2, // $34A2 + #$34A3, // $34A3 + #$34A4, // $34A4 + #$34A5, // $34A5 + #$34A6, // $34A6 + #$34A7, // $34A7 + #$34A8, // $34A8 + #$34A9, // $34A9 + #$34AA, // $34AA + #$34AB, // $34AB + #$34AC, // $34AC + #$34AD, // $34AD + #$34AE, // $34AE + #$34AF, // $34AF + #$34B0, // $34B0 + #$34B1, // $34B1 + #$34B2, // $34B2 + #$34B3, // $34B3 + #$34B4, // $34B4 + #$34B5, // $34B5 + #$34B6, // $34B6 + #$34B7, // $34B7 + #$34B8, // $34B8 + #$34B9, // $34B9 + #$34BA, // $34BA + #$34BB, // $34BB + #$34BC, // $34BC + #$34BD, // $34BD + #$34BE, // $34BE + #$34BF, // $34BF + #$34C0, // $34C0 + #$34C1, // $34C1 + #$34C2, // $34C2 + #$34C3, // $34C3 + #$34C4, // $34C4 + #$34C5, // $34C5 + #$34C6, // $34C6 + #$34C7, // $34C7 + #$34C8, // $34C8 + #$34C9, // $34C9 + #$34CA, // $34CA + #$34CB, // $34CB + #$34CC, // $34CC + #$34CD, // $34CD + #$34CE, // $34CE + #$34CF, // $34CF + #$34D0, // $34D0 + #$34D1, // $34D1 + #$34D2, // $34D2 + #$34D3, // $34D3 + #$34D4, // $34D4 + #$34D5, // $34D5 + #$34D6, // $34D6 + #$34D7, // $34D7 + #$34D8, // $34D8 + #$34D9, // $34D9 + #$34DA, // $34DA + #$34DB, // $34DB + #$34DC, // $34DC + #$34DD, // $34DD + #$34DE, // $34DE + #$34DF, // $34DF + #$34E0, // $34E0 + #$34E1, // $34E1 + #$34E2, // $34E2 + #$34E3, // $34E3 + #$34E4, // $34E4 + #$34E5, // $34E5 + #$34E6, // $34E6 + #$34E7, // $34E7 + #$34E8, // $34E8 + #$34E9, // $34E9 + #$34EA, // $34EA + #$34EB, // $34EB + #$34EC, // $34EC + #$34ED, // $34ED + #$34EE, // $34EE + #$34EF, // $34EF + #$34F0, // $34F0 + #$34F1, // $34F1 + #$34F2, // $34F2 + #$34F3, // $34F3 + #$34F4, // $34F4 + #$34F5, // $34F5 + #$34F6, // $34F6 + #$34F7, // $34F7 + #$34F8, // $34F8 + #$34F9, // $34F9 + #$34FA, // $34FA + #$34FB, // $34FB + #$34FC, // $34FC + #$34FD, // $34FD + #$34FE, // $34FE + #$34FF, // $34FF + #$3500, // $3500 + #$3501, // $3501 + #$3502, // $3502 + #$3503, // $3503 + #$3504, // $3504 + #$3505, // $3505 + #$3506, // $3506 + #$3507, // $3507 + #$3508, // $3508 + #$3509, // $3509 + #$350A, // $350A + #$350B, // $350B + #$350C, // $350C + #$350D, // $350D + #$350E, // $350E + #$350F, // $350F + #$3510, // $3510 + #$3511, // $3511 + #$3512, // $3512 + #$3513, // $3513 + #$3514, // $3514 + #$3515, // $3515 + #$3516, // $3516 + #$3517, // $3517 + #$3518, // $3518 + #$3519, // $3519 + #$351A, // $351A + #$351B, // $351B + #$351C, // $351C + #$351D, // $351D + #$351E, // $351E + #$351F, // $351F + #$3520, // $3520 + #$3521, // $3521 + #$3522, // $3522 + #$3523, // $3523 + #$3524, // $3524 + #$3525, // $3525 + #$3526, // $3526 + #$3527, // $3527 + #$3528, // $3528 + #$3529, // $3529 + #$352A, // $352A + #$352B, // $352B + #$352C, // $352C + #$352D, // $352D + #$352E, // $352E + #$352F, // $352F + #$3530, // $3530 + #$3531, // $3531 + #$3532, // $3532 + #$3533, // $3533 + #$3534, // $3534 + #$3535, // $3535 + #$3536, // $3536 + #$3537, // $3537 + #$3538, // $3538 + #$3539, // $3539 + #$353A, // $353A + #$353B, // $353B + #$353C, // $353C + #$353D, // $353D + #$353E, // $353E + #$353F, // $353F + #$3540, // $3540 + #$3541, // $3541 + #$3542, // $3542 + #$3543, // $3543 + #$3544, // $3544 + #$3545, // $3545 + #$3546, // $3546 + #$3547, // $3547 + #$3548, // $3548 + #$3549, // $3549 + #$354A, // $354A + #$354B, // $354B + #$354C, // $354C + #$354D, // $354D + #$354E, // $354E + #$354F, // $354F + #$3550, // $3550 + #$3551, // $3551 + #$3552, // $3552 + #$3553, // $3553 + #$3554, // $3554 + #$3555, // $3555 + #$3556, // $3556 + #$3557, // $3557 + #$3558, // $3558 + #$3559, // $3559 + #$355A, // $355A + #$355B, // $355B + #$355C, // $355C + #$355D, // $355D + #$355E, // $355E + #$355F, // $355F + #$3560, // $3560 + #$3561, // $3561 + #$3562, // $3562 + #$3563, // $3563 + #$3564, // $3564 + #$3565, // $3565 + #$3566, // $3566 + #$3567, // $3567 + #$3568, // $3568 + #$3569, // $3569 + #$356A, // $356A + #$356B, // $356B + #$356C, // $356C + #$356D, // $356D + #$356E, // $356E + #$356F, // $356F + #$3570, // $3570 + #$3571, // $3571 + #$3572, // $3572 + #$3573, // $3573 + #$3574, // $3574 + #$3575, // $3575 + #$3576, // $3576 + #$3577, // $3577 + #$3578, // $3578 + #$3579, // $3579 + #$357A, // $357A + #$357B, // $357B + #$357C, // $357C + #$357D, // $357D + #$357E, // $357E + #$357F, // $357F + #$3580, // $3580 + #$3581, // $3581 + #$3582, // $3582 + #$3583, // $3583 + #$3584, // $3584 + #$3585, // $3585 + #$3586, // $3586 + #$3587, // $3587 + #$3588, // $3588 + #$3589, // $3589 + #$358A, // $358A + #$358B, // $358B + #$358C, // $358C + #$358D, // $358D + #$358E, // $358E + #$358F, // $358F + #$3590, // $3590 + #$3591, // $3591 + #$3592, // $3592 + #$3593, // $3593 + #$3594, // $3594 + #$3595, // $3595 + #$3596, // $3596 + #$3597, // $3597 + #$3598, // $3598 + #$3599, // $3599 + #$359A, // $359A + #$359B, // $359B + #$359C, // $359C + #$359D, // $359D + #$359E, // $359E + #$359F, // $359F + #$35A0, // $35A0 + #$35A1, // $35A1 + #$35A2, // $35A2 + #$35A3, // $35A3 + #$35A4, // $35A4 + #$35A5, // $35A5 + #$35A6, // $35A6 + #$35A7, // $35A7 + #$35A8, // $35A8 + #$35A9, // $35A9 + #$35AA, // $35AA + #$35AB, // $35AB + #$35AC, // $35AC + #$35AD, // $35AD + #$35AE, // $35AE + #$35AF, // $35AF + #$35B0, // $35B0 + #$35B1, // $35B1 + #$35B2, // $35B2 + #$35B3, // $35B3 + #$35B4, // $35B4 + #$35B5, // $35B5 + #$35B6, // $35B6 + #$35B7, // $35B7 + #$35B8, // $35B8 + #$35B9, // $35B9 + #$35BA, // $35BA + #$35BB, // $35BB + #$35BC, // $35BC + #$35BD, // $35BD + #$35BE, // $35BE + #$35BF, // $35BF + #$35C0, // $35C0 + #$35C1, // $35C1 + #$35C2, // $35C2 + #$35C3, // $35C3 + #$35C4, // $35C4 + #$35C5, // $35C5 + #$35C6, // $35C6 + #$35C7, // $35C7 + #$35C8, // $35C8 + #$35C9, // $35C9 + #$35CA, // $35CA + #$35CB, // $35CB + #$35CC, // $35CC + #$35CD, // $35CD + #$35CE, // $35CE + #$35CF, // $35CF + #$35D0, // $35D0 + #$35D1, // $35D1 + #$35D2, // $35D2 + #$35D3, // $35D3 + #$35D4, // $35D4 + #$35D5, // $35D5 + #$35D6, // $35D6 + #$35D7, // $35D7 + #$35D8, // $35D8 + #$35D9, // $35D9 + #$35DA, // $35DA + #$35DB, // $35DB + #$35DC, // $35DC + #$35DD, // $35DD + #$35DE, // $35DE + #$35DF, // $35DF + #$35E0, // $35E0 + #$35E1, // $35E1 + #$35E2, // $35E2 + #$35E3, // $35E3 + #$35E4, // $35E4 + #$35E5, // $35E5 + #$35E6, // $35E6 + #$35E7, // $35E7 + #$35E8, // $35E8 + #$35E9, // $35E9 + #$35EA, // $35EA + #$35EB, // $35EB + #$35EC, // $35EC + #$35ED, // $35ED + #$35EE, // $35EE + #$35EF, // $35EF + #$35F0, // $35F0 + #$35F1, // $35F1 + #$35F2, // $35F2 + #$35F3, // $35F3 + #$35F4, // $35F4 + #$35F5, // $35F5 + #$35F6, // $35F6 + #$35F7, // $35F7 + #$35F8, // $35F8 + #$35F9, // $35F9 + #$35FA, // $35FA + #$35FB, // $35FB + #$35FC, // $35FC + #$35FD, // $35FD + #$35FE, // $35FE + #$35FF, // $35FF + #$3600, // $3600 + #$3601, // $3601 + #$3602, // $3602 + #$3603, // $3603 + #$3604, // $3604 + #$3605, // $3605 + #$3606, // $3606 + #$3607, // $3607 + #$3608, // $3608 + #$3609, // $3609 + #$360A, // $360A + #$360B, // $360B + #$360C, // $360C + #$360D, // $360D + #$360E, // $360E + #$360F, // $360F + #$3610, // $3610 + #$3611, // $3611 + #$3612, // $3612 + #$3613, // $3613 + #$3614, // $3614 + #$3615, // $3615 + #$3616, // $3616 + #$3617, // $3617 + #$3618, // $3618 + #$3619, // $3619 + #$361A, // $361A + #$361B, // $361B + #$361C, // $361C + #$361D, // $361D + #$361E, // $361E + #$361F, // $361F + #$3620, // $3620 + #$3621, // $3621 + #$3622, // $3622 + #$3623, // $3623 + #$3624, // $3624 + #$3625, // $3625 + #$3626, // $3626 + #$3627, // $3627 + #$3628, // $3628 + #$3629, // $3629 + #$362A, // $362A + #$362B, // $362B + #$362C, // $362C + #$362D, // $362D + #$362E, // $362E + #$362F, // $362F + #$3630, // $3630 + #$3631, // $3631 + #$3632, // $3632 + #$3633, // $3633 + #$3634, // $3634 + #$3635, // $3635 + #$3636, // $3636 + #$3637, // $3637 + #$3638, // $3638 + #$3639, // $3639 + #$363A, // $363A + #$363B, // $363B + #$363C, // $363C + #$363D, // $363D + #$363E, // $363E + #$363F, // $363F + #$3640, // $3640 + #$3641, // $3641 + #$3642, // $3642 + #$3643, // $3643 + #$3644, // $3644 + #$3645, // $3645 + #$3646, // $3646 + #$3647, // $3647 + #$3648, // $3648 + #$3649, // $3649 + #$364A, // $364A + #$364B, // $364B + #$364C, // $364C + #$364D, // $364D + #$364E, // $364E + #$364F, // $364F + #$3650, // $3650 + #$3651, // $3651 + #$3652, // $3652 + #$3653, // $3653 + #$3654, // $3654 + #$3655, // $3655 + #$3656, // $3656 + #$3657, // $3657 + #$3658, // $3658 + #$3659, // $3659 + #$365A, // $365A + #$365B, // $365B + #$365C, // $365C + #$365D, // $365D + #$365E, // $365E + #$365F, // $365F + #$3660, // $3660 + #$3661, // $3661 + #$3662, // $3662 + #$3663, // $3663 + #$3664, // $3664 + #$3665, // $3665 + #$3666, // $3666 + #$3667, // $3667 + #$3668, // $3668 + #$3669, // $3669 + #$366A, // $366A + #$366B, // $366B + #$366C, // $366C + #$366D, // $366D + #$366E, // $366E + #$366F, // $366F + #$3670, // $3670 + #$3671, // $3671 + #$3672, // $3672 + #$3673, // $3673 + #$3674, // $3674 + #$3675, // $3675 + #$3676, // $3676 + #$3677, // $3677 + #$3678, // $3678 + #$3679, // $3679 + #$367A, // $367A + #$367B, // $367B + #$367C, // $367C + #$367D, // $367D + #$367E, // $367E + #$367F, // $367F + #$3680, // $3680 + #$3681, // $3681 + #$3682, // $3682 + #$3683, // $3683 + #$3684, // $3684 + #$3685, // $3685 + #$3686, // $3686 + #$3687, // $3687 + #$3688, // $3688 + #$3689, // $3689 + #$368A, // $368A + #$368B, // $368B + #$368C, // $368C + #$368D, // $368D + #$368E, // $368E + #$368F, // $368F + #$3690, // $3690 + #$3691, // $3691 + #$3692, // $3692 + #$3693, // $3693 + #$3694, // $3694 + #$3695, // $3695 + #$3696, // $3696 + #$3697, // $3697 + #$3698, // $3698 + #$3699, // $3699 + #$369A, // $369A + #$369B, // $369B + #$369C, // $369C + #$369D, // $369D + #$369E, // $369E + #$369F, // $369F + #$36A0, // $36A0 + #$36A1, // $36A1 + #$36A2, // $36A2 + #$36A3, // $36A3 + #$36A4, // $36A4 + #$36A5, // $36A5 + #$36A6, // $36A6 + #$36A7, // $36A7 + #$36A8, // $36A8 + #$36A9, // $36A9 + #$36AA, // $36AA + #$36AB, // $36AB + #$36AC, // $36AC + #$36AD, // $36AD + #$36AE, // $36AE + #$36AF, // $36AF + #$36B0, // $36B0 + #$36B1, // $36B1 + #$36B2, // $36B2 + #$36B3, // $36B3 + #$36B4, // $36B4 + #$36B5, // $36B5 + #$36B6, // $36B6 + #$36B7, // $36B7 + #$36B8, // $36B8 + #$36B9, // $36B9 + #$36BA, // $36BA + #$36BB, // $36BB + #$36BC, // $36BC + #$36BD, // $36BD + #$36BE, // $36BE + #$36BF, // $36BF + #$36C0, // $36C0 + #$36C1, // $36C1 + #$36C2, // $36C2 + #$36C3, // $36C3 + #$36C4, // $36C4 + #$36C5, // $36C5 + #$36C6, // $36C6 + #$36C7, // $36C7 + #$36C8, // $36C8 + #$36C9, // $36C9 + #$36CA, // $36CA + #$36CB, // $36CB + #$36CC, // $36CC + #$36CD, // $36CD + #$36CE, // $36CE + #$36CF, // $36CF + #$36D0, // $36D0 + #$36D1, // $36D1 + #$36D2, // $36D2 + #$36D3, // $36D3 + #$36D4, // $36D4 + #$36D5, // $36D5 + #$36D6, // $36D6 + #$36D7, // $36D7 + #$36D8, // $36D8 + #$36D9, // $36D9 + #$36DA, // $36DA + #$36DB, // $36DB + #$36DC, // $36DC + #$36DD, // $36DD + #$36DE, // $36DE + #$36DF, // $36DF + #$36E0, // $36E0 + #$36E1, // $36E1 + #$36E2, // $36E2 + #$36E3, // $36E3 + #$36E4, // $36E4 + #$36E5, // $36E5 + #$36E6, // $36E6 + #$36E7, // $36E7 + #$36E8, // $36E8 + #$36E9, // $36E9 + #$36EA, // $36EA + #$36EB, // $36EB + #$36EC, // $36EC + #$36ED, // $36ED + #$36EE, // $36EE + #$36EF, // $36EF + #$36F0, // $36F0 + #$36F1, // $36F1 + #$36F2, // $36F2 + #$36F3, // $36F3 + #$36F4, // $36F4 + #$36F5, // $36F5 + #$36F6, // $36F6 + #$36F7, // $36F7 + #$36F8, // $36F8 + #$36F9, // $36F9 + #$36FA, // $36FA + #$36FB, // $36FB + #$36FC, // $36FC + #$36FD, // $36FD + #$36FE, // $36FE + #$36FF, // $36FF + #$3700, // $3700 + #$3701, // $3701 + #$3702, // $3702 + #$3703, // $3703 + #$3704, // $3704 + #$3705, // $3705 + #$3706, // $3706 + #$3707, // $3707 + #$3708, // $3708 + #$3709, // $3709 + #$370A, // $370A + #$370B, // $370B + #$370C, // $370C + #$370D, // $370D + #$370E, // $370E + #$370F, // $370F + #$3710, // $3710 + #$3711, // $3711 + #$3712, // $3712 + #$3713, // $3713 + #$3714, // $3714 + #$3715, // $3715 + #$3716, // $3716 + #$3717, // $3717 + #$3718, // $3718 + #$3719, // $3719 + #$371A, // $371A + #$371B, // $371B + #$371C, // $371C + #$371D, // $371D + #$371E, // $371E + #$371F, // $371F + #$3720, // $3720 + #$3721, // $3721 + #$3722, // $3722 + #$3723, // $3723 + #$3724, // $3724 + #$3725, // $3725 + #$3726, // $3726 + #$3727, // $3727 + #$3728, // $3728 + #$3729, // $3729 + #$372A, // $372A + #$372B, // $372B + #$372C, // $372C + #$372D, // $372D + #$372E, // $372E + #$372F, // $372F + #$3730, // $3730 + #$3731, // $3731 + #$3732, // $3732 + #$3733, // $3733 + #$3734, // $3734 + #$3735, // $3735 + #$3736, // $3736 + #$3737, // $3737 + #$3738, // $3738 + #$3739, // $3739 + #$373A, // $373A + #$373B, // $373B + #$373C, // $373C + #$373D, // $373D + #$373E, // $373E + #$373F, // $373F + #$3740, // $3740 + #$3741, // $3741 + #$3742, // $3742 + #$3743, // $3743 + #$3744, // $3744 + #$3745, // $3745 + #$3746, // $3746 + #$3747, // $3747 + #$3748, // $3748 + #$3749, // $3749 + #$374A, // $374A + #$374B, // $374B + #$374C, // $374C + #$374D, // $374D + #$374E, // $374E + #$374F, // $374F + #$3750, // $3750 + #$3751, // $3751 + #$3752, // $3752 + #$3753, // $3753 + #$3754, // $3754 + #$3755, // $3755 + #$3756, // $3756 + #$3757, // $3757 + #$3758, // $3758 + #$3759, // $3759 + #$375A, // $375A + #$375B, // $375B + #$375C, // $375C + #$375D, // $375D + #$375E, // $375E + #$375F, // $375F + #$3760, // $3760 + #$3761, // $3761 + #$3762, // $3762 + #$3763, // $3763 + #$3764, // $3764 + #$3765, // $3765 + #$3766, // $3766 + #$3767, // $3767 + #$3768, // $3768 + #$3769, // $3769 + #$376A, // $376A + #$376B, // $376B + #$376C, // $376C + #$376D, // $376D + #$376E, // $376E + #$376F, // $376F + #$3770, // $3770 + #$3771, // $3771 + #$3772, // $3772 + #$3773, // $3773 + #$3774, // $3774 + #$3775, // $3775 + #$3776, // $3776 + #$3777, // $3777 + #$3778, // $3778 + #$3779, // $3779 + #$377A, // $377A + #$377B, // $377B + #$377C, // $377C + #$377D, // $377D + #$377E, // $377E + #$377F, // $377F + #$3780, // $3780 + #$3781, // $3781 + #$3782, // $3782 + #$3783, // $3783 + #$3784, // $3784 + #$3785, // $3785 + #$3786, // $3786 + #$3787, // $3787 + #$3788, // $3788 + #$3789, // $3789 + #$378A, // $378A + #$378B, // $378B + #$378C, // $378C + #$378D, // $378D + #$378E, // $378E + #$378F, // $378F + #$3790, // $3790 + #$3791, // $3791 + #$3792, // $3792 + #$3793, // $3793 + #$3794, // $3794 + #$3795, // $3795 + #$3796, // $3796 + #$3797, // $3797 + #$3798, // $3798 + #$3799, // $3799 + #$379A, // $379A + #$379B, // $379B + #$379C, // $379C + #$379D, // $379D + #$379E, // $379E + #$379F, // $379F + #$37A0, // $37A0 + #$37A1, // $37A1 + #$37A2, // $37A2 + #$37A3, // $37A3 + #$37A4, // $37A4 + #$37A5, // $37A5 + #$37A6, // $37A6 + #$37A7, // $37A7 + #$37A8, // $37A8 + #$37A9, // $37A9 + #$37AA, // $37AA + #$37AB, // $37AB + #$37AC, // $37AC + #$37AD, // $37AD + #$37AE, // $37AE + #$37AF, // $37AF + #$37B0, // $37B0 + #$37B1, // $37B1 + #$37B2, // $37B2 + #$37B3, // $37B3 + #$37B4, // $37B4 + #$37B5, // $37B5 + #$37B6, // $37B6 + #$37B7, // $37B7 + #$37B8, // $37B8 + #$37B9, // $37B9 + #$37BA, // $37BA + #$37BB, // $37BB + #$37BC, // $37BC + #$37BD, // $37BD + #$37BE, // $37BE + #$37BF, // $37BF + #$37C0, // $37C0 + #$37C1, // $37C1 + #$37C2, // $37C2 + #$37C3, // $37C3 + #$37C4, // $37C4 + #$37C5, // $37C5 + #$37C6, // $37C6 + #$37C7, // $37C7 + #$37C8, // $37C8 + #$37C9, // $37C9 + #$37CA, // $37CA + #$37CB, // $37CB + #$37CC, // $37CC + #$37CD, // $37CD + #$37CE, // $37CE + #$37CF, // $37CF + #$37D0, // $37D0 + #$37D1, // $37D1 + #$37D2, // $37D2 + #$37D3, // $37D3 + #$37D4, // $37D4 + #$37D5, // $37D5 + #$37D6, // $37D6 + #$37D7, // $37D7 + #$37D8, // $37D8 + #$37D9, // $37D9 + #$37DA, // $37DA + #$37DB, // $37DB + #$37DC, // $37DC + #$37DD, // $37DD + #$37DE, // $37DE + #$37DF, // $37DF + #$37E0, // $37E0 + #$37E1, // $37E1 + #$37E2, // $37E2 + #$37E3, // $37E3 + #$37E4, // $37E4 + #$37E5, // $37E5 + #$37E6, // $37E6 + #$37E7, // $37E7 + #$37E8, // $37E8 + #$37E9, // $37E9 + #$37EA, // $37EA + #$37EB, // $37EB + #$37EC, // $37EC + #$37ED, // $37ED + #$37EE, // $37EE + #$37EF, // $37EF + #$37F0, // $37F0 + #$37F1, // $37F1 + #$37F2, // $37F2 + #$37F3, // $37F3 + #$37F4, // $37F4 + #$37F5, // $37F5 + #$37F6, // $37F6 + #$37F7, // $37F7 + #$37F8, // $37F8 + #$37F9, // $37F9 + #$37FA, // $37FA + #$37FB, // $37FB + #$37FC, // $37FC + #$37FD, // $37FD + #$37FE, // $37FE + #$37FF, // $37FF + #$3800, // $3800 + #$3801, // $3801 + #$3802, // $3802 + #$3803, // $3803 + #$3804, // $3804 + #$3805, // $3805 + #$3806, // $3806 + #$3807, // $3807 + #$3808, // $3808 + #$3809, // $3809 + #$380A, // $380A + #$380B, // $380B + #$380C, // $380C + #$380D, // $380D + #$380E, // $380E + #$380F, // $380F + #$3810, // $3810 + #$3811, // $3811 + #$3812, // $3812 + #$3813, // $3813 + #$3814, // $3814 + #$3815, // $3815 + #$3816, // $3816 + #$3817, // $3817 + #$3818, // $3818 + #$3819, // $3819 + #$381A, // $381A + #$381B, // $381B + #$381C, // $381C + #$381D, // $381D + #$381E, // $381E + #$381F, // $381F + #$3820, // $3820 + #$3821, // $3821 + #$3822, // $3822 + #$3823, // $3823 + #$3824, // $3824 + #$3825, // $3825 + #$3826, // $3826 + #$3827, // $3827 + #$3828, // $3828 + #$3829, // $3829 + #$382A, // $382A + #$382B, // $382B + #$382C, // $382C + #$382D, // $382D + #$382E, // $382E + #$382F, // $382F + #$3830, // $3830 + #$3831, // $3831 + #$3832, // $3832 + #$3833, // $3833 + #$3834, // $3834 + #$3835, // $3835 + #$3836, // $3836 + #$3837, // $3837 + #$3838, // $3838 + #$3839, // $3839 + #$383A, // $383A + #$383B, // $383B + #$383C, // $383C + #$383D, // $383D + #$383E, // $383E + #$383F, // $383F + #$3840, // $3840 + #$3841, // $3841 + #$3842, // $3842 + #$3843, // $3843 + #$3844, // $3844 + #$3845, // $3845 + #$3846, // $3846 + #$3847, // $3847 + #$3848, // $3848 + #$3849, // $3849 + #$384A, // $384A + #$384B, // $384B + #$384C, // $384C + #$384D, // $384D + #$384E, // $384E + #$384F, // $384F + #$3850, // $3850 + #$3851, // $3851 + #$3852, // $3852 + #$3853, // $3853 + #$3854, // $3854 + #$3855, // $3855 + #$3856, // $3856 + #$3857, // $3857 + #$3858, // $3858 + #$3859, // $3859 + #$385A, // $385A + #$385B, // $385B + #$385C, // $385C + #$385D, // $385D + #$385E, // $385E + #$385F, // $385F + #$3860, // $3860 + #$3861, // $3861 + #$3862, // $3862 + #$3863, // $3863 + #$3864, // $3864 + #$3865, // $3865 + #$3866, // $3866 + #$3867, // $3867 + #$3868, // $3868 + #$3869, // $3869 + #$386A, // $386A + #$386B, // $386B + #$386C, // $386C + #$386D, // $386D + #$386E, // $386E + #$386F, // $386F + #$3870, // $3870 + #$3871, // $3871 + #$3872, // $3872 + #$3873, // $3873 + #$3874, // $3874 + #$3875, // $3875 + #$3876, // $3876 + #$3877, // $3877 + #$3878, // $3878 + #$3879, // $3879 + #$387A, // $387A + #$387B, // $387B + #$387C, // $387C + #$387D, // $387D + #$387E, // $387E + #$387F, // $387F + #$3880, // $3880 + #$3881, // $3881 + #$3882, // $3882 + #$3883, // $3883 + #$3884, // $3884 + #$3885, // $3885 + #$3886, // $3886 + #$3887, // $3887 + #$3888, // $3888 + #$3889, // $3889 + #$388A, // $388A + #$388B, // $388B + #$388C, // $388C + #$388D, // $388D + #$388E, // $388E + #$388F, // $388F + #$3890, // $3890 + #$3891, // $3891 + #$3892, // $3892 + #$3893, // $3893 + #$3894, // $3894 + #$3895, // $3895 + #$3896, // $3896 + #$3897, // $3897 + #$3898, // $3898 + #$3899, // $3899 + #$389A, // $389A + #$389B, // $389B + #$389C, // $389C + #$389D, // $389D + #$389E, // $389E + #$389F, // $389F + #$38A0, // $38A0 + #$38A1, // $38A1 + #$38A2, // $38A2 + #$38A3, // $38A3 + #$38A4, // $38A4 + #$38A5, // $38A5 + #$38A6, // $38A6 + #$38A7, // $38A7 + #$38A8, // $38A8 + #$38A9, // $38A9 + #$38AA, // $38AA + #$38AB, // $38AB + #$38AC, // $38AC + #$38AD, // $38AD + #$38AE, // $38AE + #$38AF, // $38AF + #$38B0, // $38B0 + #$38B1, // $38B1 + #$38B2, // $38B2 + #$38B3, // $38B3 + #$38B4, // $38B4 + #$38B5, // $38B5 + #$38B6, // $38B6 + #$38B7, // $38B7 + #$38B8, // $38B8 + #$38B9, // $38B9 + #$38BA, // $38BA + #$38BB, // $38BB + #$38BC, // $38BC + #$38BD, // $38BD + #$38BE, // $38BE + #$38BF, // $38BF + #$38C0, // $38C0 + #$38C1, // $38C1 + #$38C2, // $38C2 + #$38C3, // $38C3 + #$38C4, // $38C4 + #$38C5, // $38C5 + #$38C6, // $38C6 + #$38C7, // $38C7 + #$38C8, // $38C8 + #$38C9, // $38C9 + #$38CA, // $38CA + #$38CB, // $38CB + #$38CC, // $38CC + #$38CD, // $38CD + #$38CE, // $38CE + #$38CF, // $38CF + #$38D0, // $38D0 + #$38D1, // $38D1 + #$38D2, // $38D2 + #$38D3, // $38D3 + #$38D4, // $38D4 + #$38D5, // $38D5 + #$38D6, // $38D6 + #$38D7, // $38D7 + #$38D8, // $38D8 + #$38D9, // $38D9 + #$38DA, // $38DA + #$38DB, // $38DB + #$38DC, // $38DC + #$38DD, // $38DD + #$38DE, // $38DE + #$38DF, // $38DF + #$38E0, // $38E0 + #$38E1, // $38E1 + #$38E2, // $38E2 + #$38E3, // $38E3 + #$38E4, // $38E4 + #$38E5, // $38E5 + #$38E6, // $38E6 + #$38E7, // $38E7 + #$38E8, // $38E8 + #$38E9, // $38E9 + #$38EA, // $38EA + #$38EB, // $38EB + #$38EC, // $38EC + #$38ED, // $38ED + #$38EE, // $38EE + #$38EF, // $38EF + #$38F0, // $38F0 + #$38F1, // $38F1 + #$38F2, // $38F2 + #$38F3, // $38F3 + #$38F4, // $38F4 + #$38F5, // $38F5 + #$38F6, // $38F6 + #$38F7, // $38F7 + #$38F8, // $38F8 + #$38F9, // $38F9 + #$38FA, // $38FA + #$38FB, // $38FB + #$38FC, // $38FC + #$38FD, // $38FD + #$38FE, // $38FE + #$38FF, // $38FF + #$3900, // $3900 + #$3901, // $3901 + #$3902, // $3902 + #$3903, // $3903 + #$3904, // $3904 + #$3905, // $3905 + #$3906, // $3906 + #$3907, // $3907 + #$3908, // $3908 + #$3909, // $3909 + #$390A, // $390A + #$390B, // $390B + #$390C, // $390C + #$390D, // $390D + #$390E, // $390E + #$390F, // $390F + #$3910, // $3910 + #$3911, // $3911 + #$3912, // $3912 + #$3913, // $3913 + #$3914, // $3914 + #$3915, // $3915 + #$3916, // $3916 + #$3917, // $3917 + #$3918, // $3918 + #$3919, // $3919 + #$391A, // $391A + #$391B, // $391B + #$391C, // $391C + #$391D, // $391D + #$391E, // $391E + #$391F, // $391F + #$3920, // $3920 + #$3921, // $3921 + #$3922, // $3922 + #$3923, // $3923 + #$3924, // $3924 + #$3925, // $3925 + #$3926, // $3926 + #$3927, // $3927 + #$3928, // $3928 + #$3929, // $3929 + #$392A, // $392A + #$392B, // $392B + #$392C, // $392C + #$392D, // $392D + #$392E, // $392E + #$392F, // $392F + #$3930, // $3930 + #$3931, // $3931 + #$3932, // $3932 + #$3933, // $3933 + #$3934, // $3934 + #$3935, // $3935 + #$3936, // $3936 + #$3937, // $3937 + #$3938, // $3938 + #$3939, // $3939 + #$393A, // $393A + #$393B, // $393B + #$393C, // $393C + #$393D, // $393D + #$393E, // $393E + #$393F, // $393F + #$3940, // $3940 + #$3941, // $3941 + #$3942, // $3942 + #$3943, // $3943 + #$3944, // $3944 + #$3945, // $3945 + #$3946, // $3946 + #$3947, // $3947 + #$3948, // $3948 + #$3949, // $3949 + #$394A, // $394A + #$394B, // $394B + #$394C, // $394C + #$394D, // $394D + #$394E, // $394E + #$394F, // $394F + #$3950, // $3950 + #$3951, // $3951 + #$3952, // $3952 + #$3953, // $3953 + #$3954, // $3954 + #$3955, // $3955 + #$3956, // $3956 + #$3957, // $3957 + #$3958, // $3958 + #$3959, // $3959 + #$395A, // $395A + #$395B, // $395B + #$395C, // $395C + #$395D, // $395D + #$395E, // $395E + #$395F, // $395F + #$3960, // $3960 + #$3961, // $3961 + #$3962, // $3962 + #$3963, // $3963 + #$3964, // $3964 + #$3965, // $3965 + #$3966, // $3966 + #$3967, // $3967 + #$3968, // $3968 + #$3969, // $3969 + #$396A, // $396A + #$396B, // $396B + #$396C, // $396C + #$396D, // $396D + #$396E, // $396E + #$396F, // $396F + #$3970, // $3970 + #$3971, // $3971 + #$3972, // $3972 + #$3973, // $3973 + #$3974, // $3974 + #$3975, // $3975 + #$3976, // $3976 + #$3977, // $3977 + #$3978, // $3978 + #$3979, // $3979 + #$397A, // $397A + #$397B, // $397B + #$397C, // $397C + #$397D, // $397D + #$397E, // $397E + #$397F, // $397F + #$3980, // $3980 + #$3981, // $3981 + #$3982, // $3982 + #$3983, // $3983 + #$3984, // $3984 + #$3985, // $3985 + #$3986, // $3986 + #$3987, // $3987 + #$3988, // $3988 + #$3989, // $3989 + #$398A, // $398A + #$398B, // $398B + #$398C, // $398C + #$398D, // $398D + #$398E, // $398E + #$398F, // $398F + #$3990, // $3990 + #$3991, // $3991 + #$3992, // $3992 + #$3993, // $3993 + #$3994, // $3994 + #$3995, // $3995 + #$3996, // $3996 + #$3997, // $3997 + #$3998, // $3998 + #$3999, // $3999 + #$399A, // $399A + #$399B, // $399B + #$399C, // $399C + #$399D, // $399D + #$399E, // $399E + #$399F, // $399F + #$39A0, // $39A0 + #$39A1, // $39A1 + #$39A2, // $39A2 + #$39A3, // $39A3 + #$39A4, // $39A4 + #$39A5, // $39A5 + #$39A6, // $39A6 + #$39A7, // $39A7 + #$39A8, // $39A8 + #$39A9, // $39A9 + #$39AA, // $39AA + #$39AB, // $39AB + #$39AC, // $39AC + #$39AD, // $39AD + #$39AE, // $39AE + #$39AF, // $39AF + #$39B0, // $39B0 + #$39B1, // $39B1 + #$39B2, // $39B2 + #$39B3, // $39B3 + #$39B4, // $39B4 + #$39B5, // $39B5 + #$39B6, // $39B6 + #$39B7, // $39B7 + #$39B8, // $39B8 + #$39B9, // $39B9 + #$39BA, // $39BA + #$39BB, // $39BB + #$39BC, // $39BC + #$39BD, // $39BD + #$39BE, // $39BE + #$39BF, // $39BF + #$39C0, // $39C0 + #$39C1, // $39C1 + #$39C2, // $39C2 + #$39C3, // $39C3 + #$39C4, // $39C4 + #$39C5, // $39C5 + #$39C6, // $39C6 + #$39C7, // $39C7 + #$39C8, // $39C8 + #$39C9, // $39C9 + #$39CA, // $39CA + #$39CB, // $39CB + #$39CC, // $39CC + #$39CD, // $39CD + #$39CE, // $39CE + #$39CF, // $39CF + #$39D0, // $39D0 + #$39D1, // $39D1 + #$39D2, // $39D2 + #$39D3, // $39D3 + #$39D4, // $39D4 + #$39D5, // $39D5 + #$39D6, // $39D6 + #$39D7, // $39D7 + #$39D8, // $39D8 + #$39D9, // $39D9 + #$39DA, // $39DA + #$39DB, // $39DB + #$39DC, // $39DC + #$39DD, // $39DD + #$39DE, // $39DE + #$39DF, // $39DF + #$39E0, // $39E0 + #$39E1, // $39E1 + #$39E2, // $39E2 + #$39E3, // $39E3 + #$39E4, // $39E4 + #$39E5, // $39E5 + #$39E6, // $39E6 + #$39E7, // $39E7 + #$39E8, // $39E8 + #$39E9, // $39E9 + #$39EA, // $39EA + #$39EB, // $39EB + #$39EC, // $39EC + #$39ED, // $39ED + #$39EE, // $39EE + #$39EF, // $39EF + #$39F0, // $39F0 + #$39F1, // $39F1 + #$39F2, // $39F2 + #$39F3, // $39F3 + #$39F4, // $39F4 + #$39F5, // $39F5 + #$39F6, // $39F6 + #$39F7, // $39F7 + #$39F8, // $39F8 + #$39F9, // $39F9 + #$39FA, // $39FA + #$39FB, // $39FB + #$39FC, // $39FC + #$39FD, // $39FD + #$39FE, // $39FE + #$39FF, // $39FF + #$3A00, // $3A00 + #$3A01, // $3A01 + #$3A02, // $3A02 + #$3A03, // $3A03 + #$3A04, // $3A04 + #$3A05, // $3A05 + #$3A06, // $3A06 + #$3A07, // $3A07 + #$3A08, // $3A08 + #$3A09, // $3A09 + #$3A0A, // $3A0A + #$3A0B, // $3A0B + #$3A0C, // $3A0C + #$3A0D, // $3A0D + #$3A0E, // $3A0E + #$3A0F, // $3A0F + #$3A10, // $3A10 + #$3A11, // $3A11 + #$3A12, // $3A12 + #$3A13, // $3A13 + #$3A14, // $3A14 + #$3A15, // $3A15 + #$3A16, // $3A16 + #$3A17, // $3A17 + #$3A18, // $3A18 + #$3A19, // $3A19 + #$3A1A, // $3A1A + #$3A1B, // $3A1B + #$3A1C, // $3A1C + #$3A1D, // $3A1D + #$3A1E, // $3A1E + #$3A1F, // $3A1F + #$3A20, // $3A20 + #$3A21, // $3A21 + #$3A22, // $3A22 + #$3A23, // $3A23 + #$3A24, // $3A24 + #$3A25, // $3A25 + #$3A26, // $3A26 + #$3A27, // $3A27 + #$3A28, // $3A28 + #$3A29, // $3A29 + #$3A2A, // $3A2A + #$3A2B, // $3A2B + #$3A2C, // $3A2C + #$3A2D, // $3A2D + #$3A2E, // $3A2E + #$3A2F, // $3A2F + #$3A30, // $3A30 + #$3A31, // $3A31 + #$3A32, // $3A32 + #$3A33, // $3A33 + #$3A34, // $3A34 + #$3A35, // $3A35 + #$3A36, // $3A36 + #$3A37, // $3A37 + #$3A38, // $3A38 + #$3A39, // $3A39 + #$3A3A, // $3A3A + #$3A3B, // $3A3B + #$3A3C, // $3A3C + #$3A3D, // $3A3D + #$3A3E, // $3A3E + #$3A3F, // $3A3F + #$3A40, // $3A40 + #$3A41, // $3A41 + #$3A42, // $3A42 + #$3A43, // $3A43 + #$3A44, // $3A44 + #$3A45, // $3A45 + #$3A46, // $3A46 + #$3A47, // $3A47 + #$3A48, // $3A48 + #$3A49, // $3A49 + #$3A4A, // $3A4A + #$3A4B, // $3A4B + #$3A4C, // $3A4C + #$3A4D, // $3A4D + #$3A4E, // $3A4E + #$3A4F, // $3A4F + #$3A50, // $3A50 + #$3A51, // $3A51 + #$3A52, // $3A52 + #$3A53, // $3A53 + #$3A54, // $3A54 + #$3A55, // $3A55 + #$3A56, // $3A56 + #$3A57, // $3A57 + #$3A58, // $3A58 + #$3A59, // $3A59 + #$3A5A, // $3A5A + #$3A5B, // $3A5B + #$3A5C, // $3A5C + #$3A5D, // $3A5D + #$3A5E, // $3A5E + #$3A5F, // $3A5F + #$3A60, // $3A60 + #$3A61, // $3A61 + #$3A62, // $3A62 + #$3A63, // $3A63 + #$3A64, // $3A64 + #$3A65, // $3A65 + #$3A66, // $3A66 + #$3A67, // $3A67 + #$3A68, // $3A68 + #$3A69, // $3A69 + #$3A6A, // $3A6A + #$3A6B, // $3A6B + #$3A6C, // $3A6C + #$3A6D, // $3A6D + #$3A6E, // $3A6E + #$3A6F, // $3A6F + #$3A70, // $3A70 + #$3A71, // $3A71 + #$3A72, // $3A72 + #$3A73, // $3A73 + #$3A74, // $3A74 + #$3A75, // $3A75 + #$3A76, // $3A76 + #$3A77, // $3A77 + #$3A78, // $3A78 + #$3A79, // $3A79 + #$3A7A, // $3A7A + #$3A7B, // $3A7B + #$3A7C, // $3A7C + #$3A7D, // $3A7D + #$3A7E, // $3A7E + #$3A7F, // $3A7F + #$3A80, // $3A80 + #$3A81, // $3A81 + #$3A82, // $3A82 + #$3A83, // $3A83 + #$3A84, // $3A84 + #$3A85, // $3A85 + #$3A86, // $3A86 + #$3A87, // $3A87 + #$3A88, // $3A88 + #$3A89, // $3A89 + #$3A8A, // $3A8A + #$3A8B, // $3A8B + #$3A8C, // $3A8C + #$3A8D, // $3A8D + #$3A8E, // $3A8E + #$3A8F, // $3A8F + #$3A90, // $3A90 + #$3A91, // $3A91 + #$3A92, // $3A92 + #$3A93, // $3A93 + #$3A94, // $3A94 + #$3A95, // $3A95 + #$3A96, // $3A96 + #$3A97, // $3A97 + #$3A98, // $3A98 + #$3A99, // $3A99 + #$3A9A, // $3A9A + #$3A9B, // $3A9B + #$3A9C, // $3A9C + #$3A9D, // $3A9D + #$3A9E, // $3A9E + #$3A9F, // $3A9F + #$3AA0, // $3AA0 + #$3AA1, // $3AA1 + #$3AA2, // $3AA2 + #$3AA3, // $3AA3 + #$3AA4, // $3AA4 + #$3AA5, // $3AA5 + #$3AA6, // $3AA6 + #$3AA7, // $3AA7 + #$3AA8, // $3AA8 + #$3AA9, // $3AA9 + #$3AAA, // $3AAA + #$3AAB, // $3AAB + #$3AAC, // $3AAC + #$3AAD, // $3AAD + #$3AAE, // $3AAE + #$3AAF, // $3AAF + #$3AB0, // $3AB0 + #$3AB1, // $3AB1 + #$3AB2, // $3AB2 + #$3AB3, // $3AB3 + #$3AB4, // $3AB4 + #$3AB5, // $3AB5 + #$3AB6, // $3AB6 + #$3AB7, // $3AB7 + #$3AB8, // $3AB8 + #$3AB9, // $3AB9 + #$3ABA, // $3ABA + #$3ABB, // $3ABB + #$3ABC, // $3ABC + #$3ABD, // $3ABD + #$3ABE, // $3ABE + #$3ABF, // $3ABF + #$3AC0, // $3AC0 + #$3AC1, // $3AC1 + #$3AC2, // $3AC2 + #$3AC3, // $3AC3 + #$3AC4, // $3AC4 + #$3AC5, // $3AC5 + #$3AC6, // $3AC6 + #$3AC7, // $3AC7 + #$3AC8, // $3AC8 + #$3AC9, // $3AC9 + #$3ACA, // $3ACA + #$3ACB, // $3ACB + #$3ACC, // $3ACC + #$3ACD, // $3ACD + #$3ACE, // $3ACE + #$3ACF, // $3ACF + #$3AD0, // $3AD0 + #$3AD1, // $3AD1 + #$3AD2, // $3AD2 + #$3AD3, // $3AD3 + #$3AD4, // $3AD4 + #$3AD5, // $3AD5 + #$3AD6, // $3AD6 + #$3AD7, // $3AD7 + #$3AD8, // $3AD8 + #$3AD9, // $3AD9 + #$3ADA, // $3ADA + #$3ADB, // $3ADB + #$3ADC, // $3ADC + #$3ADD, // $3ADD + #$3ADE, // $3ADE + #$3ADF, // $3ADF + #$3AE0, // $3AE0 + #$3AE1, // $3AE1 + #$3AE2, // $3AE2 + #$3AE3, // $3AE3 + #$3AE4, // $3AE4 + #$3AE5, // $3AE5 + #$3AE6, // $3AE6 + #$3AE7, // $3AE7 + #$3AE8, // $3AE8 + #$3AE9, // $3AE9 + #$3AEA, // $3AEA + #$3AEB, // $3AEB + #$3AEC, // $3AEC + #$3AED, // $3AED + #$3AEE, // $3AEE + #$3AEF, // $3AEF + #$3AF0, // $3AF0 + #$3AF1, // $3AF1 + #$3AF2, // $3AF2 + #$3AF3, // $3AF3 + #$3AF4, // $3AF4 + #$3AF5, // $3AF5 + #$3AF6, // $3AF6 + #$3AF7, // $3AF7 + #$3AF8, // $3AF8 + #$3AF9, // $3AF9 + #$3AFA, // $3AFA + #$3AFB, // $3AFB + #$3AFC, // $3AFC + #$3AFD, // $3AFD + #$3AFE, // $3AFE + #$3AFF, // $3AFF + #$3B00, // $3B00 + #$3B01, // $3B01 + #$3B02, // $3B02 + #$3B03, // $3B03 + #$3B04, // $3B04 + #$3B05, // $3B05 + #$3B06, // $3B06 + #$3B07, // $3B07 + #$3B08, // $3B08 + #$3B09, // $3B09 + #$3B0A, // $3B0A + #$3B0B, // $3B0B + #$3B0C, // $3B0C + #$3B0D, // $3B0D + #$3B0E, // $3B0E + #$3B0F, // $3B0F + #$3B10, // $3B10 + #$3B11, // $3B11 + #$3B12, // $3B12 + #$3B13, // $3B13 + #$3B14, // $3B14 + #$3B15, // $3B15 + #$3B16, // $3B16 + #$3B17, // $3B17 + #$3B18, // $3B18 + #$3B19, // $3B19 + #$3B1A, // $3B1A + #$3B1B, // $3B1B + #$3B1C, // $3B1C + #$3B1D, // $3B1D + #$3B1E, // $3B1E + #$3B1F, // $3B1F + #$3B20, // $3B20 + #$3B21, // $3B21 + #$3B22, // $3B22 + #$3B23, // $3B23 + #$3B24, // $3B24 + #$3B25, // $3B25 + #$3B26, // $3B26 + #$3B27, // $3B27 + #$3B28, // $3B28 + #$3B29, // $3B29 + #$3B2A, // $3B2A + #$3B2B, // $3B2B + #$3B2C, // $3B2C + #$3B2D, // $3B2D + #$3B2E, // $3B2E + #$3B2F, // $3B2F + #$3B30, // $3B30 + #$3B31, // $3B31 + #$3B32, // $3B32 + #$3B33, // $3B33 + #$3B34, // $3B34 + #$3B35, // $3B35 + #$3B36, // $3B36 + #$3B37, // $3B37 + #$3B38, // $3B38 + #$3B39, // $3B39 + #$3B3A, // $3B3A + #$3B3B, // $3B3B + #$3B3C, // $3B3C + #$3B3D, // $3B3D + #$3B3E, // $3B3E + #$3B3F, // $3B3F + #$3B40, // $3B40 + #$3B41, // $3B41 + #$3B42, // $3B42 + #$3B43, // $3B43 + #$3B44, // $3B44 + #$3B45, // $3B45 + #$3B46, // $3B46 + #$3B47, // $3B47 + #$3B48, // $3B48 + #$3B49, // $3B49 + #$3B4A, // $3B4A + #$3B4B, // $3B4B + #$3B4C, // $3B4C + #$3B4D, // $3B4D + #$3B4E, // $3B4E + #$3B4F, // $3B4F + #$3B50, // $3B50 + #$3B51, // $3B51 + #$3B52, // $3B52 + #$3B53, // $3B53 + #$3B54, // $3B54 + #$3B55, // $3B55 + #$3B56, // $3B56 + #$3B57, // $3B57 + #$3B58, // $3B58 + #$3B59, // $3B59 + #$3B5A, // $3B5A + #$3B5B, // $3B5B + #$3B5C, // $3B5C + #$3B5D, // $3B5D + #$3B5E, // $3B5E + #$3B5F, // $3B5F + #$3B60, // $3B60 + #$3B61, // $3B61 + #$3B62, // $3B62 + #$3B63, // $3B63 + #$3B64, // $3B64 + #$3B65, // $3B65 + #$3B66, // $3B66 + #$3B67, // $3B67 + #$3B68, // $3B68 + #$3B69, // $3B69 + #$3B6A, // $3B6A + #$3B6B, // $3B6B + #$3B6C, // $3B6C + #$3B6D, // $3B6D + #$3B6E, // $3B6E + #$3B6F, // $3B6F + #$3B70, // $3B70 + #$3B71, // $3B71 + #$3B72, // $3B72 + #$3B73, // $3B73 + #$3B74, // $3B74 + #$3B75, // $3B75 + #$3B76, // $3B76 + #$3B77, // $3B77 + #$3B78, // $3B78 + #$3B79, // $3B79 + #$3B7A, // $3B7A + #$3B7B, // $3B7B + #$3B7C, // $3B7C + #$3B7D, // $3B7D + #$3B7E, // $3B7E + #$3B7F, // $3B7F + #$3B80, // $3B80 + #$3B81, // $3B81 + #$3B82, // $3B82 + #$3B83, // $3B83 + #$3B84, // $3B84 + #$3B85, // $3B85 + #$3B86, // $3B86 + #$3B87, // $3B87 + #$3B88, // $3B88 + #$3B89, // $3B89 + #$3B8A, // $3B8A + #$3B8B, // $3B8B + #$3B8C, // $3B8C + #$3B8D, // $3B8D + #$3B8E, // $3B8E + #$3B8F, // $3B8F + #$3B90, // $3B90 + #$3B91, // $3B91 + #$3B92, // $3B92 + #$3B93, // $3B93 + #$3B94, // $3B94 + #$3B95, // $3B95 + #$3B96, // $3B96 + #$3B97, // $3B97 + #$3B98, // $3B98 + #$3B99, // $3B99 + #$3B9A, // $3B9A + #$3B9B, // $3B9B + #$3B9C, // $3B9C + #$3B9D, // $3B9D + #$3B9E, // $3B9E + #$3B9F, // $3B9F + #$3BA0, // $3BA0 + #$3BA1, // $3BA1 + #$3BA2, // $3BA2 + #$3BA3, // $3BA3 + #$3BA4, // $3BA4 + #$3BA5, // $3BA5 + #$3BA6, // $3BA6 + #$3BA7, // $3BA7 + #$3BA8, // $3BA8 + #$3BA9, // $3BA9 + #$3BAA, // $3BAA + #$3BAB, // $3BAB + #$3BAC, // $3BAC + #$3BAD, // $3BAD + #$3BAE, // $3BAE + #$3BAF, // $3BAF + #$3BB0, // $3BB0 + #$3BB1, // $3BB1 + #$3BB2, // $3BB2 + #$3BB3, // $3BB3 + #$3BB4, // $3BB4 + #$3BB5, // $3BB5 + #$3BB6, // $3BB6 + #$3BB7, // $3BB7 + #$3BB8, // $3BB8 + #$3BB9, // $3BB9 + #$3BBA, // $3BBA + #$3BBB, // $3BBB + #$3BBC, // $3BBC + #$3BBD, // $3BBD + #$3BBE, // $3BBE + #$3BBF, // $3BBF + #$3BC0, // $3BC0 + #$3BC1, // $3BC1 + #$3BC2, // $3BC2 + #$3BC3, // $3BC3 + #$3BC4, // $3BC4 + #$3BC5, // $3BC5 + #$3BC6, // $3BC6 + #$3BC7, // $3BC7 + #$3BC8, // $3BC8 + #$3BC9, // $3BC9 + #$3BCA, // $3BCA + #$3BCB, // $3BCB + #$3BCC, // $3BCC + #$3BCD, // $3BCD + #$3BCE, // $3BCE + #$3BCF, // $3BCF + #$3BD0, // $3BD0 + #$3BD1, // $3BD1 + #$3BD2, // $3BD2 + #$3BD3, // $3BD3 + #$3BD4, // $3BD4 + #$3BD5, // $3BD5 + #$3BD6, // $3BD6 + #$3BD7, // $3BD7 + #$3BD8, // $3BD8 + #$3BD9, // $3BD9 + #$3BDA, // $3BDA + #$3BDB, // $3BDB + #$3BDC, // $3BDC + #$3BDD, // $3BDD + #$3BDE, // $3BDE + #$3BDF, // $3BDF + #$3BE0, // $3BE0 + #$3BE1, // $3BE1 + #$3BE2, // $3BE2 + #$3BE3, // $3BE3 + #$3BE4, // $3BE4 + #$3BE5, // $3BE5 + #$3BE6, // $3BE6 + #$3BE7, // $3BE7 + #$3BE8, // $3BE8 + #$3BE9, // $3BE9 + #$3BEA, // $3BEA + #$3BEB, // $3BEB + #$3BEC, // $3BEC + #$3BED, // $3BED + #$3BEE, // $3BEE + #$3BEF, // $3BEF + #$3BF0, // $3BF0 + #$3BF1, // $3BF1 + #$3BF2, // $3BF2 + #$3BF3, // $3BF3 + #$3BF4, // $3BF4 + #$3BF5, // $3BF5 + #$3BF6, // $3BF6 + #$3BF7, // $3BF7 + #$3BF8, // $3BF8 + #$3BF9, // $3BF9 + #$3BFA, // $3BFA + #$3BFB, // $3BFB + #$3BFC, // $3BFC + #$3BFD, // $3BFD + #$3BFE, // $3BFE + #$3BFF, // $3BFF + #$3C00, // $3C00 + #$3C01, // $3C01 + #$3C02, // $3C02 + #$3C03, // $3C03 + #$3C04, // $3C04 + #$3C05, // $3C05 + #$3C06, // $3C06 + #$3C07, // $3C07 + #$3C08, // $3C08 + #$3C09, // $3C09 + #$3C0A, // $3C0A + #$3C0B, // $3C0B + #$3C0C, // $3C0C + #$3C0D, // $3C0D + #$3C0E, // $3C0E + #$3C0F, // $3C0F + #$3C10, // $3C10 + #$3C11, // $3C11 + #$3C12, // $3C12 + #$3C13, // $3C13 + #$3C14, // $3C14 + #$3C15, // $3C15 + #$3C16, // $3C16 + #$3C17, // $3C17 + #$3C18, // $3C18 + #$3C19, // $3C19 + #$3C1A, // $3C1A + #$3C1B, // $3C1B + #$3C1C, // $3C1C + #$3C1D, // $3C1D + #$3C1E, // $3C1E + #$3C1F, // $3C1F + #$3C20, // $3C20 + #$3C21, // $3C21 + #$3C22, // $3C22 + #$3C23, // $3C23 + #$3C24, // $3C24 + #$3C25, // $3C25 + #$3C26, // $3C26 + #$3C27, // $3C27 + #$3C28, // $3C28 + #$3C29, // $3C29 + #$3C2A, // $3C2A + #$3C2B, // $3C2B + #$3C2C, // $3C2C + #$3C2D, // $3C2D + #$3C2E, // $3C2E + #$3C2F, // $3C2F + #$3C30, // $3C30 + #$3C31, // $3C31 + #$3C32, // $3C32 + #$3C33, // $3C33 + #$3C34, // $3C34 + #$3C35, // $3C35 + #$3C36, // $3C36 + #$3C37, // $3C37 + #$3C38, // $3C38 + #$3C39, // $3C39 + #$3C3A, // $3C3A + #$3C3B, // $3C3B + #$3C3C, // $3C3C + #$3C3D, // $3C3D + #$3C3E, // $3C3E + #$3C3F, // $3C3F + #$3C40, // $3C40 + #$3C41, // $3C41 + #$3C42, // $3C42 + #$3C43, // $3C43 + #$3C44, // $3C44 + #$3C45, // $3C45 + #$3C46, // $3C46 + #$3C47, // $3C47 + #$3C48, // $3C48 + #$3C49, // $3C49 + #$3C4A, // $3C4A + #$3C4B, // $3C4B + #$3C4C, // $3C4C + #$3C4D, // $3C4D + #$3C4E, // $3C4E + #$3C4F, // $3C4F + #$3C50, // $3C50 + #$3C51, // $3C51 + #$3C52, // $3C52 + #$3C53, // $3C53 + #$3C54, // $3C54 + #$3C55, // $3C55 + #$3C56, // $3C56 + #$3C57, // $3C57 + #$3C58, // $3C58 + #$3C59, // $3C59 + #$3C5A, // $3C5A + #$3C5B, // $3C5B + #$3C5C, // $3C5C + #$3C5D, // $3C5D + #$3C5E, // $3C5E + #$3C5F, // $3C5F + #$3C60, // $3C60 + #$3C61, // $3C61 + #$3C62, // $3C62 + #$3C63, // $3C63 + #$3C64, // $3C64 + #$3C65, // $3C65 + #$3C66, // $3C66 + #$3C67, // $3C67 + #$3C68, // $3C68 + #$3C69, // $3C69 + #$3C6A, // $3C6A + #$3C6B, // $3C6B + #$3C6C, // $3C6C + #$3C6D, // $3C6D + #$3C6E, // $3C6E + #$3C6F, // $3C6F + #$3C70, // $3C70 + #$3C71, // $3C71 + #$3C72, // $3C72 + #$3C73, // $3C73 + #$3C74, // $3C74 + #$3C75, // $3C75 + #$3C76, // $3C76 + #$3C77, // $3C77 + #$3C78, // $3C78 + #$3C79, // $3C79 + #$3C7A, // $3C7A + #$3C7B, // $3C7B + #$3C7C, // $3C7C + #$3C7D, // $3C7D + #$3C7E, // $3C7E + #$3C7F, // $3C7F + #$3C80, // $3C80 + #$3C81, // $3C81 + #$3C82, // $3C82 + #$3C83, // $3C83 + #$3C84, // $3C84 + #$3C85, // $3C85 + #$3C86, // $3C86 + #$3C87, // $3C87 + #$3C88, // $3C88 + #$3C89, // $3C89 + #$3C8A, // $3C8A + #$3C8B, // $3C8B + #$3C8C, // $3C8C + #$3C8D, // $3C8D + #$3C8E, // $3C8E + #$3C8F, // $3C8F + #$3C90, // $3C90 + #$3C91, // $3C91 + #$3C92, // $3C92 + #$3C93, // $3C93 + #$3C94, // $3C94 + #$3C95, // $3C95 + #$3C96, // $3C96 + #$3C97, // $3C97 + #$3C98, // $3C98 + #$3C99, // $3C99 + #$3C9A, // $3C9A + #$3C9B, // $3C9B + #$3C9C, // $3C9C + #$3C9D, // $3C9D + #$3C9E, // $3C9E + #$3C9F, // $3C9F + #$3CA0, // $3CA0 + #$3CA1, // $3CA1 + #$3CA2, // $3CA2 + #$3CA3, // $3CA3 + #$3CA4, // $3CA4 + #$3CA5, // $3CA5 + #$3CA6, // $3CA6 + #$3CA7, // $3CA7 + #$3CA8, // $3CA8 + #$3CA9, // $3CA9 + #$3CAA, // $3CAA + #$3CAB, // $3CAB + #$3CAC, // $3CAC + #$3CAD, // $3CAD + #$3CAE, // $3CAE + #$3CAF, // $3CAF + #$3CB0, // $3CB0 + #$3CB1, // $3CB1 + #$3CB2, // $3CB2 + #$3CB3, // $3CB3 + #$3CB4, // $3CB4 + #$3CB5, // $3CB5 + #$3CB6, // $3CB6 + #$3CB7, // $3CB7 + #$3CB8, // $3CB8 + #$3CB9, // $3CB9 + #$3CBA, // $3CBA + #$3CBB, // $3CBB + #$3CBC, // $3CBC + #$3CBD, // $3CBD + #$3CBE, // $3CBE + #$3CBF, // $3CBF + #$3CC0, // $3CC0 + #$3CC1, // $3CC1 + #$3CC2, // $3CC2 + #$3CC3, // $3CC3 + #$3CC4, // $3CC4 + #$3CC5, // $3CC5 + #$3CC6, // $3CC6 + #$3CC7, // $3CC7 + #$3CC8, // $3CC8 + #$3CC9, // $3CC9 + #$3CCA, // $3CCA + #$3CCB, // $3CCB + #$3CCC, // $3CCC + #$3CCD, // $3CCD + #$3CCE, // $3CCE + #$3CCF, // $3CCF + #$3CD0, // $3CD0 + #$3CD1, // $3CD1 + #$3CD2, // $3CD2 + #$3CD3, // $3CD3 + #$3CD4, // $3CD4 + #$3CD5, // $3CD5 + #$3CD6, // $3CD6 + #$3CD7, // $3CD7 + #$3CD8, // $3CD8 + #$3CD9, // $3CD9 + #$3CDA, // $3CDA + #$3CDB, // $3CDB + #$3CDC, // $3CDC + #$3CDD, // $3CDD + #$3CDE, // $3CDE + #$3CDF, // $3CDF + #$3CE0, // $3CE0 + #$3CE1, // $3CE1 + #$3CE2, // $3CE2 + #$3CE3, // $3CE3 + #$3CE4, // $3CE4 + #$3CE5, // $3CE5 + #$3CE6, // $3CE6 + #$3CE7, // $3CE7 + #$3CE8, // $3CE8 + #$3CE9, // $3CE9 + #$3CEA, // $3CEA + #$3CEB, // $3CEB + #$3CEC, // $3CEC + #$3CED, // $3CED + #$3CEE, // $3CEE + #$3CEF, // $3CEF + #$3CF0, // $3CF0 + #$3CF1, // $3CF1 + #$3CF2, // $3CF2 + #$3CF3, // $3CF3 + #$3CF4, // $3CF4 + #$3CF5, // $3CF5 + #$3CF6, // $3CF6 + #$3CF7, // $3CF7 + #$3CF8, // $3CF8 + #$3CF9, // $3CF9 + #$3CFA, // $3CFA + #$3CFB, // $3CFB + #$3CFC, // $3CFC + #$3CFD, // $3CFD + #$3CFE, // $3CFE + #$3CFF, // $3CFF + #$3D00, // $3D00 + #$3D01, // $3D01 + #$3D02, // $3D02 + #$3D03, // $3D03 + #$3D04, // $3D04 + #$3D05, // $3D05 + #$3D06, // $3D06 + #$3D07, // $3D07 + #$3D08, // $3D08 + #$3D09, // $3D09 + #$3D0A, // $3D0A + #$3D0B, // $3D0B + #$3D0C, // $3D0C + #$3D0D, // $3D0D + #$3D0E, // $3D0E + #$3D0F, // $3D0F + #$3D10, // $3D10 + #$3D11, // $3D11 + #$3D12, // $3D12 + #$3D13, // $3D13 + #$3D14, // $3D14 + #$3D15, // $3D15 + #$3D16, // $3D16 + #$3D17, // $3D17 + #$3D18, // $3D18 + #$3D19, // $3D19 + #$3D1A, // $3D1A + #$3D1B, // $3D1B + #$3D1C, // $3D1C + #$3D1D, // $3D1D + #$3D1E, // $3D1E + #$3D1F, // $3D1F + #$3D20, // $3D20 + #$3D21, // $3D21 + #$3D22, // $3D22 + #$3D23, // $3D23 + #$3D24, // $3D24 + #$3D25, // $3D25 + #$3D26, // $3D26 + #$3D27, // $3D27 + #$3D28, // $3D28 + #$3D29, // $3D29 + #$3D2A, // $3D2A + #$3D2B, // $3D2B + #$3D2C, // $3D2C + #$3D2D, // $3D2D + #$3D2E, // $3D2E + #$3D2F, // $3D2F + #$3D30, // $3D30 + #$3D31, // $3D31 + #$3D32, // $3D32 + #$3D33, // $3D33 + #$3D34, // $3D34 + #$3D35, // $3D35 + #$3D36, // $3D36 + #$3D37, // $3D37 + #$3D38, // $3D38 + #$3D39, // $3D39 + #$3D3A, // $3D3A + #$3D3B, // $3D3B + #$3D3C, // $3D3C + #$3D3D, // $3D3D + #$3D3E, // $3D3E + #$3D3F, // $3D3F + #$3D40, // $3D40 + #$3D41, // $3D41 + #$3D42, // $3D42 + #$3D43, // $3D43 + #$3D44, // $3D44 + #$3D45, // $3D45 + #$3D46, // $3D46 + #$3D47, // $3D47 + #$3D48, // $3D48 + #$3D49, // $3D49 + #$3D4A, // $3D4A + #$3D4B, // $3D4B + #$3D4C, // $3D4C + #$3D4D, // $3D4D + #$3D4E, // $3D4E + #$3D4F, // $3D4F + #$3D50, // $3D50 + #$3D51, // $3D51 + #$3D52, // $3D52 + #$3D53, // $3D53 + #$3D54, // $3D54 + #$3D55, // $3D55 + #$3D56, // $3D56 + #$3D57, // $3D57 + #$3D58, // $3D58 + #$3D59, // $3D59 + #$3D5A, // $3D5A + #$3D5B, // $3D5B + #$3D5C, // $3D5C + #$3D5D, // $3D5D + #$3D5E, // $3D5E + #$3D5F, // $3D5F + #$3D60, // $3D60 + #$3D61, // $3D61 + #$3D62, // $3D62 + #$3D63, // $3D63 + #$3D64, // $3D64 + #$3D65, // $3D65 + #$3D66, // $3D66 + #$3D67, // $3D67 + #$3D68, // $3D68 + #$3D69, // $3D69 + #$3D6A, // $3D6A + #$3D6B, // $3D6B + #$3D6C, // $3D6C + #$3D6D, // $3D6D + #$3D6E, // $3D6E + #$3D6F, // $3D6F + #$3D70, // $3D70 + #$3D71, // $3D71 + #$3D72, // $3D72 + #$3D73, // $3D73 + #$3D74, // $3D74 + #$3D75, // $3D75 + #$3D76, // $3D76 + #$3D77, // $3D77 + #$3D78, // $3D78 + #$3D79, // $3D79 + #$3D7A, // $3D7A + #$3D7B, // $3D7B + #$3D7C, // $3D7C + #$3D7D, // $3D7D + #$3D7E, // $3D7E + #$3D7F, // $3D7F + #$3D80, // $3D80 + #$3D81, // $3D81 + #$3D82, // $3D82 + #$3D83, // $3D83 + #$3D84, // $3D84 + #$3D85, // $3D85 + #$3D86, // $3D86 + #$3D87, // $3D87 + #$3D88, // $3D88 + #$3D89, // $3D89 + #$3D8A, // $3D8A + #$3D8B, // $3D8B + #$3D8C, // $3D8C + #$3D8D, // $3D8D + #$3D8E, // $3D8E + #$3D8F, // $3D8F + #$3D90, // $3D90 + #$3D91, // $3D91 + #$3D92, // $3D92 + #$3D93, // $3D93 + #$3D94, // $3D94 + #$3D95, // $3D95 + #$3D96, // $3D96 + #$3D97, // $3D97 + #$3D98, // $3D98 + #$3D99, // $3D99 + #$3D9A, // $3D9A + #$3D9B, // $3D9B + #$3D9C, // $3D9C + #$3D9D, // $3D9D + #$3D9E, // $3D9E + #$3D9F, // $3D9F + #$3DA0, // $3DA0 + #$3DA1, // $3DA1 + #$3DA2, // $3DA2 + #$3DA3, // $3DA3 + #$3DA4, // $3DA4 + #$3DA5, // $3DA5 + #$3DA6, // $3DA6 + #$3DA7, // $3DA7 + #$3DA8, // $3DA8 + #$3DA9, // $3DA9 + #$3DAA, // $3DAA + #$3DAB, // $3DAB + #$3DAC, // $3DAC + #$3DAD, // $3DAD + #$3DAE, // $3DAE + #$3DAF, // $3DAF + #$3DB0, // $3DB0 + #$3DB1, // $3DB1 + #$3DB2, // $3DB2 + #$3DB3, // $3DB3 + #$3DB4, // $3DB4 + #$3DB5, // $3DB5 + #$3DB6, // $3DB6 + #$3DB7, // $3DB7 + #$3DB8, // $3DB8 + #$3DB9, // $3DB9 + #$3DBA, // $3DBA + #$3DBB, // $3DBB + #$3DBC, // $3DBC + #$3DBD, // $3DBD + #$3DBE, // $3DBE + #$3DBF, // $3DBF + #$3DC0, // $3DC0 + #$3DC1, // $3DC1 + #$3DC2, // $3DC2 + #$3DC3, // $3DC3 + #$3DC4, // $3DC4 + #$3DC5, // $3DC5 + #$3DC6, // $3DC6 + #$3DC7, // $3DC7 + #$3DC8, // $3DC8 + #$3DC9, // $3DC9 + #$3DCA, // $3DCA + #$3DCB, // $3DCB + #$3DCC, // $3DCC + #$3DCD, // $3DCD + #$3DCE, // $3DCE + #$3DCF, // $3DCF + #$3DD0, // $3DD0 + #$3DD1, // $3DD1 + #$3DD2, // $3DD2 + #$3DD3, // $3DD3 + #$3DD4, // $3DD4 + #$3DD5, // $3DD5 + #$3DD6, // $3DD6 + #$3DD7, // $3DD7 + #$3DD8, // $3DD8 + #$3DD9, // $3DD9 + #$3DDA, // $3DDA + #$3DDB, // $3DDB + #$3DDC, // $3DDC + #$3DDD, // $3DDD + #$3DDE, // $3DDE + #$3DDF, // $3DDF + #$3DE0, // $3DE0 + #$3DE1, // $3DE1 + #$3DE2, // $3DE2 + #$3DE3, // $3DE3 + #$3DE4, // $3DE4 + #$3DE5, // $3DE5 + #$3DE6, // $3DE6 + #$3DE7, // $3DE7 + #$3DE8, // $3DE8 + #$3DE9, // $3DE9 + #$3DEA, // $3DEA + #$3DEB, // $3DEB + #$3DEC, // $3DEC + #$3DED, // $3DED + #$3DEE, // $3DEE + #$3DEF, // $3DEF + #$3DF0, // $3DF0 + #$3DF1, // $3DF1 + #$3DF2, // $3DF2 + #$3DF3, // $3DF3 + #$3DF4, // $3DF4 + #$3DF5, // $3DF5 + #$3DF6, // $3DF6 + #$3DF7, // $3DF7 + #$3DF8, // $3DF8 + #$3DF9, // $3DF9 + #$3DFA, // $3DFA + #$3DFB, // $3DFB + #$3DFC, // $3DFC + #$3DFD, // $3DFD + #$3DFE, // $3DFE + #$3DFF, // $3DFF + #$3E00, // $3E00 + #$3E01, // $3E01 + #$3E02, // $3E02 + #$3E03, // $3E03 + #$3E04, // $3E04 + #$3E05, // $3E05 + #$3E06, // $3E06 + #$3E07, // $3E07 + #$3E08, // $3E08 + #$3E09, // $3E09 + #$3E0A, // $3E0A + #$3E0B, // $3E0B + #$3E0C, // $3E0C + #$3E0D, // $3E0D + #$3E0E, // $3E0E + #$3E0F, // $3E0F + #$3E10, // $3E10 + #$3E11, // $3E11 + #$3E12, // $3E12 + #$3E13, // $3E13 + #$3E14, // $3E14 + #$3E15, // $3E15 + #$3E16, // $3E16 + #$3E17, // $3E17 + #$3E18, // $3E18 + #$3E19, // $3E19 + #$3E1A, // $3E1A + #$3E1B, // $3E1B + #$3E1C, // $3E1C + #$3E1D, // $3E1D + #$3E1E, // $3E1E + #$3E1F, // $3E1F + #$3E20, // $3E20 + #$3E21, // $3E21 + #$3E22, // $3E22 + #$3E23, // $3E23 + #$3E24, // $3E24 + #$3E25, // $3E25 + #$3E26, // $3E26 + #$3E27, // $3E27 + #$3E28, // $3E28 + #$3E29, // $3E29 + #$3E2A, // $3E2A + #$3E2B, // $3E2B + #$3E2C, // $3E2C + #$3E2D, // $3E2D + #$3E2E, // $3E2E + #$3E2F, // $3E2F + #$3E30, // $3E30 + #$3E31, // $3E31 + #$3E32, // $3E32 + #$3E33, // $3E33 + #$3E34, // $3E34 + #$3E35, // $3E35 + #$3E36, // $3E36 + #$3E37, // $3E37 + #$3E38, // $3E38 + #$3E39, // $3E39 + #$3E3A, // $3E3A + #$3E3B, // $3E3B + #$3E3C, // $3E3C + #$3E3D, // $3E3D + #$3E3E, // $3E3E + #$3E3F, // $3E3F + #$3E40, // $3E40 + #$3E41, // $3E41 + #$3E42, // $3E42 + #$3E43, // $3E43 + #$3E44, // $3E44 + #$3E45, // $3E45 + #$3E46, // $3E46 + #$3E47, // $3E47 + #$3E48, // $3E48 + #$3E49, // $3E49 + #$3E4A, // $3E4A + #$3E4B, // $3E4B + #$3E4C, // $3E4C + #$3E4D, // $3E4D + #$3E4E, // $3E4E + #$3E4F, // $3E4F + #$3E50, // $3E50 + #$3E51, // $3E51 + #$3E52, // $3E52 + #$3E53, // $3E53 + #$3E54, // $3E54 + #$3E55, // $3E55 + #$3E56, // $3E56 + #$3E57, // $3E57 + #$3E58, // $3E58 + #$3E59, // $3E59 + #$3E5A, // $3E5A + #$3E5B, // $3E5B + #$3E5C, // $3E5C + #$3E5D, // $3E5D + #$3E5E, // $3E5E + #$3E5F, // $3E5F + #$3E60, // $3E60 + #$3E61, // $3E61 + #$3E62, // $3E62 + #$3E63, // $3E63 + #$3E64, // $3E64 + #$3E65, // $3E65 + #$3E66, // $3E66 + #$3E67, // $3E67 + #$3E68, // $3E68 + #$3E69, // $3E69 + #$3E6A, // $3E6A + #$3E6B, // $3E6B + #$3E6C, // $3E6C + #$3E6D, // $3E6D + #$3E6E, // $3E6E + #$3E6F, // $3E6F + #$3E70, // $3E70 + #$3E71, // $3E71 + #$3E72, // $3E72 + #$3E73, // $3E73 + #$3E74, // $3E74 + #$3E75, // $3E75 + #$3E76, // $3E76 + #$3E77, // $3E77 + #$3E78, // $3E78 + #$3E79, // $3E79 + #$3E7A, // $3E7A + #$3E7B, // $3E7B + #$3E7C, // $3E7C + #$3E7D, // $3E7D + #$3E7E, // $3E7E + #$3E7F, // $3E7F + #$3E80, // $3E80 + #$3E81, // $3E81 + #$3E82, // $3E82 + #$3E83, // $3E83 + #$3E84, // $3E84 + #$3E85, // $3E85 + #$3E86, // $3E86 + #$3E87, // $3E87 + #$3E88, // $3E88 + #$3E89, // $3E89 + #$3E8A, // $3E8A + #$3E8B, // $3E8B + #$3E8C, // $3E8C + #$3E8D, // $3E8D + #$3E8E, // $3E8E + #$3E8F, // $3E8F + #$3E90, // $3E90 + #$3E91, // $3E91 + #$3E92, // $3E92 + #$3E93, // $3E93 + #$3E94, // $3E94 + #$3E95, // $3E95 + #$3E96, // $3E96 + #$3E97, // $3E97 + #$3E98, // $3E98 + #$3E99, // $3E99 + #$3E9A, // $3E9A + #$3E9B, // $3E9B + #$3E9C, // $3E9C + #$3E9D, // $3E9D + #$3E9E, // $3E9E + #$3E9F, // $3E9F + #$3EA0, // $3EA0 + #$3EA1, // $3EA1 + #$3EA2, // $3EA2 + #$3EA3, // $3EA3 + #$3EA4, // $3EA4 + #$3EA5, // $3EA5 + #$3EA6, // $3EA6 + #$3EA7, // $3EA7 + #$3EA8, // $3EA8 + #$3EA9, // $3EA9 + #$3EAA, // $3EAA + #$3EAB, // $3EAB + #$3EAC, // $3EAC + #$3EAD, // $3EAD + #$3EAE, // $3EAE + #$3EAF, // $3EAF + #$3EB0, // $3EB0 + #$3EB1, // $3EB1 + #$3EB2, // $3EB2 + #$3EB3, // $3EB3 + #$3EB4, // $3EB4 + #$3EB5, // $3EB5 + #$3EB6, // $3EB6 + #$3EB7, // $3EB7 + #$3EB8, // $3EB8 + #$3EB9, // $3EB9 + #$3EBA, // $3EBA + #$3EBB, // $3EBB + #$3EBC, // $3EBC + #$3EBD, // $3EBD + #$3EBE, // $3EBE + #$3EBF, // $3EBF + #$3EC0, // $3EC0 + #$3EC1, // $3EC1 + #$3EC2, // $3EC2 + #$3EC3, // $3EC3 + #$3EC4, // $3EC4 + #$3EC5, // $3EC5 + #$3EC6, // $3EC6 + #$3EC7, // $3EC7 + #$3EC8, // $3EC8 + #$3EC9, // $3EC9 + #$3ECA, // $3ECA + #$3ECB, // $3ECB + #$3ECC, // $3ECC + #$3ECD, // $3ECD + #$3ECE, // $3ECE + #$3ECF, // $3ECF + #$3ED0, // $3ED0 + #$3ED1, // $3ED1 + #$3ED2, // $3ED2 + #$3ED3, // $3ED3 + #$3ED4, // $3ED4 + #$3ED5, // $3ED5 + #$3ED6, // $3ED6 + #$3ED7, // $3ED7 + #$3ED8, // $3ED8 + #$3ED9, // $3ED9 + #$3EDA, // $3EDA + #$3EDB, // $3EDB + #$3EDC, // $3EDC + #$3EDD, // $3EDD + #$3EDE, // $3EDE + #$3EDF, // $3EDF + #$3EE0, // $3EE0 + #$3EE1, // $3EE1 + #$3EE2, // $3EE2 + #$3EE3, // $3EE3 + #$3EE4, // $3EE4 + #$3EE5, // $3EE5 + #$3EE6, // $3EE6 + #$3EE7, // $3EE7 + #$3EE8, // $3EE8 + #$3EE9, // $3EE9 + #$3EEA, // $3EEA + #$3EEB, // $3EEB + #$3EEC, // $3EEC + #$3EED, // $3EED + #$3EEE, // $3EEE + #$3EEF, // $3EEF + #$3EF0, // $3EF0 + #$3EF1, // $3EF1 + #$3EF2, // $3EF2 + #$3EF3, // $3EF3 + #$3EF4, // $3EF4 + #$3EF5, // $3EF5 + #$3EF6, // $3EF6 + #$3EF7, // $3EF7 + #$3EF8, // $3EF8 + #$3EF9, // $3EF9 + #$3EFA, // $3EFA + #$3EFB, // $3EFB + #$3EFC, // $3EFC + #$3EFD, // $3EFD + #$3EFE, // $3EFE + #$3EFF, // $3EFF + #$3F00, // $3F00 + #$3F01, // $3F01 + #$3F02, // $3F02 + #$3F03, // $3F03 + #$3F04, // $3F04 + #$3F05, // $3F05 + #$3F06, // $3F06 + #$3F07, // $3F07 + #$3F08, // $3F08 + #$3F09, // $3F09 + #$3F0A, // $3F0A + #$3F0B, // $3F0B + #$3F0C, // $3F0C + #$3F0D, // $3F0D + #$3F0E, // $3F0E + #$3F0F, // $3F0F + #$3F10, // $3F10 + #$3F11, // $3F11 + #$3F12, // $3F12 + #$3F13, // $3F13 + #$3F14, // $3F14 + #$3F15, // $3F15 + #$3F16, // $3F16 + #$3F17, // $3F17 + #$3F18, // $3F18 + #$3F19, // $3F19 + #$3F1A, // $3F1A + #$3F1B, // $3F1B + #$3F1C, // $3F1C + #$3F1D, // $3F1D + #$3F1E, // $3F1E + #$3F1F, // $3F1F + #$3F20, // $3F20 + #$3F21, // $3F21 + #$3F22, // $3F22 + #$3F23, // $3F23 + #$3F24, // $3F24 + #$3F25, // $3F25 + #$3F26, // $3F26 + #$3F27, // $3F27 + #$3F28, // $3F28 + #$3F29, // $3F29 + #$3F2A, // $3F2A + #$3F2B, // $3F2B + #$3F2C, // $3F2C + #$3F2D, // $3F2D + #$3F2E, // $3F2E + #$3F2F, // $3F2F + #$3F30, // $3F30 + #$3F31, // $3F31 + #$3F32, // $3F32 + #$3F33, // $3F33 + #$3F34, // $3F34 + #$3F35, // $3F35 + #$3F36, // $3F36 + #$3F37, // $3F37 + #$3F38, // $3F38 + #$3F39, // $3F39 + #$3F3A, // $3F3A + #$3F3B, // $3F3B + #$3F3C, // $3F3C + #$3F3D, // $3F3D + #$3F3E, // $3F3E + #$3F3F, // $3F3F + #$3F40, // $3F40 + #$3F41, // $3F41 + #$3F42, // $3F42 + #$3F43, // $3F43 + #$3F44, // $3F44 + #$3F45, // $3F45 + #$3F46, // $3F46 + #$3F47, // $3F47 + #$3F48, // $3F48 + #$3F49, // $3F49 + #$3F4A, // $3F4A + #$3F4B, // $3F4B + #$3F4C, // $3F4C + #$3F4D, // $3F4D + #$3F4E, // $3F4E + #$3F4F, // $3F4F + #$3F50, // $3F50 + #$3F51, // $3F51 + #$3F52, // $3F52 + #$3F53, // $3F53 + #$3F54, // $3F54 + #$3F55, // $3F55 + #$3F56, // $3F56 + #$3F57, // $3F57 + #$3F58, // $3F58 + #$3F59, // $3F59 + #$3F5A, // $3F5A + #$3F5B, // $3F5B + #$3F5C, // $3F5C + #$3F5D, // $3F5D + #$3F5E, // $3F5E + #$3F5F, // $3F5F + #$3F60, // $3F60 + #$3F61, // $3F61 + #$3F62, // $3F62 + #$3F63, // $3F63 + #$3F64, // $3F64 + #$3F65, // $3F65 + #$3F66, // $3F66 + #$3F67, // $3F67 + #$3F68, // $3F68 + #$3F69, // $3F69 + #$3F6A, // $3F6A + #$3F6B, // $3F6B + #$3F6C, // $3F6C + #$3F6D, // $3F6D + #$3F6E, // $3F6E + #$3F6F, // $3F6F + #$3F70, // $3F70 + #$3F71, // $3F71 + #$3F72, // $3F72 + #$3F73, // $3F73 + #$3F74, // $3F74 + #$3F75, // $3F75 + #$3F76, // $3F76 + #$3F77, // $3F77 + #$3F78, // $3F78 + #$3F79, // $3F79 + #$3F7A, // $3F7A + #$3F7B, // $3F7B + #$3F7C, // $3F7C + #$3F7D, // $3F7D + #$3F7E, // $3F7E + #$3F7F, // $3F7F + #$3F80, // $3F80 + #$3F81, // $3F81 + #$3F82, // $3F82 + #$3F83, // $3F83 + #$3F84, // $3F84 + #$3F85, // $3F85 + #$3F86, // $3F86 + #$3F87, // $3F87 + #$3F88, // $3F88 + #$3F89, // $3F89 + #$3F8A, // $3F8A + #$3F8B, // $3F8B + #$3F8C, // $3F8C + #$3F8D, // $3F8D + #$3F8E, // $3F8E + #$3F8F, // $3F8F + #$3F90, // $3F90 + #$3F91, // $3F91 + #$3F92, // $3F92 + #$3F93, // $3F93 + #$3F94, // $3F94 + #$3F95, // $3F95 + #$3F96, // $3F96 + #$3F97, // $3F97 + #$3F98, // $3F98 + #$3F99, // $3F99 + #$3F9A, // $3F9A + #$3F9B, // $3F9B + #$3F9C, // $3F9C + #$3F9D, // $3F9D + #$3F9E, // $3F9E + #$3F9F, // $3F9F + #$3FA0, // $3FA0 + #$3FA1, // $3FA1 + #$3FA2, // $3FA2 + #$3FA3, // $3FA3 + #$3FA4, // $3FA4 + #$3FA5, // $3FA5 + #$3FA6, // $3FA6 + #$3FA7, // $3FA7 + #$3FA8, // $3FA8 + #$3FA9, // $3FA9 + #$3FAA, // $3FAA + #$3FAB, // $3FAB + #$3FAC, // $3FAC + #$3FAD, // $3FAD + #$3FAE, // $3FAE + #$3FAF, // $3FAF + #$3FB0, // $3FB0 + #$3FB1, // $3FB1 + #$3FB2, // $3FB2 + #$3FB3, // $3FB3 + #$3FB4, // $3FB4 + #$3FB5, // $3FB5 + #$3FB6, // $3FB6 + #$3FB7, // $3FB7 + #$3FB8, // $3FB8 + #$3FB9, // $3FB9 + #$3FBA, // $3FBA + #$3FBB, // $3FBB + #$3FBC, // $3FBC + #$3FBD, // $3FBD + #$3FBE, // $3FBE + #$3FBF, // $3FBF + #$3FC0, // $3FC0 + #$3FC1, // $3FC1 + #$3FC2, // $3FC2 + #$3FC3, // $3FC3 + #$3FC4, // $3FC4 + #$3FC5, // $3FC5 + #$3FC6, // $3FC6 + #$3FC7, // $3FC7 + #$3FC8, // $3FC8 + #$3FC9, // $3FC9 + #$3FCA, // $3FCA + #$3FCB, // $3FCB + #$3FCC, // $3FCC + #$3FCD, // $3FCD + #$3FCE, // $3FCE + #$3FCF, // $3FCF + #$3FD0, // $3FD0 + #$3FD1, // $3FD1 + #$3FD2, // $3FD2 + #$3FD3, // $3FD3 + #$3FD4, // $3FD4 + #$3FD5, // $3FD5 + #$3FD6, // $3FD6 + #$3FD7, // $3FD7 + #$3FD8, // $3FD8 + #$3FD9, // $3FD9 + #$3FDA, // $3FDA + #$3FDB, // $3FDB + #$3FDC, // $3FDC + #$3FDD, // $3FDD + #$3FDE, // $3FDE + #$3FDF, // $3FDF + #$3FE0, // $3FE0 + #$3FE1, // $3FE1 + #$3FE2, // $3FE2 + #$3FE3, // $3FE3 + #$3FE4, // $3FE4 + #$3FE5, // $3FE5 + #$3FE6, // $3FE6 + #$3FE7, // $3FE7 + #$3FE8, // $3FE8 + #$3FE9, // $3FE9 + #$3FEA, // $3FEA + #$3FEB, // $3FEB + #$3FEC, // $3FEC + #$3FED, // $3FED + #$3FEE, // $3FEE + #$3FEF, // $3FEF + #$3FF0, // $3FF0 + #$3FF1, // $3FF1 + #$3FF2, // $3FF2 + #$3FF3, // $3FF3 + #$3FF4, // $3FF4 + #$3FF5, // $3FF5 + #$3FF6, // $3FF6 + #$3FF7, // $3FF7 + #$3FF8, // $3FF8 + #$3FF9, // $3FF9 + #$3FFA, // $3FFA + #$3FFB, // $3FFB + #$3FFC, // $3FFC + #$3FFD, // $3FFD + #$3FFE, // $3FFE + #$3FFF, // $3FFF + #$4000, // $4000 + #$4001, // $4001 + #$4002, // $4002 + #$4003, // $4003 + #$4004, // $4004 + #$4005, // $4005 + #$4006, // $4006 + #$4007, // $4007 + #$4008, // $4008 + #$4009, // $4009 + #$400A, // $400A + #$400B, // $400B + #$400C, // $400C + #$400D, // $400D + #$400E, // $400E + #$400F, // $400F + #$4010, // $4010 + #$4011, // $4011 + #$4012, // $4012 + #$4013, // $4013 + #$4014, // $4014 + #$4015, // $4015 + #$4016, // $4016 + #$4017, // $4017 + #$4018, // $4018 + #$4019, // $4019 + #$401A, // $401A + #$401B, // $401B + #$401C, // $401C + #$401D, // $401D + #$401E, // $401E + #$401F, // $401F + #$4020, // $4020 + #$4021, // $4021 + #$4022, // $4022 + #$4023, // $4023 + #$4024, // $4024 + #$4025, // $4025 + #$4026, // $4026 + #$4027, // $4027 + #$4028, // $4028 + #$4029, // $4029 + #$402A, // $402A + #$402B, // $402B + #$402C, // $402C + #$402D, // $402D + #$402E, // $402E + #$402F, // $402F + #$4030, // $4030 + #$4031, // $4031 + #$4032, // $4032 + #$4033, // $4033 + #$4034, // $4034 + #$4035, // $4035 + #$4036, // $4036 + #$4037, // $4037 + #$4038, // $4038 + #$4039, // $4039 + #$403A, // $403A + #$403B, // $403B + #$403C, // $403C + #$403D, // $403D + #$403E, // $403E + #$403F, // $403F + #$4040, // $4040 + #$4041, // $4041 + #$4042, // $4042 + #$4043, // $4043 + #$4044, // $4044 + #$4045, // $4045 + #$4046, // $4046 + #$4047, // $4047 + #$4048, // $4048 + #$4049, // $4049 + #$404A, // $404A + #$404B, // $404B + #$404C, // $404C + #$404D, // $404D + #$404E, // $404E + #$404F, // $404F + #$4050, // $4050 + #$4051, // $4051 + #$4052, // $4052 + #$4053, // $4053 + #$4054, // $4054 + #$4055, // $4055 + #$4056, // $4056 + #$4057, // $4057 + #$4058, // $4058 + #$4059, // $4059 + #$405A, // $405A + #$405B, // $405B + #$405C, // $405C + #$405D, // $405D + #$405E, // $405E + #$405F, // $405F + #$4060, // $4060 + #$4061, // $4061 + #$4062, // $4062 + #$4063, // $4063 + #$4064, // $4064 + #$4065, // $4065 + #$4066, // $4066 + #$4067, // $4067 + #$4068, // $4068 + #$4069, // $4069 + #$406A, // $406A + #$406B, // $406B + #$406C, // $406C + #$406D, // $406D + #$406E, // $406E + #$406F, // $406F + #$4070, // $4070 + #$4071, // $4071 + #$4072, // $4072 + #$4073, // $4073 + #$4074, // $4074 + #$4075, // $4075 + #$4076, // $4076 + #$4077, // $4077 + #$4078, // $4078 + #$4079, // $4079 + #$407A, // $407A + #$407B, // $407B + #$407C, // $407C + #$407D, // $407D + #$407E, // $407E + #$407F, // $407F + #$4080, // $4080 + #$4081, // $4081 + #$4082, // $4082 + #$4083, // $4083 + #$4084, // $4084 + #$4085, // $4085 + #$4086, // $4086 + #$4087, // $4087 + #$4088, // $4088 + #$4089, // $4089 + #$408A, // $408A + #$408B, // $408B + #$408C, // $408C + #$408D, // $408D + #$408E, // $408E + #$408F, // $408F + #$4090, // $4090 + #$4091, // $4091 + #$4092, // $4092 + #$4093, // $4093 + #$4094, // $4094 + #$4095, // $4095 + #$4096, // $4096 + #$4097, // $4097 + #$4098, // $4098 + #$4099, // $4099 + #$409A, // $409A + #$409B, // $409B + #$409C, // $409C + #$409D, // $409D + #$409E, // $409E + #$409F, // $409F + #$40A0, // $40A0 + #$40A1, // $40A1 + #$40A2, // $40A2 + #$40A3, // $40A3 + #$40A4, // $40A4 + #$40A5, // $40A5 + #$40A6, // $40A6 + #$40A7, // $40A7 + #$40A8, // $40A8 + #$40A9, // $40A9 + #$40AA, // $40AA + #$40AB, // $40AB + #$40AC, // $40AC + #$40AD, // $40AD + #$40AE, // $40AE + #$40AF, // $40AF + #$40B0, // $40B0 + #$40B1, // $40B1 + #$40B2, // $40B2 + #$40B3, // $40B3 + #$40B4, // $40B4 + #$40B5, // $40B5 + #$40B6, // $40B6 + #$40B7, // $40B7 + #$40B8, // $40B8 + #$40B9, // $40B9 + #$40BA, // $40BA + #$40BB, // $40BB + #$40BC, // $40BC + #$40BD, // $40BD + #$40BE, // $40BE + #$40BF, // $40BF + #$40C0, // $40C0 + #$40C1, // $40C1 + #$40C2, // $40C2 + #$40C3, // $40C3 + #$40C4, // $40C4 + #$40C5, // $40C5 + #$40C6, // $40C6 + #$40C7, // $40C7 + #$40C8, // $40C8 + #$40C9, // $40C9 + #$40CA, // $40CA + #$40CB, // $40CB + #$40CC, // $40CC + #$40CD, // $40CD + #$40CE, // $40CE + #$40CF, // $40CF + #$40D0, // $40D0 + #$40D1, // $40D1 + #$40D2, // $40D2 + #$40D3, // $40D3 + #$40D4, // $40D4 + #$40D5, // $40D5 + #$40D6, // $40D6 + #$40D7, // $40D7 + #$40D8, // $40D8 + #$40D9, // $40D9 + #$40DA, // $40DA + #$40DB, // $40DB + #$40DC, // $40DC + #$40DD, // $40DD + #$40DE, // $40DE + #$40DF, // $40DF + #$40E0, // $40E0 + #$40E1, // $40E1 + #$40E2, // $40E2 + #$40E3, // $40E3 + #$40E4, // $40E4 + #$40E5, // $40E5 + #$40E6, // $40E6 + #$40E7, // $40E7 + #$40E8, // $40E8 + #$40E9, // $40E9 + #$40EA, // $40EA + #$40EB, // $40EB + #$40EC, // $40EC + #$40ED, // $40ED + #$40EE, // $40EE + #$40EF, // $40EF + #$40F0, // $40F0 + #$40F1, // $40F1 + #$40F2, // $40F2 + #$40F3, // $40F3 + #$40F4, // $40F4 + #$40F5, // $40F5 + #$40F6, // $40F6 + #$40F7, // $40F7 + #$40F8, // $40F8 + #$40F9, // $40F9 + #$40FA, // $40FA + #$40FB, // $40FB + #$40FC, // $40FC + #$40FD, // $40FD + #$40FE, // $40FE + #$40FF, // $40FF + #$4100, // $4100 + #$4101, // $4101 + #$4102, // $4102 + #$4103, // $4103 + #$4104, // $4104 + #$4105, // $4105 + #$4106, // $4106 + #$4107, // $4107 + #$4108, // $4108 + #$4109, // $4109 + #$410A, // $410A + #$410B, // $410B + #$410C, // $410C + #$410D, // $410D + #$410E, // $410E + #$410F, // $410F + #$4110, // $4110 + #$4111, // $4111 + #$4112, // $4112 + #$4113, // $4113 + #$4114, // $4114 + #$4115, // $4115 + #$4116, // $4116 + #$4117, // $4117 + #$4118, // $4118 + #$4119, // $4119 + #$411A, // $411A + #$411B, // $411B + #$411C, // $411C + #$411D, // $411D + #$411E, // $411E + #$411F, // $411F + #$4120, // $4120 + #$4121, // $4121 + #$4122, // $4122 + #$4123, // $4123 + #$4124, // $4124 + #$4125, // $4125 + #$4126, // $4126 + #$4127, // $4127 + #$4128, // $4128 + #$4129, // $4129 + #$412A, // $412A + #$412B, // $412B + #$412C, // $412C + #$412D, // $412D + #$412E, // $412E + #$412F, // $412F + #$4130, // $4130 + #$4131, // $4131 + #$4132, // $4132 + #$4133, // $4133 + #$4134, // $4134 + #$4135, // $4135 + #$4136, // $4136 + #$4137, // $4137 + #$4138, // $4138 + #$4139, // $4139 + #$413A, // $413A + #$413B, // $413B + #$413C, // $413C + #$413D, // $413D + #$413E, // $413E + #$413F, // $413F + #$4140, // $4140 + #$4141, // $4141 + #$4142, // $4142 + #$4143, // $4143 + #$4144, // $4144 + #$4145, // $4145 + #$4146, // $4146 + #$4147, // $4147 + #$4148, // $4148 + #$4149, // $4149 + #$414A, // $414A + #$414B, // $414B + #$414C, // $414C + #$414D, // $414D + #$414E, // $414E + #$414F, // $414F + #$4150, // $4150 + #$4151, // $4151 + #$4152, // $4152 + #$4153, // $4153 + #$4154, // $4154 + #$4155, // $4155 + #$4156, // $4156 + #$4157, // $4157 + #$4158, // $4158 + #$4159, // $4159 + #$415A, // $415A + #$415B, // $415B + #$415C, // $415C + #$415D, // $415D + #$415E, // $415E + #$415F, // $415F + #$4160, // $4160 + #$4161, // $4161 + #$4162, // $4162 + #$4163, // $4163 + #$4164, // $4164 + #$4165, // $4165 + #$4166, // $4166 + #$4167, // $4167 + #$4168, // $4168 + #$4169, // $4169 + #$416A, // $416A + #$416B, // $416B + #$416C, // $416C + #$416D, // $416D + #$416E, // $416E + #$416F, // $416F + #$4170, // $4170 + #$4171, // $4171 + #$4172, // $4172 + #$4173, // $4173 + #$4174, // $4174 + #$4175, // $4175 + #$4176, // $4176 + #$4177, // $4177 + #$4178, // $4178 + #$4179, // $4179 + #$417A, // $417A + #$417B, // $417B + #$417C, // $417C + #$417D, // $417D + #$417E, // $417E + #$417F, // $417F + #$4180, // $4180 + #$4181, // $4181 + #$4182, // $4182 + #$4183, // $4183 + #$4184, // $4184 + #$4185, // $4185 + #$4186, // $4186 + #$4187, // $4187 + #$4188, // $4188 + #$4189, // $4189 + #$418A, // $418A + #$418B, // $418B + #$418C, // $418C + #$418D, // $418D + #$418E, // $418E + #$418F, // $418F + #$4190, // $4190 + #$4191, // $4191 + #$4192, // $4192 + #$4193, // $4193 + #$4194, // $4194 + #$4195, // $4195 + #$4196, // $4196 + #$4197, // $4197 + #$4198, // $4198 + #$4199, // $4199 + #$419A, // $419A + #$419B, // $419B + #$419C, // $419C + #$419D, // $419D + #$419E, // $419E + #$419F, // $419F + #$41A0, // $41A0 + #$41A1, // $41A1 + #$41A2, // $41A2 + #$41A3, // $41A3 + #$41A4, // $41A4 + #$41A5, // $41A5 + #$41A6, // $41A6 + #$41A7, // $41A7 + #$41A8, // $41A8 + #$41A9, // $41A9 + #$41AA, // $41AA + #$41AB, // $41AB + #$41AC, // $41AC + #$41AD, // $41AD + #$41AE, // $41AE + #$41AF, // $41AF + #$41B0, // $41B0 + #$41B1, // $41B1 + #$41B2, // $41B2 + #$41B3, // $41B3 + #$41B4, // $41B4 + #$41B5, // $41B5 + #$41B6, // $41B6 + #$41B7, // $41B7 + #$41B8, // $41B8 + #$41B9, // $41B9 + #$41BA, // $41BA + #$41BB, // $41BB + #$41BC, // $41BC + #$41BD, // $41BD + #$41BE, // $41BE + #$41BF, // $41BF + #$41C0, // $41C0 + #$41C1, // $41C1 + #$41C2, // $41C2 + #$41C3, // $41C3 + #$41C4, // $41C4 + #$41C5, // $41C5 + #$41C6, // $41C6 + #$41C7, // $41C7 + #$41C8, // $41C8 + #$41C9, // $41C9 + #$41CA, // $41CA + #$41CB, // $41CB + #$41CC, // $41CC + #$41CD, // $41CD + #$41CE, // $41CE + #$41CF, // $41CF + #$41D0, // $41D0 + #$41D1, // $41D1 + #$41D2, // $41D2 + #$41D3, // $41D3 + #$41D4, // $41D4 + #$41D5, // $41D5 + #$41D6, // $41D6 + #$41D7, // $41D7 + #$41D8, // $41D8 + #$41D9, // $41D9 + #$41DA, // $41DA + #$41DB, // $41DB + #$41DC, // $41DC + #$41DD, // $41DD + #$41DE, // $41DE + #$41DF, // $41DF + #$41E0, // $41E0 + #$41E1, // $41E1 + #$41E2, // $41E2 + #$41E3, // $41E3 + #$41E4, // $41E4 + #$41E5, // $41E5 + #$41E6, // $41E6 + #$41E7, // $41E7 + #$41E8, // $41E8 + #$41E9, // $41E9 + #$41EA, // $41EA + #$41EB, // $41EB + #$41EC, // $41EC + #$41ED, // $41ED + #$41EE, // $41EE + #$41EF, // $41EF + #$41F0, // $41F0 + #$41F1, // $41F1 + #$41F2, // $41F2 + #$41F3, // $41F3 + #$41F4, // $41F4 + #$41F5, // $41F5 + #$41F6, // $41F6 + #$41F7, // $41F7 + #$41F8, // $41F8 + #$41F9, // $41F9 + #$41FA, // $41FA + #$41FB, // $41FB + #$41FC, // $41FC + #$41FD, // $41FD + #$41FE, // $41FE + #$41FF, // $41FF + #$4200, // $4200 + #$4201, // $4201 + #$4202, // $4202 + #$4203, // $4203 + #$4204, // $4204 + #$4205, // $4205 + #$4206, // $4206 + #$4207, // $4207 + #$4208, // $4208 + #$4209, // $4209 + #$420A, // $420A + #$420B, // $420B + #$420C, // $420C + #$420D, // $420D + #$420E, // $420E + #$420F, // $420F + #$4210, // $4210 + #$4211, // $4211 + #$4212, // $4212 + #$4213, // $4213 + #$4214, // $4214 + #$4215, // $4215 + #$4216, // $4216 + #$4217, // $4217 + #$4218, // $4218 + #$4219, // $4219 + #$421A, // $421A + #$421B, // $421B + #$421C, // $421C + #$421D, // $421D + #$421E, // $421E + #$421F, // $421F + #$4220, // $4220 + #$4221, // $4221 + #$4222, // $4222 + #$4223, // $4223 + #$4224, // $4224 + #$4225, // $4225 + #$4226, // $4226 + #$4227, // $4227 + #$4228, // $4228 + #$4229, // $4229 + #$422A, // $422A + #$422B, // $422B + #$422C, // $422C + #$422D, // $422D + #$422E, // $422E + #$422F, // $422F + #$4230, // $4230 + #$4231, // $4231 + #$4232, // $4232 + #$4233, // $4233 + #$4234, // $4234 + #$4235, // $4235 + #$4236, // $4236 + #$4237, // $4237 + #$4238, // $4238 + #$4239, // $4239 + #$423A, // $423A + #$423B, // $423B + #$423C, // $423C + #$423D, // $423D + #$423E, // $423E + #$423F, // $423F + #$4240, // $4240 + #$4241, // $4241 + #$4242, // $4242 + #$4243, // $4243 + #$4244, // $4244 + #$4245, // $4245 + #$4246, // $4246 + #$4247, // $4247 + #$4248, // $4248 + #$4249, // $4249 + #$424A, // $424A + #$424B, // $424B + #$424C, // $424C + #$424D, // $424D + #$424E, // $424E + #$424F, // $424F + #$4250, // $4250 + #$4251, // $4251 + #$4252, // $4252 + #$4253, // $4253 + #$4254, // $4254 + #$4255, // $4255 + #$4256, // $4256 + #$4257, // $4257 + #$4258, // $4258 + #$4259, // $4259 + #$425A, // $425A + #$425B, // $425B + #$425C, // $425C + #$425D, // $425D + #$425E, // $425E + #$425F, // $425F + #$4260, // $4260 + #$4261, // $4261 + #$4262, // $4262 + #$4263, // $4263 + #$4264, // $4264 + #$4265, // $4265 + #$4266, // $4266 + #$4267, // $4267 + #$4268, // $4268 + #$4269, // $4269 + #$426A, // $426A + #$426B, // $426B + #$426C, // $426C + #$426D, // $426D + #$426E, // $426E + #$426F, // $426F + #$4270, // $4270 + #$4271, // $4271 + #$4272, // $4272 + #$4273, // $4273 + #$4274, // $4274 + #$4275, // $4275 + #$4276, // $4276 + #$4277, // $4277 + #$4278, // $4278 + #$4279, // $4279 + #$427A, // $427A + #$427B, // $427B + #$427C, // $427C + #$427D, // $427D + #$427E, // $427E + #$427F, // $427F + #$4280, // $4280 + #$4281, // $4281 + #$4282, // $4282 + #$4283, // $4283 + #$4284, // $4284 + #$4285, // $4285 + #$4286, // $4286 + #$4287, // $4287 + #$4288, // $4288 + #$4289, // $4289 + #$428A, // $428A + #$428B, // $428B + #$428C, // $428C + #$428D, // $428D + #$428E, // $428E + #$428F, // $428F + #$4290, // $4290 + #$4291, // $4291 + #$4292, // $4292 + #$4293, // $4293 + #$4294, // $4294 + #$4295, // $4295 + #$4296, // $4296 + #$4297, // $4297 + #$4298, // $4298 + #$4299, // $4299 + #$429A, // $429A + #$429B, // $429B + #$429C, // $429C + #$429D, // $429D + #$429E, // $429E + #$429F, // $429F + #$42A0, // $42A0 + #$42A1, // $42A1 + #$42A2, // $42A2 + #$42A3, // $42A3 + #$42A4, // $42A4 + #$42A5, // $42A5 + #$42A6, // $42A6 + #$42A7, // $42A7 + #$42A8, // $42A8 + #$42A9, // $42A9 + #$42AA, // $42AA + #$42AB, // $42AB + #$42AC, // $42AC + #$42AD, // $42AD + #$42AE, // $42AE + #$42AF, // $42AF + #$42B0, // $42B0 + #$42B1, // $42B1 + #$42B2, // $42B2 + #$42B3, // $42B3 + #$42B4, // $42B4 + #$42B5, // $42B5 + #$42B6, // $42B6 + #$42B7, // $42B7 + #$42B8, // $42B8 + #$42B9, // $42B9 + #$42BA, // $42BA + #$42BB, // $42BB + #$42BC, // $42BC + #$42BD, // $42BD + #$42BE, // $42BE + #$42BF, // $42BF + #$42C0, // $42C0 + #$42C1, // $42C1 + #$42C2, // $42C2 + #$42C3, // $42C3 + #$42C4, // $42C4 + #$42C5, // $42C5 + #$42C6, // $42C6 + #$42C7, // $42C7 + #$42C8, // $42C8 + #$42C9, // $42C9 + #$42CA, // $42CA + #$42CB, // $42CB + #$42CC, // $42CC + #$42CD, // $42CD + #$42CE, // $42CE + #$42CF, // $42CF + #$42D0, // $42D0 + #$42D1, // $42D1 + #$42D2, // $42D2 + #$42D3, // $42D3 + #$42D4, // $42D4 + #$42D5, // $42D5 + #$42D6, // $42D6 + #$42D7, // $42D7 + #$42D8, // $42D8 + #$42D9, // $42D9 + #$42DA, // $42DA + #$42DB, // $42DB + #$42DC, // $42DC + #$42DD, // $42DD + #$42DE, // $42DE + #$42DF, // $42DF + #$42E0, // $42E0 + #$42E1, // $42E1 + #$42E2, // $42E2 + #$42E3, // $42E3 + #$42E4, // $42E4 + #$42E5, // $42E5 + #$42E6, // $42E6 + #$42E7, // $42E7 + #$42E8, // $42E8 + #$42E9, // $42E9 + #$42EA, // $42EA + #$42EB, // $42EB + #$42EC, // $42EC + #$42ED, // $42ED + #$42EE, // $42EE + #$42EF, // $42EF + #$42F0, // $42F0 + #$42F1, // $42F1 + #$42F2, // $42F2 + #$42F3, // $42F3 + #$42F4, // $42F4 + #$42F5, // $42F5 + #$42F6, // $42F6 + #$42F7, // $42F7 + #$42F8, // $42F8 + #$42F9, // $42F9 + #$42FA, // $42FA + #$42FB, // $42FB + #$42FC, // $42FC + #$42FD, // $42FD + #$42FE, // $42FE + #$42FF, // $42FF + #$4300, // $4300 + #$4301, // $4301 + #$4302, // $4302 + #$4303, // $4303 + #$4304, // $4304 + #$4305, // $4305 + #$4306, // $4306 + #$4307, // $4307 + #$4308, // $4308 + #$4309, // $4309 + #$430A, // $430A + #$430B, // $430B + #$430C, // $430C + #$430D, // $430D + #$430E, // $430E + #$430F, // $430F + #$4310, // $4310 + #$4311, // $4311 + #$4312, // $4312 + #$4313, // $4313 + #$4314, // $4314 + #$4315, // $4315 + #$4316, // $4316 + #$4317, // $4317 + #$4318, // $4318 + #$4319, // $4319 + #$431A, // $431A + #$431B, // $431B + #$431C, // $431C + #$431D, // $431D + #$431E, // $431E + #$431F, // $431F + #$4320, // $4320 + #$4321, // $4321 + #$4322, // $4322 + #$4323, // $4323 + #$4324, // $4324 + #$4325, // $4325 + #$4326, // $4326 + #$4327, // $4327 + #$4328, // $4328 + #$4329, // $4329 + #$432A, // $432A + #$432B, // $432B + #$432C, // $432C + #$432D, // $432D + #$432E, // $432E + #$432F, // $432F + #$4330, // $4330 + #$4331, // $4331 + #$4332, // $4332 + #$4333, // $4333 + #$4334, // $4334 + #$4335, // $4335 + #$4336, // $4336 + #$4337, // $4337 + #$4338, // $4338 + #$4339, // $4339 + #$433A, // $433A + #$433B, // $433B + #$433C, // $433C + #$433D, // $433D + #$433E, // $433E + #$433F, // $433F + #$4340, // $4340 + #$4341, // $4341 + #$4342, // $4342 + #$4343, // $4343 + #$4344, // $4344 + #$4345, // $4345 + #$4346, // $4346 + #$4347, // $4347 + #$4348, // $4348 + #$4349, // $4349 + #$434A, // $434A + #$434B, // $434B + #$434C, // $434C + #$434D, // $434D + #$434E, // $434E + #$434F, // $434F + #$4350, // $4350 + #$4351, // $4351 + #$4352, // $4352 + #$4353, // $4353 + #$4354, // $4354 + #$4355, // $4355 + #$4356, // $4356 + #$4357, // $4357 + #$4358, // $4358 + #$4359, // $4359 + #$435A, // $435A + #$435B, // $435B + #$435C, // $435C + #$435D, // $435D + #$435E, // $435E + #$435F, // $435F + #$4360, // $4360 + #$4361, // $4361 + #$4362, // $4362 + #$4363, // $4363 + #$4364, // $4364 + #$4365, // $4365 + #$4366, // $4366 + #$4367, // $4367 + #$4368, // $4368 + #$4369, // $4369 + #$436A, // $436A + #$436B, // $436B + #$436C, // $436C + #$436D, // $436D + #$436E, // $436E + #$436F, // $436F + #$4370, // $4370 + #$4371, // $4371 + #$4372, // $4372 + #$4373, // $4373 + #$4374, // $4374 + #$4375, // $4375 + #$4376, // $4376 + #$4377, // $4377 + #$4378, // $4378 + #$4379, // $4379 + #$437A, // $437A + #$437B, // $437B + #$437C, // $437C + #$437D, // $437D + #$437E, // $437E + #$437F, // $437F + #$4380, // $4380 + #$4381, // $4381 + #$4382, // $4382 + #$4383, // $4383 + #$4384, // $4384 + #$4385, // $4385 + #$4386, // $4386 + #$4387, // $4387 + #$4388, // $4388 + #$4389, // $4389 + #$438A, // $438A + #$438B, // $438B + #$438C, // $438C + #$438D, // $438D + #$438E, // $438E + #$438F, // $438F + #$4390, // $4390 + #$4391, // $4391 + #$4392, // $4392 + #$4393, // $4393 + #$4394, // $4394 + #$4395, // $4395 + #$4396, // $4396 + #$4397, // $4397 + #$4398, // $4398 + #$4399, // $4399 + #$439A, // $439A + #$439B, // $439B + #$439C, // $439C + #$439D, // $439D + #$439E, // $439E + #$439F, // $439F + #$43A0, // $43A0 + #$43A1, // $43A1 + #$43A2, // $43A2 + #$43A3, // $43A3 + #$43A4, // $43A4 + #$43A5, // $43A5 + #$43A6, // $43A6 + #$43A7, // $43A7 + #$43A8, // $43A8 + #$43A9, // $43A9 + #$43AA, // $43AA + #$43AB, // $43AB + #$43AC, // $43AC + #$43AD, // $43AD + #$43AE, // $43AE + #$43AF, // $43AF + #$43B0, // $43B0 + #$43B1, // $43B1 + #$43B2, // $43B2 + #$43B3, // $43B3 + #$43B4, // $43B4 + #$43B5, // $43B5 + #$43B6, // $43B6 + #$43B7, // $43B7 + #$43B8, // $43B8 + #$43B9, // $43B9 + #$43BA, // $43BA + #$43BB, // $43BB + #$43BC, // $43BC + #$43BD, // $43BD + #$43BE, // $43BE + #$43BF, // $43BF + #$43C0, // $43C0 + #$43C1, // $43C1 + #$43C2, // $43C2 + #$43C3, // $43C3 + #$43C4, // $43C4 + #$43C5, // $43C5 + #$43C6, // $43C6 + #$43C7, // $43C7 + #$43C8, // $43C8 + #$43C9, // $43C9 + #$43CA, // $43CA + #$43CB, // $43CB + #$43CC, // $43CC + #$43CD, // $43CD + #$43CE, // $43CE + #$43CF, // $43CF + #$43D0, // $43D0 + #$43D1, // $43D1 + #$43D2, // $43D2 + #$43D3, // $43D3 + #$43D4, // $43D4 + #$43D5, // $43D5 + #$43D6, // $43D6 + #$43D7, // $43D7 + #$43D8, // $43D8 + #$43D9, // $43D9 + #$43DA, // $43DA + #$43DB, // $43DB + #$43DC, // $43DC + #$43DD, // $43DD + #$43DE, // $43DE + #$43DF, // $43DF + #$43E0, // $43E0 + #$43E1, // $43E1 + #$43E2, // $43E2 + #$43E3, // $43E3 + #$43E4, // $43E4 + #$43E5, // $43E5 + #$43E6, // $43E6 + #$43E7, // $43E7 + #$43E8, // $43E8 + #$43E9, // $43E9 + #$43EA, // $43EA + #$43EB, // $43EB + #$43EC, // $43EC + #$43ED, // $43ED + #$43EE, // $43EE + #$43EF, // $43EF + #$43F0, // $43F0 + #$43F1, // $43F1 + #$43F2, // $43F2 + #$43F3, // $43F3 + #$43F4, // $43F4 + #$43F5, // $43F5 + #$43F6, // $43F6 + #$43F7, // $43F7 + #$43F8, // $43F8 + #$43F9, // $43F9 + #$43FA, // $43FA + #$43FB, // $43FB + #$43FC, // $43FC + #$43FD, // $43FD + #$43FE, // $43FE + #$43FF, // $43FF + #$4400, // $4400 + #$4401, // $4401 + #$4402, // $4402 + #$4403, // $4403 + #$4404, // $4404 + #$4405, // $4405 + #$4406, // $4406 + #$4407, // $4407 + #$4408, // $4408 + #$4409, // $4409 + #$440A, // $440A + #$440B, // $440B + #$440C, // $440C + #$440D, // $440D + #$440E, // $440E + #$440F, // $440F + #$4410, // $4410 + #$4411, // $4411 + #$4412, // $4412 + #$4413, // $4413 + #$4414, // $4414 + #$4415, // $4415 + #$4416, // $4416 + #$4417, // $4417 + #$4418, // $4418 + #$4419, // $4419 + #$441A, // $441A + #$441B, // $441B + #$441C, // $441C + #$441D, // $441D + #$441E, // $441E + #$441F, // $441F + #$4420, // $4420 + #$4421, // $4421 + #$4422, // $4422 + #$4423, // $4423 + #$4424, // $4424 + #$4425, // $4425 + #$4426, // $4426 + #$4427, // $4427 + #$4428, // $4428 + #$4429, // $4429 + #$442A, // $442A + #$442B, // $442B + #$442C, // $442C + #$442D, // $442D + #$442E, // $442E + #$442F, // $442F + #$4430, // $4430 + #$4431, // $4431 + #$4432, // $4432 + #$4433, // $4433 + #$4434, // $4434 + #$4435, // $4435 + #$4436, // $4436 + #$4437, // $4437 + #$4438, // $4438 + #$4439, // $4439 + #$443A, // $443A + #$443B, // $443B + #$443C, // $443C + #$443D, // $443D + #$443E, // $443E + #$443F, // $443F + #$4440, // $4440 + #$4441, // $4441 + #$4442, // $4442 + #$4443, // $4443 + #$4444, // $4444 + #$4445, // $4445 + #$4446, // $4446 + #$4447, // $4447 + #$4448, // $4448 + #$4449, // $4449 + #$444A, // $444A + #$444B, // $444B + #$444C, // $444C + #$444D, // $444D + #$444E, // $444E + #$444F, // $444F + #$4450, // $4450 + #$4451, // $4451 + #$4452, // $4452 + #$4453, // $4453 + #$4454, // $4454 + #$4455, // $4455 + #$4456, // $4456 + #$4457, // $4457 + #$4458, // $4458 + #$4459, // $4459 + #$445A, // $445A + #$445B, // $445B + #$445C, // $445C + #$445D, // $445D + #$445E, // $445E + #$445F, // $445F + #$4460, // $4460 + #$4461, // $4461 + #$4462, // $4462 + #$4463, // $4463 + #$4464, // $4464 + #$4465, // $4465 + #$4466, // $4466 + #$4467, // $4467 + #$4468, // $4468 + #$4469, // $4469 + #$446A, // $446A + #$446B, // $446B + #$446C, // $446C + #$446D, // $446D + #$446E, // $446E + #$446F, // $446F + #$4470, // $4470 + #$4471, // $4471 + #$4472, // $4472 + #$4473, // $4473 + #$4474, // $4474 + #$4475, // $4475 + #$4476, // $4476 + #$4477, // $4477 + #$4478, // $4478 + #$4479, // $4479 + #$447A, // $447A + #$447B, // $447B + #$447C, // $447C + #$447D, // $447D + #$447E, // $447E + #$447F, // $447F + #$4480, // $4480 + #$4481, // $4481 + #$4482, // $4482 + #$4483, // $4483 + #$4484, // $4484 + #$4485, // $4485 + #$4486, // $4486 + #$4487, // $4487 + #$4488, // $4488 + #$4489, // $4489 + #$448A, // $448A + #$448B, // $448B + #$448C, // $448C + #$448D, // $448D + #$448E, // $448E + #$448F, // $448F + #$4490, // $4490 + #$4491, // $4491 + #$4492, // $4492 + #$4493, // $4493 + #$4494, // $4494 + #$4495, // $4495 + #$4496, // $4496 + #$4497, // $4497 + #$4498, // $4498 + #$4499, // $4499 + #$449A, // $449A + #$449B, // $449B + #$449C, // $449C + #$449D, // $449D + #$449E, // $449E + #$449F, // $449F + #$44A0, // $44A0 + #$44A1, // $44A1 + #$44A2, // $44A2 + #$44A3, // $44A3 + #$44A4, // $44A4 + #$44A5, // $44A5 + #$44A6, // $44A6 + #$44A7, // $44A7 + #$44A8, // $44A8 + #$44A9, // $44A9 + #$44AA, // $44AA + #$44AB, // $44AB + #$44AC, // $44AC + #$44AD, // $44AD + #$44AE, // $44AE + #$44AF, // $44AF + #$44B0, // $44B0 + #$44B1, // $44B1 + #$44B2, // $44B2 + #$44B3, // $44B3 + #$44B4, // $44B4 + #$44B5, // $44B5 + #$44B6, // $44B6 + #$44B7, // $44B7 + #$44B8, // $44B8 + #$44B9, // $44B9 + #$44BA, // $44BA + #$44BB, // $44BB + #$44BC, // $44BC + #$44BD, // $44BD + #$44BE, // $44BE + #$44BF, // $44BF + #$44C0, // $44C0 + #$44C1, // $44C1 + #$44C2, // $44C2 + #$44C3, // $44C3 + #$44C4, // $44C4 + #$44C5, // $44C5 + #$44C6, // $44C6 + #$44C7, // $44C7 + #$44C8, // $44C8 + #$44C9, // $44C9 + #$44CA, // $44CA + #$44CB, // $44CB + #$44CC, // $44CC + #$44CD, // $44CD + #$44CE, // $44CE + #$44CF, // $44CF + #$44D0, // $44D0 + #$44D1, // $44D1 + #$44D2, // $44D2 + #$44D3, // $44D3 + #$44D4, // $44D4 + #$44D5, // $44D5 + #$44D6, // $44D6 + #$44D7, // $44D7 + #$44D8, // $44D8 + #$44D9, // $44D9 + #$44DA, // $44DA + #$44DB, // $44DB + #$44DC, // $44DC + #$44DD, // $44DD + #$44DE, // $44DE + #$44DF, // $44DF + #$44E0, // $44E0 + #$44E1, // $44E1 + #$44E2, // $44E2 + #$44E3, // $44E3 + #$44E4, // $44E4 + #$44E5, // $44E5 + #$44E6, // $44E6 + #$44E7, // $44E7 + #$44E8, // $44E8 + #$44E9, // $44E9 + #$44EA, // $44EA + #$44EB, // $44EB + #$44EC, // $44EC + #$44ED, // $44ED + #$44EE, // $44EE + #$44EF, // $44EF + #$44F0, // $44F0 + #$44F1, // $44F1 + #$44F2, // $44F2 + #$44F3, // $44F3 + #$44F4, // $44F4 + #$44F5, // $44F5 + #$44F6, // $44F6 + #$44F7, // $44F7 + #$44F8, // $44F8 + #$44F9, // $44F9 + #$44FA, // $44FA + #$44FB, // $44FB + #$44FC, // $44FC + #$44FD, // $44FD + #$44FE, // $44FE + #$44FF, // $44FF + #$4500, // $4500 + #$4501, // $4501 + #$4502, // $4502 + #$4503, // $4503 + #$4504, // $4504 + #$4505, // $4505 + #$4506, // $4506 + #$4507, // $4507 + #$4508, // $4508 + #$4509, // $4509 + #$450A, // $450A + #$450B, // $450B + #$450C, // $450C + #$450D, // $450D + #$450E, // $450E + #$450F, // $450F + #$4510, // $4510 + #$4511, // $4511 + #$4512, // $4512 + #$4513, // $4513 + #$4514, // $4514 + #$4515, // $4515 + #$4516, // $4516 + #$4517, // $4517 + #$4518, // $4518 + #$4519, // $4519 + #$451A, // $451A + #$451B, // $451B + #$451C, // $451C + #$451D, // $451D + #$451E, // $451E + #$451F, // $451F + #$4520, // $4520 + #$4521, // $4521 + #$4522, // $4522 + #$4523, // $4523 + #$4524, // $4524 + #$4525, // $4525 + #$4526, // $4526 + #$4527, // $4527 + #$4528, // $4528 + #$4529, // $4529 + #$452A, // $452A + #$452B, // $452B + #$452C, // $452C + #$452D, // $452D + #$452E, // $452E + #$452F, // $452F + #$4530, // $4530 + #$4531, // $4531 + #$4532, // $4532 + #$4533, // $4533 + #$4534, // $4534 + #$4535, // $4535 + #$4536, // $4536 + #$4537, // $4537 + #$4538, // $4538 + #$4539, // $4539 + #$453A, // $453A + #$453B, // $453B + #$453C, // $453C + #$453D, // $453D + #$453E, // $453E + #$453F, // $453F + #$4540, // $4540 + #$4541, // $4541 + #$4542, // $4542 + #$4543, // $4543 + #$4544, // $4544 + #$4545, // $4545 + #$4546, // $4546 + #$4547, // $4547 + #$4548, // $4548 + #$4549, // $4549 + #$454A, // $454A + #$454B, // $454B + #$454C, // $454C + #$454D, // $454D + #$454E, // $454E + #$454F, // $454F + #$4550, // $4550 + #$4551, // $4551 + #$4552, // $4552 + #$4553, // $4553 + #$4554, // $4554 + #$4555, // $4555 + #$4556, // $4556 + #$4557, // $4557 + #$4558, // $4558 + #$4559, // $4559 + #$455A, // $455A + #$455B, // $455B + #$455C, // $455C + #$455D, // $455D + #$455E, // $455E + #$455F, // $455F + #$4560, // $4560 + #$4561, // $4561 + #$4562, // $4562 + #$4563, // $4563 + #$4564, // $4564 + #$4565, // $4565 + #$4566, // $4566 + #$4567, // $4567 + #$4568, // $4568 + #$4569, // $4569 + #$456A, // $456A + #$456B, // $456B + #$456C, // $456C + #$456D, // $456D + #$456E, // $456E + #$456F, // $456F + #$4570, // $4570 + #$4571, // $4571 + #$4572, // $4572 + #$4573, // $4573 + #$4574, // $4574 + #$4575, // $4575 + #$4576, // $4576 + #$4577, // $4577 + #$4578, // $4578 + #$4579, // $4579 + #$457A, // $457A + #$457B, // $457B + #$457C, // $457C + #$457D, // $457D + #$457E, // $457E + #$457F, // $457F + #$4580, // $4580 + #$4581, // $4581 + #$4582, // $4582 + #$4583, // $4583 + #$4584, // $4584 + #$4585, // $4585 + #$4586, // $4586 + #$4587, // $4587 + #$4588, // $4588 + #$4589, // $4589 + #$458A, // $458A + #$458B, // $458B + #$458C, // $458C + #$458D, // $458D + #$458E, // $458E + #$458F, // $458F + #$4590, // $4590 + #$4591, // $4591 + #$4592, // $4592 + #$4593, // $4593 + #$4594, // $4594 + #$4595, // $4595 + #$4596, // $4596 + #$4597, // $4597 + #$4598, // $4598 + #$4599, // $4599 + #$459A, // $459A + #$459B, // $459B + #$459C, // $459C + #$459D, // $459D + #$459E, // $459E + #$459F, // $459F + #$45A0, // $45A0 + #$45A1, // $45A1 + #$45A2, // $45A2 + #$45A3, // $45A3 + #$45A4, // $45A4 + #$45A5, // $45A5 + #$45A6, // $45A6 + #$45A7, // $45A7 + #$45A8, // $45A8 + #$45A9, // $45A9 + #$45AA, // $45AA + #$45AB, // $45AB + #$45AC, // $45AC + #$45AD, // $45AD + #$45AE, // $45AE + #$45AF, // $45AF + #$45B0, // $45B0 + #$45B1, // $45B1 + #$45B2, // $45B2 + #$45B3, // $45B3 + #$45B4, // $45B4 + #$45B5, // $45B5 + #$45B6, // $45B6 + #$45B7, // $45B7 + #$45B8, // $45B8 + #$45B9, // $45B9 + #$45BA, // $45BA + #$45BB, // $45BB + #$45BC, // $45BC + #$45BD, // $45BD + #$45BE, // $45BE + #$45BF, // $45BF + #$45C0, // $45C0 + #$45C1, // $45C1 + #$45C2, // $45C2 + #$45C3, // $45C3 + #$45C4, // $45C4 + #$45C5, // $45C5 + #$45C6, // $45C6 + #$45C7, // $45C7 + #$45C8, // $45C8 + #$45C9, // $45C9 + #$45CA, // $45CA + #$45CB, // $45CB + #$45CC, // $45CC + #$45CD, // $45CD + #$45CE, // $45CE + #$45CF, // $45CF + #$45D0, // $45D0 + #$45D1, // $45D1 + #$45D2, // $45D2 + #$45D3, // $45D3 + #$45D4, // $45D4 + #$45D5, // $45D5 + #$45D6, // $45D6 + #$45D7, // $45D7 + #$45D8, // $45D8 + #$45D9, // $45D9 + #$45DA, // $45DA + #$45DB, // $45DB + #$45DC, // $45DC + #$45DD, // $45DD + #$45DE, // $45DE + #$45DF, // $45DF + #$45E0, // $45E0 + #$45E1, // $45E1 + #$45E2, // $45E2 + #$45E3, // $45E3 + #$45E4, // $45E4 + #$45E5, // $45E5 + #$45E6, // $45E6 + #$45E7, // $45E7 + #$45E8, // $45E8 + #$45E9, // $45E9 + #$45EA, // $45EA + #$45EB, // $45EB + #$45EC, // $45EC + #$45ED, // $45ED + #$45EE, // $45EE + #$45EF, // $45EF + #$45F0, // $45F0 + #$45F1, // $45F1 + #$45F2, // $45F2 + #$45F3, // $45F3 + #$45F4, // $45F4 + #$45F5, // $45F5 + #$45F6, // $45F6 + #$45F7, // $45F7 + #$45F8, // $45F8 + #$45F9, // $45F9 + #$45FA, // $45FA + #$45FB, // $45FB + #$45FC, // $45FC + #$45FD, // $45FD + #$45FE, // $45FE + #$45FF, // $45FF + #$4600, // $4600 + #$4601, // $4601 + #$4602, // $4602 + #$4603, // $4603 + #$4604, // $4604 + #$4605, // $4605 + #$4606, // $4606 + #$4607, // $4607 + #$4608, // $4608 + #$4609, // $4609 + #$460A, // $460A + #$460B, // $460B + #$460C, // $460C + #$460D, // $460D + #$460E, // $460E + #$460F, // $460F + #$4610, // $4610 + #$4611, // $4611 + #$4612, // $4612 + #$4613, // $4613 + #$4614, // $4614 + #$4615, // $4615 + #$4616, // $4616 + #$4617, // $4617 + #$4618, // $4618 + #$4619, // $4619 + #$461A, // $461A + #$461B, // $461B + #$461C, // $461C + #$461D, // $461D + #$461E, // $461E + #$461F, // $461F + #$4620, // $4620 + #$4621, // $4621 + #$4622, // $4622 + #$4623, // $4623 + #$4624, // $4624 + #$4625, // $4625 + #$4626, // $4626 + #$4627, // $4627 + #$4628, // $4628 + #$4629, // $4629 + #$462A, // $462A + #$462B, // $462B + #$462C, // $462C + #$462D, // $462D + #$462E, // $462E + #$462F, // $462F + #$4630, // $4630 + #$4631, // $4631 + #$4632, // $4632 + #$4633, // $4633 + #$4634, // $4634 + #$4635, // $4635 + #$4636, // $4636 + #$4637, // $4637 + #$4638, // $4638 + #$4639, // $4639 + #$463A, // $463A + #$463B, // $463B + #$463C, // $463C + #$463D, // $463D + #$463E, // $463E + #$463F, // $463F + #$4640, // $4640 + #$4641, // $4641 + #$4642, // $4642 + #$4643, // $4643 + #$4644, // $4644 + #$4645, // $4645 + #$4646, // $4646 + #$4647, // $4647 + #$4648, // $4648 + #$4649, // $4649 + #$464A, // $464A + #$464B, // $464B + #$464C, // $464C + #$464D, // $464D + #$464E, // $464E + #$464F, // $464F + #$4650, // $4650 + #$4651, // $4651 + #$4652, // $4652 + #$4653, // $4653 + #$4654, // $4654 + #$4655, // $4655 + #$4656, // $4656 + #$4657, // $4657 + #$4658, // $4658 + #$4659, // $4659 + #$465A, // $465A + #$465B, // $465B + #$465C, // $465C + #$465D, // $465D + #$465E, // $465E + #$465F, // $465F + #$4660, // $4660 + #$4661, // $4661 + #$4662, // $4662 + #$4663, // $4663 + #$4664, // $4664 + #$4665, // $4665 + #$4666, // $4666 + #$4667, // $4667 + #$4668, // $4668 + #$4669, // $4669 + #$466A, // $466A + #$466B, // $466B + #$466C, // $466C + #$466D, // $466D + #$466E, // $466E + #$466F, // $466F + #$4670, // $4670 + #$4671, // $4671 + #$4672, // $4672 + #$4673, // $4673 + #$4674, // $4674 + #$4675, // $4675 + #$4676, // $4676 + #$4677, // $4677 + #$4678, // $4678 + #$4679, // $4679 + #$467A, // $467A + #$467B, // $467B + #$467C, // $467C + #$467D, // $467D + #$467E, // $467E + #$467F, // $467F + #$4680, // $4680 + #$4681, // $4681 + #$4682, // $4682 + #$4683, // $4683 + #$4684, // $4684 + #$4685, // $4685 + #$4686, // $4686 + #$4687, // $4687 + #$4688, // $4688 + #$4689, // $4689 + #$468A, // $468A + #$468B, // $468B + #$468C, // $468C + #$468D, // $468D + #$468E, // $468E + #$468F, // $468F + #$4690, // $4690 + #$4691, // $4691 + #$4692, // $4692 + #$4693, // $4693 + #$4694, // $4694 + #$4695, // $4695 + #$4696, // $4696 + #$4697, // $4697 + #$4698, // $4698 + #$4699, // $4699 + #$469A, // $469A + #$469B, // $469B + #$469C, // $469C + #$469D, // $469D + #$469E, // $469E + #$469F, // $469F + #$46A0, // $46A0 + #$46A1, // $46A1 + #$46A2, // $46A2 + #$46A3, // $46A3 + #$46A4, // $46A4 + #$46A5, // $46A5 + #$46A6, // $46A6 + #$46A7, // $46A7 + #$46A8, // $46A8 + #$46A9, // $46A9 + #$46AA, // $46AA + #$46AB, // $46AB + #$46AC, // $46AC + #$46AD, // $46AD + #$46AE, // $46AE + #$46AF, // $46AF + #$46B0, // $46B0 + #$46B1, // $46B1 + #$46B2, // $46B2 + #$46B3, // $46B3 + #$46B4, // $46B4 + #$46B5, // $46B5 + #$46B6, // $46B6 + #$46B7, // $46B7 + #$46B8, // $46B8 + #$46B9, // $46B9 + #$46BA, // $46BA + #$46BB, // $46BB + #$46BC, // $46BC + #$46BD, // $46BD + #$46BE, // $46BE + #$46BF, // $46BF + #$46C0, // $46C0 + #$46C1, // $46C1 + #$46C2, // $46C2 + #$46C3, // $46C3 + #$46C4, // $46C4 + #$46C5, // $46C5 + #$46C6, // $46C6 + #$46C7, // $46C7 + #$46C8, // $46C8 + #$46C9, // $46C9 + #$46CA, // $46CA + #$46CB, // $46CB + #$46CC, // $46CC + #$46CD, // $46CD + #$46CE, // $46CE + #$46CF, // $46CF + #$46D0, // $46D0 + #$46D1, // $46D1 + #$46D2, // $46D2 + #$46D3, // $46D3 + #$46D4, // $46D4 + #$46D5, // $46D5 + #$46D6, // $46D6 + #$46D7, // $46D7 + #$46D8, // $46D8 + #$46D9, // $46D9 + #$46DA, // $46DA + #$46DB, // $46DB + #$46DC, // $46DC + #$46DD, // $46DD + #$46DE, // $46DE + #$46DF, // $46DF + #$46E0, // $46E0 + #$46E1, // $46E1 + #$46E2, // $46E2 + #$46E3, // $46E3 + #$46E4, // $46E4 + #$46E5, // $46E5 + #$46E6, // $46E6 + #$46E7, // $46E7 + #$46E8, // $46E8 + #$46E9, // $46E9 + #$46EA, // $46EA + #$46EB, // $46EB + #$46EC, // $46EC + #$46ED, // $46ED + #$46EE, // $46EE + #$46EF, // $46EF + #$46F0, // $46F0 + #$46F1, // $46F1 + #$46F2, // $46F2 + #$46F3, // $46F3 + #$46F4, // $46F4 + #$46F5, // $46F5 + #$46F6, // $46F6 + #$46F7, // $46F7 + #$46F8, // $46F8 + #$46F9, // $46F9 + #$46FA, // $46FA + #$46FB, // $46FB + #$46FC, // $46FC + #$46FD, // $46FD + #$46FE, // $46FE + #$46FF, // $46FF + #$4700, // $4700 + #$4701, // $4701 + #$4702, // $4702 + #$4703, // $4703 + #$4704, // $4704 + #$4705, // $4705 + #$4706, // $4706 + #$4707, // $4707 + #$4708, // $4708 + #$4709, // $4709 + #$470A, // $470A + #$470B, // $470B + #$470C, // $470C + #$470D, // $470D + #$470E, // $470E + #$470F, // $470F + #$4710, // $4710 + #$4711, // $4711 + #$4712, // $4712 + #$4713, // $4713 + #$4714, // $4714 + #$4715, // $4715 + #$4716, // $4716 + #$4717, // $4717 + #$4718, // $4718 + #$4719, // $4719 + #$471A, // $471A + #$471B, // $471B + #$471C, // $471C + #$471D, // $471D + #$471E, // $471E + #$471F, // $471F + #$4720, // $4720 + #$4721, // $4721 + #$4722, // $4722 + #$4723, // $4723 + #$4724, // $4724 + #$4725, // $4725 + #$4726, // $4726 + #$4727, // $4727 + #$4728, // $4728 + #$4729, // $4729 + #$472A, // $472A + #$472B, // $472B + #$472C, // $472C + #$472D, // $472D + #$472E, // $472E + #$472F, // $472F + #$4730, // $4730 + #$4731, // $4731 + #$4732, // $4732 + #$4733, // $4733 + #$4734, // $4734 + #$4735, // $4735 + #$4736, // $4736 + #$4737, // $4737 + #$4738, // $4738 + #$4739, // $4739 + #$473A, // $473A + #$473B, // $473B + #$473C, // $473C + #$473D, // $473D + #$473E, // $473E + #$473F, // $473F + #$4740, // $4740 + #$4741, // $4741 + #$4742, // $4742 + #$4743, // $4743 + #$4744, // $4744 + #$4745, // $4745 + #$4746, // $4746 + #$4747, // $4747 + #$4748, // $4748 + #$4749, // $4749 + #$474A, // $474A + #$474B, // $474B + #$474C, // $474C + #$474D, // $474D + #$474E, // $474E + #$474F, // $474F + #$4750, // $4750 + #$4751, // $4751 + #$4752, // $4752 + #$4753, // $4753 + #$4754, // $4754 + #$4755, // $4755 + #$4756, // $4756 + #$4757, // $4757 + #$4758, // $4758 + #$4759, // $4759 + #$475A, // $475A + #$475B, // $475B + #$475C, // $475C + #$475D, // $475D + #$475E, // $475E + #$475F, // $475F + #$4760, // $4760 + #$4761, // $4761 + #$4762, // $4762 + #$4763, // $4763 + #$4764, // $4764 + #$4765, // $4765 + #$4766, // $4766 + #$4767, // $4767 + #$4768, // $4768 + #$4769, // $4769 + #$476A, // $476A + #$476B, // $476B + #$476C, // $476C + #$476D, // $476D + #$476E, // $476E + #$476F, // $476F + #$4770, // $4770 + #$4771, // $4771 + #$4772, // $4772 + #$4773, // $4773 + #$4774, // $4774 + #$4775, // $4775 + #$4776, // $4776 + #$4777, // $4777 + #$4778, // $4778 + #$4779, // $4779 + #$477A, // $477A + #$477B, // $477B + #$477C, // $477C + #$477D, // $477D + #$477E, // $477E + #$477F, // $477F + #$4780, // $4780 + #$4781, // $4781 + #$4782, // $4782 + #$4783, // $4783 + #$4784, // $4784 + #$4785, // $4785 + #$4786, // $4786 + #$4787, // $4787 + #$4788, // $4788 + #$4789, // $4789 + #$478A, // $478A + #$478B, // $478B + #$478C, // $478C + #$478D, // $478D + #$478E, // $478E + #$478F, // $478F + #$4790, // $4790 + #$4791, // $4791 + #$4792, // $4792 + #$4793, // $4793 + #$4794, // $4794 + #$4795, // $4795 + #$4796, // $4796 + #$4797, // $4797 + #$4798, // $4798 + #$4799, // $4799 + #$479A, // $479A + #$479B, // $479B + #$479C, // $479C + #$479D, // $479D + #$479E, // $479E + #$479F, // $479F + #$47A0, // $47A0 + #$47A1, // $47A1 + #$47A2, // $47A2 + #$47A3, // $47A3 + #$47A4, // $47A4 + #$47A5, // $47A5 + #$47A6, // $47A6 + #$47A7, // $47A7 + #$47A8, // $47A8 + #$47A9, // $47A9 + #$47AA, // $47AA + #$47AB, // $47AB + #$47AC, // $47AC + #$47AD, // $47AD + #$47AE, // $47AE + #$47AF, // $47AF + #$47B0, // $47B0 + #$47B1, // $47B1 + #$47B2, // $47B2 + #$47B3, // $47B3 + #$47B4, // $47B4 + #$47B5, // $47B5 + #$47B6, // $47B6 + #$47B7, // $47B7 + #$47B8, // $47B8 + #$47B9, // $47B9 + #$47BA, // $47BA + #$47BB, // $47BB + #$47BC, // $47BC + #$47BD, // $47BD + #$47BE, // $47BE + #$47BF, // $47BF + #$47C0, // $47C0 + #$47C1, // $47C1 + #$47C2, // $47C2 + #$47C3, // $47C3 + #$47C4, // $47C4 + #$47C5, // $47C5 + #$47C6, // $47C6 + #$47C7, // $47C7 + #$47C8, // $47C8 + #$47C9, // $47C9 + #$47CA, // $47CA + #$47CB, // $47CB + #$47CC, // $47CC + #$47CD, // $47CD + #$47CE, // $47CE + #$47CF, // $47CF + #$47D0, // $47D0 + #$47D1, // $47D1 + #$47D2, // $47D2 + #$47D3, // $47D3 + #$47D4, // $47D4 + #$47D5, // $47D5 + #$47D6, // $47D6 + #$47D7, // $47D7 + #$47D8, // $47D8 + #$47D9, // $47D9 + #$47DA, // $47DA + #$47DB, // $47DB + #$47DC, // $47DC + #$47DD, // $47DD + #$47DE, // $47DE + #$47DF, // $47DF + #$47E0, // $47E0 + #$47E1, // $47E1 + #$47E2, // $47E2 + #$47E3, // $47E3 + #$47E4, // $47E4 + #$47E5, // $47E5 + #$47E6, // $47E6 + #$47E7, // $47E7 + #$47E8, // $47E8 + #$47E9, // $47E9 + #$47EA, // $47EA + #$47EB, // $47EB + #$47EC, // $47EC + #$47ED, // $47ED + #$47EE, // $47EE + #$47EF, // $47EF + #$47F0, // $47F0 + #$47F1, // $47F1 + #$47F2, // $47F2 + #$47F3, // $47F3 + #$47F4, // $47F4 + #$47F5, // $47F5 + #$47F6, // $47F6 + #$47F7, // $47F7 + #$47F8, // $47F8 + #$47F9, // $47F9 + #$47FA, // $47FA + #$47FB, // $47FB + #$47FC, // $47FC + #$47FD, // $47FD + #$47FE, // $47FE + #$47FF, // $47FF + #$4800, // $4800 + #$4801, // $4801 + #$4802, // $4802 + #$4803, // $4803 + #$4804, // $4804 + #$4805, // $4805 + #$4806, // $4806 + #$4807, // $4807 + #$4808, // $4808 + #$4809, // $4809 + #$480A, // $480A + #$480B, // $480B + #$480C, // $480C + #$480D, // $480D + #$480E, // $480E + #$480F, // $480F + #$4810, // $4810 + #$4811, // $4811 + #$4812, // $4812 + #$4813, // $4813 + #$4814, // $4814 + #$4815, // $4815 + #$4816, // $4816 + #$4817, // $4817 + #$4818, // $4818 + #$4819, // $4819 + #$481A, // $481A + #$481B, // $481B + #$481C, // $481C + #$481D, // $481D + #$481E, // $481E + #$481F, // $481F + #$4820, // $4820 + #$4821, // $4821 + #$4822, // $4822 + #$4823, // $4823 + #$4824, // $4824 + #$4825, // $4825 + #$4826, // $4826 + #$4827, // $4827 + #$4828, // $4828 + #$4829, // $4829 + #$482A, // $482A + #$482B, // $482B + #$482C, // $482C + #$482D, // $482D + #$482E, // $482E + #$482F, // $482F + #$4830, // $4830 + #$4831, // $4831 + #$4832, // $4832 + #$4833, // $4833 + #$4834, // $4834 + #$4835, // $4835 + #$4836, // $4836 + #$4837, // $4837 + #$4838, // $4838 + #$4839, // $4839 + #$483A, // $483A + #$483B, // $483B + #$483C, // $483C + #$483D, // $483D + #$483E, // $483E + #$483F, // $483F + #$4840, // $4840 + #$4841, // $4841 + #$4842, // $4842 + #$4843, // $4843 + #$4844, // $4844 + #$4845, // $4845 + #$4846, // $4846 + #$4847, // $4847 + #$4848, // $4848 + #$4849, // $4849 + #$484A, // $484A + #$484B, // $484B + #$484C, // $484C + #$484D, // $484D + #$484E, // $484E + #$484F, // $484F + #$4850, // $4850 + #$4851, // $4851 + #$4852, // $4852 + #$4853, // $4853 + #$4854, // $4854 + #$4855, // $4855 + #$4856, // $4856 + #$4857, // $4857 + #$4858, // $4858 + #$4859, // $4859 + #$485A, // $485A + #$485B, // $485B + #$485C, // $485C + #$485D, // $485D + #$485E, // $485E + #$485F, // $485F + #$4860, // $4860 + #$4861, // $4861 + #$4862, // $4862 + #$4863, // $4863 + #$4864, // $4864 + #$4865, // $4865 + #$4866, // $4866 + #$4867, // $4867 + #$4868, // $4868 + #$4869, // $4869 + #$486A, // $486A + #$486B, // $486B + #$486C, // $486C + #$486D, // $486D + #$486E, // $486E + #$486F, // $486F + #$4870, // $4870 + #$4871, // $4871 + #$4872, // $4872 + #$4873, // $4873 + #$4874, // $4874 + #$4875, // $4875 + #$4876, // $4876 + #$4877, // $4877 + #$4878, // $4878 + #$4879, // $4879 + #$487A, // $487A + #$487B, // $487B + #$487C, // $487C + #$487D, // $487D + #$487E, // $487E + #$487F, // $487F + #$4880, // $4880 + #$4881, // $4881 + #$4882, // $4882 + #$4883, // $4883 + #$4884, // $4884 + #$4885, // $4885 + #$4886, // $4886 + #$4887, // $4887 + #$4888, // $4888 + #$4889, // $4889 + #$488A, // $488A + #$488B, // $488B + #$488C, // $488C + #$488D, // $488D + #$488E, // $488E + #$488F, // $488F + #$4890, // $4890 + #$4891, // $4891 + #$4892, // $4892 + #$4893, // $4893 + #$4894, // $4894 + #$4895, // $4895 + #$4896, // $4896 + #$4897, // $4897 + #$4898, // $4898 + #$4899, // $4899 + #$489A, // $489A + #$489B, // $489B + #$489C, // $489C + #$489D, // $489D + #$489E, // $489E + #$489F, // $489F + #$48A0, // $48A0 + #$48A1, // $48A1 + #$48A2, // $48A2 + #$48A3, // $48A3 + #$48A4, // $48A4 + #$48A5, // $48A5 + #$48A6, // $48A6 + #$48A7, // $48A7 + #$48A8, // $48A8 + #$48A9, // $48A9 + #$48AA, // $48AA + #$48AB, // $48AB + #$48AC, // $48AC + #$48AD, // $48AD + #$48AE, // $48AE + #$48AF, // $48AF + #$48B0, // $48B0 + #$48B1, // $48B1 + #$48B2, // $48B2 + #$48B3, // $48B3 + #$48B4, // $48B4 + #$48B5, // $48B5 + #$48B6, // $48B6 + #$48B7, // $48B7 + #$48B8, // $48B8 + #$48B9, // $48B9 + #$48BA, // $48BA + #$48BB, // $48BB + #$48BC, // $48BC + #$48BD, // $48BD + #$48BE, // $48BE + #$48BF, // $48BF + #$48C0, // $48C0 + #$48C1, // $48C1 + #$48C2, // $48C2 + #$48C3, // $48C3 + #$48C4, // $48C4 + #$48C5, // $48C5 + #$48C6, // $48C6 + #$48C7, // $48C7 + #$48C8, // $48C8 + #$48C9, // $48C9 + #$48CA, // $48CA + #$48CB, // $48CB + #$48CC, // $48CC + #$48CD, // $48CD + #$48CE, // $48CE + #$48CF, // $48CF + #$48D0, // $48D0 + #$48D1, // $48D1 + #$48D2, // $48D2 + #$48D3, // $48D3 + #$48D4, // $48D4 + #$48D5, // $48D5 + #$48D6, // $48D6 + #$48D7, // $48D7 + #$48D8, // $48D8 + #$48D9, // $48D9 + #$48DA, // $48DA + #$48DB, // $48DB + #$48DC, // $48DC + #$48DD, // $48DD + #$48DE, // $48DE + #$48DF, // $48DF + #$48E0, // $48E0 + #$48E1, // $48E1 + #$48E2, // $48E2 + #$48E3, // $48E3 + #$48E4, // $48E4 + #$48E5, // $48E5 + #$48E6, // $48E6 + #$48E7, // $48E7 + #$48E8, // $48E8 + #$48E9, // $48E9 + #$48EA, // $48EA + #$48EB, // $48EB + #$48EC, // $48EC + #$48ED, // $48ED + #$48EE, // $48EE + #$48EF, // $48EF + #$48F0, // $48F0 + #$48F1, // $48F1 + #$48F2, // $48F2 + #$48F3, // $48F3 + #$48F4, // $48F4 + #$48F5, // $48F5 + #$48F6, // $48F6 + #$48F7, // $48F7 + #$48F8, // $48F8 + #$48F9, // $48F9 + #$48FA, // $48FA + #$48FB, // $48FB + #$48FC, // $48FC + #$48FD, // $48FD + #$48FE, // $48FE + #$48FF, // $48FF + #$4900, // $4900 + #$4901, // $4901 + #$4902, // $4902 + #$4903, // $4903 + #$4904, // $4904 + #$4905, // $4905 + #$4906, // $4906 + #$4907, // $4907 + #$4908, // $4908 + #$4909, // $4909 + #$490A, // $490A + #$490B, // $490B + #$490C, // $490C + #$490D, // $490D + #$490E, // $490E + #$490F, // $490F + #$4910, // $4910 + #$4911, // $4911 + #$4912, // $4912 + #$4913, // $4913 + #$4914, // $4914 + #$4915, // $4915 + #$4916, // $4916 + #$4917, // $4917 + #$4918, // $4918 + #$4919, // $4919 + #$491A, // $491A + #$491B, // $491B + #$491C, // $491C + #$491D, // $491D + #$491E, // $491E + #$491F, // $491F + #$4920, // $4920 + #$4921, // $4921 + #$4922, // $4922 + #$4923, // $4923 + #$4924, // $4924 + #$4925, // $4925 + #$4926, // $4926 + #$4927, // $4927 + #$4928, // $4928 + #$4929, // $4929 + #$492A, // $492A + #$492B, // $492B + #$492C, // $492C + #$492D, // $492D + #$492E, // $492E + #$492F, // $492F + #$4930, // $4930 + #$4931, // $4931 + #$4932, // $4932 + #$4933, // $4933 + #$4934, // $4934 + #$4935, // $4935 + #$4936, // $4936 + #$4937, // $4937 + #$4938, // $4938 + #$4939, // $4939 + #$493A, // $493A + #$493B, // $493B + #$493C, // $493C + #$493D, // $493D + #$493E, // $493E + #$493F, // $493F + #$4940, // $4940 + #$4941, // $4941 + #$4942, // $4942 + #$4943, // $4943 + #$4944, // $4944 + #$4945, // $4945 + #$4946, // $4946 + #$4947, // $4947 + #$4948, // $4948 + #$4949, // $4949 + #$494A, // $494A + #$494B, // $494B + #$494C, // $494C + #$494D, // $494D + #$494E, // $494E + #$494F, // $494F + #$4950, // $4950 + #$4951, // $4951 + #$4952, // $4952 + #$4953, // $4953 + #$4954, // $4954 + #$4955, // $4955 + #$4956, // $4956 + #$4957, // $4957 + #$4958, // $4958 + #$4959, // $4959 + #$495A, // $495A + #$495B, // $495B + #$495C, // $495C + #$495D, // $495D + #$495E, // $495E + #$495F, // $495F + #$4960, // $4960 + #$4961, // $4961 + #$4962, // $4962 + #$4963, // $4963 + #$4964, // $4964 + #$4965, // $4965 + #$4966, // $4966 + #$4967, // $4967 + #$4968, // $4968 + #$4969, // $4969 + #$496A, // $496A + #$496B, // $496B + #$496C, // $496C + #$496D, // $496D + #$496E, // $496E + #$496F, // $496F + #$4970, // $4970 + #$4971, // $4971 + #$4972, // $4972 + #$4973, // $4973 + #$4974, // $4974 + #$4975, // $4975 + #$4976, // $4976 + #$4977, // $4977 + #$4978, // $4978 + #$4979, // $4979 + #$497A, // $497A + #$497B, // $497B + #$497C, // $497C + #$497D, // $497D + #$497E, // $497E + #$497F, // $497F + #$4980, // $4980 + #$4981, // $4981 + #$4982, // $4982 + #$4983, // $4983 + #$4984, // $4984 + #$4985, // $4985 + #$4986, // $4986 + #$4987, // $4987 + #$4988, // $4988 + #$4989, // $4989 + #$498A, // $498A + #$498B, // $498B + #$498C, // $498C + #$498D, // $498D + #$498E, // $498E + #$498F, // $498F + #$4990, // $4990 + #$4991, // $4991 + #$4992, // $4992 + #$4993, // $4993 + #$4994, // $4994 + #$4995, // $4995 + #$4996, // $4996 + #$4997, // $4997 + #$4998, // $4998 + #$4999, // $4999 + #$499A, // $499A + #$499B, // $499B + #$499C, // $499C + #$499D, // $499D + #$499E, // $499E + #$499F, // $499F + #$49A0, // $49A0 + #$49A1, // $49A1 + #$49A2, // $49A2 + #$49A3, // $49A3 + #$49A4, // $49A4 + #$49A5, // $49A5 + #$49A6, // $49A6 + #$49A7, // $49A7 + #$49A8, // $49A8 + #$49A9, // $49A9 + #$49AA, // $49AA + #$49AB, // $49AB + #$49AC, // $49AC + #$49AD, // $49AD + #$49AE, // $49AE + #$49AF, // $49AF + #$49B0, // $49B0 + #$49B1, // $49B1 + #$49B2, // $49B2 + #$49B3, // $49B3 + #$49B4, // $49B4 + #$49B5, // $49B5 + #$49B6, // $49B6 + #$49B7, // $49B7 + #$49B8, // $49B8 + #$49B9, // $49B9 + #$49BA, // $49BA + #$49BB, // $49BB + #$49BC, // $49BC + #$49BD, // $49BD + #$49BE, // $49BE + #$49BF, // $49BF + #$49C0, // $49C0 + #$49C1, // $49C1 + #$49C2, // $49C2 + #$49C3, // $49C3 + #$49C4, // $49C4 + #$49C5, // $49C5 + #$49C6, // $49C6 + #$49C7, // $49C7 + #$49C8, // $49C8 + #$49C9, // $49C9 + #$49CA, // $49CA + #$49CB, // $49CB + #$49CC, // $49CC + #$49CD, // $49CD + #$49CE, // $49CE + #$49CF, // $49CF + #$49D0, // $49D0 + #$49D1, // $49D1 + #$49D2, // $49D2 + #$49D3, // $49D3 + #$49D4, // $49D4 + #$49D5, // $49D5 + #$49D6, // $49D6 + #$49D7, // $49D7 + #$49D8, // $49D8 + #$49D9, // $49D9 + #$49DA, // $49DA + #$49DB, // $49DB + #$49DC, // $49DC + #$49DD, // $49DD + #$49DE, // $49DE + #$49DF, // $49DF + #$49E0, // $49E0 + #$49E1, // $49E1 + #$49E2, // $49E2 + #$49E3, // $49E3 + #$49E4, // $49E4 + #$49E5, // $49E5 + #$49E6, // $49E6 + #$49E7, // $49E7 + #$49E8, // $49E8 + #$49E9, // $49E9 + #$49EA, // $49EA + #$49EB, // $49EB + #$49EC, // $49EC + #$49ED, // $49ED + #$49EE, // $49EE + #$49EF, // $49EF + #$49F0, // $49F0 + #$49F1, // $49F1 + #$49F2, // $49F2 + #$49F3, // $49F3 + #$49F4, // $49F4 + #$49F5, // $49F5 + #$49F6, // $49F6 + #$49F7, // $49F7 + #$49F8, // $49F8 + #$49F9, // $49F9 + #$49FA, // $49FA + #$49FB, // $49FB + #$49FC, // $49FC + #$49FD, // $49FD + #$49FE, // $49FE + #$49FF, // $49FF + #$4A00, // $4A00 + #$4A01, // $4A01 + #$4A02, // $4A02 + #$4A03, // $4A03 + #$4A04, // $4A04 + #$4A05, // $4A05 + #$4A06, // $4A06 + #$4A07, // $4A07 + #$4A08, // $4A08 + #$4A09, // $4A09 + #$4A0A, // $4A0A + #$4A0B, // $4A0B + #$4A0C, // $4A0C + #$4A0D, // $4A0D + #$4A0E, // $4A0E + #$4A0F, // $4A0F + #$4A10, // $4A10 + #$4A11, // $4A11 + #$4A12, // $4A12 + #$4A13, // $4A13 + #$4A14, // $4A14 + #$4A15, // $4A15 + #$4A16, // $4A16 + #$4A17, // $4A17 + #$4A18, // $4A18 + #$4A19, // $4A19 + #$4A1A, // $4A1A + #$4A1B, // $4A1B + #$4A1C, // $4A1C + #$4A1D, // $4A1D + #$4A1E, // $4A1E + #$4A1F, // $4A1F + #$4A20, // $4A20 + #$4A21, // $4A21 + #$4A22, // $4A22 + #$4A23, // $4A23 + #$4A24, // $4A24 + #$4A25, // $4A25 + #$4A26, // $4A26 + #$4A27, // $4A27 + #$4A28, // $4A28 + #$4A29, // $4A29 + #$4A2A, // $4A2A + #$4A2B, // $4A2B + #$4A2C, // $4A2C + #$4A2D, // $4A2D + #$4A2E, // $4A2E + #$4A2F, // $4A2F + #$4A30, // $4A30 + #$4A31, // $4A31 + #$4A32, // $4A32 + #$4A33, // $4A33 + #$4A34, // $4A34 + #$4A35, // $4A35 + #$4A36, // $4A36 + #$4A37, // $4A37 + #$4A38, // $4A38 + #$4A39, // $4A39 + #$4A3A, // $4A3A + #$4A3B, // $4A3B + #$4A3C, // $4A3C + #$4A3D, // $4A3D + #$4A3E, // $4A3E + #$4A3F, // $4A3F + #$4A40, // $4A40 + #$4A41, // $4A41 + #$4A42, // $4A42 + #$4A43, // $4A43 + #$4A44, // $4A44 + #$4A45, // $4A45 + #$4A46, // $4A46 + #$4A47, // $4A47 + #$4A48, // $4A48 + #$4A49, // $4A49 + #$4A4A, // $4A4A + #$4A4B, // $4A4B + #$4A4C, // $4A4C + #$4A4D, // $4A4D + #$4A4E, // $4A4E + #$4A4F, // $4A4F + #$4A50, // $4A50 + #$4A51, // $4A51 + #$4A52, // $4A52 + #$4A53, // $4A53 + #$4A54, // $4A54 + #$4A55, // $4A55 + #$4A56, // $4A56 + #$4A57, // $4A57 + #$4A58, // $4A58 + #$4A59, // $4A59 + #$4A5A, // $4A5A + #$4A5B, // $4A5B + #$4A5C, // $4A5C + #$4A5D, // $4A5D + #$4A5E, // $4A5E + #$4A5F, // $4A5F + #$4A60, // $4A60 + #$4A61, // $4A61 + #$4A62, // $4A62 + #$4A63, // $4A63 + #$4A64, // $4A64 + #$4A65, // $4A65 + #$4A66, // $4A66 + #$4A67, // $4A67 + #$4A68, // $4A68 + #$4A69, // $4A69 + #$4A6A, // $4A6A + #$4A6B, // $4A6B + #$4A6C, // $4A6C + #$4A6D, // $4A6D + #$4A6E, // $4A6E + #$4A6F, // $4A6F + #$4A70, // $4A70 + #$4A71, // $4A71 + #$4A72, // $4A72 + #$4A73, // $4A73 + #$4A74, // $4A74 + #$4A75, // $4A75 + #$4A76, // $4A76 + #$4A77, // $4A77 + #$4A78, // $4A78 + #$4A79, // $4A79 + #$4A7A, // $4A7A + #$4A7B, // $4A7B + #$4A7C, // $4A7C + #$4A7D, // $4A7D + #$4A7E, // $4A7E + #$4A7F, // $4A7F + #$4A80, // $4A80 + #$4A81, // $4A81 + #$4A82, // $4A82 + #$4A83, // $4A83 + #$4A84, // $4A84 + #$4A85, // $4A85 + #$4A86, // $4A86 + #$4A87, // $4A87 + #$4A88, // $4A88 + #$4A89, // $4A89 + #$4A8A, // $4A8A + #$4A8B, // $4A8B + #$4A8C, // $4A8C + #$4A8D, // $4A8D + #$4A8E, // $4A8E + #$4A8F, // $4A8F + #$4A90, // $4A90 + #$4A91, // $4A91 + #$4A92, // $4A92 + #$4A93, // $4A93 + #$4A94, // $4A94 + #$4A95, // $4A95 + #$4A96, // $4A96 + #$4A97, // $4A97 + #$4A98, // $4A98 + #$4A99, // $4A99 + #$4A9A, // $4A9A + #$4A9B, // $4A9B + #$4A9C, // $4A9C + #$4A9D, // $4A9D + #$4A9E, // $4A9E + #$4A9F, // $4A9F + #$4AA0, // $4AA0 + #$4AA1, // $4AA1 + #$4AA2, // $4AA2 + #$4AA3, // $4AA3 + #$4AA4, // $4AA4 + #$4AA5, // $4AA5 + #$4AA6, // $4AA6 + #$4AA7, // $4AA7 + #$4AA8, // $4AA8 + #$4AA9, // $4AA9 + #$4AAA, // $4AAA + #$4AAB, // $4AAB + #$4AAC, // $4AAC + #$4AAD, // $4AAD + #$4AAE, // $4AAE + #$4AAF, // $4AAF + #$4AB0, // $4AB0 + #$4AB1, // $4AB1 + #$4AB2, // $4AB2 + #$4AB3, // $4AB3 + #$4AB4, // $4AB4 + #$4AB5, // $4AB5 + #$4AB6, // $4AB6 + #$4AB7, // $4AB7 + #$4AB8, // $4AB8 + #$4AB9, // $4AB9 + #$4ABA, // $4ABA + #$4ABB, // $4ABB + #$4ABC, // $4ABC + #$4ABD, // $4ABD + #$4ABE, // $4ABE + #$4ABF, // $4ABF + #$4AC0, // $4AC0 + #$4AC1, // $4AC1 + #$4AC2, // $4AC2 + #$4AC3, // $4AC3 + #$4AC4, // $4AC4 + #$4AC5, // $4AC5 + #$4AC6, // $4AC6 + #$4AC7, // $4AC7 + #$4AC8, // $4AC8 + #$4AC9, // $4AC9 + #$4ACA, // $4ACA + #$4ACB, // $4ACB + #$4ACC, // $4ACC + #$4ACD, // $4ACD + #$4ACE, // $4ACE + #$4ACF, // $4ACF + #$4AD0, // $4AD0 + #$4AD1, // $4AD1 + #$4AD2, // $4AD2 + #$4AD3, // $4AD3 + #$4AD4, // $4AD4 + #$4AD5, // $4AD5 + #$4AD6, // $4AD6 + #$4AD7, // $4AD7 + #$4AD8, // $4AD8 + #$4AD9, // $4AD9 + #$4ADA, // $4ADA + #$4ADB, // $4ADB + #$4ADC, // $4ADC + #$4ADD, // $4ADD + #$4ADE, // $4ADE + #$4ADF, // $4ADF + #$4AE0, // $4AE0 + #$4AE1, // $4AE1 + #$4AE2, // $4AE2 + #$4AE3, // $4AE3 + #$4AE4, // $4AE4 + #$4AE5, // $4AE5 + #$4AE6, // $4AE6 + #$4AE7, // $4AE7 + #$4AE8, // $4AE8 + #$4AE9, // $4AE9 + #$4AEA, // $4AEA + #$4AEB, // $4AEB + #$4AEC, // $4AEC + #$4AED, // $4AED + #$4AEE, // $4AEE + #$4AEF, // $4AEF + #$4AF0, // $4AF0 + #$4AF1, // $4AF1 + #$4AF2, // $4AF2 + #$4AF3, // $4AF3 + #$4AF4, // $4AF4 + #$4AF5, // $4AF5 + #$4AF6, // $4AF6 + #$4AF7, // $4AF7 + #$4AF8, // $4AF8 + #$4AF9, // $4AF9 + #$4AFA, // $4AFA + #$4AFB, // $4AFB + #$4AFC, // $4AFC + #$4AFD, // $4AFD + #$4AFE, // $4AFE + #$4AFF, // $4AFF + #$4B00, // $4B00 + #$4B01, // $4B01 + #$4B02, // $4B02 + #$4B03, // $4B03 + #$4B04, // $4B04 + #$4B05, // $4B05 + #$4B06, // $4B06 + #$4B07, // $4B07 + #$4B08, // $4B08 + #$4B09, // $4B09 + #$4B0A, // $4B0A + #$4B0B, // $4B0B + #$4B0C, // $4B0C + #$4B0D, // $4B0D + #$4B0E, // $4B0E + #$4B0F, // $4B0F + #$4B10, // $4B10 + #$4B11, // $4B11 + #$4B12, // $4B12 + #$4B13, // $4B13 + #$4B14, // $4B14 + #$4B15, // $4B15 + #$4B16, // $4B16 + #$4B17, // $4B17 + #$4B18, // $4B18 + #$4B19, // $4B19 + #$4B1A, // $4B1A + #$4B1B, // $4B1B + #$4B1C, // $4B1C + #$4B1D, // $4B1D + #$4B1E, // $4B1E + #$4B1F, // $4B1F + #$4B20, // $4B20 + #$4B21, // $4B21 + #$4B22, // $4B22 + #$4B23, // $4B23 + #$4B24, // $4B24 + #$4B25, // $4B25 + #$4B26, // $4B26 + #$4B27, // $4B27 + #$4B28, // $4B28 + #$4B29, // $4B29 + #$4B2A, // $4B2A + #$4B2B, // $4B2B + #$4B2C, // $4B2C + #$4B2D, // $4B2D + #$4B2E, // $4B2E + #$4B2F, // $4B2F + #$4B30, // $4B30 + #$4B31, // $4B31 + #$4B32, // $4B32 + #$4B33, // $4B33 + #$4B34, // $4B34 + #$4B35, // $4B35 + #$4B36, // $4B36 + #$4B37, // $4B37 + #$4B38, // $4B38 + #$4B39, // $4B39 + #$4B3A, // $4B3A + #$4B3B, // $4B3B + #$4B3C, // $4B3C + #$4B3D, // $4B3D + #$4B3E, // $4B3E + #$4B3F, // $4B3F + #$4B40, // $4B40 + #$4B41, // $4B41 + #$4B42, // $4B42 + #$4B43, // $4B43 + #$4B44, // $4B44 + #$4B45, // $4B45 + #$4B46, // $4B46 + #$4B47, // $4B47 + #$4B48, // $4B48 + #$4B49, // $4B49 + #$4B4A, // $4B4A + #$4B4B, // $4B4B + #$4B4C, // $4B4C + #$4B4D, // $4B4D + #$4B4E, // $4B4E + #$4B4F, // $4B4F + #$4B50, // $4B50 + #$4B51, // $4B51 + #$4B52, // $4B52 + #$4B53, // $4B53 + #$4B54, // $4B54 + #$4B55, // $4B55 + #$4B56, // $4B56 + #$4B57, // $4B57 + #$4B58, // $4B58 + #$4B59, // $4B59 + #$4B5A, // $4B5A + #$4B5B, // $4B5B + #$4B5C, // $4B5C + #$4B5D, // $4B5D + #$4B5E, // $4B5E + #$4B5F, // $4B5F + #$4B60, // $4B60 + #$4B61, // $4B61 + #$4B62, // $4B62 + #$4B63, // $4B63 + #$4B64, // $4B64 + #$4B65, // $4B65 + #$4B66, // $4B66 + #$4B67, // $4B67 + #$4B68, // $4B68 + #$4B69, // $4B69 + #$4B6A, // $4B6A + #$4B6B, // $4B6B + #$4B6C, // $4B6C + #$4B6D, // $4B6D + #$4B6E, // $4B6E + #$4B6F, // $4B6F + #$4B70, // $4B70 + #$4B71, // $4B71 + #$4B72, // $4B72 + #$4B73, // $4B73 + #$4B74, // $4B74 + #$4B75, // $4B75 + #$4B76, // $4B76 + #$4B77, // $4B77 + #$4B78, // $4B78 + #$4B79, // $4B79 + #$4B7A, // $4B7A + #$4B7B, // $4B7B + #$4B7C, // $4B7C + #$4B7D, // $4B7D + #$4B7E, // $4B7E + #$4B7F, // $4B7F + #$4B80, // $4B80 + #$4B81, // $4B81 + #$4B82, // $4B82 + #$4B83, // $4B83 + #$4B84, // $4B84 + #$4B85, // $4B85 + #$4B86, // $4B86 + #$4B87, // $4B87 + #$4B88, // $4B88 + #$4B89, // $4B89 + #$4B8A, // $4B8A + #$4B8B, // $4B8B + #$4B8C, // $4B8C + #$4B8D, // $4B8D + #$4B8E, // $4B8E + #$4B8F, // $4B8F + #$4B90, // $4B90 + #$4B91, // $4B91 + #$4B92, // $4B92 + #$4B93, // $4B93 + #$4B94, // $4B94 + #$4B95, // $4B95 + #$4B96, // $4B96 + #$4B97, // $4B97 + #$4B98, // $4B98 + #$4B99, // $4B99 + #$4B9A, // $4B9A + #$4B9B, // $4B9B + #$4B9C, // $4B9C + #$4B9D, // $4B9D + #$4B9E, // $4B9E + #$4B9F, // $4B9F + #$4BA0, // $4BA0 + #$4BA1, // $4BA1 + #$4BA2, // $4BA2 + #$4BA3, // $4BA3 + #$4BA4, // $4BA4 + #$4BA5, // $4BA5 + #$4BA6, // $4BA6 + #$4BA7, // $4BA7 + #$4BA8, // $4BA8 + #$4BA9, // $4BA9 + #$4BAA, // $4BAA + #$4BAB, // $4BAB + #$4BAC, // $4BAC + #$4BAD, // $4BAD + #$4BAE, // $4BAE + #$4BAF, // $4BAF + #$4BB0, // $4BB0 + #$4BB1, // $4BB1 + #$4BB2, // $4BB2 + #$4BB3, // $4BB3 + #$4BB4, // $4BB4 + #$4BB5, // $4BB5 + #$4BB6, // $4BB6 + #$4BB7, // $4BB7 + #$4BB8, // $4BB8 + #$4BB9, // $4BB9 + #$4BBA, // $4BBA + #$4BBB, // $4BBB + #$4BBC, // $4BBC + #$4BBD, // $4BBD + #$4BBE, // $4BBE + #$4BBF, // $4BBF + #$4BC0, // $4BC0 + #$4BC1, // $4BC1 + #$4BC2, // $4BC2 + #$4BC3, // $4BC3 + #$4BC4, // $4BC4 + #$4BC5, // $4BC5 + #$4BC6, // $4BC6 + #$4BC7, // $4BC7 + #$4BC8, // $4BC8 + #$4BC9, // $4BC9 + #$4BCA, // $4BCA + #$4BCB, // $4BCB + #$4BCC, // $4BCC + #$4BCD, // $4BCD + #$4BCE, // $4BCE + #$4BCF, // $4BCF + #$4BD0, // $4BD0 + #$4BD1, // $4BD1 + #$4BD2, // $4BD2 + #$4BD3, // $4BD3 + #$4BD4, // $4BD4 + #$4BD5, // $4BD5 + #$4BD6, // $4BD6 + #$4BD7, // $4BD7 + #$4BD8, // $4BD8 + #$4BD9, // $4BD9 + #$4BDA, // $4BDA + #$4BDB, // $4BDB + #$4BDC, // $4BDC + #$4BDD, // $4BDD + #$4BDE, // $4BDE + #$4BDF, // $4BDF + #$4BE0, // $4BE0 + #$4BE1, // $4BE1 + #$4BE2, // $4BE2 + #$4BE3, // $4BE3 + #$4BE4, // $4BE4 + #$4BE5, // $4BE5 + #$4BE6, // $4BE6 + #$4BE7, // $4BE7 + #$4BE8, // $4BE8 + #$4BE9, // $4BE9 + #$4BEA, // $4BEA + #$4BEB, // $4BEB + #$4BEC, // $4BEC + #$4BED, // $4BED + #$4BEE, // $4BEE + #$4BEF, // $4BEF + #$4BF0, // $4BF0 + #$4BF1, // $4BF1 + #$4BF2, // $4BF2 + #$4BF3, // $4BF3 + #$4BF4, // $4BF4 + #$4BF5, // $4BF5 + #$4BF6, // $4BF6 + #$4BF7, // $4BF7 + #$4BF8, // $4BF8 + #$4BF9, // $4BF9 + #$4BFA, // $4BFA + #$4BFB, // $4BFB + #$4BFC, // $4BFC + #$4BFD, // $4BFD + #$4BFE, // $4BFE + #$4BFF, // $4BFF + #$4C00, // $4C00 + #$4C01, // $4C01 + #$4C02, // $4C02 + #$4C03, // $4C03 + #$4C04, // $4C04 + #$4C05, // $4C05 + #$4C06, // $4C06 + #$4C07, // $4C07 + #$4C08, // $4C08 + #$4C09, // $4C09 + #$4C0A, // $4C0A + #$4C0B, // $4C0B + #$4C0C, // $4C0C + #$4C0D, // $4C0D + #$4C0E, // $4C0E + #$4C0F, // $4C0F + #$4C10, // $4C10 + #$4C11, // $4C11 + #$4C12, // $4C12 + #$4C13, // $4C13 + #$4C14, // $4C14 + #$4C15, // $4C15 + #$4C16, // $4C16 + #$4C17, // $4C17 + #$4C18, // $4C18 + #$4C19, // $4C19 + #$4C1A, // $4C1A + #$4C1B, // $4C1B + #$4C1C, // $4C1C + #$4C1D, // $4C1D + #$4C1E, // $4C1E + #$4C1F, // $4C1F + #$4C20, // $4C20 + #$4C21, // $4C21 + #$4C22, // $4C22 + #$4C23, // $4C23 + #$4C24, // $4C24 + #$4C25, // $4C25 + #$4C26, // $4C26 + #$4C27, // $4C27 + #$4C28, // $4C28 + #$4C29, // $4C29 + #$4C2A, // $4C2A + #$4C2B, // $4C2B + #$4C2C, // $4C2C + #$4C2D, // $4C2D + #$4C2E, // $4C2E + #$4C2F, // $4C2F + #$4C30, // $4C30 + #$4C31, // $4C31 + #$4C32, // $4C32 + #$4C33, // $4C33 + #$4C34, // $4C34 + #$4C35, // $4C35 + #$4C36, // $4C36 + #$4C37, // $4C37 + #$4C38, // $4C38 + #$4C39, // $4C39 + #$4C3A, // $4C3A + #$4C3B, // $4C3B + #$4C3C, // $4C3C + #$4C3D, // $4C3D + #$4C3E, // $4C3E + #$4C3F, // $4C3F + #$4C40, // $4C40 + #$4C41, // $4C41 + #$4C42, // $4C42 + #$4C43, // $4C43 + #$4C44, // $4C44 + #$4C45, // $4C45 + #$4C46, // $4C46 + #$4C47, // $4C47 + #$4C48, // $4C48 + #$4C49, // $4C49 + #$4C4A, // $4C4A + #$4C4B, // $4C4B + #$4C4C, // $4C4C + #$4C4D, // $4C4D + #$4C4E, // $4C4E + #$4C4F, // $4C4F + #$4C50, // $4C50 + #$4C51, // $4C51 + #$4C52, // $4C52 + #$4C53, // $4C53 + #$4C54, // $4C54 + #$4C55, // $4C55 + #$4C56, // $4C56 + #$4C57, // $4C57 + #$4C58, // $4C58 + #$4C59, // $4C59 + #$4C5A, // $4C5A + #$4C5B, // $4C5B + #$4C5C, // $4C5C + #$4C5D, // $4C5D + #$4C5E, // $4C5E + #$4C5F, // $4C5F + #$4C60, // $4C60 + #$4C61, // $4C61 + #$4C62, // $4C62 + #$4C63, // $4C63 + #$4C64, // $4C64 + #$4C65, // $4C65 + #$4C66, // $4C66 + #$4C67, // $4C67 + #$4C68, // $4C68 + #$4C69, // $4C69 + #$4C6A, // $4C6A + #$4C6B, // $4C6B + #$4C6C, // $4C6C + #$4C6D, // $4C6D + #$4C6E, // $4C6E + #$4C6F, // $4C6F + #$4C70, // $4C70 + #$4C71, // $4C71 + #$4C72, // $4C72 + #$4C73, // $4C73 + #$4C74, // $4C74 + #$4C75, // $4C75 + #$4C76, // $4C76 + #$4C77, // $4C77 + #$4C78, // $4C78 + #$4C79, // $4C79 + #$4C7A, // $4C7A + #$4C7B, // $4C7B + #$4C7C, // $4C7C + #$4C7D, // $4C7D + #$4C7E, // $4C7E + #$4C7F, // $4C7F + #$4C80, // $4C80 + #$4C81, // $4C81 + #$4C82, // $4C82 + #$4C83, // $4C83 + #$4C84, // $4C84 + #$4C85, // $4C85 + #$4C86, // $4C86 + #$4C87, // $4C87 + #$4C88, // $4C88 + #$4C89, // $4C89 + #$4C8A, // $4C8A + #$4C8B, // $4C8B + #$4C8C, // $4C8C + #$4C8D, // $4C8D + #$4C8E, // $4C8E + #$4C8F, // $4C8F + #$4C90, // $4C90 + #$4C91, // $4C91 + #$4C92, // $4C92 + #$4C93, // $4C93 + #$4C94, // $4C94 + #$4C95, // $4C95 + #$4C96, // $4C96 + #$4C97, // $4C97 + #$4C98, // $4C98 + #$4C99, // $4C99 + #$4C9A, // $4C9A + #$4C9B, // $4C9B + #$4C9C, // $4C9C + #$4C9D, // $4C9D + #$4C9E, // $4C9E + #$4C9F, // $4C9F + #$4CA0, // $4CA0 + #$4CA1, // $4CA1 + #$4CA2, // $4CA2 + #$4CA3, // $4CA3 + #$4CA4, // $4CA4 + #$4CA5, // $4CA5 + #$4CA6, // $4CA6 + #$4CA7, // $4CA7 + #$4CA8, // $4CA8 + #$4CA9, // $4CA9 + #$4CAA, // $4CAA + #$4CAB, // $4CAB + #$4CAC, // $4CAC + #$4CAD, // $4CAD + #$4CAE, // $4CAE + #$4CAF, // $4CAF + #$4CB0, // $4CB0 + #$4CB1, // $4CB1 + #$4CB2, // $4CB2 + #$4CB3, // $4CB3 + #$4CB4, // $4CB4 + #$4CB5, // $4CB5 + #$4CB6, // $4CB6 + #$4CB7, // $4CB7 + #$4CB8, // $4CB8 + #$4CB9, // $4CB9 + #$4CBA, // $4CBA + #$4CBB, // $4CBB + #$4CBC, // $4CBC + #$4CBD, // $4CBD + #$4CBE, // $4CBE + #$4CBF, // $4CBF + #$4CC0, // $4CC0 + #$4CC1, // $4CC1 + #$4CC2, // $4CC2 + #$4CC3, // $4CC3 + #$4CC4, // $4CC4 + #$4CC5, // $4CC5 + #$4CC6, // $4CC6 + #$4CC7, // $4CC7 + #$4CC8, // $4CC8 + #$4CC9, // $4CC9 + #$4CCA, // $4CCA + #$4CCB, // $4CCB + #$4CCC, // $4CCC + #$4CCD, // $4CCD + #$4CCE, // $4CCE + #$4CCF, // $4CCF + #$4CD0, // $4CD0 + #$4CD1, // $4CD1 + #$4CD2, // $4CD2 + #$4CD3, // $4CD3 + #$4CD4, // $4CD4 + #$4CD5, // $4CD5 + #$4CD6, // $4CD6 + #$4CD7, // $4CD7 + #$4CD8, // $4CD8 + #$4CD9, // $4CD9 + #$4CDA, // $4CDA + #$4CDB, // $4CDB + #$4CDC, // $4CDC + #$4CDD, // $4CDD + #$4CDE, // $4CDE + #$4CDF, // $4CDF + #$4CE0, // $4CE0 + #$4CE1, // $4CE1 + #$4CE2, // $4CE2 + #$4CE3, // $4CE3 + #$4CE4, // $4CE4 + #$4CE5, // $4CE5 + #$4CE6, // $4CE6 + #$4CE7, // $4CE7 + #$4CE8, // $4CE8 + #$4CE9, // $4CE9 + #$4CEA, // $4CEA + #$4CEB, // $4CEB + #$4CEC, // $4CEC + #$4CED, // $4CED + #$4CEE, // $4CEE + #$4CEF, // $4CEF + #$4CF0, // $4CF0 + #$4CF1, // $4CF1 + #$4CF2, // $4CF2 + #$4CF3, // $4CF3 + #$4CF4, // $4CF4 + #$4CF5, // $4CF5 + #$4CF6, // $4CF6 + #$4CF7, // $4CF7 + #$4CF8, // $4CF8 + #$4CF9, // $4CF9 + #$4CFA, // $4CFA + #$4CFB, // $4CFB + #$4CFC, // $4CFC + #$4CFD, // $4CFD + #$4CFE, // $4CFE + #$4CFF, // $4CFF + #$4D00, // $4D00 + #$4D01, // $4D01 + #$4D02, // $4D02 + #$4D03, // $4D03 + #$4D04, // $4D04 + #$4D05, // $4D05 + #$4D06, // $4D06 + #$4D07, // $4D07 + #$4D08, // $4D08 + #$4D09, // $4D09 + #$4D0A, // $4D0A + #$4D0B, // $4D0B + #$4D0C, // $4D0C + #$4D0D, // $4D0D + #$4D0E, // $4D0E + #$4D0F, // $4D0F + #$4D10, // $4D10 + #$4D11, // $4D11 + #$4D12, // $4D12 + #$4D13, // $4D13 + #$4D14, // $4D14 + #$4D15, // $4D15 + #$4D16, // $4D16 + #$4D17, // $4D17 + #$4D18, // $4D18 + #$4D19, // $4D19 + #$4D1A, // $4D1A + #$4D1B, // $4D1B + #$4D1C, // $4D1C + #$4D1D, // $4D1D + #$4D1E, // $4D1E + #$4D1F, // $4D1F + #$4D20, // $4D20 + #$4D21, // $4D21 + #$4D22, // $4D22 + #$4D23, // $4D23 + #$4D24, // $4D24 + #$4D25, // $4D25 + #$4D26, // $4D26 + #$4D27, // $4D27 + #$4D28, // $4D28 + #$4D29, // $4D29 + #$4D2A, // $4D2A + #$4D2B, // $4D2B + #$4D2C, // $4D2C + #$4D2D, // $4D2D + #$4D2E, // $4D2E + #$4D2F, // $4D2F + #$4D30, // $4D30 + #$4D31, // $4D31 + #$4D32, // $4D32 + #$4D33, // $4D33 + #$4D34, // $4D34 + #$4D35, // $4D35 + #$4D36, // $4D36 + #$4D37, // $4D37 + #$4D38, // $4D38 + #$4D39, // $4D39 + #$4D3A, // $4D3A + #$4D3B, // $4D3B + #$4D3C, // $4D3C + #$4D3D, // $4D3D + #$4D3E, // $4D3E + #$4D3F, // $4D3F + #$4D40, // $4D40 + #$4D41, // $4D41 + #$4D42, // $4D42 + #$4D43, // $4D43 + #$4D44, // $4D44 + #$4D45, // $4D45 + #$4D46, // $4D46 + #$4D47, // $4D47 + #$4D48, // $4D48 + #$4D49, // $4D49 + #$4D4A, // $4D4A + #$4D4B, // $4D4B + #$4D4C, // $4D4C + #$4D4D, // $4D4D + #$4D4E, // $4D4E + #$4D4F, // $4D4F + #$4D50, // $4D50 + #$4D51, // $4D51 + #$4D52, // $4D52 + #$4D53, // $4D53 + #$4D54, // $4D54 + #$4D55, // $4D55 + #$4D56, // $4D56 + #$4D57, // $4D57 + #$4D58, // $4D58 + #$4D59, // $4D59 + #$4D5A, // $4D5A + #$4D5B, // $4D5B + #$4D5C, // $4D5C + #$4D5D, // $4D5D + #$4D5E, // $4D5E + #$4D5F, // $4D5F + #$4D60, // $4D60 + #$4D61, // $4D61 + #$4D62, // $4D62 + #$4D63, // $4D63 + #$4D64, // $4D64 + #$4D65, // $4D65 + #$4D66, // $4D66 + #$4D67, // $4D67 + #$4D68, // $4D68 + #$4D69, // $4D69 + #$4D6A, // $4D6A + #$4D6B, // $4D6B + #$4D6C, // $4D6C + #$4D6D, // $4D6D + #$4D6E, // $4D6E + #$4D6F, // $4D6F + #$4D70, // $4D70 + #$4D71, // $4D71 + #$4D72, // $4D72 + #$4D73, // $4D73 + #$4D74, // $4D74 + #$4D75, // $4D75 + #$4D76, // $4D76 + #$4D77, // $4D77 + #$4D78, // $4D78 + #$4D79, // $4D79 + #$4D7A, // $4D7A + #$4D7B, // $4D7B + #$4D7C, // $4D7C + #$4D7D, // $4D7D + #$4D7E, // $4D7E + #$4D7F, // $4D7F + #$4D80, // $4D80 + #$4D81, // $4D81 + #$4D82, // $4D82 + #$4D83, // $4D83 + #$4D84, // $4D84 + #$4D85, // $4D85 + #$4D86, // $4D86 + #$4D87, // $4D87 + #$4D88, // $4D88 + #$4D89, // $4D89 + #$4D8A, // $4D8A + #$4D8B, // $4D8B + #$4D8C, // $4D8C + #$4D8D, // $4D8D + #$4D8E, // $4D8E + #$4D8F, // $4D8F + #$4D90, // $4D90 + #$4D91, // $4D91 + #$4D92, // $4D92 + #$4D93, // $4D93 + #$4D94, // $4D94 + #$4D95, // $4D95 + #$4D96, // $4D96 + #$4D97, // $4D97 + #$4D98, // $4D98 + #$4D99, // $4D99 + #$4D9A, // $4D9A + #$4D9B, // $4D9B + #$4D9C, // $4D9C + #$4D9D, // $4D9D + #$4D9E, // $4D9E + #$4D9F, // $4D9F + #$4DA0, // $4DA0 + #$4DA1, // $4DA1 + #$4DA2, // $4DA2 + #$4DA3, // $4DA3 + #$4DA4, // $4DA4 + #$4DA5, // $4DA5 + #$4DA6, // $4DA6 + #$4DA7, // $4DA7 + #$4DA8, // $4DA8 + #$4DA9, // $4DA9 + #$4DAA, // $4DAA + #$4DAB, // $4DAB + #$4DAC, // $4DAC + #$4DAD, // $4DAD + #$4DAE, // $4DAE + #$4DAF, // $4DAF + #$4DB0, // $4DB0 + #$4DB1, // $4DB1 + #$4DB2, // $4DB2 + #$4DB3, // $4DB3 + #$4DB4, // $4DB4 + #$4DB5, // $4DB5 + #$4DB6, // $4DB6 + #$4DB7, // $4DB7 + #$4DB8, // $4DB8 + #$4DB9, // $4DB9 + #$4DBA, // $4DBA + #$4DBB, // $4DBB + #$4DBC, // $4DBC + #$4DBD, // $4DBD + #$4DBE, // $4DBE + #$4DBF, // $4DBF + #$4DC0, // $4DC0 + #$4DC1, // $4DC1 + #$4DC2, // $4DC2 + #$4DC3, // $4DC3 + #$4DC4, // $4DC4 + #$4DC5, // $4DC5 + #$4DC6, // $4DC6 + #$4DC7, // $4DC7 + #$4DC8, // $4DC8 + #$4DC9, // $4DC9 + #$4DCA, // $4DCA + #$4DCB, // $4DCB + #$4DCC, // $4DCC + #$4DCD, // $4DCD + #$4DCE, // $4DCE + #$4DCF, // $4DCF + #$4DD0, // $4DD0 + #$4DD1, // $4DD1 + #$4DD2, // $4DD2 + #$4DD3, // $4DD3 + #$4DD4, // $4DD4 + #$4DD5, // $4DD5 + #$4DD6, // $4DD6 + #$4DD7, // $4DD7 + #$4DD8, // $4DD8 + #$4DD9, // $4DD9 + #$4DDA, // $4DDA + #$4DDB, // $4DDB + #$4DDC, // $4DDC + #$4DDD, // $4DDD + #$4DDE, // $4DDE + #$4DDF, // $4DDF + #$4DE0, // $4DE0 + #$4DE1, // $4DE1 + #$4DE2, // $4DE2 + #$4DE3, // $4DE3 + #$4DE4, // $4DE4 + #$4DE5, // $4DE5 + #$4DE6, // $4DE6 + #$4DE7, // $4DE7 + #$4DE8, // $4DE8 + #$4DE9, // $4DE9 + #$4DEA, // $4DEA + #$4DEB, // $4DEB + #$4DEC, // $4DEC + #$4DED, // $4DED + #$4DEE, // $4DEE + #$4DEF, // $4DEF + #$4DF0, // $4DF0 + #$4DF1, // $4DF1 + #$4DF2, // $4DF2 + #$4DF3, // $4DF3 + #$4DF4, // $4DF4 + #$4DF5, // $4DF5 + #$4DF6, // $4DF6 + #$4DF7, // $4DF7 + #$4DF8, // $4DF8 + #$4DF9, // $4DF9 + #$4DFA, // $4DFA + #$4DFB, // $4DFB + #$4DFC, // $4DFC + #$4DFD, // $4DFD + #$4DFE, // $4DFE + #$4DFF, // $4DFF + #$4E00, // $4E00 + #$4E01, // $4E01 + #$4E02, // $4E02 + #$4E03, // $4E03 + #$4E04, // $4E04 + #$4E05, // $4E05 + #$4E06, // $4E06 + #$4E07, // $4E07 + #$4E08, // $4E08 + #$4E09, // $4E09 + #$4E0A, // $4E0A + #$4E0B, // $4E0B + #$4E0C, // $4E0C + #$4E0D, // $4E0D + #$4E0E, // $4E0E + #$4E0F, // $4E0F + #$4E10, // $4E10 + #$4E11, // $4E11 + #$4E12, // $4E12 + #$4E13, // $4E13 + #$4E14, // $4E14 + #$4E15, // $4E15 + #$4E16, // $4E16 + #$4E17, // $4E17 + #$4E18, // $4E18 + #$4E19, // $4E19 + #$4E1A, // $4E1A + #$4E1B, // $4E1B + #$4E1C, // $4E1C + #$4E1D, // $4E1D + #$4E1E, // $4E1E + #$4E1F, // $4E1F + #$4E20, // $4E20 + #$4E21, // $4E21 + #$4E22, // $4E22 + #$4E23, // $4E23 + #$4E24, // $4E24 + #$4E25, // $4E25 + #$4E26, // $4E26 + #$4E27, // $4E27 + #$4E28, // $4E28 + #$4E29, // $4E29 + #$4E2A, // $4E2A + #$4E2B, // $4E2B + #$4E2C, // $4E2C + #$4E2D, // $4E2D + #$4E2E, // $4E2E + #$4E2F, // $4E2F + #$4E30, // $4E30 + #$4E31, // $4E31 + #$4E32, // $4E32 + #$4E33, // $4E33 + #$4E34, // $4E34 + #$4E35, // $4E35 + #$4E36, // $4E36 + #$4E37, // $4E37 + #$4E38, // $4E38 + #$4E39, // $4E39 + #$4E3A, // $4E3A + #$4E3B, // $4E3B + #$4E3C, // $4E3C + #$4E3D, // $4E3D + #$4E3E, // $4E3E + #$4E3F, // $4E3F + #$4E40, // $4E40 + #$4E41, // $4E41 + #$4E42, // $4E42 + #$4E43, // $4E43 + #$4E44, // $4E44 + #$4E45, // $4E45 + #$4E46, // $4E46 + #$4E47, // $4E47 + #$4E48, // $4E48 + #$4E49, // $4E49 + #$4E4A, // $4E4A + #$4E4B, // $4E4B + #$4E4C, // $4E4C + #$4E4D, // $4E4D + #$4E4E, // $4E4E + #$4E4F, // $4E4F + #$4E50, // $4E50 + #$4E51, // $4E51 + #$4E52, // $4E52 + #$4E53, // $4E53 + #$4E54, // $4E54 + #$4E55, // $4E55 + #$4E56, // $4E56 + #$4E57, // $4E57 + #$4E58, // $4E58 + #$4E59, // $4E59 + #$4E5A, // $4E5A + #$4E5B, // $4E5B + #$4E5C, // $4E5C + #$4E5D, // $4E5D + #$4E5E, // $4E5E + #$4E5F, // $4E5F + #$4E60, // $4E60 + #$4E61, // $4E61 + #$4E62, // $4E62 + #$4E63, // $4E63 + #$4E64, // $4E64 + #$4E65, // $4E65 + #$4E66, // $4E66 + #$4E67, // $4E67 + #$4E68, // $4E68 + #$4E69, // $4E69 + #$4E6A, // $4E6A + #$4E6B, // $4E6B + #$4E6C, // $4E6C + #$4E6D, // $4E6D + #$4E6E, // $4E6E + #$4E6F, // $4E6F + #$4E70, // $4E70 + #$4E71, // $4E71 + #$4E72, // $4E72 + #$4E73, // $4E73 + #$4E74, // $4E74 + #$4E75, // $4E75 + #$4E76, // $4E76 + #$4E77, // $4E77 + #$4E78, // $4E78 + #$4E79, // $4E79 + #$4E7A, // $4E7A + #$4E7B, // $4E7B + #$4E7C, // $4E7C + #$4E7D, // $4E7D + #$4E7E, // $4E7E + #$4E7F, // $4E7F + #$4E80, // $4E80 + #$4E81, // $4E81 + #$4E82, // $4E82 + #$4E83, // $4E83 + #$4E84, // $4E84 + #$4E85, // $4E85 + #$4E86, // $4E86 + #$4E87, // $4E87 + #$4E88, // $4E88 + #$4E89, // $4E89 + #$4E8A, // $4E8A + #$4E8B, // $4E8B + #$4E8C, // $4E8C + #$4E8D, // $4E8D + #$4E8E, // $4E8E + #$4E8F, // $4E8F + #$4E90, // $4E90 + #$4E91, // $4E91 + #$4E92, // $4E92 + #$4E93, // $4E93 + #$4E94, // $4E94 + #$4E95, // $4E95 + #$4E96, // $4E96 + #$4E97, // $4E97 + #$4E98, // $4E98 + #$4E99, // $4E99 + #$4E9A, // $4E9A + #$4E9B, // $4E9B + #$4E9C, // $4E9C + #$4E9D, // $4E9D + #$4E9E, // $4E9E + #$4E9F, // $4E9F + #$4EA0, // $4EA0 + #$4EA1, // $4EA1 + #$4EA2, // $4EA2 + #$4EA3, // $4EA3 + #$4EA4, // $4EA4 + #$4EA5, // $4EA5 + #$4EA6, // $4EA6 + #$4EA7, // $4EA7 + #$4EA8, // $4EA8 + #$4EA9, // $4EA9 + #$4EAA, // $4EAA + #$4EAB, // $4EAB + #$4EAC, // $4EAC + #$4EAD, // $4EAD + #$4EAE, // $4EAE + #$4EAF, // $4EAF + #$4EB0, // $4EB0 + #$4EB1, // $4EB1 + #$4EB2, // $4EB2 + #$4EB3, // $4EB3 + #$4EB4, // $4EB4 + #$4EB5, // $4EB5 + #$4EB6, // $4EB6 + #$4EB7, // $4EB7 + #$4EB8, // $4EB8 + #$4EB9, // $4EB9 + #$4EBA, // $4EBA + #$4EBB, // $4EBB + #$4EBC, // $4EBC + #$4EBD, // $4EBD + #$4EBE, // $4EBE + #$4EBF, // $4EBF + #$4EC0, // $4EC0 + #$4EC1, // $4EC1 + #$4EC2, // $4EC2 + #$4EC3, // $4EC3 + #$4EC4, // $4EC4 + #$4EC5, // $4EC5 + #$4EC6, // $4EC6 + #$4EC7, // $4EC7 + #$4EC8, // $4EC8 + #$4EC9, // $4EC9 + #$4ECA, // $4ECA + #$4ECB, // $4ECB + #$4ECC, // $4ECC + #$4ECD, // $4ECD + #$4ECE, // $4ECE + #$4ECF, // $4ECF + #$4ED0, // $4ED0 + #$4ED1, // $4ED1 + #$4ED2, // $4ED2 + #$4ED3, // $4ED3 + #$4ED4, // $4ED4 + #$4ED5, // $4ED5 + #$4ED6, // $4ED6 + #$4ED7, // $4ED7 + #$4ED8, // $4ED8 + #$4ED9, // $4ED9 + #$4EDA, // $4EDA + #$4EDB, // $4EDB + #$4EDC, // $4EDC + #$4EDD, // $4EDD + #$4EDE, // $4EDE + #$4EDF, // $4EDF + #$4EE0, // $4EE0 + #$4EE1, // $4EE1 + #$4EE2, // $4EE2 + #$4EE3, // $4EE3 + #$4EE4, // $4EE4 + #$4EE5, // $4EE5 + #$4EE6, // $4EE6 + #$4EE7, // $4EE7 + #$4EE8, // $4EE8 + #$4EE9, // $4EE9 + #$4EEA, // $4EEA + #$4EEB, // $4EEB + #$4EEC, // $4EEC + #$4EED, // $4EED + #$4EEE, // $4EEE + #$4EEF, // $4EEF + #$4EF0, // $4EF0 + #$4EF1, // $4EF1 + #$4EF2, // $4EF2 + #$4EF3, // $4EF3 + #$4EF4, // $4EF4 + #$4EF5, // $4EF5 + #$4EF6, // $4EF6 + #$4EF7, // $4EF7 + #$4EF8, // $4EF8 + #$4EF9, // $4EF9 + #$4EFA, // $4EFA + #$4EFB, // $4EFB + #$4EFC, // $4EFC + #$4EFD, // $4EFD + #$4EFE, // $4EFE + #$4EFF, // $4EFF + #$4F00, // $4F00 + #$4F01, // $4F01 + #$4F02, // $4F02 + #$4F03, // $4F03 + #$4F04, // $4F04 + #$4F05, // $4F05 + #$4F06, // $4F06 + #$4F07, // $4F07 + #$4F08, // $4F08 + #$4F09, // $4F09 + #$4F0A, // $4F0A + #$4F0B, // $4F0B + #$4F0C, // $4F0C + #$4F0D, // $4F0D + #$4F0E, // $4F0E + #$4F0F, // $4F0F + #$4F10, // $4F10 + #$4F11, // $4F11 + #$4F12, // $4F12 + #$4F13, // $4F13 + #$4F14, // $4F14 + #$4F15, // $4F15 + #$4F16, // $4F16 + #$4F17, // $4F17 + #$4F18, // $4F18 + #$4F19, // $4F19 + #$4F1A, // $4F1A + #$4F1B, // $4F1B + #$4F1C, // $4F1C + #$4F1D, // $4F1D + #$4F1E, // $4F1E + #$4F1F, // $4F1F + #$4F20, // $4F20 + #$4F21, // $4F21 + #$4F22, // $4F22 + #$4F23, // $4F23 + #$4F24, // $4F24 + #$4F25, // $4F25 + #$4F26, // $4F26 + #$4F27, // $4F27 + #$4F28, // $4F28 + #$4F29, // $4F29 + #$4F2A, // $4F2A + #$4F2B, // $4F2B + #$4F2C, // $4F2C + #$4F2D, // $4F2D + #$4F2E, // $4F2E + #$4F2F, // $4F2F + #$4F30, // $4F30 + #$4F31, // $4F31 + #$4F32, // $4F32 + #$4F33, // $4F33 + #$4F34, // $4F34 + #$4F35, // $4F35 + #$4F36, // $4F36 + #$4F37, // $4F37 + #$4F38, // $4F38 + #$4F39, // $4F39 + #$4F3A, // $4F3A + #$4F3B, // $4F3B + #$4F3C, // $4F3C + #$4F3D, // $4F3D + #$4F3E, // $4F3E + #$4F3F, // $4F3F + #$4F40, // $4F40 + #$4F41, // $4F41 + #$4F42, // $4F42 + #$4F43, // $4F43 + #$4F44, // $4F44 + #$4F45, // $4F45 + #$4F46, // $4F46 + #$4F47, // $4F47 + #$4F48, // $4F48 + #$4F49, // $4F49 + #$4F4A, // $4F4A + #$4F4B, // $4F4B + #$4F4C, // $4F4C + #$4F4D, // $4F4D + #$4F4E, // $4F4E + #$4F4F, // $4F4F + #$4F50, // $4F50 + #$4F51, // $4F51 + #$4F52, // $4F52 + #$4F53, // $4F53 + #$4F54, // $4F54 + #$4F55, // $4F55 + #$4F56, // $4F56 + #$4F57, // $4F57 + #$4F58, // $4F58 + #$4F59, // $4F59 + #$4F5A, // $4F5A + #$4F5B, // $4F5B + #$4F5C, // $4F5C + #$4F5D, // $4F5D + #$4F5E, // $4F5E + #$4F5F, // $4F5F + #$4F60, // $4F60 + #$4F61, // $4F61 + #$4F62, // $4F62 + #$4F63, // $4F63 + #$4F64, // $4F64 + #$4F65, // $4F65 + #$4F66, // $4F66 + #$4F67, // $4F67 + #$4F68, // $4F68 + #$4F69, // $4F69 + #$4F6A, // $4F6A + #$4F6B, // $4F6B + #$4F6C, // $4F6C + #$4F6D, // $4F6D + #$4F6E, // $4F6E + #$4F6F, // $4F6F + #$4F70, // $4F70 + #$4F71, // $4F71 + #$4F72, // $4F72 + #$4F73, // $4F73 + #$4F74, // $4F74 + #$4F75, // $4F75 + #$4F76, // $4F76 + #$4F77, // $4F77 + #$4F78, // $4F78 + #$4F79, // $4F79 + #$4F7A, // $4F7A + #$4F7B, // $4F7B + #$4F7C, // $4F7C + #$4F7D, // $4F7D + #$4F7E, // $4F7E + #$4F7F, // $4F7F + #$4F80, // $4F80 + #$4F81, // $4F81 + #$4F82, // $4F82 + #$4F83, // $4F83 + #$4F84, // $4F84 + #$4F85, // $4F85 + #$4F86, // $4F86 + #$4F87, // $4F87 + #$4F88, // $4F88 + #$4F89, // $4F89 + #$4F8A, // $4F8A + #$4F8B, // $4F8B + #$4F8C, // $4F8C + #$4F8D, // $4F8D + #$4F8E, // $4F8E + #$4F8F, // $4F8F + #$4F90, // $4F90 + #$4F91, // $4F91 + #$4F92, // $4F92 + #$4F93, // $4F93 + #$4F94, // $4F94 + #$4F95, // $4F95 + #$4F96, // $4F96 + #$4F97, // $4F97 + #$4F98, // $4F98 + #$4F99, // $4F99 + #$4F9A, // $4F9A + #$4F9B, // $4F9B + #$4F9C, // $4F9C + #$4F9D, // $4F9D + #$4F9E, // $4F9E + #$4F9F, // $4F9F + #$4FA0, // $4FA0 + #$4FA1, // $4FA1 + #$4FA2, // $4FA2 + #$4FA3, // $4FA3 + #$4FA4, // $4FA4 + #$4FA5, // $4FA5 + #$4FA6, // $4FA6 + #$4FA7, // $4FA7 + #$4FA8, // $4FA8 + #$4FA9, // $4FA9 + #$4FAA, // $4FAA + #$4FAB, // $4FAB + #$4FAC, // $4FAC + #$4FAD, // $4FAD + #$4FAE, // $4FAE + #$4FAF, // $4FAF + #$4FB0, // $4FB0 + #$4FB1, // $4FB1 + #$4FB2, // $4FB2 + #$4FB3, // $4FB3 + #$4FB4, // $4FB4 + #$4FB5, // $4FB5 + #$4FB6, // $4FB6 + #$4FB7, // $4FB7 + #$4FB8, // $4FB8 + #$4FB9, // $4FB9 + #$4FBA, // $4FBA + #$4FBB, // $4FBB + #$4FBC, // $4FBC + #$4FBD, // $4FBD + #$4FBE, // $4FBE + #$4FBF, // $4FBF + #$4FC0, // $4FC0 + #$4FC1, // $4FC1 + #$4FC2, // $4FC2 + #$4FC3, // $4FC3 + #$4FC4, // $4FC4 + #$4FC5, // $4FC5 + #$4FC6, // $4FC6 + #$4FC7, // $4FC7 + #$4FC8, // $4FC8 + #$4FC9, // $4FC9 + #$4FCA, // $4FCA + #$4FCB, // $4FCB + #$4FCC, // $4FCC + #$4FCD, // $4FCD + #$4FCE, // $4FCE + #$4FCF, // $4FCF + #$4FD0, // $4FD0 + #$4FD1, // $4FD1 + #$4FD2, // $4FD2 + #$4FD3, // $4FD3 + #$4FD4, // $4FD4 + #$4FD5, // $4FD5 + #$4FD6, // $4FD6 + #$4FD7, // $4FD7 + #$4FD8, // $4FD8 + #$4FD9, // $4FD9 + #$4FDA, // $4FDA + #$4FDB, // $4FDB + #$4FDC, // $4FDC + #$4FDD, // $4FDD + #$4FDE, // $4FDE + #$4FDF, // $4FDF + #$4FE0, // $4FE0 + #$4FE1, // $4FE1 + #$4FE2, // $4FE2 + #$4FE3, // $4FE3 + #$4FE4, // $4FE4 + #$4FE5, // $4FE5 + #$4FE6, // $4FE6 + #$4FE7, // $4FE7 + #$4FE8, // $4FE8 + #$4FE9, // $4FE9 + #$4FEA, // $4FEA + #$4FEB, // $4FEB + #$4FEC, // $4FEC + #$4FED, // $4FED + #$4FEE, // $4FEE + #$4FEF, // $4FEF + #$4FF0, // $4FF0 + #$4FF1, // $4FF1 + #$4FF2, // $4FF2 + #$4FF3, // $4FF3 + #$4FF4, // $4FF4 + #$4FF5, // $4FF5 + #$4FF6, // $4FF6 + #$4FF7, // $4FF7 + #$4FF8, // $4FF8 + #$4FF9, // $4FF9 + #$4FFA, // $4FFA + #$4FFB, // $4FFB + #$4FFC, // $4FFC + #$4FFD, // $4FFD + #$4FFE, // $4FFE + #$4FFF, // $4FFF + #$5000, // $5000 + #$5001, // $5001 + #$5002, // $5002 + #$5003, // $5003 + #$5004, // $5004 + #$5005, // $5005 + #$5006, // $5006 + #$5007, // $5007 + #$5008, // $5008 + #$5009, // $5009 + #$500A, // $500A + #$500B, // $500B + #$500C, // $500C + #$500D, // $500D + #$500E, // $500E + #$500F, // $500F + #$5010, // $5010 + #$5011, // $5011 + #$5012, // $5012 + #$5013, // $5013 + #$5014, // $5014 + #$5015, // $5015 + #$5016, // $5016 + #$5017, // $5017 + #$5018, // $5018 + #$5019, // $5019 + #$501A, // $501A + #$501B, // $501B + #$501C, // $501C + #$501D, // $501D + #$501E, // $501E + #$501F, // $501F + #$5020, // $5020 + #$5021, // $5021 + #$5022, // $5022 + #$5023, // $5023 + #$5024, // $5024 + #$5025, // $5025 + #$5026, // $5026 + #$5027, // $5027 + #$5028, // $5028 + #$5029, // $5029 + #$502A, // $502A + #$502B, // $502B + #$502C, // $502C + #$502D, // $502D + #$502E, // $502E + #$502F, // $502F + #$5030, // $5030 + #$5031, // $5031 + #$5032, // $5032 + #$5033, // $5033 + #$5034, // $5034 + #$5035, // $5035 + #$5036, // $5036 + #$5037, // $5037 + #$5038, // $5038 + #$5039, // $5039 + #$503A, // $503A + #$503B, // $503B + #$503C, // $503C + #$503D, // $503D + #$503E, // $503E + #$503F, // $503F + #$5040, // $5040 + #$5041, // $5041 + #$5042, // $5042 + #$5043, // $5043 + #$5044, // $5044 + #$5045, // $5045 + #$5046, // $5046 + #$5047, // $5047 + #$5048, // $5048 + #$5049, // $5049 + #$504A, // $504A + #$504B, // $504B + #$504C, // $504C + #$504D, // $504D + #$504E, // $504E + #$504F, // $504F + #$5050, // $5050 + #$5051, // $5051 + #$5052, // $5052 + #$5053, // $5053 + #$5054, // $5054 + #$5055, // $5055 + #$5056, // $5056 + #$5057, // $5057 + #$5058, // $5058 + #$5059, // $5059 + #$505A, // $505A + #$505B, // $505B + #$505C, // $505C + #$505D, // $505D + #$505E, // $505E + #$505F, // $505F + #$5060, // $5060 + #$5061, // $5061 + #$5062, // $5062 + #$5063, // $5063 + #$5064, // $5064 + #$5065, // $5065 + #$5066, // $5066 + #$5067, // $5067 + #$5068, // $5068 + #$5069, // $5069 + #$506A, // $506A + #$506B, // $506B + #$506C, // $506C + #$506D, // $506D + #$506E, // $506E + #$506F, // $506F + #$5070, // $5070 + #$5071, // $5071 + #$5072, // $5072 + #$5073, // $5073 + #$5074, // $5074 + #$5075, // $5075 + #$5076, // $5076 + #$5077, // $5077 + #$5078, // $5078 + #$5079, // $5079 + #$507A, // $507A + #$507B, // $507B + #$507C, // $507C + #$507D, // $507D + #$507E, // $507E + #$507F, // $507F + #$5080, // $5080 + #$5081, // $5081 + #$5082, // $5082 + #$5083, // $5083 + #$5084, // $5084 + #$5085, // $5085 + #$5086, // $5086 + #$5087, // $5087 + #$5088, // $5088 + #$5089, // $5089 + #$508A, // $508A + #$508B, // $508B + #$508C, // $508C + #$508D, // $508D + #$508E, // $508E + #$508F, // $508F + #$5090, // $5090 + #$5091, // $5091 + #$5092, // $5092 + #$5093, // $5093 + #$5094, // $5094 + #$5095, // $5095 + #$5096, // $5096 + #$5097, // $5097 + #$5098, // $5098 + #$5099, // $5099 + #$509A, // $509A + #$509B, // $509B + #$509C, // $509C + #$509D, // $509D + #$509E, // $509E + #$509F, // $509F + #$50A0, // $50A0 + #$50A1, // $50A1 + #$50A2, // $50A2 + #$50A3, // $50A3 + #$50A4, // $50A4 + #$50A5, // $50A5 + #$50A6, // $50A6 + #$50A7, // $50A7 + #$50A8, // $50A8 + #$50A9, // $50A9 + #$50AA, // $50AA + #$50AB, // $50AB + #$50AC, // $50AC + #$50AD, // $50AD + #$50AE, // $50AE + #$50AF, // $50AF + #$50B0, // $50B0 + #$50B1, // $50B1 + #$50B2, // $50B2 + #$50B3, // $50B3 + #$50B4, // $50B4 + #$50B5, // $50B5 + #$50B6, // $50B6 + #$50B7, // $50B7 + #$50B8, // $50B8 + #$50B9, // $50B9 + #$50BA, // $50BA + #$50BB, // $50BB + #$50BC, // $50BC + #$50BD, // $50BD + #$50BE, // $50BE + #$50BF, // $50BF + #$50C0, // $50C0 + #$50C1, // $50C1 + #$50C2, // $50C2 + #$50C3, // $50C3 + #$50C4, // $50C4 + #$50C5, // $50C5 + #$50C6, // $50C6 + #$50C7, // $50C7 + #$50C8, // $50C8 + #$50C9, // $50C9 + #$50CA, // $50CA + #$50CB, // $50CB + #$50CC, // $50CC + #$50CD, // $50CD + #$50CE, // $50CE + #$50CF, // $50CF + #$50D0, // $50D0 + #$50D1, // $50D1 + #$50D2, // $50D2 + #$50D3, // $50D3 + #$50D4, // $50D4 + #$50D5, // $50D5 + #$50D6, // $50D6 + #$50D7, // $50D7 + #$50D8, // $50D8 + #$50D9, // $50D9 + #$50DA, // $50DA + #$50DB, // $50DB + #$50DC, // $50DC + #$50DD, // $50DD + #$50DE, // $50DE + #$50DF, // $50DF + #$50E0, // $50E0 + #$50E1, // $50E1 + #$50E2, // $50E2 + #$50E3, // $50E3 + #$50E4, // $50E4 + #$50E5, // $50E5 + #$50E6, // $50E6 + #$50E7, // $50E7 + #$50E8, // $50E8 + #$50E9, // $50E9 + #$50EA, // $50EA + #$50EB, // $50EB + #$50EC, // $50EC + #$50ED, // $50ED + #$50EE, // $50EE + #$50EF, // $50EF + #$50F0, // $50F0 + #$50F1, // $50F1 + #$50F2, // $50F2 + #$50F3, // $50F3 + #$50F4, // $50F4 + #$50F5, // $50F5 + #$50F6, // $50F6 + #$50F7, // $50F7 + #$50F8, // $50F8 + #$50F9, // $50F9 + #$50FA, // $50FA + #$50FB, // $50FB + #$50FC, // $50FC + #$50FD, // $50FD + #$50FE, // $50FE + #$50FF, // $50FF + #$5100, // $5100 + #$5101, // $5101 + #$5102, // $5102 + #$5103, // $5103 + #$5104, // $5104 + #$5105, // $5105 + #$5106, // $5106 + #$5107, // $5107 + #$5108, // $5108 + #$5109, // $5109 + #$510A, // $510A + #$510B, // $510B + #$510C, // $510C + #$510D, // $510D + #$510E, // $510E + #$510F, // $510F + #$5110, // $5110 + #$5111, // $5111 + #$5112, // $5112 + #$5113, // $5113 + #$5114, // $5114 + #$5115, // $5115 + #$5116, // $5116 + #$5117, // $5117 + #$5118, // $5118 + #$5119, // $5119 + #$511A, // $511A + #$511B, // $511B + #$511C, // $511C + #$511D, // $511D + #$511E, // $511E + #$511F, // $511F + #$5120, // $5120 + #$5121, // $5121 + #$5122, // $5122 + #$5123, // $5123 + #$5124, // $5124 + #$5125, // $5125 + #$5126, // $5126 + #$5127, // $5127 + #$5128, // $5128 + #$5129, // $5129 + #$512A, // $512A + #$512B, // $512B + #$512C, // $512C + #$512D, // $512D + #$512E, // $512E + #$512F, // $512F + #$5130, // $5130 + #$5131, // $5131 + #$5132, // $5132 + #$5133, // $5133 + #$5134, // $5134 + #$5135, // $5135 + #$5136, // $5136 + #$5137, // $5137 + #$5138, // $5138 + #$5139, // $5139 + #$513A, // $513A + #$513B, // $513B + #$513C, // $513C + #$513D, // $513D + #$513E, // $513E + #$513F, // $513F + #$5140, // $5140 + #$5141, // $5141 + #$5142, // $5142 + #$5143, // $5143 + #$5144, // $5144 + #$5145, // $5145 + #$5146, // $5146 + #$5147, // $5147 + #$5148, // $5148 + #$5149, // $5149 + #$514A, // $514A + #$514B, // $514B + #$514C, // $514C + #$514D, // $514D + #$514E, // $514E + #$514F, // $514F + #$5150, // $5150 + #$5151, // $5151 + #$5152, // $5152 + #$5153, // $5153 + #$5154, // $5154 + #$5155, // $5155 + #$5156, // $5156 + #$5157, // $5157 + #$5158, // $5158 + #$5159, // $5159 + #$515A, // $515A + #$515B, // $515B + #$515C, // $515C + #$515D, // $515D + #$515E, // $515E + #$515F, // $515F + #$5160, // $5160 + #$5161, // $5161 + #$5162, // $5162 + #$5163, // $5163 + #$5164, // $5164 + #$5165, // $5165 + #$5166, // $5166 + #$5167, // $5167 + #$5168, // $5168 + #$5169, // $5169 + #$516A, // $516A + #$516B, // $516B + #$516C, // $516C + #$516D, // $516D + #$516E, // $516E + #$516F, // $516F + #$5170, // $5170 + #$5171, // $5171 + #$5172, // $5172 + #$5173, // $5173 + #$5174, // $5174 + #$5175, // $5175 + #$5176, // $5176 + #$5177, // $5177 + #$5178, // $5178 + #$5179, // $5179 + #$517A, // $517A + #$517B, // $517B + #$517C, // $517C + #$517D, // $517D + #$517E, // $517E + #$517F, // $517F + #$5180, // $5180 + #$5181, // $5181 + #$5182, // $5182 + #$5183, // $5183 + #$5184, // $5184 + #$5185, // $5185 + #$5186, // $5186 + #$5187, // $5187 + #$5188, // $5188 + #$5189, // $5189 + #$518A, // $518A + #$518B, // $518B + #$518C, // $518C + #$518D, // $518D + #$518E, // $518E + #$518F, // $518F + #$5190, // $5190 + #$5191, // $5191 + #$5192, // $5192 + #$5193, // $5193 + #$5194, // $5194 + #$5195, // $5195 + #$5196, // $5196 + #$5197, // $5197 + #$5198, // $5198 + #$5199, // $5199 + #$519A, // $519A + #$519B, // $519B + #$519C, // $519C + #$519D, // $519D + #$519E, // $519E + #$519F, // $519F + #$51A0, // $51A0 + #$51A1, // $51A1 + #$51A2, // $51A2 + #$51A3, // $51A3 + #$51A4, // $51A4 + #$51A5, // $51A5 + #$51A6, // $51A6 + #$51A7, // $51A7 + #$51A8, // $51A8 + #$51A9, // $51A9 + #$51AA, // $51AA + #$51AB, // $51AB + #$51AC, // $51AC + #$51AD, // $51AD + #$51AE, // $51AE + #$51AF, // $51AF + #$51B0, // $51B0 + #$51B1, // $51B1 + #$51B2, // $51B2 + #$51B3, // $51B3 + #$51B4, // $51B4 + #$51B5, // $51B5 + #$51B6, // $51B6 + #$51B7, // $51B7 + #$51B8, // $51B8 + #$51B9, // $51B9 + #$51BA, // $51BA + #$51BB, // $51BB + #$51BC, // $51BC + #$51BD, // $51BD + #$51BE, // $51BE + #$51BF, // $51BF + #$51C0, // $51C0 + #$51C1, // $51C1 + #$51C2, // $51C2 + #$51C3, // $51C3 + #$51C4, // $51C4 + #$51C5, // $51C5 + #$51C6, // $51C6 + #$51C7, // $51C7 + #$51C8, // $51C8 + #$51C9, // $51C9 + #$51CA, // $51CA + #$51CB, // $51CB + #$51CC, // $51CC + #$51CD, // $51CD + #$51CE, // $51CE + #$51CF, // $51CF + #$51D0, // $51D0 + #$51D1, // $51D1 + #$51D2, // $51D2 + #$51D3, // $51D3 + #$51D4, // $51D4 + #$51D5, // $51D5 + #$51D6, // $51D6 + #$51D7, // $51D7 + #$51D8, // $51D8 + #$51D9, // $51D9 + #$51DA, // $51DA + #$51DB, // $51DB + #$51DC, // $51DC + #$51DD, // $51DD + #$51DE, // $51DE + #$51DF, // $51DF + #$51E0, // $51E0 + #$51E1, // $51E1 + #$51E2, // $51E2 + #$51E3, // $51E3 + #$51E4, // $51E4 + #$51E5, // $51E5 + #$51E6, // $51E6 + #$51E7, // $51E7 + #$51E8, // $51E8 + #$51E9, // $51E9 + #$51EA, // $51EA + #$51EB, // $51EB + #$51EC, // $51EC + #$51ED, // $51ED + #$51EE, // $51EE + #$51EF, // $51EF + #$51F0, // $51F0 + #$51F1, // $51F1 + #$51F2, // $51F2 + #$51F3, // $51F3 + #$51F4, // $51F4 + #$51F5, // $51F5 + #$51F6, // $51F6 + #$51F7, // $51F7 + #$51F8, // $51F8 + #$51F9, // $51F9 + #$51FA, // $51FA + #$51FB, // $51FB + #$51FC, // $51FC + #$51FD, // $51FD + #$51FE, // $51FE + #$51FF, // $51FF + #$5200, // $5200 + #$5201, // $5201 + #$5202, // $5202 + #$5203, // $5203 + #$5204, // $5204 + #$5205, // $5205 + #$5206, // $5206 + #$5207, // $5207 + #$5208, // $5208 + #$5209, // $5209 + #$520A, // $520A + #$520B, // $520B + #$520C, // $520C + #$520D, // $520D + #$520E, // $520E + #$520F, // $520F + #$5210, // $5210 + #$5211, // $5211 + #$5212, // $5212 + #$5213, // $5213 + #$5214, // $5214 + #$5215, // $5215 + #$5216, // $5216 + #$5217, // $5217 + #$5218, // $5218 + #$5219, // $5219 + #$521A, // $521A + #$521B, // $521B + #$521C, // $521C + #$521D, // $521D + #$521E, // $521E + #$521F, // $521F + #$5220, // $5220 + #$5221, // $5221 + #$5222, // $5222 + #$5223, // $5223 + #$5224, // $5224 + #$5225, // $5225 + #$5226, // $5226 + #$5227, // $5227 + #$5228, // $5228 + #$5229, // $5229 + #$522A, // $522A + #$522B, // $522B + #$522C, // $522C + #$522D, // $522D + #$522E, // $522E + #$522F, // $522F + #$5230, // $5230 + #$5231, // $5231 + #$5232, // $5232 + #$5233, // $5233 + #$5234, // $5234 + #$5235, // $5235 + #$5236, // $5236 + #$5237, // $5237 + #$5238, // $5238 + #$5239, // $5239 + #$523A, // $523A + #$523B, // $523B + #$523C, // $523C + #$523D, // $523D + #$523E, // $523E + #$523F, // $523F + #$5240, // $5240 + #$5241, // $5241 + #$5242, // $5242 + #$5243, // $5243 + #$5244, // $5244 + #$5245, // $5245 + #$5246, // $5246 + #$5247, // $5247 + #$5248, // $5248 + #$5249, // $5249 + #$524A, // $524A + #$524B, // $524B + #$524C, // $524C + #$524D, // $524D + #$524E, // $524E + #$524F, // $524F + #$5250, // $5250 + #$5251, // $5251 + #$5252, // $5252 + #$5253, // $5253 + #$5254, // $5254 + #$5255, // $5255 + #$5256, // $5256 + #$5257, // $5257 + #$5258, // $5258 + #$5259, // $5259 + #$525A, // $525A + #$525B, // $525B + #$525C, // $525C + #$525D, // $525D + #$525E, // $525E + #$525F, // $525F + #$5260, // $5260 + #$5261, // $5261 + #$5262, // $5262 + #$5263, // $5263 + #$5264, // $5264 + #$5265, // $5265 + #$5266, // $5266 + #$5267, // $5267 + #$5268, // $5268 + #$5269, // $5269 + #$526A, // $526A + #$526B, // $526B + #$526C, // $526C + #$526D, // $526D + #$526E, // $526E + #$526F, // $526F + #$5270, // $5270 + #$5271, // $5271 + #$5272, // $5272 + #$5273, // $5273 + #$5274, // $5274 + #$5275, // $5275 + #$5276, // $5276 + #$5277, // $5277 + #$5278, // $5278 + #$5279, // $5279 + #$527A, // $527A + #$527B, // $527B + #$527C, // $527C + #$527D, // $527D + #$527E, // $527E + #$527F, // $527F + #$5280, // $5280 + #$5281, // $5281 + #$5282, // $5282 + #$5283, // $5283 + #$5284, // $5284 + #$5285, // $5285 + #$5286, // $5286 + #$5287, // $5287 + #$5288, // $5288 + #$5289, // $5289 + #$528A, // $528A + #$528B, // $528B + #$528C, // $528C + #$528D, // $528D + #$528E, // $528E + #$528F, // $528F + #$5290, // $5290 + #$5291, // $5291 + #$5292, // $5292 + #$5293, // $5293 + #$5294, // $5294 + #$5295, // $5295 + #$5296, // $5296 + #$5297, // $5297 + #$5298, // $5298 + #$5299, // $5299 + #$529A, // $529A + #$529B, // $529B + #$529C, // $529C + #$529D, // $529D + #$529E, // $529E + #$529F, // $529F + #$52A0, // $52A0 + #$52A1, // $52A1 + #$52A2, // $52A2 + #$52A3, // $52A3 + #$52A4, // $52A4 + #$52A5, // $52A5 + #$52A6, // $52A6 + #$52A7, // $52A7 + #$52A8, // $52A8 + #$52A9, // $52A9 + #$52AA, // $52AA + #$52AB, // $52AB + #$52AC, // $52AC + #$52AD, // $52AD + #$52AE, // $52AE + #$52AF, // $52AF + #$52B0, // $52B0 + #$52B1, // $52B1 + #$52B2, // $52B2 + #$52B3, // $52B3 + #$52B4, // $52B4 + #$52B5, // $52B5 + #$52B6, // $52B6 + #$52B7, // $52B7 + #$52B8, // $52B8 + #$52B9, // $52B9 + #$52BA, // $52BA + #$52BB, // $52BB + #$52BC, // $52BC + #$52BD, // $52BD + #$52BE, // $52BE + #$52BF, // $52BF + #$52C0, // $52C0 + #$52C1, // $52C1 + #$52C2, // $52C2 + #$52C3, // $52C3 + #$52C4, // $52C4 + #$52C5, // $52C5 + #$52C6, // $52C6 + #$52C7, // $52C7 + #$52C8, // $52C8 + #$52C9, // $52C9 + #$52CA, // $52CA + #$52CB, // $52CB + #$52CC, // $52CC + #$52CD, // $52CD + #$52CE, // $52CE + #$52CF, // $52CF + #$52D0, // $52D0 + #$52D1, // $52D1 + #$52D2, // $52D2 + #$52D3, // $52D3 + #$52D4, // $52D4 + #$52D5, // $52D5 + #$52D6, // $52D6 + #$52D7, // $52D7 + #$52D8, // $52D8 + #$52D9, // $52D9 + #$52DA, // $52DA + #$52DB, // $52DB + #$52DC, // $52DC + #$52DD, // $52DD + #$52DE, // $52DE + #$52DF, // $52DF + #$52E0, // $52E0 + #$52E1, // $52E1 + #$52E2, // $52E2 + #$52E3, // $52E3 + #$52E4, // $52E4 + #$52E5, // $52E5 + #$52E6, // $52E6 + #$52E7, // $52E7 + #$52E8, // $52E8 + #$52E9, // $52E9 + #$52EA, // $52EA + #$52EB, // $52EB + #$52EC, // $52EC + #$52ED, // $52ED + #$52EE, // $52EE + #$52EF, // $52EF + #$52F0, // $52F0 + #$52F1, // $52F1 + #$52F2, // $52F2 + #$52F3, // $52F3 + #$52F4, // $52F4 + #$52F5, // $52F5 + #$52F6, // $52F6 + #$52F7, // $52F7 + #$52F8, // $52F8 + #$52F9, // $52F9 + #$52FA, // $52FA + #$52FB, // $52FB + #$52FC, // $52FC + #$52FD, // $52FD + #$52FE, // $52FE + #$52FF, // $52FF + #$5300, // $5300 + #$5301, // $5301 + #$5302, // $5302 + #$5303, // $5303 + #$5304, // $5304 + #$5305, // $5305 + #$5306, // $5306 + #$5307, // $5307 + #$5308, // $5308 + #$5309, // $5309 + #$530A, // $530A + #$530B, // $530B + #$530C, // $530C + #$530D, // $530D + #$530E, // $530E + #$530F, // $530F + #$5310, // $5310 + #$5311, // $5311 + #$5312, // $5312 + #$5313, // $5313 + #$5314, // $5314 + #$5315, // $5315 + #$5316, // $5316 + #$5317, // $5317 + #$5318, // $5318 + #$5319, // $5319 + #$531A, // $531A + #$531B, // $531B + #$531C, // $531C + #$531D, // $531D + #$531E, // $531E + #$531F, // $531F + #$5320, // $5320 + #$5321, // $5321 + #$5322, // $5322 + #$5323, // $5323 + #$5324, // $5324 + #$5325, // $5325 + #$5326, // $5326 + #$5327, // $5327 + #$5328, // $5328 + #$5329, // $5329 + #$532A, // $532A + #$532B, // $532B + #$532C, // $532C + #$532D, // $532D + #$532E, // $532E + #$532F, // $532F + #$5330, // $5330 + #$5331, // $5331 + #$5332, // $5332 + #$5333, // $5333 + #$5334, // $5334 + #$5335, // $5335 + #$5336, // $5336 + #$5337, // $5337 + #$5338, // $5338 + #$5339, // $5339 + #$533A, // $533A + #$533B, // $533B + #$533C, // $533C + #$533D, // $533D + #$533E, // $533E + #$533F, // $533F + #$5340, // $5340 + #$5341, // $5341 + #$5342, // $5342 + #$5343, // $5343 + #$5344, // $5344 + #$5345, // $5345 + #$5346, // $5346 + #$5347, // $5347 + #$5348, // $5348 + #$5349, // $5349 + #$534A, // $534A + #$534B, // $534B + #$534C, // $534C + #$534D, // $534D + #$534E, // $534E + #$534F, // $534F + #$5350, // $5350 + #$5351, // $5351 + #$5352, // $5352 + #$5353, // $5353 + #$5354, // $5354 + #$5355, // $5355 + #$5356, // $5356 + #$5357, // $5357 + #$5358, // $5358 + #$5359, // $5359 + #$535A, // $535A + #$535B, // $535B + #$535C, // $535C + #$535D, // $535D + #$535E, // $535E + #$535F, // $535F + #$5360, // $5360 + #$5361, // $5361 + #$5362, // $5362 + #$5363, // $5363 + #$5364, // $5364 + #$5365, // $5365 + #$5366, // $5366 + #$5367, // $5367 + #$5368, // $5368 + #$5369, // $5369 + #$536A, // $536A + #$536B, // $536B + #$536C, // $536C + #$536D, // $536D + #$536E, // $536E + #$536F, // $536F + #$5370, // $5370 + #$5371, // $5371 + #$5372, // $5372 + #$5373, // $5373 + #$5374, // $5374 + #$5375, // $5375 + #$5376, // $5376 + #$5377, // $5377 + #$5378, // $5378 + #$5379, // $5379 + #$537A, // $537A + #$537B, // $537B + #$537C, // $537C + #$537D, // $537D + #$537E, // $537E + #$537F, // $537F + #$5380, // $5380 + #$5381, // $5381 + #$5382, // $5382 + #$5383, // $5383 + #$5384, // $5384 + #$5385, // $5385 + #$5386, // $5386 + #$5387, // $5387 + #$5388, // $5388 + #$5389, // $5389 + #$538A, // $538A + #$538B, // $538B + #$538C, // $538C + #$538D, // $538D + #$538E, // $538E + #$538F, // $538F + #$5390, // $5390 + #$5391, // $5391 + #$5392, // $5392 + #$5393, // $5393 + #$5394, // $5394 + #$5395, // $5395 + #$5396, // $5396 + #$5397, // $5397 + #$5398, // $5398 + #$5399, // $5399 + #$539A, // $539A + #$539B, // $539B + #$539C, // $539C + #$539D, // $539D + #$539E, // $539E + #$539F, // $539F + #$53A0, // $53A0 + #$53A1, // $53A1 + #$53A2, // $53A2 + #$53A3, // $53A3 + #$53A4, // $53A4 + #$53A5, // $53A5 + #$53A6, // $53A6 + #$53A7, // $53A7 + #$53A8, // $53A8 + #$53A9, // $53A9 + #$53AA, // $53AA + #$53AB, // $53AB + #$53AC, // $53AC + #$53AD, // $53AD + #$53AE, // $53AE + #$53AF, // $53AF + #$53B0, // $53B0 + #$53B1, // $53B1 + #$53B2, // $53B2 + #$53B3, // $53B3 + #$53B4, // $53B4 + #$53B5, // $53B5 + #$53B6, // $53B6 + #$53B7, // $53B7 + #$53B8, // $53B8 + #$53B9, // $53B9 + #$53BA, // $53BA + #$53BB, // $53BB + #$53BC, // $53BC + #$53BD, // $53BD + #$53BE, // $53BE + #$53BF, // $53BF + #$53C0, // $53C0 + #$53C1, // $53C1 + #$53C2, // $53C2 + #$53C3, // $53C3 + #$53C4, // $53C4 + #$53C5, // $53C5 + #$53C6, // $53C6 + #$53C7, // $53C7 + #$53C8, // $53C8 + #$53C9, // $53C9 + #$53CA, // $53CA + #$53CB, // $53CB + #$53CC, // $53CC + #$53CD, // $53CD + #$53CE, // $53CE + #$53CF, // $53CF + #$53D0, // $53D0 + #$53D1, // $53D1 + #$53D2, // $53D2 + #$53D3, // $53D3 + #$53D4, // $53D4 + #$53D5, // $53D5 + #$53D6, // $53D6 + #$53D7, // $53D7 + #$53D8, // $53D8 + #$53D9, // $53D9 + #$53DA, // $53DA + #$53DB, // $53DB + #$53DC, // $53DC + #$53DD, // $53DD + #$53DE, // $53DE + #$53DF, // $53DF + #$53E0, // $53E0 + #$53E1, // $53E1 + #$53E2, // $53E2 + #$53E3, // $53E3 + #$53E4, // $53E4 + #$53E5, // $53E5 + #$53E6, // $53E6 + #$53E7, // $53E7 + #$53E8, // $53E8 + #$53E9, // $53E9 + #$53EA, // $53EA + #$53EB, // $53EB + #$53EC, // $53EC + #$53ED, // $53ED + #$53EE, // $53EE + #$53EF, // $53EF + #$53F0, // $53F0 + #$53F1, // $53F1 + #$53F2, // $53F2 + #$53F3, // $53F3 + #$53F4, // $53F4 + #$53F5, // $53F5 + #$53F6, // $53F6 + #$53F7, // $53F7 + #$53F8, // $53F8 + #$53F9, // $53F9 + #$53FA, // $53FA + #$53FB, // $53FB + #$53FC, // $53FC + #$53FD, // $53FD + #$53FE, // $53FE + #$53FF, // $53FF + #$5400, // $5400 + #$5401, // $5401 + #$5402, // $5402 + #$5403, // $5403 + #$5404, // $5404 + #$5405, // $5405 + #$5406, // $5406 + #$5407, // $5407 + #$5408, // $5408 + #$5409, // $5409 + #$540A, // $540A + #$540B, // $540B + #$540C, // $540C + #$540D, // $540D + #$540E, // $540E + #$540F, // $540F + #$5410, // $5410 + #$5411, // $5411 + #$5412, // $5412 + #$5413, // $5413 + #$5414, // $5414 + #$5415, // $5415 + #$5416, // $5416 + #$5417, // $5417 + #$5418, // $5418 + #$5419, // $5419 + #$541A, // $541A + #$541B, // $541B + #$541C, // $541C + #$541D, // $541D + #$541E, // $541E + #$541F, // $541F + #$5420, // $5420 + #$5421, // $5421 + #$5422, // $5422 + #$5423, // $5423 + #$5424, // $5424 + #$5425, // $5425 + #$5426, // $5426 + #$5427, // $5427 + #$5428, // $5428 + #$5429, // $5429 + #$542A, // $542A + #$542B, // $542B + #$542C, // $542C + #$542D, // $542D + #$542E, // $542E + #$542F, // $542F + #$5430, // $5430 + #$5431, // $5431 + #$5432, // $5432 + #$5433, // $5433 + #$5434, // $5434 + #$5435, // $5435 + #$5436, // $5436 + #$5437, // $5437 + #$5438, // $5438 + #$5439, // $5439 + #$543A, // $543A + #$543B, // $543B + #$543C, // $543C + #$543D, // $543D + #$543E, // $543E + #$543F, // $543F + #$5440, // $5440 + #$5441, // $5441 + #$5442, // $5442 + #$5443, // $5443 + #$5444, // $5444 + #$5445, // $5445 + #$5446, // $5446 + #$5447, // $5447 + #$5448, // $5448 + #$5449, // $5449 + #$544A, // $544A + #$544B, // $544B + #$544C, // $544C + #$544D, // $544D + #$544E, // $544E + #$544F, // $544F + #$5450, // $5450 + #$5451, // $5451 + #$5452, // $5452 + #$5453, // $5453 + #$5454, // $5454 + #$5455, // $5455 + #$5456, // $5456 + #$5457, // $5457 + #$5458, // $5458 + #$5459, // $5459 + #$545A, // $545A + #$545B, // $545B + #$545C, // $545C + #$545D, // $545D + #$545E, // $545E + #$545F, // $545F + #$5460, // $5460 + #$5461, // $5461 + #$5462, // $5462 + #$5463, // $5463 + #$5464, // $5464 + #$5465, // $5465 + #$5466, // $5466 + #$5467, // $5467 + #$5468, // $5468 + #$5469, // $5469 + #$546A, // $546A + #$546B, // $546B + #$546C, // $546C + #$546D, // $546D + #$546E, // $546E + #$546F, // $546F + #$5470, // $5470 + #$5471, // $5471 + #$5472, // $5472 + #$5473, // $5473 + #$5474, // $5474 + #$5475, // $5475 + #$5476, // $5476 + #$5477, // $5477 + #$5478, // $5478 + #$5479, // $5479 + #$547A, // $547A + #$547B, // $547B + #$547C, // $547C + #$547D, // $547D + #$547E, // $547E + #$547F, // $547F + #$5480, // $5480 + #$5481, // $5481 + #$5482, // $5482 + #$5483, // $5483 + #$5484, // $5484 + #$5485, // $5485 + #$5486, // $5486 + #$5487, // $5487 + #$5488, // $5488 + #$5489, // $5489 + #$548A, // $548A + #$548B, // $548B + #$548C, // $548C + #$548D, // $548D + #$548E, // $548E + #$548F, // $548F + #$5490, // $5490 + #$5491, // $5491 + #$5492, // $5492 + #$5493, // $5493 + #$5494, // $5494 + #$5495, // $5495 + #$5496, // $5496 + #$5497, // $5497 + #$5498, // $5498 + #$5499, // $5499 + #$549A, // $549A + #$549B, // $549B + #$549C, // $549C + #$549D, // $549D + #$549E, // $549E + #$549F, // $549F + #$54A0, // $54A0 + #$54A1, // $54A1 + #$54A2, // $54A2 + #$54A3, // $54A3 + #$54A4, // $54A4 + #$54A5, // $54A5 + #$54A6, // $54A6 + #$54A7, // $54A7 + #$54A8, // $54A8 + #$54A9, // $54A9 + #$54AA, // $54AA + #$54AB, // $54AB + #$54AC, // $54AC + #$54AD, // $54AD + #$54AE, // $54AE + #$54AF, // $54AF + #$54B0, // $54B0 + #$54B1, // $54B1 + #$54B2, // $54B2 + #$54B3, // $54B3 + #$54B4, // $54B4 + #$54B5, // $54B5 + #$54B6, // $54B6 + #$54B7, // $54B7 + #$54B8, // $54B8 + #$54B9, // $54B9 + #$54BA, // $54BA + #$54BB, // $54BB + #$54BC, // $54BC + #$54BD, // $54BD + #$54BE, // $54BE + #$54BF, // $54BF + #$54C0, // $54C0 + #$54C1, // $54C1 + #$54C2, // $54C2 + #$54C3, // $54C3 + #$54C4, // $54C4 + #$54C5, // $54C5 + #$54C6, // $54C6 + #$54C7, // $54C7 + #$54C8, // $54C8 + #$54C9, // $54C9 + #$54CA, // $54CA + #$54CB, // $54CB + #$54CC, // $54CC + #$54CD, // $54CD + #$54CE, // $54CE + #$54CF, // $54CF + #$54D0, // $54D0 + #$54D1, // $54D1 + #$54D2, // $54D2 + #$54D3, // $54D3 + #$54D4, // $54D4 + #$54D5, // $54D5 + #$54D6, // $54D6 + #$54D7, // $54D7 + #$54D8, // $54D8 + #$54D9, // $54D9 + #$54DA, // $54DA + #$54DB, // $54DB + #$54DC, // $54DC + #$54DD, // $54DD + #$54DE, // $54DE + #$54DF, // $54DF + #$54E0, // $54E0 + #$54E1, // $54E1 + #$54E2, // $54E2 + #$54E3, // $54E3 + #$54E4, // $54E4 + #$54E5, // $54E5 + #$54E6, // $54E6 + #$54E7, // $54E7 + #$54E8, // $54E8 + #$54E9, // $54E9 + #$54EA, // $54EA + #$54EB, // $54EB + #$54EC, // $54EC + #$54ED, // $54ED + #$54EE, // $54EE + #$54EF, // $54EF + #$54F0, // $54F0 + #$54F1, // $54F1 + #$54F2, // $54F2 + #$54F3, // $54F3 + #$54F4, // $54F4 + #$54F5, // $54F5 + #$54F6, // $54F6 + #$54F7, // $54F7 + #$54F8, // $54F8 + #$54F9, // $54F9 + #$54FA, // $54FA + #$54FB, // $54FB + #$54FC, // $54FC + #$54FD, // $54FD + #$54FE, // $54FE + #$54FF, // $54FF + #$5500, // $5500 + #$5501, // $5501 + #$5502, // $5502 + #$5503, // $5503 + #$5504, // $5504 + #$5505, // $5505 + #$5506, // $5506 + #$5507, // $5507 + #$5508, // $5508 + #$5509, // $5509 + #$550A, // $550A + #$550B, // $550B + #$550C, // $550C + #$550D, // $550D + #$550E, // $550E + #$550F, // $550F + #$5510, // $5510 + #$5511, // $5511 + #$5512, // $5512 + #$5513, // $5513 + #$5514, // $5514 + #$5515, // $5515 + #$5516, // $5516 + #$5517, // $5517 + #$5518, // $5518 + #$5519, // $5519 + #$551A, // $551A + #$551B, // $551B + #$551C, // $551C + #$551D, // $551D + #$551E, // $551E + #$551F, // $551F + #$5520, // $5520 + #$5521, // $5521 + #$5522, // $5522 + #$5523, // $5523 + #$5524, // $5524 + #$5525, // $5525 + #$5526, // $5526 + #$5527, // $5527 + #$5528, // $5528 + #$5529, // $5529 + #$552A, // $552A + #$552B, // $552B + #$552C, // $552C + #$552D, // $552D + #$552E, // $552E + #$552F, // $552F + #$5530, // $5530 + #$5531, // $5531 + #$5532, // $5532 + #$5533, // $5533 + #$5534, // $5534 + #$5535, // $5535 + #$5536, // $5536 + #$5537, // $5537 + #$5538, // $5538 + #$5539, // $5539 + #$553A, // $553A + #$553B, // $553B + #$553C, // $553C + #$553D, // $553D + #$553E, // $553E + #$553F, // $553F + #$5540, // $5540 + #$5541, // $5541 + #$5542, // $5542 + #$5543, // $5543 + #$5544, // $5544 + #$5545, // $5545 + #$5546, // $5546 + #$5547, // $5547 + #$5548, // $5548 + #$5549, // $5549 + #$554A, // $554A + #$554B, // $554B + #$554C, // $554C + #$554D, // $554D + #$554E, // $554E + #$554F, // $554F + #$5550, // $5550 + #$5551, // $5551 + #$5552, // $5552 + #$5553, // $5553 + #$5554, // $5554 + #$5555, // $5555 + #$5556, // $5556 + #$5557, // $5557 + #$5558, // $5558 + #$5559, // $5559 + #$555A, // $555A + #$555B, // $555B + #$555C, // $555C + #$555D, // $555D + #$555E, // $555E + #$555F, // $555F + #$5560, // $5560 + #$5561, // $5561 + #$5562, // $5562 + #$5563, // $5563 + #$5564, // $5564 + #$5565, // $5565 + #$5566, // $5566 + #$5567, // $5567 + #$5568, // $5568 + #$5569, // $5569 + #$556A, // $556A + #$556B, // $556B + #$556C, // $556C + #$556D, // $556D + #$556E, // $556E + #$556F, // $556F + #$5570, // $5570 + #$5571, // $5571 + #$5572, // $5572 + #$5573, // $5573 + #$5574, // $5574 + #$5575, // $5575 + #$5576, // $5576 + #$5577, // $5577 + #$5578, // $5578 + #$5579, // $5579 + #$557A, // $557A + #$557B, // $557B + #$557C, // $557C + #$557D, // $557D + #$557E, // $557E + #$557F, // $557F + #$5580, // $5580 + #$5581, // $5581 + #$5582, // $5582 + #$5583, // $5583 + #$5584, // $5584 + #$5585, // $5585 + #$5586, // $5586 + #$5587, // $5587 + #$5588, // $5588 + #$5589, // $5589 + #$558A, // $558A + #$558B, // $558B + #$558C, // $558C + #$558D, // $558D + #$558E, // $558E + #$558F, // $558F + #$5590, // $5590 + #$5591, // $5591 + #$5592, // $5592 + #$5593, // $5593 + #$5594, // $5594 + #$5595, // $5595 + #$5596, // $5596 + #$5597, // $5597 + #$5598, // $5598 + #$5599, // $5599 + #$559A, // $559A + #$559B, // $559B + #$559C, // $559C + #$559D, // $559D + #$559E, // $559E + #$559F, // $559F + #$55A0, // $55A0 + #$55A1, // $55A1 + #$55A2, // $55A2 + #$55A3, // $55A3 + #$55A4, // $55A4 + #$55A5, // $55A5 + #$55A6, // $55A6 + #$55A7, // $55A7 + #$55A8, // $55A8 + #$55A9, // $55A9 + #$55AA, // $55AA + #$55AB, // $55AB + #$55AC, // $55AC + #$55AD, // $55AD + #$55AE, // $55AE + #$55AF, // $55AF + #$55B0, // $55B0 + #$55B1, // $55B1 + #$55B2, // $55B2 + #$55B3, // $55B3 + #$55B4, // $55B4 + #$55B5, // $55B5 + #$55B6, // $55B6 + #$55B7, // $55B7 + #$55B8, // $55B8 + #$55B9, // $55B9 + #$55BA, // $55BA + #$55BB, // $55BB + #$55BC, // $55BC + #$55BD, // $55BD + #$55BE, // $55BE + #$55BF, // $55BF + #$55C0, // $55C0 + #$55C1, // $55C1 + #$55C2, // $55C2 + #$55C3, // $55C3 + #$55C4, // $55C4 + #$55C5, // $55C5 + #$55C6, // $55C6 + #$55C7, // $55C7 + #$55C8, // $55C8 + #$55C9, // $55C9 + #$55CA, // $55CA + #$55CB, // $55CB + #$55CC, // $55CC + #$55CD, // $55CD + #$55CE, // $55CE + #$55CF, // $55CF + #$55D0, // $55D0 + #$55D1, // $55D1 + #$55D2, // $55D2 + #$55D3, // $55D3 + #$55D4, // $55D4 + #$55D5, // $55D5 + #$55D6, // $55D6 + #$55D7, // $55D7 + #$55D8, // $55D8 + #$55D9, // $55D9 + #$55DA, // $55DA + #$55DB, // $55DB + #$55DC, // $55DC + #$55DD, // $55DD + #$55DE, // $55DE + #$55DF, // $55DF + #$55E0, // $55E0 + #$55E1, // $55E1 + #$55E2, // $55E2 + #$55E3, // $55E3 + #$55E4, // $55E4 + #$55E5, // $55E5 + #$55E6, // $55E6 + #$55E7, // $55E7 + #$55E8, // $55E8 + #$55E9, // $55E9 + #$55EA, // $55EA + #$55EB, // $55EB + #$55EC, // $55EC + #$55ED, // $55ED + #$55EE, // $55EE + #$55EF, // $55EF + #$55F0, // $55F0 + #$55F1, // $55F1 + #$55F2, // $55F2 + #$55F3, // $55F3 + #$55F4, // $55F4 + #$55F5, // $55F5 + #$55F6, // $55F6 + #$55F7, // $55F7 + #$55F8, // $55F8 + #$55F9, // $55F9 + #$55FA, // $55FA + #$55FB, // $55FB + #$55FC, // $55FC + #$55FD, // $55FD + #$55FE, // $55FE + #$55FF, // $55FF + #$5600, // $5600 + #$5601, // $5601 + #$5602, // $5602 + #$5603, // $5603 + #$5604, // $5604 + #$5605, // $5605 + #$5606, // $5606 + #$5607, // $5607 + #$5608, // $5608 + #$5609, // $5609 + #$560A, // $560A + #$560B, // $560B + #$560C, // $560C + #$560D, // $560D + #$560E, // $560E + #$560F, // $560F + #$5610, // $5610 + #$5611, // $5611 + #$5612, // $5612 + #$5613, // $5613 + #$5614, // $5614 + #$5615, // $5615 + #$5616, // $5616 + #$5617, // $5617 + #$5618, // $5618 + #$5619, // $5619 + #$561A, // $561A + #$561B, // $561B + #$561C, // $561C + #$561D, // $561D + #$561E, // $561E + #$561F, // $561F + #$5620, // $5620 + #$5621, // $5621 + #$5622, // $5622 + #$5623, // $5623 + #$5624, // $5624 + #$5625, // $5625 + #$5626, // $5626 + #$5627, // $5627 + #$5628, // $5628 + #$5629, // $5629 + #$562A, // $562A + #$562B, // $562B + #$562C, // $562C + #$562D, // $562D + #$562E, // $562E + #$562F, // $562F + #$5630, // $5630 + #$5631, // $5631 + #$5632, // $5632 + #$5633, // $5633 + #$5634, // $5634 + #$5635, // $5635 + #$5636, // $5636 + #$5637, // $5637 + #$5638, // $5638 + #$5639, // $5639 + #$563A, // $563A + #$563B, // $563B + #$563C, // $563C + #$563D, // $563D + #$563E, // $563E + #$563F, // $563F + #$5640, // $5640 + #$5641, // $5641 + #$5642, // $5642 + #$5643, // $5643 + #$5644, // $5644 + #$5645, // $5645 + #$5646, // $5646 + #$5647, // $5647 + #$5648, // $5648 + #$5649, // $5649 + #$564A, // $564A + #$564B, // $564B + #$564C, // $564C + #$564D, // $564D + #$564E, // $564E + #$564F, // $564F + #$5650, // $5650 + #$5651, // $5651 + #$5652, // $5652 + #$5653, // $5653 + #$5654, // $5654 + #$5655, // $5655 + #$5656, // $5656 + #$5657, // $5657 + #$5658, // $5658 + #$5659, // $5659 + #$565A, // $565A + #$565B, // $565B + #$565C, // $565C + #$565D, // $565D + #$565E, // $565E + #$565F, // $565F + #$5660, // $5660 + #$5661, // $5661 + #$5662, // $5662 + #$5663, // $5663 + #$5664, // $5664 + #$5665, // $5665 + #$5666, // $5666 + #$5667, // $5667 + #$5668, // $5668 + #$5669, // $5669 + #$566A, // $566A + #$566B, // $566B + #$566C, // $566C + #$566D, // $566D + #$566E, // $566E + #$566F, // $566F + #$5670, // $5670 + #$5671, // $5671 + #$5672, // $5672 + #$5673, // $5673 + #$5674, // $5674 + #$5675, // $5675 + #$5676, // $5676 + #$5677, // $5677 + #$5678, // $5678 + #$5679, // $5679 + #$567A, // $567A + #$567B, // $567B + #$567C, // $567C + #$567D, // $567D + #$567E, // $567E + #$567F, // $567F + #$5680, // $5680 + #$5681, // $5681 + #$5682, // $5682 + #$5683, // $5683 + #$5684, // $5684 + #$5685, // $5685 + #$5686, // $5686 + #$5687, // $5687 + #$5688, // $5688 + #$5689, // $5689 + #$568A, // $568A + #$568B, // $568B + #$568C, // $568C + #$568D, // $568D + #$568E, // $568E + #$568F, // $568F + #$5690, // $5690 + #$5691, // $5691 + #$5692, // $5692 + #$5693, // $5693 + #$5694, // $5694 + #$5695, // $5695 + #$5696, // $5696 + #$5697, // $5697 + #$5698, // $5698 + #$5699, // $5699 + #$569A, // $569A + #$569B, // $569B + #$569C, // $569C + #$569D, // $569D + #$569E, // $569E + #$569F, // $569F + #$56A0, // $56A0 + #$56A1, // $56A1 + #$56A2, // $56A2 + #$56A3, // $56A3 + #$56A4, // $56A4 + #$56A5, // $56A5 + #$56A6, // $56A6 + #$56A7, // $56A7 + #$56A8, // $56A8 + #$56A9, // $56A9 + #$56AA, // $56AA + #$56AB, // $56AB + #$56AC, // $56AC + #$56AD, // $56AD + #$56AE, // $56AE + #$56AF, // $56AF + #$56B0, // $56B0 + #$56B1, // $56B1 + #$56B2, // $56B2 + #$56B3, // $56B3 + #$56B4, // $56B4 + #$56B5, // $56B5 + #$56B6, // $56B6 + #$56B7, // $56B7 + #$56B8, // $56B8 + #$56B9, // $56B9 + #$56BA, // $56BA + #$56BB, // $56BB + #$56BC, // $56BC + #$56BD, // $56BD + #$56BE, // $56BE + #$56BF, // $56BF + #$56C0, // $56C0 + #$56C1, // $56C1 + #$56C2, // $56C2 + #$56C3, // $56C3 + #$56C4, // $56C4 + #$56C5, // $56C5 + #$56C6, // $56C6 + #$56C7, // $56C7 + #$56C8, // $56C8 + #$56C9, // $56C9 + #$56CA, // $56CA + #$56CB, // $56CB + #$56CC, // $56CC + #$56CD, // $56CD + #$56CE, // $56CE + #$56CF, // $56CF + #$56D0, // $56D0 + #$56D1, // $56D1 + #$56D2, // $56D2 + #$56D3, // $56D3 + #$56D4, // $56D4 + #$56D5, // $56D5 + #$56D6, // $56D6 + #$56D7, // $56D7 + #$56D8, // $56D8 + #$56D9, // $56D9 + #$56DA, // $56DA + #$56DB, // $56DB + #$56DC, // $56DC + #$56DD, // $56DD + #$56DE, // $56DE + #$56DF, // $56DF + #$56E0, // $56E0 + #$56E1, // $56E1 + #$56E2, // $56E2 + #$56E3, // $56E3 + #$56E4, // $56E4 + #$56E5, // $56E5 + #$56E6, // $56E6 + #$56E7, // $56E7 + #$56E8, // $56E8 + #$56E9, // $56E9 + #$56EA, // $56EA + #$56EB, // $56EB + #$56EC, // $56EC + #$56ED, // $56ED + #$56EE, // $56EE + #$56EF, // $56EF + #$56F0, // $56F0 + #$56F1, // $56F1 + #$56F2, // $56F2 + #$56F3, // $56F3 + #$56F4, // $56F4 + #$56F5, // $56F5 + #$56F6, // $56F6 + #$56F7, // $56F7 + #$56F8, // $56F8 + #$56F9, // $56F9 + #$56FA, // $56FA + #$56FB, // $56FB + #$56FC, // $56FC + #$56FD, // $56FD + #$56FE, // $56FE + #$56FF, // $56FF + #$5700, // $5700 + #$5701, // $5701 + #$5702, // $5702 + #$5703, // $5703 + #$5704, // $5704 + #$5705, // $5705 + #$5706, // $5706 + #$5707, // $5707 + #$5708, // $5708 + #$5709, // $5709 + #$570A, // $570A + #$570B, // $570B + #$570C, // $570C + #$570D, // $570D + #$570E, // $570E + #$570F, // $570F + #$5710, // $5710 + #$5711, // $5711 + #$5712, // $5712 + #$5713, // $5713 + #$5714, // $5714 + #$5715, // $5715 + #$5716, // $5716 + #$5717, // $5717 + #$5718, // $5718 + #$5719, // $5719 + #$571A, // $571A + #$571B, // $571B + #$571C, // $571C + #$571D, // $571D + #$571E, // $571E + #$571F, // $571F + #$5720, // $5720 + #$5721, // $5721 + #$5722, // $5722 + #$5723, // $5723 + #$5724, // $5724 + #$5725, // $5725 + #$5726, // $5726 + #$5727, // $5727 + #$5728, // $5728 + #$5729, // $5729 + #$572A, // $572A + #$572B, // $572B + #$572C, // $572C + #$572D, // $572D + #$572E, // $572E + #$572F, // $572F + #$5730, // $5730 + #$5731, // $5731 + #$5732, // $5732 + #$5733, // $5733 + #$5734, // $5734 + #$5735, // $5735 + #$5736, // $5736 + #$5737, // $5737 + #$5738, // $5738 + #$5739, // $5739 + #$573A, // $573A + #$573B, // $573B + #$573C, // $573C + #$573D, // $573D + #$573E, // $573E + #$573F, // $573F + #$5740, // $5740 + #$5741, // $5741 + #$5742, // $5742 + #$5743, // $5743 + #$5744, // $5744 + #$5745, // $5745 + #$5746, // $5746 + #$5747, // $5747 + #$5748, // $5748 + #$5749, // $5749 + #$574A, // $574A + #$574B, // $574B + #$574C, // $574C + #$574D, // $574D + #$574E, // $574E + #$574F, // $574F + #$5750, // $5750 + #$5751, // $5751 + #$5752, // $5752 + #$5753, // $5753 + #$5754, // $5754 + #$5755, // $5755 + #$5756, // $5756 + #$5757, // $5757 + #$5758, // $5758 + #$5759, // $5759 + #$575A, // $575A + #$575B, // $575B + #$575C, // $575C + #$575D, // $575D + #$575E, // $575E + #$575F, // $575F + #$5760, // $5760 + #$5761, // $5761 + #$5762, // $5762 + #$5763, // $5763 + #$5764, // $5764 + #$5765, // $5765 + #$5766, // $5766 + #$5767, // $5767 + #$5768, // $5768 + #$5769, // $5769 + #$576A, // $576A + #$576B, // $576B + #$576C, // $576C + #$576D, // $576D + #$576E, // $576E + #$576F, // $576F + #$5770, // $5770 + #$5771, // $5771 + #$5772, // $5772 + #$5773, // $5773 + #$5774, // $5774 + #$5775, // $5775 + #$5776, // $5776 + #$5777, // $5777 + #$5778, // $5778 + #$5779, // $5779 + #$577A, // $577A + #$577B, // $577B + #$577C, // $577C + #$577D, // $577D + #$577E, // $577E + #$577F, // $577F + #$5780, // $5780 + #$5781, // $5781 + #$5782, // $5782 + #$5783, // $5783 + #$5784, // $5784 + #$5785, // $5785 + #$5786, // $5786 + #$5787, // $5787 + #$5788, // $5788 + #$5789, // $5789 + #$578A, // $578A + #$578B, // $578B + #$578C, // $578C + #$578D, // $578D + #$578E, // $578E + #$578F, // $578F + #$5790, // $5790 + #$5791, // $5791 + #$5792, // $5792 + #$5793, // $5793 + #$5794, // $5794 + #$5795, // $5795 + #$5796, // $5796 + #$5797, // $5797 + #$5798, // $5798 + #$5799, // $5799 + #$579A, // $579A + #$579B, // $579B + #$579C, // $579C + #$579D, // $579D + #$579E, // $579E + #$579F, // $579F + #$57A0, // $57A0 + #$57A1, // $57A1 + #$57A2, // $57A2 + #$57A3, // $57A3 + #$57A4, // $57A4 + #$57A5, // $57A5 + #$57A6, // $57A6 + #$57A7, // $57A7 + #$57A8, // $57A8 + #$57A9, // $57A9 + #$57AA, // $57AA + #$57AB, // $57AB + #$57AC, // $57AC + #$57AD, // $57AD + #$57AE, // $57AE + #$57AF, // $57AF + #$57B0, // $57B0 + #$57B1, // $57B1 + #$57B2, // $57B2 + #$57B3, // $57B3 + #$57B4, // $57B4 + #$57B5, // $57B5 + #$57B6, // $57B6 + #$57B7, // $57B7 + #$57B8, // $57B8 + #$57B9, // $57B9 + #$57BA, // $57BA + #$57BB, // $57BB + #$57BC, // $57BC + #$57BD, // $57BD + #$57BE, // $57BE + #$57BF, // $57BF + #$57C0, // $57C0 + #$57C1, // $57C1 + #$57C2, // $57C2 + #$57C3, // $57C3 + #$57C4, // $57C4 + #$57C5, // $57C5 + #$57C6, // $57C6 + #$57C7, // $57C7 + #$57C8, // $57C8 + #$57C9, // $57C9 + #$57CA, // $57CA + #$57CB, // $57CB + #$57CC, // $57CC + #$57CD, // $57CD + #$57CE, // $57CE + #$57CF, // $57CF + #$57D0, // $57D0 + #$57D1, // $57D1 + #$57D2, // $57D2 + #$57D3, // $57D3 + #$57D4, // $57D4 + #$57D5, // $57D5 + #$57D6, // $57D6 + #$57D7, // $57D7 + #$57D8, // $57D8 + #$57D9, // $57D9 + #$57DA, // $57DA + #$57DB, // $57DB + #$57DC, // $57DC + #$57DD, // $57DD + #$57DE, // $57DE + #$57DF, // $57DF + #$57E0, // $57E0 + #$57E1, // $57E1 + #$57E2, // $57E2 + #$57E3, // $57E3 + #$57E4, // $57E4 + #$57E5, // $57E5 + #$57E6, // $57E6 + #$57E7, // $57E7 + #$57E8, // $57E8 + #$57E9, // $57E9 + #$57EA, // $57EA + #$57EB, // $57EB + #$57EC, // $57EC + #$57ED, // $57ED + #$57EE, // $57EE + #$57EF, // $57EF + #$57F0, // $57F0 + #$57F1, // $57F1 + #$57F2, // $57F2 + #$57F3, // $57F3 + #$57F4, // $57F4 + #$57F5, // $57F5 + #$57F6, // $57F6 + #$57F7, // $57F7 + #$57F8, // $57F8 + #$57F9, // $57F9 + #$57FA, // $57FA + #$57FB, // $57FB + #$57FC, // $57FC + #$57FD, // $57FD + #$57FE, // $57FE + #$57FF, // $57FF + #$5800, // $5800 + #$5801, // $5801 + #$5802, // $5802 + #$5803, // $5803 + #$5804, // $5804 + #$5805, // $5805 + #$5806, // $5806 + #$5807, // $5807 + #$5808, // $5808 + #$5809, // $5809 + #$580A, // $580A + #$580B, // $580B + #$580C, // $580C + #$580D, // $580D + #$580E, // $580E + #$580F, // $580F + #$5810, // $5810 + #$5811, // $5811 + #$5812, // $5812 + #$5813, // $5813 + #$5814, // $5814 + #$5815, // $5815 + #$5816, // $5816 + #$5817, // $5817 + #$5818, // $5818 + #$5819, // $5819 + #$581A, // $581A + #$581B, // $581B + #$581C, // $581C + #$581D, // $581D + #$581E, // $581E + #$581F, // $581F + #$5820, // $5820 + #$5821, // $5821 + #$5822, // $5822 + #$5823, // $5823 + #$5824, // $5824 + #$5825, // $5825 + #$5826, // $5826 + #$5827, // $5827 + #$5828, // $5828 + #$5829, // $5829 + #$582A, // $582A + #$582B, // $582B + #$582C, // $582C + #$582D, // $582D + #$582E, // $582E + #$582F, // $582F + #$5830, // $5830 + #$5831, // $5831 + #$5832, // $5832 + #$5833, // $5833 + #$5834, // $5834 + #$5835, // $5835 + #$5836, // $5836 + #$5837, // $5837 + #$5838, // $5838 + #$5839, // $5839 + #$583A, // $583A + #$583B, // $583B + #$583C, // $583C + #$583D, // $583D + #$583E, // $583E + #$583F, // $583F + #$5840, // $5840 + #$5841, // $5841 + #$5842, // $5842 + #$5843, // $5843 + #$5844, // $5844 + #$5845, // $5845 + #$5846, // $5846 + #$5847, // $5847 + #$5848, // $5848 + #$5849, // $5849 + #$584A, // $584A + #$584B, // $584B + #$584C, // $584C + #$584D, // $584D + #$584E, // $584E + #$584F, // $584F + #$5850, // $5850 + #$5851, // $5851 + #$5852, // $5852 + #$5853, // $5853 + #$5854, // $5854 + #$5855, // $5855 + #$5856, // $5856 + #$5857, // $5857 + #$5858, // $5858 + #$5859, // $5859 + #$585A, // $585A + #$585B, // $585B + #$585C, // $585C + #$585D, // $585D + #$585E, // $585E + #$585F, // $585F + #$5860, // $5860 + #$5861, // $5861 + #$5862, // $5862 + #$5863, // $5863 + #$5864, // $5864 + #$5865, // $5865 + #$5866, // $5866 + #$5867, // $5867 + #$5868, // $5868 + #$5869, // $5869 + #$586A, // $586A + #$586B, // $586B + #$586C, // $586C + #$586D, // $586D + #$586E, // $586E + #$586F, // $586F + #$5870, // $5870 + #$5871, // $5871 + #$5872, // $5872 + #$5873, // $5873 + #$5874, // $5874 + #$5875, // $5875 + #$5876, // $5876 + #$5877, // $5877 + #$5878, // $5878 + #$5879, // $5879 + #$587A, // $587A + #$587B, // $587B + #$587C, // $587C + #$587D, // $587D + #$587E, // $587E + #$587F, // $587F + #$5880, // $5880 + #$5881, // $5881 + #$5882, // $5882 + #$5883, // $5883 + #$5884, // $5884 + #$5885, // $5885 + #$5886, // $5886 + #$5887, // $5887 + #$5888, // $5888 + #$5889, // $5889 + #$588A, // $588A + #$588B, // $588B + #$588C, // $588C + #$588D, // $588D + #$588E, // $588E + #$588F, // $588F + #$5890, // $5890 + #$5891, // $5891 + #$5892, // $5892 + #$5893, // $5893 + #$5894, // $5894 + #$5895, // $5895 + #$5896, // $5896 + #$5897, // $5897 + #$5898, // $5898 + #$5899, // $5899 + #$589A, // $589A + #$589B, // $589B + #$589C, // $589C + #$589D, // $589D + #$589E, // $589E + #$589F, // $589F + #$58A0, // $58A0 + #$58A1, // $58A1 + #$58A2, // $58A2 + #$58A3, // $58A3 + #$58A4, // $58A4 + #$58A5, // $58A5 + #$58A6, // $58A6 + #$58A7, // $58A7 + #$58A8, // $58A8 + #$58A9, // $58A9 + #$58AA, // $58AA + #$58AB, // $58AB + #$58AC, // $58AC + #$58AD, // $58AD + #$58AE, // $58AE + #$58AF, // $58AF + #$58B0, // $58B0 + #$58B1, // $58B1 + #$58B2, // $58B2 + #$58B3, // $58B3 + #$58B4, // $58B4 + #$58B5, // $58B5 + #$58B6, // $58B6 + #$58B7, // $58B7 + #$58B8, // $58B8 + #$58B9, // $58B9 + #$58BA, // $58BA + #$58BB, // $58BB + #$58BC, // $58BC + #$58BD, // $58BD + #$58BE, // $58BE + #$58BF, // $58BF + #$58C0, // $58C0 + #$58C1, // $58C1 + #$58C2, // $58C2 + #$58C3, // $58C3 + #$58C4, // $58C4 + #$58C5, // $58C5 + #$58C6, // $58C6 + #$58C7, // $58C7 + #$58C8, // $58C8 + #$58C9, // $58C9 + #$58CA, // $58CA + #$58CB, // $58CB + #$58CC, // $58CC + #$58CD, // $58CD + #$58CE, // $58CE + #$58CF, // $58CF + #$58D0, // $58D0 + #$58D1, // $58D1 + #$58D2, // $58D2 + #$58D3, // $58D3 + #$58D4, // $58D4 + #$58D5, // $58D5 + #$58D6, // $58D6 + #$58D7, // $58D7 + #$58D8, // $58D8 + #$58D9, // $58D9 + #$58DA, // $58DA + #$58DB, // $58DB + #$58DC, // $58DC + #$58DD, // $58DD + #$58DE, // $58DE + #$58DF, // $58DF + #$58E0, // $58E0 + #$58E1, // $58E1 + #$58E2, // $58E2 + #$58E3, // $58E3 + #$58E4, // $58E4 + #$58E5, // $58E5 + #$58E6, // $58E6 + #$58E7, // $58E7 + #$58E8, // $58E8 + #$58E9, // $58E9 + #$58EA, // $58EA + #$58EB, // $58EB + #$58EC, // $58EC + #$58ED, // $58ED + #$58EE, // $58EE + #$58EF, // $58EF + #$58F0, // $58F0 + #$58F1, // $58F1 + #$58F2, // $58F2 + #$58F3, // $58F3 + #$58F4, // $58F4 + #$58F5, // $58F5 + #$58F6, // $58F6 + #$58F7, // $58F7 + #$58F8, // $58F8 + #$58F9, // $58F9 + #$58FA, // $58FA + #$58FB, // $58FB + #$58FC, // $58FC + #$58FD, // $58FD + #$58FE, // $58FE + #$58FF, // $58FF + #$5900, // $5900 + #$5901, // $5901 + #$5902, // $5902 + #$5903, // $5903 + #$5904, // $5904 + #$5905, // $5905 + #$5906, // $5906 + #$5907, // $5907 + #$5908, // $5908 + #$5909, // $5909 + #$590A, // $590A + #$590B, // $590B + #$590C, // $590C + #$590D, // $590D + #$590E, // $590E + #$590F, // $590F + #$5910, // $5910 + #$5911, // $5911 + #$5912, // $5912 + #$5913, // $5913 + #$5914, // $5914 + #$5915, // $5915 + #$5916, // $5916 + #$5917, // $5917 + #$5918, // $5918 + #$5919, // $5919 + #$591A, // $591A + #$591B, // $591B + #$591C, // $591C + #$591D, // $591D + #$591E, // $591E + #$591F, // $591F + #$5920, // $5920 + #$5921, // $5921 + #$5922, // $5922 + #$5923, // $5923 + #$5924, // $5924 + #$5925, // $5925 + #$5926, // $5926 + #$5927, // $5927 + #$5928, // $5928 + #$5929, // $5929 + #$592A, // $592A + #$592B, // $592B + #$592C, // $592C + #$592D, // $592D + #$592E, // $592E + #$592F, // $592F + #$5930, // $5930 + #$5931, // $5931 + #$5932, // $5932 + #$5933, // $5933 + #$5934, // $5934 + #$5935, // $5935 + #$5936, // $5936 + #$5937, // $5937 + #$5938, // $5938 + #$5939, // $5939 + #$593A, // $593A + #$593B, // $593B + #$593C, // $593C + #$593D, // $593D + #$593E, // $593E + #$593F, // $593F + #$5940, // $5940 + #$5941, // $5941 + #$5942, // $5942 + #$5943, // $5943 + #$5944, // $5944 + #$5945, // $5945 + #$5946, // $5946 + #$5947, // $5947 + #$5948, // $5948 + #$5949, // $5949 + #$594A, // $594A + #$594B, // $594B + #$594C, // $594C + #$594D, // $594D + #$594E, // $594E + #$594F, // $594F + #$5950, // $5950 + #$5951, // $5951 + #$5952, // $5952 + #$5953, // $5953 + #$5954, // $5954 + #$5955, // $5955 + #$5956, // $5956 + #$5957, // $5957 + #$5958, // $5958 + #$5959, // $5959 + #$595A, // $595A + #$595B, // $595B + #$595C, // $595C + #$595D, // $595D + #$595E, // $595E + #$595F, // $595F + #$5960, // $5960 + #$5961, // $5961 + #$5962, // $5962 + #$5963, // $5963 + #$5964, // $5964 + #$5965, // $5965 + #$5966, // $5966 + #$5967, // $5967 + #$5968, // $5968 + #$5969, // $5969 + #$596A, // $596A + #$596B, // $596B + #$596C, // $596C + #$596D, // $596D + #$596E, // $596E + #$596F, // $596F + #$5970, // $5970 + #$5971, // $5971 + #$5972, // $5972 + #$5973, // $5973 + #$5974, // $5974 + #$5975, // $5975 + #$5976, // $5976 + #$5977, // $5977 + #$5978, // $5978 + #$5979, // $5979 + #$597A, // $597A + #$597B, // $597B + #$597C, // $597C + #$597D, // $597D + #$597E, // $597E + #$597F, // $597F + #$5980, // $5980 + #$5981, // $5981 + #$5982, // $5982 + #$5983, // $5983 + #$5984, // $5984 + #$5985, // $5985 + #$5986, // $5986 + #$5987, // $5987 + #$5988, // $5988 + #$5989, // $5989 + #$598A, // $598A + #$598B, // $598B + #$598C, // $598C + #$598D, // $598D + #$598E, // $598E + #$598F, // $598F + #$5990, // $5990 + #$5991, // $5991 + #$5992, // $5992 + #$5993, // $5993 + #$5994, // $5994 + #$5995, // $5995 + #$5996, // $5996 + #$5997, // $5997 + #$5998, // $5998 + #$5999, // $5999 + #$599A, // $599A + #$599B, // $599B + #$599C, // $599C + #$599D, // $599D + #$599E, // $599E + #$599F, // $599F + #$59A0, // $59A0 + #$59A1, // $59A1 + #$59A2, // $59A2 + #$59A3, // $59A3 + #$59A4, // $59A4 + #$59A5, // $59A5 + #$59A6, // $59A6 + #$59A7, // $59A7 + #$59A8, // $59A8 + #$59A9, // $59A9 + #$59AA, // $59AA + #$59AB, // $59AB + #$59AC, // $59AC + #$59AD, // $59AD + #$59AE, // $59AE + #$59AF, // $59AF + #$59B0, // $59B0 + #$59B1, // $59B1 + #$59B2, // $59B2 + #$59B3, // $59B3 + #$59B4, // $59B4 + #$59B5, // $59B5 + #$59B6, // $59B6 + #$59B7, // $59B7 + #$59B8, // $59B8 + #$59B9, // $59B9 + #$59BA, // $59BA + #$59BB, // $59BB + #$59BC, // $59BC + #$59BD, // $59BD + #$59BE, // $59BE + #$59BF, // $59BF + #$59C0, // $59C0 + #$59C1, // $59C1 + #$59C2, // $59C2 + #$59C3, // $59C3 + #$59C4, // $59C4 + #$59C5, // $59C5 + #$59C6, // $59C6 + #$59C7, // $59C7 + #$59C8, // $59C8 + #$59C9, // $59C9 + #$59CA, // $59CA + #$59CB, // $59CB + #$59CC, // $59CC + #$59CD, // $59CD + #$59CE, // $59CE + #$59CF, // $59CF + #$59D0, // $59D0 + #$59D1, // $59D1 + #$59D2, // $59D2 + #$59D3, // $59D3 + #$59D4, // $59D4 + #$59D5, // $59D5 + #$59D6, // $59D6 + #$59D7, // $59D7 + #$59D8, // $59D8 + #$59D9, // $59D9 + #$59DA, // $59DA + #$59DB, // $59DB + #$59DC, // $59DC + #$59DD, // $59DD + #$59DE, // $59DE + #$59DF, // $59DF + #$59E0, // $59E0 + #$59E1, // $59E1 + #$59E2, // $59E2 + #$59E3, // $59E3 + #$59E4, // $59E4 + #$59E5, // $59E5 + #$59E6, // $59E6 + #$59E7, // $59E7 + #$59E8, // $59E8 + #$59E9, // $59E9 + #$59EA, // $59EA + #$59EB, // $59EB + #$59EC, // $59EC + #$59ED, // $59ED + #$59EE, // $59EE + #$59EF, // $59EF + #$59F0, // $59F0 + #$59F1, // $59F1 + #$59F2, // $59F2 + #$59F3, // $59F3 + #$59F4, // $59F4 + #$59F5, // $59F5 + #$59F6, // $59F6 + #$59F7, // $59F7 + #$59F8, // $59F8 + #$59F9, // $59F9 + #$59FA, // $59FA + #$59FB, // $59FB + #$59FC, // $59FC + #$59FD, // $59FD + #$59FE, // $59FE + #$59FF, // $59FF + #$5A00, // $5A00 + #$5A01, // $5A01 + #$5A02, // $5A02 + #$5A03, // $5A03 + #$5A04, // $5A04 + #$5A05, // $5A05 + #$5A06, // $5A06 + #$5A07, // $5A07 + #$5A08, // $5A08 + #$5A09, // $5A09 + #$5A0A, // $5A0A + #$5A0B, // $5A0B + #$5A0C, // $5A0C + #$5A0D, // $5A0D + #$5A0E, // $5A0E + #$5A0F, // $5A0F + #$5A10, // $5A10 + #$5A11, // $5A11 + #$5A12, // $5A12 + #$5A13, // $5A13 + #$5A14, // $5A14 + #$5A15, // $5A15 + #$5A16, // $5A16 + #$5A17, // $5A17 + #$5A18, // $5A18 + #$5A19, // $5A19 + #$5A1A, // $5A1A + #$5A1B, // $5A1B + #$5A1C, // $5A1C + #$5A1D, // $5A1D + #$5A1E, // $5A1E + #$5A1F, // $5A1F + #$5A20, // $5A20 + #$5A21, // $5A21 + #$5A22, // $5A22 + #$5A23, // $5A23 + #$5A24, // $5A24 + #$5A25, // $5A25 + #$5A26, // $5A26 + #$5A27, // $5A27 + #$5A28, // $5A28 + #$5A29, // $5A29 + #$5A2A, // $5A2A + #$5A2B, // $5A2B + #$5A2C, // $5A2C + #$5A2D, // $5A2D + #$5A2E, // $5A2E + #$5A2F, // $5A2F + #$5A30, // $5A30 + #$5A31, // $5A31 + #$5A32, // $5A32 + #$5A33, // $5A33 + #$5A34, // $5A34 + #$5A35, // $5A35 + #$5A36, // $5A36 + #$5A37, // $5A37 + #$5A38, // $5A38 + #$5A39, // $5A39 + #$5A3A, // $5A3A + #$5A3B, // $5A3B + #$5A3C, // $5A3C + #$5A3D, // $5A3D + #$5A3E, // $5A3E + #$5A3F, // $5A3F + #$5A40, // $5A40 + #$5A41, // $5A41 + #$5A42, // $5A42 + #$5A43, // $5A43 + #$5A44, // $5A44 + #$5A45, // $5A45 + #$5A46, // $5A46 + #$5A47, // $5A47 + #$5A48, // $5A48 + #$5A49, // $5A49 + #$5A4A, // $5A4A + #$5A4B, // $5A4B + #$5A4C, // $5A4C + #$5A4D, // $5A4D + #$5A4E, // $5A4E + #$5A4F, // $5A4F + #$5A50, // $5A50 + #$5A51, // $5A51 + #$5A52, // $5A52 + #$5A53, // $5A53 + #$5A54, // $5A54 + #$5A55, // $5A55 + #$5A56, // $5A56 + #$5A57, // $5A57 + #$5A58, // $5A58 + #$5A59, // $5A59 + #$5A5A, // $5A5A + #$5A5B, // $5A5B + #$5A5C, // $5A5C + #$5A5D, // $5A5D + #$5A5E, // $5A5E + #$5A5F, // $5A5F + #$5A60, // $5A60 + #$5A61, // $5A61 + #$5A62, // $5A62 + #$5A63, // $5A63 + #$5A64, // $5A64 + #$5A65, // $5A65 + #$5A66, // $5A66 + #$5A67, // $5A67 + #$5A68, // $5A68 + #$5A69, // $5A69 + #$5A6A, // $5A6A + #$5A6B, // $5A6B + #$5A6C, // $5A6C + #$5A6D, // $5A6D + #$5A6E, // $5A6E + #$5A6F, // $5A6F + #$5A70, // $5A70 + #$5A71, // $5A71 + #$5A72, // $5A72 + #$5A73, // $5A73 + #$5A74, // $5A74 + #$5A75, // $5A75 + #$5A76, // $5A76 + #$5A77, // $5A77 + #$5A78, // $5A78 + #$5A79, // $5A79 + #$5A7A, // $5A7A + #$5A7B, // $5A7B + #$5A7C, // $5A7C + #$5A7D, // $5A7D + #$5A7E, // $5A7E + #$5A7F, // $5A7F + #$5A80, // $5A80 + #$5A81, // $5A81 + #$5A82, // $5A82 + #$5A83, // $5A83 + #$5A84, // $5A84 + #$5A85, // $5A85 + #$5A86, // $5A86 + #$5A87, // $5A87 + #$5A88, // $5A88 + #$5A89, // $5A89 + #$5A8A, // $5A8A + #$5A8B, // $5A8B + #$5A8C, // $5A8C + #$5A8D, // $5A8D + #$5A8E, // $5A8E + #$5A8F, // $5A8F + #$5A90, // $5A90 + #$5A91, // $5A91 + #$5A92, // $5A92 + #$5A93, // $5A93 + #$5A94, // $5A94 + #$5A95, // $5A95 + #$5A96, // $5A96 + #$5A97, // $5A97 + #$5A98, // $5A98 + #$5A99, // $5A99 + #$5A9A, // $5A9A + #$5A9B, // $5A9B + #$5A9C, // $5A9C + #$5A9D, // $5A9D + #$5A9E, // $5A9E + #$5A9F, // $5A9F + #$5AA0, // $5AA0 + #$5AA1, // $5AA1 + #$5AA2, // $5AA2 + #$5AA3, // $5AA3 + #$5AA4, // $5AA4 + #$5AA5, // $5AA5 + #$5AA6, // $5AA6 + #$5AA7, // $5AA7 + #$5AA8, // $5AA8 + #$5AA9, // $5AA9 + #$5AAA, // $5AAA + #$5AAB, // $5AAB + #$5AAC, // $5AAC + #$5AAD, // $5AAD + #$5AAE, // $5AAE + #$5AAF, // $5AAF + #$5AB0, // $5AB0 + #$5AB1, // $5AB1 + #$5AB2, // $5AB2 + #$5AB3, // $5AB3 + #$5AB4, // $5AB4 + #$5AB5, // $5AB5 + #$5AB6, // $5AB6 + #$5AB7, // $5AB7 + #$5AB8, // $5AB8 + #$5AB9, // $5AB9 + #$5ABA, // $5ABA + #$5ABB, // $5ABB + #$5ABC, // $5ABC + #$5ABD, // $5ABD + #$5ABE, // $5ABE + #$5ABF, // $5ABF + #$5AC0, // $5AC0 + #$5AC1, // $5AC1 + #$5AC2, // $5AC2 + #$5AC3, // $5AC3 + #$5AC4, // $5AC4 + #$5AC5, // $5AC5 + #$5AC6, // $5AC6 + #$5AC7, // $5AC7 + #$5AC8, // $5AC8 + #$5AC9, // $5AC9 + #$5ACA, // $5ACA + #$5ACB, // $5ACB + #$5ACC, // $5ACC + #$5ACD, // $5ACD + #$5ACE, // $5ACE + #$5ACF, // $5ACF + #$5AD0, // $5AD0 + #$5AD1, // $5AD1 + #$5AD2, // $5AD2 + #$5AD3, // $5AD3 + #$5AD4, // $5AD4 + #$5AD5, // $5AD5 + #$5AD6, // $5AD6 + #$5AD7, // $5AD7 + #$5AD8, // $5AD8 + #$5AD9, // $5AD9 + #$5ADA, // $5ADA + #$5ADB, // $5ADB + #$5ADC, // $5ADC + #$5ADD, // $5ADD + #$5ADE, // $5ADE + #$5ADF, // $5ADF + #$5AE0, // $5AE0 + #$5AE1, // $5AE1 + #$5AE2, // $5AE2 + #$5AE3, // $5AE3 + #$5AE4, // $5AE4 + #$5AE5, // $5AE5 + #$5AE6, // $5AE6 + #$5AE7, // $5AE7 + #$5AE8, // $5AE8 + #$5AE9, // $5AE9 + #$5AEA, // $5AEA + #$5AEB, // $5AEB + #$5AEC, // $5AEC + #$5AED, // $5AED + #$5AEE, // $5AEE + #$5AEF, // $5AEF + #$5AF0, // $5AF0 + #$5AF1, // $5AF1 + #$5AF2, // $5AF2 + #$5AF3, // $5AF3 + #$5AF4, // $5AF4 + #$5AF5, // $5AF5 + #$5AF6, // $5AF6 + #$5AF7, // $5AF7 + #$5AF8, // $5AF8 + #$5AF9, // $5AF9 + #$5AFA, // $5AFA + #$5AFB, // $5AFB + #$5AFC, // $5AFC + #$5AFD, // $5AFD + #$5AFE, // $5AFE + #$5AFF, // $5AFF + #$5B00, // $5B00 + #$5B01, // $5B01 + #$5B02, // $5B02 + #$5B03, // $5B03 + #$5B04, // $5B04 + #$5B05, // $5B05 + #$5B06, // $5B06 + #$5B07, // $5B07 + #$5B08, // $5B08 + #$5B09, // $5B09 + #$5B0A, // $5B0A + #$5B0B, // $5B0B + #$5B0C, // $5B0C + #$5B0D, // $5B0D + #$5B0E, // $5B0E + #$5B0F, // $5B0F + #$5B10, // $5B10 + #$5B11, // $5B11 + #$5B12, // $5B12 + #$5B13, // $5B13 + #$5B14, // $5B14 + #$5B15, // $5B15 + #$5B16, // $5B16 + #$5B17, // $5B17 + #$5B18, // $5B18 + #$5B19, // $5B19 + #$5B1A, // $5B1A + #$5B1B, // $5B1B + #$5B1C, // $5B1C + #$5B1D, // $5B1D + #$5B1E, // $5B1E + #$5B1F, // $5B1F + #$5B20, // $5B20 + #$5B21, // $5B21 + #$5B22, // $5B22 + #$5B23, // $5B23 + #$5B24, // $5B24 + #$5B25, // $5B25 + #$5B26, // $5B26 + #$5B27, // $5B27 + #$5B28, // $5B28 + #$5B29, // $5B29 + #$5B2A, // $5B2A + #$5B2B, // $5B2B + #$5B2C, // $5B2C + #$5B2D, // $5B2D + #$5B2E, // $5B2E + #$5B2F, // $5B2F + #$5B30, // $5B30 + #$5B31, // $5B31 + #$5B32, // $5B32 + #$5B33, // $5B33 + #$5B34, // $5B34 + #$5B35, // $5B35 + #$5B36, // $5B36 + #$5B37, // $5B37 + #$5B38, // $5B38 + #$5B39, // $5B39 + #$5B3A, // $5B3A + #$5B3B, // $5B3B + #$5B3C, // $5B3C + #$5B3D, // $5B3D + #$5B3E, // $5B3E + #$5B3F, // $5B3F + #$5B40, // $5B40 + #$5B41, // $5B41 + #$5B42, // $5B42 + #$5B43, // $5B43 + #$5B44, // $5B44 + #$5B45, // $5B45 + #$5B46, // $5B46 + #$5B47, // $5B47 + #$5B48, // $5B48 + #$5B49, // $5B49 + #$5B4A, // $5B4A + #$5B4B, // $5B4B + #$5B4C, // $5B4C + #$5B4D, // $5B4D + #$5B4E, // $5B4E + #$5B4F, // $5B4F + #$5B50, // $5B50 + #$5B51, // $5B51 + #$5B52, // $5B52 + #$5B53, // $5B53 + #$5B54, // $5B54 + #$5B55, // $5B55 + #$5B56, // $5B56 + #$5B57, // $5B57 + #$5B58, // $5B58 + #$5B59, // $5B59 + #$5B5A, // $5B5A + #$5B5B, // $5B5B + #$5B5C, // $5B5C + #$5B5D, // $5B5D + #$5B5E, // $5B5E + #$5B5F, // $5B5F + #$5B60, // $5B60 + #$5B61, // $5B61 + #$5B62, // $5B62 + #$5B63, // $5B63 + #$5B64, // $5B64 + #$5B65, // $5B65 + #$5B66, // $5B66 + #$5B67, // $5B67 + #$5B68, // $5B68 + #$5B69, // $5B69 + #$5B6A, // $5B6A + #$5B6B, // $5B6B + #$5B6C, // $5B6C + #$5B6D, // $5B6D + #$5B6E, // $5B6E + #$5B6F, // $5B6F + #$5B70, // $5B70 + #$5B71, // $5B71 + #$5B72, // $5B72 + #$5B73, // $5B73 + #$5B74, // $5B74 + #$5B75, // $5B75 + #$5B76, // $5B76 + #$5B77, // $5B77 + #$5B78, // $5B78 + #$5B79, // $5B79 + #$5B7A, // $5B7A + #$5B7B, // $5B7B + #$5B7C, // $5B7C + #$5B7D, // $5B7D + #$5B7E, // $5B7E + #$5B7F, // $5B7F + #$5B80, // $5B80 + #$5B81, // $5B81 + #$5B82, // $5B82 + #$5B83, // $5B83 + #$5B84, // $5B84 + #$5B85, // $5B85 + #$5B86, // $5B86 + #$5B87, // $5B87 + #$5B88, // $5B88 + #$5B89, // $5B89 + #$5B8A, // $5B8A + #$5B8B, // $5B8B + #$5B8C, // $5B8C + #$5B8D, // $5B8D + #$5B8E, // $5B8E + #$5B8F, // $5B8F + #$5B90, // $5B90 + #$5B91, // $5B91 + #$5B92, // $5B92 + #$5B93, // $5B93 + #$5B94, // $5B94 + #$5B95, // $5B95 + #$5B96, // $5B96 + #$5B97, // $5B97 + #$5B98, // $5B98 + #$5B99, // $5B99 + #$5B9A, // $5B9A + #$5B9B, // $5B9B + #$5B9C, // $5B9C + #$5B9D, // $5B9D + #$5B9E, // $5B9E + #$5B9F, // $5B9F + #$5BA0, // $5BA0 + #$5BA1, // $5BA1 + #$5BA2, // $5BA2 + #$5BA3, // $5BA3 + #$5BA4, // $5BA4 + #$5BA5, // $5BA5 + #$5BA6, // $5BA6 + #$5BA7, // $5BA7 + #$5BA8, // $5BA8 + #$5BA9, // $5BA9 + #$5BAA, // $5BAA + #$5BAB, // $5BAB + #$5BAC, // $5BAC + #$5BAD, // $5BAD + #$5BAE, // $5BAE + #$5BAF, // $5BAF + #$5BB0, // $5BB0 + #$5BB1, // $5BB1 + #$5BB2, // $5BB2 + #$5BB3, // $5BB3 + #$5BB4, // $5BB4 + #$5BB5, // $5BB5 + #$5BB6, // $5BB6 + #$5BB7, // $5BB7 + #$5BB8, // $5BB8 + #$5BB9, // $5BB9 + #$5BBA, // $5BBA + #$5BBB, // $5BBB + #$5BBC, // $5BBC + #$5BBD, // $5BBD + #$5BBE, // $5BBE + #$5BBF, // $5BBF + #$5BC0, // $5BC0 + #$5BC1, // $5BC1 + #$5BC2, // $5BC2 + #$5BC3, // $5BC3 + #$5BC4, // $5BC4 + #$5BC5, // $5BC5 + #$5BC6, // $5BC6 + #$5BC7, // $5BC7 + #$5BC8, // $5BC8 + #$5BC9, // $5BC9 + #$5BCA, // $5BCA + #$5BCB, // $5BCB + #$5BCC, // $5BCC + #$5BCD, // $5BCD + #$5BCE, // $5BCE + #$5BCF, // $5BCF + #$5BD0, // $5BD0 + #$5BD1, // $5BD1 + #$5BD2, // $5BD2 + #$5BD3, // $5BD3 + #$5BD4, // $5BD4 + #$5BD5, // $5BD5 + #$5BD6, // $5BD6 + #$5BD7, // $5BD7 + #$5BD8, // $5BD8 + #$5BD9, // $5BD9 + #$5BDA, // $5BDA + #$5BDB, // $5BDB + #$5BDC, // $5BDC + #$5BDD, // $5BDD + #$5BDE, // $5BDE + #$5BDF, // $5BDF + #$5BE0, // $5BE0 + #$5BE1, // $5BE1 + #$5BE2, // $5BE2 + #$5BE3, // $5BE3 + #$5BE4, // $5BE4 + #$5BE5, // $5BE5 + #$5BE6, // $5BE6 + #$5BE7, // $5BE7 + #$5BE8, // $5BE8 + #$5BE9, // $5BE9 + #$5BEA, // $5BEA + #$5BEB, // $5BEB + #$5BEC, // $5BEC + #$5BED, // $5BED + #$5BEE, // $5BEE + #$5BEF, // $5BEF + #$5BF0, // $5BF0 + #$5BF1, // $5BF1 + #$5BF2, // $5BF2 + #$5BF3, // $5BF3 + #$5BF4, // $5BF4 + #$5BF5, // $5BF5 + #$5BF6, // $5BF6 + #$5BF7, // $5BF7 + #$5BF8, // $5BF8 + #$5BF9, // $5BF9 + #$5BFA, // $5BFA + #$5BFB, // $5BFB + #$5BFC, // $5BFC + #$5BFD, // $5BFD + #$5BFE, // $5BFE + #$5BFF, // $5BFF + #$5C00, // $5C00 + #$5C01, // $5C01 + #$5C02, // $5C02 + #$5C03, // $5C03 + #$5C04, // $5C04 + #$5C05, // $5C05 + #$5C06, // $5C06 + #$5C07, // $5C07 + #$5C08, // $5C08 + #$5C09, // $5C09 + #$5C0A, // $5C0A + #$5C0B, // $5C0B + #$5C0C, // $5C0C + #$5C0D, // $5C0D + #$5C0E, // $5C0E + #$5C0F, // $5C0F + #$5C10, // $5C10 + #$5C11, // $5C11 + #$5C12, // $5C12 + #$5C13, // $5C13 + #$5C14, // $5C14 + #$5C15, // $5C15 + #$5C16, // $5C16 + #$5C17, // $5C17 + #$5C18, // $5C18 + #$5C19, // $5C19 + #$5C1A, // $5C1A + #$5C1B, // $5C1B + #$5C1C, // $5C1C + #$5C1D, // $5C1D + #$5C1E, // $5C1E + #$5C1F, // $5C1F + #$5C20, // $5C20 + #$5C21, // $5C21 + #$5C22, // $5C22 + #$5C23, // $5C23 + #$5C24, // $5C24 + #$5C25, // $5C25 + #$5C26, // $5C26 + #$5C27, // $5C27 + #$5C28, // $5C28 + #$5C29, // $5C29 + #$5C2A, // $5C2A + #$5C2B, // $5C2B + #$5C2C, // $5C2C + #$5C2D, // $5C2D + #$5C2E, // $5C2E + #$5C2F, // $5C2F + #$5C30, // $5C30 + #$5C31, // $5C31 + #$5C32, // $5C32 + #$5C33, // $5C33 + #$5C34, // $5C34 + #$5C35, // $5C35 + #$5C36, // $5C36 + #$5C37, // $5C37 + #$5C38, // $5C38 + #$5C39, // $5C39 + #$5C3A, // $5C3A + #$5C3B, // $5C3B + #$5C3C, // $5C3C + #$5C3D, // $5C3D + #$5C3E, // $5C3E + #$5C3F, // $5C3F + #$5C40, // $5C40 + #$5C41, // $5C41 + #$5C42, // $5C42 + #$5C43, // $5C43 + #$5C44, // $5C44 + #$5C45, // $5C45 + #$5C46, // $5C46 + #$5C47, // $5C47 + #$5C48, // $5C48 + #$5C49, // $5C49 + #$5C4A, // $5C4A + #$5C4B, // $5C4B + #$5C4C, // $5C4C + #$5C4D, // $5C4D + #$5C4E, // $5C4E + #$5C4F, // $5C4F + #$5C50, // $5C50 + #$5C51, // $5C51 + #$5C52, // $5C52 + #$5C53, // $5C53 + #$5C54, // $5C54 + #$5C55, // $5C55 + #$5C56, // $5C56 + #$5C57, // $5C57 + #$5C58, // $5C58 + #$5C59, // $5C59 + #$5C5A, // $5C5A + #$5C5B, // $5C5B + #$5C5C, // $5C5C + #$5C5D, // $5C5D + #$5C5E, // $5C5E + #$5C5F, // $5C5F + #$5C60, // $5C60 + #$5C61, // $5C61 + #$5C62, // $5C62 + #$5C63, // $5C63 + #$5C64, // $5C64 + #$5C65, // $5C65 + #$5C66, // $5C66 + #$5C67, // $5C67 + #$5C68, // $5C68 + #$5C69, // $5C69 + #$5C6A, // $5C6A + #$5C6B, // $5C6B + #$5C6C, // $5C6C + #$5C6D, // $5C6D + #$5C6E, // $5C6E + #$5C6F, // $5C6F + #$5C70, // $5C70 + #$5C71, // $5C71 + #$5C72, // $5C72 + #$5C73, // $5C73 + #$5C74, // $5C74 + #$5C75, // $5C75 + #$5C76, // $5C76 + #$5C77, // $5C77 + #$5C78, // $5C78 + #$5C79, // $5C79 + #$5C7A, // $5C7A + #$5C7B, // $5C7B + #$5C7C, // $5C7C + #$5C7D, // $5C7D + #$5C7E, // $5C7E + #$5C7F, // $5C7F + #$5C80, // $5C80 + #$5C81, // $5C81 + #$5C82, // $5C82 + #$5C83, // $5C83 + #$5C84, // $5C84 + #$5C85, // $5C85 + #$5C86, // $5C86 + #$5C87, // $5C87 + #$5C88, // $5C88 + #$5C89, // $5C89 + #$5C8A, // $5C8A + #$5C8B, // $5C8B + #$5C8C, // $5C8C + #$5C8D, // $5C8D + #$5C8E, // $5C8E + #$5C8F, // $5C8F + #$5C90, // $5C90 + #$5C91, // $5C91 + #$5C92, // $5C92 + #$5C93, // $5C93 + #$5C94, // $5C94 + #$5C95, // $5C95 + #$5C96, // $5C96 + #$5C97, // $5C97 + #$5C98, // $5C98 + #$5C99, // $5C99 + #$5C9A, // $5C9A + #$5C9B, // $5C9B + #$5C9C, // $5C9C + #$5C9D, // $5C9D + #$5C9E, // $5C9E + #$5C9F, // $5C9F + #$5CA0, // $5CA0 + #$5CA1, // $5CA1 + #$5CA2, // $5CA2 + #$5CA3, // $5CA3 + #$5CA4, // $5CA4 + #$5CA5, // $5CA5 + #$5CA6, // $5CA6 + #$5CA7, // $5CA7 + #$5CA8, // $5CA8 + #$5CA9, // $5CA9 + #$5CAA, // $5CAA + #$5CAB, // $5CAB + #$5CAC, // $5CAC + #$5CAD, // $5CAD + #$5CAE, // $5CAE + #$5CAF, // $5CAF + #$5CB0, // $5CB0 + #$5CB1, // $5CB1 + #$5CB2, // $5CB2 + #$5CB3, // $5CB3 + #$5CB4, // $5CB4 + #$5CB5, // $5CB5 + #$5CB6, // $5CB6 + #$5CB7, // $5CB7 + #$5CB8, // $5CB8 + #$5CB9, // $5CB9 + #$5CBA, // $5CBA + #$5CBB, // $5CBB + #$5CBC, // $5CBC + #$5CBD, // $5CBD + #$5CBE, // $5CBE + #$5CBF, // $5CBF + #$5CC0, // $5CC0 + #$5CC1, // $5CC1 + #$5CC2, // $5CC2 + #$5CC3, // $5CC3 + #$5CC4, // $5CC4 + #$5CC5, // $5CC5 + #$5CC6, // $5CC6 + #$5CC7, // $5CC7 + #$5CC8, // $5CC8 + #$5CC9, // $5CC9 + #$5CCA, // $5CCA + #$5CCB, // $5CCB + #$5CCC, // $5CCC + #$5CCD, // $5CCD + #$5CCE, // $5CCE + #$5CCF, // $5CCF + #$5CD0, // $5CD0 + #$5CD1, // $5CD1 + #$5CD2, // $5CD2 + #$5CD3, // $5CD3 + #$5CD4, // $5CD4 + #$5CD5, // $5CD5 + #$5CD6, // $5CD6 + #$5CD7, // $5CD7 + #$5CD8, // $5CD8 + #$5CD9, // $5CD9 + #$5CDA, // $5CDA + #$5CDB, // $5CDB + #$5CDC, // $5CDC + #$5CDD, // $5CDD + #$5CDE, // $5CDE + #$5CDF, // $5CDF + #$5CE0, // $5CE0 + #$5CE1, // $5CE1 + #$5CE2, // $5CE2 + #$5CE3, // $5CE3 + #$5CE4, // $5CE4 + #$5CE5, // $5CE5 + #$5CE6, // $5CE6 + #$5CE7, // $5CE7 + #$5CE8, // $5CE8 + #$5CE9, // $5CE9 + #$5CEA, // $5CEA + #$5CEB, // $5CEB + #$5CEC, // $5CEC + #$5CED, // $5CED + #$5CEE, // $5CEE + #$5CEF, // $5CEF + #$5CF0, // $5CF0 + #$5CF1, // $5CF1 + #$5CF2, // $5CF2 + #$5CF3, // $5CF3 + #$5CF4, // $5CF4 + #$5CF5, // $5CF5 + #$5CF6, // $5CF6 + #$5CF7, // $5CF7 + #$5CF8, // $5CF8 + #$5CF9, // $5CF9 + #$5CFA, // $5CFA + #$5CFB, // $5CFB + #$5CFC, // $5CFC + #$5CFD, // $5CFD + #$5CFE, // $5CFE + #$5CFF, // $5CFF + #$5D00, // $5D00 + #$5D01, // $5D01 + #$5D02, // $5D02 + #$5D03, // $5D03 + #$5D04, // $5D04 + #$5D05, // $5D05 + #$5D06, // $5D06 + #$5D07, // $5D07 + #$5D08, // $5D08 + #$5D09, // $5D09 + #$5D0A, // $5D0A + #$5D0B, // $5D0B + #$5D0C, // $5D0C + #$5D0D, // $5D0D + #$5D0E, // $5D0E + #$5D0F, // $5D0F + #$5D10, // $5D10 + #$5D11, // $5D11 + #$5D12, // $5D12 + #$5D13, // $5D13 + #$5D14, // $5D14 + #$5D15, // $5D15 + #$5D16, // $5D16 + #$5D17, // $5D17 + #$5D18, // $5D18 + #$5D19, // $5D19 + #$5D1A, // $5D1A + #$5D1B, // $5D1B + #$5D1C, // $5D1C + #$5D1D, // $5D1D + #$5D1E, // $5D1E + #$5D1F, // $5D1F + #$5D20, // $5D20 + #$5D21, // $5D21 + #$5D22, // $5D22 + #$5D23, // $5D23 + #$5D24, // $5D24 + #$5D25, // $5D25 + #$5D26, // $5D26 + #$5D27, // $5D27 + #$5D28, // $5D28 + #$5D29, // $5D29 + #$5D2A, // $5D2A + #$5D2B, // $5D2B + #$5D2C, // $5D2C + #$5D2D, // $5D2D + #$5D2E, // $5D2E + #$5D2F, // $5D2F + #$5D30, // $5D30 + #$5D31, // $5D31 + #$5D32, // $5D32 + #$5D33, // $5D33 + #$5D34, // $5D34 + #$5D35, // $5D35 + #$5D36, // $5D36 + #$5D37, // $5D37 + #$5D38, // $5D38 + #$5D39, // $5D39 + #$5D3A, // $5D3A + #$5D3B, // $5D3B + #$5D3C, // $5D3C + #$5D3D, // $5D3D + #$5D3E, // $5D3E + #$5D3F, // $5D3F + #$5D40, // $5D40 + #$5D41, // $5D41 + #$5D42, // $5D42 + #$5D43, // $5D43 + #$5D44, // $5D44 + #$5D45, // $5D45 + #$5D46, // $5D46 + #$5D47, // $5D47 + #$5D48, // $5D48 + #$5D49, // $5D49 + #$5D4A, // $5D4A + #$5D4B, // $5D4B + #$5D4C, // $5D4C + #$5D4D, // $5D4D + #$5D4E, // $5D4E + #$5D4F, // $5D4F + #$5D50, // $5D50 + #$5D51, // $5D51 + #$5D52, // $5D52 + #$5D53, // $5D53 + #$5D54, // $5D54 + #$5D55, // $5D55 + #$5D56, // $5D56 + #$5D57, // $5D57 + #$5D58, // $5D58 + #$5D59, // $5D59 + #$5D5A, // $5D5A + #$5D5B, // $5D5B + #$5D5C, // $5D5C + #$5D5D, // $5D5D + #$5D5E, // $5D5E + #$5D5F, // $5D5F + #$5D60, // $5D60 + #$5D61, // $5D61 + #$5D62, // $5D62 + #$5D63, // $5D63 + #$5D64, // $5D64 + #$5D65, // $5D65 + #$5D66, // $5D66 + #$5D67, // $5D67 + #$5D68, // $5D68 + #$5D69, // $5D69 + #$5D6A, // $5D6A + #$5D6B, // $5D6B + #$5D6C, // $5D6C + #$5D6D, // $5D6D + #$5D6E, // $5D6E + #$5D6F, // $5D6F + #$5D70, // $5D70 + #$5D71, // $5D71 + #$5D72, // $5D72 + #$5D73, // $5D73 + #$5D74, // $5D74 + #$5D75, // $5D75 + #$5D76, // $5D76 + #$5D77, // $5D77 + #$5D78, // $5D78 + #$5D79, // $5D79 + #$5D7A, // $5D7A + #$5D7B, // $5D7B + #$5D7C, // $5D7C + #$5D7D, // $5D7D + #$5D7E, // $5D7E + #$5D7F, // $5D7F + #$5D80, // $5D80 + #$5D81, // $5D81 + #$5D82, // $5D82 + #$5D83, // $5D83 + #$5D84, // $5D84 + #$5D85, // $5D85 + #$5D86, // $5D86 + #$5D87, // $5D87 + #$5D88, // $5D88 + #$5D89, // $5D89 + #$5D8A, // $5D8A + #$5D8B, // $5D8B + #$5D8C, // $5D8C + #$5D8D, // $5D8D + #$5D8E, // $5D8E + #$5D8F, // $5D8F + #$5D90, // $5D90 + #$5D91, // $5D91 + #$5D92, // $5D92 + #$5D93, // $5D93 + #$5D94, // $5D94 + #$5D95, // $5D95 + #$5D96, // $5D96 + #$5D97, // $5D97 + #$5D98, // $5D98 + #$5D99, // $5D99 + #$5D9A, // $5D9A + #$5D9B, // $5D9B + #$5D9C, // $5D9C + #$5D9D, // $5D9D + #$5D9E, // $5D9E + #$5D9F, // $5D9F + #$5DA0, // $5DA0 + #$5DA1, // $5DA1 + #$5DA2, // $5DA2 + #$5DA3, // $5DA3 + #$5DA4, // $5DA4 + #$5DA5, // $5DA5 + #$5DA6, // $5DA6 + #$5DA7, // $5DA7 + #$5DA8, // $5DA8 + #$5DA9, // $5DA9 + #$5DAA, // $5DAA + #$5DAB, // $5DAB + #$5DAC, // $5DAC + #$5DAD, // $5DAD + #$5DAE, // $5DAE + #$5DAF, // $5DAF + #$5DB0, // $5DB0 + #$5DB1, // $5DB1 + #$5DB2, // $5DB2 + #$5DB3, // $5DB3 + #$5DB4, // $5DB4 + #$5DB5, // $5DB5 + #$5DB6, // $5DB6 + #$5DB7, // $5DB7 + #$5DB8, // $5DB8 + #$5DB9, // $5DB9 + #$5DBA, // $5DBA + #$5DBB, // $5DBB + #$5DBC, // $5DBC + #$5DBD, // $5DBD + #$5DBE, // $5DBE + #$5DBF, // $5DBF + #$5DC0, // $5DC0 + #$5DC1, // $5DC1 + #$5DC2, // $5DC2 + #$5DC3, // $5DC3 + #$5DC4, // $5DC4 + #$5DC5, // $5DC5 + #$5DC6, // $5DC6 + #$5DC7, // $5DC7 + #$5DC8, // $5DC8 + #$5DC9, // $5DC9 + #$5DCA, // $5DCA + #$5DCB, // $5DCB + #$5DCC, // $5DCC + #$5DCD, // $5DCD + #$5DCE, // $5DCE + #$5DCF, // $5DCF + #$5DD0, // $5DD0 + #$5DD1, // $5DD1 + #$5DD2, // $5DD2 + #$5DD3, // $5DD3 + #$5DD4, // $5DD4 + #$5DD5, // $5DD5 + #$5DD6, // $5DD6 + #$5DD7, // $5DD7 + #$5DD8, // $5DD8 + #$5DD9, // $5DD9 + #$5DDA, // $5DDA + #$5DDB, // $5DDB + #$5DDC, // $5DDC + #$5DDD, // $5DDD + #$5DDE, // $5DDE + #$5DDF, // $5DDF + #$5DE0, // $5DE0 + #$5DE1, // $5DE1 + #$5DE2, // $5DE2 + #$5DE3, // $5DE3 + #$5DE4, // $5DE4 + #$5DE5, // $5DE5 + #$5DE6, // $5DE6 + #$5DE7, // $5DE7 + #$5DE8, // $5DE8 + #$5DE9, // $5DE9 + #$5DEA, // $5DEA + #$5DEB, // $5DEB + #$5DEC, // $5DEC + #$5DED, // $5DED + #$5DEE, // $5DEE + #$5DEF, // $5DEF + #$5DF0, // $5DF0 + #$5DF1, // $5DF1 + #$5DF2, // $5DF2 + #$5DF3, // $5DF3 + #$5DF4, // $5DF4 + #$5DF5, // $5DF5 + #$5DF6, // $5DF6 + #$5DF7, // $5DF7 + #$5DF8, // $5DF8 + #$5DF9, // $5DF9 + #$5DFA, // $5DFA + #$5DFB, // $5DFB + #$5DFC, // $5DFC + #$5DFD, // $5DFD + #$5DFE, // $5DFE + #$5DFF, // $5DFF + #$5E00, // $5E00 + #$5E01, // $5E01 + #$5E02, // $5E02 + #$5E03, // $5E03 + #$5E04, // $5E04 + #$5E05, // $5E05 + #$5E06, // $5E06 + #$5E07, // $5E07 + #$5E08, // $5E08 + #$5E09, // $5E09 + #$5E0A, // $5E0A + #$5E0B, // $5E0B + #$5E0C, // $5E0C + #$5E0D, // $5E0D + #$5E0E, // $5E0E + #$5E0F, // $5E0F + #$5E10, // $5E10 + #$5E11, // $5E11 + #$5E12, // $5E12 + #$5E13, // $5E13 + #$5E14, // $5E14 + #$5E15, // $5E15 + #$5E16, // $5E16 + #$5E17, // $5E17 + #$5E18, // $5E18 + #$5E19, // $5E19 + #$5E1A, // $5E1A + #$5E1B, // $5E1B + #$5E1C, // $5E1C + #$5E1D, // $5E1D + #$5E1E, // $5E1E + #$5E1F, // $5E1F + #$5E20, // $5E20 + #$5E21, // $5E21 + #$5E22, // $5E22 + #$5E23, // $5E23 + #$5E24, // $5E24 + #$5E25, // $5E25 + #$5E26, // $5E26 + #$5E27, // $5E27 + #$5E28, // $5E28 + #$5E29, // $5E29 + #$5E2A, // $5E2A + #$5E2B, // $5E2B + #$5E2C, // $5E2C + #$5E2D, // $5E2D + #$5E2E, // $5E2E + #$5E2F, // $5E2F + #$5E30, // $5E30 + #$5E31, // $5E31 + #$5E32, // $5E32 + #$5E33, // $5E33 + #$5E34, // $5E34 + #$5E35, // $5E35 + #$5E36, // $5E36 + #$5E37, // $5E37 + #$5E38, // $5E38 + #$5E39, // $5E39 + #$5E3A, // $5E3A + #$5E3B, // $5E3B + #$5E3C, // $5E3C + #$5E3D, // $5E3D + #$5E3E, // $5E3E + #$5E3F, // $5E3F + #$5E40, // $5E40 + #$5E41, // $5E41 + #$5E42, // $5E42 + #$5E43, // $5E43 + #$5E44, // $5E44 + #$5E45, // $5E45 + #$5E46, // $5E46 + #$5E47, // $5E47 + #$5E48, // $5E48 + #$5E49, // $5E49 + #$5E4A, // $5E4A + #$5E4B, // $5E4B + #$5E4C, // $5E4C + #$5E4D, // $5E4D + #$5E4E, // $5E4E + #$5E4F, // $5E4F + #$5E50, // $5E50 + #$5E51, // $5E51 + #$5E52, // $5E52 + #$5E53, // $5E53 + #$5E54, // $5E54 + #$5E55, // $5E55 + #$5E56, // $5E56 + #$5E57, // $5E57 + #$5E58, // $5E58 + #$5E59, // $5E59 + #$5E5A, // $5E5A + #$5E5B, // $5E5B + #$5E5C, // $5E5C + #$5E5D, // $5E5D + #$5E5E, // $5E5E + #$5E5F, // $5E5F + #$5E60, // $5E60 + #$5E61, // $5E61 + #$5E62, // $5E62 + #$5E63, // $5E63 + #$5E64, // $5E64 + #$5E65, // $5E65 + #$5E66, // $5E66 + #$5E67, // $5E67 + #$5E68, // $5E68 + #$5E69, // $5E69 + #$5E6A, // $5E6A + #$5E6B, // $5E6B + #$5E6C, // $5E6C + #$5E6D, // $5E6D + #$5E6E, // $5E6E + #$5E6F, // $5E6F + #$5E70, // $5E70 + #$5E71, // $5E71 + #$5E72, // $5E72 + #$5E73, // $5E73 + #$5E74, // $5E74 + #$5E75, // $5E75 + #$5E76, // $5E76 + #$5E77, // $5E77 + #$5E78, // $5E78 + #$5E79, // $5E79 + #$5E7A, // $5E7A + #$5E7B, // $5E7B + #$5E7C, // $5E7C + #$5E7D, // $5E7D + #$5E7E, // $5E7E + #$5E7F, // $5E7F + #$5E80, // $5E80 + #$5E81, // $5E81 + #$5E82, // $5E82 + #$5E83, // $5E83 + #$5E84, // $5E84 + #$5E85, // $5E85 + #$5E86, // $5E86 + #$5E87, // $5E87 + #$5E88, // $5E88 + #$5E89, // $5E89 + #$5E8A, // $5E8A + #$5E8B, // $5E8B + #$5E8C, // $5E8C + #$5E8D, // $5E8D + #$5E8E, // $5E8E + #$5E8F, // $5E8F + #$5E90, // $5E90 + #$5E91, // $5E91 + #$5E92, // $5E92 + #$5E93, // $5E93 + #$5E94, // $5E94 + #$5E95, // $5E95 + #$5E96, // $5E96 + #$5E97, // $5E97 + #$5E98, // $5E98 + #$5E99, // $5E99 + #$5E9A, // $5E9A + #$5E9B, // $5E9B + #$5E9C, // $5E9C + #$5E9D, // $5E9D + #$5E9E, // $5E9E + #$5E9F, // $5E9F + #$5EA0, // $5EA0 + #$5EA1, // $5EA1 + #$5EA2, // $5EA2 + #$5EA3, // $5EA3 + #$5EA4, // $5EA4 + #$5EA5, // $5EA5 + #$5EA6, // $5EA6 + #$5EA7, // $5EA7 + #$5EA8, // $5EA8 + #$5EA9, // $5EA9 + #$5EAA, // $5EAA + #$5EAB, // $5EAB + #$5EAC, // $5EAC + #$5EAD, // $5EAD + #$5EAE, // $5EAE + #$5EAF, // $5EAF + #$5EB0, // $5EB0 + #$5EB1, // $5EB1 + #$5EB2, // $5EB2 + #$5EB3, // $5EB3 + #$5EB4, // $5EB4 + #$5EB5, // $5EB5 + #$5EB6, // $5EB6 + #$5EB7, // $5EB7 + #$5EB8, // $5EB8 + #$5EB9, // $5EB9 + #$5EBA, // $5EBA + #$5EBB, // $5EBB + #$5EBC, // $5EBC + #$5EBD, // $5EBD + #$5EBE, // $5EBE + #$5EBF, // $5EBF + #$5EC0, // $5EC0 + #$5EC1, // $5EC1 + #$5EC2, // $5EC2 + #$5EC3, // $5EC3 + #$5EC4, // $5EC4 + #$5EC5, // $5EC5 + #$5EC6, // $5EC6 + #$5EC7, // $5EC7 + #$5EC8, // $5EC8 + #$5EC9, // $5EC9 + #$5ECA, // $5ECA + #$5ECB, // $5ECB + #$5ECC, // $5ECC + #$5ECD, // $5ECD + #$5ECE, // $5ECE + #$5ECF, // $5ECF + #$5ED0, // $5ED0 + #$5ED1, // $5ED1 + #$5ED2, // $5ED2 + #$5ED3, // $5ED3 + #$5ED4, // $5ED4 + #$5ED5, // $5ED5 + #$5ED6, // $5ED6 + #$5ED7, // $5ED7 + #$5ED8, // $5ED8 + #$5ED9, // $5ED9 + #$5EDA, // $5EDA + #$5EDB, // $5EDB + #$5EDC, // $5EDC + #$5EDD, // $5EDD + #$5EDE, // $5EDE + #$5EDF, // $5EDF + #$5EE0, // $5EE0 + #$5EE1, // $5EE1 + #$5EE2, // $5EE2 + #$5EE3, // $5EE3 + #$5EE4, // $5EE4 + #$5EE5, // $5EE5 + #$5EE6, // $5EE6 + #$5EE7, // $5EE7 + #$5EE8, // $5EE8 + #$5EE9, // $5EE9 + #$5EEA, // $5EEA + #$5EEB, // $5EEB + #$5EEC, // $5EEC + #$5EED, // $5EED + #$5EEE, // $5EEE + #$5EEF, // $5EEF + #$5EF0, // $5EF0 + #$5EF1, // $5EF1 + #$5EF2, // $5EF2 + #$5EF3, // $5EF3 + #$5EF4, // $5EF4 + #$5EF5, // $5EF5 + #$5EF6, // $5EF6 + #$5EF7, // $5EF7 + #$5EF8, // $5EF8 + #$5EF9, // $5EF9 + #$5EFA, // $5EFA + #$5EFB, // $5EFB + #$5EFC, // $5EFC + #$5EFD, // $5EFD + #$5EFE, // $5EFE + #$5EFF, // $5EFF + #$5F00, // $5F00 + #$5F01, // $5F01 + #$5F02, // $5F02 + #$5F03, // $5F03 + #$5F04, // $5F04 + #$5F05, // $5F05 + #$5F06, // $5F06 + #$5F07, // $5F07 + #$5F08, // $5F08 + #$5F09, // $5F09 + #$5F0A, // $5F0A + #$5F0B, // $5F0B + #$5F0C, // $5F0C + #$5F0D, // $5F0D + #$5F0E, // $5F0E + #$5F0F, // $5F0F + #$5F10, // $5F10 + #$5F11, // $5F11 + #$5F12, // $5F12 + #$5F13, // $5F13 + #$5F14, // $5F14 + #$5F15, // $5F15 + #$5F16, // $5F16 + #$5F17, // $5F17 + #$5F18, // $5F18 + #$5F19, // $5F19 + #$5F1A, // $5F1A + #$5F1B, // $5F1B + #$5F1C, // $5F1C + #$5F1D, // $5F1D + #$5F1E, // $5F1E + #$5F1F, // $5F1F + #$5F20, // $5F20 + #$5F21, // $5F21 + #$5F22, // $5F22 + #$5F23, // $5F23 + #$5F24, // $5F24 + #$5F25, // $5F25 + #$5F26, // $5F26 + #$5F27, // $5F27 + #$5F28, // $5F28 + #$5F29, // $5F29 + #$5F2A, // $5F2A + #$5F2B, // $5F2B + #$5F2C, // $5F2C + #$5F2D, // $5F2D + #$5F2E, // $5F2E + #$5F2F, // $5F2F + #$5F30, // $5F30 + #$5F31, // $5F31 + #$5F32, // $5F32 + #$5F33, // $5F33 + #$5F34, // $5F34 + #$5F35, // $5F35 + #$5F36, // $5F36 + #$5F37, // $5F37 + #$5F38, // $5F38 + #$5F39, // $5F39 + #$5F3A, // $5F3A + #$5F3B, // $5F3B + #$5F3C, // $5F3C + #$5F3D, // $5F3D + #$5F3E, // $5F3E + #$5F3F, // $5F3F + #$5F40, // $5F40 + #$5F41, // $5F41 + #$5F42, // $5F42 + #$5F43, // $5F43 + #$5F44, // $5F44 + #$5F45, // $5F45 + #$5F46, // $5F46 + #$5F47, // $5F47 + #$5F48, // $5F48 + #$5F49, // $5F49 + #$5F4A, // $5F4A + #$5F4B, // $5F4B + #$5F4C, // $5F4C + #$5F4D, // $5F4D + #$5F4E, // $5F4E + #$5F4F, // $5F4F + #$5F50, // $5F50 + #$5F51, // $5F51 + #$5F52, // $5F52 + #$5F53, // $5F53 + #$5F54, // $5F54 + #$5F55, // $5F55 + #$5F56, // $5F56 + #$5F57, // $5F57 + #$5F58, // $5F58 + #$5F59, // $5F59 + #$5F5A, // $5F5A + #$5F5B, // $5F5B + #$5F5C, // $5F5C + #$5F5D, // $5F5D + #$5F5E, // $5F5E + #$5F5F, // $5F5F + #$5F60, // $5F60 + #$5F61, // $5F61 + #$5F62, // $5F62 + #$5F63, // $5F63 + #$5F64, // $5F64 + #$5F65, // $5F65 + #$5F66, // $5F66 + #$5F67, // $5F67 + #$5F68, // $5F68 + #$5F69, // $5F69 + #$5F6A, // $5F6A + #$5F6B, // $5F6B + #$5F6C, // $5F6C + #$5F6D, // $5F6D + #$5F6E, // $5F6E + #$5F6F, // $5F6F + #$5F70, // $5F70 + #$5F71, // $5F71 + #$5F72, // $5F72 + #$5F73, // $5F73 + #$5F74, // $5F74 + #$5F75, // $5F75 + #$5F76, // $5F76 + #$5F77, // $5F77 + #$5F78, // $5F78 + #$5F79, // $5F79 + #$5F7A, // $5F7A + #$5F7B, // $5F7B + #$5F7C, // $5F7C + #$5F7D, // $5F7D + #$5F7E, // $5F7E + #$5F7F, // $5F7F + #$5F80, // $5F80 + #$5F81, // $5F81 + #$5F82, // $5F82 + #$5F83, // $5F83 + #$5F84, // $5F84 + #$5F85, // $5F85 + #$5F86, // $5F86 + #$5F87, // $5F87 + #$5F88, // $5F88 + #$5F89, // $5F89 + #$5F8A, // $5F8A + #$5F8B, // $5F8B + #$5F8C, // $5F8C + #$5F8D, // $5F8D + #$5F8E, // $5F8E + #$5F8F, // $5F8F + #$5F90, // $5F90 + #$5F91, // $5F91 + #$5F92, // $5F92 + #$5F93, // $5F93 + #$5F94, // $5F94 + #$5F95, // $5F95 + #$5F96, // $5F96 + #$5F97, // $5F97 + #$5F98, // $5F98 + #$5F99, // $5F99 + #$5F9A, // $5F9A + #$5F9B, // $5F9B + #$5F9C, // $5F9C + #$5F9D, // $5F9D + #$5F9E, // $5F9E + #$5F9F, // $5F9F + #$5FA0, // $5FA0 + #$5FA1, // $5FA1 + #$5FA2, // $5FA2 + #$5FA3, // $5FA3 + #$5FA4, // $5FA4 + #$5FA5, // $5FA5 + #$5FA6, // $5FA6 + #$5FA7, // $5FA7 + #$5FA8, // $5FA8 + #$5FA9, // $5FA9 + #$5FAA, // $5FAA + #$5FAB, // $5FAB + #$5FAC, // $5FAC + #$5FAD, // $5FAD + #$5FAE, // $5FAE + #$5FAF, // $5FAF + #$5FB0, // $5FB0 + #$5FB1, // $5FB1 + #$5FB2, // $5FB2 + #$5FB3, // $5FB3 + #$5FB4, // $5FB4 + #$5FB5, // $5FB5 + #$5FB6, // $5FB6 + #$5FB7, // $5FB7 + #$5FB8, // $5FB8 + #$5FB9, // $5FB9 + #$5FBA, // $5FBA + #$5FBB, // $5FBB + #$5FBC, // $5FBC + #$5FBD, // $5FBD + #$5FBE, // $5FBE + #$5FBF, // $5FBF + #$5FC0, // $5FC0 + #$5FC1, // $5FC1 + #$5FC2, // $5FC2 + #$5FC3, // $5FC3 + #$5FC4, // $5FC4 + #$5FC5, // $5FC5 + #$5FC6, // $5FC6 + #$5FC7, // $5FC7 + #$5FC8, // $5FC8 + #$5FC9, // $5FC9 + #$5FCA, // $5FCA + #$5FCB, // $5FCB + #$5FCC, // $5FCC + #$5FCD, // $5FCD + #$5FCE, // $5FCE + #$5FCF, // $5FCF + #$5FD0, // $5FD0 + #$5FD1, // $5FD1 + #$5FD2, // $5FD2 + #$5FD3, // $5FD3 + #$5FD4, // $5FD4 + #$5FD5, // $5FD5 + #$5FD6, // $5FD6 + #$5FD7, // $5FD7 + #$5FD8, // $5FD8 + #$5FD9, // $5FD9 + #$5FDA, // $5FDA + #$5FDB, // $5FDB + #$5FDC, // $5FDC + #$5FDD, // $5FDD + #$5FDE, // $5FDE + #$5FDF, // $5FDF + #$5FE0, // $5FE0 + #$5FE1, // $5FE1 + #$5FE2, // $5FE2 + #$5FE3, // $5FE3 + #$5FE4, // $5FE4 + #$5FE5, // $5FE5 + #$5FE6, // $5FE6 + #$5FE7, // $5FE7 + #$5FE8, // $5FE8 + #$5FE9, // $5FE9 + #$5FEA, // $5FEA + #$5FEB, // $5FEB + #$5FEC, // $5FEC + #$5FED, // $5FED + #$5FEE, // $5FEE + #$5FEF, // $5FEF + #$5FF0, // $5FF0 + #$5FF1, // $5FF1 + #$5FF2, // $5FF2 + #$5FF3, // $5FF3 + #$5FF4, // $5FF4 + #$5FF5, // $5FF5 + #$5FF6, // $5FF6 + #$5FF7, // $5FF7 + #$5FF8, // $5FF8 + #$5FF9, // $5FF9 + #$5FFA, // $5FFA + #$5FFB, // $5FFB + #$5FFC, // $5FFC + #$5FFD, // $5FFD + #$5FFE, // $5FFE + #$5FFF, // $5FFF + #$6000, // $6000 + #$6001, // $6001 + #$6002, // $6002 + #$6003, // $6003 + #$6004, // $6004 + #$6005, // $6005 + #$6006, // $6006 + #$6007, // $6007 + #$6008, // $6008 + #$6009, // $6009 + #$600A, // $600A + #$600B, // $600B + #$600C, // $600C + #$600D, // $600D + #$600E, // $600E + #$600F, // $600F + #$6010, // $6010 + #$6011, // $6011 + #$6012, // $6012 + #$6013, // $6013 + #$6014, // $6014 + #$6015, // $6015 + #$6016, // $6016 + #$6017, // $6017 + #$6018, // $6018 + #$6019, // $6019 + #$601A, // $601A + #$601B, // $601B + #$601C, // $601C + #$601D, // $601D + #$601E, // $601E + #$601F, // $601F + #$6020, // $6020 + #$6021, // $6021 + #$6022, // $6022 + #$6023, // $6023 + #$6024, // $6024 + #$6025, // $6025 + #$6026, // $6026 + #$6027, // $6027 + #$6028, // $6028 + #$6029, // $6029 + #$602A, // $602A + #$602B, // $602B + #$602C, // $602C + #$602D, // $602D + #$602E, // $602E + #$602F, // $602F + #$6030, // $6030 + #$6031, // $6031 + #$6032, // $6032 + #$6033, // $6033 + #$6034, // $6034 + #$6035, // $6035 + #$6036, // $6036 + #$6037, // $6037 + #$6038, // $6038 + #$6039, // $6039 + #$603A, // $603A + #$603B, // $603B + #$603C, // $603C + #$603D, // $603D + #$603E, // $603E + #$603F, // $603F + #$6040, // $6040 + #$6041, // $6041 + #$6042, // $6042 + #$6043, // $6043 + #$6044, // $6044 + #$6045, // $6045 + #$6046, // $6046 + #$6047, // $6047 + #$6048, // $6048 + #$6049, // $6049 + #$604A, // $604A + #$604B, // $604B + #$604C, // $604C + #$604D, // $604D + #$604E, // $604E + #$604F, // $604F + #$6050, // $6050 + #$6051, // $6051 + #$6052, // $6052 + #$6053, // $6053 + #$6054, // $6054 + #$6055, // $6055 + #$6056, // $6056 + #$6057, // $6057 + #$6058, // $6058 + #$6059, // $6059 + #$605A, // $605A + #$605B, // $605B + #$605C, // $605C + #$605D, // $605D + #$605E, // $605E + #$605F, // $605F + #$6060, // $6060 + #$6061, // $6061 + #$6062, // $6062 + #$6063, // $6063 + #$6064, // $6064 + #$6065, // $6065 + #$6066, // $6066 + #$6067, // $6067 + #$6068, // $6068 + #$6069, // $6069 + #$606A, // $606A + #$606B, // $606B + #$606C, // $606C + #$606D, // $606D + #$606E, // $606E + #$606F, // $606F + #$6070, // $6070 + #$6071, // $6071 + #$6072, // $6072 + #$6073, // $6073 + #$6074, // $6074 + #$6075, // $6075 + #$6076, // $6076 + #$6077, // $6077 + #$6078, // $6078 + #$6079, // $6079 + #$607A, // $607A + #$607B, // $607B + #$607C, // $607C + #$607D, // $607D + #$607E, // $607E + #$607F, // $607F + #$6080, // $6080 + #$6081, // $6081 + #$6082, // $6082 + #$6083, // $6083 + #$6084, // $6084 + #$6085, // $6085 + #$6086, // $6086 + #$6087, // $6087 + #$6088, // $6088 + #$6089, // $6089 + #$608A, // $608A + #$608B, // $608B + #$608C, // $608C + #$608D, // $608D + #$608E, // $608E + #$608F, // $608F + #$6090, // $6090 + #$6091, // $6091 + #$6092, // $6092 + #$6093, // $6093 + #$6094, // $6094 + #$6095, // $6095 + #$6096, // $6096 + #$6097, // $6097 + #$6098, // $6098 + #$6099, // $6099 + #$609A, // $609A + #$609B, // $609B + #$609C, // $609C + #$609D, // $609D + #$609E, // $609E + #$609F, // $609F + #$60A0, // $60A0 + #$60A1, // $60A1 + #$60A2, // $60A2 + #$60A3, // $60A3 + #$60A4, // $60A4 + #$60A5, // $60A5 + #$60A6, // $60A6 + #$60A7, // $60A7 + #$60A8, // $60A8 + #$60A9, // $60A9 + #$60AA, // $60AA + #$60AB, // $60AB + #$60AC, // $60AC + #$60AD, // $60AD + #$60AE, // $60AE + #$60AF, // $60AF + #$60B0, // $60B0 + #$60B1, // $60B1 + #$60B2, // $60B2 + #$60B3, // $60B3 + #$60B4, // $60B4 + #$60B5, // $60B5 + #$60B6, // $60B6 + #$60B7, // $60B7 + #$60B8, // $60B8 + #$60B9, // $60B9 + #$60BA, // $60BA + #$60BB, // $60BB + #$60BC, // $60BC + #$60BD, // $60BD + #$60BE, // $60BE + #$60BF, // $60BF + #$60C0, // $60C0 + #$60C1, // $60C1 + #$60C2, // $60C2 + #$60C3, // $60C3 + #$60C4, // $60C4 + #$60C5, // $60C5 + #$60C6, // $60C6 + #$60C7, // $60C7 + #$60C8, // $60C8 + #$60C9, // $60C9 + #$60CA, // $60CA + #$60CB, // $60CB + #$60CC, // $60CC + #$60CD, // $60CD + #$60CE, // $60CE + #$60CF, // $60CF + #$60D0, // $60D0 + #$60D1, // $60D1 + #$60D2, // $60D2 + #$60D3, // $60D3 + #$60D4, // $60D4 + #$60D5, // $60D5 + #$60D6, // $60D6 + #$60D7, // $60D7 + #$60D8, // $60D8 + #$60D9, // $60D9 + #$60DA, // $60DA + #$60DB, // $60DB + #$60DC, // $60DC + #$60DD, // $60DD + #$60DE, // $60DE + #$60DF, // $60DF + #$60E0, // $60E0 + #$60E1, // $60E1 + #$60E2, // $60E2 + #$60E3, // $60E3 + #$60E4, // $60E4 + #$60E5, // $60E5 + #$60E6, // $60E6 + #$60E7, // $60E7 + #$60E8, // $60E8 + #$60E9, // $60E9 + #$60EA, // $60EA + #$60EB, // $60EB + #$60EC, // $60EC + #$60ED, // $60ED + #$60EE, // $60EE + #$60EF, // $60EF + #$60F0, // $60F0 + #$60F1, // $60F1 + #$60F2, // $60F2 + #$60F3, // $60F3 + #$60F4, // $60F4 + #$60F5, // $60F5 + #$60F6, // $60F6 + #$60F7, // $60F7 + #$60F8, // $60F8 + #$60F9, // $60F9 + #$60FA, // $60FA + #$60FB, // $60FB + #$60FC, // $60FC + #$60FD, // $60FD + #$60FE, // $60FE + #$60FF, // $60FF + #$6100, // $6100 + #$6101, // $6101 + #$6102, // $6102 + #$6103, // $6103 + #$6104, // $6104 + #$6105, // $6105 + #$6106, // $6106 + #$6107, // $6107 + #$6108, // $6108 + #$6109, // $6109 + #$610A, // $610A + #$610B, // $610B + #$610C, // $610C + #$610D, // $610D + #$610E, // $610E + #$610F, // $610F + #$6110, // $6110 + #$6111, // $6111 + #$6112, // $6112 + #$6113, // $6113 + #$6114, // $6114 + #$6115, // $6115 + #$6116, // $6116 + #$6117, // $6117 + #$6118, // $6118 + #$6119, // $6119 + #$611A, // $611A + #$611B, // $611B + #$611C, // $611C + #$611D, // $611D + #$611E, // $611E + #$611F, // $611F + #$6120, // $6120 + #$6121, // $6121 + #$6122, // $6122 + #$6123, // $6123 + #$6124, // $6124 + #$6125, // $6125 + #$6126, // $6126 + #$6127, // $6127 + #$6128, // $6128 + #$6129, // $6129 + #$612A, // $612A + #$612B, // $612B + #$612C, // $612C + #$612D, // $612D + #$612E, // $612E + #$612F, // $612F + #$6130, // $6130 + #$6131, // $6131 + #$6132, // $6132 + #$6133, // $6133 + #$6134, // $6134 + #$6135, // $6135 + #$6136, // $6136 + #$6137, // $6137 + #$6138, // $6138 + #$6139, // $6139 + #$613A, // $613A + #$613B, // $613B + #$613C, // $613C + #$613D, // $613D + #$613E, // $613E + #$613F, // $613F + #$6140, // $6140 + #$6141, // $6141 + #$6142, // $6142 + #$6143, // $6143 + #$6144, // $6144 + #$6145, // $6145 + #$6146, // $6146 + #$6147, // $6147 + #$6148, // $6148 + #$6149, // $6149 + #$614A, // $614A + #$614B, // $614B + #$614C, // $614C + #$614D, // $614D + #$614E, // $614E + #$614F, // $614F + #$6150, // $6150 + #$6151, // $6151 + #$6152, // $6152 + #$6153, // $6153 + #$6154, // $6154 + #$6155, // $6155 + #$6156, // $6156 + #$6157, // $6157 + #$6158, // $6158 + #$6159, // $6159 + #$615A, // $615A + #$615B, // $615B + #$615C, // $615C + #$615D, // $615D + #$615E, // $615E + #$615F, // $615F + #$6160, // $6160 + #$6161, // $6161 + #$6162, // $6162 + #$6163, // $6163 + #$6164, // $6164 + #$6165, // $6165 + #$6166, // $6166 + #$6167, // $6167 + #$6168, // $6168 + #$6169, // $6169 + #$616A, // $616A + #$616B, // $616B + #$616C, // $616C + #$616D, // $616D + #$616E, // $616E + #$616F, // $616F + #$6170, // $6170 + #$6171, // $6171 + #$6172, // $6172 + #$6173, // $6173 + #$6174, // $6174 + #$6175, // $6175 + #$6176, // $6176 + #$6177, // $6177 + #$6178, // $6178 + #$6179, // $6179 + #$617A, // $617A + #$617B, // $617B + #$617C, // $617C + #$617D, // $617D + #$617E, // $617E + #$617F, // $617F + #$6180, // $6180 + #$6181, // $6181 + #$6182, // $6182 + #$6183, // $6183 + #$6184, // $6184 + #$6185, // $6185 + #$6186, // $6186 + #$6187, // $6187 + #$6188, // $6188 + #$6189, // $6189 + #$618A, // $618A + #$618B, // $618B + #$618C, // $618C + #$618D, // $618D + #$618E, // $618E + #$618F, // $618F + #$6190, // $6190 + #$6191, // $6191 + #$6192, // $6192 + #$6193, // $6193 + #$6194, // $6194 + #$6195, // $6195 + #$6196, // $6196 + #$6197, // $6197 + #$6198, // $6198 + #$6199, // $6199 + #$619A, // $619A + #$619B, // $619B + #$619C, // $619C + #$619D, // $619D + #$619E, // $619E + #$619F, // $619F + #$61A0, // $61A0 + #$61A1, // $61A1 + #$61A2, // $61A2 + #$61A3, // $61A3 + #$61A4, // $61A4 + #$61A5, // $61A5 + #$61A6, // $61A6 + #$61A7, // $61A7 + #$61A8, // $61A8 + #$61A9, // $61A9 + #$61AA, // $61AA + #$61AB, // $61AB + #$61AC, // $61AC + #$61AD, // $61AD + #$61AE, // $61AE + #$61AF, // $61AF + #$61B0, // $61B0 + #$61B1, // $61B1 + #$61B2, // $61B2 + #$61B3, // $61B3 + #$61B4, // $61B4 + #$61B5, // $61B5 + #$61B6, // $61B6 + #$61B7, // $61B7 + #$61B8, // $61B8 + #$61B9, // $61B9 + #$61BA, // $61BA + #$61BB, // $61BB + #$61BC, // $61BC + #$61BD, // $61BD + #$61BE, // $61BE + #$61BF, // $61BF + #$61C0, // $61C0 + #$61C1, // $61C1 + #$61C2, // $61C2 + #$61C3, // $61C3 + #$61C4, // $61C4 + #$61C5, // $61C5 + #$61C6, // $61C6 + #$61C7, // $61C7 + #$61C8, // $61C8 + #$61C9, // $61C9 + #$61CA, // $61CA + #$61CB, // $61CB + #$61CC, // $61CC + #$61CD, // $61CD + #$61CE, // $61CE + #$61CF, // $61CF + #$61D0, // $61D0 + #$61D1, // $61D1 + #$61D2, // $61D2 + #$61D3, // $61D3 + #$61D4, // $61D4 + #$61D5, // $61D5 + #$61D6, // $61D6 + #$61D7, // $61D7 + #$61D8, // $61D8 + #$61D9, // $61D9 + #$61DA, // $61DA + #$61DB, // $61DB + #$61DC, // $61DC + #$61DD, // $61DD + #$61DE, // $61DE + #$61DF, // $61DF + #$61E0, // $61E0 + #$61E1, // $61E1 + #$61E2, // $61E2 + #$61E3, // $61E3 + #$61E4, // $61E4 + #$61E5, // $61E5 + #$61E6, // $61E6 + #$61E7, // $61E7 + #$61E8, // $61E8 + #$61E9, // $61E9 + #$61EA, // $61EA + #$61EB, // $61EB + #$61EC, // $61EC + #$61ED, // $61ED + #$61EE, // $61EE + #$61EF, // $61EF + #$61F0, // $61F0 + #$61F1, // $61F1 + #$61F2, // $61F2 + #$61F3, // $61F3 + #$61F4, // $61F4 + #$61F5, // $61F5 + #$61F6, // $61F6 + #$61F7, // $61F7 + #$61F8, // $61F8 + #$61F9, // $61F9 + #$61FA, // $61FA + #$61FB, // $61FB + #$61FC, // $61FC + #$61FD, // $61FD + #$61FE, // $61FE + #$61FF, // $61FF + #$6200, // $6200 + #$6201, // $6201 + #$6202, // $6202 + #$6203, // $6203 + #$6204, // $6204 + #$6205, // $6205 + #$6206, // $6206 + #$6207, // $6207 + #$6208, // $6208 + #$6209, // $6209 + #$620A, // $620A + #$620B, // $620B + #$620C, // $620C + #$620D, // $620D + #$620E, // $620E + #$620F, // $620F + #$6210, // $6210 + #$6211, // $6211 + #$6212, // $6212 + #$6213, // $6213 + #$6214, // $6214 + #$6215, // $6215 + #$6216, // $6216 + #$6217, // $6217 + #$6218, // $6218 + #$6219, // $6219 + #$621A, // $621A + #$621B, // $621B + #$621C, // $621C + #$621D, // $621D + #$621E, // $621E + #$621F, // $621F + #$6220, // $6220 + #$6221, // $6221 + #$6222, // $6222 + #$6223, // $6223 + #$6224, // $6224 + #$6225, // $6225 + #$6226, // $6226 + #$6227, // $6227 + #$6228, // $6228 + #$6229, // $6229 + #$622A, // $622A + #$622B, // $622B + #$622C, // $622C + #$622D, // $622D + #$622E, // $622E + #$622F, // $622F + #$6230, // $6230 + #$6231, // $6231 + #$6232, // $6232 + #$6233, // $6233 + #$6234, // $6234 + #$6235, // $6235 + #$6236, // $6236 + #$6237, // $6237 + #$6238, // $6238 + #$6239, // $6239 + #$623A, // $623A + #$623B, // $623B + #$623C, // $623C + #$623D, // $623D + #$623E, // $623E + #$623F, // $623F + #$6240, // $6240 + #$6241, // $6241 + #$6242, // $6242 + #$6243, // $6243 + #$6244, // $6244 + #$6245, // $6245 + #$6246, // $6246 + #$6247, // $6247 + #$6248, // $6248 + #$6249, // $6249 + #$624A, // $624A + #$624B, // $624B + #$624C, // $624C + #$624D, // $624D + #$624E, // $624E + #$624F, // $624F + #$6250, // $6250 + #$6251, // $6251 + #$6252, // $6252 + #$6253, // $6253 + #$6254, // $6254 + #$6255, // $6255 + #$6256, // $6256 + #$6257, // $6257 + #$6258, // $6258 + #$6259, // $6259 + #$625A, // $625A + #$625B, // $625B + #$625C, // $625C + #$625D, // $625D + #$625E, // $625E + #$625F, // $625F + #$6260, // $6260 + #$6261, // $6261 + #$6262, // $6262 + #$6263, // $6263 + #$6264, // $6264 + #$6265, // $6265 + #$6266, // $6266 + #$6267, // $6267 + #$6268, // $6268 + #$6269, // $6269 + #$626A, // $626A + #$626B, // $626B + #$626C, // $626C + #$626D, // $626D + #$626E, // $626E + #$626F, // $626F + #$6270, // $6270 + #$6271, // $6271 + #$6272, // $6272 + #$6273, // $6273 + #$6274, // $6274 + #$6275, // $6275 + #$6276, // $6276 + #$6277, // $6277 + #$6278, // $6278 + #$6279, // $6279 + #$627A, // $627A + #$627B, // $627B + #$627C, // $627C + #$627D, // $627D + #$627E, // $627E + #$627F, // $627F + #$6280, // $6280 + #$6281, // $6281 + #$6282, // $6282 + #$6283, // $6283 + #$6284, // $6284 + #$6285, // $6285 + #$6286, // $6286 + #$6287, // $6287 + #$6288, // $6288 + #$6289, // $6289 + #$628A, // $628A + #$628B, // $628B + #$628C, // $628C + #$628D, // $628D + #$628E, // $628E + #$628F, // $628F + #$6290, // $6290 + #$6291, // $6291 + #$6292, // $6292 + #$6293, // $6293 + #$6294, // $6294 + #$6295, // $6295 + #$6296, // $6296 + #$6297, // $6297 + #$6298, // $6298 + #$6299, // $6299 + #$629A, // $629A + #$629B, // $629B + #$629C, // $629C + #$629D, // $629D + #$629E, // $629E + #$629F, // $629F + #$62A0, // $62A0 + #$62A1, // $62A1 + #$62A2, // $62A2 + #$62A3, // $62A3 + #$62A4, // $62A4 + #$62A5, // $62A5 + #$62A6, // $62A6 + #$62A7, // $62A7 + #$62A8, // $62A8 + #$62A9, // $62A9 + #$62AA, // $62AA + #$62AB, // $62AB + #$62AC, // $62AC + #$62AD, // $62AD + #$62AE, // $62AE + #$62AF, // $62AF + #$62B0, // $62B0 + #$62B1, // $62B1 + #$62B2, // $62B2 + #$62B3, // $62B3 + #$62B4, // $62B4 + #$62B5, // $62B5 + #$62B6, // $62B6 + #$62B7, // $62B7 + #$62B8, // $62B8 + #$62B9, // $62B9 + #$62BA, // $62BA + #$62BB, // $62BB + #$62BC, // $62BC + #$62BD, // $62BD + #$62BE, // $62BE + #$62BF, // $62BF + #$62C0, // $62C0 + #$62C1, // $62C1 + #$62C2, // $62C2 + #$62C3, // $62C3 + #$62C4, // $62C4 + #$62C5, // $62C5 + #$62C6, // $62C6 + #$62C7, // $62C7 + #$62C8, // $62C8 + #$62C9, // $62C9 + #$62CA, // $62CA + #$62CB, // $62CB + #$62CC, // $62CC + #$62CD, // $62CD + #$62CE, // $62CE + #$62CF, // $62CF + #$62D0, // $62D0 + #$62D1, // $62D1 + #$62D2, // $62D2 + #$62D3, // $62D3 + #$62D4, // $62D4 + #$62D5, // $62D5 + #$62D6, // $62D6 + #$62D7, // $62D7 + #$62D8, // $62D8 + #$62D9, // $62D9 + #$62DA, // $62DA + #$62DB, // $62DB + #$62DC, // $62DC + #$62DD, // $62DD + #$62DE, // $62DE + #$62DF, // $62DF + #$62E0, // $62E0 + #$62E1, // $62E1 + #$62E2, // $62E2 + #$62E3, // $62E3 + #$62E4, // $62E4 + #$62E5, // $62E5 + #$62E6, // $62E6 + #$62E7, // $62E7 + #$62E8, // $62E8 + #$62E9, // $62E9 + #$62EA, // $62EA + #$62EB, // $62EB + #$62EC, // $62EC + #$62ED, // $62ED + #$62EE, // $62EE + #$62EF, // $62EF + #$62F0, // $62F0 + #$62F1, // $62F1 + #$62F2, // $62F2 + #$62F3, // $62F3 + #$62F4, // $62F4 + #$62F5, // $62F5 + #$62F6, // $62F6 + #$62F7, // $62F7 + #$62F8, // $62F8 + #$62F9, // $62F9 + #$62FA, // $62FA + #$62FB, // $62FB + #$62FC, // $62FC + #$62FD, // $62FD + #$62FE, // $62FE + #$62FF, // $62FF + #$6300, // $6300 + #$6301, // $6301 + #$6302, // $6302 + #$6303, // $6303 + #$6304, // $6304 + #$6305, // $6305 + #$6306, // $6306 + #$6307, // $6307 + #$6308, // $6308 + #$6309, // $6309 + #$630A, // $630A + #$630B, // $630B + #$630C, // $630C + #$630D, // $630D + #$630E, // $630E + #$630F, // $630F + #$6310, // $6310 + #$6311, // $6311 + #$6312, // $6312 + #$6313, // $6313 + #$6314, // $6314 + #$6315, // $6315 + #$6316, // $6316 + #$6317, // $6317 + #$6318, // $6318 + #$6319, // $6319 + #$631A, // $631A + #$631B, // $631B + #$631C, // $631C + #$631D, // $631D + #$631E, // $631E + #$631F, // $631F + #$6320, // $6320 + #$6321, // $6321 + #$6322, // $6322 + #$6323, // $6323 + #$6324, // $6324 + #$6325, // $6325 + #$6326, // $6326 + #$6327, // $6327 + #$6328, // $6328 + #$6329, // $6329 + #$632A, // $632A + #$632B, // $632B + #$632C, // $632C + #$632D, // $632D + #$632E, // $632E + #$632F, // $632F + #$6330, // $6330 + #$6331, // $6331 + #$6332, // $6332 + #$6333, // $6333 + #$6334, // $6334 + #$6335, // $6335 + #$6336, // $6336 + #$6337, // $6337 + #$6338, // $6338 + #$6339, // $6339 + #$633A, // $633A + #$633B, // $633B + #$633C, // $633C + #$633D, // $633D + #$633E, // $633E + #$633F, // $633F + #$6340, // $6340 + #$6341, // $6341 + #$6342, // $6342 + #$6343, // $6343 + #$6344, // $6344 + #$6345, // $6345 + #$6346, // $6346 + #$6347, // $6347 + #$6348, // $6348 + #$6349, // $6349 + #$634A, // $634A + #$634B, // $634B + #$634C, // $634C + #$634D, // $634D + #$634E, // $634E + #$634F, // $634F + #$6350, // $6350 + #$6351, // $6351 + #$6352, // $6352 + #$6353, // $6353 + #$6354, // $6354 + #$6355, // $6355 + #$6356, // $6356 + #$6357, // $6357 + #$6358, // $6358 + #$6359, // $6359 + #$635A, // $635A + #$635B, // $635B + #$635C, // $635C + #$635D, // $635D + #$635E, // $635E + #$635F, // $635F + #$6360, // $6360 + #$6361, // $6361 + #$6362, // $6362 + #$6363, // $6363 + #$6364, // $6364 + #$6365, // $6365 + #$6366, // $6366 + #$6367, // $6367 + #$6368, // $6368 + #$6369, // $6369 + #$636A, // $636A + #$636B, // $636B + #$636C, // $636C + #$636D, // $636D + #$636E, // $636E + #$636F, // $636F + #$6370, // $6370 + #$6371, // $6371 + #$6372, // $6372 + #$6373, // $6373 + #$6374, // $6374 + #$6375, // $6375 + #$6376, // $6376 + #$6377, // $6377 + #$6378, // $6378 + #$6379, // $6379 + #$637A, // $637A + #$637B, // $637B + #$637C, // $637C + #$637D, // $637D + #$637E, // $637E + #$637F, // $637F + #$6380, // $6380 + #$6381, // $6381 + #$6382, // $6382 + #$6383, // $6383 + #$6384, // $6384 + #$6385, // $6385 + #$6386, // $6386 + #$6387, // $6387 + #$6388, // $6388 + #$6389, // $6389 + #$638A, // $638A + #$638B, // $638B + #$638C, // $638C + #$638D, // $638D + #$638E, // $638E + #$638F, // $638F + #$6390, // $6390 + #$6391, // $6391 + #$6392, // $6392 + #$6393, // $6393 + #$6394, // $6394 + #$6395, // $6395 + #$6396, // $6396 + #$6397, // $6397 + #$6398, // $6398 + #$6399, // $6399 + #$639A, // $639A + #$639B, // $639B + #$639C, // $639C + #$639D, // $639D + #$639E, // $639E + #$639F, // $639F + #$63A0, // $63A0 + #$63A1, // $63A1 + #$63A2, // $63A2 + #$63A3, // $63A3 + #$63A4, // $63A4 + #$63A5, // $63A5 + #$63A6, // $63A6 + #$63A7, // $63A7 + #$63A8, // $63A8 + #$63A9, // $63A9 + #$63AA, // $63AA + #$63AB, // $63AB + #$63AC, // $63AC + #$63AD, // $63AD + #$63AE, // $63AE + #$63AF, // $63AF + #$63B0, // $63B0 + #$63B1, // $63B1 + #$63B2, // $63B2 + #$63B3, // $63B3 + #$63B4, // $63B4 + #$63B5, // $63B5 + #$63B6, // $63B6 + #$63B7, // $63B7 + #$63B8, // $63B8 + #$63B9, // $63B9 + #$63BA, // $63BA + #$63BB, // $63BB + #$63BC, // $63BC + #$63BD, // $63BD + #$63BE, // $63BE + #$63BF, // $63BF + #$63C0, // $63C0 + #$63C1, // $63C1 + #$63C2, // $63C2 + #$63C3, // $63C3 + #$63C4, // $63C4 + #$63C5, // $63C5 + #$63C6, // $63C6 + #$63C7, // $63C7 + #$63C8, // $63C8 + #$63C9, // $63C9 + #$63CA, // $63CA + #$63CB, // $63CB + #$63CC, // $63CC + #$63CD, // $63CD + #$63CE, // $63CE + #$63CF, // $63CF + #$63D0, // $63D0 + #$63D1, // $63D1 + #$63D2, // $63D2 + #$63D3, // $63D3 + #$63D4, // $63D4 + #$63D5, // $63D5 + #$63D6, // $63D6 + #$63D7, // $63D7 + #$63D8, // $63D8 + #$63D9, // $63D9 + #$63DA, // $63DA + #$63DB, // $63DB + #$63DC, // $63DC + #$63DD, // $63DD + #$63DE, // $63DE + #$63DF, // $63DF + #$63E0, // $63E0 + #$63E1, // $63E1 + #$63E2, // $63E2 + #$63E3, // $63E3 + #$63E4, // $63E4 + #$63E5, // $63E5 + #$63E6, // $63E6 + #$63E7, // $63E7 + #$63E8, // $63E8 + #$63E9, // $63E9 + #$63EA, // $63EA + #$63EB, // $63EB + #$63EC, // $63EC + #$63ED, // $63ED + #$63EE, // $63EE + #$63EF, // $63EF + #$63F0, // $63F0 + #$63F1, // $63F1 + #$63F2, // $63F2 + #$63F3, // $63F3 + #$63F4, // $63F4 + #$63F5, // $63F5 + #$63F6, // $63F6 + #$63F7, // $63F7 + #$63F8, // $63F8 + #$63F9, // $63F9 + #$63FA, // $63FA + #$63FB, // $63FB + #$63FC, // $63FC + #$63FD, // $63FD + #$63FE, // $63FE + #$63FF, // $63FF + #$6400, // $6400 + #$6401, // $6401 + #$6402, // $6402 + #$6403, // $6403 + #$6404, // $6404 + #$6405, // $6405 + #$6406, // $6406 + #$6407, // $6407 + #$6408, // $6408 + #$6409, // $6409 + #$640A, // $640A + #$640B, // $640B + #$640C, // $640C + #$640D, // $640D + #$640E, // $640E + #$640F, // $640F + #$6410, // $6410 + #$6411, // $6411 + #$6412, // $6412 + #$6413, // $6413 + #$6414, // $6414 + #$6415, // $6415 + #$6416, // $6416 + #$6417, // $6417 + #$6418, // $6418 + #$6419, // $6419 + #$641A, // $641A + #$641B, // $641B + #$641C, // $641C + #$641D, // $641D + #$641E, // $641E + #$641F, // $641F + #$6420, // $6420 + #$6421, // $6421 + #$6422, // $6422 + #$6423, // $6423 + #$6424, // $6424 + #$6425, // $6425 + #$6426, // $6426 + #$6427, // $6427 + #$6428, // $6428 + #$6429, // $6429 + #$642A, // $642A + #$642B, // $642B + #$642C, // $642C + #$642D, // $642D + #$642E, // $642E + #$642F, // $642F + #$6430, // $6430 + #$6431, // $6431 + #$6432, // $6432 + #$6433, // $6433 + #$6434, // $6434 + #$6435, // $6435 + #$6436, // $6436 + #$6437, // $6437 + #$6438, // $6438 + #$6439, // $6439 + #$643A, // $643A + #$643B, // $643B + #$643C, // $643C + #$643D, // $643D + #$643E, // $643E + #$643F, // $643F + #$6440, // $6440 + #$6441, // $6441 + #$6442, // $6442 + #$6443, // $6443 + #$6444, // $6444 + #$6445, // $6445 + #$6446, // $6446 + #$6447, // $6447 + #$6448, // $6448 + #$6449, // $6449 + #$644A, // $644A + #$644B, // $644B + #$644C, // $644C + #$644D, // $644D + #$644E, // $644E + #$644F, // $644F + #$6450, // $6450 + #$6451, // $6451 + #$6452, // $6452 + #$6453, // $6453 + #$6454, // $6454 + #$6455, // $6455 + #$6456, // $6456 + #$6457, // $6457 + #$6458, // $6458 + #$6459, // $6459 + #$645A, // $645A + #$645B, // $645B + #$645C, // $645C + #$645D, // $645D + #$645E, // $645E + #$645F, // $645F + #$6460, // $6460 + #$6461, // $6461 + #$6462, // $6462 + #$6463, // $6463 + #$6464, // $6464 + #$6465, // $6465 + #$6466, // $6466 + #$6467, // $6467 + #$6468, // $6468 + #$6469, // $6469 + #$646A, // $646A + #$646B, // $646B + #$646C, // $646C + #$646D, // $646D + #$646E, // $646E + #$646F, // $646F + #$6470, // $6470 + #$6471, // $6471 + #$6472, // $6472 + #$6473, // $6473 + #$6474, // $6474 + #$6475, // $6475 + #$6476, // $6476 + #$6477, // $6477 + #$6478, // $6478 + #$6479, // $6479 + #$647A, // $647A + #$647B, // $647B + #$647C, // $647C + #$647D, // $647D + #$647E, // $647E + #$647F, // $647F + #$6480, // $6480 + #$6481, // $6481 + #$6482, // $6482 + #$6483, // $6483 + #$6484, // $6484 + #$6485, // $6485 + #$6486, // $6486 + #$6487, // $6487 + #$6488, // $6488 + #$6489, // $6489 + #$648A, // $648A + #$648B, // $648B + #$648C, // $648C + #$648D, // $648D + #$648E, // $648E + #$648F, // $648F + #$6490, // $6490 + #$6491, // $6491 + #$6492, // $6492 + #$6493, // $6493 + #$6494, // $6494 + #$6495, // $6495 + #$6496, // $6496 + #$6497, // $6497 + #$6498, // $6498 + #$6499, // $6499 + #$649A, // $649A + #$649B, // $649B + #$649C, // $649C + #$649D, // $649D + #$649E, // $649E + #$649F, // $649F + #$64A0, // $64A0 + #$64A1, // $64A1 + #$64A2, // $64A2 + #$64A3, // $64A3 + #$64A4, // $64A4 + #$64A5, // $64A5 + #$64A6, // $64A6 + #$64A7, // $64A7 + #$64A8, // $64A8 + #$64A9, // $64A9 + #$64AA, // $64AA + #$64AB, // $64AB + #$64AC, // $64AC + #$64AD, // $64AD + #$64AE, // $64AE + #$64AF, // $64AF + #$64B0, // $64B0 + #$64B1, // $64B1 + #$64B2, // $64B2 + #$64B3, // $64B3 + #$64B4, // $64B4 + #$64B5, // $64B5 + #$64B6, // $64B6 + #$64B7, // $64B7 + #$64B8, // $64B8 + #$64B9, // $64B9 + #$64BA, // $64BA + #$64BB, // $64BB + #$64BC, // $64BC + #$64BD, // $64BD + #$64BE, // $64BE + #$64BF, // $64BF + #$64C0, // $64C0 + #$64C1, // $64C1 + #$64C2, // $64C2 + #$64C3, // $64C3 + #$64C4, // $64C4 + #$64C5, // $64C5 + #$64C6, // $64C6 + #$64C7, // $64C7 + #$64C8, // $64C8 + #$64C9, // $64C9 + #$64CA, // $64CA + #$64CB, // $64CB + #$64CC, // $64CC + #$64CD, // $64CD + #$64CE, // $64CE + #$64CF, // $64CF + #$64D0, // $64D0 + #$64D1, // $64D1 + #$64D2, // $64D2 + #$64D3, // $64D3 + #$64D4, // $64D4 + #$64D5, // $64D5 + #$64D6, // $64D6 + #$64D7, // $64D7 + #$64D8, // $64D8 + #$64D9, // $64D9 + #$64DA, // $64DA + #$64DB, // $64DB + #$64DC, // $64DC + #$64DD, // $64DD + #$64DE, // $64DE + #$64DF, // $64DF + #$64E0, // $64E0 + #$64E1, // $64E1 + #$64E2, // $64E2 + #$64E3, // $64E3 + #$64E4, // $64E4 + #$64E5, // $64E5 + #$64E6, // $64E6 + #$64E7, // $64E7 + #$64E8, // $64E8 + #$64E9, // $64E9 + #$64EA, // $64EA + #$64EB, // $64EB + #$64EC, // $64EC + #$64ED, // $64ED + #$64EE, // $64EE + #$64EF, // $64EF + #$64F0, // $64F0 + #$64F1, // $64F1 + #$64F2, // $64F2 + #$64F3, // $64F3 + #$64F4, // $64F4 + #$64F5, // $64F5 + #$64F6, // $64F6 + #$64F7, // $64F7 + #$64F8, // $64F8 + #$64F9, // $64F9 + #$64FA, // $64FA + #$64FB, // $64FB + #$64FC, // $64FC + #$64FD, // $64FD + #$64FE, // $64FE + #$64FF, // $64FF + #$6500, // $6500 + #$6501, // $6501 + #$6502, // $6502 + #$6503, // $6503 + #$6504, // $6504 + #$6505, // $6505 + #$6506, // $6506 + #$6507, // $6507 + #$6508, // $6508 + #$6509, // $6509 + #$650A, // $650A + #$650B, // $650B + #$650C, // $650C + #$650D, // $650D + #$650E, // $650E + #$650F, // $650F + #$6510, // $6510 + #$6511, // $6511 + #$6512, // $6512 + #$6513, // $6513 + #$6514, // $6514 + #$6515, // $6515 + #$6516, // $6516 + #$6517, // $6517 + #$6518, // $6518 + #$6519, // $6519 + #$651A, // $651A + #$651B, // $651B + #$651C, // $651C + #$651D, // $651D + #$651E, // $651E + #$651F, // $651F + #$6520, // $6520 + #$6521, // $6521 + #$6522, // $6522 + #$6523, // $6523 + #$6524, // $6524 + #$6525, // $6525 + #$6526, // $6526 + #$6527, // $6527 + #$6528, // $6528 + #$6529, // $6529 + #$652A, // $652A + #$652B, // $652B + #$652C, // $652C + #$652D, // $652D + #$652E, // $652E + #$652F, // $652F + #$6530, // $6530 + #$6531, // $6531 + #$6532, // $6532 + #$6533, // $6533 + #$6534, // $6534 + #$6535, // $6535 + #$6536, // $6536 + #$6537, // $6537 + #$6538, // $6538 + #$6539, // $6539 + #$653A, // $653A + #$653B, // $653B + #$653C, // $653C + #$653D, // $653D + #$653E, // $653E + #$653F, // $653F + #$6540, // $6540 + #$6541, // $6541 + #$6542, // $6542 + #$6543, // $6543 + #$6544, // $6544 + #$6545, // $6545 + #$6546, // $6546 + #$6547, // $6547 + #$6548, // $6548 + #$6549, // $6549 + #$654A, // $654A + #$654B, // $654B + #$654C, // $654C + #$654D, // $654D + #$654E, // $654E + #$654F, // $654F + #$6550, // $6550 + #$6551, // $6551 + #$6552, // $6552 + #$6553, // $6553 + #$6554, // $6554 + #$6555, // $6555 + #$6556, // $6556 + #$6557, // $6557 + #$6558, // $6558 + #$6559, // $6559 + #$655A, // $655A + #$655B, // $655B + #$655C, // $655C + #$655D, // $655D + #$655E, // $655E + #$655F, // $655F + #$6560, // $6560 + #$6561, // $6561 + #$6562, // $6562 + #$6563, // $6563 + #$6564, // $6564 + #$6565, // $6565 + #$6566, // $6566 + #$6567, // $6567 + #$6568, // $6568 + #$6569, // $6569 + #$656A, // $656A + #$656B, // $656B + #$656C, // $656C + #$656D, // $656D + #$656E, // $656E + #$656F, // $656F + #$6570, // $6570 + #$6571, // $6571 + #$6572, // $6572 + #$6573, // $6573 + #$6574, // $6574 + #$6575, // $6575 + #$6576, // $6576 + #$6577, // $6577 + #$6578, // $6578 + #$6579, // $6579 + #$657A, // $657A + #$657B, // $657B + #$657C, // $657C + #$657D, // $657D + #$657E, // $657E + #$657F, // $657F + #$6580, // $6580 + #$6581, // $6581 + #$6582, // $6582 + #$6583, // $6583 + #$6584, // $6584 + #$6585, // $6585 + #$6586, // $6586 + #$6587, // $6587 + #$6588, // $6588 + #$6589, // $6589 + #$658A, // $658A + #$658B, // $658B + #$658C, // $658C + #$658D, // $658D + #$658E, // $658E + #$658F, // $658F + #$6590, // $6590 + #$6591, // $6591 + #$6592, // $6592 + #$6593, // $6593 + #$6594, // $6594 + #$6595, // $6595 + #$6596, // $6596 + #$6597, // $6597 + #$6598, // $6598 + #$6599, // $6599 + #$659A, // $659A + #$659B, // $659B + #$659C, // $659C + #$659D, // $659D + #$659E, // $659E + #$659F, // $659F + #$65A0, // $65A0 + #$65A1, // $65A1 + #$65A2, // $65A2 + #$65A3, // $65A3 + #$65A4, // $65A4 + #$65A5, // $65A5 + #$65A6, // $65A6 + #$65A7, // $65A7 + #$65A8, // $65A8 + #$65A9, // $65A9 + #$65AA, // $65AA + #$65AB, // $65AB + #$65AC, // $65AC + #$65AD, // $65AD + #$65AE, // $65AE + #$65AF, // $65AF + #$65B0, // $65B0 + #$65B1, // $65B1 + #$65B2, // $65B2 + #$65B3, // $65B3 + #$65B4, // $65B4 + #$65B5, // $65B5 + #$65B6, // $65B6 + #$65B7, // $65B7 + #$65B8, // $65B8 + #$65B9, // $65B9 + #$65BA, // $65BA + #$65BB, // $65BB + #$65BC, // $65BC + #$65BD, // $65BD + #$65BE, // $65BE + #$65BF, // $65BF + #$65C0, // $65C0 + #$65C1, // $65C1 + #$65C2, // $65C2 + #$65C3, // $65C3 + #$65C4, // $65C4 + #$65C5, // $65C5 + #$65C6, // $65C6 + #$65C7, // $65C7 + #$65C8, // $65C8 + #$65C9, // $65C9 + #$65CA, // $65CA + #$65CB, // $65CB + #$65CC, // $65CC + #$65CD, // $65CD + #$65CE, // $65CE + #$65CF, // $65CF + #$65D0, // $65D0 + #$65D1, // $65D1 + #$65D2, // $65D2 + #$65D3, // $65D3 + #$65D4, // $65D4 + #$65D5, // $65D5 + #$65D6, // $65D6 + #$65D7, // $65D7 + #$65D8, // $65D8 + #$65D9, // $65D9 + #$65DA, // $65DA + #$65DB, // $65DB + #$65DC, // $65DC + #$65DD, // $65DD + #$65DE, // $65DE + #$65DF, // $65DF + #$65E0, // $65E0 + #$65E1, // $65E1 + #$65E2, // $65E2 + #$65E3, // $65E3 + #$65E4, // $65E4 + #$65E5, // $65E5 + #$65E6, // $65E6 + #$65E7, // $65E7 + #$65E8, // $65E8 + #$65E9, // $65E9 + #$65EA, // $65EA + #$65EB, // $65EB + #$65EC, // $65EC + #$65ED, // $65ED + #$65EE, // $65EE + #$65EF, // $65EF + #$65F0, // $65F0 + #$65F1, // $65F1 + #$65F2, // $65F2 + #$65F3, // $65F3 + #$65F4, // $65F4 + #$65F5, // $65F5 + #$65F6, // $65F6 + #$65F7, // $65F7 + #$65F8, // $65F8 + #$65F9, // $65F9 + #$65FA, // $65FA + #$65FB, // $65FB + #$65FC, // $65FC + #$65FD, // $65FD + #$65FE, // $65FE + #$65FF, // $65FF + #$6600, // $6600 + #$6601, // $6601 + #$6602, // $6602 + #$6603, // $6603 + #$6604, // $6604 + #$6605, // $6605 + #$6606, // $6606 + #$6607, // $6607 + #$6608, // $6608 + #$6609, // $6609 + #$660A, // $660A + #$660B, // $660B + #$660C, // $660C + #$660D, // $660D + #$660E, // $660E + #$660F, // $660F + #$6610, // $6610 + #$6611, // $6611 + #$6612, // $6612 + #$6613, // $6613 + #$6614, // $6614 + #$6615, // $6615 + #$6616, // $6616 + #$6617, // $6617 + #$6618, // $6618 + #$6619, // $6619 + #$661A, // $661A + #$661B, // $661B + #$661C, // $661C + #$661D, // $661D + #$661E, // $661E + #$661F, // $661F + #$6620, // $6620 + #$6621, // $6621 + #$6622, // $6622 + #$6623, // $6623 + #$6624, // $6624 + #$6625, // $6625 + #$6626, // $6626 + #$6627, // $6627 + #$6628, // $6628 + #$6629, // $6629 + #$662A, // $662A + #$662B, // $662B + #$662C, // $662C + #$662D, // $662D + #$662E, // $662E + #$662F, // $662F + #$6630, // $6630 + #$6631, // $6631 + #$6632, // $6632 + #$6633, // $6633 + #$6634, // $6634 + #$6635, // $6635 + #$6636, // $6636 + #$6637, // $6637 + #$6638, // $6638 + #$6639, // $6639 + #$663A, // $663A + #$663B, // $663B + #$663C, // $663C + #$663D, // $663D + #$663E, // $663E + #$663F, // $663F + #$6640, // $6640 + #$6641, // $6641 + #$6642, // $6642 + #$6643, // $6643 + #$6644, // $6644 + #$6645, // $6645 + #$6646, // $6646 + #$6647, // $6647 + #$6648, // $6648 + #$6649, // $6649 + #$664A, // $664A + #$664B, // $664B + #$664C, // $664C + #$664D, // $664D + #$664E, // $664E + #$664F, // $664F + #$6650, // $6650 + #$6651, // $6651 + #$6652, // $6652 + #$6653, // $6653 + #$6654, // $6654 + #$6655, // $6655 + #$6656, // $6656 + #$6657, // $6657 + #$6658, // $6658 + #$6659, // $6659 + #$665A, // $665A + #$665B, // $665B + #$665C, // $665C + #$665D, // $665D + #$665E, // $665E + #$665F, // $665F + #$6660, // $6660 + #$6661, // $6661 + #$6662, // $6662 + #$6663, // $6663 + #$6664, // $6664 + #$6665, // $6665 + #$6666, // $6666 + #$6667, // $6667 + #$6668, // $6668 + #$6669, // $6669 + #$666A, // $666A + #$666B, // $666B + #$666C, // $666C + #$666D, // $666D + #$666E, // $666E + #$666F, // $666F + #$6670, // $6670 + #$6671, // $6671 + #$6672, // $6672 + #$6673, // $6673 + #$6674, // $6674 + #$6675, // $6675 + #$6676, // $6676 + #$6677, // $6677 + #$6678, // $6678 + #$6679, // $6679 + #$667A, // $667A + #$667B, // $667B + #$667C, // $667C + #$667D, // $667D + #$667E, // $667E + #$667F, // $667F + #$6680, // $6680 + #$6681, // $6681 + #$6682, // $6682 + #$6683, // $6683 + #$6684, // $6684 + #$6685, // $6685 + #$6686, // $6686 + #$6687, // $6687 + #$6688, // $6688 + #$6689, // $6689 + #$668A, // $668A + #$668B, // $668B + #$668C, // $668C + #$668D, // $668D + #$668E, // $668E + #$668F, // $668F + #$6690, // $6690 + #$6691, // $6691 + #$6692, // $6692 + #$6693, // $6693 + #$6694, // $6694 + #$6695, // $6695 + #$6696, // $6696 + #$6697, // $6697 + #$6698, // $6698 + #$6699, // $6699 + #$669A, // $669A + #$669B, // $669B + #$669C, // $669C + #$669D, // $669D + #$669E, // $669E + #$669F, // $669F + #$66A0, // $66A0 + #$66A1, // $66A1 + #$66A2, // $66A2 + #$66A3, // $66A3 + #$66A4, // $66A4 + #$66A5, // $66A5 + #$66A6, // $66A6 + #$66A7, // $66A7 + #$66A8, // $66A8 + #$66A9, // $66A9 + #$66AA, // $66AA + #$66AB, // $66AB + #$66AC, // $66AC + #$66AD, // $66AD + #$66AE, // $66AE + #$66AF, // $66AF + #$66B0, // $66B0 + #$66B1, // $66B1 + #$66B2, // $66B2 + #$66B3, // $66B3 + #$66B4, // $66B4 + #$66B5, // $66B5 + #$66B6, // $66B6 + #$66B7, // $66B7 + #$66B8, // $66B8 + #$66B9, // $66B9 + #$66BA, // $66BA + #$66BB, // $66BB + #$66BC, // $66BC + #$66BD, // $66BD + #$66BE, // $66BE + #$66BF, // $66BF + #$66C0, // $66C0 + #$66C1, // $66C1 + #$66C2, // $66C2 + #$66C3, // $66C3 + #$66C4, // $66C4 + #$66C5, // $66C5 + #$66C6, // $66C6 + #$66C7, // $66C7 + #$66C8, // $66C8 + #$66C9, // $66C9 + #$66CA, // $66CA + #$66CB, // $66CB + #$66CC, // $66CC + #$66CD, // $66CD + #$66CE, // $66CE + #$66CF, // $66CF + #$66D0, // $66D0 + #$66D1, // $66D1 + #$66D2, // $66D2 + #$66D3, // $66D3 + #$66D4, // $66D4 + #$66D5, // $66D5 + #$66D6, // $66D6 + #$66D7, // $66D7 + #$66D8, // $66D8 + #$66D9, // $66D9 + #$66DA, // $66DA + #$66DB, // $66DB + #$66DC, // $66DC + #$66DD, // $66DD + #$66DE, // $66DE + #$66DF, // $66DF + #$66E0, // $66E0 + #$66E1, // $66E1 + #$66E2, // $66E2 + #$66E3, // $66E3 + #$66E4, // $66E4 + #$66E5, // $66E5 + #$66E6, // $66E6 + #$66E7, // $66E7 + #$66E8, // $66E8 + #$66E9, // $66E9 + #$66EA, // $66EA + #$66EB, // $66EB + #$66EC, // $66EC + #$66ED, // $66ED + #$66EE, // $66EE + #$66EF, // $66EF + #$66F0, // $66F0 + #$66F1, // $66F1 + #$66F2, // $66F2 + #$66F3, // $66F3 + #$66F4, // $66F4 + #$66F5, // $66F5 + #$66F6, // $66F6 + #$66F7, // $66F7 + #$66F8, // $66F8 + #$66F9, // $66F9 + #$66FA, // $66FA + #$66FB, // $66FB + #$66FC, // $66FC + #$66FD, // $66FD + #$66FE, // $66FE + #$66FF, // $66FF + #$6700, // $6700 + #$6701, // $6701 + #$6702, // $6702 + #$6703, // $6703 + #$6704, // $6704 + #$6705, // $6705 + #$6706, // $6706 + #$6707, // $6707 + #$6708, // $6708 + #$6709, // $6709 + #$670A, // $670A + #$670B, // $670B + #$670C, // $670C + #$670D, // $670D + #$670E, // $670E + #$670F, // $670F + #$6710, // $6710 + #$6711, // $6711 + #$6712, // $6712 + #$6713, // $6713 + #$6714, // $6714 + #$6715, // $6715 + #$6716, // $6716 + #$6717, // $6717 + #$6718, // $6718 + #$6719, // $6719 + #$671A, // $671A + #$671B, // $671B + #$671C, // $671C + #$671D, // $671D + #$671E, // $671E + #$671F, // $671F + #$6720, // $6720 + #$6721, // $6721 + #$6722, // $6722 + #$6723, // $6723 + #$6724, // $6724 + #$6725, // $6725 + #$6726, // $6726 + #$6727, // $6727 + #$6728, // $6728 + #$6729, // $6729 + #$672A, // $672A + #$672B, // $672B + #$672C, // $672C + #$672D, // $672D + #$672E, // $672E + #$672F, // $672F + #$6730, // $6730 + #$6731, // $6731 + #$6732, // $6732 + #$6733, // $6733 + #$6734, // $6734 + #$6735, // $6735 + #$6736, // $6736 + #$6737, // $6737 + #$6738, // $6738 + #$6739, // $6739 + #$673A, // $673A + #$673B, // $673B + #$673C, // $673C + #$673D, // $673D + #$673E, // $673E + #$673F, // $673F + #$6740, // $6740 + #$6741, // $6741 + #$6742, // $6742 + #$6743, // $6743 + #$6744, // $6744 + #$6745, // $6745 + #$6746, // $6746 + #$6747, // $6747 + #$6748, // $6748 + #$6749, // $6749 + #$674A, // $674A + #$674B, // $674B + #$674C, // $674C + #$674D, // $674D + #$674E, // $674E + #$674F, // $674F + #$6750, // $6750 + #$6751, // $6751 + #$6752, // $6752 + #$6753, // $6753 + #$6754, // $6754 + #$6755, // $6755 + #$6756, // $6756 + #$6757, // $6757 + #$6758, // $6758 + #$6759, // $6759 + #$675A, // $675A + #$675B, // $675B + #$675C, // $675C + #$675D, // $675D + #$675E, // $675E + #$675F, // $675F + #$6760, // $6760 + #$6761, // $6761 + #$6762, // $6762 + #$6763, // $6763 + #$6764, // $6764 + #$6765, // $6765 + #$6766, // $6766 + #$6767, // $6767 + #$6768, // $6768 + #$6769, // $6769 + #$676A, // $676A + #$676B, // $676B + #$676C, // $676C + #$676D, // $676D + #$676E, // $676E + #$676F, // $676F + #$6770, // $6770 + #$6771, // $6771 + #$6772, // $6772 + #$6773, // $6773 + #$6774, // $6774 + #$6775, // $6775 + #$6776, // $6776 + #$6777, // $6777 + #$6778, // $6778 + #$6779, // $6779 + #$677A, // $677A + #$677B, // $677B + #$677C, // $677C + #$677D, // $677D + #$677E, // $677E + #$677F, // $677F + #$6780, // $6780 + #$6781, // $6781 + #$6782, // $6782 + #$6783, // $6783 + #$6784, // $6784 + #$6785, // $6785 + #$6786, // $6786 + #$6787, // $6787 + #$6788, // $6788 + #$6789, // $6789 + #$678A, // $678A + #$678B, // $678B + #$678C, // $678C + #$678D, // $678D + #$678E, // $678E + #$678F, // $678F + #$6790, // $6790 + #$6791, // $6791 + #$6792, // $6792 + #$6793, // $6793 + #$6794, // $6794 + #$6795, // $6795 + #$6796, // $6796 + #$6797, // $6797 + #$6798, // $6798 + #$6799, // $6799 + #$679A, // $679A + #$679B, // $679B + #$679C, // $679C + #$679D, // $679D + #$679E, // $679E + #$679F, // $679F + #$67A0, // $67A0 + #$67A1, // $67A1 + #$67A2, // $67A2 + #$67A3, // $67A3 + #$67A4, // $67A4 + #$67A5, // $67A5 + #$67A6, // $67A6 + #$67A7, // $67A7 + #$67A8, // $67A8 + #$67A9, // $67A9 + #$67AA, // $67AA + #$67AB, // $67AB + #$67AC, // $67AC + #$67AD, // $67AD + #$67AE, // $67AE + #$67AF, // $67AF + #$67B0, // $67B0 + #$67B1, // $67B1 + #$67B2, // $67B2 + #$67B3, // $67B3 + #$67B4, // $67B4 + #$67B5, // $67B5 + #$67B6, // $67B6 + #$67B7, // $67B7 + #$67B8, // $67B8 + #$67B9, // $67B9 + #$67BA, // $67BA + #$67BB, // $67BB + #$67BC, // $67BC + #$67BD, // $67BD + #$67BE, // $67BE + #$67BF, // $67BF + #$67C0, // $67C0 + #$67C1, // $67C1 + #$67C2, // $67C2 + #$67C3, // $67C3 + #$67C4, // $67C4 + #$67C5, // $67C5 + #$67C6, // $67C6 + #$67C7, // $67C7 + #$67C8, // $67C8 + #$67C9, // $67C9 + #$67CA, // $67CA + #$67CB, // $67CB + #$67CC, // $67CC + #$67CD, // $67CD + #$67CE, // $67CE + #$67CF, // $67CF + #$67D0, // $67D0 + #$67D1, // $67D1 + #$67D2, // $67D2 + #$67D3, // $67D3 + #$67D4, // $67D4 + #$67D5, // $67D5 + #$67D6, // $67D6 + #$67D7, // $67D7 + #$67D8, // $67D8 + #$67D9, // $67D9 + #$67DA, // $67DA + #$67DB, // $67DB + #$67DC, // $67DC + #$67DD, // $67DD + #$67DE, // $67DE + #$67DF, // $67DF + #$67E0, // $67E0 + #$67E1, // $67E1 + #$67E2, // $67E2 + #$67E3, // $67E3 + #$67E4, // $67E4 + #$67E5, // $67E5 + #$67E6, // $67E6 + #$67E7, // $67E7 + #$67E8, // $67E8 + #$67E9, // $67E9 + #$67EA, // $67EA + #$67EB, // $67EB + #$67EC, // $67EC + #$67ED, // $67ED + #$67EE, // $67EE + #$67EF, // $67EF + #$67F0, // $67F0 + #$67F1, // $67F1 + #$67F2, // $67F2 + #$67F3, // $67F3 + #$67F4, // $67F4 + #$67F5, // $67F5 + #$67F6, // $67F6 + #$67F7, // $67F7 + #$67F8, // $67F8 + #$67F9, // $67F9 + #$67FA, // $67FA + #$67FB, // $67FB + #$67FC, // $67FC + #$67FD, // $67FD + #$67FE, // $67FE + #$67FF, // $67FF + #$6800, // $6800 + #$6801, // $6801 + #$6802, // $6802 + #$6803, // $6803 + #$6804, // $6804 + #$6805, // $6805 + #$6806, // $6806 + #$6807, // $6807 + #$6808, // $6808 + #$6809, // $6809 + #$680A, // $680A + #$680B, // $680B + #$680C, // $680C + #$680D, // $680D + #$680E, // $680E + #$680F, // $680F + #$6810, // $6810 + #$6811, // $6811 + #$6812, // $6812 + #$6813, // $6813 + #$6814, // $6814 + #$6815, // $6815 + #$6816, // $6816 + #$6817, // $6817 + #$6818, // $6818 + #$6819, // $6819 + #$681A, // $681A + #$681B, // $681B + #$681C, // $681C + #$681D, // $681D + #$681E, // $681E + #$681F, // $681F + #$6820, // $6820 + #$6821, // $6821 + #$6822, // $6822 + #$6823, // $6823 + #$6824, // $6824 + #$6825, // $6825 + #$6826, // $6826 + #$6827, // $6827 + #$6828, // $6828 + #$6829, // $6829 + #$682A, // $682A + #$682B, // $682B + #$682C, // $682C + #$682D, // $682D + #$682E, // $682E + #$682F, // $682F + #$6830, // $6830 + #$6831, // $6831 + #$6832, // $6832 + #$6833, // $6833 + #$6834, // $6834 + #$6835, // $6835 + #$6836, // $6836 + #$6837, // $6837 + #$6838, // $6838 + #$6839, // $6839 + #$683A, // $683A + #$683B, // $683B + #$683C, // $683C + #$683D, // $683D + #$683E, // $683E + #$683F, // $683F + #$6840, // $6840 + #$6841, // $6841 + #$6842, // $6842 + #$6843, // $6843 + #$6844, // $6844 + #$6845, // $6845 + #$6846, // $6846 + #$6847, // $6847 + #$6848, // $6848 + #$6849, // $6849 + #$684A, // $684A + #$684B, // $684B + #$684C, // $684C + #$684D, // $684D + #$684E, // $684E + #$684F, // $684F + #$6850, // $6850 + #$6851, // $6851 + #$6852, // $6852 + #$6853, // $6853 + #$6854, // $6854 + #$6855, // $6855 + #$6856, // $6856 + #$6857, // $6857 + #$6858, // $6858 + #$6859, // $6859 + #$685A, // $685A + #$685B, // $685B + #$685C, // $685C + #$685D, // $685D + #$685E, // $685E + #$685F, // $685F + #$6860, // $6860 + #$6861, // $6861 + #$6862, // $6862 + #$6863, // $6863 + #$6864, // $6864 + #$6865, // $6865 + #$6866, // $6866 + #$6867, // $6867 + #$6868, // $6868 + #$6869, // $6869 + #$686A, // $686A + #$686B, // $686B + #$686C, // $686C + #$686D, // $686D + #$686E, // $686E + #$686F, // $686F + #$6870, // $6870 + #$6871, // $6871 + #$6872, // $6872 + #$6873, // $6873 + #$6874, // $6874 + #$6875, // $6875 + #$6876, // $6876 + #$6877, // $6877 + #$6878, // $6878 + #$6879, // $6879 + #$687A, // $687A + #$687B, // $687B + #$687C, // $687C + #$687D, // $687D + #$687E, // $687E + #$687F, // $687F + #$6880, // $6880 + #$6881, // $6881 + #$6882, // $6882 + #$6883, // $6883 + #$6884, // $6884 + #$6885, // $6885 + #$6886, // $6886 + #$6887, // $6887 + #$6888, // $6888 + #$6889, // $6889 + #$688A, // $688A + #$688B, // $688B + #$688C, // $688C + #$688D, // $688D + #$688E, // $688E + #$688F, // $688F + #$6890, // $6890 + #$6891, // $6891 + #$6892, // $6892 + #$6893, // $6893 + #$6894, // $6894 + #$6895, // $6895 + #$6896, // $6896 + #$6897, // $6897 + #$6898, // $6898 + #$6899, // $6899 + #$689A, // $689A + #$689B, // $689B + #$689C, // $689C + #$689D, // $689D + #$689E, // $689E + #$689F, // $689F + #$68A0, // $68A0 + #$68A1, // $68A1 + #$68A2, // $68A2 + #$68A3, // $68A3 + #$68A4, // $68A4 + #$68A5, // $68A5 + #$68A6, // $68A6 + #$68A7, // $68A7 + #$68A8, // $68A8 + #$68A9, // $68A9 + #$68AA, // $68AA + #$68AB, // $68AB + #$68AC, // $68AC + #$68AD, // $68AD + #$68AE, // $68AE + #$68AF, // $68AF + #$68B0, // $68B0 + #$68B1, // $68B1 + #$68B2, // $68B2 + #$68B3, // $68B3 + #$68B4, // $68B4 + #$68B5, // $68B5 + #$68B6, // $68B6 + #$68B7, // $68B7 + #$68B8, // $68B8 + #$68B9, // $68B9 + #$68BA, // $68BA + #$68BB, // $68BB + #$68BC, // $68BC + #$68BD, // $68BD + #$68BE, // $68BE + #$68BF, // $68BF + #$68C0, // $68C0 + #$68C1, // $68C1 + #$68C2, // $68C2 + #$68C3, // $68C3 + #$68C4, // $68C4 + #$68C5, // $68C5 + #$68C6, // $68C6 + #$68C7, // $68C7 + #$68C8, // $68C8 + #$68C9, // $68C9 + #$68CA, // $68CA + #$68CB, // $68CB + #$68CC, // $68CC + #$68CD, // $68CD + #$68CE, // $68CE + #$68CF, // $68CF + #$68D0, // $68D0 + #$68D1, // $68D1 + #$68D2, // $68D2 + #$68D3, // $68D3 + #$68D4, // $68D4 + #$68D5, // $68D5 + #$68D6, // $68D6 + #$68D7, // $68D7 + #$68D8, // $68D8 + #$68D9, // $68D9 + #$68DA, // $68DA + #$68DB, // $68DB + #$68DC, // $68DC + #$68DD, // $68DD + #$68DE, // $68DE + #$68DF, // $68DF + #$68E0, // $68E0 + #$68E1, // $68E1 + #$68E2, // $68E2 + #$68E3, // $68E3 + #$68E4, // $68E4 + #$68E5, // $68E5 + #$68E6, // $68E6 + #$68E7, // $68E7 + #$68E8, // $68E8 + #$68E9, // $68E9 + #$68EA, // $68EA + #$68EB, // $68EB + #$68EC, // $68EC + #$68ED, // $68ED + #$68EE, // $68EE + #$68EF, // $68EF + #$68F0, // $68F0 + #$68F1, // $68F1 + #$68F2, // $68F2 + #$68F3, // $68F3 + #$68F4, // $68F4 + #$68F5, // $68F5 + #$68F6, // $68F6 + #$68F7, // $68F7 + #$68F8, // $68F8 + #$68F9, // $68F9 + #$68FA, // $68FA + #$68FB, // $68FB + #$68FC, // $68FC + #$68FD, // $68FD + #$68FE, // $68FE + #$68FF, // $68FF + #$6900, // $6900 + #$6901, // $6901 + #$6902, // $6902 + #$6903, // $6903 + #$6904, // $6904 + #$6905, // $6905 + #$6906, // $6906 + #$6907, // $6907 + #$6908, // $6908 + #$6909, // $6909 + #$690A, // $690A + #$690B, // $690B + #$690C, // $690C + #$690D, // $690D + #$690E, // $690E + #$690F, // $690F + #$6910, // $6910 + #$6911, // $6911 + #$6912, // $6912 + #$6913, // $6913 + #$6914, // $6914 + #$6915, // $6915 + #$6916, // $6916 + #$6917, // $6917 + #$6918, // $6918 + #$6919, // $6919 + #$691A, // $691A + #$691B, // $691B + #$691C, // $691C + #$691D, // $691D + #$691E, // $691E + #$691F, // $691F + #$6920, // $6920 + #$6921, // $6921 + #$6922, // $6922 + #$6923, // $6923 + #$6924, // $6924 + #$6925, // $6925 + #$6926, // $6926 + #$6927, // $6927 + #$6928, // $6928 + #$6929, // $6929 + #$692A, // $692A + #$692B, // $692B + #$692C, // $692C + #$692D, // $692D + #$692E, // $692E + #$692F, // $692F + #$6930, // $6930 + #$6931, // $6931 + #$6932, // $6932 + #$6933, // $6933 + #$6934, // $6934 + #$6935, // $6935 + #$6936, // $6936 + #$6937, // $6937 + #$6938, // $6938 + #$6939, // $6939 + #$693A, // $693A + #$693B, // $693B + #$693C, // $693C + #$693D, // $693D + #$693E, // $693E + #$693F, // $693F + #$6940, // $6940 + #$6941, // $6941 + #$6942, // $6942 + #$6943, // $6943 + #$6944, // $6944 + #$6945, // $6945 + #$6946, // $6946 + #$6947, // $6947 + #$6948, // $6948 + #$6949, // $6949 + #$694A, // $694A + #$694B, // $694B + #$694C, // $694C + #$694D, // $694D + #$694E, // $694E + #$694F, // $694F + #$6950, // $6950 + #$6951, // $6951 + #$6952, // $6952 + #$6953, // $6953 + #$6954, // $6954 + #$6955, // $6955 + #$6956, // $6956 + #$6957, // $6957 + #$6958, // $6958 + #$6959, // $6959 + #$695A, // $695A + #$695B, // $695B + #$695C, // $695C + #$695D, // $695D + #$695E, // $695E + #$695F, // $695F + #$6960, // $6960 + #$6961, // $6961 + #$6962, // $6962 + #$6963, // $6963 + #$6964, // $6964 + #$6965, // $6965 + #$6966, // $6966 + #$6967, // $6967 + #$6968, // $6968 + #$6969, // $6969 + #$696A, // $696A + #$696B, // $696B + #$696C, // $696C + #$696D, // $696D + #$696E, // $696E + #$696F, // $696F + #$6970, // $6970 + #$6971, // $6971 + #$6972, // $6972 + #$6973, // $6973 + #$6974, // $6974 + #$6975, // $6975 + #$6976, // $6976 + #$6977, // $6977 + #$6978, // $6978 + #$6979, // $6979 + #$697A, // $697A + #$697B, // $697B + #$697C, // $697C + #$697D, // $697D + #$697E, // $697E + #$697F, // $697F + #$6980, // $6980 + #$6981, // $6981 + #$6982, // $6982 + #$6983, // $6983 + #$6984, // $6984 + #$6985, // $6985 + #$6986, // $6986 + #$6987, // $6987 + #$6988, // $6988 + #$6989, // $6989 + #$698A, // $698A + #$698B, // $698B + #$698C, // $698C + #$698D, // $698D + #$698E, // $698E + #$698F, // $698F + #$6990, // $6990 + #$6991, // $6991 + #$6992, // $6992 + #$6993, // $6993 + #$6994, // $6994 + #$6995, // $6995 + #$6996, // $6996 + #$6997, // $6997 + #$6998, // $6998 + #$6999, // $6999 + #$699A, // $699A + #$699B, // $699B + #$699C, // $699C + #$699D, // $699D + #$699E, // $699E + #$699F, // $699F + #$69A0, // $69A0 + #$69A1, // $69A1 + #$69A2, // $69A2 + #$69A3, // $69A3 + #$69A4, // $69A4 + #$69A5, // $69A5 + #$69A6, // $69A6 + #$69A7, // $69A7 + #$69A8, // $69A8 + #$69A9, // $69A9 + #$69AA, // $69AA + #$69AB, // $69AB + #$69AC, // $69AC + #$69AD, // $69AD + #$69AE, // $69AE + #$69AF, // $69AF + #$69B0, // $69B0 + #$69B1, // $69B1 + #$69B2, // $69B2 + #$69B3, // $69B3 + #$69B4, // $69B4 + #$69B5, // $69B5 + #$69B6, // $69B6 + #$69B7, // $69B7 + #$69B8, // $69B8 + #$69B9, // $69B9 + #$69BA, // $69BA + #$69BB, // $69BB + #$69BC, // $69BC + #$69BD, // $69BD + #$69BE, // $69BE + #$69BF, // $69BF + #$69C0, // $69C0 + #$69C1, // $69C1 + #$69C2, // $69C2 + #$69C3, // $69C3 + #$69C4, // $69C4 + #$69C5, // $69C5 + #$69C6, // $69C6 + #$69C7, // $69C7 + #$69C8, // $69C8 + #$69C9, // $69C9 + #$69CA, // $69CA + #$69CB, // $69CB + #$69CC, // $69CC + #$69CD, // $69CD + #$69CE, // $69CE + #$69CF, // $69CF + #$69D0, // $69D0 + #$69D1, // $69D1 + #$69D2, // $69D2 + #$69D3, // $69D3 + #$69D4, // $69D4 + #$69D5, // $69D5 + #$69D6, // $69D6 + #$69D7, // $69D7 + #$69D8, // $69D8 + #$69D9, // $69D9 + #$69DA, // $69DA + #$69DB, // $69DB + #$69DC, // $69DC + #$69DD, // $69DD + #$69DE, // $69DE + #$69DF, // $69DF + #$69E0, // $69E0 + #$69E1, // $69E1 + #$69E2, // $69E2 + #$69E3, // $69E3 + #$69E4, // $69E4 + #$69E5, // $69E5 + #$69E6, // $69E6 + #$69E7, // $69E7 + #$69E8, // $69E8 + #$69E9, // $69E9 + #$69EA, // $69EA + #$69EB, // $69EB + #$69EC, // $69EC + #$69ED, // $69ED + #$69EE, // $69EE + #$69EF, // $69EF + #$69F0, // $69F0 + #$69F1, // $69F1 + #$69F2, // $69F2 + #$69F3, // $69F3 + #$69F4, // $69F4 + #$69F5, // $69F5 + #$69F6, // $69F6 + #$69F7, // $69F7 + #$69F8, // $69F8 + #$69F9, // $69F9 + #$69FA, // $69FA + #$69FB, // $69FB + #$69FC, // $69FC + #$69FD, // $69FD + #$69FE, // $69FE + #$69FF, // $69FF + #$6A00, // $6A00 + #$6A01, // $6A01 + #$6A02, // $6A02 + #$6A03, // $6A03 + #$6A04, // $6A04 + #$6A05, // $6A05 + #$6A06, // $6A06 + #$6A07, // $6A07 + #$6A08, // $6A08 + #$6A09, // $6A09 + #$6A0A, // $6A0A + #$6A0B, // $6A0B + #$6A0C, // $6A0C + #$6A0D, // $6A0D + #$6A0E, // $6A0E + #$6A0F, // $6A0F + #$6A10, // $6A10 + #$6A11, // $6A11 + #$6A12, // $6A12 + #$6A13, // $6A13 + #$6A14, // $6A14 + #$6A15, // $6A15 + #$6A16, // $6A16 + #$6A17, // $6A17 + #$6A18, // $6A18 + #$6A19, // $6A19 + #$6A1A, // $6A1A + #$6A1B, // $6A1B + #$6A1C, // $6A1C + #$6A1D, // $6A1D + #$6A1E, // $6A1E + #$6A1F, // $6A1F + #$6A20, // $6A20 + #$6A21, // $6A21 + #$6A22, // $6A22 + #$6A23, // $6A23 + #$6A24, // $6A24 + #$6A25, // $6A25 + #$6A26, // $6A26 + #$6A27, // $6A27 + #$6A28, // $6A28 + #$6A29, // $6A29 + #$6A2A, // $6A2A + #$6A2B, // $6A2B + #$6A2C, // $6A2C + #$6A2D, // $6A2D + #$6A2E, // $6A2E + #$6A2F, // $6A2F + #$6A30, // $6A30 + #$6A31, // $6A31 + #$6A32, // $6A32 + #$6A33, // $6A33 + #$6A34, // $6A34 + #$6A35, // $6A35 + #$6A36, // $6A36 + #$6A37, // $6A37 + #$6A38, // $6A38 + #$6A39, // $6A39 + #$6A3A, // $6A3A + #$6A3B, // $6A3B + #$6A3C, // $6A3C + #$6A3D, // $6A3D + #$6A3E, // $6A3E + #$6A3F, // $6A3F + #$6A40, // $6A40 + #$6A41, // $6A41 + #$6A42, // $6A42 + #$6A43, // $6A43 + #$6A44, // $6A44 + #$6A45, // $6A45 + #$6A46, // $6A46 + #$6A47, // $6A47 + #$6A48, // $6A48 + #$6A49, // $6A49 + #$6A4A, // $6A4A + #$6A4B, // $6A4B + #$6A4C, // $6A4C + #$6A4D, // $6A4D + #$6A4E, // $6A4E + #$6A4F, // $6A4F + #$6A50, // $6A50 + #$6A51, // $6A51 + #$6A52, // $6A52 + #$6A53, // $6A53 + #$6A54, // $6A54 + #$6A55, // $6A55 + #$6A56, // $6A56 + #$6A57, // $6A57 + #$6A58, // $6A58 + #$6A59, // $6A59 + #$6A5A, // $6A5A + #$6A5B, // $6A5B + #$6A5C, // $6A5C + #$6A5D, // $6A5D + #$6A5E, // $6A5E + #$6A5F, // $6A5F + #$6A60, // $6A60 + #$6A61, // $6A61 + #$6A62, // $6A62 + #$6A63, // $6A63 + #$6A64, // $6A64 + #$6A65, // $6A65 + #$6A66, // $6A66 + #$6A67, // $6A67 + #$6A68, // $6A68 + #$6A69, // $6A69 + #$6A6A, // $6A6A + #$6A6B, // $6A6B + #$6A6C, // $6A6C + #$6A6D, // $6A6D + #$6A6E, // $6A6E + #$6A6F, // $6A6F + #$6A70, // $6A70 + #$6A71, // $6A71 + #$6A72, // $6A72 + #$6A73, // $6A73 + #$6A74, // $6A74 + #$6A75, // $6A75 + #$6A76, // $6A76 + #$6A77, // $6A77 + #$6A78, // $6A78 + #$6A79, // $6A79 + #$6A7A, // $6A7A + #$6A7B, // $6A7B + #$6A7C, // $6A7C + #$6A7D, // $6A7D + #$6A7E, // $6A7E + #$6A7F, // $6A7F + #$6A80, // $6A80 + #$6A81, // $6A81 + #$6A82, // $6A82 + #$6A83, // $6A83 + #$6A84, // $6A84 + #$6A85, // $6A85 + #$6A86, // $6A86 + #$6A87, // $6A87 + #$6A88, // $6A88 + #$6A89, // $6A89 + #$6A8A, // $6A8A + #$6A8B, // $6A8B + #$6A8C, // $6A8C + #$6A8D, // $6A8D + #$6A8E, // $6A8E + #$6A8F, // $6A8F + #$6A90, // $6A90 + #$6A91, // $6A91 + #$6A92, // $6A92 + #$6A93, // $6A93 + #$6A94, // $6A94 + #$6A95, // $6A95 + #$6A96, // $6A96 + #$6A97, // $6A97 + #$6A98, // $6A98 + #$6A99, // $6A99 + #$6A9A, // $6A9A + #$6A9B, // $6A9B + #$6A9C, // $6A9C + #$6A9D, // $6A9D + #$6A9E, // $6A9E + #$6A9F, // $6A9F + #$6AA0, // $6AA0 + #$6AA1, // $6AA1 + #$6AA2, // $6AA2 + #$6AA3, // $6AA3 + #$6AA4, // $6AA4 + #$6AA5, // $6AA5 + #$6AA6, // $6AA6 + #$6AA7, // $6AA7 + #$6AA8, // $6AA8 + #$6AA9, // $6AA9 + #$6AAA, // $6AAA + #$6AAB, // $6AAB + #$6AAC, // $6AAC + #$6AAD, // $6AAD + #$6AAE, // $6AAE + #$6AAF, // $6AAF + #$6AB0, // $6AB0 + #$6AB1, // $6AB1 + #$6AB2, // $6AB2 + #$6AB3, // $6AB3 + #$6AB4, // $6AB4 + #$6AB5, // $6AB5 + #$6AB6, // $6AB6 + #$6AB7, // $6AB7 + #$6AB8, // $6AB8 + #$6AB9, // $6AB9 + #$6ABA, // $6ABA + #$6ABB, // $6ABB + #$6ABC, // $6ABC + #$6ABD, // $6ABD + #$6ABE, // $6ABE + #$6ABF, // $6ABF + #$6AC0, // $6AC0 + #$6AC1, // $6AC1 + #$6AC2, // $6AC2 + #$6AC3, // $6AC3 + #$6AC4, // $6AC4 + #$6AC5, // $6AC5 + #$6AC6, // $6AC6 + #$6AC7, // $6AC7 + #$6AC8, // $6AC8 + #$6AC9, // $6AC9 + #$6ACA, // $6ACA + #$6ACB, // $6ACB + #$6ACC, // $6ACC + #$6ACD, // $6ACD + #$6ACE, // $6ACE + #$6ACF, // $6ACF + #$6AD0, // $6AD0 + #$6AD1, // $6AD1 + #$6AD2, // $6AD2 + #$6AD3, // $6AD3 + #$6AD4, // $6AD4 + #$6AD5, // $6AD5 + #$6AD6, // $6AD6 + #$6AD7, // $6AD7 + #$6AD8, // $6AD8 + #$6AD9, // $6AD9 + #$6ADA, // $6ADA + #$6ADB, // $6ADB + #$6ADC, // $6ADC + #$6ADD, // $6ADD + #$6ADE, // $6ADE + #$6ADF, // $6ADF + #$6AE0, // $6AE0 + #$6AE1, // $6AE1 + #$6AE2, // $6AE2 + #$6AE3, // $6AE3 + #$6AE4, // $6AE4 + #$6AE5, // $6AE5 + #$6AE6, // $6AE6 + #$6AE7, // $6AE7 + #$6AE8, // $6AE8 + #$6AE9, // $6AE9 + #$6AEA, // $6AEA + #$6AEB, // $6AEB + #$6AEC, // $6AEC + #$6AED, // $6AED + #$6AEE, // $6AEE + #$6AEF, // $6AEF + #$6AF0, // $6AF0 + #$6AF1, // $6AF1 + #$6AF2, // $6AF2 + #$6AF3, // $6AF3 + #$6AF4, // $6AF4 + #$6AF5, // $6AF5 + #$6AF6, // $6AF6 + #$6AF7, // $6AF7 + #$6AF8, // $6AF8 + #$6AF9, // $6AF9 + #$6AFA, // $6AFA + #$6AFB, // $6AFB + #$6AFC, // $6AFC + #$6AFD, // $6AFD + #$6AFE, // $6AFE + #$6AFF, // $6AFF + #$6B00, // $6B00 + #$6B01, // $6B01 + #$6B02, // $6B02 + #$6B03, // $6B03 + #$6B04, // $6B04 + #$6B05, // $6B05 + #$6B06, // $6B06 + #$6B07, // $6B07 + #$6B08, // $6B08 + #$6B09, // $6B09 + #$6B0A, // $6B0A + #$6B0B, // $6B0B + #$6B0C, // $6B0C + #$6B0D, // $6B0D + #$6B0E, // $6B0E + #$6B0F, // $6B0F + #$6B10, // $6B10 + #$6B11, // $6B11 + #$6B12, // $6B12 + #$6B13, // $6B13 + #$6B14, // $6B14 + #$6B15, // $6B15 + #$6B16, // $6B16 + #$6B17, // $6B17 + #$6B18, // $6B18 + #$6B19, // $6B19 + #$6B1A, // $6B1A + #$6B1B, // $6B1B + #$6B1C, // $6B1C + #$6B1D, // $6B1D + #$6B1E, // $6B1E + #$6B1F, // $6B1F + #$6B20, // $6B20 + #$6B21, // $6B21 + #$6B22, // $6B22 + #$6B23, // $6B23 + #$6B24, // $6B24 + #$6B25, // $6B25 + #$6B26, // $6B26 + #$6B27, // $6B27 + #$6B28, // $6B28 + #$6B29, // $6B29 + #$6B2A, // $6B2A + #$6B2B, // $6B2B + #$6B2C, // $6B2C + #$6B2D, // $6B2D + #$6B2E, // $6B2E + #$6B2F, // $6B2F + #$6B30, // $6B30 + #$6B31, // $6B31 + #$6B32, // $6B32 + #$6B33, // $6B33 + #$6B34, // $6B34 + #$6B35, // $6B35 + #$6B36, // $6B36 + #$6B37, // $6B37 + #$6B38, // $6B38 + #$6B39, // $6B39 + #$6B3A, // $6B3A + #$6B3B, // $6B3B + #$6B3C, // $6B3C + #$6B3D, // $6B3D + #$6B3E, // $6B3E + #$6B3F, // $6B3F + #$6B40, // $6B40 + #$6B41, // $6B41 + #$6B42, // $6B42 + #$6B43, // $6B43 + #$6B44, // $6B44 + #$6B45, // $6B45 + #$6B46, // $6B46 + #$6B47, // $6B47 + #$6B48, // $6B48 + #$6B49, // $6B49 + #$6B4A, // $6B4A + #$6B4B, // $6B4B + #$6B4C, // $6B4C + #$6B4D, // $6B4D + #$6B4E, // $6B4E + #$6B4F, // $6B4F + #$6B50, // $6B50 + #$6B51, // $6B51 + #$6B52, // $6B52 + #$6B53, // $6B53 + #$6B54, // $6B54 + #$6B55, // $6B55 + #$6B56, // $6B56 + #$6B57, // $6B57 + #$6B58, // $6B58 + #$6B59, // $6B59 + #$6B5A, // $6B5A + #$6B5B, // $6B5B + #$6B5C, // $6B5C + #$6B5D, // $6B5D + #$6B5E, // $6B5E + #$6B5F, // $6B5F + #$6B60, // $6B60 + #$6B61, // $6B61 + #$6B62, // $6B62 + #$6B63, // $6B63 + #$6B64, // $6B64 + #$6B65, // $6B65 + #$6B66, // $6B66 + #$6B67, // $6B67 + #$6B68, // $6B68 + #$6B69, // $6B69 + #$6B6A, // $6B6A + #$6B6B, // $6B6B + #$6B6C, // $6B6C + #$6B6D, // $6B6D + #$6B6E, // $6B6E + #$6B6F, // $6B6F + #$6B70, // $6B70 + #$6B71, // $6B71 + #$6B72, // $6B72 + #$6B73, // $6B73 + #$6B74, // $6B74 + #$6B75, // $6B75 + #$6B76, // $6B76 + #$6B77, // $6B77 + #$6B78, // $6B78 + #$6B79, // $6B79 + #$6B7A, // $6B7A + #$6B7B, // $6B7B + #$6B7C, // $6B7C + #$6B7D, // $6B7D + #$6B7E, // $6B7E + #$6B7F, // $6B7F + #$6B80, // $6B80 + #$6B81, // $6B81 + #$6B82, // $6B82 + #$6B83, // $6B83 + #$6B84, // $6B84 + #$6B85, // $6B85 + #$6B86, // $6B86 + #$6B87, // $6B87 + #$6B88, // $6B88 + #$6B89, // $6B89 + #$6B8A, // $6B8A + #$6B8B, // $6B8B + #$6B8C, // $6B8C + #$6B8D, // $6B8D + #$6B8E, // $6B8E + #$6B8F, // $6B8F + #$6B90, // $6B90 + #$6B91, // $6B91 + #$6B92, // $6B92 + #$6B93, // $6B93 + #$6B94, // $6B94 + #$6B95, // $6B95 + #$6B96, // $6B96 + #$6B97, // $6B97 + #$6B98, // $6B98 + #$6B99, // $6B99 + #$6B9A, // $6B9A + #$6B9B, // $6B9B + #$6B9C, // $6B9C + #$6B9D, // $6B9D + #$6B9E, // $6B9E + #$6B9F, // $6B9F + #$6BA0, // $6BA0 + #$6BA1, // $6BA1 + #$6BA2, // $6BA2 + #$6BA3, // $6BA3 + #$6BA4, // $6BA4 + #$6BA5, // $6BA5 + #$6BA6, // $6BA6 + #$6BA7, // $6BA7 + #$6BA8, // $6BA8 + #$6BA9, // $6BA9 + #$6BAA, // $6BAA + #$6BAB, // $6BAB + #$6BAC, // $6BAC + #$6BAD, // $6BAD + #$6BAE, // $6BAE + #$6BAF, // $6BAF + #$6BB0, // $6BB0 + #$6BB1, // $6BB1 + #$6BB2, // $6BB2 + #$6BB3, // $6BB3 + #$6BB4, // $6BB4 + #$6BB5, // $6BB5 + #$6BB6, // $6BB6 + #$6BB7, // $6BB7 + #$6BB8, // $6BB8 + #$6BB9, // $6BB9 + #$6BBA, // $6BBA + #$6BBB, // $6BBB + #$6BBC, // $6BBC + #$6BBD, // $6BBD + #$6BBE, // $6BBE + #$6BBF, // $6BBF + #$6BC0, // $6BC0 + #$6BC1, // $6BC1 + #$6BC2, // $6BC2 + #$6BC3, // $6BC3 + #$6BC4, // $6BC4 + #$6BC5, // $6BC5 + #$6BC6, // $6BC6 + #$6BC7, // $6BC7 + #$6BC8, // $6BC8 + #$6BC9, // $6BC9 + #$6BCA, // $6BCA + #$6BCB, // $6BCB + #$6BCC, // $6BCC + #$6BCD, // $6BCD + #$6BCE, // $6BCE + #$6BCF, // $6BCF + #$6BD0, // $6BD0 + #$6BD1, // $6BD1 + #$6BD2, // $6BD2 + #$6BD3, // $6BD3 + #$6BD4, // $6BD4 + #$6BD5, // $6BD5 + #$6BD6, // $6BD6 + #$6BD7, // $6BD7 + #$6BD8, // $6BD8 + #$6BD9, // $6BD9 + #$6BDA, // $6BDA + #$6BDB, // $6BDB + #$6BDC, // $6BDC + #$6BDD, // $6BDD + #$6BDE, // $6BDE + #$6BDF, // $6BDF + #$6BE0, // $6BE0 + #$6BE1, // $6BE1 + #$6BE2, // $6BE2 + #$6BE3, // $6BE3 + #$6BE4, // $6BE4 + #$6BE5, // $6BE5 + #$6BE6, // $6BE6 + #$6BE7, // $6BE7 + #$6BE8, // $6BE8 + #$6BE9, // $6BE9 + #$6BEA, // $6BEA + #$6BEB, // $6BEB + #$6BEC, // $6BEC + #$6BED, // $6BED + #$6BEE, // $6BEE + #$6BEF, // $6BEF + #$6BF0, // $6BF0 + #$6BF1, // $6BF1 + #$6BF2, // $6BF2 + #$6BF3, // $6BF3 + #$6BF4, // $6BF4 + #$6BF5, // $6BF5 + #$6BF6, // $6BF6 + #$6BF7, // $6BF7 + #$6BF8, // $6BF8 + #$6BF9, // $6BF9 + #$6BFA, // $6BFA + #$6BFB, // $6BFB + #$6BFC, // $6BFC + #$6BFD, // $6BFD + #$6BFE, // $6BFE + #$6BFF, // $6BFF + #$6C00, // $6C00 + #$6C01, // $6C01 + #$6C02, // $6C02 + #$6C03, // $6C03 + #$6C04, // $6C04 + #$6C05, // $6C05 + #$6C06, // $6C06 + #$6C07, // $6C07 + #$6C08, // $6C08 + #$6C09, // $6C09 + #$6C0A, // $6C0A + #$6C0B, // $6C0B + #$6C0C, // $6C0C + #$6C0D, // $6C0D + #$6C0E, // $6C0E + #$6C0F, // $6C0F + #$6C10, // $6C10 + #$6C11, // $6C11 + #$6C12, // $6C12 + #$6C13, // $6C13 + #$6C14, // $6C14 + #$6C15, // $6C15 + #$6C16, // $6C16 + #$6C17, // $6C17 + #$6C18, // $6C18 + #$6C19, // $6C19 + #$6C1A, // $6C1A + #$6C1B, // $6C1B + #$6C1C, // $6C1C + #$6C1D, // $6C1D + #$6C1E, // $6C1E + #$6C1F, // $6C1F + #$6C20, // $6C20 + #$6C21, // $6C21 + #$6C22, // $6C22 + #$6C23, // $6C23 + #$6C24, // $6C24 + #$6C25, // $6C25 + #$6C26, // $6C26 + #$6C27, // $6C27 + #$6C28, // $6C28 + #$6C29, // $6C29 + #$6C2A, // $6C2A + #$6C2B, // $6C2B + #$6C2C, // $6C2C + #$6C2D, // $6C2D + #$6C2E, // $6C2E + #$6C2F, // $6C2F + #$6C30, // $6C30 + #$6C31, // $6C31 + #$6C32, // $6C32 + #$6C33, // $6C33 + #$6C34, // $6C34 + #$6C35, // $6C35 + #$6C36, // $6C36 + #$6C37, // $6C37 + #$6C38, // $6C38 + #$6C39, // $6C39 + #$6C3A, // $6C3A + #$6C3B, // $6C3B + #$6C3C, // $6C3C + #$6C3D, // $6C3D + #$6C3E, // $6C3E + #$6C3F, // $6C3F + #$6C40, // $6C40 + #$6C41, // $6C41 + #$6C42, // $6C42 + #$6C43, // $6C43 + #$6C44, // $6C44 + #$6C45, // $6C45 + #$6C46, // $6C46 + #$6C47, // $6C47 + #$6C48, // $6C48 + #$6C49, // $6C49 + #$6C4A, // $6C4A + #$6C4B, // $6C4B + #$6C4C, // $6C4C + #$6C4D, // $6C4D + #$6C4E, // $6C4E + #$6C4F, // $6C4F + #$6C50, // $6C50 + #$6C51, // $6C51 + #$6C52, // $6C52 + #$6C53, // $6C53 + #$6C54, // $6C54 + #$6C55, // $6C55 + #$6C56, // $6C56 + #$6C57, // $6C57 + #$6C58, // $6C58 + #$6C59, // $6C59 + #$6C5A, // $6C5A + #$6C5B, // $6C5B + #$6C5C, // $6C5C + #$6C5D, // $6C5D + #$6C5E, // $6C5E + #$6C5F, // $6C5F + #$6C60, // $6C60 + #$6C61, // $6C61 + #$6C62, // $6C62 + #$6C63, // $6C63 + #$6C64, // $6C64 + #$6C65, // $6C65 + #$6C66, // $6C66 + #$6C67, // $6C67 + #$6C68, // $6C68 + #$6C69, // $6C69 + #$6C6A, // $6C6A + #$6C6B, // $6C6B + #$6C6C, // $6C6C + #$6C6D, // $6C6D + #$6C6E, // $6C6E + #$6C6F, // $6C6F + #$6C70, // $6C70 + #$6C71, // $6C71 + #$6C72, // $6C72 + #$6C73, // $6C73 + #$6C74, // $6C74 + #$6C75, // $6C75 + #$6C76, // $6C76 + #$6C77, // $6C77 + #$6C78, // $6C78 + #$6C79, // $6C79 + #$6C7A, // $6C7A + #$6C7B, // $6C7B + #$6C7C, // $6C7C + #$6C7D, // $6C7D + #$6C7E, // $6C7E + #$6C7F, // $6C7F + #$6C80, // $6C80 + #$6C81, // $6C81 + #$6C82, // $6C82 + #$6C83, // $6C83 + #$6C84, // $6C84 + #$6C85, // $6C85 + #$6C86, // $6C86 + #$6C87, // $6C87 + #$6C88, // $6C88 + #$6C89, // $6C89 + #$6C8A, // $6C8A + #$6C8B, // $6C8B + #$6C8C, // $6C8C + #$6C8D, // $6C8D + #$6C8E, // $6C8E + #$6C8F, // $6C8F + #$6C90, // $6C90 + #$6C91, // $6C91 + #$6C92, // $6C92 + #$6C93, // $6C93 + #$6C94, // $6C94 + #$6C95, // $6C95 + #$6C96, // $6C96 + #$6C97, // $6C97 + #$6C98, // $6C98 + #$6C99, // $6C99 + #$6C9A, // $6C9A + #$6C9B, // $6C9B + #$6C9C, // $6C9C + #$6C9D, // $6C9D + #$6C9E, // $6C9E + #$6C9F, // $6C9F + #$6CA0, // $6CA0 + #$6CA1, // $6CA1 + #$6CA2, // $6CA2 + #$6CA3, // $6CA3 + #$6CA4, // $6CA4 + #$6CA5, // $6CA5 + #$6CA6, // $6CA6 + #$6CA7, // $6CA7 + #$6CA8, // $6CA8 + #$6CA9, // $6CA9 + #$6CAA, // $6CAA + #$6CAB, // $6CAB + #$6CAC, // $6CAC + #$6CAD, // $6CAD + #$6CAE, // $6CAE + #$6CAF, // $6CAF + #$6CB0, // $6CB0 + #$6CB1, // $6CB1 + #$6CB2, // $6CB2 + #$6CB3, // $6CB3 + #$6CB4, // $6CB4 + #$6CB5, // $6CB5 + #$6CB6, // $6CB6 + #$6CB7, // $6CB7 + #$6CB8, // $6CB8 + #$6CB9, // $6CB9 + #$6CBA, // $6CBA + #$6CBB, // $6CBB + #$6CBC, // $6CBC + #$6CBD, // $6CBD + #$6CBE, // $6CBE + #$6CBF, // $6CBF + #$6CC0, // $6CC0 + #$6CC1, // $6CC1 + #$6CC2, // $6CC2 + #$6CC3, // $6CC3 + #$6CC4, // $6CC4 + #$6CC5, // $6CC5 + #$6CC6, // $6CC6 + #$6CC7, // $6CC7 + #$6CC8, // $6CC8 + #$6CC9, // $6CC9 + #$6CCA, // $6CCA + #$6CCB, // $6CCB + #$6CCC, // $6CCC + #$6CCD, // $6CCD + #$6CCE, // $6CCE + #$6CCF, // $6CCF + #$6CD0, // $6CD0 + #$6CD1, // $6CD1 + #$6CD2, // $6CD2 + #$6CD3, // $6CD3 + #$6CD4, // $6CD4 + #$6CD5, // $6CD5 + #$6CD6, // $6CD6 + #$6CD7, // $6CD7 + #$6CD8, // $6CD8 + #$6CD9, // $6CD9 + #$6CDA, // $6CDA + #$6CDB, // $6CDB + #$6CDC, // $6CDC + #$6CDD, // $6CDD + #$6CDE, // $6CDE + #$6CDF, // $6CDF + #$6CE0, // $6CE0 + #$6CE1, // $6CE1 + #$6CE2, // $6CE2 + #$6CE3, // $6CE3 + #$6CE4, // $6CE4 + #$6CE5, // $6CE5 + #$6CE6, // $6CE6 + #$6CE7, // $6CE7 + #$6CE8, // $6CE8 + #$6CE9, // $6CE9 + #$6CEA, // $6CEA + #$6CEB, // $6CEB + #$6CEC, // $6CEC + #$6CED, // $6CED + #$6CEE, // $6CEE + #$6CEF, // $6CEF + #$6CF0, // $6CF0 + #$6CF1, // $6CF1 + #$6CF2, // $6CF2 + #$6CF3, // $6CF3 + #$6CF4, // $6CF4 + #$6CF5, // $6CF5 + #$6CF6, // $6CF6 + #$6CF7, // $6CF7 + #$6CF8, // $6CF8 + #$6CF9, // $6CF9 + #$6CFA, // $6CFA + #$6CFB, // $6CFB + #$6CFC, // $6CFC + #$6CFD, // $6CFD + #$6CFE, // $6CFE + #$6CFF, // $6CFF + #$6D00, // $6D00 + #$6D01, // $6D01 + #$6D02, // $6D02 + #$6D03, // $6D03 + #$6D04, // $6D04 + #$6D05, // $6D05 + #$6D06, // $6D06 + #$6D07, // $6D07 + #$6D08, // $6D08 + #$6D09, // $6D09 + #$6D0A, // $6D0A + #$6D0B, // $6D0B + #$6D0C, // $6D0C + #$6D0D, // $6D0D + #$6D0E, // $6D0E + #$6D0F, // $6D0F + #$6D10, // $6D10 + #$6D11, // $6D11 + #$6D12, // $6D12 + #$6D13, // $6D13 + #$6D14, // $6D14 + #$6D15, // $6D15 + #$6D16, // $6D16 + #$6D17, // $6D17 + #$6D18, // $6D18 + #$6D19, // $6D19 + #$6D1A, // $6D1A + #$6D1B, // $6D1B + #$6D1C, // $6D1C + #$6D1D, // $6D1D + #$6D1E, // $6D1E + #$6D1F, // $6D1F + #$6D20, // $6D20 + #$6D21, // $6D21 + #$6D22, // $6D22 + #$6D23, // $6D23 + #$6D24, // $6D24 + #$6D25, // $6D25 + #$6D26, // $6D26 + #$6D27, // $6D27 + #$6D28, // $6D28 + #$6D29, // $6D29 + #$6D2A, // $6D2A + #$6D2B, // $6D2B + #$6D2C, // $6D2C + #$6D2D, // $6D2D + #$6D2E, // $6D2E + #$6D2F, // $6D2F + #$6D30, // $6D30 + #$6D31, // $6D31 + #$6D32, // $6D32 + #$6D33, // $6D33 + #$6D34, // $6D34 + #$6D35, // $6D35 + #$6D36, // $6D36 + #$6D37, // $6D37 + #$6D38, // $6D38 + #$6D39, // $6D39 + #$6D3A, // $6D3A + #$6D3B, // $6D3B + #$6D3C, // $6D3C + #$6D3D, // $6D3D + #$6D3E, // $6D3E + #$6D3F, // $6D3F + #$6D40, // $6D40 + #$6D41, // $6D41 + #$6D42, // $6D42 + #$6D43, // $6D43 + #$6D44, // $6D44 + #$6D45, // $6D45 + #$6D46, // $6D46 + #$6D47, // $6D47 + #$6D48, // $6D48 + #$6D49, // $6D49 + #$6D4A, // $6D4A + #$6D4B, // $6D4B + #$6D4C, // $6D4C + #$6D4D, // $6D4D + #$6D4E, // $6D4E + #$6D4F, // $6D4F + #$6D50, // $6D50 + #$6D51, // $6D51 + #$6D52, // $6D52 + #$6D53, // $6D53 + #$6D54, // $6D54 + #$6D55, // $6D55 + #$6D56, // $6D56 + #$6D57, // $6D57 + #$6D58, // $6D58 + #$6D59, // $6D59 + #$6D5A, // $6D5A + #$6D5B, // $6D5B + #$6D5C, // $6D5C + #$6D5D, // $6D5D + #$6D5E, // $6D5E + #$6D5F, // $6D5F + #$6D60, // $6D60 + #$6D61, // $6D61 + #$6D62, // $6D62 + #$6D63, // $6D63 + #$6D64, // $6D64 + #$6D65, // $6D65 + #$6D66, // $6D66 + #$6D67, // $6D67 + #$6D68, // $6D68 + #$6D69, // $6D69 + #$6D6A, // $6D6A + #$6D6B, // $6D6B + #$6D6C, // $6D6C + #$6D6D, // $6D6D + #$6D6E, // $6D6E + #$6D6F, // $6D6F + #$6D70, // $6D70 + #$6D71, // $6D71 + #$6D72, // $6D72 + #$6D73, // $6D73 + #$6D74, // $6D74 + #$6D75, // $6D75 + #$6D76, // $6D76 + #$6D77, // $6D77 + #$6D78, // $6D78 + #$6D79, // $6D79 + #$6D7A, // $6D7A + #$6D7B, // $6D7B + #$6D7C, // $6D7C + #$6D7D, // $6D7D + #$6D7E, // $6D7E + #$6D7F, // $6D7F + #$6D80, // $6D80 + #$6D81, // $6D81 + #$6D82, // $6D82 + #$6D83, // $6D83 + #$6D84, // $6D84 + #$6D85, // $6D85 + #$6D86, // $6D86 + #$6D87, // $6D87 + #$6D88, // $6D88 + #$6D89, // $6D89 + #$6D8A, // $6D8A + #$6D8B, // $6D8B + #$6D8C, // $6D8C + #$6D8D, // $6D8D + #$6D8E, // $6D8E + #$6D8F, // $6D8F + #$6D90, // $6D90 + #$6D91, // $6D91 + #$6D92, // $6D92 + #$6D93, // $6D93 + #$6D94, // $6D94 + #$6D95, // $6D95 + #$6D96, // $6D96 + #$6D97, // $6D97 + #$6D98, // $6D98 + #$6D99, // $6D99 + #$6D9A, // $6D9A + #$6D9B, // $6D9B + #$6D9C, // $6D9C + #$6D9D, // $6D9D + #$6D9E, // $6D9E + #$6D9F, // $6D9F + #$6DA0, // $6DA0 + #$6DA1, // $6DA1 + #$6DA2, // $6DA2 + #$6DA3, // $6DA3 + #$6DA4, // $6DA4 + #$6DA5, // $6DA5 + #$6DA6, // $6DA6 + #$6DA7, // $6DA7 + #$6DA8, // $6DA8 + #$6DA9, // $6DA9 + #$6DAA, // $6DAA + #$6DAB, // $6DAB + #$6DAC, // $6DAC + #$6DAD, // $6DAD + #$6DAE, // $6DAE + #$6DAF, // $6DAF + #$6DB0, // $6DB0 + #$6DB1, // $6DB1 + #$6DB2, // $6DB2 + #$6DB3, // $6DB3 + #$6DB4, // $6DB4 + #$6DB5, // $6DB5 + #$6DB6, // $6DB6 + #$6DB7, // $6DB7 + #$6DB8, // $6DB8 + #$6DB9, // $6DB9 + #$6DBA, // $6DBA + #$6DBB, // $6DBB + #$6DBC, // $6DBC + #$6DBD, // $6DBD + #$6DBE, // $6DBE + #$6DBF, // $6DBF + #$6DC0, // $6DC0 + #$6DC1, // $6DC1 + #$6DC2, // $6DC2 + #$6DC3, // $6DC3 + #$6DC4, // $6DC4 + #$6DC5, // $6DC5 + #$6DC6, // $6DC6 + #$6DC7, // $6DC7 + #$6DC8, // $6DC8 + #$6DC9, // $6DC9 + #$6DCA, // $6DCA + #$6DCB, // $6DCB + #$6DCC, // $6DCC + #$6DCD, // $6DCD + #$6DCE, // $6DCE + #$6DCF, // $6DCF + #$6DD0, // $6DD0 + #$6DD1, // $6DD1 + #$6DD2, // $6DD2 + #$6DD3, // $6DD3 + #$6DD4, // $6DD4 + #$6DD5, // $6DD5 + #$6DD6, // $6DD6 + #$6DD7, // $6DD7 + #$6DD8, // $6DD8 + #$6DD9, // $6DD9 + #$6DDA, // $6DDA + #$6DDB, // $6DDB + #$6DDC, // $6DDC + #$6DDD, // $6DDD + #$6DDE, // $6DDE + #$6DDF, // $6DDF + #$6DE0, // $6DE0 + #$6DE1, // $6DE1 + #$6DE2, // $6DE2 + #$6DE3, // $6DE3 + #$6DE4, // $6DE4 + #$6DE5, // $6DE5 + #$6DE6, // $6DE6 + #$6DE7, // $6DE7 + #$6DE8, // $6DE8 + #$6DE9, // $6DE9 + #$6DEA, // $6DEA + #$6DEB, // $6DEB + #$6DEC, // $6DEC + #$6DED, // $6DED + #$6DEE, // $6DEE + #$6DEF, // $6DEF + #$6DF0, // $6DF0 + #$6DF1, // $6DF1 + #$6DF2, // $6DF2 + #$6DF3, // $6DF3 + #$6DF4, // $6DF4 + #$6DF5, // $6DF5 + #$6DF6, // $6DF6 + #$6DF7, // $6DF7 + #$6DF8, // $6DF8 + #$6DF9, // $6DF9 + #$6DFA, // $6DFA + #$6DFB, // $6DFB + #$6DFC, // $6DFC + #$6DFD, // $6DFD + #$6DFE, // $6DFE + #$6DFF, // $6DFF + #$6E00, // $6E00 + #$6E01, // $6E01 + #$6E02, // $6E02 + #$6E03, // $6E03 + #$6E04, // $6E04 + #$6E05, // $6E05 + #$6E06, // $6E06 + #$6E07, // $6E07 + #$6E08, // $6E08 + #$6E09, // $6E09 + #$6E0A, // $6E0A + #$6E0B, // $6E0B + #$6E0C, // $6E0C + #$6E0D, // $6E0D + #$6E0E, // $6E0E + #$6E0F, // $6E0F + #$6E10, // $6E10 + #$6E11, // $6E11 + #$6E12, // $6E12 + #$6E13, // $6E13 + #$6E14, // $6E14 + #$6E15, // $6E15 + #$6E16, // $6E16 + #$6E17, // $6E17 + #$6E18, // $6E18 + #$6E19, // $6E19 + #$6E1A, // $6E1A + #$6E1B, // $6E1B + #$6E1C, // $6E1C + #$6E1D, // $6E1D + #$6E1E, // $6E1E + #$6E1F, // $6E1F + #$6E20, // $6E20 + #$6E21, // $6E21 + #$6E22, // $6E22 + #$6E23, // $6E23 + #$6E24, // $6E24 + #$6E25, // $6E25 + #$6E26, // $6E26 + #$6E27, // $6E27 + #$6E28, // $6E28 + #$6E29, // $6E29 + #$6E2A, // $6E2A + #$6E2B, // $6E2B + #$6E2C, // $6E2C + #$6E2D, // $6E2D + #$6E2E, // $6E2E + #$6E2F, // $6E2F + #$6E30, // $6E30 + #$6E31, // $6E31 + #$6E32, // $6E32 + #$6E33, // $6E33 + #$6E34, // $6E34 + #$6E35, // $6E35 + #$6E36, // $6E36 + #$6E37, // $6E37 + #$6E38, // $6E38 + #$6E39, // $6E39 + #$6E3A, // $6E3A + #$6E3B, // $6E3B + #$6E3C, // $6E3C + #$6E3D, // $6E3D + #$6E3E, // $6E3E + #$6E3F, // $6E3F + #$6E40, // $6E40 + #$6E41, // $6E41 + #$6E42, // $6E42 + #$6E43, // $6E43 + #$6E44, // $6E44 + #$6E45, // $6E45 + #$6E46, // $6E46 + #$6E47, // $6E47 + #$6E48, // $6E48 + #$6E49, // $6E49 + #$6E4A, // $6E4A + #$6E4B, // $6E4B + #$6E4C, // $6E4C + #$6E4D, // $6E4D + #$6E4E, // $6E4E + #$6E4F, // $6E4F + #$6E50, // $6E50 + #$6E51, // $6E51 + #$6E52, // $6E52 + #$6E53, // $6E53 + #$6E54, // $6E54 + #$6E55, // $6E55 + #$6E56, // $6E56 + #$6E57, // $6E57 + #$6E58, // $6E58 + #$6E59, // $6E59 + #$6E5A, // $6E5A + #$6E5B, // $6E5B + #$6E5C, // $6E5C + #$6E5D, // $6E5D + #$6E5E, // $6E5E + #$6E5F, // $6E5F + #$6E60, // $6E60 + #$6E61, // $6E61 + #$6E62, // $6E62 + #$6E63, // $6E63 + #$6E64, // $6E64 + #$6E65, // $6E65 + #$6E66, // $6E66 + #$6E67, // $6E67 + #$6E68, // $6E68 + #$6E69, // $6E69 + #$6E6A, // $6E6A + #$6E6B, // $6E6B + #$6E6C, // $6E6C + #$6E6D, // $6E6D + #$6E6E, // $6E6E + #$6E6F, // $6E6F + #$6E70, // $6E70 + #$6E71, // $6E71 + #$6E72, // $6E72 + #$6E73, // $6E73 + #$6E74, // $6E74 + #$6E75, // $6E75 + #$6E76, // $6E76 + #$6E77, // $6E77 + #$6E78, // $6E78 + #$6E79, // $6E79 + #$6E7A, // $6E7A + #$6E7B, // $6E7B + #$6E7C, // $6E7C + #$6E7D, // $6E7D + #$6E7E, // $6E7E + #$6E7F, // $6E7F + #$6E80, // $6E80 + #$6E81, // $6E81 + #$6E82, // $6E82 + #$6E83, // $6E83 + #$6E84, // $6E84 + #$6E85, // $6E85 + #$6E86, // $6E86 + #$6E87, // $6E87 + #$6E88, // $6E88 + #$6E89, // $6E89 + #$6E8A, // $6E8A + #$6E8B, // $6E8B + #$6E8C, // $6E8C + #$6E8D, // $6E8D + #$6E8E, // $6E8E + #$6E8F, // $6E8F + #$6E90, // $6E90 + #$6E91, // $6E91 + #$6E92, // $6E92 + #$6E93, // $6E93 + #$6E94, // $6E94 + #$6E95, // $6E95 + #$6E96, // $6E96 + #$6E97, // $6E97 + #$6E98, // $6E98 + #$6E99, // $6E99 + #$6E9A, // $6E9A + #$6E9B, // $6E9B + #$6E9C, // $6E9C + #$6E9D, // $6E9D + #$6E9E, // $6E9E + #$6E9F, // $6E9F + #$6EA0, // $6EA0 + #$6EA1, // $6EA1 + #$6EA2, // $6EA2 + #$6EA3, // $6EA3 + #$6EA4, // $6EA4 + #$6EA5, // $6EA5 + #$6EA6, // $6EA6 + #$6EA7, // $6EA7 + #$6EA8, // $6EA8 + #$6EA9, // $6EA9 + #$6EAA, // $6EAA + #$6EAB, // $6EAB + #$6EAC, // $6EAC + #$6EAD, // $6EAD + #$6EAE, // $6EAE + #$6EAF, // $6EAF + #$6EB0, // $6EB0 + #$6EB1, // $6EB1 + #$6EB2, // $6EB2 + #$6EB3, // $6EB3 + #$6EB4, // $6EB4 + #$6EB5, // $6EB5 + #$6EB6, // $6EB6 + #$6EB7, // $6EB7 + #$6EB8, // $6EB8 + #$6EB9, // $6EB9 + #$6EBA, // $6EBA + #$6EBB, // $6EBB + #$6EBC, // $6EBC + #$6EBD, // $6EBD + #$6EBE, // $6EBE + #$6EBF, // $6EBF + #$6EC0, // $6EC0 + #$6EC1, // $6EC1 + #$6EC2, // $6EC2 + #$6EC3, // $6EC3 + #$6EC4, // $6EC4 + #$6EC5, // $6EC5 + #$6EC6, // $6EC6 + #$6EC7, // $6EC7 + #$6EC8, // $6EC8 + #$6EC9, // $6EC9 + #$6ECA, // $6ECA + #$6ECB, // $6ECB + #$6ECC, // $6ECC + #$6ECD, // $6ECD + #$6ECE, // $6ECE + #$6ECF, // $6ECF + #$6ED0, // $6ED0 + #$6ED1, // $6ED1 + #$6ED2, // $6ED2 + #$6ED3, // $6ED3 + #$6ED4, // $6ED4 + #$6ED5, // $6ED5 + #$6ED6, // $6ED6 + #$6ED7, // $6ED7 + #$6ED8, // $6ED8 + #$6ED9, // $6ED9 + #$6EDA, // $6EDA + #$6EDB, // $6EDB + #$6EDC, // $6EDC + #$6EDD, // $6EDD + #$6EDE, // $6EDE + #$6EDF, // $6EDF + #$6EE0, // $6EE0 + #$6EE1, // $6EE1 + #$6EE2, // $6EE2 + #$6EE3, // $6EE3 + #$6EE4, // $6EE4 + #$6EE5, // $6EE5 + #$6EE6, // $6EE6 + #$6EE7, // $6EE7 + #$6EE8, // $6EE8 + #$6EE9, // $6EE9 + #$6EEA, // $6EEA + #$6EEB, // $6EEB + #$6EEC, // $6EEC + #$6EED, // $6EED + #$6EEE, // $6EEE + #$6EEF, // $6EEF + #$6EF0, // $6EF0 + #$6EF1, // $6EF1 + #$6EF2, // $6EF2 + #$6EF3, // $6EF3 + #$6EF4, // $6EF4 + #$6EF5, // $6EF5 + #$6EF6, // $6EF6 + #$6EF7, // $6EF7 + #$6EF8, // $6EF8 + #$6EF9, // $6EF9 + #$6EFA, // $6EFA + #$6EFB, // $6EFB + #$6EFC, // $6EFC + #$6EFD, // $6EFD + #$6EFE, // $6EFE + #$6EFF, // $6EFF + #$6F00, // $6F00 + #$6F01, // $6F01 + #$6F02, // $6F02 + #$6F03, // $6F03 + #$6F04, // $6F04 + #$6F05, // $6F05 + #$6F06, // $6F06 + #$6F07, // $6F07 + #$6F08, // $6F08 + #$6F09, // $6F09 + #$6F0A, // $6F0A + #$6F0B, // $6F0B + #$6F0C, // $6F0C + #$6F0D, // $6F0D + #$6F0E, // $6F0E + #$6F0F, // $6F0F + #$6F10, // $6F10 + #$6F11, // $6F11 + #$6F12, // $6F12 + #$6F13, // $6F13 + #$6F14, // $6F14 + #$6F15, // $6F15 + #$6F16, // $6F16 + #$6F17, // $6F17 + #$6F18, // $6F18 + #$6F19, // $6F19 + #$6F1A, // $6F1A + #$6F1B, // $6F1B + #$6F1C, // $6F1C + #$6F1D, // $6F1D + #$6F1E, // $6F1E + #$6F1F, // $6F1F + #$6F20, // $6F20 + #$6F21, // $6F21 + #$6F22, // $6F22 + #$6F23, // $6F23 + #$6F24, // $6F24 + #$6F25, // $6F25 + #$6F26, // $6F26 + #$6F27, // $6F27 + #$6F28, // $6F28 + #$6F29, // $6F29 + #$6F2A, // $6F2A + #$6F2B, // $6F2B + #$6F2C, // $6F2C + #$6F2D, // $6F2D + #$6F2E, // $6F2E + #$6F2F, // $6F2F + #$6F30, // $6F30 + #$6F31, // $6F31 + #$6F32, // $6F32 + #$6F33, // $6F33 + #$6F34, // $6F34 + #$6F35, // $6F35 + #$6F36, // $6F36 + #$6F37, // $6F37 + #$6F38, // $6F38 + #$6F39, // $6F39 + #$6F3A, // $6F3A + #$6F3B, // $6F3B + #$6F3C, // $6F3C + #$6F3D, // $6F3D + #$6F3E, // $6F3E + #$6F3F, // $6F3F + #$6F40, // $6F40 + #$6F41, // $6F41 + #$6F42, // $6F42 + #$6F43, // $6F43 + #$6F44, // $6F44 + #$6F45, // $6F45 + #$6F46, // $6F46 + #$6F47, // $6F47 + #$6F48, // $6F48 + #$6F49, // $6F49 + #$6F4A, // $6F4A + #$6F4B, // $6F4B + #$6F4C, // $6F4C + #$6F4D, // $6F4D + #$6F4E, // $6F4E + #$6F4F, // $6F4F + #$6F50, // $6F50 + #$6F51, // $6F51 + #$6F52, // $6F52 + #$6F53, // $6F53 + #$6F54, // $6F54 + #$6F55, // $6F55 + #$6F56, // $6F56 + #$6F57, // $6F57 + #$6F58, // $6F58 + #$6F59, // $6F59 + #$6F5A, // $6F5A + #$6F5B, // $6F5B + #$6F5C, // $6F5C + #$6F5D, // $6F5D + #$6F5E, // $6F5E + #$6F5F, // $6F5F + #$6F60, // $6F60 + #$6F61, // $6F61 + #$6F62, // $6F62 + #$6F63, // $6F63 + #$6F64, // $6F64 + #$6F65, // $6F65 + #$6F66, // $6F66 + #$6F67, // $6F67 + #$6F68, // $6F68 + #$6F69, // $6F69 + #$6F6A, // $6F6A + #$6F6B, // $6F6B + #$6F6C, // $6F6C + #$6F6D, // $6F6D + #$6F6E, // $6F6E + #$6F6F, // $6F6F + #$6F70, // $6F70 + #$6F71, // $6F71 + #$6F72, // $6F72 + #$6F73, // $6F73 + #$6F74, // $6F74 + #$6F75, // $6F75 + #$6F76, // $6F76 + #$6F77, // $6F77 + #$6F78, // $6F78 + #$6F79, // $6F79 + #$6F7A, // $6F7A + #$6F7B, // $6F7B + #$6F7C, // $6F7C + #$6F7D, // $6F7D + #$6F7E, // $6F7E + #$6F7F, // $6F7F + #$6F80, // $6F80 + #$6F81, // $6F81 + #$6F82, // $6F82 + #$6F83, // $6F83 + #$6F84, // $6F84 + #$6F85, // $6F85 + #$6F86, // $6F86 + #$6F87, // $6F87 + #$6F88, // $6F88 + #$6F89, // $6F89 + #$6F8A, // $6F8A + #$6F8B, // $6F8B + #$6F8C, // $6F8C + #$6F8D, // $6F8D + #$6F8E, // $6F8E + #$6F8F, // $6F8F + #$6F90, // $6F90 + #$6F91, // $6F91 + #$6F92, // $6F92 + #$6F93, // $6F93 + #$6F94, // $6F94 + #$6F95, // $6F95 + #$6F96, // $6F96 + #$6F97, // $6F97 + #$6F98, // $6F98 + #$6F99, // $6F99 + #$6F9A, // $6F9A + #$6F9B, // $6F9B + #$6F9C, // $6F9C + #$6F9D, // $6F9D + #$6F9E, // $6F9E + #$6F9F, // $6F9F + #$6FA0, // $6FA0 + #$6FA1, // $6FA1 + #$6FA2, // $6FA2 + #$6FA3, // $6FA3 + #$6FA4, // $6FA4 + #$6FA5, // $6FA5 + #$6FA6, // $6FA6 + #$6FA7, // $6FA7 + #$6FA8, // $6FA8 + #$6FA9, // $6FA9 + #$6FAA, // $6FAA + #$6FAB, // $6FAB + #$6FAC, // $6FAC + #$6FAD, // $6FAD + #$6FAE, // $6FAE + #$6FAF, // $6FAF + #$6FB0, // $6FB0 + #$6FB1, // $6FB1 + #$6FB2, // $6FB2 + #$6FB3, // $6FB3 + #$6FB4, // $6FB4 + #$6FB5, // $6FB5 + #$6FB6, // $6FB6 + #$6FB7, // $6FB7 + #$6FB8, // $6FB8 + #$6FB9, // $6FB9 + #$6FBA, // $6FBA + #$6FBB, // $6FBB + #$6FBC, // $6FBC + #$6FBD, // $6FBD + #$6FBE, // $6FBE + #$6FBF, // $6FBF + #$6FC0, // $6FC0 + #$6FC1, // $6FC1 + #$6FC2, // $6FC2 + #$6FC3, // $6FC3 + #$6FC4, // $6FC4 + #$6FC5, // $6FC5 + #$6FC6, // $6FC6 + #$6FC7, // $6FC7 + #$6FC8, // $6FC8 + #$6FC9, // $6FC9 + #$6FCA, // $6FCA + #$6FCB, // $6FCB + #$6FCC, // $6FCC + #$6FCD, // $6FCD + #$6FCE, // $6FCE + #$6FCF, // $6FCF + #$6FD0, // $6FD0 + #$6FD1, // $6FD1 + #$6FD2, // $6FD2 + #$6FD3, // $6FD3 + #$6FD4, // $6FD4 + #$6FD5, // $6FD5 + #$6FD6, // $6FD6 + #$6FD7, // $6FD7 + #$6FD8, // $6FD8 + #$6FD9, // $6FD9 + #$6FDA, // $6FDA + #$6FDB, // $6FDB + #$6FDC, // $6FDC + #$6FDD, // $6FDD + #$6FDE, // $6FDE + #$6FDF, // $6FDF + #$6FE0, // $6FE0 + #$6FE1, // $6FE1 + #$6FE2, // $6FE2 + #$6FE3, // $6FE3 + #$6FE4, // $6FE4 + #$6FE5, // $6FE5 + #$6FE6, // $6FE6 + #$6FE7, // $6FE7 + #$6FE8, // $6FE8 + #$6FE9, // $6FE9 + #$6FEA, // $6FEA + #$6FEB, // $6FEB + #$6FEC, // $6FEC + #$6FED, // $6FED + #$6FEE, // $6FEE + #$6FEF, // $6FEF + #$6FF0, // $6FF0 + #$6FF1, // $6FF1 + #$6FF2, // $6FF2 + #$6FF3, // $6FF3 + #$6FF4, // $6FF4 + #$6FF5, // $6FF5 + #$6FF6, // $6FF6 + #$6FF7, // $6FF7 + #$6FF8, // $6FF8 + #$6FF9, // $6FF9 + #$6FFA, // $6FFA + #$6FFB, // $6FFB + #$6FFC, // $6FFC + #$6FFD, // $6FFD + #$6FFE, // $6FFE + #$6FFF, // $6FFF + #$7000, // $7000 + #$7001, // $7001 + #$7002, // $7002 + #$7003, // $7003 + #$7004, // $7004 + #$7005, // $7005 + #$7006, // $7006 + #$7007, // $7007 + #$7008, // $7008 + #$7009, // $7009 + #$700A, // $700A + #$700B, // $700B + #$700C, // $700C + #$700D, // $700D + #$700E, // $700E + #$700F, // $700F + #$7010, // $7010 + #$7011, // $7011 + #$7012, // $7012 + #$7013, // $7013 + #$7014, // $7014 + #$7015, // $7015 + #$7016, // $7016 + #$7017, // $7017 + #$7018, // $7018 + #$7019, // $7019 + #$701A, // $701A + #$701B, // $701B + #$701C, // $701C + #$701D, // $701D + #$701E, // $701E + #$701F, // $701F + #$7020, // $7020 + #$7021, // $7021 + #$7022, // $7022 + #$7023, // $7023 + #$7024, // $7024 + #$7025, // $7025 + #$7026, // $7026 + #$7027, // $7027 + #$7028, // $7028 + #$7029, // $7029 + #$702A, // $702A + #$702B, // $702B + #$702C, // $702C + #$702D, // $702D + #$702E, // $702E + #$702F, // $702F + #$7030, // $7030 + #$7031, // $7031 + #$7032, // $7032 + #$7033, // $7033 + #$7034, // $7034 + #$7035, // $7035 + #$7036, // $7036 + #$7037, // $7037 + #$7038, // $7038 + #$7039, // $7039 + #$703A, // $703A + #$703B, // $703B + #$703C, // $703C + #$703D, // $703D + #$703E, // $703E + #$703F, // $703F + #$7040, // $7040 + #$7041, // $7041 + #$7042, // $7042 + #$7043, // $7043 + #$7044, // $7044 + #$7045, // $7045 + #$7046, // $7046 + #$7047, // $7047 + #$7048, // $7048 + #$7049, // $7049 + #$704A, // $704A + #$704B, // $704B + #$704C, // $704C + #$704D, // $704D + #$704E, // $704E + #$704F, // $704F + #$7050, // $7050 + #$7051, // $7051 + #$7052, // $7052 + #$7053, // $7053 + #$7054, // $7054 + #$7055, // $7055 + #$7056, // $7056 + #$7057, // $7057 + #$7058, // $7058 + #$7059, // $7059 + #$705A, // $705A + #$705B, // $705B + #$705C, // $705C + #$705D, // $705D + #$705E, // $705E + #$705F, // $705F + #$7060, // $7060 + #$7061, // $7061 + #$7062, // $7062 + #$7063, // $7063 + #$7064, // $7064 + #$7065, // $7065 + #$7066, // $7066 + #$7067, // $7067 + #$7068, // $7068 + #$7069, // $7069 + #$706A, // $706A + #$706B, // $706B + #$706C, // $706C + #$706D, // $706D + #$706E, // $706E + #$706F, // $706F + #$7070, // $7070 + #$7071, // $7071 + #$7072, // $7072 + #$7073, // $7073 + #$7074, // $7074 + #$7075, // $7075 + #$7076, // $7076 + #$7077, // $7077 + #$7078, // $7078 + #$7079, // $7079 + #$707A, // $707A + #$707B, // $707B + #$707C, // $707C + #$707D, // $707D + #$707E, // $707E + #$707F, // $707F + #$7080, // $7080 + #$7081, // $7081 + #$7082, // $7082 + #$7083, // $7083 + #$7084, // $7084 + #$7085, // $7085 + #$7086, // $7086 + #$7087, // $7087 + #$7088, // $7088 + #$7089, // $7089 + #$708A, // $708A + #$708B, // $708B + #$708C, // $708C + #$708D, // $708D + #$708E, // $708E + #$708F, // $708F + #$7090, // $7090 + #$7091, // $7091 + #$7092, // $7092 + #$7093, // $7093 + #$7094, // $7094 + #$7095, // $7095 + #$7096, // $7096 + #$7097, // $7097 + #$7098, // $7098 + #$7099, // $7099 + #$709A, // $709A + #$709B, // $709B + #$709C, // $709C + #$709D, // $709D + #$709E, // $709E + #$709F, // $709F + #$70A0, // $70A0 + #$70A1, // $70A1 + #$70A2, // $70A2 + #$70A3, // $70A3 + #$70A4, // $70A4 + #$70A5, // $70A5 + #$70A6, // $70A6 + #$70A7, // $70A7 + #$70A8, // $70A8 + #$70A9, // $70A9 + #$70AA, // $70AA + #$70AB, // $70AB + #$70AC, // $70AC + #$70AD, // $70AD + #$70AE, // $70AE + #$70AF, // $70AF + #$70B0, // $70B0 + #$70B1, // $70B1 + #$70B2, // $70B2 + #$70B3, // $70B3 + #$70B4, // $70B4 + #$70B5, // $70B5 + #$70B6, // $70B6 + #$70B7, // $70B7 + #$70B8, // $70B8 + #$70B9, // $70B9 + #$70BA, // $70BA + #$70BB, // $70BB + #$70BC, // $70BC + #$70BD, // $70BD + #$70BE, // $70BE + #$70BF, // $70BF + #$70C0, // $70C0 + #$70C1, // $70C1 + #$70C2, // $70C2 + #$70C3, // $70C3 + #$70C4, // $70C4 + #$70C5, // $70C5 + #$70C6, // $70C6 + #$70C7, // $70C7 + #$70C8, // $70C8 + #$70C9, // $70C9 + #$70CA, // $70CA + #$70CB, // $70CB + #$70CC, // $70CC + #$70CD, // $70CD + #$70CE, // $70CE + #$70CF, // $70CF + #$70D0, // $70D0 + #$70D1, // $70D1 + #$70D2, // $70D2 + #$70D3, // $70D3 + #$70D4, // $70D4 + #$70D5, // $70D5 + #$70D6, // $70D6 + #$70D7, // $70D7 + #$70D8, // $70D8 + #$70D9, // $70D9 + #$70DA, // $70DA + #$70DB, // $70DB + #$70DC, // $70DC + #$70DD, // $70DD + #$70DE, // $70DE + #$70DF, // $70DF + #$70E0, // $70E0 + #$70E1, // $70E1 + #$70E2, // $70E2 + #$70E3, // $70E3 + #$70E4, // $70E4 + #$70E5, // $70E5 + #$70E6, // $70E6 + #$70E7, // $70E7 + #$70E8, // $70E8 + #$70E9, // $70E9 + #$70EA, // $70EA + #$70EB, // $70EB + #$70EC, // $70EC + #$70ED, // $70ED + #$70EE, // $70EE + #$70EF, // $70EF + #$70F0, // $70F0 + #$70F1, // $70F1 + #$70F2, // $70F2 + #$70F3, // $70F3 + #$70F4, // $70F4 + #$70F5, // $70F5 + #$70F6, // $70F6 + #$70F7, // $70F7 + #$70F8, // $70F8 + #$70F9, // $70F9 + #$70FA, // $70FA + #$70FB, // $70FB + #$70FC, // $70FC + #$70FD, // $70FD + #$70FE, // $70FE + #$70FF, // $70FF + #$7100, // $7100 + #$7101, // $7101 + #$7102, // $7102 + #$7103, // $7103 + #$7104, // $7104 + #$7105, // $7105 + #$7106, // $7106 + #$7107, // $7107 + #$7108, // $7108 + #$7109, // $7109 + #$710A, // $710A + #$710B, // $710B + #$710C, // $710C + #$710D, // $710D + #$710E, // $710E + #$710F, // $710F + #$7110, // $7110 + #$7111, // $7111 + #$7112, // $7112 + #$7113, // $7113 + #$7114, // $7114 + #$7115, // $7115 + #$7116, // $7116 + #$7117, // $7117 + #$7118, // $7118 + #$7119, // $7119 + #$711A, // $711A + #$711B, // $711B + #$711C, // $711C + #$711D, // $711D + #$711E, // $711E + #$711F, // $711F + #$7120, // $7120 + #$7121, // $7121 + #$7122, // $7122 + #$7123, // $7123 + #$7124, // $7124 + #$7125, // $7125 + #$7126, // $7126 + #$7127, // $7127 + #$7128, // $7128 + #$7129, // $7129 + #$712A, // $712A + #$712B, // $712B + #$712C, // $712C + #$712D, // $712D + #$712E, // $712E + #$712F, // $712F + #$7130, // $7130 + #$7131, // $7131 + #$7132, // $7132 + #$7133, // $7133 + #$7134, // $7134 + #$7135, // $7135 + #$7136, // $7136 + #$7137, // $7137 + #$7138, // $7138 + #$7139, // $7139 + #$713A, // $713A + #$713B, // $713B + #$713C, // $713C + #$713D, // $713D + #$713E, // $713E + #$713F, // $713F + #$7140, // $7140 + #$7141, // $7141 + #$7142, // $7142 + #$7143, // $7143 + #$7144, // $7144 + #$7145, // $7145 + #$7146, // $7146 + #$7147, // $7147 + #$7148, // $7148 + #$7149, // $7149 + #$714A, // $714A + #$714B, // $714B + #$714C, // $714C + #$714D, // $714D + #$714E, // $714E + #$714F, // $714F + #$7150, // $7150 + #$7151, // $7151 + #$7152, // $7152 + #$7153, // $7153 + #$7154, // $7154 + #$7155, // $7155 + #$7156, // $7156 + #$7157, // $7157 + #$7158, // $7158 + #$7159, // $7159 + #$715A, // $715A + #$715B, // $715B + #$715C, // $715C + #$715D, // $715D + #$715E, // $715E + #$715F, // $715F + #$7160, // $7160 + #$7161, // $7161 + #$7162, // $7162 + #$7163, // $7163 + #$7164, // $7164 + #$7165, // $7165 + #$7166, // $7166 + #$7167, // $7167 + #$7168, // $7168 + #$7169, // $7169 + #$716A, // $716A + #$716B, // $716B + #$716C, // $716C + #$716D, // $716D + #$716E, // $716E + #$716F, // $716F + #$7170, // $7170 + #$7171, // $7171 + #$7172, // $7172 + #$7173, // $7173 + #$7174, // $7174 + #$7175, // $7175 + #$7176, // $7176 + #$7177, // $7177 + #$7178, // $7178 + #$7179, // $7179 + #$717A, // $717A + #$717B, // $717B + #$717C, // $717C + #$717D, // $717D + #$717E, // $717E + #$717F, // $717F + #$7180, // $7180 + #$7181, // $7181 + #$7182, // $7182 + #$7183, // $7183 + #$7184, // $7184 + #$7185, // $7185 + #$7186, // $7186 + #$7187, // $7187 + #$7188, // $7188 + #$7189, // $7189 + #$718A, // $718A + #$718B, // $718B + #$718C, // $718C + #$718D, // $718D + #$718E, // $718E + #$718F, // $718F + #$7190, // $7190 + #$7191, // $7191 + #$7192, // $7192 + #$7193, // $7193 + #$7194, // $7194 + #$7195, // $7195 + #$7196, // $7196 + #$7197, // $7197 + #$7198, // $7198 + #$7199, // $7199 + #$719A, // $719A + #$719B, // $719B + #$719C, // $719C + #$719D, // $719D + #$719E, // $719E + #$719F, // $719F + #$71A0, // $71A0 + #$71A1, // $71A1 + #$71A2, // $71A2 + #$71A3, // $71A3 + #$71A4, // $71A4 + #$71A5, // $71A5 + #$71A6, // $71A6 + #$71A7, // $71A7 + #$71A8, // $71A8 + #$71A9, // $71A9 + #$71AA, // $71AA + #$71AB, // $71AB + #$71AC, // $71AC + #$71AD, // $71AD + #$71AE, // $71AE + #$71AF, // $71AF + #$71B0, // $71B0 + #$71B1, // $71B1 + #$71B2, // $71B2 + #$71B3, // $71B3 + #$71B4, // $71B4 + #$71B5, // $71B5 + #$71B6, // $71B6 + #$71B7, // $71B7 + #$71B8, // $71B8 + #$71B9, // $71B9 + #$71BA, // $71BA + #$71BB, // $71BB + #$71BC, // $71BC + #$71BD, // $71BD + #$71BE, // $71BE + #$71BF, // $71BF + #$71C0, // $71C0 + #$71C1, // $71C1 + #$71C2, // $71C2 + #$71C3, // $71C3 + #$71C4, // $71C4 + #$71C5, // $71C5 + #$71C6, // $71C6 + #$71C7, // $71C7 + #$71C8, // $71C8 + #$71C9, // $71C9 + #$71CA, // $71CA + #$71CB, // $71CB + #$71CC, // $71CC + #$71CD, // $71CD + #$71CE, // $71CE + #$71CF, // $71CF + #$71D0, // $71D0 + #$71D1, // $71D1 + #$71D2, // $71D2 + #$71D3, // $71D3 + #$71D4, // $71D4 + #$71D5, // $71D5 + #$71D6, // $71D6 + #$71D7, // $71D7 + #$71D8, // $71D8 + #$71D9, // $71D9 + #$71DA, // $71DA + #$71DB, // $71DB + #$71DC, // $71DC + #$71DD, // $71DD + #$71DE, // $71DE + #$71DF, // $71DF + #$71E0, // $71E0 + #$71E1, // $71E1 + #$71E2, // $71E2 + #$71E3, // $71E3 + #$71E4, // $71E4 + #$71E5, // $71E5 + #$71E6, // $71E6 + #$71E7, // $71E7 + #$71E8, // $71E8 + #$71E9, // $71E9 + #$71EA, // $71EA + #$71EB, // $71EB + #$71EC, // $71EC + #$71ED, // $71ED + #$71EE, // $71EE + #$71EF, // $71EF + #$71F0, // $71F0 + #$71F1, // $71F1 + #$71F2, // $71F2 + #$71F3, // $71F3 + #$71F4, // $71F4 + #$71F5, // $71F5 + #$71F6, // $71F6 + #$71F7, // $71F7 + #$71F8, // $71F8 + #$71F9, // $71F9 + #$71FA, // $71FA + #$71FB, // $71FB + #$71FC, // $71FC + #$71FD, // $71FD + #$71FE, // $71FE + #$71FF, // $71FF + #$7200, // $7200 + #$7201, // $7201 + #$7202, // $7202 + #$7203, // $7203 + #$7204, // $7204 + #$7205, // $7205 + #$7206, // $7206 + #$7207, // $7207 + #$7208, // $7208 + #$7209, // $7209 + #$720A, // $720A + #$720B, // $720B + #$720C, // $720C + #$720D, // $720D + #$720E, // $720E + #$720F, // $720F + #$7210, // $7210 + #$7211, // $7211 + #$7212, // $7212 + #$7213, // $7213 + #$7214, // $7214 + #$7215, // $7215 + #$7216, // $7216 + #$7217, // $7217 + #$7218, // $7218 + #$7219, // $7219 + #$721A, // $721A + #$721B, // $721B + #$721C, // $721C + #$721D, // $721D + #$721E, // $721E + #$721F, // $721F + #$7220, // $7220 + #$7221, // $7221 + #$7222, // $7222 + #$7223, // $7223 + #$7224, // $7224 + #$7225, // $7225 + #$7226, // $7226 + #$7227, // $7227 + #$7228, // $7228 + #$7229, // $7229 + #$722A, // $722A + #$722B, // $722B + #$722C, // $722C + #$722D, // $722D + #$722E, // $722E + #$722F, // $722F + #$7230, // $7230 + #$7231, // $7231 + #$7232, // $7232 + #$7233, // $7233 + #$7234, // $7234 + #$7235, // $7235 + #$7236, // $7236 + #$7237, // $7237 + #$7238, // $7238 + #$7239, // $7239 + #$723A, // $723A + #$723B, // $723B + #$723C, // $723C + #$723D, // $723D + #$723E, // $723E + #$723F, // $723F + #$7240, // $7240 + #$7241, // $7241 + #$7242, // $7242 + #$7243, // $7243 + #$7244, // $7244 + #$7245, // $7245 + #$7246, // $7246 + #$7247, // $7247 + #$7248, // $7248 + #$7249, // $7249 + #$724A, // $724A + #$724B, // $724B + #$724C, // $724C + #$724D, // $724D + #$724E, // $724E + #$724F, // $724F + #$7250, // $7250 + #$7251, // $7251 + #$7252, // $7252 + #$7253, // $7253 + #$7254, // $7254 + #$7255, // $7255 + #$7256, // $7256 + #$7257, // $7257 + #$7258, // $7258 + #$7259, // $7259 + #$725A, // $725A + #$725B, // $725B + #$725C, // $725C + #$725D, // $725D + #$725E, // $725E + #$725F, // $725F + #$7260, // $7260 + #$7261, // $7261 + #$7262, // $7262 + #$7263, // $7263 + #$7264, // $7264 + #$7265, // $7265 + #$7266, // $7266 + #$7267, // $7267 + #$7268, // $7268 + #$7269, // $7269 + #$726A, // $726A + #$726B, // $726B + #$726C, // $726C + #$726D, // $726D + #$726E, // $726E + #$726F, // $726F + #$7270, // $7270 + #$7271, // $7271 + #$7272, // $7272 + #$7273, // $7273 + #$7274, // $7274 + #$7275, // $7275 + #$7276, // $7276 + #$7277, // $7277 + #$7278, // $7278 + #$7279, // $7279 + #$727A, // $727A + #$727B, // $727B + #$727C, // $727C + #$727D, // $727D + #$727E, // $727E + #$727F, // $727F + #$7280, // $7280 + #$7281, // $7281 + #$7282, // $7282 + #$7283, // $7283 + #$7284, // $7284 + #$7285, // $7285 + #$7286, // $7286 + #$7287, // $7287 + #$7288, // $7288 + #$7289, // $7289 + #$728A, // $728A + #$728B, // $728B + #$728C, // $728C + #$728D, // $728D + #$728E, // $728E + #$728F, // $728F + #$7290, // $7290 + #$7291, // $7291 + #$7292, // $7292 + #$7293, // $7293 + #$7294, // $7294 + #$7295, // $7295 + #$7296, // $7296 + #$7297, // $7297 + #$7298, // $7298 + #$7299, // $7299 + #$729A, // $729A + #$729B, // $729B + #$729C, // $729C + #$729D, // $729D + #$729E, // $729E + #$729F, // $729F + #$72A0, // $72A0 + #$72A1, // $72A1 + #$72A2, // $72A2 + #$72A3, // $72A3 + #$72A4, // $72A4 + #$72A5, // $72A5 + #$72A6, // $72A6 + #$72A7, // $72A7 + #$72A8, // $72A8 + #$72A9, // $72A9 + #$72AA, // $72AA + #$72AB, // $72AB + #$72AC, // $72AC + #$72AD, // $72AD + #$72AE, // $72AE + #$72AF, // $72AF + #$72B0, // $72B0 + #$72B1, // $72B1 + #$72B2, // $72B2 + #$72B3, // $72B3 + #$72B4, // $72B4 + #$72B5, // $72B5 + #$72B6, // $72B6 + #$72B7, // $72B7 + #$72B8, // $72B8 + #$72B9, // $72B9 + #$72BA, // $72BA + #$72BB, // $72BB + #$72BC, // $72BC + #$72BD, // $72BD + #$72BE, // $72BE + #$72BF, // $72BF + #$72C0, // $72C0 + #$72C1, // $72C1 + #$72C2, // $72C2 + #$72C3, // $72C3 + #$72C4, // $72C4 + #$72C5, // $72C5 + #$72C6, // $72C6 + #$72C7, // $72C7 + #$72C8, // $72C8 + #$72C9, // $72C9 + #$72CA, // $72CA + #$72CB, // $72CB + #$72CC, // $72CC + #$72CD, // $72CD + #$72CE, // $72CE + #$72CF, // $72CF + #$72D0, // $72D0 + #$72D1, // $72D1 + #$72D2, // $72D2 + #$72D3, // $72D3 + #$72D4, // $72D4 + #$72D5, // $72D5 + #$72D6, // $72D6 + #$72D7, // $72D7 + #$72D8, // $72D8 + #$72D9, // $72D9 + #$72DA, // $72DA + #$72DB, // $72DB + #$72DC, // $72DC + #$72DD, // $72DD + #$72DE, // $72DE + #$72DF, // $72DF + #$72E0, // $72E0 + #$72E1, // $72E1 + #$72E2, // $72E2 + #$72E3, // $72E3 + #$72E4, // $72E4 + #$72E5, // $72E5 + #$72E6, // $72E6 + #$72E7, // $72E7 + #$72E8, // $72E8 + #$72E9, // $72E9 + #$72EA, // $72EA + #$72EB, // $72EB + #$72EC, // $72EC + #$72ED, // $72ED + #$72EE, // $72EE + #$72EF, // $72EF + #$72F0, // $72F0 + #$72F1, // $72F1 + #$72F2, // $72F2 + #$72F3, // $72F3 + #$72F4, // $72F4 + #$72F5, // $72F5 + #$72F6, // $72F6 + #$72F7, // $72F7 + #$72F8, // $72F8 + #$72F9, // $72F9 + #$72FA, // $72FA + #$72FB, // $72FB + #$72FC, // $72FC + #$72FD, // $72FD + #$72FE, // $72FE + #$72FF, // $72FF + #$7300, // $7300 + #$7301, // $7301 + #$7302, // $7302 + #$7303, // $7303 + #$7304, // $7304 + #$7305, // $7305 + #$7306, // $7306 + #$7307, // $7307 + #$7308, // $7308 + #$7309, // $7309 + #$730A, // $730A + #$730B, // $730B + #$730C, // $730C + #$730D, // $730D + #$730E, // $730E + #$730F, // $730F + #$7310, // $7310 + #$7311, // $7311 + #$7312, // $7312 + #$7313, // $7313 + #$7314, // $7314 + #$7315, // $7315 + #$7316, // $7316 + #$7317, // $7317 + #$7318, // $7318 + #$7319, // $7319 + #$731A, // $731A + #$731B, // $731B + #$731C, // $731C + #$731D, // $731D + #$731E, // $731E + #$731F, // $731F + #$7320, // $7320 + #$7321, // $7321 + #$7322, // $7322 + #$7323, // $7323 + #$7324, // $7324 + #$7325, // $7325 + #$7326, // $7326 + #$7327, // $7327 + #$7328, // $7328 + #$7329, // $7329 + #$732A, // $732A + #$732B, // $732B + #$732C, // $732C + #$732D, // $732D + #$732E, // $732E + #$732F, // $732F + #$7330, // $7330 + #$7331, // $7331 + #$7332, // $7332 + #$7333, // $7333 + #$7334, // $7334 + #$7335, // $7335 + #$7336, // $7336 + #$7337, // $7337 + #$7338, // $7338 + #$7339, // $7339 + #$733A, // $733A + #$733B, // $733B + #$733C, // $733C + #$733D, // $733D + #$733E, // $733E + #$733F, // $733F + #$7340, // $7340 + #$7341, // $7341 + #$7342, // $7342 + #$7343, // $7343 + #$7344, // $7344 + #$7345, // $7345 + #$7346, // $7346 + #$7347, // $7347 + #$7348, // $7348 + #$7349, // $7349 + #$734A, // $734A + #$734B, // $734B + #$734C, // $734C + #$734D, // $734D + #$734E, // $734E + #$734F, // $734F + #$7350, // $7350 + #$7351, // $7351 + #$7352, // $7352 + #$7353, // $7353 + #$7354, // $7354 + #$7355, // $7355 + #$7356, // $7356 + #$7357, // $7357 + #$7358, // $7358 + #$7359, // $7359 + #$735A, // $735A + #$735B, // $735B + #$735C, // $735C + #$735D, // $735D + #$735E, // $735E + #$735F, // $735F + #$7360, // $7360 + #$7361, // $7361 + #$7362, // $7362 + #$7363, // $7363 + #$7364, // $7364 + #$7365, // $7365 + #$7366, // $7366 + #$7367, // $7367 + #$7368, // $7368 + #$7369, // $7369 + #$736A, // $736A + #$736B, // $736B + #$736C, // $736C + #$736D, // $736D + #$736E, // $736E + #$736F, // $736F + #$7370, // $7370 + #$7371, // $7371 + #$7372, // $7372 + #$7373, // $7373 + #$7374, // $7374 + #$7375, // $7375 + #$7376, // $7376 + #$7377, // $7377 + #$7378, // $7378 + #$7379, // $7379 + #$737A, // $737A + #$737B, // $737B + #$737C, // $737C + #$737D, // $737D + #$737E, // $737E + #$737F, // $737F + #$7380, // $7380 + #$7381, // $7381 + #$7382, // $7382 + #$7383, // $7383 + #$7384, // $7384 + #$7385, // $7385 + #$7386, // $7386 + #$7387, // $7387 + #$7388, // $7388 + #$7389, // $7389 + #$738A, // $738A + #$738B, // $738B + #$738C, // $738C + #$738D, // $738D + #$738E, // $738E + #$738F, // $738F + #$7390, // $7390 + #$7391, // $7391 + #$7392, // $7392 + #$7393, // $7393 + #$7394, // $7394 + #$7395, // $7395 + #$7396, // $7396 + #$7397, // $7397 + #$7398, // $7398 + #$7399, // $7399 + #$739A, // $739A + #$739B, // $739B + #$739C, // $739C + #$739D, // $739D + #$739E, // $739E + #$739F, // $739F + #$73A0, // $73A0 + #$73A1, // $73A1 + #$73A2, // $73A2 + #$73A3, // $73A3 + #$73A4, // $73A4 + #$73A5, // $73A5 + #$73A6, // $73A6 + #$73A7, // $73A7 + #$73A8, // $73A8 + #$73A9, // $73A9 + #$73AA, // $73AA + #$73AB, // $73AB + #$73AC, // $73AC + #$73AD, // $73AD + #$73AE, // $73AE + #$73AF, // $73AF + #$73B0, // $73B0 + #$73B1, // $73B1 + #$73B2, // $73B2 + #$73B3, // $73B3 + #$73B4, // $73B4 + #$73B5, // $73B5 + #$73B6, // $73B6 + #$73B7, // $73B7 + #$73B8, // $73B8 + #$73B9, // $73B9 + #$73BA, // $73BA + #$73BB, // $73BB + #$73BC, // $73BC + #$73BD, // $73BD + #$73BE, // $73BE + #$73BF, // $73BF + #$73C0, // $73C0 + #$73C1, // $73C1 + #$73C2, // $73C2 + #$73C3, // $73C3 + #$73C4, // $73C4 + #$73C5, // $73C5 + #$73C6, // $73C6 + #$73C7, // $73C7 + #$73C8, // $73C8 + #$73C9, // $73C9 + #$73CA, // $73CA + #$73CB, // $73CB + #$73CC, // $73CC + #$73CD, // $73CD + #$73CE, // $73CE + #$73CF, // $73CF + #$73D0, // $73D0 + #$73D1, // $73D1 + #$73D2, // $73D2 + #$73D3, // $73D3 + #$73D4, // $73D4 + #$73D5, // $73D5 + #$73D6, // $73D6 + #$73D7, // $73D7 + #$73D8, // $73D8 + #$73D9, // $73D9 + #$73DA, // $73DA + #$73DB, // $73DB + #$73DC, // $73DC + #$73DD, // $73DD + #$73DE, // $73DE + #$73DF, // $73DF + #$73E0, // $73E0 + #$73E1, // $73E1 + #$73E2, // $73E2 + #$73E3, // $73E3 + #$73E4, // $73E4 + #$73E5, // $73E5 + #$73E6, // $73E6 + #$73E7, // $73E7 + #$73E8, // $73E8 + #$73E9, // $73E9 + #$73EA, // $73EA + #$73EB, // $73EB + #$73EC, // $73EC + #$73ED, // $73ED + #$73EE, // $73EE + #$73EF, // $73EF + #$73F0, // $73F0 + #$73F1, // $73F1 + #$73F2, // $73F2 + #$73F3, // $73F3 + #$73F4, // $73F4 + #$73F5, // $73F5 + #$73F6, // $73F6 + #$73F7, // $73F7 + #$73F8, // $73F8 + #$73F9, // $73F9 + #$73FA, // $73FA + #$73FB, // $73FB + #$73FC, // $73FC + #$73FD, // $73FD + #$73FE, // $73FE + #$73FF, // $73FF + #$7400, // $7400 + #$7401, // $7401 + #$7402, // $7402 + #$7403, // $7403 + #$7404, // $7404 + #$7405, // $7405 + #$7406, // $7406 + #$7407, // $7407 + #$7408, // $7408 + #$7409, // $7409 + #$740A, // $740A + #$740B, // $740B + #$740C, // $740C + #$740D, // $740D + #$740E, // $740E + #$740F, // $740F + #$7410, // $7410 + #$7411, // $7411 + #$7412, // $7412 + #$7413, // $7413 + #$7414, // $7414 + #$7415, // $7415 + #$7416, // $7416 + #$7417, // $7417 + #$7418, // $7418 + #$7419, // $7419 + #$741A, // $741A + #$741B, // $741B + #$741C, // $741C + #$741D, // $741D + #$741E, // $741E + #$741F, // $741F + #$7420, // $7420 + #$7421, // $7421 + #$7422, // $7422 + #$7423, // $7423 + #$7424, // $7424 + #$7425, // $7425 + #$7426, // $7426 + #$7427, // $7427 + #$7428, // $7428 + #$7429, // $7429 + #$742A, // $742A + #$742B, // $742B + #$742C, // $742C + #$742D, // $742D + #$742E, // $742E + #$742F, // $742F + #$7430, // $7430 + #$7431, // $7431 + #$7432, // $7432 + #$7433, // $7433 + #$7434, // $7434 + #$7435, // $7435 + #$7436, // $7436 + #$7437, // $7437 + #$7438, // $7438 + #$7439, // $7439 + #$743A, // $743A + #$743B, // $743B + #$743C, // $743C + #$743D, // $743D + #$743E, // $743E + #$743F, // $743F + #$7440, // $7440 + #$7441, // $7441 + #$7442, // $7442 + #$7443, // $7443 + #$7444, // $7444 + #$7445, // $7445 + #$7446, // $7446 + #$7447, // $7447 + #$7448, // $7448 + #$7449, // $7449 + #$744A, // $744A + #$744B, // $744B + #$744C, // $744C + #$744D, // $744D + #$744E, // $744E + #$744F, // $744F + #$7450, // $7450 + #$7451, // $7451 + #$7452, // $7452 + #$7453, // $7453 + #$7454, // $7454 + #$7455, // $7455 + #$7456, // $7456 + #$7457, // $7457 + #$7458, // $7458 + #$7459, // $7459 + #$745A, // $745A + #$745B, // $745B + #$745C, // $745C + #$745D, // $745D + #$745E, // $745E + #$745F, // $745F + #$7460, // $7460 + #$7461, // $7461 + #$7462, // $7462 + #$7463, // $7463 + #$7464, // $7464 + #$7465, // $7465 + #$7466, // $7466 + #$7467, // $7467 + #$7468, // $7468 + #$7469, // $7469 + #$746A, // $746A + #$746B, // $746B + #$746C, // $746C + #$746D, // $746D + #$746E, // $746E + #$746F, // $746F + #$7470, // $7470 + #$7471, // $7471 + #$7472, // $7472 + #$7473, // $7473 + #$7474, // $7474 + #$7475, // $7475 + #$7476, // $7476 + #$7477, // $7477 + #$7478, // $7478 + #$7479, // $7479 + #$747A, // $747A + #$747B, // $747B + #$747C, // $747C + #$747D, // $747D + #$747E, // $747E + #$747F, // $747F + #$7480, // $7480 + #$7481, // $7481 + #$7482, // $7482 + #$7483, // $7483 + #$7484, // $7484 + #$7485, // $7485 + #$7486, // $7486 + #$7487, // $7487 + #$7488, // $7488 + #$7489, // $7489 + #$748A, // $748A + #$748B, // $748B + #$748C, // $748C + #$748D, // $748D + #$748E, // $748E + #$748F, // $748F + #$7490, // $7490 + #$7491, // $7491 + #$7492, // $7492 + #$7493, // $7493 + #$7494, // $7494 + #$7495, // $7495 + #$7496, // $7496 + #$7497, // $7497 + #$7498, // $7498 + #$7499, // $7499 + #$749A, // $749A + #$749B, // $749B + #$749C, // $749C + #$749D, // $749D + #$749E, // $749E + #$749F, // $749F + #$74A0, // $74A0 + #$74A1, // $74A1 + #$74A2, // $74A2 + #$74A3, // $74A3 + #$74A4, // $74A4 + #$74A5, // $74A5 + #$74A6, // $74A6 + #$74A7, // $74A7 + #$74A8, // $74A8 + #$74A9, // $74A9 + #$74AA, // $74AA + #$74AB, // $74AB + #$74AC, // $74AC + #$74AD, // $74AD + #$74AE, // $74AE + #$74AF, // $74AF + #$74B0, // $74B0 + #$74B1, // $74B1 + #$74B2, // $74B2 + #$74B3, // $74B3 + #$74B4, // $74B4 + #$74B5, // $74B5 + #$74B6, // $74B6 + #$74B7, // $74B7 + #$74B8, // $74B8 + #$74B9, // $74B9 + #$74BA, // $74BA + #$74BB, // $74BB + #$74BC, // $74BC + #$74BD, // $74BD + #$74BE, // $74BE + #$74BF, // $74BF + #$74C0, // $74C0 + #$74C1, // $74C1 + #$74C2, // $74C2 + #$74C3, // $74C3 + #$74C4, // $74C4 + #$74C5, // $74C5 + #$74C6, // $74C6 + #$74C7, // $74C7 + #$74C8, // $74C8 + #$74C9, // $74C9 + #$74CA, // $74CA + #$74CB, // $74CB + #$74CC, // $74CC + #$74CD, // $74CD + #$74CE, // $74CE + #$74CF, // $74CF + #$74D0, // $74D0 + #$74D1, // $74D1 + #$74D2, // $74D2 + #$74D3, // $74D3 + #$74D4, // $74D4 + #$74D5, // $74D5 + #$74D6, // $74D6 + #$74D7, // $74D7 + #$74D8, // $74D8 + #$74D9, // $74D9 + #$74DA, // $74DA + #$74DB, // $74DB + #$74DC, // $74DC + #$74DD, // $74DD + #$74DE, // $74DE + #$74DF, // $74DF + #$74E0, // $74E0 + #$74E1, // $74E1 + #$74E2, // $74E2 + #$74E3, // $74E3 + #$74E4, // $74E4 + #$74E5, // $74E5 + #$74E6, // $74E6 + #$74E7, // $74E7 + #$74E8, // $74E8 + #$74E9, // $74E9 + #$74EA, // $74EA + #$74EB, // $74EB + #$74EC, // $74EC + #$74ED, // $74ED + #$74EE, // $74EE + #$74EF, // $74EF + #$74F0, // $74F0 + #$74F1, // $74F1 + #$74F2, // $74F2 + #$74F3, // $74F3 + #$74F4, // $74F4 + #$74F5, // $74F5 + #$74F6, // $74F6 + #$74F7, // $74F7 + #$74F8, // $74F8 + #$74F9, // $74F9 + #$74FA, // $74FA + #$74FB, // $74FB + #$74FC, // $74FC + #$74FD, // $74FD + #$74FE, // $74FE + #$74FF, // $74FF + #$7500, // $7500 + #$7501, // $7501 + #$7502, // $7502 + #$7503, // $7503 + #$7504, // $7504 + #$7505, // $7505 + #$7506, // $7506 + #$7507, // $7507 + #$7508, // $7508 + #$7509, // $7509 + #$750A, // $750A + #$750B, // $750B + #$750C, // $750C + #$750D, // $750D + #$750E, // $750E + #$750F, // $750F + #$7510, // $7510 + #$7511, // $7511 + #$7512, // $7512 + #$7513, // $7513 + #$7514, // $7514 + #$7515, // $7515 + #$7516, // $7516 + #$7517, // $7517 + #$7518, // $7518 + #$7519, // $7519 + #$751A, // $751A + #$751B, // $751B + #$751C, // $751C + #$751D, // $751D + #$751E, // $751E + #$751F, // $751F + #$7520, // $7520 + #$7521, // $7521 + #$7522, // $7522 + #$7523, // $7523 + #$7524, // $7524 + #$7525, // $7525 + #$7526, // $7526 + #$7527, // $7527 + #$7528, // $7528 + #$7529, // $7529 + #$752A, // $752A + #$752B, // $752B + #$752C, // $752C + #$752D, // $752D + #$752E, // $752E + #$752F, // $752F + #$7530, // $7530 + #$7531, // $7531 + #$7532, // $7532 + #$7533, // $7533 + #$7534, // $7534 + #$7535, // $7535 + #$7536, // $7536 + #$7537, // $7537 + #$7538, // $7538 + #$7539, // $7539 + #$753A, // $753A + #$753B, // $753B + #$753C, // $753C + #$753D, // $753D + #$753E, // $753E + #$753F, // $753F + #$7540, // $7540 + #$7541, // $7541 + #$7542, // $7542 + #$7543, // $7543 + #$7544, // $7544 + #$7545, // $7545 + #$7546, // $7546 + #$7547, // $7547 + #$7548, // $7548 + #$7549, // $7549 + #$754A, // $754A + #$754B, // $754B + #$754C, // $754C + #$754D, // $754D + #$754E, // $754E + #$754F, // $754F + #$7550, // $7550 + #$7551, // $7551 + #$7552, // $7552 + #$7553, // $7553 + #$7554, // $7554 + #$7555, // $7555 + #$7556, // $7556 + #$7557, // $7557 + #$7558, // $7558 + #$7559, // $7559 + #$755A, // $755A + #$755B, // $755B + #$755C, // $755C + #$755D, // $755D + #$755E, // $755E + #$755F, // $755F + #$7560, // $7560 + #$7561, // $7561 + #$7562, // $7562 + #$7563, // $7563 + #$7564, // $7564 + #$7565, // $7565 + #$7566, // $7566 + #$7567, // $7567 + #$7568, // $7568 + #$7569, // $7569 + #$756A, // $756A + #$756B, // $756B + #$756C, // $756C + #$756D, // $756D + #$756E, // $756E + #$756F, // $756F + #$7570, // $7570 + #$7571, // $7571 + #$7572, // $7572 + #$7573, // $7573 + #$7574, // $7574 + #$7575, // $7575 + #$7576, // $7576 + #$7577, // $7577 + #$7578, // $7578 + #$7579, // $7579 + #$757A, // $757A + #$757B, // $757B + #$757C, // $757C + #$757D, // $757D + #$757E, // $757E + #$757F, // $757F + #$7580, // $7580 + #$7581, // $7581 + #$7582, // $7582 + #$7583, // $7583 + #$7584, // $7584 + #$7585, // $7585 + #$7586, // $7586 + #$7587, // $7587 + #$7588, // $7588 + #$7589, // $7589 + #$758A, // $758A + #$758B, // $758B + #$758C, // $758C + #$758D, // $758D + #$758E, // $758E + #$758F, // $758F + #$7590, // $7590 + #$7591, // $7591 + #$7592, // $7592 + #$7593, // $7593 + #$7594, // $7594 + #$7595, // $7595 + #$7596, // $7596 + #$7597, // $7597 + #$7598, // $7598 + #$7599, // $7599 + #$759A, // $759A + #$759B, // $759B + #$759C, // $759C + #$759D, // $759D + #$759E, // $759E + #$759F, // $759F + #$75A0, // $75A0 + #$75A1, // $75A1 + #$75A2, // $75A2 + #$75A3, // $75A3 + #$75A4, // $75A4 + #$75A5, // $75A5 + #$75A6, // $75A6 + #$75A7, // $75A7 + #$75A8, // $75A8 + #$75A9, // $75A9 + #$75AA, // $75AA + #$75AB, // $75AB + #$75AC, // $75AC + #$75AD, // $75AD + #$75AE, // $75AE + #$75AF, // $75AF + #$75B0, // $75B0 + #$75B1, // $75B1 + #$75B2, // $75B2 + #$75B3, // $75B3 + #$75B4, // $75B4 + #$75B5, // $75B5 + #$75B6, // $75B6 + #$75B7, // $75B7 + #$75B8, // $75B8 + #$75B9, // $75B9 + #$75BA, // $75BA + #$75BB, // $75BB + #$75BC, // $75BC + #$75BD, // $75BD + #$75BE, // $75BE + #$75BF, // $75BF + #$75C0, // $75C0 + #$75C1, // $75C1 + #$75C2, // $75C2 + #$75C3, // $75C3 + #$75C4, // $75C4 + #$75C5, // $75C5 + #$75C6, // $75C6 + #$75C7, // $75C7 + #$75C8, // $75C8 + #$75C9, // $75C9 + #$75CA, // $75CA + #$75CB, // $75CB + #$75CC, // $75CC + #$75CD, // $75CD + #$75CE, // $75CE + #$75CF, // $75CF + #$75D0, // $75D0 + #$75D1, // $75D1 + #$75D2, // $75D2 + #$75D3, // $75D3 + #$75D4, // $75D4 + #$75D5, // $75D5 + #$75D6, // $75D6 + #$75D7, // $75D7 + #$75D8, // $75D8 + #$75D9, // $75D9 + #$75DA, // $75DA + #$75DB, // $75DB + #$75DC, // $75DC + #$75DD, // $75DD + #$75DE, // $75DE + #$75DF, // $75DF + #$75E0, // $75E0 + #$75E1, // $75E1 + #$75E2, // $75E2 + #$75E3, // $75E3 + #$75E4, // $75E4 + #$75E5, // $75E5 + #$75E6, // $75E6 + #$75E7, // $75E7 + #$75E8, // $75E8 + #$75E9, // $75E9 + #$75EA, // $75EA + #$75EB, // $75EB + #$75EC, // $75EC + #$75ED, // $75ED + #$75EE, // $75EE + #$75EF, // $75EF + #$75F0, // $75F0 + #$75F1, // $75F1 + #$75F2, // $75F2 + #$75F3, // $75F3 + #$75F4, // $75F4 + #$75F5, // $75F5 + #$75F6, // $75F6 + #$75F7, // $75F7 + #$75F8, // $75F8 + #$75F9, // $75F9 + #$75FA, // $75FA + #$75FB, // $75FB + #$75FC, // $75FC + #$75FD, // $75FD + #$75FE, // $75FE + #$75FF, // $75FF + #$7600, // $7600 + #$7601, // $7601 + #$7602, // $7602 + #$7603, // $7603 + #$7604, // $7604 + #$7605, // $7605 + #$7606, // $7606 + #$7607, // $7607 + #$7608, // $7608 + #$7609, // $7609 + #$760A, // $760A + #$760B, // $760B + #$760C, // $760C + #$760D, // $760D + #$760E, // $760E + #$760F, // $760F + #$7610, // $7610 + #$7611, // $7611 + #$7612, // $7612 + #$7613, // $7613 + #$7614, // $7614 + #$7615, // $7615 + #$7616, // $7616 + #$7617, // $7617 + #$7618, // $7618 + #$7619, // $7619 + #$761A, // $761A + #$761B, // $761B + #$761C, // $761C + #$761D, // $761D + #$761E, // $761E + #$761F, // $761F + #$7620, // $7620 + #$7621, // $7621 + #$7622, // $7622 + #$7623, // $7623 + #$7624, // $7624 + #$7625, // $7625 + #$7626, // $7626 + #$7627, // $7627 + #$7628, // $7628 + #$7629, // $7629 + #$762A, // $762A + #$762B, // $762B + #$762C, // $762C + #$762D, // $762D + #$762E, // $762E + #$762F, // $762F + #$7630, // $7630 + #$7631, // $7631 + #$7632, // $7632 + #$7633, // $7633 + #$7634, // $7634 + #$7635, // $7635 + #$7636, // $7636 + #$7637, // $7637 + #$7638, // $7638 + #$7639, // $7639 + #$763A, // $763A + #$763B, // $763B + #$763C, // $763C + #$763D, // $763D + #$763E, // $763E + #$763F, // $763F + #$7640, // $7640 + #$7641, // $7641 + #$7642, // $7642 + #$7643, // $7643 + #$7644, // $7644 + #$7645, // $7645 + #$7646, // $7646 + #$7647, // $7647 + #$7648, // $7648 + #$7649, // $7649 + #$764A, // $764A + #$764B, // $764B + #$764C, // $764C + #$764D, // $764D + #$764E, // $764E + #$764F, // $764F + #$7650, // $7650 + #$7651, // $7651 + #$7652, // $7652 + #$7653, // $7653 + #$7654, // $7654 + #$7655, // $7655 + #$7656, // $7656 + #$7657, // $7657 + #$7658, // $7658 + #$7659, // $7659 + #$765A, // $765A + #$765B, // $765B + #$765C, // $765C + #$765D, // $765D + #$765E, // $765E + #$765F, // $765F + #$7660, // $7660 + #$7661, // $7661 + #$7662, // $7662 + #$7663, // $7663 + #$7664, // $7664 + #$7665, // $7665 + #$7666, // $7666 + #$7667, // $7667 + #$7668, // $7668 + #$7669, // $7669 + #$766A, // $766A + #$766B, // $766B + #$766C, // $766C + #$766D, // $766D + #$766E, // $766E + #$766F, // $766F + #$7670, // $7670 + #$7671, // $7671 + #$7672, // $7672 + #$7673, // $7673 + #$7674, // $7674 + #$7675, // $7675 + #$7676, // $7676 + #$7677, // $7677 + #$7678, // $7678 + #$7679, // $7679 + #$767A, // $767A + #$767B, // $767B + #$767C, // $767C + #$767D, // $767D + #$767E, // $767E + #$767F, // $767F + #$7680, // $7680 + #$7681, // $7681 + #$7682, // $7682 + #$7683, // $7683 + #$7684, // $7684 + #$7685, // $7685 + #$7686, // $7686 + #$7687, // $7687 + #$7688, // $7688 + #$7689, // $7689 + #$768A, // $768A + #$768B, // $768B + #$768C, // $768C + #$768D, // $768D + #$768E, // $768E + #$768F, // $768F + #$7690, // $7690 + #$7691, // $7691 + #$7692, // $7692 + #$7693, // $7693 + #$7694, // $7694 + #$7695, // $7695 + #$7696, // $7696 + #$7697, // $7697 + #$7698, // $7698 + #$7699, // $7699 + #$769A, // $769A + #$769B, // $769B + #$769C, // $769C + #$769D, // $769D + #$769E, // $769E + #$769F, // $769F + #$76A0, // $76A0 + #$76A1, // $76A1 + #$76A2, // $76A2 + #$76A3, // $76A3 + #$76A4, // $76A4 + #$76A5, // $76A5 + #$76A6, // $76A6 + #$76A7, // $76A7 + #$76A8, // $76A8 + #$76A9, // $76A9 + #$76AA, // $76AA + #$76AB, // $76AB + #$76AC, // $76AC + #$76AD, // $76AD + #$76AE, // $76AE + #$76AF, // $76AF + #$76B0, // $76B0 + #$76B1, // $76B1 + #$76B2, // $76B2 + #$76B3, // $76B3 + #$76B4, // $76B4 + #$76B5, // $76B5 + #$76B6, // $76B6 + #$76B7, // $76B7 + #$76B8, // $76B8 + #$76B9, // $76B9 + #$76BA, // $76BA + #$76BB, // $76BB + #$76BC, // $76BC + #$76BD, // $76BD + #$76BE, // $76BE + #$76BF, // $76BF + #$76C0, // $76C0 + #$76C1, // $76C1 + #$76C2, // $76C2 + #$76C3, // $76C3 + #$76C4, // $76C4 + #$76C5, // $76C5 + #$76C6, // $76C6 + #$76C7, // $76C7 + #$76C8, // $76C8 + #$76C9, // $76C9 + #$76CA, // $76CA + #$76CB, // $76CB + #$76CC, // $76CC + #$76CD, // $76CD + #$76CE, // $76CE + #$76CF, // $76CF + #$76D0, // $76D0 + #$76D1, // $76D1 + #$76D2, // $76D2 + #$76D3, // $76D3 + #$76D4, // $76D4 + #$76D5, // $76D5 + #$76D6, // $76D6 + #$76D7, // $76D7 + #$76D8, // $76D8 + #$76D9, // $76D9 + #$76DA, // $76DA + #$76DB, // $76DB + #$76DC, // $76DC + #$76DD, // $76DD + #$76DE, // $76DE + #$76DF, // $76DF + #$76E0, // $76E0 + #$76E1, // $76E1 + #$76E2, // $76E2 + #$76E3, // $76E3 + #$76E4, // $76E4 + #$76E5, // $76E5 + #$76E6, // $76E6 + #$76E7, // $76E7 + #$76E8, // $76E8 + #$76E9, // $76E9 + #$76EA, // $76EA + #$76EB, // $76EB + #$76EC, // $76EC + #$76ED, // $76ED + #$76EE, // $76EE + #$76EF, // $76EF + #$76F0, // $76F0 + #$76F1, // $76F1 + #$76F2, // $76F2 + #$76F3, // $76F3 + #$76F4, // $76F4 + #$76F5, // $76F5 + #$76F6, // $76F6 + #$76F7, // $76F7 + #$76F8, // $76F8 + #$76F9, // $76F9 + #$76FA, // $76FA + #$76FB, // $76FB + #$76FC, // $76FC + #$76FD, // $76FD + #$76FE, // $76FE + #$76FF, // $76FF + #$7700, // $7700 + #$7701, // $7701 + #$7702, // $7702 + #$7703, // $7703 + #$7704, // $7704 + #$7705, // $7705 + #$7706, // $7706 + #$7707, // $7707 + #$7708, // $7708 + #$7709, // $7709 + #$770A, // $770A + #$770B, // $770B + #$770C, // $770C + #$770D, // $770D + #$770E, // $770E + #$770F, // $770F + #$7710, // $7710 + #$7711, // $7711 + #$7712, // $7712 + #$7713, // $7713 + #$7714, // $7714 + #$7715, // $7715 + #$7716, // $7716 + #$7717, // $7717 + #$7718, // $7718 + #$7719, // $7719 + #$771A, // $771A + #$771B, // $771B + #$771C, // $771C + #$771D, // $771D + #$771E, // $771E + #$771F, // $771F + #$7720, // $7720 + #$7721, // $7721 + #$7722, // $7722 + #$7723, // $7723 + #$7724, // $7724 + #$7725, // $7725 + #$7726, // $7726 + #$7727, // $7727 + #$7728, // $7728 + #$7729, // $7729 + #$772A, // $772A + #$772B, // $772B + #$772C, // $772C + #$772D, // $772D + #$772E, // $772E + #$772F, // $772F + #$7730, // $7730 + #$7731, // $7731 + #$7732, // $7732 + #$7733, // $7733 + #$7734, // $7734 + #$7735, // $7735 + #$7736, // $7736 + #$7737, // $7737 + #$7738, // $7738 + #$7739, // $7739 + #$773A, // $773A + #$773B, // $773B + #$773C, // $773C + #$773D, // $773D + #$773E, // $773E + #$773F, // $773F + #$7740, // $7740 + #$7741, // $7741 + #$7742, // $7742 + #$7743, // $7743 + #$7744, // $7744 + #$7745, // $7745 + #$7746, // $7746 + #$7747, // $7747 + #$7748, // $7748 + #$7749, // $7749 + #$774A, // $774A + #$774B, // $774B + #$774C, // $774C + #$774D, // $774D + #$774E, // $774E + #$774F, // $774F + #$7750, // $7750 + #$7751, // $7751 + #$7752, // $7752 + #$7753, // $7753 + #$7754, // $7754 + #$7755, // $7755 + #$7756, // $7756 + #$7757, // $7757 + #$7758, // $7758 + #$7759, // $7759 + #$775A, // $775A + #$775B, // $775B + #$775C, // $775C + #$775D, // $775D + #$775E, // $775E + #$775F, // $775F + #$7760, // $7760 + #$7761, // $7761 + #$7762, // $7762 + #$7763, // $7763 + #$7764, // $7764 + #$7765, // $7765 + #$7766, // $7766 + #$7767, // $7767 + #$7768, // $7768 + #$7769, // $7769 + #$776A, // $776A + #$776B, // $776B + #$776C, // $776C + #$776D, // $776D + #$776E, // $776E + #$776F, // $776F + #$7770, // $7770 + #$7771, // $7771 + #$7772, // $7772 + #$7773, // $7773 + #$7774, // $7774 + #$7775, // $7775 + #$7776, // $7776 + #$7777, // $7777 + #$7778, // $7778 + #$7779, // $7779 + #$777A, // $777A + #$777B, // $777B + #$777C, // $777C + #$777D, // $777D + #$777E, // $777E + #$777F, // $777F + #$7780, // $7780 + #$7781, // $7781 + #$7782, // $7782 + #$7783, // $7783 + #$7784, // $7784 + #$7785, // $7785 + #$7786, // $7786 + #$7787, // $7787 + #$7788, // $7788 + #$7789, // $7789 + #$778A, // $778A + #$778B, // $778B + #$778C, // $778C + #$778D, // $778D + #$778E, // $778E + #$778F, // $778F + #$7790, // $7790 + #$7791, // $7791 + #$7792, // $7792 + #$7793, // $7793 + #$7794, // $7794 + #$7795, // $7795 + #$7796, // $7796 + #$7797, // $7797 + #$7798, // $7798 + #$7799, // $7799 + #$779A, // $779A + #$779B, // $779B + #$779C, // $779C + #$779D, // $779D + #$779E, // $779E + #$779F, // $779F + #$77A0, // $77A0 + #$77A1, // $77A1 + #$77A2, // $77A2 + #$77A3, // $77A3 + #$77A4, // $77A4 + #$77A5, // $77A5 + #$77A6, // $77A6 + #$77A7, // $77A7 + #$77A8, // $77A8 + #$77A9, // $77A9 + #$77AA, // $77AA + #$77AB, // $77AB + #$77AC, // $77AC + #$77AD, // $77AD + #$77AE, // $77AE + #$77AF, // $77AF + #$77B0, // $77B0 + #$77B1, // $77B1 + #$77B2, // $77B2 + #$77B3, // $77B3 + #$77B4, // $77B4 + #$77B5, // $77B5 + #$77B6, // $77B6 + #$77B7, // $77B7 + #$77B8, // $77B8 + #$77B9, // $77B9 + #$77BA, // $77BA + #$77BB, // $77BB + #$77BC, // $77BC + #$77BD, // $77BD + #$77BE, // $77BE + #$77BF, // $77BF + #$77C0, // $77C0 + #$77C1, // $77C1 + #$77C2, // $77C2 + #$77C3, // $77C3 + #$77C4, // $77C4 + #$77C5, // $77C5 + #$77C6, // $77C6 + #$77C7, // $77C7 + #$77C8, // $77C8 + #$77C9, // $77C9 + #$77CA, // $77CA + #$77CB, // $77CB + #$77CC, // $77CC + #$77CD, // $77CD + #$77CE, // $77CE + #$77CF, // $77CF + #$77D0, // $77D0 + #$77D1, // $77D1 + #$77D2, // $77D2 + #$77D3, // $77D3 + #$77D4, // $77D4 + #$77D5, // $77D5 + #$77D6, // $77D6 + #$77D7, // $77D7 + #$77D8, // $77D8 + #$77D9, // $77D9 + #$77DA, // $77DA + #$77DB, // $77DB + #$77DC, // $77DC + #$77DD, // $77DD + #$77DE, // $77DE + #$77DF, // $77DF + #$77E0, // $77E0 + #$77E1, // $77E1 + #$77E2, // $77E2 + #$77E3, // $77E3 + #$77E4, // $77E4 + #$77E5, // $77E5 + #$77E6, // $77E6 + #$77E7, // $77E7 + #$77E8, // $77E8 + #$77E9, // $77E9 + #$77EA, // $77EA + #$77EB, // $77EB + #$77EC, // $77EC + #$77ED, // $77ED + #$77EE, // $77EE + #$77EF, // $77EF + #$77F0, // $77F0 + #$77F1, // $77F1 + #$77F2, // $77F2 + #$77F3, // $77F3 + #$77F4, // $77F4 + #$77F5, // $77F5 + #$77F6, // $77F6 + #$77F7, // $77F7 + #$77F8, // $77F8 + #$77F9, // $77F9 + #$77FA, // $77FA + #$77FB, // $77FB + #$77FC, // $77FC + #$77FD, // $77FD + #$77FE, // $77FE + #$77FF, // $77FF + #$7800, // $7800 + #$7801, // $7801 + #$7802, // $7802 + #$7803, // $7803 + #$7804, // $7804 + #$7805, // $7805 + #$7806, // $7806 + #$7807, // $7807 + #$7808, // $7808 + #$7809, // $7809 + #$780A, // $780A + #$780B, // $780B + #$780C, // $780C + #$780D, // $780D + #$780E, // $780E + #$780F, // $780F + #$7810, // $7810 + #$7811, // $7811 + #$7812, // $7812 + #$7813, // $7813 + #$7814, // $7814 + #$7815, // $7815 + #$7816, // $7816 + #$7817, // $7817 + #$7818, // $7818 + #$7819, // $7819 + #$781A, // $781A + #$781B, // $781B + #$781C, // $781C + #$781D, // $781D + #$781E, // $781E + #$781F, // $781F + #$7820, // $7820 + #$7821, // $7821 + #$7822, // $7822 + #$7823, // $7823 + #$7824, // $7824 + #$7825, // $7825 + #$7826, // $7826 + #$7827, // $7827 + #$7828, // $7828 + #$7829, // $7829 + #$782A, // $782A + #$782B, // $782B + #$782C, // $782C + #$782D, // $782D + #$782E, // $782E + #$782F, // $782F + #$7830, // $7830 + #$7831, // $7831 + #$7832, // $7832 + #$7833, // $7833 + #$7834, // $7834 + #$7835, // $7835 + #$7836, // $7836 + #$7837, // $7837 + #$7838, // $7838 + #$7839, // $7839 + #$783A, // $783A + #$783B, // $783B + #$783C, // $783C + #$783D, // $783D + #$783E, // $783E + #$783F, // $783F + #$7840, // $7840 + #$7841, // $7841 + #$7842, // $7842 + #$7843, // $7843 + #$7844, // $7844 + #$7845, // $7845 + #$7846, // $7846 + #$7847, // $7847 + #$7848, // $7848 + #$7849, // $7849 + #$784A, // $784A + #$784B, // $784B + #$784C, // $784C + #$784D, // $784D + #$784E, // $784E + #$784F, // $784F + #$7850, // $7850 + #$7851, // $7851 + #$7852, // $7852 + #$7853, // $7853 + #$7854, // $7854 + #$7855, // $7855 + #$7856, // $7856 + #$7857, // $7857 + #$7858, // $7858 + #$7859, // $7859 + #$785A, // $785A + #$785B, // $785B + #$785C, // $785C + #$785D, // $785D + #$785E, // $785E + #$785F, // $785F + #$7860, // $7860 + #$7861, // $7861 + #$7862, // $7862 + #$7863, // $7863 + #$7864, // $7864 + #$7865, // $7865 + #$7866, // $7866 + #$7867, // $7867 + #$7868, // $7868 + #$7869, // $7869 + #$786A, // $786A + #$786B, // $786B + #$786C, // $786C + #$786D, // $786D + #$786E, // $786E + #$786F, // $786F + #$7870, // $7870 + #$7871, // $7871 + #$7872, // $7872 + #$7873, // $7873 + #$7874, // $7874 + #$7875, // $7875 + #$7876, // $7876 + #$7877, // $7877 + #$7878, // $7878 + #$7879, // $7879 + #$787A, // $787A + #$787B, // $787B + #$787C, // $787C + #$787D, // $787D + #$787E, // $787E + #$787F, // $787F + #$7880, // $7880 + #$7881, // $7881 + #$7882, // $7882 + #$7883, // $7883 + #$7884, // $7884 + #$7885, // $7885 + #$7886, // $7886 + #$7887, // $7887 + #$7888, // $7888 + #$7889, // $7889 + #$788A, // $788A + #$788B, // $788B + #$788C, // $788C + #$788D, // $788D + #$788E, // $788E + #$788F, // $788F + #$7890, // $7890 + #$7891, // $7891 + #$7892, // $7892 + #$7893, // $7893 + #$7894, // $7894 + #$7895, // $7895 + #$7896, // $7896 + #$7897, // $7897 + #$7898, // $7898 + #$7899, // $7899 + #$789A, // $789A + #$789B, // $789B + #$789C, // $789C + #$789D, // $789D + #$789E, // $789E + #$789F, // $789F + #$78A0, // $78A0 + #$78A1, // $78A1 + #$78A2, // $78A2 + #$78A3, // $78A3 + #$78A4, // $78A4 + #$78A5, // $78A5 + #$78A6, // $78A6 + #$78A7, // $78A7 + #$78A8, // $78A8 + #$78A9, // $78A9 + #$78AA, // $78AA + #$78AB, // $78AB + #$78AC, // $78AC + #$78AD, // $78AD + #$78AE, // $78AE + #$78AF, // $78AF + #$78B0, // $78B0 + #$78B1, // $78B1 + #$78B2, // $78B2 + #$78B3, // $78B3 + #$78B4, // $78B4 + #$78B5, // $78B5 + #$78B6, // $78B6 + #$78B7, // $78B7 + #$78B8, // $78B8 + #$78B9, // $78B9 + #$78BA, // $78BA + #$78BB, // $78BB + #$78BC, // $78BC + #$78BD, // $78BD + #$78BE, // $78BE + #$78BF, // $78BF + #$78C0, // $78C0 + #$78C1, // $78C1 + #$78C2, // $78C2 + #$78C3, // $78C3 + #$78C4, // $78C4 + #$78C5, // $78C5 + #$78C6, // $78C6 + #$78C7, // $78C7 + #$78C8, // $78C8 + #$78C9, // $78C9 + #$78CA, // $78CA + #$78CB, // $78CB + #$78CC, // $78CC + #$78CD, // $78CD + #$78CE, // $78CE + #$78CF, // $78CF + #$78D0, // $78D0 + #$78D1, // $78D1 + #$78D2, // $78D2 + #$78D3, // $78D3 + #$78D4, // $78D4 + #$78D5, // $78D5 + #$78D6, // $78D6 + #$78D7, // $78D7 + #$78D8, // $78D8 + #$78D9, // $78D9 + #$78DA, // $78DA + #$78DB, // $78DB + #$78DC, // $78DC + #$78DD, // $78DD + #$78DE, // $78DE + #$78DF, // $78DF + #$78E0, // $78E0 + #$78E1, // $78E1 + #$78E2, // $78E2 + #$78E3, // $78E3 + #$78E4, // $78E4 + #$78E5, // $78E5 + #$78E6, // $78E6 + #$78E7, // $78E7 + #$78E8, // $78E8 + #$78E9, // $78E9 + #$78EA, // $78EA + #$78EB, // $78EB + #$78EC, // $78EC + #$78ED, // $78ED + #$78EE, // $78EE + #$78EF, // $78EF + #$78F0, // $78F0 + #$78F1, // $78F1 + #$78F2, // $78F2 + #$78F3, // $78F3 + #$78F4, // $78F4 + #$78F5, // $78F5 + #$78F6, // $78F6 + #$78F7, // $78F7 + #$78F8, // $78F8 + #$78F9, // $78F9 + #$78FA, // $78FA + #$78FB, // $78FB + #$78FC, // $78FC + #$78FD, // $78FD + #$78FE, // $78FE + #$78FF, // $78FF + #$7900, // $7900 + #$7901, // $7901 + #$7902, // $7902 + #$7903, // $7903 + #$7904, // $7904 + #$7905, // $7905 + #$7906, // $7906 + #$7907, // $7907 + #$7908, // $7908 + #$7909, // $7909 + #$790A, // $790A + #$790B, // $790B + #$790C, // $790C + #$790D, // $790D + #$790E, // $790E + #$790F, // $790F + #$7910, // $7910 + #$7911, // $7911 + #$7912, // $7912 + #$7913, // $7913 + #$7914, // $7914 + #$7915, // $7915 + #$7916, // $7916 + #$7917, // $7917 + #$7918, // $7918 + #$7919, // $7919 + #$791A, // $791A + #$791B, // $791B + #$791C, // $791C + #$791D, // $791D + #$791E, // $791E + #$791F, // $791F + #$7920, // $7920 + #$7921, // $7921 + #$7922, // $7922 + #$7923, // $7923 + #$7924, // $7924 + #$7925, // $7925 + #$7926, // $7926 + #$7927, // $7927 + #$7928, // $7928 + #$7929, // $7929 + #$792A, // $792A + #$792B, // $792B + #$792C, // $792C + #$792D, // $792D + #$792E, // $792E + #$792F, // $792F + #$7930, // $7930 + #$7931, // $7931 + #$7932, // $7932 + #$7933, // $7933 + #$7934, // $7934 + #$7935, // $7935 + #$7936, // $7936 + #$7937, // $7937 + #$7938, // $7938 + #$7939, // $7939 + #$793A, // $793A + #$793B, // $793B + #$793C, // $793C + #$793D, // $793D + #$793E, // $793E + #$793F, // $793F + #$7940, // $7940 + #$7941, // $7941 + #$7942, // $7942 + #$7943, // $7943 + #$7944, // $7944 + #$7945, // $7945 + #$7946, // $7946 + #$7947, // $7947 + #$7948, // $7948 + #$7949, // $7949 + #$794A, // $794A + #$794B, // $794B + #$794C, // $794C + #$794D, // $794D + #$794E, // $794E + #$794F, // $794F + #$7950, // $7950 + #$7951, // $7951 + #$7952, // $7952 + #$7953, // $7953 + #$7954, // $7954 + #$7955, // $7955 + #$7956, // $7956 + #$7957, // $7957 + #$7958, // $7958 + #$7959, // $7959 + #$795A, // $795A + #$795B, // $795B + #$795C, // $795C + #$795D, // $795D + #$795E, // $795E + #$795F, // $795F + #$7960, // $7960 + #$7961, // $7961 + #$7962, // $7962 + #$7963, // $7963 + #$7964, // $7964 + #$7965, // $7965 + #$7966, // $7966 + #$7967, // $7967 + #$7968, // $7968 + #$7969, // $7969 + #$796A, // $796A + #$796B, // $796B + #$796C, // $796C + #$796D, // $796D + #$796E, // $796E + #$796F, // $796F + #$7970, // $7970 + #$7971, // $7971 + #$7972, // $7972 + #$7973, // $7973 + #$7974, // $7974 + #$7975, // $7975 + #$7976, // $7976 + #$7977, // $7977 + #$7978, // $7978 + #$7979, // $7979 + #$797A, // $797A + #$797B, // $797B + #$797C, // $797C + #$797D, // $797D + #$797E, // $797E + #$797F, // $797F + #$7980, // $7980 + #$7981, // $7981 + #$7982, // $7982 + #$7983, // $7983 + #$7984, // $7984 + #$7985, // $7985 + #$7986, // $7986 + #$7987, // $7987 + #$7988, // $7988 + #$7989, // $7989 + #$798A, // $798A + #$798B, // $798B + #$798C, // $798C + #$798D, // $798D + #$798E, // $798E + #$798F, // $798F + #$7990, // $7990 + #$7991, // $7991 + #$7992, // $7992 + #$7993, // $7993 + #$7994, // $7994 + #$7995, // $7995 + #$7996, // $7996 + #$7997, // $7997 + #$7998, // $7998 + #$7999, // $7999 + #$799A, // $799A + #$799B, // $799B + #$799C, // $799C + #$799D, // $799D + #$799E, // $799E + #$799F, // $799F + #$79A0, // $79A0 + #$79A1, // $79A1 + #$79A2, // $79A2 + #$79A3, // $79A3 + #$79A4, // $79A4 + #$79A5, // $79A5 + #$79A6, // $79A6 + #$79A7, // $79A7 + #$79A8, // $79A8 + #$79A9, // $79A9 + #$79AA, // $79AA + #$79AB, // $79AB + #$79AC, // $79AC + #$79AD, // $79AD + #$79AE, // $79AE + #$79AF, // $79AF + #$79B0, // $79B0 + #$79B1, // $79B1 + #$79B2, // $79B2 + #$79B3, // $79B3 + #$79B4, // $79B4 + #$79B5, // $79B5 + #$79B6, // $79B6 + #$79B7, // $79B7 + #$79B8, // $79B8 + #$79B9, // $79B9 + #$79BA, // $79BA + #$79BB, // $79BB + #$79BC, // $79BC + #$79BD, // $79BD + #$79BE, // $79BE + #$79BF, // $79BF + #$79C0, // $79C0 + #$79C1, // $79C1 + #$79C2, // $79C2 + #$79C3, // $79C3 + #$79C4, // $79C4 + #$79C5, // $79C5 + #$79C6, // $79C6 + #$79C7, // $79C7 + #$79C8, // $79C8 + #$79C9, // $79C9 + #$79CA, // $79CA + #$79CB, // $79CB + #$79CC, // $79CC + #$79CD, // $79CD + #$79CE, // $79CE + #$79CF, // $79CF + #$79D0, // $79D0 + #$79D1, // $79D1 + #$79D2, // $79D2 + #$79D3, // $79D3 + #$79D4, // $79D4 + #$79D5, // $79D5 + #$79D6, // $79D6 + #$79D7, // $79D7 + #$79D8, // $79D8 + #$79D9, // $79D9 + #$79DA, // $79DA + #$79DB, // $79DB + #$79DC, // $79DC + #$79DD, // $79DD + #$79DE, // $79DE + #$79DF, // $79DF + #$79E0, // $79E0 + #$79E1, // $79E1 + #$79E2, // $79E2 + #$79E3, // $79E3 + #$79E4, // $79E4 + #$79E5, // $79E5 + #$79E6, // $79E6 + #$79E7, // $79E7 + #$79E8, // $79E8 + #$79E9, // $79E9 + #$79EA, // $79EA + #$79EB, // $79EB + #$79EC, // $79EC + #$79ED, // $79ED + #$79EE, // $79EE + #$79EF, // $79EF + #$79F0, // $79F0 + #$79F1, // $79F1 + #$79F2, // $79F2 + #$79F3, // $79F3 + #$79F4, // $79F4 + #$79F5, // $79F5 + #$79F6, // $79F6 + #$79F7, // $79F7 + #$79F8, // $79F8 + #$79F9, // $79F9 + #$79FA, // $79FA + #$79FB, // $79FB + #$79FC, // $79FC + #$79FD, // $79FD + #$79FE, // $79FE + #$79FF, // $79FF + #$7A00, // $7A00 + #$7A01, // $7A01 + #$7A02, // $7A02 + #$7A03, // $7A03 + #$7A04, // $7A04 + #$7A05, // $7A05 + #$7A06, // $7A06 + #$7A07, // $7A07 + #$7A08, // $7A08 + #$7A09, // $7A09 + #$7A0A, // $7A0A + #$7A0B, // $7A0B + #$7A0C, // $7A0C + #$7A0D, // $7A0D + #$7A0E, // $7A0E + #$7A0F, // $7A0F + #$7A10, // $7A10 + #$7A11, // $7A11 + #$7A12, // $7A12 + #$7A13, // $7A13 + #$7A14, // $7A14 + #$7A15, // $7A15 + #$7A16, // $7A16 + #$7A17, // $7A17 + #$7A18, // $7A18 + #$7A19, // $7A19 + #$7A1A, // $7A1A + #$7A1B, // $7A1B + #$7A1C, // $7A1C + #$7A1D, // $7A1D + #$7A1E, // $7A1E + #$7A1F, // $7A1F + #$7A20, // $7A20 + #$7A21, // $7A21 + #$7A22, // $7A22 + #$7A23, // $7A23 + #$7A24, // $7A24 + #$7A25, // $7A25 + #$7A26, // $7A26 + #$7A27, // $7A27 + #$7A28, // $7A28 + #$7A29, // $7A29 + #$7A2A, // $7A2A + #$7A2B, // $7A2B + #$7A2C, // $7A2C + #$7A2D, // $7A2D + #$7A2E, // $7A2E + #$7A2F, // $7A2F + #$7A30, // $7A30 + #$7A31, // $7A31 + #$7A32, // $7A32 + #$7A33, // $7A33 + #$7A34, // $7A34 + #$7A35, // $7A35 + #$7A36, // $7A36 + #$7A37, // $7A37 + #$7A38, // $7A38 + #$7A39, // $7A39 + #$7A3A, // $7A3A + #$7A3B, // $7A3B + #$7A3C, // $7A3C + #$7A3D, // $7A3D + #$7A3E, // $7A3E + #$7A3F, // $7A3F + #$7A40, // $7A40 + #$7A41, // $7A41 + #$7A42, // $7A42 + #$7A43, // $7A43 + #$7A44, // $7A44 + #$7A45, // $7A45 + #$7A46, // $7A46 + #$7A47, // $7A47 + #$7A48, // $7A48 + #$7A49, // $7A49 + #$7A4A, // $7A4A + #$7A4B, // $7A4B + #$7A4C, // $7A4C + #$7A4D, // $7A4D + #$7A4E, // $7A4E + #$7A4F, // $7A4F + #$7A50, // $7A50 + #$7A51, // $7A51 + #$7A52, // $7A52 + #$7A53, // $7A53 + #$7A54, // $7A54 + #$7A55, // $7A55 + #$7A56, // $7A56 + #$7A57, // $7A57 + #$7A58, // $7A58 + #$7A59, // $7A59 + #$7A5A, // $7A5A + #$7A5B, // $7A5B + #$7A5C, // $7A5C + #$7A5D, // $7A5D + #$7A5E, // $7A5E + #$7A5F, // $7A5F + #$7A60, // $7A60 + #$7A61, // $7A61 + #$7A62, // $7A62 + #$7A63, // $7A63 + #$7A64, // $7A64 + #$7A65, // $7A65 + #$7A66, // $7A66 + #$7A67, // $7A67 + #$7A68, // $7A68 + #$7A69, // $7A69 + #$7A6A, // $7A6A + #$7A6B, // $7A6B + #$7A6C, // $7A6C + #$7A6D, // $7A6D + #$7A6E, // $7A6E + #$7A6F, // $7A6F + #$7A70, // $7A70 + #$7A71, // $7A71 + #$7A72, // $7A72 + #$7A73, // $7A73 + #$7A74, // $7A74 + #$7A75, // $7A75 + #$7A76, // $7A76 + #$7A77, // $7A77 + #$7A78, // $7A78 + #$7A79, // $7A79 + #$7A7A, // $7A7A + #$7A7B, // $7A7B + #$7A7C, // $7A7C + #$7A7D, // $7A7D + #$7A7E, // $7A7E + #$7A7F, // $7A7F + #$7A80, // $7A80 + #$7A81, // $7A81 + #$7A82, // $7A82 + #$7A83, // $7A83 + #$7A84, // $7A84 + #$7A85, // $7A85 + #$7A86, // $7A86 + #$7A87, // $7A87 + #$7A88, // $7A88 + #$7A89, // $7A89 + #$7A8A, // $7A8A + #$7A8B, // $7A8B + #$7A8C, // $7A8C + #$7A8D, // $7A8D + #$7A8E, // $7A8E + #$7A8F, // $7A8F + #$7A90, // $7A90 + #$7A91, // $7A91 + #$7A92, // $7A92 + #$7A93, // $7A93 + #$7A94, // $7A94 + #$7A95, // $7A95 + #$7A96, // $7A96 + #$7A97, // $7A97 + #$7A98, // $7A98 + #$7A99, // $7A99 + #$7A9A, // $7A9A + #$7A9B, // $7A9B + #$7A9C, // $7A9C + #$7A9D, // $7A9D + #$7A9E, // $7A9E + #$7A9F, // $7A9F + #$7AA0, // $7AA0 + #$7AA1, // $7AA1 + #$7AA2, // $7AA2 + #$7AA3, // $7AA3 + #$7AA4, // $7AA4 + #$7AA5, // $7AA5 + #$7AA6, // $7AA6 + #$7AA7, // $7AA7 + #$7AA8, // $7AA8 + #$7AA9, // $7AA9 + #$7AAA, // $7AAA + #$7AAB, // $7AAB + #$7AAC, // $7AAC + #$7AAD, // $7AAD + #$7AAE, // $7AAE + #$7AAF, // $7AAF + #$7AB0, // $7AB0 + #$7AB1, // $7AB1 + #$7AB2, // $7AB2 + #$7AB3, // $7AB3 + #$7AB4, // $7AB4 + #$7AB5, // $7AB5 + #$7AB6, // $7AB6 + #$7AB7, // $7AB7 + #$7AB8, // $7AB8 + #$7AB9, // $7AB9 + #$7ABA, // $7ABA + #$7ABB, // $7ABB + #$7ABC, // $7ABC + #$7ABD, // $7ABD + #$7ABE, // $7ABE + #$7ABF, // $7ABF + #$7AC0, // $7AC0 + #$7AC1, // $7AC1 + #$7AC2, // $7AC2 + #$7AC3, // $7AC3 + #$7AC4, // $7AC4 + #$7AC5, // $7AC5 + #$7AC6, // $7AC6 + #$7AC7, // $7AC7 + #$7AC8, // $7AC8 + #$7AC9, // $7AC9 + #$7ACA, // $7ACA + #$7ACB, // $7ACB + #$7ACC, // $7ACC + #$7ACD, // $7ACD + #$7ACE, // $7ACE + #$7ACF, // $7ACF + #$7AD0, // $7AD0 + #$7AD1, // $7AD1 + #$7AD2, // $7AD2 + #$7AD3, // $7AD3 + #$7AD4, // $7AD4 + #$7AD5, // $7AD5 + #$7AD6, // $7AD6 + #$7AD7, // $7AD7 + #$7AD8, // $7AD8 + #$7AD9, // $7AD9 + #$7ADA, // $7ADA + #$7ADB, // $7ADB + #$7ADC, // $7ADC + #$7ADD, // $7ADD + #$7ADE, // $7ADE + #$7ADF, // $7ADF + #$7AE0, // $7AE0 + #$7AE1, // $7AE1 + #$7AE2, // $7AE2 + #$7AE3, // $7AE3 + #$7AE4, // $7AE4 + #$7AE5, // $7AE5 + #$7AE6, // $7AE6 + #$7AE7, // $7AE7 + #$7AE8, // $7AE8 + #$7AE9, // $7AE9 + #$7AEA, // $7AEA + #$7AEB, // $7AEB + #$7AEC, // $7AEC + #$7AED, // $7AED + #$7AEE, // $7AEE + #$7AEF, // $7AEF + #$7AF0, // $7AF0 + #$7AF1, // $7AF1 + #$7AF2, // $7AF2 + #$7AF3, // $7AF3 + #$7AF4, // $7AF4 + #$7AF5, // $7AF5 + #$7AF6, // $7AF6 + #$7AF7, // $7AF7 + #$7AF8, // $7AF8 + #$7AF9, // $7AF9 + #$7AFA, // $7AFA + #$7AFB, // $7AFB + #$7AFC, // $7AFC + #$7AFD, // $7AFD + #$7AFE, // $7AFE + #$7AFF, // $7AFF + #$7B00, // $7B00 + #$7B01, // $7B01 + #$7B02, // $7B02 + #$7B03, // $7B03 + #$7B04, // $7B04 + #$7B05, // $7B05 + #$7B06, // $7B06 + #$7B07, // $7B07 + #$7B08, // $7B08 + #$7B09, // $7B09 + #$7B0A, // $7B0A + #$7B0B, // $7B0B + #$7B0C, // $7B0C + #$7B0D, // $7B0D + #$7B0E, // $7B0E + #$7B0F, // $7B0F + #$7B10, // $7B10 + #$7B11, // $7B11 + #$7B12, // $7B12 + #$7B13, // $7B13 + #$7B14, // $7B14 + #$7B15, // $7B15 + #$7B16, // $7B16 + #$7B17, // $7B17 + #$7B18, // $7B18 + #$7B19, // $7B19 + #$7B1A, // $7B1A + #$7B1B, // $7B1B + #$7B1C, // $7B1C + #$7B1D, // $7B1D + #$7B1E, // $7B1E + #$7B1F, // $7B1F + #$7B20, // $7B20 + #$7B21, // $7B21 + #$7B22, // $7B22 + #$7B23, // $7B23 + #$7B24, // $7B24 + #$7B25, // $7B25 + #$7B26, // $7B26 + #$7B27, // $7B27 + #$7B28, // $7B28 + #$7B29, // $7B29 + #$7B2A, // $7B2A + #$7B2B, // $7B2B + #$7B2C, // $7B2C + #$7B2D, // $7B2D + #$7B2E, // $7B2E + #$7B2F, // $7B2F + #$7B30, // $7B30 + #$7B31, // $7B31 + #$7B32, // $7B32 + #$7B33, // $7B33 + #$7B34, // $7B34 + #$7B35, // $7B35 + #$7B36, // $7B36 + #$7B37, // $7B37 + #$7B38, // $7B38 + #$7B39, // $7B39 + #$7B3A, // $7B3A + #$7B3B, // $7B3B + #$7B3C, // $7B3C + #$7B3D, // $7B3D + #$7B3E, // $7B3E + #$7B3F, // $7B3F + #$7B40, // $7B40 + #$7B41, // $7B41 + #$7B42, // $7B42 + #$7B43, // $7B43 + #$7B44, // $7B44 + #$7B45, // $7B45 + #$7B46, // $7B46 + #$7B47, // $7B47 + #$7B48, // $7B48 + #$7B49, // $7B49 + #$7B4A, // $7B4A + #$7B4B, // $7B4B + #$7B4C, // $7B4C + #$7B4D, // $7B4D + #$7B4E, // $7B4E + #$7B4F, // $7B4F + #$7B50, // $7B50 + #$7B51, // $7B51 + #$7B52, // $7B52 + #$7B53, // $7B53 + #$7B54, // $7B54 + #$7B55, // $7B55 + #$7B56, // $7B56 + #$7B57, // $7B57 + #$7B58, // $7B58 + #$7B59, // $7B59 + #$7B5A, // $7B5A + #$7B5B, // $7B5B + #$7B5C, // $7B5C + #$7B5D, // $7B5D + #$7B5E, // $7B5E + #$7B5F, // $7B5F + #$7B60, // $7B60 + #$7B61, // $7B61 + #$7B62, // $7B62 + #$7B63, // $7B63 + #$7B64, // $7B64 + #$7B65, // $7B65 + #$7B66, // $7B66 + #$7B67, // $7B67 + #$7B68, // $7B68 + #$7B69, // $7B69 + #$7B6A, // $7B6A + #$7B6B, // $7B6B + #$7B6C, // $7B6C + #$7B6D, // $7B6D + #$7B6E, // $7B6E + #$7B6F, // $7B6F + #$7B70, // $7B70 + #$7B71, // $7B71 + #$7B72, // $7B72 + #$7B73, // $7B73 + #$7B74, // $7B74 + #$7B75, // $7B75 + #$7B76, // $7B76 + #$7B77, // $7B77 + #$7B78, // $7B78 + #$7B79, // $7B79 + #$7B7A, // $7B7A + #$7B7B, // $7B7B + #$7B7C, // $7B7C + #$7B7D, // $7B7D + #$7B7E, // $7B7E + #$7B7F, // $7B7F + #$7B80, // $7B80 + #$7B81, // $7B81 + #$7B82, // $7B82 + #$7B83, // $7B83 + #$7B84, // $7B84 + #$7B85, // $7B85 + #$7B86, // $7B86 + #$7B87, // $7B87 + #$7B88, // $7B88 + #$7B89, // $7B89 + #$7B8A, // $7B8A + #$7B8B, // $7B8B + #$7B8C, // $7B8C + #$7B8D, // $7B8D + #$7B8E, // $7B8E + #$7B8F, // $7B8F + #$7B90, // $7B90 + #$7B91, // $7B91 + #$7B92, // $7B92 + #$7B93, // $7B93 + #$7B94, // $7B94 + #$7B95, // $7B95 + #$7B96, // $7B96 + #$7B97, // $7B97 + #$7B98, // $7B98 + #$7B99, // $7B99 + #$7B9A, // $7B9A + #$7B9B, // $7B9B + #$7B9C, // $7B9C + #$7B9D, // $7B9D + #$7B9E, // $7B9E + #$7B9F, // $7B9F + #$7BA0, // $7BA0 + #$7BA1, // $7BA1 + #$7BA2, // $7BA2 + #$7BA3, // $7BA3 + #$7BA4, // $7BA4 + #$7BA5, // $7BA5 + #$7BA6, // $7BA6 + #$7BA7, // $7BA7 + #$7BA8, // $7BA8 + #$7BA9, // $7BA9 + #$7BAA, // $7BAA + #$7BAB, // $7BAB + #$7BAC, // $7BAC + #$7BAD, // $7BAD + #$7BAE, // $7BAE + #$7BAF, // $7BAF + #$7BB0, // $7BB0 + #$7BB1, // $7BB1 + #$7BB2, // $7BB2 + #$7BB3, // $7BB3 + #$7BB4, // $7BB4 + #$7BB5, // $7BB5 + #$7BB6, // $7BB6 + #$7BB7, // $7BB7 + #$7BB8, // $7BB8 + #$7BB9, // $7BB9 + #$7BBA, // $7BBA + #$7BBB, // $7BBB + #$7BBC, // $7BBC + #$7BBD, // $7BBD + #$7BBE, // $7BBE + #$7BBF, // $7BBF + #$7BC0, // $7BC0 + #$7BC1, // $7BC1 + #$7BC2, // $7BC2 + #$7BC3, // $7BC3 + #$7BC4, // $7BC4 + #$7BC5, // $7BC5 + #$7BC6, // $7BC6 + #$7BC7, // $7BC7 + #$7BC8, // $7BC8 + #$7BC9, // $7BC9 + #$7BCA, // $7BCA + #$7BCB, // $7BCB + #$7BCC, // $7BCC + #$7BCD, // $7BCD + #$7BCE, // $7BCE + #$7BCF, // $7BCF + #$7BD0, // $7BD0 + #$7BD1, // $7BD1 + #$7BD2, // $7BD2 + #$7BD3, // $7BD3 + #$7BD4, // $7BD4 + #$7BD5, // $7BD5 + #$7BD6, // $7BD6 + #$7BD7, // $7BD7 + #$7BD8, // $7BD8 + #$7BD9, // $7BD9 + #$7BDA, // $7BDA + #$7BDB, // $7BDB + #$7BDC, // $7BDC + #$7BDD, // $7BDD + #$7BDE, // $7BDE + #$7BDF, // $7BDF + #$7BE0, // $7BE0 + #$7BE1, // $7BE1 + #$7BE2, // $7BE2 + #$7BE3, // $7BE3 + #$7BE4, // $7BE4 + #$7BE5, // $7BE5 + #$7BE6, // $7BE6 + #$7BE7, // $7BE7 + #$7BE8, // $7BE8 + #$7BE9, // $7BE9 + #$7BEA, // $7BEA + #$7BEB, // $7BEB + #$7BEC, // $7BEC + #$7BED, // $7BED + #$7BEE, // $7BEE + #$7BEF, // $7BEF + #$7BF0, // $7BF0 + #$7BF1, // $7BF1 + #$7BF2, // $7BF2 + #$7BF3, // $7BF3 + #$7BF4, // $7BF4 + #$7BF5, // $7BF5 + #$7BF6, // $7BF6 + #$7BF7, // $7BF7 + #$7BF8, // $7BF8 + #$7BF9, // $7BF9 + #$7BFA, // $7BFA + #$7BFB, // $7BFB + #$7BFC, // $7BFC + #$7BFD, // $7BFD + #$7BFE, // $7BFE + #$7BFF, // $7BFF + #$7C00, // $7C00 + #$7C01, // $7C01 + #$7C02, // $7C02 + #$7C03, // $7C03 + #$7C04, // $7C04 + #$7C05, // $7C05 + #$7C06, // $7C06 + #$7C07, // $7C07 + #$7C08, // $7C08 + #$7C09, // $7C09 + #$7C0A, // $7C0A + #$7C0B, // $7C0B + #$7C0C, // $7C0C + #$7C0D, // $7C0D + #$7C0E, // $7C0E + #$7C0F, // $7C0F + #$7C10, // $7C10 + #$7C11, // $7C11 + #$7C12, // $7C12 + #$7C13, // $7C13 + #$7C14, // $7C14 + #$7C15, // $7C15 + #$7C16, // $7C16 + #$7C17, // $7C17 + #$7C18, // $7C18 + #$7C19, // $7C19 + #$7C1A, // $7C1A + #$7C1B, // $7C1B + #$7C1C, // $7C1C + #$7C1D, // $7C1D + #$7C1E, // $7C1E + #$7C1F, // $7C1F + #$7C20, // $7C20 + #$7C21, // $7C21 + #$7C22, // $7C22 + #$7C23, // $7C23 + #$7C24, // $7C24 + #$7C25, // $7C25 + #$7C26, // $7C26 + #$7C27, // $7C27 + #$7C28, // $7C28 + #$7C29, // $7C29 + #$7C2A, // $7C2A + #$7C2B, // $7C2B + #$7C2C, // $7C2C + #$7C2D, // $7C2D + #$7C2E, // $7C2E + #$7C2F, // $7C2F + #$7C30, // $7C30 + #$7C31, // $7C31 + #$7C32, // $7C32 + #$7C33, // $7C33 + #$7C34, // $7C34 + #$7C35, // $7C35 + #$7C36, // $7C36 + #$7C37, // $7C37 + #$7C38, // $7C38 + #$7C39, // $7C39 + #$7C3A, // $7C3A + #$7C3B, // $7C3B + #$7C3C, // $7C3C + #$7C3D, // $7C3D + #$7C3E, // $7C3E + #$7C3F, // $7C3F + #$7C40, // $7C40 + #$7C41, // $7C41 + #$7C42, // $7C42 + #$7C43, // $7C43 + #$7C44, // $7C44 + #$7C45, // $7C45 + #$7C46, // $7C46 + #$7C47, // $7C47 + #$7C48, // $7C48 + #$7C49, // $7C49 + #$7C4A, // $7C4A + #$7C4B, // $7C4B + #$7C4C, // $7C4C + #$7C4D, // $7C4D + #$7C4E, // $7C4E + #$7C4F, // $7C4F + #$7C50, // $7C50 + #$7C51, // $7C51 + #$7C52, // $7C52 + #$7C53, // $7C53 + #$7C54, // $7C54 + #$7C55, // $7C55 + #$7C56, // $7C56 + #$7C57, // $7C57 + #$7C58, // $7C58 + #$7C59, // $7C59 + #$7C5A, // $7C5A + #$7C5B, // $7C5B + #$7C5C, // $7C5C + #$7C5D, // $7C5D + #$7C5E, // $7C5E + #$7C5F, // $7C5F + #$7C60, // $7C60 + #$7C61, // $7C61 + #$7C62, // $7C62 + #$7C63, // $7C63 + #$7C64, // $7C64 + #$7C65, // $7C65 + #$7C66, // $7C66 + #$7C67, // $7C67 + #$7C68, // $7C68 + #$7C69, // $7C69 + #$7C6A, // $7C6A + #$7C6B, // $7C6B + #$7C6C, // $7C6C + #$7C6D, // $7C6D + #$7C6E, // $7C6E + #$7C6F, // $7C6F + #$7C70, // $7C70 + #$7C71, // $7C71 + #$7C72, // $7C72 + #$7C73, // $7C73 + #$7C74, // $7C74 + #$7C75, // $7C75 + #$7C76, // $7C76 + #$7C77, // $7C77 + #$7C78, // $7C78 + #$7C79, // $7C79 + #$7C7A, // $7C7A + #$7C7B, // $7C7B + #$7C7C, // $7C7C + #$7C7D, // $7C7D + #$7C7E, // $7C7E + #$7C7F, // $7C7F + #$7C80, // $7C80 + #$7C81, // $7C81 + #$7C82, // $7C82 + #$7C83, // $7C83 + #$7C84, // $7C84 + #$7C85, // $7C85 + #$7C86, // $7C86 + #$7C87, // $7C87 + #$7C88, // $7C88 + #$7C89, // $7C89 + #$7C8A, // $7C8A + #$7C8B, // $7C8B + #$7C8C, // $7C8C + #$7C8D, // $7C8D + #$7C8E, // $7C8E + #$7C8F, // $7C8F + #$7C90, // $7C90 + #$7C91, // $7C91 + #$7C92, // $7C92 + #$7C93, // $7C93 + #$7C94, // $7C94 + #$7C95, // $7C95 + #$7C96, // $7C96 + #$7C97, // $7C97 + #$7C98, // $7C98 + #$7C99, // $7C99 + #$7C9A, // $7C9A + #$7C9B, // $7C9B + #$7C9C, // $7C9C + #$7C9D, // $7C9D + #$7C9E, // $7C9E + #$7C9F, // $7C9F + #$7CA0, // $7CA0 + #$7CA1, // $7CA1 + #$7CA2, // $7CA2 + #$7CA3, // $7CA3 + #$7CA4, // $7CA4 + #$7CA5, // $7CA5 + #$7CA6, // $7CA6 + #$7CA7, // $7CA7 + #$7CA8, // $7CA8 + #$7CA9, // $7CA9 + #$7CAA, // $7CAA + #$7CAB, // $7CAB + #$7CAC, // $7CAC + #$7CAD, // $7CAD + #$7CAE, // $7CAE + #$7CAF, // $7CAF + #$7CB0, // $7CB0 + #$7CB1, // $7CB1 + #$7CB2, // $7CB2 + #$7CB3, // $7CB3 + #$7CB4, // $7CB4 + #$7CB5, // $7CB5 + #$7CB6, // $7CB6 + #$7CB7, // $7CB7 + #$7CB8, // $7CB8 + #$7CB9, // $7CB9 + #$7CBA, // $7CBA + #$7CBB, // $7CBB + #$7CBC, // $7CBC + #$7CBD, // $7CBD + #$7CBE, // $7CBE + #$7CBF, // $7CBF + #$7CC0, // $7CC0 + #$7CC1, // $7CC1 + #$7CC2, // $7CC2 + #$7CC3, // $7CC3 + #$7CC4, // $7CC4 + #$7CC5, // $7CC5 + #$7CC6, // $7CC6 + #$7CC7, // $7CC7 + #$7CC8, // $7CC8 + #$7CC9, // $7CC9 + #$7CCA, // $7CCA + #$7CCB, // $7CCB + #$7CCC, // $7CCC + #$7CCD, // $7CCD + #$7CCE, // $7CCE + #$7CCF, // $7CCF + #$7CD0, // $7CD0 + #$7CD1, // $7CD1 + #$7CD2, // $7CD2 + #$7CD3, // $7CD3 + #$7CD4, // $7CD4 + #$7CD5, // $7CD5 + #$7CD6, // $7CD6 + #$7CD7, // $7CD7 + #$7CD8, // $7CD8 + #$7CD9, // $7CD9 + #$7CDA, // $7CDA + #$7CDB, // $7CDB + #$7CDC, // $7CDC + #$7CDD, // $7CDD + #$7CDE, // $7CDE + #$7CDF, // $7CDF + #$7CE0, // $7CE0 + #$7CE1, // $7CE1 + #$7CE2, // $7CE2 + #$7CE3, // $7CE3 + #$7CE4, // $7CE4 + #$7CE5, // $7CE5 + #$7CE6, // $7CE6 + #$7CE7, // $7CE7 + #$7CE8, // $7CE8 + #$7CE9, // $7CE9 + #$7CEA, // $7CEA + #$7CEB, // $7CEB + #$7CEC, // $7CEC + #$7CED, // $7CED + #$7CEE, // $7CEE + #$7CEF, // $7CEF + #$7CF0, // $7CF0 + #$7CF1, // $7CF1 + #$7CF2, // $7CF2 + #$7CF3, // $7CF3 + #$7CF4, // $7CF4 + #$7CF5, // $7CF5 + #$7CF6, // $7CF6 + #$7CF7, // $7CF7 + #$7CF8, // $7CF8 + #$7CF9, // $7CF9 + #$7CFA, // $7CFA + #$7CFB, // $7CFB + #$7CFC, // $7CFC + #$7CFD, // $7CFD + #$7CFE, // $7CFE + #$7CFF, // $7CFF + #$7D00, // $7D00 + #$7D01, // $7D01 + #$7D02, // $7D02 + #$7D03, // $7D03 + #$7D04, // $7D04 + #$7D05, // $7D05 + #$7D06, // $7D06 + #$7D07, // $7D07 + #$7D08, // $7D08 + #$7D09, // $7D09 + #$7D0A, // $7D0A + #$7D0B, // $7D0B + #$7D0C, // $7D0C + #$7D0D, // $7D0D + #$7D0E, // $7D0E + #$7D0F, // $7D0F + #$7D10, // $7D10 + #$7D11, // $7D11 + #$7D12, // $7D12 + #$7D13, // $7D13 + #$7D14, // $7D14 + #$7D15, // $7D15 + #$7D16, // $7D16 + #$7D17, // $7D17 + #$7D18, // $7D18 + #$7D19, // $7D19 + #$7D1A, // $7D1A + #$7D1B, // $7D1B + #$7D1C, // $7D1C + #$7D1D, // $7D1D + #$7D1E, // $7D1E + #$7D1F, // $7D1F + #$7D20, // $7D20 + #$7D21, // $7D21 + #$7D22, // $7D22 + #$7D23, // $7D23 + #$7D24, // $7D24 + #$7D25, // $7D25 + #$7D26, // $7D26 + #$7D27, // $7D27 + #$7D28, // $7D28 + #$7D29, // $7D29 + #$7D2A, // $7D2A + #$7D2B, // $7D2B + #$7D2C, // $7D2C + #$7D2D, // $7D2D + #$7D2E, // $7D2E + #$7D2F, // $7D2F + #$7D30, // $7D30 + #$7D31, // $7D31 + #$7D32, // $7D32 + #$7D33, // $7D33 + #$7D34, // $7D34 + #$7D35, // $7D35 + #$7D36, // $7D36 + #$7D37, // $7D37 + #$7D38, // $7D38 + #$7D39, // $7D39 + #$7D3A, // $7D3A + #$7D3B, // $7D3B + #$7D3C, // $7D3C + #$7D3D, // $7D3D + #$7D3E, // $7D3E + #$7D3F, // $7D3F + #$7D40, // $7D40 + #$7D41, // $7D41 + #$7D42, // $7D42 + #$7D43, // $7D43 + #$7D44, // $7D44 + #$7D45, // $7D45 + #$7D46, // $7D46 + #$7D47, // $7D47 + #$7D48, // $7D48 + #$7D49, // $7D49 + #$7D4A, // $7D4A + #$7D4B, // $7D4B + #$7D4C, // $7D4C + #$7D4D, // $7D4D + #$7D4E, // $7D4E + #$7D4F, // $7D4F + #$7D50, // $7D50 + #$7D51, // $7D51 + #$7D52, // $7D52 + #$7D53, // $7D53 + #$7D54, // $7D54 + #$7D55, // $7D55 + #$7D56, // $7D56 + #$7D57, // $7D57 + #$7D58, // $7D58 + #$7D59, // $7D59 + #$7D5A, // $7D5A + #$7D5B, // $7D5B + #$7D5C, // $7D5C + #$7D5D, // $7D5D + #$7D5E, // $7D5E + #$7D5F, // $7D5F + #$7D60, // $7D60 + #$7D61, // $7D61 + #$7D62, // $7D62 + #$7D63, // $7D63 + #$7D64, // $7D64 + #$7D65, // $7D65 + #$7D66, // $7D66 + #$7D67, // $7D67 + #$7D68, // $7D68 + #$7D69, // $7D69 + #$7D6A, // $7D6A + #$7D6B, // $7D6B + #$7D6C, // $7D6C + #$7D6D, // $7D6D + #$7D6E, // $7D6E + #$7D6F, // $7D6F + #$7D70, // $7D70 + #$7D71, // $7D71 + #$7D72, // $7D72 + #$7D73, // $7D73 + #$7D74, // $7D74 + #$7D75, // $7D75 + #$7D76, // $7D76 + #$7D77, // $7D77 + #$7D78, // $7D78 + #$7D79, // $7D79 + #$7D7A, // $7D7A + #$7D7B, // $7D7B + #$7D7C, // $7D7C + #$7D7D, // $7D7D + #$7D7E, // $7D7E + #$7D7F, // $7D7F + #$7D80, // $7D80 + #$7D81, // $7D81 + #$7D82, // $7D82 + #$7D83, // $7D83 + #$7D84, // $7D84 + #$7D85, // $7D85 + #$7D86, // $7D86 + #$7D87, // $7D87 + #$7D88, // $7D88 + #$7D89, // $7D89 + #$7D8A, // $7D8A + #$7D8B, // $7D8B + #$7D8C, // $7D8C + #$7D8D, // $7D8D + #$7D8E, // $7D8E + #$7D8F, // $7D8F + #$7D90, // $7D90 + #$7D91, // $7D91 + #$7D92, // $7D92 + #$7D93, // $7D93 + #$7D94, // $7D94 + #$7D95, // $7D95 + #$7D96, // $7D96 + #$7D97, // $7D97 + #$7D98, // $7D98 + #$7D99, // $7D99 + #$7D9A, // $7D9A + #$7D9B, // $7D9B + #$7D9C, // $7D9C + #$7D9D, // $7D9D + #$7D9E, // $7D9E + #$7D9F, // $7D9F + #$7DA0, // $7DA0 + #$7DA1, // $7DA1 + #$7DA2, // $7DA2 + #$7DA3, // $7DA3 + #$7DA4, // $7DA4 + #$7DA5, // $7DA5 + #$7DA6, // $7DA6 + #$7DA7, // $7DA7 + #$7DA8, // $7DA8 + #$7DA9, // $7DA9 + #$7DAA, // $7DAA + #$7DAB, // $7DAB + #$7DAC, // $7DAC + #$7DAD, // $7DAD + #$7DAE, // $7DAE + #$7DAF, // $7DAF + #$7DB0, // $7DB0 + #$7DB1, // $7DB1 + #$7DB2, // $7DB2 + #$7DB3, // $7DB3 + #$7DB4, // $7DB4 + #$7DB5, // $7DB5 + #$7DB6, // $7DB6 + #$7DB7, // $7DB7 + #$7DB8, // $7DB8 + #$7DB9, // $7DB9 + #$7DBA, // $7DBA + #$7DBB, // $7DBB + #$7DBC, // $7DBC + #$7DBD, // $7DBD + #$7DBE, // $7DBE + #$7DBF, // $7DBF + #$7DC0, // $7DC0 + #$7DC1, // $7DC1 + #$7DC2, // $7DC2 + #$7DC3, // $7DC3 + #$7DC4, // $7DC4 + #$7DC5, // $7DC5 + #$7DC6, // $7DC6 + #$7DC7, // $7DC7 + #$7DC8, // $7DC8 + #$7DC9, // $7DC9 + #$7DCA, // $7DCA + #$7DCB, // $7DCB + #$7DCC, // $7DCC + #$7DCD, // $7DCD + #$7DCE, // $7DCE + #$7DCF, // $7DCF + #$7DD0, // $7DD0 + #$7DD1, // $7DD1 + #$7DD2, // $7DD2 + #$7DD3, // $7DD3 + #$7DD4, // $7DD4 + #$7DD5, // $7DD5 + #$7DD6, // $7DD6 + #$7DD7, // $7DD7 + #$7DD8, // $7DD8 + #$7DD9, // $7DD9 + #$7DDA, // $7DDA + #$7DDB, // $7DDB + #$7DDC, // $7DDC + #$7DDD, // $7DDD + #$7DDE, // $7DDE + #$7DDF, // $7DDF + #$7DE0, // $7DE0 + #$7DE1, // $7DE1 + #$7DE2, // $7DE2 + #$7DE3, // $7DE3 + #$7DE4, // $7DE4 + #$7DE5, // $7DE5 + #$7DE6, // $7DE6 + #$7DE7, // $7DE7 + #$7DE8, // $7DE8 + #$7DE9, // $7DE9 + #$7DEA, // $7DEA + #$7DEB, // $7DEB + #$7DEC, // $7DEC + #$7DED, // $7DED + #$7DEE, // $7DEE + #$7DEF, // $7DEF + #$7DF0, // $7DF0 + #$7DF1, // $7DF1 + #$7DF2, // $7DF2 + #$7DF3, // $7DF3 + #$7DF4, // $7DF4 + #$7DF5, // $7DF5 + #$7DF6, // $7DF6 + #$7DF7, // $7DF7 + #$7DF8, // $7DF8 + #$7DF9, // $7DF9 + #$7DFA, // $7DFA + #$7DFB, // $7DFB + #$7DFC, // $7DFC + #$7DFD, // $7DFD + #$7DFE, // $7DFE + #$7DFF, // $7DFF + #$7E00, // $7E00 + #$7E01, // $7E01 + #$7E02, // $7E02 + #$7E03, // $7E03 + #$7E04, // $7E04 + #$7E05, // $7E05 + #$7E06, // $7E06 + #$7E07, // $7E07 + #$7E08, // $7E08 + #$7E09, // $7E09 + #$7E0A, // $7E0A + #$7E0B, // $7E0B + #$7E0C, // $7E0C + #$7E0D, // $7E0D + #$7E0E, // $7E0E + #$7E0F, // $7E0F + #$7E10, // $7E10 + #$7E11, // $7E11 + #$7E12, // $7E12 + #$7E13, // $7E13 + #$7E14, // $7E14 + #$7E15, // $7E15 + #$7E16, // $7E16 + #$7E17, // $7E17 + #$7E18, // $7E18 + #$7E19, // $7E19 + #$7E1A, // $7E1A + #$7E1B, // $7E1B + #$7E1C, // $7E1C + #$7E1D, // $7E1D + #$7E1E, // $7E1E + #$7E1F, // $7E1F + #$7E20, // $7E20 + #$7E21, // $7E21 + #$7E22, // $7E22 + #$7E23, // $7E23 + #$7E24, // $7E24 + #$7E25, // $7E25 + #$7E26, // $7E26 + #$7E27, // $7E27 + #$7E28, // $7E28 + #$7E29, // $7E29 + #$7E2A, // $7E2A + #$7E2B, // $7E2B + #$7E2C, // $7E2C + #$7E2D, // $7E2D + #$7E2E, // $7E2E + #$7E2F, // $7E2F + #$7E30, // $7E30 + #$7E31, // $7E31 + #$7E32, // $7E32 + #$7E33, // $7E33 + #$7E34, // $7E34 + #$7E35, // $7E35 + #$7E36, // $7E36 + #$7E37, // $7E37 + #$7E38, // $7E38 + #$7E39, // $7E39 + #$7E3A, // $7E3A + #$7E3B, // $7E3B + #$7E3C, // $7E3C + #$7E3D, // $7E3D + #$7E3E, // $7E3E + #$7E3F, // $7E3F + #$7E40, // $7E40 + #$7E41, // $7E41 + #$7E42, // $7E42 + #$7E43, // $7E43 + #$7E44, // $7E44 + #$7E45, // $7E45 + #$7E46, // $7E46 + #$7E47, // $7E47 + #$7E48, // $7E48 + #$7E49, // $7E49 + #$7E4A, // $7E4A + #$7E4B, // $7E4B + #$7E4C, // $7E4C + #$7E4D, // $7E4D + #$7E4E, // $7E4E + #$7E4F, // $7E4F + #$7E50, // $7E50 + #$7E51, // $7E51 + #$7E52, // $7E52 + #$7E53, // $7E53 + #$7E54, // $7E54 + #$7E55, // $7E55 + #$7E56, // $7E56 + #$7E57, // $7E57 + #$7E58, // $7E58 + #$7E59, // $7E59 + #$7E5A, // $7E5A + #$7E5B, // $7E5B + #$7E5C, // $7E5C + #$7E5D, // $7E5D + #$7E5E, // $7E5E + #$7E5F, // $7E5F + #$7E60, // $7E60 + #$7E61, // $7E61 + #$7E62, // $7E62 + #$7E63, // $7E63 + #$7E64, // $7E64 + #$7E65, // $7E65 + #$7E66, // $7E66 + #$7E67, // $7E67 + #$7E68, // $7E68 + #$7E69, // $7E69 + #$7E6A, // $7E6A + #$7E6B, // $7E6B + #$7E6C, // $7E6C + #$7E6D, // $7E6D + #$7E6E, // $7E6E + #$7E6F, // $7E6F + #$7E70, // $7E70 + #$7E71, // $7E71 + #$7E72, // $7E72 + #$7E73, // $7E73 + #$7E74, // $7E74 + #$7E75, // $7E75 + #$7E76, // $7E76 + #$7E77, // $7E77 + #$7E78, // $7E78 + #$7E79, // $7E79 + #$7E7A, // $7E7A + #$7E7B, // $7E7B + #$7E7C, // $7E7C + #$7E7D, // $7E7D + #$7E7E, // $7E7E + #$7E7F, // $7E7F + #$7E80, // $7E80 + #$7E81, // $7E81 + #$7E82, // $7E82 + #$7E83, // $7E83 + #$7E84, // $7E84 + #$7E85, // $7E85 + #$7E86, // $7E86 + #$7E87, // $7E87 + #$7E88, // $7E88 + #$7E89, // $7E89 + #$7E8A, // $7E8A + #$7E8B, // $7E8B + #$7E8C, // $7E8C + #$7E8D, // $7E8D + #$7E8E, // $7E8E + #$7E8F, // $7E8F + #$7E90, // $7E90 + #$7E91, // $7E91 + #$7E92, // $7E92 + #$7E93, // $7E93 + #$7E94, // $7E94 + #$7E95, // $7E95 + #$7E96, // $7E96 + #$7E97, // $7E97 + #$7E98, // $7E98 + #$7E99, // $7E99 + #$7E9A, // $7E9A + #$7E9B, // $7E9B + #$7E9C, // $7E9C + #$7E9D, // $7E9D + #$7E9E, // $7E9E + #$7E9F, // $7E9F + #$7EA0, // $7EA0 + #$7EA1, // $7EA1 + #$7EA2, // $7EA2 + #$7EA3, // $7EA3 + #$7EA4, // $7EA4 + #$7EA5, // $7EA5 + #$7EA6, // $7EA6 + #$7EA7, // $7EA7 + #$7EA8, // $7EA8 + #$7EA9, // $7EA9 + #$7EAA, // $7EAA + #$7EAB, // $7EAB + #$7EAC, // $7EAC + #$7EAD, // $7EAD + #$7EAE, // $7EAE + #$7EAF, // $7EAF + #$7EB0, // $7EB0 + #$7EB1, // $7EB1 + #$7EB2, // $7EB2 + #$7EB3, // $7EB3 + #$7EB4, // $7EB4 + #$7EB5, // $7EB5 + #$7EB6, // $7EB6 + #$7EB7, // $7EB7 + #$7EB8, // $7EB8 + #$7EB9, // $7EB9 + #$7EBA, // $7EBA + #$7EBB, // $7EBB + #$7EBC, // $7EBC + #$7EBD, // $7EBD + #$7EBE, // $7EBE + #$7EBF, // $7EBF + #$7EC0, // $7EC0 + #$7EC1, // $7EC1 + #$7EC2, // $7EC2 + #$7EC3, // $7EC3 + #$7EC4, // $7EC4 + #$7EC5, // $7EC5 + #$7EC6, // $7EC6 + #$7EC7, // $7EC7 + #$7EC8, // $7EC8 + #$7EC9, // $7EC9 + #$7ECA, // $7ECA + #$7ECB, // $7ECB + #$7ECC, // $7ECC + #$7ECD, // $7ECD + #$7ECE, // $7ECE + #$7ECF, // $7ECF + #$7ED0, // $7ED0 + #$7ED1, // $7ED1 + #$7ED2, // $7ED2 + #$7ED3, // $7ED3 + #$7ED4, // $7ED4 + #$7ED5, // $7ED5 + #$7ED6, // $7ED6 + #$7ED7, // $7ED7 + #$7ED8, // $7ED8 + #$7ED9, // $7ED9 + #$7EDA, // $7EDA + #$7EDB, // $7EDB + #$7EDC, // $7EDC + #$7EDD, // $7EDD + #$7EDE, // $7EDE + #$7EDF, // $7EDF + #$7EE0, // $7EE0 + #$7EE1, // $7EE1 + #$7EE2, // $7EE2 + #$7EE3, // $7EE3 + #$7EE4, // $7EE4 + #$7EE5, // $7EE5 + #$7EE6, // $7EE6 + #$7EE7, // $7EE7 + #$7EE8, // $7EE8 + #$7EE9, // $7EE9 + #$7EEA, // $7EEA + #$7EEB, // $7EEB + #$7EEC, // $7EEC + #$7EED, // $7EED + #$7EEE, // $7EEE + #$7EEF, // $7EEF + #$7EF0, // $7EF0 + #$7EF1, // $7EF1 + #$7EF2, // $7EF2 + #$7EF3, // $7EF3 + #$7EF4, // $7EF4 + #$7EF5, // $7EF5 + #$7EF6, // $7EF6 + #$7EF7, // $7EF7 + #$7EF8, // $7EF8 + #$7EF9, // $7EF9 + #$7EFA, // $7EFA + #$7EFB, // $7EFB + #$7EFC, // $7EFC + #$7EFD, // $7EFD + #$7EFE, // $7EFE + #$7EFF, // $7EFF + #$7F00, // $7F00 + #$7F01, // $7F01 + #$7F02, // $7F02 + #$7F03, // $7F03 + #$7F04, // $7F04 + #$7F05, // $7F05 + #$7F06, // $7F06 + #$7F07, // $7F07 + #$7F08, // $7F08 + #$7F09, // $7F09 + #$7F0A, // $7F0A + #$7F0B, // $7F0B + #$7F0C, // $7F0C + #$7F0D, // $7F0D + #$7F0E, // $7F0E + #$7F0F, // $7F0F + #$7F10, // $7F10 + #$7F11, // $7F11 + #$7F12, // $7F12 + #$7F13, // $7F13 + #$7F14, // $7F14 + #$7F15, // $7F15 + #$7F16, // $7F16 + #$7F17, // $7F17 + #$7F18, // $7F18 + #$7F19, // $7F19 + #$7F1A, // $7F1A + #$7F1B, // $7F1B + #$7F1C, // $7F1C + #$7F1D, // $7F1D + #$7F1E, // $7F1E + #$7F1F, // $7F1F + #$7F20, // $7F20 + #$7F21, // $7F21 + #$7F22, // $7F22 + #$7F23, // $7F23 + #$7F24, // $7F24 + #$7F25, // $7F25 + #$7F26, // $7F26 + #$7F27, // $7F27 + #$7F28, // $7F28 + #$7F29, // $7F29 + #$7F2A, // $7F2A + #$7F2B, // $7F2B + #$7F2C, // $7F2C + #$7F2D, // $7F2D + #$7F2E, // $7F2E + #$7F2F, // $7F2F + #$7F30, // $7F30 + #$7F31, // $7F31 + #$7F32, // $7F32 + #$7F33, // $7F33 + #$7F34, // $7F34 + #$7F35, // $7F35 + #$7F36, // $7F36 + #$7F37, // $7F37 + #$7F38, // $7F38 + #$7F39, // $7F39 + #$7F3A, // $7F3A + #$7F3B, // $7F3B + #$7F3C, // $7F3C + #$7F3D, // $7F3D + #$7F3E, // $7F3E + #$7F3F, // $7F3F + #$7F40, // $7F40 + #$7F41, // $7F41 + #$7F42, // $7F42 + #$7F43, // $7F43 + #$7F44, // $7F44 + #$7F45, // $7F45 + #$7F46, // $7F46 + #$7F47, // $7F47 + #$7F48, // $7F48 + #$7F49, // $7F49 + #$7F4A, // $7F4A + #$7F4B, // $7F4B + #$7F4C, // $7F4C + #$7F4D, // $7F4D + #$7F4E, // $7F4E + #$7F4F, // $7F4F + #$7F50, // $7F50 + #$7F51, // $7F51 + #$7F52, // $7F52 + #$7F53, // $7F53 + #$7F54, // $7F54 + #$7F55, // $7F55 + #$7F56, // $7F56 + #$7F57, // $7F57 + #$7F58, // $7F58 + #$7F59, // $7F59 + #$7F5A, // $7F5A + #$7F5B, // $7F5B + #$7F5C, // $7F5C + #$7F5D, // $7F5D + #$7F5E, // $7F5E + #$7F5F, // $7F5F + #$7F60, // $7F60 + #$7F61, // $7F61 + #$7F62, // $7F62 + #$7F63, // $7F63 + #$7F64, // $7F64 + #$7F65, // $7F65 + #$7F66, // $7F66 + #$7F67, // $7F67 + #$7F68, // $7F68 + #$7F69, // $7F69 + #$7F6A, // $7F6A + #$7F6B, // $7F6B + #$7F6C, // $7F6C + #$7F6D, // $7F6D + #$7F6E, // $7F6E + #$7F6F, // $7F6F + #$7F70, // $7F70 + #$7F71, // $7F71 + #$7F72, // $7F72 + #$7F73, // $7F73 + #$7F74, // $7F74 + #$7F75, // $7F75 + #$7F76, // $7F76 + #$7F77, // $7F77 + #$7F78, // $7F78 + #$7F79, // $7F79 + #$7F7A, // $7F7A + #$7F7B, // $7F7B + #$7F7C, // $7F7C + #$7F7D, // $7F7D + #$7F7E, // $7F7E + #$7F7F, // $7F7F + #$7F80, // $7F80 + #$7F81, // $7F81 + #$7F82, // $7F82 + #$7F83, // $7F83 + #$7F84, // $7F84 + #$7F85, // $7F85 + #$7F86, // $7F86 + #$7F87, // $7F87 + #$7F88, // $7F88 + #$7F89, // $7F89 + #$7F8A, // $7F8A + #$7F8B, // $7F8B + #$7F8C, // $7F8C + #$7F8D, // $7F8D + #$7F8E, // $7F8E + #$7F8F, // $7F8F + #$7F90, // $7F90 + #$7F91, // $7F91 + #$7F92, // $7F92 + #$7F93, // $7F93 + #$7F94, // $7F94 + #$7F95, // $7F95 + #$7F96, // $7F96 + #$7F97, // $7F97 + #$7F98, // $7F98 + #$7F99, // $7F99 + #$7F9A, // $7F9A + #$7F9B, // $7F9B + #$7F9C, // $7F9C + #$7F9D, // $7F9D + #$7F9E, // $7F9E + #$7F9F, // $7F9F + #$7FA0, // $7FA0 + #$7FA1, // $7FA1 + #$7FA2, // $7FA2 + #$7FA3, // $7FA3 + #$7FA4, // $7FA4 + #$7FA5, // $7FA5 + #$7FA6, // $7FA6 + #$7FA7, // $7FA7 + #$7FA8, // $7FA8 + #$7FA9, // $7FA9 + #$7FAA, // $7FAA + #$7FAB, // $7FAB + #$7FAC, // $7FAC + #$7FAD, // $7FAD + #$7FAE, // $7FAE + #$7FAF, // $7FAF + #$7FB0, // $7FB0 + #$7FB1, // $7FB1 + #$7FB2, // $7FB2 + #$7FB3, // $7FB3 + #$7FB4, // $7FB4 + #$7FB5, // $7FB5 + #$7FB6, // $7FB6 + #$7FB7, // $7FB7 + #$7FB8, // $7FB8 + #$7FB9, // $7FB9 + #$7FBA, // $7FBA + #$7FBB, // $7FBB + #$7FBC, // $7FBC + #$7FBD, // $7FBD + #$7FBE, // $7FBE + #$7FBF, // $7FBF + #$7FC0, // $7FC0 + #$7FC1, // $7FC1 + #$7FC2, // $7FC2 + #$7FC3, // $7FC3 + #$7FC4, // $7FC4 + #$7FC5, // $7FC5 + #$7FC6, // $7FC6 + #$7FC7, // $7FC7 + #$7FC8, // $7FC8 + #$7FC9, // $7FC9 + #$7FCA, // $7FCA + #$7FCB, // $7FCB + #$7FCC, // $7FCC + #$7FCD, // $7FCD + #$7FCE, // $7FCE + #$7FCF, // $7FCF + #$7FD0, // $7FD0 + #$7FD1, // $7FD1 + #$7FD2, // $7FD2 + #$7FD3, // $7FD3 + #$7FD4, // $7FD4 + #$7FD5, // $7FD5 + #$7FD6, // $7FD6 + #$7FD7, // $7FD7 + #$7FD8, // $7FD8 + #$7FD9, // $7FD9 + #$7FDA, // $7FDA + #$7FDB, // $7FDB + #$7FDC, // $7FDC + #$7FDD, // $7FDD + #$7FDE, // $7FDE + #$7FDF, // $7FDF + #$7FE0, // $7FE0 + #$7FE1, // $7FE1 + #$7FE2, // $7FE2 + #$7FE3, // $7FE3 + #$7FE4, // $7FE4 + #$7FE5, // $7FE5 + #$7FE6, // $7FE6 + #$7FE7, // $7FE7 + #$7FE8, // $7FE8 + #$7FE9, // $7FE9 + #$7FEA, // $7FEA + #$7FEB, // $7FEB + #$7FEC, // $7FEC + #$7FED, // $7FED + #$7FEE, // $7FEE + #$7FEF, // $7FEF + #$7FF0, // $7FF0 + #$7FF1, // $7FF1 + #$7FF2, // $7FF2 + #$7FF3, // $7FF3 + #$7FF4, // $7FF4 + #$7FF5, // $7FF5 + #$7FF6, // $7FF6 + #$7FF7, // $7FF7 + #$7FF8, // $7FF8 + #$7FF9, // $7FF9 + #$7FFA, // $7FFA + #$7FFB, // $7FFB + #$7FFC, // $7FFC + #$7FFD, // $7FFD + #$7FFE, // $7FFE + #$7FFF, // $7FFF + #$8000, // $8000 + #$8001, // $8001 + #$8002, // $8002 + #$8003, // $8003 + #$8004, // $8004 + #$8005, // $8005 + #$8006, // $8006 + #$8007, // $8007 + #$8008, // $8008 + #$8009, // $8009 + #$800A, // $800A + #$800B, // $800B + #$800C, // $800C + #$800D, // $800D + #$800E, // $800E + #$800F, // $800F + #$8010, // $8010 + #$8011, // $8011 + #$8012, // $8012 + #$8013, // $8013 + #$8014, // $8014 + #$8015, // $8015 + #$8016, // $8016 + #$8017, // $8017 + #$8018, // $8018 + #$8019, // $8019 + #$801A, // $801A + #$801B, // $801B + #$801C, // $801C + #$801D, // $801D + #$801E, // $801E + #$801F, // $801F + #$8020, // $8020 + #$8021, // $8021 + #$8022, // $8022 + #$8023, // $8023 + #$8024, // $8024 + #$8025, // $8025 + #$8026, // $8026 + #$8027, // $8027 + #$8028, // $8028 + #$8029, // $8029 + #$802A, // $802A + #$802B, // $802B + #$802C, // $802C + #$802D, // $802D + #$802E, // $802E + #$802F, // $802F + #$8030, // $8030 + #$8031, // $8031 + #$8032, // $8032 + #$8033, // $8033 + #$8034, // $8034 + #$8035, // $8035 + #$8036, // $8036 + #$8037, // $8037 + #$8038, // $8038 + #$8039, // $8039 + #$803A, // $803A + #$803B, // $803B + #$803C, // $803C + #$803D, // $803D + #$803E, // $803E + #$803F, // $803F + #$8040, // $8040 + #$8041, // $8041 + #$8042, // $8042 + #$8043, // $8043 + #$8044, // $8044 + #$8045, // $8045 + #$8046, // $8046 + #$8047, // $8047 + #$8048, // $8048 + #$8049, // $8049 + #$804A, // $804A + #$804B, // $804B + #$804C, // $804C + #$804D, // $804D + #$804E, // $804E + #$804F, // $804F + #$8050, // $8050 + #$8051, // $8051 + #$8052, // $8052 + #$8053, // $8053 + #$8054, // $8054 + #$8055, // $8055 + #$8056, // $8056 + #$8057, // $8057 + #$8058, // $8058 + #$8059, // $8059 + #$805A, // $805A + #$805B, // $805B + #$805C, // $805C + #$805D, // $805D + #$805E, // $805E + #$805F, // $805F + #$8060, // $8060 + #$8061, // $8061 + #$8062, // $8062 + #$8063, // $8063 + #$8064, // $8064 + #$8065, // $8065 + #$8066, // $8066 + #$8067, // $8067 + #$8068, // $8068 + #$8069, // $8069 + #$806A, // $806A + #$806B, // $806B + #$806C, // $806C + #$806D, // $806D + #$806E, // $806E + #$806F, // $806F + #$8070, // $8070 + #$8071, // $8071 + #$8072, // $8072 + #$8073, // $8073 + #$8074, // $8074 + #$8075, // $8075 + #$8076, // $8076 + #$8077, // $8077 + #$8078, // $8078 + #$8079, // $8079 + #$807A, // $807A + #$807B, // $807B + #$807C, // $807C + #$807D, // $807D + #$807E, // $807E + #$807F, // $807F + #$8080, // $8080 + #$8081, // $8081 + #$8082, // $8082 + #$8083, // $8083 + #$8084, // $8084 + #$8085, // $8085 + #$8086, // $8086 + #$8087, // $8087 + #$8088, // $8088 + #$8089, // $8089 + #$808A, // $808A + #$808B, // $808B + #$808C, // $808C + #$808D, // $808D + #$808E, // $808E + #$808F, // $808F + #$8090, // $8090 + #$8091, // $8091 + #$8092, // $8092 + #$8093, // $8093 + #$8094, // $8094 + #$8095, // $8095 + #$8096, // $8096 + #$8097, // $8097 + #$8098, // $8098 + #$8099, // $8099 + #$809A, // $809A + #$809B, // $809B + #$809C, // $809C + #$809D, // $809D + #$809E, // $809E + #$809F, // $809F + #$80A0, // $80A0 + #$80A1, // $80A1 + #$80A2, // $80A2 + #$80A3, // $80A3 + #$80A4, // $80A4 + #$80A5, // $80A5 + #$80A6, // $80A6 + #$80A7, // $80A7 + #$80A8, // $80A8 + #$80A9, // $80A9 + #$80AA, // $80AA + #$80AB, // $80AB + #$80AC, // $80AC + #$80AD, // $80AD + #$80AE, // $80AE + #$80AF, // $80AF + #$80B0, // $80B0 + #$80B1, // $80B1 + #$80B2, // $80B2 + #$80B3, // $80B3 + #$80B4, // $80B4 + #$80B5, // $80B5 + #$80B6, // $80B6 + #$80B7, // $80B7 + #$80B8, // $80B8 + #$80B9, // $80B9 + #$80BA, // $80BA + #$80BB, // $80BB + #$80BC, // $80BC + #$80BD, // $80BD + #$80BE, // $80BE + #$80BF, // $80BF + #$80C0, // $80C0 + #$80C1, // $80C1 + #$80C2, // $80C2 + #$80C3, // $80C3 + #$80C4, // $80C4 + #$80C5, // $80C5 + #$80C6, // $80C6 + #$80C7, // $80C7 + #$80C8, // $80C8 + #$80C9, // $80C9 + #$80CA, // $80CA + #$80CB, // $80CB + #$80CC, // $80CC + #$80CD, // $80CD + #$80CE, // $80CE + #$80CF, // $80CF + #$80D0, // $80D0 + #$80D1, // $80D1 + #$80D2, // $80D2 + #$80D3, // $80D3 + #$80D4, // $80D4 + #$80D5, // $80D5 + #$80D6, // $80D6 + #$80D7, // $80D7 + #$80D8, // $80D8 + #$80D9, // $80D9 + #$80DA, // $80DA + #$80DB, // $80DB + #$80DC, // $80DC + #$80DD, // $80DD + #$80DE, // $80DE + #$80DF, // $80DF + #$80E0, // $80E0 + #$80E1, // $80E1 + #$80E2, // $80E2 + #$80E3, // $80E3 + #$80E4, // $80E4 + #$80E5, // $80E5 + #$80E6, // $80E6 + #$80E7, // $80E7 + #$80E8, // $80E8 + #$80E9, // $80E9 + #$80EA, // $80EA + #$80EB, // $80EB + #$80EC, // $80EC + #$80ED, // $80ED + #$80EE, // $80EE + #$80EF, // $80EF + #$80F0, // $80F0 + #$80F1, // $80F1 + #$80F2, // $80F2 + #$80F3, // $80F3 + #$80F4, // $80F4 + #$80F5, // $80F5 + #$80F6, // $80F6 + #$80F7, // $80F7 + #$80F8, // $80F8 + #$80F9, // $80F9 + #$80FA, // $80FA + #$80FB, // $80FB + #$80FC, // $80FC + #$80FD, // $80FD + #$80FE, // $80FE + #$80FF, // $80FF + #$8100, // $8100 + #$8101, // $8101 + #$8102, // $8102 + #$8103, // $8103 + #$8104, // $8104 + #$8105, // $8105 + #$8106, // $8106 + #$8107, // $8107 + #$8108, // $8108 + #$8109, // $8109 + #$810A, // $810A + #$810B, // $810B + #$810C, // $810C + #$810D, // $810D + #$810E, // $810E + #$810F, // $810F + #$8110, // $8110 + #$8111, // $8111 + #$8112, // $8112 + #$8113, // $8113 + #$8114, // $8114 + #$8115, // $8115 + #$8116, // $8116 + #$8117, // $8117 + #$8118, // $8118 + #$8119, // $8119 + #$811A, // $811A + #$811B, // $811B + #$811C, // $811C + #$811D, // $811D + #$811E, // $811E + #$811F, // $811F + #$8120, // $8120 + #$8121, // $8121 + #$8122, // $8122 + #$8123, // $8123 + #$8124, // $8124 + #$8125, // $8125 + #$8126, // $8126 + #$8127, // $8127 + #$8128, // $8128 + #$8129, // $8129 + #$812A, // $812A + #$812B, // $812B + #$812C, // $812C + #$812D, // $812D + #$812E, // $812E + #$812F, // $812F + #$8130, // $8130 + #$8131, // $8131 + #$8132, // $8132 + #$8133, // $8133 + #$8134, // $8134 + #$8135, // $8135 + #$8136, // $8136 + #$8137, // $8137 + #$8138, // $8138 + #$8139, // $8139 + #$813A, // $813A + #$813B, // $813B + #$813C, // $813C + #$813D, // $813D + #$813E, // $813E + #$813F, // $813F + #$8140, // $8140 + #$8141, // $8141 + #$8142, // $8142 + #$8143, // $8143 + #$8144, // $8144 + #$8145, // $8145 + #$8146, // $8146 + #$8147, // $8147 + #$8148, // $8148 + #$8149, // $8149 + #$814A, // $814A + #$814B, // $814B + #$814C, // $814C + #$814D, // $814D + #$814E, // $814E + #$814F, // $814F + #$8150, // $8150 + #$8151, // $8151 + #$8152, // $8152 + #$8153, // $8153 + #$8154, // $8154 + #$8155, // $8155 + #$8156, // $8156 + #$8157, // $8157 + #$8158, // $8158 + #$8159, // $8159 + #$815A, // $815A + #$815B, // $815B + #$815C, // $815C + #$815D, // $815D + #$815E, // $815E + #$815F, // $815F + #$8160, // $8160 + #$8161, // $8161 + #$8162, // $8162 + #$8163, // $8163 + #$8164, // $8164 + #$8165, // $8165 + #$8166, // $8166 + #$8167, // $8167 + #$8168, // $8168 + #$8169, // $8169 + #$816A, // $816A + #$816B, // $816B + #$816C, // $816C + #$816D, // $816D + #$816E, // $816E + #$816F, // $816F + #$8170, // $8170 + #$8171, // $8171 + #$8172, // $8172 + #$8173, // $8173 + #$8174, // $8174 + #$8175, // $8175 + #$8176, // $8176 + #$8177, // $8177 + #$8178, // $8178 + #$8179, // $8179 + #$817A, // $817A + #$817B, // $817B + #$817C, // $817C + #$817D, // $817D + #$817E, // $817E + #$817F, // $817F + #$8180, // $8180 + #$8181, // $8181 + #$8182, // $8182 + #$8183, // $8183 + #$8184, // $8184 + #$8185, // $8185 + #$8186, // $8186 + #$8187, // $8187 + #$8188, // $8188 + #$8189, // $8189 + #$818A, // $818A + #$818B, // $818B + #$818C, // $818C + #$818D, // $818D + #$818E, // $818E + #$818F, // $818F + #$8190, // $8190 + #$8191, // $8191 + #$8192, // $8192 + #$8193, // $8193 + #$8194, // $8194 + #$8195, // $8195 + #$8196, // $8196 + #$8197, // $8197 + #$8198, // $8198 + #$8199, // $8199 + #$819A, // $819A + #$819B, // $819B + #$819C, // $819C + #$819D, // $819D + #$819E, // $819E + #$819F, // $819F + #$81A0, // $81A0 + #$81A1, // $81A1 + #$81A2, // $81A2 + #$81A3, // $81A3 + #$81A4, // $81A4 + #$81A5, // $81A5 + #$81A6, // $81A6 + #$81A7, // $81A7 + #$81A8, // $81A8 + #$81A9, // $81A9 + #$81AA, // $81AA + #$81AB, // $81AB + #$81AC, // $81AC + #$81AD, // $81AD + #$81AE, // $81AE + #$81AF, // $81AF + #$81B0, // $81B0 + #$81B1, // $81B1 + #$81B2, // $81B2 + #$81B3, // $81B3 + #$81B4, // $81B4 + #$81B5, // $81B5 + #$81B6, // $81B6 + #$81B7, // $81B7 + #$81B8, // $81B8 + #$81B9, // $81B9 + #$81BA, // $81BA + #$81BB, // $81BB + #$81BC, // $81BC + #$81BD, // $81BD + #$81BE, // $81BE + #$81BF, // $81BF + #$81C0, // $81C0 + #$81C1, // $81C1 + #$81C2, // $81C2 + #$81C3, // $81C3 + #$81C4, // $81C4 + #$81C5, // $81C5 + #$81C6, // $81C6 + #$81C7, // $81C7 + #$81C8, // $81C8 + #$81C9, // $81C9 + #$81CA, // $81CA + #$81CB, // $81CB + #$81CC, // $81CC + #$81CD, // $81CD + #$81CE, // $81CE + #$81CF, // $81CF + #$81D0, // $81D0 + #$81D1, // $81D1 + #$81D2, // $81D2 + #$81D3, // $81D3 + #$81D4, // $81D4 + #$81D5, // $81D5 + #$81D6, // $81D6 + #$81D7, // $81D7 + #$81D8, // $81D8 + #$81D9, // $81D9 + #$81DA, // $81DA + #$81DB, // $81DB + #$81DC, // $81DC + #$81DD, // $81DD + #$81DE, // $81DE + #$81DF, // $81DF + #$81E0, // $81E0 + #$81E1, // $81E1 + #$81E2, // $81E2 + #$81E3, // $81E3 + #$81E4, // $81E4 + #$81E5, // $81E5 + #$81E6, // $81E6 + #$81E7, // $81E7 + #$81E8, // $81E8 + #$81E9, // $81E9 + #$81EA, // $81EA + #$81EB, // $81EB + #$81EC, // $81EC + #$81ED, // $81ED + #$81EE, // $81EE + #$81EF, // $81EF + #$81F0, // $81F0 + #$81F1, // $81F1 + #$81F2, // $81F2 + #$81F3, // $81F3 + #$81F4, // $81F4 + #$81F5, // $81F5 + #$81F6, // $81F6 + #$81F7, // $81F7 + #$81F8, // $81F8 + #$81F9, // $81F9 + #$81FA, // $81FA + #$81FB, // $81FB + #$81FC, // $81FC + #$81FD, // $81FD + #$81FE, // $81FE + #$81FF, // $81FF + #$8200, // $8200 + #$8201, // $8201 + #$8202, // $8202 + #$8203, // $8203 + #$8204, // $8204 + #$8205, // $8205 + #$8206, // $8206 + #$8207, // $8207 + #$8208, // $8208 + #$8209, // $8209 + #$820A, // $820A + #$820B, // $820B + #$820C, // $820C + #$820D, // $820D + #$820E, // $820E + #$820F, // $820F + #$8210, // $8210 + #$8211, // $8211 + #$8212, // $8212 + #$8213, // $8213 + #$8214, // $8214 + #$8215, // $8215 + #$8216, // $8216 + #$8217, // $8217 + #$8218, // $8218 + #$8219, // $8219 + #$821A, // $821A + #$821B, // $821B + #$821C, // $821C + #$821D, // $821D + #$821E, // $821E + #$821F, // $821F + #$8220, // $8220 + #$8221, // $8221 + #$8222, // $8222 + #$8223, // $8223 + #$8224, // $8224 + #$8225, // $8225 + #$8226, // $8226 + #$8227, // $8227 + #$8228, // $8228 + #$8229, // $8229 + #$822A, // $822A + #$822B, // $822B + #$822C, // $822C + #$822D, // $822D + #$822E, // $822E + #$822F, // $822F + #$8230, // $8230 + #$8231, // $8231 + #$8232, // $8232 + #$8233, // $8233 + #$8234, // $8234 + #$8235, // $8235 + #$8236, // $8236 + #$8237, // $8237 + #$8238, // $8238 + #$8239, // $8239 + #$823A, // $823A + #$823B, // $823B + #$823C, // $823C + #$823D, // $823D + #$823E, // $823E + #$823F, // $823F + #$8240, // $8240 + #$8241, // $8241 + #$8242, // $8242 + #$8243, // $8243 + #$8244, // $8244 + #$8245, // $8245 + #$8246, // $8246 + #$8247, // $8247 + #$8248, // $8248 + #$8249, // $8249 + #$824A, // $824A + #$824B, // $824B + #$824C, // $824C + #$824D, // $824D + #$824E, // $824E + #$824F, // $824F + #$8250, // $8250 + #$8251, // $8251 + #$8252, // $8252 + #$8253, // $8253 + #$8254, // $8254 + #$8255, // $8255 + #$8256, // $8256 + #$8257, // $8257 + #$8258, // $8258 + #$8259, // $8259 + #$825A, // $825A + #$825B, // $825B + #$825C, // $825C + #$825D, // $825D + #$825E, // $825E + #$825F, // $825F + #$8260, // $8260 + #$8261, // $8261 + #$8262, // $8262 + #$8263, // $8263 + #$8264, // $8264 + #$8265, // $8265 + #$8266, // $8266 + #$8267, // $8267 + #$8268, // $8268 + #$8269, // $8269 + #$826A, // $826A + #$826B, // $826B + #$826C, // $826C + #$826D, // $826D + #$826E, // $826E + #$826F, // $826F + #$8270, // $8270 + #$8271, // $8271 + #$8272, // $8272 + #$8273, // $8273 + #$8274, // $8274 + #$8275, // $8275 + #$8276, // $8276 + #$8277, // $8277 + #$8278, // $8278 + #$8279, // $8279 + #$827A, // $827A + #$827B, // $827B + #$827C, // $827C + #$827D, // $827D + #$827E, // $827E + #$827F, // $827F + #$8280, // $8280 + #$8281, // $8281 + #$8282, // $8282 + #$8283, // $8283 + #$8284, // $8284 + #$8285, // $8285 + #$8286, // $8286 + #$8287, // $8287 + #$8288, // $8288 + #$8289, // $8289 + #$828A, // $828A + #$828B, // $828B + #$828C, // $828C + #$828D, // $828D + #$828E, // $828E + #$828F, // $828F + #$8290, // $8290 + #$8291, // $8291 + #$8292, // $8292 + #$8293, // $8293 + #$8294, // $8294 + #$8295, // $8295 + #$8296, // $8296 + #$8297, // $8297 + #$8298, // $8298 + #$8299, // $8299 + #$829A, // $829A + #$829B, // $829B + #$829C, // $829C + #$829D, // $829D + #$829E, // $829E + #$829F, // $829F + #$82A0, // $82A0 + #$82A1, // $82A1 + #$82A2, // $82A2 + #$82A3, // $82A3 + #$82A4, // $82A4 + #$82A5, // $82A5 + #$82A6, // $82A6 + #$82A7, // $82A7 + #$82A8, // $82A8 + #$82A9, // $82A9 + #$82AA, // $82AA + #$82AB, // $82AB + #$82AC, // $82AC + #$82AD, // $82AD + #$82AE, // $82AE + #$82AF, // $82AF + #$82B0, // $82B0 + #$82B1, // $82B1 + #$82B2, // $82B2 + #$82B3, // $82B3 + #$82B4, // $82B4 + #$82B5, // $82B5 + #$82B6, // $82B6 + #$82B7, // $82B7 + #$82B8, // $82B8 + #$82B9, // $82B9 + #$82BA, // $82BA + #$82BB, // $82BB + #$82BC, // $82BC + #$82BD, // $82BD + #$82BE, // $82BE + #$82BF, // $82BF + #$82C0, // $82C0 + #$82C1, // $82C1 + #$82C2, // $82C2 + #$82C3, // $82C3 + #$82C4, // $82C4 + #$82C5, // $82C5 + #$82C6, // $82C6 + #$82C7, // $82C7 + #$82C8, // $82C8 + #$82C9, // $82C9 + #$82CA, // $82CA + #$82CB, // $82CB + #$82CC, // $82CC + #$82CD, // $82CD + #$82CE, // $82CE + #$82CF, // $82CF + #$82D0, // $82D0 + #$82D1, // $82D1 + #$82D2, // $82D2 + #$82D3, // $82D3 + #$82D4, // $82D4 + #$82D5, // $82D5 + #$82D6, // $82D6 + #$82D7, // $82D7 + #$82D8, // $82D8 + #$82D9, // $82D9 + #$82DA, // $82DA + #$82DB, // $82DB + #$82DC, // $82DC + #$82DD, // $82DD + #$82DE, // $82DE + #$82DF, // $82DF + #$82E0, // $82E0 + #$82E1, // $82E1 + #$82E2, // $82E2 + #$82E3, // $82E3 + #$82E4, // $82E4 + #$82E5, // $82E5 + #$82E6, // $82E6 + #$82E7, // $82E7 + #$82E8, // $82E8 + #$82E9, // $82E9 + #$82EA, // $82EA + #$82EB, // $82EB + #$82EC, // $82EC + #$82ED, // $82ED + #$82EE, // $82EE + #$82EF, // $82EF + #$82F0, // $82F0 + #$82F1, // $82F1 + #$82F2, // $82F2 + #$82F3, // $82F3 + #$82F4, // $82F4 + #$82F5, // $82F5 + #$82F6, // $82F6 + #$82F7, // $82F7 + #$82F8, // $82F8 + #$82F9, // $82F9 + #$82FA, // $82FA + #$82FB, // $82FB + #$82FC, // $82FC + #$82FD, // $82FD + #$82FE, // $82FE + #$82FF, // $82FF + #$8300, // $8300 + #$8301, // $8301 + #$8302, // $8302 + #$8303, // $8303 + #$8304, // $8304 + #$8305, // $8305 + #$8306, // $8306 + #$8307, // $8307 + #$8308, // $8308 + #$8309, // $8309 + #$830A, // $830A + #$830B, // $830B + #$830C, // $830C + #$830D, // $830D + #$830E, // $830E + #$830F, // $830F + #$8310, // $8310 + #$8311, // $8311 + #$8312, // $8312 + #$8313, // $8313 + #$8314, // $8314 + #$8315, // $8315 + #$8316, // $8316 + #$8317, // $8317 + #$8318, // $8318 + #$8319, // $8319 + #$831A, // $831A + #$831B, // $831B + #$831C, // $831C + #$831D, // $831D + #$831E, // $831E + #$831F, // $831F + #$8320, // $8320 + #$8321, // $8321 + #$8322, // $8322 + #$8323, // $8323 + #$8324, // $8324 + #$8325, // $8325 + #$8326, // $8326 + #$8327, // $8327 + #$8328, // $8328 + #$8329, // $8329 + #$832A, // $832A + #$832B, // $832B + #$832C, // $832C + #$832D, // $832D + #$832E, // $832E + #$832F, // $832F + #$8330, // $8330 + #$8331, // $8331 + #$8332, // $8332 + #$8333, // $8333 + #$8334, // $8334 + #$8335, // $8335 + #$8336, // $8336 + #$8337, // $8337 + #$8338, // $8338 + #$8339, // $8339 + #$833A, // $833A + #$833B, // $833B + #$833C, // $833C + #$833D, // $833D + #$833E, // $833E + #$833F, // $833F + #$8340, // $8340 + #$8341, // $8341 + #$8342, // $8342 + #$8343, // $8343 + #$8344, // $8344 + #$8345, // $8345 + #$8346, // $8346 + #$8347, // $8347 + #$8348, // $8348 + #$8349, // $8349 + #$834A, // $834A + #$834B, // $834B + #$834C, // $834C + #$834D, // $834D + #$834E, // $834E + #$834F, // $834F + #$8350, // $8350 + #$8351, // $8351 + #$8352, // $8352 + #$8353, // $8353 + #$8354, // $8354 + #$8355, // $8355 + #$8356, // $8356 + #$8357, // $8357 + #$8358, // $8358 + #$8359, // $8359 + #$835A, // $835A + #$835B, // $835B + #$835C, // $835C + #$835D, // $835D + #$835E, // $835E + #$835F, // $835F + #$8360, // $8360 + #$8361, // $8361 + #$8362, // $8362 + #$8363, // $8363 + #$8364, // $8364 + #$8365, // $8365 + #$8366, // $8366 + #$8367, // $8367 + #$8368, // $8368 + #$8369, // $8369 + #$836A, // $836A + #$836B, // $836B + #$836C, // $836C + #$836D, // $836D + #$836E, // $836E + #$836F, // $836F + #$8370, // $8370 + #$8371, // $8371 + #$8372, // $8372 + #$8373, // $8373 + #$8374, // $8374 + #$8375, // $8375 + #$8376, // $8376 + #$8377, // $8377 + #$8378, // $8378 + #$8379, // $8379 + #$837A, // $837A + #$837B, // $837B + #$837C, // $837C + #$837D, // $837D + #$837E, // $837E + #$837F, // $837F + #$8380, // $8380 + #$8381, // $8381 + #$8382, // $8382 + #$8383, // $8383 + #$8384, // $8384 + #$8385, // $8385 + #$8386, // $8386 + #$8387, // $8387 + #$8388, // $8388 + #$8389, // $8389 + #$838A, // $838A + #$838B, // $838B + #$838C, // $838C + #$838D, // $838D + #$838E, // $838E + #$838F, // $838F + #$8390, // $8390 + #$8391, // $8391 + #$8392, // $8392 + #$8393, // $8393 + #$8394, // $8394 + #$8395, // $8395 + #$8396, // $8396 + #$8397, // $8397 + #$8398, // $8398 + #$8399, // $8399 + #$839A, // $839A + #$839B, // $839B + #$839C, // $839C + #$839D, // $839D + #$839E, // $839E + #$839F, // $839F + #$83A0, // $83A0 + #$83A1, // $83A1 + #$83A2, // $83A2 + #$83A3, // $83A3 + #$83A4, // $83A4 + #$83A5, // $83A5 + #$83A6, // $83A6 + #$83A7, // $83A7 + #$83A8, // $83A8 + #$83A9, // $83A9 + #$83AA, // $83AA + #$83AB, // $83AB + #$83AC, // $83AC + #$83AD, // $83AD + #$83AE, // $83AE + #$83AF, // $83AF + #$83B0, // $83B0 + #$83B1, // $83B1 + #$83B2, // $83B2 + #$83B3, // $83B3 + #$83B4, // $83B4 + #$83B5, // $83B5 + #$83B6, // $83B6 + #$83B7, // $83B7 + #$83B8, // $83B8 + #$83B9, // $83B9 + #$83BA, // $83BA + #$83BB, // $83BB + #$83BC, // $83BC + #$83BD, // $83BD + #$83BE, // $83BE + #$83BF, // $83BF + #$83C0, // $83C0 + #$83C1, // $83C1 + #$83C2, // $83C2 + #$83C3, // $83C3 + #$83C4, // $83C4 + #$83C5, // $83C5 + #$83C6, // $83C6 + #$83C7, // $83C7 + #$83C8, // $83C8 + #$83C9, // $83C9 + #$83CA, // $83CA + #$83CB, // $83CB + #$83CC, // $83CC + #$83CD, // $83CD + #$83CE, // $83CE + #$83CF, // $83CF + #$83D0, // $83D0 + #$83D1, // $83D1 + #$83D2, // $83D2 + #$83D3, // $83D3 + #$83D4, // $83D4 + #$83D5, // $83D5 + #$83D6, // $83D6 + #$83D7, // $83D7 + #$83D8, // $83D8 + #$83D9, // $83D9 + #$83DA, // $83DA + #$83DB, // $83DB + #$83DC, // $83DC + #$83DD, // $83DD + #$83DE, // $83DE + #$83DF, // $83DF + #$83E0, // $83E0 + #$83E1, // $83E1 + #$83E2, // $83E2 + #$83E3, // $83E3 + #$83E4, // $83E4 + #$83E5, // $83E5 + #$83E6, // $83E6 + #$83E7, // $83E7 + #$83E8, // $83E8 + #$83E9, // $83E9 + #$83EA, // $83EA + #$83EB, // $83EB + #$83EC, // $83EC + #$83ED, // $83ED + #$83EE, // $83EE + #$83EF, // $83EF + #$83F0, // $83F0 + #$83F1, // $83F1 + #$83F2, // $83F2 + #$83F3, // $83F3 + #$83F4, // $83F4 + #$83F5, // $83F5 + #$83F6, // $83F6 + #$83F7, // $83F7 + #$83F8, // $83F8 + #$83F9, // $83F9 + #$83FA, // $83FA + #$83FB, // $83FB + #$83FC, // $83FC + #$83FD, // $83FD + #$83FE, // $83FE + #$83FF, // $83FF + #$8400, // $8400 + #$8401, // $8401 + #$8402, // $8402 + #$8403, // $8403 + #$8404, // $8404 + #$8405, // $8405 + #$8406, // $8406 + #$8407, // $8407 + #$8408, // $8408 + #$8409, // $8409 + #$840A, // $840A + #$840B, // $840B + #$840C, // $840C + #$840D, // $840D + #$840E, // $840E + #$840F, // $840F + #$8410, // $8410 + #$8411, // $8411 + #$8412, // $8412 + #$8413, // $8413 + #$8414, // $8414 + #$8415, // $8415 + #$8416, // $8416 + #$8417, // $8417 + #$8418, // $8418 + #$8419, // $8419 + #$841A, // $841A + #$841B, // $841B + #$841C, // $841C + #$841D, // $841D + #$841E, // $841E + #$841F, // $841F + #$8420, // $8420 + #$8421, // $8421 + #$8422, // $8422 + #$8423, // $8423 + #$8424, // $8424 + #$8425, // $8425 + #$8426, // $8426 + #$8427, // $8427 + #$8428, // $8428 + #$8429, // $8429 + #$842A, // $842A + #$842B, // $842B + #$842C, // $842C + #$842D, // $842D + #$842E, // $842E + #$842F, // $842F + #$8430, // $8430 + #$8431, // $8431 + #$8432, // $8432 + #$8433, // $8433 + #$8434, // $8434 + #$8435, // $8435 + #$8436, // $8436 + #$8437, // $8437 + #$8438, // $8438 + #$8439, // $8439 + #$843A, // $843A + #$843B, // $843B + #$843C, // $843C + #$843D, // $843D + #$843E, // $843E + #$843F, // $843F + #$8440, // $8440 + #$8441, // $8441 + #$8442, // $8442 + #$8443, // $8443 + #$8444, // $8444 + #$8445, // $8445 + #$8446, // $8446 + #$8447, // $8447 + #$8448, // $8448 + #$8449, // $8449 + #$844A, // $844A + #$844B, // $844B + #$844C, // $844C + #$844D, // $844D + #$844E, // $844E + #$844F, // $844F + #$8450, // $8450 + #$8451, // $8451 + #$8452, // $8452 + #$8453, // $8453 + #$8454, // $8454 + #$8455, // $8455 + #$8456, // $8456 + #$8457, // $8457 + #$8458, // $8458 + #$8459, // $8459 + #$845A, // $845A + #$845B, // $845B + #$845C, // $845C + #$845D, // $845D + #$845E, // $845E + #$845F, // $845F + #$8460, // $8460 + #$8461, // $8461 + #$8462, // $8462 + #$8463, // $8463 + #$8464, // $8464 + #$8465, // $8465 + #$8466, // $8466 + #$8467, // $8467 + #$8468, // $8468 + #$8469, // $8469 + #$846A, // $846A + #$846B, // $846B + #$846C, // $846C + #$846D, // $846D + #$846E, // $846E + #$846F, // $846F + #$8470, // $8470 + #$8471, // $8471 + #$8472, // $8472 + #$8473, // $8473 + #$8474, // $8474 + #$8475, // $8475 + #$8476, // $8476 + #$8477, // $8477 + #$8478, // $8478 + #$8479, // $8479 + #$847A, // $847A + #$847B, // $847B + #$847C, // $847C + #$847D, // $847D + #$847E, // $847E + #$847F, // $847F + #$8480, // $8480 + #$8481, // $8481 + #$8482, // $8482 + #$8483, // $8483 + #$8484, // $8484 + #$8485, // $8485 + #$8486, // $8486 + #$8487, // $8487 + #$8488, // $8488 + #$8489, // $8489 + #$848A, // $848A + #$848B, // $848B + #$848C, // $848C + #$848D, // $848D + #$848E, // $848E + #$848F, // $848F + #$8490, // $8490 + #$8491, // $8491 + #$8492, // $8492 + #$8493, // $8493 + #$8494, // $8494 + #$8495, // $8495 + #$8496, // $8496 + #$8497, // $8497 + #$8498, // $8498 + #$8499, // $8499 + #$849A, // $849A + #$849B, // $849B + #$849C, // $849C + #$849D, // $849D + #$849E, // $849E + #$849F, // $849F + #$84A0, // $84A0 + #$84A1, // $84A1 + #$84A2, // $84A2 + #$84A3, // $84A3 + #$84A4, // $84A4 + #$84A5, // $84A5 + #$84A6, // $84A6 + #$84A7, // $84A7 + #$84A8, // $84A8 + #$84A9, // $84A9 + #$84AA, // $84AA + #$84AB, // $84AB + #$84AC, // $84AC + #$84AD, // $84AD + #$84AE, // $84AE + #$84AF, // $84AF + #$84B0, // $84B0 + #$84B1, // $84B1 + #$84B2, // $84B2 + #$84B3, // $84B3 + #$84B4, // $84B4 + #$84B5, // $84B5 + #$84B6, // $84B6 + #$84B7, // $84B7 + #$84B8, // $84B8 + #$84B9, // $84B9 + #$84BA, // $84BA + #$84BB, // $84BB + #$84BC, // $84BC + #$84BD, // $84BD + #$84BE, // $84BE + #$84BF, // $84BF + #$84C0, // $84C0 + #$84C1, // $84C1 + #$84C2, // $84C2 + #$84C3, // $84C3 + #$84C4, // $84C4 + #$84C5, // $84C5 + #$84C6, // $84C6 + #$84C7, // $84C7 + #$84C8, // $84C8 + #$84C9, // $84C9 + #$84CA, // $84CA + #$84CB, // $84CB + #$84CC, // $84CC + #$84CD, // $84CD + #$84CE, // $84CE + #$84CF, // $84CF + #$84D0, // $84D0 + #$84D1, // $84D1 + #$84D2, // $84D2 + #$84D3, // $84D3 + #$84D4, // $84D4 + #$84D5, // $84D5 + #$84D6, // $84D6 + #$84D7, // $84D7 + #$84D8, // $84D8 + #$84D9, // $84D9 + #$84DA, // $84DA + #$84DB, // $84DB + #$84DC, // $84DC + #$84DD, // $84DD + #$84DE, // $84DE + #$84DF, // $84DF + #$84E0, // $84E0 + #$84E1, // $84E1 + #$84E2, // $84E2 + #$84E3, // $84E3 + #$84E4, // $84E4 + #$84E5, // $84E5 + #$84E6, // $84E6 + #$84E7, // $84E7 + #$84E8, // $84E8 + #$84E9, // $84E9 + #$84EA, // $84EA + #$84EB, // $84EB + #$84EC, // $84EC + #$84ED, // $84ED + #$84EE, // $84EE + #$84EF, // $84EF + #$84F0, // $84F0 + #$84F1, // $84F1 + #$84F2, // $84F2 + #$84F3, // $84F3 + #$84F4, // $84F4 + #$84F5, // $84F5 + #$84F6, // $84F6 + #$84F7, // $84F7 + #$84F8, // $84F8 + #$84F9, // $84F9 + #$84FA, // $84FA + #$84FB, // $84FB + #$84FC, // $84FC + #$84FD, // $84FD + #$84FE, // $84FE + #$84FF, // $84FF + #$8500, // $8500 + #$8501, // $8501 + #$8502, // $8502 + #$8503, // $8503 + #$8504, // $8504 + #$8505, // $8505 + #$8506, // $8506 + #$8507, // $8507 + #$8508, // $8508 + #$8509, // $8509 + #$850A, // $850A + #$850B, // $850B + #$850C, // $850C + #$850D, // $850D + #$850E, // $850E + #$850F, // $850F + #$8510, // $8510 + #$8511, // $8511 + #$8512, // $8512 + #$8513, // $8513 + #$8514, // $8514 + #$8515, // $8515 + #$8516, // $8516 + #$8517, // $8517 + #$8518, // $8518 + #$8519, // $8519 + #$851A, // $851A + #$851B, // $851B + #$851C, // $851C + #$851D, // $851D + #$851E, // $851E + #$851F, // $851F + #$8520, // $8520 + #$8521, // $8521 + #$8522, // $8522 + #$8523, // $8523 + #$8524, // $8524 + #$8525, // $8525 + #$8526, // $8526 + #$8527, // $8527 + #$8528, // $8528 + #$8529, // $8529 + #$852A, // $852A + #$852B, // $852B + #$852C, // $852C + #$852D, // $852D + #$852E, // $852E + #$852F, // $852F + #$8530, // $8530 + #$8531, // $8531 + #$8532, // $8532 + #$8533, // $8533 + #$8534, // $8534 + #$8535, // $8535 + #$8536, // $8536 + #$8537, // $8537 + #$8538, // $8538 + #$8539, // $8539 + #$853A, // $853A + #$853B, // $853B + #$853C, // $853C + #$853D, // $853D + #$853E, // $853E + #$853F, // $853F + #$8540, // $8540 + #$8541, // $8541 + #$8542, // $8542 + #$8543, // $8543 + #$8544, // $8544 + #$8545, // $8545 + #$8546, // $8546 + #$8547, // $8547 + #$8548, // $8548 + #$8549, // $8549 + #$854A, // $854A + #$854B, // $854B + #$854C, // $854C + #$854D, // $854D + #$854E, // $854E + #$854F, // $854F + #$8550, // $8550 + #$8551, // $8551 + #$8552, // $8552 + #$8553, // $8553 + #$8554, // $8554 + #$8555, // $8555 + #$8556, // $8556 + #$8557, // $8557 + #$8558, // $8558 + #$8559, // $8559 + #$855A, // $855A + #$855B, // $855B + #$855C, // $855C + #$855D, // $855D + #$855E, // $855E + #$855F, // $855F + #$8560, // $8560 + #$8561, // $8561 + #$8562, // $8562 + #$8563, // $8563 + #$8564, // $8564 + #$8565, // $8565 + #$8566, // $8566 + #$8567, // $8567 + #$8568, // $8568 + #$8569, // $8569 + #$856A, // $856A + #$856B, // $856B + #$856C, // $856C + #$856D, // $856D + #$856E, // $856E + #$856F, // $856F + #$8570, // $8570 + #$8571, // $8571 + #$8572, // $8572 + #$8573, // $8573 + #$8574, // $8574 + #$8575, // $8575 + #$8576, // $8576 + #$8577, // $8577 + #$8578, // $8578 + #$8579, // $8579 + #$857A, // $857A + #$857B, // $857B + #$857C, // $857C + #$857D, // $857D + #$857E, // $857E + #$857F, // $857F + #$8580, // $8580 + #$8581, // $8581 + #$8582, // $8582 + #$8583, // $8583 + #$8584, // $8584 + #$8585, // $8585 + #$8586, // $8586 + #$8587, // $8587 + #$8588, // $8588 + #$8589, // $8589 + #$858A, // $858A + #$858B, // $858B + #$858C, // $858C + #$858D, // $858D + #$858E, // $858E + #$858F, // $858F + #$8590, // $8590 + #$8591, // $8591 + #$8592, // $8592 + #$8593, // $8593 + #$8594, // $8594 + #$8595, // $8595 + #$8596, // $8596 + #$8597, // $8597 + #$8598, // $8598 + #$8599, // $8599 + #$859A, // $859A + #$859B, // $859B + #$859C, // $859C + #$859D, // $859D + #$859E, // $859E + #$859F, // $859F + #$85A0, // $85A0 + #$85A1, // $85A1 + #$85A2, // $85A2 + #$85A3, // $85A3 + #$85A4, // $85A4 + #$85A5, // $85A5 + #$85A6, // $85A6 + #$85A7, // $85A7 + #$85A8, // $85A8 + #$85A9, // $85A9 + #$85AA, // $85AA + #$85AB, // $85AB + #$85AC, // $85AC + #$85AD, // $85AD + #$85AE, // $85AE + #$85AF, // $85AF + #$85B0, // $85B0 + #$85B1, // $85B1 + #$85B2, // $85B2 + #$85B3, // $85B3 + #$85B4, // $85B4 + #$85B5, // $85B5 + #$85B6, // $85B6 + #$85B7, // $85B7 + #$85B8, // $85B8 + #$85B9, // $85B9 + #$85BA, // $85BA + #$85BB, // $85BB + #$85BC, // $85BC + #$85BD, // $85BD + #$85BE, // $85BE + #$85BF, // $85BF + #$85C0, // $85C0 + #$85C1, // $85C1 + #$85C2, // $85C2 + #$85C3, // $85C3 + #$85C4, // $85C4 + #$85C5, // $85C5 + #$85C6, // $85C6 + #$85C7, // $85C7 + #$85C8, // $85C8 + #$85C9, // $85C9 + #$85CA, // $85CA + #$85CB, // $85CB + #$85CC, // $85CC + #$85CD, // $85CD + #$85CE, // $85CE + #$85CF, // $85CF + #$85D0, // $85D0 + #$85D1, // $85D1 + #$85D2, // $85D2 + #$85D3, // $85D3 + #$85D4, // $85D4 + #$85D5, // $85D5 + #$85D6, // $85D6 + #$85D7, // $85D7 + #$85D8, // $85D8 + #$85D9, // $85D9 + #$85DA, // $85DA + #$85DB, // $85DB + #$85DC, // $85DC + #$85DD, // $85DD + #$85DE, // $85DE + #$85DF, // $85DF + #$85E0, // $85E0 + #$85E1, // $85E1 + #$85E2, // $85E2 + #$85E3, // $85E3 + #$85E4, // $85E4 + #$85E5, // $85E5 + #$85E6, // $85E6 + #$85E7, // $85E7 + #$85E8, // $85E8 + #$85E9, // $85E9 + #$85EA, // $85EA + #$85EB, // $85EB + #$85EC, // $85EC + #$85ED, // $85ED + #$85EE, // $85EE + #$85EF, // $85EF + #$85F0, // $85F0 + #$85F1, // $85F1 + #$85F2, // $85F2 + #$85F3, // $85F3 + #$85F4, // $85F4 + #$85F5, // $85F5 + #$85F6, // $85F6 + #$85F7, // $85F7 + #$85F8, // $85F8 + #$85F9, // $85F9 + #$85FA, // $85FA + #$85FB, // $85FB + #$85FC, // $85FC + #$85FD, // $85FD + #$85FE, // $85FE + #$85FF, // $85FF + #$8600, // $8600 + #$8601, // $8601 + #$8602, // $8602 + #$8603, // $8603 + #$8604, // $8604 + #$8605, // $8605 + #$8606, // $8606 + #$8607, // $8607 + #$8608, // $8608 + #$8609, // $8609 + #$860A, // $860A + #$860B, // $860B + #$860C, // $860C + #$860D, // $860D + #$860E, // $860E + #$860F, // $860F + #$8610, // $8610 + #$8611, // $8611 + #$8612, // $8612 + #$8613, // $8613 + #$8614, // $8614 + #$8615, // $8615 + #$8616, // $8616 + #$8617, // $8617 + #$8618, // $8618 + #$8619, // $8619 + #$861A, // $861A + #$861B, // $861B + #$861C, // $861C + #$861D, // $861D + #$861E, // $861E + #$861F, // $861F + #$8620, // $8620 + #$8621, // $8621 + #$8622, // $8622 + #$8623, // $8623 + #$8624, // $8624 + #$8625, // $8625 + #$8626, // $8626 + #$8627, // $8627 + #$8628, // $8628 + #$8629, // $8629 + #$862A, // $862A + #$862B, // $862B + #$862C, // $862C + #$862D, // $862D + #$862E, // $862E + #$862F, // $862F + #$8630, // $8630 + #$8631, // $8631 + #$8632, // $8632 + #$8633, // $8633 + #$8634, // $8634 + #$8635, // $8635 + #$8636, // $8636 + #$8637, // $8637 + #$8638, // $8638 + #$8639, // $8639 + #$863A, // $863A + #$863B, // $863B + #$863C, // $863C + #$863D, // $863D + #$863E, // $863E + #$863F, // $863F + #$8640, // $8640 + #$8641, // $8641 + #$8642, // $8642 + #$8643, // $8643 + #$8644, // $8644 + #$8645, // $8645 + #$8646, // $8646 + #$8647, // $8647 + #$8648, // $8648 + #$8649, // $8649 + #$864A, // $864A + #$864B, // $864B + #$864C, // $864C + #$864D, // $864D + #$864E, // $864E + #$864F, // $864F + #$8650, // $8650 + #$8651, // $8651 + #$8652, // $8652 + #$8653, // $8653 + #$8654, // $8654 + #$8655, // $8655 + #$8656, // $8656 + #$8657, // $8657 + #$8658, // $8658 + #$8659, // $8659 + #$865A, // $865A + #$865B, // $865B + #$865C, // $865C + #$865D, // $865D + #$865E, // $865E + #$865F, // $865F + #$8660, // $8660 + #$8661, // $8661 + #$8662, // $8662 + #$8663, // $8663 + #$8664, // $8664 + #$8665, // $8665 + #$8666, // $8666 + #$8667, // $8667 + #$8668, // $8668 + #$8669, // $8669 + #$866A, // $866A + #$866B, // $866B + #$866C, // $866C + #$866D, // $866D + #$866E, // $866E + #$866F, // $866F + #$8670, // $8670 + #$8671, // $8671 + #$8672, // $8672 + #$8673, // $8673 + #$8674, // $8674 + #$8675, // $8675 + #$8676, // $8676 + #$8677, // $8677 + #$8678, // $8678 + #$8679, // $8679 + #$867A, // $867A + #$867B, // $867B + #$867C, // $867C + #$867D, // $867D + #$867E, // $867E + #$867F, // $867F + #$8680, // $8680 + #$8681, // $8681 + #$8682, // $8682 + #$8683, // $8683 + #$8684, // $8684 + #$8685, // $8685 + #$8686, // $8686 + #$8687, // $8687 + #$8688, // $8688 + #$8689, // $8689 + #$868A, // $868A + #$868B, // $868B + #$868C, // $868C + #$868D, // $868D + #$868E, // $868E + #$868F, // $868F + #$8690, // $8690 + #$8691, // $8691 + #$8692, // $8692 + #$8693, // $8693 + #$8694, // $8694 + #$8695, // $8695 + #$8696, // $8696 + #$8697, // $8697 + #$8698, // $8698 + #$8699, // $8699 + #$869A, // $869A + #$869B, // $869B + #$869C, // $869C + #$869D, // $869D + #$869E, // $869E + #$869F, // $869F + #$86A0, // $86A0 + #$86A1, // $86A1 + #$86A2, // $86A2 + #$86A3, // $86A3 + #$86A4, // $86A4 + #$86A5, // $86A5 + #$86A6, // $86A6 + #$86A7, // $86A7 + #$86A8, // $86A8 + #$86A9, // $86A9 + #$86AA, // $86AA + #$86AB, // $86AB + #$86AC, // $86AC + #$86AD, // $86AD + #$86AE, // $86AE + #$86AF, // $86AF + #$86B0, // $86B0 + #$86B1, // $86B1 + #$86B2, // $86B2 + #$86B3, // $86B3 + #$86B4, // $86B4 + #$86B5, // $86B5 + #$86B6, // $86B6 + #$86B7, // $86B7 + #$86B8, // $86B8 + #$86B9, // $86B9 + #$86BA, // $86BA + #$86BB, // $86BB + #$86BC, // $86BC + #$86BD, // $86BD + #$86BE, // $86BE + #$86BF, // $86BF + #$86C0, // $86C0 + #$86C1, // $86C1 + #$86C2, // $86C2 + #$86C3, // $86C3 + #$86C4, // $86C4 + #$86C5, // $86C5 + #$86C6, // $86C6 + #$86C7, // $86C7 + #$86C8, // $86C8 + #$86C9, // $86C9 + #$86CA, // $86CA + #$86CB, // $86CB + #$86CC, // $86CC + #$86CD, // $86CD + #$86CE, // $86CE + #$86CF, // $86CF + #$86D0, // $86D0 + #$86D1, // $86D1 + #$86D2, // $86D2 + #$86D3, // $86D3 + #$86D4, // $86D4 + #$86D5, // $86D5 + #$86D6, // $86D6 + #$86D7, // $86D7 + #$86D8, // $86D8 + #$86D9, // $86D9 + #$86DA, // $86DA + #$86DB, // $86DB + #$86DC, // $86DC + #$86DD, // $86DD + #$86DE, // $86DE + #$86DF, // $86DF + #$86E0, // $86E0 + #$86E1, // $86E1 + #$86E2, // $86E2 + #$86E3, // $86E3 + #$86E4, // $86E4 + #$86E5, // $86E5 + #$86E6, // $86E6 + #$86E7, // $86E7 + #$86E8, // $86E8 + #$86E9, // $86E9 + #$86EA, // $86EA + #$86EB, // $86EB + #$86EC, // $86EC + #$86ED, // $86ED + #$86EE, // $86EE + #$86EF, // $86EF + #$86F0, // $86F0 + #$86F1, // $86F1 + #$86F2, // $86F2 + #$86F3, // $86F3 + #$86F4, // $86F4 + #$86F5, // $86F5 + #$86F6, // $86F6 + #$86F7, // $86F7 + #$86F8, // $86F8 + #$86F9, // $86F9 + #$86FA, // $86FA + #$86FB, // $86FB + #$86FC, // $86FC + #$86FD, // $86FD + #$86FE, // $86FE + #$86FF, // $86FF + #$8700, // $8700 + #$8701, // $8701 + #$8702, // $8702 + #$8703, // $8703 + #$8704, // $8704 + #$8705, // $8705 + #$8706, // $8706 + #$8707, // $8707 + #$8708, // $8708 + #$8709, // $8709 + #$870A, // $870A + #$870B, // $870B + #$870C, // $870C + #$870D, // $870D + #$870E, // $870E + #$870F, // $870F + #$8710, // $8710 + #$8711, // $8711 + #$8712, // $8712 + #$8713, // $8713 + #$8714, // $8714 + #$8715, // $8715 + #$8716, // $8716 + #$8717, // $8717 + #$8718, // $8718 + #$8719, // $8719 + #$871A, // $871A + #$871B, // $871B + #$871C, // $871C + #$871D, // $871D + #$871E, // $871E + #$871F, // $871F + #$8720, // $8720 + #$8721, // $8721 + #$8722, // $8722 + #$8723, // $8723 + #$8724, // $8724 + #$8725, // $8725 + #$8726, // $8726 + #$8727, // $8727 + #$8728, // $8728 + #$8729, // $8729 + #$872A, // $872A + #$872B, // $872B + #$872C, // $872C + #$872D, // $872D + #$872E, // $872E + #$872F, // $872F + #$8730, // $8730 + #$8731, // $8731 + #$8732, // $8732 + #$8733, // $8733 + #$8734, // $8734 + #$8735, // $8735 + #$8736, // $8736 + #$8737, // $8737 + #$8738, // $8738 + #$8739, // $8739 + #$873A, // $873A + #$873B, // $873B + #$873C, // $873C + #$873D, // $873D + #$873E, // $873E + #$873F, // $873F + #$8740, // $8740 + #$8741, // $8741 + #$8742, // $8742 + #$8743, // $8743 + #$8744, // $8744 + #$8745, // $8745 + #$8746, // $8746 + #$8747, // $8747 + #$8748, // $8748 + #$8749, // $8749 + #$874A, // $874A + #$874B, // $874B + #$874C, // $874C + #$874D, // $874D + #$874E, // $874E + #$874F, // $874F + #$8750, // $8750 + #$8751, // $8751 + #$8752, // $8752 + #$8753, // $8753 + #$8754, // $8754 + #$8755, // $8755 + #$8756, // $8756 + #$8757, // $8757 + #$8758, // $8758 + #$8759, // $8759 + #$875A, // $875A + #$875B, // $875B + #$875C, // $875C + #$875D, // $875D + #$875E, // $875E + #$875F, // $875F + #$8760, // $8760 + #$8761, // $8761 + #$8762, // $8762 + #$8763, // $8763 + #$8764, // $8764 + #$8765, // $8765 + #$8766, // $8766 + #$8767, // $8767 + #$8768, // $8768 + #$8769, // $8769 + #$876A, // $876A + #$876B, // $876B + #$876C, // $876C + #$876D, // $876D + #$876E, // $876E + #$876F, // $876F + #$8770, // $8770 + #$8771, // $8771 + #$8772, // $8772 + #$8773, // $8773 + #$8774, // $8774 + #$8775, // $8775 + #$8776, // $8776 + #$8777, // $8777 + #$8778, // $8778 + #$8779, // $8779 + #$877A, // $877A + #$877B, // $877B + #$877C, // $877C + #$877D, // $877D + #$877E, // $877E + #$877F, // $877F + #$8780, // $8780 + #$8781, // $8781 + #$8782, // $8782 + #$8783, // $8783 + #$8784, // $8784 + #$8785, // $8785 + #$8786, // $8786 + #$8787, // $8787 + #$8788, // $8788 + #$8789, // $8789 + #$878A, // $878A + #$878B, // $878B + #$878C, // $878C + #$878D, // $878D + #$878E, // $878E + #$878F, // $878F + #$8790, // $8790 + #$8791, // $8791 + #$8792, // $8792 + #$8793, // $8793 + #$8794, // $8794 + #$8795, // $8795 + #$8796, // $8796 + #$8797, // $8797 + #$8798, // $8798 + #$8799, // $8799 + #$879A, // $879A + #$879B, // $879B + #$879C, // $879C + #$879D, // $879D + #$879E, // $879E + #$879F, // $879F + #$87A0, // $87A0 + #$87A1, // $87A1 + #$87A2, // $87A2 + #$87A3, // $87A3 + #$87A4, // $87A4 + #$87A5, // $87A5 + #$87A6, // $87A6 + #$87A7, // $87A7 + #$87A8, // $87A8 + #$87A9, // $87A9 + #$87AA, // $87AA + #$87AB, // $87AB + #$87AC, // $87AC + #$87AD, // $87AD + #$87AE, // $87AE + #$87AF, // $87AF + #$87B0, // $87B0 + #$87B1, // $87B1 + #$87B2, // $87B2 + #$87B3, // $87B3 + #$87B4, // $87B4 + #$87B5, // $87B5 + #$87B6, // $87B6 + #$87B7, // $87B7 + #$87B8, // $87B8 + #$87B9, // $87B9 + #$87BA, // $87BA + #$87BB, // $87BB + #$87BC, // $87BC + #$87BD, // $87BD + #$87BE, // $87BE + #$87BF, // $87BF + #$87C0, // $87C0 + #$87C1, // $87C1 + #$87C2, // $87C2 + #$87C3, // $87C3 + #$87C4, // $87C4 + #$87C5, // $87C5 + #$87C6, // $87C6 + #$87C7, // $87C7 + #$87C8, // $87C8 + #$87C9, // $87C9 + #$87CA, // $87CA + #$87CB, // $87CB + #$87CC, // $87CC + #$87CD, // $87CD + #$87CE, // $87CE + #$87CF, // $87CF + #$87D0, // $87D0 + #$87D1, // $87D1 + #$87D2, // $87D2 + #$87D3, // $87D3 + #$87D4, // $87D4 + #$87D5, // $87D5 + #$87D6, // $87D6 + #$87D7, // $87D7 + #$87D8, // $87D8 + #$87D9, // $87D9 + #$87DA, // $87DA + #$87DB, // $87DB + #$87DC, // $87DC + #$87DD, // $87DD + #$87DE, // $87DE + #$87DF, // $87DF + #$87E0, // $87E0 + #$87E1, // $87E1 + #$87E2, // $87E2 + #$87E3, // $87E3 + #$87E4, // $87E4 + #$87E5, // $87E5 + #$87E6, // $87E6 + #$87E7, // $87E7 + #$87E8, // $87E8 + #$87E9, // $87E9 + #$87EA, // $87EA + #$87EB, // $87EB + #$87EC, // $87EC + #$87ED, // $87ED + #$87EE, // $87EE + #$87EF, // $87EF + #$87F0, // $87F0 + #$87F1, // $87F1 + #$87F2, // $87F2 + #$87F3, // $87F3 + #$87F4, // $87F4 + #$87F5, // $87F5 + #$87F6, // $87F6 + #$87F7, // $87F7 + #$87F8, // $87F8 + #$87F9, // $87F9 + #$87FA, // $87FA + #$87FB, // $87FB + #$87FC, // $87FC + #$87FD, // $87FD + #$87FE, // $87FE + #$87FF, // $87FF + #$8800, // $8800 + #$8801, // $8801 + #$8802, // $8802 + #$8803, // $8803 + #$8804, // $8804 + #$8805, // $8805 + #$8806, // $8806 + #$8807, // $8807 + #$8808, // $8808 + #$8809, // $8809 + #$880A, // $880A + #$880B, // $880B + #$880C, // $880C + #$880D, // $880D + #$880E, // $880E + #$880F, // $880F + #$8810, // $8810 + #$8811, // $8811 + #$8812, // $8812 + #$8813, // $8813 + #$8814, // $8814 + #$8815, // $8815 + #$8816, // $8816 + #$8817, // $8817 + #$8818, // $8818 + #$8819, // $8819 + #$881A, // $881A + #$881B, // $881B + #$881C, // $881C + #$881D, // $881D + #$881E, // $881E + #$881F, // $881F + #$8820, // $8820 + #$8821, // $8821 + #$8822, // $8822 + #$8823, // $8823 + #$8824, // $8824 + #$8825, // $8825 + #$8826, // $8826 + #$8827, // $8827 + #$8828, // $8828 + #$8829, // $8829 + #$882A, // $882A + #$882B, // $882B + #$882C, // $882C + #$882D, // $882D + #$882E, // $882E + #$882F, // $882F + #$8830, // $8830 + #$8831, // $8831 + #$8832, // $8832 + #$8833, // $8833 + #$8834, // $8834 + #$8835, // $8835 + #$8836, // $8836 + #$8837, // $8837 + #$8838, // $8838 + #$8839, // $8839 + #$883A, // $883A + #$883B, // $883B + #$883C, // $883C + #$883D, // $883D + #$883E, // $883E + #$883F, // $883F + #$8840, // $8840 + #$8841, // $8841 + #$8842, // $8842 + #$8843, // $8843 + #$8844, // $8844 + #$8845, // $8845 + #$8846, // $8846 + #$8847, // $8847 + #$8848, // $8848 + #$8849, // $8849 + #$884A, // $884A + #$884B, // $884B + #$884C, // $884C + #$884D, // $884D + #$884E, // $884E + #$884F, // $884F + #$8850, // $8850 + #$8851, // $8851 + #$8852, // $8852 + #$8853, // $8853 + #$8854, // $8854 + #$8855, // $8855 + #$8856, // $8856 + #$8857, // $8857 + #$8858, // $8858 + #$8859, // $8859 + #$885A, // $885A + #$885B, // $885B + #$885C, // $885C + #$885D, // $885D + #$885E, // $885E + #$885F, // $885F + #$8860, // $8860 + #$8861, // $8861 + #$8862, // $8862 + #$8863, // $8863 + #$8864, // $8864 + #$8865, // $8865 + #$8866, // $8866 + #$8867, // $8867 + #$8868, // $8868 + #$8869, // $8869 + #$886A, // $886A + #$886B, // $886B + #$886C, // $886C + #$886D, // $886D + #$886E, // $886E + #$886F, // $886F + #$8870, // $8870 + #$8871, // $8871 + #$8872, // $8872 + #$8873, // $8873 + #$8874, // $8874 + #$8875, // $8875 + #$8876, // $8876 + #$8877, // $8877 + #$8878, // $8878 + #$8879, // $8879 + #$887A, // $887A + #$887B, // $887B + #$887C, // $887C + #$887D, // $887D + #$887E, // $887E + #$887F, // $887F + #$8880, // $8880 + #$8881, // $8881 + #$8882, // $8882 + #$8883, // $8883 + #$8884, // $8884 + #$8885, // $8885 + #$8886, // $8886 + #$8887, // $8887 + #$8888, // $8888 + #$8889, // $8889 + #$888A, // $888A + #$888B, // $888B + #$888C, // $888C + #$888D, // $888D + #$888E, // $888E + #$888F, // $888F + #$8890, // $8890 + #$8891, // $8891 + #$8892, // $8892 + #$8893, // $8893 + #$8894, // $8894 + #$8895, // $8895 + #$8896, // $8896 + #$8897, // $8897 + #$8898, // $8898 + #$8899, // $8899 + #$889A, // $889A + #$889B, // $889B + #$889C, // $889C + #$889D, // $889D + #$889E, // $889E + #$889F, // $889F + #$88A0, // $88A0 + #$88A1, // $88A1 + #$88A2, // $88A2 + #$88A3, // $88A3 + #$88A4, // $88A4 + #$88A5, // $88A5 + #$88A6, // $88A6 + #$88A7, // $88A7 + #$88A8, // $88A8 + #$88A9, // $88A9 + #$88AA, // $88AA + #$88AB, // $88AB + #$88AC, // $88AC + #$88AD, // $88AD + #$88AE, // $88AE + #$88AF, // $88AF + #$88B0, // $88B0 + #$88B1, // $88B1 + #$88B2, // $88B2 + #$88B3, // $88B3 + #$88B4, // $88B4 + #$88B5, // $88B5 + #$88B6, // $88B6 + #$88B7, // $88B7 + #$88B8, // $88B8 + #$88B9, // $88B9 + #$88BA, // $88BA + #$88BB, // $88BB + #$88BC, // $88BC + #$88BD, // $88BD + #$88BE, // $88BE + #$88BF, // $88BF + #$88C0, // $88C0 + #$88C1, // $88C1 + #$88C2, // $88C2 + #$88C3, // $88C3 + #$88C4, // $88C4 + #$88C5, // $88C5 + #$88C6, // $88C6 + #$88C7, // $88C7 + #$88C8, // $88C8 + #$88C9, // $88C9 + #$88CA, // $88CA + #$88CB, // $88CB + #$88CC, // $88CC + #$88CD, // $88CD + #$88CE, // $88CE + #$88CF, // $88CF + #$88D0, // $88D0 + #$88D1, // $88D1 + #$88D2, // $88D2 + #$88D3, // $88D3 + #$88D4, // $88D4 + #$88D5, // $88D5 + #$88D6, // $88D6 + #$88D7, // $88D7 + #$88D8, // $88D8 + #$88D9, // $88D9 + #$88DA, // $88DA + #$88DB, // $88DB + #$88DC, // $88DC + #$88DD, // $88DD + #$88DE, // $88DE + #$88DF, // $88DF + #$88E0, // $88E0 + #$88E1, // $88E1 + #$88E2, // $88E2 + #$88E3, // $88E3 + #$88E4, // $88E4 + #$88E5, // $88E5 + #$88E6, // $88E6 + #$88E7, // $88E7 + #$88E8, // $88E8 + #$88E9, // $88E9 + #$88EA, // $88EA + #$88EB, // $88EB + #$88EC, // $88EC + #$88ED, // $88ED + #$88EE, // $88EE + #$88EF, // $88EF + #$88F0, // $88F0 + #$88F1, // $88F1 + #$88F2, // $88F2 + #$88F3, // $88F3 + #$88F4, // $88F4 + #$88F5, // $88F5 + #$88F6, // $88F6 + #$88F7, // $88F7 + #$88F8, // $88F8 + #$88F9, // $88F9 + #$88FA, // $88FA + #$88FB, // $88FB + #$88FC, // $88FC + #$88FD, // $88FD + #$88FE, // $88FE + #$88FF, // $88FF + #$8900, // $8900 + #$8901, // $8901 + #$8902, // $8902 + #$8903, // $8903 + #$8904, // $8904 + #$8905, // $8905 + #$8906, // $8906 + #$8907, // $8907 + #$8908, // $8908 + #$8909, // $8909 + #$890A, // $890A + #$890B, // $890B + #$890C, // $890C + #$890D, // $890D + #$890E, // $890E + #$890F, // $890F + #$8910, // $8910 + #$8911, // $8911 + #$8912, // $8912 + #$8913, // $8913 + #$8914, // $8914 + #$8915, // $8915 + #$8916, // $8916 + #$8917, // $8917 + #$8918, // $8918 + #$8919, // $8919 + #$891A, // $891A + #$891B, // $891B + #$891C, // $891C + #$891D, // $891D + #$891E, // $891E + #$891F, // $891F + #$8920, // $8920 + #$8921, // $8921 + #$8922, // $8922 + #$8923, // $8923 + #$8924, // $8924 + #$8925, // $8925 + #$8926, // $8926 + #$8927, // $8927 + #$8928, // $8928 + #$8929, // $8929 + #$892A, // $892A + #$892B, // $892B + #$892C, // $892C + #$892D, // $892D + #$892E, // $892E + #$892F, // $892F + #$8930, // $8930 + #$8931, // $8931 + #$8932, // $8932 + #$8933, // $8933 + #$8934, // $8934 + #$8935, // $8935 + #$8936, // $8936 + #$8937, // $8937 + #$8938, // $8938 + #$8939, // $8939 + #$893A, // $893A + #$893B, // $893B + #$893C, // $893C + #$893D, // $893D + #$893E, // $893E + #$893F, // $893F + #$8940, // $8940 + #$8941, // $8941 + #$8942, // $8942 + #$8943, // $8943 + #$8944, // $8944 + #$8945, // $8945 + #$8946, // $8946 + #$8947, // $8947 + #$8948, // $8948 + #$8949, // $8949 + #$894A, // $894A + #$894B, // $894B + #$894C, // $894C + #$894D, // $894D + #$894E, // $894E + #$894F, // $894F + #$8950, // $8950 + #$8951, // $8951 + #$8952, // $8952 + #$8953, // $8953 + #$8954, // $8954 + #$8955, // $8955 + #$8956, // $8956 + #$8957, // $8957 + #$8958, // $8958 + #$8959, // $8959 + #$895A, // $895A + #$895B, // $895B + #$895C, // $895C + #$895D, // $895D + #$895E, // $895E + #$895F, // $895F + #$8960, // $8960 + #$8961, // $8961 + #$8962, // $8962 + #$8963, // $8963 + #$8964, // $8964 + #$8965, // $8965 + #$8966, // $8966 + #$8967, // $8967 + #$8968, // $8968 + #$8969, // $8969 + #$896A, // $896A + #$896B, // $896B + #$896C, // $896C + #$896D, // $896D + #$896E, // $896E + #$896F, // $896F + #$8970, // $8970 + #$8971, // $8971 + #$8972, // $8972 + #$8973, // $8973 + #$8974, // $8974 + #$8975, // $8975 + #$8976, // $8976 + #$8977, // $8977 + #$8978, // $8978 + #$8979, // $8979 + #$897A, // $897A + #$897B, // $897B + #$897C, // $897C + #$897D, // $897D + #$897E, // $897E + #$897F, // $897F + #$8980, // $8980 + #$8981, // $8981 + #$8982, // $8982 + #$8983, // $8983 + #$8984, // $8984 + #$8985, // $8985 + #$8986, // $8986 + #$8987, // $8987 + #$8988, // $8988 + #$8989, // $8989 + #$898A, // $898A + #$898B, // $898B + #$898C, // $898C + #$898D, // $898D + #$898E, // $898E + #$898F, // $898F + #$8990, // $8990 + #$8991, // $8991 + #$8992, // $8992 + #$8993, // $8993 + #$8994, // $8994 + #$8995, // $8995 + #$8996, // $8996 + #$8997, // $8997 + #$8998, // $8998 + #$8999, // $8999 + #$899A, // $899A + #$899B, // $899B + #$899C, // $899C + #$899D, // $899D + #$899E, // $899E + #$899F, // $899F + #$89A0, // $89A0 + #$89A1, // $89A1 + #$89A2, // $89A2 + #$89A3, // $89A3 + #$89A4, // $89A4 + #$89A5, // $89A5 + #$89A6, // $89A6 + #$89A7, // $89A7 + #$89A8, // $89A8 + #$89A9, // $89A9 + #$89AA, // $89AA + #$89AB, // $89AB + #$89AC, // $89AC + #$89AD, // $89AD + #$89AE, // $89AE + #$89AF, // $89AF + #$89B0, // $89B0 + #$89B1, // $89B1 + #$89B2, // $89B2 + #$89B3, // $89B3 + #$89B4, // $89B4 + #$89B5, // $89B5 + #$89B6, // $89B6 + #$89B7, // $89B7 + #$89B8, // $89B8 + #$89B9, // $89B9 + #$89BA, // $89BA + #$89BB, // $89BB + #$89BC, // $89BC + #$89BD, // $89BD + #$89BE, // $89BE + #$89BF, // $89BF + #$89C0, // $89C0 + #$89C1, // $89C1 + #$89C2, // $89C2 + #$89C3, // $89C3 + #$89C4, // $89C4 + #$89C5, // $89C5 + #$89C6, // $89C6 + #$89C7, // $89C7 + #$89C8, // $89C8 + #$89C9, // $89C9 + #$89CA, // $89CA + #$89CB, // $89CB + #$89CC, // $89CC + #$89CD, // $89CD + #$89CE, // $89CE + #$89CF, // $89CF + #$89D0, // $89D0 + #$89D1, // $89D1 + #$89D2, // $89D2 + #$89D3, // $89D3 + #$89D4, // $89D4 + #$89D5, // $89D5 + #$89D6, // $89D6 + #$89D7, // $89D7 + #$89D8, // $89D8 + #$89D9, // $89D9 + #$89DA, // $89DA + #$89DB, // $89DB + #$89DC, // $89DC + #$89DD, // $89DD + #$89DE, // $89DE + #$89DF, // $89DF + #$89E0, // $89E0 + #$89E1, // $89E1 + #$89E2, // $89E2 + #$89E3, // $89E3 + #$89E4, // $89E4 + #$89E5, // $89E5 + #$89E6, // $89E6 + #$89E7, // $89E7 + #$89E8, // $89E8 + #$89E9, // $89E9 + #$89EA, // $89EA + #$89EB, // $89EB + #$89EC, // $89EC + #$89ED, // $89ED + #$89EE, // $89EE + #$89EF, // $89EF + #$89F0, // $89F0 + #$89F1, // $89F1 + #$89F2, // $89F2 + #$89F3, // $89F3 + #$89F4, // $89F4 + #$89F5, // $89F5 + #$89F6, // $89F6 + #$89F7, // $89F7 + #$89F8, // $89F8 + #$89F9, // $89F9 + #$89FA, // $89FA + #$89FB, // $89FB + #$89FC, // $89FC + #$89FD, // $89FD + #$89FE, // $89FE + #$89FF, // $89FF + #$8A00, // $8A00 + #$8A01, // $8A01 + #$8A02, // $8A02 + #$8A03, // $8A03 + #$8A04, // $8A04 + #$8A05, // $8A05 + #$8A06, // $8A06 + #$8A07, // $8A07 + #$8A08, // $8A08 + #$8A09, // $8A09 + #$8A0A, // $8A0A + #$8A0B, // $8A0B + #$8A0C, // $8A0C + #$8A0D, // $8A0D + #$8A0E, // $8A0E + #$8A0F, // $8A0F + #$8A10, // $8A10 + #$8A11, // $8A11 + #$8A12, // $8A12 + #$8A13, // $8A13 + #$8A14, // $8A14 + #$8A15, // $8A15 + #$8A16, // $8A16 + #$8A17, // $8A17 + #$8A18, // $8A18 + #$8A19, // $8A19 + #$8A1A, // $8A1A + #$8A1B, // $8A1B + #$8A1C, // $8A1C + #$8A1D, // $8A1D + #$8A1E, // $8A1E + #$8A1F, // $8A1F + #$8A20, // $8A20 + #$8A21, // $8A21 + #$8A22, // $8A22 + #$8A23, // $8A23 + #$8A24, // $8A24 + #$8A25, // $8A25 + #$8A26, // $8A26 + #$8A27, // $8A27 + #$8A28, // $8A28 + #$8A29, // $8A29 + #$8A2A, // $8A2A + #$8A2B, // $8A2B + #$8A2C, // $8A2C + #$8A2D, // $8A2D + #$8A2E, // $8A2E + #$8A2F, // $8A2F + #$8A30, // $8A30 + #$8A31, // $8A31 + #$8A32, // $8A32 + #$8A33, // $8A33 + #$8A34, // $8A34 + #$8A35, // $8A35 + #$8A36, // $8A36 + #$8A37, // $8A37 + #$8A38, // $8A38 + #$8A39, // $8A39 + #$8A3A, // $8A3A + #$8A3B, // $8A3B + #$8A3C, // $8A3C + #$8A3D, // $8A3D + #$8A3E, // $8A3E + #$8A3F, // $8A3F + #$8A40, // $8A40 + #$8A41, // $8A41 + #$8A42, // $8A42 + #$8A43, // $8A43 + #$8A44, // $8A44 + #$8A45, // $8A45 + #$8A46, // $8A46 + #$8A47, // $8A47 + #$8A48, // $8A48 + #$8A49, // $8A49 + #$8A4A, // $8A4A + #$8A4B, // $8A4B + #$8A4C, // $8A4C + #$8A4D, // $8A4D + #$8A4E, // $8A4E + #$8A4F, // $8A4F + #$8A50, // $8A50 + #$8A51, // $8A51 + #$8A52, // $8A52 + #$8A53, // $8A53 + #$8A54, // $8A54 + #$8A55, // $8A55 + #$8A56, // $8A56 + #$8A57, // $8A57 + #$8A58, // $8A58 + #$8A59, // $8A59 + #$8A5A, // $8A5A + #$8A5B, // $8A5B + #$8A5C, // $8A5C + #$8A5D, // $8A5D + #$8A5E, // $8A5E + #$8A5F, // $8A5F + #$8A60, // $8A60 + #$8A61, // $8A61 + #$8A62, // $8A62 + #$8A63, // $8A63 + #$8A64, // $8A64 + #$8A65, // $8A65 + #$8A66, // $8A66 + #$8A67, // $8A67 + #$8A68, // $8A68 + #$8A69, // $8A69 + #$8A6A, // $8A6A + #$8A6B, // $8A6B + #$8A6C, // $8A6C + #$8A6D, // $8A6D + #$8A6E, // $8A6E + #$8A6F, // $8A6F + #$8A70, // $8A70 + #$8A71, // $8A71 + #$8A72, // $8A72 + #$8A73, // $8A73 + #$8A74, // $8A74 + #$8A75, // $8A75 + #$8A76, // $8A76 + #$8A77, // $8A77 + #$8A78, // $8A78 + #$8A79, // $8A79 + #$8A7A, // $8A7A + #$8A7B, // $8A7B + #$8A7C, // $8A7C + #$8A7D, // $8A7D + #$8A7E, // $8A7E + #$8A7F, // $8A7F + #$8A80, // $8A80 + #$8A81, // $8A81 + #$8A82, // $8A82 + #$8A83, // $8A83 + #$8A84, // $8A84 + #$8A85, // $8A85 + #$8A86, // $8A86 + #$8A87, // $8A87 + #$8A88, // $8A88 + #$8A89, // $8A89 + #$8A8A, // $8A8A + #$8A8B, // $8A8B + #$8A8C, // $8A8C + #$8A8D, // $8A8D + #$8A8E, // $8A8E + #$8A8F, // $8A8F + #$8A90, // $8A90 + #$8A91, // $8A91 + #$8A92, // $8A92 + #$8A93, // $8A93 + #$8A94, // $8A94 + #$8A95, // $8A95 + #$8A96, // $8A96 + #$8A97, // $8A97 + #$8A98, // $8A98 + #$8A99, // $8A99 + #$8A9A, // $8A9A + #$8A9B, // $8A9B + #$8A9C, // $8A9C + #$8A9D, // $8A9D + #$8A9E, // $8A9E + #$8A9F, // $8A9F + #$8AA0, // $8AA0 + #$8AA1, // $8AA1 + #$8AA2, // $8AA2 + #$8AA3, // $8AA3 + #$8AA4, // $8AA4 + #$8AA5, // $8AA5 + #$8AA6, // $8AA6 + #$8AA7, // $8AA7 + #$8AA8, // $8AA8 + #$8AA9, // $8AA9 + #$8AAA, // $8AAA + #$8AAB, // $8AAB + #$8AAC, // $8AAC + #$8AAD, // $8AAD + #$8AAE, // $8AAE + #$8AAF, // $8AAF + #$8AB0, // $8AB0 + #$8AB1, // $8AB1 + #$8AB2, // $8AB2 + #$8AB3, // $8AB3 + #$8AB4, // $8AB4 + #$8AB5, // $8AB5 + #$8AB6, // $8AB6 + #$8AB7, // $8AB7 + #$8AB8, // $8AB8 + #$8AB9, // $8AB9 + #$8ABA, // $8ABA + #$8ABB, // $8ABB + #$8ABC, // $8ABC + #$8ABD, // $8ABD + #$8ABE, // $8ABE + #$8ABF, // $8ABF + #$8AC0, // $8AC0 + #$8AC1, // $8AC1 + #$8AC2, // $8AC2 + #$8AC3, // $8AC3 + #$8AC4, // $8AC4 + #$8AC5, // $8AC5 + #$8AC6, // $8AC6 + #$8AC7, // $8AC7 + #$8AC8, // $8AC8 + #$8AC9, // $8AC9 + #$8ACA, // $8ACA + #$8ACB, // $8ACB + #$8ACC, // $8ACC + #$8ACD, // $8ACD + #$8ACE, // $8ACE + #$8ACF, // $8ACF + #$8AD0, // $8AD0 + #$8AD1, // $8AD1 + #$8AD2, // $8AD2 + #$8AD3, // $8AD3 + #$8AD4, // $8AD4 + #$8AD5, // $8AD5 + #$8AD6, // $8AD6 + #$8AD7, // $8AD7 + #$8AD8, // $8AD8 + #$8AD9, // $8AD9 + #$8ADA, // $8ADA + #$8ADB, // $8ADB + #$8ADC, // $8ADC + #$8ADD, // $8ADD + #$8ADE, // $8ADE + #$8ADF, // $8ADF + #$8AE0, // $8AE0 + #$8AE1, // $8AE1 + #$8AE2, // $8AE2 + #$8AE3, // $8AE3 + #$8AE4, // $8AE4 + #$8AE5, // $8AE5 + #$8AE6, // $8AE6 + #$8AE7, // $8AE7 + #$8AE8, // $8AE8 + #$8AE9, // $8AE9 + #$8AEA, // $8AEA + #$8AEB, // $8AEB + #$8AEC, // $8AEC + #$8AED, // $8AED + #$8AEE, // $8AEE + #$8AEF, // $8AEF + #$8AF0, // $8AF0 + #$8AF1, // $8AF1 + #$8AF2, // $8AF2 + #$8AF3, // $8AF3 + #$8AF4, // $8AF4 + #$8AF5, // $8AF5 + #$8AF6, // $8AF6 + #$8AF7, // $8AF7 + #$8AF8, // $8AF8 + #$8AF9, // $8AF9 + #$8AFA, // $8AFA + #$8AFB, // $8AFB + #$8AFC, // $8AFC + #$8AFD, // $8AFD + #$8AFE, // $8AFE + #$8AFF, // $8AFF + #$8B00, // $8B00 + #$8B01, // $8B01 + #$8B02, // $8B02 + #$8B03, // $8B03 + #$8B04, // $8B04 + #$8B05, // $8B05 + #$8B06, // $8B06 + #$8B07, // $8B07 + #$8B08, // $8B08 + #$8B09, // $8B09 + #$8B0A, // $8B0A + #$8B0B, // $8B0B + #$8B0C, // $8B0C + #$8B0D, // $8B0D + #$8B0E, // $8B0E + #$8B0F, // $8B0F + #$8B10, // $8B10 + #$8B11, // $8B11 + #$8B12, // $8B12 + #$8B13, // $8B13 + #$8B14, // $8B14 + #$8B15, // $8B15 + #$8B16, // $8B16 + #$8B17, // $8B17 + #$8B18, // $8B18 + #$8B19, // $8B19 + #$8B1A, // $8B1A + #$8B1B, // $8B1B + #$8B1C, // $8B1C + #$8B1D, // $8B1D + #$8B1E, // $8B1E + #$8B1F, // $8B1F + #$8B20, // $8B20 + #$8B21, // $8B21 + #$8B22, // $8B22 + #$8B23, // $8B23 + #$8B24, // $8B24 + #$8B25, // $8B25 + #$8B26, // $8B26 + #$8B27, // $8B27 + #$8B28, // $8B28 + #$8B29, // $8B29 + #$8B2A, // $8B2A + #$8B2B, // $8B2B + #$8B2C, // $8B2C + #$8B2D, // $8B2D + #$8B2E, // $8B2E + #$8B2F, // $8B2F + #$8B30, // $8B30 + #$8B31, // $8B31 + #$8B32, // $8B32 + #$8B33, // $8B33 + #$8B34, // $8B34 + #$8B35, // $8B35 + #$8B36, // $8B36 + #$8B37, // $8B37 + #$8B38, // $8B38 + #$8B39, // $8B39 + #$8B3A, // $8B3A + #$8B3B, // $8B3B + #$8B3C, // $8B3C + #$8B3D, // $8B3D + #$8B3E, // $8B3E + #$8B3F, // $8B3F + #$8B40, // $8B40 + #$8B41, // $8B41 + #$8B42, // $8B42 + #$8B43, // $8B43 + #$8B44, // $8B44 + #$8B45, // $8B45 + #$8B46, // $8B46 + #$8B47, // $8B47 + #$8B48, // $8B48 + #$8B49, // $8B49 + #$8B4A, // $8B4A + #$8B4B, // $8B4B + #$8B4C, // $8B4C + #$8B4D, // $8B4D + #$8B4E, // $8B4E + #$8B4F, // $8B4F + #$8B50, // $8B50 + #$8B51, // $8B51 + #$8B52, // $8B52 + #$8B53, // $8B53 + #$8B54, // $8B54 + #$8B55, // $8B55 + #$8B56, // $8B56 + #$8B57, // $8B57 + #$8B58, // $8B58 + #$8B59, // $8B59 + #$8B5A, // $8B5A + #$8B5B, // $8B5B + #$8B5C, // $8B5C + #$8B5D, // $8B5D + #$8B5E, // $8B5E + #$8B5F, // $8B5F + #$8B60, // $8B60 + #$8B61, // $8B61 + #$8B62, // $8B62 + #$8B63, // $8B63 + #$8B64, // $8B64 + #$8B65, // $8B65 + #$8B66, // $8B66 + #$8B67, // $8B67 + #$8B68, // $8B68 + #$8B69, // $8B69 + #$8B6A, // $8B6A + #$8B6B, // $8B6B + #$8B6C, // $8B6C + #$8B6D, // $8B6D + #$8B6E, // $8B6E + #$8B6F, // $8B6F + #$8B70, // $8B70 + #$8B71, // $8B71 + #$8B72, // $8B72 + #$8B73, // $8B73 + #$8B74, // $8B74 + #$8B75, // $8B75 + #$8B76, // $8B76 + #$8B77, // $8B77 + #$8B78, // $8B78 + #$8B79, // $8B79 + #$8B7A, // $8B7A + #$8B7B, // $8B7B + #$8B7C, // $8B7C + #$8B7D, // $8B7D + #$8B7E, // $8B7E + #$8B7F, // $8B7F + #$8B80, // $8B80 + #$8B81, // $8B81 + #$8B82, // $8B82 + #$8B83, // $8B83 + #$8B84, // $8B84 + #$8B85, // $8B85 + #$8B86, // $8B86 + #$8B87, // $8B87 + #$8B88, // $8B88 + #$8B89, // $8B89 + #$8B8A, // $8B8A + #$8B8B, // $8B8B + #$8B8C, // $8B8C + #$8B8D, // $8B8D + #$8B8E, // $8B8E + #$8B8F, // $8B8F + #$8B90, // $8B90 + #$8B91, // $8B91 + #$8B92, // $8B92 + #$8B93, // $8B93 + #$8B94, // $8B94 + #$8B95, // $8B95 + #$8B96, // $8B96 + #$8B97, // $8B97 + #$8B98, // $8B98 + #$8B99, // $8B99 + #$8B9A, // $8B9A + #$8B9B, // $8B9B + #$8B9C, // $8B9C + #$8B9D, // $8B9D + #$8B9E, // $8B9E + #$8B9F, // $8B9F + #$8BA0, // $8BA0 + #$8BA1, // $8BA1 + #$8BA2, // $8BA2 + #$8BA3, // $8BA3 + #$8BA4, // $8BA4 + #$8BA5, // $8BA5 + #$8BA6, // $8BA6 + #$8BA7, // $8BA7 + #$8BA8, // $8BA8 + #$8BA9, // $8BA9 + #$8BAA, // $8BAA + #$8BAB, // $8BAB + #$8BAC, // $8BAC + #$8BAD, // $8BAD + #$8BAE, // $8BAE + #$8BAF, // $8BAF + #$8BB0, // $8BB0 + #$8BB1, // $8BB1 + #$8BB2, // $8BB2 + #$8BB3, // $8BB3 + #$8BB4, // $8BB4 + #$8BB5, // $8BB5 + #$8BB6, // $8BB6 + #$8BB7, // $8BB7 + #$8BB8, // $8BB8 + #$8BB9, // $8BB9 + #$8BBA, // $8BBA + #$8BBB, // $8BBB + #$8BBC, // $8BBC + #$8BBD, // $8BBD + #$8BBE, // $8BBE + #$8BBF, // $8BBF + #$8BC0, // $8BC0 + #$8BC1, // $8BC1 + #$8BC2, // $8BC2 + #$8BC3, // $8BC3 + #$8BC4, // $8BC4 + #$8BC5, // $8BC5 + #$8BC6, // $8BC6 + #$8BC7, // $8BC7 + #$8BC8, // $8BC8 + #$8BC9, // $8BC9 + #$8BCA, // $8BCA + #$8BCB, // $8BCB + #$8BCC, // $8BCC + #$8BCD, // $8BCD + #$8BCE, // $8BCE + #$8BCF, // $8BCF + #$8BD0, // $8BD0 + #$8BD1, // $8BD1 + #$8BD2, // $8BD2 + #$8BD3, // $8BD3 + #$8BD4, // $8BD4 + #$8BD5, // $8BD5 + #$8BD6, // $8BD6 + #$8BD7, // $8BD7 + #$8BD8, // $8BD8 + #$8BD9, // $8BD9 + #$8BDA, // $8BDA + #$8BDB, // $8BDB + #$8BDC, // $8BDC + #$8BDD, // $8BDD + #$8BDE, // $8BDE + #$8BDF, // $8BDF + #$8BE0, // $8BE0 + #$8BE1, // $8BE1 + #$8BE2, // $8BE2 + #$8BE3, // $8BE3 + #$8BE4, // $8BE4 + #$8BE5, // $8BE5 + #$8BE6, // $8BE6 + #$8BE7, // $8BE7 + #$8BE8, // $8BE8 + #$8BE9, // $8BE9 + #$8BEA, // $8BEA + #$8BEB, // $8BEB + #$8BEC, // $8BEC + #$8BED, // $8BED + #$8BEE, // $8BEE + #$8BEF, // $8BEF + #$8BF0, // $8BF0 + #$8BF1, // $8BF1 + #$8BF2, // $8BF2 + #$8BF3, // $8BF3 + #$8BF4, // $8BF4 + #$8BF5, // $8BF5 + #$8BF6, // $8BF6 + #$8BF7, // $8BF7 + #$8BF8, // $8BF8 + #$8BF9, // $8BF9 + #$8BFA, // $8BFA + #$8BFB, // $8BFB + #$8BFC, // $8BFC + #$8BFD, // $8BFD + #$8BFE, // $8BFE + #$8BFF, // $8BFF + #$8C00, // $8C00 + #$8C01, // $8C01 + #$8C02, // $8C02 + #$8C03, // $8C03 + #$8C04, // $8C04 + #$8C05, // $8C05 + #$8C06, // $8C06 + #$8C07, // $8C07 + #$8C08, // $8C08 + #$8C09, // $8C09 + #$8C0A, // $8C0A + #$8C0B, // $8C0B + #$8C0C, // $8C0C + #$8C0D, // $8C0D + #$8C0E, // $8C0E + #$8C0F, // $8C0F + #$8C10, // $8C10 + #$8C11, // $8C11 + #$8C12, // $8C12 + #$8C13, // $8C13 + #$8C14, // $8C14 + #$8C15, // $8C15 + #$8C16, // $8C16 + #$8C17, // $8C17 + #$8C18, // $8C18 + #$8C19, // $8C19 + #$8C1A, // $8C1A + #$8C1B, // $8C1B + #$8C1C, // $8C1C + #$8C1D, // $8C1D + #$8C1E, // $8C1E + #$8C1F, // $8C1F + #$8C20, // $8C20 + #$8C21, // $8C21 + #$8C22, // $8C22 + #$8C23, // $8C23 + #$8C24, // $8C24 + #$8C25, // $8C25 + #$8C26, // $8C26 + #$8C27, // $8C27 + #$8C28, // $8C28 + #$8C29, // $8C29 + #$8C2A, // $8C2A + #$8C2B, // $8C2B + #$8C2C, // $8C2C + #$8C2D, // $8C2D + #$8C2E, // $8C2E + #$8C2F, // $8C2F + #$8C30, // $8C30 + #$8C31, // $8C31 + #$8C32, // $8C32 + #$8C33, // $8C33 + #$8C34, // $8C34 + #$8C35, // $8C35 + #$8C36, // $8C36 + #$8C37, // $8C37 + #$8C38, // $8C38 + #$8C39, // $8C39 + #$8C3A, // $8C3A + #$8C3B, // $8C3B + #$8C3C, // $8C3C + #$8C3D, // $8C3D + #$8C3E, // $8C3E + #$8C3F, // $8C3F + #$8C40, // $8C40 + #$8C41, // $8C41 + #$8C42, // $8C42 + #$8C43, // $8C43 + #$8C44, // $8C44 + #$8C45, // $8C45 + #$8C46, // $8C46 + #$8C47, // $8C47 + #$8C48, // $8C48 + #$8C49, // $8C49 + #$8C4A, // $8C4A + #$8C4B, // $8C4B + #$8C4C, // $8C4C + #$8C4D, // $8C4D + #$8C4E, // $8C4E + #$8C4F, // $8C4F + #$8C50, // $8C50 + #$8C51, // $8C51 + #$8C52, // $8C52 + #$8C53, // $8C53 + #$8C54, // $8C54 + #$8C55, // $8C55 + #$8C56, // $8C56 + #$8C57, // $8C57 + #$8C58, // $8C58 + #$8C59, // $8C59 + #$8C5A, // $8C5A + #$8C5B, // $8C5B + #$8C5C, // $8C5C + #$8C5D, // $8C5D + #$8C5E, // $8C5E + #$8C5F, // $8C5F + #$8C60, // $8C60 + #$8C61, // $8C61 + #$8C62, // $8C62 + #$8C63, // $8C63 + #$8C64, // $8C64 + #$8C65, // $8C65 + #$8C66, // $8C66 + #$8C67, // $8C67 + #$8C68, // $8C68 + #$8C69, // $8C69 + #$8C6A, // $8C6A + #$8C6B, // $8C6B + #$8C6C, // $8C6C + #$8C6D, // $8C6D + #$8C6E, // $8C6E + #$8C6F, // $8C6F + #$8C70, // $8C70 + #$8C71, // $8C71 + #$8C72, // $8C72 + #$8C73, // $8C73 + #$8C74, // $8C74 + #$8C75, // $8C75 + #$8C76, // $8C76 + #$8C77, // $8C77 + #$8C78, // $8C78 + #$8C79, // $8C79 + #$8C7A, // $8C7A + #$8C7B, // $8C7B + #$8C7C, // $8C7C + #$8C7D, // $8C7D + #$8C7E, // $8C7E + #$8C7F, // $8C7F + #$8C80, // $8C80 + #$8C81, // $8C81 + #$8C82, // $8C82 + #$8C83, // $8C83 + #$8C84, // $8C84 + #$8C85, // $8C85 + #$8C86, // $8C86 + #$8C87, // $8C87 + #$8C88, // $8C88 + #$8C89, // $8C89 + #$8C8A, // $8C8A + #$8C8B, // $8C8B + #$8C8C, // $8C8C + #$8C8D, // $8C8D + #$8C8E, // $8C8E + #$8C8F, // $8C8F + #$8C90, // $8C90 + #$8C91, // $8C91 + #$8C92, // $8C92 + #$8C93, // $8C93 + #$8C94, // $8C94 + #$8C95, // $8C95 + #$8C96, // $8C96 + #$8C97, // $8C97 + #$8C98, // $8C98 + #$8C99, // $8C99 + #$8C9A, // $8C9A + #$8C9B, // $8C9B + #$8C9C, // $8C9C + #$8C9D, // $8C9D + #$8C9E, // $8C9E + #$8C9F, // $8C9F + #$8CA0, // $8CA0 + #$8CA1, // $8CA1 + #$8CA2, // $8CA2 + #$8CA3, // $8CA3 + #$8CA4, // $8CA4 + #$8CA5, // $8CA5 + #$8CA6, // $8CA6 + #$8CA7, // $8CA7 + #$8CA8, // $8CA8 + #$8CA9, // $8CA9 + #$8CAA, // $8CAA + #$8CAB, // $8CAB + #$8CAC, // $8CAC + #$8CAD, // $8CAD + #$8CAE, // $8CAE + #$8CAF, // $8CAF + #$8CB0, // $8CB0 + #$8CB1, // $8CB1 + #$8CB2, // $8CB2 + #$8CB3, // $8CB3 + #$8CB4, // $8CB4 + #$8CB5, // $8CB5 + #$8CB6, // $8CB6 + #$8CB7, // $8CB7 + #$8CB8, // $8CB8 + #$8CB9, // $8CB9 + #$8CBA, // $8CBA + #$8CBB, // $8CBB + #$8CBC, // $8CBC + #$8CBD, // $8CBD + #$8CBE, // $8CBE + #$8CBF, // $8CBF + #$8CC0, // $8CC0 + #$8CC1, // $8CC1 + #$8CC2, // $8CC2 + #$8CC3, // $8CC3 + #$8CC4, // $8CC4 + #$8CC5, // $8CC5 + #$8CC6, // $8CC6 + #$8CC7, // $8CC7 + #$8CC8, // $8CC8 + #$8CC9, // $8CC9 + #$8CCA, // $8CCA + #$8CCB, // $8CCB + #$8CCC, // $8CCC + #$8CCD, // $8CCD + #$8CCE, // $8CCE + #$8CCF, // $8CCF + #$8CD0, // $8CD0 + #$8CD1, // $8CD1 + #$8CD2, // $8CD2 + #$8CD3, // $8CD3 + #$8CD4, // $8CD4 + #$8CD5, // $8CD5 + #$8CD6, // $8CD6 + #$8CD7, // $8CD7 + #$8CD8, // $8CD8 + #$8CD9, // $8CD9 + #$8CDA, // $8CDA + #$8CDB, // $8CDB + #$8CDC, // $8CDC + #$8CDD, // $8CDD + #$8CDE, // $8CDE + #$8CDF, // $8CDF + #$8CE0, // $8CE0 + #$8CE1, // $8CE1 + #$8CE2, // $8CE2 + #$8CE3, // $8CE3 + #$8CE4, // $8CE4 + #$8CE5, // $8CE5 + #$8CE6, // $8CE6 + #$8CE7, // $8CE7 + #$8CE8, // $8CE8 + #$8CE9, // $8CE9 + #$8CEA, // $8CEA + #$8CEB, // $8CEB + #$8CEC, // $8CEC + #$8CED, // $8CED + #$8CEE, // $8CEE + #$8CEF, // $8CEF + #$8CF0, // $8CF0 + #$8CF1, // $8CF1 + #$8CF2, // $8CF2 + #$8CF3, // $8CF3 + #$8CF4, // $8CF4 + #$8CF5, // $8CF5 + #$8CF6, // $8CF6 + #$8CF7, // $8CF7 + #$8CF8, // $8CF8 + #$8CF9, // $8CF9 + #$8CFA, // $8CFA + #$8CFB, // $8CFB + #$8CFC, // $8CFC + #$8CFD, // $8CFD + #$8CFE, // $8CFE + #$8CFF, // $8CFF + #$8D00, // $8D00 + #$8D01, // $8D01 + #$8D02, // $8D02 + #$8D03, // $8D03 + #$8D04, // $8D04 + #$8D05, // $8D05 + #$8D06, // $8D06 + #$8D07, // $8D07 + #$8D08, // $8D08 + #$8D09, // $8D09 + #$8D0A, // $8D0A + #$8D0B, // $8D0B + #$8D0C, // $8D0C + #$8D0D, // $8D0D + #$8D0E, // $8D0E + #$8D0F, // $8D0F + #$8D10, // $8D10 + #$8D11, // $8D11 + #$8D12, // $8D12 + #$8D13, // $8D13 + #$8D14, // $8D14 + #$8D15, // $8D15 + #$8D16, // $8D16 + #$8D17, // $8D17 + #$8D18, // $8D18 + #$8D19, // $8D19 + #$8D1A, // $8D1A + #$8D1B, // $8D1B + #$8D1C, // $8D1C + #$8D1D, // $8D1D + #$8D1E, // $8D1E + #$8D1F, // $8D1F + #$8D20, // $8D20 + #$8D21, // $8D21 + #$8D22, // $8D22 + #$8D23, // $8D23 + #$8D24, // $8D24 + #$8D25, // $8D25 + #$8D26, // $8D26 + #$8D27, // $8D27 + #$8D28, // $8D28 + #$8D29, // $8D29 + #$8D2A, // $8D2A + #$8D2B, // $8D2B + #$8D2C, // $8D2C + #$8D2D, // $8D2D + #$8D2E, // $8D2E + #$8D2F, // $8D2F + #$8D30, // $8D30 + #$8D31, // $8D31 + #$8D32, // $8D32 + #$8D33, // $8D33 + #$8D34, // $8D34 + #$8D35, // $8D35 + #$8D36, // $8D36 + #$8D37, // $8D37 + #$8D38, // $8D38 + #$8D39, // $8D39 + #$8D3A, // $8D3A + #$8D3B, // $8D3B + #$8D3C, // $8D3C + #$8D3D, // $8D3D + #$8D3E, // $8D3E + #$8D3F, // $8D3F + #$8D40, // $8D40 + #$8D41, // $8D41 + #$8D42, // $8D42 + #$8D43, // $8D43 + #$8D44, // $8D44 + #$8D45, // $8D45 + #$8D46, // $8D46 + #$8D47, // $8D47 + #$8D48, // $8D48 + #$8D49, // $8D49 + #$8D4A, // $8D4A + #$8D4B, // $8D4B + #$8D4C, // $8D4C + #$8D4D, // $8D4D + #$8D4E, // $8D4E + #$8D4F, // $8D4F + #$8D50, // $8D50 + #$8D51, // $8D51 + #$8D52, // $8D52 + #$8D53, // $8D53 + #$8D54, // $8D54 + #$8D55, // $8D55 + #$8D56, // $8D56 + #$8D57, // $8D57 + #$8D58, // $8D58 + #$8D59, // $8D59 + #$8D5A, // $8D5A + #$8D5B, // $8D5B + #$8D5C, // $8D5C + #$8D5D, // $8D5D + #$8D5E, // $8D5E + #$8D5F, // $8D5F + #$8D60, // $8D60 + #$8D61, // $8D61 + #$8D62, // $8D62 + #$8D63, // $8D63 + #$8D64, // $8D64 + #$8D65, // $8D65 + #$8D66, // $8D66 + #$8D67, // $8D67 + #$8D68, // $8D68 + #$8D69, // $8D69 + #$8D6A, // $8D6A + #$8D6B, // $8D6B + #$8D6C, // $8D6C + #$8D6D, // $8D6D + #$8D6E, // $8D6E + #$8D6F, // $8D6F + #$8D70, // $8D70 + #$8D71, // $8D71 + #$8D72, // $8D72 + #$8D73, // $8D73 + #$8D74, // $8D74 + #$8D75, // $8D75 + #$8D76, // $8D76 + #$8D77, // $8D77 + #$8D78, // $8D78 + #$8D79, // $8D79 + #$8D7A, // $8D7A + #$8D7B, // $8D7B + #$8D7C, // $8D7C + #$8D7D, // $8D7D + #$8D7E, // $8D7E + #$8D7F, // $8D7F + #$8D80, // $8D80 + #$8D81, // $8D81 + #$8D82, // $8D82 + #$8D83, // $8D83 + #$8D84, // $8D84 + #$8D85, // $8D85 + #$8D86, // $8D86 + #$8D87, // $8D87 + #$8D88, // $8D88 + #$8D89, // $8D89 + #$8D8A, // $8D8A + #$8D8B, // $8D8B + #$8D8C, // $8D8C + #$8D8D, // $8D8D + #$8D8E, // $8D8E + #$8D8F, // $8D8F + #$8D90, // $8D90 + #$8D91, // $8D91 + #$8D92, // $8D92 + #$8D93, // $8D93 + #$8D94, // $8D94 + #$8D95, // $8D95 + #$8D96, // $8D96 + #$8D97, // $8D97 + #$8D98, // $8D98 + #$8D99, // $8D99 + #$8D9A, // $8D9A + #$8D9B, // $8D9B + #$8D9C, // $8D9C + #$8D9D, // $8D9D + #$8D9E, // $8D9E + #$8D9F, // $8D9F + #$8DA0, // $8DA0 + #$8DA1, // $8DA1 + #$8DA2, // $8DA2 + #$8DA3, // $8DA3 + #$8DA4, // $8DA4 + #$8DA5, // $8DA5 + #$8DA6, // $8DA6 + #$8DA7, // $8DA7 + #$8DA8, // $8DA8 + #$8DA9, // $8DA9 + #$8DAA, // $8DAA + #$8DAB, // $8DAB + #$8DAC, // $8DAC + #$8DAD, // $8DAD + #$8DAE, // $8DAE + #$8DAF, // $8DAF + #$8DB0, // $8DB0 + #$8DB1, // $8DB1 + #$8DB2, // $8DB2 + #$8DB3, // $8DB3 + #$8DB4, // $8DB4 + #$8DB5, // $8DB5 + #$8DB6, // $8DB6 + #$8DB7, // $8DB7 + #$8DB8, // $8DB8 + #$8DB9, // $8DB9 + #$8DBA, // $8DBA + #$8DBB, // $8DBB + #$8DBC, // $8DBC + #$8DBD, // $8DBD + #$8DBE, // $8DBE + #$8DBF, // $8DBF + #$8DC0, // $8DC0 + #$8DC1, // $8DC1 + #$8DC2, // $8DC2 + #$8DC3, // $8DC3 + #$8DC4, // $8DC4 + #$8DC5, // $8DC5 + #$8DC6, // $8DC6 + #$8DC7, // $8DC7 + #$8DC8, // $8DC8 + #$8DC9, // $8DC9 + #$8DCA, // $8DCA + #$8DCB, // $8DCB + #$8DCC, // $8DCC + #$8DCD, // $8DCD + #$8DCE, // $8DCE + #$8DCF, // $8DCF + #$8DD0, // $8DD0 + #$8DD1, // $8DD1 + #$8DD2, // $8DD2 + #$8DD3, // $8DD3 + #$8DD4, // $8DD4 + #$8DD5, // $8DD5 + #$8DD6, // $8DD6 + #$8DD7, // $8DD7 + #$8DD8, // $8DD8 + #$8DD9, // $8DD9 + #$8DDA, // $8DDA + #$8DDB, // $8DDB + #$8DDC, // $8DDC + #$8DDD, // $8DDD + #$8DDE, // $8DDE + #$8DDF, // $8DDF + #$8DE0, // $8DE0 + #$8DE1, // $8DE1 + #$8DE2, // $8DE2 + #$8DE3, // $8DE3 + #$8DE4, // $8DE4 + #$8DE5, // $8DE5 + #$8DE6, // $8DE6 + #$8DE7, // $8DE7 + #$8DE8, // $8DE8 + #$8DE9, // $8DE9 + #$8DEA, // $8DEA + #$8DEB, // $8DEB + #$8DEC, // $8DEC + #$8DED, // $8DED + #$8DEE, // $8DEE + #$8DEF, // $8DEF + #$8DF0, // $8DF0 + #$8DF1, // $8DF1 + #$8DF2, // $8DF2 + #$8DF3, // $8DF3 + #$8DF4, // $8DF4 + #$8DF5, // $8DF5 + #$8DF6, // $8DF6 + #$8DF7, // $8DF7 + #$8DF8, // $8DF8 + #$8DF9, // $8DF9 + #$8DFA, // $8DFA + #$8DFB, // $8DFB + #$8DFC, // $8DFC + #$8DFD, // $8DFD + #$8DFE, // $8DFE + #$8DFF, // $8DFF + #$8E00, // $8E00 + #$8E01, // $8E01 + #$8E02, // $8E02 + #$8E03, // $8E03 + #$8E04, // $8E04 + #$8E05, // $8E05 + #$8E06, // $8E06 + #$8E07, // $8E07 + #$8E08, // $8E08 + #$8E09, // $8E09 + #$8E0A, // $8E0A + #$8E0B, // $8E0B + #$8E0C, // $8E0C + #$8E0D, // $8E0D + #$8E0E, // $8E0E + #$8E0F, // $8E0F + #$8E10, // $8E10 + #$8E11, // $8E11 + #$8E12, // $8E12 + #$8E13, // $8E13 + #$8E14, // $8E14 + #$8E15, // $8E15 + #$8E16, // $8E16 + #$8E17, // $8E17 + #$8E18, // $8E18 + #$8E19, // $8E19 + #$8E1A, // $8E1A + #$8E1B, // $8E1B + #$8E1C, // $8E1C + #$8E1D, // $8E1D + #$8E1E, // $8E1E + #$8E1F, // $8E1F + #$8E20, // $8E20 + #$8E21, // $8E21 + #$8E22, // $8E22 + #$8E23, // $8E23 + #$8E24, // $8E24 + #$8E25, // $8E25 + #$8E26, // $8E26 + #$8E27, // $8E27 + #$8E28, // $8E28 + #$8E29, // $8E29 + #$8E2A, // $8E2A + #$8E2B, // $8E2B + #$8E2C, // $8E2C + #$8E2D, // $8E2D + #$8E2E, // $8E2E + #$8E2F, // $8E2F + #$8E30, // $8E30 + #$8E31, // $8E31 + #$8E32, // $8E32 + #$8E33, // $8E33 + #$8E34, // $8E34 + #$8E35, // $8E35 + #$8E36, // $8E36 + #$8E37, // $8E37 + #$8E38, // $8E38 + #$8E39, // $8E39 + #$8E3A, // $8E3A + #$8E3B, // $8E3B + #$8E3C, // $8E3C + #$8E3D, // $8E3D + #$8E3E, // $8E3E + #$8E3F, // $8E3F + #$8E40, // $8E40 + #$8E41, // $8E41 + #$8E42, // $8E42 + #$8E43, // $8E43 + #$8E44, // $8E44 + #$8E45, // $8E45 + #$8E46, // $8E46 + #$8E47, // $8E47 + #$8E48, // $8E48 + #$8E49, // $8E49 + #$8E4A, // $8E4A + #$8E4B, // $8E4B + #$8E4C, // $8E4C + #$8E4D, // $8E4D + #$8E4E, // $8E4E + #$8E4F, // $8E4F + #$8E50, // $8E50 + #$8E51, // $8E51 + #$8E52, // $8E52 + #$8E53, // $8E53 + #$8E54, // $8E54 + #$8E55, // $8E55 + #$8E56, // $8E56 + #$8E57, // $8E57 + #$8E58, // $8E58 + #$8E59, // $8E59 + #$8E5A, // $8E5A + #$8E5B, // $8E5B + #$8E5C, // $8E5C + #$8E5D, // $8E5D + #$8E5E, // $8E5E + #$8E5F, // $8E5F + #$8E60, // $8E60 + #$8E61, // $8E61 + #$8E62, // $8E62 + #$8E63, // $8E63 + #$8E64, // $8E64 + #$8E65, // $8E65 + #$8E66, // $8E66 + #$8E67, // $8E67 + #$8E68, // $8E68 + #$8E69, // $8E69 + #$8E6A, // $8E6A + #$8E6B, // $8E6B + #$8E6C, // $8E6C + #$8E6D, // $8E6D + #$8E6E, // $8E6E + #$8E6F, // $8E6F + #$8E70, // $8E70 + #$8E71, // $8E71 + #$8E72, // $8E72 + #$8E73, // $8E73 + #$8E74, // $8E74 + #$8E75, // $8E75 + #$8E76, // $8E76 + #$8E77, // $8E77 + #$8E78, // $8E78 + #$8E79, // $8E79 + #$8E7A, // $8E7A + #$8E7B, // $8E7B + #$8E7C, // $8E7C + #$8E7D, // $8E7D + #$8E7E, // $8E7E + #$8E7F, // $8E7F + #$8E80, // $8E80 + #$8E81, // $8E81 + #$8E82, // $8E82 + #$8E83, // $8E83 + #$8E84, // $8E84 + #$8E85, // $8E85 + #$8E86, // $8E86 + #$8E87, // $8E87 + #$8E88, // $8E88 + #$8E89, // $8E89 + #$8E8A, // $8E8A + #$8E8B, // $8E8B + #$8E8C, // $8E8C + #$8E8D, // $8E8D + #$8E8E, // $8E8E + #$8E8F, // $8E8F + #$8E90, // $8E90 + #$8E91, // $8E91 + #$8E92, // $8E92 + #$8E93, // $8E93 + #$8E94, // $8E94 + #$8E95, // $8E95 + #$8E96, // $8E96 + #$8E97, // $8E97 + #$8E98, // $8E98 + #$8E99, // $8E99 + #$8E9A, // $8E9A + #$8E9B, // $8E9B + #$8E9C, // $8E9C + #$8E9D, // $8E9D + #$8E9E, // $8E9E + #$8E9F, // $8E9F + #$8EA0, // $8EA0 + #$8EA1, // $8EA1 + #$8EA2, // $8EA2 + #$8EA3, // $8EA3 + #$8EA4, // $8EA4 + #$8EA5, // $8EA5 + #$8EA6, // $8EA6 + #$8EA7, // $8EA7 + #$8EA8, // $8EA8 + #$8EA9, // $8EA9 + #$8EAA, // $8EAA + #$8EAB, // $8EAB + #$8EAC, // $8EAC + #$8EAD, // $8EAD + #$8EAE, // $8EAE + #$8EAF, // $8EAF + #$8EB0, // $8EB0 + #$8EB1, // $8EB1 + #$8EB2, // $8EB2 + #$8EB3, // $8EB3 + #$8EB4, // $8EB4 + #$8EB5, // $8EB5 + #$8EB6, // $8EB6 + #$8EB7, // $8EB7 + #$8EB8, // $8EB8 + #$8EB9, // $8EB9 + #$8EBA, // $8EBA + #$8EBB, // $8EBB + #$8EBC, // $8EBC + #$8EBD, // $8EBD + #$8EBE, // $8EBE + #$8EBF, // $8EBF + #$8EC0, // $8EC0 + #$8EC1, // $8EC1 + #$8EC2, // $8EC2 + #$8EC3, // $8EC3 + #$8EC4, // $8EC4 + #$8EC5, // $8EC5 + #$8EC6, // $8EC6 + #$8EC7, // $8EC7 + #$8EC8, // $8EC8 + #$8EC9, // $8EC9 + #$8ECA, // $8ECA + #$8ECB, // $8ECB + #$8ECC, // $8ECC + #$8ECD, // $8ECD + #$8ECE, // $8ECE + #$8ECF, // $8ECF + #$8ED0, // $8ED0 + #$8ED1, // $8ED1 + #$8ED2, // $8ED2 + #$8ED3, // $8ED3 + #$8ED4, // $8ED4 + #$8ED5, // $8ED5 + #$8ED6, // $8ED6 + #$8ED7, // $8ED7 + #$8ED8, // $8ED8 + #$8ED9, // $8ED9 + #$8EDA, // $8EDA + #$8EDB, // $8EDB + #$8EDC, // $8EDC + #$8EDD, // $8EDD + #$8EDE, // $8EDE + #$8EDF, // $8EDF + #$8EE0, // $8EE0 + #$8EE1, // $8EE1 + #$8EE2, // $8EE2 + #$8EE3, // $8EE3 + #$8EE4, // $8EE4 + #$8EE5, // $8EE5 + #$8EE6, // $8EE6 + #$8EE7, // $8EE7 + #$8EE8, // $8EE8 + #$8EE9, // $8EE9 + #$8EEA, // $8EEA + #$8EEB, // $8EEB + #$8EEC, // $8EEC + #$8EED, // $8EED + #$8EEE, // $8EEE + #$8EEF, // $8EEF + #$8EF0, // $8EF0 + #$8EF1, // $8EF1 + #$8EF2, // $8EF2 + #$8EF3, // $8EF3 + #$8EF4, // $8EF4 + #$8EF5, // $8EF5 + #$8EF6, // $8EF6 + #$8EF7, // $8EF7 + #$8EF8, // $8EF8 + #$8EF9, // $8EF9 + #$8EFA, // $8EFA + #$8EFB, // $8EFB + #$8EFC, // $8EFC + #$8EFD, // $8EFD + #$8EFE, // $8EFE + #$8EFF, // $8EFF + #$8F00, // $8F00 + #$8F01, // $8F01 + #$8F02, // $8F02 + #$8F03, // $8F03 + #$8F04, // $8F04 + #$8F05, // $8F05 + #$8F06, // $8F06 + #$8F07, // $8F07 + #$8F08, // $8F08 + #$8F09, // $8F09 + #$8F0A, // $8F0A + #$8F0B, // $8F0B + #$8F0C, // $8F0C + #$8F0D, // $8F0D + #$8F0E, // $8F0E + #$8F0F, // $8F0F + #$8F10, // $8F10 + #$8F11, // $8F11 + #$8F12, // $8F12 + #$8F13, // $8F13 + #$8F14, // $8F14 + #$8F15, // $8F15 + #$8F16, // $8F16 + #$8F17, // $8F17 + #$8F18, // $8F18 + #$8F19, // $8F19 + #$8F1A, // $8F1A + #$8F1B, // $8F1B + #$8F1C, // $8F1C + #$8F1D, // $8F1D + #$8F1E, // $8F1E + #$8F1F, // $8F1F + #$8F20, // $8F20 + #$8F21, // $8F21 + #$8F22, // $8F22 + #$8F23, // $8F23 + #$8F24, // $8F24 + #$8F25, // $8F25 + #$8F26, // $8F26 + #$8F27, // $8F27 + #$8F28, // $8F28 + #$8F29, // $8F29 + #$8F2A, // $8F2A + #$8F2B, // $8F2B + #$8F2C, // $8F2C + #$8F2D, // $8F2D + #$8F2E, // $8F2E + #$8F2F, // $8F2F + #$8F30, // $8F30 + #$8F31, // $8F31 + #$8F32, // $8F32 + #$8F33, // $8F33 + #$8F34, // $8F34 + #$8F35, // $8F35 + #$8F36, // $8F36 + #$8F37, // $8F37 + #$8F38, // $8F38 + #$8F39, // $8F39 + #$8F3A, // $8F3A + #$8F3B, // $8F3B + #$8F3C, // $8F3C + #$8F3D, // $8F3D + #$8F3E, // $8F3E + #$8F3F, // $8F3F + #$8F40, // $8F40 + #$8F41, // $8F41 + #$8F42, // $8F42 + #$8F43, // $8F43 + #$8F44, // $8F44 + #$8F45, // $8F45 + #$8F46, // $8F46 + #$8F47, // $8F47 + #$8F48, // $8F48 + #$8F49, // $8F49 + #$8F4A, // $8F4A + #$8F4B, // $8F4B + #$8F4C, // $8F4C + #$8F4D, // $8F4D + #$8F4E, // $8F4E + #$8F4F, // $8F4F + #$8F50, // $8F50 + #$8F51, // $8F51 + #$8F52, // $8F52 + #$8F53, // $8F53 + #$8F54, // $8F54 + #$8F55, // $8F55 + #$8F56, // $8F56 + #$8F57, // $8F57 + #$8F58, // $8F58 + #$8F59, // $8F59 + #$8F5A, // $8F5A + #$8F5B, // $8F5B + #$8F5C, // $8F5C + #$8F5D, // $8F5D + #$8F5E, // $8F5E + #$8F5F, // $8F5F + #$8F60, // $8F60 + #$8F61, // $8F61 + #$8F62, // $8F62 + #$8F63, // $8F63 + #$8F64, // $8F64 + #$8F65, // $8F65 + #$8F66, // $8F66 + #$8F67, // $8F67 + #$8F68, // $8F68 + #$8F69, // $8F69 + #$8F6A, // $8F6A + #$8F6B, // $8F6B + #$8F6C, // $8F6C + #$8F6D, // $8F6D + #$8F6E, // $8F6E + #$8F6F, // $8F6F + #$8F70, // $8F70 + #$8F71, // $8F71 + #$8F72, // $8F72 + #$8F73, // $8F73 + #$8F74, // $8F74 + #$8F75, // $8F75 + #$8F76, // $8F76 + #$8F77, // $8F77 + #$8F78, // $8F78 + #$8F79, // $8F79 + #$8F7A, // $8F7A + #$8F7B, // $8F7B + #$8F7C, // $8F7C + #$8F7D, // $8F7D + #$8F7E, // $8F7E + #$8F7F, // $8F7F + #$8F80, // $8F80 + #$8F81, // $8F81 + #$8F82, // $8F82 + #$8F83, // $8F83 + #$8F84, // $8F84 + #$8F85, // $8F85 + #$8F86, // $8F86 + #$8F87, // $8F87 + #$8F88, // $8F88 + #$8F89, // $8F89 + #$8F8A, // $8F8A + #$8F8B, // $8F8B + #$8F8C, // $8F8C + #$8F8D, // $8F8D + #$8F8E, // $8F8E + #$8F8F, // $8F8F + #$8F90, // $8F90 + #$8F91, // $8F91 + #$8F92, // $8F92 + #$8F93, // $8F93 + #$8F94, // $8F94 + #$8F95, // $8F95 + #$8F96, // $8F96 + #$8F97, // $8F97 + #$8F98, // $8F98 + #$8F99, // $8F99 + #$8F9A, // $8F9A + #$8F9B, // $8F9B + #$8F9C, // $8F9C + #$8F9D, // $8F9D + #$8F9E, // $8F9E + #$8F9F, // $8F9F + #$8FA0, // $8FA0 + #$8FA1, // $8FA1 + #$8FA2, // $8FA2 + #$8FA3, // $8FA3 + #$8FA4, // $8FA4 + #$8FA5, // $8FA5 + #$8FA6, // $8FA6 + #$8FA7, // $8FA7 + #$8FA8, // $8FA8 + #$8FA9, // $8FA9 + #$8FAA, // $8FAA + #$8FAB, // $8FAB + #$8FAC, // $8FAC + #$8FAD, // $8FAD + #$8FAE, // $8FAE + #$8FAF, // $8FAF + #$8FB0, // $8FB0 + #$8FB1, // $8FB1 + #$8FB2, // $8FB2 + #$8FB3, // $8FB3 + #$8FB4, // $8FB4 + #$8FB5, // $8FB5 + #$8FB6, // $8FB6 + #$8FB7, // $8FB7 + #$8FB8, // $8FB8 + #$8FB9, // $8FB9 + #$8FBA, // $8FBA + #$8FBB, // $8FBB + #$8FBC, // $8FBC + #$8FBD, // $8FBD + #$8FBE, // $8FBE + #$8FBF, // $8FBF + #$8FC0, // $8FC0 + #$8FC1, // $8FC1 + #$8FC2, // $8FC2 + #$8FC3, // $8FC3 + #$8FC4, // $8FC4 + #$8FC5, // $8FC5 + #$8FC6, // $8FC6 + #$8FC7, // $8FC7 + #$8FC8, // $8FC8 + #$8FC9, // $8FC9 + #$8FCA, // $8FCA + #$8FCB, // $8FCB + #$8FCC, // $8FCC + #$8FCD, // $8FCD + #$8FCE, // $8FCE + #$8FCF, // $8FCF + #$8FD0, // $8FD0 + #$8FD1, // $8FD1 + #$8FD2, // $8FD2 + #$8FD3, // $8FD3 + #$8FD4, // $8FD4 + #$8FD5, // $8FD5 + #$8FD6, // $8FD6 + #$8FD7, // $8FD7 + #$8FD8, // $8FD8 + #$8FD9, // $8FD9 + #$8FDA, // $8FDA + #$8FDB, // $8FDB + #$8FDC, // $8FDC + #$8FDD, // $8FDD + #$8FDE, // $8FDE + #$8FDF, // $8FDF + #$8FE0, // $8FE0 + #$8FE1, // $8FE1 + #$8FE2, // $8FE2 + #$8FE3, // $8FE3 + #$8FE4, // $8FE4 + #$8FE5, // $8FE5 + #$8FE6, // $8FE6 + #$8FE7, // $8FE7 + #$8FE8, // $8FE8 + #$8FE9, // $8FE9 + #$8FEA, // $8FEA + #$8FEB, // $8FEB + #$8FEC, // $8FEC + #$8FED, // $8FED + #$8FEE, // $8FEE + #$8FEF, // $8FEF + #$8FF0, // $8FF0 + #$8FF1, // $8FF1 + #$8FF2, // $8FF2 + #$8FF3, // $8FF3 + #$8FF4, // $8FF4 + #$8FF5, // $8FF5 + #$8FF6, // $8FF6 + #$8FF7, // $8FF7 + #$8FF8, // $8FF8 + #$8FF9, // $8FF9 + #$8FFA, // $8FFA + #$8FFB, // $8FFB + #$8FFC, // $8FFC + #$8FFD, // $8FFD + #$8FFE, // $8FFE + #$8FFF, // $8FFF + #$9000, // $9000 + #$9001, // $9001 + #$9002, // $9002 + #$9003, // $9003 + #$9004, // $9004 + #$9005, // $9005 + #$9006, // $9006 + #$9007, // $9007 + #$9008, // $9008 + #$9009, // $9009 + #$900A, // $900A + #$900B, // $900B + #$900C, // $900C + #$900D, // $900D + #$900E, // $900E + #$900F, // $900F + #$9010, // $9010 + #$9011, // $9011 + #$9012, // $9012 + #$9013, // $9013 + #$9014, // $9014 + #$9015, // $9015 + #$9016, // $9016 + #$9017, // $9017 + #$9018, // $9018 + #$9019, // $9019 + #$901A, // $901A + #$901B, // $901B + #$901C, // $901C + #$901D, // $901D + #$901E, // $901E + #$901F, // $901F + #$9020, // $9020 + #$9021, // $9021 + #$9022, // $9022 + #$9023, // $9023 + #$9024, // $9024 + #$9025, // $9025 + #$9026, // $9026 + #$9027, // $9027 + #$9028, // $9028 + #$9029, // $9029 + #$902A, // $902A + #$902B, // $902B + #$902C, // $902C + #$902D, // $902D + #$902E, // $902E + #$902F, // $902F + #$9030, // $9030 + #$9031, // $9031 + #$9032, // $9032 + #$9033, // $9033 + #$9034, // $9034 + #$9035, // $9035 + #$9036, // $9036 + #$9037, // $9037 + #$9038, // $9038 + #$9039, // $9039 + #$903A, // $903A + #$903B, // $903B + #$903C, // $903C + #$903D, // $903D + #$903E, // $903E + #$903F, // $903F + #$9040, // $9040 + #$9041, // $9041 + #$9042, // $9042 + #$9043, // $9043 + #$9044, // $9044 + #$9045, // $9045 + #$9046, // $9046 + #$9047, // $9047 + #$9048, // $9048 + #$9049, // $9049 + #$904A, // $904A + #$904B, // $904B + #$904C, // $904C + #$904D, // $904D + #$904E, // $904E + #$904F, // $904F + #$9050, // $9050 + #$9051, // $9051 + #$9052, // $9052 + #$9053, // $9053 + #$9054, // $9054 + #$9055, // $9055 + #$9056, // $9056 + #$9057, // $9057 + #$9058, // $9058 + #$9059, // $9059 + #$905A, // $905A + #$905B, // $905B + #$905C, // $905C + #$905D, // $905D + #$905E, // $905E + #$905F, // $905F + #$9060, // $9060 + #$9061, // $9061 + #$9062, // $9062 + #$9063, // $9063 + #$9064, // $9064 + #$9065, // $9065 + #$9066, // $9066 + #$9067, // $9067 + #$9068, // $9068 + #$9069, // $9069 + #$906A, // $906A + #$906B, // $906B + #$906C, // $906C + #$906D, // $906D + #$906E, // $906E + #$906F, // $906F + #$9070, // $9070 + #$9071, // $9071 + #$9072, // $9072 + #$9073, // $9073 + #$9074, // $9074 + #$9075, // $9075 + #$9076, // $9076 + #$9077, // $9077 + #$9078, // $9078 + #$9079, // $9079 + #$907A, // $907A + #$907B, // $907B + #$907C, // $907C + #$907D, // $907D + #$907E, // $907E + #$907F, // $907F + #$9080, // $9080 + #$9081, // $9081 + #$9082, // $9082 + #$9083, // $9083 + #$9084, // $9084 + #$9085, // $9085 + #$9086, // $9086 + #$9087, // $9087 + #$9088, // $9088 + #$9089, // $9089 + #$908A, // $908A + #$908B, // $908B + #$908C, // $908C + #$908D, // $908D + #$908E, // $908E + #$908F, // $908F + #$9090, // $9090 + #$9091, // $9091 + #$9092, // $9092 + #$9093, // $9093 + #$9094, // $9094 + #$9095, // $9095 + #$9096, // $9096 + #$9097, // $9097 + #$9098, // $9098 + #$9099, // $9099 + #$909A, // $909A + #$909B, // $909B + #$909C, // $909C + #$909D, // $909D + #$909E, // $909E + #$909F, // $909F + #$90A0, // $90A0 + #$90A1, // $90A1 + #$90A2, // $90A2 + #$90A3, // $90A3 + #$90A4, // $90A4 + #$90A5, // $90A5 + #$90A6, // $90A6 + #$90A7, // $90A7 + #$90A8, // $90A8 + #$90A9, // $90A9 + #$90AA, // $90AA + #$90AB, // $90AB + #$90AC, // $90AC + #$90AD, // $90AD + #$90AE, // $90AE + #$90AF, // $90AF + #$90B0, // $90B0 + #$90B1, // $90B1 + #$90B2, // $90B2 + #$90B3, // $90B3 + #$90B4, // $90B4 + #$90B5, // $90B5 + #$90B6, // $90B6 + #$90B7, // $90B7 + #$90B8, // $90B8 + #$90B9, // $90B9 + #$90BA, // $90BA + #$90BB, // $90BB + #$90BC, // $90BC + #$90BD, // $90BD + #$90BE, // $90BE + #$90BF, // $90BF + #$90C0, // $90C0 + #$90C1, // $90C1 + #$90C2, // $90C2 + #$90C3, // $90C3 + #$90C4, // $90C4 + #$90C5, // $90C5 + #$90C6, // $90C6 + #$90C7, // $90C7 + #$90C8, // $90C8 + #$90C9, // $90C9 + #$90CA, // $90CA + #$90CB, // $90CB + #$90CC, // $90CC + #$90CD, // $90CD + #$90CE, // $90CE + #$90CF, // $90CF + #$90D0, // $90D0 + #$90D1, // $90D1 + #$90D2, // $90D2 + #$90D3, // $90D3 + #$90D4, // $90D4 + #$90D5, // $90D5 + #$90D6, // $90D6 + #$90D7, // $90D7 + #$90D8, // $90D8 + #$90D9, // $90D9 + #$90DA, // $90DA + #$90DB, // $90DB + #$90DC, // $90DC + #$90DD, // $90DD + #$90DE, // $90DE + #$90DF, // $90DF + #$90E0, // $90E0 + #$90E1, // $90E1 + #$90E2, // $90E2 + #$90E3, // $90E3 + #$90E4, // $90E4 + #$90E5, // $90E5 + #$90E6, // $90E6 + #$90E7, // $90E7 + #$90E8, // $90E8 + #$90E9, // $90E9 + #$90EA, // $90EA + #$90EB, // $90EB + #$90EC, // $90EC + #$90ED, // $90ED + #$90EE, // $90EE + #$90EF, // $90EF + #$90F0, // $90F0 + #$90F1, // $90F1 + #$90F2, // $90F2 + #$90F3, // $90F3 + #$90F4, // $90F4 + #$90F5, // $90F5 + #$90F6, // $90F6 + #$90F7, // $90F7 + #$90F8, // $90F8 + #$90F9, // $90F9 + #$90FA, // $90FA + #$90FB, // $90FB + #$90FC, // $90FC + #$90FD, // $90FD + #$90FE, // $90FE + #$90FF, // $90FF + #$9100, // $9100 + #$9101, // $9101 + #$9102, // $9102 + #$9103, // $9103 + #$9104, // $9104 + #$9105, // $9105 + #$9106, // $9106 + #$9107, // $9107 + #$9108, // $9108 + #$9109, // $9109 + #$910A, // $910A + #$910B, // $910B + #$910C, // $910C + #$910D, // $910D + #$910E, // $910E + #$910F, // $910F + #$9110, // $9110 + #$9111, // $9111 + #$9112, // $9112 + #$9113, // $9113 + #$9114, // $9114 + #$9115, // $9115 + #$9116, // $9116 + #$9117, // $9117 + #$9118, // $9118 + #$9119, // $9119 + #$911A, // $911A + #$911B, // $911B + #$911C, // $911C + #$911D, // $911D + #$911E, // $911E + #$911F, // $911F + #$9120, // $9120 + #$9121, // $9121 + #$9122, // $9122 + #$9123, // $9123 + #$9124, // $9124 + #$9125, // $9125 + #$9126, // $9126 + #$9127, // $9127 + #$9128, // $9128 + #$9129, // $9129 + #$912A, // $912A + #$912B, // $912B + #$912C, // $912C + #$912D, // $912D + #$912E, // $912E + #$912F, // $912F + #$9130, // $9130 + #$9131, // $9131 + #$9132, // $9132 + #$9133, // $9133 + #$9134, // $9134 + #$9135, // $9135 + #$9136, // $9136 + #$9137, // $9137 + #$9138, // $9138 + #$9139, // $9139 + #$913A, // $913A + #$913B, // $913B + #$913C, // $913C + #$913D, // $913D + #$913E, // $913E + #$913F, // $913F + #$9140, // $9140 + #$9141, // $9141 + #$9142, // $9142 + #$9143, // $9143 + #$9144, // $9144 + #$9145, // $9145 + #$9146, // $9146 + #$9147, // $9147 + #$9148, // $9148 + #$9149, // $9149 + #$914A, // $914A + #$914B, // $914B + #$914C, // $914C + #$914D, // $914D + #$914E, // $914E + #$914F, // $914F + #$9150, // $9150 + #$9151, // $9151 + #$9152, // $9152 + #$9153, // $9153 + #$9154, // $9154 + #$9155, // $9155 + #$9156, // $9156 + #$9157, // $9157 + #$9158, // $9158 + #$9159, // $9159 + #$915A, // $915A + #$915B, // $915B + #$915C, // $915C + #$915D, // $915D + #$915E, // $915E + #$915F, // $915F + #$9160, // $9160 + #$9161, // $9161 + #$9162, // $9162 + #$9163, // $9163 + #$9164, // $9164 + #$9165, // $9165 + #$9166, // $9166 + #$9167, // $9167 + #$9168, // $9168 + #$9169, // $9169 + #$916A, // $916A + #$916B, // $916B + #$916C, // $916C + #$916D, // $916D + #$916E, // $916E + #$916F, // $916F + #$9170, // $9170 + #$9171, // $9171 + #$9172, // $9172 + #$9173, // $9173 + #$9174, // $9174 + #$9175, // $9175 + #$9176, // $9176 + #$9177, // $9177 + #$9178, // $9178 + #$9179, // $9179 + #$917A, // $917A + #$917B, // $917B + #$917C, // $917C + #$917D, // $917D + #$917E, // $917E + #$917F, // $917F + #$9180, // $9180 + #$9181, // $9181 + #$9182, // $9182 + #$9183, // $9183 + #$9184, // $9184 + #$9185, // $9185 + #$9186, // $9186 + #$9187, // $9187 + #$9188, // $9188 + #$9189, // $9189 + #$918A, // $918A + #$918B, // $918B + #$918C, // $918C + #$918D, // $918D + #$918E, // $918E + #$918F, // $918F + #$9190, // $9190 + #$9191, // $9191 + #$9192, // $9192 + #$9193, // $9193 + #$9194, // $9194 + #$9195, // $9195 + #$9196, // $9196 + #$9197, // $9197 + #$9198, // $9198 + #$9199, // $9199 + #$919A, // $919A + #$919B, // $919B + #$919C, // $919C + #$919D, // $919D + #$919E, // $919E + #$919F, // $919F + #$91A0, // $91A0 + #$91A1, // $91A1 + #$91A2, // $91A2 + #$91A3, // $91A3 + #$91A4, // $91A4 + #$91A5, // $91A5 + #$91A6, // $91A6 + #$91A7, // $91A7 + #$91A8, // $91A8 + #$91A9, // $91A9 + #$91AA, // $91AA + #$91AB, // $91AB + #$91AC, // $91AC + #$91AD, // $91AD + #$91AE, // $91AE + #$91AF, // $91AF + #$91B0, // $91B0 + #$91B1, // $91B1 + #$91B2, // $91B2 + #$91B3, // $91B3 + #$91B4, // $91B4 + #$91B5, // $91B5 + #$91B6, // $91B6 + #$91B7, // $91B7 + #$91B8, // $91B8 + #$91B9, // $91B9 + #$91BA, // $91BA + #$91BB, // $91BB + #$91BC, // $91BC + #$91BD, // $91BD + #$91BE, // $91BE + #$91BF, // $91BF + #$91C0, // $91C0 + #$91C1, // $91C1 + #$91C2, // $91C2 + #$91C3, // $91C3 + #$91C4, // $91C4 + #$91C5, // $91C5 + #$91C6, // $91C6 + #$91C7, // $91C7 + #$91C8, // $91C8 + #$91C9, // $91C9 + #$91CA, // $91CA + #$91CB, // $91CB + #$91CC, // $91CC + #$91CD, // $91CD + #$91CE, // $91CE + #$91CF, // $91CF + #$91D0, // $91D0 + #$91D1, // $91D1 + #$91D2, // $91D2 + #$91D3, // $91D3 + #$91D4, // $91D4 + #$91D5, // $91D5 + #$91D6, // $91D6 + #$91D7, // $91D7 + #$91D8, // $91D8 + #$91D9, // $91D9 + #$91DA, // $91DA + #$91DB, // $91DB + #$91DC, // $91DC + #$91DD, // $91DD + #$91DE, // $91DE + #$91DF, // $91DF + #$91E0, // $91E0 + #$91E1, // $91E1 + #$91E2, // $91E2 + #$91E3, // $91E3 + #$91E4, // $91E4 + #$91E5, // $91E5 + #$91E6, // $91E6 + #$91E7, // $91E7 + #$91E8, // $91E8 + #$91E9, // $91E9 + #$91EA, // $91EA + #$91EB, // $91EB + #$91EC, // $91EC + #$91ED, // $91ED + #$91EE, // $91EE + #$91EF, // $91EF + #$91F0, // $91F0 + #$91F1, // $91F1 + #$91F2, // $91F2 + #$91F3, // $91F3 + #$91F4, // $91F4 + #$91F5, // $91F5 + #$91F6, // $91F6 + #$91F7, // $91F7 + #$91F8, // $91F8 + #$91F9, // $91F9 + #$91FA, // $91FA + #$91FB, // $91FB + #$91FC, // $91FC + #$91FD, // $91FD + #$91FE, // $91FE + #$91FF, // $91FF + #$9200, // $9200 + #$9201, // $9201 + #$9202, // $9202 + #$9203, // $9203 + #$9204, // $9204 + #$9205, // $9205 + #$9206, // $9206 + #$9207, // $9207 + #$9208, // $9208 + #$9209, // $9209 + #$920A, // $920A + #$920B, // $920B + #$920C, // $920C + #$920D, // $920D + #$920E, // $920E + #$920F, // $920F + #$9210, // $9210 + #$9211, // $9211 + #$9212, // $9212 + #$9213, // $9213 + #$9214, // $9214 + #$9215, // $9215 + #$9216, // $9216 + #$9217, // $9217 + #$9218, // $9218 + #$9219, // $9219 + #$921A, // $921A + #$921B, // $921B + #$921C, // $921C + #$921D, // $921D + #$921E, // $921E + #$921F, // $921F + #$9220, // $9220 + #$9221, // $9221 + #$9222, // $9222 + #$9223, // $9223 + #$9224, // $9224 + #$9225, // $9225 + #$9226, // $9226 + #$9227, // $9227 + #$9228, // $9228 + #$9229, // $9229 + #$922A, // $922A + #$922B, // $922B + #$922C, // $922C + #$922D, // $922D + #$922E, // $922E + #$922F, // $922F + #$9230, // $9230 + #$9231, // $9231 + #$9232, // $9232 + #$9233, // $9233 + #$9234, // $9234 + #$9235, // $9235 + #$9236, // $9236 + #$9237, // $9237 + #$9238, // $9238 + #$9239, // $9239 + #$923A, // $923A + #$923B, // $923B + #$923C, // $923C + #$923D, // $923D + #$923E, // $923E + #$923F, // $923F + #$9240, // $9240 + #$9241, // $9241 + #$9242, // $9242 + #$9243, // $9243 + #$9244, // $9244 + #$9245, // $9245 + #$9246, // $9246 + #$9247, // $9247 + #$9248, // $9248 + #$9249, // $9249 + #$924A, // $924A + #$924B, // $924B + #$924C, // $924C + #$924D, // $924D + #$924E, // $924E + #$924F, // $924F + #$9250, // $9250 + #$9251, // $9251 + #$9252, // $9252 + #$9253, // $9253 + #$9254, // $9254 + #$9255, // $9255 + #$9256, // $9256 + #$9257, // $9257 + #$9258, // $9258 + #$9259, // $9259 + #$925A, // $925A + #$925B, // $925B + #$925C, // $925C + #$925D, // $925D + #$925E, // $925E + #$925F, // $925F + #$9260, // $9260 + #$9261, // $9261 + #$9262, // $9262 + #$9263, // $9263 + #$9264, // $9264 + #$9265, // $9265 + #$9266, // $9266 + #$9267, // $9267 + #$9268, // $9268 + #$9269, // $9269 + #$926A, // $926A + #$926B, // $926B + #$926C, // $926C + #$926D, // $926D + #$926E, // $926E + #$926F, // $926F + #$9270, // $9270 + #$9271, // $9271 + #$9272, // $9272 + #$9273, // $9273 + #$9274, // $9274 + #$9275, // $9275 + #$9276, // $9276 + #$9277, // $9277 + #$9278, // $9278 + #$9279, // $9279 + #$927A, // $927A + #$927B, // $927B + #$927C, // $927C + #$927D, // $927D + #$927E, // $927E + #$927F, // $927F + #$9280, // $9280 + #$9281, // $9281 + #$9282, // $9282 + #$9283, // $9283 + #$9284, // $9284 + #$9285, // $9285 + #$9286, // $9286 + #$9287, // $9287 + #$9288, // $9288 + #$9289, // $9289 + #$928A, // $928A + #$928B, // $928B + #$928C, // $928C + #$928D, // $928D + #$928E, // $928E + #$928F, // $928F + #$9290, // $9290 + #$9291, // $9291 + #$9292, // $9292 + #$9293, // $9293 + #$9294, // $9294 + #$9295, // $9295 + #$9296, // $9296 + #$9297, // $9297 + #$9298, // $9298 + #$9299, // $9299 + #$929A, // $929A + #$929B, // $929B + #$929C, // $929C + #$929D, // $929D + #$929E, // $929E + #$929F, // $929F + #$92A0, // $92A0 + #$92A1, // $92A1 + #$92A2, // $92A2 + #$92A3, // $92A3 + #$92A4, // $92A4 + #$92A5, // $92A5 + #$92A6, // $92A6 + #$92A7, // $92A7 + #$92A8, // $92A8 + #$92A9, // $92A9 + #$92AA, // $92AA + #$92AB, // $92AB + #$92AC, // $92AC + #$92AD, // $92AD + #$92AE, // $92AE + #$92AF, // $92AF + #$92B0, // $92B0 + #$92B1, // $92B1 + #$92B2, // $92B2 + #$92B3, // $92B3 + #$92B4, // $92B4 + #$92B5, // $92B5 + #$92B6, // $92B6 + #$92B7, // $92B7 + #$92B8, // $92B8 + #$92B9, // $92B9 + #$92BA, // $92BA + #$92BB, // $92BB + #$92BC, // $92BC + #$92BD, // $92BD + #$92BE, // $92BE + #$92BF, // $92BF + #$92C0, // $92C0 + #$92C1, // $92C1 + #$92C2, // $92C2 + #$92C3, // $92C3 + #$92C4, // $92C4 + #$92C5, // $92C5 + #$92C6, // $92C6 + #$92C7, // $92C7 + #$92C8, // $92C8 + #$92C9, // $92C9 + #$92CA, // $92CA + #$92CB, // $92CB + #$92CC, // $92CC + #$92CD, // $92CD + #$92CE, // $92CE + #$92CF, // $92CF + #$92D0, // $92D0 + #$92D1, // $92D1 + #$92D2, // $92D2 + #$92D3, // $92D3 + #$92D4, // $92D4 + #$92D5, // $92D5 + #$92D6, // $92D6 + #$92D7, // $92D7 + #$92D8, // $92D8 + #$92D9, // $92D9 + #$92DA, // $92DA + #$92DB, // $92DB + #$92DC, // $92DC + #$92DD, // $92DD + #$92DE, // $92DE + #$92DF, // $92DF + #$92E0, // $92E0 + #$92E1, // $92E1 + #$92E2, // $92E2 + #$92E3, // $92E3 + #$92E4, // $92E4 + #$92E5, // $92E5 + #$92E6, // $92E6 + #$92E7, // $92E7 + #$92E8, // $92E8 + #$92E9, // $92E9 + #$92EA, // $92EA + #$92EB, // $92EB + #$92EC, // $92EC + #$92ED, // $92ED + #$92EE, // $92EE + #$92EF, // $92EF + #$92F0, // $92F0 + #$92F1, // $92F1 + #$92F2, // $92F2 + #$92F3, // $92F3 + #$92F4, // $92F4 + #$92F5, // $92F5 + #$92F6, // $92F6 + #$92F7, // $92F7 + #$92F8, // $92F8 + #$92F9, // $92F9 + #$92FA, // $92FA + #$92FB, // $92FB + #$92FC, // $92FC + #$92FD, // $92FD + #$92FE, // $92FE + #$92FF, // $92FF + #$9300, // $9300 + #$9301, // $9301 + #$9302, // $9302 + #$9303, // $9303 + #$9304, // $9304 + #$9305, // $9305 + #$9306, // $9306 + #$9307, // $9307 + #$9308, // $9308 + #$9309, // $9309 + #$930A, // $930A + #$930B, // $930B + #$930C, // $930C + #$930D, // $930D + #$930E, // $930E + #$930F, // $930F + #$9310, // $9310 + #$9311, // $9311 + #$9312, // $9312 + #$9313, // $9313 + #$9314, // $9314 + #$9315, // $9315 + #$9316, // $9316 + #$9317, // $9317 + #$9318, // $9318 + #$9319, // $9319 + #$931A, // $931A + #$931B, // $931B + #$931C, // $931C + #$931D, // $931D + #$931E, // $931E + #$931F, // $931F + #$9320, // $9320 + #$9321, // $9321 + #$9322, // $9322 + #$9323, // $9323 + #$9324, // $9324 + #$9325, // $9325 + #$9326, // $9326 + #$9327, // $9327 + #$9328, // $9328 + #$9329, // $9329 + #$932A, // $932A + #$932B, // $932B + #$932C, // $932C + #$932D, // $932D + #$932E, // $932E + #$932F, // $932F + #$9330, // $9330 + #$9331, // $9331 + #$9332, // $9332 + #$9333, // $9333 + #$9334, // $9334 + #$9335, // $9335 + #$9336, // $9336 + #$9337, // $9337 + #$9338, // $9338 + #$9339, // $9339 + #$933A, // $933A + #$933B, // $933B + #$933C, // $933C + #$933D, // $933D + #$933E, // $933E + #$933F, // $933F + #$9340, // $9340 + #$9341, // $9341 + #$9342, // $9342 + #$9343, // $9343 + #$9344, // $9344 + #$9345, // $9345 + #$9346, // $9346 + #$9347, // $9347 + #$9348, // $9348 + #$9349, // $9349 + #$934A, // $934A + #$934B, // $934B + #$934C, // $934C + #$934D, // $934D + #$934E, // $934E + #$934F, // $934F + #$9350, // $9350 + #$9351, // $9351 + #$9352, // $9352 + #$9353, // $9353 + #$9354, // $9354 + #$9355, // $9355 + #$9356, // $9356 + #$9357, // $9357 + #$9358, // $9358 + #$9359, // $9359 + #$935A, // $935A + #$935B, // $935B + #$935C, // $935C + #$935D, // $935D + #$935E, // $935E + #$935F, // $935F + #$9360, // $9360 + #$9361, // $9361 + #$9362, // $9362 + #$9363, // $9363 + #$9364, // $9364 + #$9365, // $9365 + #$9366, // $9366 + #$9367, // $9367 + #$9368, // $9368 + #$9369, // $9369 + #$936A, // $936A + #$936B, // $936B + #$936C, // $936C + #$936D, // $936D + #$936E, // $936E + #$936F, // $936F + #$9370, // $9370 + #$9371, // $9371 + #$9372, // $9372 + #$9373, // $9373 + #$9374, // $9374 + #$9375, // $9375 + #$9376, // $9376 + #$9377, // $9377 + #$9378, // $9378 + #$9379, // $9379 + #$937A, // $937A + #$937B, // $937B + #$937C, // $937C + #$937D, // $937D + #$937E, // $937E + #$937F, // $937F + #$9380, // $9380 + #$9381, // $9381 + #$9382, // $9382 + #$9383, // $9383 + #$9384, // $9384 + #$9385, // $9385 + #$9386, // $9386 + #$9387, // $9387 + #$9388, // $9388 + #$9389, // $9389 + #$938A, // $938A + #$938B, // $938B + #$938C, // $938C + #$938D, // $938D + #$938E, // $938E + #$938F, // $938F + #$9390, // $9390 + #$9391, // $9391 + #$9392, // $9392 + #$9393, // $9393 + #$9394, // $9394 + #$9395, // $9395 + #$9396, // $9396 + #$9397, // $9397 + #$9398, // $9398 + #$9399, // $9399 + #$939A, // $939A + #$939B, // $939B + #$939C, // $939C + #$939D, // $939D + #$939E, // $939E + #$939F, // $939F + #$93A0, // $93A0 + #$93A1, // $93A1 + #$93A2, // $93A2 + #$93A3, // $93A3 + #$93A4, // $93A4 + #$93A5, // $93A5 + #$93A6, // $93A6 + #$93A7, // $93A7 + #$93A8, // $93A8 + #$93A9, // $93A9 + #$93AA, // $93AA + #$93AB, // $93AB + #$93AC, // $93AC + #$93AD, // $93AD + #$93AE, // $93AE + #$93AF, // $93AF + #$93B0, // $93B0 + #$93B1, // $93B1 + #$93B2, // $93B2 + #$93B3, // $93B3 + #$93B4, // $93B4 + #$93B5, // $93B5 + #$93B6, // $93B6 + #$93B7, // $93B7 + #$93B8, // $93B8 + #$93B9, // $93B9 + #$93BA, // $93BA + #$93BB, // $93BB + #$93BC, // $93BC + #$93BD, // $93BD + #$93BE, // $93BE + #$93BF, // $93BF + #$93C0, // $93C0 + #$93C1, // $93C1 + #$93C2, // $93C2 + #$93C3, // $93C3 + #$93C4, // $93C4 + #$93C5, // $93C5 + #$93C6, // $93C6 + #$93C7, // $93C7 + #$93C8, // $93C8 + #$93C9, // $93C9 + #$93CA, // $93CA + #$93CB, // $93CB + #$93CC, // $93CC + #$93CD, // $93CD + #$93CE, // $93CE + #$93CF, // $93CF + #$93D0, // $93D0 + #$93D1, // $93D1 + #$93D2, // $93D2 + #$93D3, // $93D3 + #$93D4, // $93D4 + #$93D5, // $93D5 + #$93D6, // $93D6 + #$93D7, // $93D7 + #$93D8, // $93D8 + #$93D9, // $93D9 + #$93DA, // $93DA + #$93DB, // $93DB + #$93DC, // $93DC + #$93DD, // $93DD + #$93DE, // $93DE + #$93DF, // $93DF + #$93E0, // $93E0 + #$93E1, // $93E1 + #$93E2, // $93E2 + #$93E3, // $93E3 + #$93E4, // $93E4 + #$93E5, // $93E5 + #$93E6, // $93E6 + #$93E7, // $93E7 + #$93E8, // $93E8 + #$93E9, // $93E9 + #$93EA, // $93EA + #$93EB, // $93EB + #$93EC, // $93EC + #$93ED, // $93ED + #$93EE, // $93EE + #$93EF, // $93EF + #$93F0, // $93F0 + #$93F1, // $93F1 + #$93F2, // $93F2 + #$93F3, // $93F3 + #$93F4, // $93F4 + #$93F5, // $93F5 + #$93F6, // $93F6 + #$93F7, // $93F7 + #$93F8, // $93F8 + #$93F9, // $93F9 + #$93FA, // $93FA + #$93FB, // $93FB + #$93FC, // $93FC + #$93FD, // $93FD + #$93FE, // $93FE + #$93FF, // $93FF + #$9400, // $9400 + #$9401, // $9401 + #$9402, // $9402 + #$9403, // $9403 + #$9404, // $9404 + #$9405, // $9405 + #$9406, // $9406 + #$9407, // $9407 + #$9408, // $9408 + #$9409, // $9409 + #$940A, // $940A + #$940B, // $940B + #$940C, // $940C + #$940D, // $940D + #$940E, // $940E + #$940F, // $940F + #$9410, // $9410 + #$9411, // $9411 + #$9412, // $9412 + #$9413, // $9413 + #$9414, // $9414 + #$9415, // $9415 + #$9416, // $9416 + #$9417, // $9417 + #$9418, // $9418 + #$9419, // $9419 + #$941A, // $941A + #$941B, // $941B + #$941C, // $941C + #$941D, // $941D + #$941E, // $941E + #$941F, // $941F + #$9420, // $9420 + #$9421, // $9421 + #$9422, // $9422 + #$9423, // $9423 + #$9424, // $9424 + #$9425, // $9425 + #$9426, // $9426 + #$9427, // $9427 + #$9428, // $9428 + #$9429, // $9429 + #$942A, // $942A + #$942B, // $942B + #$942C, // $942C + #$942D, // $942D + #$942E, // $942E + #$942F, // $942F + #$9430, // $9430 + #$9431, // $9431 + #$9432, // $9432 + #$9433, // $9433 + #$9434, // $9434 + #$9435, // $9435 + #$9436, // $9436 + #$9437, // $9437 + #$9438, // $9438 + #$9439, // $9439 + #$943A, // $943A + #$943B, // $943B + #$943C, // $943C + #$943D, // $943D + #$943E, // $943E + #$943F, // $943F + #$9440, // $9440 + #$9441, // $9441 + #$9442, // $9442 + #$9443, // $9443 + #$9444, // $9444 + #$9445, // $9445 + #$9446, // $9446 + #$9447, // $9447 + #$9448, // $9448 + #$9449, // $9449 + #$944A, // $944A + #$944B, // $944B + #$944C, // $944C + #$944D, // $944D + #$944E, // $944E + #$944F, // $944F + #$9450, // $9450 + #$9451, // $9451 + #$9452, // $9452 + #$9453, // $9453 + #$9454, // $9454 + #$9455, // $9455 + #$9456, // $9456 + #$9457, // $9457 + #$9458, // $9458 + #$9459, // $9459 + #$945A, // $945A + #$945B, // $945B + #$945C, // $945C + #$945D, // $945D + #$945E, // $945E + #$945F, // $945F + #$9460, // $9460 + #$9461, // $9461 + #$9462, // $9462 + #$9463, // $9463 + #$9464, // $9464 + #$9465, // $9465 + #$9466, // $9466 + #$9467, // $9467 + #$9468, // $9468 + #$9469, // $9469 + #$946A, // $946A + #$946B, // $946B + #$946C, // $946C + #$946D, // $946D + #$946E, // $946E + #$946F, // $946F + #$9470, // $9470 + #$9471, // $9471 + #$9472, // $9472 + #$9473, // $9473 + #$9474, // $9474 + #$9475, // $9475 + #$9476, // $9476 + #$9477, // $9477 + #$9478, // $9478 + #$9479, // $9479 + #$947A, // $947A + #$947B, // $947B + #$947C, // $947C + #$947D, // $947D + #$947E, // $947E + #$947F, // $947F + #$9480, // $9480 + #$9481, // $9481 + #$9482, // $9482 + #$9483, // $9483 + #$9484, // $9484 + #$9485, // $9485 + #$9486, // $9486 + #$9487, // $9487 + #$9488, // $9488 + #$9489, // $9489 + #$948A, // $948A + #$948B, // $948B + #$948C, // $948C + #$948D, // $948D + #$948E, // $948E + #$948F, // $948F + #$9490, // $9490 + #$9491, // $9491 + #$9492, // $9492 + #$9493, // $9493 + #$9494, // $9494 + #$9495, // $9495 + #$9496, // $9496 + #$9497, // $9497 + #$9498, // $9498 + #$9499, // $9499 + #$949A, // $949A + #$949B, // $949B + #$949C, // $949C + #$949D, // $949D + #$949E, // $949E + #$949F, // $949F + #$94A0, // $94A0 + #$94A1, // $94A1 + #$94A2, // $94A2 + #$94A3, // $94A3 + #$94A4, // $94A4 + #$94A5, // $94A5 + #$94A6, // $94A6 + #$94A7, // $94A7 + #$94A8, // $94A8 + #$94A9, // $94A9 + #$94AA, // $94AA + #$94AB, // $94AB + #$94AC, // $94AC + #$94AD, // $94AD + #$94AE, // $94AE + #$94AF, // $94AF + #$94B0, // $94B0 + #$94B1, // $94B1 + #$94B2, // $94B2 + #$94B3, // $94B3 + #$94B4, // $94B4 + #$94B5, // $94B5 + #$94B6, // $94B6 + #$94B7, // $94B7 + #$94B8, // $94B8 + #$94B9, // $94B9 + #$94BA, // $94BA + #$94BB, // $94BB + #$94BC, // $94BC + #$94BD, // $94BD + #$94BE, // $94BE + #$94BF, // $94BF + #$94C0, // $94C0 + #$94C1, // $94C1 + #$94C2, // $94C2 + #$94C3, // $94C3 + #$94C4, // $94C4 + #$94C5, // $94C5 + #$94C6, // $94C6 + #$94C7, // $94C7 + #$94C8, // $94C8 + #$94C9, // $94C9 + #$94CA, // $94CA + #$94CB, // $94CB + #$94CC, // $94CC + #$94CD, // $94CD + #$94CE, // $94CE + #$94CF, // $94CF + #$94D0, // $94D0 + #$94D1, // $94D1 + #$94D2, // $94D2 + #$94D3, // $94D3 + #$94D4, // $94D4 + #$94D5, // $94D5 + #$94D6, // $94D6 + #$94D7, // $94D7 + #$94D8, // $94D8 + #$94D9, // $94D9 + #$94DA, // $94DA + #$94DB, // $94DB + #$94DC, // $94DC + #$94DD, // $94DD + #$94DE, // $94DE + #$94DF, // $94DF + #$94E0, // $94E0 + #$94E1, // $94E1 + #$94E2, // $94E2 + #$94E3, // $94E3 + #$94E4, // $94E4 + #$94E5, // $94E5 + #$94E6, // $94E6 + #$94E7, // $94E7 + #$94E8, // $94E8 + #$94E9, // $94E9 + #$94EA, // $94EA + #$94EB, // $94EB + #$94EC, // $94EC + #$94ED, // $94ED + #$94EE, // $94EE + #$94EF, // $94EF + #$94F0, // $94F0 + #$94F1, // $94F1 + #$94F2, // $94F2 + #$94F3, // $94F3 + #$94F4, // $94F4 + #$94F5, // $94F5 + #$94F6, // $94F6 + #$94F7, // $94F7 + #$94F8, // $94F8 + #$94F9, // $94F9 + #$94FA, // $94FA + #$94FB, // $94FB + #$94FC, // $94FC + #$94FD, // $94FD + #$94FE, // $94FE + #$94FF, // $94FF + #$9500, // $9500 + #$9501, // $9501 + #$9502, // $9502 + #$9503, // $9503 + #$9504, // $9504 + #$9505, // $9505 + #$9506, // $9506 + #$9507, // $9507 + #$9508, // $9508 + #$9509, // $9509 + #$950A, // $950A + #$950B, // $950B + #$950C, // $950C + #$950D, // $950D + #$950E, // $950E + #$950F, // $950F + #$9510, // $9510 + #$9511, // $9511 + #$9512, // $9512 + #$9513, // $9513 + #$9514, // $9514 + #$9515, // $9515 + #$9516, // $9516 + #$9517, // $9517 + #$9518, // $9518 + #$9519, // $9519 + #$951A, // $951A + #$951B, // $951B + #$951C, // $951C + #$951D, // $951D + #$951E, // $951E + #$951F, // $951F + #$9520, // $9520 + #$9521, // $9521 + #$9522, // $9522 + #$9523, // $9523 + #$9524, // $9524 + #$9525, // $9525 + #$9526, // $9526 + #$9527, // $9527 + #$9528, // $9528 + #$9529, // $9529 + #$952A, // $952A + #$952B, // $952B + #$952C, // $952C + #$952D, // $952D + #$952E, // $952E + #$952F, // $952F + #$9530, // $9530 + #$9531, // $9531 + #$9532, // $9532 + #$9533, // $9533 + #$9534, // $9534 + #$9535, // $9535 + #$9536, // $9536 + #$9537, // $9537 + #$9538, // $9538 + #$9539, // $9539 + #$953A, // $953A + #$953B, // $953B + #$953C, // $953C + #$953D, // $953D + #$953E, // $953E + #$953F, // $953F + #$9540, // $9540 + #$9541, // $9541 + #$9542, // $9542 + #$9543, // $9543 + #$9544, // $9544 + #$9545, // $9545 + #$9546, // $9546 + #$9547, // $9547 + #$9548, // $9548 + #$9549, // $9549 + #$954A, // $954A + #$954B, // $954B + #$954C, // $954C + #$954D, // $954D + #$954E, // $954E + #$954F, // $954F + #$9550, // $9550 + #$9551, // $9551 + #$9552, // $9552 + #$9553, // $9553 + #$9554, // $9554 + #$9555, // $9555 + #$9556, // $9556 + #$9557, // $9557 + #$9558, // $9558 + #$9559, // $9559 + #$955A, // $955A + #$955B, // $955B + #$955C, // $955C + #$955D, // $955D + #$955E, // $955E + #$955F, // $955F + #$9560, // $9560 + #$9561, // $9561 + #$9562, // $9562 + #$9563, // $9563 + #$9564, // $9564 + #$9565, // $9565 + #$9566, // $9566 + #$9567, // $9567 + #$9568, // $9568 + #$9569, // $9569 + #$956A, // $956A + #$956B, // $956B + #$956C, // $956C + #$956D, // $956D + #$956E, // $956E + #$956F, // $956F + #$9570, // $9570 + #$9571, // $9571 + #$9572, // $9572 + #$9573, // $9573 + #$9574, // $9574 + #$9575, // $9575 + #$9576, // $9576 + #$9577, // $9577 + #$9578, // $9578 + #$9579, // $9579 + #$957A, // $957A + #$957B, // $957B + #$957C, // $957C + #$957D, // $957D + #$957E, // $957E + #$957F, // $957F + #$9580, // $9580 + #$9581, // $9581 + #$9582, // $9582 + #$9583, // $9583 + #$9584, // $9584 + #$9585, // $9585 + #$9586, // $9586 + #$9587, // $9587 + #$9588, // $9588 + #$9589, // $9589 + #$958A, // $958A + #$958B, // $958B + #$958C, // $958C + #$958D, // $958D + #$958E, // $958E + #$958F, // $958F + #$9590, // $9590 + #$9591, // $9591 + #$9592, // $9592 + #$9593, // $9593 + #$9594, // $9594 + #$9595, // $9595 + #$9596, // $9596 + #$9597, // $9597 + #$9598, // $9598 + #$9599, // $9599 + #$959A, // $959A + #$959B, // $959B + #$959C, // $959C + #$959D, // $959D + #$959E, // $959E + #$959F, // $959F + #$95A0, // $95A0 + #$95A1, // $95A1 + #$95A2, // $95A2 + #$95A3, // $95A3 + #$95A4, // $95A4 + #$95A5, // $95A5 + #$95A6, // $95A6 + #$95A7, // $95A7 + #$95A8, // $95A8 + #$95A9, // $95A9 + #$95AA, // $95AA + #$95AB, // $95AB + #$95AC, // $95AC + #$95AD, // $95AD + #$95AE, // $95AE + #$95AF, // $95AF + #$95B0, // $95B0 + #$95B1, // $95B1 + #$95B2, // $95B2 + #$95B3, // $95B3 + #$95B4, // $95B4 + #$95B5, // $95B5 + #$95B6, // $95B6 + #$95B7, // $95B7 + #$95B8, // $95B8 + #$95B9, // $95B9 + #$95BA, // $95BA + #$95BB, // $95BB + #$95BC, // $95BC + #$95BD, // $95BD + #$95BE, // $95BE + #$95BF, // $95BF + #$95C0, // $95C0 + #$95C1, // $95C1 + #$95C2, // $95C2 + #$95C3, // $95C3 + #$95C4, // $95C4 + #$95C5, // $95C5 + #$95C6, // $95C6 + #$95C7, // $95C7 + #$95C8, // $95C8 + #$95C9, // $95C9 + #$95CA, // $95CA + #$95CB, // $95CB + #$95CC, // $95CC + #$95CD, // $95CD + #$95CE, // $95CE + #$95CF, // $95CF + #$95D0, // $95D0 + #$95D1, // $95D1 + #$95D2, // $95D2 + #$95D3, // $95D3 + #$95D4, // $95D4 + #$95D5, // $95D5 + #$95D6, // $95D6 + #$95D7, // $95D7 + #$95D8, // $95D8 + #$95D9, // $95D9 + #$95DA, // $95DA + #$95DB, // $95DB + #$95DC, // $95DC + #$95DD, // $95DD + #$95DE, // $95DE + #$95DF, // $95DF + #$95E0, // $95E0 + #$95E1, // $95E1 + #$95E2, // $95E2 + #$95E3, // $95E3 + #$95E4, // $95E4 + #$95E5, // $95E5 + #$95E6, // $95E6 + #$95E7, // $95E7 + #$95E8, // $95E8 + #$95E9, // $95E9 + #$95EA, // $95EA + #$95EB, // $95EB + #$95EC, // $95EC + #$95ED, // $95ED + #$95EE, // $95EE + #$95EF, // $95EF + #$95F0, // $95F0 + #$95F1, // $95F1 + #$95F2, // $95F2 + #$95F3, // $95F3 + #$95F4, // $95F4 + #$95F5, // $95F5 + #$95F6, // $95F6 + #$95F7, // $95F7 + #$95F8, // $95F8 + #$95F9, // $95F9 + #$95FA, // $95FA + #$95FB, // $95FB + #$95FC, // $95FC + #$95FD, // $95FD + #$95FE, // $95FE + #$95FF, // $95FF + #$9600, // $9600 + #$9601, // $9601 + #$9602, // $9602 + #$9603, // $9603 + #$9604, // $9604 + #$9605, // $9605 + #$9606, // $9606 + #$9607, // $9607 + #$9608, // $9608 + #$9609, // $9609 + #$960A, // $960A + #$960B, // $960B + #$960C, // $960C + #$960D, // $960D + #$960E, // $960E + #$960F, // $960F + #$9610, // $9610 + #$9611, // $9611 + #$9612, // $9612 + #$9613, // $9613 + #$9614, // $9614 + #$9615, // $9615 + #$9616, // $9616 + #$9617, // $9617 + #$9618, // $9618 + #$9619, // $9619 + #$961A, // $961A + #$961B, // $961B + #$961C, // $961C + #$961D, // $961D + #$961E, // $961E + #$961F, // $961F + #$9620, // $9620 + #$9621, // $9621 + #$9622, // $9622 + #$9623, // $9623 + #$9624, // $9624 + #$9625, // $9625 + #$9626, // $9626 + #$9627, // $9627 + #$9628, // $9628 + #$9629, // $9629 + #$962A, // $962A + #$962B, // $962B + #$962C, // $962C + #$962D, // $962D + #$962E, // $962E + #$962F, // $962F + #$9630, // $9630 + #$9631, // $9631 + #$9632, // $9632 + #$9633, // $9633 + #$9634, // $9634 + #$9635, // $9635 + #$9636, // $9636 + #$9637, // $9637 + #$9638, // $9638 + #$9639, // $9639 + #$963A, // $963A + #$963B, // $963B + #$963C, // $963C + #$963D, // $963D + #$963E, // $963E + #$963F, // $963F + #$9640, // $9640 + #$9641, // $9641 + #$9642, // $9642 + #$9643, // $9643 + #$9644, // $9644 + #$9645, // $9645 + #$9646, // $9646 + #$9647, // $9647 + #$9648, // $9648 + #$9649, // $9649 + #$964A, // $964A + #$964B, // $964B + #$964C, // $964C + #$964D, // $964D + #$964E, // $964E + #$964F, // $964F + #$9650, // $9650 + #$9651, // $9651 + #$9652, // $9652 + #$9653, // $9653 + #$9654, // $9654 + #$9655, // $9655 + #$9656, // $9656 + #$9657, // $9657 + #$9658, // $9658 + #$9659, // $9659 + #$965A, // $965A + #$965B, // $965B + #$965C, // $965C + #$965D, // $965D + #$965E, // $965E + #$965F, // $965F + #$9660, // $9660 + #$9661, // $9661 + #$9662, // $9662 + #$9663, // $9663 + #$9664, // $9664 + #$9665, // $9665 + #$9666, // $9666 + #$9667, // $9667 + #$9668, // $9668 + #$9669, // $9669 + #$966A, // $966A + #$966B, // $966B + #$966C, // $966C + #$966D, // $966D + #$966E, // $966E + #$966F, // $966F + #$9670, // $9670 + #$9671, // $9671 + #$9672, // $9672 + #$9673, // $9673 + #$9674, // $9674 + #$9675, // $9675 + #$9676, // $9676 + #$9677, // $9677 + #$9678, // $9678 + #$9679, // $9679 + #$967A, // $967A + #$967B, // $967B + #$967C, // $967C + #$967D, // $967D + #$967E, // $967E + #$967F, // $967F + #$9680, // $9680 + #$9681, // $9681 + #$9682, // $9682 + #$9683, // $9683 + #$9684, // $9684 + #$9685, // $9685 + #$9686, // $9686 + #$9687, // $9687 + #$9688, // $9688 + #$9689, // $9689 + #$968A, // $968A + #$968B, // $968B + #$968C, // $968C + #$968D, // $968D + #$968E, // $968E + #$968F, // $968F + #$9690, // $9690 + #$9691, // $9691 + #$9692, // $9692 + #$9693, // $9693 + #$9694, // $9694 + #$9695, // $9695 + #$9696, // $9696 + #$9697, // $9697 + #$9698, // $9698 + #$9699, // $9699 + #$969A, // $969A + #$969B, // $969B + #$969C, // $969C + #$969D, // $969D + #$969E, // $969E + #$969F, // $969F + #$96A0, // $96A0 + #$96A1, // $96A1 + #$96A2, // $96A2 + #$96A3, // $96A3 + #$96A4, // $96A4 + #$96A5, // $96A5 + #$96A6, // $96A6 + #$96A7, // $96A7 + #$96A8, // $96A8 + #$96A9, // $96A9 + #$96AA, // $96AA + #$96AB, // $96AB + #$96AC, // $96AC + #$96AD, // $96AD + #$96AE, // $96AE + #$96AF, // $96AF + #$96B0, // $96B0 + #$96B1, // $96B1 + #$96B2, // $96B2 + #$96B3, // $96B3 + #$96B4, // $96B4 + #$96B5, // $96B5 + #$96B6, // $96B6 + #$96B7, // $96B7 + #$96B8, // $96B8 + #$96B9, // $96B9 + #$96BA, // $96BA + #$96BB, // $96BB + #$96BC, // $96BC + #$96BD, // $96BD + #$96BE, // $96BE + #$96BF, // $96BF + #$96C0, // $96C0 + #$96C1, // $96C1 + #$96C2, // $96C2 + #$96C3, // $96C3 + #$96C4, // $96C4 + #$96C5, // $96C5 + #$96C6, // $96C6 + #$96C7, // $96C7 + #$96C8, // $96C8 + #$96C9, // $96C9 + #$96CA, // $96CA + #$96CB, // $96CB + #$96CC, // $96CC + #$96CD, // $96CD + #$96CE, // $96CE + #$96CF, // $96CF + #$96D0, // $96D0 + #$96D1, // $96D1 + #$96D2, // $96D2 + #$96D3, // $96D3 + #$96D4, // $96D4 + #$96D5, // $96D5 + #$96D6, // $96D6 + #$96D7, // $96D7 + #$96D8, // $96D8 + #$96D9, // $96D9 + #$96DA, // $96DA + #$96DB, // $96DB + #$96DC, // $96DC + #$96DD, // $96DD + #$96DE, // $96DE + #$96DF, // $96DF + #$96E0, // $96E0 + #$96E1, // $96E1 + #$96E2, // $96E2 + #$96E3, // $96E3 + #$96E4, // $96E4 + #$96E5, // $96E5 + #$96E6, // $96E6 + #$96E7, // $96E7 + #$96E8, // $96E8 + #$96E9, // $96E9 + #$96EA, // $96EA + #$96EB, // $96EB + #$96EC, // $96EC + #$96ED, // $96ED + #$96EE, // $96EE + #$96EF, // $96EF + #$96F0, // $96F0 + #$96F1, // $96F1 + #$96F2, // $96F2 + #$96F3, // $96F3 + #$96F4, // $96F4 + #$96F5, // $96F5 + #$96F6, // $96F6 + #$96F7, // $96F7 + #$96F8, // $96F8 + #$96F9, // $96F9 + #$96FA, // $96FA + #$96FB, // $96FB + #$96FC, // $96FC + #$96FD, // $96FD + #$96FE, // $96FE + #$96FF, // $96FF + #$9700, // $9700 + #$9701, // $9701 + #$9702, // $9702 + #$9703, // $9703 + #$9704, // $9704 + #$9705, // $9705 + #$9706, // $9706 + #$9707, // $9707 + #$9708, // $9708 + #$9709, // $9709 + #$970A, // $970A + #$970B, // $970B + #$970C, // $970C + #$970D, // $970D + #$970E, // $970E + #$970F, // $970F + #$9710, // $9710 + #$9711, // $9711 + #$9712, // $9712 + #$9713, // $9713 + #$9714, // $9714 + #$9715, // $9715 + #$9716, // $9716 + #$9717, // $9717 + #$9718, // $9718 + #$9719, // $9719 + #$971A, // $971A + #$971B, // $971B + #$971C, // $971C + #$971D, // $971D + #$971E, // $971E + #$971F, // $971F + #$9720, // $9720 + #$9721, // $9721 + #$9722, // $9722 + #$9723, // $9723 + #$9724, // $9724 + #$9725, // $9725 + #$9726, // $9726 + #$9727, // $9727 + #$9728, // $9728 + #$9729, // $9729 + #$972A, // $972A + #$972B, // $972B + #$972C, // $972C + #$972D, // $972D + #$972E, // $972E + #$972F, // $972F + #$9730, // $9730 + #$9731, // $9731 + #$9732, // $9732 + #$9733, // $9733 + #$9734, // $9734 + #$9735, // $9735 + #$9736, // $9736 + #$9737, // $9737 + #$9738, // $9738 + #$9739, // $9739 + #$973A, // $973A + #$973B, // $973B + #$973C, // $973C + #$973D, // $973D + #$973E, // $973E + #$973F, // $973F + #$9740, // $9740 + #$9741, // $9741 + #$9742, // $9742 + #$9743, // $9743 + #$9744, // $9744 + #$9745, // $9745 + #$9746, // $9746 + #$9747, // $9747 + #$9748, // $9748 + #$9749, // $9749 + #$974A, // $974A + #$974B, // $974B + #$974C, // $974C + #$974D, // $974D + #$974E, // $974E + #$974F, // $974F + #$9750, // $9750 + #$9751, // $9751 + #$9752, // $9752 + #$9753, // $9753 + #$9754, // $9754 + #$9755, // $9755 + #$9756, // $9756 + #$9757, // $9757 + #$9758, // $9758 + #$9759, // $9759 + #$975A, // $975A + #$975B, // $975B + #$975C, // $975C + #$975D, // $975D + #$975E, // $975E + #$975F, // $975F + #$9760, // $9760 + #$9761, // $9761 + #$9762, // $9762 + #$9763, // $9763 + #$9764, // $9764 + #$9765, // $9765 + #$9766, // $9766 + #$9767, // $9767 + #$9768, // $9768 + #$9769, // $9769 + #$976A, // $976A + #$976B, // $976B + #$976C, // $976C + #$976D, // $976D + #$976E, // $976E + #$976F, // $976F + #$9770, // $9770 + #$9771, // $9771 + #$9772, // $9772 + #$9773, // $9773 + #$9774, // $9774 + #$9775, // $9775 + #$9776, // $9776 + #$9777, // $9777 + #$9778, // $9778 + #$9779, // $9779 + #$977A, // $977A + #$977B, // $977B + #$977C, // $977C + #$977D, // $977D + #$977E, // $977E + #$977F, // $977F + #$9780, // $9780 + #$9781, // $9781 + #$9782, // $9782 + #$9783, // $9783 + #$9784, // $9784 + #$9785, // $9785 + #$9786, // $9786 + #$9787, // $9787 + #$9788, // $9788 + #$9789, // $9789 + #$978A, // $978A + #$978B, // $978B + #$978C, // $978C + #$978D, // $978D + #$978E, // $978E + #$978F, // $978F + #$9790, // $9790 + #$9791, // $9791 + #$9792, // $9792 + #$9793, // $9793 + #$9794, // $9794 + #$9795, // $9795 + #$9796, // $9796 + #$9797, // $9797 + #$9798, // $9798 + #$9799, // $9799 + #$979A, // $979A + #$979B, // $979B + #$979C, // $979C + #$979D, // $979D + #$979E, // $979E + #$979F, // $979F + #$97A0, // $97A0 + #$97A1, // $97A1 + #$97A2, // $97A2 + #$97A3, // $97A3 + #$97A4, // $97A4 + #$97A5, // $97A5 + #$97A6, // $97A6 + #$97A7, // $97A7 + #$97A8, // $97A8 + #$97A9, // $97A9 + #$97AA, // $97AA + #$97AB, // $97AB + #$97AC, // $97AC + #$97AD, // $97AD + #$97AE, // $97AE + #$97AF, // $97AF + #$97B0, // $97B0 + #$97B1, // $97B1 + #$97B2, // $97B2 + #$97B3, // $97B3 + #$97B4, // $97B4 + #$97B5, // $97B5 + #$97B6, // $97B6 + #$97B7, // $97B7 + #$97B8, // $97B8 + #$97B9, // $97B9 + #$97BA, // $97BA + #$97BB, // $97BB + #$97BC, // $97BC + #$97BD, // $97BD + #$97BE, // $97BE + #$97BF, // $97BF + #$97C0, // $97C0 + #$97C1, // $97C1 + #$97C2, // $97C2 + #$97C3, // $97C3 + #$97C4, // $97C4 + #$97C5, // $97C5 + #$97C6, // $97C6 + #$97C7, // $97C7 + #$97C8, // $97C8 + #$97C9, // $97C9 + #$97CA, // $97CA + #$97CB, // $97CB + #$97CC, // $97CC + #$97CD, // $97CD + #$97CE, // $97CE + #$97CF, // $97CF + #$97D0, // $97D0 + #$97D1, // $97D1 + #$97D2, // $97D2 + #$97D3, // $97D3 + #$97D4, // $97D4 + #$97D5, // $97D5 + #$97D6, // $97D6 + #$97D7, // $97D7 + #$97D8, // $97D8 + #$97D9, // $97D9 + #$97DA, // $97DA + #$97DB, // $97DB + #$97DC, // $97DC + #$97DD, // $97DD + #$97DE, // $97DE + #$97DF, // $97DF + #$97E0, // $97E0 + #$97E1, // $97E1 + #$97E2, // $97E2 + #$97E3, // $97E3 + #$97E4, // $97E4 + #$97E5, // $97E5 + #$97E6, // $97E6 + #$97E7, // $97E7 + #$97E8, // $97E8 + #$97E9, // $97E9 + #$97EA, // $97EA + #$97EB, // $97EB + #$97EC, // $97EC + #$97ED, // $97ED + #$97EE, // $97EE + #$97EF, // $97EF + #$97F0, // $97F0 + #$97F1, // $97F1 + #$97F2, // $97F2 + #$97F3, // $97F3 + #$97F4, // $97F4 + #$97F5, // $97F5 + #$97F6, // $97F6 + #$97F7, // $97F7 + #$97F8, // $97F8 + #$97F9, // $97F9 + #$97FA, // $97FA + #$97FB, // $97FB + #$97FC, // $97FC + #$97FD, // $97FD + #$97FE, // $97FE + #$97FF, // $97FF + #$9800, // $9800 + #$9801, // $9801 + #$9802, // $9802 + #$9803, // $9803 + #$9804, // $9804 + #$9805, // $9805 + #$9806, // $9806 + #$9807, // $9807 + #$9808, // $9808 + #$9809, // $9809 + #$980A, // $980A + #$980B, // $980B + #$980C, // $980C + #$980D, // $980D + #$980E, // $980E + #$980F, // $980F + #$9810, // $9810 + #$9811, // $9811 + #$9812, // $9812 + #$9813, // $9813 + #$9814, // $9814 + #$9815, // $9815 + #$9816, // $9816 + #$9817, // $9817 + #$9818, // $9818 + #$9819, // $9819 + #$981A, // $981A + #$981B, // $981B + #$981C, // $981C + #$981D, // $981D + #$981E, // $981E + #$981F, // $981F + #$9820, // $9820 + #$9821, // $9821 + #$9822, // $9822 + #$9823, // $9823 + #$9824, // $9824 + #$9825, // $9825 + #$9826, // $9826 + #$9827, // $9827 + #$9828, // $9828 + #$9829, // $9829 + #$982A, // $982A + #$982B, // $982B + #$982C, // $982C + #$982D, // $982D + #$982E, // $982E + #$982F, // $982F + #$9830, // $9830 + #$9831, // $9831 + #$9832, // $9832 + #$9833, // $9833 + #$9834, // $9834 + #$9835, // $9835 + #$9836, // $9836 + #$9837, // $9837 + #$9838, // $9838 + #$9839, // $9839 + #$983A, // $983A + #$983B, // $983B + #$983C, // $983C + #$983D, // $983D + #$983E, // $983E + #$983F, // $983F + #$9840, // $9840 + #$9841, // $9841 + #$9842, // $9842 + #$9843, // $9843 + #$9844, // $9844 + #$9845, // $9845 + #$9846, // $9846 + #$9847, // $9847 + #$9848, // $9848 + #$9849, // $9849 + #$984A, // $984A + #$984B, // $984B + #$984C, // $984C + #$984D, // $984D + #$984E, // $984E + #$984F, // $984F + #$9850, // $9850 + #$9851, // $9851 + #$9852, // $9852 + #$9853, // $9853 + #$9854, // $9854 + #$9855, // $9855 + #$9856, // $9856 + #$9857, // $9857 + #$9858, // $9858 + #$9859, // $9859 + #$985A, // $985A + #$985B, // $985B + #$985C, // $985C + #$985D, // $985D + #$985E, // $985E + #$985F, // $985F + #$9860, // $9860 + #$9861, // $9861 + #$9862, // $9862 + #$9863, // $9863 + #$9864, // $9864 + #$9865, // $9865 + #$9866, // $9866 + #$9867, // $9867 + #$9868, // $9868 + #$9869, // $9869 + #$986A, // $986A + #$986B, // $986B + #$986C, // $986C + #$986D, // $986D + #$986E, // $986E + #$986F, // $986F + #$9870, // $9870 + #$9871, // $9871 + #$9872, // $9872 + #$9873, // $9873 + #$9874, // $9874 + #$9875, // $9875 + #$9876, // $9876 + #$9877, // $9877 + #$9878, // $9878 + #$9879, // $9879 + #$987A, // $987A + #$987B, // $987B + #$987C, // $987C + #$987D, // $987D + #$987E, // $987E + #$987F, // $987F + #$9880, // $9880 + #$9881, // $9881 + #$9882, // $9882 + #$9883, // $9883 + #$9884, // $9884 + #$9885, // $9885 + #$9886, // $9886 + #$9887, // $9887 + #$9888, // $9888 + #$9889, // $9889 + #$988A, // $988A + #$988B, // $988B + #$988C, // $988C + #$988D, // $988D + #$988E, // $988E + #$988F, // $988F + #$9890, // $9890 + #$9891, // $9891 + #$9892, // $9892 + #$9893, // $9893 + #$9894, // $9894 + #$9895, // $9895 + #$9896, // $9896 + #$9897, // $9897 + #$9898, // $9898 + #$9899, // $9899 + #$989A, // $989A + #$989B, // $989B + #$989C, // $989C + #$989D, // $989D + #$989E, // $989E + #$989F, // $989F + #$98A0, // $98A0 + #$98A1, // $98A1 + #$98A2, // $98A2 + #$98A3, // $98A3 + #$98A4, // $98A4 + #$98A5, // $98A5 + #$98A6, // $98A6 + #$98A7, // $98A7 + #$98A8, // $98A8 + #$98A9, // $98A9 + #$98AA, // $98AA + #$98AB, // $98AB + #$98AC, // $98AC + #$98AD, // $98AD + #$98AE, // $98AE + #$98AF, // $98AF + #$98B0, // $98B0 + #$98B1, // $98B1 + #$98B2, // $98B2 + #$98B3, // $98B3 + #$98B4, // $98B4 + #$98B5, // $98B5 + #$98B6, // $98B6 + #$98B7, // $98B7 + #$98B8, // $98B8 + #$98B9, // $98B9 + #$98BA, // $98BA + #$98BB, // $98BB + #$98BC, // $98BC + #$98BD, // $98BD + #$98BE, // $98BE + #$98BF, // $98BF + #$98C0, // $98C0 + #$98C1, // $98C1 + #$98C2, // $98C2 + #$98C3, // $98C3 + #$98C4, // $98C4 + #$98C5, // $98C5 + #$98C6, // $98C6 + #$98C7, // $98C7 + #$98C8, // $98C8 + #$98C9, // $98C9 + #$98CA, // $98CA + #$98CB, // $98CB + #$98CC, // $98CC + #$98CD, // $98CD + #$98CE, // $98CE + #$98CF, // $98CF + #$98D0, // $98D0 + #$98D1, // $98D1 + #$98D2, // $98D2 + #$98D3, // $98D3 + #$98D4, // $98D4 + #$98D5, // $98D5 + #$98D6, // $98D6 + #$98D7, // $98D7 + #$98D8, // $98D8 + #$98D9, // $98D9 + #$98DA, // $98DA + #$98DB, // $98DB + #$98DC, // $98DC + #$98DD, // $98DD + #$98DE, // $98DE + #$98DF, // $98DF + #$98E0, // $98E0 + #$98E1, // $98E1 + #$98E2, // $98E2 + #$98E3, // $98E3 + #$98E4, // $98E4 + #$98E5, // $98E5 + #$98E6, // $98E6 + #$98E7, // $98E7 + #$98E8, // $98E8 + #$98E9, // $98E9 + #$98EA, // $98EA + #$98EB, // $98EB + #$98EC, // $98EC + #$98ED, // $98ED + #$98EE, // $98EE + #$98EF, // $98EF + #$98F0, // $98F0 + #$98F1, // $98F1 + #$98F2, // $98F2 + #$98F3, // $98F3 + #$98F4, // $98F4 + #$98F5, // $98F5 + #$98F6, // $98F6 + #$98F7, // $98F7 + #$98F8, // $98F8 + #$98F9, // $98F9 + #$98FA, // $98FA + #$98FB, // $98FB + #$98FC, // $98FC + #$98FD, // $98FD + #$98FE, // $98FE + #$98FF, // $98FF + #$9900, // $9900 + #$9901, // $9901 + #$9902, // $9902 + #$9903, // $9903 + #$9904, // $9904 + #$9905, // $9905 + #$9906, // $9906 + #$9907, // $9907 + #$9908, // $9908 + #$9909, // $9909 + #$990A, // $990A + #$990B, // $990B + #$990C, // $990C + #$990D, // $990D + #$990E, // $990E + #$990F, // $990F + #$9910, // $9910 + #$9911, // $9911 + #$9912, // $9912 + #$9913, // $9913 + #$9914, // $9914 + #$9915, // $9915 + #$9916, // $9916 + #$9917, // $9917 + #$9918, // $9918 + #$9919, // $9919 + #$991A, // $991A + #$991B, // $991B + #$991C, // $991C + #$991D, // $991D + #$991E, // $991E + #$991F, // $991F + #$9920, // $9920 + #$9921, // $9921 + #$9922, // $9922 + #$9923, // $9923 + #$9924, // $9924 + #$9925, // $9925 + #$9926, // $9926 + #$9927, // $9927 + #$9928, // $9928 + #$9929, // $9929 + #$992A, // $992A + #$992B, // $992B + #$992C, // $992C + #$992D, // $992D + #$992E, // $992E + #$992F, // $992F + #$9930, // $9930 + #$9931, // $9931 + #$9932, // $9932 + #$9933, // $9933 + #$9934, // $9934 + #$9935, // $9935 + #$9936, // $9936 + #$9937, // $9937 + #$9938, // $9938 + #$9939, // $9939 + #$993A, // $993A + #$993B, // $993B + #$993C, // $993C + #$993D, // $993D + #$993E, // $993E + #$993F, // $993F + #$9940, // $9940 + #$9941, // $9941 + #$9942, // $9942 + #$9943, // $9943 + #$9944, // $9944 + #$9945, // $9945 + #$9946, // $9946 + #$9947, // $9947 + #$9948, // $9948 + #$9949, // $9949 + #$994A, // $994A + #$994B, // $994B + #$994C, // $994C + #$994D, // $994D + #$994E, // $994E + #$994F, // $994F + #$9950, // $9950 + #$9951, // $9951 + #$9952, // $9952 + #$9953, // $9953 + #$9954, // $9954 + #$9955, // $9955 + #$9956, // $9956 + #$9957, // $9957 + #$9958, // $9958 + #$9959, // $9959 + #$995A, // $995A + #$995B, // $995B + #$995C, // $995C + #$995D, // $995D + #$995E, // $995E + #$995F, // $995F + #$9960, // $9960 + #$9961, // $9961 + #$9962, // $9962 + #$9963, // $9963 + #$9964, // $9964 + #$9965, // $9965 + #$9966, // $9966 + #$9967, // $9967 + #$9968, // $9968 + #$9969, // $9969 + #$996A, // $996A + #$996B, // $996B + #$996C, // $996C + #$996D, // $996D + #$996E, // $996E + #$996F, // $996F + #$9970, // $9970 + #$9971, // $9971 + #$9972, // $9972 + #$9973, // $9973 + #$9974, // $9974 + #$9975, // $9975 + #$9976, // $9976 + #$9977, // $9977 + #$9978, // $9978 + #$9979, // $9979 + #$997A, // $997A + #$997B, // $997B + #$997C, // $997C + #$997D, // $997D + #$997E, // $997E + #$997F, // $997F + #$9980, // $9980 + #$9981, // $9981 + #$9982, // $9982 + #$9983, // $9983 + #$9984, // $9984 + #$9985, // $9985 + #$9986, // $9986 + #$9987, // $9987 + #$9988, // $9988 + #$9989, // $9989 + #$998A, // $998A + #$998B, // $998B + #$998C, // $998C + #$998D, // $998D + #$998E, // $998E + #$998F, // $998F + #$9990, // $9990 + #$9991, // $9991 + #$9992, // $9992 + #$9993, // $9993 + #$9994, // $9994 + #$9995, // $9995 + #$9996, // $9996 + #$9997, // $9997 + #$9998, // $9998 + #$9999, // $9999 + #$999A, // $999A + #$999B, // $999B + #$999C, // $999C + #$999D, // $999D + #$999E, // $999E + #$999F, // $999F + #$99A0, // $99A0 + #$99A1, // $99A1 + #$99A2, // $99A2 + #$99A3, // $99A3 + #$99A4, // $99A4 + #$99A5, // $99A5 + #$99A6, // $99A6 + #$99A7, // $99A7 + #$99A8, // $99A8 + #$99A9, // $99A9 + #$99AA, // $99AA + #$99AB, // $99AB + #$99AC, // $99AC + #$99AD, // $99AD + #$99AE, // $99AE + #$99AF, // $99AF + #$99B0, // $99B0 + #$99B1, // $99B1 + #$99B2, // $99B2 + #$99B3, // $99B3 + #$99B4, // $99B4 + #$99B5, // $99B5 + #$99B6, // $99B6 + #$99B7, // $99B7 + #$99B8, // $99B8 + #$99B9, // $99B9 + #$99BA, // $99BA + #$99BB, // $99BB + #$99BC, // $99BC + #$99BD, // $99BD + #$99BE, // $99BE + #$99BF, // $99BF + #$99C0, // $99C0 + #$99C1, // $99C1 + #$99C2, // $99C2 + #$99C3, // $99C3 + #$99C4, // $99C4 + #$99C5, // $99C5 + #$99C6, // $99C6 + #$99C7, // $99C7 + #$99C8, // $99C8 + #$99C9, // $99C9 + #$99CA, // $99CA + #$99CB, // $99CB + #$99CC, // $99CC + #$99CD, // $99CD + #$99CE, // $99CE + #$99CF, // $99CF + #$99D0, // $99D0 + #$99D1, // $99D1 + #$99D2, // $99D2 + #$99D3, // $99D3 + #$99D4, // $99D4 + #$99D5, // $99D5 + #$99D6, // $99D6 + #$99D7, // $99D7 + #$99D8, // $99D8 + #$99D9, // $99D9 + #$99DA, // $99DA + #$99DB, // $99DB + #$99DC, // $99DC + #$99DD, // $99DD + #$99DE, // $99DE + #$99DF, // $99DF + #$99E0, // $99E0 + #$99E1, // $99E1 + #$99E2, // $99E2 + #$99E3, // $99E3 + #$99E4, // $99E4 + #$99E5, // $99E5 + #$99E6, // $99E6 + #$99E7, // $99E7 + #$99E8, // $99E8 + #$99E9, // $99E9 + #$99EA, // $99EA + #$99EB, // $99EB + #$99EC, // $99EC + #$99ED, // $99ED + #$99EE, // $99EE + #$99EF, // $99EF + #$99F0, // $99F0 + #$99F1, // $99F1 + #$99F2, // $99F2 + #$99F3, // $99F3 + #$99F4, // $99F4 + #$99F5, // $99F5 + #$99F6, // $99F6 + #$99F7, // $99F7 + #$99F8, // $99F8 + #$99F9, // $99F9 + #$99FA, // $99FA + #$99FB, // $99FB + #$99FC, // $99FC + #$99FD, // $99FD + #$99FE, // $99FE + #$99FF, // $99FF + #$9A00, // $9A00 + #$9A01, // $9A01 + #$9A02, // $9A02 + #$9A03, // $9A03 + #$9A04, // $9A04 + #$9A05, // $9A05 + #$9A06, // $9A06 + #$9A07, // $9A07 + #$9A08, // $9A08 + #$9A09, // $9A09 + #$9A0A, // $9A0A + #$9A0B, // $9A0B + #$9A0C, // $9A0C + #$9A0D, // $9A0D + #$9A0E, // $9A0E + #$9A0F, // $9A0F + #$9A10, // $9A10 + #$9A11, // $9A11 + #$9A12, // $9A12 + #$9A13, // $9A13 + #$9A14, // $9A14 + #$9A15, // $9A15 + #$9A16, // $9A16 + #$9A17, // $9A17 + #$9A18, // $9A18 + #$9A19, // $9A19 + #$9A1A, // $9A1A + #$9A1B, // $9A1B + #$9A1C, // $9A1C + #$9A1D, // $9A1D + #$9A1E, // $9A1E + #$9A1F, // $9A1F + #$9A20, // $9A20 + #$9A21, // $9A21 + #$9A22, // $9A22 + #$9A23, // $9A23 + #$9A24, // $9A24 + #$9A25, // $9A25 + #$9A26, // $9A26 + #$9A27, // $9A27 + #$9A28, // $9A28 + #$9A29, // $9A29 + #$9A2A, // $9A2A + #$9A2B, // $9A2B + #$9A2C, // $9A2C + #$9A2D, // $9A2D + #$9A2E, // $9A2E + #$9A2F, // $9A2F + #$9A30, // $9A30 + #$9A31, // $9A31 + #$9A32, // $9A32 + #$9A33, // $9A33 + #$9A34, // $9A34 + #$9A35, // $9A35 + #$9A36, // $9A36 + #$9A37, // $9A37 + #$9A38, // $9A38 + #$9A39, // $9A39 + #$9A3A, // $9A3A + #$9A3B, // $9A3B + #$9A3C, // $9A3C + #$9A3D, // $9A3D + #$9A3E, // $9A3E + #$9A3F, // $9A3F + #$9A40, // $9A40 + #$9A41, // $9A41 + #$9A42, // $9A42 + #$9A43, // $9A43 + #$9A44, // $9A44 + #$9A45, // $9A45 + #$9A46, // $9A46 + #$9A47, // $9A47 + #$9A48, // $9A48 + #$9A49, // $9A49 + #$9A4A, // $9A4A + #$9A4B, // $9A4B + #$9A4C, // $9A4C + #$9A4D, // $9A4D + #$9A4E, // $9A4E + #$9A4F, // $9A4F + #$9A50, // $9A50 + #$9A51, // $9A51 + #$9A52, // $9A52 + #$9A53, // $9A53 + #$9A54, // $9A54 + #$9A55, // $9A55 + #$9A56, // $9A56 + #$9A57, // $9A57 + #$9A58, // $9A58 + #$9A59, // $9A59 + #$9A5A, // $9A5A + #$9A5B, // $9A5B + #$9A5C, // $9A5C + #$9A5D, // $9A5D + #$9A5E, // $9A5E + #$9A5F, // $9A5F + #$9A60, // $9A60 + #$9A61, // $9A61 + #$9A62, // $9A62 + #$9A63, // $9A63 + #$9A64, // $9A64 + #$9A65, // $9A65 + #$9A66, // $9A66 + #$9A67, // $9A67 + #$9A68, // $9A68 + #$9A69, // $9A69 + #$9A6A, // $9A6A + #$9A6B, // $9A6B + #$9A6C, // $9A6C + #$9A6D, // $9A6D + #$9A6E, // $9A6E + #$9A6F, // $9A6F + #$9A70, // $9A70 + #$9A71, // $9A71 + #$9A72, // $9A72 + #$9A73, // $9A73 + #$9A74, // $9A74 + #$9A75, // $9A75 + #$9A76, // $9A76 + #$9A77, // $9A77 + #$9A78, // $9A78 + #$9A79, // $9A79 + #$9A7A, // $9A7A + #$9A7B, // $9A7B + #$9A7C, // $9A7C + #$9A7D, // $9A7D + #$9A7E, // $9A7E + #$9A7F, // $9A7F + #$9A80, // $9A80 + #$9A81, // $9A81 + #$9A82, // $9A82 + #$9A83, // $9A83 + #$9A84, // $9A84 + #$9A85, // $9A85 + #$9A86, // $9A86 + #$9A87, // $9A87 + #$9A88, // $9A88 + #$9A89, // $9A89 + #$9A8A, // $9A8A + #$9A8B, // $9A8B + #$9A8C, // $9A8C + #$9A8D, // $9A8D + #$9A8E, // $9A8E + #$9A8F, // $9A8F + #$9A90, // $9A90 + #$9A91, // $9A91 + #$9A92, // $9A92 + #$9A93, // $9A93 + #$9A94, // $9A94 + #$9A95, // $9A95 + #$9A96, // $9A96 + #$9A97, // $9A97 + #$9A98, // $9A98 + #$9A99, // $9A99 + #$9A9A, // $9A9A + #$9A9B, // $9A9B + #$9A9C, // $9A9C + #$9A9D, // $9A9D + #$9A9E, // $9A9E + #$9A9F, // $9A9F + #$9AA0, // $9AA0 + #$9AA1, // $9AA1 + #$9AA2, // $9AA2 + #$9AA3, // $9AA3 + #$9AA4, // $9AA4 + #$9AA5, // $9AA5 + #$9AA6, // $9AA6 + #$9AA7, // $9AA7 + #$9AA8, // $9AA8 + #$9AA9, // $9AA9 + #$9AAA, // $9AAA + #$9AAB, // $9AAB + #$9AAC, // $9AAC + #$9AAD, // $9AAD + #$9AAE, // $9AAE + #$9AAF, // $9AAF + #$9AB0, // $9AB0 + #$9AB1, // $9AB1 + #$9AB2, // $9AB2 + #$9AB3, // $9AB3 + #$9AB4, // $9AB4 + #$9AB5, // $9AB5 + #$9AB6, // $9AB6 + #$9AB7, // $9AB7 + #$9AB8, // $9AB8 + #$9AB9, // $9AB9 + #$9ABA, // $9ABA + #$9ABB, // $9ABB + #$9ABC, // $9ABC + #$9ABD, // $9ABD + #$9ABE, // $9ABE + #$9ABF, // $9ABF + #$9AC0, // $9AC0 + #$9AC1, // $9AC1 + #$9AC2, // $9AC2 + #$9AC3, // $9AC3 + #$9AC4, // $9AC4 + #$9AC5, // $9AC5 + #$9AC6, // $9AC6 + #$9AC7, // $9AC7 + #$9AC8, // $9AC8 + #$9AC9, // $9AC9 + #$9ACA, // $9ACA + #$9ACB, // $9ACB + #$9ACC, // $9ACC + #$9ACD, // $9ACD + #$9ACE, // $9ACE + #$9ACF, // $9ACF + #$9AD0, // $9AD0 + #$9AD1, // $9AD1 + #$9AD2, // $9AD2 + #$9AD3, // $9AD3 + #$9AD4, // $9AD4 + #$9AD5, // $9AD5 + #$9AD6, // $9AD6 + #$9AD7, // $9AD7 + #$9AD8, // $9AD8 + #$9AD9, // $9AD9 + #$9ADA, // $9ADA + #$9ADB, // $9ADB + #$9ADC, // $9ADC + #$9ADD, // $9ADD + #$9ADE, // $9ADE + #$9ADF, // $9ADF + #$9AE0, // $9AE0 + #$9AE1, // $9AE1 + #$9AE2, // $9AE2 + #$9AE3, // $9AE3 + #$9AE4, // $9AE4 + #$9AE5, // $9AE5 + #$9AE6, // $9AE6 + #$9AE7, // $9AE7 + #$9AE8, // $9AE8 + #$9AE9, // $9AE9 + #$9AEA, // $9AEA + #$9AEB, // $9AEB + #$9AEC, // $9AEC + #$9AED, // $9AED + #$9AEE, // $9AEE + #$9AEF, // $9AEF + #$9AF0, // $9AF0 + #$9AF1, // $9AF1 + #$9AF2, // $9AF2 + #$9AF3, // $9AF3 + #$9AF4, // $9AF4 + #$9AF5, // $9AF5 + #$9AF6, // $9AF6 + #$9AF7, // $9AF7 + #$9AF8, // $9AF8 + #$9AF9, // $9AF9 + #$9AFA, // $9AFA + #$9AFB, // $9AFB + #$9AFC, // $9AFC + #$9AFD, // $9AFD + #$9AFE, // $9AFE + #$9AFF, // $9AFF + #$9B00, // $9B00 + #$9B01, // $9B01 + #$9B02, // $9B02 + #$9B03, // $9B03 + #$9B04, // $9B04 + #$9B05, // $9B05 + #$9B06, // $9B06 + #$9B07, // $9B07 + #$9B08, // $9B08 + #$9B09, // $9B09 + #$9B0A, // $9B0A + #$9B0B, // $9B0B + #$9B0C, // $9B0C + #$9B0D, // $9B0D + #$9B0E, // $9B0E + #$9B0F, // $9B0F + #$9B10, // $9B10 + #$9B11, // $9B11 + #$9B12, // $9B12 + #$9B13, // $9B13 + #$9B14, // $9B14 + #$9B15, // $9B15 + #$9B16, // $9B16 + #$9B17, // $9B17 + #$9B18, // $9B18 + #$9B19, // $9B19 + #$9B1A, // $9B1A + #$9B1B, // $9B1B + #$9B1C, // $9B1C + #$9B1D, // $9B1D + #$9B1E, // $9B1E + #$9B1F, // $9B1F + #$9B20, // $9B20 + #$9B21, // $9B21 + #$9B22, // $9B22 + #$9B23, // $9B23 + #$9B24, // $9B24 + #$9B25, // $9B25 + #$9B26, // $9B26 + #$9B27, // $9B27 + #$9B28, // $9B28 + #$9B29, // $9B29 + #$9B2A, // $9B2A + #$9B2B, // $9B2B + #$9B2C, // $9B2C + #$9B2D, // $9B2D + #$9B2E, // $9B2E + #$9B2F, // $9B2F + #$9B30, // $9B30 + #$9B31, // $9B31 + #$9B32, // $9B32 + #$9B33, // $9B33 + #$9B34, // $9B34 + #$9B35, // $9B35 + #$9B36, // $9B36 + #$9B37, // $9B37 + #$9B38, // $9B38 + #$9B39, // $9B39 + #$9B3A, // $9B3A + #$9B3B, // $9B3B + #$9B3C, // $9B3C + #$9B3D, // $9B3D + #$9B3E, // $9B3E + #$9B3F, // $9B3F + #$9B40, // $9B40 + #$9B41, // $9B41 + #$9B42, // $9B42 + #$9B43, // $9B43 + #$9B44, // $9B44 + #$9B45, // $9B45 + #$9B46, // $9B46 + #$9B47, // $9B47 + #$9B48, // $9B48 + #$9B49, // $9B49 + #$9B4A, // $9B4A + #$9B4B, // $9B4B + #$9B4C, // $9B4C + #$9B4D, // $9B4D + #$9B4E, // $9B4E + #$9B4F, // $9B4F + #$9B50, // $9B50 + #$9B51, // $9B51 + #$9B52, // $9B52 + #$9B53, // $9B53 + #$9B54, // $9B54 + #$9B55, // $9B55 + #$9B56, // $9B56 + #$9B57, // $9B57 + #$9B58, // $9B58 + #$9B59, // $9B59 + #$9B5A, // $9B5A + #$9B5B, // $9B5B + #$9B5C, // $9B5C + #$9B5D, // $9B5D + #$9B5E, // $9B5E + #$9B5F, // $9B5F + #$9B60, // $9B60 + #$9B61, // $9B61 + #$9B62, // $9B62 + #$9B63, // $9B63 + #$9B64, // $9B64 + #$9B65, // $9B65 + #$9B66, // $9B66 + #$9B67, // $9B67 + #$9B68, // $9B68 + #$9B69, // $9B69 + #$9B6A, // $9B6A + #$9B6B, // $9B6B + #$9B6C, // $9B6C + #$9B6D, // $9B6D + #$9B6E, // $9B6E + #$9B6F, // $9B6F + #$9B70, // $9B70 + #$9B71, // $9B71 + #$9B72, // $9B72 + #$9B73, // $9B73 + #$9B74, // $9B74 + #$9B75, // $9B75 + #$9B76, // $9B76 + #$9B77, // $9B77 + #$9B78, // $9B78 + #$9B79, // $9B79 + #$9B7A, // $9B7A + #$9B7B, // $9B7B + #$9B7C, // $9B7C + #$9B7D, // $9B7D + #$9B7E, // $9B7E + #$9B7F, // $9B7F + #$9B80, // $9B80 + #$9B81, // $9B81 + #$9B82, // $9B82 + #$9B83, // $9B83 + #$9B84, // $9B84 + #$9B85, // $9B85 + #$9B86, // $9B86 + #$9B87, // $9B87 + #$9B88, // $9B88 + #$9B89, // $9B89 + #$9B8A, // $9B8A + #$9B8B, // $9B8B + #$9B8C, // $9B8C + #$9B8D, // $9B8D + #$9B8E, // $9B8E + #$9B8F, // $9B8F + #$9B90, // $9B90 + #$9B91, // $9B91 + #$9B92, // $9B92 + #$9B93, // $9B93 + #$9B94, // $9B94 + #$9B95, // $9B95 + #$9B96, // $9B96 + #$9B97, // $9B97 + #$9B98, // $9B98 + #$9B99, // $9B99 + #$9B9A, // $9B9A + #$9B9B, // $9B9B + #$9B9C, // $9B9C + #$9B9D, // $9B9D + #$9B9E, // $9B9E + #$9B9F, // $9B9F + #$9BA0, // $9BA0 + #$9BA1, // $9BA1 + #$9BA2, // $9BA2 + #$9BA3, // $9BA3 + #$9BA4, // $9BA4 + #$9BA5, // $9BA5 + #$9BA6, // $9BA6 + #$9BA7, // $9BA7 + #$9BA8, // $9BA8 + #$9BA9, // $9BA9 + #$9BAA, // $9BAA + #$9BAB, // $9BAB + #$9BAC, // $9BAC + #$9BAD, // $9BAD + #$9BAE, // $9BAE + #$9BAF, // $9BAF + #$9BB0, // $9BB0 + #$9BB1, // $9BB1 + #$9BB2, // $9BB2 + #$9BB3, // $9BB3 + #$9BB4, // $9BB4 + #$9BB5, // $9BB5 + #$9BB6, // $9BB6 + #$9BB7, // $9BB7 + #$9BB8, // $9BB8 + #$9BB9, // $9BB9 + #$9BBA, // $9BBA + #$9BBB, // $9BBB + #$9BBC, // $9BBC + #$9BBD, // $9BBD + #$9BBE, // $9BBE + #$9BBF, // $9BBF + #$9BC0, // $9BC0 + #$9BC1, // $9BC1 + #$9BC2, // $9BC2 + #$9BC3, // $9BC3 + #$9BC4, // $9BC4 + #$9BC5, // $9BC5 + #$9BC6, // $9BC6 + #$9BC7, // $9BC7 + #$9BC8, // $9BC8 + #$9BC9, // $9BC9 + #$9BCA, // $9BCA + #$9BCB, // $9BCB + #$9BCC, // $9BCC + #$9BCD, // $9BCD + #$9BCE, // $9BCE + #$9BCF, // $9BCF + #$9BD0, // $9BD0 + #$9BD1, // $9BD1 + #$9BD2, // $9BD2 + #$9BD3, // $9BD3 + #$9BD4, // $9BD4 + #$9BD5, // $9BD5 + #$9BD6, // $9BD6 + #$9BD7, // $9BD7 + #$9BD8, // $9BD8 + #$9BD9, // $9BD9 + #$9BDA, // $9BDA + #$9BDB, // $9BDB + #$9BDC, // $9BDC + #$9BDD, // $9BDD + #$9BDE, // $9BDE + #$9BDF, // $9BDF + #$9BE0, // $9BE0 + #$9BE1, // $9BE1 + #$9BE2, // $9BE2 + #$9BE3, // $9BE3 + #$9BE4, // $9BE4 + #$9BE5, // $9BE5 + #$9BE6, // $9BE6 + #$9BE7, // $9BE7 + #$9BE8, // $9BE8 + #$9BE9, // $9BE9 + #$9BEA, // $9BEA + #$9BEB, // $9BEB + #$9BEC, // $9BEC + #$9BED, // $9BED + #$9BEE, // $9BEE + #$9BEF, // $9BEF + #$9BF0, // $9BF0 + #$9BF1, // $9BF1 + #$9BF2, // $9BF2 + #$9BF3, // $9BF3 + #$9BF4, // $9BF4 + #$9BF5, // $9BF5 + #$9BF6, // $9BF6 + #$9BF7, // $9BF7 + #$9BF8, // $9BF8 + #$9BF9, // $9BF9 + #$9BFA, // $9BFA + #$9BFB, // $9BFB + #$9BFC, // $9BFC + #$9BFD, // $9BFD + #$9BFE, // $9BFE + #$9BFF, // $9BFF + #$9C00, // $9C00 + #$9C01, // $9C01 + #$9C02, // $9C02 + #$9C03, // $9C03 + #$9C04, // $9C04 + #$9C05, // $9C05 + #$9C06, // $9C06 + #$9C07, // $9C07 + #$9C08, // $9C08 + #$9C09, // $9C09 + #$9C0A, // $9C0A + #$9C0B, // $9C0B + #$9C0C, // $9C0C + #$9C0D, // $9C0D + #$9C0E, // $9C0E + #$9C0F, // $9C0F + #$9C10, // $9C10 + #$9C11, // $9C11 + #$9C12, // $9C12 + #$9C13, // $9C13 + #$9C14, // $9C14 + #$9C15, // $9C15 + #$9C16, // $9C16 + #$9C17, // $9C17 + #$9C18, // $9C18 + #$9C19, // $9C19 + #$9C1A, // $9C1A + #$9C1B, // $9C1B + #$9C1C, // $9C1C + #$9C1D, // $9C1D + #$9C1E, // $9C1E + #$9C1F, // $9C1F + #$9C20, // $9C20 + #$9C21, // $9C21 + #$9C22, // $9C22 + #$9C23, // $9C23 + #$9C24, // $9C24 + #$9C25, // $9C25 + #$9C26, // $9C26 + #$9C27, // $9C27 + #$9C28, // $9C28 + #$9C29, // $9C29 + #$9C2A, // $9C2A + #$9C2B, // $9C2B + #$9C2C, // $9C2C + #$9C2D, // $9C2D + #$9C2E, // $9C2E + #$9C2F, // $9C2F + #$9C30, // $9C30 + #$9C31, // $9C31 + #$9C32, // $9C32 + #$9C33, // $9C33 + #$9C34, // $9C34 + #$9C35, // $9C35 + #$9C36, // $9C36 + #$9C37, // $9C37 + #$9C38, // $9C38 + #$9C39, // $9C39 + #$9C3A, // $9C3A + #$9C3B, // $9C3B + #$9C3C, // $9C3C + #$9C3D, // $9C3D + #$9C3E, // $9C3E + #$9C3F, // $9C3F + #$9C40, // $9C40 + #$9C41, // $9C41 + #$9C42, // $9C42 + #$9C43, // $9C43 + #$9C44, // $9C44 + #$9C45, // $9C45 + #$9C46, // $9C46 + #$9C47, // $9C47 + #$9C48, // $9C48 + #$9C49, // $9C49 + #$9C4A, // $9C4A + #$9C4B, // $9C4B + #$9C4C, // $9C4C + #$9C4D, // $9C4D + #$9C4E, // $9C4E + #$9C4F, // $9C4F + #$9C50, // $9C50 + #$9C51, // $9C51 + #$9C52, // $9C52 + #$9C53, // $9C53 + #$9C54, // $9C54 + #$9C55, // $9C55 + #$9C56, // $9C56 + #$9C57, // $9C57 + #$9C58, // $9C58 + #$9C59, // $9C59 + #$9C5A, // $9C5A + #$9C5B, // $9C5B + #$9C5C, // $9C5C + #$9C5D, // $9C5D + #$9C5E, // $9C5E + #$9C5F, // $9C5F + #$9C60, // $9C60 + #$9C61, // $9C61 + #$9C62, // $9C62 + #$9C63, // $9C63 + #$9C64, // $9C64 + #$9C65, // $9C65 + #$9C66, // $9C66 + #$9C67, // $9C67 + #$9C68, // $9C68 + #$9C69, // $9C69 + #$9C6A, // $9C6A + #$9C6B, // $9C6B + #$9C6C, // $9C6C + #$9C6D, // $9C6D + #$9C6E, // $9C6E + #$9C6F, // $9C6F + #$9C70, // $9C70 + #$9C71, // $9C71 + #$9C72, // $9C72 + #$9C73, // $9C73 + #$9C74, // $9C74 + #$9C75, // $9C75 + #$9C76, // $9C76 + #$9C77, // $9C77 + #$9C78, // $9C78 + #$9C79, // $9C79 + #$9C7A, // $9C7A + #$9C7B, // $9C7B + #$9C7C, // $9C7C + #$9C7D, // $9C7D + #$9C7E, // $9C7E + #$9C7F, // $9C7F + #$9C80, // $9C80 + #$9C81, // $9C81 + #$9C82, // $9C82 + #$9C83, // $9C83 + #$9C84, // $9C84 + #$9C85, // $9C85 + #$9C86, // $9C86 + #$9C87, // $9C87 + #$9C88, // $9C88 + #$9C89, // $9C89 + #$9C8A, // $9C8A + #$9C8B, // $9C8B + #$9C8C, // $9C8C + #$9C8D, // $9C8D + #$9C8E, // $9C8E + #$9C8F, // $9C8F + #$9C90, // $9C90 + #$9C91, // $9C91 + #$9C92, // $9C92 + #$9C93, // $9C93 + #$9C94, // $9C94 + #$9C95, // $9C95 + #$9C96, // $9C96 + #$9C97, // $9C97 + #$9C98, // $9C98 + #$9C99, // $9C99 + #$9C9A, // $9C9A + #$9C9B, // $9C9B + #$9C9C, // $9C9C + #$9C9D, // $9C9D + #$9C9E, // $9C9E + #$9C9F, // $9C9F + #$9CA0, // $9CA0 + #$9CA1, // $9CA1 + #$9CA2, // $9CA2 + #$9CA3, // $9CA3 + #$9CA4, // $9CA4 + #$9CA5, // $9CA5 + #$9CA6, // $9CA6 + #$9CA7, // $9CA7 + #$9CA8, // $9CA8 + #$9CA9, // $9CA9 + #$9CAA, // $9CAA + #$9CAB, // $9CAB + #$9CAC, // $9CAC + #$9CAD, // $9CAD + #$9CAE, // $9CAE + #$9CAF, // $9CAF + #$9CB0, // $9CB0 + #$9CB1, // $9CB1 + #$9CB2, // $9CB2 + #$9CB3, // $9CB3 + #$9CB4, // $9CB4 + #$9CB5, // $9CB5 + #$9CB6, // $9CB6 + #$9CB7, // $9CB7 + #$9CB8, // $9CB8 + #$9CB9, // $9CB9 + #$9CBA, // $9CBA + #$9CBB, // $9CBB + #$9CBC, // $9CBC + #$9CBD, // $9CBD + #$9CBE, // $9CBE + #$9CBF, // $9CBF + #$9CC0, // $9CC0 + #$9CC1, // $9CC1 + #$9CC2, // $9CC2 + #$9CC3, // $9CC3 + #$9CC4, // $9CC4 + #$9CC5, // $9CC5 + #$9CC6, // $9CC6 + #$9CC7, // $9CC7 + #$9CC8, // $9CC8 + #$9CC9, // $9CC9 + #$9CCA, // $9CCA + #$9CCB, // $9CCB + #$9CCC, // $9CCC + #$9CCD, // $9CCD + #$9CCE, // $9CCE + #$9CCF, // $9CCF + #$9CD0, // $9CD0 + #$9CD1, // $9CD1 + #$9CD2, // $9CD2 + #$9CD3, // $9CD3 + #$9CD4, // $9CD4 + #$9CD5, // $9CD5 + #$9CD6, // $9CD6 + #$9CD7, // $9CD7 + #$9CD8, // $9CD8 + #$9CD9, // $9CD9 + #$9CDA, // $9CDA + #$9CDB, // $9CDB + #$9CDC, // $9CDC + #$9CDD, // $9CDD + #$9CDE, // $9CDE + #$9CDF, // $9CDF + #$9CE0, // $9CE0 + #$9CE1, // $9CE1 + #$9CE2, // $9CE2 + #$9CE3, // $9CE3 + #$9CE4, // $9CE4 + #$9CE5, // $9CE5 + #$9CE6, // $9CE6 + #$9CE7, // $9CE7 + #$9CE8, // $9CE8 + #$9CE9, // $9CE9 + #$9CEA, // $9CEA + #$9CEB, // $9CEB + #$9CEC, // $9CEC + #$9CED, // $9CED + #$9CEE, // $9CEE + #$9CEF, // $9CEF + #$9CF0, // $9CF0 + #$9CF1, // $9CF1 + #$9CF2, // $9CF2 + #$9CF3, // $9CF3 + #$9CF4, // $9CF4 + #$9CF5, // $9CF5 + #$9CF6, // $9CF6 + #$9CF7, // $9CF7 + #$9CF8, // $9CF8 + #$9CF9, // $9CF9 + #$9CFA, // $9CFA + #$9CFB, // $9CFB + #$9CFC, // $9CFC + #$9CFD, // $9CFD + #$9CFE, // $9CFE + #$9CFF, // $9CFF + #$9D00, // $9D00 + #$9D01, // $9D01 + #$9D02, // $9D02 + #$9D03, // $9D03 + #$9D04, // $9D04 + #$9D05, // $9D05 + #$9D06, // $9D06 + #$9D07, // $9D07 + #$9D08, // $9D08 + #$9D09, // $9D09 + #$9D0A, // $9D0A + #$9D0B, // $9D0B + #$9D0C, // $9D0C + #$9D0D, // $9D0D + #$9D0E, // $9D0E + #$9D0F, // $9D0F + #$9D10, // $9D10 + #$9D11, // $9D11 + #$9D12, // $9D12 + #$9D13, // $9D13 + #$9D14, // $9D14 + #$9D15, // $9D15 + #$9D16, // $9D16 + #$9D17, // $9D17 + #$9D18, // $9D18 + #$9D19, // $9D19 + #$9D1A, // $9D1A + #$9D1B, // $9D1B + #$9D1C, // $9D1C + #$9D1D, // $9D1D + #$9D1E, // $9D1E + #$9D1F, // $9D1F + #$9D20, // $9D20 + #$9D21, // $9D21 + #$9D22, // $9D22 + #$9D23, // $9D23 + #$9D24, // $9D24 + #$9D25, // $9D25 + #$9D26, // $9D26 + #$9D27, // $9D27 + #$9D28, // $9D28 + #$9D29, // $9D29 + #$9D2A, // $9D2A + #$9D2B, // $9D2B + #$9D2C, // $9D2C + #$9D2D, // $9D2D + #$9D2E, // $9D2E + #$9D2F, // $9D2F + #$9D30, // $9D30 + #$9D31, // $9D31 + #$9D32, // $9D32 + #$9D33, // $9D33 + #$9D34, // $9D34 + #$9D35, // $9D35 + #$9D36, // $9D36 + #$9D37, // $9D37 + #$9D38, // $9D38 + #$9D39, // $9D39 + #$9D3A, // $9D3A + #$9D3B, // $9D3B + #$9D3C, // $9D3C + #$9D3D, // $9D3D + #$9D3E, // $9D3E + #$9D3F, // $9D3F + #$9D40, // $9D40 + #$9D41, // $9D41 + #$9D42, // $9D42 + #$9D43, // $9D43 + #$9D44, // $9D44 + #$9D45, // $9D45 + #$9D46, // $9D46 + #$9D47, // $9D47 + #$9D48, // $9D48 + #$9D49, // $9D49 + #$9D4A, // $9D4A + #$9D4B, // $9D4B + #$9D4C, // $9D4C + #$9D4D, // $9D4D + #$9D4E, // $9D4E + #$9D4F, // $9D4F + #$9D50, // $9D50 + #$9D51, // $9D51 + #$9D52, // $9D52 + #$9D53, // $9D53 + #$9D54, // $9D54 + #$9D55, // $9D55 + #$9D56, // $9D56 + #$9D57, // $9D57 + #$9D58, // $9D58 + #$9D59, // $9D59 + #$9D5A, // $9D5A + #$9D5B, // $9D5B + #$9D5C, // $9D5C + #$9D5D, // $9D5D + #$9D5E, // $9D5E + #$9D5F, // $9D5F + #$9D60, // $9D60 + #$9D61, // $9D61 + #$9D62, // $9D62 + #$9D63, // $9D63 + #$9D64, // $9D64 + #$9D65, // $9D65 + #$9D66, // $9D66 + #$9D67, // $9D67 + #$9D68, // $9D68 + #$9D69, // $9D69 + #$9D6A, // $9D6A + #$9D6B, // $9D6B + #$9D6C, // $9D6C + #$9D6D, // $9D6D + #$9D6E, // $9D6E + #$9D6F, // $9D6F + #$9D70, // $9D70 + #$9D71, // $9D71 + #$9D72, // $9D72 + #$9D73, // $9D73 + #$9D74, // $9D74 + #$9D75, // $9D75 + #$9D76, // $9D76 + #$9D77, // $9D77 + #$9D78, // $9D78 + #$9D79, // $9D79 + #$9D7A, // $9D7A + #$9D7B, // $9D7B + #$9D7C, // $9D7C + #$9D7D, // $9D7D + #$9D7E, // $9D7E + #$9D7F, // $9D7F + #$9D80, // $9D80 + #$9D81, // $9D81 + #$9D82, // $9D82 + #$9D83, // $9D83 + #$9D84, // $9D84 + #$9D85, // $9D85 + #$9D86, // $9D86 + #$9D87, // $9D87 + #$9D88, // $9D88 + #$9D89, // $9D89 + #$9D8A, // $9D8A + #$9D8B, // $9D8B + #$9D8C, // $9D8C + #$9D8D, // $9D8D + #$9D8E, // $9D8E + #$9D8F, // $9D8F + #$9D90, // $9D90 + #$9D91, // $9D91 + #$9D92, // $9D92 + #$9D93, // $9D93 + #$9D94, // $9D94 + #$9D95, // $9D95 + #$9D96, // $9D96 + #$9D97, // $9D97 + #$9D98, // $9D98 + #$9D99, // $9D99 + #$9D9A, // $9D9A + #$9D9B, // $9D9B + #$9D9C, // $9D9C + #$9D9D, // $9D9D + #$9D9E, // $9D9E + #$9D9F, // $9D9F + #$9DA0, // $9DA0 + #$9DA1, // $9DA1 + #$9DA2, // $9DA2 + #$9DA3, // $9DA3 + #$9DA4, // $9DA4 + #$9DA5, // $9DA5 + #$9DA6, // $9DA6 + #$9DA7, // $9DA7 + #$9DA8, // $9DA8 + #$9DA9, // $9DA9 + #$9DAA, // $9DAA + #$9DAB, // $9DAB + #$9DAC, // $9DAC + #$9DAD, // $9DAD + #$9DAE, // $9DAE + #$9DAF, // $9DAF + #$9DB0, // $9DB0 + #$9DB1, // $9DB1 + #$9DB2, // $9DB2 + #$9DB3, // $9DB3 + #$9DB4, // $9DB4 + #$9DB5, // $9DB5 + #$9DB6, // $9DB6 + #$9DB7, // $9DB7 + #$9DB8, // $9DB8 + #$9DB9, // $9DB9 + #$9DBA, // $9DBA + #$9DBB, // $9DBB + #$9DBC, // $9DBC + #$9DBD, // $9DBD + #$9DBE, // $9DBE + #$9DBF, // $9DBF + #$9DC0, // $9DC0 + #$9DC1, // $9DC1 + #$9DC2, // $9DC2 + #$9DC3, // $9DC3 + #$9DC4, // $9DC4 + #$9DC5, // $9DC5 + #$9DC6, // $9DC6 + #$9DC7, // $9DC7 + #$9DC8, // $9DC8 + #$9DC9, // $9DC9 + #$9DCA, // $9DCA + #$9DCB, // $9DCB + #$9DCC, // $9DCC + #$9DCD, // $9DCD + #$9DCE, // $9DCE + #$9DCF, // $9DCF + #$9DD0, // $9DD0 + #$9DD1, // $9DD1 + #$9DD2, // $9DD2 + #$9DD3, // $9DD3 + #$9DD4, // $9DD4 + #$9DD5, // $9DD5 + #$9DD6, // $9DD6 + #$9DD7, // $9DD7 + #$9DD8, // $9DD8 + #$9DD9, // $9DD9 + #$9DDA, // $9DDA + #$9DDB, // $9DDB + #$9DDC, // $9DDC + #$9DDD, // $9DDD + #$9DDE, // $9DDE + #$9DDF, // $9DDF + #$9DE0, // $9DE0 + #$9DE1, // $9DE1 + #$9DE2, // $9DE2 + #$9DE3, // $9DE3 + #$9DE4, // $9DE4 + #$9DE5, // $9DE5 + #$9DE6, // $9DE6 + #$9DE7, // $9DE7 + #$9DE8, // $9DE8 + #$9DE9, // $9DE9 + #$9DEA, // $9DEA + #$9DEB, // $9DEB + #$9DEC, // $9DEC + #$9DED, // $9DED + #$9DEE, // $9DEE + #$9DEF, // $9DEF + #$9DF0, // $9DF0 + #$9DF1, // $9DF1 + #$9DF2, // $9DF2 + #$9DF3, // $9DF3 + #$9DF4, // $9DF4 + #$9DF5, // $9DF5 + #$9DF6, // $9DF6 + #$9DF7, // $9DF7 + #$9DF8, // $9DF8 + #$9DF9, // $9DF9 + #$9DFA, // $9DFA + #$9DFB, // $9DFB + #$9DFC, // $9DFC + #$9DFD, // $9DFD + #$9DFE, // $9DFE + #$9DFF, // $9DFF + #$9E00, // $9E00 + #$9E01, // $9E01 + #$9E02, // $9E02 + #$9E03, // $9E03 + #$9E04, // $9E04 + #$9E05, // $9E05 + #$9E06, // $9E06 + #$9E07, // $9E07 + #$9E08, // $9E08 + #$9E09, // $9E09 + #$9E0A, // $9E0A + #$9E0B, // $9E0B + #$9E0C, // $9E0C + #$9E0D, // $9E0D + #$9E0E, // $9E0E + #$9E0F, // $9E0F + #$9E10, // $9E10 + #$9E11, // $9E11 + #$9E12, // $9E12 + #$9E13, // $9E13 + #$9E14, // $9E14 + #$9E15, // $9E15 + #$9E16, // $9E16 + #$9E17, // $9E17 + #$9E18, // $9E18 + #$9E19, // $9E19 + #$9E1A, // $9E1A + #$9E1B, // $9E1B + #$9E1C, // $9E1C + #$9E1D, // $9E1D + #$9E1E, // $9E1E + #$9E1F, // $9E1F + #$9E20, // $9E20 + #$9E21, // $9E21 + #$9E22, // $9E22 + #$9E23, // $9E23 + #$9E24, // $9E24 + #$9E25, // $9E25 + #$9E26, // $9E26 + #$9E27, // $9E27 + #$9E28, // $9E28 + #$9E29, // $9E29 + #$9E2A, // $9E2A + #$9E2B, // $9E2B + #$9E2C, // $9E2C + #$9E2D, // $9E2D + #$9E2E, // $9E2E + #$9E2F, // $9E2F + #$9E30, // $9E30 + #$9E31, // $9E31 + #$9E32, // $9E32 + #$9E33, // $9E33 + #$9E34, // $9E34 + #$9E35, // $9E35 + #$9E36, // $9E36 + #$9E37, // $9E37 + #$9E38, // $9E38 + #$9E39, // $9E39 + #$9E3A, // $9E3A + #$9E3B, // $9E3B + #$9E3C, // $9E3C + #$9E3D, // $9E3D + #$9E3E, // $9E3E + #$9E3F, // $9E3F + #$9E40, // $9E40 + #$9E41, // $9E41 + #$9E42, // $9E42 + #$9E43, // $9E43 + #$9E44, // $9E44 + #$9E45, // $9E45 + #$9E46, // $9E46 + #$9E47, // $9E47 + #$9E48, // $9E48 + #$9E49, // $9E49 + #$9E4A, // $9E4A + #$9E4B, // $9E4B + #$9E4C, // $9E4C + #$9E4D, // $9E4D + #$9E4E, // $9E4E + #$9E4F, // $9E4F + #$9E50, // $9E50 + #$9E51, // $9E51 + #$9E52, // $9E52 + #$9E53, // $9E53 + #$9E54, // $9E54 + #$9E55, // $9E55 + #$9E56, // $9E56 + #$9E57, // $9E57 + #$9E58, // $9E58 + #$9E59, // $9E59 + #$9E5A, // $9E5A + #$9E5B, // $9E5B + #$9E5C, // $9E5C + #$9E5D, // $9E5D + #$9E5E, // $9E5E + #$9E5F, // $9E5F + #$9E60, // $9E60 + #$9E61, // $9E61 + #$9E62, // $9E62 + #$9E63, // $9E63 + #$9E64, // $9E64 + #$9E65, // $9E65 + #$9E66, // $9E66 + #$9E67, // $9E67 + #$9E68, // $9E68 + #$9E69, // $9E69 + #$9E6A, // $9E6A + #$9E6B, // $9E6B + #$9E6C, // $9E6C + #$9E6D, // $9E6D + #$9E6E, // $9E6E + #$9E6F, // $9E6F + #$9E70, // $9E70 + #$9E71, // $9E71 + #$9E72, // $9E72 + #$9E73, // $9E73 + #$9E74, // $9E74 + #$9E75, // $9E75 + #$9E76, // $9E76 + #$9E77, // $9E77 + #$9E78, // $9E78 + #$9E79, // $9E79 + #$9E7A, // $9E7A + #$9E7B, // $9E7B + #$9E7C, // $9E7C + #$9E7D, // $9E7D + #$9E7E, // $9E7E + #$9E7F, // $9E7F + #$9E80, // $9E80 + #$9E81, // $9E81 + #$9E82, // $9E82 + #$9E83, // $9E83 + #$9E84, // $9E84 + #$9E85, // $9E85 + #$9E86, // $9E86 + #$9E87, // $9E87 + #$9E88, // $9E88 + #$9E89, // $9E89 + #$9E8A, // $9E8A + #$9E8B, // $9E8B + #$9E8C, // $9E8C + #$9E8D, // $9E8D + #$9E8E, // $9E8E + #$9E8F, // $9E8F + #$9E90, // $9E90 + #$9E91, // $9E91 + #$9E92, // $9E92 + #$9E93, // $9E93 + #$9E94, // $9E94 + #$9E95, // $9E95 + #$9E96, // $9E96 + #$9E97, // $9E97 + #$9E98, // $9E98 + #$9E99, // $9E99 + #$9E9A, // $9E9A + #$9E9B, // $9E9B + #$9E9C, // $9E9C + #$9E9D, // $9E9D + #$9E9E, // $9E9E + #$9E9F, // $9E9F + #$9EA0, // $9EA0 + #$9EA1, // $9EA1 + #$9EA2, // $9EA2 + #$9EA3, // $9EA3 + #$9EA4, // $9EA4 + #$9EA5, // $9EA5 + #$9EA6, // $9EA6 + #$9EA7, // $9EA7 + #$9EA8, // $9EA8 + #$9EA9, // $9EA9 + #$9EAA, // $9EAA + #$9EAB, // $9EAB + #$9EAC, // $9EAC + #$9EAD, // $9EAD + #$9EAE, // $9EAE + #$9EAF, // $9EAF + #$9EB0, // $9EB0 + #$9EB1, // $9EB1 + #$9EB2, // $9EB2 + #$9EB3, // $9EB3 + #$9EB4, // $9EB4 + #$9EB5, // $9EB5 + #$9EB6, // $9EB6 + #$9EB7, // $9EB7 + #$9EB8, // $9EB8 + #$9EB9, // $9EB9 + #$9EBA, // $9EBA + #$9EBB, // $9EBB + #$9EBC, // $9EBC + #$9EBD, // $9EBD + #$9EBE, // $9EBE + #$9EBF, // $9EBF + #$9EC0, // $9EC0 + #$9EC1, // $9EC1 + #$9EC2, // $9EC2 + #$9EC3, // $9EC3 + #$9EC4, // $9EC4 + #$9EC5, // $9EC5 + #$9EC6, // $9EC6 + #$9EC7, // $9EC7 + #$9EC8, // $9EC8 + #$9EC9, // $9EC9 + #$9ECA, // $9ECA + #$9ECB, // $9ECB + #$9ECC, // $9ECC + #$9ECD, // $9ECD + #$9ECE, // $9ECE + #$9ECF, // $9ECF + #$9ED0, // $9ED0 + #$9ED1, // $9ED1 + #$9ED2, // $9ED2 + #$9ED3, // $9ED3 + #$9ED4, // $9ED4 + #$9ED5, // $9ED5 + #$9ED6, // $9ED6 + #$9ED7, // $9ED7 + #$9ED8, // $9ED8 + #$9ED9, // $9ED9 + #$9EDA, // $9EDA + #$9EDB, // $9EDB + #$9EDC, // $9EDC + #$9EDD, // $9EDD + #$9EDE, // $9EDE + #$9EDF, // $9EDF + #$9EE0, // $9EE0 + #$9EE1, // $9EE1 + #$9EE2, // $9EE2 + #$9EE3, // $9EE3 + #$9EE4, // $9EE4 + #$9EE5, // $9EE5 + #$9EE6, // $9EE6 + #$9EE7, // $9EE7 + #$9EE8, // $9EE8 + #$9EE9, // $9EE9 + #$9EEA, // $9EEA + #$9EEB, // $9EEB + #$9EEC, // $9EEC + #$9EED, // $9EED + #$9EEE, // $9EEE + #$9EEF, // $9EEF + #$9EF0, // $9EF0 + #$9EF1, // $9EF1 + #$9EF2, // $9EF2 + #$9EF3, // $9EF3 + #$9EF4, // $9EF4 + #$9EF5, // $9EF5 + #$9EF6, // $9EF6 + #$9EF7, // $9EF7 + #$9EF8, // $9EF8 + #$9EF9, // $9EF9 + #$9EFA, // $9EFA + #$9EFB, // $9EFB + #$9EFC, // $9EFC + #$9EFD, // $9EFD + #$9EFE, // $9EFE + #$9EFF, // $9EFF + #$9F00, // $9F00 + #$9F01, // $9F01 + #$9F02, // $9F02 + #$9F03, // $9F03 + #$9F04, // $9F04 + #$9F05, // $9F05 + #$9F06, // $9F06 + #$9F07, // $9F07 + #$9F08, // $9F08 + #$9F09, // $9F09 + #$9F0A, // $9F0A + #$9F0B, // $9F0B + #$9F0C, // $9F0C + #$9F0D, // $9F0D + #$9F0E, // $9F0E + #$9F0F, // $9F0F + #$9F10, // $9F10 + #$9F11, // $9F11 + #$9F12, // $9F12 + #$9F13, // $9F13 + #$9F14, // $9F14 + #$9F15, // $9F15 + #$9F16, // $9F16 + #$9F17, // $9F17 + #$9F18, // $9F18 + #$9F19, // $9F19 + #$9F1A, // $9F1A + #$9F1B, // $9F1B + #$9F1C, // $9F1C + #$9F1D, // $9F1D + #$9F1E, // $9F1E + #$9F1F, // $9F1F + #$9F20, // $9F20 + #$9F21, // $9F21 + #$9F22, // $9F22 + #$9F23, // $9F23 + #$9F24, // $9F24 + #$9F25, // $9F25 + #$9F26, // $9F26 + #$9F27, // $9F27 + #$9F28, // $9F28 + #$9F29, // $9F29 + #$9F2A, // $9F2A + #$9F2B, // $9F2B + #$9F2C, // $9F2C + #$9F2D, // $9F2D + #$9F2E, // $9F2E + #$9F2F, // $9F2F + #$9F30, // $9F30 + #$9F31, // $9F31 + #$9F32, // $9F32 + #$9F33, // $9F33 + #$9F34, // $9F34 + #$9F35, // $9F35 + #$9F36, // $9F36 + #$9F37, // $9F37 + #$9F38, // $9F38 + #$9F39, // $9F39 + #$9F3A, // $9F3A + #$9F3B, // $9F3B + #$9F3C, // $9F3C + #$9F3D, // $9F3D + #$9F3E, // $9F3E + #$9F3F, // $9F3F + #$9F40, // $9F40 + #$9F41, // $9F41 + #$9F42, // $9F42 + #$9F43, // $9F43 + #$9F44, // $9F44 + #$9F45, // $9F45 + #$9F46, // $9F46 + #$9F47, // $9F47 + #$9F48, // $9F48 + #$9F49, // $9F49 + #$9F4A, // $9F4A + #$9F4B, // $9F4B + #$9F4C, // $9F4C + #$9F4D, // $9F4D + #$9F4E, // $9F4E + #$9F4F, // $9F4F + #$9F50, // $9F50 + #$9F51, // $9F51 + #$9F52, // $9F52 + #$9F53, // $9F53 + #$9F54, // $9F54 + #$9F55, // $9F55 + #$9F56, // $9F56 + #$9F57, // $9F57 + #$9F58, // $9F58 + #$9F59, // $9F59 + #$9F5A, // $9F5A + #$9F5B, // $9F5B + #$9F5C, // $9F5C + #$9F5D, // $9F5D + #$9F5E, // $9F5E + #$9F5F, // $9F5F + #$9F60, // $9F60 + #$9F61, // $9F61 + #$9F62, // $9F62 + #$9F63, // $9F63 + #$9F64, // $9F64 + #$9F65, // $9F65 + #$9F66, // $9F66 + #$9F67, // $9F67 + #$9F68, // $9F68 + #$9F69, // $9F69 + #$9F6A, // $9F6A + #$9F6B, // $9F6B + #$9F6C, // $9F6C + #$9F6D, // $9F6D + #$9F6E, // $9F6E + #$9F6F, // $9F6F + #$9F70, // $9F70 + #$9F71, // $9F71 + #$9F72, // $9F72 + #$9F73, // $9F73 + #$9F74, // $9F74 + #$9F75, // $9F75 + #$9F76, // $9F76 + #$9F77, // $9F77 + #$9F78, // $9F78 + #$9F79, // $9F79 + #$9F7A, // $9F7A + #$9F7B, // $9F7B + #$9F7C, // $9F7C + #$9F7D, // $9F7D + #$9F7E, // $9F7E + #$9F7F, // $9F7F + #$9F80, // $9F80 + #$9F81, // $9F81 + #$9F82, // $9F82 + #$9F83, // $9F83 + #$9F84, // $9F84 + #$9F85, // $9F85 + #$9F86, // $9F86 + #$9F87, // $9F87 + #$9F88, // $9F88 + #$9F89, // $9F89 + #$9F8A, // $9F8A + #$9F8B, // $9F8B + #$9F8C, // $9F8C + #$9F8D, // $9F8D + #$9F8E, // $9F8E + #$9F8F, // $9F8F + #$9F90, // $9F90 + #$9F91, // $9F91 + #$9F92, // $9F92 + #$9F93, // $9F93 + #$9F94, // $9F94 + #$9F95, // $9F95 + #$9F96, // $9F96 + #$9F97, // $9F97 + #$9F98, // $9F98 + #$9F99, // $9F99 + #$9F9A, // $9F9A + #$9F9B, // $9F9B + #$9F9C, // $9F9C + #$9F9D, // $9F9D + #$9F9E, // $9F9E + #$9F9F, // $9F9F + #$9FA0, // $9FA0 + #$9FA1, // $9FA1 + #$9FA2, // $9FA2 + #$9FA3, // $9FA3 + #$9FA4, // $9FA4 + #$9FA5, // $9FA5 + #$9FA6, // $9FA6 + #$9FA7, // $9FA7 + #$9FA8, // $9FA8 + #$9FA9, // $9FA9 + #$9FAA, // $9FAA + #$9FAB, // $9FAB + #$9FAC, // $9FAC + #$9FAD, // $9FAD + #$9FAE, // $9FAE + #$9FAF, // $9FAF + #$9FB0, // $9FB0 + #$9FB1, // $9FB1 + #$9FB2, // $9FB2 + #$9FB3, // $9FB3 + #$9FB4, // $9FB4 + #$9FB5, // $9FB5 + #$9FB6, // $9FB6 + #$9FB7, // $9FB7 + #$9FB8, // $9FB8 + #$9FB9, // $9FB9 + #$9FBA, // $9FBA + #$9FBB, // $9FBB + #$9FBC, // $9FBC + #$9FBD, // $9FBD + #$9FBE, // $9FBE + #$9FBF, // $9FBF + #$9FC0, // $9FC0 + #$9FC1, // $9FC1 + #$9FC2, // $9FC2 + #$9FC3, // $9FC3 + #$9FC4, // $9FC4 + #$9FC5, // $9FC5 + #$9FC6, // $9FC6 + #$9FC7, // $9FC7 + #$9FC8, // $9FC8 + #$9FC9, // $9FC9 + #$9FCA, // $9FCA + #$9FCB, // $9FCB + #$9FCC, // $9FCC + #$9FCD, // $9FCD + #$9FCE, // $9FCE + #$9FCF, // $9FCF + #$9FD0, // $9FD0 + #$9FD1, // $9FD1 + #$9FD2, // $9FD2 + #$9FD3, // $9FD3 + #$9FD4, // $9FD4 + #$9FD5, // $9FD5 + #$9FD6, // $9FD6 + #$9FD7, // $9FD7 + #$9FD8, // $9FD8 + #$9FD9, // $9FD9 + #$9FDA, // $9FDA + #$9FDB, // $9FDB + #$9FDC, // $9FDC + #$9FDD, // $9FDD + #$9FDE, // $9FDE + #$9FDF, // $9FDF + #$9FE0, // $9FE0 + #$9FE1, // $9FE1 + #$9FE2, // $9FE2 + #$9FE3, // $9FE3 + #$9FE4, // $9FE4 + #$9FE5, // $9FE5 + #$9FE6, // $9FE6 + #$9FE7, // $9FE7 + #$9FE8, // $9FE8 + #$9FE9, // $9FE9 + #$9FEA, // $9FEA + #$9FEB, // $9FEB + #$9FEC, // $9FEC + #$9FED, // $9FED + #$9FEE, // $9FEE + #$9FEF, // $9FEF + #$9FF0, // $9FF0 + #$9FF1, // $9FF1 + #$9FF2, // $9FF2 + #$9FF3, // $9FF3 + #$9FF4, // $9FF4 + #$9FF5, // $9FF5 + #$9FF6, // $9FF6 + #$9FF7, // $9FF7 + #$9FF8, // $9FF8 + #$9FF9, // $9FF9 + #$9FFA, // $9FFA + #$9FFB, // $9FFB + #$9FFC, // $9FFC + #$9FFD, // $9FFD + #$9FFE, // $9FFE + #$9FFF, // $9FFF + #$A000, // $A000 + #$A001, // $A001 + #$A002, // $A002 + #$A003, // $A003 + #$A004, // $A004 + #$A005, // $A005 + #$A006, // $A006 + #$A007, // $A007 + #$A008, // $A008 + #$A009, // $A009 + #$A00A, // $A00A + #$A00B, // $A00B + #$A00C, // $A00C + #$A00D, // $A00D + #$A00E, // $A00E + #$A00F, // $A00F + #$A010, // $A010 + #$A011, // $A011 + #$A012, // $A012 + #$A013, // $A013 + #$A014, // $A014 + #$A015, // $A015 + #$A016, // $A016 + #$A017, // $A017 + #$A018, // $A018 + #$A019, // $A019 + #$A01A, // $A01A + #$A01B, // $A01B + #$A01C, // $A01C + #$A01D, // $A01D + #$A01E, // $A01E + #$A01F, // $A01F + #$A020, // $A020 + #$A021, // $A021 + #$A022, // $A022 + #$A023, // $A023 + #$A024, // $A024 + #$A025, // $A025 + #$A026, // $A026 + #$A027, // $A027 + #$A028, // $A028 + #$A029, // $A029 + #$A02A, // $A02A + #$A02B, // $A02B + #$A02C, // $A02C + #$A02D, // $A02D + #$A02E, // $A02E + #$A02F, // $A02F + #$A030, // $A030 + #$A031, // $A031 + #$A032, // $A032 + #$A033, // $A033 + #$A034, // $A034 + #$A035, // $A035 + #$A036, // $A036 + #$A037, // $A037 + #$A038, // $A038 + #$A039, // $A039 + #$A03A, // $A03A + #$A03B, // $A03B + #$A03C, // $A03C + #$A03D, // $A03D + #$A03E, // $A03E + #$A03F, // $A03F + #$A040, // $A040 + #$A041, // $A041 + #$A042, // $A042 + #$A043, // $A043 + #$A044, // $A044 + #$A045, // $A045 + #$A046, // $A046 + #$A047, // $A047 + #$A048, // $A048 + #$A049, // $A049 + #$A04A, // $A04A + #$A04B, // $A04B + #$A04C, // $A04C + #$A04D, // $A04D + #$A04E, // $A04E + #$A04F, // $A04F + #$A050, // $A050 + #$A051, // $A051 + #$A052, // $A052 + #$A053, // $A053 + #$A054, // $A054 + #$A055, // $A055 + #$A056, // $A056 + #$A057, // $A057 + #$A058, // $A058 + #$A059, // $A059 + #$A05A, // $A05A + #$A05B, // $A05B + #$A05C, // $A05C + #$A05D, // $A05D + #$A05E, // $A05E + #$A05F, // $A05F + #$A060, // $A060 + #$A061, // $A061 + #$A062, // $A062 + #$A063, // $A063 + #$A064, // $A064 + #$A065, // $A065 + #$A066, // $A066 + #$A067, // $A067 + #$A068, // $A068 + #$A069, // $A069 + #$A06A, // $A06A + #$A06B, // $A06B + #$A06C, // $A06C + #$A06D, // $A06D + #$A06E, // $A06E + #$A06F, // $A06F + #$A070, // $A070 + #$A071, // $A071 + #$A072, // $A072 + #$A073, // $A073 + #$A074, // $A074 + #$A075, // $A075 + #$A076, // $A076 + #$A077, // $A077 + #$A078, // $A078 + #$A079, // $A079 + #$A07A, // $A07A + #$A07B, // $A07B + #$A07C, // $A07C + #$A07D, // $A07D + #$A07E, // $A07E + #$A07F, // $A07F + #$A080, // $A080 + #$A081, // $A081 + #$A082, // $A082 + #$A083, // $A083 + #$A084, // $A084 + #$A085, // $A085 + #$A086, // $A086 + #$A087, // $A087 + #$A088, // $A088 + #$A089, // $A089 + #$A08A, // $A08A + #$A08B, // $A08B + #$A08C, // $A08C + #$A08D, // $A08D + #$A08E, // $A08E + #$A08F, // $A08F + #$A090, // $A090 + #$A091, // $A091 + #$A092, // $A092 + #$A093, // $A093 + #$A094, // $A094 + #$A095, // $A095 + #$A096, // $A096 + #$A097, // $A097 + #$A098, // $A098 + #$A099, // $A099 + #$A09A, // $A09A + #$A09B, // $A09B + #$A09C, // $A09C + #$A09D, // $A09D + #$A09E, // $A09E + #$A09F, // $A09F + #$A0A0, // $A0A0 + #$A0A1, // $A0A1 + #$A0A2, // $A0A2 + #$A0A3, // $A0A3 + #$A0A4, // $A0A4 + #$A0A5, // $A0A5 + #$A0A6, // $A0A6 + #$A0A7, // $A0A7 + #$A0A8, // $A0A8 + #$A0A9, // $A0A9 + #$A0AA, // $A0AA + #$A0AB, // $A0AB + #$A0AC, // $A0AC + #$A0AD, // $A0AD + #$A0AE, // $A0AE + #$A0AF, // $A0AF + #$A0B0, // $A0B0 + #$A0B1, // $A0B1 + #$A0B2, // $A0B2 + #$A0B3, // $A0B3 + #$A0B4, // $A0B4 + #$A0B5, // $A0B5 + #$A0B6, // $A0B6 + #$A0B7, // $A0B7 + #$A0B8, // $A0B8 + #$A0B9, // $A0B9 + #$A0BA, // $A0BA + #$A0BB, // $A0BB + #$A0BC, // $A0BC + #$A0BD, // $A0BD + #$A0BE, // $A0BE + #$A0BF, // $A0BF + #$A0C0, // $A0C0 + #$A0C1, // $A0C1 + #$A0C2, // $A0C2 + #$A0C3, // $A0C3 + #$A0C4, // $A0C4 + #$A0C5, // $A0C5 + #$A0C6, // $A0C6 + #$A0C7, // $A0C7 + #$A0C8, // $A0C8 + #$A0C9, // $A0C9 + #$A0CA, // $A0CA + #$A0CB, // $A0CB + #$A0CC, // $A0CC + #$A0CD, // $A0CD + #$A0CE, // $A0CE + #$A0CF, // $A0CF + #$A0D0, // $A0D0 + #$A0D1, // $A0D1 + #$A0D2, // $A0D2 + #$A0D3, // $A0D3 + #$A0D4, // $A0D4 + #$A0D5, // $A0D5 + #$A0D6, // $A0D6 + #$A0D7, // $A0D7 + #$A0D8, // $A0D8 + #$A0D9, // $A0D9 + #$A0DA, // $A0DA + #$A0DB, // $A0DB + #$A0DC, // $A0DC + #$A0DD, // $A0DD + #$A0DE, // $A0DE + #$A0DF, // $A0DF + #$A0E0, // $A0E0 + #$A0E1, // $A0E1 + #$A0E2, // $A0E2 + #$A0E3, // $A0E3 + #$A0E4, // $A0E4 + #$A0E5, // $A0E5 + #$A0E6, // $A0E6 + #$A0E7, // $A0E7 + #$A0E8, // $A0E8 + #$A0E9, // $A0E9 + #$A0EA, // $A0EA + #$A0EB, // $A0EB + #$A0EC, // $A0EC + #$A0ED, // $A0ED + #$A0EE, // $A0EE + #$A0EF, // $A0EF + #$A0F0, // $A0F0 + #$A0F1, // $A0F1 + #$A0F2, // $A0F2 + #$A0F3, // $A0F3 + #$A0F4, // $A0F4 + #$A0F5, // $A0F5 + #$A0F6, // $A0F6 + #$A0F7, // $A0F7 + #$A0F8, // $A0F8 + #$A0F9, // $A0F9 + #$A0FA, // $A0FA + #$A0FB, // $A0FB + #$A0FC, // $A0FC + #$A0FD, // $A0FD + #$A0FE, // $A0FE + #$A0FF, // $A0FF + #$A100, // $A100 + #$A101, // $A101 + #$A102, // $A102 + #$A103, // $A103 + #$A104, // $A104 + #$A105, // $A105 + #$A106, // $A106 + #$A107, // $A107 + #$A108, // $A108 + #$A109, // $A109 + #$A10A, // $A10A + #$A10B, // $A10B + #$A10C, // $A10C + #$A10D, // $A10D + #$A10E, // $A10E + #$A10F, // $A10F + #$A110, // $A110 + #$A111, // $A111 + #$A112, // $A112 + #$A113, // $A113 + #$A114, // $A114 + #$A115, // $A115 + #$A116, // $A116 + #$A117, // $A117 + #$A118, // $A118 + #$A119, // $A119 + #$A11A, // $A11A + #$A11B, // $A11B + #$A11C, // $A11C + #$A11D, // $A11D + #$A11E, // $A11E + #$A11F, // $A11F + #$A120, // $A120 + #$A121, // $A121 + #$A122, // $A122 + #$A123, // $A123 + #$A124, // $A124 + #$A125, // $A125 + #$A126, // $A126 + #$A127, // $A127 + #$A128, // $A128 + #$A129, // $A129 + #$A12A, // $A12A + #$A12B, // $A12B + #$A12C, // $A12C + #$A12D, // $A12D + #$A12E, // $A12E + #$A12F, // $A12F + #$A130, // $A130 + #$A131, // $A131 + #$A132, // $A132 + #$A133, // $A133 + #$A134, // $A134 + #$A135, // $A135 + #$A136, // $A136 + #$A137, // $A137 + #$A138, // $A138 + #$A139, // $A139 + #$A13A, // $A13A + #$A13B, // $A13B + #$A13C, // $A13C + #$A13D, // $A13D + #$A13E, // $A13E + #$A13F, // $A13F + #$A140, // $A140 + #$A141, // $A141 + #$A142, // $A142 + #$A143, // $A143 + #$A144, // $A144 + #$A145, // $A145 + #$A146, // $A146 + #$A147, // $A147 + #$A148, // $A148 + #$A149, // $A149 + #$A14A, // $A14A + #$A14B, // $A14B + #$A14C, // $A14C + #$A14D, // $A14D + #$A14E, // $A14E + #$A14F, // $A14F + #$A150, // $A150 + #$A151, // $A151 + #$A152, // $A152 + #$A153, // $A153 + #$A154, // $A154 + #$A155, // $A155 + #$A156, // $A156 + #$A157, // $A157 + #$A158, // $A158 + #$A159, // $A159 + #$A15A, // $A15A + #$A15B, // $A15B + #$A15C, // $A15C + #$A15D, // $A15D + #$A15E, // $A15E + #$A15F, // $A15F + #$A160, // $A160 + #$A161, // $A161 + #$A162, // $A162 + #$A163, // $A163 + #$A164, // $A164 + #$A165, // $A165 + #$A166, // $A166 + #$A167, // $A167 + #$A168, // $A168 + #$A169, // $A169 + #$A16A, // $A16A + #$A16B, // $A16B + #$A16C, // $A16C + #$A16D, // $A16D + #$A16E, // $A16E + #$A16F, // $A16F + #$A170, // $A170 + #$A171, // $A171 + #$A172, // $A172 + #$A173, // $A173 + #$A174, // $A174 + #$A175, // $A175 + #$A176, // $A176 + #$A177, // $A177 + #$A178, // $A178 + #$A179, // $A179 + #$A17A, // $A17A + #$A17B, // $A17B + #$A17C, // $A17C + #$A17D, // $A17D + #$A17E, // $A17E + #$A17F, // $A17F + #$A180, // $A180 + #$A181, // $A181 + #$A182, // $A182 + #$A183, // $A183 + #$A184, // $A184 + #$A185, // $A185 + #$A186, // $A186 + #$A187, // $A187 + #$A188, // $A188 + #$A189, // $A189 + #$A18A, // $A18A + #$A18B, // $A18B + #$A18C, // $A18C + #$A18D, // $A18D + #$A18E, // $A18E + #$A18F, // $A18F + #$A190, // $A190 + #$A191, // $A191 + #$A192, // $A192 + #$A193, // $A193 + #$A194, // $A194 + #$A195, // $A195 + #$A196, // $A196 + #$A197, // $A197 + #$A198, // $A198 + #$A199, // $A199 + #$A19A, // $A19A + #$A19B, // $A19B + #$A19C, // $A19C + #$A19D, // $A19D + #$A19E, // $A19E + #$A19F, // $A19F + #$A1A0, // $A1A0 + #$A1A1, // $A1A1 + #$A1A2, // $A1A2 + #$A1A3, // $A1A3 + #$A1A4, // $A1A4 + #$A1A5, // $A1A5 + #$A1A6, // $A1A6 + #$A1A7, // $A1A7 + #$A1A8, // $A1A8 + #$A1A9, // $A1A9 + #$A1AA, // $A1AA + #$A1AB, // $A1AB + #$A1AC, // $A1AC + #$A1AD, // $A1AD + #$A1AE, // $A1AE + #$A1AF, // $A1AF + #$A1B0, // $A1B0 + #$A1B1, // $A1B1 + #$A1B2, // $A1B2 + #$A1B3, // $A1B3 + #$A1B4, // $A1B4 + #$A1B5, // $A1B5 + #$A1B6, // $A1B6 + #$A1B7, // $A1B7 + #$A1B8, // $A1B8 + #$A1B9, // $A1B9 + #$A1BA, // $A1BA + #$A1BB, // $A1BB + #$A1BC, // $A1BC + #$A1BD, // $A1BD + #$A1BE, // $A1BE + #$A1BF, // $A1BF + #$A1C0, // $A1C0 + #$A1C1, // $A1C1 + #$A1C2, // $A1C2 + #$A1C3, // $A1C3 + #$A1C4, // $A1C4 + #$A1C5, // $A1C5 + #$A1C6, // $A1C6 + #$A1C7, // $A1C7 + #$A1C8, // $A1C8 + #$A1C9, // $A1C9 + #$A1CA, // $A1CA + #$A1CB, // $A1CB + #$A1CC, // $A1CC + #$A1CD, // $A1CD + #$A1CE, // $A1CE + #$A1CF, // $A1CF + #$A1D0, // $A1D0 + #$A1D1, // $A1D1 + #$A1D2, // $A1D2 + #$A1D3, // $A1D3 + #$A1D4, // $A1D4 + #$A1D5, // $A1D5 + #$A1D6, // $A1D6 + #$A1D7, // $A1D7 + #$A1D8, // $A1D8 + #$A1D9, // $A1D9 + #$A1DA, // $A1DA + #$A1DB, // $A1DB + #$A1DC, // $A1DC + #$A1DD, // $A1DD + #$A1DE, // $A1DE + #$A1DF, // $A1DF + #$A1E0, // $A1E0 + #$A1E1, // $A1E1 + #$A1E2, // $A1E2 + #$A1E3, // $A1E3 + #$A1E4, // $A1E4 + #$A1E5, // $A1E5 + #$A1E6, // $A1E6 + #$A1E7, // $A1E7 + #$A1E8, // $A1E8 + #$A1E9, // $A1E9 + #$A1EA, // $A1EA + #$A1EB, // $A1EB + #$A1EC, // $A1EC + #$A1ED, // $A1ED + #$A1EE, // $A1EE + #$A1EF, // $A1EF + #$A1F0, // $A1F0 + #$A1F1, // $A1F1 + #$A1F2, // $A1F2 + #$A1F3, // $A1F3 + #$A1F4, // $A1F4 + #$A1F5, // $A1F5 + #$A1F6, // $A1F6 + #$A1F7, // $A1F7 + #$A1F8, // $A1F8 + #$A1F9, // $A1F9 + #$A1FA, // $A1FA + #$A1FB, // $A1FB + #$A1FC, // $A1FC + #$A1FD, // $A1FD + #$A1FE, // $A1FE + #$A1FF, // $A1FF + #$A200, // $A200 + #$A201, // $A201 + #$A202, // $A202 + #$A203, // $A203 + #$A204, // $A204 + #$A205, // $A205 + #$A206, // $A206 + #$A207, // $A207 + #$A208, // $A208 + #$A209, // $A209 + #$A20A, // $A20A + #$A20B, // $A20B + #$A20C, // $A20C + #$A20D, // $A20D + #$A20E, // $A20E + #$A20F, // $A20F + #$A210, // $A210 + #$A211, // $A211 + #$A212, // $A212 + #$A213, // $A213 + #$A214, // $A214 + #$A215, // $A215 + #$A216, // $A216 + #$A217, // $A217 + #$A218, // $A218 + #$A219, // $A219 + #$A21A, // $A21A + #$A21B, // $A21B + #$A21C, // $A21C + #$A21D, // $A21D + #$A21E, // $A21E + #$A21F, // $A21F + #$A220, // $A220 + #$A221, // $A221 + #$A222, // $A222 + #$A223, // $A223 + #$A224, // $A224 + #$A225, // $A225 + #$A226, // $A226 + #$A227, // $A227 + #$A228, // $A228 + #$A229, // $A229 + #$A22A, // $A22A + #$A22B, // $A22B + #$A22C, // $A22C + #$A22D, // $A22D + #$A22E, // $A22E + #$A22F, // $A22F + #$A230, // $A230 + #$A231, // $A231 + #$A232, // $A232 + #$A233, // $A233 + #$A234, // $A234 + #$A235, // $A235 + #$A236, // $A236 + #$A237, // $A237 + #$A238, // $A238 + #$A239, // $A239 + #$A23A, // $A23A + #$A23B, // $A23B + #$A23C, // $A23C + #$A23D, // $A23D + #$A23E, // $A23E + #$A23F, // $A23F + #$A240, // $A240 + #$A241, // $A241 + #$A242, // $A242 + #$A243, // $A243 + #$A244, // $A244 + #$A245, // $A245 + #$A246, // $A246 + #$A247, // $A247 + #$A248, // $A248 + #$A249, // $A249 + #$A24A, // $A24A + #$A24B, // $A24B + #$A24C, // $A24C + #$A24D, // $A24D + #$A24E, // $A24E + #$A24F, // $A24F + #$A250, // $A250 + #$A251, // $A251 + #$A252, // $A252 + #$A253, // $A253 + #$A254, // $A254 + #$A255, // $A255 + #$A256, // $A256 + #$A257, // $A257 + #$A258, // $A258 + #$A259, // $A259 + #$A25A, // $A25A + #$A25B, // $A25B + #$A25C, // $A25C + #$A25D, // $A25D + #$A25E, // $A25E + #$A25F, // $A25F + #$A260, // $A260 + #$A261, // $A261 + #$A262, // $A262 + #$A263, // $A263 + #$A264, // $A264 + #$A265, // $A265 + #$A266, // $A266 + #$A267, // $A267 + #$A268, // $A268 + #$A269, // $A269 + #$A26A, // $A26A + #$A26B, // $A26B + #$A26C, // $A26C + #$A26D, // $A26D + #$A26E, // $A26E + #$A26F, // $A26F + #$A270, // $A270 + #$A271, // $A271 + #$A272, // $A272 + #$A273, // $A273 + #$A274, // $A274 + #$A275, // $A275 + #$A276, // $A276 + #$A277, // $A277 + #$A278, // $A278 + #$A279, // $A279 + #$A27A, // $A27A + #$A27B, // $A27B + #$A27C, // $A27C + #$A27D, // $A27D + #$A27E, // $A27E + #$A27F, // $A27F + #$A280, // $A280 + #$A281, // $A281 + #$A282, // $A282 + #$A283, // $A283 + #$A284, // $A284 + #$A285, // $A285 + #$A286, // $A286 + #$A287, // $A287 + #$A288, // $A288 + #$A289, // $A289 + #$A28A, // $A28A + #$A28B, // $A28B + #$A28C, // $A28C + #$A28D, // $A28D + #$A28E, // $A28E + #$A28F, // $A28F + #$A290, // $A290 + #$A291, // $A291 + #$A292, // $A292 + #$A293, // $A293 + #$A294, // $A294 + #$A295, // $A295 + #$A296, // $A296 + #$A297, // $A297 + #$A298, // $A298 + #$A299, // $A299 + #$A29A, // $A29A + #$A29B, // $A29B + #$A29C, // $A29C + #$A29D, // $A29D + #$A29E, // $A29E + #$A29F, // $A29F + #$A2A0, // $A2A0 + #$A2A1, // $A2A1 + #$A2A2, // $A2A2 + #$A2A3, // $A2A3 + #$A2A4, // $A2A4 + #$A2A5, // $A2A5 + #$A2A6, // $A2A6 + #$A2A7, // $A2A7 + #$A2A8, // $A2A8 + #$A2A9, // $A2A9 + #$A2AA, // $A2AA + #$A2AB, // $A2AB + #$A2AC, // $A2AC + #$A2AD, // $A2AD + #$A2AE, // $A2AE + #$A2AF, // $A2AF + #$A2B0, // $A2B0 + #$A2B1, // $A2B1 + #$A2B2, // $A2B2 + #$A2B3, // $A2B3 + #$A2B4, // $A2B4 + #$A2B5, // $A2B5 + #$A2B6, // $A2B6 + #$A2B7, // $A2B7 + #$A2B8, // $A2B8 + #$A2B9, // $A2B9 + #$A2BA, // $A2BA + #$A2BB, // $A2BB + #$A2BC, // $A2BC + #$A2BD, // $A2BD + #$A2BE, // $A2BE + #$A2BF, // $A2BF + #$A2C0, // $A2C0 + #$A2C1, // $A2C1 + #$A2C2, // $A2C2 + #$A2C3, // $A2C3 + #$A2C4, // $A2C4 + #$A2C5, // $A2C5 + #$A2C6, // $A2C6 + #$A2C7, // $A2C7 + #$A2C8, // $A2C8 + #$A2C9, // $A2C9 + #$A2CA, // $A2CA + #$A2CB, // $A2CB + #$A2CC, // $A2CC + #$A2CD, // $A2CD + #$A2CE, // $A2CE + #$A2CF, // $A2CF + #$A2D0, // $A2D0 + #$A2D1, // $A2D1 + #$A2D2, // $A2D2 + #$A2D3, // $A2D3 + #$A2D4, // $A2D4 + #$A2D5, // $A2D5 + #$A2D6, // $A2D6 + #$A2D7, // $A2D7 + #$A2D8, // $A2D8 + #$A2D9, // $A2D9 + #$A2DA, // $A2DA + #$A2DB, // $A2DB + #$A2DC, // $A2DC + #$A2DD, // $A2DD + #$A2DE, // $A2DE + #$A2DF, // $A2DF + #$A2E0, // $A2E0 + #$A2E1, // $A2E1 + #$A2E2, // $A2E2 + #$A2E3, // $A2E3 + #$A2E4, // $A2E4 + #$A2E5, // $A2E5 + #$A2E6, // $A2E6 + #$A2E7, // $A2E7 + #$A2E8, // $A2E8 + #$A2E9, // $A2E9 + #$A2EA, // $A2EA + #$A2EB, // $A2EB + #$A2EC, // $A2EC + #$A2ED, // $A2ED + #$A2EE, // $A2EE + #$A2EF, // $A2EF + #$A2F0, // $A2F0 + #$A2F1, // $A2F1 + #$A2F2, // $A2F2 + #$A2F3, // $A2F3 + #$A2F4, // $A2F4 + #$A2F5, // $A2F5 + #$A2F6, // $A2F6 + #$A2F7, // $A2F7 + #$A2F8, // $A2F8 + #$A2F9, // $A2F9 + #$A2FA, // $A2FA + #$A2FB, // $A2FB + #$A2FC, // $A2FC + #$A2FD, // $A2FD + #$A2FE, // $A2FE + #$A2FF, // $A2FF + #$A300, // $A300 + #$A301, // $A301 + #$A302, // $A302 + #$A303, // $A303 + #$A304, // $A304 + #$A305, // $A305 + #$A306, // $A306 + #$A307, // $A307 + #$A308, // $A308 + #$A309, // $A309 + #$A30A, // $A30A + #$A30B, // $A30B + #$A30C, // $A30C + #$A30D, // $A30D + #$A30E, // $A30E + #$A30F, // $A30F + #$A310, // $A310 + #$A311, // $A311 + #$A312, // $A312 + #$A313, // $A313 + #$A314, // $A314 + #$A315, // $A315 + #$A316, // $A316 + #$A317, // $A317 + #$A318, // $A318 + #$A319, // $A319 + #$A31A, // $A31A + #$A31B, // $A31B + #$A31C, // $A31C + #$A31D, // $A31D + #$A31E, // $A31E + #$A31F, // $A31F + #$A320, // $A320 + #$A321, // $A321 + #$A322, // $A322 + #$A323, // $A323 + #$A324, // $A324 + #$A325, // $A325 + #$A326, // $A326 + #$A327, // $A327 + #$A328, // $A328 + #$A329, // $A329 + #$A32A, // $A32A + #$A32B, // $A32B + #$A32C, // $A32C + #$A32D, // $A32D + #$A32E, // $A32E + #$A32F, // $A32F + #$A330, // $A330 + #$A331, // $A331 + #$A332, // $A332 + #$A333, // $A333 + #$A334, // $A334 + #$A335, // $A335 + #$A336, // $A336 + #$A337, // $A337 + #$A338, // $A338 + #$A339, // $A339 + #$A33A, // $A33A + #$A33B, // $A33B + #$A33C, // $A33C + #$A33D, // $A33D + #$A33E, // $A33E + #$A33F, // $A33F + #$A340, // $A340 + #$A341, // $A341 + #$A342, // $A342 + #$A343, // $A343 + #$A344, // $A344 + #$A345, // $A345 + #$A346, // $A346 + #$A347, // $A347 + #$A348, // $A348 + #$A349, // $A349 + #$A34A, // $A34A + #$A34B, // $A34B + #$A34C, // $A34C + #$A34D, // $A34D + #$A34E, // $A34E + #$A34F, // $A34F + #$A350, // $A350 + #$A351, // $A351 + #$A352, // $A352 + #$A353, // $A353 + #$A354, // $A354 + #$A355, // $A355 + #$A356, // $A356 + #$A357, // $A357 + #$A358, // $A358 + #$A359, // $A359 + #$A35A, // $A35A + #$A35B, // $A35B + #$A35C, // $A35C + #$A35D, // $A35D + #$A35E, // $A35E + #$A35F, // $A35F + #$A360, // $A360 + #$A361, // $A361 + #$A362, // $A362 + #$A363, // $A363 + #$A364, // $A364 + #$A365, // $A365 + #$A366, // $A366 + #$A367, // $A367 + #$A368, // $A368 + #$A369, // $A369 + #$A36A, // $A36A + #$A36B, // $A36B + #$A36C, // $A36C + #$A36D, // $A36D + #$A36E, // $A36E + #$A36F, // $A36F + #$A370, // $A370 + #$A371, // $A371 + #$A372, // $A372 + #$A373, // $A373 + #$A374, // $A374 + #$A375, // $A375 + #$A376, // $A376 + #$A377, // $A377 + #$A378, // $A378 + #$A379, // $A379 + #$A37A, // $A37A + #$A37B, // $A37B + #$A37C, // $A37C + #$A37D, // $A37D + #$A37E, // $A37E + #$A37F, // $A37F + #$A380, // $A380 + #$A381, // $A381 + #$A382, // $A382 + #$A383, // $A383 + #$A384, // $A384 + #$A385, // $A385 + #$A386, // $A386 + #$A387, // $A387 + #$A388, // $A388 + #$A389, // $A389 + #$A38A, // $A38A + #$A38B, // $A38B + #$A38C, // $A38C + #$A38D, // $A38D + #$A38E, // $A38E + #$A38F, // $A38F + #$A390, // $A390 + #$A391, // $A391 + #$A392, // $A392 + #$A393, // $A393 + #$A394, // $A394 + #$A395, // $A395 + #$A396, // $A396 + #$A397, // $A397 + #$A398, // $A398 + #$A399, // $A399 + #$A39A, // $A39A + #$A39B, // $A39B + #$A39C, // $A39C + #$A39D, // $A39D + #$A39E, // $A39E + #$A39F, // $A39F + #$A3A0, // $A3A0 + #$A3A1, // $A3A1 + #$A3A2, // $A3A2 + #$A3A3, // $A3A3 + #$A3A4, // $A3A4 + #$A3A5, // $A3A5 + #$A3A6, // $A3A6 + #$A3A7, // $A3A7 + #$A3A8, // $A3A8 + #$A3A9, // $A3A9 + #$A3AA, // $A3AA + #$A3AB, // $A3AB + #$A3AC, // $A3AC + #$A3AD, // $A3AD + #$A3AE, // $A3AE + #$A3AF, // $A3AF + #$A3B0, // $A3B0 + #$A3B1, // $A3B1 + #$A3B2, // $A3B2 + #$A3B3, // $A3B3 + #$A3B4, // $A3B4 + #$A3B5, // $A3B5 + #$A3B6, // $A3B6 + #$A3B7, // $A3B7 + #$A3B8, // $A3B8 + #$A3B9, // $A3B9 + #$A3BA, // $A3BA + #$A3BB, // $A3BB + #$A3BC, // $A3BC + #$A3BD, // $A3BD + #$A3BE, // $A3BE + #$A3BF, // $A3BF + #$A3C0, // $A3C0 + #$A3C1, // $A3C1 + #$A3C2, // $A3C2 + #$A3C3, // $A3C3 + #$A3C4, // $A3C4 + #$A3C5, // $A3C5 + #$A3C6, // $A3C6 + #$A3C7, // $A3C7 + #$A3C8, // $A3C8 + #$A3C9, // $A3C9 + #$A3CA, // $A3CA + #$A3CB, // $A3CB + #$A3CC, // $A3CC + #$A3CD, // $A3CD + #$A3CE, // $A3CE + #$A3CF, // $A3CF + #$A3D0, // $A3D0 + #$A3D1, // $A3D1 + #$A3D2, // $A3D2 + #$A3D3, // $A3D3 + #$A3D4, // $A3D4 + #$A3D5, // $A3D5 + #$A3D6, // $A3D6 + #$A3D7, // $A3D7 + #$A3D8, // $A3D8 + #$A3D9, // $A3D9 + #$A3DA, // $A3DA + #$A3DB, // $A3DB + #$A3DC, // $A3DC + #$A3DD, // $A3DD + #$A3DE, // $A3DE + #$A3DF, // $A3DF + #$A3E0, // $A3E0 + #$A3E1, // $A3E1 + #$A3E2, // $A3E2 + #$A3E3, // $A3E3 + #$A3E4, // $A3E4 + #$A3E5, // $A3E5 + #$A3E6, // $A3E6 + #$A3E7, // $A3E7 + #$A3E8, // $A3E8 + #$A3E9, // $A3E9 + #$A3EA, // $A3EA + #$A3EB, // $A3EB + #$A3EC, // $A3EC + #$A3ED, // $A3ED + #$A3EE, // $A3EE + #$A3EF, // $A3EF + #$A3F0, // $A3F0 + #$A3F1, // $A3F1 + #$A3F2, // $A3F2 + #$A3F3, // $A3F3 + #$A3F4, // $A3F4 + #$A3F5, // $A3F5 + #$A3F6, // $A3F6 + #$A3F7, // $A3F7 + #$A3F8, // $A3F8 + #$A3F9, // $A3F9 + #$A3FA, // $A3FA + #$A3FB, // $A3FB + #$A3FC, // $A3FC + #$A3FD, // $A3FD + #$A3FE, // $A3FE + #$A3FF, // $A3FF + #$A400, // $A400 + #$A401, // $A401 + #$A402, // $A402 + #$A403, // $A403 + #$A404, // $A404 + #$A405, // $A405 + #$A406, // $A406 + #$A407, // $A407 + #$A408, // $A408 + #$A409, // $A409 + #$A40A, // $A40A + #$A40B, // $A40B + #$A40C, // $A40C + #$A40D, // $A40D + #$A40E, // $A40E + #$A40F, // $A40F + #$A410, // $A410 + #$A411, // $A411 + #$A412, // $A412 + #$A413, // $A413 + #$A414, // $A414 + #$A415, // $A415 + #$A416, // $A416 + #$A417, // $A417 + #$A418, // $A418 + #$A419, // $A419 + #$A41A, // $A41A + #$A41B, // $A41B + #$A41C, // $A41C + #$A41D, // $A41D + #$A41E, // $A41E + #$A41F, // $A41F + #$A420, // $A420 + #$A421, // $A421 + #$A422, // $A422 + #$A423, // $A423 + #$A424, // $A424 + #$A425, // $A425 + #$A426, // $A426 + #$A427, // $A427 + #$A428, // $A428 + #$A429, // $A429 + #$A42A, // $A42A + #$A42B, // $A42B + #$A42C, // $A42C + #$A42D, // $A42D + #$A42E, // $A42E + #$A42F, // $A42F + #$A430, // $A430 + #$A431, // $A431 + #$A432, // $A432 + #$A433, // $A433 + #$A434, // $A434 + #$A435, // $A435 + #$A436, // $A436 + #$A437, // $A437 + #$A438, // $A438 + #$A439, // $A439 + #$A43A, // $A43A + #$A43B, // $A43B + #$A43C, // $A43C + #$A43D, // $A43D + #$A43E, // $A43E + #$A43F, // $A43F + #$A440, // $A440 + #$A441, // $A441 + #$A442, // $A442 + #$A443, // $A443 + #$A444, // $A444 + #$A445, // $A445 + #$A446, // $A446 + #$A447, // $A447 + #$A448, // $A448 + #$A449, // $A449 + #$A44A, // $A44A + #$A44B, // $A44B + #$A44C, // $A44C + #$A44D, // $A44D + #$A44E, // $A44E + #$A44F, // $A44F + #$A450, // $A450 + #$A451, // $A451 + #$A452, // $A452 + #$A453, // $A453 + #$A454, // $A454 + #$A455, // $A455 + #$A456, // $A456 + #$A457, // $A457 + #$A458, // $A458 + #$A459, // $A459 + #$A45A, // $A45A + #$A45B, // $A45B + #$A45C, // $A45C + #$A45D, // $A45D + #$A45E, // $A45E + #$A45F, // $A45F + #$A460, // $A460 + #$A461, // $A461 + #$A462, // $A462 + #$A463, // $A463 + #$A464, // $A464 + #$A465, // $A465 + #$A466, // $A466 + #$A467, // $A467 + #$A468, // $A468 + #$A469, // $A469 + #$A46A, // $A46A + #$A46B, // $A46B + #$A46C, // $A46C + #$A46D, // $A46D + #$A46E, // $A46E + #$A46F, // $A46F + #$A470, // $A470 + #$A471, // $A471 + #$A472, // $A472 + #$A473, // $A473 + #$A474, // $A474 + #$A475, // $A475 + #$A476, // $A476 + #$A477, // $A477 + #$A478, // $A478 + #$A479, // $A479 + #$A47A, // $A47A + #$A47B, // $A47B + #$A47C, // $A47C + #$A47D, // $A47D + #$A47E, // $A47E + #$A47F, // $A47F + #$A480, // $A480 + #$A481, // $A481 + #$A482, // $A482 + #$A483, // $A483 + #$A484, // $A484 + #$A485, // $A485 + #$A486, // $A486 + #$A487, // $A487 + #$A488, // $A488 + #$A489, // $A489 + #$A48A, // $A48A + #$A48B, // $A48B + #$A48C, // $A48C + #$A48D, // $A48D + #$A48E, // $A48E + #$A48F, // $A48F + #$A490, // $A490 + #$A491, // $A491 + #$A492, // $A492 + #$A493, // $A493 + #$A494, // $A494 + #$A495, // $A495 + #$A496, // $A496 + #$A497, // $A497 + #$A498, // $A498 + #$A499, // $A499 + #$A49A, // $A49A + #$A49B, // $A49B + #$A49C, // $A49C + #$A49D, // $A49D + #$A49E, // $A49E + #$A49F, // $A49F + #$A4A0, // $A4A0 + #$A4A1, // $A4A1 + #$A4A2, // $A4A2 + #$A4A3, // $A4A3 + #$A4A4, // $A4A4 + #$A4A5, // $A4A5 + #$A4A6, // $A4A6 + #$A4A7, // $A4A7 + #$A4A8, // $A4A8 + #$A4A9, // $A4A9 + #$A4AA, // $A4AA + #$A4AB, // $A4AB + #$A4AC, // $A4AC + #$A4AD, // $A4AD + #$A4AE, // $A4AE + #$A4AF, // $A4AF + #$A4B0, // $A4B0 + #$A4B1, // $A4B1 + #$A4B2, // $A4B2 + #$A4B3, // $A4B3 + #$A4B4, // $A4B4 + #$A4B5, // $A4B5 + #$A4B6, // $A4B6 + #$A4B7, // $A4B7 + #$A4B8, // $A4B8 + #$A4B9, // $A4B9 + #$A4BA, // $A4BA + #$A4BB, // $A4BB + #$A4BC, // $A4BC + #$A4BD, // $A4BD + #$A4BE, // $A4BE + #$A4BF, // $A4BF + #$A4C0, // $A4C0 + #$A4C1, // $A4C1 + #$A4C2, // $A4C2 + #$A4C3, // $A4C3 + #$A4C4, // $A4C4 + #$A4C5, // $A4C5 + #$A4C6, // $A4C6 + #$A4C7, // $A4C7 + #$A4C8, // $A4C8 + #$A4C9, // $A4C9 + #$A4CA, // $A4CA + #$A4CB, // $A4CB + #$A4CC, // $A4CC + #$A4CD, // $A4CD + #$A4CE, // $A4CE + #$A4CF, // $A4CF + #$A4D0, // $A4D0 + #$A4D1, // $A4D1 + #$A4D2, // $A4D2 + #$A4D3, // $A4D3 + #$A4D4, // $A4D4 + #$A4D5, // $A4D5 + #$A4D6, // $A4D6 + #$A4D7, // $A4D7 + #$A4D8, // $A4D8 + #$A4D9, // $A4D9 + #$A4DA, // $A4DA + #$A4DB, // $A4DB + #$A4DC, // $A4DC + #$A4DD, // $A4DD + #$A4DE, // $A4DE + #$A4DF, // $A4DF + #$A4E0, // $A4E0 + #$A4E1, // $A4E1 + #$A4E2, // $A4E2 + #$A4E3, // $A4E3 + #$A4E4, // $A4E4 + #$A4E5, // $A4E5 + #$A4E6, // $A4E6 + #$A4E7, // $A4E7 + #$A4E8, // $A4E8 + #$A4E9, // $A4E9 + #$A4EA, // $A4EA + #$A4EB, // $A4EB + #$A4EC, // $A4EC + #$A4ED, // $A4ED + #$A4EE, // $A4EE + #$A4EF, // $A4EF + #$A4F0, // $A4F0 + #$A4F1, // $A4F1 + #$A4F2, // $A4F2 + #$A4F3, // $A4F3 + #$A4F4, // $A4F4 + #$A4F5, // $A4F5 + #$A4F6, // $A4F6 + #$A4F7, // $A4F7 + #$A4F8, // $A4F8 + #$A4F9, // $A4F9 + #$A4FA, // $A4FA + #$A4FB, // $A4FB + #$A4FC, // $A4FC + #$A4FD, // $A4FD + #$A4FE, // $A4FE + #$A4FF, // $A4FF + #$A500, // $A500 + #$A501, // $A501 + #$A502, // $A502 + #$A503, // $A503 + #$A504, // $A504 + #$A505, // $A505 + #$A506, // $A506 + #$A507, // $A507 + #$A508, // $A508 + #$A509, // $A509 + #$A50A, // $A50A + #$A50B, // $A50B + #$A50C, // $A50C + #$A50D, // $A50D + #$A50E, // $A50E + #$A50F, // $A50F + #$A510, // $A510 + #$A511, // $A511 + #$A512, // $A512 + #$A513, // $A513 + #$A514, // $A514 + #$A515, // $A515 + #$A516, // $A516 + #$A517, // $A517 + #$A518, // $A518 + #$A519, // $A519 + #$A51A, // $A51A + #$A51B, // $A51B + #$A51C, // $A51C + #$A51D, // $A51D + #$A51E, // $A51E + #$A51F, // $A51F + #$A520, // $A520 + #$A521, // $A521 + #$A522, // $A522 + #$A523, // $A523 + #$A524, // $A524 + #$A525, // $A525 + #$A526, // $A526 + #$A527, // $A527 + #$A528, // $A528 + #$A529, // $A529 + #$A52A, // $A52A + #$A52B, // $A52B + #$A52C, // $A52C + #$A52D, // $A52D + #$A52E, // $A52E + #$A52F, // $A52F + #$A530, // $A530 + #$A531, // $A531 + #$A532, // $A532 + #$A533, // $A533 + #$A534, // $A534 + #$A535, // $A535 + #$A536, // $A536 + #$A537, // $A537 + #$A538, // $A538 + #$A539, // $A539 + #$A53A, // $A53A + #$A53B, // $A53B + #$A53C, // $A53C + #$A53D, // $A53D + #$A53E, // $A53E + #$A53F, // $A53F + #$A540, // $A540 + #$A541, // $A541 + #$A542, // $A542 + #$A543, // $A543 + #$A544, // $A544 + #$A545, // $A545 + #$A546, // $A546 + #$A547, // $A547 + #$A548, // $A548 + #$A549, // $A549 + #$A54A, // $A54A + #$A54B, // $A54B + #$A54C, // $A54C + #$A54D, // $A54D + #$A54E, // $A54E + #$A54F, // $A54F + #$A550, // $A550 + #$A551, // $A551 + #$A552, // $A552 + #$A553, // $A553 + #$A554, // $A554 + #$A555, // $A555 + #$A556, // $A556 + #$A557, // $A557 + #$A558, // $A558 + #$A559, // $A559 + #$A55A, // $A55A + #$A55B, // $A55B + #$A55C, // $A55C + #$A55D, // $A55D + #$A55E, // $A55E + #$A55F, // $A55F + #$A560, // $A560 + #$A561, // $A561 + #$A562, // $A562 + #$A563, // $A563 + #$A564, // $A564 + #$A565, // $A565 + #$A566, // $A566 + #$A567, // $A567 + #$A568, // $A568 + #$A569, // $A569 + #$A56A, // $A56A + #$A56B, // $A56B + #$A56C, // $A56C + #$A56D, // $A56D + #$A56E, // $A56E + #$A56F, // $A56F + #$A570, // $A570 + #$A571, // $A571 + #$A572, // $A572 + #$A573, // $A573 + #$A574, // $A574 + #$A575, // $A575 + #$A576, // $A576 + #$A577, // $A577 + #$A578, // $A578 + #$A579, // $A579 + #$A57A, // $A57A + #$A57B, // $A57B + #$A57C, // $A57C + #$A57D, // $A57D + #$A57E, // $A57E + #$A57F, // $A57F + #$A580, // $A580 + #$A581, // $A581 + #$A582, // $A582 + #$A583, // $A583 + #$A584, // $A584 + #$A585, // $A585 + #$A586, // $A586 + #$A587, // $A587 + #$A588, // $A588 + #$A589, // $A589 + #$A58A, // $A58A + #$A58B, // $A58B + #$A58C, // $A58C + #$A58D, // $A58D + #$A58E, // $A58E + #$A58F, // $A58F + #$A590, // $A590 + #$A591, // $A591 + #$A592, // $A592 + #$A593, // $A593 + #$A594, // $A594 + #$A595, // $A595 + #$A596, // $A596 + #$A597, // $A597 + #$A598, // $A598 + #$A599, // $A599 + #$A59A, // $A59A + #$A59B, // $A59B + #$A59C, // $A59C + #$A59D, // $A59D + #$A59E, // $A59E + #$A59F, // $A59F + #$A5A0, // $A5A0 + #$A5A1, // $A5A1 + #$A5A2, // $A5A2 + #$A5A3, // $A5A3 + #$A5A4, // $A5A4 + #$A5A5, // $A5A5 + #$A5A6, // $A5A6 + #$A5A7, // $A5A7 + #$A5A8, // $A5A8 + #$A5A9, // $A5A9 + #$A5AA, // $A5AA + #$A5AB, // $A5AB + #$A5AC, // $A5AC + #$A5AD, // $A5AD + #$A5AE, // $A5AE + #$A5AF, // $A5AF + #$A5B0, // $A5B0 + #$A5B1, // $A5B1 + #$A5B2, // $A5B2 + #$A5B3, // $A5B3 + #$A5B4, // $A5B4 + #$A5B5, // $A5B5 + #$A5B6, // $A5B6 + #$A5B7, // $A5B7 + #$A5B8, // $A5B8 + #$A5B9, // $A5B9 + #$A5BA, // $A5BA + #$A5BB, // $A5BB + #$A5BC, // $A5BC + #$A5BD, // $A5BD + #$A5BE, // $A5BE + #$A5BF, // $A5BF + #$A5C0, // $A5C0 + #$A5C1, // $A5C1 + #$A5C2, // $A5C2 + #$A5C3, // $A5C3 + #$A5C4, // $A5C4 + #$A5C5, // $A5C5 + #$A5C6, // $A5C6 + #$A5C7, // $A5C7 + #$A5C8, // $A5C8 + #$A5C9, // $A5C9 + #$A5CA, // $A5CA + #$A5CB, // $A5CB + #$A5CC, // $A5CC + #$A5CD, // $A5CD + #$A5CE, // $A5CE + #$A5CF, // $A5CF + #$A5D0, // $A5D0 + #$A5D1, // $A5D1 + #$A5D2, // $A5D2 + #$A5D3, // $A5D3 + #$A5D4, // $A5D4 + #$A5D5, // $A5D5 + #$A5D6, // $A5D6 + #$A5D7, // $A5D7 + #$A5D8, // $A5D8 + #$A5D9, // $A5D9 + #$A5DA, // $A5DA + #$A5DB, // $A5DB + #$A5DC, // $A5DC + #$A5DD, // $A5DD + #$A5DE, // $A5DE + #$A5DF, // $A5DF + #$A5E0, // $A5E0 + #$A5E1, // $A5E1 + #$A5E2, // $A5E2 + #$A5E3, // $A5E3 + #$A5E4, // $A5E4 + #$A5E5, // $A5E5 + #$A5E6, // $A5E6 + #$A5E7, // $A5E7 + #$A5E8, // $A5E8 + #$A5E9, // $A5E9 + #$A5EA, // $A5EA + #$A5EB, // $A5EB + #$A5EC, // $A5EC + #$A5ED, // $A5ED + #$A5EE, // $A5EE + #$A5EF, // $A5EF + #$A5F0, // $A5F0 + #$A5F1, // $A5F1 + #$A5F2, // $A5F2 + #$A5F3, // $A5F3 + #$A5F4, // $A5F4 + #$A5F5, // $A5F5 + #$A5F6, // $A5F6 + #$A5F7, // $A5F7 + #$A5F8, // $A5F8 + #$A5F9, // $A5F9 + #$A5FA, // $A5FA + #$A5FB, // $A5FB + #$A5FC, // $A5FC + #$A5FD, // $A5FD + #$A5FE, // $A5FE + #$A5FF, // $A5FF + #$A600, // $A600 + #$A601, // $A601 + #$A602, // $A602 + #$A603, // $A603 + #$A604, // $A604 + #$A605, // $A605 + #$A606, // $A606 + #$A607, // $A607 + #$A608, // $A608 + #$A609, // $A609 + #$A60A, // $A60A + #$A60B, // $A60B + #$A60C, // $A60C + #$A60D, // $A60D + #$A60E, // $A60E + #$A60F, // $A60F + #$A610, // $A610 + #$A611, // $A611 + #$A612, // $A612 + #$A613, // $A613 + #$A614, // $A614 + #$A615, // $A615 + #$A616, // $A616 + #$A617, // $A617 + #$A618, // $A618 + #$A619, // $A619 + #$A61A, // $A61A + #$A61B, // $A61B + #$A61C, // $A61C + #$A61D, // $A61D + #$A61E, // $A61E + #$A61F, // $A61F + #$A620, // $A620 + #$A621, // $A621 + #$A622, // $A622 + #$A623, // $A623 + #$A624, // $A624 + #$A625, // $A625 + #$A626, // $A626 + #$A627, // $A627 + #$A628, // $A628 + #$A629, // $A629 + #$A62A, // $A62A + #$A62B, // $A62B + #$A62C, // $A62C + #$A62D, // $A62D + #$A62E, // $A62E + #$A62F, // $A62F + #$A630, // $A630 + #$A631, // $A631 + #$A632, // $A632 + #$A633, // $A633 + #$A634, // $A634 + #$A635, // $A635 + #$A636, // $A636 + #$A637, // $A637 + #$A638, // $A638 + #$A639, // $A639 + #$A63A, // $A63A + #$A63B, // $A63B + #$A63C, // $A63C + #$A63D, // $A63D + #$A63E, // $A63E + #$A63F, // $A63F + #$A641, // $A640 + #$A641, // $A641 + #$A643, // $A642 + #$A643, // $A643 + #$A645, // $A644 + #$A645, // $A645 + #$A647, // $A646 + #$A647, // $A647 + #$A649, // $A648 + #$A649, // $A649 + #$A64B, // $A64A + #$A64B, // $A64B + #$A64D, // $A64C + #$A64D, // $A64D + #$A64F, // $A64E + #$A64F, // $A64F + #$A651, // $A650 + #$A651, // $A651 + #$A653, // $A652 + #$A653, // $A653 + #$A655, // $A654 + #$A655, // $A655 + #$A657, // $A656 + #$A657, // $A657 + #$A659, // $A658 + #$A659, // $A659 + #$A65B, // $A65A + #$A65B, // $A65B + #$A65D, // $A65C + #$A65D, // $A65D + #$A65F, // $A65E + #$A65F, // $A65F + #$A661, // $A660 + #$A661, // $A661 + #$A663, // $A662 + #$A663, // $A663 + #$A665, // $A664 + #$A665, // $A665 + #$A667, // $A666 + #$A667, // $A667 + #$A669, // $A668 + #$A669, // $A669 + #$A66B, // $A66A + #$A66B, // $A66B + #$A66D, // $A66C + #$A66D, // $A66D + #$A66E, // $A66E + #$A66F, // $A66F + #$A670, // $A670 + #$A671, // $A671 + #$A672, // $A672 + #$A673, // $A673 + #$A674, // $A674 + #$A675, // $A675 + #$A676, // $A676 + #$A677, // $A677 + #$A678, // $A678 + #$A679, // $A679 + #$A67A, // $A67A + #$A67B, // $A67B + #$A67C, // $A67C + #$A67D, // $A67D + #$A67E, // $A67E + #$A67F, // $A67F + #$A681, // $A680 + #$A681, // $A681 + #$A683, // $A682 + #$A683, // $A683 + #$A685, // $A684 + #$A685, // $A685 + #$A687, // $A686 + #$A687, // $A687 + #$A689, // $A688 + #$A689, // $A689 + #$A68B, // $A68A + #$A68B, // $A68B + #$A68D, // $A68C + #$A68D, // $A68D + #$A68F, // $A68E + #$A68F, // $A68F + #$A691, // $A690 + #$A691, // $A691 + #$A693, // $A692 + #$A693, // $A693 + #$A695, // $A694 + #$A695, // $A695 + #$A697, // $A696 + #$A697, // $A697 + #$A699, // $A698 + #$A699, // $A699 + #$A69B, // $A69A + #$A69B, // $A69B + #$A69C, // $A69C + #$A69D, // $A69D + #$A69E, // $A69E + #$A69F, // $A69F + #$A6A0, // $A6A0 + #$A6A1, // $A6A1 + #$A6A2, // $A6A2 + #$A6A3, // $A6A3 + #$A6A4, // $A6A4 + #$A6A5, // $A6A5 + #$A6A6, // $A6A6 + #$A6A7, // $A6A7 + #$A6A8, // $A6A8 + #$A6A9, // $A6A9 + #$A6AA, // $A6AA + #$A6AB, // $A6AB + #$A6AC, // $A6AC + #$A6AD, // $A6AD + #$A6AE, // $A6AE + #$A6AF, // $A6AF + #$A6B0, // $A6B0 + #$A6B1, // $A6B1 + #$A6B2, // $A6B2 + #$A6B3, // $A6B3 + #$A6B4, // $A6B4 + #$A6B5, // $A6B5 + #$A6B6, // $A6B6 + #$A6B7, // $A6B7 + #$A6B8, // $A6B8 + #$A6B9, // $A6B9 + #$A6BA, // $A6BA + #$A6BB, // $A6BB + #$A6BC, // $A6BC + #$A6BD, // $A6BD + #$A6BE, // $A6BE + #$A6BF, // $A6BF + #$A6C0, // $A6C0 + #$A6C1, // $A6C1 + #$A6C2, // $A6C2 + #$A6C3, // $A6C3 + #$A6C4, // $A6C4 + #$A6C5, // $A6C5 + #$A6C6, // $A6C6 + #$A6C7, // $A6C7 + #$A6C8, // $A6C8 + #$A6C9, // $A6C9 + #$A6CA, // $A6CA + #$A6CB, // $A6CB + #$A6CC, // $A6CC + #$A6CD, // $A6CD + #$A6CE, // $A6CE + #$A6CF, // $A6CF + #$A6D0, // $A6D0 + #$A6D1, // $A6D1 + #$A6D2, // $A6D2 + #$A6D3, // $A6D3 + #$A6D4, // $A6D4 + #$A6D5, // $A6D5 + #$A6D6, // $A6D6 + #$A6D7, // $A6D7 + #$A6D8, // $A6D8 + #$A6D9, // $A6D9 + #$A6DA, // $A6DA + #$A6DB, // $A6DB + #$A6DC, // $A6DC + #$A6DD, // $A6DD + #$A6DE, // $A6DE + #$A6DF, // $A6DF + #$A6E0, // $A6E0 + #$A6E1, // $A6E1 + #$A6E2, // $A6E2 + #$A6E3, // $A6E3 + #$A6E4, // $A6E4 + #$A6E5, // $A6E5 + #$A6E6, // $A6E6 + #$A6E7, // $A6E7 + #$A6E8, // $A6E8 + #$A6E9, // $A6E9 + #$A6EA, // $A6EA + #$A6EB, // $A6EB + #$A6EC, // $A6EC + #$A6ED, // $A6ED + #$A6EE, // $A6EE + #$A6EF, // $A6EF + #$A6F0, // $A6F0 + #$A6F1, // $A6F1 + #$A6F2, // $A6F2 + #$A6F3, // $A6F3 + #$A6F4, // $A6F4 + #$A6F5, // $A6F5 + #$A6F6, // $A6F6 + #$A6F7, // $A6F7 + #$A6F8, // $A6F8 + #$A6F9, // $A6F9 + #$A6FA, // $A6FA + #$A6FB, // $A6FB + #$A6FC, // $A6FC + #$A6FD, // $A6FD + #$A6FE, // $A6FE + #$A6FF, // $A6FF + #$A700, // $A700 + #$A701, // $A701 + #$A702, // $A702 + #$A703, // $A703 + #$A704, // $A704 + #$A705, // $A705 + #$A706, // $A706 + #$A707, // $A707 + #$A708, // $A708 + #$A709, // $A709 + #$A70A, // $A70A + #$A70B, // $A70B + #$A70C, // $A70C + #$A70D, // $A70D + #$A70E, // $A70E + #$A70F, // $A70F + #$A710, // $A710 + #$A711, // $A711 + #$A712, // $A712 + #$A713, // $A713 + #$A714, // $A714 + #$A715, // $A715 + #$A716, // $A716 + #$A717, // $A717 + #$A718, // $A718 + #$A719, // $A719 + #$A71A, // $A71A + #$A71B, // $A71B + #$A71C, // $A71C + #$A71D, // $A71D + #$A71E, // $A71E + #$A71F, // $A71F + #$A720, // $A720 + #$A721, // $A721 + #$A723, // $A722 + #$A723, // $A723 + #$A725, // $A724 + #$A725, // $A725 + #$A727, // $A726 + #$A727, // $A727 + #$A729, // $A728 + #$A729, // $A729 + #$A72B, // $A72A + #$A72B, // $A72B + #$A72D, // $A72C + #$A72D, // $A72D + #$A72F, // $A72E + #$A72F, // $A72F + #$A730, // $A730 + #$A731, // $A731 + #$A733, // $A732 + #$A733, // $A733 + #$A735, // $A734 + #$A735, // $A735 + #$A737, // $A736 + #$A737, // $A737 + #$A739, // $A738 + #$A739, // $A739 + #$A73B, // $A73A + #$A73B, // $A73B + #$A73D, // $A73C + #$A73D, // $A73D + #$A73F, // $A73E + #$A73F, // $A73F + #$A741, // $A740 + #$A741, // $A741 + #$A743, // $A742 + #$A743, // $A743 + #$A745, // $A744 + #$A745, // $A745 + #$A747, // $A746 + #$A747, // $A747 + #$A749, // $A748 + #$A749, // $A749 + #$A74B, // $A74A + #$A74B, // $A74B + #$A74D, // $A74C + #$A74D, // $A74D + #$A74F, // $A74E + #$A74F, // $A74F + #$A751, // $A750 + #$A751, // $A751 + #$A753, // $A752 + #$A753, // $A753 + #$A755, // $A754 + #$A755, // $A755 + #$A757, // $A756 + #$A757, // $A757 + #$A759, // $A758 + #$A759, // $A759 + #$A75B, // $A75A + #$A75B, // $A75B + #$A75D, // $A75C + #$A75D, // $A75D + #$A75F, // $A75E + #$A75F, // $A75F + #$A761, // $A760 + #$A761, // $A761 + #$A763, // $A762 + #$A763, // $A763 + #$A765, // $A764 + #$A765, // $A765 + #$A767, // $A766 + #$A767, // $A767 + #$A769, // $A768 + #$A769, // $A769 + #$A76B, // $A76A + #$A76B, // $A76B + #$A76D, // $A76C + #$A76D, // $A76D + #$A76F, // $A76E + #$A76F, // $A76F + #$A770, // $A770 + #$A771, // $A771 + #$A772, // $A772 + #$A773, // $A773 + #$A774, // $A774 + #$A775, // $A775 + #$A776, // $A776 + #$A777, // $A777 + #$A778, // $A778 + #$A77A, // $A779 + #$A77A, // $A77A + #$A77C, // $A77B + #$A77C, // $A77C + #$1D79, // $A77D + #$A77F, // $A77E + #$A77F, // $A77F + #$A781, // $A780 + #$A781, // $A781 + #$A783, // $A782 + #$A783, // $A783 + #$A785, // $A784 + #$A785, // $A785 + #$A787, // $A786 + #$A787, // $A787 + #$A788, // $A788 + #$A789, // $A789 + #$A78A, // $A78A + #$A78C, // $A78B + #$A78C, // $A78C + #$0265, // $A78D + #$A78E, // $A78E + #$A78F, // $A78F + #$A791, // $A790 + #$A791, // $A791 + #$A793, // $A792 + #$A793, // $A793 + #$A794, // $A794 + #$A795, // $A795 + #$A797, // $A796 + #$A797, // $A797 + #$A799, // $A798 + #$A799, // $A799 + #$A79B, // $A79A + #$A79B, // $A79B + #$A79D, // $A79C + #$A79D, // $A79D + #$A79F, // $A79E + #$A79F, // $A79F + #$A7A1, // $A7A0 + #$A7A1, // $A7A1 + #$A7A3, // $A7A2 + #$A7A3, // $A7A3 + #$A7A5, // $A7A4 + #$A7A5, // $A7A5 + #$A7A7, // $A7A6 + #$A7A7, // $A7A7 + #$A7A9, // $A7A8 + #$A7A9, // $A7A9 + #$0266, // $A7AA + #$025C, // $A7AB + #$0261, // $A7AC + #$026C, // $A7AD + #$026A, // $A7AE + #$A7AF, // $A7AF + #$029E, // $A7B0 + #$0287, // $A7B1 + #$029D, // $A7B2 + #$AB53, // $A7B3 + #$A7B5, // $A7B4 + #$A7B5, // $A7B5 + #$A7B7, // $A7B6 + #$A7B7, // $A7B7 + #$A7B8, // $A7B8 + #$A7B9, // $A7B9 + #$A7BA, // $A7BA + #$A7BB, // $A7BB + #$A7BC, // $A7BC + #$A7BD, // $A7BD + #$A7BE, // $A7BE + #$A7BF, // $A7BF + #$A7C0, // $A7C0 + #$A7C1, // $A7C1 + #$A7C2, // $A7C2 + #$A7C3, // $A7C3 + #$A7C4, // $A7C4 + #$A7C5, // $A7C5 + #$A7C6, // $A7C6 + #$A7C7, // $A7C7 + #$A7C8, // $A7C8 + #$A7C9, // $A7C9 + #$A7CA, // $A7CA + #$A7CB, // $A7CB + #$A7CC, // $A7CC + #$A7CD, // $A7CD + #$A7CE, // $A7CE + #$A7CF, // $A7CF + #$A7D0, // $A7D0 + #$A7D1, // $A7D1 + #$A7D2, // $A7D2 + #$A7D3, // $A7D3 + #$A7D4, // $A7D4 + #$A7D5, // $A7D5 + #$A7D6, // $A7D6 + #$A7D7, // $A7D7 + #$A7D8, // $A7D8 + #$A7D9, // $A7D9 + #$A7DA, // $A7DA + #$A7DB, // $A7DB + #$A7DC, // $A7DC + #$A7DD, // $A7DD + #$A7DE, // $A7DE + #$A7DF, // $A7DF + #$A7E0, // $A7E0 + #$A7E1, // $A7E1 + #$A7E2, // $A7E2 + #$A7E3, // $A7E3 + #$A7E4, // $A7E4 + #$A7E5, // $A7E5 + #$A7E6, // $A7E6 + #$A7E7, // $A7E7 + #$A7E8, // $A7E8 + #$A7E9, // $A7E9 + #$A7EA, // $A7EA + #$A7EB, // $A7EB + #$A7EC, // $A7EC + #$A7ED, // $A7ED + #$A7EE, // $A7EE + #$A7EF, // $A7EF + #$A7F0, // $A7F0 + #$A7F1, // $A7F1 + #$A7F2, // $A7F2 + #$A7F3, // $A7F3 + #$A7F4, // $A7F4 + #$A7F5, // $A7F5 + #$A7F6, // $A7F6 + #$A7F7, // $A7F7 + #$A7F8, // $A7F8 + #$A7F9, // $A7F9 + #$A7FA, // $A7FA + #$A7FB, // $A7FB + #$A7FC, // $A7FC + #$A7FD, // $A7FD + #$A7FE, // $A7FE + #$A7FF, // $A7FF + #$A800, // $A800 + #$A801, // $A801 + #$A802, // $A802 + #$A803, // $A803 + #$A804, // $A804 + #$A805, // $A805 + #$A806, // $A806 + #$A807, // $A807 + #$A808, // $A808 + #$A809, // $A809 + #$A80A, // $A80A + #$A80B, // $A80B + #$A80C, // $A80C + #$A80D, // $A80D + #$A80E, // $A80E + #$A80F, // $A80F + #$A810, // $A810 + #$A811, // $A811 + #$A812, // $A812 + #$A813, // $A813 + #$A814, // $A814 + #$A815, // $A815 + #$A816, // $A816 + #$A817, // $A817 + #$A818, // $A818 + #$A819, // $A819 + #$A81A, // $A81A + #$A81B, // $A81B + #$A81C, // $A81C + #$A81D, // $A81D + #$A81E, // $A81E + #$A81F, // $A81F + #$A820, // $A820 + #$A821, // $A821 + #$A822, // $A822 + #$A823, // $A823 + #$A824, // $A824 + #$A825, // $A825 + #$A826, // $A826 + #$A827, // $A827 + #$A828, // $A828 + #$A829, // $A829 + #$A82A, // $A82A + #$A82B, // $A82B + #$A82C, // $A82C + #$A82D, // $A82D + #$A82E, // $A82E + #$A82F, // $A82F + #$A830, // $A830 + #$A831, // $A831 + #$A832, // $A832 + #$A833, // $A833 + #$A834, // $A834 + #$A835, // $A835 + #$A836, // $A836 + #$A837, // $A837 + #$A838, // $A838 + #$A839, // $A839 + #$A83A, // $A83A + #$A83B, // $A83B + #$A83C, // $A83C + #$A83D, // $A83D + #$A83E, // $A83E + #$A83F, // $A83F + #$A840, // $A840 + #$A841, // $A841 + #$A842, // $A842 + #$A843, // $A843 + #$A844, // $A844 + #$A845, // $A845 + #$A846, // $A846 + #$A847, // $A847 + #$A848, // $A848 + #$A849, // $A849 + #$A84A, // $A84A + #$A84B, // $A84B + #$A84C, // $A84C + #$A84D, // $A84D + #$A84E, // $A84E + #$A84F, // $A84F + #$A850, // $A850 + #$A851, // $A851 + #$A852, // $A852 + #$A853, // $A853 + #$A854, // $A854 + #$A855, // $A855 + #$A856, // $A856 + #$A857, // $A857 + #$A858, // $A858 + #$A859, // $A859 + #$A85A, // $A85A + #$A85B, // $A85B + #$A85C, // $A85C + #$A85D, // $A85D + #$A85E, // $A85E + #$A85F, // $A85F + #$A860, // $A860 + #$A861, // $A861 + #$A862, // $A862 + #$A863, // $A863 + #$A864, // $A864 + #$A865, // $A865 + #$A866, // $A866 + #$A867, // $A867 + #$A868, // $A868 + #$A869, // $A869 + #$A86A, // $A86A + #$A86B, // $A86B + #$A86C, // $A86C + #$A86D, // $A86D + #$A86E, // $A86E + #$A86F, // $A86F + #$A870, // $A870 + #$A871, // $A871 + #$A872, // $A872 + #$A873, // $A873 + #$A874, // $A874 + #$A875, // $A875 + #$A876, // $A876 + #$A877, // $A877 + #$A878, // $A878 + #$A879, // $A879 + #$A87A, // $A87A + #$A87B, // $A87B + #$A87C, // $A87C + #$A87D, // $A87D + #$A87E, // $A87E + #$A87F, // $A87F + #$A880, // $A880 + #$A881, // $A881 + #$A882, // $A882 + #$A883, // $A883 + #$A884, // $A884 + #$A885, // $A885 + #$A886, // $A886 + #$A887, // $A887 + #$A888, // $A888 + #$A889, // $A889 + #$A88A, // $A88A + #$A88B, // $A88B + #$A88C, // $A88C + #$A88D, // $A88D + #$A88E, // $A88E + #$A88F, // $A88F + #$A890, // $A890 + #$A891, // $A891 + #$A892, // $A892 + #$A893, // $A893 + #$A894, // $A894 + #$A895, // $A895 + #$A896, // $A896 + #$A897, // $A897 + #$A898, // $A898 + #$A899, // $A899 + #$A89A, // $A89A + #$A89B, // $A89B + #$A89C, // $A89C + #$A89D, // $A89D + #$A89E, // $A89E + #$A89F, // $A89F + #$A8A0, // $A8A0 + #$A8A1, // $A8A1 + #$A8A2, // $A8A2 + #$A8A3, // $A8A3 + #$A8A4, // $A8A4 + #$A8A5, // $A8A5 + #$A8A6, // $A8A6 + #$A8A7, // $A8A7 + #$A8A8, // $A8A8 + #$A8A9, // $A8A9 + #$A8AA, // $A8AA + #$A8AB, // $A8AB + #$A8AC, // $A8AC + #$A8AD, // $A8AD + #$A8AE, // $A8AE + #$A8AF, // $A8AF + #$A8B0, // $A8B0 + #$A8B1, // $A8B1 + #$A8B2, // $A8B2 + #$A8B3, // $A8B3 + #$A8B4, // $A8B4 + #$A8B5, // $A8B5 + #$A8B6, // $A8B6 + #$A8B7, // $A8B7 + #$A8B8, // $A8B8 + #$A8B9, // $A8B9 + #$A8BA, // $A8BA + #$A8BB, // $A8BB + #$A8BC, // $A8BC + #$A8BD, // $A8BD + #$A8BE, // $A8BE + #$A8BF, // $A8BF + #$A8C0, // $A8C0 + #$A8C1, // $A8C1 + #$A8C2, // $A8C2 + #$A8C3, // $A8C3 + #$A8C4, // $A8C4 + #$A8C5, // $A8C5 + #$A8C6, // $A8C6 + #$A8C7, // $A8C7 + #$A8C8, // $A8C8 + #$A8C9, // $A8C9 + #$A8CA, // $A8CA + #$A8CB, // $A8CB + #$A8CC, // $A8CC + #$A8CD, // $A8CD + #$A8CE, // $A8CE + #$A8CF, // $A8CF + #$A8D0, // $A8D0 + #$A8D1, // $A8D1 + #$A8D2, // $A8D2 + #$A8D3, // $A8D3 + #$A8D4, // $A8D4 + #$A8D5, // $A8D5 + #$A8D6, // $A8D6 + #$A8D7, // $A8D7 + #$A8D8, // $A8D8 + #$A8D9, // $A8D9 + #$A8DA, // $A8DA + #$A8DB, // $A8DB + #$A8DC, // $A8DC + #$A8DD, // $A8DD + #$A8DE, // $A8DE + #$A8DF, // $A8DF + #$A8E0, // $A8E0 + #$A8E1, // $A8E1 + #$A8E2, // $A8E2 + #$A8E3, // $A8E3 + #$A8E4, // $A8E4 + #$A8E5, // $A8E5 + #$A8E6, // $A8E6 + #$A8E7, // $A8E7 + #$A8E8, // $A8E8 + #$A8E9, // $A8E9 + #$A8EA, // $A8EA + #$A8EB, // $A8EB + #$A8EC, // $A8EC + #$A8ED, // $A8ED + #$A8EE, // $A8EE + #$A8EF, // $A8EF + #$A8F0, // $A8F0 + #$A8F1, // $A8F1 + #$A8F2, // $A8F2 + #$A8F3, // $A8F3 + #$A8F4, // $A8F4 + #$A8F5, // $A8F5 + #$A8F6, // $A8F6 + #$A8F7, // $A8F7 + #$A8F8, // $A8F8 + #$A8F9, // $A8F9 + #$A8FA, // $A8FA + #$A8FB, // $A8FB + #$A8FC, // $A8FC + #$A8FD, // $A8FD + #$A8FE, // $A8FE + #$A8FF, // $A8FF + #$A900, // $A900 + #$A901, // $A901 + #$A902, // $A902 + #$A903, // $A903 + #$A904, // $A904 + #$A905, // $A905 + #$A906, // $A906 + #$A907, // $A907 + #$A908, // $A908 + #$A909, // $A909 + #$A90A, // $A90A + #$A90B, // $A90B + #$A90C, // $A90C + #$A90D, // $A90D + #$A90E, // $A90E + #$A90F, // $A90F + #$A910, // $A910 + #$A911, // $A911 + #$A912, // $A912 + #$A913, // $A913 + #$A914, // $A914 + #$A915, // $A915 + #$A916, // $A916 + #$A917, // $A917 + #$A918, // $A918 + #$A919, // $A919 + #$A91A, // $A91A + #$A91B, // $A91B + #$A91C, // $A91C + #$A91D, // $A91D + #$A91E, // $A91E + #$A91F, // $A91F + #$A920, // $A920 + #$A921, // $A921 + #$A922, // $A922 + #$A923, // $A923 + #$A924, // $A924 + #$A925, // $A925 + #$A926, // $A926 + #$A927, // $A927 + #$A928, // $A928 + #$A929, // $A929 + #$A92A, // $A92A + #$A92B, // $A92B + #$A92C, // $A92C + #$A92D, // $A92D + #$A92E, // $A92E + #$A92F, // $A92F + #$A930, // $A930 + #$A931, // $A931 + #$A932, // $A932 + #$A933, // $A933 + #$A934, // $A934 + #$A935, // $A935 + #$A936, // $A936 + #$A937, // $A937 + #$A938, // $A938 + #$A939, // $A939 + #$A93A, // $A93A + #$A93B, // $A93B + #$A93C, // $A93C + #$A93D, // $A93D + #$A93E, // $A93E + #$A93F, // $A93F + #$A940, // $A940 + #$A941, // $A941 + #$A942, // $A942 + #$A943, // $A943 + #$A944, // $A944 + #$A945, // $A945 + #$A946, // $A946 + #$A947, // $A947 + #$A948, // $A948 + #$A949, // $A949 + #$A94A, // $A94A + #$A94B, // $A94B + #$A94C, // $A94C + #$A94D, // $A94D + #$A94E, // $A94E + #$A94F, // $A94F + #$A950, // $A950 + #$A951, // $A951 + #$A952, // $A952 + #$A953, // $A953 + #$A954, // $A954 + #$A955, // $A955 + #$A956, // $A956 + #$A957, // $A957 + #$A958, // $A958 + #$A959, // $A959 + #$A95A, // $A95A + #$A95B, // $A95B + #$A95C, // $A95C + #$A95D, // $A95D + #$A95E, // $A95E + #$A95F, // $A95F + #$A960, // $A960 + #$A961, // $A961 + #$A962, // $A962 + #$A963, // $A963 + #$A964, // $A964 + #$A965, // $A965 + #$A966, // $A966 + #$A967, // $A967 + #$A968, // $A968 + #$A969, // $A969 + #$A96A, // $A96A + #$A96B, // $A96B + #$A96C, // $A96C + #$A96D, // $A96D + #$A96E, // $A96E + #$A96F, // $A96F + #$A970, // $A970 + #$A971, // $A971 + #$A972, // $A972 + #$A973, // $A973 + #$A974, // $A974 + #$A975, // $A975 + #$A976, // $A976 + #$A977, // $A977 + #$A978, // $A978 + #$A979, // $A979 + #$A97A, // $A97A + #$A97B, // $A97B + #$A97C, // $A97C + #$A97D, // $A97D + #$A97E, // $A97E + #$A97F, // $A97F + #$A980, // $A980 + #$A981, // $A981 + #$A982, // $A982 + #$A983, // $A983 + #$A984, // $A984 + #$A985, // $A985 + #$A986, // $A986 + #$A987, // $A987 + #$A988, // $A988 + #$A989, // $A989 + #$A98A, // $A98A + #$A98B, // $A98B + #$A98C, // $A98C + #$A98D, // $A98D + #$A98E, // $A98E + #$A98F, // $A98F + #$A990, // $A990 + #$A991, // $A991 + #$A992, // $A992 + #$A993, // $A993 + #$A994, // $A994 + #$A995, // $A995 + #$A996, // $A996 + #$A997, // $A997 + #$A998, // $A998 + #$A999, // $A999 + #$A99A, // $A99A + #$A99B, // $A99B + #$A99C, // $A99C + #$A99D, // $A99D + #$A99E, // $A99E + #$A99F, // $A99F + #$A9A0, // $A9A0 + #$A9A1, // $A9A1 + #$A9A2, // $A9A2 + #$A9A3, // $A9A3 + #$A9A4, // $A9A4 + #$A9A5, // $A9A5 + #$A9A6, // $A9A6 + #$A9A7, // $A9A7 + #$A9A8, // $A9A8 + #$A9A9, // $A9A9 + #$A9AA, // $A9AA + #$A9AB, // $A9AB + #$A9AC, // $A9AC + #$A9AD, // $A9AD + #$A9AE, // $A9AE + #$A9AF, // $A9AF + #$A9B0, // $A9B0 + #$A9B1, // $A9B1 + #$A9B2, // $A9B2 + #$A9B3, // $A9B3 + #$A9B4, // $A9B4 + #$A9B5, // $A9B5 + #$A9B6, // $A9B6 + #$A9B7, // $A9B7 + #$A9B8, // $A9B8 + #$A9B9, // $A9B9 + #$A9BA, // $A9BA + #$A9BB, // $A9BB + #$A9BC, // $A9BC + #$A9BD, // $A9BD + #$A9BE, // $A9BE + #$A9BF, // $A9BF + #$A9C0, // $A9C0 + #$A9C1, // $A9C1 + #$A9C2, // $A9C2 + #$A9C3, // $A9C3 + #$A9C4, // $A9C4 + #$A9C5, // $A9C5 + #$A9C6, // $A9C6 + #$A9C7, // $A9C7 + #$A9C8, // $A9C8 + #$A9C9, // $A9C9 + #$A9CA, // $A9CA + #$A9CB, // $A9CB + #$A9CC, // $A9CC + #$A9CD, // $A9CD + #$A9CE, // $A9CE + #$A9CF, // $A9CF + #$A9D0, // $A9D0 + #$A9D1, // $A9D1 + #$A9D2, // $A9D2 + #$A9D3, // $A9D3 + #$A9D4, // $A9D4 + #$A9D5, // $A9D5 + #$A9D6, // $A9D6 + #$A9D7, // $A9D7 + #$A9D8, // $A9D8 + #$A9D9, // $A9D9 + #$A9DA, // $A9DA + #$A9DB, // $A9DB + #$A9DC, // $A9DC + #$A9DD, // $A9DD + #$A9DE, // $A9DE + #$A9DF, // $A9DF + #$A9E0, // $A9E0 + #$A9E1, // $A9E1 + #$A9E2, // $A9E2 + #$A9E3, // $A9E3 + #$A9E4, // $A9E4 + #$A9E5, // $A9E5 + #$A9E6, // $A9E6 + #$A9E7, // $A9E7 + #$A9E8, // $A9E8 + #$A9E9, // $A9E9 + #$A9EA, // $A9EA + #$A9EB, // $A9EB + #$A9EC, // $A9EC + #$A9ED, // $A9ED + #$A9EE, // $A9EE + #$A9EF, // $A9EF + #$A9F0, // $A9F0 + #$A9F1, // $A9F1 + #$A9F2, // $A9F2 + #$A9F3, // $A9F3 + #$A9F4, // $A9F4 + #$A9F5, // $A9F5 + #$A9F6, // $A9F6 + #$A9F7, // $A9F7 + #$A9F8, // $A9F8 + #$A9F9, // $A9F9 + #$A9FA, // $A9FA + #$A9FB, // $A9FB + #$A9FC, // $A9FC + #$A9FD, // $A9FD + #$A9FE, // $A9FE + #$A9FF, // $A9FF + #$AA00, // $AA00 + #$AA01, // $AA01 + #$AA02, // $AA02 + #$AA03, // $AA03 + #$AA04, // $AA04 + #$AA05, // $AA05 + #$AA06, // $AA06 + #$AA07, // $AA07 + #$AA08, // $AA08 + #$AA09, // $AA09 + #$AA0A, // $AA0A + #$AA0B, // $AA0B + #$AA0C, // $AA0C + #$AA0D, // $AA0D + #$AA0E, // $AA0E + #$AA0F, // $AA0F + #$AA10, // $AA10 + #$AA11, // $AA11 + #$AA12, // $AA12 + #$AA13, // $AA13 + #$AA14, // $AA14 + #$AA15, // $AA15 + #$AA16, // $AA16 + #$AA17, // $AA17 + #$AA18, // $AA18 + #$AA19, // $AA19 + #$AA1A, // $AA1A + #$AA1B, // $AA1B + #$AA1C, // $AA1C + #$AA1D, // $AA1D + #$AA1E, // $AA1E + #$AA1F, // $AA1F + #$AA20, // $AA20 + #$AA21, // $AA21 + #$AA22, // $AA22 + #$AA23, // $AA23 + #$AA24, // $AA24 + #$AA25, // $AA25 + #$AA26, // $AA26 + #$AA27, // $AA27 + #$AA28, // $AA28 + #$AA29, // $AA29 + #$AA2A, // $AA2A + #$AA2B, // $AA2B + #$AA2C, // $AA2C + #$AA2D, // $AA2D + #$AA2E, // $AA2E + #$AA2F, // $AA2F + #$AA30, // $AA30 + #$AA31, // $AA31 + #$AA32, // $AA32 + #$AA33, // $AA33 + #$AA34, // $AA34 + #$AA35, // $AA35 + #$AA36, // $AA36 + #$AA37, // $AA37 + #$AA38, // $AA38 + #$AA39, // $AA39 + #$AA3A, // $AA3A + #$AA3B, // $AA3B + #$AA3C, // $AA3C + #$AA3D, // $AA3D + #$AA3E, // $AA3E + #$AA3F, // $AA3F + #$AA40, // $AA40 + #$AA41, // $AA41 + #$AA42, // $AA42 + #$AA43, // $AA43 + #$AA44, // $AA44 + #$AA45, // $AA45 + #$AA46, // $AA46 + #$AA47, // $AA47 + #$AA48, // $AA48 + #$AA49, // $AA49 + #$AA4A, // $AA4A + #$AA4B, // $AA4B + #$AA4C, // $AA4C + #$AA4D, // $AA4D + #$AA4E, // $AA4E + #$AA4F, // $AA4F + #$AA50, // $AA50 + #$AA51, // $AA51 + #$AA52, // $AA52 + #$AA53, // $AA53 + #$AA54, // $AA54 + #$AA55, // $AA55 + #$AA56, // $AA56 + #$AA57, // $AA57 + #$AA58, // $AA58 + #$AA59, // $AA59 + #$AA5A, // $AA5A + #$AA5B, // $AA5B + #$AA5C, // $AA5C + #$AA5D, // $AA5D + #$AA5E, // $AA5E + #$AA5F, // $AA5F + #$AA60, // $AA60 + #$AA61, // $AA61 + #$AA62, // $AA62 + #$AA63, // $AA63 + #$AA64, // $AA64 + #$AA65, // $AA65 + #$AA66, // $AA66 + #$AA67, // $AA67 + #$AA68, // $AA68 + #$AA69, // $AA69 + #$AA6A, // $AA6A + #$AA6B, // $AA6B + #$AA6C, // $AA6C + #$AA6D, // $AA6D + #$AA6E, // $AA6E + #$AA6F, // $AA6F + #$AA70, // $AA70 + #$AA71, // $AA71 + #$AA72, // $AA72 + #$AA73, // $AA73 + #$AA74, // $AA74 + #$AA75, // $AA75 + #$AA76, // $AA76 + #$AA77, // $AA77 + #$AA78, // $AA78 + #$AA79, // $AA79 + #$AA7A, // $AA7A + #$AA7B, // $AA7B + #$AA7C, // $AA7C + #$AA7D, // $AA7D + #$AA7E, // $AA7E + #$AA7F, // $AA7F + #$AA80, // $AA80 + #$AA81, // $AA81 + #$AA82, // $AA82 + #$AA83, // $AA83 + #$AA84, // $AA84 + #$AA85, // $AA85 + #$AA86, // $AA86 + #$AA87, // $AA87 + #$AA88, // $AA88 + #$AA89, // $AA89 + #$AA8A, // $AA8A + #$AA8B, // $AA8B + #$AA8C, // $AA8C + #$AA8D, // $AA8D + #$AA8E, // $AA8E + #$AA8F, // $AA8F + #$AA90, // $AA90 + #$AA91, // $AA91 + #$AA92, // $AA92 + #$AA93, // $AA93 + #$AA94, // $AA94 + #$AA95, // $AA95 + #$AA96, // $AA96 + #$AA97, // $AA97 + #$AA98, // $AA98 + #$AA99, // $AA99 + #$AA9A, // $AA9A + #$AA9B, // $AA9B + #$AA9C, // $AA9C + #$AA9D, // $AA9D + #$AA9E, // $AA9E + #$AA9F, // $AA9F + #$AAA0, // $AAA0 + #$AAA1, // $AAA1 + #$AAA2, // $AAA2 + #$AAA3, // $AAA3 + #$AAA4, // $AAA4 + #$AAA5, // $AAA5 + #$AAA6, // $AAA6 + #$AAA7, // $AAA7 + #$AAA8, // $AAA8 + #$AAA9, // $AAA9 + #$AAAA, // $AAAA + #$AAAB, // $AAAB + #$AAAC, // $AAAC + #$AAAD, // $AAAD + #$AAAE, // $AAAE + #$AAAF, // $AAAF + #$AAB0, // $AAB0 + #$AAB1, // $AAB1 + #$AAB2, // $AAB2 + #$AAB3, // $AAB3 + #$AAB4, // $AAB4 + #$AAB5, // $AAB5 + #$AAB6, // $AAB6 + #$AAB7, // $AAB7 + #$AAB8, // $AAB8 + #$AAB9, // $AAB9 + #$AABA, // $AABA + #$AABB, // $AABB + #$AABC, // $AABC + #$AABD, // $AABD + #$AABE, // $AABE + #$AABF, // $AABF + #$AAC0, // $AAC0 + #$AAC1, // $AAC1 + #$AAC2, // $AAC2 + #$AAC3, // $AAC3 + #$AAC4, // $AAC4 + #$AAC5, // $AAC5 + #$AAC6, // $AAC6 + #$AAC7, // $AAC7 + #$AAC8, // $AAC8 + #$AAC9, // $AAC9 + #$AACA, // $AACA + #$AACB, // $AACB + #$AACC, // $AACC + #$AACD, // $AACD + #$AACE, // $AACE + #$AACF, // $AACF + #$AAD0, // $AAD0 + #$AAD1, // $AAD1 + #$AAD2, // $AAD2 + #$AAD3, // $AAD3 + #$AAD4, // $AAD4 + #$AAD5, // $AAD5 + #$AAD6, // $AAD6 + #$AAD7, // $AAD7 + #$AAD8, // $AAD8 + #$AAD9, // $AAD9 + #$AADA, // $AADA + #$AADB, // $AADB + #$AADC, // $AADC + #$AADD, // $AADD + #$AADE, // $AADE + #$AADF, // $AADF + #$AAE0, // $AAE0 + #$AAE1, // $AAE1 + #$AAE2, // $AAE2 + #$AAE3, // $AAE3 + #$AAE4, // $AAE4 + #$AAE5, // $AAE5 + #$AAE6, // $AAE6 + #$AAE7, // $AAE7 + #$AAE8, // $AAE8 + #$AAE9, // $AAE9 + #$AAEA, // $AAEA + #$AAEB, // $AAEB + #$AAEC, // $AAEC + #$AAED, // $AAED + #$AAEE, // $AAEE + #$AAEF, // $AAEF + #$AAF0, // $AAF0 + #$AAF1, // $AAF1 + #$AAF2, // $AAF2 + #$AAF3, // $AAF3 + #$AAF4, // $AAF4 + #$AAF5, // $AAF5 + #$AAF6, // $AAF6 + #$AAF7, // $AAF7 + #$AAF8, // $AAF8 + #$AAF9, // $AAF9 + #$AAFA, // $AAFA + #$AAFB, // $AAFB + #$AAFC, // $AAFC + #$AAFD, // $AAFD + #$AAFE, // $AAFE + #$AAFF, // $AAFF + #$AB00, // $AB00 + #$AB01, // $AB01 + #$AB02, // $AB02 + #$AB03, // $AB03 + #$AB04, // $AB04 + #$AB05, // $AB05 + #$AB06, // $AB06 + #$AB07, // $AB07 + #$AB08, // $AB08 + #$AB09, // $AB09 + #$AB0A, // $AB0A + #$AB0B, // $AB0B + #$AB0C, // $AB0C + #$AB0D, // $AB0D + #$AB0E, // $AB0E + #$AB0F, // $AB0F + #$AB10, // $AB10 + #$AB11, // $AB11 + #$AB12, // $AB12 + #$AB13, // $AB13 + #$AB14, // $AB14 + #$AB15, // $AB15 + #$AB16, // $AB16 + #$AB17, // $AB17 + #$AB18, // $AB18 + #$AB19, // $AB19 + #$AB1A, // $AB1A + #$AB1B, // $AB1B + #$AB1C, // $AB1C + #$AB1D, // $AB1D + #$AB1E, // $AB1E + #$AB1F, // $AB1F + #$AB20, // $AB20 + #$AB21, // $AB21 + #$AB22, // $AB22 + #$AB23, // $AB23 + #$AB24, // $AB24 + #$AB25, // $AB25 + #$AB26, // $AB26 + #$AB27, // $AB27 + #$AB28, // $AB28 + #$AB29, // $AB29 + #$AB2A, // $AB2A + #$AB2B, // $AB2B + #$AB2C, // $AB2C + #$AB2D, // $AB2D + #$AB2E, // $AB2E + #$AB2F, // $AB2F + #$AB30, // $AB30 + #$AB31, // $AB31 + #$AB32, // $AB32 + #$AB33, // $AB33 + #$AB34, // $AB34 + #$AB35, // $AB35 + #$AB36, // $AB36 + #$AB37, // $AB37 + #$AB38, // $AB38 + #$AB39, // $AB39 + #$AB3A, // $AB3A + #$AB3B, // $AB3B + #$AB3C, // $AB3C + #$AB3D, // $AB3D + #$AB3E, // $AB3E + #$AB3F, // $AB3F + #$AB40, // $AB40 + #$AB41, // $AB41 + #$AB42, // $AB42 + #$AB43, // $AB43 + #$AB44, // $AB44 + #$AB45, // $AB45 + #$AB46, // $AB46 + #$AB47, // $AB47 + #$AB48, // $AB48 + #$AB49, // $AB49 + #$AB4A, // $AB4A + #$AB4B, // $AB4B + #$AB4C, // $AB4C + #$AB4D, // $AB4D + #$AB4E, // $AB4E + #$AB4F, // $AB4F + #$AB50, // $AB50 + #$AB51, // $AB51 + #$AB52, // $AB52 + #$AB53, // $AB53 + #$AB54, // $AB54 + #$AB55, // $AB55 + #$AB56, // $AB56 + #$AB57, // $AB57 + #$AB58, // $AB58 + #$AB59, // $AB59 + #$AB5A, // $AB5A + #$AB5B, // $AB5B + #$AB5C, // $AB5C + #$AB5D, // $AB5D + #$AB5E, // $AB5E + #$AB5F, // $AB5F + #$AB60, // $AB60 + #$AB61, // $AB61 + #$AB62, // $AB62 + #$AB63, // $AB63 + #$AB64, // $AB64 + #$AB65, // $AB65 + #$AB66, // $AB66 + #$AB67, // $AB67 + #$AB68, // $AB68 + #$AB69, // $AB69 + #$AB6A, // $AB6A + #$AB6B, // $AB6B + #$AB6C, // $AB6C + #$AB6D, // $AB6D + #$AB6E, // $AB6E + #$AB6F, // $AB6F + #$AB70, // $AB70 + #$AB71, // $AB71 + #$AB72, // $AB72 + #$AB73, // $AB73 + #$AB74, // $AB74 + #$AB75, // $AB75 + #$AB76, // $AB76 + #$AB77, // $AB77 + #$AB78, // $AB78 + #$AB79, // $AB79 + #$AB7A, // $AB7A + #$AB7B, // $AB7B + #$AB7C, // $AB7C + #$AB7D, // $AB7D + #$AB7E, // $AB7E + #$AB7F, // $AB7F + #$AB80, // $AB80 + #$AB81, // $AB81 + #$AB82, // $AB82 + #$AB83, // $AB83 + #$AB84, // $AB84 + #$AB85, // $AB85 + #$AB86, // $AB86 + #$AB87, // $AB87 + #$AB88, // $AB88 + #$AB89, // $AB89 + #$AB8A, // $AB8A + #$AB8B, // $AB8B + #$AB8C, // $AB8C + #$AB8D, // $AB8D + #$AB8E, // $AB8E + #$AB8F, // $AB8F + #$AB90, // $AB90 + #$AB91, // $AB91 + #$AB92, // $AB92 + #$AB93, // $AB93 + #$AB94, // $AB94 + #$AB95, // $AB95 + #$AB96, // $AB96 + #$AB97, // $AB97 + #$AB98, // $AB98 + #$AB99, // $AB99 + #$AB9A, // $AB9A + #$AB9B, // $AB9B + #$AB9C, // $AB9C + #$AB9D, // $AB9D + #$AB9E, // $AB9E + #$AB9F, // $AB9F + #$ABA0, // $ABA0 + #$ABA1, // $ABA1 + #$ABA2, // $ABA2 + #$ABA3, // $ABA3 + #$ABA4, // $ABA4 + #$ABA5, // $ABA5 + #$ABA6, // $ABA6 + #$ABA7, // $ABA7 + #$ABA8, // $ABA8 + #$ABA9, // $ABA9 + #$ABAA, // $ABAA + #$ABAB, // $ABAB + #$ABAC, // $ABAC + #$ABAD, // $ABAD + #$ABAE, // $ABAE + #$ABAF, // $ABAF + #$ABB0, // $ABB0 + #$ABB1, // $ABB1 + #$ABB2, // $ABB2 + #$ABB3, // $ABB3 + #$ABB4, // $ABB4 + #$ABB5, // $ABB5 + #$ABB6, // $ABB6 + #$ABB7, // $ABB7 + #$ABB8, // $ABB8 + #$ABB9, // $ABB9 + #$ABBA, // $ABBA + #$ABBB, // $ABBB + #$ABBC, // $ABBC + #$ABBD, // $ABBD + #$ABBE, // $ABBE + #$ABBF, // $ABBF + #$ABC0, // $ABC0 + #$ABC1, // $ABC1 + #$ABC2, // $ABC2 + #$ABC3, // $ABC3 + #$ABC4, // $ABC4 + #$ABC5, // $ABC5 + #$ABC6, // $ABC6 + #$ABC7, // $ABC7 + #$ABC8, // $ABC8 + #$ABC9, // $ABC9 + #$ABCA, // $ABCA + #$ABCB, // $ABCB + #$ABCC, // $ABCC + #$ABCD, // $ABCD + #$ABCE, // $ABCE + #$ABCF, // $ABCF + #$ABD0, // $ABD0 + #$ABD1, // $ABD1 + #$ABD2, // $ABD2 + #$ABD3, // $ABD3 + #$ABD4, // $ABD4 + #$ABD5, // $ABD5 + #$ABD6, // $ABD6 + #$ABD7, // $ABD7 + #$ABD8, // $ABD8 + #$ABD9, // $ABD9 + #$ABDA, // $ABDA + #$ABDB, // $ABDB + #$ABDC, // $ABDC + #$ABDD, // $ABDD + #$ABDE, // $ABDE + #$ABDF, // $ABDF + #$ABE0, // $ABE0 + #$ABE1, // $ABE1 + #$ABE2, // $ABE2 + #$ABE3, // $ABE3 + #$ABE4, // $ABE4 + #$ABE5, // $ABE5 + #$ABE6, // $ABE6 + #$ABE7, // $ABE7 + #$ABE8, // $ABE8 + #$ABE9, // $ABE9 + #$ABEA, // $ABEA + #$ABEB, // $ABEB + #$ABEC, // $ABEC + #$ABED, // $ABED + #$ABEE, // $ABEE + #$ABEF, // $ABEF + #$ABF0, // $ABF0 + #$ABF1, // $ABF1 + #$ABF2, // $ABF2 + #$ABF3, // $ABF3 + #$ABF4, // $ABF4 + #$ABF5, // $ABF5 + #$ABF6, // $ABF6 + #$ABF7, // $ABF7 + #$ABF8, // $ABF8 + #$ABF9, // $ABF9 + #$ABFA, // $ABFA + #$ABFB, // $ABFB + #$ABFC, // $ABFC + #$ABFD, // $ABFD + #$ABFE, // $ABFE + #$ABFF, // $ABFF + #$AC00, // $AC00 + #$AC01, // $AC01 + #$AC02, // $AC02 + #$AC03, // $AC03 + #$AC04, // $AC04 + #$AC05, // $AC05 + #$AC06, // $AC06 + #$AC07, // $AC07 + #$AC08, // $AC08 + #$AC09, // $AC09 + #$AC0A, // $AC0A + #$AC0B, // $AC0B + #$AC0C, // $AC0C + #$AC0D, // $AC0D + #$AC0E, // $AC0E + #$AC0F, // $AC0F + #$AC10, // $AC10 + #$AC11, // $AC11 + #$AC12, // $AC12 + #$AC13, // $AC13 + #$AC14, // $AC14 + #$AC15, // $AC15 + #$AC16, // $AC16 + #$AC17, // $AC17 + #$AC18, // $AC18 + #$AC19, // $AC19 + #$AC1A, // $AC1A + #$AC1B, // $AC1B + #$AC1C, // $AC1C + #$AC1D, // $AC1D + #$AC1E, // $AC1E + #$AC1F, // $AC1F + #$AC20, // $AC20 + #$AC21, // $AC21 + #$AC22, // $AC22 + #$AC23, // $AC23 + #$AC24, // $AC24 + #$AC25, // $AC25 + #$AC26, // $AC26 + #$AC27, // $AC27 + #$AC28, // $AC28 + #$AC29, // $AC29 + #$AC2A, // $AC2A + #$AC2B, // $AC2B + #$AC2C, // $AC2C + #$AC2D, // $AC2D + #$AC2E, // $AC2E + #$AC2F, // $AC2F + #$AC30, // $AC30 + #$AC31, // $AC31 + #$AC32, // $AC32 + #$AC33, // $AC33 + #$AC34, // $AC34 + #$AC35, // $AC35 + #$AC36, // $AC36 + #$AC37, // $AC37 + #$AC38, // $AC38 + #$AC39, // $AC39 + #$AC3A, // $AC3A + #$AC3B, // $AC3B + #$AC3C, // $AC3C + #$AC3D, // $AC3D + #$AC3E, // $AC3E + #$AC3F, // $AC3F + #$AC40, // $AC40 + #$AC41, // $AC41 + #$AC42, // $AC42 + #$AC43, // $AC43 + #$AC44, // $AC44 + #$AC45, // $AC45 + #$AC46, // $AC46 + #$AC47, // $AC47 + #$AC48, // $AC48 + #$AC49, // $AC49 + #$AC4A, // $AC4A + #$AC4B, // $AC4B + #$AC4C, // $AC4C + #$AC4D, // $AC4D + #$AC4E, // $AC4E + #$AC4F, // $AC4F + #$AC50, // $AC50 + #$AC51, // $AC51 + #$AC52, // $AC52 + #$AC53, // $AC53 + #$AC54, // $AC54 + #$AC55, // $AC55 + #$AC56, // $AC56 + #$AC57, // $AC57 + #$AC58, // $AC58 + #$AC59, // $AC59 + #$AC5A, // $AC5A + #$AC5B, // $AC5B + #$AC5C, // $AC5C + #$AC5D, // $AC5D + #$AC5E, // $AC5E + #$AC5F, // $AC5F + #$AC60, // $AC60 + #$AC61, // $AC61 + #$AC62, // $AC62 + #$AC63, // $AC63 + #$AC64, // $AC64 + #$AC65, // $AC65 + #$AC66, // $AC66 + #$AC67, // $AC67 + #$AC68, // $AC68 + #$AC69, // $AC69 + #$AC6A, // $AC6A + #$AC6B, // $AC6B + #$AC6C, // $AC6C + #$AC6D, // $AC6D + #$AC6E, // $AC6E + #$AC6F, // $AC6F + #$AC70, // $AC70 + #$AC71, // $AC71 + #$AC72, // $AC72 + #$AC73, // $AC73 + #$AC74, // $AC74 + #$AC75, // $AC75 + #$AC76, // $AC76 + #$AC77, // $AC77 + #$AC78, // $AC78 + #$AC79, // $AC79 + #$AC7A, // $AC7A + #$AC7B, // $AC7B + #$AC7C, // $AC7C + #$AC7D, // $AC7D + #$AC7E, // $AC7E + #$AC7F, // $AC7F + #$AC80, // $AC80 + #$AC81, // $AC81 + #$AC82, // $AC82 + #$AC83, // $AC83 + #$AC84, // $AC84 + #$AC85, // $AC85 + #$AC86, // $AC86 + #$AC87, // $AC87 + #$AC88, // $AC88 + #$AC89, // $AC89 + #$AC8A, // $AC8A + #$AC8B, // $AC8B + #$AC8C, // $AC8C + #$AC8D, // $AC8D + #$AC8E, // $AC8E + #$AC8F, // $AC8F + #$AC90, // $AC90 + #$AC91, // $AC91 + #$AC92, // $AC92 + #$AC93, // $AC93 + #$AC94, // $AC94 + #$AC95, // $AC95 + #$AC96, // $AC96 + #$AC97, // $AC97 + #$AC98, // $AC98 + #$AC99, // $AC99 + #$AC9A, // $AC9A + #$AC9B, // $AC9B + #$AC9C, // $AC9C + #$AC9D, // $AC9D + #$AC9E, // $AC9E + #$AC9F, // $AC9F + #$ACA0, // $ACA0 + #$ACA1, // $ACA1 + #$ACA2, // $ACA2 + #$ACA3, // $ACA3 + #$ACA4, // $ACA4 + #$ACA5, // $ACA5 + #$ACA6, // $ACA6 + #$ACA7, // $ACA7 + #$ACA8, // $ACA8 + #$ACA9, // $ACA9 + #$ACAA, // $ACAA + #$ACAB, // $ACAB + #$ACAC, // $ACAC + #$ACAD, // $ACAD + #$ACAE, // $ACAE + #$ACAF, // $ACAF + #$ACB0, // $ACB0 + #$ACB1, // $ACB1 + #$ACB2, // $ACB2 + #$ACB3, // $ACB3 + #$ACB4, // $ACB4 + #$ACB5, // $ACB5 + #$ACB6, // $ACB6 + #$ACB7, // $ACB7 + #$ACB8, // $ACB8 + #$ACB9, // $ACB9 + #$ACBA, // $ACBA + #$ACBB, // $ACBB + #$ACBC, // $ACBC + #$ACBD, // $ACBD + #$ACBE, // $ACBE + #$ACBF, // $ACBF + #$ACC0, // $ACC0 + #$ACC1, // $ACC1 + #$ACC2, // $ACC2 + #$ACC3, // $ACC3 + #$ACC4, // $ACC4 + #$ACC5, // $ACC5 + #$ACC6, // $ACC6 + #$ACC7, // $ACC7 + #$ACC8, // $ACC8 + #$ACC9, // $ACC9 + #$ACCA, // $ACCA + #$ACCB, // $ACCB + #$ACCC, // $ACCC + #$ACCD, // $ACCD + #$ACCE, // $ACCE + #$ACCF, // $ACCF + #$ACD0, // $ACD0 + #$ACD1, // $ACD1 + #$ACD2, // $ACD2 + #$ACD3, // $ACD3 + #$ACD4, // $ACD4 + #$ACD5, // $ACD5 + #$ACD6, // $ACD6 + #$ACD7, // $ACD7 + #$ACD8, // $ACD8 + #$ACD9, // $ACD9 + #$ACDA, // $ACDA + #$ACDB, // $ACDB + #$ACDC, // $ACDC + #$ACDD, // $ACDD + #$ACDE, // $ACDE + #$ACDF, // $ACDF + #$ACE0, // $ACE0 + #$ACE1, // $ACE1 + #$ACE2, // $ACE2 + #$ACE3, // $ACE3 + #$ACE4, // $ACE4 + #$ACE5, // $ACE5 + #$ACE6, // $ACE6 + #$ACE7, // $ACE7 + #$ACE8, // $ACE8 + #$ACE9, // $ACE9 + #$ACEA, // $ACEA + #$ACEB, // $ACEB + #$ACEC, // $ACEC + #$ACED, // $ACED + #$ACEE, // $ACEE + #$ACEF, // $ACEF + #$ACF0, // $ACF0 + #$ACF1, // $ACF1 + #$ACF2, // $ACF2 + #$ACF3, // $ACF3 + #$ACF4, // $ACF4 + #$ACF5, // $ACF5 + #$ACF6, // $ACF6 + #$ACF7, // $ACF7 + #$ACF8, // $ACF8 + #$ACF9, // $ACF9 + #$ACFA, // $ACFA + #$ACFB, // $ACFB + #$ACFC, // $ACFC + #$ACFD, // $ACFD + #$ACFE, // $ACFE + #$ACFF, // $ACFF + #$AD00, // $AD00 + #$AD01, // $AD01 + #$AD02, // $AD02 + #$AD03, // $AD03 + #$AD04, // $AD04 + #$AD05, // $AD05 + #$AD06, // $AD06 + #$AD07, // $AD07 + #$AD08, // $AD08 + #$AD09, // $AD09 + #$AD0A, // $AD0A + #$AD0B, // $AD0B + #$AD0C, // $AD0C + #$AD0D, // $AD0D + #$AD0E, // $AD0E + #$AD0F, // $AD0F + #$AD10, // $AD10 + #$AD11, // $AD11 + #$AD12, // $AD12 + #$AD13, // $AD13 + #$AD14, // $AD14 + #$AD15, // $AD15 + #$AD16, // $AD16 + #$AD17, // $AD17 + #$AD18, // $AD18 + #$AD19, // $AD19 + #$AD1A, // $AD1A + #$AD1B, // $AD1B + #$AD1C, // $AD1C + #$AD1D, // $AD1D + #$AD1E, // $AD1E + #$AD1F, // $AD1F + #$AD20, // $AD20 + #$AD21, // $AD21 + #$AD22, // $AD22 + #$AD23, // $AD23 + #$AD24, // $AD24 + #$AD25, // $AD25 + #$AD26, // $AD26 + #$AD27, // $AD27 + #$AD28, // $AD28 + #$AD29, // $AD29 + #$AD2A, // $AD2A + #$AD2B, // $AD2B + #$AD2C, // $AD2C + #$AD2D, // $AD2D + #$AD2E, // $AD2E + #$AD2F, // $AD2F + #$AD30, // $AD30 + #$AD31, // $AD31 + #$AD32, // $AD32 + #$AD33, // $AD33 + #$AD34, // $AD34 + #$AD35, // $AD35 + #$AD36, // $AD36 + #$AD37, // $AD37 + #$AD38, // $AD38 + #$AD39, // $AD39 + #$AD3A, // $AD3A + #$AD3B, // $AD3B + #$AD3C, // $AD3C + #$AD3D, // $AD3D + #$AD3E, // $AD3E + #$AD3F, // $AD3F + #$AD40, // $AD40 + #$AD41, // $AD41 + #$AD42, // $AD42 + #$AD43, // $AD43 + #$AD44, // $AD44 + #$AD45, // $AD45 + #$AD46, // $AD46 + #$AD47, // $AD47 + #$AD48, // $AD48 + #$AD49, // $AD49 + #$AD4A, // $AD4A + #$AD4B, // $AD4B + #$AD4C, // $AD4C + #$AD4D, // $AD4D + #$AD4E, // $AD4E + #$AD4F, // $AD4F + #$AD50, // $AD50 + #$AD51, // $AD51 + #$AD52, // $AD52 + #$AD53, // $AD53 + #$AD54, // $AD54 + #$AD55, // $AD55 + #$AD56, // $AD56 + #$AD57, // $AD57 + #$AD58, // $AD58 + #$AD59, // $AD59 + #$AD5A, // $AD5A + #$AD5B, // $AD5B + #$AD5C, // $AD5C + #$AD5D, // $AD5D + #$AD5E, // $AD5E + #$AD5F, // $AD5F + #$AD60, // $AD60 + #$AD61, // $AD61 + #$AD62, // $AD62 + #$AD63, // $AD63 + #$AD64, // $AD64 + #$AD65, // $AD65 + #$AD66, // $AD66 + #$AD67, // $AD67 + #$AD68, // $AD68 + #$AD69, // $AD69 + #$AD6A, // $AD6A + #$AD6B, // $AD6B + #$AD6C, // $AD6C + #$AD6D, // $AD6D + #$AD6E, // $AD6E + #$AD6F, // $AD6F + #$AD70, // $AD70 + #$AD71, // $AD71 + #$AD72, // $AD72 + #$AD73, // $AD73 + #$AD74, // $AD74 + #$AD75, // $AD75 + #$AD76, // $AD76 + #$AD77, // $AD77 + #$AD78, // $AD78 + #$AD79, // $AD79 + #$AD7A, // $AD7A + #$AD7B, // $AD7B + #$AD7C, // $AD7C + #$AD7D, // $AD7D + #$AD7E, // $AD7E + #$AD7F, // $AD7F + #$AD80, // $AD80 + #$AD81, // $AD81 + #$AD82, // $AD82 + #$AD83, // $AD83 + #$AD84, // $AD84 + #$AD85, // $AD85 + #$AD86, // $AD86 + #$AD87, // $AD87 + #$AD88, // $AD88 + #$AD89, // $AD89 + #$AD8A, // $AD8A + #$AD8B, // $AD8B + #$AD8C, // $AD8C + #$AD8D, // $AD8D + #$AD8E, // $AD8E + #$AD8F, // $AD8F + #$AD90, // $AD90 + #$AD91, // $AD91 + #$AD92, // $AD92 + #$AD93, // $AD93 + #$AD94, // $AD94 + #$AD95, // $AD95 + #$AD96, // $AD96 + #$AD97, // $AD97 + #$AD98, // $AD98 + #$AD99, // $AD99 + #$AD9A, // $AD9A + #$AD9B, // $AD9B + #$AD9C, // $AD9C + #$AD9D, // $AD9D + #$AD9E, // $AD9E + #$AD9F, // $AD9F + #$ADA0, // $ADA0 + #$ADA1, // $ADA1 + #$ADA2, // $ADA2 + #$ADA3, // $ADA3 + #$ADA4, // $ADA4 + #$ADA5, // $ADA5 + #$ADA6, // $ADA6 + #$ADA7, // $ADA7 + #$ADA8, // $ADA8 + #$ADA9, // $ADA9 + #$ADAA, // $ADAA + #$ADAB, // $ADAB + #$ADAC, // $ADAC + #$ADAD, // $ADAD + #$ADAE, // $ADAE + #$ADAF, // $ADAF + #$ADB0, // $ADB0 + #$ADB1, // $ADB1 + #$ADB2, // $ADB2 + #$ADB3, // $ADB3 + #$ADB4, // $ADB4 + #$ADB5, // $ADB5 + #$ADB6, // $ADB6 + #$ADB7, // $ADB7 + #$ADB8, // $ADB8 + #$ADB9, // $ADB9 + #$ADBA, // $ADBA + #$ADBB, // $ADBB + #$ADBC, // $ADBC + #$ADBD, // $ADBD + #$ADBE, // $ADBE + #$ADBF, // $ADBF + #$ADC0, // $ADC0 + #$ADC1, // $ADC1 + #$ADC2, // $ADC2 + #$ADC3, // $ADC3 + #$ADC4, // $ADC4 + #$ADC5, // $ADC5 + #$ADC6, // $ADC6 + #$ADC7, // $ADC7 + #$ADC8, // $ADC8 + #$ADC9, // $ADC9 + #$ADCA, // $ADCA + #$ADCB, // $ADCB + #$ADCC, // $ADCC + #$ADCD, // $ADCD + #$ADCE, // $ADCE + #$ADCF, // $ADCF + #$ADD0, // $ADD0 + #$ADD1, // $ADD1 + #$ADD2, // $ADD2 + #$ADD3, // $ADD3 + #$ADD4, // $ADD4 + #$ADD5, // $ADD5 + #$ADD6, // $ADD6 + #$ADD7, // $ADD7 + #$ADD8, // $ADD8 + #$ADD9, // $ADD9 + #$ADDA, // $ADDA + #$ADDB, // $ADDB + #$ADDC, // $ADDC + #$ADDD, // $ADDD + #$ADDE, // $ADDE + #$ADDF, // $ADDF + #$ADE0, // $ADE0 + #$ADE1, // $ADE1 + #$ADE2, // $ADE2 + #$ADE3, // $ADE3 + #$ADE4, // $ADE4 + #$ADE5, // $ADE5 + #$ADE6, // $ADE6 + #$ADE7, // $ADE7 + #$ADE8, // $ADE8 + #$ADE9, // $ADE9 + #$ADEA, // $ADEA + #$ADEB, // $ADEB + #$ADEC, // $ADEC + #$ADED, // $ADED + #$ADEE, // $ADEE + #$ADEF, // $ADEF + #$ADF0, // $ADF0 + #$ADF1, // $ADF1 + #$ADF2, // $ADF2 + #$ADF3, // $ADF3 + #$ADF4, // $ADF4 + #$ADF5, // $ADF5 + #$ADF6, // $ADF6 + #$ADF7, // $ADF7 + #$ADF8, // $ADF8 + #$ADF9, // $ADF9 + #$ADFA, // $ADFA + #$ADFB, // $ADFB + #$ADFC, // $ADFC + #$ADFD, // $ADFD + #$ADFE, // $ADFE + #$ADFF, // $ADFF + #$AE00, // $AE00 + #$AE01, // $AE01 + #$AE02, // $AE02 + #$AE03, // $AE03 + #$AE04, // $AE04 + #$AE05, // $AE05 + #$AE06, // $AE06 + #$AE07, // $AE07 + #$AE08, // $AE08 + #$AE09, // $AE09 + #$AE0A, // $AE0A + #$AE0B, // $AE0B + #$AE0C, // $AE0C + #$AE0D, // $AE0D + #$AE0E, // $AE0E + #$AE0F, // $AE0F + #$AE10, // $AE10 + #$AE11, // $AE11 + #$AE12, // $AE12 + #$AE13, // $AE13 + #$AE14, // $AE14 + #$AE15, // $AE15 + #$AE16, // $AE16 + #$AE17, // $AE17 + #$AE18, // $AE18 + #$AE19, // $AE19 + #$AE1A, // $AE1A + #$AE1B, // $AE1B + #$AE1C, // $AE1C + #$AE1D, // $AE1D + #$AE1E, // $AE1E + #$AE1F, // $AE1F + #$AE20, // $AE20 + #$AE21, // $AE21 + #$AE22, // $AE22 + #$AE23, // $AE23 + #$AE24, // $AE24 + #$AE25, // $AE25 + #$AE26, // $AE26 + #$AE27, // $AE27 + #$AE28, // $AE28 + #$AE29, // $AE29 + #$AE2A, // $AE2A + #$AE2B, // $AE2B + #$AE2C, // $AE2C + #$AE2D, // $AE2D + #$AE2E, // $AE2E + #$AE2F, // $AE2F + #$AE30, // $AE30 + #$AE31, // $AE31 + #$AE32, // $AE32 + #$AE33, // $AE33 + #$AE34, // $AE34 + #$AE35, // $AE35 + #$AE36, // $AE36 + #$AE37, // $AE37 + #$AE38, // $AE38 + #$AE39, // $AE39 + #$AE3A, // $AE3A + #$AE3B, // $AE3B + #$AE3C, // $AE3C + #$AE3D, // $AE3D + #$AE3E, // $AE3E + #$AE3F, // $AE3F + #$AE40, // $AE40 + #$AE41, // $AE41 + #$AE42, // $AE42 + #$AE43, // $AE43 + #$AE44, // $AE44 + #$AE45, // $AE45 + #$AE46, // $AE46 + #$AE47, // $AE47 + #$AE48, // $AE48 + #$AE49, // $AE49 + #$AE4A, // $AE4A + #$AE4B, // $AE4B + #$AE4C, // $AE4C + #$AE4D, // $AE4D + #$AE4E, // $AE4E + #$AE4F, // $AE4F + #$AE50, // $AE50 + #$AE51, // $AE51 + #$AE52, // $AE52 + #$AE53, // $AE53 + #$AE54, // $AE54 + #$AE55, // $AE55 + #$AE56, // $AE56 + #$AE57, // $AE57 + #$AE58, // $AE58 + #$AE59, // $AE59 + #$AE5A, // $AE5A + #$AE5B, // $AE5B + #$AE5C, // $AE5C + #$AE5D, // $AE5D + #$AE5E, // $AE5E + #$AE5F, // $AE5F + #$AE60, // $AE60 + #$AE61, // $AE61 + #$AE62, // $AE62 + #$AE63, // $AE63 + #$AE64, // $AE64 + #$AE65, // $AE65 + #$AE66, // $AE66 + #$AE67, // $AE67 + #$AE68, // $AE68 + #$AE69, // $AE69 + #$AE6A, // $AE6A + #$AE6B, // $AE6B + #$AE6C, // $AE6C + #$AE6D, // $AE6D + #$AE6E, // $AE6E + #$AE6F, // $AE6F + #$AE70, // $AE70 + #$AE71, // $AE71 + #$AE72, // $AE72 + #$AE73, // $AE73 + #$AE74, // $AE74 + #$AE75, // $AE75 + #$AE76, // $AE76 + #$AE77, // $AE77 + #$AE78, // $AE78 + #$AE79, // $AE79 + #$AE7A, // $AE7A + #$AE7B, // $AE7B + #$AE7C, // $AE7C + #$AE7D, // $AE7D + #$AE7E, // $AE7E + #$AE7F, // $AE7F + #$AE80, // $AE80 + #$AE81, // $AE81 + #$AE82, // $AE82 + #$AE83, // $AE83 + #$AE84, // $AE84 + #$AE85, // $AE85 + #$AE86, // $AE86 + #$AE87, // $AE87 + #$AE88, // $AE88 + #$AE89, // $AE89 + #$AE8A, // $AE8A + #$AE8B, // $AE8B + #$AE8C, // $AE8C + #$AE8D, // $AE8D + #$AE8E, // $AE8E + #$AE8F, // $AE8F + #$AE90, // $AE90 + #$AE91, // $AE91 + #$AE92, // $AE92 + #$AE93, // $AE93 + #$AE94, // $AE94 + #$AE95, // $AE95 + #$AE96, // $AE96 + #$AE97, // $AE97 + #$AE98, // $AE98 + #$AE99, // $AE99 + #$AE9A, // $AE9A + #$AE9B, // $AE9B + #$AE9C, // $AE9C + #$AE9D, // $AE9D + #$AE9E, // $AE9E + #$AE9F, // $AE9F + #$AEA0, // $AEA0 + #$AEA1, // $AEA1 + #$AEA2, // $AEA2 + #$AEA3, // $AEA3 + #$AEA4, // $AEA4 + #$AEA5, // $AEA5 + #$AEA6, // $AEA6 + #$AEA7, // $AEA7 + #$AEA8, // $AEA8 + #$AEA9, // $AEA9 + #$AEAA, // $AEAA + #$AEAB, // $AEAB + #$AEAC, // $AEAC + #$AEAD, // $AEAD + #$AEAE, // $AEAE + #$AEAF, // $AEAF + #$AEB0, // $AEB0 + #$AEB1, // $AEB1 + #$AEB2, // $AEB2 + #$AEB3, // $AEB3 + #$AEB4, // $AEB4 + #$AEB5, // $AEB5 + #$AEB6, // $AEB6 + #$AEB7, // $AEB7 + #$AEB8, // $AEB8 + #$AEB9, // $AEB9 + #$AEBA, // $AEBA + #$AEBB, // $AEBB + #$AEBC, // $AEBC + #$AEBD, // $AEBD + #$AEBE, // $AEBE + #$AEBF, // $AEBF + #$AEC0, // $AEC0 + #$AEC1, // $AEC1 + #$AEC2, // $AEC2 + #$AEC3, // $AEC3 + #$AEC4, // $AEC4 + #$AEC5, // $AEC5 + #$AEC6, // $AEC6 + #$AEC7, // $AEC7 + #$AEC8, // $AEC8 + #$AEC9, // $AEC9 + #$AECA, // $AECA + #$AECB, // $AECB + #$AECC, // $AECC + #$AECD, // $AECD + #$AECE, // $AECE + #$AECF, // $AECF + #$AED0, // $AED0 + #$AED1, // $AED1 + #$AED2, // $AED2 + #$AED3, // $AED3 + #$AED4, // $AED4 + #$AED5, // $AED5 + #$AED6, // $AED6 + #$AED7, // $AED7 + #$AED8, // $AED8 + #$AED9, // $AED9 + #$AEDA, // $AEDA + #$AEDB, // $AEDB + #$AEDC, // $AEDC + #$AEDD, // $AEDD + #$AEDE, // $AEDE + #$AEDF, // $AEDF + #$AEE0, // $AEE0 + #$AEE1, // $AEE1 + #$AEE2, // $AEE2 + #$AEE3, // $AEE3 + #$AEE4, // $AEE4 + #$AEE5, // $AEE5 + #$AEE6, // $AEE6 + #$AEE7, // $AEE7 + #$AEE8, // $AEE8 + #$AEE9, // $AEE9 + #$AEEA, // $AEEA + #$AEEB, // $AEEB + #$AEEC, // $AEEC + #$AEED, // $AEED + #$AEEE, // $AEEE + #$AEEF, // $AEEF + #$AEF0, // $AEF0 + #$AEF1, // $AEF1 + #$AEF2, // $AEF2 + #$AEF3, // $AEF3 + #$AEF4, // $AEF4 + #$AEF5, // $AEF5 + #$AEF6, // $AEF6 + #$AEF7, // $AEF7 + #$AEF8, // $AEF8 + #$AEF9, // $AEF9 + #$AEFA, // $AEFA + #$AEFB, // $AEFB + #$AEFC, // $AEFC + #$AEFD, // $AEFD + #$AEFE, // $AEFE + #$AEFF, // $AEFF + #$AF00, // $AF00 + #$AF01, // $AF01 + #$AF02, // $AF02 + #$AF03, // $AF03 + #$AF04, // $AF04 + #$AF05, // $AF05 + #$AF06, // $AF06 + #$AF07, // $AF07 + #$AF08, // $AF08 + #$AF09, // $AF09 + #$AF0A, // $AF0A + #$AF0B, // $AF0B + #$AF0C, // $AF0C + #$AF0D, // $AF0D + #$AF0E, // $AF0E + #$AF0F, // $AF0F + #$AF10, // $AF10 + #$AF11, // $AF11 + #$AF12, // $AF12 + #$AF13, // $AF13 + #$AF14, // $AF14 + #$AF15, // $AF15 + #$AF16, // $AF16 + #$AF17, // $AF17 + #$AF18, // $AF18 + #$AF19, // $AF19 + #$AF1A, // $AF1A + #$AF1B, // $AF1B + #$AF1C, // $AF1C + #$AF1D, // $AF1D + #$AF1E, // $AF1E + #$AF1F, // $AF1F + #$AF20, // $AF20 + #$AF21, // $AF21 + #$AF22, // $AF22 + #$AF23, // $AF23 + #$AF24, // $AF24 + #$AF25, // $AF25 + #$AF26, // $AF26 + #$AF27, // $AF27 + #$AF28, // $AF28 + #$AF29, // $AF29 + #$AF2A, // $AF2A + #$AF2B, // $AF2B + #$AF2C, // $AF2C + #$AF2D, // $AF2D + #$AF2E, // $AF2E + #$AF2F, // $AF2F + #$AF30, // $AF30 + #$AF31, // $AF31 + #$AF32, // $AF32 + #$AF33, // $AF33 + #$AF34, // $AF34 + #$AF35, // $AF35 + #$AF36, // $AF36 + #$AF37, // $AF37 + #$AF38, // $AF38 + #$AF39, // $AF39 + #$AF3A, // $AF3A + #$AF3B, // $AF3B + #$AF3C, // $AF3C + #$AF3D, // $AF3D + #$AF3E, // $AF3E + #$AF3F, // $AF3F + #$AF40, // $AF40 + #$AF41, // $AF41 + #$AF42, // $AF42 + #$AF43, // $AF43 + #$AF44, // $AF44 + #$AF45, // $AF45 + #$AF46, // $AF46 + #$AF47, // $AF47 + #$AF48, // $AF48 + #$AF49, // $AF49 + #$AF4A, // $AF4A + #$AF4B, // $AF4B + #$AF4C, // $AF4C + #$AF4D, // $AF4D + #$AF4E, // $AF4E + #$AF4F, // $AF4F + #$AF50, // $AF50 + #$AF51, // $AF51 + #$AF52, // $AF52 + #$AF53, // $AF53 + #$AF54, // $AF54 + #$AF55, // $AF55 + #$AF56, // $AF56 + #$AF57, // $AF57 + #$AF58, // $AF58 + #$AF59, // $AF59 + #$AF5A, // $AF5A + #$AF5B, // $AF5B + #$AF5C, // $AF5C + #$AF5D, // $AF5D + #$AF5E, // $AF5E + #$AF5F, // $AF5F + #$AF60, // $AF60 + #$AF61, // $AF61 + #$AF62, // $AF62 + #$AF63, // $AF63 + #$AF64, // $AF64 + #$AF65, // $AF65 + #$AF66, // $AF66 + #$AF67, // $AF67 + #$AF68, // $AF68 + #$AF69, // $AF69 + #$AF6A, // $AF6A + #$AF6B, // $AF6B + #$AF6C, // $AF6C + #$AF6D, // $AF6D + #$AF6E, // $AF6E + #$AF6F, // $AF6F + #$AF70, // $AF70 + #$AF71, // $AF71 + #$AF72, // $AF72 + #$AF73, // $AF73 + #$AF74, // $AF74 + #$AF75, // $AF75 + #$AF76, // $AF76 + #$AF77, // $AF77 + #$AF78, // $AF78 + #$AF79, // $AF79 + #$AF7A, // $AF7A + #$AF7B, // $AF7B + #$AF7C, // $AF7C + #$AF7D, // $AF7D + #$AF7E, // $AF7E + #$AF7F, // $AF7F + #$AF80, // $AF80 + #$AF81, // $AF81 + #$AF82, // $AF82 + #$AF83, // $AF83 + #$AF84, // $AF84 + #$AF85, // $AF85 + #$AF86, // $AF86 + #$AF87, // $AF87 + #$AF88, // $AF88 + #$AF89, // $AF89 + #$AF8A, // $AF8A + #$AF8B, // $AF8B + #$AF8C, // $AF8C + #$AF8D, // $AF8D + #$AF8E, // $AF8E + #$AF8F, // $AF8F + #$AF90, // $AF90 + #$AF91, // $AF91 + #$AF92, // $AF92 + #$AF93, // $AF93 + #$AF94, // $AF94 + #$AF95, // $AF95 + #$AF96, // $AF96 + #$AF97, // $AF97 + #$AF98, // $AF98 + #$AF99, // $AF99 + #$AF9A, // $AF9A + #$AF9B, // $AF9B + #$AF9C, // $AF9C + #$AF9D, // $AF9D + #$AF9E, // $AF9E + #$AF9F, // $AF9F + #$AFA0, // $AFA0 + #$AFA1, // $AFA1 + #$AFA2, // $AFA2 + #$AFA3, // $AFA3 + #$AFA4, // $AFA4 + #$AFA5, // $AFA5 + #$AFA6, // $AFA6 + #$AFA7, // $AFA7 + #$AFA8, // $AFA8 + #$AFA9, // $AFA9 + #$AFAA, // $AFAA + #$AFAB, // $AFAB + #$AFAC, // $AFAC + #$AFAD, // $AFAD + #$AFAE, // $AFAE + #$AFAF, // $AFAF + #$AFB0, // $AFB0 + #$AFB1, // $AFB1 + #$AFB2, // $AFB2 + #$AFB3, // $AFB3 + #$AFB4, // $AFB4 + #$AFB5, // $AFB5 + #$AFB6, // $AFB6 + #$AFB7, // $AFB7 + #$AFB8, // $AFB8 + #$AFB9, // $AFB9 + #$AFBA, // $AFBA + #$AFBB, // $AFBB + #$AFBC, // $AFBC + #$AFBD, // $AFBD + #$AFBE, // $AFBE + #$AFBF, // $AFBF + #$AFC0, // $AFC0 + #$AFC1, // $AFC1 + #$AFC2, // $AFC2 + #$AFC3, // $AFC3 + #$AFC4, // $AFC4 + #$AFC5, // $AFC5 + #$AFC6, // $AFC6 + #$AFC7, // $AFC7 + #$AFC8, // $AFC8 + #$AFC9, // $AFC9 + #$AFCA, // $AFCA + #$AFCB, // $AFCB + #$AFCC, // $AFCC + #$AFCD, // $AFCD + #$AFCE, // $AFCE + #$AFCF, // $AFCF + #$AFD0, // $AFD0 + #$AFD1, // $AFD1 + #$AFD2, // $AFD2 + #$AFD3, // $AFD3 + #$AFD4, // $AFD4 + #$AFD5, // $AFD5 + #$AFD6, // $AFD6 + #$AFD7, // $AFD7 + #$AFD8, // $AFD8 + #$AFD9, // $AFD9 + #$AFDA, // $AFDA + #$AFDB, // $AFDB + #$AFDC, // $AFDC + #$AFDD, // $AFDD + #$AFDE, // $AFDE + #$AFDF, // $AFDF + #$AFE0, // $AFE0 + #$AFE1, // $AFE1 + #$AFE2, // $AFE2 + #$AFE3, // $AFE3 + #$AFE4, // $AFE4 + #$AFE5, // $AFE5 + #$AFE6, // $AFE6 + #$AFE7, // $AFE7 + #$AFE8, // $AFE8 + #$AFE9, // $AFE9 + #$AFEA, // $AFEA + #$AFEB, // $AFEB + #$AFEC, // $AFEC + #$AFED, // $AFED + #$AFEE, // $AFEE + #$AFEF, // $AFEF + #$AFF0, // $AFF0 + #$AFF1, // $AFF1 + #$AFF2, // $AFF2 + #$AFF3, // $AFF3 + #$AFF4, // $AFF4 + #$AFF5, // $AFF5 + #$AFF6, // $AFF6 + #$AFF7, // $AFF7 + #$AFF8, // $AFF8 + #$AFF9, // $AFF9 + #$AFFA, // $AFFA + #$AFFB, // $AFFB + #$AFFC, // $AFFC + #$AFFD, // $AFFD + #$AFFE, // $AFFE + #$AFFF, // $AFFF + #$B000, // $B000 + #$B001, // $B001 + #$B002, // $B002 + #$B003, // $B003 + #$B004, // $B004 + #$B005, // $B005 + #$B006, // $B006 + #$B007, // $B007 + #$B008, // $B008 + #$B009, // $B009 + #$B00A, // $B00A + #$B00B, // $B00B + #$B00C, // $B00C + #$B00D, // $B00D + #$B00E, // $B00E + #$B00F, // $B00F + #$B010, // $B010 + #$B011, // $B011 + #$B012, // $B012 + #$B013, // $B013 + #$B014, // $B014 + #$B015, // $B015 + #$B016, // $B016 + #$B017, // $B017 + #$B018, // $B018 + #$B019, // $B019 + #$B01A, // $B01A + #$B01B, // $B01B + #$B01C, // $B01C + #$B01D, // $B01D + #$B01E, // $B01E + #$B01F, // $B01F + #$B020, // $B020 + #$B021, // $B021 + #$B022, // $B022 + #$B023, // $B023 + #$B024, // $B024 + #$B025, // $B025 + #$B026, // $B026 + #$B027, // $B027 + #$B028, // $B028 + #$B029, // $B029 + #$B02A, // $B02A + #$B02B, // $B02B + #$B02C, // $B02C + #$B02D, // $B02D + #$B02E, // $B02E + #$B02F, // $B02F + #$B030, // $B030 + #$B031, // $B031 + #$B032, // $B032 + #$B033, // $B033 + #$B034, // $B034 + #$B035, // $B035 + #$B036, // $B036 + #$B037, // $B037 + #$B038, // $B038 + #$B039, // $B039 + #$B03A, // $B03A + #$B03B, // $B03B + #$B03C, // $B03C + #$B03D, // $B03D + #$B03E, // $B03E + #$B03F, // $B03F + #$B040, // $B040 + #$B041, // $B041 + #$B042, // $B042 + #$B043, // $B043 + #$B044, // $B044 + #$B045, // $B045 + #$B046, // $B046 + #$B047, // $B047 + #$B048, // $B048 + #$B049, // $B049 + #$B04A, // $B04A + #$B04B, // $B04B + #$B04C, // $B04C + #$B04D, // $B04D + #$B04E, // $B04E + #$B04F, // $B04F + #$B050, // $B050 + #$B051, // $B051 + #$B052, // $B052 + #$B053, // $B053 + #$B054, // $B054 + #$B055, // $B055 + #$B056, // $B056 + #$B057, // $B057 + #$B058, // $B058 + #$B059, // $B059 + #$B05A, // $B05A + #$B05B, // $B05B + #$B05C, // $B05C + #$B05D, // $B05D + #$B05E, // $B05E + #$B05F, // $B05F + #$B060, // $B060 + #$B061, // $B061 + #$B062, // $B062 + #$B063, // $B063 + #$B064, // $B064 + #$B065, // $B065 + #$B066, // $B066 + #$B067, // $B067 + #$B068, // $B068 + #$B069, // $B069 + #$B06A, // $B06A + #$B06B, // $B06B + #$B06C, // $B06C + #$B06D, // $B06D + #$B06E, // $B06E + #$B06F, // $B06F + #$B070, // $B070 + #$B071, // $B071 + #$B072, // $B072 + #$B073, // $B073 + #$B074, // $B074 + #$B075, // $B075 + #$B076, // $B076 + #$B077, // $B077 + #$B078, // $B078 + #$B079, // $B079 + #$B07A, // $B07A + #$B07B, // $B07B + #$B07C, // $B07C + #$B07D, // $B07D + #$B07E, // $B07E + #$B07F, // $B07F + #$B080, // $B080 + #$B081, // $B081 + #$B082, // $B082 + #$B083, // $B083 + #$B084, // $B084 + #$B085, // $B085 + #$B086, // $B086 + #$B087, // $B087 + #$B088, // $B088 + #$B089, // $B089 + #$B08A, // $B08A + #$B08B, // $B08B + #$B08C, // $B08C + #$B08D, // $B08D + #$B08E, // $B08E + #$B08F, // $B08F + #$B090, // $B090 + #$B091, // $B091 + #$B092, // $B092 + #$B093, // $B093 + #$B094, // $B094 + #$B095, // $B095 + #$B096, // $B096 + #$B097, // $B097 + #$B098, // $B098 + #$B099, // $B099 + #$B09A, // $B09A + #$B09B, // $B09B + #$B09C, // $B09C + #$B09D, // $B09D + #$B09E, // $B09E + #$B09F, // $B09F + #$B0A0, // $B0A0 + #$B0A1, // $B0A1 + #$B0A2, // $B0A2 + #$B0A3, // $B0A3 + #$B0A4, // $B0A4 + #$B0A5, // $B0A5 + #$B0A6, // $B0A6 + #$B0A7, // $B0A7 + #$B0A8, // $B0A8 + #$B0A9, // $B0A9 + #$B0AA, // $B0AA + #$B0AB, // $B0AB + #$B0AC, // $B0AC + #$B0AD, // $B0AD + #$B0AE, // $B0AE + #$B0AF, // $B0AF + #$B0B0, // $B0B0 + #$B0B1, // $B0B1 + #$B0B2, // $B0B2 + #$B0B3, // $B0B3 + #$B0B4, // $B0B4 + #$B0B5, // $B0B5 + #$B0B6, // $B0B6 + #$B0B7, // $B0B7 + #$B0B8, // $B0B8 + #$B0B9, // $B0B9 + #$B0BA, // $B0BA + #$B0BB, // $B0BB + #$B0BC, // $B0BC + #$B0BD, // $B0BD + #$B0BE, // $B0BE + #$B0BF, // $B0BF + #$B0C0, // $B0C0 + #$B0C1, // $B0C1 + #$B0C2, // $B0C2 + #$B0C3, // $B0C3 + #$B0C4, // $B0C4 + #$B0C5, // $B0C5 + #$B0C6, // $B0C6 + #$B0C7, // $B0C7 + #$B0C8, // $B0C8 + #$B0C9, // $B0C9 + #$B0CA, // $B0CA + #$B0CB, // $B0CB + #$B0CC, // $B0CC + #$B0CD, // $B0CD + #$B0CE, // $B0CE + #$B0CF, // $B0CF + #$B0D0, // $B0D0 + #$B0D1, // $B0D1 + #$B0D2, // $B0D2 + #$B0D3, // $B0D3 + #$B0D4, // $B0D4 + #$B0D5, // $B0D5 + #$B0D6, // $B0D6 + #$B0D7, // $B0D7 + #$B0D8, // $B0D8 + #$B0D9, // $B0D9 + #$B0DA, // $B0DA + #$B0DB, // $B0DB + #$B0DC, // $B0DC + #$B0DD, // $B0DD + #$B0DE, // $B0DE + #$B0DF, // $B0DF + #$B0E0, // $B0E0 + #$B0E1, // $B0E1 + #$B0E2, // $B0E2 + #$B0E3, // $B0E3 + #$B0E4, // $B0E4 + #$B0E5, // $B0E5 + #$B0E6, // $B0E6 + #$B0E7, // $B0E7 + #$B0E8, // $B0E8 + #$B0E9, // $B0E9 + #$B0EA, // $B0EA + #$B0EB, // $B0EB + #$B0EC, // $B0EC + #$B0ED, // $B0ED + #$B0EE, // $B0EE + #$B0EF, // $B0EF + #$B0F0, // $B0F0 + #$B0F1, // $B0F1 + #$B0F2, // $B0F2 + #$B0F3, // $B0F3 + #$B0F4, // $B0F4 + #$B0F5, // $B0F5 + #$B0F6, // $B0F6 + #$B0F7, // $B0F7 + #$B0F8, // $B0F8 + #$B0F9, // $B0F9 + #$B0FA, // $B0FA + #$B0FB, // $B0FB + #$B0FC, // $B0FC + #$B0FD, // $B0FD + #$B0FE, // $B0FE + #$B0FF, // $B0FF + #$B100, // $B100 + #$B101, // $B101 + #$B102, // $B102 + #$B103, // $B103 + #$B104, // $B104 + #$B105, // $B105 + #$B106, // $B106 + #$B107, // $B107 + #$B108, // $B108 + #$B109, // $B109 + #$B10A, // $B10A + #$B10B, // $B10B + #$B10C, // $B10C + #$B10D, // $B10D + #$B10E, // $B10E + #$B10F, // $B10F + #$B110, // $B110 + #$B111, // $B111 + #$B112, // $B112 + #$B113, // $B113 + #$B114, // $B114 + #$B115, // $B115 + #$B116, // $B116 + #$B117, // $B117 + #$B118, // $B118 + #$B119, // $B119 + #$B11A, // $B11A + #$B11B, // $B11B + #$B11C, // $B11C + #$B11D, // $B11D + #$B11E, // $B11E + #$B11F, // $B11F + #$B120, // $B120 + #$B121, // $B121 + #$B122, // $B122 + #$B123, // $B123 + #$B124, // $B124 + #$B125, // $B125 + #$B126, // $B126 + #$B127, // $B127 + #$B128, // $B128 + #$B129, // $B129 + #$B12A, // $B12A + #$B12B, // $B12B + #$B12C, // $B12C + #$B12D, // $B12D + #$B12E, // $B12E + #$B12F, // $B12F + #$B130, // $B130 + #$B131, // $B131 + #$B132, // $B132 + #$B133, // $B133 + #$B134, // $B134 + #$B135, // $B135 + #$B136, // $B136 + #$B137, // $B137 + #$B138, // $B138 + #$B139, // $B139 + #$B13A, // $B13A + #$B13B, // $B13B + #$B13C, // $B13C + #$B13D, // $B13D + #$B13E, // $B13E + #$B13F, // $B13F + #$B140, // $B140 + #$B141, // $B141 + #$B142, // $B142 + #$B143, // $B143 + #$B144, // $B144 + #$B145, // $B145 + #$B146, // $B146 + #$B147, // $B147 + #$B148, // $B148 + #$B149, // $B149 + #$B14A, // $B14A + #$B14B, // $B14B + #$B14C, // $B14C + #$B14D, // $B14D + #$B14E, // $B14E + #$B14F, // $B14F + #$B150, // $B150 + #$B151, // $B151 + #$B152, // $B152 + #$B153, // $B153 + #$B154, // $B154 + #$B155, // $B155 + #$B156, // $B156 + #$B157, // $B157 + #$B158, // $B158 + #$B159, // $B159 + #$B15A, // $B15A + #$B15B, // $B15B + #$B15C, // $B15C + #$B15D, // $B15D + #$B15E, // $B15E + #$B15F, // $B15F + #$B160, // $B160 + #$B161, // $B161 + #$B162, // $B162 + #$B163, // $B163 + #$B164, // $B164 + #$B165, // $B165 + #$B166, // $B166 + #$B167, // $B167 + #$B168, // $B168 + #$B169, // $B169 + #$B16A, // $B16A + #$B16B, // $B16B + #$B16C, // $B16C + #$B16D, // $B16D + #$B16E, // $B16E + #$B16F, // $B16F + #$B170, // $B170 + #$B171, // $B171 + #$B172, // $B172 + #$B173, // $B173 + #$B174, // $B174 + #$B175, // $B175 + #$B176, // $B176 + #$B177, // $B177 + #$B178, // $B178 + #$B179, // $B179 + #$B17A, // $B17A + #$B17B, // $B17B + #$B17C, // $B17C + #$B17D, // $B17D + #$B17E, // $B17E + #$B17F, // $B17F + #$B180, // $B180 + #$B181, // $B181 + #$B182, // $B182 + #$B183, // $B183 + #$B184, // $B184 + #$B185, // $B185 + #$B186, // $B186 + #$B187, // $B187 + #$B188, // $B188 + #$B189, // $B189 + #$B18A, // $B18A + #$B18B, // $B18B + #$B18C, // $B18C + #$B18D, // $B18D + #$B18E, // $B18E + #$B18F, // $B18F + #$B190, // $B190 + #$B191, // $B191 + #$B192, // $B192 + #$B193, // $B193 + #$B194, // $B194 + #$B195, // $B195 + #$B196, // $B196 + #$B197, // $B197 + #$B198, // $B198 + #$B199, // $B199 + #$B19A, // $B19A + #$B19B, // $B19B + #$B19C, // $B19C + #$B19D, // $B19D + #$B19E, // $B19E + #$B19F, // $B19F + #$B1A0, // $B1A0 + #$B1A1, // $B1A1 + #$B1A2, // $B1A2 + #$B1A3, // $B1A3 + #$B1A4, // $B1A4 + #$B1A5, // $B1A5 + #$B1A6, // $B1A6 + #$B1A7, // $B1A7 + #$B1A8, // $B1A8 + #$B1A9, // $B1A9 + #$B1AA, // $B1AA + #$B1AB, // $B1AB + #$B1AC, // $B1AC + #$B1AD, // $B1AD + #$B1AE, // $B1AE + #$B1AF, // $B1AF + #$B1B0, // $B1B0 + #$B1B1, // $B1B1 + #$B1B2, // $B1B2 + #$B1B3, // $B1B3 + #$B1B4, // $B1B4 + #$B1B5, // $B1B5 + #$B1B6, // $B1B6 + #$B1B7, // $B1B7 + #$B1B8, // $B1B8 + #$B1B9, // $B1B9 + #$B1BA, // $B1BA + #$B1BB, // $B1BB + #$B1BC, // $B1BC + #$B1BD, // $B1BD + #$B1BE, // $B1BE + #$B1BF, // $B1BF + #$B1C0, // $B1C0 + #$B1C1, // $B1C1 + #$B1C2, // $B1C2 + #$B1C3, // $B1C3 + #$B1C4, // $B1C4 + #$B1C5, // $B1C5 + #$B1C6, // $B1C6 + #$B1C7, // $B1C7 + #$B1C8, // $B1C8 + #$B1C9, // $B1C9 + #$B1CA, // $B1CA + #$B1CB, // $B1CB + #$B1CC, // $B1CC + #$B1CD, // $B1CD + #$B1CE, // $B1CE + #$B1CF, // $B1CF + #$B1D0, // $B1D0 + #$B1D1, // $B1D1 + #$B1D2, // $B1D2 + #$B1D3, // $B1D3 + #$B1D4, // $B1D4 + #$B1D5, // $B1D5 + #$B1D6, // $B1D6 + #$B1D7, // $B1D7 + #$B1D8, // $B1D8 + #$B1D9, // $B1D9 + #$B1DA, // $B1DA + #$B1DB, // $B1DB + #$B1DC, // $B1DC + #$B1DD, // $B1DD + #$B1DE, // $B1DE + #$B1DF, // $B1DF + #$B1E0, // $B1E0 + #$B1E1, // $B1E1 + #$B1E2, // $B1E2 + #$B1E3, // $B1E3 + #$B1E4, // $B1E4 + #$B1E5, // $B1E5 + #$B1E6, // $B1E6 + #$B1E7, // $B1E7 + #$B1E8, // $B1E8 + #$B1E9, // $B1E9 + #$B1EA, // $B1EA + #$B1EB, // $B1EB + #$B1EC, // $B1EC + #$B1ED, // $B1ED + #$B1EE, // $B1EE + #$B1EF, // $B1EF + #$B1F0, // $B1F0 + #$B1F1, // $B1F1 + #$B1F2, // $B1F2 + #$B1F3, // $B1F3 + #$B1F4, // $B1F4 + #$B1F5, // $B1F5 + #$B1F6, // $B1F6 + #$B1F7, // $B1F7 + #$B1F8, // $B1F8 + #$B1F9, // $B1F9 + #$B1FA, // $B1FA + #$B1FB, // $B1FB + #$B1FC, // $B1FC + #$B1FD, // $B1FD + #$B1FE, // $B1FE + #$B1FF, // $B1FF + #$B200, // $B200 + #$B201, // $B201 + #$B202, // $B202 + #$B203, // $B203 + #$B204, // $B204 + #$B205, // $B205 + #$B206, // $B206 + #$B207, // $B207 + #$B208, // $B208 + #$B209, // $B209 + #$B20A, // $B20A + #$B20B, // $B20B + #$B20C, // $B20C + #$B20D, // $B20D + #$B20E, // $B20E + #$B20F, // $B20F + #$B210, // $B210 + #$B211, // $B211 + #$B212, // $B212 + #$B213, // $B213 + #$B214, // $B214 + #$B215, // $B215 + #$B216, // $B216 + #$B217, // $B217 + #$B218, // $B218 + #$B219, // $B219 + #$B21A, // $B21A + #$B21B, // $B21B + #$B21C, // $B21C + #$B21D, // $B21D + #$B21E, // $B21E + #$B21F, // $B21F + #$B220, // $B220 + #$B221, // $B221 + #$B222, // $B222 + #$B223, // $B223 + #$B224, // $B224 + #$B225, // $B225 + #$B226, // $B226 + #$B227, // $B227 + #$B228, // $B228 + #$B229, // $B229 + #$B22A, // $B22A + #$B22B, // $B22B + #$B22C, // $B22C + #$B22D, // $B22D + #$B22E, // $B22E + #$B22F, // $B22F + #$B230, // $B230 + #$B231, // $B231 + #$B232, // $B232 + #$B233, // $B233 + #$B234, // $B234 + #$B235, // $B235 + #$B236, // $B236 + #$B237, // $B237 + #$B238, // $B238 + #$B239, // $B239 + #$B23A, // $B23A + #$B23B, // $B23B + #$B23C, // $B23C + #$B23D, // $B23D + #$B23E, // $B23E + #$B23F, // $B23F + #$B240, // $B240 + #$B241, // $B241 + #$B242, // $B242 + #$B243, // $B243 + #$B244, // $B244 + #$B245, // $B245 + #$B246, // $B246 + #$B247, // $B247 + #$B248, // $B248 + #$B249, // $B249 + #$B24A, // $B24A + #$B24B, // $B24B + #$B24C, // $B24C + #$B24D, // $B24D + #$B24E, // $B24E + #$B24F, // $B24F + #$B250, // $B250 + #$B251, // $B251 + #$B252, // $B252 + #$B253, // $B253 + #$B254, // $B254 + #$B255, // $B255 + #$B256, // $B256 + #$B257, // $B257 + #$B258, // $B258 + #$B259, // $B259 + #$B25A, // $B25A + #$B25B, // $B25B + #$B25C, // $B25C + #$B25D, // $B25D + #$B25E, // $B25E + #$B25F, // $B25F + #$B260, // $B260 + #$B261, // $B261 + #$B262, // $B262 + #$B263, // $B263 + #$B264, // $B264 + #$B265, // $B265 + #$B266, // $B266 + #$B267, // $B267 + #$B268, // $B268 + #$B269, // $B269 + #$B26A, // $B26A + #$B26B, // $B26B + #$B26C, // $B26C + #$B26D, // $B26D + #$B26E, // $B26E + #$B26F, // $B26F + #$B270, // $B270 + #$B271, // $B271 + #$B272, // $B272 + #$B273, // $B273 + #$B274, // $B274 + #$B275, // $B275 + #$B276, // $B276 + #$B277, // $B277 + #$B278, // $B278 + #$B279, // $B279 + #$B27A, // $B27A + #$B27B, // $B27B + #$B27C, // $B27C + #$B27D, // $B27D + #$B27E, // $B27E + #$B27F, // $B27F + #$B280, // $B280 + #$B281, // $B281 + #$B282, // $B282 + #$B283, // $B283 + #$B284, // $B284 + #$B285, // $B285 + #$B286, // $B286 + #$B287, // $B287 + #$B288, // $B288 + #$B289, // $B289 + #$B28A, // $B28A + #$B28B, // $B28B + #$B28C, // $B28C + #$B28D, // $B28D + #$B28E, // $B28E + #$B28F, // $B28F + #$B290, // $B290 + #$B291, // $B291 + #$B292, // $B292 + #$B293, // $B293 + #$B294, // $B294 + #$B295, // $B295 + #$B296, // $B296 + #$B297, // $B297 + #$B298, // $B298 + #$B299, // $B299 + #$B29A, // $B29A + #$B29B, // $B29B + #$B29C, // $B29C + #$B29D, // $B29D + #$B29E, // $B29E + #$B29F, // $B29F + #$B2A0, // $B2A0 + #$B2A1, // $B2A1 + #$B2A2, // $B2A2 + #$B2A3, // $B2A3 + #$B2A4, // $B2A4 + #$B2A5, // $B2A5 + #$B2A6, // $B2A6 + #$B2A7, // $B2A7 + #$B2A8, // $B2A8 + #$B2A9, // $B2A9 + #$B2AA, // $B2AA + #$B2AB, // $B2AB + #$B2AC, // $B2AC + #$B2AD, // $B2AD + #$B2AE, // $B2AE + #$B2AF, // $B2AF + #$B2B0, // $B2B0 + #$B2B1, // $B2B1 + #$B2B2, // $B2B2 + #$B2B3, // $B2B3 + #$B2B4, // $B2B4 + #$B2B5, // $B2B5 + #$B2B6, // $B2B6 + #$B2B7, // $B2B7 + #$B2B8, // $B2B8 + #$B2B9, // $B2B9 + #$B2BA, // $B2BA + #$B2BB, // $B2BB + #$B2BC, // $B2BC + #$B2BD, // $B2BD + #$B2BE, // $B2BE + #$B2BF, // $B2BF + #$B2C0, // $B2C0 + #$B2C1, // $B2C1 + #$B2C2, // $B2C2 + #$B2C3, // $B2C3 + #$B2C4, // $B2C4 + #$B2C5, // $B2C5 + #$B2C6, // $B2C6 + #$B2C7, // $B2C7 + #$B2C8, // $B2C8 + #$B2C9, // $B2C9 + #$B2CA, // $B2CA + #$B2CB, // $B2CB + #$B2CC, // $B2CC + #$B2CD, // $B2CD + #$B2CE, // $B2CE + #$B2CF, // $B2CF + #$B2D0, // $B2D0 + #$B2D1, // $B2D1 + #$B2D2, // $B2D2 + #$B2D3, // $B2D3 + #$B2D4, // $B2D4 + #$B2D5, // $B2D5 + #$B2D6, // $B2D6 + #$B2D7, // $B2D7 + #$B2D8, // $B2D8 + #$B2D9, // $B2D9 + #$B2DA, // $B2DA + #$B2DB, // $B2DB + #$B2DC, // $B2DC + #$B2DD, // $B2DD + #$B2DE, // $B2DE + #$B2DF, // $B2DF + #$B2E0, // $B2E0 + #$B2E1, // $B2E1 + #$B2E2, // $B2E2 + #$B2E3, // $B2E3 + #$B2E4, // $B2E4 + #$B2E5, // $B2E5 + #$B2E6, // $B2E6 + #$B2E7, // $B2E7 + #$B2E8, // $B2E8 + #$B2E9, // $B2E9 + #$B2EA, // $B2EA + #$B2EB, // $B2EB + #$B2EC, // $B2EC + #$B2ED, // $B2ED + #$B2EE, // $B2EE + #$B2EF, // $B2EF + #$B2F0, // $B2F0 + #$B2F1, // $B2F1 + #$B2F2, // $B2F2 + #$B2F3, // $B2F3 + #$B2F4, // $B2F4 + #$B2F5, // $B2F5 + #$B2F6, // $B2F6 + #$B2F7, // $B2F7 + #$B2F8, // $B2F8 + #$B2F9, // $B2F9 + #$B2FA, // $B2FA + #$B2FB, // $B2FB + #$B2FC, // $B2FC + #$B2FD, // $B2FD + #$B2FE, // $B2FE + #$B2FF, // $B2FF + #$B300, // $B300 + #$B301, // $B301 + #$B302, // $B302 + #$B303, // $B303 + #$B304, // $B304 + #$B305, // $B305 + #$B306, // $B306 + #$B307, // $B307 + #$B308, // $B308 + #$B309, // $B309 + #$B30A, // $B30A + #$B30B, // $B30B + #$B30C, // $B30C + #$B30D, // $B30D + #$B30E, // $B30E + #$B30F, // $B30F + #$B310, // $B310 + #$B311, // $B311 + #$B312, // $B312 + #$B313, // $B313 + #$B314, // $B314 + #$B315, // $B315 + #$B316, // $B316 + #$B317, // $B317 + #$B318, // $B318 + #$B319, // $B319 + #$B31A, // $B31A + #$B31B, // $B31B + #$B31C, // $B31C + #$B31D, // $B31D + #$B31E, // $B31E + #$B31F, // $B31F + #$B320, // $B320 + #$B321, // $B321 + #$B322, // $B322 + #$B323, // $B323 + #$B324, // $B324 + #$B325, // $B325 + #$B326, // $B326 + #$B327, // $B327 + #$B328, // $B328 + #$B329, // $B329 + #$B32A, // $B32A + #$B32B, // $B32B + #$B32C, // $B32C + #$B32D, // $B32D + #$B32E, // $B32E + #$B32F, // $B32F + #$B330, // $B330 + #$B331, // $B331 + #$B332, // $B332 + #$B333, // $B333 + #$B334, // $B334 + #$B335, // $B335 + #$B336, // $B336 + #$B337, // $B337 + #$B338, // $B338 + #$B339, // $B339 + #$B33A, // $B33A + #$B33B, // $B33B + #$B33C, // $B33C + #$B33D, // $B33D + #$B33E, // $B33E + #$B33F, // $B33F + #$B340, // $B340 + #$B341, // $B341 + #$B342, // $B342 + #$B343, // $B343 + #$B344, // $B344 + #$B345, // $B345 + #$B346, // $B346 + #$B347, // $B347 + #$B348, // $B348 + #$B349, // $B349 + #$B34A, // $B34A + #$B34B, // $B34B + #$B34C, // $B34C + #$B34D, // $B34D + #$B34E, // $B34E + #$B34F, // $B34F + #$B350, // $B350 + #$B351, // $B351 + #$B352, // $B352 + #$B353, // $B353 + #$B354, // $B354 + #$B355, // $B355 + #$B356, // $B356 + #$B357, // $B357 + #$B358, // $B358 + #$B359, // $B359 + #$B35A, // $B35A + #$B35B, // $B35B + #$B35C, // $B35C + #$B35D, // $B35D + #$B35E, // $B35E + #$B35F, // $B35F + #$B360, // $B360 + #$B361, // $B361 + #$B362, // $B362 + #$B363, // $B363 + #$B364, // $B364 + #$B365, // $B365 + #$B366, // $B366 + #$B367, // $B367 + #$B368, // $B368 + #$B369, // $B369 + #$B36A, // $B36A + #$B36B, // $B36B + #$B36C, // $B36C + #$B36D, // $B36D + #$B36E, // $B36E + #$B36F, // $B36F + #$B370, // $B370 + #$B371, // $B371 + #$B372, // $B372 + #$B373, // $B373 + #$B374, // $B374 + #$B375, // $B375 + #$B376, // $B376 + #$B377, // $B377 + #$B378, // $B378 + #$B379, // $B379 + #$B37A, // $B37A + #$B37B, // $B37B + #$B37C, // $B37C + #$B37D, // $B37D + #$B37E, // $B37E + #$B37F, // $B37F + #$B380, // $B380 + #$B381, // $B381 + #$B382, // $B382 + #$B383, // $B383 + #$B384, // $B384 + #$B385, // $B385 + #$B386, // $B386 + #$B387, // $B387 + #$B388, // $B388 + #$B389, // $B389 + #$B38A, // $B38A + #$B38B, // $B38B + #$B38C, // $B38C + #$B38D, // $B38D + #$B38E, // $B38E + #$B38F, // $B38F + #$B390, // $B390 + #$B391, // $B391 + #$B392, // $B392 + #$B393, // $B393 + #$B394, // $B394 + #$B395, // $B395 + #$B396, // $B396 + #$B397, // $B397 + #$B398, // $B398 + #$B399, // $B399 + #$B39A, // $B39A + #$B39B, // $B39B + #$B39C, // $B39C + #$B39D, // $B39D + #$B39E, // $B39E + #$B39F, // $B39F + #$B3A0, // $B3A0 + #$B3A1, // $B3A1 + #$B3A2, // $B3A2 + #$B3A3, // $B3A3 + #$B3A4, // $B3A4 + #$B3A5, // $B3A5 + #$B3A6, // $B3A6 + #$B3A7, // $B3A7 + #$B3A8, // $B3A8 + #$B3A9, // $B3A9 + #$B3AA, // $B3AA + #$B3AB, // $B3AB + #$B3AC, // $B3AC + #$B3AD, // $B3AD + #$B3AE, // $B3AE + #$B3AF, // $B3AF + #$B3B0, // $B3B0 + #$B3B1, // $B3B1 + #$B3B2, // $B3B2 + #$B3B3, // $B3B3 + #$B3B4, // $B3B4 + #$B3B5, // $B3B5 + #$B3B6, // $B3B6 + #$B3B7, // $B3B7 + #$B3B8, // $B3B8 + #$B3B9, // $B3B9 + #$B3BA, // $B3BA + #$B3BB, // $B3BB + #$B3BC, // $B3BC + #$B3BD, // $B3BD + #$B3BE, // $B3BE + #$B3BF, // $B3BF + #$B3C0, // $B3C0 + #$B3C1, // $B3C1 + #$B3C2, // $B3C2 + #$B3C3, // $B3C3 + #$B3C4, // $B3C4 + #$B3C5, // $B3C5 + #$B3C6, // $B3C6 + #$B3C7, // $B3C7 + #$B3C8, // $B3C8 + #$B3C9, // $B3C9 + #$B3CA, // $B3CA + #$B3CB, // $B3CB + #$B3CC, // $B3CC + #$B3CD, // $B3CD + #$B3CE, // $B3CE + #$B3CF, // $B3CF + #$B3D0, // $B3D0 + #$B3D1, // $B3D1 + #$B3D2, // $B3D2 + #$B3D3, // $B3D3 + #$B3D4, // $B3D4 + #$B3D5, // $B3D5 + #$B3D6, // $B3D6 + #$B3D7, // $B3D7 + #$B3D8, // $B3D8 + #$B3D9, // $B3D9 + #$B3DA, // $B3DA + #$B3DB, // $B3DB + #$B3DC, // $B3DC + #$B3DD, // $B3DD + #$B3DE, // $B3DE + #$B3DF, // $B3DF + #$B3E0, // $B3E0 + #$B3E1, // $B3E1 + #$B3E2, // $B3E2 + #$B3E3, // $B3E3 + #$B3E4, // $B3E4 + #$B3E5, // $B3E5 + #$B3E6, // $B3E6 + #$B3E7, // $B3E7 + #$B3E8, // $B3E8 + #$B3E9, // $B3E9 + #$B3EA, // $B3EA + #$B3EB, // $B3EB + #$B3EC, // $B3EC + #$B3ED, // $B3ED + #$B3EE, // $B3EE + #$B3EF, // $B3EF + #$B3F0, // $B3F0 + #$B3F1, // $B3F1 + #$B3F2, // $B3F2 + #$B3F3, // $B3F3 + #$B3F4, // $B3F4 + #$B3F5, // $B3F5 + #$B3F6, // $B3F6 + #$B3F7, // $B3F7 + #$B3F8, // $B3F8 + #$B3F9, // $B3F9 + #$B3FA, // $B3FA + #$B3FB, // $B3FB + #$B3FC, // $B3FC + #$B3FD, // $B3FD + #$B3FE, // $B3FE + #$B3FF, // $B3FF + #$B400, // $B400 + #$B401, // $B401 + #$B402, // $B402 + #$B403, // $B403 + #$B404, // $B404 + #$B405, // $B405 + #$B406, // $B406 + #$B407, // $B407 + #$B408, // $B408 + #$B409, // $B409 + #$B40A, // $B40A + #$B40B, // $B40B + #$B40C, // $B40C + #$B40D, // $B40D + #$B40E, // $B40E + #$B40F, // $B40F + #$B410, // $B410 + #$B411, // $B411 + #$B412, // $B412 + #$B413, // $B413 + #$B414, // $B414 + #$B415, // $B415 + #$B416, // $B416 + #$B417, // $B417 + #$B418, // $B418 + #$B419, // $B419 + #$B41A, // $B41A + #$B41B, // $B41B + #$B41C, // $B41C + #$B41D, // $B41D + #$B41E, // $B41E + #$B41F, // $B41F + #$B420, // $B420 + #$B421, // $B421 + #$B422, // $B422 + #$B423, // $B423 + #$B424, // $B424 + #$B425, // $B425 + #$B426, // $B426 + #$B427, // $B427 + #$B428, // $B428 + #$B429, // $B429 + #$B42A, // $B42A + #$B42B, // $B42B + #$B42C, // $B42C + #$B42D, // $B42D + #$B42E, // $B42E + #$B42F, // $B42F + #$B430, // $B430 + #$B431, // $B431 + #$B432, // $B432 + #$B433, // $B433 + #$B434, // $B434 + #$B435, // $B435 + #$B436, // $B436 + #$B437, // $B437 + #$B438, // $B438 + #$B439, // $B439 + #$B43A, // $B43A + #$B43B, // $B43B + #$B43C, // $B43C + #$B43D, // $B43D + #$B43E, // $B43E + #$B43F, // $B43F + #$B440, // $B440 + #$B441, // $B441 + #$B442, // $B442 + #$B443, // $B443 + #$B444, // $B444 + #$B445, // $B445 + #$B446, // $B446 + #$B447, // $B447 + #$B448, // $B448 + #$B449, // $B449 + #$B44A, // $B44A + #$B44B, // $B44B + #$B44C, // $B44C + #$B44D, // $B44D + #$B44E, // $B44E + #$B44F, // $B44F + #$B450, // $B450 + #$B451, // $B451 + #$B452, // $B452 + #$B453, // $B453 + #$B454, // $B454 + #$B455, // $B455 + #$B456, // $B456 + #$B457, // $B457 + #$B458, // $B458 + #$B459, // $B459 + #$B45A, // $B45A + #$B45B, // $B45B + #$B45C, // $B45C + #$B45D, // $B45D + #$B45E, // $B45E + #$B45F, // $B45F + #$B460, // $B460 + #$B461, // $B461 + #$B462, // $B462 + #$B463, // $B463 + #$B464, // $B464 + #$B465, // $B465 + #$B466, // $B466 + #$B467, // $B467 + #$B468, // $B468 + #$B469, // $B469 + #$B46A, // $B46A + #$B46B, // $B46B + #$B46C, // $B46C + #$B46D, // $B46D + #$B46E, // $B46E + #$B46F, // $B46F + #$B470, // $B470 + #$B471, // $B471 + #$B472, // $B472 + #$B473, // $B473 + #$B474, // $B474 + #$B475, // $B475 + #$B476, // $B476 + #$B477, // $B477 + #$B478, // $B478 + #$B479, // $B479 + #$B47A, // $B47A + #$B47B, // $B47B + #$B47C, // $B47C + #$B47D, // $B47D + #$B47E, // $B47E + #$B47F, // $B47F + #$B480, // $B480 + #$B481, // $B481 + #$B482, // $B482 + #$B483, // $B483 + #$B484, // $B484 + #$B485, // $B485 + #$B486, // $B486 + #$B487, // $B487 + #$B488, // $B488 + #$B489, // $B489 + #$B48A, // $B48A + #$B48B, // $B48B + #$B48C, // $B48C + #$B48D, // $B48D + #$B48E, // $B48E + #$B48F, // $B48F + #$B490, // $B490 + #$B491, // $B491 + #$B492, // $B492 + #$B493, // $B493 + #$B494, // $B494 + #$B495, // $B495 + #$B496, // $B496 + #$B497, // $B497 + #$B498, // $B498 + #$B499, // $B499 + #$B49A, // $B49A + #$B49B, // $B49B + #$B49C, // $B49C + #$B49D, // $B49D + #$B49E, // $B49E + #$B49F, // $B49F + #$B4A0, // $B4A0 + #$B4A1, // $B4A1 + #$B4A2, // $B4A2 + #$B4A3, // $B4A3 + #$B4A4, // $B4A4 + #$B4A5, // $B4A5 + #$B4A6, // $B4A6 + #$B4A7, // $B4A7 + #$B4A8, // $B4A8 + #$B4A9, // $B4A9 + #$B4AA, // $B4AA + #$B4AB, // $B4AB + #$B4AC, // $B4AC + #$B4AD, // $B4AD + #$B4AE, // $B4AE + #$B4AF, // $B4AF + #$B4B0, // $B4B0 + #$B4B1, // $B4B1 + #$B4B2, // $B4B2 + #$B4B3, // $B4B3 + #$B4B4, // $B4B4 + #$B4B5, // $B4B5 + #$B4B6, // $B4B6 + #$B4B7, // $B4B7 + #$B4B8, // $B4B8 + #$B4B9, // $B4B9 + #$B4BA, // $B4BA + #$B4BB, // $B4BB + #$B4BC, // $B4BC + #$B4BD, // $B4BD + #$B4BE, // $B4BE + #$B4BF, // $B4BF + #$B4C0, // $B4C0 + #$B4C1, // $B4C1 + #$B4C2, // $B4C2 + #$B4C3, // $B4C3 + #$B4C4, // $B4C4 + #$B4C5, // $B4C5 + #$B4C6, // $B4C6 + #$B4C7, // $B4C7 + #$B4C8, // $B4C8 + #$B4C9, // $B4C9 + #$B4CA, // $B4CA + #$B4CB, // $B4CB + #$B4CC, // $B4CC + #$B4CD, // $B4CD + #$B4CE, // $B4CE + #$B4CF, // $B4CF + #$B4D0, // $B4D0 + #$B4D1, // $B4D1 + #$B4D2, // $B4D2 + #$B4D3, // $B4D3 + #$B4D4, // $B4D4 + #$B4D5, // $B4D5 + #$B4D6, // $B4D6 + #$B4D7, // $B4D7 + #$B4D8, // $B4D8 + #$B4D9, // $B4D9 + #$B4DA, // $B4DA + #$B4DB, // $B4DB + #$B4DC, // $B4DC + #$B4DD, // $B4DD + #$B4DE, // $B4DE + #$B4DF, // $B4DF + #$B4E0, // $B4E0 + #$B4E1, // $B4E1 + #$B4E2, // $B4E2 + #$B4E3, // $B4E3 + #$B4E4, // $B4E4 + #$B4E5, // $B4E5 + #$B4E6, // $B4E6 + #$B4E7, // $B4E7 + #$B4E8, // $B4E8 + #$B4E9, // $B4E9 + #$B4EA, // $B4EA + #$B4EB, // $B4EB + #$B4EC, // $B4EC + #$B4ED, // $B4ED + #$B4EE, // $B4EE + #$B4EF, // $B4EF + #$B4F0, // $B4F0 + #$B4F1, // $B4F1 + #$B4F2, // $B4F2 + #$B4F3, // $B4F3 + #$B4F4, // $B4F4 + #$B4F5, // $B4F5 + #$B4F6, // $B4F6 + #$B4F7, // $B4F7 + #$B4F8, // $B4F8 + #$B4F9, // $B4F9 + #$B4FA, // $B4FA + #$B4FB, // $B4FB + #$B4FC, // $B4FC + #$B4FD, // $B4FD + #$B4FE, // $B4FE + #$B4FF, // $B4FF + #$B500, // $B500 + #$B501, // $B501 + #$B502, // $B502 + #$B503, // $B503 + #$B504, // $B504 + #$B505, // $B505 + #$B506, // $B506 + #$B507, // $B507 + #$B508, // $B508 + #$B509, // $B509 + #$B50A, // $B50A + #$B50B, // $B50B + #$B50C, // $B50C + #$B50D, // $B50D + #$B50E, // $B50E + #$B50F, // $B50F + #$B510, // $B510 + #$B511, // $B511 + #$B512, // $B512 + #$B513, // $B513 + #$B514, // $B514 + #$B515, // $B515 + #$B516, // $B516 + #$B517, // $B517 + #$B518, // $B518 + #$B519, // $B519 + #$B51A, // $B51A + #$B51B, // $B51B + #$B51C, // $B51C + #$B51D, // $B51D + #$B51E, // $B51E + #$B51F, // $B51F + #$B520, // $B520 + #$B521, // $B521 + #$B522, // $B522 + #$B523, // $B523 + #$B524, // $B524 + #$B525, // $B525 + #$B526, // $B526 + #$B527, // $B527 + #$B528, // $B528 + #$B529, // $B529 + #$B52A, // $B52A + #$B52B, // $B52B + #$B52C, // $B52C + #$B52D, // $B52D + #$B52E, // $B52E + #$B52F, // $B52F + #$B530, // $B530 + #$B531, // $B531 + #$B532, // $B532 + #$B533, // $B533 + #$B534, // $B534 + #$B535, // $B535 + #$B536, // $B536 + #$B537, // $B537 + #$B538, // $B538 + #$B539, // $B539 + #$B53A, // $B53A + #$B53B, // $B53B + #$B53C, // $B53C + #$B53D, // $B53D + #$B53E, // $B53E + #$B53F, // $B53F + #$B540, // $B540 + #$B541, // $B541 + #$B542, // $B542 + #$B543, // $B543 + #$B544, // $B544 + #$B545, // $B545 + #$B546, // $B546 + #$B547, // $B547 + #$B548, // $B548 + #$B549, // $B549 + #$B54A, // $B54A + #$B54B, // $B54B + #$B54C, // $B54C + #$B54D, // $B54D + #$B54E, // $B54E + #$B54F, // $B54F + #$B550, // $B550 + #$B551, // $B551 + #$B552, // $B552 + #$B553, // $B553 + #$B554, // $B554 + #$B555, // $B555 + #$B556, // $B556 + #$B557, // $B557 + #$B558, // $B558 + #$B559, // $B559 + #$B55A, // $B55A + #$B55B, // $B55B + #$B55C, // $B55C + #$B55D, // $B55D + #$B55E, // $B55E + #$B55F, // $B55F + #$B560, // $B560 + #$B561, // $B561 + #$B562, // $B562 + #$B563, // $B563 + #$B564, // $B564 + #$B565, // $B565 + #$B566, // $B566 + #$B567, // $B567 + #$B568, // $B568 + #$B569, // $B569 + #$B56A, // $B56A + #$B56B, // $B56B + #$B56C, // $B56C + #$B56D, // $B56D + #$B56E, // $B56E + #$B56F, // $B56F + #$B570, // $B570 + #$B571, // $B571 + #$B572, // $B572 + #$B573, // $B573 + #$B574, // $B574 + #$B575, // $B575 + #$B576, // $B576 + #$B577, // $B577 + #$B578, // $B578 + #$B579, // $B579 + #$B57A, // $B57A + #$B57B, // $B57B + #$B57C, // $B57C + #$B57D, // $B57D + #$B57E, // $B57E + #$B57F, // $B57F + #$B580, // $B580 + #$B581, // $B581 + #$B582, // $B582 + #$B583, // $B583 + #$B584, // $B584 + #$B585, // $B585 + #$B586, // $B586 + #$B587, // $B587 + #$B588, // $B588 + #$B589, // $B589 + #$B58A, // $B58A + #$B58B, // $B58B + #$B58C, // $B58C + #$B58D, // $B58D + #$B58E, // $B58E + #$B58F, // $B58F + #$B590, // $B590 + #$B591, // $B591 + #$B592, // $B592 + #$B593, // $B593 + #$B594, // $B594 + #$B595, // $B595 + #$B596, // $B596 + #$B597, // $B597 + #$B598, // $B598 + #$B599, // $B599 + #$B59A, // $B59A + #$B59B, // $B59B + #$B59C, // $B59C + #$B59D, // $B59D + #$B59E, // $B59E + #$B59F, // $B59F + #$B5A0, // $B5A0 + #$B5A1, // $B5A1 + #$B5A2, // $B5A2 + #$B5A3, // $B5A3 + #$B5A4, // $B5A4 + #$B5A5, // $B5A5 + #$B5A6, // $B5A6 + #$B5A7, // $B5A7 + #$B5A8, // $B5A8 + #$B5A9, // $B5A9 + #$B5AA, // $B5AA + #$B5AB, // $B5AB + #$B5AC, // $B5AC + #$B5AD, // $B5AD + #$B5AE, // $B5AE + #$B5AF, // $B5AF + #$B5B0, // $B5B0 + #$B5B1, // $B5B1 + #$B5B2, // $B5B2 + #$B5B3, // $B5B3 + #$B5B4, // $B5B4 + #$B5B5, // $B5B5 + #$B5B6, // $B5B6 + #$B5B7, // $B5B7 + #$B5B8, // $B5B8 + #$B5B9, // $B5B9 + #$B5BA, // $B5BA + #$B5BB, // $B5BB + #$B5BC, // $B5BC + #$B5BD, // $B5BD + #$B5BE, // $B5BE + #$B5BF, // $B5BF + #$B5C0, // $B5C0 + #$B5C1, // $B5C1 + #$B5C2, // $B5C2 + #$B5C3, // $B5C3 + #$B5C4, // $B5C4 + #$B5C5, // $B5C5 + #$B5C6, // $B5C6 + #$B5C7, // $B5C7 + #$B5C8, // $B5C8 + #$B5C9, // $B5C9 + #$B5CA, // $B5CA + #$B5CB, // $B5CB + #$B5CC, // $B5CC + #$B5CD, // $B5CD + #$B5CE, // $B5CE + #$B5CF, // $B5CF + #$B5D0, // $B5D0 + #$B5D1, // $B5D1 + #$B5D2, // $B5D2 + #$B5D3, // $B5D3 + #$B5D4, // $B5D4 + #$B5D5, // $B5D5 + #$B5D6, // $B5D6 + #$B5D7, // $B5D7 + #$B5D8, // $B5D8 + #$B5D9, // $B5D9 + #$B5DA, // $B5DA + #$B5DB, // $B5DB + #$B5DC, // $B5DC + #$B5DD, // $B5DD + #$B5DE, // $B5DE + #$B5DF, // $B5DF + #$B5E0, // $B5E0 + #$B5E1, // $B5E1 + #$B5E2, // $B5E2 + #$B5E3, // $B5E3 + #$B5E4, // $B5E4 + #$B5E5, // $B5E5 + #$B5E6, // $B5E6 + #$B5E7, // $B5E7 + #$B5E8, // $B5E8 + #$B5E9, // $B5E9 + #$B5EA, // $B5EA + #$B5EB, // $B5EB + #$B5EC, // $B5EC + #$B5ED, // $B5ED + #$B5EE, // $B5EE + #$B5EF, // $B5EF + #$B5F0, // $B5F0 + #$B5F1, // $B5F1 + #$B5F2, // $B5F2 + #$B5F3, // $B5F3 + #$B5F4, // $B5F4 + #$B5F5, // $B5F5 + #$B5F6, // $B5F6 + #$B5F7, // $B5F7 + #$B5F8, // $B5F8 + #$B5F9, // $B5F9 + #$B5FA, // $B5FA + #$B5FB, // $B5FB + #$B5FC, // $B5FC + #$B5FD, // $B5FD + #$B5FE, // $B5FE + #$B5FF, // $B5FF + #$B600, // $B600 + #$B601, // $B601 + #$B602, // $B602 + #$B603, // $B603 + #$B604, // $B604 + #$B605, // $B605 + #$B606, // $B606 + #$B607, // $B607 + #$B608, // $B608 + #$B609, // $B609 + #$B60A, // $B60A + #$B60B, // $B60B + #$B60C, // $B60C + #$B60D, // $B60D + #$B60E, // $B60E + #$B60F, // $B60F + #$B610, // $B610 + #$B611, // $B611 + #$B612, // $B612 + #$B613, // $B613 + #$B614, // $B614 + #$B615, // $B615 + #$B616, // $B616 + #$B617, // $B617 + #$B618, // $B618 + #$B619, // $B619 + #$B61A, // $B61A + #$B61B, // $B61B + #$B61C, // $B61C + #$B61D, // $B61D + #$B61E, // $B61E + #$B61F, // $B61F + #$B620, // $B620 + #$B621, // $B621 + #$B622, // $B622 + #$B623, // $B623 + #$B624, // $B624 + #$B625, // $B625 + #$B626, // $B626 + #$B627, // $B627 + #$B628, // $B628 + #$B629, // $B629 + #$B62A, // $B62A + #$B62B, // $B62B + #$B62C, // $B62C + #$B62D, // $B62D + #$B62E, // $B62E + #$B62F, // $B62F + #$B630, // $B630 + #$B631, // $B631 + #$B632, // $B632 + #$B633, // $B633 + #$B634, // $B634 + #$B635, // $B635 + #$B636, // $B636 + #$B637, // $B637 + #$B638, // $B638 + #$B639, // $B639 + #$B63A, // $B63A + #$B63B, // $B63B + #$B63C, // $B63C + #$B63D, // $B63D + #$B63E, // $B63E + #$B63F, // $B63F + #$B640, // $B640 + #$B641, // $B641 + #$B642, // $B642 + #$B643, // $B643 + #$B644, // $B644 + #$B645, // $B645 + #$B646, // $B646 + #$B647, // $B647 + #$B648, // $B648 + #$B649, // $B649 + #$B64A, // $B64A + #$B64B, // $B64B + #$B64C, // $B64C + #$B64D, // $B64D + #$B64E, // $B64E + #$B64F, // $B64F + #$B650, // $B650 + #$B651, // $B651 + #$B652, // $B652 + #$B653, // $B653 + #$B654, // $B654 + #$B655, // $B655 + #$B656, // $B656 + #$B657, // $B657 + #$B658, // $B658 + #$B659, // $B659 + #$B65A, // $B65A + #$B65B, // $B65B + #$B65C, // $B65C + #$B65D, // $B65D + #$B65E, // $B65E + #$B65F, // $B65F + #$B660, // $B660 + #$B661, // $B661 + #$B662, // $B662 + #$B663, // $B663 + #$B664, // $B664 + #$B665, // $B665 + #$B666, // $B666 + #$B667, // $B667 + #$B668, // $B668 + #$B669, // $B669 + #$B66A, // $B66A + #$B66B, // $B66B + #$B66C, // $B66C + #$B66D, // $B66D + #$B66E, // $B66E + #$B66F, // $B66F + #$B670, // $B670 + #$B671, // $B671 + #$B672, // $B672 + #$B673, // $B673 + #$B674, // $B674 + #$B675, // $B675 + #$B676, // $B676 + #$B677, // $B677 + #$B678, // $B678 + #$B679, // $B679 + #$B67A, // $B67A + #$B67B, // $B67B + #$B67C, // $B67C + #$B67D, // $B67D + #$B67E, // $B67E + #$B67F, // $B67F + #$B680, // $B680 + #$B681, // $B681 + #$B682, // $B682 + #$B683, // $B683 + #$B684, // $B684 + #$B685, // $B685 + #$B686, // $B686 + #$B687, // $B687 + #$B688, // $B688 + #$B689, // $B689 + #$B68A, // $B68A + #$B68B, // $B68B + #$B68C, // $B68C + #$B68D, // $B68D + #$B68E, // $B68E + #$B68F, // $B68F + #$B690, // $B690 + #$B691, // $B691 + #$B692, // $B692 + #$B693, // $B693 + #$B694, // $B694 + #$B695, // $B695 + #$B696, // $B696 + #$B697, // $B697 + #$B698, // $B698 + #$B699, // $B699 + #$B69A, // $B69A + #$B69B, // $B69B + #$B69C, // $B69C + #$B69D, // $B69D + #$B69E, // $B69E + #$B69F, // $B69F + #$B6A0, // $B6A0 + #$B6A1, // $B6A1 + #$B6A2, // $B6A2 + #$B6A3, // $B6A3 + #$B6A4, // $B6A4 + #$B6A5, // $B6A5 + #$B6A6, // $B6A6 + #$B6A7, // $B6A7 + #$B6A8, // $B6A8 + #$B6A9, // $B6A9 + #$B6AA, // $B6AA + #$B6AB, // $B6AB + #$B6AC, // $B6AC + #$B6AD, // $B6AD + #$B6AE, // $B6AE + #$B6AF, // $B6AF + #$B6B0, // $B6B0 + #$B6B1, // $B6B1 + #$B6B2, // $B6B2 + #$B6B3, // $B6B3 + #$B6B4, // $B6B4 + #$B6B5, // $B6B5 + #$B6B6, // $B6B6 + #$B6B7, // $B6B7 + #$B6B8, // $B6B8 + #$B6B9, // $B6B9 + #$B6BA, // $B6BA + #$B6BB, // $B6BB + #$B6BC, // $B6BC + #$B6BD, // $B6BD + #$B6BE, // $B6BE + #$B6BF, // $B6BF + #$B6C0, // $B6C0 + #$B6C1, // $B6C1 + #$B6C2, // $B6C2 + #$B6C3, // $B6C3 + #$B6C4, // $B6C4 + #$B6C5, // $B6C5 + #$B6C6, // $B6C6 + #$B6C7, // $B6C7 + #$B6C8, // $B6C8 + #$B6C9, // $B6C9 + #$B6CA, // $B6CA + #$B6CB, // $B6CB + #$B6CC, // $B6CC + #$B6CD, // $B6CD + #$B6CE, // $B6CE + #$B6CF, // $B6CF + #$B6D0, // $B6D0 + #$B6D1, // $B6D1 + #$B6D2, // $B6D2 + #$B6D3, // $B6D3 + #$B6D4, // $B6D4 + #$B6D5, // $B6D5 + #$B6D6, // $B6D6 + #$B6D7, // $B6D7 + #$B6D8, // $B6D8 + #$B6D9, // $B6D9 + #$B6DA, // $B6DA + #$B6DB, // $B6DB + #$B6DC, // $B6DC + #$B6DD, // $B6DD + #$B6DE, // $B6DE + #$B6DF, // $B6DF + #$B6E0, // $B6E0 + #$B6E1, // $B6E1 + #$B6E2, // $B6E2 + #$B6E3, // $B6E3 + #$B6E4, // $B6E4 + #$B6E5, // $B6E5 + #$B6E6, // $B6E6 + #$B6E7, // $B6E7 + #$B6E8, // $B6E8 + #$B6E9, // $B6E9 + #$B6EA, // $B6EA + #$B6EB, // $B6EB + #$B6EC, // $B6EC + #$B6ED, // $B6ED + #$B6EE, // $B6EE + #$B6EF, // $B6EF + #$B6F0, // $B6F0 + #$B6F1, // $B6F1 + #$B6F2, // $B6F2 + #$B6F3, // $B6F3 + #$B6F4, // $B6F4 + #$B6F5, // $B6F5 + #$B6F6, // $B6F6 + #$B6F7, // $B6F7 + #$B6F8, // $B6F8 + #$B6F9, // $B6F9 + #$B6FA, // $B6FA + #$B6FB, // $B6FB + #$B6FC, // $B6FC + #$B6FD, // $B6FD + #$B6FE, // $B6FE + #$B6FF, // $B6FF + #$B700, // $B700 + #$B701, // $B701 + #$B702, // $B702 + #$B703, // $B703 + #$B704, // $B704 + #$B705, // $B705 + #$B706, // $B706 + #$B707, // $B707 + #$B708, // $B708 + #$B709, // $B709 + #$B70A, // $B70A + #$B70B, // $B70B + #$B70C, // $B70C + #$B70D, // $B70D + #$B70E, // $B70E + #$B70F, // $B70F + #$B710, // $B710 + #$B711, // $B711 + #$B712, // $B712 + #$B713, // $B713 + #$B714, // $B714 + #$B715, // $B715 + #$B716, // $B716 + #$B717, // $B717 + #$B718, // $B718 + #$B719, // $B719 + #$B71A, // $B71A + #$B71B, // $B71B + #$B71C, // $B71C + #$B71D, // $B71D + #$B71E, // $B71E + #$B71F, // $B71F + #$B720, // $B720 + #$B721, // $B721 + #$B722, // $B722 + #$B723, // $B723 + #$B724, // $B724 + #$B725, // $B725 + #$B726, // $B726 + #$B727, // $B727 + #$B728, // $B728 + #$B729, // $B729 + #$B72A, // $B72A + #$B72B, // $B72B + #$B72C, // $B72C + #$B72D, // $B72D + #$B72E, // $B72E + #$B72F, // $B72F + #$B730, // $B730 + #$B731, // $B731 + #$B732, // $B732 + #$B733, // $B733 + #$B734, // $B734 + #$B735, // $B735 + #$B736, // $B736 + #$B737, // $B737 + #$B738, // $B738 + #$B739, // $B739 + #$B73A, // $B73A + #$B73B, // $B73B + #$B73C, // $B73C + #$B73D, // $B73D + #$B73E, // $B73E + #$B73F, // $B73F + #$B740, // $B740 + #$B741, // $B741 + #$B742, // $B742 + #$B743, // $B743 + #$B744, // $B744 + #$B745, // $B745 + #$B746, // $B746 + #$B747, // $B747 + #$B748, // $B748 + #$B749, // $B749 + #$B74A, // $B74A + #$B74B, // $B74B + #$B74C, // $B74C + #$B74D, // $B74D + #$B74E, // $B74E + #$B74F, // $B74F + #$B750, // $B750 + #$B751, // $B751 + #$B752, // $B752 + #$B753, // $B753 + #$B754, // $B754 + #$B755, // $B755 + #$B756, // $B756 + #$B757, // $B757 + #$B758, // $B758 + #$B759, // $B759 + #$B75A, // $B75A + #$B75B, // $B75B + #$B75C, // $B75C + #$B75D, // $B75D + #$B75E, // $B75E + #$B75F, // $B75F + #$B760, // $B760 + #$B761, // $B761 + #$B762, // $B762 + #$B763, // $B763 + #$B764, // $B764 + #$B765, // $B765 + #$B766, // $B766 + #$B767, // $B767 + #$B768, // $B768 + #$B769, // $B769 + #$B76A, // $B76A + #$B76B, // $B76B + #$B76C, // $B76C + #$B76D, // $B76D + #$B76E, // $B76E + #$B76F, // $B76F + #$B770, // $B770 + #$B771, // $B771 + #$B772, // $B772 + #$B773, // $B773 + #$B774, // $B774 + #$B775, // $B775 + #$B776, // $B776 + #$B777, // $B777 + #$B778, // $B778 + #$B779, // $B779 + #$B77A, // $B77A + #$B77B, // $B77B + #$B77C, // $B77C + #$B77D, // $B77D + #$B77E, // $B77E + #$B77F, // $B77F + #$B780, // $B780 + #$B781, // $B781 + #$B782, // $B782 + #$B783, // $B783 + #$B784, // $B784 + #$B785, // $B785 + #$B786, // $B786 + #$B787, // $B787 + #$B788, // $B788 + #$B789, // $B789 + #$B78A, // $B78A + #$B78B, // $B78B + #$B78C, // $B78C + #$B78D, // $B78D + #$B78E, // $B78E + #$B78F, // $B78F + #$B790, // $B790 + #$B791, // $B791 + #$B792, // $B792 + #$B793, // $B793 + #$B794, // $B794 + #$B795, // $B795 + #$B796, // $B796 + #$B797, // $B797 + #$B798, // $B798 + #$B799, // $B799 + #$B79A, // $B79A + #$B79B, // $B79B + #$B79C, // $B79C + #$B79D, // $B79D + #$B79E, // $B79E + #$B79F, // $B79F + #$B7A0, // $B7A0 + #$B7A1, // $B7A1 + #$B7A2, // $B7A2 + #$B7A3, // $B7A3 + #$B7A4, // $B7A4 + #$B7A5, // $B7A5 + #$B7A6, // $B7A6 + #$B7A7, // $B7A7 + #$B7A8, // $B7A8 + #$B7A9, // $B7A9 + #$B7AA, // $B7AA + #$B7AB, // $B7AB + #$B7AC, // $B7AC + #$B7AD, // $B7AD + #$B7AE, // $B7AE + #$B7AF, // $B7AF + #$B7B0, // $B7B0 + #$B7B1, // $B7B1 + #$B7B2, // $B7B2 + #$B7B3, // $B7B3 + #$B7B4, // $B7B4 + #$B7B5, // $B7B5 + #$B7B6, // $B7B6 + #$B7B7, // $B7B7 + #$B7B8, // $B7B8 + #$B7B9, // $B7B9 + #$B7BA, // $B7BA + #$B7BB, // $B7BB + #$B7BC, // $B7BC + #$B7BD, // $B7BD + #$B7BE, // $B7BE + #$B7BF, // $B7BF + #$B7C0, // $B7C0 + #$B7C1, // $B7C1 + #$B7C2, // $B7C2 + #$B7C3, // $B7C3 + #$B7C4, // $B7C4 + #$B7C5, // $B7C5 + #$B7C6, // $B7C6 + #$B7C7, // $B7C7 + #$B7C8, // $B7C8 + #$B7C9, // $B7C9 + #$B7CA, // $B7CA + #$B7CB, // $B7CB + #$B7CC, // $B7CC + #$B7CD, // $B7CD + #$B7CE, // $B7CE + #$B7CF, // $B7CF + #$B7D0, // $B7D0 + #$B7D1, // $B7D1 + #$B7D2, // $B7D2 + #$B7D3, // $B7D3 + #$B7D4, // $B7D4 + #$B7D5, // $B7D5 + #$B7D6, // $B7D6 + #$B7D7, // $B7D7 + #$B7D8, // $B7D8 + #$B7D9, // $B7D9 + #$B7DA, // $B7DA + #$B7DB, // $B7DB + #$B7DC, // $B7DC + #$B7DD, // $B7DD + #$B7DE, // $B7DE + #$B7DF, // $B7DF + #$B7E0, // $B7E0 + #$B7E1, // $B7E1 + #$B7E2, // $B7E2 + #$B7E3, // $B7E3 + #$B7E4, // $B7E4 + #$B7E5, // $B7E5 + #$B7E6, // $B7E6 + #$B7E7, // $B7E7 + #$B7E8, // $B7E8 + #$B7E9, // $B7E9 + #$B7EA, // $B7EA + #$B7EB, // $B7EB + #$B7EC, // $B7EC + #$B7ED, // $B7ED + #$B7EE, // $B7EE + #$B7EF, // $B7EF + #$B7F0, // $B7F0 + #$B7F1, // $B7F1 + #$B7F2, // $B7F2 + #$B7F3, // $B7F3 + #$B7F4, // $B7F4 + #$B7F5, // $B7F5 + #$B7F6, // $B7F6 + #$B7F7, // $B7F7 + #$B7F8, // $B7F8 + #$B7F9, // $B7F9 + #$B7FA, // $B7FA + #$B7FB, // $B7FB + #$B7FC, // $B7FC + #$B7FD, // $B7FD + #$B7FE, // $B7FE + #$B7FF, // $B7FF + #$B800, // $B800 + #$B801, // $B801 + #$B802, // $B802 + #$B803, // $B803 + #$B804, // $B804 + #$B805, // $B805 + #$B806, // $B806 + #$B807, // $B807 + #$B808, // $B808 + #$B809, // $B809 + #$B80A, // $B80A + #$B80B, // $B80B + #$B80C, // $B80C + #$B80D, // $B80D + #$B80E, // $B80E + #$B80F, // $B80F + #$B810, // $B810 + #$B811, // $B811 + #$B812, // $B812 + #$B813, // $B813 + #$B814, // $B814 + #$B815, // $B815 + #$B816, // $B816 + #$B817, // $B817 + #$B818, // $B818 + #$B819, // $B819 + #$B81A, // $B81A + #$B81B, // $B81B + #$B81C, // $B81C + #$B81D, // $B81D + #$B81E, // $B81E + #$B81F, // $B81F + #$B820, // $B820 + #$B821, // $B821 + #$B822, // $B822 + #$B823, // $B823 + #$B824, // $B824 + #$B825, // $B825 + #$B826, // $B826 + #$B827, // $B827 + #$B828, // $B828 + #$B829, // $B829 + #$B82A, // $B82A + #$B82B, // $B82B + #$B82C, // $B82C + #$B82D, // $B82D + #$B82E, // $B82E + #$B82F, // $B82F + #$B830, // $B830 + #$B831, // $B831 + #$B832, // $B832 + #$B833, // $B833 + #$B834, // $B834 + #$B835, // $B835 + #$B836, // $B836 + #$B837, // $B837 + #$B838, // $B838 + #$B839, // $B839 + #$B83A, // $B83A + #$B83B, // $B83B + #$B83C, // $B83C + #$B83D, // $B83D + #$B83E, // $B83E + #$B83F, // $B83F + #$B840, // $B840 + #$B841, // $B841 + #$B842, // $B842 + #$B843, // $B843 + #$B844, // $B844 + #$B845, // $B845 + #$B846, // $B846 + #$B847, // $B847 + #$B848, // $B848 + #$B849, // $B849 + #$B84A, // $B84A + #$B84B, // $B84B + #$B84C, // $B84C + #$B84D, // $B84D + #$B84E, // $B84E + #$B84F, // $B84F + #$B850, // $B850 + #$B851, // $B851 + #$B852, // $B852 + #$B853, // $B853 + #$B854, // $B854 + #$B855, // $B855 + #$B856, // $B856 + #$B857, // $B857 + #$B858, // $B858 + #$B859, // $B859 + #$B85A, // $B85A + #$B85B, // $B85B + #$B85C, // $B85C + #$B85D, // $B85D + #$B85E, // $B85E + #$B85F, // $B85F + #$B860, // $B860 + #$B861, // $B861 + #$B862, // $B862 + #$B863, // $B863 + #$B864, // $B864 + #$B865, // $B865 + #$B866, // $B866 + #$B867, // $B867 + #$B868, // $B868 + #$B869, // $B869 + #$B86A, // $B86A + #$B86B, // $B86B + #$B86C, // $B86C + #$B86D, // $B86D + #$B86E, // $B86E + #$B86F, // $B86F + #$B870, // $B870 + #$B871, // $B871 + #$B872, // $B872 + #$B873, // $B873 + #$B874, // $B874 + #$B875, // $B875 + #$B876, // $B876 + #$B877, // $B877 + #$B878, // $B878 + #$B879, // $B879 + #$B87A, // $B87A + #$B87B, // $B87B + #$B87C, // $B87C + #$B87D, // $B87D + #$B87E, // $B87E + #$B87F, // $B87F + #$B880, // $B880 + #$B881, // $B881 + #$B882, // $B882 + #$B883, // $B883 + #$B884, // $B884 + #$B885, // $B885 + #$B886, // $B886 + #$B887, // $B887 + #$B888, // $B888 + #$B889, // $B889 + #$B88A, // $B88A + #$B88B, // $B88B + #$B88C, // $B88C + #$B88D, // $B88D + #$B88E, // $B88E + #$B88F, // $B88F + #$B890, // $B890 + #$B891, // $B891 + #$B892, // $B892 + #$B893, // $B893 + #$B894, // $B894 + #$B895, // $B895 + #$B896, // $B896 + #$B897, // $B897 + #$B898, // $B898 + #$B899, // $B899 + #$B89A, // $B89A + #$B89B, // $B89B + #$B89C, // $B89C + #$B89D, // $B89D + #$B89E, // $B89E + #$B89F, // $B89F + #$B8A0, // $B8A0 + #$B8A1, // $B8A1 + #$B8A2, // $B8A2 + #$B8A3, // $B8A3 + #$B8A4, // $B8A4 + #$B8A5, // $B8A5 + #$B8A6, // $B8A6 + #$B8A7, // $B8A7 + #$B8A8, // $B8A8 + #$B8A9, // $B8A9 + #$B8AA, // $B8AA + #$B8AB, // $B8AB + #$B8AC, // $B8AC + #$B8AD, // $B8AD + #$B8AE, // $B8AE + #$B8AF, // $B8AF + #$B8B0, // $B8B0 + #$B8B1, // $B8B1 + #$B8B2, // $B8B2 + #$B8B3, // $B8B3 + #$B8B4, // $B8B4 + #$B8B5, // $B8B5 + #$B8B6, // $B8B6 + #$B8B7, // $B8B7 + #$B8B8, // $B8B8 + #$B8B9, // $B8B9 + #$B8BA, // $B8BA + #$B8BB, // $B8BB + #$B8BC, // $B8BC + #$B8BD, // $B8BD + #$B8BE, // $B8BE + #$B8BF, // $B8BF + #$B8C0, // $B8C0 + #$B8C1, // $B8C1 + #$B8C2, // $B8C2 + #$B8C3, // $B8C3 + #$B8C4, // $B8C4 + #$B8C5, // $B8C5 + #$B8C6, // $B8C6 + #$B8C7, // $B8C7 + #$B8C8, // $B8C8 + #$B8C9, // $B8C9 + #$B8CA, // $B8CA + #$B8CB, // $B8CB + #$B8CC, // $B8CC + #$B8CD, // $B8CD + #$B8CE, // $B8CE + #$B8CF, // $B8CF + #$B8D0, // $B8D0 + #$B8D1, // $B8D1 + #$B8D2, // $B8D2 + #$B8D3, // $B8D3 + #$B8D4, // $B8D4 + #$B8D5, // $B8D5 + #$B8D6, // $B8D6 + #$B8D7, // $B8D7 + #$B8D8, // $B8D8 + #$B8D9, // $B8D9 + #$B8DA, // $B8DA + #$B8DB, // $B8DB + #$B8DC, // $B8DC + #$B8DD, // $B8DD + #$B8DE, // $B8DE + #$B8DF, // $B8DF + #$B8E0, // $B8E0 + #$B8E1, // $B8E1 + #$B8E2, // $B8E2 + #$B8E3, // $B8E3 + #$B8E4, // $B8E4 + #$B8E5, // $B8E5 + #$B8E6, // $B8E6 + #$B8E7, // $B8E7 + #$B8E8, // $B8E8 + #$B8E9, // $B8E9 + #$B8EA, // $B8EA + #$B8EB, // $B8EB + #$B8EC, // $B8EC + #$B8ED, // $B8ED + #$B8EE, // $B8EE + #$B8EF, // $B8EF + #$B8F0, // $B8F0 + #$B8F1, // $B8F1 + #$B8F2, // $B8F2 + #$B8F3, // $B8F3 + #$B8F4, // $B8F4 + #$B8F5, // $B8F5 + #$B8F6, // $B8F6 + #$B8F7, // $B8F7 + #$B8F8, // $B8F8 + #$B8F9, // $B8F9 + #$B8FA, // $B8FA + #$B8FB, // $B8FB + #$B8FC, // $B8FC + #$B8FD, // $B8FD + #$B8FE, // $B8FE + #$B8FF, // $B8FF + #$B900, // $B900 + #$B901, // $B901 + #$B902, // $B902 + #$B903, // $B903 + #$B904, // $B904 + #$B905, // $B905 + #$B906, // $B906 + #$B907, // $B907 + #$B908, // $B908 + #$B909, // $B909 + #$B90A, // $B90A + #$B90B, // $B90B + #$B90C, // $B90C + #$B90D, // $B90D + #$B90E, // $B90E + #$B90F, // $B90F + #$B910, // $B910 + #$B911, // $B911 + #$B912, // $B912 + #$B913, // $B913 + #$B914, // $B914 + #$B915, // $B915 + #$B916, // $B916 + #$B917, // $B917 + #$B918, // $B918 + #$B919, // $B919 + #$B91A, // $B91A + #$B91B, // $B91B + #$B91C, // $B91C + #$B91D, // $B91D + #$B91E, // $B91E + #$B91F, // $B91F + #$B920, // $B920 + #$B921, // $B921 + #$B922, // $B922 + #$B923, // $B923 + #$B924, // $B924 + #$B925, // $B925 + #$B926, // $B926 + #$B927, // $B927 + #$B928, // $B928 + #$B929, // $B929 + #$B92A, // $B92A + #$B92B, // $B92B + #$B92C, // $B92C + #$B92D, // $B92D + #$B92E, // $B92E + #$B92F, // $B92F + #$B930, // $B930 + #$B931, // $B931 + #$B932, // $B932 + #$B933, // $B933 + #$B934, // $B934 + #$B935, // $B935 + #$B936, // $B936 + #$B937, // $B937 + #$B938, // $B938 + #$B939, // $B939 + #$B93A, // $B93A + #$B93B, // $B93B + #$B93C, // $B93C + #$B93D, // $B93D + #$B93E, // $B93E + #$B93F, // $B93F + #$B940, // $B940 + #$B941, // $B941 + #$B942, // $B942 + #$B943, // $B943 + #$B944, // $B944 + #$B945, // $B945 + #$B946, // $B946 + #$B947, // $B947 + #$B948, // $B948 + #$B949, // $B949 + #$B94A, // $B94A + #$B94B, // $B94B + #$B94C, // $B94C + #$B94D, // $B94D + #$B94E, // $B94E + #$B94F, // $B94F + #$B950, // $B950 + #$B951, // $B951 + #$B952, // $B952 + #$B953, // $B953 + #$B954, // $B954 + #$B955, // $B955 + #$B956, // $B956 + #$B957, // $B957 + #$B958, // $B958 + #$B959, // $B959 + #$B95A, // $B95A + #$B95B, // $B95B + #$B95C, // $B95C + #$B95D, // $B95D + #$B95E, // $B95E + #$B95F, // $B95F + #$B960, // $B960 + #$B961, // $B961 + #$B962, // $B962 + #$B963, // $B963 + #$B964, // $B964 + #$B965, // $B965 + #$B966, // $B966 + #$B967, // $B967 + #$B968, // $B968 + #$B969, // $B969 + #$B96A, // $B96A + #$B96B, // $B96B + #$B96C, // $B96C + #$B96D, // $B96D + #$B96E, // $B96E + #$B96F, // $B96F + #$B970, // $B970 + #$B971, // $B971 + #$B972, // $B972 + #$B973, // $B973 + #$B974, // $B974 + #$B975, // $B975 + #$B976, // $B976 + #$B977, // $B977 + #$B978, // $B978 + #$B979, // $B979 + #$B97A, // $B97A + #$B97B, // $B97B + #$B97C, // $B97C + #$B97D, // $B97D + #$B97E, // $B97E + #$B97F, // $B97F + #$B980, // $B980 + #$B981, // $B981 + #$B982, // $B982 + #$B983, // $B983 + #$B984, // $B984 + #$B985, // $B985 + #$B986, // $B986 + #$B987, // $B987 + #$B988, // $B988 + #$B989, // $B989 + #$B98A, // $B98A + #$B98B, // $B98B + #$B98C, // $B98C + #$B98D, // $B98D + #$B98E, // $B98E + #$B98F, // $B98F + #$B990, // $B990 + #$B991, // $B991 + #$B992, // $B992 + #$B993, // $B993 + #$B994, // $B994 + #$B995, // $B995 + #$B996, // $B996 + #$B997, // $B997 + #$B998, // $B998 + #$B999, // $B999 + #$B99A, // $B99A + #$B99B, // $B99B + #$B99C, // $B99C + #$B99D, // $B99D + #$B99E, // $B99E + #$B99F, // $B99F + #$B9A0, // $B9A0 + #$B9A1, // $B9A1 + #$B9A2, // $B9A2 + #$B9A3, // $B9A3 + #$B9A4, // $B9A4 + #$B9A5, // $B9A5 + #$B9A6, // $B9A6 + #$B9A7, // $B9A7 + #$B9A8, // $B9A8 + #$B9A9, // $B9A9 + #$B9AA, // $B9AA + #$B9AB, // $B9AB + #$B9AC, // $B9AC + #$B9AD, // $B9AD + #$B9AE, // $B9AE + #$B9AF, // $B9AF + #$B9B0, // $B9B0 + #$B9B1, // $B9B1 + #$B9B2, // $B9B2 + #$B9B3, // $B9B3 + #$B9B4, // $B9B4 + #$B9B5, // $B9B5 + #$B9B6, // $B9B6 + #$B9B7, // $B9B7 + #$B9B8, // $B9B8 + #$B9B9, // $B9B9 + #$B9BA, // $B9BA + #$B9BB, // $B9BB + #$B9BC, // $B9BC + #$B9BD, // $B9BD + #$B9BE, // $B9BE + #$B9BF, // $B9BF + #$B9C0, // $B9C0 + #$B9C1, // $B9C1 + #$B9C2, // $B9C2 + #$B9C3, // $B9C3 + #$B9C4, // $B9C4 + #$B9C5, // $B9C5 + #$B9C6, // $B9C6 + #$B9C7, // $B9C7 + #$B9C8, // $B9C8 + #$B9C9, // $B9C9 + #$B9CA, // $B9CA + #$B9CB, // $B9CB + #$B9CC, // $B9CC + #$B9CD, // $B9CD + #$B9CE, // $B9CE + #$B9CF, // $B9CF + #$B9D0, // $B9D0 + #$B9D1, // $B9D1 + #$B9D2, // $B9D2 + #$B9D3, // $B9D3 + #$B9D4, // $B9D4 + #$B9D5, // $B9D5 + #$B9D6, // $B9D6 + #$B9D7, // $B9D7 + #$B9D8, // $B9D8 + #$B9D9, // $B9D9 + #$B9DA, // $B9DA + #$B9DB, // $B9DB + #$B9DC, // $B9DC + #$B9DD, // $B9DD + #$B9DE, // $B9DE + #$B9DF, // $B9DF + #$B9E0, // $B9E0 + #$B9E1, // $B9E1 + #$B9E2, // $B9E2 + #$B9E3, // $B9E3 + #$B9E4, // $B9E4 + #$B9E5, // $B9E5 + #$B9E6, // $B9E6 + #$B9E7, // $B9E7 + #$B9E8, // $B9E8 + #$B9E9, // $B9E9 + #$B9EA, // $B9EA + #$B9EB, // $B9EB + #$B9EC, // $B9EC + #$B9ED, // $B9ED + #$B9EE, // $B9EE + #$B9EF, // $B9EF + #$B9F0, // $B9F0 + #$B9F1, // $B9F1 + #$B9F2, // $B9F2 + #$B9F3, // $B9F3 + #$B9F4, // $B9F4 + #$B9F5, // $B9F5 + #$B9F6, // $B9F6 + #$B9F7, // $B9F7 + #$B9F8, // $B9F8 + #$B9F9, // $B9F9 + #$B9FA, // $B9FA + #$B9FB, // $B9FB + #$B9FC, // $B9FC + #$B9FD, // $B9FD + #$B9FE, // $B9FE + #$B9FF, // $B9FF + #$BA00, // $BA00 + #$BA01, // $BA01 + #$BA02, // $BA02 + #$BA03, // $BA03 + #$BA04, // $BA04 + #$BA05, // $BA05 + #$BA06, // $BA06 + #$BA07, // $BA07 + #$BA08, // $BA08 + #$BA09, // $BA09 + #$BA0A, // $BA0A + #$BA0B, // $BA0B + #$BA0C, // $BA0C + #$BA0D, // $BA0D + #$BA0E, // $BA0E + #$BA0F, // $BA0F + #$BA10, // $BA10 + #$BA11, // $BA11 + #$BA12, // $BA12 + #$BA13, // $BA13 + #$BA14, // $BA14 + #$BA15, // $BA15 + #$BA16, // $BA16 + #$BA17, // $BA17 + #$BA18, // $BA18 + #$BA19, // $BA19 + #$BA1A, // $BA1A + #$BA1B, // $BA1B + #$BA1C, // $BA1C + #$BA1D, // $BA1D + #$BA1E, // $BA1E + #$BA1F, // $BA1F + #$BA20, // $BA20 + #$BA21, // $BA21 + #$BA22, // $BA22 + #$BA23, // $BA23 + #$BA24, // $BA24 + #$BA25, // $BA25 + #$BA26, // $BA26 + #$BA27, // $BA27 + #$BA28, // $BA28 + #$BA29, // $BA29 + #$BA2A, // $BA2A + #$BA2B, // $BA2B + #$BA2C, // $BA2C + #$BA2D, // $BA2D + #$BA2E, // $BA2E + #$BA2F, // $BA2F + #$BA30, // $BA30 + #$BA31, // $BA31 + #$BA32, // $BA32 + #$BA33, // $BA33 + #$BA34, // $BA34 + #$BA35, // $BA35 + #$BA36, // $BA36 + #$BA37, // $BA37 + #$BA38, // $BA38 + #$BA39, // $BA39 + #$BA3A, // $BA3A + #$BA3B, // $BA3B + #$BA3C, // $BA3C + #$BA3D, // $BA3D + #$BA3E, // $BA3E + #$BA3F, // $BA3F + #$BA40, // $BA40 + #$BA41, // $BA41 + #$BA42, // $BA42 + #$BA43, // $BA43 + #$BA44, // $BA44 + #$BA45, // $BA45 + #$BA46, // $BA46 + #$BA47, // $BA47 + #$BA48, // $BA48 + #$BA49, // $BA49 + #$BA4A, // $BA4A + #$BA4B, // $BA4B + #$BA4C, // $BA4C + #$BA4D, // $BA4D + #$BA4E, // $BA4E + #$BA4F, // $BA4F + #$BA50, // $BA50 + #$BA51, // $BA51 + #$BA52, // $BA52 + #$BA53, // $BA53 + #$BA54, // $BA54 + #$BA55, // $BA55 + #$BA56, // $BA56 + #$BA57, // $BA57 + #$BA58, // $BA58 + #$BA59, // $BA59 + #$BA5A, // $BA5A + #$BA5B, // $BA5B + #$BA5C, // $BA5C + #$BA5D, // $BA5D + #$BA5E, // $BA5E + #$BA5F, // $BA5F + #$BA60, // $BA60 + #$BA61, // $BA61 + #$BA62, // $BA62 + #$BA63, // $BA63 + #$BA64, // $BA64 + #$BA65, // $BA65 + #$BA66, // $BA66 + #$BA67, // $BA67 + #$BA68, // $BA68 + #$BA69, // $BA69 + #$BA6A, // $BA6A + #$BA6B, // $BA6B + #$BA6C, // $BA6C + #$BA6D, // $BA6D + #$BA6E, // $BA6E + #$BA6F, // $BA6F + #$BA70, // $BA70 + #$BA71, // $BA71 + #$BA72, // $BA72 + #$BA73, // $BA73 + #$BA74, // $BA74 + #$BA75, // $BA75 + #$BA76, // $BA76 + #$BA77, // $BA77 + #$BA78, // $BA78 + #$BA79, // $BA79 + #$BA7A, // $BA7A + #$BA7B, // $BA7B + #$BA7C, // $BA7C + #$BA7D, // $BA7D + #$BA7E, // $BA7E + #$BA7F, // $BA7F + #$BA80, // $BA80 + #$BA81, // $BA81 + #$BA82, // $BA82 + #$BA83, // $BA83 + #$BA84, // $BA84 + #$BA85, // $BA85 + #$BA86, // $BA86 + #$BA87, // $BA87 + #$BA88, // $BA88 + #$BA89, // $BA89 + #$BA8A, // $BA8A + #$BA8B, // $BA8B + #$BA8C, // $BA8C + #$BA8D, // $BA8D + #$BA8E, // $BA8E + #$BA8F, // $BA8F + #$BA90, // $BA90 + #$BA91, // $BA91 + #$BA92, // $BA92 + #$BA93, // $BA93 + #$BA94, // $BA94 + #$BA95, // $BA95 + #$BA96, // $BA96 + #$BA97, // $BA97 + #$BA98, // $BA98 + #$BA99, // $BA99 + #$BA9A, // $BA9A + #$BA9B, // $BA9B + #$BA9C, // $BA9C + #$BA9D, // $BA9D + #$BA9E, // $BA9E + #$BA9F, // $BA9F + #$BAA0, // $BAA0 + #$BAA1, // $BAA1 + #$BAA2, // $BAA2 + #$BAA3, // $BAA3 + #$BAA4, // $BAA4 + #$BAA5, // $BAA5 + #$BAA6, // $BAA6 + #$BAA7, // $BAA7 + #$BAA8, // $BAA8 + #$BAA9, // $BAA9 + #$BAAA, // $BAAA + #$BAAB, // $BAAB + #$BAAC, // $BAAC + #$BAAD, // $BAAD + #$BAAE, // $BAAE + #$BAAF, // $BAAF + #$BAB0, // $BAB0 + #$BAB1, // $BAB1 + #$BAB2, // $BAB2 + #$BAB3, // $BAB3 + #$BAB4, // $BAB4 + #$BAB5, // $BAB5 + #$BAB6, // $BAB6 + #$BAB7, // $BAB7 + #$BAB8, // $BAB8 + #$BAB9, // $BAB9 + #$BABA, // $BABA + #$BABB, // $BABB + #$BABC, // $BABC + #$BABD, // $BABD + #$BABE, // $BABE + #$BABF, // $BABF + #$BAC0, // $BAC0 + #$BAC1, // $BAC1 + #$BAC2, // $BAC2 + #$BAC3, // $BAC3 + #$BAC4, // $BAC4 + #$BAC5, // $BAC5 + #$BAC6, // $BAC6 + #$BAC7, // $BAC7 + #$BAC8, // $BAC8 + #$BAC9, // $BAC9 + #$BACA, // $BACA + #$BACB, // $BACB + #$BACC, // $BACC + #$BACD, // $BACD + #$BACE, // $BACE + #$BACF, // $BACF + #$BAD0, // $BAD0 + #$BAD1, // $BAD1 + #$BAD2, // $BAD2 + #$BAD3, // $BAD3 + #$BAD4, // $BAD4 + #$BAD5, // $BAD5 + #$BAD6, // $BAD6 + #$BAD7, // $BAD7 + #$BAD8, // $BAD8 + #$BAD9, // $BAD9 + #$BADA, // $BADA + #$BADB, // $BADB + #$BADC, // $BADC + #$BADD, // $BADD + #$BADE, // $BADE + #$BADF, // $BADF + #$BAE0, // $BAE0 + #$BAE1, // $BAE1 + #$BAE2, // $BAE2 + #$BAE3, // $BAE3 + #$BAE4, // $BAE4 + #$BAE5, // $BAE5 + #$BAE6, // $BAE6 + #$BAE7, // $BAE7 + #$BAE8, // $BAE8 + #$BAE9, // $BAE9 + #$BAEA, // $BAEA + #$BAEB, // $BAEB + #$BAEC, // $BAEC + #$BAED, // $BAED + #$BAEE, // $BAEE + #$BAEF, // $BAEF + #$BAF0, // $BAF0 + #$BAF1, // $BAF1 + #$BAF2, // $BAF2 + #$BAF3, // $BAF3 + #$BAF4, // $BAF4 + #$BAF5, // $BAF5 + #$BAF6, // $BAF6 + #$BAF7, // $BAF7 + #$BAF8, // $BAF8 + #$BAF9, // $BAF9 + #$BAFA, // $BAFA + #$BAFB, // $BAFB + #$BAFC, // $BAFC + #$BAFD, // $BAFD + #$BAFE, // $BAFE + #$BAFF, // $BAFF + #$BB00, // $BB00 + #$BB01, // $BB01 + #$BB02, // $BB02 + #$BB03, // $BB03 + #$BB04, // $BB04 + #$BB05, // $BB05 + #$BB06, // $BB06 + #$BB07, // $BB07 + #$BB08, // $BB08 + #$BB09, // $BB09 + #$BB0A, // $BB0A + #$BB0B, // $BB0B + #$BB0C, // $BB0C + #$BB0D, // $BB0D + #$BB0E, // $BB0E + #$BB0F, // $BB0F + #$BB10, // $BB10 + #$BB11, // $BB11 + #$BB12, // $BB12 + #$BB13, // $BB13 + #$BB14, // $BB14 + #$BB15, // $BB15 + #$BB16, // $BB16 + #$BB17, // $BB17 + #$BB18, // $BB18 + #$BB19, // $BB19 + #$BB1A, // $BB1A + #$BB1B, // $BB1B + #$BB1C, // $BB1C + #$BB1D, // $BB1D + #$BB1E, // $BB1E + #$BB1F, // $BB1F + #$BB20, // $BB20 + #$BB21, // $BB21 + #$BB22, // $BB22 + #$BB23, // $BB23 + #$BB24, // $BB24 + #$BB25, // $BB25 + #$BB26, // $BB26 + #$BB27, // $BB27 + #$BB28, // $BB28 + #$BB29, // $BB29 + #$BB2A, // $BB2A + #$BB2B, // $BB2B + #$BB2C, // $BB2C + #$BB2D, // $BB2D + #$BB2E, // $BB2E + #$BB2F, // $BB2F + #$BB30, // $BB30 + #$BB31, // $BB31 + #$BB32, // $BB32 + #$BB33, // $BB33 + #$BB34, // $BB34 + #$BB35, // $BB35 + #$BB36, // $BB36 + #$BB37, // $BB37 + #$BB38, // $BB38 + #$BB39, // $BB39 + #$BB3A, // $BB3A + #$BB3B, // $BB3B + #$BB3C, // $BB3C + #$BB3D, // $BB3D + #$BB3E, // $BB3E + #$BB3F, // $BB3F + #$BB40, // $BB40 + #$BB41, // $BB41 + #$BB42, // $BB42 + #$BB43, // $BB43 + #$BB44, // $BB44 + #$BB45, // $BB45 + #$BB46, // $BB46 + #$BB47, // $BB47 + #$BB48, // $BB48 + #$BB49, // $BB49 + #$BB4A, // $BB4A + #$BB4B, // $BB4B + #$BB4C, // $BB4C + #$BB4D, // $BB4D + #$BB4E, // $BB4E + #$BB4F, // $BB4F + #$BB50, // $BB50 + #$BB51, // $BB51 + #$BB52, // $BB52 + #$BB53, // $BB53 + #$BB54, // $BB54 + #$BB55, // $BB55 + #$BB56, // $BB56 + #$BB57, // $BB57 + #$BB58, // $BB58 + #$BB59, // $BB59 + #$BB5A, // $BB5A + #$BB5B, // $BB5B + #$BB5C, // $BB5C + #$BB5D, // $BB5D + #$BB5E, // $BB5E + #$BB5F, // $BB5F + #$BB60, // $BB60 + #$BB61, // $BB61 + #$BB62, // $BB62 + #$BB63, // $BB63 + #$BB64, // $BB64 + #$BB65, // $BB65 + #$BB66, // $BB66 + #$BB67, // $BB67 + #$BB68, // $BB68 + #$BB69, // $BB69 + #$BB6A, // $BB6A + #$BB6B, // $BB6B + #$BB6C, // $BB6C + #$BB6D, // $BB6D + #$BB6E, // $BB6E + #$BB6F, // $BB6F + #$BB70, // $BB70 + #$BB71, // $BB71 + #$BB72, // $BB72 + #$BB73, // $BB73 + #$BB74, // $BB74 + #$BB75, // $BB75 + #$BB76, // $BB76 + #$BB77, // $BB77 + #$BB78, // $BB78 + #$BB79, // $BB79 + #$BB7A, // $BB7A + #$BB7B, // $BB7B + #$BB7C, // $BB7C + #$BB7D, // $BB7D + #$BB7E, // $BB7E + #$BB7F, // $BB7F + #$BB80, // $BB80 + #$BB81, // $BB81 + #$BB82, // $BB82 + #$BB83, // $BB83 + #$BB84, // $BB84 + #$BB85, // $BB85 + #$BB86, // $BB86 + #$BB87, // $BB87 + #$BB88, // $BB88 + #$BB89, // $BB89 + #$BB8A, // $BB8A + #$BB8B, // $BB8B + #$BB8C, // $BB8C + #$BB8D, // $BB8D + #$BB8E, // $BB8E + #$BB8F, // $BB8F + #$BB90, // $BB90 + #$BB91, // $BB91 + #$BB92, // $BB92 + #$BB93, // $BB93 + #$BB94, // $BB94 + #$BB95, // $BB95 + #$BB96, // $BB96 + #$BB97, // $BB97 + #$BB98, // $BB98 + #$BB99, // $BB99 + #$BB9A, // $BB9A + #$BB9B, // $BB9B + #$BB9C, // $BB9C + #$BB9D, // $BB9D + #$BB9E, // $BB9E + #$BB9F, // $BB9F + #$BBA0, // $BBA0 + #$BBA1, // $BBA1 + #$BBA2, // $BBA2 + #$BBA3, // $BBA3 + #$BBA4, // $BBA4 + #$BBA5, // $BBA5 + #$BBA6, // $BBA6 + #$BBA7, // $BBA7 + #$BBA8, // $BBA8 + #$BBA9, // $BBA9 + #$BBAA, // $BBAA + #$BBAB, // $BBAB + #$BBAC, // $BBAC + #$BBAD, // $BBAD + #$BBAE, // $BBAE + #$BBAF, // $BBAF + #$BBB0, // $BBB0 + #$BBB1, // $BBB1 + #$BBB2, // $BBB2 + #$BBB3, // $BBB3 + #$BBB4, // $BBB4 + #$BBB5, // $BBB5 + #$BBB6, // $BBB6 + #$BBB7, // $BBB7 + #$BBB8, // $BBB8 + #$BBB9, // $BBB9 + #$BBBA, // $BBBA + #$BBBB, // $BBBB + #$BBBC, // $BBBC + #$BBBD, // $BBBD + #$BBBE, // $BBBE + #$BBBF, // $BBBF + #$BBC0, // $BBC0 + #$BBC1, // $BBC1 + #$BBC2, // $BBC2 + #$BBC3, // $BBC3 + #$BBC4, // $BBC4 + #$BBC5, // $BBC5 + #$BBC6, // $BBC6 + #$BBC7, // $BBC7 + #$BBC8, // $BBC8 + #$BBC9, // $BBC9 + #$BBCA, // $BBCA + #$BBCB, // $BBCB + #$BBCC, // $BBCC + #$BBCD, // $BBCD + #$BBCE, // $BBCE + #$BBCF, // $BBCF + #$BBD0, // $BBD0 + #$BBD1, // $BBD1 + #$BBD2, // $BBD2 + #$BBD3, // $BBD3 + #$BBD4, // $BBD4 + #$BBD5, // $BBD5 + #$BBD6, // $BBD6 + #$BBD7, // $BBD7 + #$BBD8, // $BBD8 + #$BBD9, // $BBD9 + #$BBDA, // $BBDA + #$BBDB, // $BBDB + #$BBDC, // $BBDC + #$BBDD, // $BBDD + #$BBDE, // $BBDE + #$BBDF, // $BBDF + #$BBE0, // $BBE0 + #$BBE1, // $BBE1 + #$BBE2, // $BBE2 + #$BBE3, // $BBE3 + #$BBE4, // $BBE4 + #$BBE5, // $BBE5 + #$BBE6, // $BBE6 + #$BBE7, // $BBE7 + #$BBE8, // $BBE8 + #$BBE9, // $BBE9 + #$BBEA, // $BBEA + #$BBEB, // $BBEB + #$BBEC, // $BBEC + #$BBED, // $BBED + #$BBEE, // $BBEE + #$BBEF, // $BBEF + #$BBF0, // $BBF0 + #$BBF1, // $BBF1 + #$BBF2, // $BBF2 + #$BBF3, // $BBF3 + #$BBF4, // $BBF4 + #$BBF5, // $BBF5 + #$BBF6, // $BBF6 + #$BBF7, // $BBF7 + #$BBF8, // $BBF8 + #$BBF9, // $BBF9 + #$BBFA, // $BBFA + #$BBFB, // $BBFB + #$BBFC, // $BBFC + #$BBFD, // $BBFD + #$BBFE, // $BBFE + #$BBFF, // $BBFF + #$BC00, // $BC00 + #$BC01, // $BC01 + #$BC02, // $BC02 + #$BC03, // $BC03 + #$BC04, // $BC04 + #$BC05, // $BC05 + #$BC06, // $BC06 + #$BC07, // $BC07 + #$BC08, // $BC08 + #$BC09, // $BC09 + #$BC0A, // $BC0A + #$BC0B, // $BC0B + #$BC0C, // $BC0C + #$BC0D, // $BC0D + #$BC0E, // $BC0E + #$BC0F, // $BC0F + #$BC10, // $BC10 + #$BC11, // $BC11 + #$BC12, // $BC12 + #$BC13, // $BC13 + #$BC14, // $BC14 + #$BC15, // $BC15 + #$BC16, // $BC16 + #$BC17, // $BC17 + #$BC18, // $BC18 + #$BC19, // $BC19 + #$BC1A, // $BC1A + #$BC1B, // $BC1B + #$BC1C, // $BC1C + #$BC1D, // $BC1D + #$BC1E, // $BC1E + #$BC1F, // $BC1F + #$BC20, // $BC20 + #$BC21, // $BC21 + #$BC22, // $BC22 + #$BC23, // $BC23 + #$BC24, // $BC24 + #$BC25, // $BC25 + #$BC26, // $BC26 + #$BC27, // $BC27 + #$BC28, // $BC28 + #$BC29, // $BC29 + #$BC2A, // $BC2A + #$BC2B, // $BC2B + #$BC2C, // $BC2C + #$BC2D, // $BC2D + #$BC2E, // $BC2E + #$BC2F, // $BC2F + #$BC30, // $BC30 + #$BC31, // $BC31 + #$BC32, // $BC32 + #$BC33, // $BC33 + #$BC34, // $BC34 + #$BC35, // $BC35 + #$BC36, // $BC36 + #$BC37, // $BC37 + #$BC38, // $BC38 + #$BC39, // $BC39 + #$BC3A, // $BC3A + #$BC3B, // $BC3B + #$BC3C, // $BC3C + #$BC3D, // $BC3D + #$BC3E, // $BC3E + #$BC3F, // $BC3F + #$BC40, // $BC40 + #$BC41, // $BC41 + #$BC42, // $BC42 + #$BC43, // $BC43 + #$BC44, // $BC44 + #$BC45, // $BC45 + #$BC46, // $BC46 + #$BC47, // $BC47 + #$BC48, // $BC48 + #$BC49, // $BC49 + #$BC4A, // $BC4A + #$BC4B, // $BC4B + #$BC4C, // $BC4C + #$BC4D, // $BC4D + #$BC4E, // $BC4E + #$BC4F, // $BC4F + #$BC50, // $BC50 + #$BC51, // $BC51 + #$BC52, // $BC52 + #$BC53, // $BC53 + #$BC54, // $BC54 + #$BC55, // $BC55 + #$BC56, // $BC56 + #$BC57, // $BC57 + #$BC58, // $BC58 + #$BC59, // $BC59 + #$BC5A, // $BC5A + #$BC5B, // $BC5B + #$BC5C, // $BC5C + #$BC5D, // $BC5D + #$BC5E, // $BC5E + #$BC5F, // $BC5F + #$BC60, // $BC60 + #$BC61, // $BC61 + #$BC62, // $BC62 + #$BC63, // $BC63 + #$BC64, // $BC64 + #$BC65, // $BC65 + #$BC66, // $BC66 + #$BC67, // $BC67 + #$BC68, // $BC68 + #$BC69, // $BC69 + #$BC6A, // $BC6A + #$BC6B, // $BC6B + #$BC6C, // $BC6C + #$BC6D, // $BC6D + #$BC6E, // $BC6E + #$BC6F, // $BC6F + #$BC70, // $BC70 + #$BC71, // $BC71 + #$BC72, // $BC72 + #$BC73, // $BC73 + #$BC74, // $BC74 + #$BC75, // $BC75 + #$BC76, // $BC76 + #$BC77, // $BC77 + #$BC78, // $BC78 + #$BC79, // $BC79 + #$BC7A, // $BC7A + #$BC7B, // $BC7B + #$BC7C, // $BC7C + #$BC7D, // $BC7D + #$BC7E, // $BC7E + #$BC7F, // $BC7F + #$BC80, // $BC80 + #$BC81, // $BC81 + #$BC82, // $BC82 + #$BC83, // $BC83 + #$BC84, // $BC84 + #$BC85, // $BC85 + #$BC86, // $BC86 + #$BC87, // $BC87 + #$BC88, // $BC88 + #$BC89, // $BC89 + #$BC8A, // $BC8A + #$BC8B, // $BC8B + #$BC8C, // $BC8C + #$BC8D, // $BC8D + #$BC8E, // $BC8E + #$BC8F, // $BC8F + #$BC90, // $BC90 + #$BC91, // $BC91 + #$BC92, // $BC92 + #$BC93, // $BC93 + #$BC94, // $BC94 + #$BC95, // $BC95 + #$BC96, // $BC96 + #$BC97, // $BC97 + #$BC98, // $BC98 + #$BC99, // $BC99 + #$BC9A, // $BC9A + #$BC9B, // $BC9B + #$BC9C, // $BC9C + #$BC9D, // $BC9D + #$BC9E, // $BC9E + #$BC9F, // $BC9F + #$BCA0, // $BCA0 + #$BCA1, // $BCA1 + #$BCA2, // $BCA2 + #$BCA3, // $BCA3 + #$BCA4, // $BCA4 + #$BCA5, // $BCA5 + #$BCA6, // $BCA6 + #$BCA7, // $BCA7 + #$BCA8, // $BCA8 + #$BCA9, // $BCA9 + #$BCAA, // $BCAA + #$BCAB, // $BCAB + #$BCAC, // $BCAC + #$BCAD, // $BCAD + #$BCAE, // $BCAE + #$BCAF, // $BCAF + #$BCB0, // $BCB0 + #$BCB1, // $BCB1 + #$BCB2, // $BCB2 + #$BCB3, // $BCB3 + #$BCB4, // $BCB4 + #$BCB5, // $BCB5 + #$BCB6, // $BCB6 + #$BCB7, // $BCB7 + #$BCB8, // $BCB8 + #$BCB9, // $BCB9 + #$BCBA, // $BCBA + #$BCBB, // $BCBB + #$BCBC, // $BCBC + #$BCBD, // $BCBD + #$BCBE, // $BCBE + #$BCBF, // $BCBF + #$BCC0, // $BCC0 + #$BCC1, // $BCC1 + #$BCC2, // $BCC2 + #$BCC3, // $BCC3 + #$BCC4, // $BCC4 + #$BCC5, // $BCC5 + #$BCC6, // $BCC6 + #$BCC7, // $BCC7 + #$BCC8, // $BCC8 + #$BCC9, // $BCC9 + #$BCCA, // $BCCA + #$BCCB, // $BCCB + #$BCCC, // $BCCC + #$BCCD, // $BCCD + #$BCCE, // $BCCE + #$BCCF, // $BCCF + #$BCD0, // $BCD0 + #$BCD1, // $BCD1 + #$BCD2, // $BCD2 + #$BCD3, // $BCD3 + #$BCD4, // $BCD4 + #$BCD5, // $BCD5 + #$BCD6, // $BCD6 + #$BCD7, // $BCD7 + #$BCD8, // $BCD8 + #$BCD9, // $BCD9 + #$BCDA, // $BCDA + #$BCDB, // $BCDB + #$BCDC, // $BCDC + #$BCDD, // $BCDD + #$BCDE, // $BCDE + #$BCDF, // $BCDF + #$BCE0, // $BCE0 + #$BCE1, // $BCE1 + #$BCE2, // $BCE2 + #$BCE3, // $BCE3 + #$BCE4, // $BCE4 + #$BCE5, // $BCE5 + #$BCE6, // $BCE6 + #$BCE7, // $BCE7 + #$BCE8, // $BCE8 + #$BCE9, // $BCE9 + #$BCEA, // $BCEA + #$BCEB, // $BCEB + #$BCEC, // $BCEC + #$BCED, // $BCED + #$BCEE, // $BCEE + #$BCEF, // $BCEF + #$BCF0, // $BCF0 + #$BCF1, // $BCF1 + #$BCF2, // $BCF2 + #$BCF3, // $BCF3 + #$BCF4, // $BCF4 + #$BCF5, // $BCF5 + #$BCF6, // $BCF6 + #$BCF7, // $BCF7 + #$BCF8, // $BCF8 + #$BCF9, // $BCF9 + #$BCFA, // $BCFA + #$BCFB, // $BCFB + #$BCFC, // $BCFC + #$BCFD, // $BCFD + #$BCFE, // $BCFE + #$BCFF, // $BCFF + #$BD00, // $BD00 + #$BD01, // $BD01 + #$BD02, // $BD02 + #$BD03, // $BD03 + #$BD04, // $BD04 + #$BD05, // $BD05 + #$BD06, // $BD06 + #$BD07, // $BD07 + #$BD08, // $BD08 + #$BD09, // $BD09 + #$BD0A, // $BD0A + #$BD0B, // $BD0B + #$BD0C, // $BD0C + #$BD0D, // $BD0D + #$BD0E, // $BD0E + #$BD0F, // $BD0F + #$BD10, // $BD10 + #$BD11, // $BD11 + #$BD12, // $BD12 + #$BD13, // $BD13 + #$BD14, // $BD14 + #$BD15, // $BD15 + #$BD16, // $BD16 + #$BD17, // $BD17 + #$BD18, // $BD18 + #$BD19, // $BD19 + #$BD1A, // $BD1A + #$BD1B, // $BD1B + #$BD1C, // $BD1C + #$BD1D, // $BD1D + #$BD1E, // $BD1E + #$BD1F, // $BD1F + #$BD20, // $BD20 + #$BD21, // $BD21 + #$BD22, // $BD22 + #$BD23, // $BD23 + #$BD24, // $BD24 + #$BD25, // $BD25 + #$BD26, // $BD26 + #$BD27, // $BD27 + #$BD28, // $BD28 + #$BD29, // $BD29 + #$BD2A, // $BD2A + #$BD2B, // $BD2B + #$BD2C, // $BD2C + #$BD2D, // $BD2D + #$BD2E, // $BD2E + #$BD2F, // $BD2F + #$BD30, // $BD30 + #$BD31, // $BD31 + #$BD32, // $BD32 + #$BD33, // $BD33 + #$BD34, // $BD34 + #$BD35, // $BD35 + #$BD36, // $BD36 + #$BD37, // $BD37 + #$BD38, // $BD38 + #$BD39, // $BD39 + #$BD3A, // $BD3A + #$BD3B, // $BD3B + #$BD3C, // $BD3C + #$BD3D, // $BD3D + #$BD3E, // $BD3E + #$BD3F, // $BD3F + #$BD40, // $BD40 + #$BD41, // $BD41 + #$BD42, // $BD42 + #$BD43, // $BD43 + #$BD44, // $BD44 + #$BD45, // $BD45 + #$BD46, // $BD46 + #$BD47, // $BD47 + #$BD48, // $BD48 + #$BD49, // $BD49 + #$BD4A, // $BD4A + #$BD4B, // $BD4B + #$BD4C, // $BD4C + #$BD4D, // $BD4D + #$BD4E, // $BD4E + #$BD4F, // $BD4F + #$BD50, // $BD50 + #$BD51, // $BD51 + #$BD52, // $BD52 + #$BD53, // $BD53 + #$BD54, // $BD54 + #$BD55, // $BD55 + #$BD56, // $BD56 + #$BD57, // $BD57 + #$BD58, // $BD58 + #$BD59, // $BD59 + #$BD5A, // $BD5A + #$BD5B, // $BD5B + #$BD5C, // $BD5C + #$BD5D, // $BD5D + #$BD5E, // $BD5E + #$BD5F, // $BD5F + #$BD60, // $BD60 + #$BD61, // $BD61 + #$BD62, // $BD62 + #$BD63, // $BD63 + #$BD64, // $BD64 + #$BD65, // $BD65 + #$BD66, // $BD66 + #$BD67, // $BD67 + #$BD68, // $BD68 + #$BD69, // $BD69 + #$BD6A, // $BD6A + #$BD6B, // $BD6B + #$BD6C, // $BD6C + #$BD6D, // $BD6D + #$BD6E, // $BD6E + #$BD6F, // $BD6F + #$BD70, // $BD70 + #$BD71, // $BD71 + #$BD72, // $BD72 + #$BD73, // $BD73 + #$BD74, // $BD74 + #$BD75, // $BD75 + #$BD76, // $BD76 + #$BD77, // $BD77 + #$BD78, // $BD78 + #$BD79, // $BD79 + #$BD7A, // $BD7A + #$BD7B, // $BD7B + #$BD7C, // $BD7C + #$BD7D, // $BD7D + #$BD7E, // $BD7E + #$BD7F, // $BD7F + #$BD80, // $BD80 + #$BD81, // $BD81 + #$BD82, // $BD82 + #$BD83, // $BD83 + #$BD84, // $BD84 + #$BD85, // $BD85 + #$BD86, // $BD86 + #$BD87, // $BD87 + #$BD88, // $BD88 + #$BD89, // $BD89 + #$BD8A, // $BD8A + #$BD8B, // $BD8B + #$BD8C, // $BD8C + #$BD8D, // $BD8D + #$BD8E, // $BD8E + #$BD8F, // $BD8F + #$BD90, // $BD90 + #$BD91, // $BD91 + #$BD92, // $BD92 + #$BD93, // $BD93 + #$BD94, // $BD94 + #$BD95, // $BD95 + #$BD96, // $BD96 + #$BD97, // $BD97 + #$BD98, // $BD98 + #$BD99, // $BD99 + #$BD9A, // $BD9A + #$BD9B, // $BD9B + #$BD9C, // $BD9C + #$BD9D, // $BD9D + #$BD9E, // $BD9E + #$BD9F, // $BD9F + #$BDA0, // $BDA0 + #$BDA1, // $BDA1 + #$BDA2, // $BDA2 + #$BDA3, // $BDA3 + #$BDA4, // $BDA4 + #$BDA5, // $BDA5 + #$BDA6, // $BDA6 + #$BDA7, // $BDA7 + #$BDA8, // $BDA8 + #$BDA9, // $BDA9 + #$BDAA, // $BDAA + #$BDAB, // $BDAB + #$BDAC, // $BDAC + #$BDAD, // $BDAD + #$BDAE, // $BDAE + #$BDAF, // $BDAF + #$BDB0, // $BDB0 + #$BDB1, // $BDB1 + #$BDB2, // $BDB2 + #$BDB3, // $BDB3 + #$BDB4, // $BDB4 + #$BDB5, // $BDB5 + #$BDB6, // $BDB6 + #$BDB7, // $BDB7 + #$BDB8, // $BDB8 + #$BDB9, // $BDB9 + #$BDBA, // $BDBA + #$BDBB, // $BDBB + #$BDBC, // $BDBC + #$BDBD, // $BDBD + #$BDBE, // $BDBE + #$BDBF, // $BDBF + #$BDC0, // $BDC0 + #$BDC1, // $BDC1 + #$BDC2, // $BDC2 + #$BDC3, // $BDC3 + #$BDC4, // $BDC4 + #$BDC5, // $BDC5 + #$BDC6, // $BDC6 + #$BDC7, // $BDC7 + #$BDC8, // $BDC8 + #$BDC9, // $BDC9 + #$BDCA, // $BDCA + #$BDCB, // $BDCB + #$BDCC, // $BDCC + #$BDCD, // $BDCD + #$BDCE, // $BDCE + #$BDCF, // $BDCF + #$BDD0, // $BDD0 + #$BDD1, // $BDD1 + #$BDD2, // $BDD2 + #$BDD3, // $BDD3 + #$BDD4, // $BDD4 + #$BDD5, // $BDD5 + #$BDD6, // $BDD6 + #$BDD7, // $BDD7 + #$BDD8, // $BDD8 + #$BDD9, // $BDD9 + #$BDDA, // $BDDA + #$BDDB, // $BDDB + #$BDDC, // $BDDC + #$BDDD, // $BDDD + #$BDDE, // $BDDE + #$BDDF, // $BDDF + #$BDE0, // $BDE0 + #$BDE1, // $BDE1 + #$BDE2, // $BDE2 + #$BDE3, // $BDE3 + #$BDE4, // $BDE4 + #$BDE5, // $BDE5 + #$BDE6, // $BDE6 + #$BDE7, // $BDE7 + #$BDE8, // $BDE8 + #$BDE9, // $BDE9 + #$BDEA, // $BDEA + #$BDEB, // $BDEB + #$BDEC, // $BDEC + #$BDED, // $BDED + #$BDEE, // $BDEE + #$BDEF, // $BDEF + #$BDF0, // $BDF0 + #$BDF1, // $BDF1 + #$BDF2, // $BDF2 + #$BDF3, // $BDF3 + #$BDF4, // $BDF4 + #$BDF5, // $BDF5 + #$BDF6, // $BDF6 + #$BDF7, // $BDF7 + #$BDF8, // $BDF8 + #$BDF9, // $BDF9 + #$BDFA, // $BDFA + #$BDFB, // $BDFB + #$BDFC, // $BDFC + #$BDFD, // $BDFD + #$BDFE, // $BDFE + #$BDFF, // $BDFF + #$BE00, // $BE00 + #$BE01, // $BE01 + #$BE02, // $BE02 + #$BE03, // $BE03 + #$BE04, // $BE04 + #$BE05, // $BE05 + #$BE06, // $BE06 + #$BE07, // $BE07 + #$BE08, // $BE08 + #$BE09, // $BE09 + #$BE0A, // $BE0A + #$BE0B, // $BE0B + #$BE0C, // $BE0C + #$BE0D, // $BE0D + #$BE0E, // $BE0E + #$BE0F, // $BE0F + #$BE10, // $BE10 + #$BE11, // $BE11 + #$BE12, // $BE12 + #$BE13, // $BE13 + #$BE14, // $BE14 + #$BE15, // $BE15 + #$BE16, // $BE16 + #$BE17, // $BE17 + #$BE18, // $BE18 + #$BE19, // $BE19 + #$BE1A, // $BE1A + #$BE1B, // $BE1B + #$BE1C, // $BE1C + #$BE1D, // $BE1D + #$BE1E, // $BE1E + #$BE1F, // $BE1F + #$BE20, // $BE20 + #$BE21, // $BE21 + #$BE22, // $BE22 + #$BE23, // $BE23 + #$BE24, // $BE24 + #$BE25, // $BE25 + #$BE26, // $BE26 + #$BE27, // $BE27 + #$BE28, // $BE28 + #$BE29, // $BE29 + #$BE2A, // $BE2A + #$BE2B, // $BE2B + #$BE2C, // $BE2C + #$BE2D, // $BE2D + #$BE2E, // $BE2E + #$BE2F, // $BE2F + #$BE30, // $BE30 + #$BE31, // $BE31 + #$BE32, // $BE32 + #$BE33, // $BE33 + #$BE34, // $BE34 + #$BE35, // $BE35 + #$BE36, // $BE36 + #$BE37, // $BE37 + #$BE38, // $BE38 + #$BE39, // $BE39 + #$BE3A, // $BE3A + #$BE3B, // $BE3B + #$BE3C, // $BE3C + #$BE3D, // $BE3D + #$BE3E, // $BE3E + #$BE3F, // $BE3F + #$BE40, // $BE40 + #$BE41, // $BE41 + #$BE42, // $BE42 + #$BE43, // $BE43 + #$BE44, // $BE44 + #$BE45, // $BE45 + #$BE46, // $BE46 + #$BE47, // $BE47 + #$BE48, // $BE48 + #$BE49, // $BE49 + #$BE4A, // $BE4A + #$BE4B, // $BE4B + #$BE4C, // $BE4C + #$BE4D, // $BE4D + #$BE4E, // $BE4E + #$BE4F, // $BE4F + #$BE50, // $BE50 + #$BE51, // $BE51 + #$BE52, // $BE52 + #$BE53, // $BE53 + #$BE54, // $BE54 + #$BE55, // $BE55 + #$BE56, // $BE56 + #$BE57, // $BE57 + #$BE58, // $BE58 + #$BE59, // $BE59 + #$BE5A, // $BE5A + #$BE5B, // $BE5B + #$BE5C, // $BE5C + #$BE5D, // $BE5D + #$BE5E, // $BE5E + #$BE5F, // $BE5F + #$BE60, // $BE60 + #$BE61, // $BE61 + #$BE62, // $BE62 + #$BE63, // $BE63 + #$BE64, // $BE64 + #$BE65, // $BE65 + #$BE66, // $BE66 + #$BE67, // $BE67 + #$BE68, // $BE68 + #$BE69, // $BE69 + #$BE6A, // $BE6A + #$BE6B, // $BE6B + #$BE6C, // $BE6C + #$BE6D, // $BE6D + #$BE6E, // $BE6E + #$BE6F, // $BE6F + #$BE70, // $BE70 + #$BE71, // $BE71 + #$BE72, // $BE72 + #$BE73, // $BE73 + #$BE74, // $BE74 + #$BE75, // $BE75 + #$BE76, // $BE76 + #$BE77, // $BE77 + #$BE78, // $BE78 + #$BE79, // $BE79 + #$BE7A, // $BE7A + #$BE7B, // $BE7B + #$BE7C, // $BE7C + #$BE7D, // $BE7D + #$BE7E, // $BE7E + #$BE7F, // $BE7F + #$BE80, // $BE80 + #$BE81, // $BE81 + #$BE82, // $BE82 + #$BE83, // $BE83 + #$BE84, // $BE84 + #$BE85, // $BE85 + #$BE86, // $BE86 + #$BE87, // $BE87 + #$BE88, // $BE88 + #$BE89, // $BE89 + #$BE8A, // $BE8A + #$BE8B, // $BE8B + #$BE8C, // $BE8C + #$BE8D, // $BE8D + #$BE8E, // $BE8E + #$BE8F, // $BE8F + #$BE90, // $BE90 + #$BE91, // $BE91 + #$BE92, // $BE92 + #$BE93, // $BE93 + #$BE94, // $BE94 + #$BE95, // $BE95 + #$BE96, // $BE96 + #$BE97, // $BE97 + #$BE98, // $BE98 + #$BE99, // $BE99 + #$BE9A, // $BE9A + #$BE9B, // $BE9B + #$BE9C, // $BE9C + #$BE9D, // $BE9D + #$BE9E, // $BE9E + #$BE9F, // $BE9F + #$BEA0, // $BEA0 + #$BEA1, // $BEA1 + #$BEA2, // $BEA2 + #$BEA3, // $BEA3 + #$BEA4, // $BEA4 + #$BEA5, // $BEA5 + #$BEA6, // $BEA6 + #$BEA7, // $BEA7 + #$BEA8, // $BEA8 + #$BEA9, // $BEA9 + #$BEAA, // $BEAA + #$BEAB, // $BEAB + #$BEAC, // $BEAC + #$BEAD, // $BEAD + #$BEAE, // $BEAE + #$BEAF, // $BEAF + #$BEB0, // $BEB0 + #$BEB1, // $BEB1 + #$BEB2, // $BEB2 + #$BEB3, // $BEB3 + #$BEB4, // $BEB4 + #$BEB5, // $BEB5 + #$BEB6, // $BEB6 + #$BEB7, // $BEB7 + #$BEB8, // $BEB8 + #$BEB9, // $BEB9 + #$BEBA, // $BEBA + #$BEBB, // $BEBB + #$BEBC, // $BEBC + #$BEBD, // $BEBD + #$BEBE, // $BEBE + #$BEBF, // $BEBF + #$BEC0, // $BEC0 + #$BEC1, // $BEC1 + #$BEC2, // $BEC2 + #$BEC3, // $BEC3 + #$BEC4, // $BEC4 + #$BEC5, // $BEC5 + #$BEC6, // $BEC6 + #$BEC7, // $BEC7 + #$BEC8, // $BEC8 + #$BEC9, // $BEC9 + #$BECA, // $BECA + #$BECB, // $BECB + #$BECC, // $BECC + #$BECD, // $BECD + #$BECE, // $BECE + #$BECF, // $BECF + #$BED0, // $BED0 + #$BED1, // $BED1 + #$BED2, // $BED2 + #$BED3, // $BED3 + #$BED4, // $BED4 + #$BED5, // $BED5 + #$BED6, // $BED6 + #$BED7, // $BED7 + #$BED8, // $BED8 + #$BED9, // $BED9 + #$BEDA, // $BEDA + #$BEDB, // $BEDB + #$BEDC, // $BEDC + #$BEDD, // $BEDD + #$BEDE, // $BEDE + #$BEDF, // $BEDF + #$BEE0, // $BEE0 + #$BEE1, // $BEE1 + #$BEE2, // $BEE2 + #$BEE3, // $BEE3 + #$BEE4, // $BEE4 + #$BEE5, // $BEE5 + #$BEE6, // $BEE6 + #$BEE7, // $BEE7 + #$BEE8, // $BEE8 + #$BEE9, // $BEE9 + #$BEEA, // $BEEA + #$BEEB, // $BEEB + #$BEEC, // $BEEC + #$BEED, // $BEED + #$BEEE, // $BEEE + #$BEEF, // $BEEF + #$BEF0, // $BEF0 + #$BEF1, // $BEF1 + #$BEF2, // $BEF2 + #$BEF3, // $BEF3 + #$BEF4, // $BEF4 + #$BEF5, // $BEF5 + #$BEF6, // $BEF6 + #$BEF7, // $BEF7 + #$BEF8, // $BEF8 + #$BEF9, // $BEF9 + #$BEFA, // $BEFA + #$BEFB, // $BEFB + #$BEFC, // $BEFC + #$BEFD, // $BEFD + #$BEFE, // $BEFE + #$BEFF, // $BEFF + #$BF00, // $BF00 + #$BF01, // $BF01 + #$BF02, // $BF02 + #$BF03, // $BF03 + #$BF04, // $BF04 + #$BF05, // $BF05 + #$BF06, // $BF06 + #$BF07, // $BF07 + #$BF08, // $BF08 + #$BF09, // $BF09 + #$BF0A, // $BF0A + #$BF0B, // $BF0B + #$BF0C, // $BF0C + #$BF0D, // $BF0D + #$BF0E, // $BF0E + #$BF0F, // $BF0F + #$BF10, // $BF10 + #$BF11, // $BF11 + #$BF12, // $BF12 + #$BF13, // $BF13 + #$BF14, // $BF14 + #$BF15, // $BF15 + #$BF16, // $BF16 + #$BF17, // $BF17 + #$BF18, // $BF18 + #$BF19, // $BF19 + #$BF1A, // $BF1A + #$BF1B, // $BF1B + #$BF1C, // $BF1C + #$BF1D, // $BF1D + #$BF1E, // $BF1E + #$BF1F, // $BF1F + #$BF20, // $BF20 + #$BF21, // $BF21 + #$BF22, // $BF22 + #$BF23, // $BF23 + #$BF24, // $BF24 + #$BF25, // $BF25 + #$BF26, // $BF26 + #$BF27, // $BF27 + #$BF28, // $BF28 + #$BF29, // $BF29 + #$BF2A, // $BF2A + #$BF2B, // $BF2B + #$BF2C, // $BF2C + #$BF2D, // $BF2D + #$BF2E, // $BF2E + #$BF2F, // $BF2F + #$BF30, // $BF30 + #$BF31, // $BF31 + #$BF32, // $BF32 + #$BF33, // $BF33 + #$BF34, // $BF34 + #$BF35, // $BF35 + #$BF36, // $BF36 + #$BF37, // $BF37 + #$BF38, // $BF38 + #$BF39, // $BF39 + #$BF3A, // $BF3A + #$BF3B, // $BF3B + #$BF3C, // $BF3C + #$BF3D, // $BF3D + #$BF3E, // $BF3E + #$BF3F, // $BF3F + #$BF40, // $BF40 + #$BF41, // $BF41 + #$BF42, // $BF42 + #$BF43, // $BF43 + #$BF44, // $BF44 + #$BF45, // $BF45 + #$BF46, // $BF46 + #$BF47, // $BF47 + #$BF48, // $BF48 + #$BF49, // $BF49 + #$BF4A, // $BF4A + #$BF4B, // $BF4B + #$BF4C, // $BF4C + #$BF4D, // $BF4D + #$BF4E, // $BF4E + #$BF4F, // $BF4F + #$BF50, // $BF50 + #$BF51, // $BF51 + #$BF52, // $BF52 + #$BF53, // $BF53 + #$BF54, // $BF54 + #$BF55, // $BF55 + #$BF56, // $BF56 + #$BF57, // $BF57 + #$BF58, // $BF58 + #$BF59, // $BF59 + #$BF5A, // $BF5A + #$BF5B, // $BF5B + #$BF5C, // $BF5C + #$BF5D, // $BF5D + #$BF5E, // $BF5E + #$BF5F, // $BF5F + #$BF60, // $BF60 + #$BF61, // $BF61 + #$BF62, // $BF62 + #$BF63, // $BF63 + #$BF64, // $BF64 + #$BF65, // $BF65 + #$BF66, // $BF66 + #$BF67, // $BF67 + #$BF68, // $BF68 + #$BF69, // $BF69 + #$BF6A, // $BF6A + #$BF6B, // $BF6B + #$BF6C, // $BF6C + #$BF6D, // $BF6D + #$BF6E, // $BF6E + #$BF6F, // $BF6F + #$BF70, // $BF70 + #$BF71, // $BF71 + #$BF72, // $BF72 + #$BF73, // $BF73 + #$BF74, // $BF74 + #$BF75, // $BF75 + #$BF76, // $BF76 + #$BF77, // $BF77 + #$BF78, // $BF78 + #$BF79, // $BF79 + #$BF7A, // $BF7A + #$BF7B, // $BF7B + #$BF7C, // $BF7C + #$BF7D, // $BF7D + #$BF7E, // $BF7E + #$BF7F, // $BF7F + #$BF80, // $BF80 + #$BF81, // $BF81 + #$BF82, // $BF82 + #$BF83, // $BF83 + #$BF84, // $BF84 + #$BF85, // $BF85 + #$BF86, // $BF86 + #$BF87, // $BF87 + #$BF88, // $BF88 + #$BF89, // $BF89 + #$BF8A, // $BF8A + #$BF8B, // $BF8B + #$BF8C, // $BF8C + #$BF8D, // $BF8D + #$BF8E, // $BF8E + #$BF8F, // $BF8F + #$BF90, // $BF90 + #$BF91, // $BF91 + #$BF92, // $BF92 + #$BF93, // $BF93 + #$BF94, // $BF94 + #$BF95, // $BF95 + #$BF96, // $BF96 + #$BF97, // $BF97 + #$BF98, // $BF98 + #$BF99, // $BF99 + #$BF9A, // $BF9A + #$BF9B, // $BF9B + #$BF9C, // $BF9C + #$BF9D, // $BF9D + #$BF9E, // $BF9E + #$BF9F, // $BF9F + #$BFA0, // $BFA0 + #$BFA1, // $BFA1 + #$BFA2, // $BFA2 + #$BFA3, // $BFA3 + #$BFA4, // $BFA4 + #$BFA5, // $BFA5 + #$BFA6, // $BFA6 + #$BFA7, // $BFA7 + #$BFA8, // $BFA8 + #$BFA9, // $BFA9 + #$BFAA, // $BFAA + #$BFAB, // $BFAB + #$BFAC, // $BFAC + #$BFAD, // $BFAD + #$BFAE, // $BFAE + #$BFAF, // $BFAF + #$BFB0, // $BFB0 + #$BFB1, // $BFB1 + #$BFB2, // $BFB2 + #$BFB3, // $BFB3 + #$BFB4, // $BFB4 + #$BFB5, // $BFB5 + #$BFB6, // $BFB6 + #$BFB7, // $BFB7 + #$BFB8, // $BFB8 + #$BFB9, // $BFB9 + #$BFBA, // $BFBA + #$BFBB, // $BFBB + #$BFBC, // $BFBC + #$BFBD, // $BFBD + #$BFBE, // $BFBE + #$BFBF, // $BFBF + #$BFC0, // $BFC0 + #$BFC1, // $BFC1 + #$BFC2, // $BFC2 + #$BFC3, // $BFC3 + #$BFC4, // $BFC4 + #$BFC5, // $BFC5 + #$BFC6, // $BFC6 + #$BFC7, // $BFC7 + #$BFC8, // $BFC8 + #$BFC9, // $BFC9 + #$BFCA, // $BFCA + #$BFCB, // $BFCB + #$BFCC, // $BFCC + #$BFCD, // $BFCD + #$BFCE, // $BFCE + #$BFCF, // $BFCF + #$BFD0, // $BFD0 + #$BFD1, // $BFD1 + #$BFD2, // $BFD2 + #$BFD3, // $BFD3 + #$BFD4, // $BFD4 + #$BFD5, // $BFD5 + #$BFD6, // $BFD6 + #$BFD7, // $BFD7 + #$BFD8, // $BFD8 + #$BFD9, // $BFD9 + #$BFDA, // $BFDA + #$BFDB, // $BFDB + #$BFDC, // $BFDC + #$BFDD, // $BFDD + #$BFDE, // $BFDE + #$BFDF, // $BFDF + #$BFE0, // $BFE0 + #$BFE1, // $BFE1 + #$BFE2, // $BFE2 + #$BFE3, // $BFE3 + #$BFE4, // $BFE4 + #$BFE5, // $BFE5 + #$BFE6, // $BFE6 + #$BFE7, // $BFE7 + #$BFE8, // $BFE8 + #$BFE9, // $BFE9 + #$BFEA, // $BFEA + #$BFEB, // $BFEB + #$BFEC, // $BFEC + #$BFED, // $BFED + #$BFEE, // $BFEE + #$BFEF, // $BFEF + #$BFF0, // $BFF0 + #$BFF1, // $BFF1 + #$BFF2, // $BFF2 + #$BFF3, // $BFF3 + #$BFF4, // $BFF4 + #$BFF5, // $BFF5 + #$BFF6, // $BFF6 + #$BFF7, // $BFF7 + #$BFF8, // $BFF8 + #$BFF9, // $BFF9 + #$BFFA, // $BFFA + #$BFFB, // $BFFB + #$BFFC, // $BFFC + #$BFFD, // $BFFD + #$BFFE, // $BFFE + #$BFFF, // $BFFF + #$C000, // $C000 + #$C001, // $C001 + #$C002, // $C002 + #$C003, // $C003 + #$C004, // $C004 + #$C005, // $C005 + #$C006, // $C006 + #$C007, // $C007 + #$C008, // $C008 + #$C009, // $C009 + #$C00A, // $C00A + #$C00B, // $C00B + #$C00C, // $C00C + #$C00D, // $C00D + #$C00E, // $C00E + #$C00F, // $C00F + #$C010, // $C010 + #$C011, // $C011 + #$C012, // $C012 + #$C013, // $C013 + #$C014, // $C014 + #$C015, // $C015 + #$C016, // $C016 + #$C017, // $C017 + #$C018, // $C018 + #$C019, // $C019 + #$C01A, // $C01A + #$C01B, // $C01B + #$C01C, // $C01C + #$C01D, // $C01D + #$C01E, // $C01E + #$C01F, // $C01F + #$C020, // $C020 + #$C021, // $C021 + #$C022, // $C022 + #$C023, // $C023 + #$C024, // $C024 + #$C025, // $C025 + #$C026, // $C026 + #$C027, // $C027 + #$C028, // $C028 + #$C029, // $C029 + #$C02A, // $C02A + #$C02B, // $C02B + #$C02C, // $C02C + #$C02D, // $C02D + #$C02E, // $C02E + #$C02F, // $C02F + #$C030, // $C030 + #$C031, // $C031 + #$C032, // $C032 + #$C033, // $C033 + #$C034, // $C034 + #$C035, // $C035 + #$C036, // $C036 + #$C037, // $C037 + #$C038, // $C038 + #$C039, // $C039 + #$C03A, // $C03A + #$C03B, // $C03B + #$C03C, // $C03C + #$C03D, // $C03D + #$C03E, // $C03E + #$C03F, // $C03F + #$C040, // $C040 + #$C041, // $C041 + #$C042, // $C042 + #$C043, // $C043 + #$C044, // $C044 + #$C045, // $C045 + #$C046, // $C046 + #$C047, // $C047 + #$C048, // $C048 + #$C049, // $C049 + #$C04A, // $C04A + #$C04B, // $C04B + #$C04C, // $C04C + #$C04D, // $C04D + #$C04E, // $C04E + #$C04F, // $C04F + #$C050, // $C050 + #$C051, // $C051 + #$C052, // $C052 + #$C053, // $C053 + #$C054, // $C054 + #$C055, // $C055 + #$C056, // $C056 + #$C057, // $C057 + #$C058, // $C058 + #$C059, // $C059 + #$C05A, // $C05A + #$C05B, // $C05B + #$C05C, // $C05C + #$C05D, // $C05D + #$C05E, // $C05E + #$C05F, // $C05F + #$C060, // $C060 + #$C061, // $C061 + #$C062, // $C062 + #$C063, // $C063 + #$C064, // $C064 + #$C065, // $C065 + #$C066, // $C066 + #$C067, // $C067 + #$C068, // $C068 + #$C069, // $C069 + #$C06A, // $C06A + #$C06B, // $C06B + #$C06C, // $C06C + #$C06D, // $C06D + #$C06E, // $C06E + #$C06F, // $C06F + #$C070, // $C070 + #$C071, // $C071 + #$C072, // $C072 + #$C073, // $C073 + #$C074, // $C074 + #$C075, // $C075 + #$C076, // $C076 + #$C077, // $C077 + #$C078, // $C078 + #$C079, // $C079 + #$C07A, // $C07A + #$C07B, // $C07B + #$C07C, // $C07C + #$C07D, // $C07D + #$C07E, // $C07E + #$C07F, // $C07F + #$C080, // $C080 + #$C081, // $C081 + #$C082, // $C082 + #$C083, // $C083 + #$C084, // $C084 + #$C085, // $C085 + #$C086, // $C086 + #$C087, // $C087 + #$C088, // $C088 + #$C089, // $C089 + #$C08A, // $C08A + #$C08B, // $C08B + #$C08C, // $C08C + #$C08D, // $C08D + #$C08E, // $C08E + #$C08F, // $C08F + #$C090, // $C090 + #$C091, // $C091 + #$C092, // $C092 + #$C093, // $C093 + #$C094, // $C094 + #$C095, // $C095 + #$C096, // $C096 + #$C097, // $C097 + #$C098, // $C098 + #$C099, // $C099 + #$C09A, // $C09A + #$C09B, // $C09B + #$C09C, // $C09C + #$C09D, // $C09D + #$C09E, // $C09E + #$C09F, // $C09F + #$C0A0, // $C0A0 + #$C0A1, // $C0A1 + #$C0A2, // $C0A2 + #$C0A3, // $C0A3 + #$C0A4, // $C0A4 + #$C0A5, // $C0A5 + #$C0A6, // $C0A6 + #$C0A7, // $C0A7 + #$C0A8, // $C0A8 + #$C0A9, // $C0A9 + #$C0AA, // $C0AA + #$C0AB, // $C0AB + #$C0AC, // $C0AC + #$C0AD, // $C0AD + #$C0AE, // $C0AE + #$C0AF, // $C0AF + #$C0B0, // $C0B0 + #$C0B1, // $C0B1 + #$C0B2, // $C0B2 + #$C0B3, // $C0B3 + #$C0B4, // $C0B4 + #$C0B5, // $C0B5 + #$C0B6, // $C0B6 + #$C0B7, // $C0B7 + #$C0B8, // $C0B8 + #$C0B9, // $C0B9 + #$C0BA, // $C0BA + #$C0BB, // $C0BB + #$C0BC, // $C0BC + #$C0BD, // $C0BD + #$C0BE, // $C0BE + #$C0BF, // $C0BF + #$C0C0, // $C0C0 + #$C0C1, // $C0C1 + #$C0C2, // $C0C2 + #$C0C3, // $C0C3 + #$C0C4, // $C0C4 + #$C0C5, // $C0C5 + #$C0C6, // $C0C6 + #$C0C7, // $C0C7 + #$C0C8, // $C0C8 + #$C0C9, // $C0C9 + #$C0CA, // $C0CA + #$C0CB, // $C0CB + #$C0CC, // $C0CC + #$C0CD, // $C0CD + #$C0CE, // $C0CE + #$C0CF, // $C0CF + #$C0D0, // $C0D0 + #$C0D1, // $C0D1 + #$C0D2, // $C0D2 + #$C0D3, // $C0D3 + #$C0D4, // $C0D4 + #$C0D5, // $C0D5 + #$C0D6, // $C0D6 + #$C0D7, // $C0D7 + #$C0D8, // $C0D8 + #$C0D9, // $C0D9 + #$C0DA, // $C0DA + #$C0DB, // $C0DB + #$C0DC, // $C0DC + #$C0DD, // $C0DD + #$C0DE, // $C0DE + #$C0DF, // $C0DF + #$C0E0, // $C0E0 + #$C0E1, // $C0E1 + #$C0E2, // $C0E2 + #$C0E3, // $C0E3 + #$C0E4, // $C0E4 + #$C0E5, // $C0E5 + #$C0E6, // $C0E6 + #$C0E7, // $C0E7 + #$C0E8, // $C0E8 + #$C0E9, // $C0E9 + #$C0EA, // $C0EA + #$C0EB, // $C0EB + #$C0EC, // $C0EC + #$C0ED, // $C0ED + #$C0EE, // $C0EE + #$C0EF, // $C0EF + #$C0F0, // $C0F0 + #$C0F1, // $C0F1 + #$C0F2, // $C0F2 + #$C0F3, // $C0F3 + #$C0F4, // $C0F4 + #$C0F5, // $C0F5 + #$C0F6, // $C0F6 + #$C0F7, // $C0F7 + #$C0F8, // $C0F8 + #$C0F9, // $C0F9 + #$C0FA, // $C0FA + #$C0FB, // $C0FB + #$C0FC, // $C0FC + #$C0FD, // $C0FD + #$C0FE, // $C0FE + #$C0FF, // $C0FF + #$C100, // $C100 + #$C101, // $C101 + #$C102, // $C102 + #$C103, // $C103 + #$C104, // $C104 + #$C105, // $C105 + #$C106, // $C106 + #$C107, // $C107 + #$C108, // $C108 + #$C109, // $C109 + #$C10A, // $C10A + #$C10B, // $C10B + #$C10C, // $C10C + #$C10D, // $C10D + #$C10E, // $C10E + #$C10F, // $C10F + #$C110, // $C110 + #$C111, // $C111 + #$C112, // $C112 + #$C113, // $C113 + #$C114, // $C114 + #$C115, // $C115 + #$C116, // $C116 + #$C117, // $C117 + #$C118, // $C118 + #$C119, // $C119 + #$C11A, // $C11A + #$C11B, // $C11B + #$C11C, // $C11C + #$C11D, // $C11D + #$C11E, // $C11E + #$C11F, // $C11F + #$C120, // $C120 + #$C121, // $C121 + #$C122, // $C122 + #$C123, // $C123 + #$C124, // $C124 + #$C125, // $C125 + #$C126, // $C126 + #$C127, // $C127 + #$C128, // $C128 + #$C129, // $C129 + #$C12A, // $C12A + #$C12B, // $C12B + #$C12C, // $C12C + #$C12D, // $C12D + #$C12E, // $C12E + #$C12F, // $C12F + #$C130, // $C130 + #$C131, // $C131 + #$C132, // $C132 + #$C133, // $C133 + #$C134, // $C134 + #$C135, // $C135 + #$C136, // $C136 + #$C137, // $C137 + #$C138, // $C138 + #$C139, // $C139 + #$C13A, // $C13A + #$C13B, // $C13B + #$C13C, // $C13C + #$C13D, // $C13D + #$C13E, // $C13E + #$C13F, // $C13F + #$C140, // $C140 + #$C141, // $C141 + #$C142, // $C142 + #$C143, // $C143 + #$C144, // $C144 + #$C145, // $C145 + #$C146, // $C146 + #$C147, // $C147 + #$C148, // $C148 + #$C149, // $C149 + #$C14A, // $C14A + #$C14B, // $C14B + #$C14C, // $C14C + #$C14D, // $C14D + #$C14E, // $C14E + #$C14F, // $C14F + #$C150, // $C150 + #$C151, // $C151 + #$C152, // $C152 + #$C153, // $C153 + #$C154, // $C154 + #$C155, // $C155 + #$C156, // $C156 + #$C157, // $C157 + #$C158, // $C158 + #$C159, // $C159 + #$C15A, // $C15A + #$C15B, // $C15B + #$C15C, // $C15C + #$C15D, // $C15D + #$C15E, // $C15E + #$C15F, // $C15F + #$C160, // $C160 + #$C161, // $C161 + #$C162, // $C162 + #$C163, // $C163 + #$C164, // $C164 + #$C165, // $C165 + #$C166, // $C166 + #$C167, // $C167 + #$C168, // $C168 + #$C169, // $C169 + #$C16A, // $C16A + #$C16B, // $C16B + #$C16C, // $C16C + #$C16D, // $C16D + #$C16E, // $C16E + #$C16F, // $C16F + #$C170, // $C170 + #$C171, // $C171 + #$C172, // $C172 + #$C173, // $C173 + #$C174, // $C174 + #$C175, // $C175 + #$C176, // $C176 + #$C177, // $C177 + #$C178, // $C178 + #$C179, // $C179 + #$C17A, // $C17A + #$C17B, // $C17B + #$C17C, // $C17C + #$C17D, // $C17D + #$C17E, // $C17E + #$C17F, // $C17F + #$C180, // $C180 + #$C181, // $C181 + #$C182, // $C182 + #$C183, // $C183 + #$C184, // $C184 + #$C185, // $C185 + #$C186, // $C186 + #$C187, // $C187 + #$C188, // $C188 + #$C189, // $C189 + #$C18A, // $C18A + #$C18B, // $C18B + #$C18C, // $C18C + #$C18D, // $C18D + #$C18E, // $C18E + #$C18F, // $C18F + #$C190, // $C190 + #$C191, // $C191 + #$C192, // $C192 + #$C193, // $C193 + #$C194, // $C194 + #$C195, // $C195 + #$C196, // $C196 + #$C197, // $C197 + #$C198, // $C198 + #$C199, // $C199 + #$C19A, // $C19A + #$C19B, // $C19B + #$C19C, // $C19C + #$C19D, // $C19D + #$C19E, // $C19E + #$C19F, // $C19F + #$C1A0, // $C1A0 + #$C1A1, // $C1A1 + #$C1A2, // $C1A2 + #$C1A3, // $C1A3 + #$C1A4, // $C1A4 + #$C1A5, // $C1A5 + #$C1A6, // $C1A6 + #$C1A7, // $C1A7 + #$C1A8, // $C1A8 + #$C1A9, // $C1A9 + #$C1AA, // $C1AA + #$C1AB, // $C1AB + #$C1AC, // $C1AC + #$C1AD, // $C1AD + #$C1AE, // $C1AE + #$C1AF, // $C1AF + #$C1B0, // $C1B0 + #$C1B1, // $C1B1 + #$C1B2, // $C1B2 + #$C1B3, // $C1B3 + #$C1B4, // $C1B4 + #$C1B5, // $C1B5 + #$C1B6, // $C1B6 + #$C1B7, // $C1B7 + #$C1B8, // $C1B8 + #$C1B9, // $C1B9 + #$C1BA, // $C1BA + #$C1BB, // $C1BB + #$C1BC, // $C1BC + #$C1BD, // $C1BD + #$C1BE, // $C1BE + #$C1BF, // $C1BF + #$C1C0, // $C1C0 + #$C1C1, // $C1C1 + #$C1C2, // $C1C2 + #$C1C3, // $C1C3 + #$C1C4, // $C1C4 + #$C1C5, // $C1C5 + #$C1C6, // $C1C6 + #$C1C7, // $C1C7 + #$C1C8, // $C1C8 + #$C1C9, // $C1C9 + #$C1CA, // $C1CA + #$C1CB, // $C1CB + #$C1CC, // $C1CC + #$C1CD, // $C1CD + #$C1CE, // $C1CE + #$C1CF, // $C1CF + #$C1D0, // $C1D0 + #$C1D1, // $C1D1 + #$C1D2, // $C1D2 + #$C1D3, // $C1D3 + #$C1D4, // $C1D4 + #$C1D5, // $C1D5 + #$C1D6, // $C1D6 + #$C1D7, // $C1D7 + #$C1D8, // $C1D8 + #$C1D9, // $C1D9 + #$C1DA, // $C1DA + #$C1DB, // $C1DB + #$C1DC, // $C1DC + #$C1DD, // $C1DD + #$C1DE, // $C1DE + #$C1DF, // $C1DF + #$C1E0, // $C1E0 + #$C1E1, // $C1E1 + #$C1E2, // $C1E2 + #$C1E3, // $C1E3 + #$C1E4, // $C1E4 + #$C1E5, // $C1E5 + #$C1E6, // $C1E6 + #$C1E7, // $C1E7 + #$C1E8, // $C1E8 + #$C1E9, // $C1E9 + #$C1EA, // $C1EA + #$C1EB, // $C1EB + #$C1EC, // $C1EC + #$C1ED, // $C1ED + #$C1EE, // $C1EE + #$C1EF, // $C1EF + #$C1F0, // $C1F0 + #$C1F1, // $C1F1 + #$C1F2, // $C1F2 + #$C1F3, // $C1F3 + #$C1F4, // $C1F4 + #$C1F5, // $C1F5 + #$C1F6, // $C1F6 + #$C1F7, // $C1F7 + #$C1F8, // $C1F8 + #$C1F9, // $C1F9 + #$C1FA, // $C1FA + #$C1FB, // $C1FB + #$C1FC, // $C1FC + #$C1FD, // $C1FD + #$C1FE, // $C1FE + #$C1FF, // $C1FF + #$C200, // $C200 + #$C201, // $C201 + #$C202, // $C202 + #$C203, // $C203 + #$C204, // $C204 + #$C205, // $C205 + #$C206, // $C206 + #$C207, // $C207 + #$C208, // $C208 + #$C209, // $C209 + #$C20A, // $C20A + #$C20B, // $C20B + #$C20C, // $C20C + #$C20D, // $C20D + #$C20E, // $C20E + #$C20F, // $C20F + #$C210, // $C210 + #$C211, // $C211 + #$C212, // $C212 + #$C213, // $C213 + #$C214, // $C214 + #$C215, // $C215 + #$C216, // $C216 + #$C217, // $C217 + #$C218, // $C218 + #$C219, // $C219 + #$C21A, // $C21A + #$C21B, // $C21B + #$C21C, // $C21C + #$C21D, // $C21D + #$C21E, // $C21E + #$C21F, // $C21F + #$C220, // $C220 + #$C221, // $C221 + #$C222, // $C222 + #$C223, // $C223 + #$C224, // $C224 + #$C225, // $C225 + #$C226, // $C226 + #$C227, // $C227 + #$C228, // $C228 + #$C229, // $C229 + #$C22A, // $C22A + #$C22B, // $C22B + #$C22C, // $C22C + #$C22D, // $C22D + #$C22E, // $C22E + #$C22F, // $C22F + #$C230, // $C230 + #$C231, // $C231 + #$C232, // $C232 + #$C233, // $C233 + #$C234, // $C234 + #$C235, // $C235 + #$C236, // $C236 + #$C237, // $C237 + #$C238, // $C238 + #$C239, // $C239 + #$C23A, // $C23A + #$C23B, // $C23B + #$C23C, // $C23C + #$C23D, // $C23D + #$C23E, // $C23E + #$C23F, // $C23F + #$C240, // $C240 + #$C241, // $C241 + #$C242, // $C242 + #$C243, // $C243 + #$C244, // $C244 + #$C245, // $C245 + #$C246, // $C246 + #$C247, // $C247 + #$C248, // $C248 + #$C249, // $C249 + #$C24A, // $C24A + #$C24B, // $C24B + #$C24C, // $C24C + #$C24D, // $C24D + #$C24E, // $C24E + #$C24F, // $C24F + #$C250, // $C250 + #$C251, // $C251 + #$C252, // $C252 + #$C253, // $C253 + #$C254, // $C254 + #$C255, // $C255 + #$C256, // $C256 + #$C257, // $C257 + #$C258, // $C258 + #$C259, // $C259 + #$C25A, // $C25A + #$C25B, // $C25B + #$C25C, // $C25C + #$C25D, // $C25D + #$C25E, // $C25E + #$C25F, // $C25F + #$C260, // $C260 + #$C261, // $C261 + #$C262, // $C262 + #$C263, // $C263 + #$C264, // $C264 + #$C265, // $C265 + #$C266, // $C266 + #$C267, // $C267 + #$C268, // $C268 + #$C269, // $C269 + #$C26A, // $C26A + #$C26B, // $C26B + #$C26C, // $C26C + #$C26D, // $C26D + #$C26E, // $C26E + #$C26F, // $C26F + #$C270, // $C270 + #$C271, // $C271 + #$C272, // $C272 + #$C273, // $C273 + #$C274, // $C274 + #$C275, // $C275 + #$C276, // $C276 + #$C277, // $C277 + #$C278, // $C278 + #$C279, // $C279 + #$C27A, // $C27A + #$C27B, // $C27B + #$C27C, // $C27C + #$C27D, // $C27D + #$C27E, // $C27E + #$C27F, // $C27F + #$C280, // $C280 + #$C281, // $C281 + #$C282, // $C282 + #$C283, // $C283 + #$C284, // $C284 + #$C285, // $C285 + #$C286, // $C286 + #$C287, // $C287 + #$C288, // $C288 + #$C289, // $C289 + #$C28A, // $C28A + #$C28B, // $C28B + #$C28C, // $C28C + #$C28D, // $C28D + #$C28E, // $C28E + #$C28F, // $C28F + #$C290, // $C290 + #$C291, // $C291 + #$C292, // $C292 + #$C293, // $C293 + #$C294, // $C294 + #$C295, // $C295 + #$C296, // $C296 + #$C297, // $C297 + #$C298, // $C298 + #$C299, // $C299 + #$C29A, // $C29A + #$C29B, // $C29B + #$C29C, // $C29C + #$C29D, // $C29D + #$C29E, // $C29E + #$C29F, // $C29F + #$C2A0, // $C2A0 + #$C2A1, // $C2A1 + #$C2A2, // $C2A2 + #$C2A3, // $C2A3 + #$C2A4, // $C2A4 + #$C2A5, // $C2A5 + #$C2A6, // $C2A6 + #$C2A7, // $C2A7 + #$C2A8, // $C2A8 + #$C2A9, // $C2A9 + #$C2AA, // $C2AA + #$C2AB, // $C2AB + #$C2AC, // $C2AC + #$C2AD, // $C2AD + #$C2AE, // $C2AE + #$C2AF, // $C2AF + #$C2B0, // $C2B0 + #$C2B1, // $C2B1 + #$C2B2, // $C2B2 + #$C2B3, // $C2B3 + #$C2B4, // $C2B4 + #$C2B5, // $C2B5 + #$C2B6, // $C2B6 + #$C2B7, // $C2B7 + #$C2B8, // $C2B8 + #$C2B9, // $C2B9 + #$C2BA, // $C2BA + #$C2BB, // $C2BB + #$C2BC, // $C2BC + #$C2BD, // $C2BD + #$C2BE, // $C2BE + #$C2BF, // $C2BF + #$C2C0, // $C2C0 + #$C2C1, // $C2C1 + #$C2C2, // $C2C2 + #$C2C3, // $C2C3 + #$C2C4, // $C2C4 + #$C2C5, // $C2C5 + #$C2C6, // $C2C6 + #$C2C7, // $C2C7 + #$C2C8, // $C2C8 + #$C2C9, // $C2C9 + #$C2CA, // $C2CA + #$C2CB, // $C2CB + #$C2CC, // $C2CC + #$C2CD, // $C2CD + #$C2CE, // $C2CE + #$C2CF, // $C2CF + #$C2D0, // $C2D0 + #$C2D1, // $C2D1 + #$C2D2, // $C2D2 + #$C2D3, // $C2D3 + #$C2D4, // $C2D4 + #$C2D5, // $C2D5 + #$C2D6, // $C2D6 + #$C2D7, // $C2D7 + #$C2D8, // $C2D8 + #$C2D9, // $C2D9 + #$C2DA, // $C2DA + #$C2DB, // $C2DB + #$C2DC, // $C2DC + #$C2DD, // $C2DD + #$C2DE, // $C2DE + #$C2DF, // $C2DF + #$C2E0, // $C2E0 + #$C2E1, // $C2E1 + #$C2E2, // $C2E2 + #$C2E3, // $C2E3 + #$C2E4, // $C2E4 + #$C2E5, // $C2E5 + #$C2E6, // $C2E6 + #$C2E7, // $C2E7 + #$C2E8, // $C2E8 + #$C2E9, // $C2E9 + #$C2EA, // $C2EA + #$C2EB, // $C2EB + #$C2EC, // $C2EC + #$C2ED, // $C2ED + #$C2EE, // $C2EE + #$C2EF, // $C2EF + #$C2F0, // $C2F0 + #$C2F1, // $C2F1 + #$C2F2, // $C2F2 + #$C2F3, // $C2F3 + #$C2F4, // $C2F4 + #$C2F5, // $C2F5 + #$C2F6, // $C2F6 + #$C2F7, // $C2F7 + #$C2F8, // $C2F8 + #$C2F9, // $C2F9 + #$C2FA, // $C2FA + #$C2FB, // $C2FB + #$C2FC, // $C2FC + #$C2FD, // $C2FD + #$C2FE, // $C2FE + #$C2FF, // $C2FF + #$C300, // $C300 + #$C301, // $C301 + #$C302, // $C302 + #$C303, // $C303 + #$C304, // $C304 + #$C305, // $C305 + #$C306, // $C306 + #$C307, // $C307 + #$C308, // $C308 + #$C309, // $C309 + #$C30A, // $C30A + #$C30B, // $C30B + #$C30C, // $C30C + #$C30D, // $C30D + #$C30E, // $C30E + #$C30F, // $C30F + #$C310, // $C310 + #$C311, // $C311 + #$C312, // $C312 + #$C313, // $C313 + #$C314, // $C314 + #$C315, // $C315 + #$C316, // $C316 + #$C317, // $C317 + #$C318, // $C318 + #$C319, // $C319 + #$C31A, // $C31A + #$C31B, // $C31B + #$C31C, // $C31C + #$C31D, // $C31D + #$C31E, // $C31E + #$C31F, // $C31F + #$C320, // $C320 + #$C321, // $C321 + #$C322, // $C322 + #$C323, // $C323 + #$C324, // $C324 + #$C325, // $C325 + #$C326, // $C326 + #$C327, // $C327 + #$C328, // $C328 + #$C329, // $C329 + #$C32A, // $C32A + #$C32B, // $C32B + #$C32C, // $C32C + #$C32D, // $C32D + #$C32E, // $C32E + #$C32F, // $C32F + #$C330, // $C330 + #$C331, // $C331 + #$C332, // $C332 + #$C333, // $C333 + #$C334, // $C334 + #$C335, // $C335 + #$C336, // $C336 + #$C337, // $C337 + #$C338, // $C338 + #$C339, // $C339 + #$C33A, // $C33A + #$C33B, // $C33B + #$C33C, // $C33C + #$C33D, // $C33D + #$C33E, // $C33E + #$C33F, // $C33F + #$C340, // $C340 + #$C341, // $C341 + #$C342, // $C342 + #$C343, // $C343 + #$C344, // $C344 + #$C345, // $C345 + #$C346, // $C346 + #$C347, // $C347 + #$C348, // $C348 + #$C349, // $C349 + #$C34A, // $C34A + #$C34B, // $C34B + #$C34C, // $C34C + #$C34D, // $C34D + #$C34E, // $C34E + #$C34F, // $C34F + #$C350, // $C350 + #$C351, // $C351 + #$C352, // $C352 + #$C353, // $C353 + #$C354, // $C354 + #$C355, // $C355 + #$C356, // $C356 + #$C357, // $C357 + #$C358, // $C358 + #$C359, // $C359 + #$C35A, // $C35A + #$C35B, // $C35B + #$C35C, // $C35C + #$C35D, // $C35D + #$C35E, // $C35E + #$C35F, // $C35F + #$C360, // $C360 + #$C361, // $C361 + #$C362, // $C362 + #$C363, // $C363 + #$C364, // $C364 + #$C365, // $C365 + #$C366, // $C366 + #$C367, // $C367 + #$C368, // $C368 + #$C369, // $C369 + #$C36A, // $C36A + #$C36B, // $C36B + #$C36C, // $C36C + #$C36D, // $C36D + #$C36E, // $C36E + #$C36F, // $C36F + #$C370, // $C370 + #$C371, // $C371 + #$C372, // $C372 + #$C373, // $C373 + #$C374, // $C374 + #$C375, // $C375 + #$C376, // $C376 + #$C377, // $C377 + #$C378, // $C378 + #$C379, // $C379 + #$C37A, // $C37A + #$C37B, // $C37B + #$C37C, // $C37C + #$C37D, // $C37D + #$C37E, // $C37E + #$C37F, // $C37F + #$C380, // $C380 + #$C381, // $C381 + #$C382, // $C382 + #$C383, // $C383 + #$C384, // $C384 + #$C385, // $C385 + #$C386, // $C386 + #$C387, // $C387 + #$C388, // $C388 + #$C389, // $C389 + #$C38A, // $C38A + #$C38B, // $C38B + #$C38C, // $C38C + #$C38D, // $C38D + #$C38E, // $C38E + #$C38F, // $C38F + #$C390, // $C390 + #$C391, // $C391 + #$C392, // $C392 + #$C393, // $C393 + #$C394, // $C394 + #$C395, // $C395 + #$C396, // $C396 + #$C397, // $C397 + #$C398, // $C398 + #$C399, // $C399 + #$C39A, // $C39A + #$C39B, // $C39B + #$C39C, // $C39C + #$C39D, // $C39D + #$C39E, // $C39E + #$C39F, // $C39F + #$C3A0, // $C3A0 + #$C3A1, // $C3A1 + #$C3A2, // $C3A2 + #$C3A3, // $C3A3 + #$C3A4, // $C3A4 + #$C3A5, // $C3A5 + #$C3A6, // $C3A6 + #$C3A7, // $C3A7 + #$C3A8, // $C3A8 + #$C3A9, // $C3A9 + #$C3AA, // $C3AA + #$C3AB, // $C3AB + #$C3AC, // $C3AC + #$C3AD, // $C3AD + #$C3AE, // $C3AE + #$C3AF, // $C3AF + #$C3B0, // $C3B0 + #$C3B1, // $C3B1 + #$C3B2, // $C3B2 + #$C3B3, // $C3B3 + #$C3B4, // $C3B4 + #$C3B5, // $C3B5 + #$C3B6, // $C3B6 + #$C3B7, // $C3B7 + #$C3B8, // $C3B8 + #$C3B9, // $C3B9 + #$C3BA, // $C3BA + #$C3BB, // $C3BB + #$C3BC, // $C3BC + #$C3BD, // $C3BD + #$C3BE, // $C3BE + #$C3BF, // $C3BF + #$C3C0, // $C3C0 + #$C3C1, // $C3C1 + #$C3C2, // $C3C2 + #$C3C3, // $C3C3 + #$C3C4, // $C3C4 + #$C3C5, // $C3C5 + #$C3C6, // $C3C6 + #$C3C7, // $C3C7 + #$C3C8, // $C3C8 + #$C3C9, // $C3C9 + #$C3CA, // $C3CA + #$C3CB, // $C3CB + #$C3CC, // $C3CC + #$C3CD, // $C3CD + #$C3CE, // $C3CE + #$C3CF, // $C3CF + #$C3D0, // $C3D0 + #$C3D1, // $C3D1 + #$C3D2, // $C3D2 + #$C3D3, // $C3D3 + #$C3D4, // $C3D4 + #$C3D5, // $C3D5 + #$C3D6, // $C3D6 + #$C3D7, // $C3D7 + #$C3D8, // $C3D8 + #$C3D9, // $C3D9 + #$C3DA, // $C3DA + #$C3DB, // $C3DB + #$C3DC, // $C3DC + #$C3DD, // $C3DD + #$C3DE, // $C3DE + #$C3DF, // $C3DF + #$C3E0, // $C3E0 + #$C3E1, // $C3E1 + #$C3E2, // $C3E2 + #$C3E3, // $C3E3 + #$C3E4, // $C3E4 + #$C3E5, // $C3E5 + #$C3E6, // $C3E6 + #$C3E7, // $C3E7 + #$C3E8, // $C3E8 + #$C3E9, // $C3E9 + #$C3EA, // $C3EA + #$C3EB, // $C3EB + #$C3EC, // $C3EC + #$C3ED, // $C3ED + #$C3EE, // $C3EE + #$C3EF, // $C3EF + #$C3F0, // $C3F0 + #$C3F1, // $C3F1 + #$C3F2, // $C3F2 + #$C3F3, // $C3F3 + #$C3F4, // $C3F4 + #$C3F5, // $C3F5 + #$C3F6, // $C3F6 + #$C3F7, // $C3F7 + #$C3F8, // $C3F8 + #$C3F9, // $C3F9 + #$C3FA, // $C3FA + #$C3FB, // $C3FB + #$C3FC, // $C3FC + #$C3FD, // $C3FD + #$C3FE, // $C3FE + #$C3FF, // $C3FF + #$C400, // $C400 + #$C401, // $C401 + #$C402, // $C402 + #$C403, // $C403 + #$C404, // $C404 + #$C405, // $C405 + #$C406, // $C406 + #$C407, // $C407 + #$C408, // $C408 + #$C409, // $C409 + #$C40A, // $C40A + #$C40B, // $C40B + #$C40C, // $C40C + #$C40D, // $C40D + #$C40E, // $C40E + #$C40F, // $C40F + #$C410, // $C410 + #$C411, // $C411 + #$C412, // $C412 + #$C413, // $C413 + #$C414, // $C414 + #$C415, // $C415 + #$C416, // $C416 + #$C417, // $C417 + #$C418, // $C418 + #$C419, // $C419 + #$C41A, // $C41A + #$C41B, // $C41B + #$C41C, // $C41C + #$C41D, // $C41D + #$C41E, // $C41E + #$C41F, // $C41F + #$C420, // $C420 + #$C421, // $C421 + #$C422, // $C422 + #$C423, // $C423 + #$C424, // $C424 + #$C425, // $C425 + #$C426, // $C426 + #$C427, // $C427 + #$C428, // $C428 + #$C429, // $C429 + #$C42A, // $C42A + #$C42B, // $C42B + #$C42C, // $C42C + #$C42D, // $C42D + #$C42E, // $C42E + #$C42F, // $C42F + #$C430, // $C430 + #$C431, // $C431 + #$C432, // $C432 + #$C433, // $C433 + #$C434, // $C434 + #$C435, // $C435 + #$C436, // $C436 + #$C437, // $C437 + #$C438, // $C438 + #$C439, // $C439 + #$C43A, // $C43A + #$C43B, // $C43B + #$C43C, // $C43C + #$C43D, // $C43D + #$C43E, // $C43E + #$C43F, // $C43F + #$C440, // $C440 + #$C441, // $C441 + #$C442, // $C442 + #$C443, // $C443 + #$C444, // $C444 + #$C445, // $C445 + #$C446, // $C446 + #$C447, // $C447 + #$C448, // $C448 + #$C449, // $C449 + #$C44A, // $C44A + #$C44B, // $C44B + #$C44C, // $C44C + #$C44D, // $C44D + #$C44E, // $C44E + #$C44F, // $C44F + #$C450, // $C450 + #$C451, // $C451 + #$C452, // $C452 + #$C453, // $C453 + #$C454, // $C454 + #$C455, // $C455 + #$C456, // $C456 + #$C457, // $C457 + #$C458, // $C458 + #$C459, // $C459 + #$C45A, // $C45A + #$C45B, // $C45B + #$C45C, // $C45C + #$C45D, // $C45D + #$C45E, // $C45E + #$C45F, // $C45F + #$C460, // $C460 + #$C461, // $C461 + #$C462, // $C462 + #$C463, // $C463 + #$C464, // $C464 + #$C465, // $C465 + #$C466, // $C466 + #$C467, // $C467 + #$C468, // $C468 + #$C469, // $C469 + #$C46A, // $C46A + #$C46B, // $C46B + #$C46C, // $C46C + #$C46D, // $C46D + #$C46E, // $C46E + #$C46F, // $C46F + #$C470, // $C470 + #$C471, // $C471 + #$C472, // $C472 + #$C473, // $C473 + #$C474, // $C474 + #$C475, // $C475 + #$C476, // $C476 + #$C477, // $C477 + #$C478, // $C478 + #$C479, // $C479 + #$C47A, // $C47A + #$C47B, // $C47B + #$C47C, // $C47C + #$C47D, // $C47D + #$C47E, // $C47E + #$C47F, // $C47F + #$C480, // $C480 + #$C481, // $C481 + #$C482, // $C482 + #$C483, // $C483 + #$C484, // $C484 + #$C485, // $C485 + #$C486, // $C486 + #$C487, // $C487 + #$C488, // $C488 + #$C489, // $C489 + #$C48A, // $C48A + #$C48B, // $C48B + #$C48C, // $C48C + #$C48D, // $C48D + #$C48E, // $C48E + #$C48F, // $C48F + #$C490, // $C490 + #$C491, // $C491 + #$C492, // $C492 + #$C493, // $C493 + #$C494, // $C494 + #$C495, // $C495 + #$C496, // $C496 + #$C497, // $C497 + #$C498, // $C498 + #$C499, // $C499 + #$C49A, // $C49A + #$C49B, // $C49B + #$C49C, // $C49C + #$C49D, // $C49D + #$C49E, // $C49E + #$C49F, // $C49F + #$C4A0, // $C4A0 + #$C4A1, // $C4A1 + #$C4A2, // $C4A2 + #$C4A3, // $C4A3 + #$C4A4, // $C4A4 + #$C4A5, // $C4A5 + #$C4A6, // $C4A6 + #$C4A7, // $C4A7 + #$C4A8, // $C4A8 + #$C4A9, // $C4A9 + #$C4AA, // $C4AA + #$C4AB, // $C4AB + #$C4AC, // $C4AC + #$C4AD, // $C4AD + #$C4AE, // $C4AE + #$C4AF, // $C4AF + #$C4B0, // $C4B0 + #$C4B1, // $C4B1 + #$C4B2, // $C4B2 + #$C4B3, // $C4B3 + #$C4B4, // $C4B4 + #$C4B5, // $C4B5 + #$C4B6, // $C4B6 + #$C4B7, // $C4B7 + #$C4B8, // $C4B8 + #$C4B9, // $C4B9 + #$C4BA, // $C4BA + #$C4BB, // $C4BB + #$C4BC, // $C4BC + #$C4BD, // $C4BD + #$C4BE, // $C4BE + #$C4BF, // $C4BF + #$C4C0, // $C4C0 + #$C4C1, // $C4C1 + #$C4C2, // $C4C2 + #$C4C3, // $C4C3 + #$C4C4, // $C4C4 + #$C4C5, // $C4C5 + #$C4C6, // $C4C6 + #$C4C7, // $C4C7 + #$C4C8, // $C4C8 + #$C4C9, // $C4C9 + #$C4CA, // $C4CA + #$C4CB, // $C4CB + #$C4CC, // $C4CC + #$C4CD, // $C4CD + #$C4CE, // $C4CE + #$C4CF, // $C4CF + #$C4D0, // $C4D0 + #$C4D1, // $C4D1 + #$C4D2, // $C4D2 + #$C4D3, // $C4D3 + #$C4D4, // $C4D4 + #$C4D5, // $C4D5 + #$C4D6, // $C4D6 + #$C4D7, // $C4D7 + #$C4D8, // $C4D8 + #$C4D9, // $C4D9 + #$C4DA, // $C4DA + #$C4DB, // $C4DB + #$C4DC, // $C4DC + #$C4DD, // $C4DD + #$C4DE, // $C4DE + #$C4DF, // $C4DF + #$C4E0, // $C4E0 + #$C4E1, // $C4E1 + #$C4E2, // $C4E2 + #$C4E3, // $C4E3 + #$C4E4, // $C4E4 + #$C4E5, // $C4E5 + #$C4E6, // $C4E6 + #$C4E7, // $C4E7 + #$C4E8, // $C4E8 + #$C4E9, // $C4E9 + #$C4EA, // $C4EA + #$C4EB, // $C4EB + #$C4EC, // $C4EC + #$C4ED, // $C4ED + #$C4EE, // $C4EE + #$C4EF, // $C4EF + #$C4F0, // $C4F0 + #$C4F1, // $C4F1 + #$C4F2, // $C4F2 + #$C4F3, // $C4F3 + #$C4F4, // $C4F4 + #$C4F5, // $C4F5 + #$C4F6, // $C4F6 + #$C4F7, // $C4F7 + #$C4F8, // $C4F8 + #$C4F9, // $C4F9 + #$C4FA, // $C4FA + #$C4FB, // $C4FB + #$C4FC, // $C4FC + #$C4FD, // $C4FD + #$C4FE, // $C4FE + #$C4FF, // $C4FF + #$C500, // $C500 + #$C501, // $C501 + #$C502, // $C502 + #$C503, // $C503 + #$C504, // $C504 + #$C505, // $C505 + #$C506, // $C506 + #$C507, // $C507 + #$C508, // $C508 + #$C509, // $C509 + #$C50A, // $C50A + #$C50B, // $C50B + #$C50C, // $C50C + #$C50D, // $C50D + #$C50E, // $C50E + #$C50F, // $C50F + #$C510, // $C510 + #$C511, // $C511 + #$C512, // $C512 + #$C513, // $C513 + #$C514, // $C514 + #$C515, // $C515 + #$C516, // $C516 + #$C517, // $C517 + #$C518, // $C518 + #$C519, // $C519 + #$C51A, // $C51A + #$C51B, // $C51B + #$C51C, // $C51C + #$C51D, // $C51D + #$C51E, // $C51E + #$C51F, // $C51F + #$C520, // $C520 + #$C521, // $C521 + #$C522, // $C522 + #$C523, // $C523 + #$C524, // $C524 + #$C525, // $C525 + #$C526, // $C526 + #$C527, // $C527 + #$C528, // $C528 + #$C529, // $C529 + #$C52A, // $C52A + #$C52B, // $C52B + #$C52C, // $C52C + #$C52D, // $C52D + #$C52E, // $C52E + #$C52F, // $C52F + #$C530, // $C530 + #$C531, // $C531 + #$C532, // $C532 + #$C533, // $C533 + #$C534, // $C534 + #$C535, // $C535 + #$C536, // $C536 + #$C537, // $C537 + #$C538, // $C538 + #$C539, // $C539 + #$C53A, // $C53A + #$C53B, // $C53B + #$C53C, // $C53C + #$C53D, // $C53D + #$C53E, // $C53E + #$C53F, // $C53F + #$C540, // $C540 + #$C541, // $C541 + #$C542, // $C542 + #$C543, // $C543 + #$C544, // $C544 + #$C545, // $C545 + #$C546, // $C546 + #$C547, // $C547 + #$C548, // $C548 + #$C549, // $C549 + #$C54A, // $C54A + #$C54B, // $C54B + #$C54C, // $C54C + #$C54D, // $C54D + #$C54E, // $C54E + #$C54F, // $C54F + #$C550, // $C550 + #$C551, // $C551 + #$C552, // $C552 + #$C553, // $C553 + #$C554, // $C554 + #$C555, // $C555 + #$C556, // $C556 + #$C557, // $C557 + #$C558, // $C558 + #$C559, // $C559 + #$C55A, // $C55A + #$C55B, // $C55B + #$C55C, // $C55C + #$C55D, // $C55D + #$C55E, // $C55E + #$C55F, // $C55F + #$C560, // $C560 + #$C561, // $C561 + #$C562, // $C562 + #$C563, // $C563 + #$C564, // $C564 + #$C565, // $C565 + #$C566, // $C566 + #$C567, // $C567 + #$C568, // $C568 + #$C569, // $C569 + #$C56A, // $C56A + #$C56B, // $C56B + #$C56C, // $C56C + #$C56D, // $C56D + #$C56E, // $C56E + #$C56F, // $C56F + #$C570, // $C570 + #$C571, // $C571 + #$C572, // $C572 + #$C573, // $C573 + #$C574, // $C574 + #$C575, // $C575 + #$C576, // $C576 + #$C577, // $C577 + #$C578, // $C578 + #$C579, // $C579 + #$C57A, // $C57A + #$C57B, // $C57B + #$C57C, // $C57C + #$C57D, // $C57D + #$C57E, // $C57E + #$C57F, // $C57F + #$C580, // $C580 + #$C581, // $C581 + #$C582, // $C582 + #$C583, // $C583 + #$C584, // $C584 + #$C585, // $C585 + #$C586, // $C586 + #$C587, // $C587 + #$C588, // $C588 + #$C589, // $C589 + #$C58A, // $C58A + #$C58B, // $C58B + #$C58C, // $C58C + #$C58D, // $C58D + #$C58E, // $C58E + #$C58F, // $C58F + #$C590, // $C590 + #$C591, // $C591 + #$C592, // $C592 + #$C593, // $C593 + #$C594, // $C594 + #$C595, // $C595 + #$C596, // $C596 + #$C597, // $C597 + #$C598, // $C598 + #$C599, // $C599 + #$C59A, // $C59A + #$C59B, // $C59B + #$C59C, // $C59C + #$C59D, // $C59D + #$C59E, // $C59E + #$C59F, // $C59F + #$C5A0, // $C5A0 + #$C5A1, // $C5A1 + #$C5A2, // $C5A2 + #$C5A3, // $C5A3 + #$C5A4, // $C5A4 + #$C5A5, // $C5A5 + #$C5A6, // $C5A6 + #$C5A7, // $C5A7 + #$C5A8, // $C5A8 + #$C5A9, // $C5A9 + #$C5AA, // $C5AA + #$C5AB, // $C5AB + #$C5AC, // $C5AC + #$C5AD, // $C5AD + #$C5AE, // $C5AE + #$C5AF, // $C5AF + #$C5B0, // $C5B0 + #$C5B1, // $C5B1 + #$C5B2, // $C5B2 + #$C5B3, // $C5B3 + #$C5B4, // $C5B4 + #$C5B5, // $C5B5 + #$C5B6, // $C5B6 + #$C5B7, // $C5B7 + #$C5B8, // $C5B8 + #$C5B9, // $C5B9 + #$C5BA, // $C5BA + #$C5BB, // $C5BB + #$C5BC, // $C5BC + #$C5BD, // $C5BD + #$C5BE, // $C5BE + #$C5BF, // $C5BF + #$C5C0, // $C5C0 + #$C5C1, // $C5C1 + #$C5C2, // $C5C2 + #$C5C3, // $C5C3 + #$C5C4, // $C5C4 + #$C5C5, // $C5C5 + #$C5C6, // $C5C6 + #$C5C7, // $C5C7 + #$C5C8, // $C5C8 + #$C5C9, // $C5C9 + #$C5CA, // $C5CA + #$C5CB, // $C5CB + #$C5CC, // $C5CC + #$C5CD, // $C5CD + #$C5CE, // $C5CE + #$C5CF, // $C5CF + #$C5D0, // $C5D0 + #$C5D1, // $C5D1 + #$C5D2, // $C5D2 + #$C5D3, // $C5D3 + #$C5D4, // $C5D4 + #$C5D5, // $C5D5 + #$C5D6, // $C5D6 + #$C5D7, // $C5D7 + #$C5D8, // $C5D8 + #$C5D9, // $C5D9 + #$C5DA, // $C5DA + #$C5DB, // $C5DB + #$C5DC, // $C5DC + #$C5DD, // $C5DD + #$C5DE, // $C5DE + #$C5DF, // $C5DF + #$C5E0, // $C5E0 + #$C5E1, // $C5E1 + #$C5E2, // $C5E2 + #$C5E3, // $C5E3 + #$C5E4, // $C5E4 + #$C5E5, // $C5E5 + #$C5E6, // $C5E6 + #$C5E7, // $C5E7 + #$C5E8, // $C5E8 + #$C5E9, // $C5E9 + #$C5EA, // $C5EA + #$C5EB, // $C5EB + #$C5EC, // $C5EC + #$C5ED, // $C5ED + #$C5EE, // $C5EE + #$C5EF, // $C5EF + #$C5F0, // $C5F0 + #$C5F1, // $C5F1 + #$C5F2, // $C5F2 + #$C5F3, // $C5F3 + #$C5F4, // $C5F4 + #$C5F5, // $C5F5 + #$C5F6, // $C5F6 + #$C5F7, // $C5F7 + #$C5F8, // $C5F8 + #$C5F9, // $C5F9 + #$C5FA, // $C5FA + #$C5FB, // $C5FB + #$C5FC, // $C5FC + #$C5FD, // $C5FD + #$C5FE, // $C5FE + #$C5FF, // $C5FF + #$C600, // $C600 + #$C601, // $C601 + #$C602, // $C602 + #$C603, // $C603 + #$C604, // $C604 + #$C605, // $C605 + #$C606, // $C606 + #$C607, // $C607 + #$C608, // $C608 + #$C609, // $C609 + #$C60A, // $C60A + #$C60B, // $C60B + #$C60C, // $C60C + #$C60D, // $C60D + #$C60E, // $C60E + #$C60F, // $C60F + #$C610, // $C610 + #$C611, // $C611 + #$C612, // $C612 + #$C613, // $C613 + #$C614, // $C614 + #$C615, // $C615 + #$C616, // $C616 + #$C617, // $C617 + #$C618, // $C618 + #$C619, // $C619 + #$C61A, // $C61A + #$C61B, // $C61B + #$C61C, // $C61C + #$C61D, // $C61D + #$C61E, // $C61E + #$C61F, // $C61F + #$C620, // $C620 + #$C621, // $C621 + #$C622, // $C622 + #$C623, // $C623 + #$C624, // $C624 + #$C625, // $C625 + #$C626, // $C626 + #$C627, // $C627 + #$C628, // $C628 + #$C629, // $C629 + #$C62A, // $C62A + #$C62B, // $C62B + #$C62C, // $C62C + #$C62D, // $C62D + #$C62E, // $C62E + #$C62F, // $C62F + #$C630, // $C630 + #$C631, // $C631 + #$C632, // $C632 + #$C633, // $C633 + #$C634, // $C634 + #$C635, // $C635 + #$C636, // $C636 + #$C637, // $C637 + #$C638, // $C638 + #$C639, // $C639 + #$C63A, // $C63A + #$C63B, // $C63B + #$C63C, // $C63C + #$C63D, // $C63D + #$C63E, // $C63E + #$C63F, // $C63F + #$C640, // $C640 + #$C641, // $C641 + #$C642, // $C642 + #$C643, // $C643 + #$C644, // $C644 + #$C645, // $C645 + #$C646, // $C646 + #$C647, // $C647 + #$C648, // $C648 + #$C649, // $C649 + #$C64A, // $C64A + #$C64B, // $C64B + #$C64C, // $C64C + #$C64D, // $C64D + #$C64E, // $C64E + #$C64F, // $C64F + #$C650, // $C650 + #$C651, // $C651 + #$C652, // $C652 + #$C653, // $C653 + #$C654, // $C654 + #$C655, // $C655 + #$C656, // $C656 + #$C657, // $C657 + #$C658, // $C658 + #$C659, // $C659 + #$C65A, // $C65A + #$C65B, // $C65B + #$C65C, // $C65C + #$C65D, // $C65D + #$C65E, // $C65E + #$C65F, // $C65F + #$C660, // $C660 + #$C661, // $C661 + #$C662, // $C662 + #$C663, // $C663 + #$C664, // $C664 + #$C665, // $C665 + #$C666, // $C666 + #$C667, // $C667 + #$C668, // $C668 + #$C669, // $C669 + #$C66A, // $C66A + #$C66B, // $C66B + #$C66C, // $C66C + #$C66D, // $C66D + #$C66E, // $C66E + #$C66F, // $C66F + #$C670, // $C670 + #$C671, // $C671 + #$C672, // $C672 + #$C673, // $C673 + #$C674, // $C674 + #$C675, // $C675 + #$C676, // $C676 + #$C677, // $C677 + #$C678, // $C678 + #$C679, // $C679 + #$C67A, // $C67A + #$C67B, // $C67B + #$C67C, // $C67C + #$C67D, // $C67D + #$C67E, // $C67E + #$C67F, // $C67F + #$C680, // $C680 + #$C681, // $C681 + #$C682, // $C682 + #$C683, // $C683 + #$C684, // $C684 + #$C685, // $C685 + #$C686, // $C686 + #$C687, // $C687 + #$C688, // $C688 + #$C689, // $C689 + #$C68A, // $C68A + #$C68B, // $C68B + #$C68C, // $C68C + #$C68D, // $C68D + #$C68E, // $C68E + #$C68F, // $C68F + #$C690, // $C690 + #$C691, // $C691 + #$C692, // $C692 + #$C693, // $C693 + #$C694, // $C694 + #$C695, // $C695 + #$C696, // $C696 + #$C697, // $C697 + #$C698, // $C698 + #$C699, // $C699 + #$C69A, // $C69A + #$C69B, // $C69B + #$C69C, // $C69C + #$C69D, // $C69D + #$C69E, // $C69E + #$C69F, // $C69F + #$C6A0, // $C6A0 + #$C6A1, // $C6A1 + #$C6A2, // $C6A2 + #$C6A3, // $C6A3 + #$C6A4, // $C6A4 + #$C6A5, // $C6A5 + #$C6A6, // $C6A6 + #$C6A7, // $C6A7 + #$C6A8, // $C6A8 + #$C6A9, // $C6A9 + #$C6AA, // $C6AA + #$C6AB, // $C6AB + #$C6AC, // $C6AC + #$C6AD, // $C6AD + #$C6AE, // $C6AE + #$C6AF, // $C6AF + #$C6B0, // $C6B0 + #$C6B1, // $C6B1 + #$C6B2, // $C6B2 + #$C6B3, // $C6B3 + #$C6B4, // $C6B4 + #$C6B5, // $C6B5 + #$C6B6, // $C6B6 + #$C6B7, // $C6B7 + #$C6B8, // $C6B8 + #$C6B9, // $C6B9 + #$C6BA, // $C6BA + #$C6BB, // $C6BB + #$C6BC, // $C6BC + #$C6BD, // $C6BD + #$C6BE, // $C6BE + #$C6BF, // $C6BF + #$C6C0, // $C6C0 + #$C6C1, // $C6C1 + #$C6C2, // $C6C2 + #$C6C3, // $C6C3 + #$C6C4, // $C6C4 + #$C6C5, // $C6C5 + #$C6C6, // $C6C6 + #$C6C7, // $C6C7 + #$C6C8, // $C6C8 + #$C6C9, // $C6C9 + #$C6CA, // $C6CA + #$C6CB, // $C6CB + #$C6CC, // $C6CC + #$C6CD, // $C6CD + #$C6CE, // $C6CE + #$C6CF, // $C6CF + #$C6D0, // $C6D0 + #$C6D1, // $C6D1 + #$C6D2, // $C6D2 + #$C6D3, // $C6D3 + #$C6D4, // $C6D4 + #$C6D5, // $C6D5 + #$C6D6, // $C6D6 + #$C6D7, // $C6D7 + #$C6D8, // $C6D8 + #$C6D9, // $C6D9 + #$C6DA, // $C6DA + #$C6DB, // $C6DB + #$C6DC, // $C6DC + #$C6DD, // $C6DD + #$C6DE, // $C6DE + #$C6DF, // $C6DF + #$C6E0, // $C6E0 + #$C6E1, // $C6E1 + #$C6E2, // $C6E2 + #$C6E3, // $C6E3 + #$C6E4, // $C6E4 + #$C6E5, // $C6E5 + #$C6E6, // $C6E6 + #$C6E7, // $C6E7 + #$C6E8, // $C6E8 + #$C6E9, // $C6E9 + #$C6EA, // $C6EA + #$C6EB, // $C6EB + #$C6EC, // $C6EC + #$C6ED, // $C6ED + #$C6EE, // $C6EE + #$C6EF, // $C6EF + #$C6F0, // $C6F0 + #$C6F1, // $C6F1 + #$C6F2, // $C6F2 + #$C6F3, // $C6F3 + #$C6F4, // $C6F4 + #$C6F5, // $C6F5 + #$C6F6, // $C6F6 + #$C6F7, // $C6F7 + #$C6F8, // $C6F8 + #$C6F9, // $C6F9 + #$C6FA, // $C6FA + #$C6FB, // $C6FB + #$C6FC, // $C6FC + #$C6FD, // $C6FD + #$C6FE, // $C6FE + #$C6FF, // $C6FF + #$C700, // $C700 + #$C701, // $C701 + #$C702, // $C702 + #$C703, // $C703 + #$C704, // $C704 + #$C705, // $C705 + #$C706, // $C706 + #$C707, // $C707 + #$C708, // $C708 + #$C709, // $C709 + #$C70A, // $C70A + #$C70B, // $C70B + #$C70C, // $C70C + #$C70D, // $C70D + #$C70E, // $C70E + #$C70F, // $C70F + #$C710, // $C710 + #$C711, // $C711 + #$C712, // $C712 + #$C713, // $C713 + #$C714, // $C714 + #$C715, // $C715 + #$C716, // $C716 + #$C717, // $C717 + #$C718, // $C718 + #$C719, // $C719 + #$C71A, // $C71A + #$C71B, // $C71B + #$C71C, // $C71C + #$C71D, // $C71D + #$C71E, // $C71E + #$C71F, // $C71F + #$C720, // $C720 + #$C721, // $C721 + #$C722, // $C722 + #$C723, // $C723 + #$C724, // $C724 + #$C725, // $C725 + #$C726, // $C726 + #$C727, // $C727 + #$C728, // $C728 + #$C729, // $C729 + #$C72A, // $C72A + #$C72B, // $C72B + #$C72C, // $C72C + #$C72D, // $C72D + #$C72E, // $C72E + #$C72F, // $C72F + #$C730, // $C730 + #$C731, // $C731 + #$C732, // $C732 + #$C733, // $C733 + #$C734, // $C734 + #$C735, // $C735 + #$C736, // $C736 + #$C737, // $C737 + #$C738, // $C738 + #$C739, // $C739 + #$C73A, // $C73A + #$C73B, // $C73B + #$C73C, // $C73C + #$C73D, // $C73D + #$C73E, // $C73E + #$C73F, // $C73F + #$C740, // $C740 + #$C741, // $C741 + #$C742, // $C742 + #$C743, // $C743 + #$C744, // $C744 + #$C745, // $C745 + #$C746, // $C746 + #$C747, // $C747 + #$C748, // $C748 + #$C749, // $C749 + #$C74A, // $C74A + #$C74B, // $C74B + #$C74C, // $C74C + #$C74D, // $C74D + #$C74E, // $C74E + #$C74F, // $C74F + #$C750, // $C750 + #$C751, // $C751 + #$C752, // $C752 + #$C753, // $C753 + #$C754, // $C754 + #$C755, // $C755 + #$C756, // $C756 + #$C757, // $C757 + #$C758, // $C758 + #$C759, // $C759 + #$C75A, // $C75A + #$C75B, // $C75B + #$C75C, // $C75C + #$C75D, // $C75D + #$C75E, // $C75E + #$C75F, // $C75F + #$C760, // $C760 + #$C761, // $C761 + #$C762, // $C762 + #$C763, // $C763 + #$C764, // $C764 + #$C765, // $C765 + #$C766, // $C766 + #$C767, // $C767 + #$C768, // $C768 + #$C769, // $C769 + #$C76A, // $C76A + #$C76B, // $C76B + #$C76C, // $C76C + #$C76D, // $C76D + #$C76E, // $C76E + #$C76F, // $C76F + #$C770, // $C770 + #$C771, // $C771 + #$C772, // $C772 + #$C773, // $C773 + #$C774, // $C774 + #$C775, // $C775 + #$C776, // $C776 + #$C777, // $C777 + #$C778, // $C778 + #$C779, // $C779 + #$C77A, // $C77A + #$C77B, // $C77B + #$C77C, // $C77C + #$C77D, // $C77D + #$C77E, // $C77E + #$C77F, // $C77F + #$C780, // $C780 + #$C781, // $C781 + #$C782, // $C782 + #$C783, // $C783 + #$C784, // $C784 + #$C785, // $C785 + #$C786, // $C786 + #$C787, // $C787 + #$C788, // $C788 + #$C789, // $C789 + #$C78A, // $C78A + #$C78B, // $C78B + #$C78C, // $C78C + #$C78D, // $C78D + #$C78E, // $C78E + #$C78F, // $C78F + #$C790, // $C790 + #$C791, // $C791 + #$C792, // $C792 + #$C793, // $C793 + #$C794, // $C794 + #$C795, // $C795 + #$C796, // $C796 + #$C797, // $C797 + #$C798, // $C798 + #$C799, // $C799 + #$C79A, // $C79A + #$C79B, // $C79B + #$C79C, // $C79C + #$C79D, // $C79D + #$C79E, // $C79E + #$C79F, // $C79F + #$C7A0, // $C7A0 + #$C7A1, // $C7A1 + #$C7A2, // $C7A2 + #$C7A3, // $C7A3 + #$C7A4, // $C7A4 + #$C7A5, // $C7A5 + #$C7A6, // $C7A6 + #$C7A7, // $C7A7 + #$C7A8, // $C7A8 + #$C7A9, // $C7A9 + #$C7AA, // $C7AA + #$C7AB, // $C7AB + #$C7AC, // $C7AC + #$C7AD, // $C7AD + #$C7AE, // $C7AE + #$C7AF, // $C7AF + #$C7B0, // $C7B0 + #$C7B1, // $C7B1 + #$C7B2, // $C7B2 + #$C7B3, // $C7B3 + #$C7B4, // $C7B4 + #$C7B5, // $C7B5 + #$C7B6, // $C7B6 + #$C7B7, // $C7B7 + #$C7B8, // $C7B8 + #$C7B9, // $C7B9 + #$C7BA, // $C7BA + #$C7BB, // $C7BB + #$C7BC, // $C7BC + #$C7BD, // $C7BD + #$C7BE, // $C7BE + #$C7BF, // $C7BF + #$C7C0, // $C7C0 + #$C7C1, // $C7C1 + #$C7C2, // $C7C2 + #$C7C3, // $C7C3 + #$C7C4, // $C7C4 + #$C7C5, // $C7C5 + #$C7C6, // $C7C6 + #$C7C7, // $C7C7 + #$C7C8, // $C7C8 + #$C7C9, // $C7C9 + #$C7CA, // $C7CA + #$C7CB, // $C7CB + #$C7CC, // $C7CC + #$C7CD, // $C7CD + #$C7CE, // $C7CE + #$C7CF, // $C7CF + #$C7D0, // $C7D0 + #$C7D1, // $C7D1 + #$C7D2, // $C7D2 + #$C7D3, // $C7D3 + #$C7D4, // $C7D4 + #$C7D5, // $C7D5 + #$C7D6, // $C7D6 + #$C7D7, // $C7D7 + #$C7D8, // $C7D8 + #$C7D9, // $C7D9 + #$C7DA, // $C7DA + #$C7DB, // $C7DB + #$C7DC, // $C7DC + #$C7DD, // $C7DD + #$C7DE, // $C7DE + #$C7DF, // $C7DF + #$C7E0, // $C7E0 + #$C7E1, // $C7E1 + #$C7E2, // $C7E2 + #$C7E3, // $C7E3 + #$C7E4, // $C7E4 + #$C7E5, // $C7E5 + #$C7E6, // $C7E6 + #$C7E7, // $C7E7 + #$C7E8, // $C7E8 + #$C7E9, // $C7E9 + #$C7EA, // $C7EA + #$C7EB, // $C7EB + #$C7EC, // $C7EC + #$C7ED, // $C7ED + #$C7EE, // $C7EE + #$C7EF, // $C7EF + #$C7F0, // $C7F0 + #$C7F1, // $C7F1 + #$C7F2, // $C7F2 + #$C7F3, // $C7F3 + #$C7F4, // $C7F4 + #$C7F5, // $C7F5 + #$C7F6, // $C7F6 + #$C7F7, // $C7F7 + #$C7F8, // $C7F8 + #$C7F9, // $C7F9 + #$C7FA, // $C7FA + #$C7FB, // $C7FB + #$C7FC, // $C7FC + #$C7FD, // $C7FD + #$C7FE, // $C7FE + #$C7FF, // $C7FF + #$C800, // $C800 + #$C801, // $C801 + #$C802, // $C802 + #$C803, // $C803 + #$C804, // $C804 + #$C805, // $C805 + #$C806, // $C806 + #$C807, // $C807 + #$C808, // $C808 + #$C809, // $C809 + #$C80A, // $C80A + #$C80B, // $C80B + #$C80C, // $C80C + #$C80D, // $C80D + #$C80E, // $C80E + #$C80F, // $C80F + #$C810, // $C810 + #$C811, // $C811 + #$C812, // $C812 + #$C813, // $C813 + #$C814, // $C814 + #$C815, // $C815 + #$C816, // $C816 + #$C817, // $C817 + #$C818, // $C818 + #$C819, // $C819 + #$C81A, // $C81A + #$C81B, // $C81B + #$C81C, // $C81C + #$C81D, // $C81D + #$C81E, // $C81E + #$C81F, // $C81F + #$C820, // $C820 + #$C821, // $C821 + #$C822, // $C822 + #$C823, // $C823 + #$C824, // $C824 + #$C825, // $C825 + #$C826, // $C826 + #$C827, // $C827 + #$C828, // $C828 + #$C829, // $C829 + #$C82A, // $C82A + #$C82B, // $C82B + #$C82C, // $C82C + #$C82D, // $C82D + #$C82E, // $C82E + #$C82F, // $C82F + #$C830, // $C830 + #$C831, // $C831 + #$C832, // $C832 + #$C833, // $C833 + #$C834, // $C834 + #$C835, // $C835 + #$C836, // $C836 + #$C837, // $C837 + #$C838, // $C838 + #$C839, // $C839 + #$C83A, // $C83A + #$C83B, // $C83B + #$C83C, // $C83C + #$C83D, // $C83D + #$C83E, // $C83E + #$C83F, // $C83F + #$C840, // $C840 + #$C841, // $C841 + #$C842, // $C842 + #$C843, // $C843 + #$C844, // $C844 + #$C845, // $C845 + #$C846, // $C846 + #$C847, // $C847 + #$C848, // $C848 + #$C849, // $C849 + #$C84A, // $C84A + #$C84B, // $C84B + #$C84C, // $C84C + #$C84D, // $C84D + #$C84E, // $C84E + #$C84F, // $C84F + #$C850, // $C850 + #$C851, // $C851 + #$C852, // $C852 + #$C853, // $C853 + #$C854, // $C854 + #$C855, // $C855 + #$C856, // $C856 + #$C857, // $C857 + #$C858, // $C858 + #$C859, // $C859 + #$C85A, // $C85A + #$C85B, // $C85B + #$C85C, // $C85C + #$C85D, // $C85D + #$C85E, // $C85E + #$C85F, // $C85F + #$C860, // $C860 + #$C861, // $C861 + #$C862, // $C862 + #$C863, // $C863 + #$C864, // $C864 + #$C865, // $C865 + #$C866, // $C866 + #$C867, // $C867 + #$C868, // $C868 + #$C869, // $C869 + #$C86A, // $C86A + #$C86B, // $C86B + #$C86C, // $C86C + #$C86D, // $C86D + #$C86E, // $C86E + #$C86F, // $C86F + #$C870, // $C870 + #$C871, // $C871 + #$C872, // $C872 + #$C873, // $C873 + #$C874, // $C874 + #$C875, // $C875 + #$C876, // $C876 + #$C877, // $C877 + #$C878, // $C878 + #$C879, // $C879 + #$C87A, // $C87A + #$C87B, // $C87B + #$C87C, // $C87C + #$C87D, // $C87D + #$C87E, // $C87E + #$C87F, // $C87F + #$C880, // $C880 + #$C881, // $C881 + #$C882, // $C882 + #$C883, // $C883 + #$C884, // $C884 + #$C885, // $C885 + #$C886, // $C886 + #$C887, // $C887 + #$C888, // $C888 + #$C889, // $C889 + #$C88A, // $C88A + #$C88B, // $C88B + #$C88C, // $C88C + #$C88D, // $C88D + #$C88E, // $C88E + #$C88F, // $C88F + #$C890, // $C890 + #$C891, // $C891 + #$C892, // $C892 + #$C893, // $C893 + #$C894, // $C894 + #$C895, // $C895 + #$C896, // $C896 + #$C897, // $C897 + #$C898, // $C898 + #$C899, // $C899 + #$C89A, // $C89A + #$C89B, // $C89B + #$C89C, // $C89C + #$C89D, // $C89D + #$C89E, // $C89E + #$C89F, // $C89F + #$C8A0, // $C8A0 + #$C8A1, // $C8A1 + #$C8A2, // $C8A2 + #$C8A3, // $C8A3 + #$C8A4, // $C8A4 + #$C8A5, // $C8A5 + #$C8A6, // $C8A6 + #$C8A7, // $C8A7 + #$C8A8, // $C8A8 + #$C8A9, // $C8A9 + #$C8AA, // $C8AA + #$C8AB, // $C8AB + #$C8AC, // $C8AC + #$C8AD, // $C8AD + #$C8AE, // $C8AE + #$C8AF, // $C8AF + #$C8B0, // $C8B0 + #$C8B1, // $C8B1 + #$C8B2, // $C8B2 + #$C8B3, // $C8B3 + #$C8B4, // $C8B4 + #$C8B5, // $C8B5 + #$C8B6, // $C8B6 + #$C8B7, // $C8B7 + #$C8B8, // $C8B8 + #$C8B9, // $C8B9 + #$C8BA, // $C8BA + #$C8BB, // $C8BB + #$C8BC, // $C8BC + #$C8BD, // $C8BD + #$C8BE, // $C8BE + #$C8BF, // $C8BF + #$C8C0, // $C8C0 + #$C8C1, // $C8C1 + #$C8C2, // $C8C2 + #$C8C3, // $C8C3 + #$C8C4, // $C8C4 + #$C8C5, // $C8C5 + #$C8C6, // $C8C6 + #$C8C7, // $C8C7 + #$C8C8, // $C8C8 + #$C8C9, // $C8C9 + #$C8CA, // $C8CA + #$C8CB, // $C8CB + #$C8CC, // $C8CC + #$C8CD, // $C8CD + #$C8CE, // $C8CE + #$C8CF, // $C8CF + #$C8D0, // $C8D0 + #$C8D1, // $C8D1 + #$C8D2, // $C8D2 + #$C8D3, // $C8D3 + #$C8D4, // $C8D4 + #$C8D5, // $C8D5 + #$C8D6, // $C8D6 + #$C8D7, // $C8D7 + #$C8D8, // $C8D8 + #$C8D9, // $C8D9 + #$C8DA, // $C8DA + #$C8DB, // $C8DB + #$C8DC, // $C8DC + #$C8DD, // $C8DD + #$C8DE, // $C8DE + #$C8DF, // $C8DF + #$C8E0, // $C8E0 + #$C8E1, // $C8E1 + #$C8E2, // $C8E2 + #$C8E3, // $C8E3 + #$C8E4, // $C8E4 + #$C8E5, // $C8E5 + #$C8E6, // $C8E6 + #$C8E7, // $C8E7 + #$C8E8, // $C8E8 + #$C8E9, // $C8E9 + #$C8EA, // $C8EA + #$C8EB, // $C8EB + #$C8EC, // $C8EC + #$C8ED, // $C8ED + #$C8EE, // $C8EE + #$C8EF, // $C8EF + #$C8F0, // $C8F0 + #$C8F1, // $C8F1 + #$C8F2, // $C8F2 + #$C8F3, // $C8F3 + #$C8F4, // $C8F4 + #$C8F5, // $C8F5 + #$C8F6, // $C8F6 + #$C8F7, // $C8F7 + #$C8F8, // $C8F8 + #$C8F9, // $C8F9 + #$C8FA, // $C8FA + #$C8FB, // $C8FB + #$C8FC, // $C8FC + #$C8FD, // $C8FD + #$C8FE, // $C8FE + #$C8FF, // $C8FF + #$C900, // $C900 + #$C901, // $C901 + #$C902, // $C902 + #$C903, // $C903 + #$C904, // $C904 + #$C905, // $C905 + #$C906, // $C906 + #$C907, // $C907 + #$C908, // $C908 + #$C909, // $C909 + #$C90A, // $C90A + #$C90B, // $C90B + #$C90C, // $C90C + #$C90D, // $C90D + #$C90E, // $C90E + #$C90F, // $C90F + #$C910, // $C910 + #$C911, // $C911 + #$C912, // $C912 + #$C913, // $C913 + #$C914, // $C914 + #$C915, // $C915 + #$C916, // $C916 + #$C917, // $C917 + #$C918, // $C918 + #$C919, // $C919 + #$C91A, // $C91A + #$C91B, // $C91B + #$C91C, // $C91C + #$C91D, // $C91D + #$C91E, // $C91E + #$C91F, // $C91F + #$C920, // $C920 + #$C921, // $C921 + #$C922, // $C922 + #$C923, // $C923 + #$C924, // $C924 + #$C925, // $C925 + #$C926, // $C926 + #$C927, // $C927 + #$C928, // $C928 + #$C929, // $C929 + #$C92A, // $C92A + #$C92B, // $C92B + #$C92C, // $C92C + #$C92D, // $C92D + #$C92E, // $C92E + #$C92F, // $C92F + #$C930, // $C930 + #$C931, // $C931 + #$C932, // $C932 + #$C933, // $C933 + #$C934, // $C934 + #$C935, // $C935 + #$C936, // $C936 + #$C937, // $C937 + #$C938, // $C938 + #$C939, // $C939 + #$C93A, // $C93A + #$C93B, // $C93B + #$C93C, // $C93C + #$C93D, // $C93D + #$C93E, // $C93E + #$C93F, // $C93F + #$C940, // $C940 + #$C941, // $C941 + #$C942, // $C942 + #$C943, // $C943 + #$C944, // $C944 + #$C945, // $C945 + #$C946, // $C946 + #$C947, // $C947 + #$C948, // $C948 + #$C949, // $C949 + #$C94A, // $C94A + #$C94B, // $C94B + #$C94C, // $C94C + #$C94D, // $C94D + #$C94E, // $C94E + #$C94F, // $C94F + #$C950, // $C950 + #$C951, // $C951 + #$C952, // $C952 + #$C953, // $C953 + #$C954, // $C954 + #$C955, // $C955 + #$C956, // $C956 + #$C957, // $C957 + #$C958, // $C958 + #$C959, // $C959 + #$C95A, // $C95A + #$C95B, // $C95B + #$C95C, // $C95C + #$C95D, // $C95D + #$C95E, // $C95E + #$C95F, // $C95F + #$C960, // $C960 + #$C961, // $C961 + #$C962, // $C962 + #$C963, // $C963 + #$C964, // $C964 + #$C965, // $C965 + #$C966, // $C966 + #$C967, // $C967 + #$C968, // $C968 + #$C969, // $C969 + #$C96A, // $C96A + #$C96B, // $C96B + #$C96C, // $C96C + #$C96D, // $C96D + #$C96E, // $C96E + #$C96F, // $C96F + #$C970, // $C970 + #$C971, // $C971 + #$C972, // $C972 + #$C973, // $C973 + #$C974, // $C974 + #$C975, // $C975 + #$C976, // $C976 + #$C977, // $C977 + #$C978, // $C978 + #$C979, // $C979 + #$C97A, // $C97A + #$C97B, // $C97B + #$C97C, // $C97C + #$C97D, // $C97D + #$C97E, // $C97E + #$C97F, // $C97F + #$C980, // $C980 + #$C981, // $C981 + #$C982, // $C982 + #$C983, // $C983 + #$C984, // $C984 + #$C985, // $C985 + #$C986, // $C986 + #$C987, // $C987 + #$C988, // $C988 + #$C989, // $C989 + #$C98A, // $C98A + #$C98B, // $C98B + #$C98C, // $C98C + #$C98D, // $C98D + #$C98E, // $C98E + #$C98F, // $C98F + #$C990, // $C990 + #$C991, // $C991 + #$C992, // $C992 + #$C993, // $C993 + #$C994, // $C994 + #$C995, // $C995 + #$C996, // $C996 + #$C997, // $C997 + #$C998, // $C998 + #$C999, // $C999 + #$C99A, // $C99A + #$C99B, // $C99B + #$C99C, // $C99C + #$C99D, // $C99D + #$C99E, // $C99E + #$C99F, // $C99F + #$C9A0, // $C9A0 + #$C9A1, // $C9A1 + #$C9A2, // $C9A2 + #$C9A3, // $C9A3 + #$C9A4, // $C9A4 + #$C9A5, // $C9A5 + #$C9A6, // $C9A6 + #$C9A7, // $C9A7 + #$C9A8, // $C9A8 + #$C9A9, // $C9A9 + #$C9AA, // $C9AA + #$C9AB, // $C9AB + #$C9AC, // $C9AC + #$C9AD, // $C9AD + #$C9AE, // $C9AE + #$C9AF, // $C9AF + #$C9B0, // $C9B0 + #$C9B1, // $C9B1 + #$C9B2, // $C9B2 + #$C9B3, // $C9B3 + #$C9B4, // $C9B4 + #$C9B5, // $C9B5 + #$C9B6, // $C9B6 + #$C9B7, // $C9B7 + #$C9B8, // $C9B8 + #$C9B9, // $C9B9 + #$C9BA, // $C9BA + #$C9BB, // $C9BB + #$C9BC, // $C9BC + #$C9BD, // $C9BD + #$C9BE, // $C9BE + #$C9BF, // $C9BF + #$C9C0, // $C9C0 + #$C9C1, // $C9C1 + #$C9C2, // $C9C2 + #$C9C3, // $C9C3 + #$C9C4, // $C9C4 + #$C9C5, // $C9C5 + #$C9C6, // $C9C6 + #$C9C7, // $C9C7 + #$C9C8, // $C9C8 + #$C9C9, // $C9C9 + #$C9CA, // $C9CA + #$C9CB, // $C9CB + #$C9CC, // $C9CC + #$C9CD, // $C9CD + #$C9CE, // $C9CE + #$C9CF, // $C9CF + #$C9D0, // $C9D0 + #$C9D1, // $C9D1 + #$C9D2, // $C9D2 + #$C9D3, // $C9D3 + #$C9D4, // $C9D4 + #$C9D5, // $C9D5 + #$C9D6, // $C9D6 + #$C9D7, // $C9D7 + #$C9D8, // $C9D8 + #$C9D9, // $C9D9 + #$C9DA, // $C9DA + #$C9DB, // $C9DB + #$C9DC, // $C9DC + #$C9DD, // $C9DD + #$C9DE, // $C9DE + #$C9DF, // $C9DF + #$C9E0, // $C9E0 + #$C9E1, // $C9E1 + #$C9E2, // $C9E2 + #$C9E3, // $C9E3 + #$C9E4, // $C9E4 + #$C9E5, // $C9E5 + #$C9E6, // $C9E6 + #$C9E7, // $C9E7 + #$C9E8, // $C9E8 + #$C9E9, // $C9E9 + #$C9EA, // $C9EA + #$C9EB, // $C9EB + #$C9EC, // $C9EC + #$C9ED, // $C9ED + #$C9EE, // $C9EE + #$C9EF, // $C9EF + #$C9F0, // $C9F0 + #$C9F1, // $C9F1 + #$C9F2, // $C9F2 + #$C9F3, // $C9F3 + #$C9F4, // $C9F4 + #$C9F5, // $C9F5 + #$C9F6, // $C9F6 + #$C9F7, // $C9F7 + #$C9F8, // $C9F8 + #$C9F9, // $C9F9 + #$C9FA, // $C9FA + #$C9FB, // $C9FB + #$C9FC, // $C9FC + #$C9FD, // $C9FD + #$C9FE, // $C9FE + #$C9FF, // $C9FF + #$CA00, // $CA00 + #$CA01, // $CA01 + #$CA02, // $CA02 + #$CA03, // $CA03 + #$CA04, // $CA04 + #$CA05, // $CA05 + #$CA06, // $CA06 + #$CA07, // $CA07 + #$CA08, // $CA08 + #$CA09, // $CA09 + #$CA0A, // $CA0A + #$CA0B, // $CA0B + #$CA0C, // $CA0C + #$CA0D, // $CA0D + #$CA0E, // $CA0E + #$CA0F, // $CA0F + #$CA10, // $CA10 + #$CA11, // $CA11 + #$CA12, // $CA12 + #$CA13, // $CA13 + #$CA14, // $CA14 + #$CA15, // $CA15 + #$CA16, // $CA16 + #$CA17, // $CA17 + #$CA18, // $CA18 + #$CA19, // $CA19 + #$CA1A, // $CA1A + #$CA1B, // $CA1B + #$CA1C, // $CA1C + #$CA1D, // $CA1D + #$CA1E, // $CA1E + #$CA1F, // $CA1F + #$CA20, // $CA20 + #$CA21, // $CA21 + #$CA22, // $CA22 + #$CA23, // $CA23 + #$CA24, // $CA24 + #$CA25, // $CA25 + #$CA26, // $CA26 + #$CA27, // $CA27 + #$CA28, // $CA28 + #$CA29, // $CA29 + #$CA2A, // $CA2A + #$CA2B, // $CA2B + #$CA2C, // $CA2C + #$CA2D, // $CA2D + #$CA2E, // $CA2E + #$CA2F, // $CA2F + #$CA30, // $CA30 + #$CA31, // $CA31 + #$CA32, // $CA32 + #$CA33, // $CA33 + #$CA34, // $CA34 + #$CA35, // $CA35 + #$CA36, // $CA36 + #$CA37, // $CA37 + #$CA38, // $CA38 + #$CA39, // $CA39 + #$CA3A, // $CA3A + #$CA3B, // $CA3B + #$CA3C, // $CA3C + #$CA3D, // $CA3D + #$CA3E, // $CA3E + #$CA3F, // $CA3F + #$CA40, // $CA40 + #$CA41, // $CA41 + #$CA42, // $CA42 + #$CA43, // $CA43 + #$CA44, // $CA44 + #$CA45, // $CA45 + #$CA46, // $CA46 + #$CA47, // $CA47 + #$CA48, // $CA48 + #$CA49, // $CA49 + #$CA4A, // $CA4A + #$CA4B, // $CA4B + #$CA4C, // $CA4C + #$CA4D, // $CA4D + #$CA4E, // $CA4E + #$CA4F, // $CA4F + #$CA50, // $CA50 + #$CA51, // $CA51 + #$CA52, // $CA52 + #$CA53, // $CA53 + #$CA54, // $CA54 + #$CA55, // $CA55 + #$CA56, // $CA56 + #$CA57, // $CA57 + #$CA58, // $CA58 + #$CA59, // $CA59 + #$CA5A, // $CA5A + #$CA5B, // $CA5B + #$CA5C, // $CA5C + #$CA5D, // $CA5D + #$CA5E, // $CA5E + #$CA5F, // $CA5F + #$CA60, // $CA60 + #$CA61, // $CA61 + #$CA62, // $CA62 + #$CA63, // $CA63 + #$CA64, // $CA64 + #$CA65, // $CA65 + #$CA66, // $CA66 + #$CA67, // $CA67 + #$CA68, // $CA68 + #$CA69, // $CA69 + #$CA6A, // $CA6A + #$CA6B, // $CA6B + #$CA6C, // $CA6C + #$CA6D, // $CA6D + #$CA6E, // $CA6E + #$CA6F, // $CA6F + #$CA70, // $CA70 + #$CA71, // $CA71 + #$CA72, // $CA72 + #$CA73, // $CA73 + #$CA74, // $CA74 + #$CA75, // $CA75 + #$CA76, // $CA76 + #$CA77, // $CA77 + #$CA78, // $CA78 + #$CA79, // $CA79 + #$CA7A, // $CA7A + #$CA7B, // $CA7B + #$CA7C, // $CA7C + #$CA7D, // $CA7D + #$CA7E, // $CA7E + #$CA7F, // $CA7F + #$CA80, // $CA80 + #$CA81, // $CA81 + #$CA82, // $CA82 + #$CA83, // $CA83 + #$CA84, // $CA84 + #$CA85, // $CA85 + #$CA86, // $CA86 + #$CA87, // $CA87 + #$CA88, // $CA88 + #$CA89, // $CA89 + #$CA8A, // $CA8A + #$CA8B, // $CA8B + #$CA8C, // $CA8C + #$CA8D, // $CA8D + #$CA8E, // $CA8E + #$CA8F, // $CA8F + #$CA90, // $CA90 + #$CA91, // $CA91 + #$CA92, // $CA92 + #$CA93, // $CA93 + #$CA94, // $CA94 + #$CA95, // $CA95 + #$CA96, // $CA96 + #$CA97, // $CA97 + #$CA98, // $CA98 + #$CA99, // $CA99 + #$CA9A, // $CA9A + #$CA9B, // $CA9B + #$CA9C, // $CA9C + #$CA9D, // $CA9D + #$CA9E, // $CA9E + #$CA9F, // $CA9F + #$CAA0, // $CAA0 + #$CAA1, // $CAA1 + #$CAA2, // $CAA2 + #$CAA3, // $CAA3 + #$CAA4, // $CAA4 + #$CAA5, // $CAA5 + #$CAA6, // $CAA6 + #$CAA7, // $CAA7 + #$CAA8, // $CAA8 + #$CAA9, // $CAA9 + #$CAAA, // $CAAA + #$CAAB, // $CAAB + #$CAAC, // $CAAC + #$CAAD, // $CAAD + #$CAAE, // $CAAE + #$CAAF, // $CAAF + #$CAB0, // $CAB0 + #$CAB1, // $CAB1 + #$CAB2, // $CAB2 + #$CAB3, // $CAB3 + #$CAB4, // $CAB4 + #$CAB5, // $CAB5 + #$CAB6, // $CAB6 + #$CAB7, // $CAB7 + #$CAB8, // $CAB8 + #$CAB9, // $CAB9 + #$CABA, // $CABA + #$CABB, // $CABB + #$CABC, // $CABC + #$CABD, // $CABD + #$CABE, // $CABE + #$CABF, // $CABF + #$CAC0, // $CAC0 + #$CAC1, // $CAC1 + #$CAC2, // $CAC2 + #$CAC3, // $CAC3 + #$CAC4, // $CAC4 + #$CAC5, // $CAC5 + #$CAC6, // $CAC6 + #$CAC7, // $CAC7 + #$CAC8, // $CAC8 + #$CAC9, // $CAC9 + #$CACA, // $CACA + #$CACB, // $CACB + #$CACC, // $CACC + #$CACD, // $CACD + #$CACE, // $CACE + #$CACF, // $CACF + #$CAD0, // $CAD0 + #$CAD1, // $CAD1 + #$CAD2, // $CAD2 + #$CAD3, // $CAD3 + #$CAD4, // $CAD4 + #$CAD5, // $CAD5 + #$CAD6, // $CAD6 + #$CAD7, // $CAD7 + #$CAD8, // $CAD8 + #$CAD9, // $CAD9 + #$CADA, // $CADA + #$CADB, // $CADB + #$CADC, // $CADC + #$CADD, // $CADD + #$CADE, // $CADE + #$CADF, // $CADF + #$CAE0, // $CAE0 + #$CAE1, // $CAE1 + #$CAE2, // $CAE2 + #$CAE3, // $CAE3 + #$CAE4, // $CAE4 + #$CAE5, // $CAE5 + #$CAE6, // $CAE6 + #$CAE7, // $CAE7 + #$CAE8, // $CAE8 + #$CAE9, // $CAE9 + #$CAEA, // $CAEA + #$CAEB, // $CAEB + #$CAEC, // $CAEC + #$CAED, // $CAED + #$CAEE, // $CAEE + #$CAEF, // $CAEF + #$CAF0, // $CAF0 + #$CAF1, // $CAF1 + #$CAF2, // $CAF2 + #$CAF3, // $CAF3 + #$CAF4, // $CAF4 + #$CAF5, // $CAF5 + #$CAF6, // $CAF6 + #$CAF7, // $CAF7 + #$CAF8, // $CAF8 + #$CAF9, // $CAF9 + #$CAFA, // $CAFA + #$CAFB, // $CAFB + #$CAFC, // $CAFC + #$CAFD, // $CAFD + #$CAFE, // $CAFE + #$CAFF, // $CAFF + #$CB00, // $CB00 + #$CB01, // $CB01 + #$CB02, // $CB02 + #$CB03, // $CB03 + #$CB04, // $CB04 + #$CB05, // $CB05 + #$CB06, // $CB06 + #$CB07, // $CB07 + #$CB08, // $CB08 + #$CB09, // $CB09 + #$CB0A, // $CB0A + #$CB0B, // $CB0B + #$CB0C, // $CB0C + #$CB0D, // $CB0D + #$CB0E, // $CB0E + #$CB0F, // $CB0F + #$CB10, // $CB10 + #$CB11, // $CB11 + #$CB12, // $CB12 + #$CB13, // $CB13 + #$CB14, // $CB14 + #$CB15, // $CB15 + #$CB16, // $CB16 + #$CB17, // $CB17 + #$CB18, // $CB18 + #$CB19, // $CB19 + #$CB1A, // $CB1A + #$CB1B, // $CB1B + #$CB1C, // $CB1C + #$CB1D, // $CB1D + #$CB1E, // $CB1E + #$CB1F, // $CB1F + #$CB20, // $CB20 + #$CB21, // $CB21 + #$CB22, // $CB22 + #$CB23, // $CB23 + #$CB24, // $CB24 + #$CB25, // $CB25 + #$CB26, // $CB26 + #$CB27, // $CB27 + #$CB28, // $CB28 + #$CB29, // $CB29 + #$CB2A, // $CB2A + #$CB2B, // $CB2B + #$CB2C, // $CB2C + #$CB2D, // $CB2D + #$CB2E, // $CB2E + #$CB2F, // $CB2F + #$CB30, // $CB30 + #$CB31, // $CB31 + #$CB32, // $CB32 + #$CB33, // $CB33 + #$CB34, // $CB34 + #$CB35, // $CB35 + #$CB36, // $CB36 + #$CB37, // $CB37 + #$CB38, // $CB38 + #$CB39, // $CB39 + #$CB3A, // $CB3A + #$CB3B, // $CB3B + #$CB3C, // $CB3C + #$CB3D, // $CB3D + #$CB3E, // $CB3E + #$CB3F, // $CB3F + #$CB40, // $CB40 + #$CB41, // $CB41 + #$CB42, // $CB42 + #$CB43, // $CB43 + #$CB44, // $CB44 + #$CB45, // $CB45 + #$CB46, // $CB46 + #$CB47, // $CB47 + #$CB48, // $CB48 + #$CB49, // $CB49 + #$CB4A, // $CB4A + #$CB4B, // $CB4B + #$CB4C, // $CB4C + #$CB4D, // $CB4D + #$CB4E, // $CB4E + #$CB4F, // $CB4F + #$CB50, // $CB50 + #$CB51, // $CB51 + #$CB52, // $CB52 + #$CB53, // $CB53 + #$CB54, // $CB54 + #$CB55, // $CB55 + #$CB56, // $CB56 + #$CB57, // $CB57 + #$CB58, // $CB58 + #$CB59, // $CB59 + #$CB5A, // $CB5A + #$CB5B, // $CB5B + #$CB5C, // $CB5C + #$CB5D, // $CB5D + #$CB5E, // $CB5E + #$CB5F, // $CB5F + #$CB60, // $CB60 + #$CB61, // $CB61 + #$CB62, // $CB62 + #$CB63, // $CB63 + #$CB64, // $CB64 + #$CB65, // $CB65 + #$CB66, // $CB66 + #$CB67, // $CB67 + #$CB68, // $CB68 + #$CB69, // $CB69 + #$CB6A, // $CB6A + #$CB6B, // $CB6B + #$CB6C, // $CB6C + #$CB6D, // $CB6D + #$CB6E, // $CB6E + #$CB6F, // $CB6F + #$CB70, // $CB70 + #$CB71, // $CB71 + #$CB72, // $CB72 + #$CB73, // $CB73 + #$CB74, // $CB74 + #$CB75, // $CB75 + #$CB76, // $CB76 + #$CB77, // $CB77 + #$CB78, // $CB78 + #$CB79, // $CB79 + #$CB7A, // $CB7A + #$CB7B, // $CB7B + #$CB7C, // $CB7C + #$CB7D, // $CB7D + #$CB7E, // $CB7E + #$CB7F, // $CB7F + #$CB80, // $CB80 + #$CB81, // $CB81 + #$CB82, // $CB82 + #$CB83, // $CB83 + #$CB84, // $CB84 + #$CB85, // $CB85 + #$CB86, // $CB86 + #$CB87, // $CB87 + #$CB88, // $CB88 + #$CB89, // $CB89 + #$CB8A, // $CB8A + #$CB8B, // $CB8B + #$CB8C, // $CB8C + #$CB8D, // $CB8D + #$CB8E, // $CB8E + #$CB8F, // $CB8F + #$CB90, // $CB90 + #$CB91, // $CB91 + #$CB92, // $CB92 + #$CB93, // $CB93 + #$CB94, // $CB94 + #$CB95, // $CB95 + #$CB96, // $CB96 + #$CB97, // $CB97 + #$CB98, // $CB98 + #$CB99, // $CB99 + #$CB9A, // $CB9A + #$CB9B, // $CB9B + #$CB9C, // $CB9C + #$CB9D, // $CB9D + #$CB9E, // $CB9E + #$CB9F, // $CB9F + #$CBA0, // $CBA0 + #$CBA1, // $CBA1 + #$CBA2, // $CBA2 + #$CBA3, // $CBA3 + #$CBA4, // $CBA4 + #$CBA5, // $CBA5 + #$CBA6, // $CBA6 + #$CBA7, // $CBA7 + #$CBA8, // $CBA8 + #$CBA9, // $CBA9 + #$CBAA, // $CBAA + #$CBAB, // $CBAB + #$CBAC, // $CBAC + #$CBAD, // $CBAD + #$CBAE, // $CBAE + #$CBAF, // $CBAF + #$CBB0, // $CBB0 + #$CBB1, // $CBB1 + #$CBB2, // $CBB2 + #$CBB3, // $CBB3 + #$CBB4, // $CBB4 + #$CBB5, // $CBB5 + #$CBB6, // $CBB6 + #$CBB7, // $CBB7 + #$CBB8, // $CBB8 + #$CBB9, // $CBB9 + #$CBBA, // $CBBA + #$CBBB, // $CBBB + #$CBBC, // $CBBC + #$CBBD, // $CBBD + #$CBBE, // $CBBE + #$CBBF, // $CBBF + #$CBC0, // $CBC0 + #$CBC1, // $CBC1 + #$CBC2, // $CBC2 + #$CBC3, // $CBC3 + #$CBC4, // $CBC4 + #$CBC5, // $CBC5 + #$CBC6, // $CBC6 + #$CBC7, // $CBC7 + #$CBC8, // $CBC8 + #$CBC9, // $CBC9 + #$CBCA, // $CBCA + #$CBCB, // $CBCB + #$CBCC, // $CBCC + #$CBCD, // $CBCD + #$CBCE, // $CBCE + #$CBCF, // $CBCF + #$CBD0, // $CBD0 + #$CBD1, // $CBD1 + #$CBD2, // $CBD2 + #$CBD3, // $CBD3 + #$CBD4, // $CBD4 + #$CBD5, // $CBD5 + #$CBD6, // $CBD6 + #$CBD7, // $CBD7 + #$CBD8, // $CBD8 + #$CBD9, // $CBD9 + #$CBDA, // $CBDA + #$CBDB, // $CBDB + #$CBDC, // $CBDC + #$CBDD, // $CBDD + #$CBDE, // $CBDE + #$CBDF, // $CBDF + #$CBE0, // $CBE0 + #$CBE1, // $CBE1 + #$CBE2, // $CBE2 + #$CBE3, // $CBE3 + #$CBE4, // $CBE4 + #$CBE5, // $CBE5 + #$CBE6, // $CBE6 + #$CBE7, // $CBE7 + #$CBE8, // $CBE8 + #$CBE9, // $CBE9 + #$CBEA, // $CBEA + #$CBEB, // $CBEB + #$CBEC, // $CBEC + #$CBED, // $CBED + #$CBEE, // $CBEE + #$CBEF, // $CBEF + #$CBF0, // $CBF0 + #$CBF1, // $CBF1 + #$CBF2, // $CBF2 + #$CBF3, // $CBF3 + #$CBF4, // $CBF4 + #$CBF5, // $CBF5 + #$CBF6, // $CBF6 + #$CBF7, // $CBF7 + #$CBF8, // $CBF8 + #$CBF9, // $CBF9 + #$CBFA, // $CBFA + #$CBFB, // $CBFB + #$CBFC, // $CBFC + #$CBFD, // $CBFD + #$CBFE, // $CBFE + #$CBFF, // $CBFF + #$CC00, // $CC00 + #$CC01, // $CC01 + #$CC02, // $CC02 + #$CC03, // $CC03 + #$CC04, // $CC04 + #$CC05, // $CC05 + #$CC06, // $CC06 + #$CC07, // $CC07 + #$CC08, // $CC08 + #$CC09, // $CC09 + #$CC0A, // $CC0A + #$CC0B, // $CC0B + #$CC0C, // $CC0C + #$CC0D, // $CC0D + #$CC0E, // $CC0E + #$CC0F, // $CC0F + #$CC10, // $CC10 + #$CC11, // $CC11 + #$CC12, // $CC12 + #$CC13, // $CC13 + #$CC14, // $CC14 + #$CC15, // $CC15 + #$CC16, // $CC16 + #$CC17, // $CC17 + #$CC18, // $CC18 + #$CC19, // $CC19 + #$CC1A, // $CC1A + #$CC1B, // $CC1B + #$CC1C, // $CC1C + #$CC1D, // $CC1D + #$CC1E, // $CC1E + #$CC1F, // $CC1F + #$CC20, // $CC20 + #$CC21, // $CC21 + #$CC22, // $CC22 + #$CC23, // $CC23 + #$CC24, // $CC24 + #$CC25, // $CC25 + #$CC26, // $CC26 + #$CC27, // $CC27 + #$CC28, // $CC28 + #$CC29, // $CC29 + #$CC2A, // $CC2A + #$CC2B, // $CC2B + #$CC2C, // $CC2C + #$CC2D, // $CC2D + #$CC2E, // $CC2E + #$CC2F, // $CC2F + #$CC30, // $CC30 + #$CC31, // $CC31 + #$CC32, // $CC32 + #$CC33, // $CC33 + #$CC34, // $CC34 + #$CC35, // $CC35 + #$CC36, // $CC36 + #$CC37, // $CC37 + #$CC38, // $CC38 + #$CC39, // $CC39 + #$CC3A, // $CC3A + #$CC3B, // $CC3B + #$CC3C, // $CC3C + #$CC3D, // $CC3D + #$CC3E, // $CC3E + #$CC3F, // $CC3F + #$CC40, // $CC40 + #$CC41, // $CC41 + #$CC42, // $CC42 + #$CC43, // $CC43 + #$CC44, // $CC44 + #$CC45, // $CC45 + #$CC46, // $CC46 + #$CC47, // $CC47 + #$CC48, // $CC48 + #$CC49, // $CC49 + #$CC4A, // $CC4A + #$CC4B, // $CC4B + #$CC4C, // $CC4C + #$CC4D, // $CC4D + #$CC4E, // $CC4E + #$CC4F, // $CC4F + #$CC50, // $CC50 + #$CC51, // $CC51 + #$CC52, // $CC52 + #$CC53, // $CC53 + #$CC54, // $CC54 + #$CC55, // $CC55 + #$CC56, // $CC56 + #$CC57, // $CC57 + #$CC58, // $CC58 + #$CC59, // $CC59 + #$CC5A, // $CC5A + #$CC5B, // $CC5B + #$CC5C, // $CC5C + #$CC5D, // $CC5D + #$CC5E, // $CC5E + #$CC5F, // $CC5F + #$CC60, // $CC60 + #$CC61, // $CC61 + #$CC62, // $CC62 + #$CC63, // $CC63 + #$CC64, // $CC64 + #$CC65, // $CC65 + #$CC66, // $CC66 + #$CC67, // $CC67 + #$CC68, // $CC68 + #$CC69, // $CC69 + #$CC6A, // $CC6A + #$CC6B, // $CC6B + #$CC6C, // $CC6C + #$CC6D, // $CC6D + #$CC6E, // $CC6E + #$CC6F, // $CC6F + #$CC70, // $CC70 + #$CC71, // $CC71 + #$CC72, // $CC72 + #$CC73, // $CC73 + #$CC74, // $CC74 + #$CC75, // $CC75 + #$CC76, // $CC76 + #$CC77, // $CC77 + #$CC78, // $CC78 + #$CC79, // $CC79 + #$CC7A, // $CC7A + #$CC7B, // $CC7B + #$CC7C, // $CC7C + #$CC7D, // $CC7D + #$CC7E, // $CC7E + #$CC7F, // $CC7F + #$CC80, // $CC80 + #$CC81, // $CC81 + #$CC82, // $CC82 + #$CC83, // $CC83 + #$CC84, // $CC84 + #$CC85, // $CC85 + #$CC86, // $CC86 + #$CC87, // $CC87 + #$CC88, // $CC88 + #$CC89, // $CC89 + #$CC8A, // $CC8A + #$CC8B, // $CC8B + #$CC8C, // $CC8C + #$CC8D, // $CC8D + #$CC8E, // $CC8E + #$CC8F, // $CC8F + #$CC90, // $CC90 + #$CC91, // $CC91 + #$CC92, // $CC92 + #$CC93, // $CC93 + #$CC94, // $CC94 + #$CC95, // $CC95 + #$CC96, // $CC96 + #$CC97, // $CC97 + #$CC98, // $CC98 + #$CC99, // $CC99 + #$CC9A, // $CC9A + #$CC9B, // $CC9B + #$CC9C, // $CC9C + #$CC9D, // $CC9D + #$CC9E, // $CC9E + #$CC9F, // $CC9F + #$CCA0, // $CCA0 + #$CCA1, // $CCA1 + #$CCA2, // $CCA2 + #$CCA3, // $CCA3 + #$CCA4, // $CCA4 + #$CCA5, // $CCA5 + #$CCA6, // $CCA6 + #$CCA7, // $CCA7 + #$CCA8, // $CCA8 + #$CCA9, // $CCA9 + #$CCAA, // $CCAA + #$CCAB, // $CCAB + #$CCAC, // $CCAC + #$CCAD, // $CCAD + #$CCAE, // $CCAE + #$CCAF, // $CCAF + #$CCB0, // $CCB0 + #$CCB1, // $CCB1 + #$CCB2, // $CCB2 + #$CCB3, // $CCB3 + #$CCB4, // $CCB4 + #$CCB5, // $CCB5 + #$CCB6, // $CCB6 + #$CCB7, // $CCB7 + #$CCB8, // $CCB8 + #$CCB9, // $CCB9 + #$CCBA, // $CCBA + #$CCBB, // $CCBB + #$CCBC, // $CCBC + #$CCBD, // $CCBD + #$CCBE, // $CCBE + #$CCBF, // $CCBF + #$CCC0, // $CCC0 + #$CCC1, // $CCC1 + #$CCC2, // $CCC2 + #$CCC3, // $CCC3 + #$CCC4, // $CCC4 + #$CCC5, // $CCC5 + #$CCC6, // $CCC6 + #$CCC7, // $CCC7 + #$CCC8, // $CCC8 + #$CCC9, // $CCC9 + #$CCCA, // $CCCA + #$CCCB, // $CCCB + #$CCCC, // $CCCC + #$CCCD, // $CCCD + #$CCCE, // $CCCE + #$CCCF, // $CCCF + #$CCD0, // $CCD0 + #$CCD1, // $CCD1 + #$CCD2, // $CCD2 + #$CCD3, // $CCD3 + #$CCD4, // $CCD4 + #$CCD5, // $CCD5 + #$CCD6, // $CCD6 + #$CCD7, // $CCD7 + #$CCD8, // $CCD8 + #$CCD9, // $CCD9 + #$CCDA, // $CCDA + #$CCDB, // $CCDB + #$CCDC, // $CCDC + #$CCDD, // $CCDD + #$CCDE, // $CCDE + #$CCDF, // $CCDF + #$CCE0, // $CCE0 + #$CCE1, // $CCE1 + #$CCE2, // $CCE2 + #$CCE3, // $CCE3 + #$CCE4, // $CCE4 + #$CCE5, // $CCE5 + #$CCE6, // $CCE6 + #$CCE7, // $CCE7 + #$CCE8, // $CCE8 + #$CCE9, // $CCE9 + #$CCEA, // $CCEA + #$CCEB, // $CCEB + #$CCEC, // $CCEC + #$CCED, // $CCED + #$CCEE, // $CCEE + #$CCEF, // $CCEF + #$CCF0, // $CCF0 + #$CCF1, // $CCF1 + #$CCF2, // $CCF2 + #$CCF3, // $CCF3 + #$CCF4, // $CCF4 + #$CCF5, // $CCF5 + #$CCF6, // $CCF6 + #$CCF7, // $CCF7 + #$CCF8, // $CCF8 + #$CCF9, // $CCF9 + #$CCFA, // $CCFA + #$CCFB, // $CCFB + #$CCFC, // $CCFC + #$CCFD, // $CCFD + #$CCFE, // $CCFE + #$CCFF, // $CCFF + #$CD00, // $CD00 + #$CD01, // $CD01 + #$CD02, // $CD02 + #$CD03, // $CD03 + #$CD04, // $CD04 + #$CD05, // $CD05 + #$CD06, // $CD06 + #$CD07, // $CD07 + #$CD08, // $CD08 + #$CD09, // $CD09 + #$CD0A, // $CD0A + #$CD0B, // $CD0B + #$CD0C, // $CD0C + #$CD0D, // $CD0D + #$CD0E, // $CD0E + #$CD0F, // $CD0F + #$CD10, // $CD10 + #$CD11, // $CD11 + #$CD12, // $CD12 + #$CD13, // $CD13 + #$CD14, // $CD14 + #$CD15, // $CD15 + #$CD16, // $CD16 + #$CD17, // $CD17 + #$CD18, // $CD18 + #$CD19, // $CD19 + #$CD1A, // $CD1A + #$CD1B, // $CD1B + #$CD1C, // $CD1C + #$CD1D, // $CD1D + #$CD1E, // $CD1E + #$CD1F, // $CD1F + #$CD20, // $CD20 + #$CD21, // $CD21 + #$CD22, // $CD22 + #$CD23, // $CD23 + #$CD24, // $CD24 + #$CD25, // $CD25 + #$CD26, // $CD26 + #$CD27, // $CD27 + #$CD28, // $CD28 + #$CD29, // $CD29 + #$CD2A, // $CD2A + #$CD2B, // $CD2B + #$CD2C, // $CD2C + #$CD2D, // $CD2D + #$CD2E, // $CD2E + #$CD2F, // $CD2F + #$CD30, // $CD30 + #$CD31, // $CD31 + #$CD32, // $CD32 + #$CD33, // $CD33 + #$CD34, // $CD34 + #$CD35, // $CD35 + #$CD36, // $CD36 + #$CD37, // $CD37 + #$CD38, // $CD38 + #$CD39, // $CD39 + #$CD3A, // $CD3A + #$CD3B, // $CD3B + #$CD3C, // $CD3C + #$CD3D, // $CD3D + #$CD3E, // $CD3E + #$CD3F, // $CD3F + #$CD40, // $CD40 + #$CD41, // $CD41 + #$CD42, // $CD42 + #$CD43, // $CD43 + #$CD44, // $CD44 + #$CD45, // $CD45 + #$CD46, // $CD46 + #$CD47, // $CD47 + #$CD48, // $CD48 + #$CD49, // $CD49 + #$CD4A, // $CD4A + #$CD4B, // $CD4B + #$CD4C, // $CD4C + #$CD4D, // $CD4D + #$CD4E, // $CD4E + #$CD4F, // $CD4F + #$CD50, // $CD50 + #$CD51, // $CD51 + #$CD52, // $CD52 + #$CD53, // $CD53 + #$CD54, // $CD54 + #$CD55, // $CD55 + #$CD56, // $CD56 + #$CD57, // $CD57 + #$CD58, // $CD58 + #$CD59, // $CD59 + #$CD5A, // $CD5A + #$CD5B, // $CD5B + #$CD5C, // $CD5C + #$CD5D, // $CD5D + #$CD5E, // $CD5E + #$CD5F, // $CD5F + #$CD60, // $CD60 + #$CD61, // $CD61 + #$CD62, // $CD62 + #$CD63, // $CD63 + #$CD64, // $CD64 + #$CD65, // $CD65 + #$CD66, // $CD66 + #$CD67, // $CD67 + #$CD68, // $CD68 + #$CD69, // $CD69 + #$CD6A, // $CD6A + #$CD6B, // $CD6B + #$CD6C, // $CD6C + #$CD6D, // $CD6D + #$CD6E, // $CD6E + #$CD6F, // $CD6F + #$CD70, // $CD70 + #$CD71, // $CD71 + #$CD72, // $CD72 + #$CD73, // $CD73 + #$CD74, // $CD74 + #$CD75, // $CD75 + #$CD76, // $CD76 + #$CD77, // $CD77 + #$CD78, // $CD78 + #$CD79, // $CD79 + #$CD7A, // $CD7A + #$CD7B, // $CD7B + #$CD7C, // $CD7C + #$CD7D, // $CD7D + #$CD7E, // $CD7E + #$CD7F, // $CD7F + #$CD80, // $CD80 + #$CD81, // $CD81 + #$CD82, // $CD82 + #$CD83, // $CD83 + #$CD84, // $CD84 + #$CD85, // $CD85 + #$CD86, // $CD86 + #$CD87, // $CD87 + #$CD88, // $CD88 + #$CD89, // $CD89 + #$CD8A, // $CD8A + #$CD8B, // $CD8B + #$CD8C, // $CD8C + #$CD8D, // $CD8D + #$CD8E, // $CD8E + #$CD8F, // $CD8F + #$CD90, // $CD90 + #$CD91, // $CD91 + #$CD92, // $CD92 + #$CD93, // $CD93 + #$CD94, // $CD94 + #$CD95, // $CD95 + #$CD96, // $CD96 + #$CD97, // $CD97 + #$CD98, // $CD98 + #$CD99, // $CD99 + #$CD9A, // $CD9A + #$CD9B, // $CD9B + #$CD9C, // $CD9C + #$CD9D, // $CD9D + #$CD9E, // $CD9E + #$CD9F, // $CD9F + #$CDA0, // $CDA0 + #$CDA1, // $CDA1 + #$CDA2, // $CDA2 + #$CDA3, // $CDA3 + #$CDA4, // $CDA4 + #$CDA5, // $CDA5 + #$CDA6, // $CDA6 + #$CDA7, // $CDA7 + #$CDA8, // $CDA8 + #$CDA9, // $CDA9 + #$CDAA, // $CDAA + #$CDAB, // $CDAB + #$CDAC, // $CDAC + #$CDAD, // $CDAD + #$CDAE, // $CDAE + #$CDAF, // $CDAF + #$CDB0, // $CDB0 + #$CDB1, // $CDB1 + #$CDB2, // $CDB2 + #$CDB3, // $CDB3 + #$CDB4, // $CDB4 + #$CDB5, // $CDB5 + #$CDB6, // $CDB6 + #$CDB7, // $CDB7 + #$CDB8, // $CDB8 + #$CDB9, // $CDB9 + #$CDBA, // $CDBA + #$CDBB, // $CDBB + #$CDBC, // $CDBC + #$CDBD, // $CDBD + #$CDBE, // $CDBE + #$CDBF, // $CDBF + #$CDC0, // $CDC0 + #$CDC1, // $CDC1 + #$CDC2, // $CDC2 + #$CDC3, // $CDC3 + #$CDC4, // $CDC4 + #$CDC5, // $CDC5 + #$CDC6, // $CDC6 + #$CDC7, // $CDC7 + #$CDC8, // $CDC8 + #$CDC9, // $CDC9 + #$CDCA, // $CDCA + #$CDCB, // $CDCB + #$CDCC, // $CDCC + #$CDCD, // $CDCD + #$CDCE, // $CDCE + #$CDCF, // $CDCF + #$CDD0, // $CDD0 + #$CDD1, // $CDD1 + #$CDD2, // $CDD2 + #$CDD3, // $CDD3 + #$CDD4, // $CDD4 + #$CDD5, // $CDD5 + #$CDD6, // $CDD6 + #$CDD7, // $CDD7 + #$CDD8, // $CDD8 + #$CDD9, // $CDD9 + #$CDDA, // $CDDA + #$CDDB, // $CDDB + #$CDDC, // $CDDC + #$CDDD, // $CDDD + #$CDDE, // $CDDE + #$CDDF, // $CDDF + #$CDE0, // $CDE0 + #$CDE1, // $CDE1 + #$CDE2, // $CDE2 + #$CDE3, // $CDE3 + #$CDE4, // $CDE4 + #$CDE5, // $CDE5 + #$CDE6, // $CDE6 + #$CDE7, // $CDE7 + #$CDE8, // $CDE8 + #$CDE9, // $CDE9 + #$CDEA, // $CDEA + #$CDEB, // $CDEB + #$CDEC, // $CDEC + #$CDED, // $CDED + #$CDEE, // $CDEE + #$CDEF, // $CDEF + #$CDF0, // $CDF0 + #$CDF1, // $CDF1 + #$CDF2, // $CDF2 + #$CDF3, // $CDF3 + #$CDF4, // $CDF4 + #$CDF5, // $CDF5 + #$CDF6, // $CDF6 + #$CDF7, // $CDF7 + #$CDF8, // $CDF8 + #$CDF9, // $CDF9 + #$CDFA, // $CDFA + #$CDFB, // $CDFB + #$CDFC, // $CDFC + #$CDFD, // $CDFD + #$CDFE, // $CDFE + #$CDFF, // $CDFF + #$CE00, // $CE00 + #$CE01, // $CE01 + #$CE02, // $CE02 + #$CE03, // $CE03 + #$CE04, // $CE04 + #$CE05, // $CE05 + #$CE06, // $CE06 + #$CE07, // $CE07 + #$CE08, // $CE08 + #$CE09, // $CE09 + #$CE0A, // $CE0A + #$CE0B, // $CE0B + #$CE0C, // $CE0C + #$CE0D, // $CE0D + #$CE0E, // $CE0E + #$CE0F, // $CE0F + #$CE10, // $CE10 + #$CE11, // $CE11 + #$CE12, // $CE12 + #$CE13, // $CE13 + #$CE14, // $CE14 + #$CE15, // $CE15 + #$CE16, // $CE16 + #$CE17, // $CE17 + #$CE18, // $CE18 + #$CE19, // $CE19 + #$CE1A, // $CE1A + #$CE1B, // $CE1B + #$CE1C, // $CE1C + #$CE1D, // $CE1D + #$CE1E, // $CE1E + #$CE1F, // $CE1F + #$CE20, // $CE20 + #$CE21, // $CE21 + #$CE22, // $CE22 + #$CE23, // $CE23 + #$CE24, // $CE24 + #$CE25, // $CE25 + #$CE26, // $CE26 + #$CE27, // $CE27 + #$CE28, // $CE28 + #$CE29, // $CE29 + #$CE2A, // $CE2A + #$CE2B, // $CE2B + #$CE2C, // $CE2C + #$CE2D, // $CE2D + #$CE2E, // $CE2E + #$CE2F, // $CE2F + #$CE30, // $CE30 + #$CE31, // $CE31 + #$CE32, // $CE32 + #$CE33, // $CE33 + #$CE34, // $CE34 + #$CE35, // $CE35 + #$CE36, // $CE36 + #$CE37, // $CE37 + #$CE38, // $CE38 + #$CE39, // $CE39 + #$CE3A, // $CE3A + #$CE3B, // $CE3B + #$CE3C, // $CE3C + #$CE3D, // $CE3D + #$CE3E, // $CE3E + #$CE3F, // $CE3F + #$CE40, // $CE40 + #$CE41, // $CE41 + #$CE42, // $CE42 + #$CE43, // $CE43 + #$CE44, // $CE44 + #$CE45, // $CE45 + #$CE46, // $CE46 + #$CE47, // $CE47 + #$CE48, // $CE48 + #$CE49, // $CE49 + #$CE4A, // $CE4A + #$CE4B, // $CE4B + #$CE4C, // $CE4C + #$CE4D, // $CE4D + #$CE4E, // $CE4E + #$CE4F, // $CE4F + #$CE50, // $CE50 + #$CE51, // $CE51 + #$CE52, // $CE52 + #$CE53, // $CE53 + #$CE54, // $CE54 + #$CE55, // $CE55 + #$CE56, // $CE56 + #$CE57, // $CE57 + #$CE58, // $CE58 + #$CE59, // $CE59 + #$CE5A, // $CE5A + #$CE5B, // $CE5B + #$CE5C, // $CE5C + #$CE5D, // $CE5D + #$CE5E, // $CE5E + #$CE5F, // $CE5F + #$CE60, // $CE60 + #$CE61, // $CE61 + #$CE62, // $CE62 + #$CE63, // $CE63 + #$CE64, // $CE64 + #$CE65, // $CE65 + #$CE66, // $CE66 + #$CE67, // $CE67 + #$CE68, // $CE68 + #$CE69, // $CE69 + #$CE6A, // $CE6A + #$CE6B, // $CE6B + #$CE6C, // $CE6C + #$CE6D, // $CE6D + #$CE6E, // $CE6E + #$CE6F, // $CE6F + #$CE70, // $CE70 + #$CE71, // $CE71 + #$CE72, // $CE72 + #$CE73, // $CE73 + #$CE74, // $CE74 + #$CE75, // $CE75 + #$CE76, // $CE76 + #$CE77, // $CE77 + #$CE78, // $CE78 + #$CE79, // $CE79 + #$CE7A, // $CE7A + #$CE7B, // $CE7B + #$CE7C, // $CE7C + #$CE7D, // $CE7D + #$CE7E, // $CE7E + #$CE7F, // $CE7F + #$CE80, // $CE80 + #$CE81, // $CE81 + #$CE82, // $CE82 + #$CE83, // $CE83 + #$CE84, // $CE84 + #$CE85, // $CE85 + #$CE86, // $CE86 + #$CE87, // $CE87 + #$CE88, // $CE88 + #$CE89, // $CE89 + #$CE8A, // $CE8A + #$CE8B, // $CE8B + #$CE8C, // $CE8C + #$CE8D, // $CE8D + #$CE8E, // $CE8E + #$CE8F, // $CE8F + #$CE90, // $CE90 + #$CE91, // $CE91 + #$CE92, // $CE92 + #$CE93, // $CE93 + #$CE94, // $CE94 + #$CE95, // $CE95 + #$CE96, // $CE96 + #$CE97, // $CE97 + #$CE98, // $CE98 + #$CE99, // $CE99 + #$CE9A, // $CE9A + #$CE9B, // $CE9B + #$CE9C, // $CE9C + #$CE9D, // $CE9D + #$CE9E, // $CE9E + #$CE9F, // $CE9F + #$CEA0, // $CEA0 + #$CEA1, // $CEA1 + #$CEA2, // $CEA2 + #$CEA3, // $CEA3 + #$CEA4, // $CEA4 + #$CEA5, // $CEA5 + #$CEA6, // $CEA6 + #$CEA7, // $CEA7 + #$CEA8, // $CEA8 + #$CEA9, // $CEA9 + #$CEAA, // $CEAA + #$CEAB, // $CEAB + #$CEAC, // $CEAC + #$CEAD, // $CEAD + #$CEAE, // $CEAE + #$CEAF, // $CEAF + #$CEB0, // $CEB0 + #$CEB1, // $CEB1 + #$CEB2, // $CEB2 + #$CEB3, // $CEB3 + #$CEB4, // $CEB4 + #$CEB5, // $CEB5 + #$CEB6, // $CEB6 + #$CEB7, // $CEB7 + #$CEB8, // $CEB8 + #$CEB9, // $CEB9 + #$CEBA, // $CEBA + #$CEBB, // $CEBB + #$CEBC, // $CEBC + #$CEBD, // $CEBD + #$CEBE, // $CEBE + #$CEBF, // $CEBF + #$CEC0, // $CEC0 + #$CEC1, // $CEC1 + #$CEC2, // $CEC2 + #$CEC3, // $CEC3 + #$CEC4, // $CEC4 + #$CEC5, // $CEC5 + #$CEC6, // $CEC6 + #$CEC7, // $CEC7 + #$CEC8, // $CEC8 + #$CEC9, // $CEC9 + #$CECA, // $CECA + #$CECB, // $CECB + #$CECC, // $CECC + #$CECD, // $CECD + #$CECE, // $CECE + #$CECF, // $CECF + #$CED0, // $CED0 + #$CED1, // $CED1 + #$CED2, // $CED2 + #$CED3, // $CED3 + #$CED4, // $CED4 + #$CED5, // $CED5 + #$CED6, // $CED6 + #$CED7, // $CED7 + #$CED8, // $CED8 + #$CED9, // $CED9 + #$CEDA, // $CEDA + #$CEDB, // $CEDB + #$CEDC, // $CEDC + #$CEDD, // $CEDD + #$CEDE, // $CEDE + #$CEDF, // $CEDF + #$CEE0, // $CEE0 + #$CEE1, // $CEE1 + #$CEE2, // $CEE2 + #$CEE3, // $CEE3 + #$CEE4, // $CEE4 + #$CEE5, // $CEE5 + #$CEE6, // $CEE6 + #$CEE7, // $CEE7 + #$CEE8, // $CEE8 + #$CEE9, // $CEE9 + #$CEEA, // $CEEA + #$CEEB, // $CEEB + #$CEEC, // $CEEC + #$CEED, // $CEED + #$CEEE, // $CEEE + #$CEEF, // $CEEF + #$CEF0, // $CEF0 + #$CEF1, // $CEF1 + #$CEF2, // $CEF2 + #$CEF3, // $CEF3 + #$CEF4, // $CEF4 + #$CEF5, // $CEF5 + #$CEF6, // $CEF6 + #$CEF7, // $CEF7 + #$CEF8, // $CEF8 + #$CEF9, // $CEF9 + #$CEFA, // $CEFA + #$CEFB, // $CEFB + #$CEFC, // $CEFC + #$CEFD, // $CEFD + #$CEFE, // $CEFE + #$CEFF, // $CEFF + #$CF00, // $CF00 + #$CF01, // $CF01 + #$CF02, // $CF02 + #$CF03, // $CF03 + #$CF04, // $CF04 + #$CF05, // $CF05 + #$CF06, // $CF06 + #$CF07, // $CF07 + #$CF08, // $CF08 + #$CF09, // $CF09 + #$CF0A, // $CF0A + #$CF0B, // $CF0B + #$CF0C, // $CF0C + #$CF0D, // $CF0D + #$CF0E, // $CF0E + #$CF0F, // $CF0F + #$CF10, // $CF10 + #$CF11, // $CF11 + #$CF12, // $CF12 + #$CF13, // $CF13 + #$CF14, // $CF14 + #$CF15, // $CF15 + #$CF16, // $CF16 + #$CF17, // $CF17 + #$CF18, // $CF18 + #$CF19, // $CF19 + #$CF1A, // $CF1A + #$CF1B, // $CF1B + #$CF1C, // $CF1C + #$CF1D, // $CF1D + #$CF1E, // $CF1E + #$CF1F, // $CF1F + #$CF20, // $CF20 + #$CF21, // $CF21 + #$CF22, // $CF22 + #$CF23, // $CF23 + #$CF24, // $CF24 + #$CF25, // $CF25 + #$CF26, // $CF26 + #$CF27, // $CF27 + #$CF28, // $CF28 + #$CF29, // $CF29 + #$CF2A, // $CF2A + #$CF2B, // $CF2B + #$CF2C, // $CF2C + #$CF2D, // $CF2D + #$CF2E, // $CF2E + #$CF2F, // $CF2F + #$CF30, // $CF30 + #$CF31, // $CF31 + #$CF32, // $CF32 + #$CF33, // $CF33 + #$CF34, // $CF34 + #$CF35, // $CF35 + #$CF36, // $CF36 + #$CF37, // $CF37 + #$CF38, // $CF38 + #$CF39, // $CF39 + #$CF3A, // $CF3A + #$CF3B, // $CF3B + #$CF3C, // $CF3C + #$CF3D, // $CF3D + #$CF3E, // $CF3E + #$CF3F, // $CF3F + #$CF40, // $CF40 + #$CF41, // $CF41 + #$CF42, // $CF42 + #$CF43, // $CF43 + #$CF44, // $CF44 + #$CF45, // $CF45 + #$CF46, // $CF46 + #$CF47, // $CF47 + #$CF48, // $CF48 + #$CF49, // $CF49 + #$CF4A, // $CF4A + #$CF4B, // $CF4B + #$CF4C, // $CF4C + #$CF4D, // $CF4D + #$CF4E, // $CF4E + #$CF4F, // $CF4F + #$CF50, // $CF50 + #$CF51, // $CF51 + #$CF52, // $CF52 + #$CF53, // $CF53 + #$CF54, // $CF54 + #$CF55, // $CF55 + #$CF56, // $CF56 + #$CF57, // $CF57 + #$CF58, // $CF58 + #$CF59, // $CF59 + #$CF5A, // $CF5A + #$CF5B, // $CF5B + #$CF5C, // $CF5C + #$CF5D, // $CF5D + #$CF5E, // $CF5E + #$CF5F, // $CF5F + #$CF60, // $CF60 + #$CF61, // $CF61 + #$CF62, // $CF62 + #$CF63, // $CF63 + #$CF64, // $CF64 + #$CF65, // $CF65 + #$CF66, // $CF66 + #$CF67, // $CF67 + #$CF68, // $CF68 + #$CF69, // $CF69 + #$CF6A, // $CF6A + #$CF6B, // $CF6B + #$CF6C, // $CF6C + #$CF6D, // $CF6D + #$CF6E, // $CF6E + #$CF6F, // $CF6F + #$CF70, // $CF70 + #$CF71, // $CF71 + #$CF72, // $CF72 + #$CF73, // $CF73 + #$CF74, // $CF74 + #$CF75, // $CF75 + #$CF76, // $CF76 + #$CF77, // $CF77 + #$CF78, // $CF78 + #$CF79, // $CF79 + #$CF7A, // $CF7A + #$CF7B, // $CF7B + #$CF7C, // $CF7C + #$CF7D, // $CF7D + #$CF7E, // $CF7E + #$CF7F, // $CF7F + #$CF80, // $CF80 + #$CF81, // $CF81 + #$CF82, // $CF82 + #$CF83, // $CF83 + #$CF84, // $CF84 + #$CF85, // $CF85 + #$CF86, // $CF86 + #$CF87, // $CF87 + #$CF88, // $CF88 + #$CF89, // $CF89 + #$CF8A, // $CF8A + #$CF8B, // $CF8B + #$CF8C, // $CF8C + #$CF8D, // $CF8D + #$CF8E, // $CF8E + #$CF8F, // $CF8F + #$CF90, // $CF90 + #$CF91, // $CF91 + #$CF92, // $CF92 + #$CF93, // $CF93 + #$CF94, // $CF94 + #$CF95, // $CF95 + #$CF96, // $CF96 + #$CF97, // $CF97 + #$CF98, // $CF98 + #$CF99, // $CF99 + #$CF9A, // $CF9A + #$CF9B, // $CF9B + #$CF9C, // $CF9C + #$CF9D, // $CF9D + #$CF9E, // $CF9E + #$CF9F, // $CF9F + #$CFA0, // $CFA0 + #$CFA1, // $CFA1 + #$CFA2, // $CFA2 + #$CFA3, // $CFA3 + #$CFA4, // $CFA4 + #$CFA5, // $CFA5 + #$CFA6, // $CFA6 + #$CFA7, // $CFA7 + #$CFA8, // $CFA8 + #$CFA9, // $CFA9 + #$CFAA, // $CFAA + #$CFAB, // $CFAB + #$CFAC, // $CFAC + #$CFAD, // $CFAD + #$CFAE, // $CFAE + #$CFAF, // $CFAF + #$CFB0, // $CFB0 + #$CFB1, // $CFB1 + #$CFB2, // $CFB2 + #$CFB3, // $CFB3 + #$CFB4, // $CFB4 + #$CFB5, // $CFB5 + #$CFB6, // $CFB6 + #$CFB7, // $CFB7 + #$CFB8, // $CFB8 + #$CFB9, // $CFB9 + #$CFBA, // $CFBA + #$CFBB, // $CFBB + #$CFBC, // $CFBC + #$CFBD, // $CFBD + #$CFBE, // $CFBE + #$CFBF, // $CFBF + #$CFC0, // $CFC0 + #$CFC1, // $CFC1 + #$CFC2, // $CFC2 + #$CFC3, // $CFC3 + #$CFC4, // $CFC4 + #$CFC5, // $CFC5 + #$CFC6, // $CFC6 + #$CFC7, // $CFC7 + #$CFC8, // $CFC8 + #$CFC9, // $CFC9 + #$CFCA, // $CFCA + #$CFCB, // $CFCB + #$CFCC, // $CFCC + #$CFCD, // $CFCD + #$CFCE, // $CFCE + #$CFCF, // $CFCF + #$CFD0, // $CFD0 + #$CFD1, // $CFD1 + #$CFD2, // $CFD2 + #$CFD3, // $CFD3 + #$CFD4, // $CFD4 + #$CFD5, // $CFD5 + #$CFD6, // $CFD6 + #$CFD7, // $CFD7 + #$CFD8, // $CFD8 + #$CFD9, // $CFD9 + #$CFDA, // $CFDA + #$CFDB, // $CFDB + #$CFDC, // $CFDC + #$CFDD, // $CFDD + #$CFDE, // $CFDE + #$CFDF, // $CFDF + #$CFE0, // $CFE0 + #$CFE1, // $CFE1 + #$CFE2, // $CFE2 + #$CFE3, // $CFE3 + #$CFE4, // $CFE4 + #$CFE5, // $CFE5 + #$CFE6, // $CFE6 + #$CFE7, // $CFE7 + #$CFE8, // $CFE8 + #$CFE9, // $CFE9 + #$CFEA, // $CFEA + #$CFEB, // $CFEB + #$CFEC, // $CFEC + #$CFED, // $CFED + #$CFEE, // $CFEE + #$CFEF, // $CFEF + #$CFF0, // $CFF0 + #$CFF1, // $CFF1 + #$CFF2, // $CFF2 + #$CFF3, // $CFF3 + #$CFF4, // $CFF4 + #$CFF5, // $CFF5 + #$CFF6, // $CFF6 + #$CFF7, // $CFF7 + #$CFF8, // $CFF8 + #$CFF9, // $CFF9 + #$CFFA, // $CFFA + #$CFFB, // $CFFB + #$CFFC, // $CFFC + #$CFFD, // $CFFD + #$CFFE, // $CFFE + #$CFFF, // $CFFF + #$D000, // $D000 + #$D001, // $D001 + #$D002, // $D002 + #$D003, // $D003 + #$D004, // $D004 + #$D005, // $D005 + #$D006, // $D006 + #$D007, // $D007 + #$D008, // $D008 + #$D009, // $D009 + #$D00A, // $D00A + #$D00B, // $D00B + #$D00C, // $D00C + #$D00D, // $D00D + #$D00E, // $D00E + #$D00F, // $D00F + #$D010, // $D010 + #$D011, // $D011 + #$D012, // $D012 + #$D013, // $D013 + #$D014, // $D014 + #$D015, // $D015 + #$D016, // $D016 + #$D017, // $D017 + #$D018, // $D018 + #$D019, // $D019 + #$D01A, // $D01A + #$D01B, // $D01B + #$D01C, // $D01C + #$D01D, // $D01D + #$D01E, // $D01E + #$D01F, // $D01F + #$D020, // $D020 + #$D021, // $D021 + #$D022, // $D022 + #$D023, // $D023 + #$D024, // $D024 + #$D025, // $D025 + #$D026, // $D026 + #$D027, // $D027 + #$D028, // $D028 + #$D029, // $D029 + #$D02A, // $D02A + #$D02B, // $D02B + #$D02C, // $D02C + #$D02D, // $D02D + #$D02E, // $D02E + #$D02F, // $D02F + #$D030, // $D030 + #$D031, // $D031 + #$D032, // $D032 + #$D033, // $D033 + #$D034, // $D034 + #$D035, // $D035 + #$D036, // $D036 + #$D037, // $D037 + #$D038, // $D038 + #$D039, // $D039 + #$D03A, // $D03A + #$D03B, // $D03B + #$D03C, // $D03C + #$D03D, // $D03D + #$D03E, // $D03E + #$D03F, // $D03F + #$D040, // $D040 + #$D041, // $D041 + #$D042, // $D042 + #$D043, // $D043 + #$D044, // $D044 + #$D045, // $D045 + #$D046, // $D046 + #$D047, // $D047 + #$D048, // $D048 + #$D049, // $D049 + #$D04A, // $D04A + #$D04B, // $D04B + #$D04C, // $D04C + #$D04D, // $D04D + #$D04E, // $D04E + #$D04F, // $D04F + #$D050, // $D050 + #$D051, // $D051 + #$D052, // $D052 + #$D053, // $D053 + #$D054, // $D054 + #$D055, // $D055 + #$D056, // $D056 + #$D057, // $D057 + #$D058, // $D058 + #$D059, // $D059 + #$D05A, // $D05A + #$D05B, // $D05B + #$D05C, // $D05C + #$D05D, // $D05D + #$D05E, // $D05E + #$D05F, // $D05F + #$D060, // $D060 + #$D061, // $D061 + #$D062, // $D062 + #$D063, // $D063 + #$D064, // $D064 + #$D065, // $D065 + #$D066, // $D066 + #$D067, // $D067 + #$D068, // $D068 + #$D069, // $D069 + #$D06A, // $D06A + #$D06B, // $D06B + #$D06C, // $D06C + #$D06D, // $D06D + #$D06E, // $D06E + #$D06F, // $D06F + #$D070, // $D070 + #$D071, // $D071 + #$D072, // $D072 + #$D073, // $D073 + #$D074, // $D074 + #$D075, // $D075 + #$D076, // $D076 + #$D077, // $D077 + #$D078, // $D078 + #$D079, // $D079 + #$D07A, // $D07A + #$D07B, // $D07B + #$D07C, // $D07C + #$D07D, // $D07D + #$D07E, // $D07E + #$D07F, // $D07F + #$D080, // $D080 + #$D081, // $D081 + #$D082, // $D082 + #$D083, // $D083 + #$D084, // $D084 + #$D085, // $D085 + #$D086, // $D086 + #$D087, // $D087 + #$D088, // $D088 + #$D089, // $D089 + #$D08A, // $D08A + #$D08B, // $D08B + #$D08C, // $D08C + #$D08D, // $D08D + #$D08E, // $D08E + #$D08F, // $D08F + #$D090, // $D090 + #$D091, // $D091 + #$D092, // $D092 + #$D093, // $D093 + #$D094, // $D094 + #$D095, // $D095 + #$D096, // $D096 + #$D097, // $D097 + #$D098, // $D098 + #$D099, // $D099 + #$D09A, // $D09A + #$D09B, // $D09B + #$D09C, // $D09C + #$D09D, // $D09D + #$D09E, // $D09E + #$D09F, // $D09F + #$D0A0, // $D0A0 + #$D0A1, // $D0A1 + #$D0A2, // $D0A2 + #$D0A3, // $D0A3 + #$D0A4, // $D0A4 + #$D0A5, // $D0A5 + #$D0A6, // $D0A6 + #$D0A7, // $D0A7 + #$D0A8, // $D0A8 + #$D0A9, // $D0A9 + #$D0AA, // $D0AA + #$D0AB, // $D0AB + #$D0AC, // $D0AC + #$D0AD, // $D0AD + #$D0AE, // $D0AE + #$D0AF, // $D0AF + #$D0B0, // $D0B0 + #$D0B1, // $D0B1 + #$D0B2, // $D0B2 + #$D0B3, // $D0B3 + #$D0B4, // $D0B4 + #$D0B5, // $D0B5 + #$D0B6, // $D0B6 + #$D0B7, // $D0B7 + #$D0B8, // $D0B8 + #$D0B9, // $D0B9 + #$D0BA, // $D0BA + #$D0BB, // $D0BB + #$D0BC, // $D0BC + #$D0BD, // $D0BD + #$D0BE, // $D0BE + #$D0BF, // $D0BF + #$D0C0, // $D0C0 + #$D0C1, // $D0C1 + #$D0C2, // $D0C2 + #$D0C3, // $D0C3 + #$D0C4, // $D0C4 + #$D0C5, // $D0C5 + #$D0C6, // $D0C6 + #$D0C7, // $D0C7 + #$D0C8, // $D0C8 + #$D0C9, // $D0C9 + #$D0CA, // $D0CA + #$D0CB, // $D0CB + #$D0CC, // $D0CC + #$D0CD, // $D0CD + #$D0CE, // $D0CE + #$D0CF, // $D0CF + #$D0D0, // $D0D0 + #$D0D1, // $D0D1 + #$D0D2, // $D0D2 + #$D0D3, // $D0D3 + #$D0D4, // $D0D4 + #$D0D5, // $D0D5 + #$D0D6, // $D0D6 + #$D0D7, // $D0D7 + #$D0D8, // $D0D8 + #$D0D9, // $D0D9 + #$D0DA, // $D0DA + #$D0DB, // $D0DB + #$D0DC, // $D0DC + #$D0DD, // $D0DD + #$D0DE, // $D0DE + #$D0DF, // $D0DF + #$D0E0, // $D0E0 + #$D0E1, // $D0E1 + #$D0E2, // $D0E2 + #$D0E3, // $D0E3 + #$D0E4, // $D0E4 + #$D0E5, // $D0E5 + #$D0E6, // $D0E6 + #$D0E7, // $D0E7 + #$D0E8, // $D0E8 + #$D0E9, // $D0E9 + #$D0EA, // $D0EA + #$D0EB, // $D0EB + #$D0EC, // $D0EC + #$D0ED, // $D0ED + #$D0EE, // $D0EE + #$D0EF, // $D0EF + #$D0F0, // $D0F0 + #$D0F1, // $D0F1 + #$D0F2, // $D0F2 + #$D0F3, // $D0F3 + #$D0F4, // $D0F4 + #$D0F5, // $D0F5 + #$D0F6, // $D0F6 + #$D0F7, // $D0F7 + #$D0F8, // $D0F8 + #$D0F9, // $D0F9 + #$D0FA, // $D0FA + #$D0FB, // $D0FB + #$D0FC, // $D0FC + #$D0FD, // $D0FD + #$D0FE, // $D0FE + #$D0FF, // $D0FF + #$D100, // $D100 + #$D101, // $D101 + #$D102, // $D102 + #$D103, // $D103 + #$D104, // $D104 + #$D105, // $D105 + #$D106, // $D106 + #$D107, // $D107 + #$D108, // $D108 + #$D109, // $D109 + #$D10A, // $D10A + #$D10B, // $D10B + #$D10C, // $D10C + #$D10D, // $D10D + #$D10E, // $D10E + #$D10F, // $D10F + #$D110, // $D110 + #$D111, // $D111 + #$D112, // $D112 + #$D113, // $D113 + #$D114, // $D114 + #$D115, // $D115 + #$D116, // $D116 + #$D117, // $D117 + #$D118, // $D118 + #$D119, // $D119 + #$D11A, // $D11A + #$D11B, // $D11B + #$D11C, // $D11C + #$D11D, // $D11D + #$D11E, // $D11E + #$D11F, // $D11F + #$D120, // $D120 + #$D121, // $D121 + #$D122, // $D122 + #$D123, // $D123 + #$D124, // $D124 + #$D125, // $D125 + #$D126, // $D126 + #$D127, // $D127 + #$D128, // $D128 + #$D129, // $D129 + #$D12A, // $D12A + #$D12B, // $D12B + #$D12C, // $D12C + #$D12D, // $D12D + #$D12E, // $D12E + #$D12F, // $D12F + #$D130, // $D130 + #$D131, // $D131 + #$D132, // $D132 + #$D133, // $D133 + #$D134, // $D134 + #$D135, // $D135 + #$D136, // $D136 + #$D137, // $D137 + #$D138, // $D138 + #$D139, // $D139 + #$D13A, // $D13A + #$D13B, // $D13B + #$D13C, // $D13C + #$D13D, // $D13D + #$D13E, // $D13E + #$D13F, // $D13F + #$D140, // $D140 + #$D141, // $D141 + #$D142, // $D142 + #$D143, // $D143 + #$D144, // $D144 + #$D145, // $D145 + #$D146, // $D146 + #$D147, // $D147 + #$D148, // $D148 + #$D149, // $D149 + #$D14A, // $D14A + #$D14B, // $D14B + #$D14C, // $D14C + #$D14D, // $D14D + #$D14E, // $D14E + #$D14F, // $D14F + #$D150, // $D150 + #$D151, // $D151 + #$D152, // $D152 + #$D153, // $D153 + #$D154, // $D154 + #$D155, // $D155 + #$D156, // $D156 + #$D157, // $D157 + #$D158, // $D158 + #$D159, // $D159 + #$D15A, // $D15A + #$D15B, // $D15B + #$D15C, // $D15C + #$D15D, // $D15D + #$D15E, // $D15E + #$D15F, // $D15F + #$D160, // $D160 + #$D161, // $D161 + #$D162, // $D162 + #$D163, // $D163 + #$D164, // $D164 + #$D165, // $D165 + #$D166, // $D166 + #$D167, // $D167 + #$D168, // $D168 + #$D169, // $D169 + #$D16A, // $D16A + #$D16B, // $D16B + #$D16C, // $D16C + #$D16D, // $D16D + #$D16E, // $D16E + #$D16F, // $D16F + #$D170, // $D170 + #$D171, // $D171 + #$D172, // $D172 + #$D173, // $D173 + #$D174, // $D174 + #$D175, // $D175 + #$D176, // $D176 + #$D177, // $D177 + #$D178, // $D178 + #$D179, // $D179 + #$D17A, // $D17A + #$D17B, // $D17B + #$D17C, // $D17C + #$D17D, // $D17D + #$D17E, // $D17E + #$D17F, // $D17F + #$D180, // $D180 + #$D181, // $D181 + #$D182, // $D182 + #$D183, // $D183 + #$D184, // $D184 + #$D185, // $D185 + #$D186, // $D186 + #$D187, // $D187 + #$D188, // $D188 + #$D189, // $D189 + #$D18A, // $D18A + #$D18B, // $D18B + #$D18C, // $D18C + #$D18D, // $D18D + #$D18E, // $D18E + #$D18F, // $D18F + #$D190, // $D190 + #$D191, // $D191 + #$D192, // $D192 + #$D193, // $D193 + #$D194, // $D194 + #$D195, // $D195 + #$D196, // $D196 + #$D197, // $D197 + #$D198, // $D198 + #$D199, // $D199 + #$D19A, // $D19A + #$D19B, // $D19B + #$D19C, // $D19C + #$D19D, // $D19D + #$D19E, // $D19E + #$D19F, // $D19F + #$D1A0, // $D1A0 + #$D1A1, // $D1A1 + #$D1A2, // $D1A2 + #$D1A3, // $D1A3 + #$D1A4, // $D1A4 + #$D1A5, // $D1A5 + #$D1A6, // $D1A6 + #$D1A7, // $D1A7 + #$D1A8, // $D1A8 + #$D1A9, // $D1A9 + #$D1AA, // $D1AA + #$D1AB, // $D1AB + #$D1AC, // $D1AC + #$D1AD, // $D1AD + #$D1AE, // $D1AE + #$D1AF, // $D1AF + #$D1B0, // $D1B0 + #$D1B1, // $D1B1 + #$D1B2, // $D1B2 + #$D1B3, // $D1B3 + #$D1B4, // $D1B4 + #$D1B5, // $D1B5 + #$D1B6, // $D1B6 + #$D1B7, // $D1B7 + #$D1B8, // $D1B8 + #$D1B9, // $D1B9 + #$D1BA, // $D1BA + #$D1BB, // $D1BB + #$D1BC, // $D1BC + #$D1BD, // $D1BD + #$D1BE, // $D1BE + #$D1BF, // $D1BF + #$D1C0, // $D1C0 + #$D1C1, // $D1C1 + #$D1C2, // $D1C2 + #$D1C3, // $D1C3 + #$D1C4, // $D1C4 + #$D1C5, // $D1C5 + #$D1C6, // $D1C6 + #$D1C7, // $D1C7 + #$D1C8, // $D1C8 + #$D1C9, // $D1C9 + #$D1CA, // $D1CA + #$D1CB, // $D1CB + #$D1CC, // $D1CC + #$D1CD, // $D1CD + #$D1CE, // $D1CE + #$D1CF, // $D1CF + #$D1D0, // $D1D0 + #$D1D1, // $D1D1 + #$D1D2, // $D1D2 + #$D1D3, // $D1D3 + #$D1D4, // $D1D4 + #$D1D5, // $D1D5 + #$D1D6, // $D1D6 + #$D1D7, // $D1D7 + #$D1D8, // $D1D8 + #$D1D9, // $D1D9 + #$D1DA, // $D1DA + #$D1DB, // $D1DB + #$D1DC, // $D1DC + #$D1DD, // $D1DD + #$D1DE, // $D1DE + #$D1DF, // $D1DF + #$D1E0, // $D1E0 + #$D1E1, // $D1E1 + #$D1E2, // $D1E2 + #$D1E3, // $D1E3 + #$D1E4, // $D1E4 + #$D1E5, // $D1E5 + #$D1E6, // $D1E6 + #$D1E7, // $D1E7 + #$D1E8, // $D1E8 + #$D1E9, // $D1E9 + #$D1EA, // $D1EA + #$D1EB, // $D1EB + #$D1EC, // $D1EC + #$D1ED, // $D1ED + #$D1EE, // $D1EE + #$D1EF, // $D1EF + #$D1F0, // $D1F0 + #$D1F1, // $D1F1 + #$D1F2, // $D1F2 + #$D1F3, // $D1F3 + #$D1F4, // $D1F4 + #$D1F5, // $D1F5 + #$D1F6, // $D1F6 + #$D1F7, // $D1F7 + #$D1F8, // $D1F8 + #$D1F9, // $D1F9 + #$D1FA, // $D1FA + #$D1FB, // $D1FB + #$D1FC, // $D1FC + #$D1FD, // $D1FD + #$D1FE, // $D1FE + #$D1FF, // $D1FF + #$D200, // $D200 + #$D201, // $D201 + #$D202, // $D202 + #$D203, // $D203 + #$D204, // $D204 + #$D205, // $D205 + #$D206, // $D206 + #$D207, // $D207 + #$D208, // $D208 + #$D209, // $D209 + #$D20A, // $D20A + #$D20B, // $D20B + #$D20C, // $D20C + #$D20D, // $D20D + #$D20E, // $D20E + #$D20F, // $D20F + #$D210, // $D210 + #$D211, // $D211 + #$D212, // $D212 + #$D213, // $D213 + #$D214, // $D214 + #$D215, // $D215 + #$D216, // $D216 + #$D217, // $D217 + #$D218, // $D218 + #$D219, // $D219 + #$D21A, // $D21A + #$D21B, // $D21B + #$D21C, // $D21C + #$D21D, // $D21D + #$D21E, // $D21E + #$D21F, // $D21F + #$D220, // $D220 + #$D221, // $D221 + #$D222, // $D222 + #$D223, // $D223 + #$D224, // $D224 + #$D225, // $D225 + #$D226, // $D226 + #$D227, // $D227 + #$D228, // $D228 + #$D229, // $D229 + #$D22A, // $D22A + #$D22B, // $D22B + #$D22C, // $D22C + #$D22D, // $D22D + #$D22E, // $D22E + #$D22F, // $D22F + #$D230, // $D230 + #$D231, // $D231 + #$D232, // $D232 + #$D233, // $D233 + #$D234, // $D234 + #$D235, // $D235 + #$D236, // $D236 + #$D237, // $D237 + #$D238, // $D238 + #$D239, // $D239 + #$D23A, // $D23A + #$D23B, // $D23B + #$D23C, // $D23C + #$D23D, // $D23D + #$D23E, // $D23E + #$D23F, // $D23F + #$D240, // $D240 + #$D241, // $D241 + #$D242, // $D242 + #$D243, // $D243 + #$D244, // $D244 + #$D245, // $D245 + #$D246, // $D246 + #$D247, // $D247 + #$D248, // $D248 + #$D249, // $D249 + #$D24A, // $D24A + #$D24B, // $D24B + #$D24C, // $D24C + #$D24D, // $D24D + #$D24E, // $D24E + #$D24F, // $D24F + #$D250, // $D250 + #$D251, // $D251 + #$D252, // $D252 + #$D253, // $D253 + #$D254, // $D254 + #$D255, // $D255 + #$D256, // $D256 + #$D257, // $D257 + #$D258, // $D258 + #$D259, // $D259 + #$D25A, // $D25A + #$D25B, // $D25B + #$D25C, // $D25C + #$D25D, // $D25D + #$D25E, // $D25E + #$D25F, // $D25F + #$D260, // $D260 + #$D261, // $D261 + #$D262, // $D262 + #$D263, // $D263 + #$D264, // $D264 + #$D265, // $D265 + #$D266, // $D266 + #$D267, // $D267 + #$D268, // $D268 + #$D269, // $D269 + #$D26A, // $D26A + #$D26B, // $D26B + #$D26C, // $D26C + #$D26D, // $D26D + #$D26E, // $D26E + #$D26F, // $D26F + #$D270, // $D270 + #$D271, // $D271 + #$D272, // $D272 + #$D273, // $D273 + #$D274, // $D274 + #$D275, // $D275 + #$D276, // $D276 + #$D277, // $D277 + #$D278, // $D278 + #$D279, // $D279 + #$D27A, // $D27A + #$D27B, // $D27B + #$D27C, // $D27C + #$D27D, // $D27D + #$D27E, // $D27E + #$D27F, // $D27F + #$D280, // $D280 + #$D281, // $D281 + #$D282, // $D282 + #$D283, // $D283 + #$D284, // $D284 + #$D285, // $D285 + #$D286, // $D286 + #$D287, // $D287 + #$D288, // $D288 + #$D289, // $D289 + #$D28A, // $D28A + #$D28B, // $D28B + #$D28C, // $D28C + #$D28D, // $D28D + #$D28E, // $D28E + #$D28F, // $D28F + #$D290, // $D290 + #$D291, // $D291 + #$D292, // $D292 + #$D293, // $D293 + #$D294, // $D294 + #$D295, // $D295 + #$D296, // $D296 + #$D297, // $D297 + #$D298, // $D298 + #$D299, // $D299 + #$D29A, // $D29A + #$D29B, // $D29B + #$D29C, // $D29C + #$D29D, // $D29D + #$D29E, // $D29E + #$D29F, // $D29F + #$D2A0, // $D2A0 + #$D2A1, // $D2A1 + #$D2A2, // $D2A2 + #$D2A3, // $D2A3 + #$D2A4, // $D2A4 + #$D2A5, // $D2A5 + #$D2A6, // $D2A6 + #$D2A7, // $D2A7 + #$D2A8, // $D2A8 + #$D2A9, // $D2A9 + #$D2AA, // $D2AA + #$D2AB, // $D2AB + #$D2AC, // $D2AC + #$D2AD, // $D2AD + #$D2AE, // $D2AE + #$D2AF, // $D2AF + #$D2B0, // $D2B0 + #$D2B1, // $D2B1 + #$D2B2, // $D2B2 + #$D2B3, // $D2B3 + #$D2B4, // $D2B4 + #$D2B5, // $D2B5 + #$D2B6, // $D2B6 + #$D2B7, // $D2B7 + #$D2B8, // $D2B8 + #$D2B9, // $D2B9 + #$D2BA, // $D2BA + #$D2BB, // $D2BB + #$D2BC, // $D2BC + #$D2BD, // $D2BD + #$D2BE, // $D2BE + #$D2BF, // $D2BF + #$D2C0, // $D2C0 + #$D2C1, // $D2C1 + #$D2C2, // $D2C2 + #$D2C3, // $D2C3 + #$D2C4, // $D2C4 + #$D2C5, // $D2C5 + #$D2C6, // $D2C6 + #$D2C7, // $D2C7 + #$D2C8, // $D2C8 + #$D2C9, // $D2C9 + #$D2CA, // $D2CA + #$D2CB, // $D2CB + #$D2CC, // $D2CC + #$D2CD, // $D2CD + #$D2CE, // $D2CE + #$D2CF, // $D2CF + #$D2D0, // $D2D0 + #$D2D1, // $D2D1 + #$D2D2, // $D2D2 + #$D2D3, // $D2D3 + #$D2D4, // $D2D4 + #$D2D5, // $D2D5 + #$D2D6, // $D2D6 + #$D2D7, // $D2D7 + #$D2D8, // $D2D8 + #$D2D9, // $D2D9 + #$D2DA, // $D2DA + #$D2DB, // $D2DB + #$D2DC, // $D2DC + #$D2DD, // $D2DD + #$D2DE, // $D2DE + #$D2DF, // $D2DF + #$D2E0, // $D2E0 + #$D2E1, // $D2E1 + #$D2E2, // $D2E2 + #$D2E3, // $D2E3 + #$D2E4, // $D2E4 + #$D2E5, // $D2E5 + #$D2E6, // $D2E6 + #$D2E7, // $D2E7 + #$D2E8, // $D2E8 + #$D2E9, // $D2E9 + #$D2EA, // $D2EA + #$D2EB, // $D2EB + #$D2EC, // $D2EC + #$D2ED, // $D2ED + #$D2EE, // $D2EE + #$D2EF, // $D2EF + #$D2F0, // $D2F0 + #$D2F1, // $D2F1 + #$D2F2, // $D2F2 + #$D2F3, // $D2F3 + #$D2F4, // $D2F4 + #$D2F5, // $D2F5 + #$D2F6, // $D2F6 + #$D2F7, // $D2F7 + #$D2F8, // $D2F8 + #$D2F9, // $D2F9 + #$D2FA, // $D2FA + #$D2FB, // $D2FB + #$D2FC, // $D2FC + #$D2FD, // $D2FD + #$D2FE, // $D2FE + #$D2FF, // $D2FF + #$D300, // $D300 + #$D301, // $D301 + #$D302, // $D302 + #$D303, // $D303 + #$D304, // $D304 + #$D305, // $D305 + #$D306, // $D306 + #$D307, // $D307 + #$D308, // $D308 + #$D309, // $D309 + #$D30A, // $D30A + #$D30B, // $D30B + #$D30C, // $D30C + #$D30D, // $D30D + #$D30E, // $D30E + #$D30F, // $D30F + #$D310, // $D310 + #$D311, // $D311 + #$D312, // $D312 + #$D313, // $D313 + #$D314, // $D314 + #$D315, // $D315 + #$D316, // $D316 + #$D317, // $D317 + #$D318, // $D318 + #$D319, // $D319 + #$D31A, // $D31A + #$D31B, // $D31B + #$D31C, // $D31C + #$D31D, // $D31D + #$D31E, // $D31E + #$D31F, // $D31F + #$D320, // $D320 + #$D321, // $D321 + #$D322, // $D322 + #$D323, // $D323 + #$D324, // $D324 + #$D325, // $D325 + #$D326, // $D326 + #$D327, // $D327 + #$D328, // $D328 + #$D329, // $D329 + #$D32A, // $D32A + #$D32B, // $D32B + #$D32C, // $D32C + #$D32D, // $D32D + #$D32E, // $D32E + #$D32F, // $D32F + #$D330, // $D330 + #$D331, // $D331 + #$D332, // $D332 + #$D333, // $D333 + #$D334, // $D334 + #$D335, // $D335 + #$D336, // $D336 + #$D337, // $D337 + #$D338, // $D338 + #$D339, // $D339 + #$D33A, // $D33A + #$D33B, // $D33B + #$D33C, // $D33C + #$D33D, // $D33D + #$D33E, // $D33E + #$D33F, // $D33F + #$D340, // $D340 + #$D341, // $D341 + #$D342, // $D342 + #$D343, // $D343 + #$D344, // $D344 + #$D345, // $D345 + #$D346, // $D346 + #$D347, // $D347 + #$D348, // $D348 + #$D349, // $D349 + #$D34A, // $D34A + #$D34B, // $D34B + #$D34C, // $D34C + #$D34D, // $D34D + #$D34E, // $D34E + #$D34F, // $D34F + #$D350, // $D350 + #$D351, // $D351 + #$D352, // $D352 + #$D353, // $D353 + #$D354, // $D354 + #$D355, // $D355 + #$D356, // $D356 + #$D357, // $D357 + #$D358, // $D358 + #$D359, // $D359 + #$D35A, // $D35A + #$D35B, // $D35B + #$D35C, // $D35C + #$D35D, // $D35D + #$D35E, // $D35E + #$D35F, // $D35F + #$D360, // $D360 + #$D361, // $D361 + #$D362, // $D362 + #$D363, // $D363 + #$D364, // $D364 + #$D365, // $D365 + #$D366, // $D366 + #$D367, // $D367 + #$D368, // $D368 + #$D369, // $D369 + #$D36A, // $D36A + #$D36B, // $D36B + #$D36C, // $D36C + #$D36D, // $D36D + #$D36E, // $D36E + #$D36F, // $D36F + #$D370, // $D370 + #$D371, // $D371 + #$D372, // $D372 + #$D373, // $D373 + #$D374, // $D374 + #$D375, // $D375 + #$D376, // $D376 + #$D377, // $D377 + #$D378, // $D378 + #$D379, // $D379 + #$D37A, // $D37A + #$D37B, // $D37B + #$D37C, // $D37C + #$D37D, // $D37D + #$D37E, // $D37E + #$D37F, // $D37F + #$D380, // $D380 + #$D381, // $D381 + #$D382, // $D382 + #$D383, // $D383 + #$D384, // $D384 + #$D385, // $D385 + #$D386, // $D386 + #$D387, // $D387 + #$D388, // $D388 + #$D389, // $D389 + #$D38A, // $D38A + #$D38B, // $D38B + #$D38C, // $D38C + #$D38D, // $D38D + #$D38E, // $D38E + #$D38F, // $D38F + #$D390, // $D390 + #$D391, // $D391 + #$D392, // $D392 + #$D393, // $D393 + #$D394, // $D394 + #$D395, // $D395 + #$D396, // $D396 + #$D397, // $D397 + #$D398, // $D398 + #$D399, // $D399 + #$D39A, // $D39A + #$D39B, // $D39B + #$D39C, // $D39C + #$D39D, // $D39D + #$D39E, // $D39E + #$D39F, // $D39F + #$D3A0, // $D3A0 + #$D3A1, // $D3A1 + #$D3A2, // $D3A2 + #$D3A3, // $D3A3 + #$D3A4, // $D3A4 + #$D3A5, // $D3A5 + #$D3A6, // $D3A6 + #$D3A7, // $D3A7 + #$D3A8, // $D3A8 + #$D3A9, // $D3A9 + #$D3AA, // $D3AA + #$D3AB, // $D3AB + #$D3AC, // $D3AC + #$D3AD, // $D3AD + #$D3AE, // $D3AE + #$D3AF, // $D3AF + #$D3B0, // $D3B0 + #$D3B1, // $D3B1 + #$D3B2, // $D3B2 + #$D3B3, // $D3B3 + #$D3B4, // $D3B4 + #$D3B5, // $D3B5 + #$D3B6, // $D3B6 + #$D3B7, // $D3B7 + #$D3B8, // $D3B8 + #$D3B9, // $D3B9 + #$D3BA, // $D3BA + #$D3BB, // $D3BB + #$D3BC, // $D3BC + #$D3BD, // $D3BD + #$D3BE, // $D3BE + #$D3BF, // $D3BF + #$D3C0, // $D3C0 + #$D3C1, // $D3C1 + #$D3C2, // $D3C2 + #$D3C3, // $D3C3 + #$D3C4, // $D3C4 + #$D3C5, // $D3C5 + #$D3C6, // $D3C6 + #$D3C7, // $D3C7 + #$D3C8, // $D3C8 + #$D3C9, // $D3C9 + #$D3CA, // $D3CA + #$D3CB, // $D3CB + #$D3CC, // $D3CC + #$D3CD, // $D3CD + #$D3CE, // $D3CE + #$D3CF, // $D3CF + #$D3D0, // $D3D0 + #$D3D1, // $D3D1 + #$D3D2, // $D3D2 + #$D3D3, // $D3D3 + #$D3D4, // $D3D4 + #$D3D5, // $D3D5 + #$D3D6, // $D3D6 + #$D3D7, // $D3D7 + #$D3D8, // $D3D8 + #$D3D9, // $D3D9 + #$D3DA, // $D3DA + #$D3DB, // $D3DB + #$D3DC, // $D3DC + #$D3DD, // $D3DD + #$D3DE, // $D3DE + #$D3DF, // $D3DF + #$D3E0, // $D3E0 + #$D3E1, // $D3E1 + #$D3E2, // $D3E2 + #$D3E3, // $D3E3 + #$D3E4, // $D3E4 + #$D3E5, // $D3E5 + #$D3E6, // $D3E6 + #$D3E7, // $D3E7 + #$D3E8, // $D3E8 + #$D3E9, // $D3E9 + #$D3EA, // $D3EA + #$D3EB, // $D3EB + #$D3EC, // $D3EC + #$D3ED, // $D3ED + #$D3EE, // $D3EE + #$D3EF, // $D3EF + #$D3F0, // $D3F0 + #$D3F1, // $D3F1 + #$D3F2, // $D3F2 + #$D3F3, // $D3F3 + #$D3F4, // $D3F4 + #$D3F5, // $D3F5 + #$D3F6, // $D3F6 + #$D3F7, // $D3F7 + #$D3F8, // $D3F8 + #$D3F9, // $D3F9 + #$D3FA, // $D3FA + #$D3FB, // $D3FB + #$D3FC, // $D3FC + #$D3FD, // $D3FD + #$D3FE, // $D3FE + #$D3FF, // $D3FF + #$D400, // $D400 + #$D401, // $D401 + #$D402, // $D402 + #$D403, // $D403 + #$D404, // $D404 + #$D405, // $D405 + #$D406, // $D406 + #$D407, // $D407 + #$D408, // $D408 + #$D409, // $D409 + #$D40A, // $D40A + #$D40B, // $D40B + #$D40C, // $D40C + #$D40D, // $D40D + #$D40E, // $D40E + #$D40F, // $D40F + #$D410, // $D410 + #$D411, // $D411 + #$D412, // $D412 + #$D413, // $D413 + #$D414, // $D414 + #$D415, // $D415 + #$D416, // $D416 + #$D417, // $D417 + #$D418, // $D418 + #$D419, // $D419 + #$D41A, // $D41A + #$D41B, // $D41B + #$D41C, // $D41C + #$D41D, // $D41D + #$D41E, // $D41E + #$D41F, // $D41F + #$D420, // $D420 + #$D421, // $D421 + #$D422, // $D422 + #$D423, // $D423 + #$D424, // $D424 + #$D425, // $D425 + #$D426, // $D426 + #$D427, // $D427 + #$D428, // $D428 + #$D429, // $D429 + #$D42A, // $D42A + #$D42B, // $D42B + #$D42C, // $D42C + #$D42D, // $D42D + #$D42E, // $D42E + #$D42F, // $D42F + #$D430, // $D430 + #$D431, // $D431 + #$D432, // $D432 + #$D433, // $D433 + #$D434, // $D434 + #$D435, // $D435 + #$D436, // $D436 + #$D437, // $D437 + #$D438, // $D438 + #$D439, // $D439 + #$D43A, // $D43A + #$D43B, // $D43B + #$D43C, // $D43C + #$D43D, // $D43D + #$D43E, // $D43E + #$D43F, // $D43F + #$D440, // $D440 + #$D441, // $D441 + #$D442, // $D442 + #$D443, // $D443 + #$D444, // $D444 + #$D445, // $D445 + #$D446, // $D446 + #$D447, // $D447 + #$D448, // $D448 + #$D449, // $D449 + #$D44A, // $D44A + #$D44B, // $D44B + #$D44C, // $D44C + #$D44D, // $D44D + #$D44E, // $D44E + #$D44F, // $D44F + #$D450, // $D450 + #$D451, // $D451 + #$D452, // $D452 + #$D453, // $D453 + #$D454, // $D454 + #$D455, // $D455 + #$D456, // $D456 + #$D457, // $D457 + #$D458, // $D458 + #$D459, // $D459 + #$D45A, // $D45A + #$D45B, // $D45B + #$D45C, // $D45C + #$D45D, // $D45D + #$D45E, // $D45E + #$D45F, // $D45F + #$D460, // $D460 + #$D461, // $D461 + #$D462, // $D462 + #$D463, // $D463 + #$D464, // $D464 + #$D465, // $D465 + #$D466, // $D466 + #$D467, // $D467 + #$D468, // $D468 + #$D469, // $D469 + #$D46A, // $D46A + #$D46B, // $D46B + #$D46C, // $D46C + #$D46D, // $D46D + #$D46E, // $D46E + #$D46F, // $D46F + #$D470, // $D470 + #$D471, // $D471 + #$D472, // $D472 + #$D473, // $D473 + #$D474, // $D474 + #$D475, // $D475 + #$D476, // $D476 + #$D477, // $D477 + #$D478, // $D478 + #$D479, // $D479 + #$D47A, // $D47A + #$D47B, // $D47B + #$D47C, // $D47C + #$D47D, // $D47D + #$D47E, // $D47E + #$D47F, // $D47F + #$D480, // $D480 + #$D481, // $D481 + #$D482, // $D482 + #$D483, // $D483 + #$D484, // $D484 + #$D485, // $D485 + #$D486, // $D486 + #$D487, // $D487 + #$D488, // $D488 + #$D489, // $D489 + #$D48A, // $D48A + #$D48B, // $D48B + #$D48C, // $D48C + #$D48D, // $D48D + #$D48E, // $D48E + #$D48F, // $D48F + #$D490, // $D490 + #$D491, // $D491 + #$D492, // $D492 + #$D493, // $D493 + #$D494, // $D494 + #$D495, // $D495 + #$D496, // $D496 + #$D497, // $D497 + #$D498, // $D498 + #$D499, // $D499 + #$D49A, // $D49A + #$D49B, // $D49B + #$D49C, // $D49C + #$D49D, // $D49D + #$D49E, // $D49E + #$D49F, // $D49F + #$D4A0, // $D4A0 + #$D4A1, // $D4A1 + #$D4A2, // $D4A2 + #$D4A3, // $D4A3 + #$D4A4, // $D4A4 + #$D4A5, // $D4A5 + #$D4A6, // $D4A6 + #$D4A7, // $D4A7 + #$D4A8, // $D4A8 + #$D4A9, // $D4A9 + #$D4AA, // $D4AA + #$D4AB, // $D4AB + #$D4AC, // $D4AC + #$D4AD, // $D4AD + #$D4AE, // $D4AE + #$D4AF, // $D4AF + #$D4B0, // $D4B0 + #$D4B1, // $D4B1 + #$D4B2, // $D4B2 + #$D4B3, // $D4B3 + #$D4B4, // $D4B4 + #$D4B5, // $D4B5 + #$D4B6, // $D4B6 + #$D4B7, // $D4B7 + #$D4B8, // $D4B8 + #$D4B9, // $D4B9 + #$D4BA, // $D4BA + #$D4BB, // $D4BB + #$D4BC, // $D4BC + #$D4BD, // $D4BD + #$D4BE, // $D4BE + #$D4BF, // $D4BF + #$D4C0, // $D4C0 + #$D4C1, // $D4C1 + #$D4C2, // $D4C2 + #$D4C3, // $D4C3 + #$D4C4, // $D4C4 + #$D4C5, // $D4C5 + #$D4C6, // $D4C6 + #$D4C7, // $D4C7 + #$D4C8, // $D4C8 + #$D4C9, // $D4C9 + #$D4CA, // $D4CA + #$D4CB, // $D4CB + #$D4CC, // $D4CC + #$D4CD, // $D4CD + #$D4CE, // $D4CE + #$D4CF, // $D4CF + #$D4D0, // $D4D0 + #$D4D1, // $D4D1 + #$D4D2, // $D4D2 + #$D4D3, // $D4D3 + #$D4D4, // $D4D4 + #$D4D5, // $D4D5 + #$D4D6, // $D4D6 + #$D4D7, // $D4D7 + #$D4D8, // $D4D8 + #$D4D9, // $D4D9 + #$D4DA, // $D4DA + #$D4DB, // $D4DB + #$D4DC, // $D4DC + #$D4DD, // $D4DD + #$D4DE, // $D4DE + #$D4DF, // $D4DF + #$D4E0, // $D4E0 + #$D4E1, // $D4E1 + #$D4E2, // $D4E2 + #$D4E3, // $D4E3 + #$D4E4, // $D4E4 + #$D4E5, // $D4E5 + #$D4E6, // $D4E6 + #$D4E7, // $D4E7 + #$D4E8, // $D4E8 + #$D4E9, // $D4E9 + #$D4EA, // $D4EA + #$D4EB, // $D4EB + #$D4EC, // $D4EC + #$D4ED, // $D4ED + #$D4EE, // $D4EE + #$D4EF, // $D4EF + #$D4F0, // $D4F0 + #$D4F1, // $D4F1 + #$D4F2, // $D4F2 + #$D4F3, // $D4F3 + #$D4F4, // $D4F4 + #$D4F5, // $D4F5 + #$D4F6, // $D4F6 + #$D4F7, // $D4F7 + #$D4F8, // $D4F8 + #$D4F9, // $D4F9 + #$D4FA, // $D4FA + #$D4FB, // $D4FB + #$D4FC, // $D4FC + #$D4FD, // $D4FD + #$D4FE, // $D4FE + #$D4FF, // $D4FF + #$D500, // $D500 + #$D501, // $D501 + #$D502, // $D502 + #$D503, // $D503 + #$D504, // $D504 + #$D505, // $D505 + #$D506, // $D506 + #$D507, // $D507 + #$D508, // $D508 + #$D509, // $D509 + #$D50A, // $D50A + #$D50B, // $D50B + #$D50C, // $D50C + #$D50D, // $D50D + #$D50E, // $D50E + #$D50F, // $D50F + #$D510, // $D510 + #$D511, // $D511 + #$D512, // $D512 + #$D513, // $D513 + #$D514, // $D514 + #$D515, // $D515 + #$D516, // $D516 + #$D517, // $D517 + #$D518, // $D518 + #$D519, // $D519 + #$D51A, // $D51A + #$D51B, // $D51B + #$D51C, // $D51C + #$D51D, // $D51D + #$D51E, // $D51E + #$D51F, // $D51F + #$D520, // $D520 + #$D521, // $D521 + #$D522, // $D522 + #$D523, // $D523 + #$D524, // $D524 + #$D525, // $D525 + #$D526, // $D526 + #$D527, // $D527 + #$D528, // $D528 + #$D529, // $D529 + #$D52A, // $D52A + #$D52B, // $D52B + #$D52C, // $D52C + #$D52D, // $D52D + #$D52E, // $D52E + #$D52F, // $D52F + #$D530, // $D530 + #$D531, // $D531 + #$D532, // $D532 + #$D533, // $D533 + #$D534, // $D534 + #$D535, // $D535 + #$D536, // $D536 + #$D537, // $D537 + #$D538, // $D538 + #$D539, // $D539 + #$D53A, // $D53A + #$D53B, // $D53B + #$D53C, // $D53C + #$D53D, // $D53D + #$D53E, // $D53E + #$D53F, // $D53F + #$D540, // $D540 + #$D541, // $D541 + #$D542, // $D542 + #$D543, // $D543 + #$D544, // $D544 + #$D545, // $D545 + #$D546, // $D546 + #$D547, // $D547 + #$D548, // $D548 + #$D549, // $D549 + #$D54A, // $D54A + #$D54B, // $D54B + #$D54C, // $D54C + #$D54D, // $D54D + #$D54E, // $D54E + #$D54F, // $D54F + #$D550, // $D550 + #$D551, // $D551 + #$D552, // $D552 + #$D553, // $D553 + #$D554, // $D554 + #$D555, // $D555 + #$D556, // $D556 + #$D557, // $D557 + #$D558, // $D558 + #$D559, // $D559 + #$D55A, // $D55A + #$D55B, // $D55B + #$D55C, // $D55C + #$D55D, // $D55D + #$D55E, // $D55E + #$D55F, // $D55F + #$D560, // $D560 + #$D561, // $D561 + #$D562, // $D562 + #$D563, // $D563 + #$D564, // $D564 + #$D565, // $D565 + #$D566, // $D566 + #$D567, // $D567 + #$D568, // $D568 + #$D569, // $D569 + #$D56A, // $D56A + #$D56B, // $D56B + #$D56C, // $D56C + #$D56D, // $D56D + #$D56E, // $D56E + #$D56F, // $D56F + #$D570, // $D570 + #$D571, // $D571 + #$D572, // $D572 + #$D573, // $D573 + #$D574, // $D574 + #$D575, // $D575 + #$D576, // $D576 + #$D577, // $D577 + #$D578, // $D578 + #$D579, // $D579 + #$D57A, // $D57A + #$D57B, // $D57B + #$D57C, // $D57C + #$D57D, // $D57D + #$D57E, // $D57E + #$D57F, // $D57F + #$D580, // $D580 + #$D581, // $D581 + #$D582, // $D582 + #$D583, // $D583 + #$D584, // $D584 + #$D585, // $D585 + #$D586, // $D586 + #$D587, // $D587 + #$D588, // $D588 + #$D589, // $D589 + #$D58A, // $D58A + #$D58B, // $D58B + #$D58C, // $D58C + #$D58D, // $D58D + #$D58E, // $D58E + #$D58F, // $D58F + #$D590, // $D590 + #$D591, // $D591 + #$D592, // $D592 + #$D593, // $D593 + #$D594, // $D594 + #$D595, // $D595 + #$D596, // $D596 + #$D597, // $D597 + #$D598, // $D598 + #$D599, // $D599 + #$D59A, // $D59A + #$D59B, // $D59B + #$D59C, // $D59C + #$D59D, // $D59D + #$D59E, // $D59E + #$D59F, // $D59F + #$D5A0, // $D5A0 + #$D5A1, // $D5A1 + #$D5A2, // $D5A2 + #$D5A3, // $D5A3 + #$D5A4, // $D5A4 + #$D5A5, // $D5A5 + #$D5A6, // $D5A6 + #$D5A7, // $D5A7 + #$D5A8, // $D5A8 + #$D5A9, // $D5A9 + #$D5AA, // $D5AA + #$D5AB, // $D5AB + #$D5AC, // $D5AC + #$D5AD, // $D5AD + #$D5AE, // $D5AE + #$D5AF, // $D5AF + #$D5B0, // $D5B0 + #$D5B1, // $D5B1 + #$D5B2, // $D5B2 + #$D5B3, // $D5B3 + #$D5B4, // $D5B4 + #$D5B5, // $D5B5 + #$D5B6, // $D5B6 + #$D5B7, // $D5B7 + #$D5B8, // $D5B8 + #$D5B9, // $D5B9 + #$D5BA, // $D5BA + #$D5BB, // $D5BB + #$D5BC, // $D5BC + #$D5BD, // $D5BD + #$D5BE, // $D5BE + #$D5BF, // $D5BF + #$D5C0, // $D5C0 + #$D5C1, // $D5C1 + #$D5C2, // $D5C2 + #$D5C3, // $D5C3 + #$D5C4, // $D5C4 + #$D5C5, // $D5C5 + #$D5C6, // $D5C6 + #$D5C7, // $D5C7 + #$D5C8, // $D5C8 + #$D5C9, // $D5C9 + #$D5CA, // $D5CA + #$D5CB, // $D5CB + #$D5CC, // $D5CC + #$D5CD, // $D5CD + #$D5CE, // $D5CE + #$D5CF, // $D5CF + #$D5D0, // $D5D0 + #$D5D1, // $D5D1 + #$D5D2, // $D5D2 + #$D5D3, // $D5D3 + #$D5D4, // $D5D4 + #$D5D5, // $D5D5 + #$D5D6, // $D5D6 + #$D5D7, // $D5D7 + #$D5D8, // $D5D8 + #$D5D9, // $D5D9 + #$D5DA, // $D5DA + #$D5DB, // $D5DB + #$D5DC, // $D5DC + #$D5DD, // $D5DD + #$D5DE, // $D5DE + #$D5DF, // $D5DF + #$D5E0, // $D5E0 + #$D5E1, // $D5E1 + #$D5E2, // $D5E2 + #$D5E3, // $D5E3 + #$D5E4, // $D5E4 + #$D5E5, // $D5E5 + #$D5E6, // $D5E6 + #$D5E7, // $D5E7 + #$D5E8, // $D5E8 + #$D5E9, // $D5E9 + #$D5EA, // $D5EA + #$D5EB, // $D5EB + #$D5EC, // $D5EC + #$D5ED, // $D5ED + #$D5EE, // $D5EE + #$D5EF, // $D5EF + #$D5F0, // $D5F0 + #$D5F1, // $D5F1 + #$D5F2, // $D5F2 + #$D5F3, // $D5F3 + #$D5F4, // $D5F4 + #$D5F5, // $D5F5 + #$D5F6, // $D5F6 + #$D5F7, // $D5F7 + #$D5F8, // $D5F8 + #$D5F9, // $D5F9 + #$D5FA, // $D5FA + #$D5FB, // $D5FB + #$D5FC, // $D5FC + #$D5FD, // $D5FD + #$D5FE, // $D5FE + #$D5FF, // $D5FF + #$D600, // $D600 + #$D601, // $D601 + #$D602, // $D602 + #$D603, // $D603 + #$D604, // $D604 + #$D605, // $D605 + #$D606, // $D606 + #$D607, // $D607 + #$D608, // $D608 + #$D609, // $D609 + #$D60A, // $D60A + #$D60B, // $D60B + #$D60C, // $D60C + #$D60D, // $D60D + #$D60E, // $D60E + #$D60F, // $D60F + #$D610, // $D610 + #$D611, // $D611 + #$D612, // $D612 + #$D613, // $D613 + #$D614, // $D614 + #$D615, // $D615 + #$D616, // $D616 + #$D617, // $D617 + #$D618, // $D618 + #$D619, // $D619 + #$D61A, // $D61A + #$D61B, // $D61B + #$D61C, // $D61C + #$D61D, // $D61D + #$D61E, // $D61E + #$D61F, // $D61F + #$D620, // $D620 + #$D621, // $D621 + #$D622, // $D622 + #$D623, // $D623 + #$D624, // $D624 + #$D625, // $D625 + #$D626, // $D626 + #$D627, // $D627 + #$D628, // $D628 + #$D629, // $D629 + #$D62A, // $D62A + #$D62B, // $D62B + #$D62C, // $D62C + #$D62D, // $D62D + #$D62E, // $D62E + #$D62F, // $D62F + #$D630, // $D630 + #$D631, // $D631 + #$D632, // $D632 + #$D633, // $D633 + #$D634, // $D634 + #$D635, // $D635 + #$D636, // $D636 + #$D637, // $D637 + #$D638, // $D638 + #$D639, // $D639 + #$D63A, // $D63A + #$D63B, // $D63B + #$D63C, // $D63C + #$D63D, // $D63D + #$D63E, // $D63E + #$D63F, // $D63F + #$D640, // $D640 + #$D641, // $D641 + #$D642, // $D642 + #$D643, // $D643 + #$D644, // $D644 + #$D645, // $D645 + #$D646, // $D646 + #$D647, // $D647 + #$D648, // $D648 + #$D649, // $D649 + #$D64A, // $D64A + #$D64B, // $D64B + #$D64C, // $D64C + #$D64D, // $D64D + #$D64E, // $D64E + #$D64F, // $D64F + #$D650, // $D650 + #$D651, // $D651 + #$D652, // $D652 + #$D653, // $D653 + #$D654, // $D654 + #$D655, // $D655 + #$D656, // $D656 + #$D657, // $D657 + #$D658, // $D658 + #$D659, // $D659 + #$D65A, // $D65A + #$D65B, // $D65B + #$D65C, // $D65C + #$D65D, // $D65D + #$D65E, // $D65E + #$D65F, // $D65F + #$D660, // $D660 + #$D661, // $D661 + #$D662, // $D662 + #$D663, // $D663 + #$D664, // $D664 + #$D665, // $D665 + #$D666, // $D666 + #$D667, // $D667 + #$D668, // $D668 + #$D669, // $D669 + #$D66A, // $D66A + #$D66B, // $D66B + #$D66C, // $D66C + #$D66D, // $D66D + #$D66E, // $D66E + #$D66F, // $D66F + #$D670, // $D670 + #$D671, // $D671 + #$D672, // $D672 + #$D673, // $D673 + #$D674, // $D674 + #$D675, // $D675 + #$D676, // $D676 + #$D677, // $D677 + #$D678, // $D678 + #$D679, // $D679 + #$D67A, // $D67A + #$D67B, // $D67B + #$D67C, // $D67C + #$D67D, // $D67D + #$D67E, // $D67E + #$D67F, // $D67F + #$D680, // $D680 + #$D681, // $D681 + #$D682, // $D682 + #$D683, // $D683 + #$D684, // $D684 + #$D685, // $D685 + #$D686, // $D686 + #$D687, // $D687 + #$D688, // $D688 + #$D689, // $D689 + #$D68A, // $D68A + #$D68B, // $D68B + #$D68C, // $D68C + #$D68D, // $D68D + #$D68E, // $D68E + #$D68F, // $D68F + #$D690, // $D690 + #$D691, // $D691 + #$D692, // $D692 + #$D693, // $D693 + #$D694, // $D694 + #$D695, // $D695 + #$D696, // $D696 + #$D697, // $D697 + #$D698, // $D698 + #$D699, // $D699 + #$D69A, // $D69A + #$D69B, // $D69B + #$D69C, // $D69C + #$D69D, // $D69D + #$D69E, // $D69E + #$D69F, // $D69F + #$D6A0, // $D6A0 + #$D6A1, // $D6A1 + #$D6A2, // $D6A2 + #$D6A3, // $D6A3 + #$D6A4, // $D6A4 + #$D6A5, // $D6A5 + #$D6A6, // $D6A6 + #$D6A7, // $D6A7 + #$D6A8, // $D6A8 + #$D6A9, // $D6A9 + #$D6AA, // $D6AA + #$D6AB, // $D6AB + #$D6AC, // $D6AC + #$D6AD, // $D6AD + #$D6AE, // $D6AE + #$D6AF, // $D6AF + #$D6B0, // $D6B0 + #$D6B1, // $D6B1 + #$D6B2, // $D6B2 + #$D6B3, // $D6B3 + #$D6B4, // $D6B4 + #$D6B5, // $D6B5 + #$D6B6, // $D6B6 + #$D6B7, // $D6B7 + #$D6B8, // $D6B8 + #$D6B9, // $D6B9 + #$D6BA, // $D6BA + #$D6BB, // $D6BB + #$D6BC, // $D6BC + #$D6BD, // $D6BD + #$D6BE, // $D6BE + #$D6BF, // $D6BF + #$D6C0, // $D6C0 + #$D6C1, // $D6C1 + #$D6C2, // $D6C2 + #$D6C3, // $D6C3 + #$D6C4, // $D6C4 + #$D6C5, // $D6C5 + #$D6C6, // $D6C6 + #$D6C7, // $D6C7 + #$D6C8, // $D6C8 + #$D6C9, // $D6C9 + #$D6CA, // $D6CA + #$D6CB, // $D6CB + #$D6CC, // $D6CC + #$D6CD, // $D6CD + #$D6CE, // $D6CE + #$D6CF, // $D6CF + #$D6D0, // $D6D0 + #$D6D1, // $D6D1 + #$D6D2, // $D6D2 + #$D6D3, // $D6D3 + #$D6D4, // $D6D4 + #$D6D5, // $D6D5 + #$D6D6, // $D6D6 + #$D6D7, // $D6D7 + #$D6D8, // $D6D8 + #$D6D9, // $D6D9 + #$D6DA, // $D6DA + #$D6DB, // $D6DB + #$D6DC, // $D6DC + #$D6DD, // $D6DD + #$D6DE, // $D6DE + #$D6DF, // $D6DF + #$D6E0, // $D6E0 + #$D6E1, // $D6E1 + #$D6E2, // $D6E2 + #$D6E3, // $D6E3 + #$D6E4, // $D6E4 + #$D6E5, // $D6E5 + #$D6E6, // $D6E6 + #$D6E7, // $D6E7 + #$D6E8, // $D6E8 + #$D6E9, // $D6E9 + #$D6EA, // $D6EA + #$D6EB, // $D6EB + #$D6EC, // $D6EC + #$D6ED, // $D6ED + #$D6EE, // $D6EE + #$D6EF, // $D6EF + #$D6F0, // $D6F0 + #$D6F1, // $D6F1 + #$D6F2, // $D6F2 + #$D6F3, // $D6F3 + #$D6F4, // $D6F4 + #$D6F5, // $D6F5 + #$D6F6, // $D6F6 + #$D6F7, // $D6F7 + #$D6F8, // $D6F8 + #$D6F9, // $D6F9 + #$D6FA, // $D6FA + #$D6FB, // $D6FB + #$D6FC, // $D6FC + #$D6FD, // $D6FD + #$D6FE, // $D6FE + #$D6FF, // $D6FF + #$D700, // $D700 + #$D701, // $D701 + #$D702, // $D702 + #$D703, // $D703 + #$D704, // $D704 + #$D705, // $D705 + #$D706, // $D706 + #$D707, // $D707 + #$D708, // $D708 + #$D709, // $D709 + #$D70A, // $D70A + #$D70B, // $D70B + #$D70C, // $D70C + #$D70D, // $D70D + #$D70E, // $D70E + #$D70F, // $D70F + #$D710, // $D710 + #$D711, // $D711 + #$D712, // $D712 + #$D713, // $D713 + #$D714, // $D714 + #$D715, // $D715 + #$D716, // $D716 + #$D717, // $D717 + #$D718, // $D718 + #$D719, // $D719 + #$D71A, // $D71A + #$D71B, // $D71B + #$D71C, // $D71C + #$D71D, // $D71D + #$D71E, // $D71E + #$D71F, // $D71F + #$D720, // $D720 + #$D721, // $D721 + #$D722, // $D722 + #$D723, // $D723 + #$D724, // $D724 + #$D725, // $D725 + #$D726, // $D726 + #$D727, // $D727 + #$D728, // $D728 + #$D729, // $D729 + #$D72A, // $D72A + #$D72B, // $D72B + #$D72C, // $D72C + #$D72D, // $D72D + #$D72E, // $D72E + #$D72F, // $D72F + #$D730, // $D730 + #$D731, // $D731 + #$D732, // $D732 + #$D733, // $D733 + #$D734, // $D734 + #$D735, // $D735 + #$D736, // $D736 + #$D737, // $D737 + #$D738, // $D738 + #$D739, // $D739 + #$D73A, // $D73A + #$D73B, // $D73B + #$D73C, // $D73C + #$D73D, // $D73D + #$D73E, // $D73E + #$D73F, // $D73F + #$D740, // $D740 + #$D741, // $D741 + #$D742, // $D742 + #$D743, // $D743 + #$D744, // $D744 + #$D745, // $D745 + #$D746, // $D746 + #$D747, // $D747 + #$D748, // $D748 + #$D749, // $D749 + #$D74A, // $D74A + #$D74B, // $D74B + #$D74C, // $D74C + #$D74D, // $D74D + #$D74E, // $D74E + #$D74F, // $D74F + #$D750, // $D750 + #$D751, // $D751 + #$D752, // $D752 + #$D753, // $D753 + #$D754, // $D754 + #$D755, // $D755 + #$D756, // $D756 + #$D757, // $D757 + #$D758, // $D758 + #$D759, // $D759 + #$D75A, // $D75A + #$D75B, // $D75B + #$D75C, // $D75C + #$D75D, // $D75D + #$D75E, // $D75E + #$D75F, // $D75F + #$D760, // $D760 + #$D761, // $D761 + #$D762, // $D762 + #$D763, // $D763 + #$D764, // $D764 + #$D765, // $D765 + #$D766, // $D766 + #$D767, // $D767 + #$D768, // $D768 + #$D769, // $D769 + #$D76A, // $D76A + #$D76B, // $D76B + #$D76C, // $D76C + #$D76D, // $D76D + #$D76E, // $D76E + #$D76F, // $D76F + #$D770, // $D770 + #$D771, // $D771 + #$D772, // $D772 + #$D773, // $D773 + #$D774, // $D774 + #$D775, // $D775 + #$D776, // $D776 + #$D777, // $D777 + #$D778, // $D778 + #$D779, // $D779 + #$D77A, // $D77A + #$D77B, // $D77B + #$D77C, // $D77C + #$D77D, // $D77D + #$D77E, // $D77E + #$D77F, // $D77F + #$D780, // $D780 + #$D781, // $D781 + #$D782, // $D782 + #$D783, // $D783 + #$D784, // $D784 + #$D785, // $D785 + #$D786, // $D786 + #$D787, // $D787 + #$D788, // $D788 + #$D789, // $D789 + #$D78A, // $D78A + #$D78B, // $D78B + #$D78C, // $D78C + #$D78D, // $D78D + #$D78E, // $D78E + #$D78F, // $D78F + #$D790, // $D790 + #$D791, // $D791 + #$D792, // $D792 + #$D793, // $D793 + #$D794, // $D794 + #$D795, // $D795 + #$D796, // $D796 + #$D797, // $D797 + #$D798, // $D798 + #$D799, // $D799 + #$D79A, // $D79A + #$D79B, // $D79B + #$D79C, // $D79C + #$D79D, // $D79D + #$D79E, // $D79E + #$D79F, // $D79F + #$D7A0, // $D7A0 + #$D7A1, // $D7A1 + #$D7A2, // $D7A2 + #$D7A3, // $D7A3 + #$D7A4, // $D7A4 + #$D7A5, // $D7A5 + #$D7A6, // $D7A6 + #$D7A7, // $D7A7 + #$D7A8, // $D7A8 + #$D7A9, // $D7A9 + #$D7AA, // $D7AA + #$D7AB, // $D7AB + #$D7AC, // $D7AC + #$D7AD, // $D7AD + #$D7AE, // $D7AE + #$D7AF, // $D7AF + #$D7B0, // $D7B0 + #$D7B1, // $D7B1 + #$D7B2, // $D7B2 + #$D7B3, // $D7B3 + #$D7B4, // $D7B4 + #$D7B5, // $D7B5 + #$D7B6, // $D7B6 + #$D7B7, // $D7B7 + #$D7B8, // $D7B8 + #$D7B9, // $D7B9 + #$D7BA, // $D7BA + #$D7BB, // $D7BB + #$D7BC, // $D7BC + #$D7BD, // $D7BD + #$D7BE, // $D7BE + #$D7BF, // $D7BF + #$D7C0, // $D7C0 + #$D7C1, // $D7C1 + #$D7C2, // $D7C2 + #$D7C3, // $D7C3 + #$D7C4, // $D7C4 + #$D7C5, // $D7C5 + #$D7C6, // $D7C6 + #$D7C7, // $D7C7 + #$D7C8, // $D7C8 + #$D7C9, // $D7C9 + #$D7CA, // $D7CA + #$D7CB, // $D7CB + #$D7CC, // $D7CC + #$D7CD, // $D7CD + #$D7CE, // $D7CE + #$D7CF, // $D7CF + #$D7D0, // $D7D0 + #$D7D1, // $D7D1 + #$D7D2, // $D7D2 + #$D7D3, // $D7D3 + #$D7D4, // $D7D4 + #$D7D5, // $D7D5 + #$D7D6, // $D7D6 + #$D7D7, // $D7D7 + #$D7D8, // $D7D8 + #$D7D9, // $D7D9 + #$D7DA, // $D7DA + #$D7DB, // $D7DB + #$D7DC, // $D7DC + #$D7DD, // $D7DD + #$D7DE, // $D7DE + #$D7DF, // $D7DF + #$D7E0, // $D7E0 + #$D7E1, // $D7E1 + #$D7E2, // $D7E2 + #$D7E3, // $D7E3 + #$D7E4, // $D7E4 + #$D7E5, // $D7E5 + #$D7E6, // $D7E6 + #$D7E7, // $D7E7 + #$D7E8, // $D7E8 + #$D7E9, // $D7E9 + #$D7EA, // $D7EA + #$D7EB, // $D7EB + #$D7EC, // $D7EC + #$D7ED, // $D7ED + #$D7EE, // $D7EE + #$D7EF, // $D7EF + #$D7F0, // $D7F0 + #$D7F1, // $D7F1 + #$D7F2, // $D7F2 + #$D7F3, // $D7F3 + #$D7F4, // $D7F4 + #$D7F5, // $D7F5 + #$D7F6, // $D7F6 + #$D7F7, // $D7F7 + #$D7F8, // $D7F8 + #$D7F9, // $D7F9 + #$D7FA, // $D7FA + #$D7FB, // $D7FB + #$D7FC, // $D7FC + #$D7FD, // $D7FD + #$D7FE, // $D7FE + #$D7FF, // $D7FF + #$D800, // $D800 + #$D801, // $D801 + #$D802, // $D802 + #$D803, // $D803 + #$D804, // $D804 + #$D805, // $D805 + #$D806, // $D806 + #$D807, // $D807 + #$D808, // $D808 + #$D809, // $D809 + #$D80A, // $D80A + #$D80B, // $D80B + #$D80C, // $D80C + #$D80D, // $D80D + #$D80E, // $D80E + #$D80F, // $D80F + #$D810, // $D810 + #$D811, // $D811 + #$D812, // $D812 + #$D813, // $D813 + #$D814, // $D814 + #$D815, // $D815 + #$D816, // $D816 + #$D817, // $D817 + #$D818, // $D818 + #$D819, // $D819 + #$D81A, // $D81A + #$D81B, // $D81B + #$D81C, // $D81C + #$D81D, // $D81D + #$D81E, // $D81E + #$D81F, // $D81F + #$D820, // $D820 + #$D821, // $D821 + #$D822, // $D822 + #$D823, // $D823 + #$D824, // $D824 + #$D825, // $D825 + #$D826, // $D826 + #$D827, // $D827 + #$D828, // $D828 + #$D829, // $D829 + #$D82A, // $D82A + #$D82B, // $D82B + #$D82C, // $D82C + #$D82D, // $D82D + #$D82E, // $D82E + #$D82F, // $D82F + #$D830, // $D830 + #$D831, // $D831 + #$D832, // $D832 + #$D833, // $D833 + #$D834, // $D834 + #$D835, // $D835 + #$D836, // $D836 + #$D837, // $D837 + #$D838, // $D838 + #$D839, // $D839 + #$D83A, // $D83A + #$D83B, // $D83B + #$D83C, // $D83C + #$D83D, // $D83D + #$D83E, // $D83E + #$D83F, // $D83F + #$D840, // $D840 + #$D841, // $D841 + #$D842, // $D842 + #$D843, // $D843 + #$D844, // $D844 + #$D845, // $D845 + #$D846, // $D846 + #$D847, // $D847 + #$D848, // $D848 + #$D849, // $D849 + #$D84A, // $D84A + #$D84B, // $D84B + #$D84C, // $D84C + #$D84D, // $D84D + #$D84E, // $D84E + #$D84F, // $D84F + #$D850, // $D850 + #$D851, // $D851 + #$D852, // $D852 + #$D853, // $D853 + #$D854, // $D854 + #$D855, // $D855 + #$D856, // $D856 + #$D857, // $D857 + #$D858, // $D858 + #$D859, // $D859 + #$D85A, // $D85A + #$D85B, // $D85B + #$D85C, // $D85C + #$D85D, // $D85D + #$D85E, // $D85E + #$D85F, // $D85F + #$D860, // $D860 + #$D861, // $D861 + #$D862, // $D862 + #$D863, // $D863 + #$D864, // $D864 + #$D865, // $D865 + #$D866, // $D866 + #$D867, // $D867 + #$D868, // $D868 + #$D869, // $D869 + #$D86A, // $D86A + #$D86B, // $D86B + #$D86C, // $D86C + #$D86D, // $D86D + #$D86E, // $D86E + #$D86F, // $D86F + #$D870, // $D870 + #$D871, // $D871 + #$D872, // $D872 + #$D873, // $D873 + #$D874, // $D874 + #$D875, // $D875 + #$D876, // $D876 + #$D877, // $D877 + #$D878, // $D878 + #$D879, // $D879 + #$D87A, // $D87A + #$D87B, // $D87B + #$D87C, // $D87C + #$D87D, // $D87D + #$D87E, // $D87E + #$D87F, // $D87F + #$D880, // $D880 + #$D881, // $D881 + #$D882, // $D882 + #$D883, // $D883 + #$D884, // $D884 + #$D885, // $D885 + #$D886, // $D886 + #$D887, // $D887 + #$D888, // $D888 + #$D889, // $D889 + #$D88A, // $D88A + #$D88B, // $D88B + #$D88C, // $D88C + #$D88D, // $D88D + #$D88E, // $D88E + #$D88F, // $D88F + #$D890, // $D890 + #$D891, // $D891 + #$D892, // $D892 + #$D893, // $D893 + #$D894, // $D894 + #$D895, // $D895 + #$D896, // $D896 + #$D897, // $D897 + #$D898, // $D898 + #$D899, // $D899 + #$D89A, // $D89A + #$D89B, // $D89B + #$D89C, // $D89C + #$D89D, // $D89D + #$D89E, // $D89E + #$D89F, // $D89F + #$D8A0, // $D8A0 + #$D8A1, // $D8A1 + #$D8A2, // $D8A2 + #$D8A3, // $D8A3 + #$D8A4, // $D8A4 + #$D8A5, // $D8A5 + #$D8A6, // $D8A6 + #$D8A7, // $D8A7 + #$D8A8, // $D8A8 + #$D8A9, // $D8A9 + #$D8AA, // $D8AA + #$D8AB, // $D8AB + #$D8AC, // $D8AC + #$D8AD, // $D8AD + #$D8AE, // $D8AE + #$D8AF, // $D8AF + #$D8B0, // $D8B0 + #$D8B1, // $D8B1 + #$D8B2, // $D8B2 + #$D8B3, // $D8B3 + #$D8B4, // $D8B4 + #$D8B5, // $D8B5 + #$D8B6, // $D8B6 + #$D8B7, // $D8B7 + #$D8B8, // $D8B8 + #$D8B9, // $D8B9 + #$D8BA, // $D8BA + #$D8BB, // $D8BB + #$D8BC, // $D8BC + #$D8BD, // $D8BD + #$D8BE, // $D8BE + #$D8BF, // $D8BF + #$D8C0, // $D8C0 + #$D8C1, // $D8C1 + #$D8C2, // $D8C2 + #$D8C3, // $D8C3 + #$D8C4, // $D8C4 + #$D8C5, // $D8C5 + #$D8C6, // $D8C6 + #$D8C7, // $D8C7 + #$D8C8, // $D8C8 + #$D8C9, // $D8C9 + #$D8CA, // $D8CA + #$D8CB, // $D8CB + #$D8CC, // $D8CC + #$D8CD, // $D8CD + #$D8CE, // $D8CE + #$D8CF, // $D8CF + #$D8D0, // $D8D0 + #$D8D1, // $D8D1 + #$D8D2, // $D8D2 + #$D8D3, // $D8D3 + #$D8D4, // $D8D4 + #$D8D5, // $D8D5 + #$D8D6, // $D8D6 + #$D8D7, // $D8D7 + #$D8D8, // $D8D8 + #$D8D9, // $D8D9 + #$D8DA, // $D8DA + #$D8DB, // $D8DB + #$D8DC, // $D8DC + #$D8DD, // $D8DD + #$D8DE, // $D8DE + #$D8DF, // $D8DF + #$D8E0, // $D8E0 + #$D8E1, // $D8E1 + #$D8E2, // $D8E2 + #$D8E3, // $D8E3 + #$D8E4, // $D8E4 + #$D8E5, // $D8E5 + #$D8E6, // $D8E6 + #$D8E7, // $D8E7 + #$D8E8, // $D8E8 + #$D8E9, // $D8E9 + #$D8EA, // $D8EA + #$D8EB, // $D8EB + #$D8EC, // $D8EC + #$D8ED, // $D8ED + #$D8EE, // $D8EE + #$D8EF, // $D8EF + #$D8F0, // $D8F0 + #$D8F1, // $D8F1 + #$D8F2, // $D8F2 + #$D8F3, // $D8F3 + #$D8F4, // $D8F4 + #$D8F5, // $D8F5 + #$D8F6, // $D8F6 + #$D8F7, // $D8F7 + #$D8F8, // $D8F8 + #$D8F9, // $D8F9 + #$D8FA, // $D8FA + #$D8FB, // $D8FB + #$D8FC, // $D8FC + #$D8FD, // $D8FD + #$D8FE, // $D8FE + #$D8FF, // $D8FF + #$D900, // $D900 + #$D901, // $D901 + #$D902, // $D902 + #$D903, // $D903 + #$D904, // $D904 + #$D905, // $D905 + #$D906, // $D906 + #$D907, // $D907 + #$D908, // $D908 + #$D909, // $D909 + #$D90A, // $D90A + #$D90B, // $D90B + #$D90C, // $D90C + #$D90D, // $D90D + #$D90E, // $D90E + #$D90F, // $D90F + #$D910, // $D910 + #$D911, // $D911 + #$D912, // $D912 + #$D913, // $D913 + #$D914, // $D914 + #$D915, // $D915 + #$D916, // $D916 + #$D917, // $D917 + #$D918, // $D918 + #$D919, // $D919 + #$D91A, // $D91A + #$D91B, // $D91B + #$D91C, // $D91C + #$D91D, // $D91D + #$D91E, // $D91E + #$D91F, // $D91F + #$D920, // $D920 + #$D921, // $D921 + #$D922, // $D922 + #$D923, // $D923 + #$D924, // $D924 + #$D925, // $D925 + #$D926, // $D926 + #$D927, // $D927 + #$D928, // $D928 + #$D929, // $D929 + #$D92A, // $D92A + #$D92B, // $D92B + #$D92C, // $D92C + #$D92D, // $D92D + #$D92E, // $D92E + #$D92F, // $D92F + #$D930, // $D930 + #$D931, // $D931 + #$D932, // $D932 + #$D933, // $D933 + #$D934, // $D934 + #$D935, // $D935 + #$D936, // $D936 + #$D937, // $D937 + #$D938, // $D938 + #$D939, // $D939 + #$D93A, // $D93A + #$D93B, // $D93B + #$D93C, // $D93C + #$D93D, // $D93D + #$D93E, // $D93E + #$D93F, // $D93F + #$D940, // $D940 + #$D941, // $D941 + #$D942, // $D942 + #$D943, // $D943 + #$D944, // $D944 + #$D945, // $D945 + #$D946, // $D946 + #$D947, // $D947 + #$D948, // $D948 + #$D949, // $D949 + #$D94A, // $D94A + #$D94B, // $D94B + #$D94C, // $D94C + #$D94D, // $D94D + #$D94E, // $D94E + #$D94F, // $D94F + #$D950, // $D950 + #$D951, // $D951 + #$D952, // $D952 + #$D953, // $D953 + #$D954, // $D954 + #$D955, // $D955 + #$D956, // $D956 + #$D957, // $D957 + #$D958, // $D958 + #$D959, // $D959 + #$D95A, // $D95A + #$D95B, // $D95B + #$D95C, // $D95C + #$D95D, // $D95D + #$D95E, // $D95E + #$D95F, // $D95F + #$D960, // $D960 + #$D961, // $D961 + #$D962, // $D962 + #$D963, // $D963 + #$D964, // $D964 + #$D965, // $D965 + #$D966, // $D966 + #$D967, // $D967 + #$D968, // $D968 + #$D969, // $D969 + #$D96A, // $D96A + #$D96B, // $D96B + #$D96C, // $D96C + #$D96D, // $D96D + #$D96E, // $D96E + #$D96F, // $D96F + #$D970, // $D970 + #$D971, // $D971 + #$D972, // $D972 + #$D973, // $D973 + #$D974, // $D974 + #$D975, // $D975 + #$D976, // $D976 + #$D977, // $D977 + #$D978, // $D978 + #$D979, // $D979 + #$D97A, // $D97A + #$D97B, // $D97B + #$D97C, // $D97C + #$D97D, // $D97D + #$D97E, // $D97E + #$D97F, // $D97F + #$D980, // $D980 + #$D981, // $D981 + #$D982, // $D982 + #$D983, // $D983 + #$D984, // $D984 + #$D985, // $D985 + #$D986, // $D986 + #$D987, // $D987 + #$D988, // $D988 + #$D989, // $D989 + #$D98A, // $D98A + #$D98B, // $D98B + #$D98C, // $D98C + #$D98D, // $D98D + #$D98E, // $D98E + #$D98F, // $D98F + #$D990, // $D990 + #$D991, // $D991 + #$D992, // $D992 + #$D993, // $D993 + #$D994, // $D994 + #$D995, // $D995 + #$D996, // $D996 + #$D997, // $D997 + #$D998, // $D998 + #$D999, // $D999 + #$D99A, // $D99A + #$D99B, // $D99B + #$D99C, // $D99C + #$D99D, // $D99D + #$D99E, // $D99E + #$D99F, // $D99F + #$D9A0, // $D9A0 + #$D9A1, // $D9A1 + #$D9A2, // $D9A2 + #$D9A3, // $D9A3 + #$D9A4, // $D9A4 + #$D9A5, // $D9A5 + #$D9A6, // $D9A6 + #$D9A7, // $D9A7 + #$D9A8, // $D9A8 + #$D9A9, // $D9A9 + #$D9AA, // $D9AA + #$D9AB, // $D9AB + #$D9AC, // $D9AC + #$D9AD, // $D9AD + #$D9AE, // $D9AE + #$D9AF, // $D9AF + #$D9B0, // $D9B0 + #$D9B1, // $D9B1 + #$D9B2, // $D9B2 + #$D9B3, // $D9B3 + #$D9B4, // $D9B4 + #$D9B5, // $D9B5 + #$D9B6, // $D9B6 + #$D9B7, // $D9B7 + #$D9B8, // $D9B8 + #$D9B9, // $D9B9 + #$D9BA, // $D9BA + #$D9BB, // $D9BB + #$D9BC, // $D9BC + #$D9BD, // $D9BD + #$D9BE, // $D9BE + #$D9BF, // $D9BF + #$D9C0, // $D9C0 + #$D9C1, // $D9C1 + #$D9C2, // $D9C2 + #$D9C3, // $D9C3 + #$D9C4, // $D9C4 + #$D9C5, // $D9C5 + #$D9C6, // $D9C6 + #$D9C7, // $D9C7 + #$D9C8, // $D9C8 + #$D9C9, // $D9C9 + #$D9CA, // $D9CA + #$D9CB, // $D9CB + #$D9CC, // $D9CC + #$D9CD, // $D9CD + #$D9CE, // $D9CE + #$D9CF, // $D9CF + #$D9D0, // $D9D0 + #$D9D1, // $D9D1 + #$D9D2, // $D9D2 + #$D9D3, // $D9D3 + #$D9D4, // $D9D4 + #$D9D5, // $D9D5 + #$D9D6, // $D9D6 + #$D9D7, // $D9D7 + #$D9D8, // $D9D8 + #$D9D9, // $D9D9 + #$D9DA, // $D9DA + #$D9DB, // $D9DB + #$D9DC, // $D9DC + #$D9DD, // $D9DD + #$D9DE, // $D9DE + #$D9DF, // $D9DF + #$D9E0, // $D9E0 + #$D9E1, // $D9E1 + #$D9E2, // $D9E2 + #$D9E3, // $D9E3 + #$D9E4, // $D9E4 + #$D9E5, // $D9E5 + #$D9E6, // $D9E6 + #$D9E7, // $D9E7 + #$D9E8, // $D9E8 + #$D9E9, // $D9E9 + #$D9EA, // $D9EA + #$D9EB, // $D9EB + #$D9EC, // $D9EC + #$D9ED, // $D9ED + #$D9EE, // $D9EE + #$D9EF, // $D9EF + #$D9F0, // $D9F0 + #$D9F1, // $D9F1 + #$D9F2, // $D9F2 + #$D9F3, // $D9F3 + #$D9F4, // $D9F4 + #$D9F5, // $D9F5 + #$D9F6, // $D9F6 + #$D9F7, // $D9F7 + #$D9F8, // $D9F8 + #$D9F9, // $D9F9 + #$D9FA, // $D9FA + #$D9FB, // $D9FB + #$D9FC, // $D9FC + #$D9FD, // $D9FD + #$D9FE, // $D9FE + #$D9FF, // $D9FF + #$DA00, // $DA00 + #$DA01, // $DA01 + #$DA02, // $DA02 + #$DA03, // $DA03 + #$DA04, // $DA04 + #$DA05, // $DA05 + #$DA06, // $DA06 + #$DA07, // $DA07 + #$DA08, // $DA08 + #$DA09, // $DA09 + #$DA0A, // $DA0A + #$DA0B, // $DA0B + #$DA0C, // $DA0C + #$DA0D, // $DA0D + #$DA0E, // $DA0E + #$DA0F, // $DA0F + #$DA10, // $DA10 + #$DA11, // $DA11 + #$DA12, // $DA12 + #$DA13, // $DA13 + #$DA14, // $DA14 + #$DA15, // $DA15 + #$DA16, // $DA16 + #$DA17, // $DA17 + #$DA18, // $DA18 + #$DA19, // $DA19 + #$DA1A, // $DA1A + #$DA1B, // $DA1B + #$DA1C, // $DA1C + #$DA1D, // $DA1D + #$DA1E, // $DA1E + #$DA1F, // $DA1F + #$DA20, // $DA20 + #$DA21, // $DA21 + #$DA22, // $DA22 + #$DA23, // $DA23 + #$DA24, // $DA24 + #$DA25, // $DA25 + #$DA26, // $DA26 + #$DA27, // $DA27 + #$DA28, // $DA28 + #$DA29, // $DA29 + #$DA2A, // $DA2A + #$DA2B, // $DA2B + #$DA2C, // $DA2C + #$DA2D, // $DA2D + #$DA2E, // $DA2E + #$DA2F, // $DA2F + #$DA30, // $DA30 + #$DA31, // $DA31 + #$DA32, // $DA32 + #$DA33, // $DA33 + #$DA34, // $DA34 + #$DA35, // $DA35 + #$DA36, // $DA36 + #$DA37, // $DA37 + #$DA38, // $DA38 + #$DA39, // $DA39 + #$DA3A, // $DA3A + #$DA3B, // $DA3B + #$DA3C, // $DA3C + #$DA3D, // $DA3D + #$DA3E, // $DA3E + #$DA3F, // $DA3F + #$DA40, // $DA40 + #$DA41, // $DA41 + #$DA42, // $DA42 + #$DA43, // $DA43 + #$DA44, // $DA44 + #$DA45, // $DA45 + #$DA46, // $DA46 + #$DA47, // $DA47 + #$DA48, // $DA48 + #$DA49, // $DA49 + #$DA4A, // $DA4A + #$DA4B, // $DA4B + #$DA4C, // $DA4C + #$DA4D, // $DA4D + #$DA4E, // $DA4E + #$DA4F, // $DA4F + #$DA50, // $DA50 + #$DA51, // $DA51 + #$DA52, // $DA52 + #$DA53, // $DA53 + #$DA54, // $DA54 + #$DA55, // $DA55 + #$DA56, // $DA56 + #$DA57, // $DA57 + #$DA58, // $DA58 + #$DA59, // $DA59 + #$DA5A, // $DA5A + #$DA5B, // $DA5B + #$DA5C, // $DA5C + #$DA5D, // $DA5D + #$DA5E, // $DA5E + #$DA5F, // $DA5F + #$DA60, // $DA60 + #$DA61, // $DA61 + #$DA62, // $DA62 + #$DA63, // $DA63 + #$DA64, // $DA64 + #$DA65, // $DA65 + #$DA66, // $DA66 + #$DA67, // $DA67 + #$DA68, // $DA68 + #$DA69, // $DA69 + #$DA6A, // $DA6A + #$DA6B, // $DA6B + #$DA6C, // $DA6C + #$DA6D, // $DA6D + #$DA6E, // $DA6E + #$DA6F, // $DA6F + #$DA70, // $DA70 + #$DA71, // $DA71 + #$DA72, // $DA72 + #$DA73, // $DA73 + #$DA74, // $DA74 + #$DA75, // $DA75 + #$DA76, // $DA76 + #$DA77, // $DA77 + #$DA78, // $DA78 + #$DA79, // $DA79 + #$DA7A, // $DA7A + #$DA7B, // $DA7B + #$DA7C, // $DA7C + #$DA7D, // $DA7D + #$DA7E, // $DA7E + #$DA7F, // $DA7F + #$DA80, // $DA80 + #$DA81, // $DA81 + #$DA82, // $DA82 + #$DA83, // $DA83 + #$DA84, // $DA84 + #$DA85, // $DA85 + #$DA86, // $DA86 + #$DA87, // $DA87 + #$DA88, // $DA88 + #$DA89, // $DA89 + #$DA8A, // $DA8A + #$DA8B, // $DA8B + #$DA8C, // $DA8C + #$DA8D, // $DA8D + #$DA8E, // $DA8E + #$DA8F, // $DA8F + #$DA90, // $DA90 + #$DA91, // $DA91 + #$DA92, // $DA92 + #$DA93, // $DA93 + #$DA94, // $DA94 + #$DA95, // $DA95 + #$DA96, // $DA96 + #$DA97, // $DA97 + #$DA98, // $DA98 + #$DA99, // $DA99 + #$DA9A, // $DA9A + #$DA9B, // $DA9B + #$DA9C, // $DA9C + #$DA9D, // $DA9D + #$DA9E, // $DA9E + #$DA9F, // $DA9F + #$DAA0, // $DAA0 + #$DAA1, // $DAA1 + #$DAA2, // $DAA2 + #$DAA3, // $DAA3 + #$DAA4, // $DAA4 + #$DAA5, // $DAA5 + #$DAA6, // $DAA6 + #$DAA7, // $DAA7 + #$DAA8, // $DAA8 + #$DAA9, // $DAA9 + #$DAAA, // $DAAA + #$DAAB, // $DAAB + #$DAAC, // $DAAC + #$DAAD, // $DAAD + #$DAAE, // $DAAE + #$DAAF, // $DAAF + #$DAB0, // $DAB0 + #$DAB1, // $DAB1 + #$DAB2, // $DAB2 + #$DAB3, // $DAB3 + #$DAB4, // $DAB4 + #$DAB5, // $DAB5 + #$DAB6, // $DAB6 + #$DAB7, // $DAB7 + #$DAB8, // $DAB8 + #$DAB9, // $DAB9 + #$DABA, // $DABA + #$DABB, // $DABB + #$DABC, // $DABC + #$DABD, // $DABD + #$DABE, // $DABE + #$DABF, // $DABF + #$DAC0, // $DAC0 + #$DAC1, // $DAC1 + #$DAC2, // $DAC2 + #$DAC3, // $DAC3 + #$DAC4, // $DAC4 + #$DAC5, // $DAC5 + #$DAC6, // $DAC6 + #$DAC7, // $DAC7 + #$DAC8, // $DAC8 + #$DAC9, // $DAC9 + #$DACA, // $DACA + #$DACB, // $DACB + #$DACC, // $DACC + #$DACD, // $DACD + #$DACE, // $DACE + #$DACF, // $DACF + #$DAD0, // $DAD0 + #$DAD1, // $DAD1 + #$DAD2, // $DAD2 + #$DAD3, // $DAD3 + #$DAD4, // $DAD4 + #$DAD5, // $DAD5 + #$DAD6, // $DAD6 + #$DAD7, // $DAD7 + #$DAD8, // $DAD8 + #$DAD9, // $DAD9 + #$DADA, // $DADA + #$DADB, // $DADB + #$DADC, // $DADC + #$DADD, // $DADD + #$DADE, // $DADE + #$DADF, // $DADF + #$DAE0, // $DAE0 + #$DAE1, // $DAE1 + #$DAE2, // $DAE2 + #$DAE3, // $DAE3 + #$DAE4, // $DAE4 + #$DAE5, // $DAE5 + #$DAE6, // $DAE6 + #$DAE7, // $DAE7 + #$DAE8, // $DAE8 + #$DAE9, // $DAE9 + #$DAEA, // $DAEA + #$DAEB, // $DAEB + #$DAEC, // $DAEC + #$DAED, // $DAED + #$DAEE, // $DAEE + #$DAEF, // $DAEF + #$DAF0, // $DAF0 + #$DAF1, // $DAF1 + #$DAF2, // $DAF2 + #$DAF3, // $DAF3 + #$DAF4, // $DAF4 + #$DAF5, // $DAF5 + #$DAF6, // $DAF6 + #$DAF7, // $DAF7 + #$DAF8, // $DAF8 + #$DAF9, // $DAF9 + #$DAFA, // $DAFA + #$DAFB, // $DAFB + #$DAFC, // $DAFC + #$DAFD, // $DAFD + #$DAFE, // $DAFE + #$DAFF, // $DAFF + #$DB00, // $DB00 + #$DB01, // $DB01 + #$DB02, // $DB02 + #$DB03, // $DB03 + #$DB04, // $DB04 + #$DB05, // $DB05 + #$DB06, // $DB06 + #$DB07, // $DB07 + #$DB08, // $DB08 + #$DB09, // $DB09 + #$DB0A, // $DB0A + #$DB0B, // $DB0B + #$DB0C, // $DB0C + #$DB0D, // $DB0D + #$DB0E, // $DB0E + #$DB0F, // $DB0F + #$DB10, // $DB10 + #$DB11, // $DB11 + #$DB12, // $DB12 + #$DB13, // $DB13 + #$DB14, // $DB14 + #$DB15, // $DB15 + #$DB16, // $DB16 + #$DB17, // $DB17 + #$DB18, // $DB18 + #$DB19, // $DB19 + #$DB1A, // $DB1A + #$DB1B, // $DB1B + #$DB1C, // $DB1C + #$DB1D, // $DB1D + #$DB1E, // $DB1E + #$DB1F, // $DB1F + #$DB20, // $DB20 + #$DB21, // $DB21 + #$DB22, // $DB22 + #$DB23, // $DB23 + #$DB24, // $DB24 + #$DB25, // $DB25 + #$DB26, // $DB26 + #$DB27, // $DB27 + #$DB28, // $DB28 + #$DB29, // $DB29 + #$DB2A, // $DB2A + #$DB2B, // $DB2B + #$DB2C, // $DB2C + #$DB2D, // $DB2D + #$DB2E, // $DB2E + #$DB2F, // $DB2F + #$DB30, // $DB30 + #$DB31, // $DB31 + #$DB32, // $DB32 + #$DB33, // $DB33 + #$DB34, // $DB34 + #$DB35, // $DB35 + #$DB36, // $DB36 + #$DB37, // $DB37 + #$DB38, // $DB38 + #$DB39, // $DB39 + #$DB3A, // $DB3A + #$DB3B, // $DB3B + #$DB3C, // $DB3C + #$DB3D, // $DB3D + #$DB3E, // $DB3E + #$DB3F, // $DB3F + #$DB40, // $DB40 + #$DB41, // $DB41 + #$DB42, // $DB42 + #$DB43, // $DB43 + #$DB44, // $DB44 + #$DB45, // $DB45 + #$DB46, // $DB46 + #$DB47, // $DB47 + #$DB48, // $DB48 + #$DB49, // $DB49 + #$DB4A, // $DB4A + #$DB4B, // $DB4B + #$DB4C, // $DB4C + #$DB4D, // $DB4D + #$DB4E, // $DB4E + #$DB4F, // $DB4F + #$DB50, // $DB50 + #$DB51, // $DB51 + #$DB52, // $DB52 + #$DB53, // $DB53 + #$DB54, // $DB54 + #$DB55, // $DB55 + #$DB56, // $DB56 + #$DB57, // $DB57 + #$DB58, // $DB58 + #$DB59, // $DB59 + #$DB5A, // $DB5A + #$DB5B, // $DB5B + #$DB5C, // $DB5C + #$DB5D, // $DB5D + #$DB5E, // $DB5E + #$DB5F, // $DB5F + #$DB60, // $DB60 + #$DB61, // $DB61 + #$DB62, // $DB62 + #$DB63, // $DB63 + #$DB64, // $DB64 + #$DB65, // $DB65 + #$DB66, // $DB66 + #$DB67, // $DB67 + #$DB68, // $DB68 + #$DB69, // $DB69 + #$DB6A, // $DB6A + #$DB6B, // $DB6B + #$DB6C, // $DB6C + #$DB6D, // $DB6D + #$DB6E, // $DB6E + #$DB6F, // $DB6F + #$DB70, // $DB70 + #$DB71, // $DB71 + #$DB72, // $DB72 + #$DB73, // $DB73 + #$DB74, // $DB74 + #$DB75, // $DB75 + #$DB76, // $DB76 + #$DB77, // $DB77 + #$DB78, // $DB78 + #$DB79, // $DB79 + #$DB7A, // $DB7A + #$DB7B, // $DB7B + #$DB7C, // $DB7C + #$DB7D, // $DB7D + #$DB7E, // $DB7E + #$DB7F, // $DB7F + #$DB80, // $DB80 + #$DB81, // $DB81 + #$DB82, // $DB82 + #$DB83, // $DB83 + #$DB84, // $DB84 + #$DB85, // $DB85 + #$DB86, // $DB86 + #$DB87, // $DB87 + #$DB88, // $DB88 + #$DB89, // $DB89 + #$DB8A, // $DB8A + #$DB8B, // $DB8B + #$DB8C, // $DB8C + #$DB8D, // $DB8D + #$DB8E, // $DB8E + #$DB8F, // $DB8F + #$DB90, // $DB90 + #$DB91, // $DB91 + #$DB92, // $DB92 + #$DB93, // $DB93 + #$DB94, // $DB94 + #$DB95, // $DB95 + #$DB96, // $DB96 + #$DB97, // $DB97 + #$DB98, // $DB98 + #$DB99, // $DB99 + #$DB9A, // $DB9A + #$DB9B, // $DB9B + #$DB9C, // $DB9C + #$DB9D, // $DB9D + #$DB9E, // $DB9E + #$DB9F, // $DB9F + #$DBA0, // $DBA0 + #$DBA1, // $DBA1 + #$DBA2, // $DBA2 + #$DBA3, // $DBA3 + #$DBA4, // $DBA4 + #$DBA5, // $DBA5 + #$DBA6, // $DBA6 + #$DBA7, // $DBA7 + #$DBA8, // $DBA8 + #$DBA9, // $DBA9 + #$DBAA, // $DBAA + #$DBAB, // $DBAB + #$DBAC, // $DBAC + #$DBAD, // $DBAD + #$DBAE, // $DBAE + #$DBAF, // $DBAF + #$DBB0, // $DBB0 + #$DBB1, // $DBB1 + #$DBB2, // $DBB2 + #$DBB3, // $DBB3 + #$DBB4, // $DBB4 + #$DBB5, // $DBB5 + #$DBB6, // $DBB6 + #$DBB7, // $DBB7 + #$DBB8, // $DBB8 + #$DBB9, // $DBB9 + #$DBBA, // $DBBA + #$DBBB, // $DBBB + #$DBBC, // $DBBC + #$DBBD, // $DBBD + #$DBBE, // $DBBE + #$DBBF, // $DBBF + #$DBC0, // $DBC0 + #$DBC1, // $DBC1 + #$DBC2, // $DBC2 + #$DBC3, // $DBC3 + #$DBC4, // $DBC4 + #$DBC5, // $DBC5 + #$DBC6, // $DBC6 + #$DBC7, // $DBC7 + #$DBC8, // $DBC8 + #$DBC9, // $DBC9 + #$DBCA, // $DBCA + #$DBCB, // $DBCB + #$DBCC, // $DBCC + #$DBCD, // $DBCD + #$DBCE, // $DBCE + #$DBCF, // $DBCF + #$DBD0, // $DBD0 + #$DBD1, // $DBD1 + #$DBD2, // $DBD2 + #$DBD3, // $DBD3 + #$DBD4, // $DBD4 + #$DBD5, // $DBD5 + #$DBD6, // $DBD6 + #$DBD7, // $DBD7 + #$DBD8, // $DBD8 + #$DBD9, // $DBD9 + #$DBDA, // $DBDA + #$DBDB, // $DBDB + #$DBDC, // $DBDC + #$DBDD, // $DBDD + #$DBDE, // $DBDE + #$DBDF, // $DBDF + #$DBE0, // $DBE0 + #$DBE1, // $DBE1 + #$DBE2, // $DBE2 + #$DBE3, // $DBE3 + #$DBE4, // $DBE4 + #$DBE5, // $DBE5 + #$DBE6, // $DBE6 + #$DBE7, // $DBE7 + #$DBE8, // $DBE8 + #$DBE9, // $DBE9 + #$DBEA, // $DBEA + #$DBEB, // $DBEB + #$DBEC, // $DBEC + #$DBED, // $DBED + #$DBEE, // $DBEE + #$DBEF, // $DBEF + #$DBF0, // $DBF0 + #$DBF1, // $DBF1 + #$DBF2, // $DBF2 + #$DBF3, // $DBF3 + #$DBF4, // $DBF4 + #$DBF5, // $DBF5 + #$DBF6, // $DBF6 + #$DBF7, // $DBF7 + #$DBF8, // $DBF8 + #$DBF9, // $DBF9 + #$DBFA, // $DBFA + #$DBFB, // $DBFB + #$DBFC, // $DBFC + #$DBFD, // $DBFD + #$DBFE, // $DBFE + #$DBFF, // $DBFF + #$DC00, // $DC00 + #$DC01, // $DC01 + #$DC02, // $DC02 + #$DC03, // $DC03 + #$DC04, // $DC04 + #$DC05, // $DC05 + #$DC06, // $DC06 + #$DC07, // $DC07 + #$DC08, // $DC08 + #$DC09, // $DC09 + #$DC0A, // $DC0A + #$DC0B, // $DC0B + #$DC0C, // $DC0C + #$DC0D, // $DC0D + #$DC0E, // $DC0E + #$DC0F, // $DC0F + #$DC10, // $DC10 + #$DC11, // $DC11 + #$DC12, // $DC12 + #$DC13, // $DC13 + #$DC14, // $DC14 + #$DC15, // $DC15 + #$DC16, // $DC16 + #$DC17, // $DC17 + #$DC18, // $DC18 + #$DC19, // $DC19 + #$DC1A, // $DC1A + #$DC1B, // $DC1B + #$DC1C, // $DC1C + #$DC1D, // $DC1D + #$DC1E, // $DC1E + #$DC1F, // $DC1F + #$DC20, // $DC20 + #$DC21, // $DC21 + #$DC22, // $DC22 + #$DC23, // $DC23 + #$DC24, // $DC24 + #$DC25, // $DC25 + #$DC26, // $DC26 + #$DC27, // $DC27 + #$DC28, // $DC28 + #$DC29, // $DC29 + #$DC2A, // $DC2A + #$DC2B, // $DC2B + #$DC2C, // $DC2C + #$DC2D, // $DC2D + #$DC2E, // $DC2E + #$DC2F, // $DC2F + #$DC30, // $DC30 + #$DC31, // $DC31 + #$DC32, // $DC32 + #$DC33, // $DC33 + #$DC34, // $DC34 + #$DC35, // $DC35 + #$DC36, // $DC36 + #$DC37, // $DC37 + #$DC38, // $DC38 + #$DC39, // $DC39 + #$DC3A, // $DC3A + #$DC3B, // $DC3B + #$DC3C, // $DC3C + #$DC3D, // $DC3D + #$DC3E, // $DC3E + #$DC3F, // $DC3F + #$DC40, // $DC40 + #$DC41, // $DC41 + #$DC42, // $DC42 + #$DC43, // $DC43 + #$DC44, // $DC44 + #$DC45, // $DC45 + #$DC46, // $DC46 + #$DC47, // $DC47 + #$DC48, // $DC48 + #$DC49, // $DC49 + #$DC4A, // $DC4A + #$DC4B, // $DC4B + #$DC4C, // $DC4C + #$DC4D, // $DC4D + #$DC4E, // $DC4E + #$DC4F, // $DC4F + #$DC50, // $DC50 + #$DC51, // $DC51 + #$DC52, // $DC52 + #$DC53, // $DC53 + #$DC54, // $DC54 + #$DC55, // $DC55 + #$DC56, // $DC56 + #$DC57, // $DC57 + #$DC58, // $DC58 + #$DC59, // $DC59 + #$DC5A, // $DC5A + #$DC5B, // $DC5B + #$DC5C, // $DC5C + #$DC5D, // $DC5D + #$DC5E, // $DC5E + #$DC5F, // $DC5F + #$DC60, // $DC60 + #$DC61, // $DC61 + #$DC62, // $DC62 + #$DC63, // $DC63 + #$DC64, // $DC64 + #$DC65, // $DC65 + #$DC66, // $DC66 + #$DC67, // $DC67 + #$DC68, // $DC68 + #$DC69, // $DC69 + #$DC6A, // $DC6A + #$DC6B, // $DC6B + #$DC6C, // $DC6C + #$DC6D, // $DC6D + #$DC6E, // $DC6E + #$DC6F, // $DC6F + #$DC70, // $DC70 + #$DC71, // $DC71 + #$DC72, // $DC72 + #$DC73, // $DC73 + #$DC74, // $DC74 + #$DC75, // $DC75 + #$DC76, // $DC76 + #$DC77, // $DC77 + #$DC78, // $DC78 + #$DC79, // $DC79 + #$DC7A, // $DC7A + #$DC7B, // $DC7B + #$DC7C, // $DC7C + #$DC7D, // $DC7D + #$DC7E, // $DC7E + #$DC7F, // $DC7F + #$DC80, // $DC80 + #$DC81, // $DC81 + #$DC82, // $DC82 + #$DC83, // $DC83 + #$DC84, // $DC84 + #$DC85, // $DC85 + #$DC86, // $DC86 + #$DC87, // $DC87 + #$DC88, // $DC88 + #$DC89, // $DC89 + #$DC8A, // $DC8A + #$DC8B, // $DC8B + #$DC8C, // $DC8C + #$DC8D, // $DC8D + #$DC8E, // $DC8E + #$DC8F, // $DC8F + #$DC90, // $DC90 + #$DC91, // $DC91 + #$DC92, // $DC92 + #$DC93, // $DC93 + #$DC94, // $DC94 + #$DC95, // $DC95 + #$DC96, // $DC96 + #$DC97, // $DC97 + #$DC98, // $DC98 + #$DC99, // $DC99 + #$DC9A, // $DC9A + #$DC9B, // $DC9B + #$DC9C, // $DC9C + #$DC9D, // $DC9D + #$DC9E, // $DC9E + #$DC9F, // $DC9F + #$DCA0, // $DCA0 + #$DCA1, // $DCA1 + #$DCA2, // $DCA2 + #$DCA3, // $DCA3 + #$DCA4, // $DCA4 + #$DCA5, // $DCA5 + #$DCA6, // $DCA6 + #$DCA7, // $DCA7 + #$DCA8, // $DCA8 + #$DCA9, // $DCA9 + #$DCAA, // $DCAA + #$DCAB, // $DCAB + #$DCAC, // $DCAC + #$DCAD, // $DCAD + #$DCAE, // $DCAE + #$DCAF, // $DCAF + #$DCB0, // $DCB0 + #$DCB1, // $DCB1 + #$DCB2, // $DCB2 + #$DCB3, // $DCB3 + #$DCB4, // $DCB4 + #$DCB5, // $DCB5 + #$DCB6, // $DCB6 + #$DCB7, // $DCB7 + #$DCB8, // $DCB8 + #$DCB9, // $DCB9 + #$DCBA, // $DCBA + #$DCBB, // $DCBB + #$DCBC, // $DCBC + #$DCBD, // $DCBD + #$DCBE, // $DCBE + #$DCBF, // $DCBF + #$DCC0, // $DCC0 + #$DCC1, // $DCC1 + #$DCC2, // $DCC2 + #$DCC3, // $DCC3 + #$DCC4, // $DCC4 + #$DCC5, // $DCC5 + #$DCC6, // $DCC6 + #$DCC7, // $DCC7 + #$DCC8, // $DCC8 + #$DCC9, // $DCC9 + #$DCCA, // $DCCA + #$DCCB, // $DCCB + #$DCCC, // $DCCC + #$DCCD, // $DCCD + #$DCCE, // $DCCE + #$DCCF, // $DCCF + #$DCD0, // $DCD0 + #$DCD1, // $DCD1 + #$DCD2, // $DCD2 + #$DCD3, // $DCD3 + #$DCD4, // $DCD4 + #$DCD5, // $DCD5 + #$DCD6, // $DCD6 + #$DCD7, // $DCD7 + #$DCD8, // $DCD8 + #$DCD9, // $DCD9 + #$DCDA, // $DCDA + #$DCDB, // $DCDB + #$DCDC, // $DCDC + #$DCDD, // $DCDD + #$DCDE, // $DCDE + #$DCDF, // $DCDF + #$DCE0, // $DCE0 + #$DCE1, // $DCE1 + #$DCE2, // $DCE2 + #$DCE3, // $DCE3 + #$DCE4, // $DCE4 + #$DCE5, // $DCE5 + #$DCE6, // $DCE6 + #$DCE7, // $DCE7 + #$DCE8, // $DCE8 + #$DCE9, // $DCE9 + #$DCEA, // $DCEA + #$DCEB, // $DCEB + #$DCEC, // $DCEC + #$DCED, // $DCED + #$DCEE, // $DCEE + #$DCEF, // $DCEF + #$DCF0, // $DCF0 + #$DCF1, // $DCF1 + #$DCF2, // $DCF2 + #$DCF3, // $DCF3 + #$DCF4, // $DCF4 + #$DCF5, // $DCF5 + #$DCF6, // $DCF6 + #$DCF7, // $DCF7 + #$DCF8, // $DCF8 + #$DCF9, // $DCF9 + #$DCFA, // $DCFA + #$DCFB, // $DCFB + #$DCFC, // $DCFC + #$DCFD, // $DCFD + #$DCFE, // $DCFE + #$DCFF, // $DCFF + #$DD00, // $DD00 + #$DD01, // $DD01 + #$DD02, // $DD02 + #$DD03, // $DD03 + #$DD04, // $DD04 + #$DD05, // $DD05 + #$DD06, // $DD06 + #$DD07, // $DD07 + #$DD08, // $DD08 + #$DD09, // $DD09 + #$DD0A, // $DD0A + #$DD0B, // $DD0B + #$DD0C, // $DD0C + #$DD0D, // $DD0D + #$DD0E, // $DD0E + #$DD0F, // $DD0F + #$DD10, // $DD10 + #$DD11, // $DD11 + #$DD12, // $DD12 + #$DD13, // $DD13 + #$DD14, // $DD14 + #$DD15, // $DD15 + #$DD16, // $DD16 + #$DD17, // $DD17 + #$DD18, // $DD18 + #$DD19, // $DD19 + #$DD1A, // $DD1A + #$DD1B, // $DD1B + #$DD1C, // $DD1C + #$DD1D, // $DD1D + #$DD1E, // $DD1E + #$DD1F, // $DD1F + #$DD20, // $DD20 + #$DD21, // $DD21 + #$DD22, // $DD22 + #$DD23, // $DD23 + #$DD24, // $DD24 + #$DD25, // $DD25 + #$DD26, // $DD26 + #$DD27, // $DD27 + #$DD28, // $DD28 + #$DD29, // $DD29 + #$DD2A, // $DD2A + #$DD2B, // $DD2B + #$DD2C, // $DD2C + #$DD2D, // $DD2D + #$DD2E, // $DD2E + #$DD2F, // $DD2F + #$DD30, // $DD30 + #$DD31, // $DD31 + #$DD32, // $DD32 + #$DD33, // $DD33 + #$DD34, // $DD34 + #$DD35, // $DD35 + #$DD36, // $DD36 + #$DD37, // $DD37 + #$DD38, // $DD38 + #$DD39, // $DD39 + #$DD3A, // $DD3A + #$DD3B, // $DD3B + #$DD3C, // $DD3C + #$DD3D, // $DD3D + #$DD3E, // $DD3E + #$DD3F, // $DD3F + #$DD40, // $DD40 + #$DD41, // $DD41 + #$DD42, // $DD42 + #$DD43, // $DD43 + #$DD44, // $DD44 + #$DD45, // $DD45 + #$DD46, // $DD46 + #$DD47, // $DD47 + #$DD48, // $DD48 + #$DD49, // $DD49 + #$DD4A, // $DD4A + #$DD4B, // $DD4B + #$DD4C, // $DD4C + #$DD4D, // $DD4D + #$DD4E, // $DD4E + #$DD4F, // $DD4F + #$DD50, // $DD50 + #$DD51, // $DD51 + #$DD52, // $DD52 + #$DD53, // $DD53 + #$DD54, // $DD54 + #$DD55, // $DD55 + #$DD56, // $DD56 + #$DD57, // $DD57 + #$DD58, // $DD58 + #$DD59, // $DD59 + #$DD5A, // $DD5A + #$DD5B, // $DD5B + #$DD5C, // $DD5C + #$DD5D, // $DD5D + #$DD5E, // $DD5E + #$DD5F, // $DD5F + #$DD60, // $DD60 + #$DD61, // $DD61 + #$DD62, // $DD62 + #$DD63, // $DD63 + #$DD64, // $DD64 + #$DD65, // $DD65 + #$DD66, // $DD66 + #$DD67, // $DD67 + #$DD68, // $DD68 + #$DD69, // $DD69 + #$DD6A, // $DD6A + #$DD6B, // $DD6B + #$DD6C, // $DD6C + #$DD6D, // $DD6D + #$DD6E, // $DD6E + #$DD6F, // $DD6F + #$DD70, // $DD70 + #$DD71, // $DD71 + #$DD72, // $DD72 + #$DD73, // $DD73 + #$DD74, // $DD74 + #$DD75, // $DD75 + #$DD76, // $DD76 + #$DD77, // $DD77 + #$DD78, // $DD78 + #$DD79, // $DD79 + #$DD7A, // $DD7A + #$DD7B, // $DD7B + #$DD7C, // $DD7C + #$DD7D, // $DD7D + #$DD7E, // $DD7E + #$DD7F, // $DD7F + #$DD80, // $DD80 + #$DD81, // $DD81 + #$DD82, // $DD82 + #$DD83, // $DD83 + #$DD84, // $DD84 + #$DD85, // $DD85 + #$DD86, // $DD86 + #$DD87, // $DD87 + #$DD88, // $DD88 + #$DD89, // $DD89 + #$DD8A, // $DD8A + #$DD8B, // $DD8B + #$DD8C, // $DD8C + #$DD8D, // $DD8D + #$DD8E, // $DD8E + #$DD8F, // $DD8F + #$DD90, // $DD90 + #$DD91, // $DD91 + #$DD92, // $DD92 + #$DD93, // $DD93 + #$DD94, // $DD94 + #$DD95, // $DD95 + #$DD96, // $DD96 + #$DD97, // $DD97 + #$DD98, // $DD98 + #$DD99, // $DD99 + #$DD9A, // $DD9A + #$DD9B, // $DD9B + #$DD9C, // $DD9C + #$DD9D, // $DD9D + #$DD9E, // $DD9E + #$DD9F, // $DD9F + #$DDA0, // $DDA0 + #$DDA1, // $DDA1 + #$DDA2, // $DDA2 + #$DDA3, // $DDA3 + #$DDA4, // $DDA4 + #$DDA5, // $DDA5 + #$DDA6, // $DDA6 + #$DDA7, // $DDA7 + #$DDA8, // $DDA8 + #$DDA9, // $DDA9 + #$DDAA, // $DDAA + #$DDAB, // $DDAB + #$DDAC, // $DDAC + #$DDAD, // $DDAD + #$DDAE, // $DDAE + #$DDAF, // $DDAF + #$DDB0, // $DDB0 + #$DDB1, // $DDB1 + #$DDB2, // $DDB2 + #$DDB3, // $DDB3 + #$DDB4, // $DDB4 + #$DDB5, // $DDB5 + #$DDB6, // $DDB6 + #$DDB7, // $DDB7 + #$DDB8, // $DDB8 + #$DDB9, // $DDB9 + #$DDBA, // $DDBA + #$DDBB, // $DDBB + #$DDBC, // $DDBC + #$DDBD, // $DDBD + #$DDBE, // $DDBE + #$DDBF, // $DDBF + #$DDC0, // $DDC0 + #$DDC1, // $DDC1 + #$DDC2, // $DDC2 + #$DDC3, // $DDC3 + #$DDC4, // $DDC4 + #$DDC5, // $DDC5 + #$DDC6, // $DDC6 + #$DDC7, // $DDC7 + #$DDC8, // $DDC8 + #$DDC9, // $DDC9 + #$DDCA, // $DDCA + #$DDCB, // $DDCB + #$DDCC, // $DDCC + #$DDCD, // $DDCD + #$DDCE, // $DDCE + #$DDCF, // $DDCF + #$DDD0, // $DDD0 + #$DDD1, // $DDD1 + #$DDD2, // $DDD2 + #$DDD3, // $DDD3 + #$DDD4, // $DDD4 + #$DDD5, // $DDD5 + #$DDD6, // $DDD6 + #$DDD7, // $DDD7 + #$DDD8, // $DDD8 + #$DDD9, // $DDD9 + #$DDDA, // $DDDA + #$DDDB, // $DDDB + #$DDDC, // $DDDC + #$DDDD, // $DDDD + #$DDDE, // $DDDE + #$DDDF, // $DDDF + #$DDE0, // $DDE0 + #$DDE1, // $DDE1 + #$DDE2, // $DDE2 + #$DDE3, // $DDE3 + #$DDE4, // $DDE4 + #$DDE5, // $DDE5 + #$DDE6, // $DDE6 + #$DDE7, // $DDE7 + #$DDE8, // $DDE8 + #$DDE9, // $DDE9 + #$DDEA, // $DDEA + #$DDEB, // $DDEB + #$DDEC, // $DDEC + #$DDED, // $DDED + #$DDEE, // $DDEE + #$DDEF, // $DDEF + #$DDF0, // $DDF0 + #$DDF1, // $DDF1 + #$DDF2, // $DDF2 + #$DDF3, // $DDF3 + #$DDF4, // $DDF4 + #$DDF5, // $DDF5 + #$DDF6, // $DDF6 + #$DDF7, // $DDF7 + #$DDF8, // $DDF8 + #$DDF9, // $DDF9 + #$DDFA, // $DDFA + #$DDFB, // $DDFB + #$DDFC, // $DDFC + #$DDFD, // $DDFD + #$DDFE, // $DDFE + #$DDFF, // $DDFF + #$DE00, // $DE00 + #$DE01, // $DE01 + #$DE02, // $DE02 + #$DE03, // $DE03 + #$DE04, // $DE04 + #$DE05, // $DE05 + #$DE06, // $DE06 + #$DE07, // $DE07 + #$DE08, // $DE08 + #$DE09, // $DE09 + #$DE0A, // $DE0A + #$DE0B, // $DE0B + #$DE0C, // $DE0C + #$DE0D, // $DE0D + #$DE0E, // $DE0E + #$DE0F, // $DE0F + #$DE10, // $DE10 + #$DE11, // $DE11 + #$DE12, // $DE12 + #$DE13, // $DE13 + #$DE14, // $DE14 + #$DE15, // $DE15 + #$DE16, // $DE16 + #$DE17, // $DE17 + #$DE18, // $DE18 + #$DE19, // $DE19 + #$DE1A, // $DE1A + #$DE1B, // $DE1B + #$DE1C, // $DE1C + #$DE1D, // $DE1D + #$DE1E, // $DE1E + #$DE1F, // $DE1F + #$DE20, // $DE20 + #$DE21, // $DE21 + #$DE22, // $DE22 + #$DE23, // $DE23 + #$DE24, // $DE24 + #$DE25, // $DE25 + #$DE26, // $DE26 + #$DE27, // $DE27 + #$DE28, // $DE28 + #$DE29, // $DE29 + #$DE2A, // $DE2A + #$DE2B, // $DE2B + #$DE2C, // $DE2C + #$DE2D, // $DE2D + #$DE2E, // $DE2E + #$DE2F, // $DE2F + #$DE30, // $DE30 + #$DE31, // $DE31 + #$DE32, // $DE32 + #$DE33, // $DE33 + #$DE34, // $DE34 + #$DE35, // $DE35 + #$DE36, // $DE36 + #$DE37, // $DE37 + #$DE38, // $DE38 + #$DE39, // $DE39 + #$DE3A, // $DE3A + #$DE3B, // $DE3B + #$DE3C, // $DE3C + #$DE3D, // $DE3D + #$DE3E, // $DE3E + #$DE3F, // $DE3F + #$DE40, // $DE40 + #$DE41, // $DE41 + #$DE42, // $DE42 + #$DE43, // $DE43 + #$DE44, // $DE44 + #$DE45, // $DE45 + #$DE46, // $DE46 + #$DE47, // $DE47 + #$DE48, // $DE48 + #$DE49, // $DE49 + #$DE4A, // $DE4A + #$DE4B, // $DE4B + #$DE4C, // $DE4C + #$DE4D, // $DE4D + #$DE4E, // $DE4E + #$DE4F, // $DE4F + #$DE50, // $DE50 + #$DE51, // $DE51 + #$DE52, // $DE52 + #$DE53, // $DE53 + #$DE54, // $DE54 + #$DE55, // $DE55 + #$DE56, // $DE56 + #$DE57, // $DE57 + #$DE58, // $DE58 + #$DE59, // $DE59 + #$DE5A, // $DE5A + #$DE5B, // $DE5B + #$DE5C, // $DE5C + #$DE5D, // $DE5D + #$DE5E, // $DE5E + #$DE5F, // $DE5F + #$DE60, // $DE60 + #$DE61, // $DE61 + #$DE62, // $DE62 + #$DE63, // $DE63 + #$DE64, // $DE64 + #$DE65, // $DE65 + #$DE66, // $DE66 + #$DE67, // $DE67 + #$DE68, // $DE68 + #$DE69, // $DE69 + #$DE6A, // $DE6A + #$DE6B, // $DE6B + #$DE6C, // $DE6C + #$DE6D, // $DE6D + #$DE6E, // $DE6E + #$DE6F, // $DE6F + #$DE70, // $DE70 + #$DE71, // $DE71 + #$DE72, // $DE72 + #$DE73, // $DE73 + #$DE74, // $DE74 + #$DE75, // $DE75 + #$DE76, // $DE76 + #$DE77, // $DE77 + #$DE78, // $DE78 + #$DE79, // $DE79 + #$DE7A, // $DE7A + #$DE7B, // $DE7B + #$DE7C, // $DE7C + #$DE7D, // $DE7D + #$DE7E, // $DE7E + #$DE7F, // $DE7F + #$DE80, // $DE80 + #$DE81, // $DE81 + #$DE82, // $DE82 + #$DE83, // $DE83 + #$DE84, // $DE84 + #$DE85, // $DE85 + #$DE86, // $DE86 + #$DE87, // $DE87 + #$DE88, // $DE88 + #$DE89, // $DE89 + #$DE8A, // $DE8A + #$DE8B, // $DE8B + #$DE8C, // $DE8C + #$DE8D, // $DE8D + #$DE8E, // $DE8E + #$DE8F, // $DE8F + #$DE90, // $DE90 + #$DE91, // $DE91 + #$DE92, // $DE92 + #$DE93, // $DE93 + #$DE94, // $DE94 + #$DE95, // $DE95 + #$DE96, // $DE96 + #$DE97, // $DE97 + #$DE98, // $DE98 + #$DE99, // $DE99 + #$DE9A, // $DE9A + #$DE9B, // $DE9B + #$DE9C, // $DE9C + #$DE9D, // $DE9D + #$DE9E, // $DE9E + #$DE9F, // $DE9F + #$DEA0, // $DEA0 + #$DEA1, // $DEA1 + #$DEA2, // $DEA2 + #$DEA3, // $DEA3 + #$DEA4, // $DEA4 + #$DEA5, // $DEA5 + #$DEA6, // $DEA6 + #$DEA7, // $DEA7 + #$DEA8, // $DEA8 + #$DEA9, // $DEA9 + #$DEAA, // $DEAA + #$DEAB, // $DEAB + #$DEAC, // $DEAC + #$DEAD, // $DEAD + #$DEAE, // $DEAE + #$DEAF, // $DEAF + #$DEB0, // $DEB0 + #$DEB1, // $DEB1 + #$DEB2, // $DEB2 + #$DEB3, // $DEB3 + #$DEB4, // $DEB4 + #$DEB5, // $DEB5 + #$DEB6, // $DEB6 + #$DEB7, // $DEB7 + #$DEB8, // $DEB8 + #$DEB9, // $DEB9 + #$DEBA, // $DEBA + #$DEBB, // $DEBB + #$DEBC, // $DEBC + #$DEBD, // $DEBD + #$DEBE, // $DEBE + #$DEBF, // $DEBF + #$DEC0, // $DEC0 + #$DEC1, // $DEC1 + #$DEC2, // $DEC2 + #$DEC3, // $DEC3 + #$DEC4, // $DEC4 + #$DEC5, // $DEC5 + #$DEC6, // $DEC6 + #$DEC7, // $DEC7 + #$DEC8, // $DEC8 + #$DEC9, // $DEC9 + #$DECA, // $DECA + #$DECB, // $DECB + #$DECC, // $DECC + #$DECD, // $DECD + #$DECE, // $DECE + #$DECF, // $DECF + #$DED0, // $DED0 + #$DED1, // $DED1 + #$DED2, // $DED2 + #$DED3, // $DED3 + #$DED4, // $DED4 + #$DED5, // $DED5 + #$DED6, // $DED6 + #$DED7, // $DED7 + #$DED8, // $DED8 + #$DED9, // $DED9 + #$DEDA, // $DEDA + #$DEDB, // $DEDB + #$DEDC, // $DEDC + #$DEDD, // $DEDD + #$DEDE, // $DEDE + #$DEDF, // $DEDF + #$DEE0, // $DEE0 + #$DEE1, // $DEE1 + #$DEE2, // $DEE2 + #$DEE3, // $DEE3 + #$DEE4, // $DEE4 + #$DEE5, // $DEE5 + #$DEE6, // $DEE6 + #$DEE7, // $DEE7 + #$DEE8, // $DEE8 + #$DEE9, // $DEE9 + #$DEEA, // $DEEA + #$DEEB, // $DEEB + #$DEEC, // $DEEC + #$DEED, // $DEED + #$DEEE, // $DEEE + #$DEEF, // $DEEF + #$DEF0, // $DEF0 + #$DEF1, // $DEF1 + #$DEF2, // $DEF2 + #$DEF3, // $DEF3 + #$DEF4, // $DEF4 + #$DEF5, // $DEF5 + #$DEF6, // $DEF6 + #$DEF7, // $DEF7 + #$DEF8, // $DEF8 + #$DEF9, // $DEF9 + #$DEFA, // $DEFA + #$DEFB, // $DEFB + #$DEFC, // $DEFC + #$DEFD, // $DEFD + #$DEFE, // $DEFE + #$DEFF, // $DEFF + #$DF00, // $DF00 + #$DF01, // $DF01 + #$DF02, // $DF02 + #$DF03, // $DF03 + #$DF04, // $DF04 + #$DF05, // $DF05 + #$DF06, // $DF06 + #$DF07, // $DF07 + #$DF08, // $DF08 + #$DF09, // $DF09 + #$DF0A, // $DF0A + #$DF0B, // $DF0B + #$DF0C, // $DF0C + #$DF0D, // $DF0D + #$DF0E, // $DF0E + #$DF0F, // $DF0F + #$DF10, // $DF10 + #$DF11, // $DF11 + #$DF12, // $DF12 + #$DF13, // $DF13 + #$DF14, // $DF14 + #$DF15, // $DF15 + #$DF16, // $DF16 + #$DF17, // $DF17 + #$DF18, // $DF18 + #$DF19, // $DF19 + #$DF1A, // $DF1A + #$DF1B, // $DF1B + #$DF1C, // $DF1C + #$DF1D, // $DF1D + #$DF1E, // $DF1E + #$DF1F, // $DF1F + #$DF20, // $DF20 + #$DF21, // $DF21 + #$DF22, // $DF22 + #$DF23, // $DF23 + #$DF24, // $DF24 + #$DF25, // $DF25 + #$DF26, // $DF26 + #$DF27, // $DF27 + #$DF28, // $DF28 + #$DF29, // $DF29 + #$DF2A, // $DF2A + #$DF2B, // $DF2B + #$DF2C, // $DF2C + #$DF2D, // $DF2D + #$DF2E, // $DF2E + #$DF2F, // $DF2F + #$DF30, // $DF30 + #$DF31, // $DF31 + #$DF32, // $DF32 + #$DF33, // $DF33 + #$DF34, // $DF34 + #$DF35, // $DF35 + #$DF36, // $DF36 + #$DF37, // $DF37 + #$DF38, // $DF38 + #$DF39, // $DF39 + #$DF3A, // $DF3A + #$DF3B, // $DF3B + #$DF3C, // $DF3C + #$DF3D, // $DF3D + #$DF3E, // $DF3E + #$DF3F, // $DF3F + #$DF40, // $DF40 + #$DF41, // $DF41 + #$DF42, // $DF42 + #$DF43, // $DF43 + #$DF44, // $DF44 + #$DF45, // $DF45 + #$DF46, // $DF46 + #$DF47, // $DF47 + #$DF48, // $DF48 + #$DF49, // $DF49 + #$DF4A, // $DF4A + #$DF4B, // $DF4B + #$DF4C, // $DF4C + #$DF4D, // $DF4D + #$DF4E, // $DF4E + #$DF4F, // $DF4F + #$DF50, // $DF50 + #$DF51, // $DF51 + #$DF52, // $DF52 + #$DF53, // $DF53 + #$DF54, // $DF54 + #$DF55, // $DF55 + #$DF56, // $DF56 + #$DF57, // $DF57 + #$DF58, // $DF58 + #$DF59, // $DF59 + #$DF5A, // $DF5A + #$DF5B, // $DF5B + #$DF5C, // $DF5C + #$DF5D, // $DF5D + #$DF5E, // $DF5E + #$DF5F, // $DF5F + #$DF60, // $DF60 + #$DF61, // $DF61 + #$DF62, // $DF62 + #$DF63, // $DF63 + #$DF64, // $DF64 + #$DF65, // $DF65 + #$DF66, // $DF66 + #$DF67, // $DF67 + #$DF68, // $DF68 + #$DF69, // $DF69 + #$DF6A, // $DF6A + #$DF6B, // $DF6B + #$DF6C, // $DF6C + #$DF6D, // $DF6D + #$DF6E, // $DF6E + #$DF6F, // $DF6F + #$DF70, // $DF70 + #$DF71, // $DF71 + #$DF72, // $DF72 + #$DF73, // $DF73 + #$DF74, // $DF74 + #$DF75, // $DF75 + #$DF76, // $DF76 + #$DF77, // $DF77 + #$DF78, // $DF78 + #$DF79, // $DF79 + #$DF7A, // $DF7A + #$DF7B, // $DF7B + #$DF7C, // $DF7C + #$DF7D, // $DF7D + #$DF7E, // $DF7E + #$DF7F, // $DF7F + #$DF80, // $DF80 + #$DF81, // $DF81 + #$DF82, // $DF82 + #$DF83, // $DF83 + #$DF84, // $DF84 + #$DF85, // $DF85 + #$DF86, // $DF86 + #$DF87, // $DF87 + #$DF88, // $DF88 + #$DF89, // $DF89 + #$DF8A, // $DF8A + #$DF8B, // $DF8B + #$DF8C, // $DF8C + #$DF8D, // $DF8D + #$DF8E, // $DF8E + #$DF8F, // $DF8F + #$DF90, // $DF90 + #$DF91, // $DF91 + #$DF92, // $DF92 + #$DF93, // $DF93 + #$DF94, // $DF94 + #$DF95, // $DF95 + #$DF96, // $DF96 + #$DF97, // $DF97 + #$DF98, // $DF98 + #$DF99, // $DF99 + #$DF9A, // $DF9A + #$DF9B, // $DF9B + #$DF9C, // $DF9C + #$DF9D, // $DF9D + #$DF9E, // $DF9E + #$DF9F, // $DF9F + #$DFA0, // $DFA0 + #$DFA1, // $DFA1 + #$DFA2, // $DFA2 + #$DFA3, // $DFA3 + #$DFA4, // $DFA4 + #$DFA5, // $DFA5 + #$DFA6, // $DFA6 + #$DFA7, // $DFA7 + #$DFA8, // $DFA8 + #$DFA9, // $DFA9 + #$DFAA, // $DFAA + #$DFAB, // $DFAB + #$DFAC, // $DFAC + #$DFAD, // $DFAD + #$DFAE, // $DFAE + #$DFAF, // $DFAF + #$DFB0, // $DFB0 + #$DFB1, // $DFB1 + #$DFB2, // $DFB2 + #$DFB3, // $DFB3 + #$DFB4, // $DFB4 + #$DFB5, // $DFB5 + #$DFB6, // $DFB6 + #$DFB7, // $DFB7 + #$DFB8, // $DFB8 + #$DFB9, // $DFB9 + #$DFBA, // $DFBA + #$DFBB, // $DFBB + #$DFBC, // $DFBC + #$DFBD, // $DFBD + #$DFBE, // $DFBE + #$DFBF, // $DFBF + #$DFC0, // $DFC0 + #$DFC1, // $DFC1 + #$DFC2, // $DFC2 + #$DFC3, // $DFC3 + #$DFC4, // $DFC4 + #$DFC5, // $DFC5 + #$DFC6, // $DFC6 + #$DFC7, // $DFC7 + #$DFC8, // $DFC8 + #$DFC9, // $DFC9 + #$DFCA, // $DFCA + #$DFCB, // $DFCB + #$DFCC, // $DFCC + #$DFCD, // $DFCD + #$DFCE, // $DFCE + #$DFCF, // $DFCF + #$DFD0, // $DFD0 + #$DFD1, // $DFD1 + #$DFD2, // $DFD2 + #$DFD3, // $DFD3 + #$DFD4, // $DFD4 + #$DFD5, // $DFD5 + #$DFD6, // $DFD6 + #$DFD7, // $DFD7 + #$DFD8, // $DFD8 + #$DFD9, // $DFD9 + #$DFDA, // $DFDA + #$DFDB, // $DFDB + #$DFDC, // $DFDC + #$DFDD, // $DFDD + #$DFDE, // $DFDE + #$DFDF, // $DFDF + #$DFE0, // $DFE0 + #$DFE1, // $DFE1 + #$DFE2, // $DFE2 + #$DFE3, // $DFE3 + #$DFE4, // $DFE4 + #$DFE5, // $DFE5 + #$DFE6, // $DFE6 + #$DFE7, // $DFE7 + #$DFE8, // $DFE8 + #$DFE9, // $DFE9 + #$DFEA, // $DFEA + #$DFEB, // $DFEB + #$DFEC, // $DFEC + #$DFED, // $DFED + #$DFEE, // $DFEE + #$DFEF, // $DFEF + #$DFF0, // $DFF0 + #$DFF1, // $DFF1 + #$DFF2, // $DFF2 + #$DFF3, // $DFF3 + #$DFF4, // $DFF4 + #$DFF5, // $DFF5 + #$DFF6, // $DFF6 + #$DFF7, // $DFF7 + #$DFF8, // $DFF8 + #$DFF9, // $DFF9 + #$DFFA, // $DFFA + #$DFFB, // $DFFB + #$DFFC, // $DFFC + #$DFFD, // $DFFD + #$DFFE, // $DFFE + #$DFFF, // $DFFF + #$E000, // $E000 + #$E001, // $E001 + #$E002, // $E002 + #$E003, // $E003 + #$E004, // $E004 + #$E005, // $E005 + #$E006, // $E006 + #$E007, // $E007 + #$E008, // $E008 + #$E009, // $E009 + #$E00A, // $E00A + #$E00B, // $E00B + #$E00C, // $E00C + #$E00D, // $E00D + #$E00E, // $E00E + #$E00F, // $E00F + #$E010, // $E010 + #$E011, // $E011 + #$E012, // $E012 + #$E013, // $E013 + #$E014, // $E014 + #$E015, // $E015 + #$E016, // $E016 + #$E017, // $E017 + #$E018, // $E018 + #$E019, // $E019 + #$E01A, // $E01A + #$E01B, // $E01B + #$E01C, // $E01C + #$E01D, // $E01D + #$E01E, // $E01E + #$E01F, // $E01F + #$E020, // $E020 + #$E021, // $E021 + #$E022, // $E022 + #$E023, // $E023 + #$E024, // $E024 + #$E025, // $E025 + #$E026, // $E026 + #$E027, // $E027 + #$E028, // $E028 + #$E029, // $E029 + #$E02A, // $E02A + #$E02B, // $E02B + #$E02C, // $E02C + #$E02D, // $E02D + #$E02E, // $E02E + #$E02F, // $E02F + #$E030, // $E030 + #$E031, // $E031 + #$E032, // $E032 + #$E033, // $E033 + #$E034, // $E034 + #$E035, // $E035 + #$E036, // $E036 + #$E037, // $E037 + #$E038, // $E038 + #$E039, // $E039 + #$E03A, // $E03A + #$E03B, // $E03B + #$E03C, // $E03C + #$E03D, // $E03D + #$E03E, // $E03E + #$E03F, // $E03F + #$E040, // $E040 + #$E041, // $E041 + #$E042, // $E042 + #$E043, // $E043 + #$E044, // $E044 + #$E045, // $E045 + #$E046, // $E046 + #$E047, // $E047 + #$E048, // $E048 + #$E049, // $E049 + #$E04A, // $E04A + #$E04B, // $E04B + #$E04C, // $E04C + #$E04D, // $E04D + #$E04E, // $E04E + #$E04F, // $E04F + #$E050, // $E050 + #$E051, // $E051 + #$E052, // $E052 + #$E053, // $E053 + #$E054, // $E054 + #$E055, // $E055 + #$E056, // $E056 + #$E057, // $E057 + #$E058, // $E058 + #$E059, // $E059 + #$E05A, // $E05A + #$E05B, // $E05B + #$E05C, // $E05C + #$E05D, // $E05D + #$E05E, // $E05E + #$E05F, // $E05F + #$E060, // $E060 + #$E061, // $E061 + #$E062, // $E062 + #$E063, // $E063 + #$E064, // $E064 + #$E065, // $E065 + #$E066, // $E066 + #$E067, // $E067 + #$E068, // $E068 + #$E069, // $E069 + #$E06A, // $E06A + #$E06B, // $E06B + #$E06C, // $E06C + #$E06D, // $E06D + #$E06E, // $E06E + #$E06F, // $E06F + #$E070, // $E070 + #$E071, // $E071 + #$E072, // $E072 + #$E073, // $E073 + #$E074, // $E074 + #$E075, // $E075 + #$E076, // $E076 + #$E077, // $E077 + #$E078, // $E078 + #$E079, // $E079 + #$E07A, // $E07A + #$E07B, // $E07B + #$E07C, // $E07C + #$E07D, // $E07D + #$E07E, // $E07E + #$E07F, // $E07F + #$E080, // $E080 + #$E081, // $E081 + #$E082, // $E082 + #$E083, // $E083 + #$E084, // $E084 + #$E085, // $E085 + #$E086, // $E086 + #$E087, // $E087 + #$E088, // $E088 + #$E089, // $E089 + #$E08A, // $E08A + #$E08B, // $E08B + #$E08C, // $E08C + #$E08D, // $E08D + #$E08E, // $E08E + #$E08F, // $E08F + #$E090, // $E090 + #$E091, // $E091 + #$E092, // $E092 + #$E093, // $E093 + #$E094, // $E094 + #$E095, // $E095 + #$E096, // $E096 + #$E097, // $E097 + #$E098, // $E098 + #$E099, // $E099 + #$E09A, // $E09A + #$E09B, // $E09B + #$E09C, // $E09C + #$E09D, // $E09D + #$E09E, // $E09E + #$E09F, // $E09F + #$E0A0, // $E0A0 + #$E0A1, // $E0A1 + #$E0A2, // $E0A2 + #$E0A3, // $E0A3 + #$E0A4, // $E0A4 + #$E0A5, // $E0A5 + #$E0A6, // $E0A6 + #$E0A7, // $E0A7 + #$E0A8, // $E0A8 + #$E0A9, // $E0A9 + #$E0AA, // $E0AA + #$E0AB, // $E0AB + #$E0AC, // $E0AC + #$E0AD, // $E0AD + #$E0AE, // $E0AE + #$E0AF, // $E0AF + #$E0B0, // $E0B0 + #$E0B1, // $E0B1 + #$E0B2, // $E0B2 + #$E0B3, // $E0B3 + #$E0B4, // $E0B4 + #$E0B5, // $E0B5 + #$E0B6, // $E0B6 + #$E0B7, // $E0B7 + #$E0B8, // $E0B8 + #$E0B9, // $E0B9 + #$E0BA, // $E0BA + #$E0BB, // $E0BB + #$E0BC, // $E0BC + #$E0BD, // $E0BD + #$E0BE, // $E0BE + #$E0BF, // $E0BF + #$E0C0, // $E0C0 + #$E0C1, // $E0C1 + #$E0C2, // $E0C2 + #$E0C3, // $E0C3 + #$E0C4, // $E0C4 + #$E0C5, // $E0C5 + #$E0C6, // $E0C6 + #$E0C7, // $E0C7 + #$E0C8, // $E0C8 + #$E0C9, // $E0C9 + #$E0CA, // $E0CA + #$E0CB, // $E0CB + #$E0CC, // $E0CC + #$E0CD, // $E0CD + #$E0CE, // $E0CE + #$E0CF, // $E0CF + #$E0D0, // $E0D0 + #$E0D1, // $E0D1 + #$E0D2, // $E0D2 + #$E0D3, // $E0D3 + #$E0D4, // $E0D4 + #$E0D5, // $E0D5 + #$E0D6, // $E0D6 + #$E0D7, // $E0D7 + #$E0D8, // $E0D8 + #$E0D9, // $E0D9 + #$E0DA, // $E0DA + #$E0DB, // $E0DB + #$E0DC, // $E0DC + #$E0DD, // $E0DD + #$E0DE, // $E0DE + #$E0DF, // $E0DF + #$E0E0, // $E0E0 + #$E0E1, // $E0E1 + #$E0E2, // $E0E2 + #$E0E3, // $E0E3 + #$E0E4, // $E0E4 + #$E0E5, // $E0E5 + #$E0E6, // $E0E6 + #$E0E7, // $E0E7 + #$E0E8, // $E0E8 + #$E0E9, // $E0E9 + #$E0EA, // $E0EA + #$E0EB, // $E0EB + #$E0EC, // $E0EC + #$E0ED, // $E0ED + #$E0EE, // $E0EE + #$E0EF, // $E0EF + #$E0F0, // $E0F0 + #$E0F1, // $E0F1 + #$E0F2, // $E0F2 + #$E0F3, // $E0F3 + #$E0F4, // $E0F4 + #$E0F5, // $E0F5 + #$E0F6, // $E0F6 + #$E0F7, // $E0F7 + #$E0F8, // $E0F8 + #$E0F9, // $E0F9 + #$E0FA, // $E0FA + #$E0FB, // $E0FB + #$E0FC, // $E0FC + #$E0FD, // $E0FD + #$E0FE, // $E0FE + #$E0FF, // $E0FF + #$E100, // $E100 + #$E101, // $E101 + #$E102, // $E102 + #$E103, // $E103 + #$E104, // $E104 + #$E105, // $E105 + #$E106, // $E106 + #$E107, // $E107 + #$E108, // $E108 + #$E109, // $E109 + #$E10A, // $E10A + #$E10B, // $E10B + #$E10C, // $E10C + #$E10D, // $E10D + #$E10E, // $E10E + #$E10F, // $E10F + #$E110, // $E110 + #$E111, // $E111 + #$E112, // $E112 + #$E113, // $E113 + #$E114, // $E114 + #$E115, // $E115 + #$E116, // $E116 + #$E117, // $E117 + #$E118, // $E118 + #$E119, // $E119 + #$E11A, // $E11A + #$E11B, // $E11B + #$E11C, // $E11C + #$E11D, // $E11D + #$E11E, // $E11E + #$E11F, // $E11F + #$E120, // $E120 + #$E121, // $E121 + #$E122, // $E122 + #$E123, // $E123 + #$E124, // $E124 + #$E125, // $E125 + #$E126, // $E126 + #$E127, // $E127 + #$E128, // $E128 + #$E129, // $E129 + #$E12A, // $E12A + #$E12B, // $E12B + #$E12C, // $E12C + #$E12D, // $E12D + #$E12E, // $E12E + #$E12F, // $E12F + #$E130, // $E130 + #$E131, // $E131 + #$E132, // $E132 + #$E133, // $E133 + #$E134, // $E134 + #$E135, // $E135 + #$E136, // $E136 + #$E137, // $E137 + #$E138, // $E138 + #$E139, // $E139 + #$E13A, // $E13A + #$E13B, // $E13B + #$E13C, // $E13C + #$E13D, // $E13D + #$E13E, // $E13E + #$E13F, // $E13F + #$E140, // $E140 + #$E141, // $E141 + #$E142, // $E142 + #$E143, // $E143 + #$E144, // $E144 + #$E145, // $E145 + #$E146, // $E146 + #$E147, // $E147 + #$E148, // $E148 + #$E149, // $E149 + #$E14A, // $E14A + #$E14B, // $E14B + #$E14C, // $E14C + #$E14D, // $E14D + #$E14E, // $E14E + #$E14F, // $E14F + #$E150, // $E150 + #$E151, // $E151 + #$E152, // $E152 + #$E153, // $E153 + #$E154, // $E154 + #$E155, // $E155 + #$E156, // $E156 + #$E157, // $E157 + #$E158, // $E158 + #$E159, // $E159 + #$E15A, // $E15A + #$E15B, // $E15B + #$E15C, // $E15C + #$E15D, // $E15D + #$E15E, // $E15E + #$E15F, // $E15F + #$E160, // $E160 + #$E161, // $E161 + #$E162, // $E162 + #$E163, // $E163 + #$E164, // $E164 + #$E165, // $E165 + #$E166, // $E166 + #$E167, // $E167 + #$E168, // $E168 + #$E169, // $E169 + #$E16A, // $E16A + #$E16B, // $E16B + #$E16C, // $E16C + #$E16D, // $E16D + #$E16E, // $E16E + #$E16F, // $E16F + #$E170, // $E170 + #$E171, // $E171 + #$E172, // $E172 + #$E173, // $E173 + #$E174, // $E174 + #$E175, // $E175 + #$E176, // $E176 + #$E177, // $E177 + #$E178, // $E178 + #$E179, // $E179 + #$E17A, // $E17A + #$E17B, // $E17B + #$E17C, // $E17C + #$E17D, // $E17D + #$E17E, // $E17E + #$E17F, // $E17F + #$E180, // $E180 + #$E181, // $E181 + #$E182, // $E182 + #$E183, // $E183 + #$E184, // $E184 + #$E185, // $E185 + #$E186, // $E186 + #$E187, // $E187 + #$E188, // $E188 + #$E189, // $E189 + #$E18A, // $E18A + #$E18B, // $E18B + #$E18C, // $E18C + #$E18D, // $E18D + #$E18E, // $E18E + #$E18F, // $E18F + #$E190, // $E190 + #$E191, // $E191 + #$E192, // $E192 + #$E193, // $E193 + #$E194, // $E194 + #$E195, // $E195 + #$E196, // $E196 + #$E197, // $E197 + #$E198, // $E198 + #$E199, // $E199 + #$E19A, // $E19A + #$E19B, // $E19B + #$E19C, // $E19C + #$E19D, // $E19D + #$E19E, // $E19E + #$E19F, // $E19F + #$E1A0, // $E1A0 + #$E1A1, // $E1A1 + #$E1A2, // $E1A2 + #$E1A3, // $E1A3 + #$E1A4, // $E1A4 + #$E1A5, // $E1A5 + #$E1A6, // $E1A6 + #$E1A7, // $E1A7 + #$E1A8, // $E1A8 + #$E1A9, // $E1A9 + #$E1AA, // $E1AA + #$E1AB, // $E1AB + #$E1AC, // $E1AC + #$E1AD, // $E1AD + #$E1AE, // $E1AE + #$E1AF, // $E1AF + #$E1B0, // $E1B0 + #$E1B1, // $E1B1 + #$E1B2, // $E1B2 + #$E1B3, // $E1B3 + #$E1B4, // $E1B4 + #$E1B5, // $E1B5 + #$E1B6, // $E1B6 + #$E1B7, // $E1B7 + #$E1B8, // $E1B8 + #$E1B9, // $E1B9 + #$E1BA, // $E1BA + #$E1BB, // $E1BB + #$E1BC, // $E1BC + #$E1BD, // $E1BD + #$E1BE, // $E1BE + #$E1BF, // $E1BF + #$E1C0, // $E1C0 + #$E1C1, // $E1C1 + #$E1C2, // $E1C2 + #$E1C3, // $E1C3 + #$E1C4, // $E1C4 + #$E1C5, // $E1C5 + #$E1C6, // $E1C6 + #$E1C7, // $E1C7 + #$E1C8, // $E1C8 + #$E1C9, // $E1C9 + #$E1CA, // $E1CA + #$E1CB, // $E1CB + #$E1CC, // $E1CC + #$E1CD, // $E1CD + #$E1CE, // $E1CE + #$E1CF, // $E1CF + #$E1D0, // $E1D0 + #$E1D1, // $E1D1 + #$E1D2, // $E1D2 + #$E1D3, // $E1D3 + #$E1D4, // $E1D4 + #$E1D5, // $E1D5 + #$E1D6, // $E1D6 + #$E1D7, // $E1D7 + #$E1D8, // $E1D8 + #$E1D9, // $E1D9 + #$E1DA, // $E1DA + #$E1DB, // $E1DB + #$E1DC, // $E1DC + #$E1DD, // $E1DD + #$E1DE, // $E1DE + #$E1DF, // $E1DF + #$E1E0, // $E1E0 + #$E1E1, // $E1E1 + #$E1E2, // $E1E2 + #$E1E3, // $E1E3 + #$E1E4, // $E1E4 + #$E1E5, // $E1E5 + #$E1E6, // $E1E6 + #$E1E7, // $E1E7 + #$E1E8, // $E1E8 + #$E1E9, // $E1E9 + #$E1EA, // $E1EA + #$E1EB, // $E1EB + #$E1EC, // $E1EC + #$E1ED, // $E1ED + #$E1EE, // $E1EE + #$E1EF, // $E1EF + #$E1F0, // $E1F0 + #$E1F1, // $E1F1 + #$E1F2, // $E1F2 + #$E1F3, // $E1F3 + #$E1F4, // $E1F4 + #$E1F5, // $E1F5 + #$E1F6, // $E1F6 + #$E1F7, // $E1F7 + #$E1F8, // $E1F8 + #$E1F9, // $E1F9 + #$E1FA, // $E1FA + #$E1FB, // $E1FB + #$E1FC, // $E1FC + #$E1FD, // $E1FD + #$E1FE, // $E1FE + #$E1FF, // $E1FF + #$E200, // $E200 + #$E201, // $E201 + #$E202, // $E202 + #$E203, // $E203 + #$E204, // $E204 + #$E205, // $E205 + #$E206, // $E206 + #$E207, // $E207 + #$E208, // $E208 + #$E209, // $E209 + #$E20A, // $E20A + #$E20B, // $E20B + #$E20C, // $E20C + #$E20D, // $E20D + #$E20E, // $E20E + #$E20F, // $E20F + #$E210, // $E210 + #$E211, // $E211 + #$E212, // $E212 + #$E213, // $E213 + #$E214, // $E214 + #$E215, // $E215 + #$E216, // $E216 + #$E217, // $E217 + #$E218, // $E218 + #$E219, // $E219 + #$E21A, // $E21A + #$E21B, // $E21B + #$E21C, // $E21C + #$E21D, // $E21D + #$E21E, // $E21E + #$E21F, // $E21F + #$E220, // $E220 + #$E221, // $E221 + #$E222, // $E222 + #$E223, // $E223 + #$E224, // $E224 + #$E225, // $E225 + #$E226, // $E226 + #$E227, // $E227 + #$E228, // $E228 + #$E229, // $E229 + #$E22A, // $E22A + #$E22B, // $E22B + #$E22C, // $E22C + #$E22D, // $E22D + #$E22E, // $E22E + #$E22F, // $E22F + #$E230, // $E230 + #$E231, // $E231 + #$E232, // $E232 + #$E233, // $E233 + #$E234, // $E234 + #$E235, // $E235 + #$E236, // $E236 + #$E237, // $E237 + #$E238, // $E238 + #$E239, // $E239 + #$E23A, // $E23A + #$E23B, // $E23B + #$E23C, // $E23C + #$E23D, // $E23D + #$E23E, // $E23E + #$E23F, // $E23F + #$E240, // $E240 + #$E241, // $E241 + #$E242, // $E242 + #$E243, // $E243 + #$E244, // $E244 + #$E245, // $E245 + #$E246, // $E246 + #$E247, // $E247 + #$E248, // $E248 + #$E249, // $E249 + #$E24A, // $E24A + #$E24B, // $E24B + #$E24C, // $E24C + #$E24D, // $E24D + #$E24E, // $E24E + #$E24F, // $E24F + #$E250, // $E250 + #$E251, // $E251 + #$E252, // $E252 + #$E253, // $E253 + #$E254, // $E254 + #$E255, // $E255 + #$E256, // $E256 + #$E257, // $E257 + #$E258, // $E258 + #$E259, // $E259 + #$E25A, // $E25A + #$E25B, // $E25B + #$E25C, // $E25C + #$E25D, // $E25D + #$E25E, // $E25E + #$E25F, // $E25F + #$E260, // $E260 + #$E261, // $E261 + #$E262, // $E262 + #$E263, // $E263 + #$E264, // $E264 + #$E265, // $E265 + #$E266, // $E266 + #$E267, // $E267 + #$E268, // $E268 + #$E269, // $E269 + #$E26A, // $E26A + #$E26B, // $E26B + #$E26C, // $E26C + #$E26D, // $E26D + #$E26E, // $E26E + #$E26F, // $E26F + #$E270, // $E270 + #$E271, // $E271 + #$E272, // $E272 + #$E273, // $E273 + #$E274, // $E274 + #$E275, // $E275 + #$E276, // $E276 + #$E277, // $E277 + #$E278, // $E278 + #$E279, // $E279 + #$E27A, // $E27A + #$E27B, // $E27B + #$E27C, // $E27C + #$E27D, // $E27D + #$E27E, // $E27E + #$E27F, // $E27F + #$E280, // $E280 + #$E281, // $E281 + #$E282, // $E282 + #$E283, // $E283 + #$E284, // $E284 + #$E285, // $E285 + #$E286, // $E286 + #$E287, // $E287 + #$E288, // $E288 + #$E289, // $E289 + #$E28A, // $E28A + #$E28B, // $E28B + #$E28C, // $E28C + #$E28D, // $E28D + #$E28E, // $E28E + #$E28F, // $E28F + #$E290, // $E290 + #$E291, // $E291 + #$E292, // $E292 + #$E293, // $E293 + #$E294, // $E294 + #$E295, // $E295 + #$E296, // $E296 + #$E297, // $E297 + #$E298, // $E298 + #$E299, // $E299 + #$E29A, // $E29A + #$E29B, // $E29B + #$E29C, // $E29C + #$E29D, // $E29D + #$E29E, // $E29E + #$E29F, // $E29F + #$E2A0, // $E2A0 + #$E2A1, // $E2A1 + #$E2A2, // $E2A2 + #$E2A3, // $E2A3 + #$E2A4, // $E2A4 + #$E2A5, // $E2A5 + #$E2A6, // $E2A6 + #$E2A7, // $E2A7 + #$E2A8, // $E2A8 + #$E2A9, // $E2A9 + #$E2AA, // $E2AA + #$E2AB, // $E2AB + #$E2AC, // $E2AC + #$E2AD, // $E2AD + #$E2AE, // $E2AE + #$E2AF, // $E2AF + #$E2B0, // $E2B0 + #$E2B1, // $E2B1 + #$E2B2, // $E2B2 + #$E2B3, // $E2B3 + #$E2B4, // $E2B4 + #$E2B5, // $E2B5 + #$E2B6, // $E2B6 + #$E2B7, // $E2B7 + #$E2B8, // $E2B8 + #$E2B9, // $E2B9 + #$E2BA, // $E2BA + #$E2BB, // $E2BB + #$E2BC, // $E2BC + #$E2BD, // $E2BD + #$E2BE, // $E2BE + #$E2BF, // $E2BF + #$E2C0, // $E2C0 + #$E2C1, // $E2C1 + #$E2C2, // $E2C2 + #$E2C3, // $E2C3 + #$E2C4, // $E2C4 + #$E2C5, // $E2C5 + #$E2C6, // $E2C6 + #$E2C7, // $E2C7 + #$E2C8, // $E2C8 + #$E2C9, // $E2C9 + #$E2CA, // $E2CA + #$E2CB, // $E2CB + #$E2CC, // $E2CC + #$E2CD, // $E2CD + #$E2CE, // $E2CE + #$E2CF, // $E2CF + #$E2D0, // $E2D0 + #$E2D1, // $E2D1 + #$E2D2, // $E2D2 + #$E2D3, // $E2D3 + #$E2D4, // $E2D4 + #$E2D5, // $E2D5 + #$E2D6, // $E2D6 + #$E2D7, // $E2D7 + #$E2D8, // $E2D8 + #$E2D9, // $E2D9 + #$E2DA, // $E2DA + #$E2DB, // $E2DB + #$E2DC, // $E2DC + #$E2DD, // $E2DD + #$E2DE, // $E2DE + #$E2DF, // $E2DF + #$E2E0, // $E2E0 + #$E2E1, // $E2E1 + #$E2E2, // $E2E2 + #$E2E3, // $E2E3 + #$E2E4, // $E2E4 + #$E2E5, // $E2E5 + #$E2E6, // $E2E6 + #$E2E7, // $E2E7 + #$E2E8, // $E2E8 + #$E2E9, // $E2E9 + #$E2EA, // $E2EA + #$E2EB, // $E2EB + #$E2EC, // $E2EC + #$E2ED, // $E2ED + #$E2EE, // $E2EE + #$E2EF, // $E2EF + #$E2F0, // $E2F0 + #$E2F1, // $E2F1 + #$E2F2, // $E2F2 + #$E2F3, // $E2F3 + #$E2F4, // $E2F4 + #$E2F5, // $E2F5 + #$E2F6, // $E2F6 + #$E2F7, // $E2F7 + #$E2F8, // $E2F8 + #$E2F9, // $E2F9 + #$E2FA, // $E2FA + #$E2FB, // $E2FB + #$E2FC, // $E2FC + #$E2FD, // $E2FD + #$E2FE, // $E2FE + #$E2FF, // $E2FF + #$E300, // $E300 + #$E301, // $E301 + #$E302, // $E302 + #$E303, // $E303 + #$E304, // $E304 + #$E305, // $E305 + #$E306, // $E306 + #$E307, // $E307 + #$E308, // $E308 + #$E309, // $E309 + #$E30A, // $E30A + #$E30B, // $E30B + #$E30C, // $E30C + #$E30D, // $E30D + #$E30E, // $E30E + #$E30F, // $E30F + #$E310, // $E310 + #$E311, // $E311 + #$E312, // $E312 + #$E313, // $E313 + #$E314, // $E314 + #$E315, // $E315 + #$E316, // $E316 + #$E317, // $E317 + #$E318, // $E318 + #$E319, // $E319 + #$E31A, // $E31A + #$E31B, // $E31B + #$E31C, // $E31C + #$E31D, // $E31D + #$E31E, // $E31E + #$E31F, // $E31F + #$E320, // $E320 + #$E321, // $E321 + #$E322, // $E322 + #$E323, // $E323 + #$E324, // $E324 + #$E325, // $E325 + #$E326, // $E326 + #$E327, // $E327 + #$E328, // $E328 + #$E329, // $E329 + #$E32A, // $E32A + #$E32B, // $E32B + #$E32C, // $E32C + #$E32D, // $E32D + #$E32E, // $E32E + #$E32F, // $E32F + #$E330, // $E330 + #$E331, // $E331 + #$E332, // $E332 + #$E333, // $E333 + #$E334, // $E334 + #$E335, // $E335 + #$E336, // $E336 + #$E337, // $E337 + #$E338, // $E338 + #$E339, // $E339 + #$E33A, // $E33A + #$E33B, // $E33B + #$E33C, // $E33C + #$E33D, // $E33D + #$E33E, // $E33E + #$E33F, // $E33F + #$E340, // $E340 + #$E341, // $E341 + #$E342, // $E342 + #$E343, // $E343 + #$E344, // $E344 + #$E345, // $E345 + #$E346, // $E346 + #$E347, // $E347 + #$E348, // $E348 + #$E349, // $E349 + #$E34A, // $E34A + #$E34B, // $E34B + #$E34C, // $E34C + #$E34D, // $E34D + #$E34E, // $E34E + #$E34F, // $E34F + #$E350, // $E350 + #$E351, // $E351 + #$E352, // $E352 + #$E353, // $E353 + #$E354, // $E354 + #$E355, // $E355 + #$E356, // $E356 + #$E357, // $E357 + #$E358, // $E358 + #$E359, // $E359 + #$E35A, // $E35A + #$E35B, // $E35B + #$E35C, // $E35C + #$E35D, // $E35D + #$E35E, // $E35E + #$E35F, // $E35F + #$E360, // $E360 + #$E361, // $E361 + #$E362, // $E362 + #$E363, // $E363 + #$E364, // $E364 + #$E365, // $E365 + #$E366, // $E366 + #$E367, // $E367 + #$E368, // $E368 + #$E369, // $E369 + #$E36A, // $E36A + #$E36B, // $E36B + #$E36C, // $E36C + #$E36D, // $E36D + #$E36E, // $E36E + #$E36F, // $E36F + #$E370, // $E370 + #$E371, // $E371 + #$E372, // $E372 + #$E373, // $E373 + #$E374, // $E374 + #$E375, // $E375 + #$E376, // $E376 + #$E377, // $E377 + #$E378, // $E378 + #$E379, // $E379 + #$E37A, // $E37A + #$E37B, // $E37B + #$E37C, // $E37C + #$E37D, // $E37D + #$E37E, // $E37E + #$E37F, // $E37F + #$E380, // $E380 + #$E381, // $E381 + #$E382, // $E382 + #$E383, // $E383 + #$E384, // $E384 + #$E385, // $E385 + #$E386, // $E386 + #$E387, // $E387 + #$E388, // $E388 + #$E389, // $E389 + #$E38A, // $E38A + #$E38B, // $E38B + #$E38C, // $E38C + #$E38D, // $E38D + #$E38E, // $E38E + #$E38F, // $E38F + #$E390, // $E390 + #$E391, // $E391 + #$E392, // $E392 + #$E393, // $E393 + #$E394, // $E394 + #$E395, // $E395 + #$E396, // $E396 + #$E397, // $E397 + #$E398, // $E398 + #$E399, // $E399 + #$E39A, // $E39A + #$E39B, // $E39B + #$E39C, // $E39C + #$E39D, // $E39D + #$E39E, // $E39E + #$E39F, // $E39F + #$E3A0, // $E3A0 + #$E3A1, // $E3A1 + #$E3A2, // $E3A2 + #$E3A3, // $E3A3 + #$E3A4, // $E3A4 + #$E3A5, // $E3A5 + #$E3A6, // $E3A6 + #$E3A7, // $E3A7 + #$E3A8, // $E3A8 + #$E3A9, // $E3A9 + #$E3AA, // $E3AA + #$E3AB, // $E3AB + #$E3AC, // $E3AC + #$E3AD, // $E3AD + #$E3AE, // $E3AE + #$E3AF, // $E3AF + #$E3B0, // $E3B0 + #$E3B1, // $E3B1 + #$E3B2, // $E3B2 + #$E3B3, // $E3B3 + #$E3B4, // $E3B4 + #$E3B5, // $E3B5 + #$E3B6, // $E3B6 + #$E3B7, // $E3B7 + #$E3B8, // $E3B8 + #$E3B9, // $E3B9 + #$E3BA, // $E3BA + #$E3BB, // $E3BB + #$E3BC, // $E3BC + #$E3BD, // $E3BD + #$E3BE, // $E3BE + #$E3BF, // $E3BF + #$E3C0, // $E3C0 + #$E3C1, // $E3C1 + #$E3C2, // $E3C2 + #$E3C3, // $E3C3 + #$E3C4, // $E3C4 + #$E3C5, // $E3C5 + #$E3C6, // $E3C6 + #$E3C7, // $E3C7 + #$E3C8, // $E3C8 + #$E3C9, // $E3C9 + #$E3CA, // $E3CA + #$E3CB, // $E3CB + #$E3CC, // $E3CC + #$E3CD, // $E3CD + #$E3CE, // $E3CE + #$E3CF, // $E3CF + #$E3D0, // $E3D0 + #$E3D1, // $E3D1 + #$E3D2, // $E3D2 + #$E3D3, // $E3D3 + #$E3D4, // $E3D4 + #$E3D5, // $E3D5 + #$E3D6, // $E3D6 + #$E3D7, // $E3D7 + #$E3D8, // $E3D8 + #$E3D9, // $E3D9 + #$E3DA, // $E3DA + #$E3DB, // $E3DB + #$E3DC, // $E3DC + #$E3DD, // $E3DD + #$E3DE, // $E3DE + #$E3DF, // $E3DF + #$E3E0, // $E3E0 + #$E3E1, // $E3E1 + #$E3E2, // $E3E2 + #$E3E3, // $E3E3 + #$E3E4, // $E3E4 + #$E3E5, // $E3E5 + #$E3E6, // $E3E6 + #$E3E7, // $E3E7 + #$E3E8, // $E3E8 + #$E3E9, // $E3E9 + #$E3EA, // $E3EA + #$E3EB, // $E3EB + #$E3EC, // $E3EC + #$E3ED, // $E3ED + #$E3EE, // $E3EE + #$E3EF, // $E3EF + #$E3F0, // $E3F0 + #$E3F1, // $E3F1 + #$E3F2, // $E3F2 + #$E3F3, // $E3F3 + #$E3F4, // $E3F4 + #$E3F5, // $E3F5 + #$E3F6, // $E3F6 + #$E3F7, // $E3F7 + #$E3F8, // $E3F8 + #$E3F9, // $E3F9 + #$E3FA, // $E3FA + #$E3FB, // $E3FB + #$E3FC, // $E3FC + #$E3FD, // $E3FD + #$E3FE, // $E3FE + #$E3FF, // $E3FF + #$E400, // $E400 + #$E401, // $E401 + #$E402, // $E402 + #$E403, // $E403 + #$E404, // $E404 + #$E405, // $E405 + #$E406, // $E406 + #$E407, // $E407 + #$E408, // $E408 + #$E409, // $E409 + #$E40A, // $E40A + #$E40B, // $E40B + #$E40C, // $E40C + #$E40D, // $E40D + #$E40E, // $E40E + #$E40F, // $E40F + #$E410, // $E410 + #$E411, // $E411 + #$E412, // $E412 + #$E413, // $E413 + #$E414, // $E414 + #$E415, // $E415 + #$E416, // $E416 + #$E417, // $E417 + #$E418, // $E418 + #$E419, // $E419 + #$E41A, // $E41A + #$E41B, // $E41B + #$E41C, // $E41C + #$E41D, // $E41D + #$E41E, // $E41E + #$E41F, // $E41F + #$E420, // $E420 + #$E421, // $E421 + #$E422, // $E422 + #$E423, // $E423 + #$E424, // $E424 + #$E425, // $E425 + #$E426, // $E426 + #$E427, // $E427 + #$E428, // $E428 + #$E429, // $E429 + #$E42A, // $E42A + #$E42B, // $E42B + #$E42C, // $E42C + #$E42D, // $E42D + #$E42E, // $E42E + #$E42F, // $E42F + #$E430, // $E430 + #$E431, // $E431 + #$E432, // $E432 + #$E433, // $E433 + #$E434, // $E434 + #$E435, // $E435 + #$E436, // $E436 + #$E437, // $E437 + #$E438, // $E438 + #$E439, // $E439 + #$E43A, // $E43A + #$E43B, // $E43B + #$E43C, // $E43C + #$E43D, // $E43D + #$E43E, // $E43E + #$E43F, // $E43F + #$E440, // $E440 + #$E441, // $E441 + #$E442, // $E442 + #$E443, // $E443 + #$E444, // $E444 + #$E445, // $E445 + #$E446, // $E446 + #$E447, // $E447 + #$E448, // $E448 + #$E449, // $E449 + #$E44A, // $E44A + #$E44B, // $E44B + #$E44C, // $E44C + #$E44D, // $E44D + #$E44E, // $E44E + #$E44F, // $E44F + #$E450, // $E450 + #$E451, // $E451 + #$E452, // $E452 + #$E453, // $E453 + #$E454, // $E454 + #$E455, // $E455 + #$E456, // $E456 + #$E457, // $E457 + #$E458, // $E458 + #$E459, // $E459 + #$E45A, // $E45A + #$E45B, // $E45B + #$E45C, // $E45C + #$E45D, // $E45D + #$E45E, // $E45E + #$E45F, // $E45F + #$E460, // $E460 + #$E461, // $E461 + #$E462, // $E462 + #$E463, // $E463 + #$E464, // $E464 + #$E465, // $E465 + #$E466, // $E466 + #$E467, // $E467 + #$E468, // $E468 + #$E469, // $E469 + #$E46A, // $E46A + #$E46B, // $E46B + #$E46C, // $E46C + #$E46D, // $E46D + #$E46E, // $E46E + #$E46F, // $E46F + #$E470, // $E470 + #$E471, // $E471 + #$E472, // $E472 + #$E473, // $E473 + #$E474, // $E474 + #$E475, // $E475 + #$E476, // $E476 + #$E477, // $E477 + #$E478, // $E478 + #$E479, // $E479 + #$E47A, // $E47A + #$E47B, // $E47B + #$E47C, // $E47C + #$E47D, // $E47D + #$E47E, // $E47E + #$E47F, // $E47F + #$E480, // $E480 + #$E481, // $E481 + #$E482, // $E482 + #$E483, // $E483 + #$E484, // $E484 + #$E485, // $E485 + #$E486, // $E486 + #$E487, // $E487 + #$E488, // $E488 + #$E489, // $E489 + #$E48A, // $E48A + #$E48B, // $E48B + #$E48C, // $E48C + #$E48D, // $E48D + #$E48E, // $E48E + #$E48F, // $E48F + #$E490, // $E490 + #$E491, // $E491 + #$E492, // $E492 + #$E493, // $E493 + #$E494, // $E494 + #$E495, // $E495 + #$E496, // $E496 + #$E497, // $E497 + #$E498, // $E498 + #$E499, // $E499 + #$E49A, // $E49A + #$E49B, // $E49B + #$E49C, // $E49C + #$E49D, // $E49D + #$E49E, // $E49E + #$E49F, // $E49F + #$E4A0, // $E4A0 + #$E4A1, // $E4A1 + #$E4A2, // $E4A2 + #$E4A3, // $E4A3 + #$E4A4, // $E4A4 + #$E4A5, // $E4A5 + #$E4A6, // $E4A6 + #$E4A7, // $E4A7 + #$E4A8, // $E4A8 + #$E4A9, // $E4A9 + #$E4AA, // $E4AA + #$E4AB, // $E4AB + #$E4AC, // $E4AC + #$E4AD, // $E4AD + #$E4AE, // $E4AE + #$E4AF, // $E4AF + #$E4B0, // $E4B0 + #$E4B1, // $E4B1 + #$E4B2, // $E4B2 + #$E4B3, // $E4B3 + #$E4B4, // $E4B4 + #$E4B5, // $E4B5 + #$E4B6, // $E4B6 + #$E4B7, // $E4B7 + #$E4B8, // $E4B8 + #$E4B9, // $E4B9 + #$E4BA, // $E4BA + #$E4BB, // $E4BB + #$E4BC, // $E4BC + #$E4BD, // $E4BD + #$E4BE, // $E4BE + #$E4BF, // $E4BF + #$E4C0, // $E4C0 + #$E4C1, // $E4C1 + #$E4C2, // $E4C2 + #$E4C3, // $E4C3 + #$E4C4, // $E4C4 + #$E4C5, // $E4C5 + #$E4C6, // $E4C6 + #$E4C7, // $E4C7 + #$E4C8, // $E4C8 + #$E4C9, // $E4C9 + #$E4CA, // $E4CA + #$E4CB, // $E4CB + #$E4CC, // $E4CC + #$E4CD, // $E4CD + #$E4CE, // $E4CE + #$E4CF, // $E4CF + #$E4D0, // $E4D0 + #$E4D1, // $E4D1 + #$E4D2, // $E4D2 + #$E4D3, // $E4D3 + #$E4D4, // $E4D4 + #$E4D5, // $E4D5 + #$E4D6, // $E4D6 + #$E4D7, // $E4D7 + #$E4D8, // $E4D8 + #$E4D9, // $E4D9 + #$E4DA, // $E4DA + #$E4DB, // $E4DB + #$E4DC, // $E4DC + #$E4DD, // $E4DD + #$E4DE, // $E4DE + #$E4DF, // $E4DF + #$E4E0, // $E4E0 + #$E4E1, // $E4E1 + #$E4E2, // $E4E2 + #$E4E3, // $E4E3 + #$E4E4, // $E4E4 + #$E4E5, // $E4E5 + #$E4E6, // $E4E6 + #$E4E7, // $E4E7 + #$E4E8, // $E4E8 + #$E4E9, // $E4E9 + #$E4EA, // $E4EA + #$E4EB, // $E4EB + #$E4EC, // $E4EC + #$E4ED, // $E4ED + #$E4EE, // $E4EE + #$E4EF, // $E4EF + #$E4F0, // $E4F0 + #$E4F1, // $E4F1 + #$E4F2, // $E4F2 + #$E4F3, // $E4F3 + #$E4F4, // $E4F4 + #$E4F5, // $E4F5 + #$E4F6, // $E4F6 + #$E4F7, // $E4F7 + #$E4F8, // $E4F8 + #$E4F9, // $E4F9 + #$E4FA, // $E4FA + #$E4FB, // $E4FB + #$E4FC, // $E4FC + #$E4FD, // $E4FD + #$E4FE, // $E4FE + #$E4FF, // $E4FF + #$E500, // $E500 + #$E501, // $E501 + #$E502, // $E502 + #$E503, // $E503 + #$E504, // $E504 + #$E505, // $E505 + #$E506, // $E506 + #$E507, // $E507 + #$E508, // $E508 + #$E509, // $E509 + #$E50A, // $E50A + #$E50B, // $E50B + #$E50C, // $E50C + #$E50D, // $E50D + #$E50E, // $E50E + #$E50F, // $E50F + #$E510, // $E510 + #$E511, // $E511 + #$E512, // $E512 + #$E513, // $E513 + #$E514, // $E514 + #$E515, // $E515 + #$E516, // $E516 + #$E517, // $E517 + #$E518, // $E518 + #$E519, // $E519 + #$E51A, // $E51A + #$E51B, // $E51B + #$E51C, // $E51C + #$E51D, // $E51D + #$E51E, // $E51E + #$E51F, // $E51F + #$E520, // $E520 + #$E521, // $E521 + #$E522, // $E522 + #$E523, // $E523 + #$E524, // $E524 + #$E525, // $E525 + #$E526, // $E526 + #$E527, // $E527 + #$E528, // $E528 + #$E529, // $E529 + #$E52A, // $E52A + #$E52B, // $E52B + #$E52C, // $E52C + #$E52D, // $E52D + #$E52E, // $E52E + #$E52F, // $E52F + #$E530, // $E530 + #$E531, // $E531 + #$E532, // $E532 + #$E533, // $E533 + #$E534, // $E534 + #$E535, // $E535 + #$E536, // $E536 + #$E537, // $E537 + #$E538, // $E538 + #$E539, // $E539 + #$E53A, // $E53A + #$E53B, // $E53B + #$E53C, // $E53C + #$E53D, // $E53D + #$E53E, // $E53E + #$E53F, // $E53F + #$E540, // $E540 + #$E541, // $E541 + #$E542, // $E542 + #$E543, // $E543 + #$E544, // $E544 + #$E545, // $E545 + #$E546, // $E546 + #$E547, // $E547 + #$E548, // $E548 + #$E549, // $E549 + #$E54A, // $E54A + #$E54B, // $E54B + #$E54C, // $E54C + #$E54D, // $E54D + #$E54E, // $E54E + #$E54F, // $E54F + #$E550, // $E550 + #$E551, // $E551 + #$E552, // $E552 + #$E553, // $E553 + #$E554, // $E554 + #$E555, // $E555 + #$E556, // $E556 + #$E557, // $E557 + #$E558, // $E558 + #$E559, // $E559 + #$E55A, // $E55A + #$E55B, // $E55B + #$E55C, // $E55C + #$E55D, // $E55D + #$E55E, // $E55E + #$E55F, // $E55F + #$E560, // $E560 + #$E561, // $E561 + #$E562, // $E562 + #$E563, // $E563 + #$E564, // $E564 + #$E565, // $E565 + #$E566, // $E566 + #$E567, // $E567 + #$E568, // $E568 + #$E569, // $E569 + #$E56A, // $E56A + #$E56B, // $E56B + #$E56C, // $E56C + #$E56D, // $E56D + #$E56E, // $E56E + #$E56F, // $E56F + #$E570, // $E570 + #$E571, // $E571 + #$E572, // $E572 + #$E573, // $E573 + #$E574, // $E574 + #$E575, // $E575 + #$E576, // $E576 + #$E577, // $E577 + #$E578, // $E578 + #$E579, // $E579 + #$E57A, // $E57A + #$E57B, // $E57B + #$E57C, // $E57C + #$E57D, // $E57D + #$E57E, // $E57E + #$E57F, // $E57F + #$E580, // $E580 + #$E581, // $E581 + #$E582, // $E582 + #$E583, // $E583 + #$E584, // $E584 + #$E585, // $E585 + #$E586, // $E586 + #$E587, // $E587 + #$E588, // $E588 + #$E589, // $E589 + #$E58A, // $E58A + #$E58B, // $E58B + #$E58C, // $E58C + #$E58D, // $E58D + #$E58E, // $E58E + #$E58F, // $E58F + #$E590, // $E590 + #$E591, // $E591 + #$E592, // $E592 + #$E593, // $E593 + #$E594, // $E594 + #$E595, // $E595 + #$E596, // $E596 + #$E597, // $E597 + #$E598, // $E598 + #$E599, // $E599 + #$E59A, // $E59A + #$E59B, // $E59B + #$E59C, // $E59C + #$E59D, // $E59D + #$E59E, // $E59E + #$E59F, // $E59F + #$E5A0, // $E5A0 + #$E5A1, // $E5A1 + #$E5A2, // $E5A2 + #$E5A3, // $E5A3 + #$E5A4, // $E5A4 + #$E5A5, // $E5A5 + #$E5A6, // $E5A6 + #$E5A7, // $E5A7 + #$E5A8, // $E5A8 + #$E5A9, // $E5A9 + #$E5AA, // $E5AA + #$E5AB, // $E5AB + #$E5AC, // $E5AC + #$E5AD, // $E5AD + #$E5AE, // $E5AE + #$E5AF, // $E5AF + #$E5B0, // $E5B0 + #$E5B1, // $E5B1 + #$E5B2, // $E5B2 + #$E5B3, // $E5B3 + #$E5B4, // $E5B4 + #$E5B5, // $E5B5 + #$E5B6, // $E5B6 + #$E5B7, // $E5B7 + #$E5B8, // $E5B8 + #$E5B9, // $E5B9 + #$E5BA, // $E5BA + #$E5BB, // $E5BB + #$E5BC, // $E5BC + #$E5BD, // $E5BD + #$E5BE, // $E5BE + #$E5BF, // $E5BF + #$E5C0, // $E5C0 + #$E5C1, // $E5C1 + #$E5C2, // $E5C2 + #$E5C3, // $E5C3 + #$E5C4, // $E5C4 + #$E5C5, // $E5C5 + #$E5C6, // $E5C6 + #$E5C7, // $E5C7 + #$E5C8, // $E5C8 + #$E5C9, // $E5C9 + #$E5CA, // $E5CA + #$E5CB, // $E5CB + #$E5CC, // $E5CC + #$E5CD, // $E5CD + #$E5CE, // $E5CE + #$E5CF, // $E5CF + #$E5D0, // $E5D0 + #$E5D1, // $E5D1 + #$E5D2, // $E5D2 + #$E5D3, // $E5D3 + #$E5D4, // $E5D4 + #$E5D5, // $E5D5 + #$E5D6, // $E5D6 + #$E5D7, // $E5D7 + #$E5D8, // $E5D8 + #$E5D9, // $E5D9 + #$E5DA, // $E5DA + #$E5DB, // $E5DB + #$E5DC, // $E5DC + #$E5DD, // $E5DD + #$E5DE, // $E5DE + #$E5DF, // $E5DF + #$E5E0, // $E5E0 + #$E5E1, // $E5E1 + #$E5E2, // $E5E2 + #$E5E3, // $E5E3 + #$E5E4, // $E5E4 + #$E5E5, // $E5E5 + #$E5E6, // $E5E6 + #$E5E7, // $E5E7 + #$E5E8, // $E5E8 + #$E5E9, // $E5E9 + #$E5EA, // $E5EA + #$E5EB, // $E5EB + #$E5EC, // $E5EC + #$E5ED, // $E5ED + #$E5EE, // $E5EE + #$E5EF, // $E5EF + #$E5F0, // $E5F0 + #$E5F1, // $E5F1 + #$E5F2, // $E5F2 + #$E5F3, // $E5F3 + #$E5F4, // $E5F4 + #$E5F5, // $E5F5 + #$E5F6, // $E5F6 + #$E5F7, // $E5F7 + #$E5F8, // $E5F8 + #$E5F9, // $E5F9 + #$E5FA, // $E5FA + #$E5FB, // $E5FB + #$E5FC, // $E5FC + #$E5FD, // $E5FD + #$E5FE, // $E5FE + #$E5FF, // $E5FF + #$E600, // $E600 + #$E601, // $E601 + #$E602, // $E602 + #$E603, // $E603 + #$E604, // $E604 + #$E605, // $E605 + #$E606, // $E606 + #$E607, // $E607 + #$E608, // $E608 + #$E609, // $E609 + #$E60A, // $E60A + #$E60B, // $E60B + #$E60C, // $E60C + #$E60D, // $E60D + #$E60E, // $E60E + #$E60F, // $E60F + #$E610, // $E610 + #$E611, // $E611 + #$E612, // $E612 + #$E613, // $E613 + #$E614, // $E614 + #$E615, // $E615 + #$E616, // $E616 + #$E617, // $E617 + #$E618, // $E618 + #$E619, // $E619 + #$E61A, // $E61A + #$E61B, // $E61B + #$E61C, // $E61C + #$E61D, // $E61D + #$E61E, // $E61E + #$E61F, // $E61F + #$E620, // $E620 + #$E621, // $E621 + #$E622, // $E622 + #$E623, // $E623 + #$E624, // $E624 + #$E625, // $E625 + #$E626, // $E626 + #$E627, // $E627 + #$E628, // $E628 + #$E629, // $E629 + #$E62A, // $E62A + #$E62B, // $E62B + #$E62C, // $E62C + #$E62D, // $E62D + #$E62E, // $E62E + #$E62F, // $E62F + #$E630, // $E630 + #$E631, // $E631 + #$E632, // $E632 + #$E633, // $E633 + #$E634, // $E634 + #$E635, // $E635 + #$E636, // $E636 + #$E637, // $E637 + #$E638, // $E638 + #$E639, // $E639 + #$E63A, // $E63A + #$E63B, // $E63B + #$E63C, // $E63C + #$E63D, // $E63D + #$E63E, // $E63E + #$E63F, // $E63F + #$E640, // $E640 + #$E641, // $E641 + #$E642, // $E642 + #$E643, // $E643 + #$E644, // $E644 + #$E645, // $E645 + #$E646, // $E646 + #$E647, // $E647 + #$E648, // $E648 + #$E649, // $E649 + #$E64A, // $E64A + #$E64B, // $E64B + #$E64C, // $E64C + #$E64D, // $E64D + #$E64E, // $E64E + #$E64F, // $E64F + #$E650, // $E650 + #$E651, // $E651 + #$E652, // $E652 + #$E653, // $E653 + #$E654, // $E654 + #$E655, // $E655 + #$E656, // $E656 + #$E657, // $E657 + #$E658, // $E658 + #$E659, // $E659 + #$E65A, // $E65A + #$E65B, // $E65B + #$E65C, // $E65C + #$E65D, // $E65D + #$E65E, // $E65E + #$E65F, // $E65F + #$E660, // $E660 + #$E661, // $E661 + #$E662, // $E662 + #$E663, // $E663 + #$E664, // $E664 + #$E665, // $E665 + #$E666, // $E666 + #$E667, // $E667 + #$E668, // $E668 + #$E669, // $E669 + #$E66A, // $E66A + #$E66B, // $E66B + #$E66C, // $E66C + #$E66D, // $E66D + #$E66E, // $E66E + #$E66F, // $E66F + #$E670, // $E670 + #$E671, // $E671 + #$E672, // $E672 + #$E673, // $E673 + #$E674, // $E674 + #$E675, // $E675 + #$E676, // $E676 + #$E677, // $E677 + #$E678, // $E678 + #$E679, // $E679 + #$E67A, // $E67A + #$E67B, // $E67B + #$E67C, // $E67C + #$E67D, // $E67D + #$E67E, // $E67E + #$E67F, // $E67F + #$E680, // $E680 + #$E681, // $E681 + #$E682, // $E682 + #$E683, // $E683 + #$E684, // $E684 + #$E685, // $E685 + #$E686, // $E686 + #$E687, // $E687 + #$E688, // $E688 + #$E689, // $E689 + #$E68A, // $E68A + #$E68B, // $E68B + #$E68C, // $E68C + #$E68D, // $E68D + #$E68E, // $E68E + #$E68F, // $E68F + #$E690, // $E690 + #$E691, // $E691 + #$E692, // $E692 + #$E693, // $E693 + #$E694, // $E694 + #$E695, // $E695 + #$E696, // $E696 + #$E697, // $E697 + #$E698, // $E698 + #$E699, // $E699 + #$E69A, // $E69A + #$E69B, // $E69B + #$E69C, // $E69C + #$E69D, // $E69D + #$E69E, // $E69E + #$E69F, // $E69F + #$E6A0, // $E6A0 + #$E6A1, // $E6A1 + #$E6A2, // $E6A2 + #$E6A3, // $E6A3 + #$E6A4, // $E6A4 + #$E6A5, // $E6A5 + #$E6A6, // $E6A6 + #$E6A7, // $E6A7 + #$E6A8, // $E6A8 + #$E6A9, // $E6A9 + #$E6AA, // $E6AA + #$E6AB, // $E6AB + #$E6AC, // $E6AC + #$E6AD, // $E6AD + #$E6AE, // $E6AE + #$E6AF, // $E6AF + #$E6B0, // $E6B0 + #$E6B1, // $E6B1 + #$E6B2, // $E6B2 + #$E6B3, // $E6B3 + #$E6B4, // $E6B4 + #$E6B5, // $E6B5 + #$E6B6, // $E6B6 + #$E6B7, // $E6B7 + #$E6B8, // $E6B8 + #$E6B9, // $E6B9 + #$E6BA, // $E6BA + #$E6BB, // $E6BB + #$E6BC, // $E6BC + #$E6BD, // $E6BD + #$E6BE, // $E6BE + #$E6BF, // $E6BF + #$E6C0, // $E6C0 + #$E6C1, // $E6C1 + #$E6C2, // $E6C2 + #$E6C3, // $E6C3 + #$E6C4, // $E6C4 + #$E6C5, // $E6C5 + #$E6C6, // $E6C6 + #$E6C7, // $E6C7 + #$E6C8, // $E6C8 + #$E6C9, // $E6C9 + #$E6CA, // $E6CA + #$E6CB, // $E6CB + #$E6CC, // $E6CC + #$E6CD, // $E6CD + #$E6CE, // $E6CE + #$E6CF, // $E6CF + #$E6D0, // $E6D0 + #$E6D1, // $E6D1 + #$E6D2, // $E6D2 + #$E6D3, // $E6D3 + #$E6D4, // $E6D4 + #$E6D5, // $E6D5 + #$E6D6, // $E6D6 + #$E6D7, // $E6D7 + #$E6D8, // $E6D8 + #$E6D9, // $E6D9 + #$E6DA, // $E6DA + #$E6DB, // $E6DB + #$E6DC, // $E6DC + #$E6DD, // $E6DD + #$E6DE, // $E6DE + #$E6DF, // $E6DF + #$E6E0, // $E6E0 + #$E6E1, // $E6E1 + #$E6E2, // $E6E2 + #$E6E3, // $E6E3 + #$E6E4, // $E6E4 + #$E6E5, // $E6E5 + #$E6E6, // $E6E6 + #$E6E7, // $E6E7 + #$E6E8, // $E6E8 + #$E6E9, // $E6E9 + #$E6EA, // $E6EA + #$E6EB, // $E6EB + #$E6EC, // $E6EC + #$E6ED, // $E6ED + #$E6EE, // $E6EE + #$E6EF, // $E6EF + #$E6F0, // $E6F0 + #$E6F1, // $E6F1 + #$E6F2, // $E6F2 + #$E6F3, // $E6F3 + #$E6F4, // $E6F4 + #$E6F5, // $E6F5 + #$E6F6, // $E6F6 + #$E6F7, // $E6F7 + #$E6F8, // $E6F8 + #$E6F9, // $E6F9 + #$E6FA, // $E6FA + #$E6FB, // $E6FB + #$E6FC, // $E6FC + #$E6FD, // $E6FD + #$E6FE, // $E6FE + #$E6FF, // $E6FF + #$E700, // $E700 + #$E701, // $E701 + #$E702, // $E702 + #$E703, // $E703 + #$E704, // $E704 + #$E705, // $E705 + #$E706, // $E706 + #$E707, // $E707 + #$E708, // $E708 + #$E709, // $E709 + #$E70A, // $E70A + #$E70B, // $E70B + #$E70C, // $E70C + #$E70D, // $E70D + #$E70E, // $E70E + #$E70F, // $E70F + #$E710, // $E710 + #$E711, // $E711 + #$E712, // $E712 + #$E713, // $E713 + #$E714, // $E714 + #$E715, // $E715 + #$E716, // $E716 + #$E717, // $E717 + #$E718, // $E718 + #$E719, // $E719 + #$E71A, // $E71A + #$E71B, // $E71B + #$E71C, // $E71C + #$E71D, // $E71D + #$E71E, // $E71E + #$E71F, // $E71F + #$E720, // $E720 + #$E721, // $E721 + #$E722, // $E722 + #$E723, // $E723 + #$E724, // $E724 + #$E725, // $E725 + #$E726, // $E726 + #$E727, // $E727 + #$E728, // $E728 + #$E729, // $E729 + #$E72A, // $E72A + #$E72B, // $E72B + #$E72C, // $E72C + #$E72D, // $E72D + #$E72E, // $E72E + #$E72F, // $E72F + #$E730, // $E730 + #$E731, // $E731 + #$E732, // $E732 + #$E733, // $E733 + #$E734, // $E734 + #$E735, // $E735 + #$E736, // $E736 + #$E737, // $E737 + #$E738, // $E738 + #$E739, // $E739 + #$E73A, // $E73A + #$E73B, // $E73B + #$E73C, // $E73C + #$E73D, // $E73D + #$E73E, // $E73E + #$E73F, // $E73F + #$E740, // $E740 + #$E741, // $E741 + #$E742, // $E742 + #$E743, // $E743 + #$E744, // $E744 + #$E745, // $E745 + #$E746, // $E746 + #$E747, // $E747 + #$E748, // $E748 + #$E749, // $E749 + #$E74A, // $E74A + #$E74B, // $E74B + #$E74C, // $E74C + #$E74D, // $E74D + #$E74E, // $E74E + #$E74F, // $E74F + #$E750, // $E750 + #$E751, // $E751 + #$E752, // $E752 + #$E753, // $E753 + #$E754, // $E754 + #$E755, // $E755 + #$E756, // $E756 + #$E757, // $E757 + #$E758, // $E758 + #$E759, // $E759 + #$E75A, // $E75A + #$E75B, // $E75B + #$E75C, // $E75C + #$E75D, // $E75D + #$E75E, // $E75E + #$E75F, // $E75F + #$E760, // $E760 + #$E761, // $E761 + #$E762, // $E762 + #$E763, // $E763 + #$E764, // $E764 + #$E765, // $E765 + #$E766, // $E766 + #$E767, // $E767 + #$E768, // $E768 + #$E769, // $E769 + #$E76A, // $E76A + #$E76B, // $E76B + #$E76C, // $E76C + #$E76D, // $E76D + #$E76E, // $E76E + #$E76F, // $E76F + #$E770, // $E770 + #$E771, // $E771 + #$E772, // $E772 + #$E773, // $E773 + #$E774, // $E774 + #$E775, // $E775 + #$E776, // $E776 + #$E777, // $E777 + #$E778, // $E778 + #$E779, // $E779 + #$E77A, // $E77A + #$E77B, // $E77B + #$E77C, // $E77C + #$E77D, // $E77D + #$E77E, // $E77E + #$E77F, // $E77F + #$E780, // $E780 + #$E781, // $E781 + #$E782, // $E782 + #$E783, // $E783 + #$E784, // $E784 + #$E785, // $E785 + #$E786, // $E786 + #$E787, // $E787 + #$E788, // $E788 + #$E789, // $E789 + #$E78A, // $E78A + #$E78B, // $E78B + #$E78C, // $E78C + #$E78D, // $E78D + #$E78E, // $E78E + #$E78F, // $E78F + #$E790, // $E790 + #$E791, // $E791 + #$E792, // $E792 + #$E793, // $E793 + #$E794, // $E794 + #$E795, // $E795 + #$E796, // $E796 + #$E797, // $E797 + #$E798, // $E798 + #$E799, // $E799 + #$E79A, // $E79A + #$E79B, // $E79B + #$E79C, // $E79C + #$E79D, // $E79D + #$E79E, // $E79E + #$E79F, // $E79F + #$E7A0, // $E7A0 + #$E7A1, // $E7A1 + #$E7A2, // $E7A2 + #$E7A3, // $E7A3 + #$E7A4, // $E7A4 + #$E7A5, // $E7A5 + #$E7A6, // $E7A6 + #$E7A7, // $E7A7 + #$E7A8, // $E7A8 + #$E7A9, // $E7A9 + #$E7AA, // $E7AA + #$E7AB, // $E7AB + #$E7AC, // $E7AC + #$E7AD, // $E7AD + #$E7AE, // $E7AE + #$E7AF, // $E7AF + #$E7B0, // $E7B0 + #$E7B1, // $E7B1 + #$E7B2, // $E7B2 + #$E7B3, // $E7B3 + #$E7B4, // $E7B4 + #$E7B5, // $E7B5 + #$E7B6, // $E7B6 + #$E7B7, // $E7B7 + #$E7B8, // $E7B8 + #$E7B9, // $E7B9 + #$E7BA, // $E7BA + #$E7BB, // $E7BB + #$E7BC, // $E7BC + #$E7BD, // $E7BD + #$E7BE, // $E7BE + #$E7BF, // $E7BF + #$E7C0, // $E7C0 + #$E7C1, // $E7C1 + #$E7C2, // $E7C2 + #$E7C3, // $E7C3 + #$E7C4, // $E7C4 + #$E7C5, // $E7C5 + #$E7C6, // $E7C6 + #$E7C7, // $E7C7 + #$E7C8, // $E7C8 + #$E7C9, // $E7C9 + #$E7CA, // $E7CA + #$E7CB, // $E7CB + #$E7CC, // $E7CC + #$E7CD, // $E7CD + #$E7CE, // $E7CE + #$E7CF, // $E7CF + #$E7D0, // $E7D0 + #$E7D1, // $E7D1 + #$E7D2, // $E7D2 + #$E7D3, // $E7D3 + #$E7D4, // $E7D4 + #$E7D5, // $E7D5 + #$E7D6, // $E7D6 + #$E7D7, // $E7D7 + #$E7D8, // $E7D8 + #$E7D9, // $E7D9 + #$E7DA, // $E7DA + #$E7DB, // $E7DB + #$E7DC, // $E7DC + #$E7DD, // $E7DD + #$E7DE, // $E7DE + #$E7DF, // $E7DF + #$E7E0, // $E7E0 + #$E7E1, // $E7E1 + #$E7E2, // $E7E2 + #$E7E3, // $E7E3 + #$E7E4, // $E7E4 + #$E7E5, // $E7E5 + #$E7E6, // $E7E6 + #$E7E7, // $E7E7 + #$E7E8, // $E7E8 + #$E7E9, // $E7E9 + #$E7EA, // $E7EA + #$E7EB, // $E7EB + #$E7EC, // $E7EC + #$E7ED, // $E7ED + #$E7EE, // $E7EE + #$E7EF, // $E7EF + #$E7F0, // $E7F0 + #$E7F1, // $E7F1 + #$E7F2, // $E7F2 + #$E7F3, // $E7F3 + #$E7F4, // $E7F4 + #$E7F5, // $E7F5 + #$E7F6, // $E7F6 + #$E7F7, // $E7F7 + #$E7F8, // $E7F8 + #$E7F9, // $E7F9 + #$E7FA, // $E7FA + #$E7FB, // $E7FB + #$E7FC, // $E7FC + #$E7FD, // $E7FD + #$E7FE, // $E7FE + #$E7FF, // $E7FF + #$E800, // $E800 + #$E801, // $E801 + #$E802, // $E802 + #$E803, // $E803 + #$E804, // $E804 + #$E805, // $E805 + #$E806, // $E806 + #$E807, // $E807 + #$E808, // $E808 + #$E809, // $E809 + #$E80A, // $E80A + #$E80B, // $E80B + #$E80C, // $E80C + #$E80D, // $E80D + #$E80E, // $E80E + #$E80F, // $E80F + #$E810, // $E810 + #$E811, // $E811 + #$E812, // $E812 + #$E813, // $E813 + #$E814, // $E814 + #$E815, // $E815 + #$E816, // $E816 + #$E817, // $E817 + #$E818, // $E818 + #$E819, // $E819 + #$E81A, // $E81A + #$E81B, // $E81B + #$E81C, // $E81C + #$E81D, // $E81D + #$E81E, // $E81E + #$E81F, // $E81F + #$E820, // $E820 + #$E821, // $E821 + #$E822, // $E822 + #$E823, // $E823 + #$E824, // $E824 + #$E825, // $E825 + #$E826, // $E826 + #$E827, // $E827 + #$E828, // $E828 + #$E829, // $E829 + #$E82A, // $E82A + #$E82B, // $E82B + #$E82C, // $E82C + #$E82D, // $E82D + #$E82E, // $E82E + #$E82F, // $E82F + #$E830, // $E830 + #$E831, // $E831 + #$E832, // $E832 + #$E833, // $E833 + #$E834, // $E834 + #$E835, // $E835 + #$E836, // $E836 + #$E837, // $E837 + #$E838, // $E838 + #$E839, // $E839 + #$E83A, // $E83A + #$E83B, // $E83B + #$E83C, // $E83C + #$E83D, // $E83D + #$E83E, // $E83E + #$E83F, // $E83F + #$E840, // $E840 + #$E841, // $E841 + #$E842, // $E842 + #$E843, // $E843 + #$E844, // $E844 + #$E845, // $E845 + #$E846, // $E846 + #$E847, // $E847 + #$E848, // $E848 + #$E849, // $E849 + #$E84A, // $E84A + #$E84B, // $E84B + #$E84C, // $E84C + #$E84D, // $E84D + #$E84E, // $E84E + #$E84F, // $E84F + #$E850, // $E850 + #$E851, // $E851 + #$E852, // $E852 + #$E853, // $E853 + #$E854, // $E854 + #$E855, // $E855 + #$E856, // $E856 + #$E857, // $E857 + #$E858, // $E858 + #$E859, // $E859 + #$E85A, // $E85A + #$E85B, // $E85B + #$E85C, // $E85C + #$E85D, // $E85D + #$E85E, // $E85E + #$E85F, // $E85F + #$E860, // $E860 + #$E861, // $E861 + #$E862, // $E862 + #$E863, // $E863 + #$E864, // $E864 + #$E865, // $E865 + #$E866, // $E866 + #$E867, // $E867 + #$E868, // $E868 + #$E869, // $E869 + #$E86A, // $E86A + #$E86B, // $E86B + #$E86C, // $E86C + #$E86D, // $E86D + #$E86E, // $E86E + #$E86F, // $E86F + #$E870, // $E870 + #$E871, // $E871 + #$E872, // $E872 + #$E873, // $E873 + #$E874, // $E874 + #$E875, // $E875 + #$E876, // $E876 + #$E877, // $E877 + #$E878, // $E878 + #$E879, // $E879 + #$E87A, // $E87A + #$E87B, // $E87B + #$E87C, // $E87C + #$E87D, // $E87D + #$E87E, // $E87E + #$E87F, // $E87F + #$E880, // $E880 + #$E881, // $E881 + #$E882, // $E882 + #$E883, // $E883 + #$E884, // $E884 + #$E885, // $E885 + #$E886, // $E886 + #$E887, // $E887 + #$E888, // $E888 + #$E889, // $E889 + #$E88A, // $E88A + #$E88B, // $E88B + #$E88C, // $E88C + #$E88D, // $E88D + #$E88E, // $E88E + #$E88F, // $E88F + #$E890, // $E890 + #$E891, // $E891 + #$E892, // $E892 + #$E893, // $E893 + #$E894, // $E894 + #$E895, // $E895 + #$E896, // $E896 + #$E897, // $E897 + #$E898, // $E898 + #$E899, // $E899 + #$E89A, // $E89A + #$E89B, // $E89B + #$E89C, // $E89C + #$E89D, // $E89D + #$E89E, // $E89E + #$E89F, // $E89F + #$E8A0, // $E8A0 + #$E8A1, // $E8A1 + #$E8A2, // $E8A2 + #$E8A3, // $E8A3 + #$E8A4, // $E8A4 + #$E8A5, // $E8A5 + #$E8A6, // $E8A6 + #$E8A7, // $E8A7 + #$E8A8, // $E8A8 + #$E8A9, // $E8A9 + #$E8AA, // $E8AA + #$E8AB, // $E8AB + #$E8AC, // $E8AC + #$E8AD, // $E8AD + #$E8AE, // $E8AE + #$E8AF, // $E8AF + #$E8B0, // $E8B0 + #$E8B1, // $E8B1 + #$E8B2, // $E8B2 + #$E8B3, // $E8B3 + #$E8B4, // $E8B4 + #$E8B5, // $E8B5 + #$E8B6, // $E8B6 + #$E8B7, // $E8B7 + #$E8B8, // $E8B8 + #$E8B9, // $E8B9 + #$E8BA, // $E8BA + #$E8BB, // $E8BB + #$E8BC, // $E8BC + #$E8BD, // $E8BD + #$E8BE, // $E8BE + #$E8BF, // $E8BF + #$E8C0, // $E8C0 + #$E8C1, // $E8C1 + #$E8C2, // $E8C2 + #$E8C3, // $E8C3 + #$E8C4, // $E8C4 + #$E8C5, // $E8C5 + #$E8C6, // $E8C6 + #$E8C7, // $E8C7 + #$E8C8, // $E8C8 + #$E8C9, // $E8C9 + #$E8CA, // $E8CA + #$E8CB, // $E8CB + #$E8CC, // $E8CC + #$E8CD, // $E8CD + #$E8CE, // $E8CE + #$E8CF, // $E8CF + #$E8D0, // $E8D0 + #$E8D1, // $E8D1 + #$E8D2, // $E8D2 + #$E8D3, // $E8D3 + #$E8D4, // $E8D4 + #$E8D5, // $E8D5 + #$E8D6, // $E8D6 + #$E8D7, // $E8D7 + #$E8D8, // $E8D8 + #$E8D9, // $E8D9 + #$E8DA, // $E8DA + #$E8DB, // $E8DB + #$E8DC, // $E8DC + #$E8DD, // $E8DD + #$E8DE, // $E8DE + #$E8DF, // $E8DF + #$E8E0, // $E8E0 + #$E8E1, // $E8E1 + #$E8E2, // $E8E2 + #$E8E3, // $E8E3 + #$E8E4, // $E8E4 + #$E8E5, // $E8E5 + #$E8E6, // $E8E6 + #$E8E7, // $E8E7 + #$E8E8, // $E8E8 + #$E8E9, // $E8E9 + #$E8EA, // $E8EA + #$E8EB, // $E8EB + #$E8EC, // $E8EC + #$E8ED, // $E8ED + #$E8EE, // $E8EE + #$E8EF, // $E8EF + #$E8F0, // $E8F0 + #$E8F1, // $E8F1 + #$E8F2, // $E8F2 + #$E8F3, // $E8F3 + #$E8F4, // $E8F4 + #$E8F5, // $E8F5 + #$E8F6, // $E8F6 + #$E8F7, // $E8F7 + #$E8F8, // $E8F8 + #$E8F9, // $E8F9 + #$E8FA, // $E8FA + #$E8FB, // $E8FB + #$E8FC, // $E8FC + #$E8FD, // $E8FD + #$E8FE, // $E8FE + #$E8FF, // $E8FF + #$E900, // $E900 + #$E901, // $E901 + #$E902, // $E902 + #$E903, // $E903 + #$E904, // $E904 + #$E905, // $E905 + #$E906, // $E906 + #$E907, // $E907 + #$E908, // $E908 + #$E909, // $E909 + #$E90A, // $E90A + #$E90B, // $E90B + #$E90C, // $E90C + #$E90D, // $E90D + #$E90E, // $E90E + #$E90F, // $E90F + #$E910, // $E910 + #$E911, // $E911 + #$E912, // $E912 + #$E913, // $E913 + #$E914, // $E914 + #$E915, // $E915 + #$E916, // $E916 + #$E917, // $E917 + #$E918, // $E918 + #$E919, // $E919 + #$E91A, // $E91A + #$E91B, // $E91B + #$E91C, // $E91C + #$E91D, // $E91D + #$E91E, // $E91E + #$E91F, // $E91F + #$E920, // $E920 + #$E921, // $E921 + #$E922, // $E922 + #$E923, // $E923 + #$E924, // $E924 + #$E925, // $E925 + #$E926, // $E926 + #$E927, // $E927 + #$E928, // $E928 + #$E929, // $E929 + #$E92A, // $E92A + #$E92B, // $E92B + #$E92C, // $E92C + #$E92D, // $E92D + #$E92E, // $E92E + #$E92F, // $E92F + #$E930, // $E930 + #$E931, // $E931 + #$E932, // $E932 + #$E933, // $E933 + #$E934, // $E934 + #$E935, // $E935 + #$E936, // $E936 + #$E937, // $E937 + #$E938, // $E938 + #$E939, // $E939 + #$E93A, // $E93A + #$E93B, // $E93B + #$E93C, // $E93C + #$E93D, // $E93D + #$E93E, // $E93E + #$E93F, // $E93F + #$E940, // $E940 + #$E941, // $E941 + #$E942, // $E942 + #$E943, // $E943 + #$E944, // $E944 + #$E945, // $E945 + #$E946, // $E946 + #$E947, // $E947 + #$E948, // $E948 + #$E949, // $E949 + #$E94A, // $E94A + #$E94B, // $E94B + #$E94C, // $E94C + #$E94D, // $E94D + #$E94E, // $E94E + #$E94F, // $E94F + #$E950, // $E950 + #$E951, // $E951 + #$E952, // $E952 + #$E953, // $E953 + #$E954, // $E954 + #$E955, // $E955 + #$E956, // $E956 + #$E957, // $E957 + #$E958, // $E958 + #$E959, // $E959 + #$E95A, // $E95A + #$E95B, // $E95B + #$E95C, // $E95C + #$E95D, // $E95D + #$E95E, // $E95E + #$E95F, // $E95F + #$E960, // $E960 + #$E961, // $E961 + #$E962, // $E962 + #$E963, // $E963 + #$E964, // $E964 + #$E965, // $E965 + #$E966, // $E966 + #$E967, // $E967 + #$E968, // $E968 + #$E969, // $E969 + #$E96A, // $E96A + #$E96B, // $E96B + #$E96C, // $E96C + #$E96D, // $E96D + #$E96E, // $E96E + #$E96F, // $E96F + #$E970, // $E970 + #$E971, // $E971 + #$E972, // $E972 + #$E973, // $E973 + #$E974, // $E974 + #$E975, // $E975 + #$E976, // $E976 + #$E977, // $E977 + #$E978, // $E978 + #$E979, // $E979 + #$E97A, // $E97A + #$E97B, // $E97B + #$E97C, // $E97C + #$E97D, // $E97D + #$E97E, // $E97E + #$E97F, // $E97F + #$E980, // $E980 + #$E981, // $E981 + #$E982, // $E982 + #$E983, // $E983 + #$E984, // $E984 + #$E985, // $E985 + #$E986, // $E986 + #$E987, // $E987 + #$E988, // $E988 + #$E989, // $E989 + #$E98A, // $E98A + #$E98B, // $E98B + #$E98C, // $E98C + #$E98D, // $E98D + #$E98E, // $E98E + #$E98F, // $E98F + #$E990, // $E990 + #$E991, // $E991 + #$E992, // $E992 + #$E993, // $E993 + #$E994, // $E994 + #$E995, // $E995 + #$E996, // $E996 + #$E997, // $E997 + #$E998, // $E998 + #$E999, // $E999 + #$E99A, // $E99A + #$E99B, // $E99B + #$E99C, // $E99C + #$E99D, // $E99D + #$E99E, // $E99E + #$E99F, // $E99F + #$E9A0, // $E9A0 + #$E9A1, // $E9A1 + #$E9A2, // $E9A2 + #$E9A3, // $E9A3 + #$E9A4, // $E9A4 + #$E9A5, // $E9A5 + #$E9A6, // $E9A6 + #$E9A7, // $E9A7 + #$E9A8, // $E9A8 + #$E9A9, // $E9A9 + #$E9AA, // $E9AA + #$E9AB, // $E9AB + #$E9AC, // $E9AC + #$E9AD, // $E9AD + #$E9AE, // $E9AE + #$E9AF, // $E9AF + #$E9B0, // $E9B0 + #$E9B1, // $E9B1 + #$E9B2, // $E9B2 + #$E9B3, // $E9B3 + #$E9B4, // $E9B4 + #$E9B5, // $E9B5 + #$E9B6, // $E9B6 + #$E9B7, // $E9B7 + #$E9B8, // $E9B8 + #$E9B9, // $E9B9 + #$E9BA, // $E9BA + #$E9BB, // $E9BB + #$E9BC, // $E9BC + #$E9BD, // $E9BD + #$E9BE, // $E9BE + #$E9BF, // $E9BF + #$E9C0, // $E9C0 + #$E9C1, // $E9C1 + #$E9C2, // $E9C2 + #$E9C3, // $E9C3 + #$E9C4, // $E9C4 + #$E9C5, // $E9C5 + #$E9C6, // $E9C6 + #$E9C7, // $E9C7 + #$E9C8, // $E9C8 + #$E9C9, // $E9C9 + #$E9CA, // $E9CA + #$E9CB, // $E9CB + #$E9CC, // $E9CC + #$E9CD, // $E9CD + #$E9CE, // $E9CE + #$E9CF, // $E9CF + #$E9D0, // $E9D0 + #$E9D1, // $E9D1 + #$E9D2, // $E9D2 + #$E9D3, // $E9D3 + #$E9D4, // $E9D4 + #$E9D5, // $E9D5 + #$E9D6, // $E9D6 + #$E9D7, // $E9D7 + #$E9D8, // $E9D8 + #$E9D9, // $E9D9 + #$E9DA, // $E9DA + #$E9DB, // $E9DB + #$E9DC, // $E9DC + #$E9DD, // $E9DD + #$E9DE, // $E9DE + #$E9DF, // $E9DF + #$E9E0, // $E9E0 + #$E9E1, // $E9E1 + #$E9E2, // $E9E2 + #$E9E3, // $E9E3 + #$E9E4, // $E9E4 + #$E9E5, // $E9E5 + #$E9E6, // $E9E6 + #$E9E7, // $E9E7 + #$E9E8, // $E9E8 + #$E9E9, // $E9E9 + #$E9EA, // $E9EA + #$E9EB, // $E9EB + #$E9EC, // $E9EC + #$E9ED, // $E9ED + #$E9EE, // $E9EE + #$E9EF, // $E9EF + #$E9F0, // $E9F0 + #$E9F1, // $E9F1 + #$E9F2, // $E9F2 + #$E9F3, // $E9F3 + #$E9F4, // $E9F4 + #$E9F5, // $E9F5 + #$E9F6, // $E9F6 + #$E9F7, // $E9F7 + #$E9F8, // $E9F8 + #$E9F9, // $E9F9 + #$E9FA, // $E9FA + #$E9FB, // $E9FB + #$E9FC, // $E9FC + #$E9FD, // $E9FD + #$E9FE, // $E9FE + #$E9FF, // $E9FF + #$EA00, // $EA00 + #$EA01, // $EA01 + #$EA02, // $EA02 + #$EA03, // $EA03 + #$EA04, // $EA04 + #$EA05, // $EA05 + #$EA06, // $EA06 + #$EA07, // $EA07 + #$EA08, // $EA08 + #$EA09, // $EA09 + #$EA0A, // $EA0A + #$EA0B, // $EA0B + #$EA0C, // $EA0C + #$EA0D, // $EA0D + #$EA0E, // $EA0E + #$EA0F, // $EA0F + #$EA10, // $EA10 + #$EA11, // $EA11 + #$EA12, // $EA12 + #$EA13, // $EA13 + #$EA14, // $EA14 + #$EA15, // $EA15 + #$EA16, // $EA16 + #$EA17, // $EA17 + #$EA18, // $EA18 + #$EA19, // $EA19 + #$EA1A, // $EA1A + #$EA1B, // $EA1B + #$EA1C, // $EA1C + #$EA1D, // $EA1D + #$EA1E, // $EA1E + #$EA1F, // $EA1F + #$EA20, // $EA20 + #$EA21, // $EA21 + #$EA22, // $EA22 + #$EA23, // $EA23 + #$EA24, // $EA24 + #$EA25, // $EA25 + #$EA26, // $EA26 + #$EA27, // $EA27 + #$EA28, // $EA28 + #$EA29, // $EA29 + #$EA2A, // $EA2A + #$EA2B, // $EA2B + #$EA2C, // $EA2C + #$EA2D, // $EA2D + #$EA2E, // $EA2E + #$EA2F, // $EA2F + #$EA30, // $EA30 + #$EA31, // $EA31 + #$EA32, // $EA32 + #$EA33, // $EA33 + #$EA34, // $EA34 + #$EA35, // $EA35 + #$EA36, // $EA36 + #$EA37, // $EA37 + #$EA38, // $EA38 + #$EA39, // $EA39 + #$EA3A, // $EA3A + #$EA3B, // $EA3B + #$EA3C, // $EA3C + #$EA3D, // $EA3D + #$EA3E, // $EA3E + #$EA3F, // $EA3F + #$EA40, // $EA40 + #$EA41, // $EA41 + #$EA42, // $EA42 + #$EA43, // $EA43 + #$EA44, // $EA44 + #$EA45, // $EA45 + #$EA46, // $EA46 + #$EA47, // $EA47 + #$EA48, // $EA48 + #$EA49, // $EA49 + #$EA4A, // $EA4A + #$EA4B, // $EA4B + #$EA4C, // $EA4C + #$EA4D, // $EA4D + #$EA4E, // $EA4E + #$EA4F, // $EA4F + #$EA50, // $EA50 + #$EA51, // $EA51 + #$EA52, // $EA52 + #$EA53, // $EA53 + #$EA54, // $EA54 + #$EA55, // $EA55 + #$EA56, // $EA56 + #$EA57, // $EA57 + #$EA58, // $EA58 + #$EA59, // $EA59 + #$EA5A, // $EA5A + #$EA5B, // $EA5B + #$EA5C, // $EA5C + #$EA5D, // $EA5D + #$EA5E, // $EA5E + #$EA5F, // $EA5F + #$EA60, // $EA60 + #$EA61, // $EA61 + #$EA62, // $EA62 + #$EA63, // $EA63 + #$EA64, // $EA64 + #$EA65, // $EA65 + #$EA66, // $EA66 + #$EA67, // $EA67 + #$EA68, // $EA68 + #$EA69, // $EA69 + #$EA6A, // $EA6A + #$EA6B, // $EA6B + #$EA6C, // $EA6C + #$EA6D, // $EA6D + #$EA6E, // $EA6E + #$EA6F, // $EA6F + #$EA70, // $EA70 + #$EA71, // $EA71 + #$EA72, // $EA72 + #$EA73, // $EA73 + #$EA74, // $EA74 + #$EA75, // $EA75 + #$EA76, // $EA76 + #$EA77, // $EA77 + #$EA78, // $EA78 + #$EA79, // $EA79 + #$EA7A, // $EA7A + #$EA7B, // $EA7B + #$EA7C, // $EA7C + #$EA7D, // $EA7D + #$EA7E, // $EA7E + #$EA7F, // $EA7F + #$EA80, // $EA80 + #$EA81, // $EA81 + #$EA82, // $EA82 + #$EA83, // $EA83 + #$EA84, // $EA84 + #$EA85, // $EA85 + #$EA86, // $EA86 + #$EA87, // $EA87 + #$EA88, // $EA88 + #$EA89, // $EA89 + #$EA8A, // $EA8A + #$EA8B, // $EA8B + #$EA8C, // $EA8C + #$EA8D, // $EA8D + #$EA8E, // $EA8E + #$EA8F, // $EA8F + #$EA90, // $EA90 + #$EA91, // $EA91 + #$EA92, // $EA92 + #$EA93, // $EA93 + #$EA94, // $EA94 + #$EA95, // $EA95 + #$EA96, // $EA96 + #$EA97, // $EA97 + #$EA98, // $EA98 + #$EA99, // $EA99 + #$EA9A, // $EA9A + #$EA9B, // $EA9B + #$EA9C, // $EA9C + #$EA9D, // $EA9D + #$EA9E, // $EA9E + #$EA9F, // $EA9F + #$EAA0, // $EAA0 + #$EAA1, // $EAA1 + #$EAA2, // $EAA2 + #$EAA3, // $EAA3 + #$EAA4, // $EAA4 + #$EAA5, // $EAA5 + #$EAA6, // $EAA6 + #$EAA7, // $EAA7 + #$EAA8, // $EAA8 + #$EAA9, // $EAA9 + #$EAAA, // $EAAA + #$EAAB, // $EAAB + #$EAAC, // $EAAC + #$EAAD, // $EAAD + #$EAAE, // $EAAE + #$EAAF, // $EAAF + #$EAB0, // $EAB0 + #$EAB1, // $EAB1 + #$EAB2, // $EAB2 + #$EAB3, // $EAB3 + #$EAB4, // $EAB4 + #$EAB5, // $EAB5 + #$EAB6, // $EAB6 + #$EAB7, // $EAB7 + #$EAB8, // $EAB8 + #$EAB9, // $EAB9 + #$EABA, // $EABA + #$EABB, // $EABB + #$EABC, // $EABC + #$EABD, // $EABD + #$EABE, // $EABE + #$EABF, // $EABF + #$EAC0, // $EAC0 + #$EAC1, // $EAC1 + #$EAC2, // $EAC2 + #$EAC3, // $EAC3 + #$EAC4, // $EAC4 + #$EAC5, // $EAC5 + #$EAC6, // $EAC6 + #$EAC7, // $EAC7 + #$EAC8, // $EAC8 + #$EAC9, // $EAC9 + #$EACA, // $EACA + #$EACB, // $EACB + #$EACC, // $EACC + #$EACD, // $EACD + #$EACE, // $EACE + #$EACF, // $EACF + #$EAD0, // $EAD0 + #$EAD1, // $EAD1 + #$EAD2, // $EAD2 + #$EAD3, // $EAD3 + #$EAD4, // $EAD4 + #$EAD5, // $EAD5 + #$EAD6, // $EAD6 + #$EAD7, // $EAD7 + #$EAD8, // $EAD8 + #$EAD9, // $EAD9 + #$EADA, // $EADA + #$EADB, // $EADB + #$EADC, // $EADC + #$EADD, // $EADD + #$EADE, // $EADE + #$EADF, // $EADF + #$EAE0, // $EAE0 + #$EAE1, // $EAE1 + #$EAE2, // $EAE2 + #$EAE3, // $EAE3 + #$EAE4, // $EAE4 + #$EAE5, // $EAE5 + #$EAE6, // $EAE6 + #$EAE7, // $EAE7 + #$EAE8, // $EAE8 + #$EAE9, // $EAE9 + #$EAEA, // $EAEA + #$EAEB, // $EAEB + #$EAEC, // $EAEC + #$EAED, // $EAED + #$EAEE, // $EAEE + #$EAEF, // $EAEF + #$EAF0, // $EAF0 + #$EAF1, // $EAF1 + #$EAF2, // $EAF2 + #$EAF3, // $EAF3 + #$EAF4, // $EAF4 + #$EAF5, // $EAF5 + #$EAF6, // $EAF6 + #$EAF7, // $EAF7 + #$EAF8, // $EAF8 + #$EAF9, // $EAF9 + #$EAFA, // $EAFA + #$EAFB, // $EAFB + #$EAFC, // $EAFC + #$EAFD, // $EAFD + #$EAFE, // $EAFE + #$EAFF, // $EAFF + #$EB00, // $EB00 + #$EB01, // $EB01 + #$EB02, // $EB02 + #$EB03, // $EB03 + #$EB04, // $EB04 + #$EB05, // $EB05 + #$EB06, // $EB06 + #$EB07, // $EB07 + #$EB08, // $EB08 + #$EB09, // $EB09 + #$EB0A, // $EB0A + #$EB0B, // $EB0B + #$EB0C, // $EB0C + #$EB0D, // $EB0D + #$EB0E, // $EB0E + #$EB0F, // $EB0F + #$EB10, // $EB10 + #$EB11, // $EB11 + #$EB12, // $EB12 + #$EB13, // $EB13 + #$EB14, // $EB14 + #$EB15, // $EB15 + #$EB16, // $EB16 + #$EB17, // $EB17 + #$EB18, // $EB18 + #$EB19, // $EB19 + #$EB1A, // $EB1A + #$EB1B, // $EB1B + #$EB1C, // $EB1C + #$EB1D, // $EB1D + #$EB1E, // $EB1E + #$EB1F, // $EB1F + #$EB20, // $EB20 + #$EB21, // $EB21 + #$EB22, // $EB22 + #$EB23, // $EB23 + #$EB24, // $EB24 + #$EB25, // $EB25 + #$EB26, // $EB26 + #$EB27, // $EB27 + #$EB28, // $EB28 + #$EB29, // $EB29 + #$EB2A, // $EB2A + #$EB2B, // $EB2B + #$EB2C, // $EB2C + #$EB2D, // $EB2D + #$EB2E, // $EB2E + #$EB2F, // $EB2F + #$EB30, // $EB30 + #$EB31, // $EB31 + #$EB32, // $EB32 + #$EB33, // $EB33 + #$EB34, // $EB34 + #$EB35, // $EB35 + #$EB36, // $EB36 + #$EB37, // $EB37 + #$EB38, // $EB38 + #$EB39, // $EB39 + #$EB3A, // $EB3A + #$EB3B, // $EB3B + #$EB3C, // $EB3C + #$EB3D, // $EB3D + #$EB3E, // $EB3E + #$EB3F, // $EB3F + #$EB40, // $EB40 + #$EB41, // $EB41 + #$EB42, // $EB42 + #$EB43, // $EB43 + #$EB44, // $EB44 + #$EB45, // $EB45 + #$EB46, // $EB46 + #$EB47, // $EB47 + #$EB48, // $EB48 + #$EB49, // $EB49 + #$EB4A, // $EB4A + #$EB4B, // $EB4B + #$EB4C, // $EB4C + #$EB4D, // $EB4D + #$EB4E, // $EB4E + #$EB4F, // $EB4F + #$EB50, // $EB50 + #$EB51, // $EB51 + #$EB52, // $EB52 + #$EB53, // $EB53 + #$EB54, // $EB54 + #$EB55, // $EB55 + #$EB56, // $EB56 + #$EB57, // $EB57 + #$EB58, // $EB58 + #$EB59, // $EB59 + #$EB5A, // $EB5A + #$EB5B, // $EB5B + #$EB5C, // $EB5C + #$EB5D, // $EB5D + #$EB5E, // $EB5E + #$EB5F, // $EB5F + #$EB60, // $EB60 + #$EB61, // $EB61 + #$EB62, // $EB62 + #$EB63, // $EB63 + #$EB64, // $EB64 + #$EB65, // $EB65 + #$EB66, // $EB66 + #$EB67, // $EB67 + #$EB68, // $EB68 + #$EB69, // $EB69 + #$EB6A, // $EB6A + #$EB6B, // $EB6B + #$EB6C, // $EB6C + #$EB6D, // $EB6D + #$EB6E, // $EB6E + #$EB6F, // $EB6F + #$EB70, // $EB70 + #$EB71, // $EB71 + #$EB72, // $EB72 + #$EB73, // $EB73 + #$EB74, // $EB74 + #$EB75, // $EB75 + #$EB76, // $EB76 + #$EB77, // $EB77 + #$EB78, // $EB78 + #$EB79, // $EB79 + #$EB7A, // $EB7A + #$EB7B, // $EB7B + #$EB7C, // $EB7C + #$EB7D, // $EB7D + #$EB7E, // $EB7E + #$EB7F, // $EB7F + #$EB80, // $EB80 + #$EB81, // $EB81 + #$EB82, // $EB82 + #$EB83, // $EB83 + #$EB84, // $EB84 + #$EB85, // $EB85 + #$EB86, // $EB86 + #$EB87, // $EB87 + #$EB88, // $EB88 + #$EB89, // $EB89 + #$EB8A, // $EB8A + #$EB8B, // $EB8B + #$EB8C, // $EB8C + #$EB8D, // $EB8D + #$EB8E, // $EB8E + #$EB8F, // $EB8F + #$EB90, // $EB90 + #$EB91, // $EB91 + #$EB92, // $EB92 + #$EB93, // $EB93 + #$EB94, // $EB94 + #$EB95, // $EB95 + #$EB96, // $EB96 + #$EB97, // $EB97 + #$EB98, // $EB98 + #$EB99, // $EB99 + #$EB9A, // $EB9A + #$EB9B, // $EB9B + #$EB9C, // $EB9C + #$EB9D, // $EB9D + #$EB9E, // $EB9E + #$EB9F, // $EB9F + #$EBA0, // $EBA0 + #$EBA1, // $EBA1 + #$EBA2, // $EBA2 + #$EBA3, // $EBA3 + #$EBA4, // $EBA4 + #$EBA5, // $EBA5 + #$EBA6, // $EBA6 + #$EBA7, // $EBA7 + #$EBA8, // $EBA8 + #$EBA9, // $EBA9 + #$EBAA, // $EBAA + #$EBAB, // $EBAB + #$EBAC, // $EBAC + #$EBAD, // $EBAD + #$EBAE, // $EBAE + #$EBAF, // $EBAF + #$EBB0, // $EBB0 + #$EBB1, // $EBB1 + #$EBB2, // $EBB2 + #$EBB3, // $EBB3 + #$EBB4, // $EBB4 + #$EBB5, // $EBB5 + #$EBB6, // $EBB6 + #$EBB7, // $EBB7 + #$EBB8, // $EBB8 + #$EBB9, // $EBB9 + #$EBBA, // $EBBA + #$EBBB, // $EBBB + #$EBBC, // $EBBC + #$EBBD, // $EBBD + #$EBBE, // $EBBE + #$EBBF, // $EBBF + #$EBC0, // $EBC0 + #$EBC1, // $EBC1 + #$EBC2, // $EBC2 + #$EBC3, // $EBC3 + #$EBC4, // $EBC4 + #$EBC5, // $EBC5 + #$EBC6, // $EBC6 + #$EBC7, // $EBC7 + #$EBC8, // $EBC8 + #$EBC9, // $EBC9 + #$EBCA, // $EBCA + #$EBCB, // $EBCB + #$EBCC, // $EBCC + #$EBCD, // $EBCD + #$EBCE, // $EBCE + #$EBCF, // $EBCF + #$EBD0, // $EBD0 + #$EBD1, // $EBD1 + #$EBD2, // $EBD2 + #$EBD3, // $EBD3 + #$EBD4, // $EBD4 + #$EBD5, // $EBD5 + #$EBD6, // $EBD6 + #$EBD7, // $EBD7 + #$EBD8, // $EBD8 + #$EBD9, // $EBD9 + #$EBDA, // $EBDA + #$EBDB, // $EBDB + #$EBDC, // $EBDC + #$EBDD, // $EBDD + #$EBDE, // $EBDE + #$EBDF, // $EBDF + #$EBE0, // $EBE0 + #$EBE1, // $EBE1 + #$EBE2, // $EBE2 + #$EBE3, // $EBE3 + #$EBE4, // $EBE4 + #$EBE5, // $EBE5 + #$EBE6, // $EBE6 + #$EBE7, // $EBE7 + #$EBE8, // $EBE8 + #$EBE9, // $EBE9 + #$EBEA, // $EBEA + #$EBEB, // $EBEB + #$EBEC, // $EBEC + #$EBED, // $EBED + #$EBEE, // $EBEE + #$EBEF, // $EBEF + #$EBF0, // $EBF0 + #$EBF1, // $EBF1 + #$EBF2, // $EBF2 + #$EBF3, // $EBF3 + #$EBF4, // $EBF4 + #$EBF5, // $EBF5 + #$EBF6, // $EBF6 + #$EBF7, // $EBF7 + #$EBF8, // $EBF8 + #$EBF9, // $EBF9 + #$EBFA, // $EBFA + #$EBFB, // $EBFB + #$EBFC, // $EBFC + #$EBFD, // $EBFD + #$EBFE, // $EBFE + #$EBFF, // $EBFF + #$EC00, // $EC00 + #$EC01, // $EC01 + #$EC02, // $EC02 + #$EC03, // $EC03 + #$EC04, // $EC04 + #$EC05, // $EC05 + #$EC06, // $EC06 + #$EC07, // $EC07 + #$EC08, // $EC08 + #$EC09, // $EC09 + #$EC0A, // $EC0A + #$EC0B, // $EC0B + #$EC0C, // $EC0C + #$EC0D, // $EC0D + #$EC0E, // $EC0E + #$EC0F, // $EC0F + #$EC10, // $EC10 + #$EC11, // $EC11 + #$EC12, // $EC12 + #$EC13, // $EC13 + #$EC14, // $EC14 + #$EC15, // $EC15 + #$EC16, // $EC16 + #$EC17, // $EC17 + #$EC18, // $EC18 + #$EC19, // $EC19 + #$EC1A, // $EC1A + #$EC1B, // $EC1B + #$EC1C, // $EC1C + #$EC1D, // $EC1D + #$EC1E, // $EC1E + #$EC1F, // $EC1F + #$EC20, // $EC20 + #$EC21, // $EC21 + #$EC22, // $EC22 + #$EC23, // $EC23 + #$EC24, // $EC24 + #$EC25, // $EC25 + #$EC26, // $EC26 + #$EC27, // $EC27 + #$EC28, // $EC28 + #$EC29, // $EC29 + #$EC2A, // $EC2A + #$EC2B, // $EC2B + #$EC2C, // $EC2C + #$EC2D, // $EC2D + #$EC2E, // $EC2E + #$EC2F, // $EC2F + #$EC30, // $EC30 + #$EC31, // $EC31 + #$EC32, // $EC32 + #$EC33, // $EC33 + #$EC34, // $EC34 + #$EC35, // $EC35 + #$EC36, // $EC36 + #$EC37, // $EC37 + #$EC38, // $EC38 + #$EC39, // $EC39 + #$EC3A, // $EC3A + #$EC3B, // $EC3B + #$EC3C, // $EC3C + #$EC3D, // $EC3D + #$EC3E, // $EC3E + #$EC3F, // $EC3F + #$EC40, // $EC40 + #$EC41, // $EC41 + #$EC42, // $EC42 + #$EC43, // $EC43 + #$EC44, // $EC44 + #$EC45, // $EC45 + #$EC46, // $EC46 + #$EC47, // $EC47 + #$EC48, // $EC48 + #$EC49, // $EC49 + #$EC4A, // $EC4A + #$EC4B, // $EC4B + #$EC4C, // $EC4C + #$EC4D, // $EC4D + #$EC4E, // $EC4E + #$EC4F, // $EC4F + #$EC50, // $EC50 + #$EC51, // $EC51 + #$EC52, // $EC52 + #$EC53, // $EC53 + #$EC54, // $EC54 + #$EC55, // $EC55 + #$EC56, // $EC56 + #$EC57, // $EC57 + #$EC58, // $EC58 + #$EC59, // $EC59 + #$EC5A, // $EC5A + #$EC5B, // $EC5B + #$EC5C, // $EC5C + #$EC5D, // $EC5D + #$EC5E, // $EC5E + #$EC5F, // $EC5F + #$EC60, // $EC60 + #$EC61, // $EC61 + #$EC62, // $EC62 + #$EC63, // $EC63 + #$EC64, // $EC64 + #$EC65, // $EC65 + #$EC66, // $EC66 + #$EC67, // $EC67 + #$EC68, // $EC68 + #$EC69, // $EC69 + #$EC6A, // $EC6A + #$EC6B, // $EC6B + #$EC6C, // $EC6C + #$EC6D, // $EC6D + #$EC6E, // $EC6E + #$EC6F, // $EC6F + #$EC70, // $EC70 + #$EC71, // $EC71 + #$EC72, // $EC72 + #$EC73, // $EC73 + #$EC74, // $EC74 + #$EC75, // $EC75 + #$EC76, // $EC76 + #$EC77, // $EC77 + #$EC78, // $EC78 + #$EC79, // $EC79 + #$EC7A, // $EC7A + #$EC7B, // $EC7B + #$EC7C, // $EC7C + #$EC7D, // $EC7D + #$EC7E, // $EC7E + #$EC7F, // $EC7F + #$EC80, // $EC80 + #$EC81, // $EC81 + #$EC82, // $EC82 + #$EC83, // $EC83 + #$EC84, // $EC84 + #$EC85, // $EC85 + #$EC86, // $EC86 + #$EC87, // $EC87 + #$EC88, // $EC88 + #$EC89, // $EC89 + #$EC8A, // $EC8A + #$EC8B, // $EC8B + #$EC8C, // $EC8C + #$EC8D, // $EC8D + #$EC8E, // $EC8E + #$EC8F, // $EC8F + #$EC90, // $EC90 + #$EC91, // $EC91 + #$EC92, // $EC92 + #$EC93, // $EC93 + #$EC94, // $EC94 + #$EC95, // $EC95 + #$EC96, // $EC96 + #$EC97, // $EC97 + #$EC98, // $EC98 + #$EC99, // $EC99 + #$EC9A, // $EC9A + #$EC9B, // $EC9B + #$EC9C, // $EC9C + #$EC9D, // $EC9D + #$EC9E, // $EC9E + #$EC9F, // $EC9F + #$ECA0, // $ECA0 + #$ECA1, // $ECA1 + #$ECA2, // $ECA2 + #$ECA3, // $ECA3 + #$ECA4, // $ECA4 + #$ECA5, // $ECA5 + #$ECA6, // $ECA6 + #$ECA7, // $ECA7 + #$ECA8, // $ECA8 + #$ECA9, // $ECA9 + #$ECAA, // $ECAA + #$ECAB, // $ECAB + #$ECAC, // $ECAC + #$ECAD, // $ECAD + #$ECAE, // $ECAE + #$ECAF, // $ECAF + #$ECB0, // $ECB0 + #$ECB1, // $ECB1 + #$ECB2, // $ECB2 + #$ECB3, // $ECB3 + #$ECB4, // $ECB4 + #$ECB5, // $ECB5 + #$ECB6, // $ECB6 + #$ECB7, // $ECB7 + #$ECB8, // $ECB8 + #$ECB9, // $ECB9 + #$ECBA, // $ECBA + #$ECBB, // $ECBB + #$ECBC, // $ECBC + #$ECBD, // $ECBD + #$ECBE, // $ECBE + #$ECBF, // $ECBF + #$ECC0, // $ECC0 + #$ECC1, // $ECC1 + #$ECC2, // $ECC2 + #$ECC3, // $ECC3 + #$ECC4, // $ECC4 + #$ECC5, // $ECC5 + #$ECC6, // $ECC6 + #$ECC7, // $ECC7 + #$ECC8, // $ECC8 + #$ECC9, // $ECC9 + #$ECCA, // $ECCA + #$ECCB, // $ECCB + #$ECCC, // $ECCC + #$ECCD, // $ECCD + #$ECCE, // $ECCE + #$ECCF, // $ECCF + #$ECD0, // $ECD0 + #$ECD1, // $ECD1 + #$ECD2, // $ECD2 + #$ECD3, // $ECD3 + #$ECD4, // $ECD4 + #$ECD5, // $ECD5 + #$ECD6, // $ECD6 + #$ECD7, // $ECD7 + #$ECD8, // $ECD8 + #$ECD9, // $ECD9 + #$ECDA, // $ECDA + #$ECDB, // $ECDB + #$ECDC, // $ECDC + #$ECDD, // $ECDD + #$ECDE, // $ECDE + #$ECDF, // $ECDF + #$ECE0, // $ECE0 + #$ECE1, // $ECE1 + #$ECE2, // $ECE2 + #$ECE3, // $ECE3 + #$ECE4, // $ECE4 + #$ECE5, // $ECE5 + #$ECE6, // $ECE6 + #$ECE7, // $ECE7 + #$ECE8, // $ECE8 + #$ECE9, // $ECE9 + #$ECEA, // $ECEA + #$ECEB, // $ECEB + #$ECEC, // $ECEC + #$ECED, // $ECED + #$ECEE, // $ECEE + #$ECEF, // $ECEF + #$ECF0, // $ECF0 + #$ECF1, // $ECF1 + #$ECF2, // $ECF2 + #$ECF3, // $ECF3 + #$ECF4, // $ECF4 + #$ECF5, // $ECF5 + #$ECF6, // $ECF6 + #$ECF7, // $ECF7 + #$ECF8, // $ECF8 + #$ECF9, // $ECF9 + #$ECFA, // $ECFA + #$ECFB, // $ECFB + #$ECFC, // $ECFC + #$ECFD, // $ECFD + #$ECFE, // $ECFE + #$ECFF, // $ECFF + #$ED00, // $ED00 + #$ED01, // $ED01 + #$ED02, // $ED02 + #$ED03, // $ED03 + #$ED04, // $ED04 + #$ED05, // $ED05 + #$ED06, // $ED06 + #$ED07, // $ED07 + #$ED08, // $ED08 + #$ED09, // $ED09 + #$ED0A, // $ED0A + #$ED0B, // $ED0B + #$ED0C, // $ED0C + #$ED0D, // $ED0D + #$ED0E, // $ED0E + #$ED0F, // $ED0F + #$ED10, // $ED10 + #$ED11, // $ED11 + #$ED12, // $ED12 + #$ED13, // $ED13 + #$ED14, // $ED14 + #$ED15, // $ED15 + #$ED16, // $ED16 + #$ED17, // $ED17 + #$ED18, // $ED18 + #$ED19, // $ED19 + #$ED1A, // $ED1A + #$ED1B, // $ED1B + #$ED1C, // $ED1C + #$ED1D, // $ED1D + #$ED1E, // $ED1E + #$ED1F, // $ED1F + #$ED20, // $ED20 + #$ED21, // $ED21 + #$ED22, // $ED22 + #$ED23, // $ED23 + #$ED24, // $ED24 + #$ED25, // $ED25 + #$ED26, // $ED26 + #$ED27, // $ED27 + #$ED28, // $ED28 + #$ED29, // $ED29 + #$ED2A, // $ED2A + #$ED2B, // $ED2B + #$ED2C, // $ED2C + #$ED2D, // $ED2D + #$ED2E, // $ED2E + #$ED2F, // $ED2F + #$ED30, // $ED30 + #$ED31, // $ED31 + #$ED32, // $ED32 + #$ED33, // $ED33 + #$ED34, // $ED34 + #$ED35, // $ED35 + #$ED36, // $ED36 + #$ED37, // $ED37 + #$ED38, // $ED38 + #$ED39, // $ED39 + #$ED3A, // $ED3A + #$ED3B, // $ED3B + #$ED3C, // $ED3C + #$ED3D, // $ED3D + #$ED3E, // $ED3E + #$ED3F, // $ED3F + #$ED40, // $ED40 + #$ED41, // $ED41 + #$ED42, // $ED42 + #$ED43, // $ED43 + #$ED44, // $ED44 + #$ED45, // $ED45 + #$ED46, // $ED46 + #$ED47, // $ED47 + #$ED48, // $ED48 + #$ED49, // $ED49 + #$ED4A, // $ED4A + #$ED4B, // $ED4B + #$ED4C, // $ED4C + #$ED4D, // $ED4D + #$ED4E, // $ED4E + #$ED4F, // $ED4F + #$ED50, // $ED50 + #$ED51, // $ED51 + #$ED52, // $ED52 + #$ED53, // $ED53 + #$ED54, // $ED54 + #$ED55, // $ED55 + #$ED56, // $ED56 + #$ED57, // $ED57 + #$ED58, // $ED58 + #$ED59, // $ED59 + #$ED5A, // $ED5A + #$ED5B, // $ED5B + #$ED5C, // $ED5C + #$ED5D, // $ED5D + #$ED5E, // $ED5E + #$ED5F, // $ED5F + #$ED60, // $ED60 + #$ED61, // $ED61 + #$ED62, // $ED62 + #$ED63, // $ED63 + #$ED64, // $ED64 + #$ED65, // $ED65 + #$ED66, // $ED66 + #$ED67, // $ED67 + #$ED68, // $ED68 + #$ED69, // $ED69 + #$ED6A, // $ED6A + #$ED6B, // $ED6B + #$ED6C, // $ED6C + #$ED6D, // $ED6D + #$ED6E, // $ED6E + #$ED6F, // $ED6F + #$ED70, // $ED70 + #$ED71, // $ED71 + #$ED72, // $ED72 + #$ED73, // $ED73 + #$ED74, // $ED74 + #$ED75, // $ED75 + #$ED76, // $ED76 + #$ED77, // $ED77 + #$ED78, // $ED78 + #$ED79, // $ED79 + #$ED7A, // $ED7A + #$ED7B, // $ED7B + #$ED7C, // $ED7C + #$ED7D, // $ED7D + #$ED7E, // $ED7E + #$ED7F, // $ED7F + #$ED80, // $ED80 + #$ED81, // $ED81 + #$ED82, // $ED82 + #$ED83, // $ED83 + #$ED84, // $ED84 + #$ED85, // $ED85 + #$ED86, // $ED86 + #$ED87, // $ED87 + #$ED88, // $ED88 + #$ED89, // $ED89 + #$ED8A, // $ED8A + #$ED8B, // $ED8B + #$ED8C, // $ED8C + #$ED8D, // $ED8D + #$ED8E, // $ED8E + #$ED8F, // $ED8F + #$ED90, // $ED90 + #$ED91, // $ED91 + #$ED92, // $ED92 + #$ED93, // $ED93 + #$ED94, // $ED94 + #$ED95, // $ED95 + #$ED96, // $ED96 + #$ED97, // $ED97 + #$ED98, // $ED98 + #$ED99, // $ED99 + #$ED9A, // $ED9A + #$ED9B, // $ED9B + #$ED9C, // $ED9C + #$ED9D, // $ED9D + #$ED9E, // $ED9E + #$ED9F, // $ED9F + #$EDA0, // $EDA0 + #$EDA1, // $EDA1 + #$EDA2, // $EDA2 + #$EDA3, // $EDA3 + #$EDA4, // $EDA4 + #$EDA5, // $EDA5 + #$EDA6, // $EDA6 + #$EDA7, // $EDA7 + #$EDA8, // $EDA8 + #$EDA9, // $EDA9 + #$EDAA, // $EDAA + #$EDAB, // $EDAB + #$EDAC, // $EDAC + #$EDAD, // $EDAD + #$EDAE, // $EDAE + #$EDAF, // $EDAF + #$EDB0, // $EDB0 + #$EDB1, // $EDB1 + #$EDB2, // $EDB2 + #$EDB3, // $EDB3 + #$EDB4, // $EDB4 + #$EDB5, // $EDB5 + #$EDB6, // $EDB6 + #$EDB7, // $EDB7 + #$EDB8, // $EDB8 + #$EDB9, // $EDB9 + #$EDBA, // $EDBA + #$EDBB, // $EDBB + #$EDBC, // $EDBC + #$EDBD, // $EDBD + #$EDBE, // $EDBE + #$EDBF, // $EDBF + #$EDC0, // $EDC0 + #$EDC1, // $EDC1 + #$EDC2, // $EDC2 + #$EDC3, // $EDC3 + #$EDC4, // $EDC4 + #$EDC5, // $EDC5 + #$EDC6, // $EDC6 + #$EDC7, // $EDC7 + #$EDC8, // $EDC8 + #$EDC9, // $EDC9 + #$EDCA, // $EDCA + #$EDCB, // $EDCB + #$EDCC, // $EDCC + #$EDCD, // $EDCD + #$EDCE, // $EDCE + #$EDCF, // $EDCF + #$EDD0, // $EDD0 + #$EDD1, // $EDD1 + #$EDD2, // $EDD2 + #$EDD3, // $EDD3 + #$EDD4, // $EDD4 + #$EDD5, // $EDD5 + #$EDD6, // $EDD6 + #$EDD7, // $EDD7 + #$EDD8, // $EDD8 + #$EDD9, // $EDD9 + #$EDDA, // $EDDA + #$EDDB, // $EDDB + #$EDDC, // $EDDC + #$EDDD, // $EDDD + #$EDDE, // $EDDE + #$EDDF, // $EDDF + #$EDE0, // $EDE0 + #$EDE1, // $EDE1 + #$EDE2, // $EDE2 + #$EDE3, // $EDE3 + #$EDE4, // $EDE4 + #$EDE5, // $EDE5 + #$EDE6, // $EDE6 + #$EDE7, // $EDE7 + #$EDE8, // $EDE8 + #$EDE9, // $EDE9 + #$EDEA, // $EDEA + #$EDEB, // $EDEB + #$EDEC, // $EDEC + #$EDED, // $EDED + #$EDEE, // $EDEE + #$EDEF, // $EDEF + #$EDF0, // $EDF0 + #$EDF1, // $EDF1 + #$EDF2, // $EDF2 + #$EDF3, // $EDF3 + #$EDF4, // $EDF4 + #$EDF5, // $EDF5 + #$EDF6, // $EDF6 + #$EDF7, // $EDF7 + #$EDF8, // $EDF8 + #$EDF9, // $EDF9 + #$EDFA, // $EDFA + #$EDFB, // $EDFB + #$EDFC, // $EDFC + #$EDFD, // $EDFD + #$EDFE, // $EDFE + #$EDFF, // $EDFF + #$EE00, // $EE00 + #$EE01, // $EE01 + #$EE02, // $EE02 + #$EE03, // $EE03 + #$EE04, // $EE04 + #$EE05, // $EE05 + #$EE06, // $EE06 + #$EE07, // $EE07 + #$EE08, // $EE08 + #$EE09, // $EE09 + #$EE0A, // $EE0A + #$EE0B, // $EE0B + #$EE0C, // $EE0C + #$EE0D, // $EE0D + #$EE0E, // $EE0E + #$EE0F, // $EE0F + #$EE10, // $EE10 + #$EE11, // $EE11 + #$EE12, // $EE12 + #$EE13, // $EE13 + #$EE14, // $EE14 + #$EE15, // $EE15 + #$EE16, // $EE16 + #$EE17, // $EE17 + #$EE18, // $EE18 + #$EE19, // $EE19 + #$EE1A, // $EE1A + #$EE1B, // $EE1B + #$EE1C, // $EE1C + #$EE1D, // $EE1D + #$EE1E, // $EE1E + #$EE1F, // $EE1F + #$EE20, // $EE20 + #$EE21, // $EE21 + #$EE22, // $EE22 + #$EE23, // $EE23 + #$EE24, // $EE24 + #$EE25, // $EE25 + #$EE26, // $EE26 + #$EE27, // $EE27 + #$EE28, // $EE28 + #$EE29, // $EE29 + #$EE2A, // $EE2A + #$EE2B, // $EE2B + #$EE2C, // $EE2C + #$EE2D, // $EE2D + #$EE2E, // $EE2E + #$EE2F, // $EE2F + #$EE30, // $EE30 + #$EE31, // $EE31 + #$EE32, // $EE32 + #$EE33, // $EE33 + #$EE34, // $EE34 + #$EE35, // $EE35 + #$EE36, // $EE36 + #$EE37, // $EE37 + #$EE38, // $EE38 + #$EE39, // $EE39 + #$EE3A, // $EE3A + #$EE3B, // $EE3B + #$EE3C, // $EE3C + #$EE3D, // $EE3D + #$EE3E, // $EE3E + #$EE3F, // $EE3F + #$EE40, // $EE40 + #$EE41, // $EE41 + #$EE42, // $EE42 + #$EE43, // $EE43 + #$EE44, // $EE44 + #$EE45, // $EE45 + #$EE46, // $EE46 + #$EE47, // $EE47 + #$EE48, // $EE48 + #$EE49, // $EE49 + #$EE4A, // $EE4A + #$EE4B, // $EE4B + #$EE4C, // $EE4C + #$EE4D, // $EE4D + #$EE4E, // $EE4E + #$EE4F, // $EE4F + #$EE50, // $EE50 + #$EE51, // $EE51 + #$EE52, // $EE52 + #$EE53, // $EE53 + #$EE54, // $EE54 + #$EE55, // $EE55 + #$EE56, // $EE56 + #$EE57, // $EE57 + #$EE58, // $EE58 + #$EE59, // $EE59 + #$EE5A, // $EE5A + #$EE5B, // $EE5B + #$EE5C, // $EE5C + #$EE5D, // $EE5D + #$EE5E, // $EE5E + #$EE5F, // $EE5F + #$EE60, // $EE60 + #$EE61, // $EE61 + #$EE62, // $EE62 + #$EE63, // $EE63 + #$EE64, // $EE64 + #$EE65, // $EE65 + #$EE66, // $EE66 + #$EE67, // $EE67 + #$EE68, // $EE68 + #$EE69, // $EE69 + #$EE6A, // $EE6A + #$EE6B, // $EE6B + #$EE6C, // $EE6C + #$EE6D, // $EE6D + #$EE6E, // $EE6E + #$EE6F, // $EE6F + #$EE70, // $EE70 + #$EE71, // $EE71 + #$EE72, // $EE72 + #$EE73, // $EE73 + #$EE74, // $EE74 + #$EE75, // $EE75 + #$EE76, // $EE76 + #$EE77, // $EE77 + #$EE78, // $EE78 + #$EE79, // $EE79 + #$EE7A, // $EE7A + #$EE7B, // $EE7B + #$EE7C, // $EE7C + #$EE7D, // $EE7D + #$EE7E, // $EE7E + #$EE7F, // $EE7F + #$EE80, // $EE80 + #$EE81, // $EE81 + #$EE82, // $EE82 + #$EE83, // $EE83 + #$EE84, // $EE84 + #$EE85, // $EE85 + #$EE86, // $EE86 + #$EE87, // $EE87 + #$EE88, // $EE88 + #$EE89, // $EE89 + #$EE8A, // $EE8A + #$EE8B, // $EE8B + #$EE8C, // $EE8C + #$EE8D, // $EE8D + #$EE8E, // $EE8E + #$EE8F, // $EE8F + #$EE90, // $EE90 + #$EE91, // $EE91 + #$EE92, // $EE92 + #$EE93, // $EE93 + #$EE94, // $EE94 + #$EE95, // $EE95 + #$EE96, // $EE96 + #$EE97, // $EE97 + #$EE98, // $EE98 + #$EE99, // $EE99 + #$EE9A, // $EE9A + #$EE9B, // $EE9B + #$EE9C, // $EE9C + #$EE9D, // $EE9D + #$EE9E, // $EE9E + #$EE9F, // $EE9F + #$EEA0, // $EEA0 + #$EEA1, // $EEA1 + #$EEA2, // $EEA2 + #$EEA3, // $EEA3 + #$EEA4, // $EEA4 + #$EEA5, // $EEA5 + #$EEA6, // $EEA6 + #$EEA7, // $EEA7 + #$EEA8, // $EEA8 + #$EEA9, // $EEA9 + #$EEAA, // $EEAA + #$EEAB, // $EEAB + #$EEAC, // $EEAC + #$EEAD, // $EEAD + #$EEAE, // $EEAE + #$EEAF, // $EEAF + #$EEB0, // $EEB0 + #$EEB1, // $EEB1 + #$EEB2, // $EEB2 + #$EEB3, // $EEB3 + #$EEB4, // $EEB4 + #$EEB5, // $EEB5 + #$EEB6, // $EEB6 + #$EEB7, // $EEB7 + #$EEB8, // $EEB8 + #$EEB9, // $EEB9 + #$EEBA, // $EEBA + #$EEBB, // $EEBB + #$EEBC, // $EEBC + #$EEBD, // $EEBD + #$EEBE, // $EEBE + #$EEBF, // $EEBF + #$EEC0, // $EEC0 + #$EEC1, // $EEC1 + #$EEC2, // $EEC2 + #$EEC3, // $EEC3 + #$EEC4, // $EEC4 + #$EEC5, // $EEC5 + #$EEC6, // $EEC6 + #$EEC7, // $EEC7 + #$EEC8, // $EEC8 + #$EEC9, // $EEC9 + #$EECA, // $EECA + #$EECB, // $EECB + #$EECC, // $EECC + #$EECD, // $EECD + #$EECE, // $EECE + #$EECF, // $EECF + #$EED0, // $EED0 + #$EED1, // $EED1 + #$EED2, // $EED2 + #$EED3, // $EED3 + #$EED4, // $EED4 + #$EED5, // $EED5 + #$EED6, // $EED6 + #$EED7, // $EED7 + #$EED8, // $EED8 + #$EED9, // $EED9 + #$EEDA, // $EEDA + #$EEDB, // $EEDB + #$EEDC, // $EEDC + #$EEDD, // $EEDD + #$EEDE, // $EEDE + #$EEDF, // $EEDF + #$EEE0, // $EEE0 + #$EEE1, // $EEE1 + #$EEE2, // $EEE2 + #$EEE3, // $EEE3 + #$EEE4, // $EEE4 + #$EEE5, // $EEE5 + #$EEE6, // $EEE6 + #$EEE7, // $EEE7 + #$EEE8, // $EEE8 + #$EEE9, // $EEE9 + #$EEEA, // $EEEA + #$EEEB, // $EEEB + #$EEEC, // $EEEC + #$EEED, // $EEED + #$EEEE, // $EEEE + #$EEEF, // $EEEF + #$EEF0, // $EEF0 + #$EEF1, // $EEF1 + #$EEF2, // $EEF2 + #$EEF3, // $EEF3 + #$EEF4, // $EEF4 + #$EEF5, // $EEF5 + #$EEF6, // $EEF6 + #$EEF7, // $EEF7 + #$EEF8, // $EEF8 + #$EEF9, // $EEF9 + #$EEFA, // $EEFA + #$EEFB, // $EEFB + #$EEFC, // $EEFC + #$EEFD, // $EEFD + #$EEFE, // $EEFE + #$EEFF, // $EEFF + #$EF00, // $EF00 + #$EF01, // $EF01 + #$EF02, // $EF02 + #$EF03, // $EF03 + #$EF04, // $EF04 + #$EF05, // $EF05 + #$EF06, // $EF06 + #$EF07, // $EF07 + #$EF08, // $EF08 + #$EF09, // $EF09 + #$EF0A, // $EF0A + #$EF0B, // $EF0B + #$EF0C, // $EF0C + #$EF0D, // $EF0D + #$EF0E, // $EF0E + #$EF0F, // $EF0F + #$EF10, // $EF10 + #$EF11, // $EF11 + #$EF12, // $EF12 + #$EF13, // $EF13 + #$EF14, // $EF14 + #$EF15, // $EF15 + #$EF16, // $EF16 + #$EF17, // $EF17 + #$EF18, // $EF18 + #$EF19, // $EF19 + #$EF1A, // $EF1A + #$EF1B, // $EF1B + #$EF1C, // $EF1C + #$EF1D, // $EF1D + #$EF1E, // $EF1E + #$EF1F, // $EF1F + #$EF20, // $EF20 + #$EF21, // $EF21 + #$EF22, // $EF22 + #$EF23, // $EF23 + #$EF24, // $EF24 + #$EF25, // $EF25 + #$EF26, // $EF26 + #$EF27, // $EF27 + #$EF28, // $EF28 + #$EF29, // $EF29 + #$EF2A, // $EF2A + #$EF2B, // $EF2B + #$EF2C, // $EF2C + #$EF2D, // $EF2D + #$EF2E, // $EF2E + #$EF2F, // $EF2F + #$EF30, // $EF30 + #$EF31, // $EF31 + #$EF32, // $EF32 + #$EF33, // $EF33 + #$EF34, // $EF34 + #$EF35, // $EF35 + #$EF36, // $EF36 + #$EF37, // $EF37 + #$EF38, // $EF38 + #$EF39, // $EF39 + #$EF3A, // $EF3A + #$EF3B, // $EF3B + #$EF3C, // $EF3C + #$EF3D, // $EF3D + #$EF3E, // $EF3E + #$EF3F, // $EF3F + #$EF40, // $EF40 + #$EF41, // $EF41 + #$EF42, // $EF42 + #$EF43, // $EF43 + #$EF44, // $EF44 + #$EF45, // $EF45 + #$EF46, // $EF46 + #$EF47, // $EF47 + #$EF48, // $EF48 + #$EF49, // $EF49 + #$EF4A, // $EF4A + #$EF4B, // $EF4B + #$EF4C, // $EF4C + #$EF4D, // $EF4D + #$EF4E, // $EF4E + #$EF4F, // $EF4F + #$EF50, // $EF50 + #$EF51, // $EF51 + #$EF52, // $EF52 + #$EF53, // $EF53 + #$EF54, // $EF54 + #$EF55, // $EF55 + #$EF56, // $EF56 + #$EF57, // $EF57 + #$EF58, // $EF58 + #$EF59, // $EF59 + #$EF5A, // $EF5A + #$EF5B, // $EF5B + #$EF5C, // $EF5C + #$EF5D, // $EF5D + #$EF5E, // $EF5E + #$EF5F, // $EF5F + #$EF60, // $EF60 + #$EF61, // $EF61 + #$EF62, // $EF62 + #$EF63, // $EF63 + #$EF64, // $EF64 + #$EF65, // $EF65 + #$EF66, // $EF66 + #$EF67, // $EF67 + #$EF68, // $EF68 + #$EF69, // $EF69 + #$EF6A, // $EF6A + #$EF6B, // $EF6B + #$EF6C, // $EF6C + #$EF6D, // $EF6D + #$EF6E, // $EF6E + #$EF6F, // $EF6F + #$EF70, // $EF70 + #$EF71, // $EF71 + #$EF72, // $EF72 + #$EF73, // $EF73 + #$EF74, // $EF74 + #$EF75, // $EF75 + #$EF76, // $EF76 + #$EF77, // $EF77 + #$EF78, // $EF78 + #$EF79, // $EF79 + #$EF7A, // $EF7A + #$EF7B, // $EF7B + #$EF7C, // $EF7C + #$EF7D, // $EF7D + #$EF7E, // $EF7E + #$EF7F, // $EF7F + #$EF80, // $EF80 + #$EF81, // $EF81 + #$EF82, // $EF82 + #$EF83, // $EF83 + #$EF84, // $EF84 + #$EF85, // $EF85 + #$EF86, // $EF86 + #$EF87, // $EF87 + #$EF88, // $EF88 + #$EF89, // $EF89 + #$EF8A, // $EF8A + #$EF8B, // $EF8B + #$EF8C, // $EF8C + #$EF8D, // $EF8D + #$EF8E, // $EF8E + #$EF8F, // $EF8F + #$EF90, // $EF90 + #$EF91, // $EF91 + #$EF92, // $EF92 + #$EF93, // $EF93 + #$EF94, // $EF94 + #$EF95, // $EF95 + #$EF96, // $EF96 + #$EF97, // $EF97 + #$EF98, // $EF98 + #$EF99, // $EF99 + #$EF9A, // $EF9A + #$EF9B, // $EF9B + #$EF9C, // $EF9C + #$EF9D, // $EF9D + #$EF9E, // $EF9E + #$EF9F, // $EF9F + #$EFA0, // $EFA0 + #$EFA1, // $EFA1 + #$EFA2, // $EFA2 + #$EFA3, // $EFA3 + #$EFA4, // $EFA4 + #$EFA5, // $EFA5 + #$EFA6, // $EFA6 + #$EFA7, // $EFA7 + #$EFA8, // $EFA8 + #$EFA9, // $EFA9 + #$EFAA, // $EFAA + #$EFAB, // $EFAB + #$EFAC, // $EFAC + #$EFAD, // $EFAD + #$EFAE, // $EFAE + #$EFAF, // $EFAF + #$EFB0, // $EFB0 + #$EFB1, // $EFB1 + #$EFB2, // $EFB2 + #$EFB3, // $EFB3 + #$EFB4, // $EFB4 + #$EFB5, // $EFB5 + #$EFB6, // $EFB6 + #$EFB7, // $EFB7 + #$EFB8, // $EFB8 + #$EFB9, // $EFB9 + #$EFBA, // $EFBA + #$EFBB, // $EFBB + #$EFBC, // $EFBC + #$EFBD, // $EFBD + #$EFBE, // $EFBE + #$EFBF, // $EFBF + #$EFC0, // $EFC0 + #$EFC1, // $EFC1 + #$EFC2, // $EFC2 + #$EFC3, // $EFC3 + #$EFC4, // $EFC4 + #$EFC5, // $EFC5 + #$EFC6, // $EFC6 + #$EFC7, // $EFC7 + #$EFC8, // $EFC8 + #$EFC9, // $EFC9 + #$EFCA, // $EFCA + #$EFCB, // $EFCB + #$EFCC, // $EFCC + #$EFCD, // $EFCD + #$EFCE, // $EFCE + #$EFCF, // $EFCF + #$EFD0, // $EFD0 + #$EFD1, // $EFD1 + #$EFD2, // $EFD2 + #$EFD3, // $EFD3 + #$EFD4, // $EFD4 + #$EFD5, // $EFD5 + #$EFD6, // $EFD6 + #$EFD7, // $EFD7 + #$EFD8, // $EFD8 + #$EFD9, // $EFD9 + #$EFDA, // $EFDA + #$EFDB, // $EFDB + #$EFDC, // $EFDC + #$EFDD, // $EFDD + #$EFDE, // $EFDE + #$EFDF, // $EFDF + #$EFE0, // $EFE0 + #$EFE1, // $EFE1 + #$EFE2, // $EFE2 + #$EFE3, // $EFE3 + #$EFE4, // $EFE4 + #$EFE5, // $EFE5 + #$EFE6, // $EFE6 + #$EFE7, // $EFE7 + #$EFE8, // $EFE8 + #$EFE9, // $EFE9 + #$EFEA, // $EFEA + #$EFEB, // $EFEB + #$EFEC, // $EFEC + #$EFED, // $EFED + #$EFEE, // $EFEE + #$EFEF, // $EFEF + #$EFF0, // $EFF0 + #$EFF1, // $EFF1 + #$EFF2, // $EFF2 + #$EFF3, // $EFF3 + #$EFF4, // $EFF4 + #$EFF5, // $EFF5 + #$EFF6, // $EFF6 + #$EFF7, // $EFF7 + #$EFF8, // $EFF8 + #$EFF9, // $EFF9 + #$EFFA, // $EFFA + #$EFFB, // $EFFB + #$EFFC, // $EFFC + #$EFFD, // $EFFD + #$EFFE, // $EFFE + #$EFFF, // $EFFF + #$F000, // $F000 + #$F001, // $F001 + #$F002, // $F002 + #$F003, // $F003 + #$F004, // $F004 + #$F005, // $F005 + #$F006, // $F006 + #$F007, // $F007 + #$F008, // $F008 + #$F009, // $F009 + #$F00A, // $F00A + #$F00B, // $F00B + #$F00C, // $F00C + #$F00D, // $F00D + #$F00E, // $F00E + #$F00F, // $F00F + #$F010, // $F010 + #$F011, // $F011 + #$F012, // $F012 + #$F013, // $F013 + #$F014, // $F014 + #$F015, // $F015 + #$F016, // $F016 + #$F017, // $F017 + #$F018, // $F018 + #$F019, // $F019 + #$F01A, // $F01A + #$F01B, // $F01B + #$F01C, // $F01C + #$F01D, // $F01D + #$F01E, // $F01E + #$F01F, // $F01F + #$F020, // $F020 + #$F021, // $F021 + #$F022, // $F022 + #$F023, // $F023 + #$F024, // $F024 + #$F025, // $F025 + #$F026, // $F026 + #$F027, // $F027 + #$F028, // $F028 + #$F029, // $F029 + #$F02A, // $F02A + #$F02B, // $F02B + #$F02C, // $F02C + #$F02D, // $F02D + #$F02E, // $F02E + #$F02F, // $F02F + #$F030, // $F030 + #$F031, // $F031 + #$F032, // $F032 + #$F033, // $F033 + #$F034, // $F034 + #$F035, // $F035 + #$F036, // $F036 + #$F037, // $F037 + #$F038, // $F038 + #$F039, // $F039 + #$F03A, // $F03A + #$F03B, // $F03B + #$F03C, // $F03C + #$F03D, // $F03D + #$F03E, // $F03E + #$F03F, // $F03F + #$F040, // $F040 + #$F041, // $F041 + #$F042, // $F042 + #$F043, // $F043 + #$F044, // $F044 + #$F045, // $F045 + #$F046, // $F046 + #$F047, // $F047 + #$F048, // $F048 + #$F049, // $F049 + #$F04A, // $F04A + #$F04B, // $F04B + #$F04C, // $F04C + #$F04D, // $F04D + #$F04E, // $F04E + #$F04F, // $F04F + #$F050, // $F050 + #$F051, // $F051 + #$F052, // $F052 + #$F053, // $F053 + #$F054, // $F054 + #$F055, // $F055 + #$F056, // $F056 + #$F057, // $F057 + #$F058, // $F058 + #$F059, // $F059 + #$F05A, // $F05A + #$F05B, // $F05B + #$F05C, // $F05C + #$F05D, // $F05D + #$F05E, // $F05E + #$F05F, // $F05F + #$F060, // $F060 + #$F061, // $F061 + #$F062, // $F062 + #$F063, // $F063 + #$F064, // $F064 + #$F065, // $F065 + #$F066, // $F066 + #$F067, // $F067 + #$F068, // $F068 + #$F069, // $F069 + #$F06A, // $F06A + #$F06B, // $F06B + #$F06C, // $F06C + #$F06D, // $F06D + #$F06E, // $F06E + #$F06F, // $F06F + #$F070, // $F070 + #$F071, // $F071 + #$F072, // $F072 + #$F073, // $F073 + #$F074, // $F074 + #$F075, // $F075 + #$F076, // $F076 + #$F077, // $F077 + #$F078, // $F078 + #$F079, // $F079 + #$F07A, // $F07A + #$F07B, // $F07B + #$F07C, // $F07C + #$F07D, // $F07D + #$F07E, // $F07E + #$F07F, // $F07F + #$F080, // $F080 + #$F081, // $F081 + #$F082, // $F082 + #$F083, // $F083 + #$F084, // $F084 + #$F085, // $F085 + #$F086, // $F086 + #$F087, // $F087 + #$F088, // $F088 + #$F089, // $F089 + #$F08A, // $F08A + #$F08B, // $F08B + #$F08C, // $F08C + #$F08D, // $F08D + #$F08E, // $F08E + #$F08F, // $F08F + #$F090, // $F090 + #$F091, // $F091 + #$F092, // $F092 + #$F093, // $F093 + #$F094, // $F094 + #$F095, // $F095 + #$F096, // $F096 + #$F097, // $F097 + #$F098, // $F098 + #$F099, // $F099 + #$F09A, // $F09A + #$F09B, // $F09B + #$F09C, // $F09C + #$F09D, // $F09D + #$F09E, // $F09E + #$F09F, // $F09F + #$F0A0, // $F0A0 + #$F0A1, // $F0A1 + #$F0A2, // $F0A2 + #$F0A3, // $F0A3 + #$F0A4, // $F0A4 + #$F0A5, // $F0A5 + #$F0A6, // $F0A6 + #$F0A7, // $F0A7 + #$F0A8, // $F0A8 + #$F0A9, // $F0A9 + #$F0AA, // $F0AA + #$F0AB, // $F0AB + #$F0AC, // $F0AC + #$F0AD, // $F0AD + #$F0AE, // $F0AE + #$F0AF, // $F0AF + #$F0B0, // $F0B0 + #$F0B1, // $F0B1 + #$F0B2, // $F0B2 + #$F0B3, // $F0B3 + #$F0B4, // $F0B4 + #$F0B5, // $F0B5 + #$F0B6, // $F0B6 + #$F0B7, // $F0B7 + #$F0B8, // $F0B8 + #$F0B9, // $F0B9 + #$F0BA, // $F0BA + #$F0BB, // $F0BB + #$F0BC, // $F0BC + #$F0BD, // $F0BD + #$F0BE, // $F0BE + #$F0BF, // $F0BF + #$F0C0, // $F0C0 + #$F0C1, // $F0C1 + #$F0C2, // $F0C2 + #$F0C3, // $F0C3 + #$F0C4, // $F0C4 + #$F0C5, // $F0C5 + #$F0C6, // $F0C6 + #$F0C7, // $F0C7 + #$F0C8, // $F0C8 + #$F0C9, // $F0C9 + #$F0CA, // $F0CA + #$F0CB, // $F0CB + #$F0CC, // $F0CC + #$F0CD, // $F0CD + #$F0CE, // $F0CE + #$F0CF, // $F0CF + #$F0D0, // $F0D0 + #$F0D1, // $F0D1 + #$F0D2, // $F0D2 + #$F0D3, // $F0D3 + #$F0D4, // $F0D4 + #$F0D5, // $F0D5 + #$F0D6, // $F0D6 + #$F0D7, // $F0D7 + #$F0D8, // $F0D8 + #$F0D9, // $F0D9 + #$F0DA, // $F0DA + #$F0DB, // $F0DB + #$F0DC, // $F0DC + #$F0DD, // $F0DD + #$F0DE, // $F0DE + #$F0DF, // $F0DF + #$F0E0, // $F0E0 + #$F0E1, // $F0E1 + #$F0E2, // $F0E2 + #$F0E3, // $F0E3 + #$F0E4, // $F0E4 + #$F0E5, // $F0E5 + #$F0E6, // $F0E6 + #$F0E7, // $F0E7 + #$F0E8, // $F0E8 + #$F0E9, // $F0E9 + #$F0EA, // $F0EA + #$F0EB, // $F0EB + #$F0EC, // $F0EC + #$F0ED, // $F0ED + #$F0EE, // $F0EE + #$F0EF, // $F0EF + #$F0F0, // $F0F0 + #$F0F1, // $F0F1 + #$F0F2, // $F0F2 + #$F0F3, // $F0F3 + #$F0F4, // $F0F4 + #$F0F5, // $F0F5 + #$F0F6, // $F0F6 + #$F0F7, // $F0F7 + #$F0F8, // $F0F8 + #$F0F9, // $F0F9 + #$F0FA, // $F0FA + #$F0FB, // $F0FB + #$F0FC, // $F0FC + #$F0FD, // $F0FD + #$F0FE, // $F0FE + #$F0FF, // $F0FF + #$F100, // $F100 + #$F101, // $F101 + #$F102, // $F102 + #$F103, // $F103 + #$F104, // $F104 + #$F105, // $F105 + #$F106, // $F106 + #$F107, // $F107 + #$F108, // $F108 + #$F109, // $F109 + #$F10A, // $F10A + #$F10B, // $F10B + #$F10C, // $F10C + #$F10D, // $F10D + #$F10E, // $F10E + #$F10F, // $F10F + #$F110, // $F110 + #$F111, // $F111 + #$F112, // $F112 + #$F113, // $F113 + #$F114, // $F114 + #$F115, // $F115 + #$F116, // $F116 + #$F117, // $F117 + #$F118, // $F118 + #$F119, // $F119 + #$F11A, // $F11A + #$F11B, // $F11B + #$F11C, // $F11C + #$F11D, // $F11D + #$F11E, // $F11E + #$F11F, // $F11F + #$F120, // $F120 + #$F121, // $F121 + #$F122, // $F122 + #$F123, // $F123 + #$F124, // $F124 + #$F125, // $F125 + #$F126, // $F126 + #$F127, // $F127 + #$F128, // $F128 + #$F129, // $F129 + #$F12A, // $F12A + #$F12B, // $F12B + #$F12C, // $F12C + #$F12D, // $F12D + #$F12E, // $F12E + #$F12F, // $F12F + #$F130, // $F130 + #$F131, // $F131 + #$F132, // $F132 + #$F133, // $F133 + #$F134, // $F134 + #$F135, // $F135 + #$F136, // $F136 + #$F137, // $F137 + #$F138, // $F138 + #$F139, // $F139 + #$F13A, // $F13A + #$F13B, // $F13B + #$F13C, // $F13C + #$F13D, // $F13D + #$F13E, // $F13E + #$F13F, // $F13F + #$F140, // $F140 + #$F141, // $F141 + #$F142, // $F142 + #$F143, // $F143 + #$F144, // $F144 + #$F145, // $F145 + #$F146, // $F146 + #$F147, // $F147 + #$F148, // $F148 + #$F149, // $F149 + #$F14A, // $F14A + #$F14B, // $F14B + #$F14C, // $F14C + #$F14D, // $F14D + #$F14E, // $F14E + #$F14F, // $F14F + #$F150, // $F150 + #$F151, // $F151 + #$F152, // $F152 + #$F153, // $F153 + #$F154, // $F154 + #$F155, // $F155 + #$F156, // $F156 + #$F157, // $F157 + #$F158, // $F158 + #$F159, // $F159 + #$F15A, // $F15A + #$F15B, // $F15B + #$F15C, // $F15C + #$F15D, // $F15D + #$F15E, // $F15E + #$F15F, // $F15F + #$F160, // $F160 + #$F161, // $F161 + #$F162, // $F162 + #$F163, // $F163 + #$F164, // $F164 + #$F165, // $F165 + #$F166, // $F166 + #$F167, // $F167 + #$F168, // $F168 + #$F169, // $F169 + #$F16A, // $F16A + #$F16B, // $F16B + #$F16C, // $F16C + #$F16D, // $F16D + #$F16E, // $F16E + #$F16F, // $F16F + #$F170, // $F170 + #$F171, // $F171 + #$F172, // $F172 + #$F173, // $F173 + #$F174, // $F174 + #$F175, // $F175 + #$F176, // $F176 + #$F177, // $F177 + #$F178, // $F178 + #$F179, // $F179 + #$F17A, // $F17A + #$F17B, // $F17B + #$F17C, // $F17C + #$F17D, // $F17D + #$F17E, // $F17E + #$F17F, // $F17F + #$F180, // $F180 + #$F181, // $F181 + #$F182, // $F182 + #$F183, // $F183 + #$F184, // $F184 + #$F185, // $F185 + #$F186, // $F186 + #$F187, // $F187 + #$F188, // $F188 + #$F189, // $F189 + #$F18A, // $F18A + #$F18B, // $F18B + #$F18C, // $F18C + #$F18D, // $F18D + #$F18E, // $F18E + #$F18F, // $F18F + #$F190, // $F190 + #$F191, // $F191 + #$F192, // $F192 + #$F193, // $F193 + #$F194, // $F194 + #$F195, // $F195 + #$F196, // $F196 + #$F197, // $F197 + #$F198, // $F198 + #$F199, // $F199 + #$F19A, // $F19A + #$F19B, // $F19B + #$F19C, // $F19C + #$F19D, // $F19D + #$F19E, // $F19E + #$F19F, // $F19F + #$F1A0, // $F1A0 + #$F1A1, // $F1A1 + #$F1A2, // $F1A2 + #$F1A3, // $F1A3 + #$F1A4, // $F1A4 + #$F1A5, // $F1A5 + #$F1A6, // $F1A6 + #$F1A7, // $F1A7 + #$F1A8, // $F1A8 + #$F1A9, // $F1A9 + #$F1AA, // $F1AA + #$F1AB, // $F1AB + #$F1AC, // $F1AC + #$F1AD, // $F1AD + #$F1AE, // $F1AE + #$F1AF, // $F1AF + #$F1B0, // $F1B0 + #$F1B1, // $F1B1 + #$F1B2, // $F1B2 + #$F1B3, // $F1B3 + #$F1B4, // $F1B4 + #$F1B5, // $F1B5 + #$F1B6, // $F1B6 + #$F1B7, // $F1B7 + #$F1B8, // $F1B8 + #$F1B9, // $F1B9 + #$F1BA, // $F1BA + #$F1BB, // $F1BB + #$F1BC, // $F1BC + #$F1BD, // $F1BD + #$F1BE, // $F1BE + #$F1BF, // $F1BF + #$F1C0, // $F1C0 + #$F1C1, // $F1C1 + #$F1C2, // $F1C2 + #$F1C3, // $F1C3 + #$F1C4, // $F1C4 + #$F1C5, // $F1C5 + #$F1C6, // $F1C6 + #$F1C7, // $F1C7 + #$F1C8, // $F1C8 + #$F1C9, // $F1C9 + #$F1CA, // $F1CA + #$F1CB, // $F1CB + #$F1CC, // $F1CC + #$F1CD, // $F1CD + #$F1CE, // $F1CE + #$F1CF, // $F1CF + #$F1D0, // $F1D0 + #$F1D1, // $F1D1 + #$F1D2, // $F1D2 + #$F1D3, // $F1D3 + #$F1D4, // $F1D4 + #$F1D5, // $F1D5 + #$F1D6, // $F1D6 + #$F1D7, // $F1D7 + #$F1D8, // $F1D8 + #$F1D9, // $F1D9 + #$F1DA, // $F1DA + #$F1DB, // $F1DB + #$F1DC, // $F1DC + #$F1DD, // $F1DD + #$F1DE, // $F1DE + #$F1DF, // $F1DF + #$F1E0, // $F1E0 + #$F1E1, // $F1E1 + #$F1E2, // $F1E2 + #$F1E3, // $F1E3 + #$F1E4, // $F1E4 + #$F1E5, // $F1E5 + #$F1E6, // $F1E6 + #$F1E7, // $F1E7 + #$F1E8, // $F1E8 + #$F1E9, // $F1E9 + #$F1EA, // $F1EA + #$F1EB, // $F1EB + #$F1EC, // $F1EC + #$F1ED, // $F1ED + #$F1EE, // $F1EE + #$F1EF, // $F1EF + #$F1F0, // $F1F0 + #$F1F1, // $F1F1 + #$F1F2, // $F1F2 + #$F1F3, // $F1F3 + #$F1F4, // $F1F4 + #$F1F5, // $F1F5 + #$F1F6, // $F1F6 + #$F1F7, // $F1F7 + #$F1F8, // $F1F8 + #$F1F9, // $F1F9 + #$F1FA, // $F1FA + #$F1FB, // $F1FB + #$F1FC, // $F1FC + #$F1FD, // $F1FD + #$F1FE, // $F1FE + #$F1FF, // $F1FF + #$F200, // $F200 + #$F201, // $F201 + #$F202, // $F202 + #$F203, // $F203 + #$F204, // $F204 + #$F205, // $F205 + #$F206, // $F206 + #$F207, // $F207 + #$F208, // $F208 + #$F209, // $F209 + #$F20A, // $F20A + #$F20B, // $F20B + #$F20C, // $F20C + #$F20D, // $F20D + #$F20E, // $F20E + #$F20F, // $F20F + #$F210, // $F210 + #$F211, // $F211 + #$F212, // $F212 + #$F213, // $F213 + #$F214, // $F214 + #$F215, // $F215 + #$F216, // $F216 + #$F217, // $F217 + #$F218, // $F218 + #$F219, // $F219 + #$F21A, // $F21A + #$F21B, // $F21B + #$F21C, // $F21C + #$F21D, // $F21D + #$F21E, // $F21E + #$F21F, // $F21F + #$F220, // $F220 + #$F221, // $F221 + #$F222, // $F222 + #$F223, // $F223 + #$F224, // $F224 + #$F225, // $F225 + #$F226, // $F226 + #$F227, // $F227 + #$F228, // $F228 + #$F229, // $F229 + #$F22A, // $F22A + #$F22B, // $F22B + #$F22C, // $F22C + #$F22D, // $F22D + #$F22E, // $F22E + #$F22F, // $F22F + #$F230, // $F230 + #$F231, // $F231 + #$F232, // $F232 + #$F233, // $F233 + #$F234, // $F234 + #$F235, // $F235 + #$F236, // $F236 + #$F237, // $F237 + #$F238, // $F238 + #$F239, // $F239 + #$F23A, // $F23A + #$F23B, // $F23B + #$F23C, // $F23C + #$F23D, // $F23D + #$F23E, // $F23E + #$F23F, // $F23F + #$F240, // $F240 + #$F241, // $F241 + #$F242, // $F242 + #$F243, // $F243 + #$F244, // $F244 + #$F245, // $F245 + #$F246, // $F246 + #$F247, // $F247 + #$F248, // $F248 + #$F249, // $F249 + #$F24A, // $F24A + #$F24B, // $F24B + #$F24C, // $F24C + #$F24D, // $F24D + #$F24E, // $F24E + #$F24F, // $F24F + #$F250, // $F250 + #$F251, // $F251 + #$F252, // $F252 + #$F253, // $F253 + #$F254, // $F254 + #$F255, // $F255 + #$F256, // $F256 + #$F257, // $F257 + #$F258, // $F258 + #$F259, // $F259 + #$F25A, // $F25A + #$F25B, // $F25B + #$F25C, // $F25C + #$F25D, // $F25D + #$F25E, // $F25E + #$F25F, // $F25F + #$F260, // $F260 + #$F261, // $F261 + #$F262, // $F262 + #$F263, // $F263 + #$F264, // $F264 + #$F265, // $F265 + #$F266, // $F266 + #$F267, // $F267 + #$F268, // $F268 + #$F269, // $F269 + #$F26A, // $F26A + #$F26B, // $F26B + #$F26C, // $F26C + #$F26D, // $F26D + #$F26E, // $F26E + #$F26F, // $F26F + #$F270, // $F270 + #$F271, // $F271 + #$F272, // $F272 + #$F273, // $F273 + #$F274, // $F274 + #$F275, // $F275 + #$F276, // $F276 + #$F277, // $F277 + #$F278, // $F278 + #$F279, // $F279 + #$F27A, // $F27A + #$F27B, // $F27B + #$F27C, // $F27C + #$F27D, // $F27D + #$F27E, // $F27E + #$F27F, // $F27F + #$F280, // $F280 + #$F281, // $F281 + #$F282, // $F282 + #$F283, // $F283 + #$F284, // $F284 + #$F285, // $F285 + #$F286, // $F286 + #$F287, // $F287 + #$F288, // $F288 + #$F289, // $F289 + #$F28A, // $F28A + #$F28B, // $F28B + #$F28C, // $F28C + #$F28D, // $F28D + #$F28E, // $F28E + #$F28F, // $F28F + #$F290, // $F290 + #$F291, // $F291 + #$F292, // $F292 + #$F293, // $F293 + #$F294, // $F294 + #$F295, // $F295 + #$F296, // $F296 + #$F297, // $F297 + #$F298, // $F298 + #$F299, // $F299 + #$F29A, // $F29A + #$F29B, // $F29B + #$F29C, // $F29C + #$F29D, // $F29D + #$F29E, // $F29E + #$F29F, // $F29F + #$F2A0, // $F2A0 + #$F2A1, // $F2A1 + #$F2A2, // $F2A2 + #$F2A3, // $F2A3 + #$F2A4, // $F2A4 + #$F2A5, // $F2A5 + #$F2A6, // $F2A6 + #$F2A7, // $F2A7 + #$F2A8, // $F2A8 + #$F2A9, // $F2A9 + #$F2AA, // $F2AA + #$F2AB, // $F2AB + #$F2AC, // $F2AC + #$F2AD, // $F2AD + #$F2AE, // $F2AE + #$F2AF, // $F2AF + #$F2B0, // $F2B0 + #$F2B1, // $F2B1 + #$F2B2, // $F2B2 + #$F2B3, // $F2B3 + #$F2B4, // $F2B4 + #$F2B5, // $F2B5 + #$F2B6, // $F2B6 + #$F2B7, // $F2B7 + #$F2B8, // $F2B8 + #$F2B9, // $F2B9 + #$F2BA, // $F2BA + #$F2BB, // $F2BB + #$F2BC, // $F2BC + #$F2BD, // $F2BD + #$F2BE, // $F2BE + #$F2BF, // $F2BF + #$F2C0, // $F2C0 + #$F2C1, // $F2C1 + #$F2C2, // $F2C2 + #$F2C3, // $F2C3 + #$F2C4, // $F2C4 + #$F2C5, // $F2C5 + #$F2C6, // $F2C6 + #$F2C7, // $F2C7 + #$F2C8, // $F2C8 + #$F2C9, // $F2C9 + #$F2CA, // $F2CA + #$F2CB, // $F2CB + #$F2CC, // $F2CC + #$F2CD, // $F2CD + #$F2CE, // $F2CE + #$F2CF, // $F2CF + #$F2D0, // $F2D0 + #$F2D1, // $F2D1 + #$F2D2, // $F2D2 + #$F2D3, // $F2D3 + #$F2D4, // $F2D4 + #$F2D5, // $F2D5 + #$F2D6, // $F2D6 + #$F2D7, // $F2D7 + #$F2D8, // $F2D8 + #$F2D9, // $F2D9 + #$F2DA, // $F2DA + #$F2DB, // $F2DB + #$F2DC, // $F2DC + #$F2DD, // $F2DD + #$F2DE, // $F2DE + #$F2DF, // $F2DF + #$F2E0, // $F2E0 + #$F2E1, // $F2E1 + #$F2E2, // $F2E2 + #$F2E3, // $F2E3 + #$F2E4, // $F2E4 + #$F2E5, // $F2E5 + #$F2E6, // $F2E6 + #$F2E7, // $F2E7 + #$F2E8, // $F2E8 + #$F2E9, // $F2E9 + #$F2EA, // $F2EA + #$F2EB, // $F2EB + #$F2EC, // $F2EC + #$F2ED, // $F2ED + #$F2EE, // $F2EE + #$F2EF, // $F2EF + #$F2F0, // $F2F0 + #$F2F1, // $F2F1 + #$F2F2, // $F2F2 + #$F2F3, // $F2F3 + #$F2F4, // $F2F4 + #$F2F5, // $F2F5 + #$F2F6, // $F2F6 + #$F2F7, // $F2F7 + #$F2F8, // $F2F8 + #$F2F9, // $F2F9 + #$F2FA, // $F2FA + #$F2FB, // $F2FB + #$F2FC, // $F2FC + #$F2FD, // $F2FD + #$F2FE, // $F2FE + #$F2FF, // $F2FF + #$F300, // $F300 + #$F301, // $F301 + #$F302, // $F302 + #$F303, // $F303 + #$F304, // $F304 + #$F305, // $F305 + #$F306, // $F306 + #$F307, // $F307 + #$F308, // $F308 + #$F309, // $F309 + #$F30A, // $F30A + #$F30B, // $F30B + #$F30C, // $F30C + #$F30D, // $F30D + #$F30E, // $F30E + #$F30F, // $F30F + #$F310, // $F310 + #$F311, // $F311 + #$F312, // $F312 + #$F313, // $F313 + #$F314, // $F314 + #$F315, // $F315 + #$F316, // $F316 + #$F317, // $F317 + #$F318, // $F318 + #$F319, // $F319 + #$F31A, // $F31A + #$F31B, // $F31B + #$F31C, // $F31C + #$F31D, // $F31D + #$F31E, // $F31E + #$F31F, // $F31F + #$F320, // $F320 + #$F321, // $F321 + #$F322, // $F322 + #$F323, // $F323 + #$F324, // $F324 + #$F325, // $F325 + #$F326, // $F326 + #$F327, // $F327 + #$F328, // $F328 + #$F329, // $F329 + #$F32A, // $F32A + #$F32B, // $F32B + #$F32C, // $F32C + #$F32D, // $F32D + #$F32E, // $F32E + #$F32F, // $F32F + #$F330, // $F330 + #$F331, // $F331 + #$F332, // $F332 + #$F333, // $F333 + #$F334, // $F334 + #$F335, // $F335 + #$F336, // $F336 + #$F337, // $F337 + #$F338, // $F338 + #$F339, // $F339 + #$F33A, // $F33A + #$F33B, // $F33B + #$F33C, // $F33C + #$F33D, // $F33D + #$F33E, // $F33E + #$F33F, // $F33F + #$F340, // $F340 + #$F341, // $F341 + #$F342, // $F342 + #$F343, // $F343 + #$F344, // $F344 + #$F345, // $F345 + #$F346, // $F346 + #$F347, // $F347 + #$F348, // $F348 + #$F349, // $F349 + #$F34A, // $F34A + #$F34B, // $F34B + #$F34C, // $F34C + #$F34D, // $F34D + #$F34E, // $F34E + #$F34F, // $F34F + #$F350, // $F350 + #$F351, // $F351 + #$F352, // $F352 + #$F353, // $F353 + #$F354, // $F354 + #$F355, // $F355 + #$F356, // $F356 + #$F357, // $F357 + #$F358, // $F358 + #$F359, // $F359 + #$F35A, // $F35A + #$F35B, // $F35B + #$F35C, // $F35C + #$F35D, // $F35D + #$F35E, // $F35E + #$F35F, // $F35F + #$F360, // $F360 + #$F361, // $F361 + #$F362, // $F362 + #$F363, // $F363 + #$F364, // $F364 + #$F365, // $F365 + #$F366, // $F366 + #$F367, // $F367 + #$F368, // $F368 + #$F369, // $F369 + #$F36A, // $F36A + #$F36B, // $F36B + #$F36C, // $F36C + #$F36D, // $F36D + #$F36E, // $F36E + #$F36F, // $F36F + #$F370, // $F370 + #$F371, // $F371 + #$F372, // $F372 + #$F373, // $F373 + #$F374, // $F374 + #$F375, // $F375 + #$F376, // $F376 + #$F377, // $F377 + #$F378, // $F378 + #$F379, // $F379 + #$F37A, // $F37A + #$F37B, // $F37B + #$F37C, // $F37C + #$F37D, // $F37D + #$F37E, // $F37E + #$F37F, // $F37F + #$F380, // $F380 + #$F381, // $F381 + #$F382, // $F382 + #$F383, // $F383 + #$F384, // $F384 + #$F385, // $F385 + #$F386, // $F386 + #$F387, // $F387 + #$F388, // $F388 + #$F389, // $F389 + #$F38A, // $F38A + #$F38B, // $F38B + #$F38C, // $F38C + #$F38D, // $F38D + #$F38E, // $F38E + #$F38F, // $F38F + #$F390, // $F390 + #$F391, // $F391 + #$F392, // $F392 + #$F393, // $F393 + #$F394, // $F394 + #$F395, // $F395 + #$F396, // $F396 + #$F397, // $F397 + #$F398, // $F398 + #$F399, // $F399 + #$F39A, // $F39A + #$F39B, // $F39B + #$F39C, // $F39C + #$F39D, // $F39D + #$F39E, // $F39E + #$F39F, // $F39F + #$F3A0, // $F3A0 + #$F3A1, // $F3A1 + #$F3A2, // $F3A2 + #$F3A3, // $F3A3 + #$F3A4, // $F3A4 + #$F3A5, // $F3A5 + #$F3A6, // $F3A6 + #$F3A7, // $F3A7 + #$F3A8, // $F3A8 + #$F3A9, // $F3A9 + #$F3AA, // $F3AA + #$F3AB, // $F3AB + #$F3AC, // $F3AC + #$F3AD, // $F3AD + #$F3AE, // $F3AE + #$F3AF, // $F3AF + #$F3B0, // $F3B0 + #$F3B1, // $F3B1 + #$F3B2, // $F3B2 + #$F3B3, // $F3B3 + #$F3B4, // $F3B4 + #$F3B5, // $F3B5 + #$F3B6, // $F3B6 + #$F3B7, // $F3B7 + #$F3B8, // $F3B8 + #$F3B9, // $F3B9 + #$F3BA, // $F3BA + #$F3BB, // $F3BB + #$F3BC, // $F3BC + #$F3BD, // $F3BD + #$F3BE, // $F3BE + #$F3BF, // $F3BF + #$F3C0, // $F3C0 + #$F3C1, // $F3C1 + #$F3C2, // $F3C2 + #$F3C3, // $F3C3 + #$F3C4, // $F3C4 + #$F3C5, // $F3C5 + #$F3C6, // $F3C6 + #$F3C7, // $F3C7 + #$F3C8, // $F3C8 + #$F3C9, // $F3C9 + #$F3CA, // $F3CA + #$F3CB, // $F3CB + #$F3CC, // $F3CC + #$F3CD, // $F3CD + #$F3CE, // $F3CE + #$F3CF, // $F3CF + #$F3D0, // $F3D0 + #$F3D1, // $F3D1 + #$F3D2, // $F3D2 + #$F3D3, // $F3D3 + #$F3D4, // $F3D4 + #$F3D5, // $F3D5 + #$F3D6, // $F3D6 + #$F3D7, // $F3D7 + #$F3D8, // $F3D8 + #$F3D9, // $F3D9 + #$F3DA, // $F3DA + #$F3DB, // $F3DB + #$F3DC, // $F3DC + #$F3DD, // $F3DD + #$F3DE, // $F3DE + #$F3DF, // $F3DF + #$F3E0, // $F3E0 + #$F3E1, // $F3E1 + #$F3E2, // $F3E2 + #$F3E3, // $F3E3 + #$F3E4, // $F3E4 + #$F3E5, // $F3E5 + #$F3E6, // $F3E6 + #$F3E7, // $F3E7 + #$F3E8, // $F3E8 + #$F3E9, // $F3E9 + #$F3EA, // $F3EA + #$F3EB, // $F3EB + #$F3EC, // $F3EC + #$F3ED, // $F3ED + #$F3EE, // $F3EE + #$F3EF, // $F3EF + #$F3F0, // $F3F0 + #$F3F1, // $F3F1 + #$F3F2, // $F3F2 + #$F3F3, // $F3F3 + #$F3F4, // $F3F4 + #$F3F5, // $F3F5 + #$F3F6, // $F3F6 + #$F3F7, // $F3F7 + #$F3F8, // $F3F8 + #$F3F9, // $F3F9 + #$F3FA, // $F3FA + #$F3FB, // $F3FB + #$F3FC, // $F3FC + #$F3FD, // $F3FD + #$F3FE, // $F3FE + #$F3FF, // $F3FF + #$F400, // $F400 + #$F401, // $F401 + #$F402, // $F402 + #$F403, // $F403 + #$F404, // $F404 + #$F405, // $F405 + #$F406, // $F406 + #$F407, // $F407 + #$F408, // $F408 + #$F409, // $F409 + #$F40A, // $F40A + #$F40B, // $F40B + #$F40C, // $F40C + #$F40D, // $F40D + #$F40E, // $F40E + #$F40F, // $F40F + #$F410, // $F410 + #$F411, // $F411 + #$F412, // $F412 + #$F413, // $F413 + #$F414, // $F414 + #$F415, // $F415 + #$F416, // $F416 + #$F417, // $F417 + #$F418, // $F418 + #$F419, // $F419 + #$F41A, // $F41A + #$F41B, // $F41B + #$F41C, // $F41C + #$F41D, // $F41D + #$F41E, // $F41E + #$F41F, // $F41F + #$F420, // $F420 + #$F421, // $F421 + #$F422, // $F422 + #$F423, // $F423 + #$F424, // $F424 + #$F425, // $F425 + #$F426, // $F426 + #$F427, // $F427 + #$F428, // $F428 + #$F429, // $F429 + #$F42A, // $F42A + #$F42B, // $F42B + #$F42C, // $F42C + #$F42D, // $F42D + #$F42E, // $F42E + #$F42F, // $F42F + #$F430, // $F430 + #$F431, // $F431 + #$F432, // $F432 + #$F433, // $F433 + #$F434, // $F434 + #$F435, // $F435 + #$F436, // $F436 + #$F437, // $F437 + #$F438, // $F438 + #$F439, // $F439 + #$F43A, // $F43A + #$F43B, // $F43B + #$F43C, // $F43C + #$F43D, // $F43D + #$F43E, // $F43E + #$F43F, // $F43F + #$F440, // $F440 + #$F441, // $F441 + #$F442, // $F442 + #$F443, // $F443 + #$F444, // $F444 + #$F445, // $F445 + #$F446, // $F446 + #$F447, // $F447 + #$F448, // $F448 + #$F449, // $F449 + #$F44A, // $F44A + #$F44B, // $F44B + #$F44C, // $F44C + #$F44D, // $F44D + #$F44E, // $F44E + #$F44F, // $F44F + #$F450, // $F450 + #$F451, // $F451 + #$F452, // $F452 + #$F453, // $F453 + #$F454, // $F454 + #$F455, // $F455 + #$F456, // $F456 + #$F457, // $F457 + #$F458, // $F458 + #$F459, // $F459 + #$F45A, // $F45A + #$F45B, // $F45B + #$F45C, // $F45C + #$F45D, // $F45D + #$F45E, // $F45E + #$F45F, // $F45F + #$F460, // $F460 + #$F461, // $F461 + #$F462, // $F462 + #$F463, // $F463 + #$F464, // $F464 + #$F465, // $F465 + #$F466, // $F466 + #$F467, // $F467 + #$F468, // $F468 + #$F469, // $F469 + #$F46A, // $F46A + #$F46B, // $F46B + #$F46C, // $F46C + #$F46D, // $F46D + #$F46E, // $F46E + #$F46F, // $F46F + #$F470, // $F470 + #$F471, // $F471 + #$F472, // $F472 + #$F473, // $F473 + #$F474, // $F474 + #$F475, // $F475 + #$F476, // $F476 + #$F477, // $F477 + #$F478, // $F478 + #$F479, // $F479 + #$F47A, // $F47A + #$F47B, // $F47B + #$F47C, // $F47C + #$F47D, // $F47D + #$F47E, // $F47E + #$F47F, // $F47F + #$F480, // $F480 + #$F481, // $F481 + #$F482, // $F482 + #$F483, // $F483 + #$F484, // $F484 + #$F485, // $F485 + #$F486, // $F486 + #$F487, // $F487 + #$F488, // $F488 + #$F489, // $F489 + #$F48A, // $F48A + #$F48B, // $F48B + #$F48C, // $F48C + #$F48D, // $F48D + #$F48E, // $F48E + #$F48F, // $F48F + #$F490, // $F490 + #$F491, // $F491 + #$F492, // $F492 + #$F493, // $F493 + #$F494, // $F494 + #$F495, // $F495 + #$F496, // $F496 + #$F497, // $F497 + #$F498, // $F498 + #$F499, // $F499 + #$F49A, // $F49A + #$F49B, // $F49B + #$F49C, // $F49C + #$F49D, // $F49D + #$F49E, // $F49E + #$F49F, // $F49F + #$F4A0, // $F4A0 + #$F4A1, // $F4A1 + #$F4A2, // $F4A2 + #$F4A3, // $F4A3 + #$F4A4, // $F4A4 + #$F4A5, // $F4A5 + #$F4A6, // $F4A6 + #$F4A7, // $F4A7 + #$F4A8, // $F4A8 + #$F4A9, // $F4A9 + #$F4AA, // $F4AA + #$F4AB, // $F4AB + #$F4AC, // $F4AC + #$F4AD, // $F4AD + #$F4AE, // $F4AE + #$F4AF, // $F4AF + #$F4B0, // $F4B0 + #$F4B1, // $F4B1 + #$F4B2, // $F4B2 + #$F4B3, // $F4B3 + #$F4B4, // $F4B4 + #$F4B5, // $F4B5 + #$F4B6, // $F4B6 + #$F4B7, // $F4B7 + #$F4B8, // $F4B8 + #$F4B9, // $F4B9 + #$F4BA, // $F4BA + #$F4BB, // $F4BB + #$F4BC, // $F4BC + #$F4BD, // $F4BD + #$F4BE, // $F4BE + #$F4BF, // $F4BF + #$F4C0, // $F4C0 + #$F4C1, // $F4C1 + #$F4C2, // $F4C2 + #$F4C3, // $F4C3 + #$F4C4, // $F4C4 + #$F4C5, // $F4C5 + #$F4C6, // $F4C6 + #$F4C7, // $F4C7 + #$F4C8, // $F4C8 + #$F4C9, // $F4C9 + #$F4CA, // $F4CA + #$F4CB, // $F4CB + #$F4CC, // $F4CC + #$F4CD, // $F4CD + #$F4CE, // $F4CE + #$F4CF, // $F4CF + #$F4D0, // $F4D0 + #$F4D1, // $F4D1 + #$F4D2, // $F4D2 + #$F4D3, // $F4D3 + #$F4D4, // $F4D4 + #$F4D5, // $F4D5 + #$F4D6, // $F4D6 + #$F4D7, // $F4D7 + #$F4D8, // $F4D8 + #$F4D9, // $F4D9 + #$F4DA, // $F4DA + #$F4DB, // $F4DB + #$F4DC, // $F4DC + #$F4DD, // $F4DD + #$F4DE, // $F4DE + #$F4DF, // $F4DF + #$F4E0, // $F4E0 + #$F4E1, // $F4E1 + #$F4E2, // $F4E2 + #$F4E3, // $F4E3 + #$F4E4, // $F4E4 + #$F4E5, // $F4E5 + #$F4E6, // $F4E6 + #$F4E7, // $F4E7 + #$F4E8, // $F4E8 + #$F4E9, // $F4E9 + #$F4EA, // $F4EA + #$F4EB, // $F4EB + #$F4EC, // $F4EC + #$F4ED, // $F4ED + #$F4EE, // $F4EE + #$F4EF, // $F4EF + #$F4F0, // $F4F0 + #$F4F1, // $F4F1 + #$F4F2, // $F4F2 + #$F4F3, // $F4F3 + #$F4F4, // $F4F4 + #$F4F5, // $F4F5 + #$F4F6, // $F4F6 + #$F4F7, // $F4F7 + #$F4F8, // $F4F8 + #$F4F9, // $F4F9 + #$F4FA, // $F4FA + #$F4FB, // $F4FB + #$F4FC, // $F4FC + #$F4FD, // $F4FD + #$F4FE, // $F4FE + #$F4FF, // $F4FF + #$F500, // $F500 + #$F501, // $F501 + #$F502, // $F502 + #$F503, // $F503 + #$F504, // $F504 + #$F505, // $F505 + #$F506, // $F506 + #$F507, // $F507 + #$F508, // $F508 + #$F509, // $F509 + #$F50A, // $F50A + #$F50B, // $F50B + #$F50C, // $F50C + #$F50D, // $F50D + #$F50E, // $F50E + #$F50F, // $F50F + #$F510, // $F510 + #$F511, // $F511 + #$F512, // $F512 + #$F513, // $F513 + #$F514, // $F514 + #$F515, // $F515 + #$F516, // $F516 + #$F517, // $F517 + #$F518, // $F518 + #$F519, // $F519 + #$F51A, // $F51A + #$F51B, // $F51B + #$F51C, // $F51C + #$F51D, // $F51D + #$F51E, // $F51E + #$F51F, // $F51F + #$F520, // $F520 + #$F521, // $F521 + #$F522, // $F522 + #$F523, // $F523 + #$F524, // $F524 + #$F525, // $F525 + #$F526, // $F526 + #$F527, // $F527 + #$F528, // $F528 + #$F529, // $F529 + #$F52A, // $F52A + #$F52B, // $F52B + #$F52C, // $F52C + #$F52D, // $F52D + #$F52E, // $F52E + #$F52F, // $F52F + #$F530, // $F530 + #$F531, // $F531 + #$F532, // $F532 + #$F533, // $F533 + #$F534, // $F534 + #$F535, // $F535 + #$F536, // $F536 + #$F537, // $F537 + #$F538, // $F538 + #$F539, // $F539 + #$F53A, // $F53A + #$F53B, // $F53B + #$F53C, // $F53C + #$F53D, // $F53D + #$F53E, // $F53E + #$F53F, // $F53F + #$F540, // $F540 + #$F541, // $F541 + #$F542, // $F542 + #$F543, // $F543 + #$F544, // $F544 + #$F545, // $F545 + #$F546, // $F546 + #$F547, // $F547 + #$F548, // $F548 + #$F549, // $F549 + #$F54A, // $F54A + #$F54B, // $F54B + #$F54C, // $F54C + #$F54D, // $F54D + #$F54E, // $F54E + #$F54F, // $F54F + #$F550, // $F550 + #$F551, // $F551 + #$F552, // $F552 + #$F553, // $F553 + #$F554, // $F554 + #$F555, // $F555 + #$F556, // $F556 + #$F557, // $F557 + #$F558, // $F558 + #$F559, // $F559 + #$F55A, // $F55A + #$F55B, // $F55B + #$F55C, // $F55C + #$F55D, // $F55D + #$F55E, // $F55E + #$F55F, // $F55F + #$F560, // $F560 + #$F561, // $F561 + #$F562, // $F562 + #$F563, // $F563 + #$F564, // $F564 + #$F565, // $F565 + #$F566, // $F566 + #$F567, // $F567 + #$F568, // $F568 + #$F569, // $F569 + #$F56A, // $F56A + #$F56B, // $F56B + #$F56C, // $F56C + #$F56D, // $F56D + #$F56E, // $F56E + #$F56F, // $F56F + #$F570, // $F570 + #$F571, // $F571 + #$F572, // $F572 + #$F573, // $F573 + #$F574, // $F574 + #$F575, // $F575 + #$F576, // $F576 + #$F577, // $F577 + #$F578, // $F578 + #$F579, // $F579 + #$F57A, // $F57A + #$F57B, // $F57B + #$F57C, // $F57C + #$F57D, // $F57D + #$F57E, // $F57E + #$F57F, // $F57F + #$F580, // $F580 + #$F581, // $F581 + #$F582, // $F582 + #$F583, // $F583 + #$F584, // $F584 + #$F585, // $F585 + #$F586, // $F586 + #$F587, // $F587 + #$F588, // $F588 + #$F589, // $F589 + #$F58A, // $F58A + #$F58B, // $F58B + #$F58C, // $F58C + #$F58D, // $F58D + #$F58E, // $F58E + #$F58F, // $F58F + #$F590, // $F590 + #$F591, // $F591 + #$F592, // $F592 + #$F593, // $F593 + #$F594, // $F594 + #$F595, // $F595 + #$F596, // $F596 + #$F597, // $F597 + #$F598, // $F598 + #$F599, // $F599 + #$F59A, // $F59A + #$F59B, // $F59B + #$F59C, // $F59C + #$F59D, // $F59D + #$F59E, // $F59E + #$F59F, // $F59F + #$F5A0, // $F5A0 + #$F5A1, // $F5A1 + #$F5A2, // $F5A2 + #$F5A3, // $F5A3 + #$F5A4, // $F5A4 + #$F5A5, // $F5A5 + #$F5A6, // $F5A6 + #$F5A7, // $F5A7 + #$F5A8, // $F5A8 + #$F5A9, // $F5A9 + #$F5AA, // $F5AA + #$F5AB, // $F5AB + #$F5AC, // $F5AC + #$F5AD, // $F5AD + #$F5AE, // $F5AE + #$F5AF, // $F5AF + #$F5B0, // $F5B0 + #$F5B1, // $F5B1 + #$F5B2, // $F5B2 + #$F5B3, // $F5B3 + #$F5B4, // $F5B4 + #$F5B5, // $F5B5 + #$F5B6, // $F5B6 + #$F5B7, // $F5B7 + #$F5B8, // $F5B8 + #$F5B9, // $F5B9 + #$F5BA, // $F5BA + #$F5BB, // $F5BB + #$F5BC, // $F5BC + #$F5BD, // $F5BD + #$F5BE, // $F5BE + #$F5BF, // $F5BF + #$F5C0, // $F5C0 + #$F5C1, // $F5C1 + #$F5C2, // $F5C2 + #$F5C3, // $F5C3 + #$F5C4, // $F5C4 + #$F5C5, // $F5C5 + #$F5C6, // $F5C6 + #$F5C7, // $F5C7 + #$F5C8, // $F5C8 + #$F5C9, // $F5C9 + #$F5CA, // $F5CA + #$F5CB, // $F5CB + #$F5CC, // $F5CC + #$F5CD, // $F5CD + #$F5CE, // $F5CE + #$F5CF, // $F5CF + #$F5D0, // $F5D0 + #$F5D1, // $F5D1 + #$F5D2, // $F5D2 + #$F5D3, // $F5D3 + #$F5D4, // $F5D4 + #$F5D5, // $F5D5 + #$F5D6, // $F5D6 + #$F5D7, // $F5D7 + #$F5D8, // $F5D8 + #$F5D9, // $F5D9 + #$F5DA, // $F5DA + #$F5DB, // $F5DB + #$F5DC, // $F5DC + #$F5DD, // $F5DD + #$F5DE, // $F5DE + #$F5DF, // $F5DF + #$F5E0, // $F5E0 + #$F5E1, // $F5E1 + #$F5E2, // $F5E2 + #$F5E3, // $F5E3 + #$F5E4, // $F5E4 + #$F5E5, // $F5E5 + #$F5E6, // $F5E6 + #$F5E7, // $F5E7 + #$F5E8, // $F5E8 + #$F5E9, // $F5E9 + #$F5EA, // $F5EA + #$F5EB, // $F5EB + #$F5EC, // $F5EC + #$F5ED, // $F5ED + #$F5EE, // $F5EE + #$F5EF, // $F5EF + #$F5F0, // $F5F0 + #$F5F1, // $F5F1 + #$F5F2, // $F5F2 + #$F5F3, // $F5F3 + #$F5F4, // $F5F4 + #$F5F5, // $F5F5 + #$F5F6, // $F5F6 + #$F5F7, // $F5F7 + #$F5F8, // $F5F8 + #$F5F9, // $F5F9 + #$F5FA, // $F5FA + #$F5FB, // $F5FB + #$F5FC, // $F5FC + #$F5FD, // $F5FD + #$F5FE, // $F5FE + #$F5FF, // $F5FF + #$F600, // $F600 + #$F601, // $F601 + #$F602, // $F602 + #$F603, // $F603 + #$F604, // $F604 + #$F605, // $F605 + #$F606, // $F606 + #$F607, // $F607 + #$F608, // $F608 + #$F609, // $F609 + #$F60A, // $F60A + #$F60B, // $F60B + #$F60C, // $F60C + #$F60D, // $F60D + #$F60E, // $F60E + #$F60F, // $F60F + #$F610, // $F610 + #$F611, // $F611 + #$F612, // $F612 + #$F613, // $F613 + #$F614, // $F614 + #$F615, // $F615 + #$F616, // $F616 + #$F617, // $F617 + #$F618, // $F618 + #$F619, // $F619 + #$F61A, // $F61A + #$F61B, // $F61B + #$F61C, // $F61C + #$F61D, // $F61D + #$F61E, // $F61E + #$F61F, // $F61F + #$F620, // $F620 + #$F621, // $F621 + #$F622, // $F622 + #$F623, // $F623 + #$F624, // $F624 + #$F625, // $F625 + #$F626, // $F626 + #$F627, // $F627 + #$F628, // $F628 + #$F629, // $F629 + #$F62A, // $F62A + #$F62B, // $F62B + #$F62C, // $F62C + #$F62D, // $F62D + #$F62E, // $F62E + #$F62F, // $F62F + #$F630, // $F630 + #$F631, // $F631 + #$F632, // $F632 + #$F633, // $F633 + #$F634, // $F634 + #$F635, // $F635 + #$F636, // $F636 + #$F637, // $F637 + #$F638, // $F638 + #$F639, // $F639 + #$F63A, // $F63A + #$F63B, // $F63B + #$F63C, // $F63C + #$F63D, // $F63D + #$F63E, // $F63E + #$F63F, // $F63F + #$F640, // $F640 + #$F641, // $F641 + #$F642, // $F642 + #$F643, // $F643 + #$F644, // $F644 + #$F645, // $F645 + #$F646, // $F646 + #$F647, // $F647 + #$F648, // $F648 + #$F649, // $F649 + #$F64A, // $F64A + #$F64B, // $F64B + #$F64C, // $F64C + #$F64D, // $F64D + #$F64E, // $F64E + #$F64F, // $F64F + #$F650, // $F650 + #$F651, // $F651 + #$F652, // $F652 + #$F653, // $F653 + #$F654, // $F654 + #$F655, // $F655 + #$F656, // $F656 + #$F657, // $F657 + #$F658, // $F658 + #$F659, // $F659 + #$F65A, // $F65A + #$F65B, // $F65B + #$F65C, // $F65C + #$F65D, // $F65D + #$F65E, // $F65E + #$F65F, // $F65F + #$F660, // $F660 + #$F661, // $F661 + #$F662, // $F662 + #$F663, // $F663 + #$F664, // $F664 + #$F665, // $F665 + #$F666, // $F666 + #$F667, // $F667 + #$F668, // $F668 + #$F669, // $F669 + #$F66A, // $F66A + #$F66B, // $F66B + #$F66C, // $F66C + #$F66D, // $F66D + #$F66E, // $F66E + #$F66F, // $F66F + #$F670, // $F670 + #$F671, // $F671 + #$F672, // $F672 + #$F673, // $F673 + #$F674, // $F674 + #$F675, // $F675 + #$F676, // $F676 + #$F677, // $F677 + #$F678, // $F678 + #$F679, // $F679 + #$F67A, // $F67A + #$F67B, // $F67B + #$F67C, // $F67C + #$F67D, // $F67D + #$F67E, // $F67E + #$F67F, // $F67F + #$F680, // $F680 + #$F681, // $F681 + #$F682, // $F682 + #$F683, // $F683 + #$F684, // $F684 + #$F685, // $F685 + #$F686, // $F686 + #$F687, // $F687 + #$F688, // $F688 + #$F689, // $F689 + #$F68A, // $F68A + #$F68B, // $F68B + #$F68C, // $F68C + #$F68D, // $F68D + #$F68E, // $F68E + #$F68F, // $F68F + #$F690, // $F690 + #$F691, // $F691 + #$F692, // $F692 + #$F693, // $F693 + #$F694, // $F694 + #$F695, // $F695 + #$F696, // $F696 + #$F697, // $F697 + #$F698, // $F698 + #$F699, // $F699 + #$F69A, // $F69A + #$F69B, // $F69B + #$F69C, // $F69C + #$F69D, // $F69D + #$F69E, // $F69E + #$F69F, // $F69F + #$F6A0, // $F6A0 + #$F6A1, // $F6A1 + #$F6A2, // $F6A2 + #$F6A3, // $F6A3 + #$F6A4, // $F6A4 + #$F6A5, // $F6A5 + #$F6A6, // $F6A6 + #$F6A7, // $F6A7 + #$F6A8, // $F6A8 + #$F6A9, // $F6A9 + #$F6AA, // $F6AA + #$F6AB, // $F6AB + #$F6AC, // $F6AC + #$F6AD, // $F6AD + #$F6AE, // $F6AE + #$F6AF, // $F6AF + #$F6B0, // $F6B0 + #$F6B1, // $F6B1 + #$F6B2, // $F6B2 + #$F6B3, // $F6B3 + #$F6B4, // $F6B4 + #$F6B5, // $F6B5 + #$F6B6, // $F6B6 + #$F6B7, // $F6B7 + #$F6B8, // $F6B8 + #$F6B9, // $F6B9 + #$F6BA, // $F6BA + #$F6BB, // $F6BB + #$F6BC, // $F6BC + #$F6BD, // $F6BD + #$F6BE, // $F6BE + #$F6BF, // $F6BF + #$F6C0, // $F6C0 + #$F6C1, // $F6C1 + #$F6C2, // $F6C2 + #$F6C3, // $F6C3 + #$F6C4, // $F6C4 + #$F6C5, // $F6C5 + #$F6C6, // $F6C6 + #$F6C7, // $F6C7 + #$F6C8, // $F6C8 + #$F6C9, // $F6C9 + #$F6CA, // $F6CA + #$F6CB, // $F6CB + #$F6CC, // $F6CC + #$F6CD, // $F6CD + #$F6CE, // $F6CE + #$F6CF, // $F6CF + #$F6D0, // $F6D0 + #$F6D1, // $F6D1 + #$F6D2, // $F6D2 + #$F6D3, // $F6D3 + #$F6D4, // $F6D4 + #$F6D5, // $F6D5 + #$F6D6, // $F6D6 + #$F6D7, // $F6D7 + #$F6D8, // $F6D8 + #$F6D9, // $F6D9 + #$F6DA, // $F6DA + #$F6DB, // $F6DB + #$F6DC, // $F6DC + #$F6DD, // $F6DD + #$F6DE, // $F6DE + #$F6DF, // $F6DF + #$F6E0, // $F6E0 + #$F6E1, // $F6E1 + #$F6E2, // $F6E2 + #$F6E3, // $F6E3 + #$F6E4, // $F6E4 + #$F6E5, // $F6E5 + #$F6E6, // $F6E6 + #$F6E7, // $F6E7 + #$F6E8, // $F6E8 + #$F6E9, // $F6E9 + #$F6EA, // $F6EA + #$F6EB, // $F6EB + #$F6EC, // $F6EC + #$F6ED, // $F6ED + #$F6EE, // $F6EE + #$F6EF, // $F6EF + #$F6F0, // $F6F0 + #$F6F1, // $F6F1 + #$F6F2, // $F6F2 + #$F6F3, // $F6F3 + #$F6F4, // $F6F4 + #$F6F5, // $F6F5 + #$F6F6, // $F6F6 + #$F6F7, // $F6F7 + #$F6F8, // $F6F8 + #$F6F9, // $F6F9 + #$F6FA, // $F6FA + #$F6FB, // $F6FB + #$F6FC, // $F6FC + #$F6FD, // $F6FD + #$F6FE, // $F6FE + #$F6FF, // $F6FF + #$F700, // $F700 + #$F701, // $F701 + #$F702, // $F702 + #$F703, // $F703 + #$F704, // $F704 + #$F705, // $F705 + #$F706, // $F706 + #$F707, // $F707 + #$F708, // $F708 + #$F709, // $F709 + #$F70A, // $F70A + #$F70B, // $F70B + #$F70C, // $F70C + #$F70D, // $F70D + #$F70E, // $F70E + #$F70F, // $F70F + #$F710, // $F710 + #$F711, // $F711 + #$F712, // $F712 + #$F713, // $F713 + #$F714, // $F714 + #$F715, // $F715 + #$F716, // $F716 + #$F717, // $F717 + #$F718, // $F718 + #$F719, // $F719 + #$F71A, // $F71A + #$F71B, // $F71B + #$F71C, // $F71C + #$F71D, // $F71D + #$F71E, // $F71E + #$F71F, // $F71F + #$F720, // $F720 + #$F721, // $F721 + #$F722, // $F722 + #$F723, // $F723 + #$F724, // $F724 + #$F725, // $F725 + #$F726, // $F726 + #$F727, // $F727 + #$F728, // $F728 + #$F729, // $F729 + #$F72A, // $F72A + #$F72B, // $F72B + #$F72C, // $F72C + #$F72D, // $F72D + #$F72E, // $F72E + #$F72F, // $F72F + #$F730, // $F730 + #$F731, // $F731 + #$F732, // $F732 + #$F733, // $F733 + #$F734, // $F734 + #$F735, // $F735 + #$F736, // $F736 + #$F737, // $F737 + #$F738, // $F738 + #$F739, // $F739 + #$F73A, // $F73A + #$F73B, // $F73B + #$F73C, // $F73C + #$F73D, // $F73D + #$F73E, // $F73E + #$F73F, // $F73F + #$F740, // $F740 + #$F741, // $F741 + #$F742, // $F742 + #$F743, // $F743 + #$F744, // $F744 + #$F745, // $F745 + #$F746, // $F746 + #$F747, // $F747 + #$F748, // $F748 + #$F749, // $F749 + #$F74A, // $F74A + #$F74B, // $F74B + #$F74C, // $F74C + #$F74D, // $F74D + #$F74E, // $F74E + #$F74F, // $F74F + #$F750, // $F750 + #$F751, // $F751 + #$F752, // $F752 + #$F753, // $F753 + #$F754, // $F754 + #$F755, // $F755 + #$F756, // $F756 + #$F757, // $F757 + #$F758, // $F758 + #$F759, // $F759 + #$F75A, // $F75A + #$F75B, // $F75B + #$F75C, // $F75C + #$F75D, // $F75D + #$F75E, // $F75E + #$F75F, // $F75F + #$F760, // $F760 + #$F761, // $F761 + #$F762, // $F762 + #$F763, // $F763 + #$F764, // $F764 + #$F765, // $F765 + #$F766, // $F766 + #$F767, // $F767 + #$F768, // $F768 + #$F769, // $F769 + #$F76A, // $F76A + #$F76B, // $F76B + #$F76C, // $F76C + #$F76D, // $F76D + #$F76E, // $F76E + #$F76F, // $F76F + #$F770, // $F770 + #$F771, // $F771 + #$F772, // $F772 + #$F773, // $F773 + #$F774, // $F774 + #$F775, // $F775 + #$F776, // $F776 + #$F777, // $F777 + #$F778, // $F778 + #$F779, // $F779 + #$F77A, // $F77A + #$F77B, // $F77B + #$F77C, // $F77C + #$F77D, // $F77D + #$F77E, // $F77E + #$F77F, // $F77F + #$F780, // $F780 + #$F781, // $F781 + #$F782, // $F782 + #$F783, // $F783 + #$F784, // $F784 + #$F785, // $F785 + #$F786, // $F786 + #$F787, // $F787 + #$F788, // $F788 + #$F789, // $F789 + #$F78A, // $F78A + #$F78B, // $F78B + #$F78C, // $F78C + #$F78D, // $F78D + #$F78E, // $F78E + #$F78F, // $F78F + #$F790, // $F790 + #$F791, // $F791 + #$F792, // $F792 + #$F793, // $F793 + #$F794, // $F794 + #$F795, // $F795 + #$F796, // $F796 + #$F797, // $F797 + #$F798, // $F798 + #$F799, // $F799 + #$F79A, // $F79A + #$F79B, // $F79B + #$F79C, // $F79C + #$F79D, // $F79D + #$F79E, // $F79E + #$F79F, // $F79F + #$F7A0, // $F7A0 + #$F7A1, // $F7A1 + #$F7A2, // $F7A2 + #$F7A3, // $F7A3 + #$F7A4, // $F7A4 + #$F7A5, // $F7A5 + #$F7A6, // $F7A6 + #$F7A7, // $F7A7 + #$F7A8, // $F7A8 + #$F7A9, // $F7A9 + #$F7AA, // $F7AA + #$F7AB, // $F7AB + #$F7AC, // $F7AC + #$F7AD, // $F7AD + #$F7AE, // $F7AE + #$F7AF, // $F7AF + #$F7B0, // $F7B0 + #$F7B1, // $F7B1 + #$F7B2, // $F7B2 + #$F7B3, // $F7B3 + #$F7B4, // $F7B4 + #$F7B5, // $F7B5 + #$F7B6, // $F7B6 + #$F7B7, // $F7B7 + #$F7B8, // $F7B8 + #$F7B9, // $F7B9 + #$F7BA, // $F7BA + #$F7BB, // $F7BB + #$F7BC, // $F7BC + #$F7BD, // $F7BD + #$F7BE, // $F7BE + #$F7BF, // $F7BF + #$F7C0, // $F7C0 + #$F7C1, // $F7C1 + #$F7C2, // $F7C2 + #$F7C3, // $F7C3 + #$F7C4, // $F7C4 + #$F7C5, // $F7C5 + #$F7C6, // $F7C6 + #$F7C7, // $F7C7 + #$F7C8, // $F7C8 + #$F7C9, // $F7C9 + #$F7CA, // $F7CA + #$F7CB, // $F7CB + #$F7CC, // $F7CC + #$F7CD, // $F7CD + #$F7CE, // $F7CE + #$F7CF, // $F7CF + #$F7D0, // $F7D0 + #$F7D1, // $F7D1 + #$F7D2, // $F7D2 + #$F7D3, // $F7D3 + #$F7D4, // $F7D4 + #$F7D5, // $F7D5 + #$F7D6, // $F7D6 + #$F7D7, // $F7D7 + #$F7D8, // $F7D8 + #$F7D9, // $F7D9 + #$F7DA, // $F7DA + #$F7DB, // $F7DB + #$F7DC, // $F7DC + #$F7DD, // $F7DD + #$F7DE, // $F7DE + #$F7DF, // $F7DF + #$F7E0, // $F7E0 + #$F7E1, // $F7E1 + #$F7E2, // $F7E2 + #$F7E3, // $F7E3 + #$F7E4, // $F7E4 + #$F7E5, // $F7E5 + #$F7E6, // $F7E6 + #$F7E7, // $F7E7 + #$F7E8, // $F7E8 + #$F7E9, // $F7E9 + #$F7EA, // $F7EA + #$F7EB, // $F7EB + #$F7EC, // $F7EC + #$F7ED, // $F7ED + #$F7EE, // $F7EE + #$F7EF, // $F7EF + #$F7F0, // $F7F0 + #$F7F1, // $F7F1 + #$F7F2, // $F7F2 + #$F7F3, // $F7F3 + #$F7F4, // $F7F4 + #$F7F5, // $F7F5 + #$F7F6, // $F7F6 + #$F7F7, // $F7F7 + #$F7F8, // $F7F8 + #$F7F9, // $F7F9 + #$F7FA, // $F7FA + #$F7FB, // $F7FB + #$F7FC, // $F7FC + #$F7FD, // $F7FD + #$F7FE, // $F7FE + #$F7FF, // $F7FF + #$F800, // $F800 + #$F801, // $F801 + #$F802, // $F802 + #$F803, // $F803 + #$F804, // $F804 + #$F805, // $F805 + #$F806, // $F806 + #$F807, // $F807 + #$F808, // $F808 + #$F809, // $F809 + #$F80A, // $F80A + #$F80B, // $F80B + #$F80C, // $F80C + #$F80D, // $F80D + #$F80E, // $F80E + #$F80F, // $F80F + #$F810, // $F810 + #$F811, // $F811 + #$F812, // $F812 + #$F813, // $F813 + #$F814, // $F814 + #$F815, // $F815 + #$F816, // $F816 + #$F817, // $F817 + #$F818, // $F818 + #$F819, // $F819 + #$F81A, // $F81A + #$F81B, // $F81B + #$F81C, // $F81C + #$F81D, // $F81D + #$F81E, // $F81E + #$F81F, // $F81F + #$F820, // $F820 + #$F821, // $F821 + #$F822, // $F822 + #$F823, // $F823 + #$F824, // $F824 + #$F825, // $F825 + #$F826, // $F826 + #$F827, // $F827 + #$F828, // $F828 + #$F829, // $F829 + #$F82A, // $F82A + #$F82B, // $F82B + #$F82C, // $F82C + #$F82D, // $F82D + #$F82E, // $F82E + #$F82F, // $F82F + #$F830, // $F830 + #$F831, // $F831 + #$F832, // $F832 + #$F833, // $F833 + #$F834, // $F834 + #$F835, // $F835 + #$F836, // $F836 + #$F837, // $F837 + #$F838, // $F838 + #$F839, // $F839 + #$F83A, // $F83A + #$F83B, // $F83B + #$F83C, // $F83C + #$F83D, // $F83D + #$F83E, // $F83E + #$F83F, // $F83F + #$F840, // $F840 + #$F841, // $F841 + #$F842, // $F842 + #$F843, // $F843 + #$F844, // $F844 + #$F845, // $F845 + #$F846, // $F846 + #$F847, // $F847 + #$F848, // $F848 + #$F849, // $F849 + #$F84A, // $F84A + #$F84B, // $F84B + #$F84C, // $F84C + #$F84D, // $F84D + #$F84E, // $F84E + #$F84F, // $F84F + #$F850, // $F850 + #$F851, // $F851 + #$F852, // $F852 + #$F853, // $F853 + #$F854, // $F854 + #$F855, // $F855 + #$F856, // $F856 + #$F857, // $F857 + #$F858, // $F858 + #$F859, // $F859 + #$F85A, // $F85A + #$F85B, // $F85B + #$F85C, // $F85C + #$F85D, // $F85D + #$F85E, // $F85E + #$F85F, // $F85F + #$F860, // $F860 + #$F861, // $F861 + #$F862, // $F862 + #$F863, // $F863 + #$F864, // $F864 + #$F865, // $F865 + #$F866, // $F866 + #$F867, // $F867 + #$F868, // $F868 + #$F869, // $F869 + #$F86A, // $F86A + #$F86B, // $F86B + #$F86C, // $F86C + #$F86D, // $F86D + #$F86E, // $F86E + #$F86F, // $F86F + #$F870, // $F870 + #$F871, // $F871 + #$F872, // $F872 + #$F873, // $F873 + #$F874, // $F874 + #$F875, // $F875 + #$F876, // $F876 + #$F877, // $F877 + #$F878, // $F878 + #$F879, // $F879 + #$F87A, // $F87A + #$F87B, // $F87B + #$F87C, // $F87C + #$F87D, // $F87D + #$F87E, // $F87E + #$F87F, // $F87F + #$F880, // $F880 + #$F881, // $F881 + #$F882, // $F882 + #$F883, // $F883 + #$F884, // $F884 + #$F885, // $F885 + #$F886, // $F886 + #$F887, // $F887 + #$F888, // $F888 + #$F889, // $F889 + #$F88A, // $F88A + #$F88B, // $F88B + #$F88C, // $F88C + #$F88D, // $F88D + #$F88E, // $F88E + #$F88F, // $F88F + #$F890, // $F890 + #$F891, // $F891 + #$F892, // $F892 + #$F893, // $F893 + #$F894, // $F894 + #$F895, // $F895 + #$F896, // $F896 + #$F897, // $F897 + #$F898, // $F898 + #$F899, // $F899 + #$F89A, // $F89A + #$F89B, // $F89B + #$F89C, // $F89C + #$F89D, // $F89D + #$F89E, // $F89E + #$F89F, // $F89F + #$F8A0, // $F8A0 + #$F8A1, // $F8A1 + #$F8A2, // $F8A2 + #$F8A3, // $F8A3 + #$F8A4, // $F8A4 + #$F8A5, // $F8A5 + #$F8A6, // $F8A6 + #$F8A7, // $F8A7 + #$F8A8, // $F8A8 + #$F8A9, // $F8A9 + #$F8AA, // $F8AA + #$F8AB, // $F8AB + #$F8AC, // $F8AC + #$F8AD, // $F8AD + #$F8AE, // $F8AE + #$F8AF, // $F8AF + #$F8B0, // $F8B0 + #$F8B1, // $F8B1 + #$F8B2, // $F8B2 + #$F8B3, // $F8B3 + #$F8B4, // $F8B4 + #$F8B5, // $F8B5 + #$F8B6, // $F8B6 + #$F8B7, // $F8B7 + #$F8B8, // $F8B8 + #$F8B9, // $F8B9 + #$F8BA, // $F8BA + #$F8BB, // $F8BB + #$F8BC, // $F8BC + #$F8BD, // $F8BD + #$F8BE, // $F8BE + #$F8BF, // $F8BF + #$F8C0, // $F8C0 + #$F8C1, // $F8C1 + #$F8C2, // $F8C2 + #$F8C3, // $F8C3 + #$F8C4, // $F8C4 + #$F8C5, // $F8C5 + #$F8C6, // $F8C6 + #$F8C7, // $F8C7 + #$F8C8, // $F8C8 + #$F8C9, // $F8C9 + #$F8CA, // $F8CA + #$F8CB, // $F8CB + #$F8CC, // $F8CC + #$F8CD, // $F8CD + #$F8CE, // $F8CE + #$F8CF, // $F8CF + #$F8D0, // $F8D0 + #$F8D1, // $F8D1 + #$F8D2, // $F8D2 + #$F8D3, // $F8D3 + #$F8D4, // $F8D4 + #$F8D5, // $F8D5 + #$F8D6, // $F8D6 + #$F8D7, // $F8D7 + #$F8D8, // $F8D8 + #$F8D9, // $F8D9 + #$F8DA, // $F8DA + #$F8DB, // $F8DB + #$F8DC, // $F8DC + #$F8DD, // $F8DD + #$F8DE, // $F8DE + #$F8DF, // $F8DF + #$F8E0, // $F8E0 + #$F8E1, // $F8E1 + #$F8E2, // $F8E2 + #$F8E3, // $F8E3 + #$F8E4, // $F8E4 + #$F8E5, // $F8E5 + #$F8E6, // $F8E6 + #$F8E7, // $F8E7 + #$F8E8, // $F8E8 + #$F8E9, // $F8E9 + #$F8EA, // $F8EA + #$F8EB, // $F8EB + #$F8EC, // $F8EC + #$F8ED, // $F8ED + #$F8EE, // $F8EE + #$F8EF, // $F8EF + #$F8F0, // $F8F0 + #$F8F1, // $F8F1 + #$F8F2, // $F8F2 + #$F8F3, // $F8F3 + #$F8F4, // $F8F4 + #$F8F5, // $F8F5 + #$F8F6, // $F8F6 + #$F8F7, // $F8F7 + #$F8F8, // $F8F8 + #$F8F9, // $F8F9 + #$F8FA, // $F8FA + #$F8FB, // $F8FB + #$F8FC, // $F8FC + #$F8FD, // $F8FD + #$F8FE, // $F8FE + #$F8FF, // $F8FF + #$F900, // $F900 + #$F901, // $F901 + #$F902, // $F902 + #$F903, // $F903 + #$F904, // $F904 + #$F905, // $F905 + #$F906, // $F906 + #$F907, // $F907 + #$F908, // $F908 + #$F909, // $F909 + #$F90A, // $F90A + #$F90B, // $F90B + #$F90C, // $F90C + #$F90D, // $F90D + #$F90E, // $F90E + #$F90F, // $F90F + #$F910, // $F910 + #$F911, // $F911 + #$F912, // $F912 + #$F913, // $F913 + #$F914, // $F914 + #$F915, // $F915 + #$F916, // $F916 + #$F917, // $F917 + #$F918, // $F918 + #$F919, // $F919 + #$F91A, // $F91A + #$F91B, // $F91B + #$F91C, // $F91C + #$F91D, // $F91D + #$F91E, // $F91E + #$F91F, // $F91F + #$F920, // $F920 + #$F921, // $F921 + #$F922, // $F922 + #$F923, // $F923 + #$F924, // $F924 + #$F925, // $F925 + #$F926, // $F926 + #$F927, // $F927 + #$F928, // $F928 + #$F929, // $F929 + #$F92A, // $F92A + #$F92B, // $F92B + #$F92C, // $F92C + #$F92D, // $F92D + #$F92E, // $F92E + #$F92F, // $F92F + #$F930, // $F930 + #$F931, // $F931 + #$F932, // $F932 + #$F933, // $F933 + #$F934, // $F934 + #$F935, // $F935 + #$F936, // $F936 + #$F937, // $F937 + #$F938, // $F938 + #$F939, // $F939 + #$F93A, // $F93A + #$F93B, // $F93B + #$F93C, // $F93C + #$F93D, // $F93D + #$F93E, // $F93E + #$F93F, // $F93F + #$F940, // $F940 + #$F941, // $F941 + #$F942, // $F942 + #$F943, // $F943 + #$F944, // $F944 + #$F945, // $F945 + #$F946, // $F946 + #$F947, // $F947 + #$F948, // $F948 + #$F949, // $F949 + #$F94A, // $F94A + #$F94B, // $F94B + #$F94C, // $F94C + #$F94D, // $F94D + #$F94E, // $F94E + #$F94F, // $F94F + #$F950, // $F950 + #$F951, // $F951 + #$F952, // $F952 + #$F953, // $F953 + #$F954, // $F954 + #$F955, // $F955 + #$F956, // $F956 + #$F957, // $F957 + #$F958, // $F958 + #$F959, // $F959 + #$F95A, // $F95A + #$F95B, // $F95B + #$F95C, // $F95C + #$F95D, // $F95D + #$F95E, // $F95E + #$F95F, // $F95F + #$F960, // $F960 + #$F961, // $F961 + #$F962, // $F962 + #$F963, // $F963 + #$F964, // $F964 + #$F965, // $F965 + #$F966, // $F966 + #$F967, // $F967 + #$F968, // $F968 + #$F969, // $F969 + #$F96A, // $F96A + #$F96B, // $F96B + #$F96C, // $F96C + #$F96D, // $F96D + #$F96E, // $F96E + #$F96F, // $F96F + #$F970, // $F970 + #$F971, // $F971 + #$F972, // $F972 + #$F973, // $F973 + #$F974, // $F974 + #$F975, // $F975 + #$F976, // $F976 + #$F977, // $F977 + #$F978, // $F978 + #$F979, // $F979 + #$F97A, // $F97A + #$F97B, // $F97B + #$F97C, // $F97C + #$F97D, // $F97D + #$F97E, // $F97E + #$F97F, // $F97F + #$F980, // $F980 + #$F981, // $F981 + #$F982, // $F982 + #$F983, // $F983 + #$F984, // $F984 + #$F985, // $F985 + #$F986, // $F986 + #$F987, // $F987 + #$F988, // $F988 + #$F989, // $F989 + #$F98A, // $F98A + #$F98B, // $F98B + #$F98C, // $F98C + #$F98D, // $F98D + #$F98E, // $F98E + #$F98F, // $F98F + #$F990, // $F990 + #$F991, // $F991 + #$F992, // $F992 + #$F993, // $F993 + #$F994, // $F994 + #$F995, // $F995 + #$F996, // $F996 + #$F997, // $F997 + #$F998, // $F998 + #$F999, // $F999 + #$F99A, // $F99A + #$F99B, // $F99B + #$F99C, // $F99C + #$F99D, // $F99D + #$F99E, // $F99E + #$F99F, // $F99F + #$F9A0, // $F9A0 + #$F9A1, // $F9A1 + #$F9A2, // $F9A2 + #$F9A3, // $F9A3 + #$F9A4, // $F9A4 + #$F9A5, // $F9A5 + #$F9A6, // $F9A6 + #$F9A7, // $F9A7 + #$F9A8, // $F9A8 + #$F9A9, // $F9A9 + #$F9AA, // $F9AA + #$F9AB, // $F9AB + #$F9AC, // $F9AC + #$F9AD, // $F9AD + #$F9AE, // $F9AE + #$F9AF, // $F9AF + #$F9B0, // $F9B0 + #$F9B1, // $F9B1 + #$F9B2, // $F9B2 + #$F9B3, // $F9B3 + #$F9B4, // $F9B4 + #$F9B5, // $F9B5 + #$F9B6, // $F9B6 + #$F9B7, // $F9B7 + #$F9B8, // $F9B8 + #$F9B9, // $F9B9 + #$F9BA, // $F9BA + #$F9BB, // $F9BB + #$F9BC, // $F9BC + #$F9BD, // $F9BD + #$F9BE, // $F9BE + #$F9BF, // $F9BF + #$F9C0, // $F9C0 + #$F9C1, // $F9C1 + #$F9C2, // $F9C2 + #$F9C3, // $F9C3 + #$F9C4, // $F9C4 + #$F9C5, // $F9C5 + #$F9C6, // $F9C6 + #$F9C7, // $F9C7 + #$F9C8, // $F9C8 + #$F9C9, // $F9C9 + #$F9CA, // $F9CA + #$F9CB, // $F9CB + #$F9CC, // $F9CC + #$F9CD, // $F9CD + #$F9CE, // $F9CE + #$F9CF, // $F9CF + #$F9D0, // $F9D0 + #$F9D1, // $F9D1 + #$F9D2, // $F9D2 + #$F9D3, // $F9D3 + #$F9D4, // $F9D4 + #$F9D5, // $F9D5 + #$F9D6, // $F9D6 + #$F9D7, // $F9D7 + #$F9D8, // $F9D8 + #$F9D9, // $F9D9 + #$F9DA, // $F9DA + #$F9DB, // $F9DB + #$F9DC, // $F9DC + #$F9DD, // $F9DD + #$F9DE, // $F9DE + #$F9DF, // $F9DF + #$F9E0, // $F9E0 + #$F9E1, // $F9E1 + #$F9E2, // $F9E2 + #$F9E3, // $F9E3 + #$F9E4, // $F9E4 + #$F9E5, // $F9E5 + #$F9E6, // $F9E6 + #$F9E7, // $F9E7 + #$F9E8, // $F9E8 + #$F9E9, // $F9E9 + #$F9EA, // $F9EA + #$F9EB, // $F9EB + #$F9EC, // $F9EC + #$F9ED, // $F9ED + #$F9EE, // $F9EE + #$F9EF, // $F9EF + #$F9F0, // $F9F0 + #$F9F1, // $F9F1 + #$F9F2, // $F9F2 + #$F9F3, // $F9F3 + #$F9F4, // $F9F4 + #$F9F5, // $F9F5 + #$F9F6, // $F9F6 + #$F9F7, // $F9F7 + #$F9F8, // $F9F8 + #$F9F9, // $F9F9 + #$F9FA, // $F9FA + #$F9FB, // $F9FB + #$F9FC, // $F9FC + #$F9FD, // $F9FD + #$F9FE, // $F9FE + #$F9FF, // $F9FF + #$FA00, // $FA00 + #$FA01, // $FA01 + #$FA02, // $FA02 + #$FA03, // $FA03 + #$FA04, // $FA04 + #$FA05, // $FA05 + #$FA06, // $FA06 + #$FA07, // $FA07 + #$FA08, // $FA08 + #$FA09, // $FA09 + #$FA0A, // $FA0A + #$FA0B, // $FA0B + #$FA0C, // $FA0C + #$FA0D, // $FA0D + #$FA0E, // $FA0E + #$FA0F, // $FA0F + #$FA10, // $FA10 + #$FA11, // $FA11 + #$FA12, // $FA12 + #$FA13, // $FA13 + #$FA14, // $FA14 + #$FA15, // $FA15 + #$FA16, // $FA16 + #$FA17, // $FA17 + #$FA18, // $FA18 + #$FA19, // $FA19 + #$FA1A, // $FA1A + #$FA1B, // $FA1B + #$FA1C, // $FA1C + #$FA1D, // $FA1D + #$FA1E, // $FA1E + #$FA1F, // $FA1F + #$FA20, // $FA20 + #$FA21, // $FA21 + #$FA22, // $FA22 + #$FA23, // $FA23 + #$FA24, // $FA24 + #$FA25, // $FA25 + #$FA26, // $FA26 + #$FA27, // $FA27 + #$FA28, // $FA28 + #$FA29, // $FA29 + #$FA2A, // $FA2A + #$FA2B, // $FA2B + #$FA2C, // $FA2C + #$FA2D, // $FA2D + #$FA2E, // $FA2E + #$FA2F, // $FA2F + #$FA30, // $FA30 + #$FA31, // $FA31 + #$FA32, // $FA32 + #$FA33, // $FA33 + #$FA34, // $FA34 + #$FA35, // $FA35 + #$FA36, // $FA36 + #$FA37, // $FA37 + #$FA38, // $FA38 + #$FA39, // $FA39 + #$FA3A, // $FA3A + #$FA3B, // $FA3B + #$FA3C, // $FA3C + #$FA3D, // $FA3D + #$FA3E, // $FA3E + #$FA3F, // $FA3F + #$FA40, // $FA40 + #$FA41, // $FA41 + #$FA42, // $FA42 + #$FA43, // $FA43 + #$FA44, // $FA44 + #$FA45, // $FA45 + #$FA46, // $FA46 + #$FA47, // $FA47 + #$FA48, // $FA48 + #$FA49, // $FA49 + #$FA4A, // $FA4A + #$FA4B, // $FA4B + #$FA4C, // $FA4C + #$FA4D, // $FA4D + #$FA4E, // $FA4E + #$FA4F, // $FA4F + #$FA50, // $FA50 + #$FA51, // $FA51 + #$FA52, // $FA52 + #$FA53, // $FA53 + #$FA54, // $FA54 + #$FA55, // $FA55 + #$FA56, // $FA56 + #$FA57, // $FA57 + #$FA58, // $FA58 + #$FA59, // $FA59 + #$FA5A, // $FA5A + #$FA5B, // $FA5B + #$FA5C, // $FA5C + #$FA5D, // $FA5D + #$FA5E, // $FA5E + #$FA5F, // $FA5F + #$FA60, // $FA60 + #$FA61, // $FA61 + #$FA62, // $FA62 + #$FA63, // $FA63 + #$FA64, // $FA64 + #$FA65, // $FA65 + #$FA66, // $FA66 + #$FA67, // $FA67 + #$FA68, // $FA68 + #$FA69, // $FA69 + #$FA6A, // $FA6A + #$FA6B, // $FA6B + #$FA6C, // $FA6C + #$FA6D, // $FA6D + #$FA6E, // $FA6E + #$FA6F, // $FA6F + #$FA70, // $FA70 + #$FA71, // $FA71 + #$FA72, // $FA72 + #$FA73, // $FA73 + #$FA74, // $FA74 + #$FA75, // $FA75 + #$FA76, // $FA76 + #$FA77, // $FA77 + #$FA78, // $FA78 + #$FA79, // $FA79 + #$FA7A, // $FA7A + #$FA7B, // $FA7B + #$FA7C, // $FA7C + #$FA7D, // $FA7D + #$FA7E, // $FA7E + #$FA7F, // $FA7F + #$FA80, // $FA80 + #$FA81, // $FA81 + #$FA82, // $FA82 + #$FA83, // $FA83 + #$FA84, // $FA84 + #$FA85, // $FA85 + #$FA86, // $FA86 + #$FA87, // $FA87 + #$FA88, // $FA88 + #$FA89, // $FA89 + #$FA8A, // $FA8A + #$FA8B, // $FA8B + #$FA8C, // $FA8C + #$FA8D, // $FA8D + #$FA8E, // $FA8E + #$FA8F, // $FA8F + #$FA90, // $FA90 + #$FA91, // $FA91 + #$FA92, // $FA92 + #$FA93, // $FA93 + #$FA94, // $FA94 + #$FA95, // $FA95 + #$FA96, // $FA96 + #$FA97, // $FA97 + #$FA98, // $FA98 + #$FA99, // $FA99 + #$FA9A, // $FA9A + #$FA9B, // $FA9B + #$FA9C, // $FA9C + #$FA9D, // $FA9D + #$FA9E, // $FA9E + #$FA9F, // $FA9F + #$FAA0, // $FAA0 + #$FAA1, // $FAA1 + #$FAA2, // $FAA2 + #$FAA3, // $FAA3 + #$FAA4, // $FAA4 + #$FAA5, // $FAA5 + #$FAA6, // $FAA6 + #$FAA7, // $FAA7 + #$FAA8, // $FAA8 + #$FAA9, // $FAA9 + #$FAAA, // $FAAA + #$FAAB, // $FAAB + #$FAAC, // $FAAC + #$FAAD, // $FAAD + #$FAAE, // $FAAE + #$FAAF, // $FAAF + #$FAB0, // $FAB0 + #$FAB1, // $FAB1 + #$FAB2, // $FAB2 + #$FAB3, // $FAB3 + #$FAB4, // $FAB4 + #$FAB5, // $FAB5 + #$FAB6, // $FAB6 + #$FAB7, // $FAB7 + #$FAB8, // $FAB8 + #$FAB9, // $FAB9 + #$FABA, // $FABA + #$FABB, // $FABB + #$FABC, // $FABC + #$FABD, // $FABD + #$FABE, // $FABE + #$FABF, // $FABF + #$FAC0, // $FAC0 + #$FAC1, // $FAC1 + #$FAC2, // $FAC2 + #$FAC3, // $FAC3 + #$FAC4, // $FAC4 + #$FAC5, // $FAC5 + #$FAC6, // $FAC6 + #$FAC7, // $FAC7 + #$FAC8, // $FAC8 + #$FAC9, // $FAC9 + #$FACA, // $FACA + #$FACB, // $FACB + #$FACC, // $FACC + #$FACD, // $FACD + #$FACE, // $FACE + #$FACF, // $FACF + #$FAD0, // $FAD0 + #$FAD1, // $FAD1 + #$FAD2, // $FAD2 + #$FAD3, // $FAD3 + #$FAD4, // $FAD4 + #$FAD5, // $FAD5 + #$FAD6, // $FAD6 + #$FAD7, // $FAD7 + #$FAD8, // $FAD8 + #$FAD9, // $FAD9 + #$FADA, // $FADA + #$FADB, // $FADB + #$FADC, // $FADC + #$FADD, // $FADD + #$FADE, // $FADE + #$FADF, // $FADF + #$FAE0, // $FAE0 + #$FAE1, // $FAE1 + #$FAE2, // $FAE2 + #$FAE3, // $FAE3 + #$FAE4, // $FAE4 + #$FAE5, // $FAE5 + #$FAE6, // $FAE6 + #$FAE7, // $FAE7 + #$FAE8, // $FAE8 + #$FAE9, // $FAE9 + #$FAEA, // $FAEA + #$FAEB, // $FAEB + #$FAEC, // $FAEC + #$FAED, // $FAED + #$FAEE, // $FAEE + #$FAEF, // $FAEF + #$FAF0, // $FAF0 + #$FAF1, // $FAF1 + #$FAF2, // $FAF2 + #$FAF3, // $FAF3 + #$FAF4, // $FAF4 + #$FAF5, // $FAF5 + #$FAF6, // $FAF6 + #$FAF7, // $FAF7 + #$FAF8, // $FAF8 + #$FAF9, // $FAF9 + #$FAFA, // $FAFA + #$FAFB, // $FAFB + #$FAFC, // $FAFC + #$FAFD, // $FAFD + #$FAFE, // $FAFE + #$FAFF, // $FAFF + #$FB00, // $FB00 + #$FB01, // $FB01 + #$FB02, // $FB02 + #$FB03, // $FB03 + #$FB04, // $FB04 + #$FB05, // $FB05 + #$FB06, // $FB06 + #$FB07, // $FB07 + #$FB08, // $FB08 + #$FB09, // $FB09 + #$FB0A, // $FB0A + #$FB0B, // $FB0B + #$FB0C, // $FB0C + #$FB0D, // $FB0D + #$FB0E, // $FB0E + #$FB0F, // $FB0F + #$FB10, // $FB10 + #$FB11, // $FB11 + #$FB12, // $FB12 + #$FB13, // $FB13 + #$FB14, // $FB14 + #$FB15, // $FB15 + #$FB16, // $FB16 + #$FB17, // $FB17 + #$FB18, // $FB18 + #$FB19, // $FB19 + #$FB1A, // $FB1A + #$FB1B, // $FB1B + #$FB1C, // $FB1C + #$FB1D, // $FB1D + #$FB1E, // $FB1E + #$FB1F, // $FB1F + #$FB20, // $FB20 + #$FB21, // $FB21 + #$FB22, // $FB22 + #$FB23, // $FB23 + #$FB24, // $FB24 + #$FB25, // $FB25 + #$FB26, // $FB26 + #$FB27, // $FB27 + #$FB28, // $FB28 + #$FB29, // $FB29 + #$FB2A, // $FB2A + #$FB2B, // $FB2B + #$FB2C, // $FB2C + #$FB2D, // $FB2D + #$FB2E, // $FB2E + #$FB2F, // $FB2F + #$FB30, // $FB30 + #$FB31, // $FB31 + #$FB32, // $FB32 + #$FB33, // $FB33 + #$FB34, // $FB34 + #$FB35, // $FB35 + #$FB36, // $FB36 + #$FB37, // $FB37 + #$FB38, // $FB38 + #$FB39, // $FB39 + #$FB3A, // $FB3A + #$FB3B, // $FB3B + #$FB3C, // $FB3C + #$FB3D, // $FB3D + #$FB3E, // $FB3E + #$FB3F, // $FB3F + #$FB40, // $FB40 + #$FB41, // $FB41 + #$FB42, // $FB42 + #$FB43, // $FB43 + #$FB44, // $FB44 + #$FB45, // $FB45 + #$FB46, // $FB46 + #$FB47, // $FB47 + #$FB48, // $FB48 + #$FB49, // $FB49 + #$FB4A, // $FB4A + #$FB4B, // $FB4B + #$FB4C, // $FB4C + #$FB4D, // $FB4D + #$FB4E, // $FB4E + #$FB4F, // $FB4F + #$FB50, // $FB50 + #$FB51, // $FB51 + #$FB52, // $FB52 + #$FB53, // $FB53 + #$FB54, // $FB54 + #$FB55, // $FB55 + #$FB56, // $FB56 + #$FB57, // $FB57 + #$FB58, // $FB58 + #$FB59, // $FB59 + #$FB5A, // $FB5A + #$FB5B, // $FB5B + #$FB5C, // $FB5C + #$FB5D, // $FB5D + #$FB5E, // $FB5E + #$FB5F, // $FB5F + #$FB60, // $FB60 + #$FB61, // $FB61 + #$FB62, // $FB62 + #$FB63, // $FB63 + #$FB64, // $FB64 + #$FB65, // $FB65 + #$FB66, // $FB66 + #$FB67, // $FB67 + #$FB68, // $FB68 + #$FB69, // $FB69 + #$FB6A, // $FB6A + #$FB6B, // $FB6B + #$FB6C, // $FB6C + #$FB6D, // $FB6D + #$FB6E, // $FB6E + #$FB6F, // $FB6F + #$FB70, // $FB70 + #$FB71, // $FB71 + #$FB72, // $FB72 + #$FB73, // $FB73 + #$FB74, // $FB74 + #$FB75, // $FB75 + #$FB76, // $FB76 + #$FB77, // $FB77 + #$FB78, // $FB78 + #$FB79, // $FB79 + #$FB7A, // $FB7A + #$FB7B, // $FB7B + #$FB7C, // $FB7C + #$FB7D, // $FB7D + #$FB7E, // $FB7E + #$FB7F, // $FB7F + #$FB80, // $FB80 + #$FB81, // $FB81 + #$FB82, // $FB82 + #$FB83, // $FB83 + #$FB84, // $FB84 + #$FB85, // $FB85 + #$FB86, // $FB86 + #$FB87, // $FB87 + #$FB88, // $FB88 + #$FB89, // $FB89 + #$FB8A, // $FB8A + #$FB8B, // $FB8B + #$FB8C, // $FB8C + #$FB8D, // $FB8D + #$FB8E, // $FB8E + #$FB8F, // $FB8F + #$FB90, // $FB90 + #$FB91, // $FB91 + #$FB92, // $FB92 + #$FB93, // $FB93 + #$FB94, // $FB94 + #$FB95, // $FB95 + #$FB96, // $FB96 + #$FB97, // $FB97 + #$FB98, // $FB98 + #$FB99, // $FB99 + #$FB9A, // $FB9A + #$FB9B, // $FB9B + #$FB9C, // $FB9C + #$FB9D, // $FB9D + #$FB9E, // $FB9E + #$FB9F, // $FB9F + #$FBA0, // $FBA0 + #$FBA1, // $FBA1 + #$FBA2, // $FBA2 + #$FBA3, // $FBA3 + #$FBA4, // $FBA4 + #$FBA5, // $FBA5 + #$FBA6, // $FBA6 + #$FBA7, // $FBA7 + #$FBA8, // $FBA8 + #$FBA9, // $FBA9 + #$FBAA, // $FBAA + #$FBAB, // $FBAB + #$FBAC, // $FBAC + #$FBAD, // $FBAD + #$FBAE, // $FBAE + #$FBAF, // $FBAF + #$FBB0, // $FBB0 + #$FBB1, // $FBB1 + #$FBB2, // $FBB2 + #$FBB3, // $FBB3 + #$FBB4, // $FBB4 + #$FBB5, // $FBB5 + #$FBB6, // $FBB6 + #$FBB7, // $FBB7 + #$FBB8, // $FBB8 + #$FBB9, // $FBB9 + #$FBBA, // $FBBA + #$FBBB, // $FBBB + #$FBBC, // $FBBC + #$FBBD, // $FBBD + #$FBBE, // $FBBE + #$FBBF, // $FBBF + #$FBC0, // $FBC0 + #$FBC1, // $FBC1 + #$FBC2, // $FBC2 + #$FBC3, // $FBC3 + #$FBC4, // $FBC4 + #$FBC5, // $FBC5 + #$FBC6, // $FBC6 + #$FBC7, // $FBC7 + #$FBC8, // $FBC8 + #$FBC9, // $FBC9 + #$FBCA, // $FBCA + #$FBCB, // $FBCB + #$FBCC, // $FBCC + #$FBCD, // $FBCD + #$FBCE, // $FBCE + #$FBCF, // $FBCF + #$FBD0, // $FBD0 + #$FBD1, // $FBD1 + #$FBD2, // $FBD2 + #$FBD3, // $FBD3 + #$FBD4, // $FBD4 + #$FBD5, // $FBD5 + #$FBD6, // $FBD6 + #$FBD7, // $FBD7 + #$FBD8, // $FBD8 + #$FBD9, // $FBD9 + #$FBDA, // $FBDA + #$FBDB, // $FBDB + #$FBDC, // $FBDC + #$FBDD, // $FBDD + #$FBDE, // $FBDE + #$FBDF, // $FBDF + #$FBE0, // $FBE0 + #$FBE1, // $FBE1 + #$FBE2, // $FBE2 + #$FBE3, // $FBE3 + #$FBE4, // $FBE4 + #$FBE5, // $FBE5 + #$FBE6, // $FBE6 + #$FBE7, // $FBE7 + #$FBE8, // $FBE8 + #$FBE9, // $FBE9 + #$FBEA, // $FBEA + #$FBEB, // $FBEB + #$FBEC, // $FBEC + #$FBED, // $FBED + #$FBEE, // $FBEE + #$FBEF, // $FBEF + #$FBF0, // $FBF0 + #$FBF1, // $FBF1 + #$FBF2, // $FBF2 + #$FBF3, // $FBF3 + #$FBF4, // $FBF4 + #$FBF5, // $FBF5 + #$FBF6, // $FBF6 + #$FBF7, // $FBF7 + #$FBF8, // $FBF8 + #$FBF9, // $FBF9 + #$FBFA, // $FBFA + #$FBFB, // $FBFB + #$FBFC, // $FBFC + #$FBFD, // $FBFD + #$FBFE, // $FBFE + #$FBFF, // $FBFF + #$FC00, // $FC00 + #$FC01, // $FC01 + #$FC02, // $FC02 + #$FC03, // $FC03 + #$FC04, // $FC04 + #$FC05, // $FC05 + #$FC06, // $FC06 + #$FC07, // $FC07 + #$FC08, // $FC08 + #$FC09, // $FC09 + #$FC0A, // $FC0A + #$FC0B, // $FC0B + #$FC0C, // $FC0C + #$FC0D, // $FC0D + #$FC0E, // $FC0E + #$FC0F, // $FC0F + #$FC10, // $FC10 + #$FC11, // $FC11 + #$FC12, // $FC12 + #$FC13, // $FC13 + #$FC14, // $FC14 + #$FC15, // $FC15 + #$FC16, // $FC16 + #$FC17, // $FC17 + #$FC18, // $FC18 + #$FC19, // $FC19 + #$FC1A, // $FC1A + #$FC1B, // $FC1B + #$FC1C, // $FC1C + #$FC1D, // $FC1D + #$FC1E, // $FC1E + #$FC1F, // $FC1F + #$FC20, // $FC20 + #$FC21, // $FC21 + #$FC22, // $FC22 + #$FC23, // $FC23 + #$FC24, // $FC24 + #$FC25, // $FC25 + #$FC26, // $FC26 + #$FC27, // $FC27 + #$FC28, // $FC28 + #$FC29, // $FC29 + #$FC2A, // $FC2A + #$FC2B, // $FC2B + #$FC2C, // $FC2C + #$FC2D, // $FC2D + #$FC2E, // $FC2E + #$FC2F, // $FC2F + #$FC30, // $FC30 + #$FC31, // $FC31 + #$FC32, // $FC32 + #$FC33, // $FC33 + #$FC34, // $FC34 + #$FC35, // $FC35 + #$FC36, // $FC36 + #$FC37, // $FC37 + #$FC38, // $FC38 + #$FC39, // $FC39 + #$FC3A, // $FC3A + #$FC3B, // $FC3B + #$FC3C, // $FC3C + #$FC3D, // $FC3D + #$FC3E, // $FC3E + #$FC3F, // $FC3F + #$FC40, // $FC40 + #$FC41, // $FC41 + #$FC42, // $FC42 + #$FC43, // $FC43 + #$FC44, // $FC44 + #$FC45, // $FC45 + #$FC46, // $FC46 + #$FC47, // $FC47 + #$FC48, // $FC48 + #$FC49, // $FC49 + #$FC4A, // $FC4A + #$FC4B, // $FC4B + #$FC4C, // $FC4C + #$FC4D, // $FC4D + #$FC4E, // $FC4E + #$FC4F, // $FC4F + #$FC50, // $FC50 + #$FC51, // $FC51 + #$FC52, // $FC52 + #$FC53, // $FC53 + #$FC54, // $FC54 + #$FC55, // $FC55 + #$FC56, // $FC56 + #$FC57, // $FC57 + #$FC58, // $FC58 + #$FC59, // $FC59 + #$FC5A, // $FC5A + #$FC5B, // $FC5B + #$FC5C, // $FC5C + #$FC5D, // $FC5D + #$FC5E, // $FC5E + #$FC5F, // $FC5F + #$FC60, // $FC60 + #$FC61, // $FC61 + #$FC62, // $FC62 + #$FC63, // $FC63 + #$FC64, // $FC64 + #$FC65, // $FC65 + #$FC66, // $FC66 + #$FC67, // $FC67 + #$FC68, // $FC68 + #$FC69, // $FC69 + #$FC6A, // $FC6A + #$FC6B, // $FC6B + #$FC6C, // $FC6C + #$FC6D, // $FC6D + #$FC6E, // $FC6E + #$FC6F, // $FC6F + #$FC70, // $FC70 + #$FC71, // $FC71 + #$FC72, // $FC72 + #$FC73, // $FC73 + #$FC74, // $FC74 + #$FC75, // $FC75 + #$FC76, // $FC76 + #$FC77, // $FC77 + #$FC78, // $FC78 + #$FC79, // $FC79 + #$FC7A, // $FC7A + #$FC7B, // $FC7B + #$FC7C, // $FC7C + #$FC7D, // $FC7D + #$FC7E, // $FC7E + #$FC7F, // $FC7F + #$FC80, // $FC80 + #$FC81, // $FC81 + #$FC82, // $FC82 + #$FC83, // $FC83 + #$FC84, // $FC84 + #$FC85, // $FC85 + #$FC86, // $FC86 + #$FC87, // $FC87 + #$FC88, // $FC88 + #$FC89, // $FC89 + #$FC8A, // $FC8A + #$FC8B, // $FC8B + #$FC8C, // $FC8C + #$FC8D, // $FC8D + #$FC8E, // $FC8E + #$FC8F, // $FC8F + #$FC90, // $FC90 + #$FC91, // $FC91 + #$FC92, // $FC92 + #$FC93, // $FC93 + #$FC94, // $FC94 + #$FC95, // $FC95 + #$FC96, // $FC96 + #$FC97, // $FC97 + #$FC98, // $FC98 + #$FC99, // $FC99 + #$FC9A, // $FC9A + #$FC9B, // $FC9B + #$FC9C, // $FC9C + #$FC9D, // $FC9D + #$FC9E, // $FC9E + #$FC9F, // $FC9F + #$FCA0, // $FCA0 + #$FCA1, // $FCA1 + #$FCA2, // $FCA2 + #$FCA3, // $FCA3 + #$FCA4, // $FCA4 + #$FCA5, // $FCA5 + #$FCA6, // $FCA6 + #$FCA7, // $FCA7 + #$FCA8, // $FCA8 + #$FCA9, // $FCA9 + #$FCAA, // $FCAA + #$FCAB, // $FCAB + #$FCAC, // $FCAC + #$FCAD, // $FCAD + #$FCAE, // $FCAE + #$FCAF, // $FCAF + #$FCB0, // $FCB0 + #$FCB1, // $FCB1 + #$FCB2, // $FCB2 + #$FCB3, // $FCB3 + #$FCB4, // $FCB4 + #$FCB5, // $FCB5 + #$FCB6, // $FCB6 + #$FCB7, // $FCB7 + #$FCB8, // $FCB8 + #$FCB9, // $FCB9 + #$FCBA, // $FCBA + #$FCBB, // $FCBB + #$FCBC, // $FCBC + #$FCBD, // $FCBD + #$FCBE, // $FCBE + #$FCBF, // $FCBF + #$FCC0, // $FCC0 + #$FCC1, // $FCC1 + #$FCC2, // $FCC2 + #$FCC3, // $FCC3 + #$FCC4, // $FCC4 + #$FCC5, // $FCC5 + #$FCC6, // $FCC6 + #$FCC7, // $FCC7 + #$FCC8, // $FCC8 + #$FCC9, // $FCC9 + #$FCCA, // $FCCA + #$FCCB, // $FCCB + #$FCCC, // $FCCC + #$FCCD, // $FCCD + #$FCCE, // $FCCE + #$FCCF, // $FCCF + #$FCD0, // $FCD0 + #$FCD1, // $FCD1 + #$FCD2, // $FCD2 + #$FCD3, // $FCD3 + #$FCD4, // $FCD4 + #$FCD5, // $FCD5 + #$FCD6, // $FCD6 + #$FCD7, // $FCD7 + #$FCD8, // $FCD8 + #$FCD9, // $FCD9 + #$FCDA, // $FCDA + #$FCDB, // $FCDB + #$FCDC, // $FCDC + #$FCDD, // $FCDD + #$FCDE, // $FCDE + #$FCDF, // $FCDF + #$FCE0, // $FCE0 + #$FCE1, // $FCE1 + #$FCE2, // $FCE2 + #$FCE3, // $FCE3 + #$FCE4, // $FCE4 + #$FCE5, // $FCE5 + #$FCE6, // $FCE6 + #$FCE7, // $FCE7 + #$FCE8, // $FCE8 + #$FCE9, // $FCE9 + #$FCEA, // $FCEA + #$FCEB, // $FCEB + #$FCEC, // $FCEC + #$FCED, // $FCED + #$FCEE, // $FCEE + #$FCEF, // $FCEF + #$FCF0, // $FCF0 + #$FCF1, // $FCF1 + #$FCF2, // $FCF2 + #$FCF3, // $FCF3 + #$FCF4, // $FCF4 + #$FCF5, // $FCF5 + #$FCF6, // $FCF6 + #$FCF7, // $FCF7 + #$FCF8, // $FCF8 + #$FCF9, // $FCF9 + #$FCFA, // $FCFA + #$FCFB, // $FCFB + #$FCFC, // $FCFC + #$FCFD, // $FCFD + #$FCFE, // $FCFE + #$FCFF, // $FCFF + #$FD00, // $FD00 + #$FD01, // $FD01 + #$FD02, // $FD02 + #$FD03, // $FD03 + #$FD04, // $FD04 + #$FD05, // $FD05 + #$FD06, // $FD06 + #$FD07, // $FD07 + #$FD08, // $FD08 + #$FD09, // $FD09 + #$FD0A, // $FD0A + #$FD0B, // $FD0B + #$FD0C, // $FD0C + #$FD0D, // $FD0D + #$FD0E, // $FD0E + #$FD0F, // $FD0F + #$FD10, // $FD10 + #$FD11, // $FD11 + #$FD12, // $FD12 + #$FD13, // $FD13 + #$FD14, // $FD14 + #$FD15, // $FD15 + #$FD16, // $FD16 + #$FD17, // $FD17 + #$FD18, // $FD18 + #$FD19, // $FD19 + #$FD1A, // $FD1A + #$FD1B, // $FD1B + #$FD1C, // $FD1C + #$FD1D, // $FD1D + #$FD1E, // $FD1E + #$FD1F, // $FD1F + #$FD20, // $FD20 + #$FD21, // $FD21 + #$FD22, // $FD22 + #$FD23, // $FD23 + #$FD24, // $FD24 + #$FD25, // $FD25 + #$FD26, // $FD26 + #$FD27, // $FD27 + #$FD28, // $FD28 + #$FD29, // $FD29 + #$FD2A, // $FD2A + #$FD2B, // $FD2B + #$FD2C, // $FD2C + #$FD2D, // $FD2D + #$FD2E, // $FD2E + #$FD2F, // $FD2F + #$FD30, // $FD30 + #$FD31, // $FD31 + #$FD32, // $FD32 + #$FD33, // $FD33 + #$FD34, // $FD34 + #$FD35, // $FD35 + #$FD36, // $FD36 + #$FD37, // $FD37 + #$FD38, // $FD38 + #$FD39, // $FD39 + #$FD3A, // $FD3A + #$FD3B, // $FD3B + #$FD3C, // $FD3C + #$FD3D, // $FD3D + #$FD3E, // $FD3E + #$FD3F, // $FD3F + #$FD40, // $FD40 + #$FD41, // $FD41 + #$FD42, // $FD42 + #$FD43, // $FD43 + #$FD44, // $FD44 + #$FD45, // $FD45 + #$FD46, // $FD46 + #$FD47, // $FD47 + #$FD48, // $FD48 + #$FD49, // $FD49 + #$FD4A, // $FD4A + #$FD4B, // $FD4B + #$FD4C, // $FD4C + #$FD4D, // $FD4D + #$FD4E, // $FD4E + #$FD4F, // $FD4F + #$FD50, // $FD50 + #$FD51, // $FD51 + #$FD52, // $FD52 + #$FD53, // $FD53 + #$FD54, // $FD54 + #$FD55, // $FD55 + #$FD56, // $FD56 + #$FD57, // $FD57 + #$FD58, // $FD58 + #$FD59, // $FD59 + #$FD5A, // $FD5A + #$FD5B, // $FD5B + #$FD5C, // $FD5C + #$FD5D, // $FD5D + #$FD5E, // $FD5E + #$FD5F, // $FD5F + #$FD60, // $FD60 + #$FD61, // $FD61 + #$FD62, // $FD62 + #$FD63, // $FD63 + #$FD64, // $FD64 + #$FD65, // $FD65 + #$FD66, // $FD66 + #$FD67, // $FD67 + #$FD68, // $FD68 + #$FD69, // $FD69 + #$FD6A, // $FD6A + #$FD6B, // $FD6B + #$FD6C, // $FD6C + #$FD6D, // $FD6D + #$FD6E, // $FD6E + #$FD6F, // $FD6F + #$FD70, // $FD70 + #$FD71, // $FD71 + #$FD72, // $FD72 + #$FD73, // $FD73 + #$FD74, // $FD74 + #$FD75, // $FD75 + #$FD76, // $FD76 + #$FD77, // $FD77 + #$FD78, // $FD78 + #$FD79, // $FD79 + #$FD7A, // $FD7A + #$FD7B, // $FD7B + #$FD7C, // $FD7C + #$FD7D, // $FD7D + #$FD7E, // $FD7E + #$FD7F, // $FD7F + #$FD80, // $FD80 + #$FD81, // $FD81 + #$FD82, // $FD82 + #$FD83, // $FD83 + #$FD84, // $FD84 + #$FD85, // $FD85 + #$FD86, // $FD86 + #$FD87, // $FD87 + #$FD88, // $FD88 + #$FD89, // $FD89 + #$FD8A, // $FD8A + #$FD8B, // $FD8B + #$FD8C, // $FD8C + #$FD8D, // $FD8D + #$FD8E, // $FD8E + #$FD8F, // $FD8F + #$FD90, // $FD90 + #$FD91, // $FD91 + #$FD92, // $FD92 + #$FD93, // $FD93 + #$FD94, // $FD94 + #$FD95, // $FD95 + #$FD96, // $FD96 + #$FD97, // $FD97 + #$FD98, // $FD98 + #$FD99, // $FD99 + #$FD9A, // $FD9A + #$FD9B, // $FD9B + #$FD9C, // $FD9C + #$FD9D, // $FD9D + #$FD9E, // $FD9E + #$FD9F, // $FD9F + #$FDA0, // $FDA0 + #$FDA1, // $FDA1 + #$FDA2, // $FDA2 + #$FDA3, // $FDA3 + #$FDA4, // $FDA4 + #$FDA5, // $FDA5 + #$FDA6, // $FDA6 + #$FDA7, // $FDA7 + #$FDA8, // $FDA8 + #$FDA9, // $FDA9 + #$FDAA, // $FDAA + #$FDAB, // $FDAB + #$FDAC, // $FDAC + #$FDAD, // $FDAD + #$FDAE, // $FDAE + #$FDAF, // $FDAF + #$FDB0, // $FDB0 + #$FDB1, // $FDB1 + #$FDB2, // $FDB2 + #$FDB3, // $FDB3 + #$FDB4, // $FDB4 + #$FDB5, // $FDB5 + #$FDB6, // $FDB6 + #$FDB7, // $FDB7 + #$FDB8, // $FDB8 + #$FDB9, // $FDB9 + #$FDBA, // $FDBA + #$FDBB, // $FDBB + #$FDBC, // $FDBC + #$FDBD, // $FDBD + #$FDBE, // $FDBE + #$FDBF, // $FDBF + #$FDC0, // $FDC0 + #$FDC1, // $FDC1 + #$FDC2, // $FDC2 + #$FDC3, // $FDC3 + #$FDC4, // $FDC4 + #$FDC5, // $FDC5 + #$FDC6, // $FDC6 + #$FDC7, // $FDC7 + #$FDC8, // $FDC8 + #$FDC9, // $FDC9 + #$FDCA, // $FDCA + #$FDCB, // $FDCB + #$FDCC, // $FDCC + #$FDCD, // $FDCD + #$FDCE, // $FDCE + #$FDCF, // $FDCF + #$FDD0, // $FDD0 + #$FDD1, // $FDD1 + #$FDD2, // $FDD2 + #$FDD3, // $FDD3 + #$FDD4, // $FDD4 + #$FDD5, // $FDD5 + #$FDD6, // $FDD6 + #$FDD7, // $FDD7 + #$FDD8, // $FDD8 + #$FDD9, // $FDD9 + #$FDDA, // $FDDA + #$FDDB, // $FDDB + #$FDDC, // $FDDC + #$FDDD, // $FDDD + #$FDDE, // $FDDE + #$FDDF, // $FDDF + #$FDE0, // $FDE0 + #$FDE1, // $FDE1 + #$FDE2, // $FDE2 + #$FDE3, // $FDE3 + #$FDE4, // $FDE4 + #$FDE5, // $FDE5 + #$FDE6, // $FDE6 + #$FDE7, // $FDE7 + #$FDE8, // $FDE8 + #$FDE9, // $FDE9 + #$FDEA, // $FDEA + #$FDEB, // $FDEB + #$FDEC, // $FDEC + #$FDED, // $FDED + #$FDEE, // $FDEE + #$FDEF, // $FDEF + #$FDF0, // $FDF0 + #$FDF1, // $FDF1 + #$FDF2, // $FDF2 + #$FDF3, // $FDF3 + #$FDF4, // $FDF4 + #$FDF5, // $FDF5 + #$FDF6, // $FDF6 + #$FDF7, // $FDF7 + #$FDF8, // $FDF8 + #$FDF9, // $FDF9 + #$FDFA, // $FDFA + #$FDFB, // $FDFB + #$FDFC, // $FDFC + #$FDFD, // $FDFD + #$FDFE, // $FDFE + #$FDFF, // $FDFF + #$FE00, // $FE00 + #$FE01, // $FE01 + #$FE02, // $FE02 + #$FE03, // $FE03 + #$FE04, // $FE04 + #$FE05, // $FE05 + #$FE06, // $FE06 + #$FE07, // $FE07 + #$FE08, // $FE08 + #$FE09, // $FE09 + #$FE0A, // $FE0A + #$FE0B, // $FE0B + #$FE0C, // $FE0C + #$FE0D, // $FE0D + #$FE0E, // $FE0E + #$FE0F, // $FE0F + #$FE10, // $FE10 + #$FE11, // $FE11 + #$FE12, // $FE12 + #$FE13, // $FE13 + #$FE14, // $FE14 + #$FE15, // $FE15 + #$FE16, // $FE16 + #$FE17, // $FE17 + #$FE18, // $FE18 + #$FE19, // $FE19 + #$FE1A, // $FE1A + #$FE1B, // $FE1B + #$FE1C, // $FE1C + #$FE1D, // $FE1D + #$FE1E, // $FE1E + #$FE1F, // $FE1F + #$FE20, // $FE20 + #$FE21, // $FE21 + #$FE22, // $FE22 + #$FE23, // $FE23 + #$FE24, // $FE24 + #$FE25, // $FE25 + #$FE26, // $FE26 + #$FE27, // $FE27 + #$FE28, // $FE28 + #$FE29, // $FE29 + #$FE2A, // $FE2A + #$FE2B, // $FE2B + #$FE2C, // $FE2C + #$FE2D, // $FE2D + #$FE2E, // $FE2E + #$FE2F, // $FE2F + #$FE30, // $FE30 + #$FE31, // $FE31 + #$FE32, // $FE32 + #$FE33, // $FE33 + #$FE34, // $FE34 + #$FE35, // $FE35 + #$FE36, // $FE36 + #$FE37, // $FE37 + #$FE38, // $FE38 + #$FE39, // $FE39 + #$FE3A, // $FE3A + #$FE3B, // $FE3B + #$FE3C, // $FE3C + #$FE3D, // $FE3D + #$FE3E, // $FE3E + #$FE3F, // $FE3F + #$FE40, // $FE40 + #$FE41, // $FE41 + #$FE42, // $FE42 + #$FE43, // $FE43 + #$FE44, // $FE44 + #$FE45, // $FE45 + #$FE46, // $FE46 + #$FE47, // $FE47 + #$FE48, // $FE48 + #$FE49, // $FE49 + #$FE4A, // $FE4A + #$FE4B, // $FE4B + #$FE4C, // $FE4C + #$FE4D, // $FE4D + #$FE4E, // $FE4E + #$FE4F, // $FE4F + #$FE50, // $FE50 + #$FE51, // $FE51 + #$FE52, // $FE52 + #$FE53, // $FE53 + #$FE54, // $FE54 + #$FE55, // $FE55 + #$FE56, // $FE56 + #$FE57, // $FE57 + #$FE58, // $FE58 + #$FE59, // $FE59 + #$FE5A, // $FE5A + #$FE5B, // $FE5B + #$FE5C, // $FE5C + #$FE5D, // $FE5D + #$FE5E, // $FE5E + #$FE5F, // $FE5F + #$FE60, // $FE60 + #$FE61, // $FE61 + #$FE62, // $FE62 + #$FE63, // $FE63 + #$FE64, // $FE64 + #$FE65, // $FE65 + #$FE66, // $FE66 + #$FE67, // $FE67 + #$FE68, // $FE68 + #$FE69, // $FE69 + #$FE6A, // $FE6A + #$FE6B, // $FE6B + #$FE6C, // $FE6C + #$FE6D, // $FE6D + #$FE6E, // $FE6E + #$FE6F, // $FE6F + #$FE70, // $FE70 + #$FE71, // $FE71 + #$FE72, // $FE72 + #$FE73, // $FE73 + #$FE74, // $FE74 + #$FE75, // $FE75 + #$FE76, // $FE76 + #$FE77, // $FE77 + #$FE78, // $FE78 + #$FE79, // $FE79 + #$FE7A, // $FE7A + #$FE7B, // $FE7B + #$FE7C, // $FE7C + #$FE7D, // $FE7D + #$FE7E, // $FE7E + #$FE7F, // $FE7F + #$FE80, // $FE80 + #$FE81, // $FE81 + #$FE82, // $FE82 + #$FE83, // $FE83 + #$FE84, // $FE84 + #$FE85, // $FE85 + #$FE86, // $FE86 + #$FE87, // $FE87 + #$FE88, // $FE88 + #$FE89, // $FE89 + #$FE8A, // $FE8A + #$FE8B, // $FE8B + #$FE8C, // $FE8C + #$FE8D, // $FE8D + #$FE8E, // $FE8E + #$FE8F, // $FE8F + #$FE90, // $FE90 + #$FE91, // $FE91 + #$FE92, // $FE92 + #$FE93, // $FE93 + #$FE94, // $FE94 + #$FE95, // $FE95 + #$FE96, // $FE96 + #$FE97, // $FE97 + #$FE98, // $FE98 + #$FE99, // $FE99 + #$FE9A, // $FE9A + #$FE9B, // $FE9B + #$FE9C, // $FE9C + #$FE9D, // $FE9D + #$FE9E, // $FE9E + #$FE9F, // $FE9F + #$FEA0, // $FEA0 + #$FEA1, // $FEA1 + #$FEA2, // $FEA2 + #$FEA3, // $FEA3 + #$FEA4, // $FEA4 + #$FEA5, // $FEA5 + #$FEA6, // $FEA6 + #$FEA7, // $FEA7 + #$FEA8, // $FEA8 + #$FEA9, // $FEA9 + #$FEAA, // $FEAA + #$FEAB, // $FEAB + #$FEAC, // $FEAC + #$FEAD, // $FEAD + #$FEAE, // $FEAE + #$FEAF, // $FEAF + #$FEB0, // $FEB0 + #$FEB1, // $FEB1 + #$FEB2, // $FEB2 + #$FEB3, // $FEB3 + #$FEB4, // $FEB4 + #$FEB5, // $FEB5 + #$FEB6, // $FEB6 + #$FEB7, // $FEB7 + #$FEB8, // $FEB8 + #$FEB9, // $FEB9 + #$FEBA, // $FEBA + #$FEBB, // $FEBB + #$FEBC, // $FEBC + #$FEBD, // $FEBD + #$FEBE, // $FEBE + #$FEBF, // $FEBF + #$FEC0, // $FEC0 + #$FEC1, // $FEC1 + #$FEC2, // $FEC2 + #$FEC3, // $FEC3 + #$FEC4, // $FEC4 + #$FEC5, // $FEC5 + #$FEC6, // $FEC6 + #$FEC7, // $FEC7 + #$FEC8, // $FEC8 + #$FEC9, // $FEC9 + #$FECA, // $FECA + #$FECB, // $FECB + #$FECC, // $FECC + #$FECD, // $FECD + #$FECE, // $FECE + #$FECF, // $FECF + #$FED0, // $FED0 + #$FED1, // $FED1 + #$FED2, // $FED2 + #$FED3, // $FED3 + #$FED4, // $FED4 + #$FED5, // $FED5 + #$FED6, // $FED6 + #$FED7, // $FED7 + #$FED8, // $FED8 + #$FED9, // $FED9 + #$FEDA, // $FEDA + #$FEDB, // $FEDB + #$FEDC, // $FEDC + #$FEDD, // $FEDD + #$FEDE, // $FEDE + #$FEDF, // $FEDF + #$FEE0, // $FEE0 + #$FEE1, // $FEE1 + #$FEE2, // $FEE2 + #$FEE3, // $FEE3 + #$FEE4, // $FEE4 + #$FEE5, // $FEE5 + #$FEE6, // $FEE6 + #$FEE7, // $FEE7 + #$FEE8, // $FEE8 + #$FEE9, // $FEE9 + #$FEEA, // $FEEA + #$FEEB, // $FEEB + #$FEEC, // $FEEC + #$FEED, // $FEED + #$FEEE, // $FEEE + #$FEEF, // $FEEF + #$FEF0, // $FEF0 + #$FEF1, // $FEF1 + #$FEF2, // $FEF2 + #$FEF3, // $FEF3 + #$FEF4, // $FEF4 + #$FEF5, // $FEF5 + #$FEF6, // $FEF6 + #$FEF7, // $FEF7 + #$FEF8, // $FEF8 + #$FEF9, // $FEF9 + #$FEFA, // $FEFA + #$FEFB, // $FEFB + #$FEFC, // $FEFC + #$FEFD, // $FEFD + #$FEFE, // $FEFE + #$FEFF, // $FEFF + #$FF00, // $FF00 + #$FF01, // $FF01 + #$FF02, // $FF02 + #$FF03, // $FF03 + #$FF04, // $FF04 + #$FF05, // $FF05 + #$FF06, // $FF06 + #$FF07, // $FF07 + #$FF08, // $FF08 + #$FF09, // $FF09 + #$FF0A, // $FF0A + #$FF0B, // $FF0B + #$FF0C, // $FF0C + #$FF0D, // $FF0D + #$FF0E, // $FF0E + #$FF0F, // $FF0F + #$FF10, // $FF10 + #$FF11, // $FF11 + #$FF12, // $FF12 + #$FF13, // $FF13 + #$FF14, // $FF14 + #$FF15, // $FF15 + #$FF16, // $FF16 + #$FF17, // $FF17 + #$FF18, // $FF18 + #$FF19, // $FF19 + #$FF1A, // $FF1A + #$FF1B, // $FF1B + #$FF1C, // $FF1C + #$FF1D, // $FF1D + #$FF1E, // $FF1E + #$FF1F, // $FF1F + #$FF20, // $FF20 + #$FF41, // $FF21 + #$FF42, // $FF22 + #$FF43, // $FF23 + #$FF44, // $FF24 + #$FF45, // $FF25 + #$FF46, // $FF26 + #$FF47, // $FF27 + #$FF48, // $FF28 + #$FF49, // $FF29 + #$FF4A, // $FF2A + #$FF4B, // $FF2B + #$FF4C, // $FF2C + #$FF4D, // $FF2D + #$FF4E, // $FF2E + #$FF4F, // $FF2F + #$FF50, // $FF30 + #$FF51, // $FF31 + #$FF52, // $FF32 + #$FF53, // $FF33 + #$FF54, // $FF34 + #$FF55, // $FF35 + #$FF56, // $FF36 + #$FF57, // $FF37 + #$FF58, // $FF38 + #$FF59, // $FF39 + #$FF5A, // $FF3A + #$FF3B, // $FF3B + #$FF3C, // $FF3C + #$FF3D, // $FF3D + #$FF3E, // $FF3E + #$FF3F, // $FF3F + #$FF40, // $FF40 + #$FF41, // $FF41 + #$FF42, // $FF42 + #$FF43, // $FF43 + #$FF44, // $FF44 + #$FF45, // $FF45 + #$FF46, // $FF46 + #$FF47, // $FF47 + #$FF48, // $FF48 + #$FF49, // $FF49 + #$FF4A, // $FF4A + #$FF4B, // $FF4B + #$FF4C, // $FF4C + #$FF4D, // $FF4D + #$FF4E, // $FF4E + #$FF4F, // $FF4F + #$FF50, // $FF50 + #$FF51, // $FF51 + #$FF52, // $FF52 + #$FF53, // $FF53 + #$FF54, // $FF54 + #$FF55, // $FF55 + #$FF56, // $FF56 + #$FF57, // $FF57 + #$FF58, // $FF58 + #$FF59, // $FF59 + #$FF5A, // $FF5A + #$FF5B, // $FF5B + #$FF5C, // $FF5C + #$FF5D, // $FF5D + #$FF5E, // $FF5E + #$FF5F, // $FF5F + #$FF60, // $FF60 + #$FF61, // $FF61 + #$FF62, // $FF62 + #$FF63, // $FF63 + #$FF64, // $FF64 + #$FF65, // $FF65 + #$FF66, // $FF66 + #$FF67, // $FF67 + #$FF68, // $FF68 + #$FF69, // $FF69 + #$FF6A, // $FF6A + #$FF6B, // $FF6B + #$FF6C, // $FF6C + #$FF6D, // $FF6D + #$FF6E, // $FF6E + #$FF6F, // $FF6F + #$FF70, // $FF70 + #$FF71, // $FF71 + #$FF72, // $FF72 + #$FF73, // $FF73 + #$FF74, // $FF74 + #$FF75, // $FF75 + #$FF76, // $FF76 + #$FF77, // $FF77 + #$FF78, // $FF78 + #$FF79, // $FF79 + #$FF7A, // $FF7A + #$FF7B, // $FF7B + #$FF7C, // $FF7C + #$FF7D, // $FF7D + #$FF7E, // $FF7E + #$FF7F, // $FF7F + #$FF80, // $FF80 + #$FF81, // $FF81 + #$FF82, // $FF82 + #$FF83, // $FF83 + #$FF84, // $FF84 + #$FF85, // $FF85 + #$FF86, // $FF86 + #$FF87, // $FF87 + #$FF88, // $FF88 + #$FF89, // $FF89 + #$FF8A, // $FF8A + #$FF8B, // $FF8B + #$FF8C, // $FF8C + #$FF8D, // $FF8D + #$FF8E, // $FF8E + #$FF8F, // $FF8F + #$FF90, // $FF90 + #$FF91, // $FF91 + #$FF92, // $FF92 + #$FF93, // $FF93 + #$FF94, // $FF94 + #$FF95, // $FF95 + #$FF96, // $FF96 + #$FF97, // $FF97 + #$FF98, // $FF98 + #$FF99, // $FF99 + #$FF9A, // $FF9A + #$FF9B, // $FF9B + #$FF9C, // $FF9C + #$FF9D, // $FF9D + #$FF9E, // $FF9E + #$FF9F, // $FF9F + #$FFA0, // $FFA0 + #$FFA1, // $FFA1 + #$FFA2, // $FFA2 + #$FFA3, // $FFA3 + #$FFA4, // $FFA4 + #$FFA5, // $FFA5 + #$FFA6, // $FFA6 + #$FFA7, // $FFA7 + #$FFA8, // $FFA8 + #$FFA9, // $FFA9 + #$FFAA, // $FFAA + #$FFAB, // $FFAB + #$FFAC, // $FFAC + #$FFAD, // $FFAD + #$FFAE, // $FFAE + #$FFAF, // $FFAF + #$FFB0, // $FFB0 + #$FFB1, // $FFB1 + #$FFB2, // $FFB2 + #$FFB3, // $FFB3 + #$FFB4, // $FFB4 + #$FFB5, // $FFB5 + #$FFB6, // $FFB6 + #$FFB7, // $FFB7 + #$FFB8, // $FFB8 + #$FFB9, // $FFB9 + #$FFBA, // $FFBA + #$FFBB, // $FFBB + #$FFBC, // $FFBC + #$FFBD, // $FFBD + #$FFBE, // $FFBE + #$FFBF, // $FFBF + #$FFC0, // $FFC0 + #$FFC1, // $FFC1 + #$FFC2, // $FFC2 + #$FFC3, // $FFC3 + #$FFC4, // $FFC4 + #$FFC5, // $FFC5 + #$FFC6, // $FFC6 + #$FFC7, // $FFC7 + #$FFC8, // $FFC8 + #$FFC9, // $FFC9 + #$FFCA, // $FFCA + #$FFCB, // $FFCB + #$FFCC, // $FFCC + #$FFCD, // $FFCD + #$FFCE, // $FFCE + #$FFCF, // $FFCF + #$FFD0, // $FFD0 + #$FFD1, // $FFD1 + #$FFD2, // $FFD2 + #$FFD3, // $FFD3 + #$FFD4, // $FFD4 + #$FFD5, // $FFD5 + #$FFD6, // $FFD6 + #$FFD7, // $FFD7 + #$FFD8, // $FFD8 + #$FFD9, // $FFD9 + #$FFDA, // $FFDA + #$FFDB, // $FFDB + #$FFDC, // $FFDC + #$FFDD, // $FFDD + #$FFDE, // $FFDE + #$FFDF, // $FFDF + #$FFE0, // $FFE0 + #$FFE1, // $FFE1 + #$FFE2, // $FFE2 + #$FFE3, // $FFE3 + #$FFE4, // $FFE4 + #$FFE5, // $FFE5 + #$FFE6, // $FFE6 + #$FFE7, // $FFE7 + #$FFE8, // $FFE8 + #$FFE9, // $FFE9 + #$FFEA, // $FFEA + #$FFEB, // $FFEB + #$FFEC, // $FFEC + #$FFED, // $FFED + #$FFEE, // $FFEE + #$FFEF, // $FFEF + #$FFF0, // $FFF0 + #$FFF1, // $FFF1 + #$FFF2, // $FFF2 + #$FFF3, // $FFF3 + #$FFF4, // $FFF4 + #$FFF5, // $FFF5 + #$FFF6, // $FFF6 + #$FFF7, // $FFF7 + #$FFF8, // $FFF8 + #$FFF9, // $FFF9 + #$FFFA, // $FFFA + #$FFFB, // $FFFB + #$FFFC, // $FFFC + #$FFFD, // $FFFD + #$FFFE, // $FFFE + #$FFFF // $FFFF + ); + +implementation +end. diff --git a/src/libraries/regex/uregexpr.pas b/src/libraries/regex/uregexpr.pas new file mode 100644 index 000000000..26609f368 --- /dev/null +++ b/src/libraries/regex/uregexpr.pas @@ -0,0 +1,6816 @@ +unit uregexpr; + +{ + TRegExpr class library + Delphi Regular Expressions + + Copyright (c) 1999-2004 Andrey V. Sorokin, St.Petersburg, Russia + + You can choose to use this Pascal unit in one of the two following licenses: + + Option 1> + + You may use this software in any kind of development, + including comercial, redistribute, and modify it freely, + under the following restrictions : + 1. This software is provided as it is, without any kind of + warranty given. Use it at Your own risk.The author is not + responsible for any consequences of use of this software. + 2. The origin of this software may not be mispresented, You + must not claim that You wrote the original software. If + You use this software in any kind of product, it would be + appreciated that there in a information box, or in the + documentation would be an acknowledgement like + + Partial Copyright (c) 2004 Andrey V. Sorokin + https://sorokin.engineer/ + andrey@sorokin.engineer + + 3. You may not have any income from distributing this source + (or altered version of it) to other developers. When You + use this product in a comercial package, the source may + not be charged seperatly. + 4. Altered versions must be plainly marked as such, and must + not be misrepresented as being the original software. + 5. RegExp Studio application and all the visual components as + well as documentation is not part of the TRegExpr library + and is not free for usage. + + https://sorokin.engineer/ + andrey@sorokin.engineer + + Option 2> + + The same modified LGPL with static linking exception as the Free Pascal RTL +} + +{ +program is essentially a linear encoding +of a nondeterministic finite-state machine (aka syntax charts or +"railroad normal form" in parsing technology). Each node is an opcode +plus a "next" pointer, possibly plus an operand. "Next" pointers of +all nodes except BRANCH implement concatenation; a "next" pointer with +a BRANCH on both ends of it connects two alternatives. (Here we +have one of the subtle syntax dependencies: an individual BRANCH (as +opposed to a collection of them) is never concatenated with anything +because of operator precedence.) The operand of some types of node is +a literal string; for others, it is a node leading into a sub-FSM. In +particular, the operand of a BRANCH node is the first node of the branch. +(NB this is *not* a tree structure: the tail of the branch connects +to the thing following the set of BRANCHes.) +} + +interface + +{ off $DEFINE DebugSynRegExpr } +// ======== Determine compiler +{$I regexpr_compilers.inc} +// ======== Define base compiler options +{$BOOLEVAL OFF} +{$EXTENDEDSYNTAX ON} +{$LONGSTRINGS ON} +{$OPTIMIZATION ON} +{$IFDEF FPC} + {$MODE DELPHI} // Delphi-compatible mode in FreePascal + {$INLINE ON} +{$ENDIF} +// ======== Define options for TRegExpr engine +{$DEFINE Unicode} // Use WideChar for characters and UnicodeString/WideString for strings +{ off $DEFINE UnicodeEx} // Support Unicode >0xFFFF, e.g. emoji, e.g. "." must find 2 WideChars of 1 emoji +{ off $DEFINE UseWordChars} // Use WordChars property, otherwise fixed list 'a'..'z','A'..'Z','0'..'9','_' +{ off $DEFINE UseSpaceChars} // Use SpaceChars property, otherwise fixed list +{ off $DEFINE UseLineSep} // Use LineSeparators property, otherwise fixed line-break chars +{$DEFINE FastUnicodeData} // Use arrays for UpperCase/LowerCase/IsWordChar, they take 320K more memory +{$DEFINE UseFirstCharSet} // Enable optimization, which finds possible first chars of input string +{$DEFINE RegExpPCodeDump} // Enable method Dump() to show opcode as string +{$IFNDEF FPC} // Not supported in FreePascal + {$DEFINE reRealExceptionAddr} // Exceptions will point to appropriate source line, not to Error procedure +{$ENDIF} +{$DEFINE ComplexBraces} // Support braces in complex cases +{$IFNDEF Unicode} + {$UNDEF UnicodeEx} + {$UNDEF FastUnicodeData} +{$ENDIF} +// ======== Define Pascal-language options +// Define 'UseAsserts' option (do not edit this definitions). +// Asserts used to catch 'strange bugs' in TRegExpr implementation (when something goes +// completely wrong). You can swith asserts on/off with help of {$C+}/{$C-} compiler options. +{$IFDEF D3} {$DEFINE UseAsserts} {$ENDIF} +{$IFDEF FPC} {$DEFINE UseAsserts} {$ENDIF} +// Define 'use subroutine parameters default values' option (do not edit this definition). +{$IFDEF D4} {$DEFINE DefParam} {$ENDIF} +{$IFDEF FPC} {$DEFINE DefParam} {$ENDIF} +// Define 'OverMeth' options, to use method overloading (do not edit this definitions). +{$IFDEF D5} {$DEFINE OverMeth} {$ENDIF} +{$IFDEF FPC} {$DEFINE OverMeth} {$ENDIF} +// Define 'InlineFuncs' options, to use inline keyword (do not edit this definitions). +//{$IFDEF D8} {$DEFINE InlineFuncs} {$ENDIF} +{$IFDEF FPC} {$DEFINE InlineFuncs} {$ENDIF} + +uses + Classes, // TStrings in Split method + SysUtils, // Exception + Math; + +type + {$IFNDEF FPC} + // Delphi doesn't have PtrInt but has NativeInt + PtrInt = NativeInt; + PtrUInt = NativeInt; + {$ENDIF} + {$IFDEF UniCode} + PRegExprChar = PWideChar; + {$IFDEF FPC} + RegExprString = UnicodeString; + {$ELSE} + {$IFDEF D2009} + RegExprString = UnicodeString; + {$ELSE} + RegExprString = WideString; + {$ENDIF} + {$ENDIF} + REChar = WideChar; + {$ELSE} + PRegExprChar = PChar; + RegExprString = AnsiString; + REChar = Char; + {$ENDIF} + TREOp = REChar; // internal opcode type + PREOp = ^TREOp; + +type + TRegExprCharset = set of byte; + +const + // Escape char ('\' in common r.e.) used for escaping metachars (\w, \d etc) + EscChar = '\'; + + // Substitute method: prefix of group reference: $1 .. $9 and $<name> + SubstituteGroupChar = '$'; + + RegExprModifierI: boolean = False; // default value for ModifierI + RegExprModifierR: boolean = True; // default value for ModifierR + RegExprModifierS: boolean = True; // default value for ModifierS + RegExprModifierG: boolean = True; // default value for ModifierG + RegExprModifierM: boolean = False; // default value for ModifierM + RegExprModifierX: boolean = False; // default value for ModifierX + + {$IFDEF UseSpaceChars} + // default value for SpaceChars + RegExprSpaceChars: RegExprString = ' '#$9#$A#$D#$C; + {$ENDIF} + + {$IFDEF UseWordChars} + // default value for WordChars + RegExprWordChars: RegExprString = '0123456789' + + 'abcdefghijklmnopqrstuvwxyz' + + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'; + {$ENDIF} + + {$IFDEF UseLineSep} + // default value for LineSeparators + RegExprLineSeparators: RegExprString = #$d#$a#$b#$c + {$IFDEF UniCode} + + #$2028#$2029#$85 + {$ENDIF}; + {$ENDIF} + + // Tab and Unicode category "Space Separator": + // https://www.compart.com/en/unicode/category/Zs + RegExprHorzSeparators: RegExprString = #9#$20#$A0 + {$IFDEF UniCode} + + #$1680#$2000#$2001#$2002#$2003#$2004#$2005#$2006#$2007#$2008#$2009#$200A#$202F#$205F#$3000 + {$ENDIF}; + + RegExprUsePairedBreak: boolean = True; + RegExprReplaceLineBreak: RegExprString = sLineBreak; + + RegExprLookaheadIsAtomic: boolean = False; + RegExprLookbehindIsAtomic: boolean = True; + +const + RegexMaxGroups = 90; + // Max number of groups. + // Be carefull - don't use values which overflow OP_CLOSE* opcode + // (in this case you'll get compiler error). + // Big value causes slower work and more stack required. + RegexMaxMaxGroups = 255; + // Max possible value for RegexMaxGroups. + // Don't change it! It's defined by internal TRegExpr design. + +{$IFDEF ComplexBraces} +const + LoopStackMax = 10; // max depth of loops stack //###0.925 + +type + TRegExprLoopStack = array [1 .. LoopStackMax] of integer; +{$ENDIF} + +type + TRegExprModifiers = record + I: boolean; + // Case-insensitive. + R: boolean; + // Extended syntax for Russian ranges in []. + // If True, then а-я additionally includes letter 'ё', + // А-Я additionally includes 'Ё', and а-Я includes all Russian letters. + // Turn it off if it interferes with your national alphabet. + S: boolean; + // Dot '.' matches any char, otherwise only [^\n]. + G: boolean; + // Greedy. Switching it off switches all operators to non-greedy style, + // so if G=False, then '*' works like '*?', '+' works like '+?' and so on. + M: boolean; + // Treat string as multiple lines. It changes `^' and `$' from + // matching at only the very start/end of the string to the start/end + // of any line anywhere within the string. + X: boolean; + // Allow comments in regex using # char. + end; + +function IsModifiersEqual(const A, B: TRegExprModifiers): boolean; + +type + TRegExpr = class; + TRegExprReplaceFunction = function(ARegExpr: TRegExpr): RegExprString of object; + TRegExprCharChecker = function(ch: REChar): boolean of object; + TRegExprCharCheckerArray = array[0 .. 30] of TRegExprCharChecker; + TRegExprCharCheckerInfo = record + CharBegin, CharEnd: REChar; + CheckerIndex: integer; + end; + TRegExprCharCheckerInfos = array of TRegExprCharCheckerInfo; + + { TRegExpr } + + TRegExpr = class + private + GrpStart: array [0 .. RegexMaxGroups - 1] of PRegExprChar; // pointer to group start in InputString + GrpEnd: array [0 .. RegexMaxGroups - 1] of PRegExprChar; // pointer to group end in InputString + + GrpIndexes: array [0 .. RegexMaxGroups - 1] of integer; // map global group index to _capturing_ group index + GrpNames: array [0 .. RegexMaxGroups - 1] of RegExprString; // names of groups, if non-empty + GrpAtomic: array [0 .. RegexMaxGroups - 1] of boolean; // group[i] is atomic (filled in Compile) + GrpAtomicDone: array [0 .. RegexMaxGroups - 1] of boolean; // atomic group[i] is "done" (used in Exec* only) + GrpOpCodes: array [0 .. RegexMaxGroups - 1] of PRegExprChar; // pointer to opcode of group[i] (used by OP_SUBCALL*) + GrpSubCalled: array [0 .. RegexMaxGroups - 1] of boolean; // group[i] is called by OP_SUBCALL* + GrpCount: integer; + + {$IFDEF ComplexBraces} + LoopStack: TRegExprLoopStack; // state before entering loop + LoopStackIdx: integer; // 0 - out of all loops + {$ENDIF} + + // The "internal use only" fields to pass info from compile + // to execute that permits the execute phase to run lots faster on + // simple cases. + + regAnchored: REChar; // is the match anchored (at beginning-of-line only)? + // regAnchored permits very fast decisions on suitable starting points + // for a match, cutting down the work a lot. regMust permits fast rejection + // of lines that cannot possibly match. The regMust tests are costly enough + // that regcomp() supplies a regMust only if the r.e. contains something + // potentially expensive (at present, the only such thing detected is * or + + // at the start of the r.e., which can involve a lot of backup). regMustLen is + // supplied because the test in regexec() needs it and regcomp() is computing + // it anyway. + + regMust: PRegExprChar; // string (pointer into program) that match must include, or nil + regMustLen: integer; // length of regMust string + regMustString: RegExprString; // string which must occur in match (got from regMust/regMustLen) + regLookahead: boolean; // regex has _some_ lookahead + regLookaheadNeg: boolean; // regex has _nagative_ lookahead + regLookaheadGroup: integer; // index of group for lookahead + regLookbehind: boolean; // regex has positive lookbehind + regNestedCalls: integer; // some attempt to prevent 'catastrophic backtracking' but not used + + {$IFDEF UseFirstCharSet} + FirstCharSet: TRegExprCharset; + FirstCharArray: array[byte] of boolean; + {$ENDIF} + + // work variables for Exec routines - save stack in recursion + regInput: PRegExprChar; // pointer to currently handling char of input string + fInputStart: PRegExprChar; // pointer to first char of input string + fInputEnd: PRegExprChar; // pointer after last char of input string + fRegexStart: PRegExprChar; // pointer to first char of regex + fRegexEnd: PRegExprChar; // pointer after last char of regex + regCurrentGrp: integer; // index of group handling by OP_OPEN* opcode + + // work variables for compiler's routines + regParse: PRegExprChar; // pointer to currently handling char of regex + regNumBrackets: integer; // count of () brackets + regDummy: REChar; // dummy pointer, used to detect 1st/2nd pass of Compile + // if p=@regDummy, it is pass-1: opcode memory is not yet allocated + programm: PRegExprChar; // pointer to opcode, =nil in pass-1 + regCode: PRegExprChar; // pointer to last emitted opcode; changing in pass-2, but =@regDummy in pass-1 + regCodeSize: integer; // total opcode size in REChars + regCodeWork: PRegExprChar; // pointer to opcode, to first code after MAGIC + regExactlyLen: PLongInt; // pointer to length of substring of OP_EXACTLY* inside opcode + fSecondPass: boolean; // true inside pass-2 of Compile + + fExpression: RegExprString; // regex string + fInputString: RegExprString; // input string + fLastError: integer; // Error call sets code of LastError + fLastErrorOpcode: TREOp; + fLastErrorSymbol: REChar; + + fModifiers: TRegExprModifiers; // regex modifiers + fCompModifiers: TRegExprModifiers; // compiler's copy of modifiers + fProgModifiers: TRegExprModifiers; // modifiers values from last programm compilation + + {$IFDEF UseSpaceChars} + fSpaceChars: RegExprString; + {$ENDIF} + {$IFDEF UseWordChars} + fWordChars: RegExprString; + {$ENDIF} + + {$IFDEF UseLineSep} + fLineSeparators: RegExprString; + {$ENDIF} + + fUsePairedBreak: boolean; + fReplaceLineEnd: RegExprString; // string to use for "\n" in Substitute method + + fSlowChecksSizeMax: integer; + // Exec() param ASlowChecks is set to True, when Length(InputString)<SlowChecksSizeMax + // This ASlowChecks enables to use regMustString optimization + + {$IFNDEF UniCode} + fLineSepArray: array[byte] of boolean; + {$ENDIF} + + CharCheckers: TRegExprCharCheckerArray; + CharCheckerInfos: TRegExprCharCheckerInfos; + CheckerIndex_Word: byte; + CheckerIndex_NotWord: byte; + CheckerIndex_Digit: byte; + CheckerIndex_NotDigit: byte; + CheckerIndex_Space: byte; + CheckerIndex_NotSpace: byte; + CheckerIndex_HorzSep: byte; + CheckerIndex_NotHorzSep: byte; + CheckerIndex_VertSep: byte; + CheckerIndex_NotVertSep: byte; + CheckerIndex_LowerAZ: byte; + CheckerIndex_UpperAZ: byte; + + fHelper: TRegExpr; + fHelperLen: integer; + + procedure InitCharCheckers; + function CharChecker_Word(ch: REChar): boolean; + function CharChecker_NotWord(ch: REChar): boolean; + function CharChecker_Space(ch: REChar): boolean; + function CharChecker_NotSpace(ch: REChar): boolean; + function CharChecker_Digit(ch: REChar): boolean; + function CharChecker_NotDigit(ch: REChar): boolean; + function CharChecker_HorzSep(ch: REChar): boolean; + function CharChecker_NotHorzSep(ch: REChar): boolean; + function CharChecker_VertSep(ch: REChar): boolean; + function CharChecker_NotVertSep(ch: REChar): boolean; + function CharChecker_LowerAZ(ch: REChar): boolean; + function CharChecker_UpperAZ(ch: REChar): boolean; + function DumpCheckerIndex(N: byte): RegExprString; + function DumpCategoryChars(ch, ch2: REChar; Positive: boolean): RegExprString; + + procedure ClearMatches; {$IFDEF InlineFuncs}inline;{$ENDIF} + procedure ClearInternalIndexes; {$IFDEF InlineFuncs}inline;{$ENDIF} + function FindInCharClass(ABuffer: PRegExprChar; AChar: REChar; AIgnoreCase: boolean): boolean; + procedure GetCharSetFromCharClass(ABuffer: PRegExprChar; AIgnoreCase: boolean; var ARes: TRegExprCharset); + procedure GetCharSetFromSpaceChars(var ARes: TRegExprCharset); {$IFDEF InlineFuncs}inline;{$ENDIF} + procedure GetCharSetFromWordChars(var ARes: TRegExprCharSet); {$IFDEF InlineFuncs}inline;{$ENDIF} + function IsWordChar(AChar: REChar): boolean; {$IFDEF InlineFuncs}inline;{$ENDIF} + function IsSpaceChar(AChar: REChar): boolean; {$IFDEF InlineFuncs}inline;{$ENDIF} + function IsCustomLineSeparator(AChar: REChar): boolean; {$IFDEF InlineFuncs}inline;{$ENDIF} + {$IFDEF UseLineSep} + procedure InitLineSepArray; + {$ENDIF} + procedure FindGroupName(APtr: PRegExprChar; AEndChar: REChar; var AName: RegExprString); + + // Mark programm as having to be [re]compiled + procedure InvalidateProgramm; + + // Check if we can use compiled regex, compile it if something changed + function IsProgrammOk: boolean; + + procedure SetExpression(const AStr: RegExprString); + + function GetModifierStr: RegExprString; + procedure SetModifierStr(const AStr: RegExprString); + function GetModifierG: boolean; + function GetModifierI: boolean; + function GetModifierM: boolean; + function GetModifierR: boolean; + function GetModifierS: boolean; + function GetModifierX: boolean; + procedure SetModifierG(AValue: boolean); + procedure SetModifierI(AValue: boolean); + procedure SetModifierM(AValue: boolean); + procedure SetModifierR(AValue: boolean); + procedure SetModifierS(AValue: boolean); + procedure SetModifierX(AValue: boolean); + + // Default handler raises exception ERegExpr with + // Message = ErrorMsg (AErrorID), ErrorCode = AErrorID + // and CompilerErrorPos = value of property CompilerErrorPos. + procedure Error(AErrorID: integer); virtual; // error handler. + + { ==================== Compiler section =================== } + // compile a regular expression into internal code + function CompileRegExpr(ARegExp: PRegExprChar): boolean; + + // set the next-pointer at the end of a node chain + procedure Tail(p: PRegExprChar; val: PRegExprChar); + + // regoptail - regtail on operand of first argument; nop if operandless + procedure OpTail(p: PRegExprChar; val: PRegExprChar); + + // regnode - emit a node, return location + function EmitNode(op: TREOp): PRegExprChar; + + // emit (if appropriate) a byte of code + procedure EmitC(ch: REChar); {$IFDEF InlineFuncs}inline;{$ENDIF} + + // emit LongInt value + procedure EmitInt(AValue: LongInt); {$IFDEF InlineFuncs}inline;{$ENDIF} + + // emit back-reference to group + function EmitGroupRef(AIndex: integer; AIgnoreCase: boolean): PRegExprChar; + {$IFDEF InlineFuncs}inline;{$ENDIF} + + {$IFDEF FastUnicodeData} + procedure FindCategoryName(var scan: PRegExprChar; var ch1, ch2: REChar); + function EmitCategoryMain(APositive: boolean): PRegExprChar; + {$ENDIF} + + // insert an operator in front of already-emitted operand + // Means relocating the operand. + procedure InsertOperator(op: TREOp; opnd: PRegExprChar; sz: integer); + // ###0.90 + + // regular expression, i.e. main body or parenthesized thing + function ParseReg(InBrackets: boolean; var FlagParse: integer): PRegExprChar; + + // one alternative of an | operator + function ParseBranch(var FlagParse: integer): PRegExprChar; + + // something followed by possible [*+?] + function ParsePiece(var FlagParse: integer): PRegExprChar; + + function HexDig(Ch: REChar): integer; + + function UnQuoteChar(var APtr: PRegExprChar): REChar; + + // the lowest level + function ParseAtom(var FlagParse: integer): PRegExprChar; + + // current pos in r.e. - for error hanling + function GetCompilerErrorPos: PtrInt; + + {$IFDEF UseFirstCharSet} // ###0.929 + procedure FillFirstCharSet(prog: PRegExprChar); + {$ENDIF} + { ===================== Matching section =================== } + // repeatedly match something simple, report how many + function FindRepeated(p: PRegExprChar; AMax: integer): integer; + + // dig the "next" pointer out of a node + function regNext(p: PRegExprChar): PRegExprChar; + + // recursively matching routine + function MatchPrim(prog: PRegExprChar): boolean; + + // match at specific position only, called from ExecPrim + function MatchAtOnePos(APos: PRegExprChar): boolean; {$IFDEF InlineFuncs}inline;{$ENDIF} + + // Exec for stored InputString + function ExecPrim(AOffset: integer; ATryOnce, ASlowChecks, ABackward: boolean): boolean; + + function GetSubExprCount: integer; + function GetMatchPos(Idx: integer): PtrInt; + function GetMatchLen(Idx: integer): PtrInt; + function GetMatch(Idx: integer): RegExprString; + + procedure SetInputString(const AInputString: RegExprString); + procedure SetInputRange(AStart, AEnd: PRegExprChar); + + {$IFDEF UseLineSep} + procedure SetLineSeparators(const AStr: RegExprString); + {$ENDIF} + procedure SetUsePairedBreak(AValue: boolean); + + public + constructor Create; {$IFDEF OverMeth} overload; + constructor Create(const AExpression: RegExprString); overload; + {$ENDIF} + destructor Destroy; override; + + class function VersionMajor: integer; + class function VersionMinor: integer; + + // match a programm against a string AInputString + // !!! Exec store AInputString into InputString property + // For Delphi 5 and higher available overloaded versions - first without + // parameter (uses already assigned to InputString property value) + // and second that has int parameter and is same as ExecPos + function Exec(const AInputString: RegExprString): boolean; + {$IFDEF OverMeth} overload; + function Exec: boolean; overload; + function Exec(AOffset: integer): boolean; overload; + {$ENDIF} + + // find next match: + // ExecNext; + // works the same as + // if MatchLen [0] = 0 then ExecPos (MatchPos [0] + 1) + // else ExecPos (MatchPos [0] + MatchLen [0]); + // but it's more simpler ! + // Raises exception if used without preceeding SUCCESSFUL call to + // Exec* (Exec, ExecPos, ExecNext). So You always must use something like + // if Exec (InputString) then repeat { proceed results} until not ExecNext; + function ExecNext(ABackward: boolean {$IFDEF DefParam} = False{$ENDIF}): boolean; + + // find match for InputString starting from AOffset position + // (AOffset=1 - first char of InputString) + function ExecPos(AOffset: integer {$IFDEF DefParam} = 1{$ENDIF}): boolean; + {$IFDEF OverMeth} overload; + function ExecPos(AOffset: integer; ATryOnce, ABackward: boolean): boolean; overload; + {$ENDIF} + + // Returns ATemplate with '$&' or '$0' replaced by whole r.e. + // occurence and '$1'...'$nn' replaced by subexpression with given index. + // Symbol '$' is used instead of '\' (for future extensions + // and for more Perl-compatibility) and accepts more than one digit. + // If you want to place into template raw '$' or '\', use prefix '\'. + // Example: '1\$ is $2\\rub\\' -> '1$ is <Match[2]>\rub\' + // If you want to place any number after '$' you must enclose it + // with curly braces: '${12}'. + // Example: 'a$12bc' -> 'a<Match[12]>bc' + // 'a${1}2bc' -> 'a<Match[1]>2bc'. + function Substitute(const ATemplate: RegExprString): RegExprString; + + // Splits AInputStr to list by positions of all r.e. occurencies. + // Internally calls Exec, ExecNext. + procedure Split(const AInputStr: RegExprString; APieces: TStrings); + + function Replace(const AInputStr: RegExprString; + const AReplaceStr: RegExprString; + AUseSubstitution: boolean{$IFDEF DefParam} = False{$ENDIF}) // ###0.946 + : RegExprString; {$IFDEF OverMeth} overload; + function Replace(const AInputStr: RegExprString; + AReplaceFunc: TRegExprReplaceFunction): RegExprString; overload; + {$ENDIF} + // Returns AInputStr with r.e. occurencies replaced by AReplaceStr. + // If AUseSubstitution is true, then AReplaceStr will be used + // as template for Substitution methods. + // For example: + // Expression := '({-i}block|var)\s*\(\s*([^ ]*)\s*\)\s*'; + // Replace ('BLOCK( test1)', 'def "$1" value "$2"', True); + // will return: def 'BLOCK' value 'test1' + // Replace ('BLOCK( test1)', 'def "$1" value "$2"') + // will return: def "$1" value "$2" + // Internally calls Exec, ExecNext. + // Overloaded version and ReplaceEx operate with callback function, + // so you can implement really complex functionality. + function ReplaceEx(const AInputStr: RegExprString; + AReplaceFunc: TRegExprReplaceFunction): RegExprString; + + // Returns ID of last error, 0 if no errors (unusable if + // Error method raises exception) and clear internal status + // into 0 (no errors). + function LastError: integer; + + // Returns Error message for error with ID = AErrorID. + function ErrorMsg(AErrorID: integer): RegExprString; virtual; + + // Re-compile regex + procedure Compile; + + {$IFDEF RegExpPCodeDump} + // Show compiled regex in textual form + function Dump: RegExprString; + // Show single opcode in textual form + function DumpOp(op: TREOp): RegExprString; + {$ENDIF} + + function IsCompiled: boolean; {$IFDEF InlineFuncs}inline;{$ENDIF} + + // Opcode contains only operations for fixed match length: EXACTLY*, ANY*, etc + function IsFixedLength(var op: TREOp; var ALen: integer): boolean; + + // Regular expression. + // For optimization, TRegExpr will automatically compiles it into 'P-code' + // (You can see it with help of Dump method) and stores in internal + // structures. Real [re]compilation occures only when it really needed - + // while calling Exec, ExecNext, Substitute, Dump, etc + // and only if Expression or other P-code affected properties was changed + // after last [re]compilation. + // If any errors while [re]compilation occures, Error method is called + // (by default Error raises exception - see below) + property Expression: RegExprString read fExpression write SetExpression; + + // Set/get default values of r.e.syntax modifiers. Modifiers in + // r.e. (?ismx-ismx) will replace this default values. + // If you try to set unsupported modifier, Error will be called + // (by defaul Error raises exception ERegExpr). + property ModifierStr: RegExprString read GetModifierStr write SetModifierStr; + + property ModifierI: boolean read GetModifierI write SetModifierI; + property ModifierR: boolean read GetModifierR write SetModifierR; + property ModifierS: boolean read GetModifierS write SetModifierS; + property ModifierG: boolean read GetModifierG write SetModifierG; + property ModifierM: boolean read GetModifierM write SetModifierM; + property ModifierX: boolean read GetModifierX write SetModifierX; + + // returns current input string (from last Exec call or last assign + // to this property). + // Any assignment to this property clear Match* properties ! + property InputString: RegExprString read fInputString write SetInputString; + + // Number of subexpressions has been found in last Exec* call. + // If there are no subexpr. but whole expr was found (Exec* returned True), + // then SubExprMatchCount=0, if no subexpressions nor whole + // r.e. found (Exec* returned false) then SubExprMatchCount=-1. + // Note, that some subexpr. may be not found and for such + // subexpr. MathPos=MatchLen=-1 and Match=''. + // For example: Expression := '(1)?2(3)?'; + // Exec ('123'): SubExprMatchCount=2, Match[0]='123', [1]='1', [2]='3' + // Exec ('12'): SubExprMatchCount=1, Match[0]='12', [1]='1' + // Exec ('23'): SubExprMatchCount=2, Match[0]='23', [1]='', [2]='3' + // Exec ('2'): SubExprMatchCount=0, Match[0]='2' + // Exec ('7') - return False: SubExprMatchCount=-1 + property SubExprMatchCount: integer read GetSubExprCount; + + // pos of entrance subexpr. #Idx into tested in last Exec* + // string. First subexpr. has Idx=1, last - MatchCount, + // whole r.e. has Idx=0. + // Returns -1 if in r.e. no such subexpr. or this subexpr. + // not found in input string. + property MatchPos[Idx: integer]: PtrInt read GetMatchPos; + + // len of entrance subexpr. #Idx r.e. into tested in last Exec* + // string. First subexpr. has Idx=1, last - MatchCount, + // whole r.e. has Idx=0. + // Returns -1 if in r.e. no such subexpr. or this subexpr. + // not found in input string. + // Remember - MatchLen may be 0 (if r.e. match empty string) ! + property MatchLen[Idx: integer]: PtrInt read GetMatchLen; + + // == copy (InputString, MatchPos [Idx], MatchLen [Idx]) + // Returns '' if in r.e. no such subexpr. or this subexpr. + // not found in input string. + property Match[Idx: integer]: RegExprString read GetMatch; + + // get index of group (subexpression) by name, to support named groups + // like in Python: (?P<name>regex) + function MatchIndexFromName(const AName: RegExprString): integer; + + function MatchFromName(const AName: RegExprString): RegExprString; + + // Returns position in r.e. where compiler stopped. + // Useful for error diagnostics + property CompilerErrorPos: PtrInt read GetCompilerErrorPos; + + {$IFDEF UseSpaceChars} + // Contains chars, treated as /s (initially filled with RegExprSpaceChars + // global constant) + property SpaceChars: RegExprString read fSpaceChars write fSpaceChars; + // ###0.927 + {$ENDIF} + + {$IFDEF UseWordChars} + // Contains chars, treated as /w (initially filled with RegExprWordChars + // global constant) + property WordChars: RegExprString read fWordChars write fWordChars; + // ###0.929 + {$ENDIF} + + {$IFDEF UseLineSep} + // line separators (like \n in Unix) + property LineSeparators: RegExprString read fLineSeparators write SetLineSeparators; // ###0.941 + {$ENDIF} + + // support paired line-break CR LF + property UseLinePairedBreak: boolean read fUsePairedBreak write SetUsePairedBreak; + + property ReplaceLineEnd: RegExprString read fReplaceLineEnd write fReplaceLineEnd; + + property SlowChecksSizeMax: integer read fSlowChecksSizeMax write fSlowChecksSizeMax; + end; + +type + ERegExpr = class(Exception) + public + ErrorCode: integer; + CompilerErrorPos: PtrInt; + end; + + // true if string AInputString match regular expression ARegExpr + // ! will raise exeption if syntax errors in ARegExpr +function ExecRegExpr(const ARegExpr, AInputStr: RegExprString): boolean; + +// Split AInputStr into APieces by r.e. ARegExpr occurencies +procedure SplitRegExpr(const ARegExpr, AInputStr: RegExprString; + APieces: TStrings); + +// Returns AInputStr with r.e. occurencies replaced by AReplaceStr +// If AUseSubstitution is true, then AReplaceStr will be used +// as template for Substitution methods. +// For example: +// ReplaceRegExpr ('({-i}block|var)\s*\(\s*([^ ]*)\s*\)\s*', +// 'BLOCK( test1)', 'def "$1" value "$2"', True) +// will return: def 'BLOCK' value 'test1' +// ReplaceRegExpr ('({-i}block|var)\s*\(\s*([^ ]*)\s*\)\s*', +// 'BLOCK( test1)', 'def "$1" value "$2"') +// will return: def "$1" value "$2" +function ReplaceRegExpr(const ARegExpr, AInputStr, AReplaceStr: RegExprString; + AUseSubstitution: boolean{$IFDEF DefParam} = False{$ENDIF}): RegExprString; +{$IFDEF OverMeth}overload; // ###0.947 + +// Alternate form allowing to set more parameters. + +type + TRegexReplaceOption = ( + rroModifierI, + rroModifierR, + rroModifierS, + rroModifierG, + rroModifierM, + rroModifierX, + rroUseSubstitution, + rroUseOsLineEnd + ); + TRegexReplaceOptions = set of TRegexReplaceOption; + +function ReplaceRegExpr(const ARegExpr, AInputStr, AReplaceStr: RegExprString; + Options: TRegexReplaceOptions): RegExprString; overload; +{$ENDIF} +// Replace all metachars with its safe representation, +// for example 'abc$cd.(' converts into 'abc\$cd\.\(' +// This function useful for r.e. autogeneration from +// user input +function QuoteRegExprMetaChars(const AStr: RegExprString): RegExprString; +// Makes list of subexpressions found in ARegExpr r.e. +// In ASubExps every item represent subexpression, +// from first to last, in format: +// String - subexpression text (without '()') +// low word of Object - starting position in ARegExpr, including '(' +// if exists! (first position is 1) +// high word of Object - length, including starting '(' and ending ')' +// if exist! +// AExtendedSyntax - must be True if modifier /m will be On while +// using the r.e. +// Useful for GUI editors of r.e. etc (You can find example of using +// in TestRExp.dpr project) +// Returns +// 0 Success. No unbalanced brackets was found; +// -1 There are not enough closing brackets ')'; +// -(n+1) At position n was found opening '[' without //###0.942 +// corresponding closing ']'; +// n At position n was found closing bracket ')' without +// corresponding opening '('. +// If Result <> 0, then ASubExpr can contain empty items or illegal ones +function RegExprSubExpressions(const ARegExpr: string; ASubExprs: TStrings; + AExtendedSyntax: boolean{$IFDEF DefParam} = False{$ENDIF}): integer; + +implementation + +{$IFDEF FastUnicodeData} +uses + regexpr_unicodedata; +{$ENDIF} + +const + // TRegExpr.VersionMajor/Minor return values of these constants: + REVersionMajor = 1; + REVersionMinor = 148; + + OpKind_End = REChar(1); + OpKind_MetaClass = REChar(2); + OpKind_Range = REChar(3); + OpKind_Char = REChar(4); + OpKind_CategoryYes = REChar(5); + OpKind_CategoryNo = REChar(6); + + RegExprAllSet = [0 .. 255]; + RegExprWordSet = [Ord('a') .. Ord('z'), Ord('A') .. Ord('Z'), Ord('0') .. Ord('9'), Ord('_')]; + RegExprDigitSet = [Ord('0') .. Ord('9')]; + RegExprLowerAzSet = [Ord('a') .. Ord('z')]; + RegExprUpperAzSet = [Ord('A') .. Ord('Z')]; + RegExprAllAzSet = RegExprLowerAzSet + RegExprUpperAzSet; + RegExprSpaceSet = [Ord(' '), $9, $A, $D, $C]; + RegExprLineSeparatorsSet = [$d, $a, $b, $c] {$IFDEF UniCode} + [$85] {$ENDIF}; + RegExprHorzSeparatorsSet = [9, $20, $A0]; + + MaxBracesArg = $7FFFFFFF - 1; // max value for {n,m} arguments //###0.933 + +type + TRENextOff = PtrInt; + // internal Next "pointer" (offset to current p-code) //###0.933 + PRENextOff = ^TRENextOff; + // used for extracting Next "pointers" from compiled r.e. //###0.933 + TREBracesArg = integer; // type of {m,n} arguments + PREBracesArg = ^TREBracesArg; + + TREGroupKind = ( + gkNormalGroup, + gkNonCapturingGroup, + gkNamedGroupReference, + gkComment, + gkModifierString, + gkLookahead, + gkLookaheadNeg, + gkLookbehind, + gkLookbehindNeg, + gkRecursion, + gkSubCall + ); + +const + REOpSz = SizeOf(TREOp) div SizeOf(REChar); + // size of OP_ command in REChars + {$IFDEF FPC_REQUIRES_PROPER_ALIGNMENT} + // add space for aligning pointer + // -1 is the correct max size but also needed for InsertOperator that needs a multiple of pointer size + RENextOffSz = (2 * SizeOf(TRENextOff) div SizeOf(REChar)) - 1; + REBracesArgSz = (2 * SizeOf(TREBracesArg) div SizeOf(REChar)); + // add space for aligning pointer + {$ELSE} + RENextOffSz = (SizeOf(TRENextOff) div SizeOf(REChar)); + // size of Next pointer in REChars + REBracesArgSz = SizeOf(TREBracesArg) div SizeOf(REChar); + // size of BRACES arguments in REChars + {$ENDIF} + RENumberSz = SizeOf(LongInt) div SizeOf(REChar); + +function IsPairedBreak(p: PRegExprChar): boolean; {$IFDEF InlineFuncs}inline;{$ENDIF} +const + cBreak = {$IFDEF Unicode} $000D000A; {$ELSE} $0D0A; {$ENDIF} +type + PtrPair = {$IFDEF Unicode} ^LongInt; {$ELSE} ^Word; {$ENDIF} +begin + Result := PtrPair(p)^ = cBreak; +end; + +function _FindCharInBuffer(SBegin, SEnd: PRegExprChar; Ch: REChar): PRegExprChar; {$IFDEF InlineFuncs}inline;{$ENDIF} +begin + while SBegin < SEnd do + begin + if SBegin^ = Ch then + begin + Result := SBegin; + Exit; + end; + Inc(SBegin); + end; + Result := nil; +end; + +function IsIgnoredChar(AChar: REChar): boolean; {$IFDEF InlineFuncs}inline;{$ENDIF} +begin + case AChar of + ' ', #9, #$d, #$a: + Result := True + else + Result := False; + end; +end; + +function _IsMetaChar(AChar: REChar): boolean; {$IFDEF InlineFuncs}inline;{$ENDIF} +begin + case AChar of + 'd', 'D', + 's', 'S', + 'w', 'W', + 'v', 'V', + 'h', 'H': + Result := True + else + Result := False; + end; +end; + +function AlignToPtr(const p: Pointer): Pointer; {$IFDEF InlineFuncs}inline;{$ENDIF} +begin + {$IFDEF FPC_REQUIRES_PROPER_ALIGNMENT} + Result := Align(p, SizeOf(Pointer)); + {$ELSE} + Result := p; + {$ENDIF} +end; + +function AlignToInt(const p: Pointer): Pointer; {$IFDEF InlineFuncs}inline;{$ENDIF} +begin + {$IFDEF FPC_REQUIRES_PROPER_ALIGNMENT} + Result := Align(p, SizeOf(integer)); + {$ELSE} + Result := p; + {$ENDIF} +end; + +{$IFDEF FastUnicodeData} +function _UpperCase(Ch: REChar): REChar; inline; +begin + Result := CharUpperArray[Ord(Ch)]; +end; + +function _LowerCase(Ch: REChar): REChar; inline; +begin + Result := CharLowerArray[Ord(Ch)]; +end; + +{$ELSE} +function _UpperCase(Ch: REChar): REChar; +begin + Result := Ch; + if (Ch >= 'a') and (Ch <= 'z') then + begin + Dec(Result, 32); + Exit; + end; + if Ord(Ch) < 128 then + Exit; + + {$IFDEF FPC} + {$IFDEF UniCode} + Result := UnicodeUpperCase(Ch)[1]; + {$ELSE} + Result := AnsiUpperCase(Ch)[1]; + {$ENDIF} + {$ELSE} + {$IFDEF UniCode} + {$IFDEF D_XE4} + Result := Ch.ToUpper; + {$ELSE} + {$IFDEF D2009} + Result := TCharacter.ToUpper(Ch); + {$ENDIF} + {$ENDIF} + {$ELSE} + Result := AnsiUpperCase(Ch)[1]; + {$ENDIF} + {$ENDIF} +end; + +function _LowerCase(Ch: REChar): REChar; +begin + Result := Ch; + if (Ch >= 'A') and (Ch <= 'Z') then + begin + Inc(Result, 32); + Exit; + end; + if Ord(Ch) < 128 then + Exit; + + {$IFDEF FPC} + {$IFDEF UniCode} + Result := UnicodeLowerCase(Ch)[1]; + {$ELSE} + Result := AnsiLowerCase(Ch)[1]; + {$ENDIF} + {$ELSE} + {$IFDEF UniCode} + {$IFDEF D_XE4} + Result := Ch.ToLower; + {$ELSE} + {$IFDEF D2009} + Result := TCharacter.ToLower(Ch); + {$ENDIF} + {$ENDIF} + {$ELSE} + Result := AnsiLowerCase(Ch)[1]; + {$ENDIF} + {$ENDIF} +end; +{$ENDIF} + +function InvertCase(const Ch: REChar): REChar; {$IFDEF InlineFuncs}inline;{$ENDIF} +begin + Result := _UpperCase(Ch); + if Result = Ch then + Result := _LowerCase(Ch); +end; + +function _FindClosingBracket(P, PEnd: PRegExprChar): PRegExprChar; +var + Level: integer; +begin + Result := nil; + Level := 1; + repeat + if P >= PEnd then Exit; + case P^ of + EscChar: + Inc(P); + '(': + begin + Inc(Level); + end; + ')': + begin + Dec(Level); + if Level = 0 then + begin + Result := P; + Exit; + end; + end; + end; + Inc(P); + until False; +end; + +{$IFDEF UNICODEEX} +procedure IncUnicode(var p: PRegExprChar); {$IFDEF InlineFuncs}inline;{$ENDIF} +// make additional increment if we are on low-surrogate char +// no need to check p<fInputEnd, at the end of string we have chr(0) +var + ch: REChar; +begin + Inc(p); + ch := p^; + if (Ord(ch) >= $DC00) and (Ord(ch) <= $DFFF) then + Inc(p); +end; + +procedure IncUnicode2(var p: PRegExprChar; var N: integer); {$IFDEF InlineFuncs}inline;{$ENDIF} +var + ch: REChar; +begin + Inc(p); + Inc(N); + ch := p^; + if (Ord(ch) >= $DC00) and (Ord(ch) <= $DFFF) then + begin + Inc(p); + Inc(N); + end; +end; +{$ENDIF} + +{ ============================================================= } +{ ===================== Global functions ====================== } +{ ============================================================= } + +function IsModifiersEqual(const A, B: TRegExprModifiers): boolean; +begin + Result := + (A.I = B.I) and + (A.G = B.G) and + (A.M = B.M) and + (A.S = B.S) and + (A.R = B.R) and + (A.X = B.X); +end; + +function ParseModifiers(const APtr: PRegExprChar; + ALen: integer; + var AValue: TRegExprModifiers): boolean; +// Parse string and set AValue if it's in format 'ismxrg-ismxrg' +var + IsOn: boolean; + i: integer; +begin + Result := True; + IsOn := True; + for i := 0 to ALen-1 do + case APtr[i] of + '-': + IsOn := False; + 'I', 'i': + AValue.I := IsOn; + 'R', 'r': + AValue.R := IsOn; + 'S', 's': + AValue.S := IsOn; + 'G', 'g': + AValue.G := IsOn; + 'M', 'm': + AValue.M := IsOn; + 'X', 'x': + AValue.X := IsOn; + else + begin + Result := False; + Exit; + end; + end; +end; + +function ExecRegExpr(const ARegExpr, AInputStr: RegExprString): boolean; +var + r: TRegExpr; +begin + r := TRegExpr.Create; + try + r.Expression := ARegExpr; + Result := r.Exec(AInputStr); + finally + r.Free; + end; +end; { of function ExecRegExpr + -------------------------------------------------------------- } + +procedure SplitRegExpr(const ARegExpr, AInputStr: RegExprString; + APieces: TStrings); +var + r: TRegExpr; +begin + APieces.Clear; + r := TRegExpr.Create; + try + r.Expression := ARegExpr; + r.Split(AInputStr, APieces); + finally + r.Free; + end; +end; { of procedure SplitRegExpr + -------------------------------------------------------------- } + +function ReplaceRegExpr(const ARegExpr, AInputStr, AReplaceStr: RegExprString; + AUseSubstitution: boolean{$IFDEF DefParam} = False{$ENDIF}): RegExprString; +begin + with TRegExpr.Create do + try + Expression := ARegExpr; + Result := Replace(AInputStr, AReplaceStr, AUseSubstitution); + finally + Free; + end; +end; { of function ReplaceRegExpr + -------------------------------------------------------------- } +{$IFDEF OverMeth} + +function ReplaceRegExpr(const ARegExpr, AInputStr, AReplaceStr: RegExprString; + Options: TRegexReplaceOptions): RegExprString; overload; + +begin + with TRegExpr.Create do + try + ModifierI := (rroModifierI in Options); + ModifierR := (rroModifierR in Options); + ModifierS := (rroModifierS in Options); + ModifierG := (rroModifierG in Options); + ModifierM := (rroModifierM in Options); + ModifierX := (rroModifierX in Options); + // Set this after the above, if the regex contains modifiers, they will be applied. + Expression := ARegExpr; + if rroUseOsLineEnd in Options then + ReplaceLineEnd := sLineBreak + else + ReplaceLineEnd := #10; + Result := Replace(AInputStr, AReplaceStr, rroUseSubstitution in Options); + finally + Free; + end; +end; +{$ENDIF} + +(* +const + MetaChars_Init = '^$.[()|?+*' + EscChar + '{'; + MetaChars = MetaChars_Init; // not needed to be a variable, const is faster + MetaAll = MetaChars_Init + ']}'; // Very similar to MetaChars, but slighly changed. +*) + +function _IsMetaSymbol1(ch: REChar): boolean; {$IFDEF InlineFuncs}inline;{$ENDIF} +begin + case ch of + '^', '$', '.', '[', '(', ')', '|', '?', '+', '*', EscChar, '{': + Result := True + else + Result := False + end; +end; + +function _IsMetaSymbol2(ch: REChar): boolean; {$IFDEF InlineFuncs}inline;{$ENDIF} +begin + case ch of + '^', '$', '.', '[', '(', ')', '|', '?', '+', '*', EscChar, '{', + ']', '}': + Result := True + else + Result := False + end; +end; + +function QuoteRegExprMetaChars(const AStr: RegExprString): RegExprString; +var + i, i0, Len: integer; + ch: REChar; +begin + Result := ''; + Len := Length(AStr); + i := 1; + i0 := i; + while i <= Len do + begin + ch := AStr[i]; + if _IsMetaSymbol2(ch) then + begin + Result := Result + System.Copy(AStr, i0, i - i0) + EscChar + ch; + i0 := i + 1; + end; + Inc(i); + end; + Result := Result + System.Copy(AStr, i0, MaxInt); // Tail +end; { of function QuoteRegExprMetaChars + -------------------------------------------------------------- } + +function RegExprSubExpressions(const ARegExpr: string; ASubExprs: TStrings; + AExtendedSyntax: boolean{$IFDEF DefParam} = False{$ENDIF}): integer; +type + TStackItemRec = record // ###0.945 + SubExprIdx: integer; + StartPos: PtrInt; + end; + + TStackArray = packed array [0 .. RegexMaxMaxGroups - 1] of TStackItemRec; +var + Len, SubExprLen: integer; + i, i0: integer; + Modif: TRegExprModifiers; + Stack: ^TStackArray; // ###0.945 + StackIdx, StackSz: integer; +begin + Result := 0; // no unbalanced brackets found at this very moment + FillChar(Modif, SizeOf(Modif), 0); + ASubExprs.Clear; // I don't think that adding to non empty list + // can be useful, so I simplified algorithm to work only with empty list + + Len := Length(ARegExpr); // some optimization tricks + + // first we have to calculate number of subexpression to reserve + // space in Stack array (may be we'll reserve more than needed, but + // it's faster then memory reallocation during parsing) + StackSz := 1; // add 1 for entire r.e. + for i := 1 to Len do + if ARegExpr[i] = '(' then + Inc(StackSz); + // SetLength (Stack, StackSz); //###0.945 + GetMem(Stack, SizeOf(TStackItemRec) * StackSz); + + try + StackIdx := 0; + i := 1; + while (i <= Len) do + begin + case ARegExpr[i] of + '(': + begin + if (i < Len) and (ARegExpr[i + 1] = '?') then + begin + // this is not subexpression, but comment or other + // Perl extension. We must check is it (?ismxrg-ismxrg) + // and change AExtendedSyntax if /x is changed. + Inc(i, 2); // skip '(?' + i0 := i; + while (i <= Len) and (ARegExpr[i] <> ')') do + Inc(i); + if i > Len then + Result := -1 // unbalansed '(' + else + if ParseModifiers(@ARegExpr[i0], i - i0, Modif) then + // Alexey-T: original code had copy from i, not from i0 + AExtendedSyntax := Modif.X; + end + else + begin // subexpression starts + ASubExprs.Add(''); // just reserve space + with Stack[StackIdx] do + begin + SubExprIdx := ASubExprs.Count - 1; + StartPos := i; + end; + Inc(StackIdx); + end; + end; + ')': + begin + if StackIdx = 0 then + Result := i // unbalanced ')' + else + begin + Dec(StackIdx); + with Stack[StackIdx] do + begin + SubExprLen := i - StartPos + 1; + ASubExprs.Objects[SubExprIdx] := + TObject(StartPos or (SubExprLen ShL 16)); + ASubExprs[SubExprIdx] := System.Copy(ARegExpr, StartPos + 1, + SubExprLen - 2); // add without brackets + end; + end; + end; + EscChar: + Inc(i); // skip quoted symbol + '[': + begin + // we have to skip character ranges at once, because they can + // contain '#', and '#' in it must NOT be recognized as eXtended + // comment beginning! + i0 := i; + Inc(i); + if ARegExpr[i] = ']' // first ']' inside [] treated as simple char, no need to check '[' + then + Inc(i); + while (i <= Len) and (ARegExpr[i] <> ']') do + if ARegExpr[i] = EscChar // ###0.942 + then + Inc(i, 2) // skip 'escaped' char to prevent stopping at '\]' + else + Inc(i); + if (i > Len) or (ARegExpr[i] <> ']') // ###0.942 + then + Result := -(i0 + 1); // unbalansed '[' //###0.942 + end; + '#': + if AExtendedSyntax then + begin + // skip eXtended comments + while (i <= Len) and (ARegExpr[i] <> #$d) and (ARegExpr[i] <> #$a) + // do not use [#$d, #$a] due to UniCode compatibility + do + Inc(i); + while (i + 1 <= Len) and + ((ARegExpr[i + 1] = #$d) or (ARegExpr[i + 1] = #$a)) do + Inc(i); // attempt to work with different kinds of line separators + // now we are at the line separator that must be skipped. + end; + // here is no 'else' clause - we simply skip ordinary chars + end; // of case + Inc(i); // skip scanned char + // ! can move after Len due to skipping quoted symbol + end; + + // check brackets balance + if StackIdx <> 0 then + Result := -1; // unbalansed '(' + + // check if entire r.e. added + if (ASubExprs.Count = 0) or ((PtrInt(ASubExprs.Objects[0]) and $FFFF) <> 1) + or (((PtrInt(ASubExprs.Objects[0]) ShR 16) and $FFFF) <> Len) + // whole r.e. wasn't added because it isn't bracketed + // well, we add it now: + then + ASubExprs.InsertObject(0, ARegExpr, TObject((Len ShL 16) or 1)); + + finally + FreeMem(Stack); + end; +end; { of function RegExprSubExpressions + -------------------------------------------------------------- } + +const + OP_MAGIC = TREOp(216); // programm signature + + // name opcode opnd? meaning + OP_EEND = TREOp(0); // - End of program + OP_BOL = TREOp(1); // - Match "" at beginning of line + OP_EOL = TREOp(2); // - Match "" at end of line + OP_ANY = TREOp(3); // - Match any one character + OP_ANYOF = TREOp(4); // Str Match any character in string Str + OP_ANYBUT = TREOp(5); // Str Match any char. not in string Str + OP_BRANCH = TREOp(6); // Node Match this alternative, or the next + OP_BACK = TREOp(7); // - Jump backward (Next < 0) + OP_EXACTLY = TREOp(8); // Str Match string Str + OP_NOTHING = TREOp(9); // - Match empty string + OP_STAR = TREOp(10); // Node Match this (simple) thing 0 or more times + OP_PLUS = TREOp(11); // Node Match this (simple) thing 1 or more times + OP_ANYDIGIT = TREOp(12); // - Match any digit (equiv [0-9]) + OP_NOTDIGIT = TREOp(13); // - Match not digit (equiv [0-9]) + OP_ANYLETTER = TREOp(14); // - Match any letter from property WordChars + OP_NOTLETTER = TREOp(15); // - Match not letter from property WordChars + OP_ANYSPACE = TREOp(16); // - Match any space char (see property SpaceChars) + OP_NOTSPACE = TREOp(17); // - Match not space char (see property SpaceChars) + OP_BRACES = TREOp(18); + // Node,Min,Max Match this (simple) thing from Min to Max times. + // Min and Max are TREBracesArg + OP_COMMENT = TREOp(19); // - Comment ;) + OP_EXACTLYCI = TREOp(20); // Str Match string Str case insensitive + OP_ANYOFCI = TREOp(21); + // Str Match any character in string Str, case insensitive + OP_ANYBUTCI = TREOp(22); + // Str Match any char. not in string Str, case insensitive + OP_LOOPENTRY = TREOp(23); // Node Start of loop (Node - LOOP for this loop) + OP_LOOP = TREOp(24); // Node,Min,Max,LoopEntryJmp - back jump for LOOPENTRY. + // Min and Max are TREBracesArg + // Node - next node in sequence, + // LoopEntryJmp - associated LOOPENTRY node addr + OP_EOL2 = TReOp(25); // like OP_EOL but also matches before final line-break + OP_BSUBEXP = TREOp(28); + // Idx Match previously matched subexpression #Idx (stored as REChar) //###0.936 + OP_BSUBEXPCI = TREOp(29); // Idx -"- in case-insensitive mode + + // Non-Greedy Style Ops //###0.940 + OP_STARNG = TREOp(30); // Same as OP_START but in non-greedy mode + OP_PLUSNG = TREOp(31); // Same as OP_PLUS but in non-greedy mode + OP_BRACESNG = TREOp(32); // Same as OP_BRACES but in non-greedy mode + OP_LOOPNG = TREOp(33); // Same as OP_LOOP but in non-greedy mode + + // Multiline mode \m + OP_BOLML = TREOp(34); // - Match "" at beginning of line + OP_EOLML = TREOp(35); // - Match "" at end of line + OP_ANYML = TREOp(36); // - Match any one character + + // Word boundary + OP_BOUND = TREOp(37); // Match "" between words //###0.943 + OP_NOTBOUND = TREOp(38); // Match "" not between words //###0.943 + + OP_ANYHORZSEP = TREOp(39); // Any horizontal whitespace \h + OP_NOTHORZSEP = TREOp(40); // Not horizontal whitespace \H + OP_ANYVERTSEP = TREOp(41); // Any vertical whitespace \v + OP_NOTVERTSEP = TREOp(42); // Not vertical whitespace \V + + OP_ANYCATEGORY = TREOp(43); // \p{L} + OP_NOTCATEGORY = TREOp(44); // \P{L} + + OP_STAR_POSS = TReOp(45); + OP_PLUS_POSS = TReOp(46); + OP_BRACES_POSS = TReOp(47); + + OP_RECUR = TReOp(48); + + // !!! Change OP_OPEN value if you add new opcodes !!! + + OP_OPEN = TREOp(50); // Opening of group; OP_OPEN+i is for group i + OP_OPEN_FIRST = Succ(OP_OPEN); + OP_OPEN_LAST = TREOp(Ord(OP_OPEN) + RegexMaxGroups - 1); + + OP_CLOSE = Succ(OP_OPEN_LAST); // Closing of group; OP_CLOSE+i is for group i + OP_CLOSE_FIRST = Succ(OP_CLOSE); + OP_CLOSE_LAST = TReOp(Ord(OP_CLOSE) + RegexMaxGroups - 1); + + OP_SUBCALL = Succ(OP_CLOSE_LAST); // Call of subroutine; OP_SUBCALL+i is for group i + OP_SUBCALL_FIRST = Succ(OP_SUBCALL); + OP_SUBCALL_LAST = + {$IFDEF Unicode} + TReOp(Ord(OP_SUBCALL) + RegexMaxGroups - 1); + {$ELSE} + High(REChar); // must fit to 0..255 range + {$ENDIF} + + // We work with p-code through pointers, compatible with PRegExprChar. + // Note: all code components (TRENextOff, TREOp, TREBracesArg, etc) + // must have lengths that can be divided by SizeOf (REChar) ! + // A node is TREOp of opcode followed Next "pointer" of TRENextOff type. + // The Next is a offset from the opcode of the node containing it. + // An operand, if any, simply follows the node. (Note that much of + // the code generation knows about this implicit relationship!) + // Using TRENextOff=PtrInt speed up p-code processing. + + // Opcodes description: + // + // BRANCH The set of branches constituting a single choice are hooked + // together with their "next" pointers, since precedence prevents + // anything being concatenated to any individual branch. The + // "next" pointer of the last BRANCH in a choice points to the + // thing following the whole choice. This is also where the + // final "next" pointer of each individual branch points; each + // branch starts with the operand node of a BRANCH node. + // BACK Normal "next" pointers all implicitly point forward; BACK + // exists to make loop structures possible. + // STAR,PLUS,BRACES '?', and complex '*' and '+', are implemented as + // circular BRANCH structures using BACK. Complex '{min,max}' + // - as pair LOOPENTRY-LOOP (see below). Simple cases (one + // character per match) are implemented with STAR, PLUS and + // BRACES for speed and to minimize recursive plunges. + // LOOPENTRY,LOOP {min,max} are implemented as special pair + // LOOPENTRY-LOOP. Each LOOPENTRY initialize loopstack for + // current level. + // OPEN,CLOSE are numbered at compile time. + + { ============================================================= } + { ================== Error handling section =================== } + { ============================================================= } + +const + reeOk = 0; + reeCompNullArgument = 100; + reeUnknownMetaSymbol = 101; + reeCompParseRegTooManyBrackets = 102; + reeCompParseRegUnmatchedBrackets = 103; + reeCompParseRegUnmatchedBrackets2 = 104; + reeCompParseRegJunkOnEnd = 105; + reePlusStarOperandCouldBeEmpty = 106; + reeNestedQuantif = 107; + reeBadHexDigit = 108; + reeInvalidRange = 109; + reeParseAtomTrailingBackSlash = 110; + reeNoHexCodeAfterBSlashX = 111; + reeHexCodeAfterBSlashXTooBig = 112; + reeUnmatchedSqBrackets = 113; + reeInternalUrp = 114; + reeQuantifFollowsNothing = 115; + reeTrailingBackSlash = 116; + reeNoLetterAfterBSlashC = 117; + reeMetaCharAfterMinusInRange = 118; + reeRarseAtomInternalDisaster = 119; + reeIncorrectSpecialBrackets = 120; + reeIncorrectBraces = 121; + reeBRACESArgTooBig = 122; + reeUnknownOpcodeInFillFirst = 123; + reeBracesMinParamGreaterMax = 124; + reeUnclosedComment = 125; + reeComplexBracesNotImplemented = 126; + reeUnrecognizedModifier = 127; + reeBadLinePairedSeparator = 128; + reeBadUnicodeCategory = 129; + reeTooSmallCheckersArray = 130; + reePossessiveAfterComplexBraces = 131; + reeBadRecursion = 132; + reeBadSubCall = 133; + reeNamedGroupBad = 140; + reeNamedGroupBadName = 141; + reeNamedGroupBadRef = 142; + reeNamedGroupDupName = 143; + reeLookaheadBad = 150; + reeLookbehindBad = 152; + reeLookbehindTooComplex = 153; + reeLookaroundNotAtEdge = 154; + // Runtime errors must be >= reeFirstRuntimeCode + reeFirstRuntimeCode = 1000; + reeRegRepeatCalledInappropriately = 1000; + reeMatchPrimMemoryCorruption = 1001; + reeMatchPrimCorruptedPointers = 1002; + reeNoExpression = 1003; + reeCorruptedProgram = 1004; + reeOffsetMustBePositive = 1006; + reeExecNextWithoutExec = 1007; + reeBadOpcodeInCharClass = 1008; + reeDumpCorruptedOpcode = 1011; + reeModifierUnsupported = 1013; + reeLoopStackExceeded = 1014; + reeLoopWithoutEntry = 1015; + +function TRegExpr.ErrorMsg(AErrorID: integer): RegExprString; +begin + case AErrorID of + reeOk: + Result := 'No errors'; + reeCompNullArgument: + Result := 'TRegExpr compile: null argument'; + reeUnknownMetaSymbol: + Result := 'TRegExpr compile: unknown meta-character: \' + fLastErrorSymbol; + reeCompParseRegTooManyBrackets: + Result := 'TRegExpr compile: ParseReg: too many ()'; + reeCompParseRegUnmatchedBrackets: + Result := 'TRegExpr compile: ParseReg: unmatched ()'; + reeCompParseRegUnmatchedBrackets2: + Result := 'TRegExpr compile: ParseReg: unmatched ()'; + reeCompParseRegJunkOnEnd: + Result := 'TRegExpr compile: ParseReg: junk at end'; + reePlusStarOperandCouldBeEmpty: + Result := 'TRegExpr compile: *+ operand could be empty'; + reeNestedQuantif: + Result := 'TRegExpr compile: nested quantifier *?+'; + reeBadHexDigit: + Result := 'TRegExpr compile: bad hex digit'; + reeInvalidRange: + Result := 'TRegExpr compile: invalid [] range'; + reeParseAtomTrailingBackSlash: + Result := 'TRegExpr compile: parse atom trailing \'; + reeNoHexCodeAfterBSlashX: + Result := 'TRegExpr compile: no hex code after \x'; + reeNoLetterAfterBSlashC: + Result := 'TRegExpr compile: no letter "A".."Z" after \c'; + reeMetaCharAfterMinusInRange: + Result := 'TRegExpr compile: metachar after "-" in [] range'; + reeHexCodeAfterBSlashXTooBig: + Result := 'TRegExpr compile: hex code after \x is too big'; + reeUnmatchedSqBrackets: + Result := 'TRegExpr compile: unmatched []'; + reeInternalUrp: + Result := 'TRegExpr compile: internal fail on char "|", ")"'; + reeQuantifFollowsNothing: + Result := 'TRegExpr compile: quantifier ?+*{ follows nothing'; + reeTrailingBackSlash: + Result := 'TRegExpr compile: trailing \'; + reeRarseAtomInternalDisaster: + Result := 'TRegExpr compile: RarseAtom internal disaster'; + reeIncorrectSpecialBrackets: + Result := 'TRegExpr compile: incorrect expression in (?...) brackets'; + reeIncorrectBraces: + Result := 'TRegExpr compile: incorrect {} braces'; + reeBRACESArgTooBig: + Result := 'TRegExpr compile: braces {} argument too big'; + reeUnknownOpcodeInFillFirst: + Result := 'TRegExpr compile: unknown opcode in FillFirstCharSet ('+DumpOp(fLastErrorOpcode)+')'; + reeBracesMinParamGreaterMax: + Result := 'TRegExpr compile: braces {} min param greater then max'; + reeUnclosedComment: + Result := 'TRegExpr compile: unclosed (?#comment)'; + reeComplexBracesNotImplemented: + Result := 'TRegExpr compile: if you use braces {} and non-greedy ops *?, +?, ?? for complex cases, enable {$DEFINE ComplexBraces}'; + reeUnrecognizedModifier: + Result := 'TRegExpr compile: incorrect modifier in (?...)'; + reeBadLinePairedSeparator: + Result := 'TRegExpr compile: LinePairedSeparator must countain two different chars or be empty'; + reeBadUnicodeCategory: + Result := 'TRegExpr compile: invalid category after \p or \P'; + reeTooSmallCheckersArray: + Result := 'TRegExpr compile: too small CharCheckers array'; + reePossessiveAfterComplexBraces: + Result := 'TRegExpr compile: possessive + after complex braces: (foo){n,m}+'; + reeBadRecursion: + Result := 'TRegExpr compile: bad recursion (?R)'; + reeBadSubCall: + Result := 'TRegExpr compile: bad subroutine call'; + reeNamedGroupBad: + Result := 'TRegExpr compile: bad named group'; + reeNamedGroupBadName: + Result := 'TRegExpr compile: bad identifier in named group'; + reeNamedGroupBadRef: + Result := 'TRegExpr compile: bad back-reference to named group'; + reeNamedGroupDupName: + Result := 'TRegExpr compile: named group defined more than once'; + reeLookaheadBad: + Result := 'TRegExpr compile: bad lookahead'; + reeLookbehindBad: + Result := 'TRegExpr compile: bad lookbehind'; + reeLookbehindTooComplex: + Result := 'TRegExpr compile: lookbehind (?<!foo) must have fixed length'; + reeLookaroundNotAtEdge: + Result := 'TRegExpr compile: lookaround brackets must be at the very beginning/ending'; + + reeRegRepeatCalledInappropriately: + Result := 'TRegExpr exec: RegRepeat called inappropriately'; + reeMatchPrimMemoryCorruption: + Result := 'TRegExpr exec: MatchPrim memory corruption'; + reeMatchPrimCorruptedPointers: + Result := 'TRegExpr exec: MatchPrim corrupted pointers'; + reeNoExpression: + Result := 'TRegExpr exec: empty expression'; + reeCorruptedProgram: + Result := 'TRegExpr exec: corrupted opcode (no magic byte)'; + reeOffsetMustBePositive: + Result := 'TRegExpr exec: offset must be >0'; + reeExecNextWithoutExec: + Result := 'TRegExpr exec: ExecNext without Exec(Pos)'; + reeBadOpcodeInCharClass: + Result := 'TRegExpr exec: invalid opcode in char class'; + reeDumpCorruptedOpcode: + Result := 'TRegExpr dump: corrupted opcode'; + reeLoopStackExceeded: + Result := 'TRegExpr exec: loop stack exceeded'; + reeLoopWithoutEntry: + Result := 'TRegExpr exec: loop without loop entry'; + else + Result := 'Unknown error'; + end; +end; { of procedure TRegExpr.Error + -------------------------------------------------------------- } + +function TRegExpr.LastError: integer; +begin + Result := fLastError; + fLastError := reeOk; +end; { of function TRegExpr.LastError + -------------------------------------------------------------- } + +{ ============================================================= } +{ ===================== Common section ======================== } +{ ============================================================= } + +class function TRegExpr.VersionMajor: integer; +begin + Result := REVersionMajor; +end; + +class function TRegExpr.VersionMinor: integer; +begin + Result := REVersionMinor; +end; + +constructor TRegExpr.Create; +begin + inherited; + programm := nil; + fExpression := ''; + fInputString := ''; + + FillChar(fModifiers, SizeOf(fModifiers), 0); + ModifierI := RegExprModifierI; + ModifierR := RegExprModifierR; + ModifierS := RegExprModifierS; + ModifierG := RegExprModifierG; + ModifierM := RegExprModifierM; + ModifierX := RegExprModifierX; + + {$IFDEF UseSpaceChars} + SpaceChars := RegExprSpaceChars; + {$ENDIF} + {$IFDEF UseWordChars} + WordChars := RegExprWordChars; + {$ENDIF} + + {$IFDEF UseLineSep} + fLineSeparators := RegExprLineSeparators; + {$ENDIF} + + fUsePairedBreak := RegExprUsePairedBreak; + fReplaceLineEnd := RegExprReplaceLineBreak; + + fSlowChecksSizeMax := 2000; + + {$IFDEF UseLineSep} + InitLineSepArray; + {$ENDIF} + + InitCharCheckers; +end; { of constructor TRegExpr.Create + -------------------------------------------------------------- } + +{$IFDEF OverMeth} +constructor TRegExpr.Create(const AExpression: RegExprString); +begin + Create; + Expression := AExpression; +end; +{$ENDIF} + +destructor TRegExpr.Destroy; +begin + if programm <> nil then + begin + FreeMem(programm); + programm := nil; + end; + + if Assigned(fHelper) then + FreeAndNil(fHelper); +end; + +procedure TRegExpr.SetExpression(const AStr: RegExprString); +begin + if (AStr <> fExpression) or not IsCompiled then + begin + fExpression := AStr; + UniqueString(fExpression); + fRegexStart := PRegExprChar(fExpression); + fRegexEnd := fRegexStart + Length(fExpression); + InvalidateProgramm; + end; +end; { of procedure TRegExpr.SetExpression + -------------------------------------------------------------- } + +function TRegExpr.GetSubExprCount: integer; +begin + // if nothing found, we must return -1 per TRegExpr docs + if GrpStart[0] = nil then + Result := -1 + else + Result := GrpCount; +end; + +function TRegExpr.GetMatchPos(Idx: integer): PtrInt; +begin + Idx := GrpIndexes[Idx]; + if (Idx >= 0) and (GrpStart[Idx] <> nil) then + Result := GrpStart[Idx] - fInputStart + 1 + else + Result := -1; +end; { of function TRegExpr.GetMatchPos + -------------------------------------------------------------- } + +function TRegExpr.GetMatchLen(Idx: integer): PtrInt; +begin + Idx := GrpIndexes[Idx]; + if (Idx >= 0) and (GrpStart[Idx] <> nil) then + Result := GrpEnd[Idx] - GrpStart[Idx] + else + Result := -1; +end; { of function TRegExpr.GetMatchLen + -------------------------------------------------------------- } + +function TRegExpr.GetMatch(Idx: integer): RegExprString; +begin + //Result := ''; + Result := #0; + Idx := GrpIndexes[Idx]; + if (Idx >= 0) and (GrpEnd[Idx] > GrpStart[Idx]) then + SetString(Result, GrpStart[Idx], GrpEnd[Idx] - GrpStart[Idx]); +end; { of function TRegExpr.GetMatch + -------------------------------------------------------------- } + +function TRegExpr.MatchIndexFromName(const AName: RegExprString): integer; +var + i: integer; +begin + for i := 1 {not 0} to GrpCount do + if GrpNames[i] = AName then + begin + Result := i; + Exit; + end; + Result := -1; +end; + +function TRegExpr.MatchFromName(const AName: RegExprString): RegExprString; +var + Idx: integer; +begin + Idx := MatchIndexFromName(AName); + if Idx >= 0 then + Result := GetMatch(Idx) + else + Result := ''; +end; + +function TRegExpr.GetModifierStr: RegExprString; +begin + Result := '-'; + + if ModifierI then + Result := 'i' + Result + else + Result := Result + 'i'; + if ModifierR then + Result := 'r' + Result + else + Result := Result + 'r'; + if ModifierS then + Result := 's' + Result + else + Result := Result + 's'; + if ModifierG then + Result := 'g' + Result + else + Result := Result + 'g'; + if ModifierM then + Result := 'm' + Result + else + Result := Result + 'm'; + if ModifierX then + Result := 'x' + Result + else + Result := Result + 'x'; + + if Result[Length(Result)] = '-' // remove '-' if all modifiers are 'On' + then + System.Delete(Result, Length(Result), 1); +end; { of function TRegExpr.GetModifierStr + -------------------------------------------------------------- } + +procedure TRegExpr.SetModifierG(AValue: boolean); +begin + fModifiers.G := AValue; +end; + +procedure TRegExpr.SetModifierI(AValue: boolean); +begin + fModifiers.I := AValue; +end; + +procedure TRegExpr.SetModifierM(AValue: boolean); +begin + fModifiers.M := AValue; +end; + +procedure TRegExpr.SetModifierR(AValue: boolean); +begin + fModifiers.R := AValue; +end; + +procedure TRegExpr.SetModifierS(AValue: boolean); +begin + fModifiers.S := AValue; +end; + +procedure TRegExpr.SetModifierX(AValue: boolean); +begin + fModifiers.X := AValue; +end; + +procedure TRegExpr.SetModifierStr(const AStr: RegExprString); +begin + if not ParseModifiers(PRegExprChar(AStr), Length(AStr), fModifiers) then + Error(reeModifierUnsupported); +end; { of procedure TRegExpr.SetModifierStr + -------------------------------------------------------------- } + +{ ============================================================= } +{ ==================== Compiler section ======================= } +{ ============================================================= } + +{$IFDEF FastUnicodeData} +function TRegExpr.IsWordChar(AChar: REChar): boolean; +begin + // bit 7 in value: is word char + Result := CharCategoryArray[Ord(AChar)] and 128 <> 0; +end; + +(* + // Unicode General Category + UGC_UppercaseLetter = 0; Lu + UGC_LowercaseLetter = 1; Ll + UGC_TitlecaseLetter = 2; Lt + UGC_ModifierLetter = 3; Lm + UGC_OtherLetter = 4; Lo + + UGC_NonSpacingMark = 5; Mn + UGC_CombiningMark = 6; Mc + UGC_EnclosingMark = 7; Me + + UGC_DecimalNumber = 8; Nd + UGC_LetterNumber = 9; Nl + UGC_OtherNumber = 10; No + + UGC_ConnectPunctuation = 11; Pc + UGC_DashPunctuation = 12; Pd + UGC_OpenPunctuation = 13; Ps + UGC_ClosePunctuation = 14; Pe + UGC_InitialPunctuation = 15; Pi + UGC_FinalPunctuation = 16; Pf + UGC_OtherPunctuation = 17; Po + + UGC_MathSymbol = 18; Sm + UGC_CurrencySymbol = 19; Sc + UGC_ModifierSymbol = 20; Sk + UGC_OtherSymbol = 21; So + + UGC_SpaceSeparator = 22; Zs + UGC_LineSeparator = 23; Zl + UGC_ParagraphSeparator = 24; Zp + + UGC_Control = 25; Cc + UGC_Format = 26; Cf + UGC_Surrogate = 27; Cs + UGC_PrivateUse = 28; Co + UGC_Unassigned = 29; Cn +*) + +const + CategoryNames: array[0..29] of array[0..1] of REChar = ( + ('L', 'u'), + ('L', 'l'), + ('L', 't'), + ('L', 'm'), + ('L', 'o'), + ('M', 'n'), + ('M', 'c'), + ('M', 'e'), + ('N', 'd'), + ('N', 'l'), + ('N', 'o'), + ('P', 'c'), + ('P', 'd'), + ('P', 's'), + ('P', 'e'), + ('P', 'i'), + ('P', 'f'), + ('P', 'o'), + ('S', 'm'), + ('S', 'c'), + ('S', 'k'), + ('S', 'o'), + ('Z', 's'), + ('Z', 'l'), + ('Z', 'p'), + ('C', 'c'), + ('C', 'f'), + ('C', 's'), + ('C', 'o'), + ('C', 'n') + ); + +function IsCategoryFirstChar(AChar: REChar): boolean; {$IFDEF InlineFuncs}inline;{$ENDIF} +begin + case AChar of + 'L', 'M', 'N', 'P', 'S', 'C', 'Z': + Result := True; + else + Result := False; + end; +end; + +function IsCategoryChars(AChar, AChar2: REChar): boolean; +var + i: integer; +begin + for i := Low(CategoryNames) to High(CategoryNames) do + if (AChar = CategoryNames[i][0]) then + if (AChar2 = CategoryNames[i][1]) then + begin + Result := True; + Exit + end; + Result := False; +end; + +function CheckCharCategory(AChar: REChar; Ch0, Ch1: REChar): boolean; +// AChar: check this char against opcode +// Ch0, Ch1: opcode operands after OP_*CATEGORY +var + N: byte; + Name0, Name1: REChar; +begin + Result := False; + // bits 0..6 are category + N := CharCategoryArray[Ord(AChar)] and 127; + if N <= High(CategoryNames) then + begin + Name0 := CategoryNames[N][0]; + Name1 := CategoryNames[N][1]; + if Ch0 <> Name0 then Exit; + if Ch1 <> #0 then + if Ch1 <> Name1 then Exit; + Result := True; + end; +end; + +function MatchOneCharCategory(opnd, scan: PRegExprChar): boolean; {$IFDEF InlineFuncs}inline;{$ENDIF} +// opnd: points to opcode operands after OP_*CATEGORY +// scan: points into InputString +begin + Result := CheckCharCategory(scan^, opnd^, (opnd + 1)^); +end; + +{$ELSE} +function TRegExpr.IsWordChar(AChar: REChar): boolean; +begin + {$IFDEF UseWordChars} + Result := Pos(AChar, fWordChars) > 0; + {$ELSE} + case AChar of + 'a' .. 'z', + 'A' .. 'Z', + '0' .. '9', '_': + Result := True + else + Result := False; + end; + {$ENDIF} +end; +{$ENDIF} + +function TRegExpr.IsSpaceChar(AChar: REChar): boolean; +begin + {$IFDEF UseSpaceChars} + Result := Pos(AChar, fSpaceChars) > 0; + {$ELSE} + case AChar of + ' ', #$9, #$A, #$D, #$C: + Result := True + else + Result := False; + end; + {$ENDIF} +end; + +function TRegExpr.IsCustomLineSeparator(AChar: REChar): boolean; +begin + {$IFDEF UseLineSep} + {$IFDEF UniCode} + Result := Pos(AChar, fLineSeparators) > 0; + {$ELSE} + Result := fLineSepArray[byte(AChar)]; + {$ENDIF} + {$ELSE} + case AChar of + #$d, #$a, + {$IFDEF UniCode} + #$85, #$2028, #$2029, + {$ENDIF} + #$b, #$c: + Result := True; + else + Result := False; + end; + {$ENDIF} +end; + +function IsDigitChar(AChar: REChar): boolean; {$IFDEF InlineFuncs}inline;{$ENDIF} +begin + case AChar of + '0' .. '9': + Result := True; + else + Result := False; + end; +end; + +function IsHorzSeparator(AChar: REChar): boolean; {$IFDEF InlineFuncs}inline;{$ENDIF} +begin + // Tab and Unicode categoty "Space Separator": https://www.compart.com/en/unicode/category/Zs + case AChar of + #9, #$20, #$A0: + Result := True; + {$IFDEF UniCode} + #$1680, #$2000 .. #$200A, #$202F, #$205F, #$3000: + Result := True; + {$ENDIF} + else + Result := False; + end; +end; + +function IsVertLineSeparator(AChar: REChar): boolean; {$IFDEF InlineFuncs}inline;{$ENDIF} +begin + case AChar of + #$d, #$a, #$b, #$c: + Result := True; + {$IFDEF UniCode} + #$2028, #$2029, #$85: + Result := True; + {$ENDIF} + else + Result := False; + end; +end; + +procedure TRegExpr.InvalidateProgramm; +begin + if programm <> nil then + begin + FreeMem(programm); + programm := nil; + end; +end; { of procedure TRegExpr.InvalidateProgramm + -------------------------------------------------------------- } + +procedure TRegExpr.Compile; +begin + if fExpression = '' then + begin + Error(reeNoExpression); + Exit; + end; + + CompileRegExpr(fRegexStart); +end; { of procedure TRegExpr.Compile + -------------------------------------------------------------- } + +{$IFDEF UseLineSep} +procedure TRegExpr.InitLineSepArray; +{$IFNDEF UniCode} +var + i: integer; +{$ENDIF} +begin + {$IFNDEF UniCode} + FillChar(fLineSepArray, SizeOf(fLineSepArray), 0); + for i := 1 to Length(fLineSeparators) do + fLineSepArray[byte(fLineSeparators[i])] := True; + {$ENDIF} +end; +{$ENDIF} + +function TRegExpr.IsProgrammOk: boolean; +begin + Result := False; + + // check modifiers + if not IsModifiersEqual(fModifiers, fProgModifiers) then + InvalidateProgramm; + + // compile if needed + if programm = nil then + begin + Compile; + // Check compiled programm + if programm = nil then + Exit; + end; + + if programm[0] <> OP_MAGIC then + Error(reeCorruptedProgram) + else + Result := True; +end; { of function TRegExpr.IsProgrammOk + -------------------------------------------------------------- } + +procedure TRegExpr.Tail(p: PRegExprChar; val: PRegExprChar); +// set the next-pointer at the end of a node chain +var + scan: PRegExprChar; + temp: PRegExprChar; +begin + if p = @regDummy then + Exit; + // Find last node. + scan := p; + repeat + temp := regNext(scan); + if temp = nil then + Break; + scan := temp; + until False; + // Set Next 'pointer' + if val < scan then + PRENextOff(AlignToPtr(scan + REOpSz))^ := -(scan - val) // ###0.948 + // work around PWideChar subtraction bug (Delphi uses + // shr after subtraction to calculate widechar distance %-( ) + // so, if difference is negative we have .. the "feature" :( + // I could wrap it in $IFDEF UniCode, but I didn't because + // "P – Q computes the difference between the address given + // by P (the higher address) and the address given by Q (the + // lower address)" - Delphi help quotation. + else + PRENextOff(AlignToPtr(scan + REOpSz))^ := val - scan; // ###0.933 +end; { of procedure TRegExpr.Tail + -------------------------------------------------------------- } + +procedure TRegExpr.OpTail(p: PRegExprChar; val: PRegExprChar); +// regtail on operand of first argument; nop if operandless +begin + // "Operandless" and "op != OP_BRANCH" are synonymous in practice. + if (p = nil) or (p = @regDummy) or (PREOp(p)^ <> OP_BRANCH) then + Exit; + Tail(p + REOpSz + RENextOffSz, val); // ###0.933 +end; { of procedure TRegExpr.OpTail + -------------------------------------------------------------- } + +function TRegExpr.EmitNode(op: TREOp): PRegExprChar; // ###0.933 +// emit a node, return location +begin + Result := regCode; + if Result <> @regDummy then + begin + PREOp(regCode)^ := op; + Inc(regCode, REOpSz); + PRENextOff(AlignToPtr(regCode))^ := 0; // Next "pointer" := nil + Inc(regCode, RENextOffSz); + + if (op = OP_EXACTLY) or (op = OP_EXACTLYCI) then + regExactlyLen := PLongInt(regCode) + else + regExactlyLen := nil; + + {$IFDEF DebugSynRegExpr} + if regcode - programm > regsize then + raise Exception.Create('TRegExpr.EmitNode buffer overrun'); + {$ENDIF} + end + else + Inc(regCodeSize, REOpSz + RENextOffSz); + // compute code size without code generation +end; { of function TRegExpr.EmitNode + -------------------------------------------------------------- } + +procedure TRegExpr.EmitC(ch: REChar); +begin + if regCode <> @regDummy then + begin + regCode^ := ch; + Inc(regCode); + {$IFDEF DebugSynRegExpr} + if regcode - programm > regsize then + raise Exception.Create('TRegExpr.EmitC buffer overrun'); + {$ENDIF} + end + else + Inc(regCodeSize, REOpSz); // Type of p-code pointer always is ^REChar +end; { of procedure TRegExpr.EmitC + -------------------------------------------------------------- } + +procedure TRegExpr.EmitInt(AValue: LongInt); +begin + if regCode <> @regDummy then + begin + PLongInt(regCode)^ := AValue; + Inc(regCode, RENumberSz); + {$IFDEF DebugSynRegExpr} + if regcode - programm > regsize then + raise Exception.Create('TRegExpr.EmitInt buffer overrun'); + {$ENDIF} + end + else + Inc(regCodeSize, RENumberSz); +end; + +function TRegExpr.EmitGroupRef(AIndex: integer; AIgnoreCase: boolean): PRegExprChar; +begin + if AIgnoreCase then + Result := EmitNode(OP_BSUBEXPCI) + else + Result := EmitNode(OP_BSUBEXP); + EmitC(REChar(AIndex)); +end; + +{$IFDEF FastUnicodeData} +procedure TRegExpr.FindCategoryName(var scan: PRegExprChar; var ch1, ch2: REChar); +// scan: points into regex string after '\p', to find category name +// ch1, ch2: 2-char name of category; ch2 can be #0 +var + ch: REChar; + pos1, pos2, namePtr: PRegExprChar; + nameLen: integer; +begin + ch1 := #0; + ch2 := #0; + ch := scan^; + if IsCategoryFirstChar(ch) then + begin + ch1 := ch; + Exit; + end; + if ch = '{' then + begin + pos1 := scan; + pos2 := pos1; + while (pos2 < fRegexEnd) and (pos2^ <> '}') do + Inc(pos2); + if pos2 >= fRegexEnd then + Error(reeIncorrectBraces); + + namePtr := pos1+1; + nameLen := pos2-pos1-1; + Inc(scan, nameLen+1); + + if nameLen<1 then + Error(reeBadUnicodeCategory); + if nameLen>2 then + Error(reeBadUnicodeCategory); + + if nameLen = 1 then + begin + ch1 := namePtr^; + ch2 := #0; + if not IsCategoryFirstChar(ch1) then + Error(reeBadUnicodeCategory); + Exit; + end; + + if nameLen = 2 then + begin + ch1 := namePtr^; + ch2 := (namePtr+1)^; + if not IsCategoryChars(ch1, ch2) then + Error(reeBadUnicodeCategory); + Exit; + end; + end + else + Error(reeBadUnicodeCategory); +end; + +function TRegExpr.EmitCategoryMain(APositive: boolean): PRegExprChar; +var + ch, ch2: REChar; +begin + Inc(regParse); + if regParse >= fRegexEnd then + Error(reeBadUnicodeCategory); + FindCategoryName(regParse, ch, ch2); + if APositive then + Result := EmitNode(OP_ANYCATEGORY) + else + Result := EmitNode(OP_NOTCATEGORY); + EmitC(ch); + EmitC(ch2); +end; +{$ENDIF} + +procedure TRegExpr.InsertOperator(op: TREOp; opnd: PRegExprChar; sz: integer); +// insert an operator in front of already-emitted operand +// Means relocating the operand. +var + src, dst, place: PRegExprChar; + i: integer; +begin + if regCode = @regDummy then + begin + Inc(regCodeSize, sz); + Exit; + end; + // move code behind insert position + src := regCode; + Inc(regCode, sz); + {$IFDEF DebugSynRegExpr} + if regCode - programm > regCodeSize then + raise Exception.Create('TRegExpr.InsertOperator buffer overrun'); + // if (opnd<regCode) or (opnd-regCode>regCodeSize) then + // raise Exception.Create('TRegExpr.InsertOperator invalid opnd'); + {$ENDIF} + dst := regCode; + while src > opnd do + begin + Dec(dst); + Dec(src); + dst^ := src^; + end; + place := opnd; // Op node, where operand used to be. + PREOp(place)^ := op; + Inc(place, REOpSz); + for i := 1 + REOpSz to sz do + begin + place^ := #0; + Inc(place); + end; +end; { of procedure TRegExpr.InsertOperator + -------------------------------------------------------------- } + +function FindSkippedMetaLen(PStart, PEnd: PRegExprChar): integer; {$IFDEF InlineFuncs}inline;{$ENDIF} +// find length of initial segment of PStart string consisting +// entirely of characters not from IsMetaSymbol1. +begin + Result := 0; + while PStart < PEnd do + begin + if _IsMetaSymbol1(PStart^) then + Exit; + Inc(Result); + Inc(PStart) + end; +end; + +const + // Flags to be passed up and down. + FLAG_WORST = 0; // Worst case + FLAG_HASWIDTH = 1; // Cannot match empty string + FLAG_SIMPLE = 2; // Simple enough to be OP_STAR/OP_PLUS/OP_BRACES operand + FLAG_SPECSTART = 4; // Starts with * or + + + {$IFDEF UniCode} + RusRangeLoLow = #$430; // 'а' + RusRangeLoHigh = #$44F; // 'я' + RusRangeHiLow = #$410; // 'А' + RusRangeHiHigh = #$42F; // 'Я' + {$ELSE} + RusRangeLoLow = #$E0; // 'а' in cp1251 + RusRangeLoHigh = #$FF; // 'я' in cp1251 + RusRangeHiLow = #$C0; // 'А' in cp1251 + RusRangeHiHigh = #$DF; // 'Я' in cp1251 + {$ENDIF} + +function TRegExpr.FindInCharClass(ABuffer: PRegExprChar; AChar: REChar; AIgnoreCase: boolean): boolean; +// Buffer contains char pairs: (Kind, Data), where Kind is one of OpKind_ values, +// and Data depends on Kind +var + OpKind: REChar; + ch, ch2: REChar; + N, i: integer; +begin + if AIgnoreCase then + AChar := _UpperCase(AChar); + repeat + OpKind := ABuffer^; + case OpKind of + OpKind_End: + begin + Result := False; + Exit; + end; + + OpKind_Range: + begin + Inc(ABuffer); + ch := ABuffer^; + Inc(ABuffer); + ch2 := ABuffer^; + Inc(ABuffer); + { + // if AIgnoreCase, ch, ch2 are upcased in opcode + if AIgnoreCase then + begin + ch := _UpperCase(ch); + ch2 := _UpperCase(ch2); + end; + } + if (AChar >= ch) and (AChar <= ch2) then + begin + Result := True; + Exit; + end; + end; + + OpKind_MetaClass: + begin + Inc(ABuffer); + N := Ord(ABuffer^); + Inc(ABuffer); + if CharCheckers[N](AChar) then + begin + Result := True; + Exit + end; + end; + + OpKind_Char: + begin + Inc(ABuffer); + N := PLongInt(ABuffer)^; + Inc(ABuffer, RENumberSz); + for i := 1 to N do + begin + ch := ABuffer^; + Inc(ABuffer); + { + // already upcased in opcode + if AIgnoreCase then + ch := _UpperCase(ch); + } + if ch = AChar then + begin + Result := True; + Exit; + end; + end; + end; + + {$IFDEF FastUnicodeData} + OpKind_CategoryYes, + OpKind_CategoryNo: + begin + Inc(ABuffer); + ch := ABuffer^; + Inc(ABuffer); + ch2 := ABuffer^; + Inc(ABuffer); + Result := CheckCharCategory(AChar, ch, ch2); + if OpKind = OpKind_CategoryNo then + Result := not Result; + if Result then + Exit; + end; + {$ENDIF} + + else + Error(reeBadOpcodeInCharClass); + end; + until False; // assume that Buffer is ended correctly +end; + + +procedure TRegExpr.GetCharSetFromWordChars(var ARes: TRegExprCharSet); +{$IFDEF UseWordChars} +var + i: integer; + ch: REChar; +{$ENDIF} +begin + {$IFDEF UseWordChars} + ARes := []; + for i := 1 to Length(fWordChars) do + begin + ch := fWordChars[i]; + {$IFDEF UniCode} + if Ord(ch) <= $FF then + {$ENDIF} + Include(ARes, byte(ch)); + end; + {$ELSE} + ARes := RegExprWordSet; + {$ENDIF} +end; + +procedure TRegExpr.GetCharSetFromSpaceChars(var ARes: TRegExprCharset); +{$IFDEF UseSpaceChars} +var + i: integer; + ch: REChar; +{$ENDIF} +begin + {$IFDEF UseSpaceChars} + ARes := []; + for i := 1 to Length(fSpaceChars) do + begin + ch := fSpaceChars[i]; + {$IFDEF UniCode} + if Ord(ch) <= $FF then + {$ENDIF} + Include(ARes, byte(ch)); + end; + {$ELSE} + ARes := RegExprSpaceSet; + {$ENDIF} +end; + +procedure TRegExpr.GetCharSetFromCharClass(ABuffer: PRegExprChar; AIgnoreCase: boolean; var ARes: TRegExprCharset); +var + ch, ch2: REChar; + TempSet: TRegExprCharSet; + N, i: integer; +begin + ARes := []; + TempSet := []; + repeat + case ABuffer^ of + OpKind_End: + Exit; + + OpKind_Range: + begin + Inc(ABuffer); + ch := ABuffer^; + Inc(ABuffer); + ch2 := ABuffer^; + Inc(ABuffer); + for i := Ord(ch) to + {$IFDEF UniCode} Min(Ord(ch2), $FF) {$ELSE} Ord(ch2) {$ENDIF} do + begin + Include(ARes, byte(i)); + if AIgnoreCase then + Include(ARes, byte(InvertCase(REChar(i)))); + end; + end; + + OpKind_MetaClass: + begin + Inc(ABuffer); + N := Ord(ABuffer^); + Inc(ABuffer); + + if N = CheckerIndex_Word then + begin + GetCharSetFromWordChars(TempSet); + ARes := ARes + TempSet; + end + else + if N = CheckerIndex_NotWord then + begin + GetCharSetFromWordChars(TempSet); + ARes := ARes + (RegExprAllSet - TempSet); + end + else + if N = CheckerIndex_Space then + begin + GetCharSetFromSpaceChars(TempSet); + ARes := ARes + TempSet; + end + else + if N = CheckerIndex_NotSpace then + begin + GetCharSetFromSpaceChars(TempSet); + ARes := ARes + (RegExprAllSet - TempSet); + end + else + if N = CheckerIndex_Digit then + ARes := ARes + RegExprDigitSet + else + if N = CheckerIndex_NotDigit then + ARes := ARes + (RegExprAllSet - RegExprDigitSet) + else + if N = CheckerIndex_VertSep then + ARes := ARes + RegExprLineSeparatorsSet + else + if N = CheckerIndex_NotVertSep then + ARes := ARes + (RegExprAllSet - RegExprLineSeparatorsSet) + else + if N = CheckerIndex_HorzSep then + ARes := ARes + RegExprHorzSeparatorsSet + else + if N = CheckerIndex_NotHorzSep then + ARes := ARes + (RegExprAllSet - RegExprHorzSeparatorsSet) + else + if N = CheckerIndex_LowerAZ then + begin + if AIgnoreCase then + ARes := ARes + RegExprAllAzSet + else + ARes := ARes + RegExprLowerAzSet; + end + else + if N = CheckerIndex_UpperAZ then + begin + if AIgnoreCase then + ARes := ARes + RegExprAllAzSet + else + ARes := ARes + RegExprUpperAzSet; + end + else + Error(reeBadOpcodeInCharClass); + end; + + OpKind_Char: + begin + Inc(ABuffer); + N := PLongInt(ABuffer)^; + Inc(ABuffer, RENumberSz); + for i := 1 to N do + begin + ch := ABuffer^; + Inc(ABuffer); + {$IFDEF UniCode} + if Ord(ch) <= $FF then + {$ENDIF} + begin + Include(ARes, byte(ch)); + if AIgnoreCase then + Include(ARes, byte(InvertCase(ch))); + end; + end; + end; + + {$IFDEF FastUnicodeData} + OpKind_CategoryYes, + OpKind_CategoryNo: + begin + // usage of FirstCharSet makes no sense for regex with \p \P + ARes := RegExprAllSet; + Exit; + end; + {$ENDIF} + + else + Error(reeBadOpcodeInCharClass); + end; + until False; // assume that Buffer is ended correctly +end; + + +function TRegExpr.GetModifierG: boolean; +begin + Result := fModifiers.G; +end; + +function TRegExpr.GetModifierI: boolean; +begin + Result := fModifiers.I; +end; + +function TRegExpr.GetModifierM: boolean; +begin + Result := fModifiers.M; +end; + +function TRegExpr.GetModifierR: boolean; +begin + Result := fModifiers.R; +end; + +function TRegExpr.GetModifierS: boolean; +begin + Result := fModifiers.S; +end; + +function TRegExpr.GetModifierX: boolean; +begin + Result := fModifiers.X; +end; + +function TRegExpr.CompileRegExpr(ARegExp: PRegExprChar): boolean; +// Compile a regular expression into internal code +// We can't allocate space until we know how big the compiled form will be, +// but we can't compile it (and thus know how big it is) until we've got a +// place to put the code. So we cheat: we compile it twice, once with code +// generation turned off and size counting turned on, and once "for real". +// This also means that we don't allocate space until we are sure that the +// thing really will compile successfully, and we never have to move the +// code and thus invalidate pointers into it. (Note that it has to be in +// one piece because free() must be able to free it all.) +// Beware that the optimization-preparation code in here knows about some +// of the structure of the compiled regexp. +var + scan, longest, longestTemp: PRegExprChar; + Len, LenTemp: integer; + FlagTemp: integer; +begin + Result := False; + FlagTemp := 0; + regParse := nil; // for correct error handling + regExactlyLen := nil; + + ClearInternalIndexes; + fLastError := reeOk; + fLastErrorOpcode := TREOp(0); + + if Assigned(fHelper) then + FreeAndNil(fHelper); + fHelperLen := 0; + + try + if programm <> nil then + begin + FreeMem(programm); + programm := nil; + end; + + if ARegExp = nil then + begin + Error(reeCompNullArgument); + Exit; + end; + + fProgModifiers := fModifiers; + // well, may it's paranoia. I'll check it later. + + // First pass: calculate opcode size, validate regex + fSecondPass := False; + fCompModifiers := fModifiers; + regParse := ARegExp; + regNumBrackets := 1; + regCodeSize := 0; + regCode := @regDummy; + regCodeWork := nil; + regLookahead := False; + regLookaheadNeg := False; + regLookaheadGroup := -1; + regLookbehind := False; + + EmitC(OP_MAGIC); + if ParseReg(False, FlagTemp) = nil then + Exit; + + // Allocate memory + GetMem(programm, regCodeSize * SizeOf(REChar)); + + // Second pass: emit opcode + fSecondPass := True; + fCompModifiers := fModifiers; + regParse := ARegExp; + regNumBrackets := 1; + regCode := programm; + regCodeWork := programm + REOpSz; + + EmitC(OP_MAGIC); + if ParseReg(False, FlagTemp) = nil then + Exit; + + // Dig out information for optimizations. + {$IFDEF UseFirstCharSet} // ###0.929 + FirstCharSet := []; + FillFirstCharSet(regCodeWork); + for Len := 0 to 255 do + FirstCharArray[Len] := byte(Len) in FirstCharSet; + {$ENDIF} + + regAnchored := #0; + regMust := nil; + regMustLen := 0; + regMustString := ''; + + scan := regCodeWork; // First OP_BRANCH. + if PREOp(regNext(scan))^ = OP_EEND then + begin // Only one top-level choice. + scan := scan + REOpSz + RENextOffSz; + + // Starting-point info. + if PREOp(scan)^ = OP_BOL then + Inc(regAnchored); + + // If there's something expensive in the r.e., find the longest + // literal string that must appear and make it the regMust. Resolve + // ties in favor of later strings, since the regstart check works + // with the beginning of the r.e. and avoiding duplication + // strengthens checking. Not a strong reason, but sufficient in the + // absence of others. + if (FlagTemp and FLAG_SPECSTART) <> 0 then + begin + longest := nil; + Len := 0; + while scan <> nil do + begin + if PREOp(scan)^ = OP_EXACTLY then + begin + longestTemp := scan + REOpSz + RENextOffSz + RENumberSz; + LenTemp := PLongInt(scan + REOpSz + RENextOffSz)^; + if LenTemp >= Len then + begin + longest := longestTemp; + Len := LenTemp; + end; + end; + scan := regNext(scan); + end; + regMust := longest; + regMustLen := Len; + if regMustLen > 1 then // don't use regMust if too short + SetString(regMustString, regMust, regMustLen); + end; + end; + + Result := True; + + finally + begin + if not Result then + InvalidateProgramm; + end; + end; + +end; { of function TRegExpr.CompileRegExpr + -------------------------------------------------------------- } + +function TRegExpr.ParseReg(InBrackets: boolean; var FlagParse: integer): PRegExprChar; +// regular expression, i.e. main body or parenthesized thing +// Caller must absorb opening parenthesis. +// Combining parenthesis handling with the base level of regular expression +// is a trifle forced, but the need to tie the tails of the branches to what +// follows makes it hard to avoid. +var + ret, br, ender: PRegExprChar; + NBrackets: integer; + FlagTemp: integer; + SavedModifiers: TRegExprModifiers; +begin + Result := nil; + FlagTemp := 0; + FlagParse := FLAG_HASWIDTH; // Tentatively. + NBrackets := 0; + SavedModifiers := fCompModifiers; + + // Make an OP_OPEN node, if parenthesized. + if InBrackets then + begin + if regNumBrackets >= RegexMaxGroups then + begin + Error(reeCompParseRegTooManyBrackets); + Exit; + end; + NBrackets := regNumBrackets; + Inc(regNumBrackets); + ret := EmitNode(TREOp(Ord(OP_OPEN) + NBrackets)); + GrpOpCodes[NBrackets] := ret; + end + else + ret := nil; + + // Pick up the branches, linking them together. + br := ParseBranch(FlagTemp); + if br = nil then + begin + Result := nil; + Exit; + end; + if ret <> nil then + Tail(ret, br) // OP_OPEN -> first. + else + ret := br; + if (FlagTemp and FLAG_HASWIDTH) = 0 then + FlagParse := FlagParse and not FLAG_HASWIDTH; + FlagParse := FlagParse or FlagTemp and FLAG_SPECSTART; + while (regParse^ = '|') do + begin + Inc(regParse); + br := ParseBranch(FlagTemp); + if br = nil then + begin + Result := nil; + Exit; + end; + Tail(ret, br); // OP_BRANCH -> OP_BRANCH. + if (FlagTemp and FLAG_HASWIDTH) = 0 then + FlagParse := FlagParse and not FLAG_HASWIDTH; + FlagParse := FlagParse or FlagTemp and FLAG_SPECSTART; + end; + + // Make a closing node, and hook it on the end. + if InBrackets then + ender := EmitNode(TREOp(Ord(OP_CLOSE) + NBrackets)) + else + ender := EmitNode(OP_EEND); + Tail(ret, ender); + + // Hook the tails of the branches to the closing node. + br := ret; + while br <> nil do + begin + OpTail(br, ender); + br := regNext(br); + end; + + // Check for proper termination. + if InBrackets then + if regParse^ <> ')' then + begin + Error(reeCompParseRegUnmatchedBrackets); + Exit; + end + else + Inc(regParse); // skip trailing ')' + if (not InBrackets) and (regParse < fRegexEnd) then + begin + if regParse^ = ')' then + Error(reeCompParseRegUnmatchedBrackets2) + else + Error(reeCompParseRegJunkOnEnd); + Exit; + end; + fCompModifiers := SavedModifiers; // restore modifiers of parent + Result := ret; +end; { of function TRegExpr.ParseReg + -------------------------------------------------------------- } + +function TRegExpr.ParseBranch(var FlagParse: integer): PRegExprChar; +// one alternative of an | operator +// Implements the concatenation operator. +var + ret, chain, latest: PRegExprChar; + FlagTemp: integer; +begin + FlagTemp := 0; + FlagParse := FLAG_WORST; // Tentatively. + + ret := EmitNode(OP_BRANCH); + chain := nil; + while (regParse < fRegexEnd) and (regParse^ <> '|') and (regParse^ <> ')') do + begin + latest := ParsePiece(FlagTemp); + if latest = nil then + begin + Result := nil; + Exit; + end; + FlagParse := FlagParse or FlagTemp and FLAG_HASWIDTH; + if chain = nil // First piece. + then + FlagParse := FlagParse or FlagTemp and FLAG_SPECSTART + else + Tail(chain, latest); + chain := latest; + end; + if chain = nil // Loop ran zero times. + then + EmitNode(OP_NOTHING); + Result := ret; +end; { of function TRegExpr.ParseBranch + -------------------------------------------------------------- } + +function TRegExpr.ParsePiece(var FlagParse: integer): PRegExprChar; +// something followed by possible [*+?{] +// Note that the branching code sequences used for ? and the general cases +// of * and + and { are somewhat optimized: they use the same OP_NOTHING node as +// both the endmarker for their branch list and the body of the last branch. +// It might seem that this node could be dispensed with entirely, but the +// endmarker role is not redundant. + + function ParseNumber(AStart, AEnd: PRegExprChar): TREBracesArg; + begin + Result := 0; + if AEnd - AStart + 1 > 8 then + begin // prevent stupid scanning + Error(reeBRACESArgTooBig); + Exit; + end; + while AStart <= AEnd do + begin + Result := Result * 10 + (Ord(AStart^) - Ord('0')); + Inc(AStart); + end; + if (Result > MaxBracesArg) or (Result < 0) then + begin + Error(reeBRACESArgTooBig); + Exit; + end; + end; + +var + TheOp: TREOp; + NextNode: PRegExprChar; + + procedure EmitComplexBraces(ABracesMin, ABracesMax: TREBracesArg; ANonGreedyOp: boolean); // ###0.940 + {$IFDEF ComplexBraces} + var + off: TRENextOff; + {$ENDIF} + begin + {$IFNDEF ComplexBraces} + Error(reeComplexBracesNotImplemented); + {$ELSE} + if ANonGreedyOp then + TheOp := OP_LOOPNG + else + TheOp := OP_LOOP; + InsertOperator(OP_LOOPENTRY, Result, REOpSz + RENextOffSz); + NextNode := EmitNode(TheOp); + if regCode <> @regDummy then + begin + off := (Result + REOpSz + RENextOffSz) - (regCode - REOpSz - RENextOffSz); + // back to Atom after OP_LOOPENTRY + PREBracesArg(AlignToInt(regCode))^ := ABracesMin; + Inc(regCode, REBracesArgSz); + PREBracesArg(AlignToInt(regCode))^ := ABracesMax; + Inc(regCode, REBracesArgSz); + PRENextOff(AlignToPtr(regCode))^ := off; + Inc(regCode, RENextOffSz); + {$IFDEF DebugSynRegExpr} + if regcode - programm > regsize then + raise Exception.Create + ('TRegExpr.ParsePiece.EmitComplexBraces buffer overrun'); + {$ENDIF} + end + else + Inc(regCodeSize, REBracesArgSz * 2 + RENextOffSz); + Tail(Result, NextNode); // OP_LOOPENTRY -> OP_LOOP + if regCode <> @regDummy then + Tail(Result + REOpSz + RENextOffSz, NextNode); // Atom -> OP_LOOP + {$ENDIF} + end; + + procedure EmitSimpleBraces(ABracesMin, ABracesMax: TREBracesArg; ANonGreedyOp, APossessive: boolean); + begin + if APossessive then + TheOp := OP_BRACES_POSS + else + if ANonGreedyOp then + TheOp := OP_BRACESNG + else + TheOp := OP_BRACES; + InsertOperator(TheOp, Result, REOpSz + RENextOffSz + REBracesArgSz * 2); + if regCode <> @regDummy then + begin + PREBracesArg(AlignToInt(Result + REOpSz + RENextOffSz))^ := ABracesMin; + PREBracesArg(AlignToInt(Result + REOpSz + RENextOffSz + REBracesArgSz))^ := ABracesMax; + end; + end; + +var + op, nextch: REChar; + NonGreedyOp, NonGreedyCh, PossessiveCh: boolean; + FlagTemp: integer; + BracesMin, BracesMax: TREBracesArg; + p: PRegExprChar; +begin + FlagTemp := 0; + Result := ParseAtom(FlagTemp); + if Result = nil then + Exit; + + op := regParse^; + if not ((op = '*') or (op = '+') or (op = '?') or (op = '{')) then + begin + FlagParse := FlagTemp; + Exit; + end; + if ((FlagTemp and FLAG_HASWIDTH) = 0) and (op <> '?') then + begin + Error(reePlusStarOperandCouldBeEmpty); + Exit; + end; + + case op of + '*': + begin + FlagParse := FLAG_WORST or FLAG_SPECSTART; + nextch := (regParse + 1)^; + PossessiveCh := nextch = '+'; + if PossessiveCh then + begin + NonGreedyCh := False; + NonGreedyOp := False; + end + else + begin + NonGreedyCh := nextch = '?'; + NonGreedyOp := NonGreedyCh or not fCompModifiers.G; + end; + if (FlagTemp and FLAG_SIMPLE) = 0 then + begin + if NonGreedyOp then + EmitComplexBraces(0, MaxBracesArg, NonGreedyOp) + else + begin // Emit x* as (x&|), where & means "self". + InsertOperator(OP_BRANCH, Result, REOpSz + RENextOffSz); // Either x + OpTail(Result, EmitNode(OP_BACK)); // and loop + OpTail(Result, Result); // back + Tail(Result, EmitNode(OP_BRANCH)); // or + Tail(Result, EmitNode(OP_NOTHING)); // nil. + end + end + else + begin // Simple + if PossessiveCh then + TheOp := OP_STAR_POSS + else + if NonGreedyOp then + TheOp := OP_STARNG + else + TheOp := OP_STAR; + InsertOperator(TheOp, Result, REOpSz + RENextOffSz); + end; + if NonGreedyCh or PossessiveCh then + Inc(regParse); // Skip extra char ('?') + end; { of case '*' } + '+': + begin + FlagParse := FLAG_WORST or FLAG_SPECSTART or FLAG_HASWIDTH; + nextch := (regParse + 1)^; + PossessiveCh := nextch = '+'; + if PossessiveCh then + begin + NonGreedyCh := False; + NonGreedyOp := False; + end + else + begin + NonGreedyCh := nextch = '?'; + NonGreedyOp := NonGreedyCh or not fCompModifiers.G; + end; + if (FlagTemp and FLAG_SIMPLE) = 0 then + begin + if NonGreedyOp then + EmitComplexBraces(1, MaxBracesArg, NonGreedyOp) + else + begin // Emit x+ as x(&|), where & means "self". + NextNode := EmitNode(OP_BRANCH); // Either + Tail(Result, NextNode); + Tail(EmitNode(OP_BACK), Result); // loop back + Tail(NextNode, EmitNode(OP_BRANCH)); // or + Tail(Result, EmitNode(OP_NOTHING)); // nil. + end + end + else + begin // Simple + if PossessiveCh then + TheOp := OP_PLUS_POSS + else + if NonGreedyOp then + TheOp := OP_PLUSNG + else + TheOp := OP_PLUS; + InsertOperator(TheOp, Result, REOpSz + RENextOffSz); + end; + if NonGreedyCh or PossessiveCh then + Inc(regParse); // Skip extra char ('?') + end; { of case '+' } + '?': + begin + FlagParse := FLAG_WORST; + nextch := (regParse + 1)^; + PossessiveCh := nextch = '+'; + if PossessiveCh then + begin + NonGreedyCh := False; + NonGreedyOp := False; + end + else + begin + NonGreedyCh := nextch = '?'; + NonGreedyOp := NonGreedyCh or not fCompModifiers.G; + end; + if NonGreedyOp or PossessiveCh then + begin // ###0.940 // We emit x?? as x{0,1}? + if (FlagTemp and FLAG_SIMPLE) = 0 then + begin + if PossessiveCh then + Error(reePossessiveAfterComplexBraces); + EmitComplexBraces(0, 1, NonGreedyOp); + end + else + EmitSimpleBraces(0, 1, NonGreedyOp, PossessiveCh); + end + else + begin // greedy '?' + InsertOperator(OP_BRANCH, Result, REOpSz + RENextOffSz); // Either x + Tail(Result, EmitNode(OP_BRANCH)); // or + NextNode := EmitNode(OP_NOTHING); // nil. + Tail(Result, NextNode); + OpTail(Result, NextNode); + end; + if NonGreedyCh or PossessiveCh then + Inc(regParse); // Skip extra char ('?') + end; { of case '?' } + '{': + begin + Inc(regParse); + p := regParse; + while IsDigitChar(regParse^) do // <min> MUST appear + Inc(regParse); + if (regParse^ <> '}') and (regParse^ <> ',') or (p = regParse) then + begin + Error(reeIncorrectBraces); + Exit; + end; + BracesMin := ParseNumber(p, regParse - 1); + if regParse^ = ',' then + begin + Inc(regParse); + p := regParse; + while IsDigitChar(regParse^) do + Inc(regParse); + if regParse^ <> '}' then + begin + Error(reeIncorrectBraces); + Exit; + end; + if p = regParse then + BracesMax := MaxBracesArg + else + BracesMax := ParseNumber(p, regParse - 1); + end + else + BracesMax := BracesMin; // {n} == {n,n} + if BracesMin > BracesMax then + begin + Error(reeBracesMinParamGreaterMax); + Exit; + end; + if BracesMin > 0 then + FlagParse := FLAG_WORST; + if BracesMax > 0 then + FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SPECSTART; + + nextch := (regParse + 1)^; + PossessiveCh := nextch = '+'; + if PossessiveCh then + begin + NonGreedyCh := False; + NonGreedyOp := False; + end + else + begin + NonGreedyCh := nextch = '?'; + NonGreedyOp := NonGreedyCh or not fCompModifiers.G; + end; + if (FlagTemp and FLAG_SIMPLE) <> 0 then + EmitSimpleBraces(BracesMin, BracesMax, NonGreedyOp, PossessiveCh) + else + begin + if PossessiveCh then + Error(reePossessiveAfterComplexBraces); + EmitComplexBraces(BracesMin, BracesMax, NonGreedyOp); + end; + if NonGreedyCh or PossessiveCh then + Inc(regParse); // Skip extra char '?' + end; // of case '{' + // else // here we can't be + end; { of case op } + + Inc(regParse); + op := regParse^; + if (op = '*') or (op = '+') or (op = '?') or (op = '{') then + Error(reeNestedQuantif); +end; { of function TRegExpr.ParsePiece + -------------------------------------------------------------- } + +function TRegExpr.HexDig(Ch: REChar): integer; +begin + case Ch of + '0' .. '9': + Result := Ord(Ch) - Ord('0'); + 'a' .. 'f': + Result := Ord(Ch) - Ord('a') + 10; + 'A' .. 'F': + Result := Ord(Ch) - Ord('A') + 10; + else + begin + Result := 0; + Error(reeBadHexDigit); + end; + end; +end; + +function TRegExpr.UnQuoteChar(var APtr: PRegExprChar): REChar; +var + Ch: REChar; +begin + case APtr^ of + 't': + Result := #$9; // \t => tab (HT/TAB) + 'n': + Result := #$a; // \n => newline (NL) + 'r': + Result := #$d; // \r => carriage return (CR) + 'f': + Result := #$c; // \f => form feed (FF) + 'a': + Result := #$7; // \a => alarm (bell) (BEL) + 'e': + Result := #$1b; // \e => escape (ESC) + 'c': + begin // \cK => code for Ctrl+K + Result := #0; + Inc(APtr); + if APtr >= fRegexEnd then + Error(reeNoLetterAfterBSlashC); + Ch := APtr^; + case Ch of + 'a' .. 'z': + Result := REChar(Ord(Ch) - Ord('a') + 1); + 'A' .. 'Z': + Result := REChar(Ord(Ch) - Ord('A') + 1); + else + Error(reeNoLetterAfterBSlashC); + end; + end; + 'x': + begin // \x: hex char + Result := #0; + Inc(APtr); + if APtr >= fRegexEnd then + begin + Error(reeNoHexCodeAfterBSlashX); + Exit; + end; + if APtr^ = '{' then + begin // \x{nnnn} //###0.936 + repeat + Inc(APtr); + if APtr >= fRegexEnd then + begin + Error(reeNoHexCodeAfterBSlashX); + Exit; + end; + if APtr^ <> '}' then + begin + if (Ord(Result) ShR (SizeOf(REChar) * 8 - 4)) and $F <> 0 then + begin + Error(reeHexCodeAfterBSlashXTooBig); + Exit; + end; + Result := REChar((Ord(Result) ShL 4) or HexDig(APtr^)); + // HexDig will cause Error if bad hex digit found + end + else + Break; + until False; + end + else + begin + Result := REChar(HexDig(APtr^)); + // HexDig will cause Error if bad hex digit found + Inc(APtr); + if APtr >= fRegexEnd then + begin + Error(reeNoHexCodeAfterBSlashX); + Exit; + end; + Result := REChar((Ord(Result) ShL 4) or HexDig(APtr^)); + // HexDig will cause Error if bad hex digit found + end; + end; + else + begin + Result := APtr^; + if IsWordChar(Result) then + begin + fLastErrorSymbol := Result; + Error(reeUnknownMetaSymbol); + end; + end; + end; +end; + +function TRegExpr.ParseAtom(var FlagParse: integer): PRegExprChar; +// the lowest level +// Optimization: gobbles an entire sequence of ordinary characters so that +// it can turn them into a single node, which is smaller to store and +// faster to run. Backslashed characters are exceptions, each becoming a +// separate node; the code is simpler that way and it's not worth fixing. +var + ret: PRegExprChar; + RangeBeg, RangeEnd: REChar; + CanBeRange: boolean; + AddrOfLen: PLongInt; + + procedure EmitExactly(Ch: REChar); + begin + if fCompModifiers.I then + ret := EmitNode(OP_EXACTLYCI) + else + ret := EmitNode(OP_EXACTLY); + EmitInt(1); + EmitC(Ch); + FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; + end; + + procedure EmitRangeChar(Ch: REChar; AStartOfRange: boolean); + begin + CanBeRange := AStartOfRange; + if fCompModifiers.I then + Ch := _UpperCase(Ch); + if AStartOfRange then + begin + AddrOfLen := nil; + RangeBeg := Ch; + end + else + begin + if AddrOfLen = nil then + begin + EmitC(OpKind_Char); + Pointer(AddrOfLen) := regCode; + EmitInt(0); + end; + Inc(AddrOfLen^); + EmitC(Ch); + end; + end; + + procedure EmitRangePacked(ch1, ch2: REChar); + var + ChkIndex: integer; + begin + AddrOfLen := nil; + CanBeRange := False; + + if fCompModifiers.I then + begin + ch1 := _UpperCase(ch1); + ch2 := _UpperCase(ch2); + end; + + for ChkIndex := Low(CharCheckerInfos) to High(CharCheckerInfos) do + if (CharCheckerInfos[ChkIndex].CharBegin = ch1) and + (CharCheckerInfos[ChkIndex].CharEnd = ch2) then + begin + EmitC(OpKind_MetaClass); + EmitC(REChar(CharCheckerInfos[ChkIndex].CheckerIndex)); + Exit; + end; + + EmitC(OpKind_Range); + EmitC(ch1); + EmitC(ch2); + end; + + {$IFDEF FastUnicodeData} + procedure EmitCategoryInCharClass(APositive: boolean); + var + ch, ch2: REChar; + begin + AddrOfLen := nil; + CanBeRange := False; + Inc(regParse); + FindCategoryName(regParse, ch, ch2); + if APositive then + EmitC(OpKind_CategoryYes) + else + EmitC(OpKind_CategoryNo); + EmitC(ch); + EmitC(ch2); + end; + {$ENDIF} + +var + FlagTemp: integer; + Len: integer; + SavedPtr: PRegExprChar; + EnderChar, TempChar: REChar; + DashForRange: Boolean; + GrpKind: TREGroupKind; + GrpName: RegExprString; + GrpIndex: integer; + NextCh: REChar; +begin + Result := nil; + FlagTemp := 0; + FlagParse := FLAG_WORST; + AddrOfLen := nil; + + Inc(regParse); + case (regParse - 1)^ of + '^': + begin + if not fCompModifiers.M + {$IFDEF UseLineSep} or (fLineSeparators = '') {$ENDIF} then + ret := EmitNode(OP_BOL) + else + ret := EmitNode(OP_BOLML); + end; + + '$': + begin + if not fCompModifiers.M + {$IFDEF UseLineSep} or (fLineSeparators = '') {$ENDIF} then + ret := EmitNode(OP_EOL) + else + ret := EmitNode(OP_EOLML); + end; + + '.': + begin + if fCompModifiers.S then + begin + ret := EmitNode(OP_ANY); + FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; + end + else + begin // not /s, so emit [^:LineSeparators:] + ret := EmitNode(OP_ANYML); + FlagParse := FlagParse or FLAG_HASWIDTH; // not so simple ;) + end; + end; + + '[': + begin + if regParse^ = '^' then + begin // Complement of range. + if fCompModifiers.I then + ret := EmitNode(OP_ANYBUTCI) + else + ret := EmitNode(OP_ANYBUT); + Inc(regParse); + end + else if fCompModifiers.I then + ret := EmitNode(OP_ANYOFCI) + else + ret := EmitNode(OP_ANYOF); + + CanBeRange := False; + + if regParse^ = ']' then + begin + // first ']' inside [] treated as simple char, no need to check '[' + EmitRangeChar(regParse^, (regParse + 1)^ = '-'); + Inc(regParse); + end; + + while (regParse < fRegexEnd) and (regParse^ <> ']') do + begin + // last '-' inside [] treated as simple dash + if (regParse^ = '-') and + ((regParse + 1) < fRegexEnd) and + ((regParse + 1)^ = ']') then + begin + EmitRangeChar('-', False); + Inc(regParse); + Break; + end; + + // char '-' which (maybe) makes a range + if (regParse^ = '-') and ((regParse + 1) < fRegexEnd) and CanBeRange then + begin + Inc(regParse); + RangeEnd := regParse^; + if RangeEnd = EscChar then + begin + if _IsMetaChar((regParse + 1)^) then + begin + Error(reeMetaCharAfterMinusInRange); + Exit; + end; + Inc(regParse); + RangeEnd := UnQuoteChar(regParse); + end; + + // special handling for Russian range a-YA, add 2 ranges: a-ya and A-YA + if fCompModifiers.R and + (RangeBeg = RusRangeLoLow) and (RangeEnd = RusRangeHiHigh) then + begin + EmitRangePacked(RusRangeLoLow, RusRangeLoHigh); + EmitRangePacked(RusRangeHiLow, RusRangeHiHigh); + end + else + begin // standard r.e. handling + if RangeBeg > RangeEnd then + begin + Error(reeInvalidRange); + Exit; + end; + EmitRangePacked(RangeBeg, RangeEnd); + end; + Inc(regParse); + end + else + begin + if regParse^ = EscChar then + begin + Inc(regParse); + if regParse >= fRegexEnd then + begin + Error(reeParseAtomTrailingBackSlash); + Exit; + end; + if _IsMetaChar(regParse^) then + begin + AddrOfLen := nil; + CanBeRange := False; + EmitC(OpKind_MetaClass); + case regParse^ of + 'w': + EmitC(REChar(CheckerIndex_Word)); + 'W': + EmitC(REChar(CheckerIndex_NotWord)); + 's': + EmitC(REChar(CheckerIndex_Space)); + 'S': + EmitC(REChar(CheckerIndex_NotSpace)); + 'd': + EmitC(REChar(CheckerIndex_Digit)); + 'D': + EmitC(REChar(CheckerIndex_NotDigit)); + 'v': + EmitC(REChar(CheckerIndex_VertSep)); + 'V': + EmitC(REChar(CheckerIndex_NotVertSep)); + 'h': + EmitC(REChar(CheckerIndex_HorzSep)); + 'H': + EmitC(REChar(CheckerIndex_NotHorzSep)); + else + Error(reeBadOpcodeInCharClass); + end; + end + else + {$IFDEF FastUnicodeData} + if regParse^ = 'p' then + EmitCategoryInCharClass(True) + else + if regParse^ = 'P' then + EmitCategoryInCharClass(False) + else + {$ENDIF} + begin + TempChar := UnQuoteChar(regParse); + // False if '-' is last char in [] + DashForRange := + (regParse + 2 < fRegexEnd) and + ((regParse + 1)^ = '-') and + ((regParse + 2)^ <> ']'); + EmitRangeChar(TempChar, DashForRange); + end; + end + else + begin + // False if '-' is last char in [] + DashForRange := + (regParse + 2 < fRegexEnd) and + ((regParse + 1)^ = '-') and + ((regParse + 2)^ <> ']'); + EmitRangeChar(regParse^, DashForRange); + end; + Inc(regParse); + end; + end; { of while } + AddrOfLen := nil; + CanBeRange := False; + EmitC(OpKind_End); + if regParse^ <> ']' then + begin + Error(reeUnmatchedSqBrackets); + Exit; + end; + Inc(regParse); + FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; + end; + + '(': + begin + GrpKind := gkNormalGroup; + GrpName := ''; + + // A: detect kind of expression in brackets + if regParse^ = '?' then + begin + NextCh := (regParse + 1)^; + case NextCh of + ':': + begin + // non-capturing group: (?:regex) + GrpKind := gkNonCapturingGroup; + Inc(regParse, 2); + end; + '>': + begin + // atomic group: (?>regex) + GrpKind := gkNonCapturingGroup; + Inc(regParse, 2); + GrpAtomic[regNumBrackets] := True; + end; + 'P': + begin + if (regParse + 4 >= fRegexEnd) then + Error(reeNamedGroupBad); + case (regParse + 2)^ of + '<': + begin + // named group: (?P<name>regex) + GrpKind := gkNormalGroup; + FindGroupName(regParse + 3, '>', GrpName); + Inc(regParse, Length(GrpName) + 4); + end; + '=': + begin + // back-reference to named group: (?P=name) + GrpKind := gkNamedGroupReference; + FindGroupName(regParse + 3, ')', GrpName); + Inc(regParse, Length(GrpName) + 4); + end; + '>': + begin + // subroutine call to named group: (?P>name) + GrpKind := gkSubCall; + FindGroupName(regParse + 3, ')', GrpName); + Inc(regParse, Length(GrpName) + 4); + GrpIndex := MatchIndexFromName(GrpName); + if GrpIndex < 1 then + Error(reeNamedGroupBadRef); + end; + else + Error(reeNamedGroupBad); + end; + end; + '<': + begin + // lookbehind: (?<=foo)bar + if (regParse + 4 >= fRegexEnd) then + Error(reeLookbehindBad); + case (regParse + 2)^ of + '=': + begin + // allow lookbehind only at the beginning + if regParse <> fRegexStart + 1 then + Error(reeLookaroundNotAtEdge); + + GrpKind := gkLookbehind; + GrpAtomic[regNumBrackets] := RegExprLookbehindIsAtomic; + regLookbehind := True; + Inc(regParse, 3); + end; + + '!': + begin + // allow lookbehind only at the beginning + if regParse <> fRegexStart + 1 then + Error(reeLookaroundNotAtEdge); + + GrpKind := gkLookbehindNeg; + Inc(regParse, 3); + SavedPtr := _FindClosingBracket(regParse, fRegexEnd); + if SavedPtr = nil then + Error(reeCompParseRegUnmatchedBrackets); + + // for '(?<!foo)bar', we make our regex 'bar' and make Helper object with 'foo' + if not fSecondPass then + begin + Len := SavedPtr - fRegexStart - 4; + if Len = 0 then + Error(reeLookbehindBad); + + if fHelper = nil then + fHelper := TRegExpr.Create; + fHelper.Expression := Copy(fExpression, 5, Len); + + try + fHelper.Compile; + except + Len := fHelper.LastError; + FreeAndNil(fHelper); + Error(Len); + end; + + if fHelper.IsFixedLength(TempChar, Len) then + fHelperLen := Len + else + begin + FreeAndNil(fHelper); + Error(reeLookbehindTooComplex); + end; + end; + + // jump to closing bracket, don't make opcode for (?<!foo) + regParse := SavedPtr + 1; + end; + else + Error(reeLookbehindBad); + end; + end; + '=', '!': + begin + // lookaheads: foo(?=bar) and foo(?!bar) + if (regParse + 3 >= fRegexEnd) then + Error(reeLookaheadBad); + regLookahead := True; + regLookaheadGroup := regNumBrackets; + if NextCh = '=' then + begin + GrpKind := gkLookahead; + end + else + begin + GrpKind := gkLookaheadNeg; + regLookaheadNeg := True; + end; + GrpAtomic[regNumBrackets] := RegExprLookaheadIsAtomic; + + // check that these brackets are last in regex + SavedPtr := _FindClosingBracket(regParse + 1, fRegexEnd); + if (SavedPtr <> fRegexEnd - 1) then + Error(reeLookaroundNotAtEdge); + + Inc(regParse, 2); + end; + '#': + begin + // (?#comment) + GrpKind := gkComment; + Inc(regParse, 2); + end; + 'a'..'z', '-': + begin + // modifiers string like (?mxr) + GrpKind := gkModifierString; + Inc(regParse); + end; + 'R', '0': + begin + // recursion (?R), (?0) + GrpKind := gkRecursion; + Inc(regParse, 2); + if regParse^ <> ')' then + Error(reeBadRecursion); + Inc(regParse); + end; + '1'..'9': + begin + // subroutine call (?1)..(?99) + GrpKind := gkSubCall; + GrpIndex := Ord(NextCh) - Ord('0'); + Inc(regParse, 2); + // support 2-digit group numbers + case regParse^ of + ')': + begin + Inc(regParse); + end; + '0'..'9': + begin + GrpIndex := GrpIndex * 10 + Ord(regParse^) - Ord('0'); + if GrpIndex >= RegexMaxGroups then + Error(reeBadSubCall); + Inc(regParse); + if regParse^ <> ')' then + Error(reeBadSubCall); + Inc(regParse); + end + else + Error(reeBadRecursion); + end; + end; + '''': + begin + // named group: (?'name'regex) + if (regParse + 4 >= fRegexEnd) then + Error(reeNamedGroupBad); + GrpKind := gkNormalGroup; + FindGroupName(regParse + 2, '''', GrpName); + Inc(regParse, Length(GrpName) + 3); + end; + '&': + begin + // subroutine call to named group: (?&name) + if (regParse + 2 >= fRegexEnd) then + Error(reeBadSubCall); + GrpKind := gkSubCall; + FindGroupName(regParse + 2, ')', GrpName); + Inc(regParse, Length(GrpName) + 3); + GrpIndex := MatchIndexFromName(GrpName); + if GrpIndex < 1 then + Error(reeNamedGroupBadRef); + end; + else + Error(reeIncorrectSpecialBrackets); + end; + end; + + // B: process found kind of brackets + case GrpKind of + gkNormalGroup, + gkNonCapturingGroup, + gkLookahead, + gkLookaheadNeg, + gkLookbehind: + begin + // skip this block for one of passes, to not double groups count; + // must take first pass (we need GrpNames filled) + if (GrpKind = gkNormalGroup) and not fSecondPass then + if GrpCount < RegexMaxGroups - 1 then + begin + Inc(GrpCount); + GrpIndexes[GrpCount] := regNumBrackets; + if GrpName <> '' then + begin + if MatchIndexFromName(GrpName) >= 0 then + Error(reeNamedGroupDupName); + GrpNames[GrpCount] := GrpName; + end; + end; + ret := ParseReg(True, FlagTemp); + if ret = nil then + begin + Result := nil; + Exit; + end; + FlagParse := FlagParse or FlagTemp and (FLAG_HASWIDTH or FLAG_SPECSTART); + end; + + gkLookbehindNeg: + begin + // don't make opcode + ret := EmitNode(OP_COMMENT); + FlagParse := FLAG_WORST; + end; + + gkNamedGroupReference: + begin + Len := MatchIndexFromName(GrpName); + if Len < 0 then + Error(reeNamedGroupBadRef); + ret := EmitGroupRef(Len, fCompModifiers.I); + FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; + end; + + gkModifierString: + begin + SavedPtr := regParse; + while (regParse < fRegexEnd) and (regParse^ <> ')') do + Inc(regParse); + if (regParse^ <> ')') or + not ParseModifiers(SavedPtr, regParse - SavedPtr, fCompModifiers) then + begin + Error(reeUnrecognizedModifier); + Exit; + end; + Inc(regParse); // skip ')' + ret := EmitNode(OP_COMMENT); // comment + // Error (reeQuantifFollowsNothing); + // Exit; + end; + + gkComment: + begin + while (regParse < fRegexEnd) and (regParse^ <> ')') do + Inc(regParse); + if regParse^ <> ')' then + begin + Error(reeUnclosedComment); + Exit; + end; + Inc(regParse); // skip ')' + ret := EmitNode(OP_COMMENT); // comment + end; + + gkRecursion: + begin + // set FLAG_HASWIDTH to allow compiling of such regex: b(?:m|(?R))*e + FlagParse := FlagParse or FLAG_HASWIDTH; + ret := EmitNode(OP_RECUR); + end; + + gkSubCall: + begin + // set FLAG_HASWIDTH like for (?R) + FlagParse := FlagParse or FLAG_HASWIDTH; + ret := EmitNode(TReOp(Ord(OP_SUBCALL) + GrpIndex)); + end; + end; // case GrpKind of + end; + + '|', ')': + begin // Supposed to be caught earlier. + Error(reeInternalUrp); + Exit; + end; + + '?', '+', '*': + begin + Error(reeQuantifFollowsNothing); + Exit; + end; + + EscChar: + begin + if regParse >= fRegexEnd then + begin + Error(reeTrailingBackSlash); + Exit; + end; + case regParse^ of + 'b': + ret := EmitNode(OP_BOUND); + 'B': + ret := EmitNode(OP_NOTBOUND); + 'A': + ret := EmitNode(OP_BOL); + 'z': + ret := EmitNode(OP_EOL); + 'Z': + ret := EmitNode(OP_EOL2); + 'd': + begin // r.e.extension - any digit ('0' .. '9') + ret := EmitNode(OP_ANYDIGIT); + FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; + end; + 'D': + begin // r.e.extension - not digit ('0' .. '9') + ret := EmitNode(OP_NOTDIGIT); + FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; + end; + 's': + begin // r.e.extension - any space char + ret := EmitNode(OP_ANYSPACE); + FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; + end; + 'S': + begin // r.e.extension - not space char + ret := EmitNode(OP_NOTSPACE); + FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; + end; + 'w': + begin // r.e.extension - any english char / digit / '_' + ret := EmitNode(OP_ANYLETTER); + FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; + end; + 'W': + begin // r.e.extension - not english char / digit / '_' + ret := EmitNode(OP_NOTLETTER); + FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; + end; + 'v': + begin + ret := EmitNode(OP_ANYVERTSEP); + FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; + end; + 'V': + begin + ret := EmitNode(OP_NOTVERTSEP); + FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; + end; + 'h': + begin + ret := EmitNode(OP_ANYHORZSEP); + FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; + end; + 'H': + begin + ret := EmitNode(OP_NOTHORZSEP); + FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; + end; + '1' .. '9': + begin + ret := EmitGroupRef(Ord(regParse^) - Ord('0'), fCompModifiers.I); + FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; + end; + {$IFDEF FastUnicodeData} + 'p': + begin + ret := EmitCategoryMain(True); + FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; + end; + 'P': + begin + ret := EmitCategoryMain(False); + FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; + end; + {$ENDIF} + else + EmitExactly(UnQuoteChar(regParse)); + end; { of case } + Inc(regParse); + end; + + else + begin + Dec(regParse); + if fCompModifiers.X and // check for eXtended syntax + ((regParse^ = '#') or IsIgnoredChar(regParse^)) then + begin // ###0.941 \x + if regParse^ = '#' then + begin // Skip eXtended comment + // find comment terminator (group of \n and/or \r) + while (regParse < fRegexEnd) and (regParse^ <> #$d) and + (regParse^ <> #$a) do + Inc(regParse); + while (regParse^ = #$d) or (regParse^ = #$a) + // skip comment terminator + do + Inc(regParse); + // attempt to support different type of line separators + end + else + begin // Skip the blanks! + while IsIgnoredChar(regParse^) do + Inc(regParse); + end; + ret := EmitNode(OP_COMMENT); // comment + end + else + begin + Len := FindSkippedMetaLen(regParse, fRegexEnd); + if Len <= 0 then + if regParse^ <> '{' then + begin + Error(reeRarseAtomInternalDisaster); + Exit; + end + else + Len := FindSkippedMetaLen(regParse + 1, fRegexEnd) + 1; + // bad {n,m} - compile as EXACTLY + EnderChar := (regParse + Len)^; + if (Len > 1) and ((EnderChar = '*') or (EnderChar = '+') or (EnderChar = '?') or (EnderChar = '{')) then + Dec(Len); // back off clear of ?+*{ operand. + FlagParse := FlagParse or FLAG_HASWIDTH; + if Len = 1 then + FlagParse := FlagParse or FLAG_SIMPLE; + if fCompModifiers.I then + ret := EmitNode(OP_EXACTLYCI) + else + ret := EmitNode(OP_EXACTLY); + EmitInt(0); + while (Len > 0) and ((not fCompModifiers.X) or (regParse^ <> '#')) do + begin + if not fCompModifiers.X or not IsIgnoredChar(regParse^) then + begin + EmitC(regParse^); + if regCode <> @regDummy then + Inc(regExactlyLen^); + end; + Inc(regParse); + Dec(Len); + end; + end; { of if not comment } + end; { of case else } + end; { of case } + + Result := ret; +end; { of function TRegExpr.ParseAtom + -------------------------------------------------------------- } + +function TRegExpr.GetCompilerErrorPos: PtrInt; +begin + Result := 0; + if (fRegexStart = nil) or (regParse = nil) then + Exit; // not in compiling mode ? + Result := regParse - fRegexStart; +end; { of function TRegExpr.GetCompilerErrorPos + -------------------------------------------------------------- } + +{ ============================================================= } +{ ===================== Matching section ====================== } +{ ============================================================= } + +procedure TRegExpr.FindGroupName(APtr: PRegExprChar; AEndChar: REChar; var AName: RegExprString); +// check that group name is valid identifier, started from non-digit +// this is to be like in Python regex +var + P: PRegExprChar; +begin + P := APtr; + if IsDigitChar(P^) or not IsWordChar(P^) then + Error(reeNamedGroupBadName); + + repeat + if P >= fRegexEnd then + Error(reeNamedGroupBad); + if P^ = AEndChar then + Break; + if not IsWordChar(P^) then + Error(reeNamedGroupBadName); + Inc(P); + until False; + + SetString(AName, APtr, P-APtr); +end; + +function TRegExpr.FindRepeated(p: PRegExprChar; AMax: integer): integer; +// repeatedly match something simple, report how many +// p: points to current opcode +var + scan: PRegExprChar; + opnd: PRegExprChar; + TheMax: PtrInt; // PtrInt, gets diff of 2 pointers + InvChar: REChar; + CurStart, CurEnd: PRegExprChar; + ArrayIndex, i: integer; +begin + Result := 0; + scan := regInput; // points into InputString + opnd := p + REOpSz + RENextOffSz; // points to operand of opcode (after OP_nnn code) + TheMax := fInputEnd - scan; + if TheMax > AMax then + TheMax := AMax; + case PREOp(p)^ of + OP_ANY: + begin + // note - OP_ANYML cannot be proceeded in FindRepeated because can skip + // more than one char at once + {$IFDEF UnicodeEx} + for i := 1 to TheMax do + IncUnicode2(scan, Result); + {$ELSE} + Result := TheMax; + Inc(scan, Result); + {$ENDIF} + end; + + OP_EXACTLY: + begin // in opnd can be only ONE char !!! + { + // Alexey: commented because of https://github.com/andgineer/TRegExpr/issues/145 + NLen := PLongInt(opnd)^; + if TheMax > NLen then + TheMax := NLen; + } + Inc(opnd, RENumberSz); + while (Result < TheMax) and (opnd^ = scan^) do + begin + Inc(Result); + Inc(scan); + end; + end; + + OP_EXACTLYCI: + begin // in opnd can be only ONE char !!! + { + // Alexey: commented because of https://github.com/andgineer/TRegExpr/issues/145 + NLen := PLongInt(opnd)^; + if TheMax > NLen then + TheMax := NLen; + } + Inc(opnd, RENumberSz); + while (Result < TheMax) and (opnd^ = scan^) do + begin // prevent unneeded InvertCase //###0.931 + Inc(Result); + Inc(scan); + end; + if Result < TheMax then + begin // ###0.931 + InvChar := InvertCase(opnd^); // store in register + while (Result < TheMax) and ((opnd^ = scan^) or (InvChar = scan^)) do + begin + Inc(Result); + Inc(scan); + end; + end; + end; + + OP_BSUBEXP: + begin // ###0.936 + ArrayIndex := GrpIndexes[Ord(opnd^)]; + if ArrayIndex < 0 then + Exit; + CurStart := GrpStart[ArrayIndex]; + if CurStart = nil then + Exit; + CurEnd := GrpEnd[ArrayIndex]; + if CurEnd = nil then + Exit; + repeat + opnd := CurStart; + while opnd < CurEnd do + begin + if (scan >= fInputEnd) or (scan^ <> opnd^) then + Exit; + Inc(scan); + Inc(opnd); + end; + Inc(Result); + regInput := scan; + until Result >= AMax; + end; + + OP_BSUBEXPCI: + begin // ###0.936 + ArrayIndex := GrpIndexes[Ord(opnd^)]; + if ArrayIndex < 0 then + Exit; + CurStart := GrpStart[ArrayIndex]; + if CurStart = nil then + Exit; + CurEnd := GrpEnd[ArrayIndex]; + if CurEnd = nil then + Exit; + repeat + opnd := CurStart; + while opnd < CurEnd do + begin + if (scan >= fInputEnd) or + ((scan^ <> opnd^) and (scan^ <> InvertCase(opnd^))) then + Exit; + Inc(scan); + Inc(opnd); + end; + Inc(Result); + regInput := scan; + until Result >= AMax; + end; + + OP_ANYDIGIT: + while (Result < TheMax) and IsDigitChar(scan^) do + begin + Inc(Result); + Inc(scan); + end; + + OP_NOTDIGIT: + {$IFDEF UNICODEEX} + begin + i := 0; + while (i < TheMax) and not IsDigitChar(scan^) do + begin + Inc(i); + IncUnicode2(scan, Result); + end; + end; + {$ELSE} + while (Result < TheMax) and not IsDigitChar(scan^) do + begin + Inc(Result); + Inc(scan); + end; + {$ENDIF} + + OP_ANYLETTER: + while (Result < TheMax) and IsWordChar(scan^) do // ###0.940 + begin + Inc(Result); + Inc(scan); + end; + + OP_NOTLETTER: + {$IFDEF UNICODEEX} + begin + i := 0; + while (i < TheMax) and not IsWordChar(scan^) do + begin + Inc(i); + IncUnicode2(scan, Result); + end; + end; + {$ELSE} + while (Result < TheMax) and not IsWordChar(scan^) do // ###0.940 + begin + Inc(Result); + Inc(scan); + end; + {$ENDIF} + + OP_ANYSPACE: + while (Result < TheMax) and IsSpaceChar(scan^) do + begin + Inc(Result); + Inc(scan); + end; + + OP_NOTSPACE: + {$IFDEF UNICODEEX} + begin + i := 0; + while (i < TheMax) and not IsSpaceChar(scan^) do + begin + Inc(i); + IncUnicode2(scan, Result); + end; + end; + {$ELSE} + while (Result < TheMax) and not IsSpaceChar(scan^) do + begin + Inc(Result); + Inc(scan); + end; + {$ENDIF} + + OP_ANYVERTSEP: + while (Result < TheMax) and IsVertLineSeparator(scan^) do + begin + Inc(Result); + Inc(scan); + end; + + OP_NOTVERTSEP: + {$IFDEF UNICODEEX} + begin + i := 0; + while (i < TheMax) and not IsVertLineSeparator(scan^) do + begin + Inc(i); + IncUnicode2(scan, Result); + end; + end; + {$ELSE} + while (Result < TheMax) and not IsVertLineSeparator(scan^) do + begin + Inc(Result); + Inc(scan); + end; + {$ENDIF} + + OP_ANYHORZSEP: + while (Result < TheMax) and IsHorzSeparator(scan^) do + begin + Inc(Result); + Inc(scan); + end; + + OP_NOTHORZSEP: + {$IFDEF UNICODEEX} + begin + i := 0; + while (i < TheMax) and not IsHorzSeparator(scan^) do + begin + Inc(i); + IncUnicode2(scan, Result); + end; + end; + {$ELSE} + while (Result < TheMax) and not IsHorzSeparator(scan^) do + begin + Inc(Result); + Inc(scan); + end; + {$ENDIF} + + OP_ANYOF: + {$IFDEF UNICODEEX} + begin + i := 0; + while (i < TheMax) and FindInCharClass(opnd, scan^, False) do + begin + Inc(i); + IncUnicode2(scan, Result); + end; + end; + {$ELSE} + while (Result < TheMax) and FindInCharClass(opnd, scan^, False) do + begin + Inc(Result); + Inc(scan); + end; + {$ENDIF} + + OP_ANYBUT: + {$IFDEF UNICODEEX} + begin + i := 0; + while (i < TheMax) and not FindInCharClass(opnd, scan^, False) do + begin + Inc(i); + IncUnicode2(scan, Result); + end; + end; + {$ELSE} + while (Result < TheMax) and not FindInCharClass(opnd, scan^, False) do + begin + Inc(Result); + Inc(scan); + end; + {$ENDIF} + + OP_ANYOFCI: + {$IFDEF UNICODEEX} + begin + i := 0; + while (i < TheMax) and FindInCharClass(opnd, scan^, True) do + begin + Inc(i); + IncUnicode2(scan, Result); + end; + end; + {$ELSE} + while (Result < TheMax) and FindInCharClass(opnd, scan^, True) do + begin + Inc(Result); + Inc(scan); + end; + {$ENDIF} + + OP_ANYBUTCI: + {$IFDEF UNICODEEX} + begin + i := 0; + while (i < TheMax) and not FindInCharClass(opnd, scan^, True) do + begin + Inc(i); + IncUnicode2(scan, Result); + end; + end; + {$ELSE} + while (Result < TheMax) and not FindInCharClass(opnd, scan^, True) do + begin + Inc(Result); + Inc(scan); + end; + {$ENDIF} + + {$IFDEF FastUnicodeData} + OP_ANYCATEGORY: + {$IFDEF UNICODEEX} + begin + i := 0; + while (i < TheMax) and MatchOneCharCategory(opnd, scan) do + begin + Inc(i); + IncUnicode2(scan, Result); + end; + end; + {$ELSE} + while (Result < TheMax) and MatchOneCharCategory(opnd, scan) do + begin + Inc(Result); + Inc(scan); + end; + {$ENDIF} + + OP_NOTCATEGORY: + {$IFDEF UNICODEEX} + begin + i := 0; + while (i < TheMax) and not MatchOneCharCategory(opnd, scan) do + begin + Inc(i); + IncUnicode2(scan, Result); + end; + end; + {$ELSE} + while (Result < TheMax) and not MatchOneCharCategory(opnd, scan) do + begin + Inc(Result); + Inc(scan); + end; + {$ENDIF} + {$ENDIF} + + else + begin // Oh dear. Called inappropriately. + Result := 0; + Error(reeRegRepeatCalledInappropriately); + Exit; + end; + end; { of case } + regInput := scan; +end; { of function TRegExpr.FindRepeated + -------------------------------------------------------------- } + +function TRegExpr.regNext(p: PRegExprChar): PRegExprChar; +// dig the "next" pointer out of a node +var + offset: TRENextOff; +begin + if p = @regDummy then + begin + Result := nil; + Exit; + end; + offset := PRENextOff(AlignToPtr(p + REOpSz))^; // ###0.933 inlined NEXT + if offset = 0 then + Result := nil + else + Result := p + offset; +end; { of function TRegExpr.regNext + -------------------------------------------------------------- } + +function TRegExpr.MatchPrim(prog: PRegExprChar): boolean; +// recursively matching routine +// Conceptually the strategy is simple: check to see whether the current +// node matches, call self recursively to see whether the rest matches, +// and then act accordingly. In practice we make some effort to avoid +// recursion, in particular by going through "ordinary" nodes (that don't +// need to know whether the rest of the match failed) by a loop instead of +// by recursion. + +var + scan: PRegExprChar; // Current node. + next: PRegExprChar; // Next node. + Len: PtrInt; + opnd: PRegExprChar; + no: integer; + save: PRegExprChar; + saveCurrentGrp: integer; + nextch: REChar; + BracesMin, BracesMax: integer; + // we use integer instead of TREBracesArg for better support */+ + {$IFDEF ComplexBraces} + SavedLoopStack: TRegExprLoopStack; // :(( very bad for recursion + SavedLoopStackIdx: integer; // ###0.925 + {$ENDIF} + bound1, bound2: boolean; + checkAtomicGroup: boolean; +begin + Result := False; + { + // Alexey: not sure it's ok for long searches in big texts, so disabled + if regNestedCalls > MaxRegexBackTracking then + Exit; + Inc(regNestedCalls); + } + + scan := prog; + while scan <> nil do + begin + Len := PRENextOff(AlignToPtr(scan + 1))^; // ###0.932 inlined regNext + if Len = 0 then + next := nil + else + next := scan + Len; + + case scan^ of + OP_BOUND: + begin + bound1 := (regInput = fInputStart) or not IsWordChar((regInput - 1)^); + bound2 := (regInput >= fInputEnd) or not IsWordChar(regInput^); + if bound1 = bound2 then + Exit; + end; + + OP_NOTBOUND: + begin + bound1 := (regInput = fInputStart) or not IsWordChar((regInput - 1)^); + bound2 := (regInput >= fInputEnd) or not IsWordChar(regInput^); + if bound1 <> bound2 then + Exit; + end; + + OP_BOL: + begin + if regInput <> fInputStart then + Exit; + end; + + OP_EOL: + begin + // \z matches at the very end + if regInput < fInputEnd then + Exit; + end; + + OP_EOL2: + begin + // \Z matches at the very and + before the final line-break (LF and CR LF) + if regInput < fInputEnd then + begin + if (regInput = fInputEnd - 1) and (regInput^ = #10) then + begin end + else + if (regInput = fInputEnd - 2) and (regInput^ = #13) and ((regInput + 1) ^ = #10) then + begin end + else + Exit; + end; + end; + + OP_BOLML: + if regInput > fInputStart then + begin + if ((regInput - 1) <= fInputStart) or + not IsPairedBreak(regInput - 2) then + begin + // don't stop between paired separator + if IsPairedBreak(regInput - 1) then + Exit; + if not IsCustomLineSeparator((regInput - 1)^) then + Exit; + end; + end; + + OP_EOLML: + if regInput < fInputEnd then + begin + if not IsPairedBreak(regInput) then + begin + // don't stop between paired separator + if (regInput > fInputStart) and IsPairedBreak(regInput - 1) then + Exit; + if not IsCustomLineSeparator(regInput^) then + Exit; + end; + end; + + OP_ANY: + begin + if regInput >= fInputEnd then + Exit; + {$IFDEF UNICODEEX} + IncUnicode(regInput); + {$ELSE} + Inc(regInput); + {$ENDIF} + end; + + OP_ANYML: + begin + if (regInput >= fInputEnd) or + IsPairedBreak(regInput) or + IsCustomLineSeparator(regInput^) + then + Exit; + {$IFDEF UNICODEEX} + IncUnicode(regInput); + {$ELSE} + Inc(regInput); + {$ENDIF} + end; + + OP_ANYDIGIT: + begin + if (regInput >= fInputEnd) or not IsDigitChar(regInput^) then + Exit; + Inc(regInput); + end; + + OP_NOTDIGIT: + begin + if (regInput >= fInputEnd) or IsDigitChar(regInput^) then + Exit; + {$IFDEF UNICODEEX} + IncUnicode(regInput); + {$ELSE} + Inc(regInput); + {$ENDIF} + end; + + OP_ANYLETTER: + begin + if (regInput >= fInputEnd) or not IsWordChar(regInput^) then + Exit; + Inc(regInput); + end; + + OP_NOTLETTER: + begin + if (regInput >= fInputEnd) or IsWordChar(regInput^) then + Exit; + {$IFDEF UNICODEEX} + IncUnicode(regInput); + {$ELSE} + Inc(regInput); + {$ENDIF} + end; + + OP_ANYSPACE: + begin + if (regInput >= fInputEnd) or not IsSpaceChar(regInput^) then + Exit; + Inc(regInput); + end; + + OP_NOTSPACE: + begin + if (regInput >= fInputEnd) or IsSpaceChar(regInput^) then + Exit; + {$IFDEF UNICODEEX} + IncUnicode(regInput); + {$ELSE} + Inc(regInput); + {$ENDIF} + end; + + OP_ANYVERTSEP: + begin + if (regInput >= fInputEnd) or not IsVertLineSeparator(regInput^) then + Exit; + Inc(regInput); + end; + + OP_NOTVERTSEP: + begin + if (regInput >= fInputEnd) or IsVertLineSeparator(regInput^) then + Exit; + {$IFDEF UNICODEEX} + IncUnicode(regInput); + {$ELSE} + Inc(regInput); + {$ENDIF} + end; + + OP_ANYHORZSEP: + begin + if (regInput >= fInputEnd) or not IsHorzSeparator(regInput^) then + Exit; + Inc(regInput); + end; + + OP_NOTHORZSEP: + begin + if (regInput >= fInputEnd) or IsHorzSeparator(regInput^) then + Exit; + {$IFDEF UNICODEEX} + IncUnicode(regInput); + {$ELSE} + Inc(regInput); + {$ENDIF} + end; + + OP_EXACTLYCI: + begin + opnd := scan + REOpSz + RENextOffSz; // OPERAND + Len := PLongInt(opnd)^; + Inc(opnd, RENumberSz); + // Inline the first character, for speed. + if (opnd^ <> regInput^) and (InvertCase(opnd^) <> regInput^) then + Exit; + // ###0.929 begin + no := Len; + save := regInput; + while no > 1 do + begin + Inc(save); + Inc(opnd); + if (opnd^ <> save^) and (InvertCase(opnd^) <> save^) then + Exit; + Dec(no); + end; + // ###0.929 end + Inc(regInput, Len); + end; + + OP_EXACTLY: + begin + opnd := scan + REOpSz + RENextOffSz; // OPERAND + Len := PLongInt(opnd)^; + Inc(opnd, RENumberSz); + // Inline the first character, for speed. + if opnd^ <> regInput^ then + Exit; + // ###0.929 begin + no := Len; + save := regInput; + while no > 1 do + begin + Inc(save); + Inc(opnd); + if opnd^ <> save^ then + Exit; + Dec(no); + end; + // ###0.929 end + Inc(regInput, Len); + end; + + OP_BSUBEXP: + begin // ###0.936 + no := Ord((scan + REOpSz + RENextOffSz)^); + no := GrpIndexes[no]; + if no < 0 then + Exit; + if GrpStart[no] = nil then + Exit; + if GrpEnd[no] = nil then + Exit; + save := regInput; + opnd := GrpStart[no]; + while opnd < GrpEnd[no] do + begin + if (save >= fInputEnd) or (save^ <> opnd^) then + Exit; + Inc(save); + Inc(opnd); + end; + regInput := save; + end; + + OP_BSUBEXPCI: + begin // ###0.936 + no := Ord((scan + REOpSz + RENextOffSz)^); + no := GrpIndexes[no]; + if no < 0 then + Exit; + if GrpStart[no] = nil then + Exit; + if GrpEnd[no] = nil then + Exit; + save := regInput; + opnd := GrpStart[no]; + while opnd < GrpEnd[no] do + begin + if (save >= fInputEnd) or + ((save^ <> opnd^) and (save^ <> InvertCase(opnd^))) then + Exit; + Inc(save); + Inc(opnd); + end; + regInput := save; + end; + + OP_ANYOF: + begin + if (regInput >= fInputEnd) or + not FindInCharClass(scan + REOpSz + RENextOffSz, regInput^, False) then + Exit; + {$IFDEF UNICODEEX} + IncUnicode(regInput); + {$ELSE} + Inc(regInput); + {$ENDIF} + end; + + OP_ANYBUT: + begin + if (regInput >= fInputEnd) or + FindInCharClass(scan + REOpSz + RENextOffSz, regInput^, False) then + Exit; + {$IFDEF UNICODEEX} + IncUnicode(regInput); + {$ELSE} + Inc(regInput); + {$ENDIF} + end; + + OP_ANYOFCI: + begin + if (regInput >= fInputEnd) or + not FindInCharClass(scan + REOpSz + RENextOffSz, regInput^, True) then + Exit; + {$IFDEF UNICODEEX} + IncUnicode(regInput); + {$ELSE} + Inc(regInput); + {$ENDIF} + end; + + OP_ANYBUTCI: + begin + if (regInput >= fInputEnd) or + FindInCharClass(scan + REOpSz + RENextOffSz, regInput^, True) then + Exit; + {$IFDEF UNICODEEX} + IncUnicode(regInput); + {$ELSE} + Inc(regInput); + {$ENDIF} + end; + + OP_NOTHING: + ; + OP_COMMENT: + ; + OP_BACK: + ; + + OP_OPEN_FIRST .. OP_OPEN_LAST: + begin + no := Ord(scan^) - Ord(OP_OPEN); + regCurrentGrp := no; + save := GrpStart[no]; // ###0.936 + GrpStart[no] := regInput; // ###0.936 + Result := MatchPrim(next); + if not Result then // ###0.936 + GrpStart[no] := save; + // handle negative lookahead + if regLookaheadNeg then + if no = regLookaheadGroup then + begin + Result := not Result; + if Result then + begin + // we need zero length of "lookahead group", + // it is later used to adjust the match + GrpStart[no] := regInput; + GrpEnd[no]:= regInput; + end + else + GrpStart[no] := save; + end; + Exit; + end; + + OP_CLOSE_FIRST .. OP_CLOSE_LAST: + begin + no := Ord(scan^) - Ord(OP_CLOSE); + regCurrentGrp := -1; + // handle atomic group, mark it as "done" + // (we are here because some OP_BRANCH is matched) + if GrpAtomic[no] then + GrpAtomicDone[no] := True; + save := GrpEnd[no]; // ###0.936 + GrpEnd[no] := regInput; // ###0.936 + + // if we are in OP_SUBCALL* call, it called OP_OPEN*, so we must return + // in OP_CLOSE, without going to next opcode + if GrpSubCalled[no] then + begin + Result := True; + Exit; + end; + + Result := MatchPrim(next); + if not Result then // ###0.936 + GrpEnd[no] := save; + Exit; + end; + + OP_BRANCH: + begin + saveCurrentGrp := regCurrentGrp; + checkAtomicGroup := (regCurrentGrp >= 0) and GrpAtomic[regCurrentGrp]; + if (next^ <> OP_BRANCH) // No next choice in group + then + next := scan + REOpSz + RENextOffSz // Avoid recursion + else + begin + repeat + save := regInput; + Result := MatchPrim(scan + REOpSz + RENextOffSz); + regCurrentGrp := saveCurrentGrp; + if Result then + Exit; + // if branch worked until OP_CLOSE, and marked atomic group as "done", then exit + if checkAtomicGroup then + if GrpAtomicDone[regCurrentGrp] then + Exit; + regInput := save; + scan := regNext(scan); + until (scan = nil) or (scan^ <> OP_BRANCH); + Exit; + end; + end; + + {$IFDEF ComplexBraces} + OP_LOOPENTRY: + begin // ###0.925 + no := LoopStackIdx; + Inc(LoopStackIdx); + if LoopStackIdx > LoopStackMax then + begin + Error(reeLoopStackExceeded); + Exit; + end; + save := regInput; + LoopStack[LoopStackIdx] := 0; // init loop counter + Result := MatchPrim(next); // execute loop + LoopStackIdx := no; // cleanup + if Result then + Exit; + regInput := save; + Exit; + end; + + OP_LOOP, OP_LOOPNG: + begin // ###0.940 + if LoopStackIdx <= 0 then + begin + Error(reeLoopWithoutEntry); + Exit; + end; + opnd := scan + PRENextOff(AlignToPtr(scan + REOpSz + RENextOffSz + 2 * REBracesArgSz))^; + BracesMin := PREBracesArg(AlignToInt(scan + REOpSz + RENextOffSz))^; + BracesMax := PREBracesArg(AlignToPtr(scan + REOpSz + RENextOffSz + REBracesArgSz))^; + save := regInput; + if LoopStack[LoopStackIdx] >= BracesMin then + begin // Min alredy matched - we can work + if scan^ = OP_LOOP then + begin + // greedy way - first try to max deep of greed ;) + if LoopStack[LoopStackIdx] < BracesMax then + begin + Inc(LoopStack[LoopStackIdx]); + no := LoopStackIdx; + Result := MatchPrim(opnd); + LoopStackIdx := no; + if Result then + Exit; + regInput := save; + end; + Dec(LoopStackIdx); // Fail. May be we are too greedy? ;) + Result := MatchPrim(next); + if not Result then + regInput := save; + Exit; + end + else + begin + // non-greedy - try just now + Result := MatchPrim(next); + if Result then + Exit + else + regInput := save; // failed - move next and try again + if LoopStack[LoopStackIdx] < BracesMax then + begin + Inc(LoopStack[LoopStackIdx]); + no := LoopStackIdx; + Result := MatchPrim(opnd); + LoopStackIdx := no; + if Result then + Exit; + regInput := save; + end; + Dec(LoopStackIdx); // Failed - back up + Exit; + end + end + else + begin // first match a min_cnt times + Inc(LoopStack[LoopStackIdx]); + no := LoopStackIdx; + Result := MatchPrim(opnd); + LoopStackIdx := no; + if Result then + Exit; + Dec(LoopStack[LoopStackIdx]); + regInput := save; + Exit; + end; + end; + {$ENDIF} + + OP_STAR, OP_PLUS, OP_BRACES, OP_STARNG, OP_PLUSNG, OP_BRACESNG: + begin + // Lookahead to avoid useless match attempts when we know + // what character comes next. + nextch := #0; + if next^ = OP_EXACTLY then + nextch := (next + REOpSz + RENextOffSz + RENumberSz)^; + BracesMax := MaxInt; // infinite loop for * and + //###0.92 + if (scan^ = OP_STAR) or (scan^ = OP_STARNG) then + BracesMin := 0 // star + else if (scan^ = OP_PLUS) or (scan^ = OP_PLUSNG) then + BracesMin := 1 // plus + else + begin // braces + BracesMin := PREBracesArg(AlignToPtr(scan + REOpSz + RENextOffSz))^; + BracesMax := PREBracesArg(AlignToPtr(scan + REOpSz + RENextOffSz + REBracesArgSz))^; + end; + save := regInput; + opnd := scan + REOpSz + RENextOffSz; + if (scan^ = OP_BRACES) or (scan^ = OP_BRACESNG) then + Inc(opnd, 2 * REBracesArgSz); + + if (scan^ = OP_PLUSNG) or (scan^ = OP_STARNG) or (scan^ = OP_BRACESNG) then + begin + // non-greedy mode + BracesMax := FindRepeated(opnd, BracesMax); + // don't repeat more than BracesMax + // Now we know real Max limit to move forward (for recursion 'back up') + // In some cases it can be faster to check only Min positions first, + // but after that we have to check every position separtely instead + // of fast scannig in loop. + no := BracesMin; + while no <= BracesMax do + begin + regInput := save + no; + // If it could work, try it. + if (nextch = #0) or (regInput^ = nextch) then + begin + {$IFDEF ComplexBraces} + System.Move(LoopStack, SavedLoopStack, SizeOf(LoopStack)); + // ###0.925 + SavedLoopStackIdx := LoopStackIdx; + {$ENDIF} + if MatchPrim(next) then + begin + Result := True; + Exit; + end; + {$IFDEF ComplexBraces} + System.Move(SavedLoopStack, LoopStack, SizeOf(LoopStack)); + LoopStackIdx := SavedLoopStackIdx; + {$ENDIF} + end; + Inc(no); // Couldn't or didn't - move forward. + end; { of while } + Exit; + end + else + begin // greedy mode + no := FindRepeated(opnd, BracesMax); // don't repeat more than max_cnt + while no >= BracesMin do + begin + // If it could work, try it. + if (nextch = #0) or (regInput^ = nextch) then + begin + {$IFDEF ComplexBraces} + System.Move(LoopStack, SavedLoopStack, SizeOf(LoopStack)); + // ###0.925 + SavedLoopStackIdx := LoopStackIdx; + {$ENDIF} + if MatchPrim(next) then + begin + Result := True; + Exit; + end; + {$IFDEF ComplexBraces} + System.Move(SavedLoopStack, LoopStack, SizeOf(LoopStack)); + LoopStackIdx := SavedLoopStackIdx; + {$ENDIF} + end; + Dec(no); // Couldn't or didn't - back up. + regInput := save + no; + end; { of while } + Exit; + end; + end; + + OP_STAR_POSS, OP_PLUS_POSS, OP_BRACES_POSS: + begin + // Lookahead to avoid useless match attempts when we know + // what character comes next. + nextch := #0; + if next^ = OP_EXACTLY then + nextch := (next + REOpSz + RENextOffSz + RENumberSz)^; + opnd := scan + REOpSz + RENextOffSz; + case scan^ of + OP_STAR_POSS: + begin + BracesMin := 0; + BracesMax := MaxInt; + end; + OP_PLUS_POSS: + begin + BracesMin := 1; + BracesMax := MaxInt; + end; + else + begin // braces + BracesMin := PREBracesArg(AlignToPtr(scan + REOpSz + RENextOffSz))^; + BracesMax := PREBracesArg(AlignToPtr(scan + REOpSz + RENextOffSz + REBracesArgSz))^; + Inc(opnd, 2 * REBracesArgSz); + end; + end; + no := FindRepeated(opnd, BracesMax); + if no >= BracesMin then + if (nextch = #0) or (regInput^ = nextch) then + Result := MatchPrim(next); + Exit; + end; + + OP_EEND: + begin + Result := True; // Success! + Exit; + end; + + {$IFDEF FastUnicodeData} + OP_ANYCATEGORY: + begin + if (regInput >= fInputEnd) then Exit; + if not MatchOneCharCategory(scan + REOpSz + RENextOffSz, regInput) then Exit; + {$IFDEF UNICODEEX} + IncUnicode(regInput); + {$ELSE} + Inc(regInput); + {$ENDIF} + end; + + OP_NOTCATEGORY: + begin + if (regInput >= fInputEnd) then Exit; + if MatchOneCharCategory(scan + REOpSz + RENextOffSz, regInput) then Exit; + {$IFDEF UNICODEEX} + IncUnicode(regInput); + {$ELSE} + Inc(regInput); + {$ENDIF} + end; + {$ENDIF} + + OP_RECUR: + begin + // call opcode start + if not MatchPrim(regCodeWork) then Exit; + end; + + OP_SUBCALL_FIRST .. OP_SUBCALL_LAST: + begin + // call subroutine + no := GrpIndexes[Ord(scan^) - Ord(OP_SUBCALL)]; + if no < 0 then Exit; + save := GrpOpCodes[no]; + if save = nil then Exit; + checkAtomicGroup := GrpSubCalled[no]; + // mark group in GrpSubCalled array so opcode can detect subcall + GrpSubCalled[no] := True; + if not MatchPrim(save) then + begin + GrpSubCalled[no] := checkAtomicGroup; + Exit; + end; + GrpSubCalled[no] := checkAtomicGroup; + end; + + else + begin + Error(reeMatchPrimMemoryCorruption); + Exit; + end; + end; { of case scan^ } + scan := next; + end; { of while scan <> nil } + + // We get here only if there's trouble -- normally "case EEND" is the + // terminating point. + Error(reeMatchPrimCorruptedPointers); +end; { of function TRegExpr.MatchPrim + -------------------------------------------------------------- } + +function TRegExpr.Exec(const AInputString: RegExprString): boolean; +begin + InputString := AInputString; + Result := ExecPrim(1, False, False, False); +end; { of function TRegExpr.Exec + -------------------------------------------------------------- } + +{$IFDEF OverMeth} +function TRegExpr.Exec: boolean; +var + SlowChecks: boolean; +begin + SlowChecks := Length(fInputString) < fSlowChecksSizeMax; + Result := ExecPrim(1, False, SlowChecks, False); +end; { of function TRegExpr.Exec + -------------------------------------------------------------- } + +function TRegExpr.Exec(AOffset: integer): boolean; +begin + Result := ExecPrim(AOffset, False, False, False); +end; { of function TRegExpr.Exec + -------------------------------------------------------------- } +{$ENDIF} + +function TRegExpr.ExecPos(AOffset: integer {$IFDEF DefParam} = 1{$ENDIF}): boolean; +begin + Result := ExecPrim(AOffset, False, False, False); +end; { of function TRegExpr.ExecPos + -------------------------------------------------------------- } + +{$IFDEF OverMeth} +function TRegExpr.ExecPos(AOffset: integer; ATryOnce, ABackward: boolean): boolean; +begin + Result := ExecPrim(AOffset, ATryOnce, False, ABackward); +end; +{$ENDIF} + +function TRegExpr.MatchAtOnePos(APos: PRegExprChar): boolean; +begin + // test for lookbehind '(?<!foo)bar' before running actual MatchPrim + if Assigned(fHelper) then + if (APos - fHelperLen) >= fInputStart then + begin + fHelper.SetInputRange(APos - fHelperLen, APos); + if fHelper.MatchAtOnePos(APos - fHelperLen) then + begin + Result := False; + Exit; + end; + end; + + regInput := APos; + regCurrentGrp := -1; + regNestedCalls := 0; + Result := MatchPrim(regCodeWork); + if Result then + begin + GrpStart[0] := APos; + GrpEnd[0] := regInput; + + // with lookbehind, increase found position by the len of group=1 + if regLookbehind then + Inc(GrpStart[0], GrpEnd[1] - GrpStart[1]); + + // with lookahead, decrease ending by the len of group=regLookaheadGroup + if regLookahead and (regLookaheadGroup > 0) then + Dec(GrpEnd[0], GrpEnd[regLookaheadGroup] - GrpStart[regLookaheadGroup]); + end; +end; + +procedure TRegExpr.ClearMatches; +begin + FillChar(GrpStart, SizeOf(GrpStart), 0); + FillChar(GrpEnd, SizeOf(GrpEnd), 0); + + FillChar(GrpAtomicDone, SizeOf(GrpAtomicDone), 0); + FillChar(GrpSubCalled, SizeOf(GrpSubCalled), 0); +end; + +procedure TRegExpr.ClearInternalIndexes; +var + i: integer; +begin + FillChar(GrpStart, SizeOf(GrpStart), 0); + FillChar(GrpEnd, SizeOf(GrpEnd), 0); + + FillChar(GrpAtomic, SizeOf(GrpAtomic), 0); + FillChar(GrpAtomicDone, SizeOf(GrpAtomicDone), 0); + FillChar(GrpSubCalled, SizeOf(GrpSubCalled), 0); + FillChar(GrpOpCodes, SizeOf(GrpOpCodes), 0); + + for i := 0 to RegexMaxGroups - 1 do + begin + GrpIndexes[i] := -1; + GrpNames[i] := ''; + end; + GrpIndexes[0] := 0; + GrpCount := 0; +end; + +function TRegExpr.ExecPrim(AOffset: integer; + ATryOnce, ASlowChecks, ABackward: boolean): boolean; +var + Ptr: PRegExprChar; +begin + Result := False; + + // Ensure that Match cleared either if optimization tricks or some error + // will lead to leaving ExecPrim without actual search. That is + // important for ExecNext logic and so on. + ClearMatches; + + // Don't check IsProgrammOk here! it causes big slowdown in test_benchmark! + if programm = nil then + begin + Compile; + if programm = nil then + Exit; + end; + + if fInputString = '' then + begin + //Error(reeNoInputStringSpecified); // better don't raise error, breaks some apps + Exit; + end; + + // Check that the start position is not negative + if AOffset < 1 then + begin + Error(reeOffsetMustBePositive); + Exit; + end; + + // Check that the start position is not longer than the line + if AOffset > (Length(fInputString) + 1) then + Exit; + + Ptr := fInputStart + AOffset - 1; + + // If there is a "must appear" string, look for it. + if ASlowChecks then + if regMustString <> '' then + if Pos(regMustString, fInputString) = 0 then Exit; + + {$IFDEF ComplexBraces} + // no loops started + LoopStackIdx := 0; // ###0.925 + {$ENDIF} + + // ATryOnce or anchored match (it needs to be tried only once). + if ATryOnce or (regAnchored <> #0) then + begin + {$IFDEF UseFirstCharSet} + {$IFDEF UniCode} + if Ord(Ptr^) <= $FF then + {$ENDIF} + if not FirstCharArray[byte(Ptr^)] then + Exit; + {$ENDIF} + + Result := MatchAtOnePos(Ptr); + Exit; + end; + + // Messy cases: unanchored match. + if ABackward then + Inc(Ptr, 2) + else + Dec(Ptr); + repeat + if ABackward then + begin + Dec(Ptr); + if Ptr < fInputStart then + Exit; + end + else + begin + Inc(Ptr); + if Ptr > fInputEnd then + Exit; + end; + + {$IFDEF UseFirstCharSet} + {$IFDEF UniCode} + if Ord(Ptr^) <= $FF then + {$ENDIF} + if not FirstCharArray[byte(Ptr^)] then + Continue; + {$ENDIF} + + Result := MatchAtOnePos(Ptr); + // Exit on a match or after testing the end-of-string + if Result then + Exit; + until False; +end; { of function TRegExpr.ExecPrim + -------------------------------------------------------------- } + +function TRegExpr.ExecNext(ABackward: boolean {$IFDEF DefParam} = False{$ENDIF}): boolean; +var + PtrBegin, PtrEnd: PRegExprChar; + Offset: PtrInt; +begin + PtrBegin := GrpStart[0]; + PtrEnd := GrpEnd[0]; + if (PtrBegin = nil) or (PtrEnd = nil) then + begin + Error(reeExecNextWithoutExec); + Result := False; + Exit; + end; + + Offset := PtrEnd - fInputStart + 1; + // prevent infinite looping if empty string matches r.e. + if PtrBegin = PtrEnd then + Inc(Offset); + + Result := ExecPrim(Offset, False, False, ABackward); +end; { of function TRegExpr.ExecNext + -------------------------------------------------------------- } + +procedure TRegExpr.SetInputString(const AInputString: RegExprString); +begin + ClearMatches; + + fInputString := AInputString; + UniqueString(fInputString); + + fInputStart := PRegExprChar(fInputString); + fInputEnd := fInputStart + Length(fInputString); +end; + +procedure TRegExpr.SetInputRange(AStart, AEnd: PRegExprChar); +begin + fInputString := ''; + fInputStart := AStart; + fInputEnd := AEnd; +end; + +{$IFDEF UseLineSep} +procedure TRegExpr.SetLineSeparators(const AStr: RegExprString); +begin + if AStr <> fLineSeparators then + begin + fLineSeparators := AStr; + InitLineSepArray; + InvalidateProgramm; + end; +end; { of procedure TRegExpr.SetLineSeparators + -------------------------------------------------------------- } +{$ENDIF} + +procedure TRegExpr.SetUsePairedBreak(AValue: boolean); +begin + if AValue <> fUsePairedBreak then + begin + fUsePairedBreak := AValue; + InvalidateProgramm; + end; +end; + +function TRegExpr.Substitute(const ATemplate: RegExprString): RegExprString; +// perform substitutions after a regexp match +var + TemplateBeg, TemplateEnd: PRegExprChar; + + function ParseVarName(var APtr: PRegExprChar): integer; + // extract name of variable: $1 or ${1} or ${name} + // from APtr^, uses TemplateEnd + var + p: PRegExprChar; + Delimited: boolean; + GrpName: RegExprString; + begin + Result := 0; + p := APtr; + Delimited := (p < TemplateEnd) and (p^ = '{'); + if Delimited then + Inc(p); // skip left curly brace + if (p < TemplateEnd) and (p^ = '&') then + Inc(p) // this is '$&' or '${&}' + else + begin + if IsDigitChar(p^) then + begin + while (p < TemplateEnd) and IsDigitChar(p^) do + begin + Result := Result * 10 + (Ord(p^) - Ord('0')); + Inc(p); + end + end + else + if Delimited then + begin + FindGroupName(p, '}', GrpName); + Result := MatchIndexFromName(GrpName); + Inc(p, Length(GrpName)); + end; + end; + if Delimited then + if (p < TemplateEnd) and (p^ = '}') then + Inc(p) // skip right curly brace + else + p := APtr; // isn't properly terminated + if p = APtr then + Result := -1; // no valid digits found or no right curly brace + APtr := p; + end; + + procedure FindSubstGroupIndex(var p: PRegExprChar; var Idx: integer); {$IFDEF InlineFuncs}inline;{$ENDIF} + begin + Idx := ParseVarName(p); + if (Idx >= 0) and (Idx <= High(GrpIndexes)) then + Idx := GrpIndexes[Idx]; + end; + +type + TSubstMode = (smodeNormal, smodeOneUpper, smodeOneLower, smodeAllUpper, smodeAllLower); +var + Mode: TSubstMode; + p, p0, p1, ResultPtr: PRegExprChar; + ResultLen, n: integer; + Ch, QuotedChar: REChar; +begin + // Check programm and input string + if not IsProgrammOk then + Exit; + // Note: don't check for empty fInputString, it's valid case, + // e.g. user needs to replace regex "\b" to "_", it's zero match length + if ATemplate = '' then + begin + Result := ''; + Exit; + end; + TemplateBeg := PRegExprChar(ATemplate); + TemplateEnd := TemplateBeg + Length(ATemplate); + // Count result length for speed optimization. + ResultLen := 0; + p := TemplateBeg; + while p < TemplateEnd do + begin + Ch := p^; + Inc(p); + n := -1; + if Ch = SubstituteGroupChar then + FindSubstGroupIndex(p, n); + if n >= 0 then + begin + Inc(ResultLen, GrpEnd[n] - GrpStart[n]); + end + else + begin + if (Ch = EscChar) and (p < TemplateEnd) then + begin // quoted or special char followed + Ch := p^; + Inc(p); + case Ch of + 'n': + Inc(ResultLen, Length(fReplaceLineEnd)); + 'u', 'l', 'U', 'L': { nothing } + ; + 'x': + begin + Inc(ResultLen); + if (p^ = '{') then + begin // skip \x{....} + while ((p^ <> '}') and (p < TemplateEnd)) do + p := p + 1; + p := p + 1; + end + else + p := p + 2 // skip \x.. + end; + else + Inc(ResultLen); + end; + end + else + Inc(ResultLen); + end; + end; + // Get memory. We do it once and it significant speed up work ! + if ResultLen = 0 then + begin + Result := ''; + Exit; + end; + SetLength(Result, ResultLen); + // Fill Result + ResultPtr := PRegExprChar(Result); + p := TemplateBeg; + Mode := smodeNormal; + while p < TemplateEnd do + begin + Ch := p^; + p0 := p; + Inc(p); + p1 := p; + n := -1; + if Ch = SubstituteGroupChar then + FindSubstGroupIndex(p, n); + if (n >= 0) then + begin + p0 := GrpStart[n]; + p1 := GrpEnd[n]; + end + else + begin + if (Ch = EscChar) and (p < TemplateEnd) then + begin // quoted or special char followed + Ch := p^; + Inc(p); + case Ch of + 'n': + begin + p0 := PRegExprChar(fReplaceLineEnd); + p1 := p0 + Length(fReplaceLineEnd); + end; + 'x', 't', 'r', 'f', 'a', 'e': + begin + p := p - 1; + // UnquoteChar expects the escaped char under the pointer + QuotedChar := UnQuoteChar(p); + p := p + 1; + // Skip after last part of the escaped sequence - UnquoteChar stops on the last symbol of it + p0 := @QuotedChar; + p1 := p0 + 1; + end; + 'l': + begin + Mode := smodeOneLower; + p1 := p0; + end; + 'L': + begin + Mode := smodeAllLower; + p1 := p0; + end; + 'u': + begin + Mode := smodeOneUpper; + p1 := p0; + end; + 'U': + begin + Mode := smodeAllUpper; + p1 := p0; + end; + else + begin + Inc(p0); + Inc(p1); + end; + end; + end + end; + if p0 < p1 then + begin + while p0 < p1 do + begin + case Mode of + smodeOneLower: + begin + ResultPtr^ := _LowerCase(p0^); + Mode := smodeNormal; + end; + smodeAllLower: + begin + ResultPtr^ := _LowerCase(p0^); + end; + smodeOneUpper: + begin + ResultPtr^ := _UpperCase(p0^); + Mode := smodeNormal; + end; + smodeAllUpper: + begin + ResultPtr^ := _UpperCase(p0^); + end; + else + ResultPtr^ := p0^; + end; + Inc(ResultPtr); + Inc(p0); + end; + Mode := smodeNormal; + end; + end; +end; { of function TRegExpr.Substitute + -------------------------------------------------------------- } + +procedure TRegExpr.Split(const AInputStr: RegExprString; APieces: TStrings); +var + PrevPos: PtrInt; +begin + PrevPos := 1; + if Exec(AInputStr) then + repeat + APieces.Add(System.Copy(AInputStr, PrevPos, MatchPos[0] - PrevPos)); + PrevPos := MatchPos[0] + MatchLen[0]; + until not ExecNext; + APieces.Add(System.Copy(AInputStr, PrevPos, MaxInt)); // Tail +end; { of procedure TRegExpr.Split + -------------------------------------------------------------- } + +function TRegExpr.Replace(const AInputStr: RegExprString; + const AReplaceStr: RegExprString; + AUseSubstitution: boolean{$IFDEF DefParam} = False{$ENDIF}): RegExprString; +var + PrevPos: PtrInt; +begin + Result := ''; + PrevPos := 1; + if Exec(AInputStr) then + repeat + Result := Result + System.Copy(AInputStr, PrevPos, MatchPos[0] - PrevPos); + if AUseSubstitution // ###0.946 + then + Result := Result + Substitute(AReplaceStr) + else + Result := Result + AReplaceStr; + PrevPos := MatchPos[0] + MatchLen[0]; + until not ExecNext; + Result := Result + System.Copy(AInputStr, PrevPos, MaxInt); // Tail +end; { of function TRegExpr.Replace + -------------------------------------------------------------- } + +function TRegExpr.ReplaceEx(const AInputStr: RegExprString; + AReplaceFunc: TRegExprReplaceFunction): RegExprString; +var + PrevPos: PtrInt; +begin + Result := ''; + PrevPos := 1; + if Exec(AInputStr) then + repeat + Result := Result + System.Copy(AInputStr, PrevPos, MatchPos[0] - PrevPos) + + AReplaceFunc(Self); + PrevPos := MatchPos[0] + MatchLen[0]; + until not ExecNext; + Result := Result + System.Copy(AInputStr, PrevPos, MaxInt); // Tail +end; { of function TRegExpr.ReplaceEx + -------------------------------------------------------------- } + +{$IFDEF OverMeth} +function TRegExpr.Replace(const AInputStr: RegExprString; + AReplaceFunc: TRegExprReplaceFunction): RegExprString; +begin + Result := ReplaceEx(AInputStr, AReplaceFunc); +end; { of function TRegExpr.Replace + -------------------------------------------------------------- } +{$ENDIF} +{ ============================================================= } +{ ====================== Debug section ======================== } +{ ============================================================= } + +{$IFDEF UseFirstCharSet} +procedure TRegExpr.FillFirstCharSet(prog: PRegExprChar); +var + scan: PRegExprChar; // Current node. + Next: PRegExprChar; // Next node. + opnd: PRegExprChar; + Oper: TREOp; + ch: REChar; + min_cnt, i: integer; + TempSet: TRegExprCharset; +begin + TempSet := []; + scan := prog; + while scan <> nil do + begin + Next := regNext(scan); + Oper := PREOp(scan)^; + case Oper of + OP_BSUBEXP, + OP_BSUBEXPCI: + begin + // we cannot optimize r.e. if it starts with back reference + FirstCharSet := RegExprAllSet; //###0.930 + Exit; + end; + + OP_BOL, + OP_BOLML: + ; // Exit; //###0.937 + + OP_EOL, + OP_EOL2, + OP_EOLML: + begin //###0.948 was empty in 0.947, was EXIT in 0.937 + Include(FirstCharSet, 0); + if ModifierM then + begin + {$IFDEF UseLineSep} + for i := 1 to Length(LineSeparators) do + Include(FirstCharSet, byte(LineSeparators[i])); + {$ELSE} + FirstCharSet := FirstCharSet + RegExprLineSeparatorsSet; + {$ENDIF} + end; + Exit; + end; + + OP_BOUND, + OP_NOTBOUND: + ; //###0.943 ?!! + + OP_ANY, + OP_ANYML: + begin // we can better define ANYML !!! + FirstCharSet := RegExprAllSet; //###0.930 + Exit; + end; + + OP_ANYDIGIT: + begin + FirstCharSet := FirstCharSet + RegExprDigitSet; + Exit; + end; + + OP_NOTDIGIT: + begin + FirstCharSet := FirstCharSet + (RegExprAllSet - RegExprDigitSet); + Exit; + end; + + OP_ANYLETTER: + begin + GetCharSetFromWordChars(TempSet); + FirstCharSet := FirstCharSet + TempSet; + Exit; + end; + + OP_NOTLETTER: + begin + GetCharSetFromWordChars(TempSet); + FirstCharSet := FirstCharSet + (RegExprAllSet - TempSet); + Exit; + end; + + OP_ANYSPACE: + begin + GetCharSetFromSpaceChars(TempSet); + FirstCharSet := FirstCharSet + TempSet; + Exit; + end; + + OP_NOTSPACE: + begin + GetCharSetFromSpaceChars(TempSet); + FirstCharSet := FirstCharSet + (RegExprAllSet - TempSet); + Exit; + end; + + OP_ANYVERTSEP: + begin + FirstCharSet := FirstCharSet + RegExprLineSeparatorsSet; + Exit; + end; + + OP_NOTVERTSEP: + begin + FirstCharSet := FirstCharSet + (RegExprAllSet - RegExprLineSeparatorsSet); + Exit; + end; + + OP_ANYHORZSEP: + begin + FirstCharSet := FirstCharSet + RegExprHorzSeparatorsSet; + Exit; + end; + + OP_NOTHORZSEP: + begin + FirstCharSet := FirstCharSet + (RegExprAllSet - RegExprHorzSeparatorsSet); + Exit; + end; + + OP_EXACTLYCI: + begin + ch := (scan + REOpSz + RENextOffSz + RENumberSz)^; + {$IFDEF UniCode} + if Ord(ch) <= $FF then + {$ENDIF} + begin + Include(FirstCharSet, byte(ch)); + Include(FirstCharSet, byte(InvertCase(ch))); + end; + Exit; + end; + + OP_EXACTLY: + begin + ch := (scan + REOpSz + RENextOffSz + RENumberSz)^; + {$IFDEF UniCode} + if Ord(ch) <= $FF then + {$ENDIF} + Include(FirstCharSet, byte(ch)); + Exit; + end; + + OP_ANYOF: + begin + GetCharSetFromCharClass(scan + REOpSz + RENextOffSz, False, TempSet); + FirstCharSet := FirstCharSet + TempSet; + Exit; + end; + + OP_ANYBUT: + begin + GetCharSetFromCharClass(scan + REOpSz + RENextOffSz, False, TempSet); + FirstCharSet := FirstCharSet + (RegExprAllSet - TempSet); + Exit; + end; + + OP_ANYOFCI: + begin + GetCharSetFromCharClass(scan + REOpSz + RENextOffSz, True, TempSet); + FirstCharSet := FirstCharSet + TempSet; + Exit; + end; + + OP_ANYBUTCI: + begin + GetCharSetFromCharClass(scan + REOpSz + RENextOffSz, True, TempSet); + FirstCharSet := FirstCharSet + (RegExprAllSet - TempSet); + Exit; + end; + + OP_NOTHING: + ; + OP_COMMENT: + ; + OP_BACK: + ; + + OP_OPEN_FIRST .. OP_OPEN_LAST: + begin + FillFirstCharSet(Next); + Exit; + end; + + OP_CLOSE_FIRST .. OP_CLOSE_LAST: + begin + FillFirstCharSet(Next); + Exit; + end; + + OP_BRANCH: + begin + if (PREOp(Next)^ <> OP_BRANCH) // No choice. + then + Next := scan + REOpSz + RENextOffSz // Avoid recursion. + else + begin + repeat + FillFirstCharSet(scan + REOpSz + RENextOffSz); + scan := regNext(scan); + until (scan = nil) or (PREOp(scan)^ <> OP_BRANCH); + Exit; + end; + end; + + {$IFDEF ComplexBraces} + OP_LOOPENTRY: + begin //###0.925 + //LoopStack [LoopStackIdx] := 0; //###0.940 line removed + FillFirstCharSet(Next); // execute LOOP + Exit; + end; + + OP_LOOP, + OP_LOOPNG: + begin //###0.940 + opnd := scan + PRENextOff(AlignToPtr(scan + REOpSz + RENextOffSz + REBracesArgSz * 2))^; + min_cnt := PREBracesArg(AlignToPtr(scan + REOpSz + RENextOffSz))^; + FillFirstCharSet(opnd); + if min_cnt = 0 then + FillFirstCharSet(Next); + Exit; + end; + {$ENDIF} + + OP_STAR, + OP_STARNG, + OP_STAR_POSS: //###0.940 + FillFirstCharSet(scan + REOpSz + RENextOffSz); + + OP_PLUS, + OP_PLUSNG, + OP_PLUS_POSS: + begin //###0.940 + FillFirstCharSet(scan + REOpSz + RENextOffSz); + Exit; + end; + + OP_BRACES, + OP_BRACESNG, + OP_BRACES_POSS: + begin //###0.940 + opnd := scan + REOpSz + RENextOffSz + REBracesArgSz * 2; + min_cnt := PREBracesArg(AlignToPtr(scan + REOpSz + RENextOffSz))^; // BRACES + FillFirstCharSet(opnd); + if min_cnt > 0 then + Exit; + end; + + OP_EEND: + begin + FirstCharSet := RegExprAllSet; //###0.948 + Exit; + end; + + OP_ANYCATEGORY, + OP_NOTCATEGORY: + begin + FirstCharSet := RegExprAllSet; + Exit; + end; + + OP_RECUR, + OP_SUBCALL_FIRST .. OP_SUBCALL_LAST: + begin + end + + else + begin + fLastErrorOpcode := Oper; + Error(reeUnknownOpcodeInFillFirst); + Exit; + end; + end; { of case scan^} + scan := Next; + end; { of while scan <> nil} +end; { of procedure FillFirstCharSet +--------------------------------------------------------------} +{$ENDIF} + +procedure TRegExpr.InitCharCheckers; +var + Cnt: integer; + // + function Add(AChecker: TRegExprCharChecker): byte; + begin + Inc(Cnt); + if Cnt > High(CharCheckers) then + Error(reeTooSmallCheckersArray); + CharCheckers[Cnt - 1] := AChecker; + Result := Cnt - 1; + end; + // +begin + Cnt := 0; + FillChar(CharCheckers, SizeOf(CharCheckers), 0); + + CheckerIndex_Word := Add(CharChecker_Word); + CheckerIndex_NotWord := Add(CharChecker_NotWord); + CheckerIndex_Space := Add(CharChecker_Space); + CheckerIndex_NotSpace := Add(CharChecker_NotSpace); + CheckerIndex_Digit := Add(CharChecker_Digit); + CheckerIndex_NotDigit := Add(CharChecker_NotDigit); + CheckerIndex_VertSep := Add(CharChecker_VertSep); + CheckerIndex_NotVertSep := Add(CharChecker_NotVertSep); + CheckerIndex_HorzSep := Add(CharChecker_HorzSep); + CheckerIndex_NotHorzSep := Add(CharChecker_NotHorzSep); + //CheckerIndex_AllAZ := Add(CharChecker_AllAZ); + CheckerIndex_LowerAZ := Add(CharChecker_LowerAZ); + CheckerIndex_UpperAZ := Add(CharChecker_UpperAZ); + + SetLength(CharCheckerInfos, 3); + with CharCheckerInfos[0] do + begin + CharBegin := 'a'; + CharEnd:= 'z'; + CheckerIndex := CheckerIndex_LowerAZ; + end; + with CharCheckerInfos[1] do + begin + CharBegin := 'A'; + CharEnd := 'Z'; + CheckerIndex := CheckerIndex_UpperAZ; + end; + with CharCheckerInfos[2] do + begin + CharBegin := '0'; + CharEnd := '9'; + CheckerIndex := CheckerIndex_Digit; + end; +end; + +function TRegExpr.CharChecker_Word(ch: REChar): boolean; +begin + Result := IsWordChar(ch); +end; + +function TRegExpr.CharChecker_NotWord(ch: REChar): boolean; +begin + Result := not IsWordChar(ch); +end; + +function TRegExpr.CharChecker_Space(ch: REChar): boolean; +begin + Result := IsSpaceChar(ch); +end; + +function TRegExpr.CharChecker_NotSpace(ch: REChar): boolean; +begin + Result := not IsSpaceChar(ch); +end; + +function TRegExpr.CharChecker_Digit(ch: REChar): boolean; +begin + Result := IsDigitChar(ch); +end; + +function TRegExpr.CharChecker_NotDigit(ch: REChar): boolean; +begin + Result := not IsDigitChar(ch); +end; + +function TRegExpr.CharChecker_VertSep(ch: REChar): boolean; +begin + Result := IsVertLineSeparator(ch); +end; + +function TRegExpr.CharChecker_NotVertSep(ch: REChar): boolean; +begin + Result := not IsVertLineSeparator(ch); +end; + +function TRegExpr.CharChecker_HorzSep(ch: REChar): boolean; +begin + Result := IsHorzSeparator(ch); +end; + +function TRegExpr.CharChecker_NotHorzSep(ch: REChar): boolean; +begin + Result := not IsHorzSeparator(ch); +end; + +function TRegExpr.CharChecker_LowerAZ(ch: REChar): boolean; +begin + case ch of + 'a' .. 'z': + Result := True; + else + Result := False; + end; +end; + +function TRegExpr.CharChecker_UpperAZ(ch: REChar): boolean; +begin + case ch of + 'A' .. 'Z': + Result := True; + else + Result := False; + end; +end; + + +{$IFDEF RegExpPCodeDump} + +function TRegExpr.DumpOp(op: TREOp): RegExprString; +// printable representation of opcode +begin + case op of + OP_BOL: + Result := 'BOL'; + OP_EOL: + Result := 'EOL'; + OP_EOL2: + Result := 'EOL2'; + OP_BOLML: + Result := 'BOLML'; + OP_EOLML: + Result := 'EOLML'; + OP_BOUND: + Result := 'BOUND'; + OP_NOTBOUND: + Result := 'NOTBOUND'; + OP_ANY: + Result := 'ANY'; + OP_ANYML: + Result := 'ANYML'; + OP_ANYLETTER: + Result := 'ANYLETTER'; + OP_NOTLETTER: + Result := 'NOTLETTER'; + OP_ANYDIGIT: + Result := 'ANYDIGIT'; + OP_NOTDIGIT: + Result := 'NOTDIGIT'; + OP_ANYSPACE: + Result := 'ANYSPACE'; + OP_NOTSPACE: + Result := 'NOTSPACE'; + OP_ANYHORZSEP: + Result := 'ANYHORZSEP'; + OP_NOTHORZSEP: + Result := 'NOTHORZSEP'; + OP_ANYVERTSEP: + Result := 'ANYVERTSEP'; + OP_NOTVERTSEP: + Result := 'NOTVERTSEP'; + OP_ANYOF: + Result := 'ANYOF'; + OP_ANYBUT: + Result := 'ANYBUT'; + OP_ANYOFCI: + Result := 'ANYOF/CI'; + OP_ANYBUTCI: + Result := 'ANYBUT/CI'; + OP_BRANCH: + Result := 'BRANCH'; + OP_EXACTLY: + Result := 'EXACTLY'; + OP_EXACTLYCI: + Result := 'EXACTLY/CI'; + OP_NOTHING: + Result := 'NOTHING'; + OP_COMMENT: + Result := 'COMMENT'; + OP_BACK: + Result := 'BACK'; + OP_EEND: + Result := 'END'; + OP_BSUBEXP: + Result := 'BSUBEXP'; + OP_BSUBEXPCI: + Result := 'BSUBEXP/CI'; + OP_OPEN_FIRST .. OP_OPEN_LAST: + Result := Format('OPEN[%d]', [Ord(op) - Ord(OP_OPEN)]); + OP_CLOSE_FIRST .. OP_CLOSE_LAST: + Result := Format('CLOSE[%d]', [Ord(op) - Ord(OP_CLOSE)]); + OP_STAR: + Result := 'STAR'; + OP_PLUS: + Result := 'PLUS'; + OP_BRACES: + Result := 'BRACES'; + {$IFDEF ComplexBraces} + OP_LOOPENTRY: + Result := 'LOOPENTRY'; + OP_LOOP: + Result := 'LOOP'; + OP_LOOPNG: + Result := 'LOOPNG'; + {$ENDIF} + OP_STARNG: + Result := 'STARNG'; + OP_PLUSNG: + Result := 'PLUSNG'; + OP_BRACESNG: + Result := 'BRACESNG'; + OP_STAR_POSS: + Result := 'STAR_POSS'; + OP_PLUS_POSS: + Result := 'PLUS_POSS'; + OP_BRACES_POSS: + Result := 'BRACES_POSS'; + OP_ANYCATEGORY: + Result := 'ANYCATEG'; + OP_NOTCATEGORY: + Result := 'NOTCATEG'; + OP_RECUR: + Result := 'RECURSION'; + OP_SUBCALL_FIRST .. OP_SUBCALL_LAST: + Result := Format('SUBCALL[%d]', [Ord(op) - Ord(OP_SUBCALL)]); + else + Error(reeDumpCorruptedOpcode); + end; +end; { of function TRegExpr.DumpOp + -------------------------------------------------------------- } + +function TRegExpr.IsCompiled: boolean; +begin + Result := programm <> nil; +end; + +function PrintableChar(AChar: REChar): RegExprString; {$IFDEF InlineFuncs}inline;{$ENDIF} +begin + if AChar < ' ' then + Result := '#' + IntToStr(Ord(AChar)) + else + Result := AChar; +end; + +function TRegExpr.DumpCheckerIndex(N: byte): RegExprString; +begin + Result := '?'; + if N = CheckerIndex_Word then Exit('\w'); + if N = CheckerIndex_NotWord then Exit('\W'); + if N = CheckerIndex_Digit then Exit('\d'); + if N = CheckerIndex_NotDigit then Exit('\D'); + if N = CheckerIndex_Space then Exit('\s'); + if N = CheckerIndex_NotSpace then Exit('\S'); + if N = CheckerIndex_HorzSep then Exit('\h'); + if N = CheckerIndex_NotHorzSep then Exit('\H'); + if N = CheckerIndex_VertSep then Exit('\v'); + if N = CheckerIndex_NotVertSep then Exit('\V'); + if N = CheckerIndex_LowerAZ then Exit('az'); + if N = CheckerIndex_UpperAZ then Exit('AZ'); +end; + +function TRegExpr.DumpCategoryChars(ch, ch2: REChar; Positive: boolean): RegExprString; +const + S: array[boolean] of REChar = ('P', 'p'); +begin + Result := '\' + S[Positive] + '{' + ch; + if ch2 <> #0 then + Result := Result + ch2; + Result := Result + '} '; +end; + +function TRegExpr.Dump: RegExprString; +// dump a regexp in vaguely comprehensible form +var + s: PRegExprChar; + op: TREOp; // Arbitrary non-END op. + next: PRegExprChar; + i, NLen: integer; + Diff: PtrInt; + iByte: byte; + ch, ch2: REChar; +begin + if not IsProgrammOk then + Exit; + + op := OP_EXACTLY; + Result := ''; + s := regCodeWork; + while op <> OP_EEND do + begin // While that wasn't END last time... + op := s^; + Result := Result + Format('%2d: %s', [s - programm, DumpOp(s^)]); + // Where, what. + next := regNext(s); + if next = nil // Next ptr. + then + Result := Result + ' (0)' + else + begin + if next > s + // ###0.948 PWideChar subtraction workaround (see comments in Tail method for details) + then + Diff := next - s + else + Diff := -(s - next); + Result := Result + Format(' (%d) ', [(s - programm) + Diff]); + end; + Inc(s, REOpSz + RENextOffSz); + if (op = OP_ANYOF) or (op = OP_ANYOFCI) or (op = OP_ANYBUT) or (op = OP_ANYBUTCI) then + begin + repeat + case s^ of + OpKind_End: + begin + Inc(s); + Break; + end; + OpKind_Range: + begin + Result := Result + 'Rng('; + Inc(s); + Result := Result + PrintableChar(s^) + '-'; + Inc(s); + Result := Result + PrintableChar(s^); + Result := Result + ') '; + Inc(s); + end; + OpKind_MetaClass: + begin + Inc(s); + Result := Result + DumpCheckerIndex(byte(s^)) + ' '; + Inc(s); + end; + OpKind_Char: + begin + Inc(s); + NLen := PLongInt(s)^; + Inc(s, RENumberSz); + Result := Result + 'Ch('; + for i := 1 to NLen do + begin + Result := Result + PrintableChar(s^); + Inc(s); + end; + Result := Result + ') '; + end; + OpKind_CategoryYes: + begin + Inc(s); + ch := s^; + Inc(s); + ch2 := s^; + Result := Result + DumpCategoryChars(ch, ch2, True); + Inc(s); + end; + OpKind_CategoryNo: + begin + Inc(s); + ch := s^; + Inc(s); + ch2 := s^; + Result := Result + DumpCategoryChars(ch, ch2, False); + Inc(s); + end; + else + Error(reeDumpCorruptedOpcode); + end; + until false; + end; + if (op = OP_EXACTLY) or (op = OP_EXACTLYCI) then + begin + // Literal string, where present. + NLen := PLongInt(s)^; + Inc(s, RENumberSz); + for i := 1 to NLen do + begin + Result := Result + PrintableChar(s^); + Inc(s); + end; + end; + if (op = OP_BSUBEXP) or (op = OP_BSUBEXPCI) then + begin + Result := Result + ' \' + IntToStr(Ord(s^)); + Inc(s); + end; + if (op = OP_BRACES) or (op = OP_BRACESNG) or (op = OP_BRACES_POSS) then + begin // ###0.941 + // show min/max argument of braces operator + Result := Result + Format('{%d,%d}', [PREBracesArg(AlignToInt(s))^, + PREBracesArg(AlignToInt(s + REBracesArgSz))^]); + Inc(s, REBracesArgSz * 2); + end; + {$IFDEF ComplexBraces} + if (op = OP_LOOP) or (op = OP_LOOPNG) then + begin // ###0.940 + Result := Result + Format(' -> (%d) {%d,%d}', + [(s - programm - (REOpSz + RENextOffSz)) + + PRENextOff(AlignToPtr(s + 2 * REBracesArgSz))^, + PREBracesArg(AlignToInt(s))^, + PREBracesArg(AlignToInt(s + REBracesArgSz))^]); + Inc(s, 2 * REBracesArgSz + RENextOffSz); + end; + {$ENDIF} + if (op = OP_ANYCATEGORY) or (op = OP_NOTCATEGORY) then + begin + ch := s^; + Inc(s); + ch2 := s^; + Inc(s); + if ch2<>#0 then + Result := Result + '{' + ch + ch2 + '}' + else + Result := Result + '{' + ch + '}'; + end; + Result := Result + #$d#$a; + end; { of while } + + // Header fields of interest. + if regAnchored <> #0 then + Result := Result + 'Anchored; '; + if regMustString <> '' then + Result := Result + 'Must have: "' + regMustString + '"; '; + + {$IFDEF UseFirstCharSet} // ###0.929 + Result := Result + #$d#$a'First charset: '; + if FirstCharSet = [] then + Result := Result + '<empty set>' + else + if FirstCharSet = RegExprAllSet then + Result := Result + '<all chars>' + else + for iByte := 0 to 255 do + if iByte in FirstCharSet then + Result := Result + PrintableChar(REChar(iByte)); + {$ENDIF} + Result := Result + #$d#$a; +end; { of function TRegExpr.Dump + -------------------------------------------------------------- } +{$ENDIF} + + +function TRegExpr.IsFixedLength(var op: TREOp; var ALen: integer): boolean; +var + s, next: PRegExprChar; + N, N2: integer; +begin + Result := False; + ALen := 0; + if not IsCompiled then Exit; + s := regCodeWork; + + repeat + next := regNext(s); + op := s^; + Inc(s, REOpSz + RENextOffSz); + + case op of + OP_EEND: + begin + Result := True; + Exit; + end; + + OP_BRANCH: + begin + op := next^; + if op <> OP_EEND then Exit; + end; + + OP_COMMENT, + OP_BOUND, + OP_NOTBOUND: + Continue; + + OP_ANY, + OP_ANYML, + OP_ANYDIGIT, + OP_NOTDIGIT, + OP_ANYLETTER, + OP_NOTLETTER, + OP_ANYSPACE, + OP_NOTSPACE, + OP_ANYHORZSEP, + OP_NOTHORZSEP, + OP_ANYVERTSEP, + OP_NOTVERTSEP: + begin + Inc(ALen); + Continue; + end; + + OP_ANYOF, + OP_ANYOFCI, + OP_ANYBUT, + OP_ANYBUTCI: + begin + Inc(ALen); + repeat + case s^ of + OpKind_End: + begin + Inc(s); + Break; + end; + OpKind_Range: + begin + Inc(s); + Inc(s); + Inc(s); + end; + OpKind_MetaClass: + begin + Inc(s); + Inc(s); + end; + OpKind_Char: + begin + Inc(s); + Inc(s, RENumberSz + PLongInt(s)^); + end; + OpKind_CategoryYes, + OpKind_CategoryNo: + begin + Inc(s); + Inc(s); + Inc(s); + end; + end; + until False; + end; + + OP_EXACTLY, + OP_EXACTLYCI: + begin + N := PLongInt(s)^; + Inc(ALen, N); + Inc(s, RENumberSz + N); + Continue; + end; + + OP_ANYCATEGORY, + OP_NOTCATEGORY: + begin + Inc(ALen); + Inc(s, 2); + Continue; + end; + + OP_BRACES, + OP_BRACESNG, + OP_BRACES_POSS: + begin + // allow only d{n,n} + N := PREBracesArg(AlignToInt(s))^; + N2 := PREBracesArg(AlignToInt(s + REBracesArgSz))^; + if N <> N2 then + Exit; + Inc(ALen, N-1); + Inc(s, REBracesArgSz * 2); + end; + + else + Exit; + end; + until False; +end; + +{$IFDEF reRealExceptionAddr} +{$OPTIMIZATION ON} +// ReturnAddr works correctly only if compiler optimization is ON +// I placed this method at very end of unit because there are no +// way to restore compiler optimization flag ... +{$ENDIF} + +procedure TRegExpr.Error(AErrorID: integer); + {$IFDEF reRealExceptionAddr} + function ReturnAddr: Pointer; // ###0.938 + asm + mov eax,[ebp+4] + end; + {$ENDIF} +var + e: ERegExpr; + Msg: string; +begin + fLastError := AErrorID; // dummy stub - useless because will raise exception + Msg := ErrorMsg(AErrorID); + // compilation error ? + if AErrorID < reeFirstRuntimeCode then + Msg := Msg + ' (pos ' + IntToStr(CompilerErrorPos) + ')'; + e := ERegExpr.Create(Msg); + e.ErrorCode := AErrorID; + e.CompilerErrorPos := CompilerErrorPos; + raise e + {$IFDEF reRealExceptionAddr} + at ReturnAddr + {$ENDIF}; +end; { of procedure TRegExpr.Error + -------------------------------------------------------------- } + +end. diff --git a/src/libraries/sphere10/UCommon.Collections.pas b/src/libraries/sphere10/UCommon.Collections.pas index 4e1a49a79..4d4df1af7 100644 --- a/src/libraries/sphere10/UCommon.Collections.pas +++ b/src/libraries/sphere10/UCommon.Collections.pas @@ -345,6 +345,7 @@ class function TComparerTool<T>.Many(const comparers: array of TGlobalComparerFu class function TComparerTool<T>.Many(const comparers: array of IComparer<T>) : IComparer<T>; type __TArrayTool_IComparer_T = TArrayTool<__IComparer_T>; + begin Result := TManyComparer<T>.Create( __TArrayTool_IComparer_T.Copy(comparers) ); end; @@ -465,8 +466,8 @@ class function TPredicateTool<T>.FromFunc(const AFunc: TGlobalPredicateFunc<T>) end; class function TPredicateTool<T>.AndMany(const APredicates : array of IPredicate<T>) : IPredicate<T>; -type - __TArrayTool_IPredicate_T = TArrayTool<__IPredicate_T>; +// type +// __TArrayTool_IPredicate_T = TArrayTool<__IPredicate_T>; // Skybuck: Disabled not needed var arr : TArray<__IPredicate_T>; i : Integer; diff --git a/src/libraries/sphere10/UCommon.Data.pas b/src/libraries/sphere10/UCommon.Data.pas index f7f23e6ad..09f6cdfe1 100644 --- a/src/libraries/sphere10/UCommon.Data.pas +++ b/src/libraries/sphere10/UCommon.Data.pas @@ -236,6 +236,7 @@ TDataSourceTool<T> = class __IPredicate_T = IPredicate<T>; __TList_IPredicate_T = TList<__IPredicate_T>; public + class function ToArrayWorkAround( ParaList : __TList_IPredicate_T ) : TArray<IPredicate<T>>; // Skybuck: work around for buggy TList.ToArray class function ConstructRowComparer(const AFilters : TArray<TColumnFilter>; const ADelegate : TApplySortDelegate<T>) : IComparer<T>; class function ConstructRowPredicate(const AFilters : TArray<TColumnFilter>; const ADelegate : TApplyFilterDelegate<T>; const AOperand : TFilterOperand) : IPredicate<T>; end; @@ -659,6 +660,12 @@ class function TDataSourceTool<T>.ConstructRowComparer(const AFilters : TArray<T end; end; +// Skybuck: ToArrayWorkAround implementation until TList.ToArray is fixed by FPC compiler and/or generics team ? +class function TDataSourceTool<T>.ToArrayWorkAround( ParaList : __TList_IPredicate_T ) : TArray<IPredicate<T>>; +begin + result := ParaList.ToArray; +end; + class function TDataSourceTool<T>.ConstructRowPredicate(const AFilters : TArray<TColumnFilter>; const ADelegate : TApplyFilterDelegate<T>; const AOperand : TFilterOperand) : IPredicate<T>; type __TColumnFilterPredicate_T = TColumnFilterPredicate<T>; @@ -675,12 +682,16 @@ class function TDataSourceTool<T>.ConstructRowPredicate(const AFilters : TArray< end; end; + // Skybuck: Free Pascal Compiler Bug/Internal Error 2015052501 caused by buggy TList.ToArray case filters.Count of 0: Result := nil; 1: Result := filters[0]; else case AOperand of - foAnd: Result := __TPredicateTool_T.AndMany(filters.ToArray); - foOr: Result := __TPredicateTool_T.OrMany(filters.ToArray); +// foAnd: Result := __TPredicateTool_T.AndMany(filters.ToArray); // Skybuck: TList.ToArray causes FPC compiler to crash here. +// foOr: Result := __TPredicateTool_T.OrMany(filters.ToArray); + + foAnd: Result := __TPredicateTool_T.AndMany(ToArrayWorkAround(filters)); + foOr: Result := __TPredicateTool_T.OrMany(ToArrayWorkAround(filters)); end; end; end; diff --git a/src/libraries/sphere10/UCommon.pas b/src/libraries/sphere10/UCommon.pas index b79b8c920..7ea9e9bdc 100644 --- a/src/libraries/sphere10/UCommon.pas +++ b/src/libraries/sphere10/UCommon.pas @@ -16,8 +16,10 @@ {$IFDEF FPC} {$MODE Delphi} + {$ZEROBASEDSTRINGS OFF} {$ENDIF} + interface uses @@ -41,6 +43,15 @@ interface MaxSeconds = MaxMilliseconds div 60; MinSeconds = MinMilliseconds div 60; + BYTE_BIT_0 = byte(1); + BYTE_BIT_1 = byte(2); + BYTE_BIT_2 = byte(4); + BYTE_BIT_3 = byte(8); + BYTE_BIT_4 = byte(16); + BYTE_BIT_5 = byte(32); + BYTE_BIT_6 = byte(64); + BYTE_BIT_7 = byte(128); + { GLOBAL HELPER FUNCTIONS } @@ -82,6 +93,22 @@ function GetSetValue(const aSet:PTypeInfo; Name: String): Integer; SizeInt = NativeInt; {$ENDIF} + { TNullable } + + TNullable<T> = record + private + FHasValue: Boolean; + FValue: T; + function GetValue: T; + procedure SetValue(AValue: T); + public + procedure Clear; + property HasValue: Boolean read FHasValue; + property Value: T read GetValue write SetValue; + class operator Implicit(A: T): TNullable<T>; + class operator Implicit(A: Pointer): TNullable<T>; + end; + {$IFDEF FPC} { TTimeSpan } @@ -900,6 +927,41 @@ function GetSetValue(const aSet:PTypeInfo; Name: String): Integer; {$ENDIF} +{ TNullable } + +function TNullable<T>.GetValue: T; +begin + if FHasValue then + Result := FValue + else + raise Exception.Create('Variable has no value'); +end; + +procedure TNullable<T>.SetValue(AValue: T); +begin + FValue := AValue; + FHasValue := True; +end; + +procedure TNullable<T>.Clear; +begin + FHasValue := False; +end; + +class operator TNullable<T>.Implicit(A: T): TNullable<T>; +begin + Result.Value := A; +end; + +class operator TNullable<T>.Implicit(A: Pointer): TNullable<T>; +begin + if A = nil then + Result.Clear + else + raise Exception.Create('Pointer value not allowed'); +end; + + {$IFDEF FPC} { TTimeSpan } diff --git a/src/libraries/sphere10/UMemory.pas b/src/libraries/sphere10/UMemory.pas index dcc352a6b..4aba1e80c 100644 --- a/src/libraries/sphere10/UMemory.pas +++ b/src/libraries/sphere10/UMemory.pas @@ -20,6 +20,7 @@ {$MODESWITCH ADVANCEDRECORDS} {$ENDIF} +{$I ./../../config.inc} interface type @@ -50,8 +51,10 @@ TGuard = class(TInterfacedObject) FGuardian: IInterface; FPointers: array of TDisposablePointer; FLastIndex: Integer; + {$IFNDEF DELPHI_SYDNEY_PLUS} class procedure Initialize(var ADisposables: TDisposables); static; class procedure Finalize(var ADisposables: TDisposables); static; + {$ENDIF} procedure RegisterPointer(Ptr: Pointer; ADisposePolicy: TDisposePolicy); procedure UnregisterPointer(Ptr: Pointer); public @@ -62,6 +65,10 @@ TGuard = class(TInterfacedObject) procedure AddMem(const P: Pointer); procedure ReallocMem(var P: Pointer; Size: Integer); procedure RemoveMem(const P: Pointer); + {$IFDEF DELPHI_SYDNEY_PLUS} + class operator Initialize (out Dest: TDisposables); + class operator Finalize (var Dest: TDisposables); + {$ENDIF} /// <summary>A syntax sugar for the AddObject method.</summary> property Objects[const AnObject: TObject]: TObject read AddObject; default; end; @@ -76,20 +83,64 @@ implementation constructor TDisposables.TGuard.Create(ADisposablesRec: PDisposables); begin FDispoablesRec := ADisposablesRec; + {$IFNDEF DELPHI_SYDNEY_PLUS} TDisposables.Initialize(FDispoablesRec^); + {$ENDIF} end; destructor TDisposables.TGuard.Destroy; begin inherited; try + {$IFNDEF DELPHI_SYDNEY_PLUS} TDisposables.Finalize(FDispoablesRec^); + {$ENDIF} except FreeInstance; raise; end; end; +{$IFDEF DELPHI_SYDNEY_PLUS} +class operator TDisposables.Initialize (out Dest: TDisposables); +begin + Dest.FLastIndex := -1; + SetLength(Dest.FPointers, 16); +end; + +class operator TDisposables.Finalize (var Dest: TDisposables); +var + FirstException: Pointer; + i, x: Integer; +begin + FirstException := nil; + for i := Dest.FLastIndex downto 0 do + try + case Dest.FPointers[i].DisposePolicy of + idpNone: ; + idpNil: Dest.FPointers[i].Ptr := nil; + idpFree, idpFreeAndNil: if Assigned(Dest.FPointers[i].Ptr) then begin + FreeAndNil(Dest.FPointers[i].Ptr); + Dest.FPointers[i].Ptr := nil; + end; + idpRelease: begin + raise ENotSupportedException.Create('Dispose policy idoRelease not supported'); + end; + idpFreeMem: if Assigned(Dest.FPointers[i].Ptr) then System.FreeMem(Dest.FPointers[i].Ptr); + else raise ENotSupportedException.Create('Dispose policy not supported'); + end; + except + if not Assigned(FirstException) then + FirstException := AcquireExceptionObject; + end; + + if Assigned(FirstException) then + begin + SetLength(Dest.FPointers, 0); + raise TObject(FirstException); + end; +end; +{$ELSE} class procedure TDisposables.Initialize(var ADisposables: TDisposables); begin ADisposables.FLastIndex := -1; @@ -99,10 +150,9 @@ class procedure TDisposables.Initialize(var ADisposables: TDisposables); class procedure TDisposables.Finalize(var ADisposables: TDisposables); var FirstException: Pointer; - i: Integer; + i, x: Integer; begin FirstException := nil; - for i := ADisposables.FLastIndex downto 0 do try case ADisposables.FPointers[i].DisposePolicy of @@ -116,7 +166,7 @@ class procedure TDisposables.Finalize(var ADisposables: TDisposables); raise ENotSupportedException.Create('Dispose policy idoRelease not supported'); end; idpFreeMem: if Assigned(ADisposables.FPointers[i].Ptr) then System.FreeMem(ADisposables.FPointers[i].Ptr); - else raise ENotSupportedException.Create('Dispose policy not supported');; + else raise ENotSupportedException.Create('Dispose policy not supported'); end; except if not Assigned(FirstException) then @@ -129,6 +179,7 @@ class procedure TDisposables.Finalize(var ADisposables: TDisposables); raise TObject(FirstException); end; end; +{$ENDIF} procedure TDisposables.RegisterPointer(Ptr: Pointer; ADisposePolicy: TDisposePolicy); begin diff --git a/src/libraries/sphere10/UWizard.pas b/src/libraries/sphere10/UWizard.pas index 29fc3d3bd..597f8b69c 100644 --- a/src/libraries/sphere10/UWizard.pas +++ b/src/libraries/sphere10/UWizard.pas @@ -31,7 +31,7 @@ interface type { Forward Declarations } - TWizardForm<T> = class; +// TWizardForm<T> = class; // Skybuck: disabled, not needed anymore. { Enums } @@ -101,7 +101,7 @@ TWizard<T> = class(TComponent) FHost : TWizardHostForm; FStarted : Boolean; FFinished : Boolean; - FCurrentScreen : TWizardForm<T>; + FCurrentScreen : __TScreenType; // Skybuck: Using __TScreenType instead of TWizard<T> solved the FPC Compiler bug ! FModel : T; FScreenPath : TList<TComponentClass>; FScreenPathBackup : TDictionary<SizeInt, __TList_TComponentClass>; @@ -117,16 +117,16 @@ TWizard<T> = class(TComponent) procedure NextHandler(sender : TObject); procedure PreviousHandler(sender : TObject); protected - function CreateScreen(AType: TComponentClass) : TWizardForm<T>; + function CreateScreen(AType: TComponentClass) : __TScreenType; function DetermineHasNext : boolean; virtual; function DetermineHasPrevious : boolean; virtual; - procedure PresentScreen(screen : TWizardForm<T>); virtual; + procedure PresentScreen(screen : __TScreenType); virtual; function FinishRequested(out message : AnsiString) : boolean; virtual; abstract; function CancelRequested(out message : AnsiString) : boolean; virtual; abstract; public - constructor Create(AOwner:TComponent; const screens: array of TComponentClass); overload; + constructor Create(AOwner:TComponent; const screens: array of TComponentClass); overload; destructor Destroy; override; - property CurrentScreen : TWizardForm<T> read FCurrentScreen; + property CurrentScreen : __TScreenType read FCurrentScreen; property Model : T read FModel; property HasNext : boolean read DetermineHasNext; property HasPrevious : boolean read DetermineHasPrevious; @@ -304,7 +304,7 @@ procedure TWizardHostForm.SetContentSize(size : TPoint); constructor TWizard<T>.Create(AOwner:TComponent; const screens: array of TComponentClass); var i : integer; - screen : TWizardForm<T>; + screen : __TScreenType; begin inherited Create(AOwner); if Length(screens) = 0 then @@ -328,7 +328,7 @@ constructor TWizard<T>.Create(AOwner:TComponent; const screens: array of TCompon destructor TWizard<T>.Destroy; var i : integer; - screen : TWizardForm<T>; + screen : __TScreenType; key : TComponentClass; backup : TList<TComponentClass>; begin @@ -346,10 +346,10 @@ destructor TWizard<T>.Destroy; // note: Property bag not destroyed, left for user to destroy end; -function TWizard<T>.CreateScreen(AType: TComponentClass) : TWizardForm<T>; +function TWizard<T>.CreateScreen(AType: TComponentClass) : __TScreenType; begin if NOT FScreenInstances.ContainsKey(AType) then begin - Result := TWizardForm<T>(AType.Create(self)); + Result := __TScreenType(AType.Create(self)); if Result = nil then raise Exception.Create('Supplied type was not correct TWizardForm<T> type'); Result.UpdatePath := UpdatePath; @@ -361,7 +361,7 @@ function TWizard<T>.CreateScreen(AType: TComponentClass) : TWizardForm<T>; function TWizard<T>.CalculateFitSize : TPoint; var maxWidth, maxHeight, i : Integer; - screen : TWizardForm<T>; + screen : __TScreenType; begin maxWidth := 0; maxHeight := 0; @@ -489,7 +489,7 @@ procedure TWizard<T>.UpdatePath(APathUpdateType: TPathUpdateType; const screens end; end; -procedure TWizard<T>.PresentScreen(screen : TWizardForm<T>); +procedure TWizard<T>.PresentScreen(screen : __TScreenType); begin FCurrentScreen := screen; FCurrentScreen.Model := Model; @@ -532,6 +532,7 @@ constructor TActionWizard<T>.Create(AOwner: TComponent; title, finish: AnsiStrin self.FFinishHandler := finishFunc; end; + class procedure TActionWizard<T>.Show(AParent: TForm; title, finish: AnsiString; constref bag : T; const screens : array of TComponentClass; cancelFunc: TActionWizardCancelFunc; finishFunc : TActionWizardFinishFunc); type MyWizard = TActionWizard<T>; @@ -563,4 +564,5 @@ function TActionWizard<T>.FinishRequested(out message : AnsiString) : boolean; {%endregion} + end. diff --git a/src/libraries/synapse/synautil.pas b/src/libraries/synapse/synautil.pas index b275d70ca..845f99f36 100644 --- a/src/libraries/synapse/synautil.pas +++ b/src/libraries/synapse/synautil.pas @@ -1843,8 +1843,8 @@ function GetTempFile(const Dir, prefix: String): String; if Dir = '' then begin SetLength(Path, MAX_PATH); - x := GetTempPath(Length(Path), PChar(Path)); - SetLength(Path, x); + x := GetTempPath(Length(Path), PChar(Path)); + SetLength(Path, x); end else Path := Dir; diff --git a/src/locale/de/LC_MESSAGES/default.mo b/src/locale/de/LC_MESSAGES/default.mo new file mode 100644 index 000000000..52ca2c68d Binary files /dev/null and b/src/locale/de/LC_MESSAGES/default.mo differ diff --git a/src/locale/de/LC_MESSAGES/default.po b/src/locale/de/LC_MESSAGES/default.po new file mode 100644 index 000000000..f6f77538c --- /dev/null +++ b/src/locale/de/LC_MESSAGES/default.po @@ -0,0 +1,4638 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: 2020-03-30 19:19\n" +"PO-Revision-Date: 2020-03-30 19:38+0200\n" +"Last-Translator: Somebody <your.email@address.com>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.3\n" +"Language-Team: \n" +"Language: de\n" + +#. FRMAbout..Caption +#: gui-classic/UFRMAbout.dfm:7 +msgid "About..." +msgstr "" + +#. FRMAbout..Font.Name +#. FRMAbout..Label1..Font.Name +#. FRMAbout..lblBuild..Font.Name +#. FRMAbout..lblProtocolVersion..Font.Name +#. FRMAbout..Label3..Font.Name +#. FRMAbout..Label4..Font.Name +#. FRMAbout..Label5..Font.Name +#. FRMAccountSelect..Font.Name +#. FRMDiagnosticTool..Font.Name +#. FRMHashLock..Font.Name +#. FRMHashLock..lblError..Font.Name +#. FRMHashLock..GroupBox2..meHashLockData..Font.Name +#. FRMMemoText..Font.Name +#. FRMMemoText..Memo..Font.Name +#. FRMNewPrivateKeyType..Font.Name +#. FRMNodesIp..Font.Name +#. FRMOperation..Font.Name +#. FRMOperation..lblAccountBalance..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..lblEncryptionErrors..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..memoPayload..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsTransaction..lblTransactionErrors..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..lblChangeKeyErrors..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..lblNewOwnerErrors..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblListAccountErrors..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsDelistAccount..lblDelistErrors..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..lblBuyAccountErrors..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..Label2..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..lblChangeInfoErrors..Font.Name +#. FRMOperation..PageControlLocked..tsGlobalError..lblGlobalErrors..Font.Name +#. FRMOperation..PageControlLocked..tsGlobalError..bbPassword..Font.Name +#. FRMOperation..memoAccounts..Font.Name +#. FRMOperation..ebSenderAccount..Font.Name +#. FRMOperationsExplorer..Font.Name +#. FRMPascalCoinWalletConfig..Font.Name +#. FRMPascalCoinWalletConfig..Label4..Font.Name +#. FRMPascalCoinWalletConfig..Label7..Font.Name +#. FRMPascalCoinWalletConfig..bbUpdatePassword..Font.Name +#. FRMPayloadDecoder..Font.Name +#. FRMPayloadDecoder..lblBlock..Font.Name +#. FRMPayloadDecoder..lblDateTime..Font.Name +#. FRMPayloadDecoder..lblOperationTxt..Font.Name +#. FRMPayloadDecoder..lblAmount..Font.Name +#. FRMPayloadDecoder..lblFee..Font.Name +#. FRMPayloadDecoder..lblSender..Font.Name +#. FRMPayloadDecoder..lblReceiver..Font.Name +#. FRMPayloadDecoder..lblReceiverInfo..Font.Name +#. FRMPayloadDecoder..PageControl..tsDecoded..lblDecodedMethod..Font.Name +#. FRMPayloadDecoder..PageControl..tsDecoded..memoDecoded..Font.Name +#. FRMPayloadDecoder..PageControl..tsDecoded..memoOriginalPayloadInHexa..Font.Name +#. FRMPayloadDecoder..ebOphash..Font.Name +#. FRMDiagnosticTool..Font.Name +#. FRMRandomOperations..Font.Name +#. FRMRandomOperations..pnlTop..lblTopCaption..Font.Name +#. FRMRPCCalls..Font.Name +#. FRMRPCCalls..pnlTop..lblTopCaption..Font.Name +#. FRMSaleAccounts..Font.Name +#. FRMSaleAccounts..lblAccountBalance..Font.Name +#. FRMSaleAccounts..memoAccounts..Font.Name +#. FRMSaleAccounts..ebSenderAccount..Font.Name +#. FRMWallet..Font.Name +#. FRMWallet..pnlTop..lblTimeAverageAux..Font.Name +#. FRMWallet..pnlTop..Label16..Font.Name +#. FRMWallet..pnlTop..lblBlocksFound..Font.Name +#. FRMWallet..pnlTop..lblReceivedMessages..Font.Name +#. FRMWallet..pnlTop..lblBuild..Font.Name +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsTop..Font.Name +#. FRMWallet..PageControl..tsPendingOperations..pnlPendingOperations..Label10..Font.Name +#. FRMWallet..PageControl..tsMessages..Label14..Font.Name +#. FRMWallet..PageControl..tsMessages..memoMessages..Font.Name +#. FRMWalletKeys..Font.Name +#. FRMWalletKeys..lblKeysEncrypted..Font.Name +#. FRMWalletKeys..memoPrivateKey..Font.Name +#. FRMWalletKeys..bbUpdatePassword..Font.Name +#. FRMDiagnosticTool..Font.Name +#: gui-classic/UFRMAbout.dfm:14 gui-classic/UFRMAbout.dfm:130 +#: gui-classic/UFRMAbout.dfm:143 gui-classic/UFRMAbout.dfm:156 +#: gui-classic/UFRMAbout.dfm:176 gui-classic/UFRMAbout.dfm:190 +#: gui-classic/UFRMAbout.dfm:205 gui-classic/UFRMAccountSelect.dfm:12 +#: gui-classic/UFRMDiagnosticTool.dfm:11 gui-classic/UFRMHashLock.dfm:12 +#: gui-classic/UFRMHashLock.dfm:34 gui-classic/UFRMHashLock.dfm:117 +#: gui-classic/UFRMMemoText.dfm:12 gui-classic/UFRMMemoText.dfm:50 +#: gui-classic/UFRMNewPrivateKeyType.dfm:13 gui-classic/UFRMNodesIp.dfm:13 +#: gui-classic/UFRMOperation.dfm:13 gui-classic/UFRMOperation.dfm:40 +#: gui-classic/UFRMOperation.dfm:196 gui-classic/UFRMOperation.dfm:259 +#: gui-classic/UFRMOperation.dfm:332 gui-classic/UFRMOperation.dfm:410 +#: gui-classic/UFRMOperation.dfm:427 gui-classic/UFRMOperation.dfm:539 +#: gui-classic/UFRMOperation.dfm:783 gui-classic/UFRMOperation.dfm:825 +#: gui-classic/UFRMOperation.dfm:851 gui-classic/UFRMOperation.dfm:978 +#: gui-classic/UFRMOperation.dfm:1065 gui-classic/UFRMOperation.dfm:1080 +#: gui-classic/UFRMOperation.dfm:1149 gui-classic/UFRMOperation.dfm:1167 +#: gui-classic/UFRMOperationsExplorer.dfm:12 +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:13 +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:66 +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:110 +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:200 +#: gui-classic/UFRMPayloadDecoder.dfm:14 gui-classic/UFRMPayloadDecoder.dfm:37 +#: gui-classic/UFRMPayloadDecoder.dfm:50 gui-classic/UFRMPayloadDecoder.dfm:78 +#: gui-classic/UFRMPayloadDecoder.dfm:99 +#: gui-classic/UFRMPayloadDecoder.dfm:119 +#: gui-classic/UFRMPayloadDecoder.dfm:146 +#: gui-classic/UFRMPayloadDecoder.dfm:166 +#: gui-classic/UFRMPayloadDecoder.dfm:179 +#: gui-classic/UFRMPayloadDecoder.dfm:214 +#: gui-classic/UFRMPayloadDecoder.dfm:234 +#: gui-classic/UFRMPayloadDecoder.dfm:253 +#: gui-classic/UFRMPayloadDecoder.dfm:416 +#: gui-classic/UFRMRandomHashUtil.dfm:11 +#: gui-classic/UFRMRandomOperations.dfm:11 +#: gui-classic/UFRMRandomOperations.dfm:44 gui-classic/UFRMRPCCalls.dfm:12 +#: gui-classic/UFRMRPCCalls.dfm:50 gui-classic/UFRMSaleAccounts.dfm:12 +#: gui-classic/UFRMSaleAccounts.dfm:57 gui-classic/UFRMSaleAccounts.dfm:84 +#: gui-classic/UFRMSaleAccounts.dfm:103 gui-classic/UFRMWallet.dfm:13 +#: gui-classic/UFRMWallet.dfm:284 gui-classic/UFRMWallet.dfm:299 +#: gui-classic/UFRMWallet.dfm:315 gui-classic/UFRMWallet.dfm:333 +#: gui-classic/UFRMWallet.dfm:349 gui-classic/UFRMWallet.dfm:658 +#: gui-classic/UFRMWallet.dfm:870 gui-classic/UFRMWallet.dfm:1183 +#: gui-classic/UFRMWallet.dfm:1216 gui-classic/UFRMWalletKeys.dfm:13 +#: gui-classic/UFRMWalletKeys.dfm:66 gui-classic/UFRMWalletKeys.dfm:155 +#: gui-classic/UFRMWalletKeys.dfm:504 lib/i386-win32/UFRMDiagnosticTool.dfm:11 +msgid "Tahoma" +msgstr "" + +#. FRMAbout..Label1..Caption +#. FRMWallet..Caption +#: gui-classic/UFRMAbout.dfm:126 gui-classic/UFRMWallet.dfm:4 +msgid "Pascal full node Wallet (Classic GUI)" +msgstr "" + +#. FRMAbout..lblBuild..Caption +#: gui-classic/UFRMAbout.dfm:139 +msgid "Build:" +msgstr "" + +#. FRMAbout..lblProtocolVersion..Caption +#: gui-classic/UFRMAbout.dfm:152 +msgid "Protocol:" +msgstr "" + +#. FRMAbout..Label2..Caption +#: gui-classic/UFRMAbout.dfm:165 +msgid "Source Code:" +msgstr "" + +#. FRMAbout..Label3..Caption +#: gui-classic/UFRMAbout.dfm:172 +msgid "Check For New Versions:" +msgstr "" + +#. FRMAbout..Label4..Caption +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:186 gui-classic/UFRMAbout.dfm:252 +msgid "https://github.com/PascalCoin/PascalCoin" +msgstr "" + +#. FRMAbout..Label5..Caption +#: gui-classic/UFRMAbout.dfm:201 +msgid "https://sourceforge.net/projects/pascalcoin" +msgstr "" + +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:220 +msgid "Copyright (c) 2016 - 2019 PascalCoin developers" +msgstr "" + +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:221 +msgid "Based on Albert Molina original source code" +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:225 +msgid "" +"Pascal (aka Pascal Coin) is P2P cryptocurrency without the need for " +"historical " +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:228 +msgid "operations. This software comprises a node within the Pascal network." +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:232 +msgid "" +"Distributed under the MIT software license, see the accompanying file " +"LICENSE or " +msgstr "" + +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:233 +msgid "visit http://www.opensource.org/licenses/mit-license.php." +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:237 +msgid "THIS IS EXPERIMENTAL SOFTWARE. Use it for educational purposes only." +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:241 +msgid "" +"This product includes software developed by the OpenSSL Project and Denis " +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:244 +msgid "Grinyuk (https://github.com/Arvur/OpenSSL-Delphi), some cryptographic " +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:247 +msgid "" +"functions inspirated in code written by Ladar Levison and Marco Ferrante, " +"and " +msgstr "" + +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:248 +msgid "Synapse Socket code copyright of Lukas Gebauer." +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:251 +msgid "" +"Original source code is written in Pascal Language and is available at " +msgstr "" + +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:254 +msgid "If you like it, consider a donation using BitCoin:" +msgstr "" + +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:255 +msgid "16K3HCZRhFUtM8GdWRcfKeaa6KsuyxZaYk" +msgstr "" + +#. FRMAbout..bbClose..Caption +#. FRMPayloadDecoder..bbClose..Caption +#. FRMWallet..MainMenu..miProject..MiClose..Caption +#: gui-classic/UFRMAbout.dfm:266 gui-classic/UFRMPayloadDecoder.dfm:353 +#: gui-classic/UFRMWallet.dfm:1273 +msgid "Close" +msgstr "" + +#. FRMAccountSelect..Caption +#: gui-classic/UFRMAccountSelect.dfm:5 +msgid "Accounts" +msgstr "" + +#. FRMAccountSelect..pnlAccountsTop..cbOnlyForSale..Caption +#: gui-classic/UFRMAccountSelect.dfm:33 +msgid "Only for sale or swap" +msgstr "" + +#. FRMAccountSelect..pnlAccountsTop..bbSearch..Caption +#: gui-classic/UFRMAccountSelect.dfm:41 +msgid "Search" +msgstr "" + +#. FRMAccountSelect..pnlAccountsTop..cbOnlyForPrivateSaleToMe..Caption +#: gui-classic/UFRMAccountSelect.dfm:107 +msgid "Only for private sale to me" +msgstr "" + +#. FRMAccountSelect..pnlAccountsTop..cbAccountsBalance..Caption +#: gui-classic/UFRMAccountSelect.dfm:115 +msgid "Accounts Balance" +msgstr "" + +#. FRMAccountSelect..pnlAccountsTop..cbMyAccounts..Caption +#: gui-classic/UFRMAccountSelect.dfm:123 +msgid "My Accounts" +msgstr "" + +#. FRMAccountSelect..pnlAccountsTop..cbOnlyForPublicSale..Caption +#: gui-classic/UFRMAccountSelect.dfm:141 +msgid "Only for public sale" +msgstr "" + +#. FRMAccountSelect..pnlAccountsTop..cbAccountsName..Caption +#: gui-classic/UFRMAccountSelect.dfm:165 +msgid "Accounts name" +msgstr "" + +#. FRMAccountSelect..pnlBottom..Label17..Caption +#. FRMWallet..pnlTop..Label5..Caption +#. FRMWallet..PageControl..tsMyAccounts..pnlAccounts..pnlAccountsInfo..Label17..Caption +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsBottom..Label20..Caption +#: gui-classic/UFRMAccountSelect.dfm:192 gui-classic/UFRMWallet.dfm:261 +#: gui-classic/UFRMWallet.dfm:543 gui-classic/UFRMWallet.dfm:685 +msgid "Accounts:" +msgstr "" + +#. FRMAccountSelect..pnlBottom..lblAccountsCount..Caption +#. FRMAccountSelect..pnlBottom..lblAccountsBalance..Caption +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..lblPayloadLength..Caption +#. FRMPayloadDecoder..lblDateTime..Caption +#. FRMPayloadDecoder..lblOperationTxt..Caption +#. FRMPayloadDecoder..lblAmount..Caption +#. FRMPayloadDecoder..lblFee..Caption +#. FRMPayloadDecoder..lblReceiver..Caption +#. FRMWallet..pnlTop..lblCurrentBlock..Caption +#. FRMWallet..pnlTop..lblOperationsPending..Caption +#. FRMWallet..pnlTop..lblMinersClients..Caption +#. FRMWallet..pnlTop..lblCurrentDifficulty..Caption +#. FRMWallet..pnlTop..lblTimeAverage..Caption +#. FRMWallet..pnlTop..lblCurrentAccounts..Caption +#. FRMWallet..pnlTop..lblTimeAverageAux..Caption +#. FRMWallet..pnlTop..lblBlocksFound..Caption +#. FRMWallet..PageControl..tsMyAccounts..pnlAccounts..pnlAccountsInfo..lblAccountsCount..Caption +#. FRMWallet..PageControl..tsMyAccounts..pnlAccounts..pnlAccountsInfo..lblAccountsBalance..Caption +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsBottom..lblSelectedAccountsCount..Caption +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsBottom..lblSelectedAccountsBalance..Caption +#: gui-classic/UFRMAccountSelect.dfm:201 gui-classic/UFRMAccountSelect.dfm:219 +#: gui-classic/UFRMOperation.dfm:207 gui-classic/UFRMPayloadDecoder.dfm:46 +#: gui-classic/UFRMPayloadDecoder.dfm:74 gui-classic/UFRMPayloadDecoder.dfm:95 +#: gui-classic/UFRMPayloadDecoder.dfm:115 +#: gui-classic/UFRMPayloadDecoder.dfm:162 gui-classic/UFRMWallet.dfm:144 +#: gui-classic/UFRMWallet.dfm:180 gui-classic/UFRMWallet.dfm:198 +#: gui-classic/UFRMWallet.dfm:216 gui-classic/UFRMWallet.dfm:225 +#: gui-classic/UFRMWallet.dfm:270 gui-classic/UFRMWallet.dfm:279 +#: gui-classic/UFRMWallet.dfm:310 gui-classic/UFRMWallet.dfm:561 +#: gui-classic/UFRMWallet.dfm:570 gui-classic/UFRMWallet.dfm:694 +#: gui-classic/UFRMWallet.dfm:712 +msgid "000" +msgstr "" + +#. FRMAccountSelect..pnlBottom..Label19..Caption +#. FRMOperation..lblBalanceCaption..Caption +#. FRMSaleAccounts..lblBalanceCaption..Caption +#. FRMWallet..PageControl..tsMyAccounts..pnlAccounts..pnlAccountsInfo..Label19..Caption +#: gui-classic/UFRMAccountSelect.dfm:210 gui-classic/UFRMOperation.dfm:50 +#: gui-classic/UFRMSaleAccounts.dfm:73 gui-classic/UFRMWallet.dfm:552 +msgid "Balance:" +msgstr "" + +#. FRMAccountSelect..pnlBottom..bbSelect..Caption +#: gui-classic/UFRMAccountSelect.dfm:229 +msgid "Select" +msgstr "" + +#. FRMAccountSelect..pnlBottom..bbTypeStats..Caption +#: gui-classic/UFRMAccountSelect.dfm:249 +msgid "Type stats" +msgstr "" + +#. FRMDiagnosticTool..Caption +#. FRMDiagnosticTool..Caption +#. FRMDiagnosticTool..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:4 gui-classic/UFRMRandomHashUtil.dfm:4 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:4 +msgid "FRMDiagnosticTool" +msgstr "" + +#. FRMDiagnosticTool..btnRH..Caption +#. FRMDiagnosticTool..btnRH..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:25 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:25 +msgid "Start Random Hash" +msgstr "" + +#. FRMDiagnosticTool..btnRH2..Caption +#. FRMDiagnosticTool..btnRH2..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:34 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:34 +msgid "Start Random Hash 2" +msgstr "" + +#. FRMDiagnosticTool..btnRH2C..Caption +#. FRMDiagnosticTool..btnRH2C..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:51 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:51 +msgid "Start Random Hash 2 (Cached)" +msgstr "" + +#. FRMDiagnosticTool..btnEntropy..Caption +#. FRMDiagnosticTool..btnEntropy..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:60 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:60 +msgid "Entropy Tests" +msgstr "" + +#. FRMDiagnosticTool..btnRH2NonceScan..Caption +#. FRMDiagnosticTool..btnRH2NonceScan..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:69 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:69 +msgid "Start Random Hash 2 (Nonce Scan)" +msgstr "" + +#. FRMDiagnosticTool..txtScanLevel..TextHint +#. FRMDiagnosticTool..txtScanLevel..TextHint +#: gui-classic/UFRMDiagnosticTool.dfm:79 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:79 +msgid "Enter Scan Level (2-4)" +msgstr "" + +#. FRMDiagnosticTool..btnRHC..Caption +#. FRMDiagnosticTool..btnRHC..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:86 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:86 +msgid "Start Random Hash (Cached)" +msgstr "" + +#. FRMHashLock..Caption +#: gui-classic/UFRMHashLock.dfm:5 +msgid "Atomic Swap Hash-Lock " +msgstr "" + +#. FRMHashLock..lblError..Caption +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..lblEncryptionErrors..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsTransaction..lblTransactionErrors..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..lblChangeKeyErrors..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..lblNewOwnerErrors..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblListAccountErrors..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsDelistAccount..lblDelistErrors..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..lblBuyAccountErrors..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..lblChangeInfoErrors..Caption +#: gui-classic/UFRMHashLock.dfm:29 gui-classic/UFRMOperation.dfm:191 +#: gui-classic/UFRMOperation.dfm:327 gui-classic/UFRMOperation.dfm:405 +#: gui-classic/UFRMOperation.dfm:422 gui-classic/UFRMOperation.dfm:534 +#: gui-classic/UFRMOperation.dfm:778 gui-classic/UFRMOperation.dfm:820 +#: gui-classic/UFRMOperation.dfm:973 +msgid "Errors detected" +msgstr "" + +#. FRMHashLock..btnSet..Caption +#: gui-classic/UFRMHashLock.dfm:56 +msgid "Set Hash-Lock" +msgstr "" + +#. FRMHashLock..GroupBox1..Caption +#: gui-classic/UFRMHashLock.dfm:67 +msgid "Mode" +msgstr "" + +#. FRMHashLock..GroupBox1..rbHashLock....Caption +#: gui-classic/UFRMHashLock.dfm:76 +msgid "Hash-Lock - the 32 byte hash-lock provided to you by the counterparty" +msgstr "" + +#. FRMHashLock..GroupBox1..rbHashLockKey....Caption +#: gui-classic/UFRMHashLock.dfm:86 +msgid "" +"Hash-Lock Key - a secret that will be hashed to create the 32 byte hash-lock" +msgstr "" + +#. FRMHashLock..GroupBox2..Caption +#: gui-classic/UFRMHashLock.dfm:96 +msgid "Data" +msgstr "" + +#. FRMHashLock..GroupBox2..Label2..Caption +#: gui-classic/UFRMHashLock.dfm:106 +msgid "Please enter the hash lock data as a hexadecimal string" +msgstr "" + +#. FRMMemoText..Caption +#: gui-classic/UFRMMemoText.dfm:5 +msgid "Information" +msgstr "" + +#. FRMMemoText..Memo....Lines.Strings +#: gui-classic/UFRMMemoText.dfm:53 +msgid "Memo" +msgstr "" + +#. FRMNewPrivateKeyType..Caption +#: gui-classic/UFRMNewPrivateKeyType.dfm:6 +msgid "New Private Key" +msgstr "" + +#. FRMNewPrivateKeyType..Label1..Caption +#: gui-classic/UFRMNewPrivateKeyType.dfm:26 +msgid "Name" +msgstr "" + +#. FRMNewPrivateKeyType..ebName..Text +#: gui-classic/UFRMNewPrivateKeyType.dfm:34 +msgid "ebName" +msgstr "" + +#. FRMNewPrivateKeyType..rgKeyType..Caption +#: gui-classic/UFRMNewPrivateKeyType.dfm:41 +msgid " Key Type: " +msgstr "" + +#. FRMNewPrivateKeyType..rgKeyType....Items.Strings +#: gui-classic/UFRMNewPrivateKeyType.dfm:43 +msgid "asdf" +msgstr "" + +#. FRMNewPrivateKeyType..bbOk..Caption +#. FRMNodesIp..bbOk..Caption +#. FRMChangeLanguage..bbOk..Caption +#. FRMChangeLanguage..bbOk..Caption +#: gui-classic/UFRMNewPrivateKeyType.dfm:51 gui-classic/UFRMNodesIp.dfm:42 +#: gui-classic/UFRMSelectLanguage.dfm:18 +#: lib/i386-win32/ufrmselectlanguage.dfm:18 +msgid "OK" +msgstr "" + +#. FRMNodesIp..Caption +#: gui-classic/UFRMNodesIp.dfm:6 +msgid "Nodes IP" +msgstr "" + +#. FRMNodesIp..Label1..Caption +#: gui-classic/UFRMNodesIp.dfm:25 +msgid "Available Nodes Ip to connect" +msgstr "" + +#. FRMNodesIp..memoNodesIp....Lines.Strings +#: gui-classic/UFRMNodesIp.dfm:33 +msgid "memoNodesIp" +msgstr "" + +#. FRMNodesIp..cbTryOnlyWithThisServers..Caption +#: gui-classic/UFRMNodesIp.dfm:82 +msgid "Try to connect ONLY with this servers" +msgstr "" + +#. FRMOperation..Caption +#: gui-classic/UFRMOperation.dfm:6 +msgid "New Operation" +msgstr "" + +#. FRMOperation..lblAccountCaption..Caption +#. FRMSaleAccounts..lblAccountCaption..Caption +#: gui-classic/UFRMOperation.dfm:26 gui-classic/UFRMSaleAccounts.dfm:25 +msgid "Account:" +msgstr "" + +#. FRMOperation..lblAccountBalance..Caption +#. FRMSaleAccounts..lblAccountBalance..Caption +#: gui-classic/UFRMOperation.dfm:35 gui-classic/UFRMSaleAccounts.dfm:53 +msgid "lblAccountBalance" +msgstr "" + +#. FRMOperation..lblAccountsCount..Caption +#. FRMSaleAccounts..lblAccountsCount..Caption +#: gui-classic/UFRMOperation.dfm:59 gui-classic/UFRMSaleAccounts.dfm:66 +msgid "XXX" +msgstr "" + +#. FRMOperation..bbExecute..Caption +#. FRMOperation..ActionList..actExecute..Caption +#. FRMSaleAccounts..bbExecute..Caption +#. FRMSaleAccounts..ActionList..actExecute..Caption +#: gui-classic/UFRMOperation.dfm:68 gui-classic/UFRMOperation.dfm:1179 +#: gui-classic/UFRMSaleAccounts.dfm:178 gui-classic/UFRMSaleAccounts.dfm:215 +msgid "Execute (F12)" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..lblFee..Caption +#: gui-classic/UFRMOperation.dfm:113 +msgid "Operation Fee" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..lblSignerAccount..Caption +#: gui-classic/UFRMOperation.dfm:122 +msgid "Signer account (Fee payer)" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..Caption +#: gui-classic/UFRMOperation.dfm:165 +msgid " Payload: " +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..lblEncryptPassword..Caption +#: gui-classic/UFRMOperation.dfm:172 +msgid "Password:" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..Label4..Caption +#: gui-classic/UFRMOperation.dfm:181 +msgid "Payload Data" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..rbEncryptedWithEC..Caption +#: gui-classic/UFRMOperation.dfm:216 +msgid "Encrypted with dest account public key" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..rbEncrptedWithPassword..Caption +#: gui-classic/UFRMOperation.dfm:227 +msgid "Encrypted with password" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..rbNotEncrypted..Caption +#: gui-classic/UFRMOperation.dfm:237 +msgid "Dont encrypt (Public payload)" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..rbEncryptedWithOldEC..Caption +#: gui-classic/UFRMOperation.dfm:272 +msgid "Encrypted with old public key" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..cbPayloadAsHex..Caption +#: gui-classic/UFRMOperation.dfm:282 +msgid "As Hex" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsTransaction..Caption +#: gui-classic/UFRMOperation.dfm:302 +msgid "Transaction" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsTransaction..lblDestAccount..Caption +#: gui-classic/UFRMOperation.dfm:308 +msgid "Destination account" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsTransaction..lblAmount..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..lblBuyAmount..Caption +#: gui-classic/UFRMOperation.dfm:317 gui-classic/UFRMOperation.dfm:810 +msgid "Amount" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..Caption +#: gui-classic/UFRMOperation.dfm:387 +msgid "Change Key" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..lblNewPrivateKey..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..lblBuyNewKey..Caption +#: gui-classic/UFRMOperation.dfm:394 gui-classic/UFRMOperation.dfm:837 +msgid "New private key" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..lblNewOwnerPublicKey..Caption +#: gui-classic/UFRMOperation.dfm:437 +msgid "New owners public key" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..rbChangeKeyWithAnother..Caption +#: gui-classic/UFRMOperation.dfm:446 +msgid "Change private key" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..rbChangeKeyTransferAccountToNewOwner..Caption +#: gui-classic/UFRMOperation.dfm:514 +msgid "Transfer account to a new owner" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..Caption +#: gui-classic/UFRMOperation.dfm:526 +msgid "List Account" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblPrice..Caption +#: gui-classic/UFRMOperation.dfm:550 +msgid "Sale Price" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblSeller..Caption +#: gui-classic/UFRMOperation.dfm:560 +msgid "Seller Account" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblNewKey..Caption +#: gui-classic/UFRMOperation.dfm:604 +msgid "Buyer Key" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblTimeLock..Caption +#: gui-classic/UFRMOperation.dfm:614 +msgid "Time-Lock" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblHashLock..Caption +#: gui-classic/UFRMOperation.dfm:623 +msgid "Hash-Lock" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..rbListAccountForPublicSale..Caption +#: gui-classic/UFRMOperation.dfm:699 +msgid "List for Public Sale" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..rbListAccountForPrivateSale..Caption +#: gui-classic/UFRMOperation.dfm:707 +msgid "List for Private Sale" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..rbListAccountForAccountSwap..Caption +#: gui-classic/UFRMOperation.dfm:715 +msgid "List for Atomic Account Swap" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..rbListAccountForCoinSwap..Caption +#: gui-classic/UFRMOperation.dfm:723 +msgid "List for Atomic Coin Swap" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..ebPrice..TextHint +#: gui-classic/UFRMOperation.dfm:732 +msgid "PASC Quantity" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..ebSellerAccount..TextHint +#: gui-classic/UFRMOperation.dfm:740 +msgid "Account Number" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..ebNewKey..TextHint +#: gui-classic/UFRMOperation.dfm:748 +msgid "BASE58 Encoded Public Key Of New Owner" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..ebTimeLock..Hint +#: gui-classic/UFRMOperation.dfm:755 +msgid "Block Number " +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..ebTimeLock..TextHint +#: gui-classic/UFRMOperation.dfm:759 +msgid "Block number" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsDelistAccount..Caption +#: gui-classic/UFRMOperation.dfm:770 +msgid "Delist Account" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..Caption +#: gui-classic/UFRMOperation.dfm:790 +msgid "Buy Account" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..lblAccountToBuy..Caption +#: gui-classic/UFRMOperation.dfm:799 +msgid "Account to Buy" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..Label2..Caption +#: gui-classic/UFRMOperation.dfm:846 +msgid "any over-payment will remain on bought account" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..Caption +#: gui-classic/UFRMOperation.dfm:966 +msgid "Change Info" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..lblChangeName..Caption +#: gui-classic/UFRMOperation.dfm:990 +msgid "Change name" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..lblChangeType..Caption +#: gui-classic/UFRMOperation.dfm:1001 +msgid "Change type" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..lblChangeAccountData..Caption +#: gui-classic/UFRMOperation.dfm:1012 +msgid "Change Data" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..ebChangeName..TextHint +#: gui-classic/UFRMOperation.dfm:1022 +msgid "Account name (null or 3..64 chars)" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..ebChangeType..TextHint +#: gui-classic/UFRMOperation.dfm:1030 +msgid "0..65535" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..ebChangeAccountData..TextHint +#: gui-classic/UFRMOperation.dfm:1038 +msgid "Hexadecimal value (0..32 bytes)" +msgstr "" + +#. FRMOperation..PageControlLocked..tsGlobalError..lblGlobalErrors..Caption +#: gui-classic/UFRMOperation.dfm:1060 +msgid "????" +msgstr "" + +#. FRMOperation..PageControlLocked..tsGlobalError..bbPassword..Caption +#. FRMWalletKeys..bbUpdatePassword..Caption +#: gui-classic/UFRMOperation.dfm:1076 gui-classic/UFRMWalletKeys.dfm:500 +msgid "Password" +msgstr "" + +#. FRMOperation..memoAccounts....Lines.Strings +#. FRMOperation..memoAccounts....Lines.Strings +#. FRMSaleAccounts..memoAccounts....Lines.Strings +#. FRMSaleAccounts..memoAccounts....Lines.Strings +#: gui-classic/UFRMOperation.dfm:1152 gui-classic/UFRMOperation.dfm:1153 +#: gui-classic/UFRMSaleAccounts.dfm:87 gui-classic/UFRMSaleAccounts.dfm:88 +msgid "123456-11 (0.0000); 123456-11 (0.0000); " +msgstr "" + +#. FRMOperation..ebSenderAccount..Text +#. FRMSaleAccounts..ebSenderAccount..Text +#: gui-classic/UFRMOperation.dfm:1171 gui-classic/UFRMSaleAccounts.dfm:107 +msgid "ebSenderAccount" +msgstr "" + +#. FRMOperationsExplorer..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:5 +msgid "Operations Explorer Tool" +msgstr "" + +#. FRMOperationsExplorer..pnlTop..lblTopCaption....Caption +#: gui-classic/UFRMOperationsExplorer.dfm:58 +msgid "" +"You can use this tool to explore operations, also you can copy/paste " +"operations as a RAW (Use Ctrl+I to Import). This tool allows to generate a " +"Multioperation, send to third party the RAW, add more txs... and then sign. " +"Once Everybody has signed, you will be able to EXECUTE OPERATION to be " +"added to network nodes. " +msgstr "" + +#. FRMOperationsExplorer..pnlOpInfo..pnlExport..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:85 +msgid "pnlExport" +msgstr "" + +#. FRMOperationsExplorer..pnlOpInfo..pnlExport..Label1..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:94 +msgid "Operation as RAW:" +msgstr "" + +#. FRMOperationsExplorer..pnlOpInfo..pnlInfo..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:115 +msgid "pnlInfo" +msgstr "" + +#. FRMOperationsExplorer..pnlOpInfo..pnlInfo..pnlInfoOptions..Label2..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:139 +msgid "Multioperation actions:" +msgstr "" + +#. FRMOperationsExplorer..pnlOpInfo..pnlInfo..pnlInfoOptions..bbRandom..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:188 +msgid "RANDOM OPERATIONS" +msgstr "" + +#. FRMOperationsExplorer..mMenu..MiTools..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:199 +msgid "Tools" +msgstr "" + +#. FRMOperationsExplorer..mMenu..MiTools..MiImportOperationsFromTxt..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:201 +msgid "Import Operations from RAW" +msgstr "" + +#. FRMOperationsExplorer..mMenu..MiTools..MiDivider1..Caption +#. FRMOperationsExplorer..mMenu..MiActions..MenuItem6..Caption +#. FRMWallet..MainMenu..miProject..miN1..Caption +#. FRMWallet..MainMenu..miProject..N1..Caption +#. FRMWallet..MainMenu..MiOperations..N2..Caption +#. FRMWallet..MainMenu..MiOperations..N3..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:206 +#: gui-classic/UFRMOperationsExplorer.dfm:224 gui-classic/UFRMWallet.dfm:1254 +#: gui-classic/UFRMWallet.dfm:1270 gui-classic/UFRMWallet.dfm:1310 +#: gui-classic/UFRMWallet.dfm:1327 +msgid "-" +msgstr "" + +#. FRMOperationsExplorer..mMenu..MiTools..miLoadFromBlockchain..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:209 +msgid "Load Operations from Blockchain" +msgstr "" + +#. FRMOperationsExplorer..mMenu..MiTools..MiLoadOperationsFromBlockchainFile..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:214 +msgid "Load Operations from Blockchain file" +msgstr "" + +#. FRMOperationsExplorer..mMenu..MiActions..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:219 +msgid "Actions" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActExecuteOperation..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:244 +msgid "Execute Operation" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActAddTxToMultioperation..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:249 +msgid "Add Tx to Multioperation" +msgstr "" + +#. FRMOperationsExplorer..ActionList..AddOpChangeToMultioperation..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:254 +msgid "Add OpChange to Multioperation" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActRemoveAccountFromMultioperation..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:259 +msgid "Remove Account from Multioperation" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActSignMultioperation..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:264 +msgid "Sign Multioperation" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActAddTx..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:269 +msgid "Add Tx" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActAddOpChange..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:274 +msgid "Add OpChange" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActRemove..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:279 +msgid "Remove" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActSign..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:284 +msgid "Sign" +msgstr "" + +#. FRMPascalCoinWalletConfig..Caption +#. FRMWallet..MainMenu..miProject..miOptions..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:6 +#: gui-classic/UFRMWallet.dfm:1257 +msgid "Options" +msgstr "" + +#. FRMPascalCoinWalletConfig..Label1..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:25 +msgid "Default fee for operation" +msgstr "" + +#. FRMPascalCoinWalletConfig..Label2..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:34 +msgid "Internet Server Port" +msgstr "" + +#. FRMPascalCoinWalletConfig..lblDefaultInternetServerPort..Caption +#. FRMPascalCoinWalletConfig..lblDefaultJSONRPCMinerServerPort..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:43 +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:87 +msgid "(Default XXXX)" +msgstr "" + +#. FRMPascalCoinWalletConfig..Label3..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:52 +msgid "Miner Name:" +msgstr "" + +#. FRMPascalCoinWalletConfig..Label4..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:61 +msgid "This name will be included in each new block you mine!" +msgstr "" + +#. FRMPascalCoinWalletConfig..Label5..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:78 +msgid "JSON-RPC Port" +msgstr "" + +#. FRMPascalCoinWalletConfig..Label6..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:96 +msgid "Allowed IP's" +msgstr "" + +#. FRMPascalCoinWalletConfig..Label7..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:105 +msgid "Ip's separated by semicolon or empty for all" +msgstr "" + +#. FRMPascalCoinWalletConfig..cbJSONRPCMinerServerActive..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:122 +msgid "JSON-RPC Server Miner (TCP/IP, no HTTP)" +msgstr "" + +#. FRMPascalCoinWalletConfig..cbSaveLogFiles..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:139 +msgid "Save log file" +msgstr "" + +#. FRMPascalCoinWalletConfig..cbShowLogs..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:148 +msgid "Show logs" +msgstr "" + +#. FRMPascalCoinWalletConfig..bbUpdatePassword..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:196 +msgid "Wallet Password" +msgstr "" + +#. FRMPascalCoinWalletConfig..ebMinerName..Text +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:265 +msgid "ebMinerName" +msgstr "" + +#. FRMPascalCoinWalletConfig..cbShowModalMessages..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:272 +msgid "Show modal messages" +msgstr "" + +#. FRMPascalCoinWalletConfig..gbMinerPrivateKey..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:301 +msgid " Miner Server Private Key: " +msgstr "" + +#. FRMPascalCoinWalletConfig..gbMinerPrivateKey..rbGenerateANewPrivateKeyEachBlock..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:308 +msgid "Generate a new private key for each generated block" +msgstr "" + +#. FRMPascalCoinWalletConfig..gbMinerPrivateKey..rbUseARandomKey..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:316 +msgid "Use a random existing key" +msgstr "" + +#. FRMPascalCoinWalletConfig..gbMinerPrivateKey..rbMineAllwaysWithThisKey..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:324 +msgid "Always mine with this key:" +msgstr "" + +#. FRMPascalCoinWalletConfig..cbSaveDebugLogs..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:341 +msgid "Save debug logs too" +msgstr "" + +#. FRMPascalCoinWalletConfig..bbOpenDataFolder..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:349 +msgid "Open Data Folder" +msgstr "" + +#. FRMPascalCoinWalletConfig..cbJSONRPCPortEnabled..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:393 +msgid "JSON-RPC Server port enabled (HTTP)" +msgstr "" + +#. FRMPascalCoinWalletConfig..ebJSONRPCAllowedIPs..Text +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:403 +msgid "ebJSONRPCAllowedIPs" +msgstr "" + +#. FRMPascalCoinWalletConfig..cbDownloadNewCheckpoint..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:410 +msgid "Download new Checkpoint if blockchain older than..." +msgstr "" + +#. FRMPascalCoinWalletConfig..bbChangeLanguage..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:428 +msgid "Change UI language" +msgstr "" + +#. FRMPayloadDecoder..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:7 +msgid "Operation Information/Decoder" +msgstr "" + +#. FRMPayloadDecoder..Label1..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:26 +msgid "Block/Op:" +msgstr "" + +#. FRMPayloadDecoder..lblBlock..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:33 +msgid "000000/0000" +msgstr "" + +#. FRMPayloadDecoder..Label6..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:59 +msgid "Date Time:" +msgstr "" + +#. FRMPayloadDecoder..Label2..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:66 +msgid "Operation:" +msgstr "" + +#. FRMPayloadDecoder..lblAmountCaption..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:88 +msgid "Amount:" +msgstr "" + +#. FRMPayloadDecoder..lblFeeCaption..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:108 +msgid "Fee:" +msgstr "" + +#. FRMPayloadDecoder..Label4..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:128 +msgid "OpHash" +msgstr "" + +#. FRMPayloadDecoder..lblSenderCaption..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:135 +msgid "Sender:" +msgstr "" + +#. FRMPayloadDecoder..lblSender..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:142 +msgid "9999999-99" +msgstr "" + +#. FRMPayloadDecoder..lblReceiverCaption..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:155 +msgid "Receiver:" +msgstr "" + +#. FRMPayloadDecoder..lblReceiverInfo..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:175 +msgid "(Receiver info)" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecoded..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:192 +msgid "Payload" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecoded..Label7..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:202 +msgid "Decoded Payload:" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecoded..lblDecodedMethod..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:210 +msgid "(Method)" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecoded..Label3..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:223 +msgid "Original Payload in Hexadecimal:" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecoded..memoDecoded....Lines.Strings +#. FRMPayloadDecoder..PageControl..tsDecoded..memoOriginalPayloadInHexa....Lines.Strings +#: gui-classic/UFRMPayloadDecoder.dfm:237 +#: gui-classic/UFRMPayloadDecoder.dfm:256 +msgid "memoDecoded" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecoded..cbShowAsHexadecimal..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:267 +msgid "Show as hexadecimal" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecodeMethods..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:273 +msgid "Decode methods" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecodeMethods..lblPasswordsInfo..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:280 +msgid "lblPasswordsInfo" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecodeMethods..cbMethodPublicPayload..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:287 +msgid "Not encrypted (Public payload)" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecodeMethods..cbUsingPrivateKeys..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:296 +msgid "Using Private keys of my Wallet" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecodeMethods..cbUsingPasswords..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:305 +msgid "Using Passwords of the list" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecodeMethods..bbSaveMethods..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:323 +msgid "Save" +msgstr "" + +#. FRMPayloadDecoder..bbFind..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:376 +msgid "&Find" +msgstr "" + +#. FRMPayloadDecoder..ebOphash..Text +#: gui-classic/UFRMPayloadDecoder.dfm:420 +msgid "12345678901234567890123456789012345678901234567890123456789012" +msgstr "" + +#. FRMDiagnosticTool..txtLog..Text +#: gui-classic/UFRMRandomHashUtil.dfm:26 +msgid "txtLog" +msgstr "" + +#. FRMDiagnosticTool..btnRH..Caption +#: gui-classic/UFRMRandomHashUtil.dfm:33 +msgid "Random Hash" +msgstr "" + +#. FRMDiagnosticTool..btnRH2..Caption +#: gui-classic/UFRMRandomHashUtil.dfm:41 +msgid "Random Hash 2" +msgstr "" + +#. FRMRandomOperations..Caption +#. FRMRandomOperations..pnlClient..pnlTop1..bbRandomOperations..Caption +#: gui-classic/UFRMRandomOperations.dfm:4 +#: gui-classic/UFRMRandomOperations.dfm:73 +msgid "Random Operations" +msgstr "" + +#. FRMRandomOperations..pnlTop..lblTopCaption....Caption +#: gui-classic/UFRMRandomOperations.dfm:39 +msgid "" +"WARNING! This form will generate RANDOM operations using your private " +"keys!!!" +msgstr "" + +#. FRMRandomOperations..pnlClient..mLogs....Lines.Strings +#: gui-classic/UFRMRandomOperations.dfm:85 +msgid "mLogs" +msgstr "" + +#. FRMRPCCalls..Caption +#. FRMWallet..MainMenu..miProject..MiRPCCalls..Caption +#: gui-classic/UFRMRPCCalls.dfm:5 gui-classic/UFRMWallet.dfm:1266 +msgid "RPC Calls" +msgstr "" + +#. FRMRPCCalls..pnlTop..lblTopCaption....Caption +#: gui-classic/UFRMRPCCalls.dfm:45 +msgid "" +"WARNING! Execute only calls you understand. Execute unknown calls provided " +"by third person can cause that you lost your keys/balance!" +msgstr "" + +#. FRMRPCCalls..pnlRight..Label1..Caption +#: gui-classic/UFRMRPCCalls.dfm:83 +msgid "Method" +msgstr "" + +#. FRMRPCCalls..pnlRight..Label2..Caption +#: gui-classic/UFRMRPCCalls.dfm:92 +msgid "Server" +msgstr "" + +#. FRMRPCCalls..pnlRight..ebMethod..Text +#: gui-classic/UFRMRPCCalls.dfm:102 +msgid "ebMethod" +msgstr "" + +#. FRMRPCCalls..pnlRight..pageControl..tsKeyNames..Caption +#: gui-classic/UFRMRPCCalls.dfm:113 +msgid "Key/Value Params" +msgstr "" + +#. FRMRPCCalls..pnlRight..pageControl..tsJSONParams..Caption +#: gui-classic/UFRMRPCCalls.dfm:130 +msgid "Params as JSON" +msgstr "" + +#. FRMRPCCalls..pnlRight..bbSendCommand..Caption +#: gui-classic/UFRMRPCCalls.dfm:148 +msgid "&Send" +msgstr "" + +#. FRMRPCCalls..pnlRight..ebServerURL..Text +#: gui-classic/UFRMRPCCalls.dfm:195 +msgid "ebServerURL" +msgstr "" + +#. FRMRPCCalls..pnlInfo..pnlInfoBottom..pnlLastCall..Label3..Caption +#: gui-classic/UFRMRPCCalls.dfm:244 +msgid "Last call result:" +msgstr "" + +#. FRMRPCCalls..pnlInfo..pnlInfoBottom..pnlLastCall..lblLastCallResultState..Caption +#: gui-classic/UFRMRPCCalls.dfm:253 +msgid "STATE" +msgstr "" + +#. FRMSaleAccounts..Caption +#: gui-classic/UFRMSaleAccounts.dfm:5 +msgid "Sale accounts" +msgstr "" + +#. FRMSaleAccounts..Label1..Caption +#: gui-classic/UFRMSaleAccounts.dfm:32 +msgid "Sale price:" +msgstr "" + +#. FRMSaleAccounts..Label2..Caption +#: gui-classic/UFRMSaleAccounts.dfm:39 +msgid "Locked until block:" +msgstr "" + +#. FRMSaleAccounts..Label3..Caption +#: gui-classic/UFRMSaleAccounts.dfm:46 +msgid "Seller account (where to pay)" +msgstr "" + +#. FRMSaleAccounts..ebSalePrice..Text +#. FRMSaleAccounts..ebSellerAccount..Text +#: gui-classic/UFRMSaleAccounts.dfm:115 gui-classic/UFRMSaleAccounts.dfm:170 +msgid "Edit1" +msgstr "" + +#. FRMSaleAccounts..ebLockedUntilBlock..Text +#: gui-classic/UFRMSaleAccounts.dfm:123 +msgid "ebLockedUntilBlock" +msgstr "" + +#. FRMSaleAccounts..gbSellOptions..Caption +#: gui-classic/UFRMSaleAccounts.dfm:130 +msgid " Sell options: " +msgstr "" + +#. FRMSaleAccounts..gbSellOptions..lblNewOwnerPublicKey..Caption +#: gui-classic/UFRMSaleAccounts.dfm:137 +msgid "New owner's public key" +msgstr "" + +#. FRMSaleAccounts..gbSellOptions..rbEveryoneCanBuy..Caption +#: gui-classic/UFRMSaleAccounts.dfm:144 +msgid "Everyone can buy" +msgstr "" + +#. FRMSaleAccounts..gbSellOptions..rbReservedForAPublickKey..Caption +#: gui-classic/UFRMSaleAccounts.dfm:152 +msgid "Reserved for only one public key (private)" +msgstr "" + +#. FRMSaleAccounts..gbSellOptions..ebNewOwnerPublicKey..Text +#: gui-classic/UFRMSaleAccounts.dfm:161 +msgid "ebDestAccount" +msgstr "" + +#. FRMChangeLanguage..Caption +#. FRMChangeLanguage..Caption +#: gui-classic/UFRMSelectLanguage.dfm:8 +#: lib/i386-win32/ufrmselectlanguage.dfm:8 +msgid "Language Selection" +msgstr "" + +#. FRMChangeLanguage..bbCancel..Caption +#. FRMChangeLanguage..bbCancel..Caption +#: gui-classic/UFRMSelectLanguage.dfm:28 +#: lib/i386-win32/ufrmselectlanguage.dfm:28 +msgid "Cancel" +msgstr "" + +#. FRMChangeLanguage..Label1..Caption +#. FRMChangeLanguage..Label1..Caption +#: gui-classic/UFRMSelectLanguage.dfm:46 +#: lib/i386-win32/ufrmselectlanguage.dfm:46 +msgid "Select your preferred language" +msgstr "" + +#. FRMWallet..pnlTop..lblCurrentBlockCaption..Caption +#: gui-classic/UFRMWallet.dfm:135 +msgid "Total Blocks:" +msgstr "" + +#. FRMWallet..pnlTop..lblCurrentBlockTimeCaption..Caption +#: gui-classic/UFRMWallet.dfm:153 +msgid "Current Block Age:" +msgstr "" + +#. FRMWallet..pnlTop..lblCurrentBlockTime..Caption +#: gui-classic/UFRMWallet.dfm:162 +msgid "000 seconds ago" +msgstr "" + +#. FRMWallet..pnlTop..lblOperationsPendingCaption..Caption +#: gui-classic/UFRMWallet.dfm:171 +msgid "Pending Operations:" +msgstr "" + +#. FRMWallet..pnlTop..lblMiningStatusCaption..Caption +#: gui-classic/UFRMWallet.dfm:189 +msgid "Miner Clients:" +msgstr "" + +#. FRMWallet..pnlTop..lblCurrentDifficultyCaption..Caption +#: gui-classic/UFRMWallet.dfm:207 +msgid "Current Target:" +msgstr "" + +#. FRMWallet..pnlTop..Label4..Caption +#: gui-classic/UFRMWallet.dfm:234 +msgid "Time average:" +msgstr "" + +#. FRMWallet..pnlTop..Label8..Caption +#: gui-classic/UFRMWallet.dfm:243 +msgid "Node Status:" +msgstr "" + +#. FRMWallet..pnlTop..lblNodeStatus..Caption +#: gui-classic/UFRMWallet.dfm:252 +msgid "???" +msgstr "" + +#. FRMWallet..pnlTop..Label16..Caption +#: gui-classic/UFRMWallet.dfm:294 +msgid "Blocks Found:" +msgstr "" + +#. FRMWallet..pnlTop..lblBlocksFound..Hint +#: gui-classic/UFRMWallet.dfm:309 +msgid "Blocks found while Miner is running..." +msgstr "" + +#. FRMWallet..pnlTop..lblReceivedMessages..Caption +#: gui-classic/UFRMWallet.dfm:328 +msgid "Received Messages" +msgstr "" + +#. FRMWallet..pnlTop..lblBuild..Caption +#: gui-classic/UFRMWallet.dfm:344 +msgid "Build" +msgstr "" + +#. FRMWallet..StatusBar......Text +#: gui-classic/UFRMWallet.dfm:363 +msgid "Server Active" +msgstr "" + +#. FRMWallet..StatusBar......Text +#: gui-classic/UFRMWallet.dfm:367 +msgid "Connection status" +msgstr "" + +#. FRMWallet..StatusBar......Text +#: gui-classic/UFRMWallet.dfm:371 +msgid "Blocks" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..Caption +#: gui-classic/UFRMWallet.dfm:385 +msgid "Account Explorer" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pnlMyAccountsTop..Label18..Caption +#. FRMWallet..MainMenu..MiOperations..MiFindaccount..Caption +#: gui-classic/UFRMWallet.dfm:406 gui-classic/UFRMWallet.dfm:1295 +msgid "Find account" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pnlMyAccountsTop..cbExploreMyAccounts..Caption +#: gui-classic/UFRMWallet.dfm:458 +msgid "Explore accounts with one of my Wallet Keys" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pnlMyAccountsTop..bbChangeKeyName..Caption +#: gui-classic/UFRMWallet.dfm:476 +msgid "Change Key name" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pnlMyAccountsTop..cbFilterAccounts..Caption +#: gui-classic/UFRMWallet.dfm:485 +msgid "Filter accounts by balance" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pnlMyAccountsTop..ebFilterAccountByBalanceMin..Hint +#: gui-classic/UFRMWallet.dfm:494 +msgid "Min balance" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pnlMyAccountsTop..ebFilterAccountByBalanceMax..Hint +#: gui-classic/UFRMWallet.dfm:504 +msgid "Max balance" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pnlAccounts..pnlAccountsInfo..bbAccountsRefresh..Caption +#: gui-classic/UFRMWallet.dfm:580 +msgid "Refresh" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsAccountOperations..Caption +#: gui-classic/UFRMWallet.dfm:622 +msgid "Account Operations" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..Caption +#: gui-classic/UFRMWallet.dfm:634 +msgid "Selected Accounts For Batch Operation" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsTop..Label15..Caption +#: gui-classic/UFRMWallet.dfm:667 +msgid "Select multiple accounts to execute massive operations" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsBottom..Label22..Caption +#: gui-classic/UFRMWallet.dfm:703 +msgid "Accounts Balance:" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsLeft..sbSelectedAccountsAdd..Caption +#: gui-classic/UFRMWallet.dfm:730 +msgid ">" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsLeft..sbSelectedAccountsAddAll..Caption +#: gui-classic/UFRMWallet.dfm:738 +msgid ">>" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsLeft..sbSelectedAccountsDel..Caption +#: gui-classic/UFRMWallet.dfm:746 +msgid "<" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsLeft..sbSelectedAccountsDelAll..Caption +#: gui-classic/UFRMWallet.dfm:754 +msgid "<<" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..bbSelectedAccountsOperation..Caption +#. FRMWallet..MainMenu..MiOperations..Caption +#: gui-classic/UFRMWallet.dfm:763 gui-classic/UFRMWallet.dfm:1278 +msgid "Operations" +msgstr "" + +#. FRMWallet..PageControl..tsPendingOperations..Caption +#: gui-classic/UFRMWallet.dfm:829 +msgid "Pending Operations" +msgstr "" + +#. FRMWallet..PageControl..tsPendingOperations..pnlPendingOperations..Label10....Caption +#: gui-classic/UFRMWallet.dfm:865 +msgid "" +"Here you can see Operations transmited/received from other nodes that will " +"be included in next block. There is no guarantee that other nodes will " +"include them when mining, so it's important that you mine too to help " +"include Operations to the main BlockChain" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Caption +#: gui-classic/UFRMWallet.dfm:879 +msgid "Block Explorer" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..Label9..Caption +#. FRMWallet..PageControl..tsOperations..Panel1..Label2..Caption +#: gui-classic/UFRMWallet.dfm:898 gui-classic/UFRMWallet.dfm:994 +msgid "Filter by blocks range" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..lblHashRateBackBlocks..Caption +#: gui-classic/UFRMWallet.dfm:907 +msgid "HashRate back blocks" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..lblHashRateBackBlocks1..Caption +#: gui-classic/UFRMWallet.dfm:916 +msgid "Units" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..cbHashRateUnits..Text +#. FRMWallet..PageControl..tsBlockChain..Panel2..cbHashRateUnits....Items.Strings +#: gui-classic/UFRMWallet.dfm:955 gui-classic/UFRMWallet.dfm:960 +msgid "Mh/s" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..cbHashRateUnits....Items.Strings +#: gui-classic/UFRMWallet.dfm:959 +msgid "Kh/s" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..cbHashRateUnits....Items.Strings +#: gui-classic/UFRMWallet.dfm:961 +msgid "Gh/s" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..cbHashRateUnits....Items.Strings +#: gui-classic/UFRMWallet.dfm:962 +msgid "Th/s" +msgstr "" + +#. FRMWallet..PageControl..tsOperations..Caption +#. FRMWallet..MainMenu..MiOperations..MiOperationsExplorer..Caption +#: gui-classic/UFRMWallet.dfm:975 gui-classic/UFRMWallet.dfm:1305 +msgid "Operations Explorer" +msgstr "" + +#. FRMWallet..PageControl..tsLogs..Caption +#: gui-classic/UFRMWallet.dfm:1027 +msgid "Logs" +msgstr "" + +#. FRMWallet..PageControl..tsLogs..pnlTopLogs..cbShowDebugLogs..Caption +#: gui-classic/UFRMWallet.dfm:1046 +msgid "Show Debug Logs" +msgstr "" + +#. FRMWallet..PageControl..tsNodeStats..Caption +#: gui-classic/UFRMWallet.dfm:1062 +msgid "Node Stats" +msgstr "" + +#. FRMWallet..PageControl..tsNodeStats..Label3..Caption +#: gui-classic/UFRMWallet.dfm:1076 +msgid "Active Connections:" +msgstr "" + +#. FRMWallet..PageControl..tsNodeStats..Label6..Caption +#: gui-classic/UFRMWallet.dfm:1086 +msgid "Known Node Servers:" +msgstr "" + +#. FRMWallet..PageControl..tsNodeStats..Label7..Caption +#: gui-classic/UFRMWallet.dfm:1096 +msgid "Blacklisted Nodes" +msgstr "" + +#. FRMWallet..PageControl..tsMessages..Caption +#: gui-classic/UFRMWallet.dfm:1135 +msgid "Messages" +msgstr "" + +#. FRMWallet..PageControl..tsMessages..Label11..Caption +#: gui-classic/UFRMWallet.dfm:1149 +msgid "Messages:" +msgstr "" + +#. FRMWallet..PageControl..tsMessages..Label12..Caption +#: gui-classic/UFRMWallet.dfm:1158 +msgid "Message to send:" +msgstr "" + +#. FRMWallet..PageControl..tsMessages..Label13..Caption +#: gui-classic/UFRMWallet.dfm:1167 +msgid "Available Connections:" +msgstr "" + +#. FRMWallet..PageControl..tsMessages..Label14....Caption +#: gui-classic/UFRMWallet.dfm:1178 +msgid "" +"(Messages will be encrypted, so only dest connection will be able to read " +"it)" +msgstr "" + +#. FRMWallet..PageControl..tsMessages..bbSendAMessage..Caption +#: gui-classic/UFRMWallet.dfm:1203 +msgid "Send a Message" +msgstr "" + +#. FRMWallet..PageControl..tsMessages..memoMessageToSend....Lines.Strings +#: gui-classic/UFRMWallet.dfm:1232 +msgid "memoMessageToSend" +msgstr "" + +#. FRMWallet..MainMenu..miProject..Caption +#: gui-classic/UFRMWallet.dfm:1247 +msgid "Project" +msgstr "" + +#. FRMWallet..MainMenu..miProject..miPrivatekeys..Caption +#: gui-classic/UFRMWallet.dfm:1249 +msgid "Private Keys" +msgstr "" + +#. FRMWallet..MainMenu..miProject..IPnodes1..Caption +#: gui-classic/UFRMWallet.dfm:1262 +msgid "Available Node List" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..miNewOperation..Caption +#: gui-classic/UFRMWallet.dfm:1280 +msgid "New single Operation" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiFindOperationbyOpHash..Caption +#: gui-classic/UFRMWallet.dfm:1285 +msgid "Find Operation by OpHash" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiDecodePayload..Caption +#: gui-classic/UFRMWallet.dfm:1290 +msgid "Decode Payload" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiAccountInformation..Caption +#: gui-classic/UFRMWallet.dfm:1300 +msgid "Account Information" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiAddaccounttoSelected..Caption +#: gui-classic/UFRMWallet.dfm:1313 +msgid "Add account to selected" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiRemoveaccountfromselected..Caption +#: gui-classic/UFRMWallet.dfm:1318 +msgid "Remove account from selected" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiMultiaccountoperation..Caption +#: gui-classic/UFRMWallet.dfm:1323 +msgid "Multi account operation" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiFindpreviousaccountwithhighbalance..Caption +#: gui-classic/UFRMWallet.dfm:1330 +msgid "Find previous account with high balance" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiFindnextaccountwithhighbalance..Caption +#: gui-classic/UFRMWallet.dfm:1335 +msgid "Find next account with high balance" +msgstr "" + +#. FRMWallet..MainMenu..miAbout..Caption +#: gui-classic/UFRMWallet.dfm:1341 +msgid "About" +msgstr "" + +#. FRMWallet..MainMenu..miAbout..miAboutPascalCoin..Caption +#: gui-classic/UFRMWallet.dfm:1343 +msgid "About Pascal Coin..." +msgstr "" + +#. FRMWalletKeys..Caption +#: gui-classic/UFRMWalletKeys.dfm:6 +msgid "Wallet keys" +msgstr "" + +#. FRMWalletKeys..lblEncryptionTypeCaption..Caption +#: gui-classic/UFRMWalletKeys.dfm:25 +msgid "Encryption type:" +msgstr "" + +#. FRMWalletKeys..lblEncryptionType..Caption +#. FRMWalletKeys..lblKeyName..Caption +#: gui-classic/UFRMWalletKeys.dfm:32 gui-classic/UFRMWalletKeys.dfm:47 +msgid "000000000" +msgstr "" + +#. FRMWalletKeys..lblKeyNameCaption..Caption +#: gui-classic/UFRMWalletKeys.dfm:39 +msgid "Key name:" +msgstr "" + +#. FRMWalletKeys..lblPrivateKeyCaption..Caption +#: gui-classic/UFRMWalletKeys.dfm:54 +msgid "Public Key:" +msgstr "" + +#. FRMWalletKeys..lblKeysEncrypted..Caption +#: gui-classic/UFRMWalletKeys.dfm:62 +msgid "lblKeysEncrypted" +msgstr "" + +#. FRMWalletKeys..bbExportPrivateKey..Caption +#: gui-classic/UFRMWalletKeys.dfm:85 +msgid "Export Private key" +msgstr "" + +#. FRMWalletKeys..memoPrivateKey....Lines.Strings +#: gui-classic/UFRMWalletKeys.dfm:158 +msgid "memoPrivateKey" +msgstr "" + +#. FRMWalletKeys..bbChangeName..Caption +#: gui-classic/UFRMWalletKeys.dfm:169 +msgid "Change Name" +msgstr "" + +#. FRMWalletKeys..bbImportPrivateKey..Caption +#: gui-classic/UFRMWalletKeys.dfm:178 +msgid "Import Private key" +msgstr "" + +#. FRMWalletKeys..bbExportPublicKey..Caption +#: gui-classic/UFRMWalletKeys.dfm:240 +msgid "Export Public key" +msgstr "" + +#. FRMWalletKeys..bbImportPublicKey..Caption +#: gui-classic/UFRMWalletKeys.dfm:306 +msgid "Import Public key" +msgstr "" + +#. FRMWalletKeys..bbGenerateNewKey..Caption +#: gui-classic/UFRMWalletKeys.dfm:372 +msgid "Generate a new Key" +msgstr "" + +#. FRMWalletKeys..bbDelete..Caption +#: gui-classic/UFRMWalletKeys.dfm:434 +msgid "Delete" +msgstr "" + +#. FRMWalletKeys..bbExportAllWalletKeys..Caption +#: gui-classic/UFRMWalletKeys.dfm:568 +msgid "Export all Wallet Keys to a file" +msgstr "" + +#. FRMWalletKeys..bbImportKeysFile..Caption +#: gui-classic/UFRMWalletKeys.dfm:634 +msgid "Import a Wallet Keys File" +msgstr "" + +#. FRMWalletKeys..bbLock..Caption +#: gui-classic/UFRMWalletKeys.dfm:700 +msgid "Lock" +msgstr "" + +#. FRMWalletKeys..SaveDialog..DefaultExt +#. FRMWalletKeys..OpenDialog..DefaultExt +#: gui-classic/UFRMWalletKeys.dfm:758 gui-classic/UFRMWalletKeys.dfm:765 +msgid "dat" +msgstr "" + +#. FRMWalletKeys..SaveDialog..Filter +#: gui-classic/UFRMWalletKeys.dfm:759 +msgid "Wallet keys file|*.dat|All files|*.*" +msgstr "" + +#. FRMWalletKeys..OpenDialog..Filter +#: gui-classic/UFRMWalletKeys.dfm:766 +msgid "Wallet keys file (*.dat)|*.dat|All files (*.*)|*.*" +msgstr "" + +#. Programmer's name for it: SUnSupportedHash +#. Programmer's name for it: SUnSupportedHash +#: core/URandomHash.pas:267 core/URandomHash2.pas:219 +msgid "Unsupported Hash Selected" +msgstr "" + +#. Programmer's name for it: SInvalidRound +#. Programmer's name for it: SInvalidRound +#: core/URandomHash.pas:268 core/URandomHash2.pas:220 +msgid "Round must be between 0 and N inclusive" +msgstr "" + +#. Programmer's name for it: SOverlappingArgs +#. Programmer's name for it: SOverlappingArgs +#: core/URandomHash.pas:269 core/URandomHash2.pas:221 +msgid "Overlapping read/write regions" +msgstr "" + +#. Programmer's name for it: SBufferTooSmall +#. Programmer's name for it: SBufferTooSmall +#: core/URandomHash.pas:270 core/URandomHash2.pas:222 +msgid "Buffer too small to apply memory transform" +msgstr "" + +#. Programmer's name for it: SBlockHeaderTooSmallForNonce +#. Programmer's name for it: SBlockHeaderTooSmallForNonce +#: core/URandomHash.pas:271 core/URandomHash2.pas:223 +msgid "Buffer too small to contain nonce" +msgstr "" + +#. Programmer's name for it: SAESEngineNotInitialised +#. Programmer's name for it: SAESEngineNotInitialised +#: libraries/cryptolib4pascal/ClpAesEngine.pas:37 +#: libraries/cryptolib4pascal/ClpAesLightEngine.pas:37 +msgid "AES Engine not Initialised" +msgstr "" + +#. Programmer's name for it: SInputBuffertooShort +#. Programmer's name for it: SInputBuffertooShort +#. Programmer's name for it: SInputBufferTooShort +#. Programmer's name for it: SInputBuffertooShort +#. Programmer's name for it: SInputBuffertooShort +#. Programmer's name for it: SInputBuffertooShort +#. Programmer's name for it: SInputBuffertooShort +#. Programmer's name for it: SInputBuffertooShort +#: libraries/cryptolib4pascal/ClpAesEngine.pas:38 +#: libraries/cryptolib4pascal/ClpAesLightEngine.pas:38 +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:39 +#: libraries/cryptolib4pascal/ClpBlowfishEngine.pas:39 +#: libraries/cryptolib4pascal/ClpRijndaelEngine.pas:35 +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:43 +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:36 +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:36 +msgid "Input Buffer too Short" +msgstr "" + +#. Programmer's name for it: SOutputBuffertooShort +#. Programmer's name for it: SOutputBuffertooShort +#. Programmer's name for it: SOutputBufferTooShort +#. Programmer's name for it: SOutputBuffertooShort +#. Programmer's name for it: SOutputBufferTooSmall +#. Programmer's name for it: SOutputBufferTooSmall +#. Programmer's name for it: SOutputBufferTooSmall +#. Programmer's name for it: SOutputBuffertooShort +#. Programmer's name for it: SOutputBuffertooShort +#. Programmer's name for it: SOutputBuffertooShort +#. Programmer's name for it: SOutputBuffertooShort +#: libraries/cryptolib4pascal/ClpAesEngine.pas:39 +#: libraries/cryptolib4pascal/ClpAesLightEngine.pas:39 +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:40 +#: libraries/cryptolib4pascal/ClpBlowfishEngine.pas:40 +#: libraries/cryptolib4pascal/ClpBufferedBlockCipher.pas:39 +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:32 +#: libraries/cryptolib4pascal/ClpPaddedBufferedBlockCipher.pas:40 +#: libraries/cryptolib4pascal/ClpRijndaelEngine.pas:36 +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:44 +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:37 +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:37 +msgid "Output Buffer too Short" +msgstr "" + +#. Programmer's name for it: SInvalidParameterAESInit +#. Programmer's name for it: SInvalidParameterAESInit +#: libraries/cryptolib4pascal/ClpAesEngine.pas:40 +#: libraries/cryptolib4pascal/ClpAesLightEngine.pas:40 +msgid "Invalid Parameter Passed to AES Init - \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#: libraries/cryptolib4pascal/ClpAesEngine.pas:41 +#: libraries/cryptolib4pascal/ClpAesLightEngine.pas:41 +msgid "Key Length not 128/192/256 bits." +msgstr "" + +#. Programmer's name for it: SInvalidOperation +#. Programmer's name for it: SInvalidOperation +#: libraries/cryptolib4pascal/ClpAesEngine.pas:42 +#: libraries/cryptolib4pascal/ClpAesLightEngine.pas:42 +msgid "Should Never Get Here" +msgstr "" + +#: libraries/cryptolib4pascal/ClpAESPRNGRandom.pas:40 +msgid "AES RNG Seed Length must be either one of these \"128/192/256 bits\"." +msgstr "" + +#: libraries/cryptolib4pascal/ClpAgreementUtilities.pas:43 +msgid "Raw Agreement Algorithm \"%s\" Not Recognised." +msgstr "" + +#: libraries/cryptolib4pascal/ClpAgreementUtilities.pas:45 +msgid "Basic Agreement Algorithm \"%s\" Not Recognised." +msgstr "" + +#. Programmer's name for it: SArgon2TypeInvalid +#: libraries/cryptolib4pascal/ClpArgon2ParametersGenerator.pas:41 +msgid "Selected Argon2Type is Invalid" +msgstr "" + +#. Programmer's name for it: SArgon2VersionInvalid +#: libraries/cryptolib4pascal/ClpArgon2ParametersGenerator.pas:42 +msgid "Selected Argon2Version is Invalid" +msgstr "" + +#. Programmer's name for it: SArgon2MemoryCostTypeInvalid +#: libraries/cryptolib4pascal/ClpArgon2ParametersGenerator.pas:43 +msgid "Selected Argon2MemoryCostType is Invalid" +msgstr "" + +#. Programmer's name for it: SInvalidLength +#: libraries/cryptolib4pascal/ClpArrayUtils.pas:30 +msgid "%d \" > \" %d" +msgstr "" + +#. Programmer's name for it: SDataOverflow +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:43 +msgid "Data Overflow" +msgstr "" + +#. Programmer's name for it: SDataOverflow +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:45 +msgid "Corrupted Stream - Invalid High Tag Number Found" +msgstr "" + +#. Programmer's name for it: SEOFFound +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:46 +msgid "EOF Found Inside Tag Value" +msgstr "" + +#. Programmer's name for it: SInvalidEnd +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:47 +msgid "EOF Found When Length Expected" +msgstr "" + +#. Programmer's name for it: SInvalidDerLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:48 +msgid "DER Length More Than 4 Bytes: %d" +msgstr "" + +#. Programmer's name for it: SEndOfStream +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:49 +msgid "EOF Found Reading Length" +msgstr "" + +#. Programmer's name for it: SNegativeLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:50 +msgid "Corrupted Stream - Negative Length Found" +msgstr "" + +#. Programmer's name for it: SOutOfBoundsLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:51 +msgid "Corrupted stream - Out of Bounds Length Found" +msgstr "" + +#. Programmer's name for it: SUnknownTag +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:52 +msgid "Unknown Tag \" %d \" Encountered" +msgstr "" + +#. Programmer's name for it: SEndOfContent +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:53 +msgid "Unexpected End-of-Contents Marker" +msgstr "" + +#. Programmer's name for it: SIndefiniteLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:54 +msgid "Indefinite Length Primitive Encoding Encountered" +msgstr "" + +#. Programmer's name for it: SUnknownBerObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:55 +msgid "Unknown BER Object Encountered" +msgstr "" + +#. Programmer's name for it: SCorruptedStream +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:56 +msgid "Corrupted Stream Detected: %s" +msgstr "" + +#. Programmer's name for it: SInvalidLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:57 +msgid "Negative Lengths not Allowed\", \"Length\"" +msgstr "" + +#. Programmer's name for it: SEndOfStreamTwo +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:58 +msgid "DEF Length %d \" TObject truncated by \" %d" +msgstr "" + +#. Programmer's name for it: SInvalidBufferLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:59 +msgid "Buffer Length Not Right For Data" +msgstr "" + +#. Programmer's name for it: SMalformedContent +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:60 +msgid "Malformed End-of-Contents Marker" +msgstr "" + +#. Programmer's name for it: SExtraData +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:62 +msgid "Extra Data Found After Object" +msgstr "" + +#. Programmer's name for it: SUnRecognizedObjectStream +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:63 +msgid "Cannot Recognise Object in Stream" +msgstr "" + +#. Programmer's name for it: SUnRecognizedObjectByteArray +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:64 +msgid "Cannot Recognise Object in ByteArray" +msgstr "" + +#. Programmer's name for it: SIllegalObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:65 +msgid "Illegal Object in GetInstance: %s, \"obj\"" +msgstr "" + +#. Programmer's name for it: SStrNil +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:66 +msgid "\"Str\" Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SProcessingError +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:67 +msgid "Error Processing Object : \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:68 +msgid "Object Implicit - Explicit Expected." +msgstr "" + +#. Programmer's name for it: SUnknownObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:69 +msgid "Unknown object in GetInstance: %s, \"obj\"" +msgstr "" + +#. Programmer's name for it: SInvalidSequence +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:70 +msgid "\"Failed to Construct Sequence from byte array: \" %s" +msgstr "" + +#. Programmer's name for it: SImplicitObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:71 +msgid "Implicitly Tagged Object" +msgstr "" + +#. Programmer's name for it: SImplicitTag +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:72 +msgid "Implicit Tagging for Tag: %d" +msgstr "" + +#. Programmer's name for it: SUnknownObjectBER +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:73 +msgid "Unknown BER Object Encountered: $%x" +msgstr "" + +#. Programmer's name for it: SImplicitTagging +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:74 +msgid "Implicit Tagging not Implemented" +msgstr "" + +#. Programmer's name for it: SImplicitTagging +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:76 +msgid "Sequences Must Use Constructed Encoding (see X.690 8.9.1/8.10.1)" +msgstr "" + +#. Programmer's name for it: SImplicitTagging +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:78 +msgid "Sets Must Use Constructed Encoding (see X.690 8.11.1/8.12.1)" +msgstr "" + +#. Programmer's name for it: SMalformedObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:79 +msgid "Malformed Object %s" +msgstr "" + +#. Programmer's name for it: SUnSupportedTag +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:80 +msgid "Unsupported Tag Number" +msgstr "" + +#. Programmer's name for it: SConvertError +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:81 +msgid "EIOCryptoLibException Converting Stream to Byte Array: %s" +msgstr "" + +#. Programmer's name for it: SEncodingError +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:82 +msgid "Encoding Error in GetInstance: %s \"obj\"" +msgstr "" + +#. Programmer's name for it: SDataNil +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:83 +msgid "\"data\"" +msgstr "" + +#. Programmer's name for it: SInvalidRange +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:84 +msgid "Must be in the Range 0 to 7\", \"padBits\"" +msgstr "" + +#. Programmer's name for it: SPadBitError +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:85 +msgid "If \"data\" is Empty, \"padBits\" Must be 0" +msgstr "" + +#. Programmer's name for it: SUnalignedData +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:86 +msgid "Attempt to Get non-octet Aligned Data from BIT STRING\"" +msgstr "" + +#. Programmer's name for it: STruncatedBitString +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:87 +msgid "Truncated BIT STRING Detected\", \"octets\"" +msgstr "" + +#. Programmer's name for it: SNotImplemented +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:88 +msgid "Not Implemented %s" +msgstr "" + +#. Programmer's name for it: SUnConstructedTag +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:89 +msgid "Explicit Tags Must be Constructed (see X.690 8.14.2)" +msgstr "" + +#. Programmer's name for it: SParsingError +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:90 +msgid "%s" +msgstr "" + +#. Programmer's name for it: SEmptyInput +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:91 +msgid "Input Cannot be Empty \"astr\"" +msgstr "" + +#. Programmer's name for it: SInvalidValue +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:92 +msgid "Byte Value Should Have 1 Byte in it', \"val\"" +msgstr "" + +#. Programmer's name for it: SInvalidBooleanValue +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:93 +msgid "BOOLEAN Value Should Have 1 Byte in it\", \"Value\"" +msgstr "" + +#. Programmer's name for it: SMalformedEnumerated +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:94 +msgid "Malformed Enumerated" +msgstr "" + +#. Programmer's name for it: SZeroLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:95 +msgid "Enumerated has Zero Length, \"enc\"" +msgstr "" + +#. Programmer's name for it: SInvalidEncoding +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:96 +msgid "Invalid Encoding Value: %d" +msgstr "" + +#. Programmer's name for it: SFewObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:97 +msgid "Too Few Objects in Input Vector, \"v\"" +msgstr "" + +#. Programmer's name for it: SVectorTooLarge +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:98 +msgid "Input Vector too Large\", \"vector\"" +msgstr "" + +#. Programmer's name for it: SVectorTooLarge +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:100 +msgid "" +"No Tagged Object Found in Vector. Structure Doesn 't Seem to be of Type " +"External, \"Vector\"" +msgstr "" + +#. Programmer's name for it: SInvalidEncodingValue +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:101 +msgid "Invalid Encoding Value" +msgstr "" + +#. Programmer's name for it: SObjectNil +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:102 +msgid " \"obj\" Can't be Nil" +msgstr "" + +#. Programmer's name for it: SValueNil +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:103 +msgid " \"value\" Can't be Nil" +msgstr "" + +#. Programmer's name for it: SMalformedInteger +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:104 +msgid "Malformed Integer" +msgstr "" + +#. Programmer's name for it: SIdentifierNil +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:105 +msgid "Identifier Cannot be Empty" +msgstr "" + +#. Programmer's name for it: SInvalidOID +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:106 +msgid "\"String \" %s is \" not an OID\"" +msgstr "" + +#. Programmer's name for it: SInvalidBranchId +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:107 +msgid "\"String \" %s \" not a valid OID branch\", \"branchID\"" +msgstr "" + +#. Programmer's name for it: SIllegalCharacters +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:108 +msgid "String Contains Illegal Characters \"str\"" +msgstr "" + +#. Programmer's name for it: SExpectedPublicKey +#: libraries/cryptolib4pascal/ClpAsymmetricCipherKeyPair.pas:30 +msgid "Expected a Public Key \"publicParameter\"" +msgstr "" + +#. Programmer's name for it: SExpectedPrivateKey +#: libraries/cryptolib4pascal/ClpAsymmetricCipherKeyPair.pas:31 +msgid "Expected a Private Key \"privateParameter\"" +msgstr "" + +#. Programmer's name for it: SOutputBufferTooSmall +#. Programmer's name for it: SOutputBufferTooSmall +#: libraries/cryptolib4pascal/ClpBaseKdfBytesGenerator.pas:36 +#: libraries/cryptolib4pascal/ClpPascalCoinECIESKdfBytesGenerator.pas:34 +msgid "Output Buffer too Small" +msgstr "" + +#. Programmer's name for it: SOutputLengthTooLarge +#: libraries/cryptolib4pascal/ClpBaseKdfBytesGenerator.pas:37 +msgid "Output Length too Large" +msgstr "" + +#. Programmer's name for it: SKDFParameterNotFound +#. Programmer's name for it: SKDFParameterNotFound +#: libraries/cryptolib4pascal/ClpBaseKdfBytesGenerator.pas:38 +#: libraries/cryptolib4pascal/ClpPascalCoinECIESKdfBytesGenerator.pas:35 +msgid "KDF Parameters Required For KDF Generator" +msgstr "" + +#. Programmer's name for it: SDivisionByZero +#: libraries/cryptolib4pascal/ClpBigInteger.pas:36 +msgid "Division by Zero Error" +msgstr "" + +#. Programmer's name for it: SModulusPositive +#: libraries/cryptolib4pascal/ClpBigInteger.pas:37 +msgid "Modulus must be Positive" +msgstr "" + +#. Programmer's name for it: SNotRelativelyPrime +#: libraries/cryptolib4pascal/ClpBigInteger.pas:38 +msgid "Numbers not Relatively Prime." +msgstr "" + +#. Programmer's name for it: SNegativeValue +#: libraries/cryptolib4pascal/ClpBigInteger.pas:39 +msgid "Cannot be Called on Value < 0" +msgstr "" + +#. Programmer's name for it: SNegativeExponent +#: libraries/cryptolib4pascal/ClpBigInteger.pas:40 +msgid "Negative Exponent" +msgstr "" + +#. Programmer's name for it: SResultTooLarge +#: libraries/cryptolib4pascal/ClpBigInteger.pas:41 +msgid "Result too Large" +msgstr "" + +#. Programmer's name for it: SNegativeBitPosition +#: libraries/cryptolib4pascal/ClpBigInteger.pas:42 +msgid "Bit Position must not be Negative" +msgstr "" + +#. Programmer's name for it: SInvalidBitAddress +#: libraries/cryptolib4pascal/ClpBigInteger.pas:43 +msgid "Bit Address less than Zero" +msgstr "" + +#. Programmer's name for it: SZeroLengthBigInteger +#: libraries/cryptolib4pascal/ClpBigInteger.pas:44 +msgid "Zero length BigInteger" +msgstr "" + +#. Programmer's name for it: SInvalidSign +#: libraries/cryptolib4pascal/ClpBigInteger.pas:45 +msgid "Invalid Sign Value" +msgstr "" + +#. Programmer's name for it: SNegativeSizeInBits +#: libraries/cryptolib4pascal/ClpBigInteger.pas:46 +msgid "sizeInBits must be non-negative" +msgstr "" + +#. Programmer's name for it: SInvalidBitLength +#: libraries/cryptolib4pascal/ClpBigInteger.pas:47 +msgid "bitLength < 2" +msgstr "" + +#. Programmer's name for it: SInvalidBase +#: libraries/cryptolib4pascal/ClpBigInteger.pas:48 +msgid "Only bases 2, 8, 10, or 16 allowed" +msgstr "" + +#. Programmer's name for it: SBadCharacterRadix8 +#: libraries/cryptolib4pascal/ClpBigInteger.pas:49 +msgid "Bad Character in radix 8 string: %s" +msgstr "" + +#. Programmer's name for it: SBadCharacterRadix2 +#: libraries/cryptolib4pascal/ClpBigInteger.pas:50 +msgid "Bad Character in radix 2 string: %s" +msgstr "" + +#. Programmer's name for it: SUnSupportedBase +#: libraries/cryptolib4pascal/ClpBigInteger.pas:51 +msgid "Only bases 2, 8, 10, 16 are allowed" +msgstr "" + +#. Programmer's name for it: SInvalidLength +#: libraries/cryptolib4pascal/ClpBigIntegers.pas:31 +msgid "Standard Length Exceeded, \"n\"" +msgstr "" + +#. Programmer's name for it: SInvalidMinValue +#: libraries/cryptolib4pascal/ClpBigIntegers.pas:32 +msgid "\"min\" may not be greater than \"max\"\"" +msgstr "" + +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:37 +msgid "Initialisation Vector Must be the Same Length as Block Size" +msgstr "" + +#. Programmer's name for it: SInvalidChangeState +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:38 +msgid "Cannot Change Encrypting State Without Providing Key." +msgstr "" + +#. Programmer's name for it: SInvalidParameterArgument +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:42 +msgid "CTR/SIC Mode Requires ParametersWithIV" +msgstr "" + +#. Programmer's name for it: SInvalidParameterArgument +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:44 +msgid "CTR/SIC mode requires IV no greater than: %u bytes" +msgstr "" + +#. Programmer's name for it: SInvalidTooSmallIVLength +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:45 +msgid "CTR/SIC mode requires IV of at least: %u bytes" +msgstr "" + +#. Programmer's name for it: SUnsupportedCipher +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:47 +msgid "CtsBlockCipher Can Only Accept ECB or CBC Ciphers" +msgstr "" + +#. Programmer's name for it: SNegativeInputLength +#. Programmer's name for it: SInvalidLength +#. Programmer's name for it: SNegativeInputLength +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:48 +#: libraries/cryptolib4pascal/ClpBufferedBlockCipher.pas:36 +#: libraries/cryptolib4pascal/ClpPaddedBufferedBlockCipher.pas:42 +msgid "Can't Have a Negative Input Length!" +msgstr "" + +#. Programmer's name for it: SCTSDoFinalError +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:49 +msgid "Need at Least One Block of Input For CTS" +msgstr "" + +#. Programmer's name for it: SBlowfishEngineNotInitialised +#: libraries/cryptolib4pascal/ClpBlowfishEngine.pas:36 +msgid "Blowfish Engine not Initialised" +msgstr "" + +#. Programmer's name for it: SBlowfishEngineNotInitialised +#: libraries/cryptolib4pascal/ClpBlowfishEngine.pas:38 +msgid "Invalid Parameter Passed to Blowfish Init - \"%s\"" +msgstr "" + +#. Programmer's name for it: SOutputBuffertooShort +#: libraries/cryptolib4pascal/ClpBlowfishEngine.pas:42 +msgid "Key Length must be between 32 - 448 bits and divisible by 8." +msgstr "" + +#. Programmer's name for it: SInputNil +#: libraries/cryptolib4pascal/ClpBufferedBlockCipher.pas:37 +msgid "Input Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SCipherNil +#: libraries/cryptolib4pascal/ClpBufferedBlockCipher.pas:38 +msgid "Cipher Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SDataNotBlockSizeAligned +#: libraries/cryptolib4pascal/ClpBufferedBlockCipher.pas:40 +msgid "Data not Block Size Aligned" +msgstr "" + +#. Programmer's name for it: SOutputBufferTooSmallForDoFinal +#: libraries/cryptolib4pascal/ClpBufferedBlockCipher.pas:41 +msgid "Output Buffer too Short for DoFinal()" +msgstr "" + +#. Programmer's name for it: SInvalidBufferSize +#. Programmer's name for it: SInvalidBufferSize +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:33 +#: libraries/hashlib4pascal/HlpHash.pas:17 +msgid "\"BufferSize\" Must Be Greater Than Zero" +msgstr "" + +#. Programmer's name for it: SInvalidBufferSize +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:35 +msgid "Input and Output Streams Must not Point to the Same Stream Instance" +msgstr "" + +#. Programmer's name for it: SUnAssignedInputStream +#. Programmer's name for it: SUnAssignedStream +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:36 +#: libraries/hashlib4pascal/HlpHash.pas:18 +msgid "Input Stream Is Unassigned" +msgstr "" + +#. Programmer's name for it: SUnAssignedOutputStream +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:37 +msgid "Output Stream Is Unassigned" +msgstr "" + +#. Programmer's name for it: SPositionOutOfRange +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:38 +msgid "Current Position Is Out Of Range" +msgstr "" + +#. Programmer's name for it: SPositionOutOfRange +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:40 +msgid "Stream Position (or Stream Length to Process) Is Out Of Range" +msgstr "" + +#. Programmer's name for it: SCipherNil +#: libraries/cryptolib4pascal/ClpBufferedStreamCipher.pas:34 +msgid "Cipher Instance Cannot be Nil" +msgstr "" + +#: libraries/cryptolib4pascal/ClpCipherKeyGenerator.pas:34 +msgid "Strength must be a Positive Value, \"defaultStrength\"" +msgstr "" + +#. Programmer's name for it: SParametersNil +#: libraries/cryptolib4pascal/ClpCipherKeyGenerator.pas:35 +msgid "Parameters Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SGeneratorNotInitialized +#: libraries/cryptolib4pascal/ClpCipherKeyGenerator.pas:36 +msgid "Generator has not been Initialised" +msgstr "" + +#. Programmer's name for it: SMechanismNil +#. Programmer's name for it: SMechanismNil +#. Programmer's name for it: SMechanismNil +#: libraries/cryptolib4pascal/ClpCipherUtilities.pas:56 +#: libraries/cryptolib4pascal/ClpDigestUtilities.pas:42 +#: libraries/cryptolib4pascal/ClpSignerUtilities.pas:69 +msgid "Mechanism Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SAlgorithmNil +#. Programmer's name for it: SAlgorithmNil +#. Programmer's name for it: SAlgorithmNil +#: libraries/cryptolib4pascal/ClpCipherUtilities.pas:57 +#: libraries/cryptolib4pascal/ClpParameterUtilities.pas:37 +#: libraries/cryptolib4pascal/ClpSignerUtilities.pas:70 +msgid "Algorithm Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SUnRecognizedCipher +#: libraries/cryptolib4pascal/ClpCipherUtilities.pas:58 +msgid "Cipher \"%s\" Not Recognised." +msgstr "" + +#. Programmer's name for it: SUnRecognizedCipher +#: libraries/cryptolib4pascal/ClpCipherUtilities.pas:60 +msgid "" +"Warning: SIC-Mode Can Become a TwoTime-Pad if the Blocksize of the Cipher " +"is Too Small. Use a Cipher With a Block Size of at Least 128 bits (e.g. AES)" +msgstr "" + +#. Programmer's name for it: SUnRecognizedCipher +#: libraries/cryptolib4pascal/ClpCipherUtilities.pas:62 +msgid "Modes and Paddings Not Used for Stream Ciphers" +msgstr "" + +#. Programmer's name for it: SEncodingInstanceNil +#. Programmer's name for it: SEncodingInstanceNil +#: libraries/cryptolib4pascal/ClpConverters.pas:33 +#: libraries/hashlib4pascal/HlpConverters.pas:16 +msgid "Encoding Instance Cannot Be Nil" +msgstr "" + +#. Programmer's name for it: SNegativeOffset +#: libraries/cryptolib4pascal/ClpCryptoApiRandomGenerator.pas:32 +msgid "Start Offset Cannot be Negative, \"Start\"" +msgstr "" + +#. Programmer's name for it: SArrayTooSmall +#: libraries/cryptolib4pascal/ClpCryptoApiRandomGenerator.pas:33 +msgid "Byte Array Too Small For Requested Offset and Length" +msgstr "" + +#: libraries/cryptolib4pascal/ClpCurve25519Custom.pas:40 +msgid "Value Invalid for Curve25519FieldElement \"%s\"" +msgstr "" + +#. Programmer's name for it: SOneOfECFieldElementIsNil +#. Programmer's name for it: SOneOfECFieldElementIsNil +#. Programmer's name for it: SOneOfECFieldElementIsNil +#. Programmer's name for it: SOneOfECFieldElementIsNil +#. Programmer's name for it: SOneOfECFieldElementIsNil +#. Programmer's name for it: SOneOfECFieldElementIsNil +#: libraries/cryptolib4pascal/ClpCurve25519Custom.pas:41 +#: libraries/cryptolib4pascal/ClpSecP256K1Custom.pas:41 +#: libraries/cryptolib4pascal/ClpSecP256R1Custom.pas:41 +#: libraries/cryptolib4pascal/ClpSecP384R1Custom.pas:41 +#: libraries/cryptolib4pascal/ClpSecP521R1Custom.pas:41 +#: libraries/cryptolib4pascal/ClpSecT283Custom.pas:42 +msgid "Exactly One of the Field Elements is Nil" +msgstr "" + +#: libraries/cryptolib4pascal/ClpDHAgreement.pas:45 +#: libraries/cryptolib4pascal/ClpDHBasicAgreement.pas:38 +msgid "Diffie-Hellman Public Key has Wrong Parameters." +msgstr "" + +#. Programmer's name for it: SNotDHPrivateKeyParameters +#. Programmer's name for it: SNotDHPrivateKeyParameters +#: libraries/cryptolib4pascal/ClpDHAgreement.pas:46 +#: libraries/cryptolib4pascal/ClpDHBasicAgreement.pas:39 +msgid "DHEngine Expects DHPrivateKeyParameters" +msgstr "" + +#. Programmer's name for it: SMessageNotInitialized +#: libraries/cryptolib4pascal/ClpDHAgreement.pas:47 +msgid "Message not Initialised" +msgstr "" + +#. Programmer's name for it: SSharedKeyInvalid +#. Programmer's name for it: SSharedKeyInvalid +#: libraries/cryptolib4pascal/ClpDHAgreement.pas:48 +#: libraries/cryptolib4pascal/ClpDHBasicAgreement.pas:41 +msgid "Shared Key Can't be 1" +msgstr "" + +#. Programmer's name for it: SDHPublicKeyWeak +#. Programmer's name for it: SDHPublicKeyWeak +#: libraries/cryptolib4pascal/ClpDHAgreement.pas:49 +#: libraries/cryptolib4pascal/ClpDHBasicAgreement.pas:42 +msgid "Diffie-Hellman Public Key is Weak" +msgstr "" + +#. Programmer's name for it: SDHPublicKeyNil +#: libraries/cryptolib4pascal/ClpDHAgreement.pas:50 +msgid "DH Public Key Parameter Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SAlgorithmNotInitialized +#: libraries/cryptolib4pascal/ClpDHBasicAgreement.pas:40 +msgid "Agreement Algorithm not Initialised" +msgstr "" + +#. Programmer's name for it: SParametersCannotBeNil +#. Programmer's name for it: SParametersCannotBeNil +#. Programmer's name for it: SParametersCannotBeNil +#: libraries/cryptolib4pascal/ClpDHBasicKeyPairGenerator.pas:42 +#: libraries/cryptolib4pascal/ClpDHKeyPairGenerator.pas:42 +#: libraries/cryptolib4pascal/ClpDsaKeyPairGenerator.pas:44 +msgid "\"parameters\" Cannot Be Nil" +msgstr "" + +#. Programmer's name for it: SPNil +#: libraries/cryptolib4pascal/ClpDHDomainParameters.pas:33 +msgid "P Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SGNil +#. Programmer's name for it: SGNil +#: libraries/cryptolib4pascal/ClpDHDomainParameters.pas:34 +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:35 +msgid "G Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SQNil +#. Programmer's name for it: SQNil +#. Programmer's name for it: SQNil +#: libraries/cryptolib4pascal/ClpDHDomainParameters.pas:35 +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:37 +#: libraries/cryptolib4pascal/ClpECPublicKeyParameters.pas:35 +msgid "Q Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SJNil +#: libraries/cryptolib4pascal/ClpDHDomainParameters.pas:36 +msgid "J Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SBadSequenceSize +#. Programmer's name for it: SBadSequenceSize +#. Programmer's name for it: SBadSequenceSize +#: libraries/cryptolib4pascal/ClpDHDomainParameters.pas:37 +#: libraries/cryptolib4pascal/ClpDHValidationParams.pas:34 +#: libraries/cryptolib4pascal/ClpDsaParameter.pas:32 +msgid "Bad Sequence Size \"seq\": %d" +msgstr "" + +#. Programmer's name for it: SInvalidDHDomainParameters +#: libraries/cryptolib4pascal/ClpDHDomainParameters.pas:38 +msgid "Invalid DHDomainParameters: %s" +msgstr "" + +#. Programmer's name for it: SPUnInitialized +#. Programmer's name for it: SPUnInitialized +#: libraries/cryptolib4pascal/ClpDHParameters.pas:33 +#: libraries/cryptolib4pascal/ClpDsaParameters.pas:32 +msgid "\"P\" Cannot Be Uninitialized" +msgstr "" + +#. Programmer's name for it: SGUnInitialized +#. Programmer's name for it: SGUnInitialized +#: libraries/cryptolib4pascal/ClpDHParameters.pas:34 +#: libraries/cryptolib4pascal/ClpDsaParameters.pas:34 +msgid "\"G\" Cannot Be Uninitialized" +msgstr "" + +#. Programmer's name for it: SMustBeOddPrime +#: libraries/cryptolib4pascal/ClpDHParameters.pas:35 +msgid "Field must be an Odd Prime, \"P\"" +msgstr "" + +#. Programmer's name for it: SInvalidGeneratorRange +#: libraries/cryptolib4pascal/ClpDHParameters.pas:36 +msgid "Generator must in the Range [2, p - 2], \"G\"" +msgstr "" + +#. Programmer's name for it: SQTooBigToBeAFactor +#: libraries/cryptolib4pascal/ClpDHParameters.pas:37 +msgid "Q too Big to be a Factor of (P - 1), \"Q\"" +msgstr "" + +#. Programmer's name for it: SMTooBig +#: libraries/cryptolib4pascal/ClpDHParameters.pas:38 +msgid "M value must be < BitLength of P, \"M\"" +msgstr "" + +#. Programmer's name for it: SLErrorOne +#: libraries/cryptolib4pascal/ClpDHParameters.pas:39 +msgid "when L value specified, it must be less than bitlength(P), \"L\"" +msgstr "" + +#. Programmer's name for it: SLErrorTwo +#: libraries/cryptolib4pascal/ClpDHParameters.pas:40 +msgid "when L value specified, it may not be less than m value, \"L\"" +msgstr "" + +#. Programmer's name for it: SInvalidSubGroupFactor +#: libraries/cryptolib4pascal/ClpDHParameters.pas:41 +msgid "Subgroup factor must be >= 2, \"j\"" +msgstr "" + +#. Programmer's name for it: SXUnInitialized +#. Programmer's name for it: SXUnInitialized +#: libraries/cryptolib4pascal/ClpDHPrivateKeyParameters.pas:33 +#: libraries/cryptolib4pascal/ClpDsaPrivateKeyParameters.pas:32 +msgid "\"X\" Cannot Be Uninitialized" +msgstr "" + +#. Programmer's name for it: SYUnInitialized +#. Programmer's name for it: SYUnInitialized +#: libraries/cryptolib4pascal/ClpDHPublicKeyParameters.pas:33 +#: libraries/cryptolib4pascal/ClpDsaPublicKeyParameters.pas:32 +msgid "\"Y\" Cannot Be Uninitialized" +msgstr "" + +#. Programmer's name for it: SInvalidDHPublicKey +#: libraries/cryptolib4pascal/ClpDHPublicKeyParameters.pas:34 +msgid "Invalid DH public key \"Y\"" +msgstr "" + +#. Programmer's name for it: SInvalidYInCorrectGroup +#. Programmer's name for it: SInvalidYInCorrectGroup +#: libraries/cryptolib4pascal/ClpDHPublicKeyParameters.pas:35 +#: libraries/cryptolib4pascal/ClpDsaPublicKeyParameters.pas:33 +msgid "\"Y\" Value Does Not Appear To Be In Correct Group" +msgstr "" + +#. Programmer's name for it: SSeedNil +#. Programmer's name for it: SSeedNil +#: libraries/cryptolib4pascal/ClpDHValidationParameters.pas:30 +#: libraries/cryptolib4pascal/ClpDsaValidationParameters.pas:30 +msgid "\"Seed\" Cannot Be Nil" +msgstr "" + +#. Programmer's name for it: SSeedNil +#: libraries/cryptolib4pascal/ClpDHValidationParams.pas:32 +msgid "Seed Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SPGenCounterNil +#: libraries/cryptolib4pascal/ClpDHValidationParams.pas:33 +msgid "PGenCounter Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SInvalidDHValidationParams +#: libraries/cryptolib4pascal/ClpDHValidationParams.pas:35 +msgid "Invalid DHValidationParams: %s" +msgstr "" + +#. Programmer's name for it: SOutputBufferTooShort +#. Programmer's name for it: SOutputBufferTooShort +#. Programmer's name for it: SOutputBufferTooShort +#. Programmer's name for it: SOutputBufferTooShort +#. Programmer's name for it: SOutputBufferTooShort +#: libraries/cryptolib4pascal/ClpDigest.pas:31 +#: libraries/cryptolib4pascal/ClpHMac.pas:34 +#: libraries/hashlib4pascal/HlpBlake2B.pas:27 +#: libraries/hashlib4pascal/HlpBlake2S.pas:27 +#: libraries/hashlib4pascal/HlpSHA3.pas:29 +msgid "Output Buffer Too Short" +msgstr "" + +#. Programmer's name for it: SUnRecognizedDigest +#: libraries/cryptolib4pascal/ClpDigestUtilities.pas:43 +msgid "Digest \"%s\" not recognised." +msgstr "" + +#. Programmer's name for it: SPrivateKey +#. Programmer's name for it: SPrivateKey +#: libraries/cryptolib4pascal/ClpDsaDigestSigner.pas:41 +#: libraries/cryptolib4pascal/ClpSchnorrDigestSigner.pas:40 +msgid "Signing Requires Private Key." +msgstr "" + +#. Programmer's name for it: SPublicKey +#. Programmer's name for it: SPublicKey +#: libraries/cryptolib4pascal/ClpDsaDigestSigner.pas:42 +#: libraries/cryptolib4pascal/ClpSchnorrDigestSigner.pas:41 +msgid "Verification Requires Public Key." +msgstr "" + +#. Programmer's name for it: SPublicKey +#: libraries/cryptolib4pascal/ClpDsaDigestSigner.pas:44 +msgid "DSADigestSigner not Initialized for Signature Generation." +msgstr "" + +#. Programmer's name for it: SPublicKey +#: libraries/cryptolib4pascal/ClpDsaDigestSigner.pas:46 +msgid "DSADigestSigner not Initialized for Verification" +msgstr "" + +#. Programmer's name for it: SEncodingError +#. Programmer's name for it: SEncodingError +#: libraries/cryptolib4pascal/ClpDsaDigestSigner.pas:47 +#: libraries/cryptolib4pascal/ClpSchnorrDigestSigner.pas:46 +msgid "Unable to Encode Signature" +msgstr "" + +#. Programmer's name for it: SInvalidDsaParameter +#: libraries/cryptolib4pascal/ClpDsaParameter.pas:33 +msgid "Invalid DsaParameter: %s" +msgstr "" + +#. Programmer's name for it: SQUnInitialized +#: libraries/cryptolib4pascal/ClpDsaParameters.pas:33 +msgid "\"Q\" Cannot Be Uninitialized" +msgstr "" + +#: libraries/cryptolib4pascal/ClpDsaParametersGenerator.pas:44 +msgid "L Values Must be Between 1024 and 3072 and a Multiple of 1024" +msgstr "" + +#. Programmer's name for it: SInvalidNValueForSpecifiedL +#: libraries/cryptolib4pascal/ClpDsaParametersGenerator.pas:45 +msgid "N Must be \" %d \" for L = \" %d \"" +msgstr "" + +#. Programmer's name for it: SInvalidNValueForSpecifiedL_Two +#: libraries/cryptolib4pascal/ClpDsaParametersGenerator.pas:46 +msgid "N Must be \" %d \" or \" %d \" for L = \" %d \"" +msgstr "" + +#. Programmer's name for it: SInvalidNValueForSpecifiedL_Two +#: libraries/cryptolib4pascal/ClpDsaParametersGenerator.pas:48 +msgid "Digest Output Size Too Small for Value of N Which is \" %d \"" +msgstr "" + +#. Programmer's name for it: SInvalidNValueForSpecifiedL_Two +#: libraries/cryptolib4pascal/ClpDsaParametersGenerator.pas:50 +msgid "Can Only Use SHA-1 For Generating FIPS 186-2 Parameters" +msgstr "" + +#. Programmer's name for it: SInvalidNValueForSpecifiedL_Two +#: libraries/cryptolib4pascal/ClpDsaParametersGenerator.pas:52 +msgid "Size Must Be From %d - %d and a multiple of %d, \"%d\"" +msgstr "" + +#. Programmer's name for it: SDSAPrivateKeyNotFound +#: libraries/cryptolib4pascal/ClpDsaSigner.pas:44 +msgid "DSA Private Key Required For Signing" +msgstr "" + +#. Programmer's name for it: SDSAPublicKeyNotFound +#: libraries/cryptolib4pascal/ClpDsaSigner.pas:45 +msgid "DSA Public Key Required For Verification" +msgstr "" + +#: libraries/cryptolib4pascal/ClpECAlgorithms.pas:43 +msgid "" +"Point and Scalar Arrays Should be Non-Null, and of Equal, Non-Zero, Length" +msgstr "" + +#. Programmer's name for it: SInvalidPointLocation +#: libraries/cryptolib4pascal/ClpECAlgorithms.pas:44 +msgid "Point Must be on the Same Curve" +msgstr "" + +#. Programmer's name for it: SInvalidPoint +#: libraries/cryptolib4pascal/ClpECAlgorithms.pas:45 +msgid "Invalid Point, \"P\"" +msgstr "" + +#. Programmer's name for it: SInvalidResult +#: libraries/cryptolib4pascal/ClpECAlgorithms.pas:46 +msgid "Invalid Result" +msgstr "" + +#. Programmer's name for it: SInvalidResult +#: libraries/cryptolib4pascal/ClpECAlgorithms.pas:48 +#: libraries/cryptolib4pascal/ClpMultipliers.pas:46 +msgid "Fixed-Point Comb Doesn't Support Scalars Larger Than The Curve Order" +msgstr "" + +#. Programmer's name for it: SInvalidValue +#: libraries/cryptolib4pascal/ClpECC.pas:52 +msgid "Value Invalid in Fp Field Element, \" x \"" +msgstr "" + +#. Programmer's name for it: SInvalidValue2 +#: libraries/cryptolib4pascal/ClpECC.pas:53 +msgid "Value Invalid in F2m Field Element, \"x\"" +msgstr "" + +#. Programmer's name for it: SInvalidK2Value +#: libraries/cryptolib4pascal/ClpECC.pas:54 +msgid "k2 must be smaller than k3" +msgstr "" + +#. Programmer's name for it: SInvalidK2Value2 +#: libraries/cryptolib4pascal/ClpECC.pas:55 +msgid "k2 must be larger than 0" +msgstr "" + +#. Programmer's name for it: SInvalidK2Value2 +#: libraries/cryptolib4pascal/ClpECC.pas:57 +msgid "Field elements are not both instances of F2mFieldElement" +msgstr "" + +#. Programmer's name for it: SInvalidK2Value2 +#: libraries/cryptolib4pascal/ClpECC.pas:59 +msgid "Field elements are not elements of the same field F2m" +msgstr "" + +#. Programmer's name for it: SInvalidK2Value2 +#: libraries/cryptolib4pascal/ClpECC.pas:61 +msgid "One of the F2m field elements has incorrect representation" +msgstr "" + +#. Programmer's name for it: SEvenValue +#: libraries/cryptolib4pascal/ClpECC.pas:62 +msgid "Even Value of Q" +msgstr "" + +#. Programmer's name for it: STraceInternalErrorCalculation +#: libraries/cryptolib4pascal/ClpECC.pas:63 +msgid "Internal Error in Trace Calculation" +msgstr "" + +#. Programmer's name for it: SHalfTraceUndefinedForM +#: libraries/cryptolib4pascal/ClpECC.pas:64 +msgid "Half-Trace Only Defined For Odd M" +msgstr "" + +#. Programmer's name for it: SUnSupportedCoordinateSystem +#: libraries/cryptolib4pascal/ClpECC.pas:65 +msgid "UnSupported Coordinate System" +msgstr "" + +#. Programmer's name for it: SCurrentCurve +#: libraries/cryptolib4pascal/ClpECC.pas:66 +msgid "Implementation returned Current Curve" +msgstr "" + +#. Programmer's name for it: SInvalidPointCoordinates +#: libraries/cryptolib4pascal/ClpECC.pas:67 +msgid "Invalid Point Coordinates" +msgstr "" + +#. Programmer's name for it: SInvalidAffineCoordinates +#: libraries/cryptolib4pascal/ClpECC.pas:68 +msgid "not valid for affine coordinates, \"iso\"" +msgstr "" + +#. Programmer's name for it: SInvalidPointOnCurve +#: libraries/cryptolib4pascal/ClpECC.pas:69 +msgid "must be non-null and on this curve, \"point\"" +msgstr "" + +#. Programmer's name for it: SInvalidPointOnCurve2 +#: libraries/cryptolib4pascal/ClpECC.pas:70 +msgid "Entries must be null or on this curve, \"points\"" +msgstr "" + +#. Programmer's name for it: SPointsNil +#: libraries/cryptolib4pascal/ClpECC.pas:71 +msgid "points" +msgstr "" + +#. Programmer's name for it: SInvalidRangeSpecified +#: libraries/cryptolib4pascal/ClpECC.pas:72 +msgid "Invalid Range Specified\", \"points\"" +msgstr "" + +#. Programmer's name for it: SInvalidPointCompression +#: libraries/cryptolib4pascal/ClpECC.pas:73 +msgid "Invalid Point Compression" +msgstr "" + +#. Programmer's name for it: SInvalidK1 +#: libraries/cryptolib4pascal/ClpECC.pas:74 +msgid "k1 must be > 0" +msgstr "" + +#. Programmer's name for it: SInvalidK3 +#: libraries/cryptolib4pascal/ClpECC.pas:75 +msgid "k3 must be 0 if k2 == 0" +msgstr "" + +#. Programmer's name for it: SK2K1MisMatch +#: libraries/cryptolib4pascal/ClpECC.pas:76 +msgid "k2 must be > k1" +msgstr "" + +#. Programmer's name for it: SK3K2Mismatch +#: libraries/cryptolib4pascal/ClpECC.pas:77 +msgid "k3 must be > k2" +msgstr "" + +#. Programmer's name for it: SInvalidInfinityEncoding +#: libraries/cryptolib4pascal/ClpECC.pas:78 +msgid "Invalid Infinity Encoding, \"encoded\"" +msgstr "" + +#. Programmer's name for it: SInvalidPointEncoding +#: libraries/cryptolib4pascal/ClpECC.pas:79 +msgid "Invalid Point Encoding %u" +msgstr "" + +#. Programmer's name for it: SInvalidPointEncoding +#: libraries/cryptolib4pascal/ClpECC.pas:81 +msgid "Incorrect Length for infinity encoding\", \"encoded\"" +msgstr "" + +#. Programmer's name for it: SInvalidPointEncoding +#: libraries/cryptolib4pascal/ClpECC.pas:83 +msgid "Incorrect Length for Compressed Encoding\", \"encoded\"" +msgstr "" + +#. Programmer's name for it: SInvalidPoint +#: libraries/cryptolib4pascal/ClpECC.pas:84 +msgid "Invalid Point" +msgstr "" + +#. Programmer's name for it: SInvalidPoint +#: libraries/cryptolib4pascal/ClpECC.pas:86 +msgid "Incorrect Length for UnCompressed Encoding\", \"encoded\"" +msgstr "" + +#. Programmer's name for it: SInvalidPoint +#: libraries/cryptolib4pascal/ClpECC.pas:88 +msgid "Incorrect Length for Hybrid Encoding\", \"encoded\"" +msgstr "" + +#. Programmer's name for it: SInvalidPoint +#: libraries/cryptolib4pascal/ClpECC.pas:90 +msgid "Inconsistent Y Coordinate in Hybrid Encoding\", \"encoded\"" +msgstr "" + +#. Programmer's name for it: SUnknownCoordSystem +#: libraries/cryptolib4pascal/ClpECC.pas:91 +msgid "Unknown Coordinate System" +msgstr "" + +#. Programmer's name for it: SPointNotInNormalForm +#: libraries/cryptolib4pascal/ClpECC.pas:92 +msgid "Point not in Normal Form" +msgstr "" + +#. Programmer's name for it: SNotProjectiveCoordSystem +#: libraries/cryptolib4pascal/ClpECC.pas:93 +msgid "Not a Projective Coordinate System" +msgstr "" + +#. Programmer's name for it: SCannotBeNegative +#: libraries/cryptolib4pascal/ClpECC.pas:94 +msgid "Cannot be Negative, \"e\"" +msgstr "" + +#. Programmer's name for it: SNilFieldElement +#: libraries/cryptolib4pascal/ClpECC.pas:95 +msgid "Exactly one of the Field Elements is Nil" +msgstr "" + +#. Programmer's name for it: SUnsupportedOperation +#: libraries/cryptolib4pascal/ClpECC.pas:96 +msgid "Constant-time Lookup not Supported" +msgstr "" + +#. Programmer's name for it: SInvalidRange +#: libraries/cryptolib4pascal/ClpECCompUtilities.pas:43 +msgid "Must be in the Range [2, 16], \"width\"" +msgstr "" + +#. Programmer's name for it: SInvalidRange2 +#: libraries/cryptolib4pascal/ClpECCompUtilities.pas:44 +msgid "Must be in the Range [2, 8], \"width\"" +msgstr "" + +#. Programmer's name for it: SWrongDomainParameter +#: libraries/cryptolib4pascal/ClpECDHBasicAgreement.pas:39 +msgid "ECDH Public Key has Wrong Domain Parameters" +msgstr "" + +#. Programmer's name for it: SInvalidAgreementValue +#: libraries/cryptolib4pascal/ClpECDHBasicAgreement.pas:40 +msgid "Infinity is not a Valid Agreement Value for ECDH" +msgstr "" + +#. Programmer's name for it: SInfinityInvalidPublicKey +#: libraries/cryptolib4pascal/ClpECDHBasicAgreement.pas:41 +msgid "Infinity is not a Valid Public Key for ECDH" +msgstr "" + +#. Programmer's name for it: SWrongDomainParameter +#: libraries/cryptolib4pascal/ClpECDHCBasicAgreement.pas:39 +msgid "ECDHC Public Key has Wrong Domain Parameters" +msgstr "" + +#. Programmer's name for it: SInvalidAgreementValue +#: libraries/cryptolib4pascal/ClpECDHCBasicAgreement.pas:40 +msgid "Infinity is not a Valid Agreement Value for ECDHC" +msgstr "" + +#. Programmer's name for it: SInfinityInvalidPublicKey +#: libraries/cryptolib4pascal/ClpECDHCBasicAgreement.pas:41 +msgid "Infinity is not a Valid Public Key for ECDHC" +msgstr "" + +#. Programmer's name for it: SCurveNil +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:33 +msgid "Curve Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SScalarNil +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:34 +msgid "Scalar Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SBigIntegerNotInitialized +#. Programmer's name for it: SBigIntegerNotInitialized +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:36 +#: libraries/cryptolib4pascal/ClpECPrivateKeyParameters.pas:32 +msgid "BigInteger Not Initialized \"%s\"" +msgstr "" + +#. Programmer's name for it: SQInfinity +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:38 +msgid "Point at Infinity \"Q\"" +msgstr "" + +#. Programmer's name for it: SQPointNotOnCurve +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:39 +msgid "Point Not on Curve \"Q\"" +msgstr "" + +#. Programmer's name for it: SScalarInvalidRange +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:40 +msgid "Scalar is not in the Interval [1, n - 1]" +msgstr "" + +#. Programmer's name for it: SECPublicKeyNotFound +#. Programmer's name for it: SECPublicKeyNotFound +#. Programmer's name for it: SECPublicKeyNotFound +#: libraries/cryptolib4pascal/ClpECDsaSigner.pas:47 +#: libraries/cryptolib4pascal/ClpECNRSigner.pas:47 +#: libraries/cryptolib4pascal/ClpECSchnorrSipaSigner.pas:45 +msgid "EC Public Key Required for Verification" +msgstr "" + +#. Programmer's name for it: SECPrivateKeyNotFound +#. Programmer's name for it: SECPrivateKeyNotFound +#. Programmer's name for it: SECPrivateKeyNotFound +#: libraries/cryptolib4pascal/ClpECDsaSigner.pas:48 +#: libraries/cryptolib4pascal/ClpECNRSigner.pas:48 +#: libraries/cryptolib4pascal/ClpECSchnorrSipaSigner.pas:46 +msgid "EC Private Key Required for Signing" +msgstr "" + +#. Programmer's name for it: SSenderPublicKeyInvalid +#: libraries/cryptolib4pascal/ClpECIESPublicKeyParser.pas:35 +msgid "Sender's Public Key Invalid." +msgstr "" + +#. Programmer's name for it: SSenderPublicKeyInvalid +#: libraries/cryptolib4pascal/ClpECIESPublicKeyParser.pas:37 +msgid "Sender's Public Key has Invalid Point Encoding \"%x\"" +msgstr "" + +#. Programmer's name for it: SAlgorithmNil +#. Programmer's name for it: SAlgorithmNil +#: libraries/cryptolib4pascal/ClpECKeyPairGenerator.pas:56 +#: libraries/cryptolib4pascal/ClpECKeyParameters.pas:39 +msgid "Algorithm Cannot be Empty" +msgstr "" + +#. Programmer's name for it: SInvalidKeySize +#: libraries/cryptolib4pascal/ClpECKeyPairGenerator.pas:57 +msgid "Unknown Key Size \"%d\"" +msgstr "" + +#. Programmer's name for it: SParameterNil +#: libraries/cryptolib4pascal/ClpECKeyParameters.pas:40 +msgid "Parameter Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SUnRecognizedAlgorithm +#: libraries/cryptolib4pascal/ClpECKeyParameters.pas:41 +msgid "Unrecognised Algorithm: \" %s, \"Algorithm" +msgstr "" + +#. Programmer's name for it: SNotInitializedForSigning +#. Programmer's name for it: SNotInitializedForSigning +#: libraries/cryptolib4pascal/ClpECNRSigner.pas:49 +#: libraries/cryptolib4pascal/ClpECSchnorrSipaSigner.pas:47 +msgid "Not Initialised For Signing" +msgstr "" + +#. Programmer's name for it: SNotInitializedForVerifying +#. Programmer's name for it: SNotInitializedForVerifying +#: libraries/cryptolib4pascal/ClpECNRSigner.pas:50 +#: libraries/cryptolib4pascal/ClpECSchnorrSipaSigner.pas:48 +msgid "Not Initialised For Verifying" +msgstr "" + +#. Programmer's name for it: SNotInitializedForVerifying +#: libraries/cryptolib4pascal/ClpECNRSigner.pas:52 +msgid "Not Initialised For Verifying/Recovery" +msgstr "" + +#. Programmer's name for it: SInputTooLargeForECNRKey +#: libraries/cryptolib4pascal/ClpECNRSigner.pas:53 +msgid "Input Too Large For ECNR Key." +msgstr "" + +#. Programmer's name for it: SSignatureGenerationError +#: libraries/cryptolib4pascal/ClpECSchnorrSipaSigner.pas:49 +msgid "An Error Occurred During Signature Generation" +msgstr "" + +#. Programmer's name for it: SSignatureGenerationError +#: libraries/cryptolib4pascal/ClpECSchnorrSipaSigner.pas:51 +msgid "" +"Only FP (Prime Field) Curves are Allowed for This Schnorr Implementation" +msgstr "" + +#. Programmer's name for it: SInvalidCtx +#: libraries/cryptolib4pascal/ClpEd25519.pas:40 +msgid "ctx" +msgstr "" + +#. Programmer's name for it: SDigestError +#: libraries/cryptolib4pascal/ClpEd25519.pas:41 +msgid "Digest Produced Insufficient Data" +msgstr "" + +#. Programmer's name for it: SEOFInPrivateKey +#: libraries/cryptolib4pascal/ClpEd25519Blake2BPrivateKeyParameters.pas:38 +msgid "EOF encountered in middle of Ed25519Blake2B private key" +msgstr "" + +#. Programmer's name for it: SUnsupportedAlgorithm +#. Programmer's name for it: SUnsupportedAlgorithm +#: libraries/cryptolib4pascal/ClpEd25519Blake2BPrivateKeyParameters.pas:39 +#: libraries/cryptolib4pascal/ClpEd25519PrivateKeyParameters.pas:39 +msgid "Unsupported Algorithm" +msgstr "" + +#. Programmer's name for it: SCtxNotNil +#. Programmer's name for it: SCtxNotNil +#: libraries/cryptolib4pascal/ClpEd25519Blake2BPrivateKeyParameters.pas:40 +#: libraries/cryptolib4pascal/ClpEd25519PrivateKeyParameters.pas:40 +msgid "Ctx must be Nil for Ed25519 Algorithm" +msgstr "" + +#. Programmer's name for it: SMsgLen +#. Programmer's name for it: SMsgLen +#: libraries/cryptolib4pascal/ClpEd25519Blake2BPrivateKeyParameters.pas:41 +#: libraries/cryptolib4pascal/ClpEd25519PrivateKeyParameters.pas:41 +msgid "MsgLen must be Equal to \"PreHashSize\" for Ed25519ph Algorithm" +msgstr "" + +#. Programmer's name for it: SEOFInPublicKey +#: libraries/cryptolib4pascal/ClpEd25519Blake2BPublicKeyParameters.pas:34 +msgid "EOF encountered in middle of Ed25519Blake2B public key" +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519Blake2BSigner.pas:37 +msgid "Ed25519Blake2BSigner not Initialised for Signature Generation." +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519Blake2BSigner.pas:39 +msgid "Ed25519Blake2BSigner not Initialised for Verification" +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519CtxBlake2BSigner.pas:37 +msgid "Ed25519CtxBlake2BSigner not Initialised for Signature Generation." +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519CtxBlake2BSigner.pas:39 +msgid "Ed25519CtxBlake2BSigner not Initialised for Verification" +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519CtxSigner.pas:37 +msgid "Ed25519CtxSigner not Initialised for Signature Generation." +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519CtxSigner.pas:39 +msgid "Ed25519CtxSigner not Initialised for Verification" +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519PhBlake2BSigner.pas:37 +msgid "Ed25519PhBlake2BSigner not Initialised for Signature Generation." +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519PhBlake2BSigner.pas:39 +msgid "Ed25519PhBlake2BSigner not Initialised for Verification" +msgstr "" + +#. Programmer's name for it: SPreHashDigestFailed +#. Programmer's name for it: SPreHashDigestFailed +#: libraries/cryptolib4pascal/ClpEd25519PhBlake2BSigner.pas:40 +#: libraries/cryptolib4pascal/ClpEd25519PhSigner.pas:40 +msgid "PreHash Digest Failed" +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519PhSigner.pas:37 +msgid "Ed25519PhSigner not Initialised for Signature Generation." +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519PhSigner.pas:39 +msgid "Ed25519PhSigner not Initialised for Verification" +msgstr "" + +#. Programmer's name for it: SEOFInPrivateKey +#: libraries/cryptolib4pascal/ClpEd25519PrivateKeyParameters.pas:38 +msgid "EOF encountered in middle of Ed25519 private key" +msgstr "" + +#. Programmer's name for it: SEOFInPublicKey +#: libraries/cryptolib4pascal/ClpEd25519PublicKeyParameters.pas:34 +msgid "EOF encountered in middle of Ed25519 public key" +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519Signer.pas:37 +msgid "Ed25519Signer not Initialised for Signature Generation." +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519Signer.pas:39 +msgid "Ed25519Signer not Initialised for Verification" +msgstr "" + +#. Programmer's name for it: SInvalidCharacteristic +#: libraries/cryptolib4pascal/ClpFiniteFields.pas:35 +msgid "Must be >= 2 , \" characteristic \"" +msgstr "" + +#. Programmer's name for it: SInvalidCharacteristic +#: libraries/cryptolib4pascal/ClpFiniteFields.pas:37 +msgid "" +"Irreducible polynomials in GF(2) must have constant term, \"exponents\"" +msgstr "" + +#. Programmer's name for it: SInvalidCharacteristic +#: libraries/cryptolib4pascal/ClpFiniteFields.pas:39 +msgid "Polynomial Exponents must be montonically increasing\", \"exponents\"" +msgstr "" + +#. Programmer's name for it: SKeyGeneratorAlgorithmNotRecognised +#: libraries/cryptolib4pascal/ClpGeneratorUtilities.pas:52 +msgid "KeyGenerator \"%s\" not Recognised." +msgstr "" + +#. Programmer's name for it: SKeyGeneratorAlgorithmNotRecognised +#: libraries/cryptolib4pascal/ClpGeneratorUtilities.pas:54 +msgid "KeyGenerator \"%s\" ( \"%s\" ) not Supported." +msgstr "" + +#. Programmer's name for it: SKeyGeneratorAlgorithmNotRecognised +#: libraries/cryptolib4pascal/ClpGeneratorUtilities.pas:56 +msgid "KeyPairGenerator \"%s\" not Recognised." +msgstr "" + +#. Programmer's name for it: SKeyGeneratorAlgorithmNotRecognised +#: libraries/cryptolib4pascal/ClpGeneratorUtilities.pas:58 +msgid "KeyPairGenerator \"%s\" ( \"%s\" ) not Supported." +msgstr "" + +#. Programmer's name for it: SSizeTooBigHKDF +#: libraries/cryptolib4pascal/ClpHkdfBytesGenerator.pas:39 +msgid "HKDF Cannot Generate More Than 255 Blocks of HashLen Size" +msgstr "" + +#. Programmer's name for it: SSizeTooBigHKDF2 +#: libraries/cryptolib4pascal/ClpHkdfBytesGenerator.pas:40 +msgid "HKDF May Only Be Used For 255 * HashLen Bytes of Output" +msgstr "" + +#. Programmer's name for it: SSizeTooBigHKDF2 +#: libraries/cryptolib4pascal/ClpHkdfBytesGenerator.pas:42 +msgid "HKDF Parameters Required For \"HkdfBytesGenerator\", \"parameters\"" +msgstr "" + +#. Programmer's name for it: SIKMNil +#: libraries/cryptolib4pascal/ClpHkdfParameters.pas:30 +msgid "\"ikm\" is Nil" +msgstr "" + +#. Programmer's name for it: SUnSupportedOperation +#. Programmer's name for it: SUnSupportedOperation +#: libraries/cryptolib4pascal/ClpHMacDsaKCalculator.pas:42 +#: libraries/cryptolib4pascal/ClpRandomDsaKCalculator.pas:34 +msgid "Operation not Supported" +msgstr "" + +#: libraries/cryptolib4pascal/ClpIESCipher.pas:54 +msgid "Must be Passed Recipient's Public EC Key for Encryption" +msgstr "" + +#: libraries/cryptolib4pascal/ClpIESCipher.pas:56 +msgid "Must be Passed Recipient's Private EC Key for Decryption" +msgstr "" + +#. Programmer's name for it: SIAlgorithmParameterSpecNil +#: libraries/cryptolib4pascal/ClpIESCipher.pas:57 +msgid "Parameter Spec Cannot Be Nil" +msgstr "" + +#. Programmer's name for it: SUnableToProcessBlock +#: libraries/cryptolib4pascal/ClpIESCipher.pas:58 +msgid "Unable to Process Block. \"%s\"" +msgstr "" + +#. Programmer's name for it: SIESParameterSpecError +#: libraries/cryptolib4pascal/ClpIESCipher.pas:59 +msgid "Must be Passed IES Parameter Spec" +msgstr "" + +#. Programmer's name for it: SNonceInvalidLength +#: libraries/cryptolib4pascal/ClpIESCipher.pas:60 +msgid "Nonce in IES Parameters Needs to be \"%s\" Bytes Long" +msgstr "" + +#: libraries/cryptolib4pascal/ClpIESEngine.pas:53 +#: libraries/cryptolib4pascal/ClpPascalCoinIESEngine.pas:45 +msgid "Unable to Recover Ephemeral Public Key: \"%s\"" +msgstr "" + +#: libraries/cryptolib4pascal/ClpIESEngine.pas:55 +#: libraries/cryptolib4pascal/ClpPascalCoinIESEngine.pas:47 +msgid "Length of Input Must be Greater than the MAC and V Combined" +msgstr "" + +#. Programmer's name for it: SInvalidMAC +#. Programmer's name for it: SInvalidMAC +#: libraries/cryptolib4pascal/ClpIESEngine.pas:56 +#: libraries/cryptolib4pascal/ClpPascalCoinIESEngine.pas:48 +msgid "Invalid MAC" +msgstr "" + +#. Programmer's name for it: SRandomNil +#: libraries/cryptolib4pascal/ClpKeyGenerationParameters.pas:30 +msgid "Random Class Instance Can't Be Nil" +msgstr "" + +#. Programmer's name for it: SInvalidStrength +#: libraries/cryptolib4pascal/ClpKeyGenerationParameters.pas:31 +msgid "Strength Must Be Greater Than Zero But Was Given %d" +msgstr "" + +#. Programmer's name for it: SKeyNil +#: libraries/cryptolib4pascal/ClpKeyParameter.pas:31 +msgid "Key Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SInvalidKeyOffSet +#: libraries/cryptolib4pascal/ClpKeyParameter.pas:32 +msgid "Invalid Key OffSet" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/cryptolib4pascal/ClpKeyParameter.pas:33 +msgid "Invalid Key Length" +msgstr "" + +#. Programmer's name for it: SInvalidF2MFieldValue +#: libraries/cryptolib4pascal/ClpLongArray.pas:34 +msgid "Invalid F2M Field value, \"bigInt\"" +msgstr "" + +#. Programmer's name for it: SUnRecognizedMac +#: libraries/cryptolib4pascal/ClpMacUtilities.pas:40 +msgid "Mac \"%s\" not recognised." +msgstr "" + +#. Programmer's name for it: SCannotBeZero +#: libraries/cryptolib4pascal/ClpMod.pas:35 +msgid "cannot be 0, \"x\"" +msgstr "" + +#. Programmer's name for it: SCurveUnknownGroupOrder +#: libraries/cryptolib4pascal/ClpMultipliers.pas:47 +msgid "Need Curve With Known Group Order, \"curve\"" +msgstr "" + +#. Programmer's name for it: SInCompatiblePoint +#: libraries/cryptolib4pascal/ClpMultipliers.pas:48 +msgid "Only AbstractF2mPoint can be used in WTauNafMultiplier" +msgstr "" + +#: libraries/cryptolib4pascal/ClpOSRandom.pas:72 +msgid "" +"An Error Occured while generating random data using MS Windows Cryptography " +"API." +msgstr "" + +#: libraries/cryptolib4pascal/ClpOSRandom.pas:76 +msgid "" +"An Error Occured while generating random data using SecRandomCopyBytes API." +msgstr "" + +#: libraries/cryptolib4pascal/ClpOSRandom.pas:80 +#: libraries/cryptolib4pascal/ClpOSRandom.pas:84 +msgid "An Error Occured while generating random data using getRandom API" +msgstr "" + +#: libraries/cryptolib4pascal/ClpOSRandom.pas:88 +msgid "" +"An Error Occured while generating random data using arc4random_buf API." +msgstr "" + +#. Programmer's name for it: SIncompleteLastBlockInDecryption +#: libraries/cryptolib4pascal/ClpPaddedBufferedBlockCipher.pas:41 +msgid "Last Block Incomplete in Decryption" +msgstr "" + +#. Programmer's name for it: SCorruptedPadBlock +#: libraries/cryptolib4pascal/ClpPaddingModes.pas:32 +msgid "Pad Block Corrupted" +msgstr "" + +#. Programmer's name for it: SIVNil +#: libraries/cryptolib4pascal/ClpParametersWithIV.pas:31 +msgid "IV Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SParameters +#: libraries/cryptolib4pascal/ClpParametersWithRandom.pas:32 +msgid "Parameters" +msgstr "" + +#. Programmer's name for it: SRandom +#: libraries/cryptolib4pascal/ClpParametersWithRandom.pas:33 +msgid "Random" +msgstr "" + +#. Programmer's name for it: SAlgorithmNotRecognised +#: libraries/cryptolib4pascal/ClpParameterUtilities.pas:38 +msgid "Algorithm \"%s\" not Recognised." +msgstr "" + +#. Programmer's name for it: SKDFParameterNotFound +#: libraries/cryptolib4pascal/ClpPascalCoinECIESKdfBytesGenerator.pas:37 +msgid "" +"Specified Hash Cannot Produce Sufficient Data for the Specified Operation." +msgstr "" + +#. Programmer's name for it: SCipherCannotbeNilInThisMode +#: libraries/cryptolib4pascal/ClpPascalCoinIESEngine.pas:49 +msgid "Cipher Cannot be Nil in This Mode." +msgstr "" + +#. Programmer's name for it: SBufferNil +#: libraries/cryptolib4pascal/ClpRandom.pas:30 +msgid "Buffer Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SMaxValueNegative +#: libraries/cryptolib4pascal/ClpRandom.pas:31 +msgid "maxValue Must be Positive" +msgstr "" + +#. Programmer's name for it: SInvalidMinValue +#: libraries/cryptolib4pascal/ClpRandom.pas:32 +msgid "minValue Cannot be Greater Than maxValue" +msgstr "" + +#. Programmer's name for it: SUnknownAlgorithm +#: libraries/cryptolib4pascal/ClpRandomNumberGenerator.pas:31 +msgid "Unknown Random Generation Algorithm Requested" +msgstr "" + +#. Programmer's name for it: SUnknownAlgorithm +#: libraries/cryptolib4pascal/ClpRandomNumberGenerator.pas:33 +msgid "Random Number Generator Output Buffer Cannot Be Nil" +msgstr "" + +#. Programmer's name for it: SUnsupportedBlock +#: libraries/cryptolib4pascal/ClpRijndaelEngine.pas:37 +msgid "Unknown Blocksize to Rijndael" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/cryptolib4pascal/ClpRijndaelEngine.pas:38 +msgid "Key Length not 128/160/192/224/256 bits." +msgstr "" + +#. Programmer's name for it: SRijndaelEngineNotInitialised +#: libraries/cryptolib4pascal/ClpRijndaelEngine.pas:39 +msgid "Rijndael Engine not Initialised" +msgstr "" + +#. Programmer's name for it: SRijndaelEngineNotInitialised +#: libraries/cryptolib4pascal/ClpRijndaelEngine.pas:41 +msgid "Invalid Parameter Passed to Rijndael Init - \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidRound +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:38 +msgid "\"rounds\" Must be a Positive, Even Number" +msgstr "" + +#. Programmer's name for it: SInvalidKeySize +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:39 +msgid "%s Requires 128 bit or 256 bit key" +msgstr "" + +#. Programmer's name for it: SMaxByteExceeded +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:40 +msgid "2^70 Byte Limit per IV; Change IV" +msgstr "" + +#. Programmer's name for it: SMaxByteExceededTwo +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:41 +msgid "2^70 byte limit per IV would be exceeded; Change IV" +msgstr "" + +#. Programmer's name for it: SEngineNotInitialized +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:42 +msgid "%s not Initialized" +msgstr "" + +#. Programmer's name for it: SRoundsMustbeEven +#. Programmer's name for it: SRoundsMustBeEven +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:45 +#: libraries/hashlib4pascal/HlpPBKDF_ScryptNotBuildInAdapter.pas:37 +msgid "Number of Rounds Must be Even" +msgstr "" + +#. Programmer's name for it: SIVRequired +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:47 +msgid "%s Init Requires an IV, \"parameters\"" +msgstr "" + +#. Programmer's name for it: SInvalidIV +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:48 +msgid "%s Requires exactly %d bytes of IV" +msgstr "" + +#. Programmer's name for it: SInvalidIV +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:50 +msgid "%s Init Parameters must Contain a KeyParameter (or null for Re-Init)" +msgstr "" + +#. Programmer's name for it: SInvalidIV +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:52 +msgid "KeyParameter can not be null for First Initialisation" +msgstr "" + +#. Programmer's name for it: SInvalidParameters +#: libraries/cryptolib4pascal/ClpScalarSplitParameters.pas:30 +msgid "\"%s\" must consist of exactly 2 (initialized) values" +msgstr "" + +#. Programmer's name for it: SPublicKey +#: libraries/cryptolib4pascal/ClpSchnorrDigestSigner.pas:43 +msgid "SchnorrDigestSigner not Initialized for Signature Generation." +msgstr "" + +#. Programmer's name for it: SPublicKey +#: libraries/cryptolib4pascal/ClpSchnorrDigestSigner.pas:45 +msgid "SchnorrDigestSigner not Initialized for Verification" +msgstr "" + +#: libraries/cryptolib4pascal/ClpSecP256K1Custom.pas:40 +msgid "Value Invalid for SecP256K1FieldElement \"%s\"" +msgstr "" + +#: libraries/cryptolib4pascal/ClpSecP256R1Custom.pas:40 +msgid "Value Invalid for SecP256R1FieldElement \"%s\"" +msgstr "" + +#: libraries/cryptolib4pascal/ClpSecP384R1Custom.pas:40 +msgid "Value Invalid for SecP384R1FieldElement \"%s\"" +msgstr "" + +#: libraries/cryptolib4pascal/ClpSecP521R1Custom.pas:40 +msgid "Value Invalid for SecP521R1FieldElement \"%s\"" +msgstr "" + +#: libraries/cryptolib4pascal/ClpSecT283Custom.pas:41 +msgid "Value Invalid for SecT283FieldElement \"%s\"" +msgstr "" + +#. Programmer's name for it: SUnRecognisedPRNGAlgorithm +#: libraries/cryptolib4pascal/ClpSecureRandom.pas:43 +msgid "Unrecognised PRNG Algorithm: %s \"algorithm\"" +msgstr "" + +#. Programmer's name for it: SCannotBeNegative +#: libraries/cryptolib4pascal/ClpSecureRandom.pas:44 +msgid "Cannot be Negative \"maxValue\"" +msgstr "" + +#. Programmer's name for it: SInvalidMaxValue +#: libraries/cryptolib4pascal/ClpSecureRandom.pas:45 +msgid "maxValue Cannot be Less Than minValue" +msgstr "" + +#. Programmer's name for it: SMalformedSignature +#: libraries/cryptolib4pascal/ClpSignersEncodings.pas:35 +msgid "Malformed signature, \"%s\"" +msgstr "" + +#. Programmer's name for it: SValueOutOfRange +#: libraries/cryptolib4pascal/ClpSignersEncodings.pas:36 +msgid "Value out of range, \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidEncodingLength +#: libraries/cryptolib4pascal/ClpSignersEncodings.pas:37 +msgid "Encoding has incorrect length, \"%s\"" +msgstr "" + +#. Programmer's name for it: SUnRecognizedAlgorithm +#: libraries/cryptolib4pascal/ClpSignerUtilities.pas:71 +msgid "Signer \" %s \" not recognised." +msgstr "" + +#. Programmer's name for it: SInvalidScale +#. Programmer's name for it: SNegativeScale +#: libraries/cryptolib4pascal/ClpSimpleBigDecimal.pas:29 +#: libraries/cryptolib4pascal/ClpSimpleBigDecimal.pas:32 +msgid "Scale may not be Negative" +msgstr "" + +#. Programmer's name for it: SInvalidScale +#: libraries/cryptolib4pascal/ClpSimpleBigDecimal.pas:31 +msgid "Only SimpleBigDecimal of Same Scale Allowed in Arithmetic Operations" +msgstr "" + +#. Programmer's name for it: SSpeckEngineNotInitialised +#. Programmer's name for it: SSpeckLegacyEngineNotInitialised +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:35 +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:35 +msgid "%s Engine not Initialised" +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:38 +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:38 +msgid "Invalid Argument Encountered." +msgstr "" + +#. Programmer's name for it: SInvalidParameterSpeckInit +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:39 +msgid "Invalid Parameter Passed to Speck Init - \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidParameterSpeckInit +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:41 +msgid "Speck32 requires a key of 64 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidParameterSpeckInit +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:43 +msgid "Speck48 requires a key of 72 or 96 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidParameterSpeckInit +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:45 +msgid "Speck64 requires a key of 96 or 128 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidParameterSpeckInit +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:47 +msgid "Speck96 requires a key of 96 or 144 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidParameterSpeckInit +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:49 +msgid "" +"Speck128 requires a key of 128, 192 or 256 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:40 +msgid "Invalid Parameter Passed to SpeckLegacy Init - \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:42 +msgid "Speck32Legacy requires a key of 64 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:44 +msgid "" +"Speck48Legacy requires a key of 72 or 96 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:46 +msgid "" +"Speck64Legacy requires a key of 96 or 128 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:48 +msgid "" +"Speck96Legacy requires a key of 96 or 144 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:50 +msgid "" +"Speck128Legacy requires a key of 128, 192 or 256 bits but input was \"%d\" " +"bits." +msgstr "" + +#. Programmer's name for it: SInvalidMU +#: libraries/cryptolib4pascal/ClpTnaf.pas:34 +msgid "mu must be 1 or -1" +msgstr "" + +#. Programmer's name for it: SDifferentScales +#: libraries/cryptolib4pascal/ClpTnaf.pas:35 +msgid "lambda0 and lambda1 do not have same scale" +msgstr "" + +#. Programmer's name for it: SNoKoblitzCurve +#: libraries/cryptolib4pascal/ClpTnaf.pas:36 +msgid "No Koblitz curve (ABC), TNAF multiplication not possible" +msgstr "" + +#. Programmer's name for it: SNotKoblitzCurve +#: libraries/cryptolib4pascal/ClpTnaf.pas:37 +msgid "si is defined for Koblitz curves only" +msgstr "" + +#. Programmer's name for it: SInvalidCoFactor +#: libraries/cryptolib4pascal/ClpTnaf.pas:38 +msgid "h (Cofactor) must be 2 or 4" +msgstr "" + +#: libraries/cryptolib4pascal/ClpX25519Agreement.pas:36 +msgid "The Init Parameter does not Contain the Private Key" +msgstr "" + +#. Programmer's name for it: SEOFInPrivateKey +#: libraries/cryptolib4pascal/ClpX25519PrivateKeyParameters.pas:37 +msgid "EOF encountered in middle of X25519 private key" +msgstr "" + +#. Programmer's name for it: SAgreementCalculationFailed +#: libraries/cryptolib4pascal/ClpX25519PrivateKeyParameters.pas:38 +msgid "X25519 Agreement Failed" +msgstr "" + +#. Programmer's name for it: SEOFInPublicKey +#: libraries/cryptolib4pascal/ClpX25519PublicKeyParameters.pas:34 +msgid "EOF encountered in middle of X25519 public key" +msgstr "" + +#. Programmer's name for it: SInconsistentKValues +#: libraries/cryptolib4pascal/ClpX9ECC.pas:36 +msgid "Inconsistent K Values" +msgstr "" + +#. Programmer's name for it: SCurveNil +#: libraries/cryptolib4pascal/ClpX9ECC.pas:37 +msgid "Curve" +msgstr "" + +#. Programmer's name for it: SNotImplementedECCurve +#: libraries/cryptolib4pascal/ClpX9ECC.pas:38 +msgid "This Type of ECCurve is not Implemented" +msgstr "" + +#. Programmer's name for it: SFieldIDNil +#: libraries/cryptolib4pascal/ClpX9ECC.pas:39 +msgid "FieldID" +msgstr "" + +#. Programmer's name for it: SSeqNil +#: libraries/cryptolib4pascal/ClpX9ECC.pas:40 +msgid "Seq" +msgstr "" + +#. Programmer's name for it: SUnSupportedCurveOne +#: libraries/cryptolib4pascal/ClpX9ECParameters.pas:38 +msgid "Only trinomial and pentomial curves are supported" +msgstr "" + +#. Programmer's name for it: SUnSupportedCurveTwo +#: libraries/cryptolib4pascal/ClpX9ECParameters.pas:39 +msgid "\"curve\" is of an unsupported type" +msgstr "" + +#. Programmer's name for it: SBadVersion +#: libraries/cryptolib4pascal/ClpX9ECParameters.pas:40 +msgid "Bad Version in X9ECParameters" +msgstr "" + +#. Programmer's name for it: SNullKeyReInit +#: libraries/cryptolib4pascal/ClpXSalsa20Engine.pas:33 +msgid "%s Doesn't Support Re-Init with Null Key" +msgstr "" + +#. Programmer's name for it: SInvalidKeySize +#: libraries/cryptolib4pascal/ClpXSalsa20Engine.pas:34 +msgid "%s Requires a 256 bit Key" +msgstr "" + +#. Programmer's name for it: SArgumentOutOfRange +#: libraries/generics.collections/generics.strings.pas:26 +msgid "Argument out of range" +msgstr "" + +#. Programmer's name for it: SArgumentNilNode +#: libraries/generics.collections/generics.strings.pas:27 +msgid "Node is nil" +msgstr "" + +#. Programmer's name for it: SDuplicatesNotAllowed +#: libraries/generics.collections/generics.strings.pas:28 +msgid "Duplicates not allowed in dictionary" +msgstr "" + +#. Programmer's name for it: SCollectionInconsistency +#: libraries/generics.collections/generics.strings.pas:29 +msgid "Collection inconsistency" +msgstr "" + +#. Programmer's name for it: SCollectionDuplicate +#: libraries/generics.collections/generics.strings.pas:30 +msgid "Collection does not allow duplicates" +msgstr "" + +#. Programmer's name for it: SDictionaryKeyDoesNotExist +#: libraries/generics.collections/generics.strings.pas:31 +msgid "Dictionary key does not exist" +msgstr "" + +#. Programmer's name for it: SItemNotFound +#: libraries/generics.collections/generics.strings.pas:32 +msgid "Item not found" +msgstr "" + +#. Programmer's name for it: SInvalidConfigLength +#. Programmer's name for it: SInvalidConfigLength +#: libraries/hashlib4pascal/HlpBlake2B.pas:22 +#: libraries/hashlib4pascal/HlpBlake2S.pas:22 +msgid "Config Length Must Be 8 Words" +msgstr "" + +#. Programmer's name for it: SConfigNil +#. Programmer's name for it: SConfigNil +#: libraries/hashlib4pascal/HlpBlake2B.pas:23 +#: libraries/hashlib4pascal/HlpBlake2S.pas:23 +msgid "Config Cannot Be Nil" +msgstr "" + +#. Programmer's name for it: SConfigNil +#. Programmer's name for it: SConfigNil +#: libraries/hashlib4pascal/HlpBlake2B.pas:25 +#: libraries/hashlib4pascal/HlpBlake2S.pas:25 +msgid "XOFSize in Bits must be Multiples of 8 and be Between %u and %u Bytes." +msgstr "" + +#. Programmer's name for it: SOutputLengthInvalid +#. Programmer's name for it: SOutputLengthInvalid +#. Programmer's name for it: SOutputLengthInvalid +#: libraries/hashlib4pascal/HlpBlake2B.pas:26 +#: libraries/hashlib4pascal/HlpBlake2S.pas:26 +#: libraries/hashlib4pascal/HlpSHA3.pas:28 +msgid "Output Length is above the Digest Length" +msgstr "" + +#. Programmer's name for it: SMaximumOutputLengthExceeded +#: libraries/hashlib4pascal/HlpBlake2B.pas:28 +msgid "\"Maximum Length is 2^32 blocks of 64 bytes" +msgstr "" + +#. Programmer's name for it: SWritetoXofAfterReadError +#. Programmer's name for it: SWritetoXofAfterReadError +#. Programmer's name for it: SWritetoXofAfterReadError +#: libraries/hashlib4pascal/HlpBlake2B.pas:29 +#: libraries/hashlib4pascal/HlpBlake2S.pas:29 +#: libraries/hashlib4pascal/HlpSHA3.pas:30 +msgid "\"%s\" Write to Xof after Read not Allowed" +msgstr "" + +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:16 +msgid "" +"BLAKE2B HashSize must be restricted to one of the following [1 .. 64], \"%d" +"\"" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:17 +msgid "\"Key\" Length Must Not Be Greater Than 64, \"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:19 +msgid "\"Personalisation\" Length Must Be Equal To 16, \"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:20 +msgid "\"Salt\" Length Must Be Equal To 16, \"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:23 +msgid "FanOut Value Should be Between [0 .. 255] for Blake2B" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:25 +msgid "MaxDepth Value Should be Between [1 .. 255] for Blake2B" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:27 +msgid "NodeDepth Value Should be Between [0 .. 255] for Blake2B" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:29 +msgid "InnerHashSize Value Should be Between [0 .. 64] for Blake2B" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:31 +msgid "NodeOffset Value Should be Between [0 .. (2^64-1)] for Blake2B" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:34 +msgid "Tree Inner Hash Size Must Not Be Greater Than 64, \"%d\"" +msgstr "" + +#. Programmer's name for it: SMaximumOutputLengthExceeded +#: libraries/hashlib4pascal/HlpBlake2S.pas:28 +msgid "\"Maximum Length is 2^32 blocks of 32 bytes" +msgstr "" + +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:16 +msgid "" +"BLAKE2S HashSize must be restricted to one of the following [1 .. 32], \"%d" +"\"" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:17 +msgid "\"Key\" Length Must Not Be Greater Than 32, \"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:19 +msgid "\"Personalisation\" Length Must Be Equal To 8, \"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:20 +msgid "\"Salt\" Length Must Be Equal To 8, \"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:23 +msgid "FanOut Value Should be Between [0 .. 255] for Blake2S" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:25 +msgid "MaxDepth Value Should be Between [1 .. 255] for Blake2S" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:27 +msgid "NodeDepth Value Should be Between [0 .. 255] for Blake2S" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:29 +msgid "InnerHashSize Value Should be Between [0 .. 32] for Blake2S" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:31 +msgid "NodeOffset Value Should be Between [0 .. (2^48-1)] for Blake2S" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:34 +msgid "Tree Inner Hash Size Must Not Be Greater Than 32, \"%d\"" +msgstr "" + +#. Programmer's name for it: SUnSupportedCRCType +#: libraries/hashlib4pascal/HlpCRC.pas:22 +msgid "UnSupported CRC Type: \"%s\"" +msgstr "" + +#. Programmer's name for it: SWidthOutOfRange +#: libraries/hashlib4pascal/HlpCRC.pas:23 +msgid "Width Must be Between 3 and 64. \"%d\"" +msgstr "" + +#. Programmer's name for it: SIndexOutOfRange +#: libraries/hashlib4pascal/HlpHash.pas:16 +msgid "Current Index Is Out Of Range" +msgstr "" + +#. Programmer's name for it: SFileNotExist +#: libraries/hashlib4pascal/HlpHash.pas:19 +msgid "Specified File Not Found" +msgstr "" + +#. Programmer's name for it: SCloneNotYetImplemented +#: libraries/hashlib4pascal/HlpHash.pas:20 +msgid "Clone Not Yet Implemented For \"%s\"" +msgstr "" + +#. Programmer's name for it: SHashBufferMessage +#: libraries/hashlib4pascal/HlpHashBuffer.pas:13 +msgid "HashBuffer, Length: %d, Position: %d, IsEmpty: %s" +msgstr "" + +#: libraries/hashlib4pascal/HlpHashResult.pas:27 +msgid "Current Data Structure cannot be Represented as an \"Int32\" Type." +msgstr "" + +#: libraries/hashlib4pascal/HlpHashResult.pas:29 +msgid "Current Data Structure cannot be Represented as an \"UInt8\" Type." +msgstr "" + +#: libraries/hashlib4pascal/HlpHashResult.pas:31 +msgid "Current Data Structure cannot be Represented as an \"UInt16\" Type." +msgstr "" + +#: libraries/hashlib4pascal/HlpHashResult.pas:33 +msgid "Current Data Structure cannot be Represented as an \"UInt32\" Type." +msgstr "" + +#: libraries/hashlib4pascal/HlpHashResult.pas:35 +msgid "Current Data Structure cannot be Represented as an \"UInt64\" Type." +msgstr "" + +#. Programmer's name for it: SInvalidHavalRound +#: libraries/hashlib4pascal/HlpHaval.pas:25 +msgid "Haval Round Must be 3, 4 or 5" +msgstr "" + +#. Programmer's name for it: SInvalidHavalRound +#: libraries/hashlib4pascal/HlpHaval.pas:27 +msgid "" +"Haval HashSize Must be Either 128 bit(16 byte), 160 bit(20 byte), 192 " +"bit(24 byte), 224 bit(28 byte) or 256 bit(32 byte)" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpMurmur2.pas:24 +#: libraries/hashlib4pascal/HlpMurmur2_64.pas:21 +#: libraries/hashlib4pascal/HlpMurmurHash3_x64_128.pas:22 +#: libraries/hashlib4pascal/HlpMurmurHash3_x86_128.pas:22 +#: libraries/hashlib4pascal/HlpMurmurHash3_x86_32.pas:22 +#: libraries/hashlib4pascal/HlpSipHash.pas:23 +#: libraries/hashlib4pascal/HlpXXHash32.pas:19 +#: libraries/hashlib4pascal/HlpXXHash64.pas:19 +msgid "KeyLength Must Be Equal to %d" +msgstr "" + +#: libraries/hashlib4pascal/HlpNullable.pas:16 +msgid "Cannot assign non-null pointer to nullable type." +msgstr "" + +#: libraries/hashlib4pascal/HlpNullable.pas:18 +msgid "Unsupported Type: Only supports Integers, Int64, Floats and Strings." +msgstr "" + +#. Programmer's name for it: SGetNullValue +#: libraries/hashlib4pascal/HlpNullable.pas:19 +msgid "Attempted to get a null value." +msgstr "" + +#. Programmer's name for it: SHashSizeNotImplemented +#: libraries/hashlib4pascal/HlpNullDigest.pas:18 +msgid "HashSize Not Implemented For \"%s\"" +msgstr "" + +#. Programmer's name for it: SBlockSizeNotImplemented +#: libraries/hashlib4pascal/HlpNullDigest.pas:19 +msgid "BlockSize Not Implemented For \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidOutputByteCount +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:32 +msgid "\"(AByteCount)\" Argument Less Than \"%d\"." +msgstr "" + +#. Programmer's name for it: SBlockInstanceNotInitialized +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:33 +msgid "Block Instance not Initialized" +msgstr "" + +#. Programmer's name for it: SInputLengthInvalid +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:34 +msgid "Input Length \"%d\" is not Equal to BlockSize \"%d\"" +msgstr "" + +#. Programmer's name for it: SLanesTooSmall +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:35 +msgid "Lanes Must be Greater Than \"%d\"" +msgstr "" + +#. Programmer's name for it: SLanesTooBig +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:36 +msgid "Lanes Must be Less Than \"%d\"" +msgstr "" + +#. Programmer's name for it: SMemoryTooSmall +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:37 +msgid "Memory is Less Than: \"%d\", Expected \"%d\"" +msgstr "" + +#. Programmer's name for it: SIterationsTooSmall +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:38 +msgid "Iterations is Less Than: \"%d\"" +msgstr "" + +#. Programmer's name for it: SIterationsTooSmall +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:40 +msgid "Argon2 Parameter Builder Not Initialized" +msgstr "" + +#: libraries/hashlib4pascal/HlpPBKDF_ScryptNotBuildInAdapter.pas:31 +#: libraries/hashlib4pascal/HlpPBKDF2_HMACNotBuildInAdapter.pas:18 +msgid "\"(AByteCount)\" Argument must be a value greater than zero." +msgstr "" + +#. Programmer's name for it: SInvalidCost +#: libraries/hashlib4pascal/HlpPBKDF_ScryptNotBuildInAdapter.pas:32 +msgid "Cost parameter must be > 1 and a power of 2." +msgstr "" + +#. Programmer's name for it: SBlockSizeAndCostIncompatible +#: libraries/hashlib4pascal/HlpPBKDF_ScryptNotBuildInAdapter.pas:33 +msgid "Cost parameter must be > 1 and < 65536." +msgstr "" + +#. Programmer's name for it: SBlockSizeTooSmall +#: libraries/hashlib4pascal/HlpPBKDF_ScryptNotBuildInAdapter.pas:34 +msgid "Block size must be >= 1." +msgstr "" + +#. Programmer's name for it: SBlockSizeTooSmall +#: libraries/hashlib4pascal/HlpPBKDF_ScryptNotBuildInAdapter.pas:36 +msgid "" +"Parallelism parameter must be >= 1 and <= %d (based on block size of %d)" +msgstr "" + +#. Programmer's name for it: SInvalidIndex +#: libraries/hashlib4pascal/HlpPBKDF2_HMACNotBuildInAdapter.pas:19 +msgid "Invalid start or end index in the internal buffer" +msgstr "" + +#. Programmer's name for it: SNotInitializedIHashInstance +#: libraries/hashlib4pascal/HlpPBKDF2_HMACNotBuildInAdapter.pas:20 +msgid "\"IHash\" instance is uninitialized" +msgstr "" + +#. Programmer's name for it: SIterationtooSmall +#: libraries/hashlib4pascal/HlpPBKDF2_HMACNotBuildInAdapter.pas:21 +msgid "Iteration must be greater than zero." +msgstr "" + +#. Programmer's name for it: SInvalidHashMode +#: libraries/hashlib4pascal/HlpSHA3.pas:25 +msgid "Only \"[%s]\" HashModes are Supported" +msgstr "" + +#. Programmer's name for it: SInvalidHashMode +#: libraries/hashlib4pascal/HlpSHA3.pas:27 +msgid "XOFSize in Bits must be Multiples of 8 and be Greater than Zero Bytes" +msgstr "" + +#: libraries/hashlib4pascal/HlpSnefru.pas:24 +msgid "Snefru Security Level Cannot be Less than 1. Standard Level is 8" +msgstr "" + +#: libraries/hashlib4pascal/HlpSnefru.pas:26 +msgid "Snefru HashSize Must be Either 128 bit(16 byte) or 256 bit(32 byte)" +msgstr "" + +#. Programmer's name for it: SInvalidHashSize +#: libraries/hashlib4pascal/HlpSnefru.pas:27 +msgid "Specified HashSize Is Invalid or UnSupported \"%d\"" +msgstr "" + +#: libraries/hashlib4pascal/HlpTiger.pas:22 +msgid "" +"Tiger HashSize Must be Either 128 bit(16 byte), 160 bit(20 byte) or 192 " +"bit(24 byte)" +msgstr "" + +#. Programmer's name for it: SInvalidHashRound +#. Programmer's name for it: SInvalidHashRound +#: libraries/hashlib4pascal/HlpTiger.pas:23 +#: libraries/hashlib4pascal/HlpTiger2.pas:23 +msgid "Specified HashRound Is Invalid or UnSupported \"%d\"" +msgstr "" + +#: libraries/hashlib4pascal/HlpTiger2.pas:22 +msgid "" +"Tiger2 HashSize Must be Either 128 bit(16 byte), 160 bit(20 byte) or 192 " +"bit(24 byte)" +msgstr "" + +#. Programmer's name for it: sInvalidIPAddress +#: libraries/mormot-min/SynCommons.pas:18356 +msgid "\"%s\" is an invalid IP v4 address" +msgstr "" + +#. Programmer's name for it: sInvalidEmailAddress +#: libraries/mormot-min/SynCommons.pas:18357 +msgid "\"%s\" is an invalid email address" +msgstr "" + +#. Programmer's name for it: sInvalidPattern +#: libraries/mormot-min/SynCommons.pas:18358 +msgid "\"%s\" does not match the expected pattern" +msgstr "" + +#. Programmer's name for it: sCharacter01n +#: libraries/mormot-min/SynCommons.pas:18359 +msgid "character,character,characters" +msgstr "" + +#. Programmer's name for it: sInvalidTextLengthMin +#: libraries/mormot-min/SynCommons.pas:18360 +msgid "Expect at least %d %s" +msgstr "" + +#. Programmer's name for it: sInvalidTextLengthMax +#: libraries/mormot-min/SynCommons.pas:18361 +msgid "Expect up to %d %s" +msgstr "" + +#. Programmer's name for it: sInvalidTextChar +#: libraries/mormot-min/SynCommons.pas:18364 +msgid "" +"Expect at least %d %s %s,Expect up to %d %s %s,alphabetical,digital," +"punctuation,lowercase,uppercase,space,Too much spaces on the left,Too much " +"spaces on the right" +msgstr "" + +#. Programmer's name for it: sValidationFailed +#: libraries/mormot-min/SynCommons.pas:18365 +msgid "\"%s\" rule failed" +msgstr "" + +#. Programmer's name for it: sValidationFieldVoid +#: libraries/mormot-min/SynCommons.pas:18366 +msgid "An unique key field must not be void" +msgstr "" + +#. Programmer's name for it: sValidationFieldDuplicate +#: libraries/mormot-min/SynCommons.pas:18367 +msgid "Value already used for this unique key field" +msgstr "" + +#. Programmer's name for it: Sneed_dict +#: libraries/paszlib/paszlib_zbase.pas:409 +msgid "need dictionary" +msgstr "" + +#. Programmer's name for it: Sstream_end +#: libraries/paszlib/paszlib_zbase.pas:410 +msgid "stream end" +msgstr "" + +#. Programmer's name for it: Sfile_error +#: libraries/paszlib/paszlib_zbase.pas:411 +msgid "file error" +msgstr "" + +#. Programmer's name for it: Sstream_error +#: libraries/paszlib/paszlib_zbase.pas:412 +msgid "stream error" +msgstr "" + +#. Programmer's name for it: Sdata_error +#: libraries/paszlib/paszlib_zbase.pas:413 +msgid "data error" +msgstr "" + +#. Programmer's name for it: Smem_error +#: libraries/paszlib/paszlib_zbase.pas:414 +msgid "insufficient memory" +msgstr "" + +#. Programmer's name for it: Sbuf_error +#: libraries/paszlib/paszlib_zbase.pas:415 +msgid "buffer error" +msgstr "" + +#. Programmer's name for it: Sversion_error +#: libraries/paszlib/paszlib_zbase.pas:416 +msgid "incompatible version" +msgstr "" + +#. Programmer's name for it: SInvalidHexCharacter +#: libraries/simplebaselib4pascal/SbpBase16.pas:12 +msgid "Invalid hex character: \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidTextLength +#: libraries/simplebaselib4pascal/SbpBase16.pas:13 +msgid "Text cannot be odd length \"%s\"" +msgstr "" + +#. Programmer's name for it: SAlphabetNil +#. Programmer's name for it: SAlphabetNil +#. Programmer's name for it: SAlphabetNil +#. Programmer's name for it: SAlphabetNil +#: libraries/simplebaselib4pascal/SbpBase32.pas:16 +#: libraries/simplebaselib4pascal/SbpBase58.pas:16 +#: libraries/simplebaselib4pascal/SbpBase64.pas:16 +#: libraries/simplebaselib4pascal/SbpBase85.pas:16 +msgid "Alphabet Instance cannot be Nil \"%s\"" +msgstr "" + +#. Programmer's name for it: SAlphabetNil +#: libraries/simplebaselib4pascal/SbpBase85.pas:18 +msgid "Unexpected Shortcut Character In The Middle Of a Regular Block" +msgstr "" + +#. Programmer's name for it: SAlphabetNil +#: libraries/simplebaselib4pascal/SbpEncodingAlphabet.pas:12 +msgid "\"%s\" Cannot Be Nil." +msgstr "" + +#. Programmer's name for it: SAlphabetNil +#: libraries/simplebaselib4pascal/SbpEncodingAlphabet.pas:14 +msgid "" +"Required Alphabet Length is \"%d\" but Provided Alphabet is \"%d\" " +"Characters Long." +msgstr "" + +#. Programmer's name for it: SInvalidCharacter +#: libraries/simplebaselib4pascal/SbpEncodingAlphabet.pas:15 +msgid "Alphabet Contains Character \"%s (%d)\" Above \"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidInput +#: libraries/simplebaselib4pascal/SbpEncodingAlphabet.pas:16 +msgid "Invalid character value in input \"%s\"" +msgstr "" + +#. Programmer's name for it: sAColumnsCantBeNil +#: libraries/sphere10/UCommon.Data.pas:246 +msgid "AColumns can't be nil!" +msgstr "" + +#. Programmer's name for it: sTooManyValues +#: libraries/sphere10/UCommon.Data.pas:247 +msgid "Too many values" +msgstr "" + +#. Programmer's name for it: sInvalidUTF8String +#: libraries/sphere10/UCommon.Data.pas:248 +msgid "Invalid UTF8 string" +msgstr "" + +#. Programmer's name for it: sBadNumericExpression +#: libraries/sphere10/UCommon.Data.pas:249 +msgid "Bad numeric expression" +msgstr "" + +#. Programmer's name for it: sUnexpectedNumberFormat +#: libraries/sphere10/UCommon.Data.pas:250 +msgid "Unexpected number format" +msgstr "" + +#. Programmer's name for it: sBadSyntaxForEscapeCharacter +#: libraries/sphere10/UCommon.Data.pas:251 +msgid "Bad syntax for escape character \"\\\"" +msgstr "" + +#. Programmer's name for it: sUnexpectedCharInExpression +#: libraries/sphere10/UCommon.Data.pas:252 +msgid "Unexpected char in expression" +msgstr "" + +#. Programmer's name for it: sInvaildExpression_CharDetectedAfterClosingBracket +#: libraries/sphere10/UCommon.Data.pas:253 +msgid "Invaild expression (char detected after closing bracket)" +msgstr "" + +#. Programmer's name for it: sUnexpectedTokenFound +#: libraries/sphere10/UCommon.Data.pas:254 +msgid "Unexpected token found : \"%s\"" +msgstr "" + +#. Programmer's name for it: sUnexpectedStringLiteralInExpression +#: libraries/sphere10/UCommon.Data.pas:255 +msgid "Unexpected string literal in expression" +msgstr "" + +#. Programmer's name for it: sBadlyClosedBetweenExpression +#: libraries/sphere10/UCommon.Data.pas:256 +msgid "Badly closed \"between\" expression" +msgstr "" + +#. Programmer's name for it: sMissingNumberInExpression +#: libraries/sphere10/UCommon.Data.pas:257 +msgid "Missing number in expression" +msgstr "" + +#. Programmer's name for it: sUnexpectedOccurrenceOf_Found +#: libraries/sphere10/UCommon.Data.pas:258 +msgid "Unexpected occurrence of \"%s\" found" +msgstr "" + +#. Programmer's name for it: sBadBetweenExpression_UnexpectedToken +#: libraries/sphere10/UCommon.Data.pas:259 +msgid "Bad \"between\" expression. Unexpected \"%s\"" +msgstr "" + +#. Programmer's name for it: sExpressionError_NoValue +#: libraries/sphere10/UCommon.Data.pas:260 +msgid "Expression error (no value)" +msgstr "" + +#. Programmer's name for it: sNotImplemented +#: libraries/sphere10/UCommon.pas:468 +msgid "Not implemented" +msgstr "" + +#. Programmer's name for it: sInvalidParameter_OutOfBounds +#: libraries/sphere10/UCommon.pas:469 +msgid "Invalid Parameter: %s out of bounds" +msgstr "" + +#. Programmer's name for it: sLogDebug +#: libraries/sphere10/UCommon.pas:470 +msgid "DEBUG" +msgstr "" + +#. Programmer's name for it: sLogInfo +#: libraries/sphere10/UCommon.pas:471 +msgid "INFO" +msgstr "" + +#. Programmer's name for it: sLogWarn +#: libraries/sphere10/UCommon.pas:472 +msgid "WARNING" +msgstr "" + +#. Programmer's name for it: sLogError +#: libraries/sphere10/UCommon.pas:473 +msgid "ERROR" +msgstr "" + +#. Programmer's name for it: sTotal +#: libraries/sphere10/UVisualGrid.pas:475 +msgid "Total: %d" +msgstr "" + +#. Programmer's name for it: sStandardSearch +#: libraries/sphere10/UVisualGrid.pas:476 +msgid "Standard Search" +msgstr "" + +#. Programmer's name for it: sMultiColumnSearch +#: libraries/sphere10/UVisualGrid.pas:477 +msgid "Multi-Column Search" +msgstr "" + +#. Programmer's name for it: sPageSize +#: libraries/sphere10/UVisualGrid.pas:478 +msgid "Page size:" +msgstr "" + +#. Programmer's name for it: sSearchExpression +#: libraries/sphere10/UVisualGrid.pas:479 +msgid "Search expression" +msgstr "" + +#. Programmer's name for it: sDataLoading +#: libraries/sphere10/UVisualGrid.pas:480 +msgid "DATA LOADING" +msgstr "" + +#. Programmer's name for it: sExpression +#: libraries/sphere10/UVisualGrid.pas:481 +msgid "Expression" +msgstr "" + +#. Programmer's name for it: sImproperColumnIndex +#: libraries/sphere10/UVisualGrid.pas:482 +msgid "Improper column index. Max expected is %d but %d found." +msgstr "" diff --git a/src/locale/en/LC_MESSAGES/default.mo b/src/locale/en/LC_MESSAGES/default.mo new file mode 100644 index 000000000..53e14112b Binary files /dev/null and b/src/locale/en/LC_MESSAGES/default.mo differ diff --git a/src/locale/en/LC_MESSAGES/default.po b/src/locale/en/LC_MESSAGES/default.po new file mode 100644 index 000000000..0efd9d409 --- /dev/null +++ b/src/locale/en/LC_MESSAGES/default.po @@ -0,0 +1,4638 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: 2020-03-30 19:19\n" +"PO-Revision-Date: 2020-03-30 19:38+0200\n" +"Last-Translator: Somebody <your.email@address.com>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.3\n" +"Language-Team: \n" +"Language: en\n" + +#. FRMAbout..Caption +#: gui-classic/UFRMAbout.dfm:7 +msgid "About..." +msgstr "" + +#. FRMAbout..Font.Name +#. FRMAbout..Label1..Font.Name +#. FRMAbout..lblBuild..Font.Name +#. FRMAbout..lblProtocolVersion..Font.Name +#. FRMAbout..Label3..Font.Name +#. FRMAbout..Label4..Font.Name +#. FRMAbout..Label5..Font.Name +#. FRMAccountSelect..Font.Name +#. FRMDiagnosticTool..Font.Name +#. FRMHashLock..Font.Name +#. FRMHashLock..lblError..Font.Name +#. FRMHashLock..GroupBox2..meHashLockData..Font.Name +#. FRMMemoText..Font.Name +#. FRMMemoText..Memo..Font.Name +#. FRMNewPrivateKeyType..Font.Name +#. FRMNodesIp..Font.Name +#. FRMOperation..Font.Name +#. FRMOperation..lblAccountBalance..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..lblEncryptionErrors..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..memoPayload..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsTransaction..lblTransactionErrors..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..lblChangeKeyErrors..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..lblNewOwnerErrors..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblListAccountErrors..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsDelistAccount..lblDelistErrors..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..lblBuyAccountErrors..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..Label2..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..lblChangeInfoErrors..Font.Name +#. FRMOperation..PageControlLocked..tsGlobalError..lblGlobalErrors..Font.Name +#. FRMOperation..PageControlLocked..tsGlobalError..bbPassword..Font.Name +#. FRMOperation..memoAccounts..Font.Name +#. FRMOperation..ebSenderAccount..Font.Name +#. FRMOperationsExplorer..Font.Name +#. FRMPascalCoinWalletConfig..Font.Name +#. FRMPascalCoinWalletConfig..Label4..Font.Name +#. FRMPascalCoinWalletConfig..Label7..Font.Name +#. FRMPascalCoinWalletConfig..bbUpdatePassword..Font.Name +#. FRMPayloadDecoder..Font.Name +#. FRMPayloadDecoder..lblBlock..Font.Name +#. FRMPayloadDecoder..lblDateTime..Font.Name +#. FRMPayloadDecoder..lblOperationTxt..Font.Name +#. FRMPayloadDecoder..lblAmount..Font.Name +#. FRMPayloadDecoder..lblFee..Font.Name +#. FRMPayloadDecoder..lblSender..Font.Name +#. FRMPayloadDecoder..lblReceiver..Font.Name +#. FRMPayloadDecoder..lblReceiverInfo..Font.Name +#. FRMPayloadDecoder..PageControl..tsDecoded..lblDecodedMethod..Font.Name +#. FRMPayloadDecoder..PageControl..tsDecoded..memoDecoded..Font.Name +#. FRMPayloadDecoder..PageControl..tsDecoded..memoOriginalPayloadInHexa..Font.Name +#. FRMPayloadDecoder..ebOphash..Font.Name +#. FRMDiagnosticTool..Font.Name +#. FRMRandomOperations..Font.Name +#. FRMRandomOperations..pnlTop..lblTopCaption..Font.Name +#. FRMRPCCalls..Font.Name +#. FRMRPCCalls..pnlTop..lblTopCaption..Font.Name +#. FRMSaleAccounts..Font.Name +#. FRMSaleAccounts..lblAccountBalance..Font.Name +#. FRMSaleAccounts..memoAccounts..Font.Name +#. FRMSaleAccounts..ebSenderAccount..Font.Name +#. FRMWallet..Font.Name +#. FRMWallet..pnlTop..lblTimeAverageAux..Font.Name +#. FRMWallet..pnlTop..Label16..Font.Name +#. FRMWallet..pnlTop..lblBlocksFound..Font.Name +#. FRMWallet..pnlTop..lblReceivedMessages..Font.Name +#. FRMWallet..pnlTop..lblBuild..Font.Name +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsTop..Font.Name +#. FRMWallet..PageControl..tsPendingOperations..pnlPendingOperations..Label10..Font.Name +#. FRMWallet..PageControl..tsMessages..Label14..Font.Name +#. FRMWallet..PageControl..tsMessages..memoMessages..Font.Name +#. FRMWalletKeys..Font.Name +#. FRMWalletKeys..lblKeysEncrypted..Font.Name +#. FRMWalletKeys..memoPrivateKey..Font.Name +#. FRMWalletKeys..bbUpdatePassword..Font.Name +#. FRMDiagnosticTool..Font.Name +#: gui-classic/UFRMAbout.dfm:14 gui-classic/UFRMAbout.dfm:130 +#: gui-classic/UFRMAbout.dfm:143 gui-classic/UFRMAbout.dfm:156 +#: gui-classic/UFRMAbout.dfm:176 gui-classic/UFRMAbout.dfm:190 +#: gui-classic/UFRMAbout.dfm:205 gui-classic/UFRMAccountSelect.dfm:12 +#: gui-classic/UFRMDiagnosticTool.dfm:11 gui-classic/UFRMHashLock.dfm:12 +#: gui-classic/UFRMHashLock.dfm:34 gui-classic/UFRMHashLock.dfm:117 +#: gui-classic/UFRMMemoText.dfm:12 gui-classic/UFRMMemoText.dfm:50 +#: gui-classic/UFRMNewPrivateKeyType.dfm:13 gui-classic/UFRMNodesIp.dfm:13 +#: gui-classic/UFRMOperation.dfm:13 gui-classic/UFRMOperation.dfm:40 +#: gui-classic/UFRMOperation.dfm:196 gui-classic/UFRMOperation.dfm:259 +#: gui-classic/UFRMOperation.dfm:332 gui-classic/UFRMOperation.dfm:410 +#: gui-classic/UFRMOperation.dfm:427 gui-classic/UFRMOperation.dfm:539 +#: gui-classic/UFRMOperation.dfm:783 gui-classic/UFRMOperation.dfm:825 +#: gui-classic/UFRMOperation.dfm:851 gui-classic/UFRMOperation.dfm:978 +#: gui-classic/UFRMOperation.dfm:1065 gui-classic/UFRMOperation.dfm:1080 +#: gui-classic/UFRMOperation.dfm:1149 gui-classic/UFRMOperation.dfm:1167 +#: gui-classic/UFRMOperationsExplorer.dfm:12 +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:13 +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:66 +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:110 +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:200 +#: gui-classic/UFRMPayloadDecoder.dfm:14 gui-classic/UFRMPayloadDecoder.dfm:37 +#: gui-classic/UFRMPayloadDecoder.dfm:50 gui-classic/UFRMPayloadDecoder.dfm:78 +#: gui-classic/UFRMPayloadDecoder.dfm:99 +#: gui-classic/UFRMPayloadDecoder.dfm:119 +#: gui-classic/UFRMPayloadDecoder.dfm:146 +#: gui-classic/UFRMPayloadDecoder.dfm:166 +#: gui-classic/UFRMPayloadDecoder.dfm:179 +#: gui-classic/UFRMPayloadDecoder.dfm:214 +#: gui-classic/UFRMPayloadDecoder.dfm:234 +#: gui-classic/UFRMPayloadDecoder.dfm:253 +#: gui-classic/UFRMPayloadDecoder.dfm:416 +#: gui-classic/UFRMRandomHashUtil.dfm:11 +#: gui-classic/UFRMRandomOperations.dfm:11 +#: gui-classic/UFRMRandomOperations.dfm:44 gui-classic/UFRMRPCCalls.dfm:12 +#: gui-classic/UFRMRPCCalls.dfm:50 gui-classic/UFRMSaleAccounts.dfm:12 +#: gui-classic/UFRMSaleAccounts.dfm:57 gui-classic/UFRMSaleAccounts.dfm:84 +#: gui-classic/UFRMSaleAccounts.dfm:103 gui-classic/UFRMWallet.dfm:13 +#: gui-classic/UFRMWallet.dfm:284 gui-classic/UFRMWallet.dfm:299 +#: gui-classic/UFRMWallet.dfm:315 gui-classic/UFRMWallet.dfm:333 +#: gui-classic/UFRMWallet.dfm:349 gui-classic/UFRMWallet.dfm:658 +#: gui-classic/UFRMWallet.dfm:870 gui-classic/UFRMWallet.dfm:1183 +#: gui-classic/UFRMWallet.dfm:1216 gui-classic/UFRMWalletKeys.dfm:13 +#: gui-classic/UFRMWalletKeys.dfm:66 gui-classic/UFRMWalletKeys.dfm:155 +#: gui-classic/UFRMWalletKeys.dfm:504 lib/i386-win32/UFRMDiagnosticTool.dfm:11 +msgid "Tahoma" +msgstr "" + +#. FRMAbout..Label1..Caption +#. FRMWallet..Caption +#: gui-classic/UFRMAbout.dfm:126 gui-classic/UFRMWallet.dfm:4 +msgid "Pascal full node Wallet (Classic GUI)" +msgstr "" + +#. FRMAbout..lblBuild..Caption +#: gui-classic/UFRMAbout.dfm:139 +msgid "Build:" +msgstr "" + +#. FRMAbout..lblProtocolVersion..Caption +#: gui-classic/UFRMAbout.dfm:152 +msgid "Protocol:" +msgstr "" + +#. FRMAbout..Label2..Caption +#: gui-classic/UFRMAbout.dfm:165 +msgid "Source Code:" +msgstr "" + +#. FRMAbout..Label3..Caption +#: gui-classic/UFRMAbout.dfm:172 +msgid "Check For New Versions:" +msgstr "" + +#. FRMAbout..Label4..Caption +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:186 gui-classic/UFRMAbout.dfm:252 +msgid "https://github.com/PascalCoin/PascalCoin" +msgstr "" + +#. FRMAbout..Label5..Caption +#: gui-classic/UFRMAbout.dfm:201 +msgid "https://sourceforge.net/projects/pascalcoin" +msgstr "" + +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:220 +msgid "Copyright (c) 2016 - 2019 PascalCoin developers" +msgstr "" + +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:221 +msgid "Based on Albert Molina original source code" +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:225 +msgid "" +"Pascal (aka Pascal Coin) is P2P cryptocurrency without the need for " +"historical " +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:228 +msgid "operations. This software comprises a node within the Pascal network." +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:232 +msgid "" +"Distributed under the MIT software license, see the accompanying file " +"LICENSE or " +msgstr "" + +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:233 +msgid "visit http://www.opensource.org/licenses/mit-license.php." +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:237 +msgid "THIS IS EXPERIMENTAL SOFTWARE. Use it for educational purposes only." +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:241 +msgid "" +"This product includes software developed by the OpenSSL Project and Denis " +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:244 +msgid "Grinyuk (https://github.com/Arvur/OpenSSL-Delphi), some cryptographic " +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:247 +msgid "" +"functions inspirated in code written by Ladar Levison and Marco Ferrante, " +"and " +msgstr "" + +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:248 +msgid "Synapse Socket code copyright of Lukas Gebauer." +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:251 +msgid "" +"Original source code is written in Pascal Language and is available at " +msgstr "" + +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:254 +msgid "If you like it, consider a donation using BitCoin:" +msgstr "" + +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:255 +msgid "16K3HCZRhFUtM8GdWRcfKeaa6KsuyxZaYk" +msgstr "" + +#. FRMAbout..bbClose..Caption +#. FRMPayloadDecoder..bbClose..Caption +#. FRMWallet..MainMenu..miProject..MiClose..Caption +#: gui-classic/UFRMAbout.dfm:266 gui-classic/UFRMPayloadDecoder.dfm:353 +#: gui-classic/UFRMWallet.dfm:1273 +msgid "Close" +msgstr "" + +#. FRMAccountSelect..Caption +#: gui-classic/UFRMAccountSelect.dfm:5 +msgid "Accounts" +msgstr "" + +#. FRMAccountSelect..pnlAccountsTop..cbOnlyForSale..Caption +#: gui-classic/UFRMAccountSelect.dfm:33 +msgid "Only for sale or swap" +msgstr "" + +#. FRMAccountSelect..pnlAccountsTop..bbSearch..Caption +#: gui-classic/UFRMAccountSelect.dfm:41 +msgid "Search" +msgstr "" + +#. FRMAccountSelect..pnlAccountsTop..cbOnlyForPrivateSaleToMe..Caption +#: gui-classic/UFRMAccountSelect.dfm:107 +msgid "Only for private sale to me" +msgstr "" + +#. FRMAccountSelect..pnlAccountsTop..cbAccountsBalance..Caption +#: gui-classic/UFRMAccountSelect.dfm:115 +msgid "Accounts Balance" +msgstr "" + +#. FRMAccountSelect..pnlAccountsTop..cbMyAccounts..Caption +#: gui-classic/UFRMAccountSelect.dfm:123 +msgid "My Accounts" +msgstr "" + +#. FRMAccountSelect..pnlAccountsTop..cbOnlyForPublicSale..Caption +#: gui-classic/UFRMAccountSelect.dfm:141 +msgid "Only for public sale" +msgstr "" + +#. FRMAccountSelect..pnlAccountsTop..cbAccountsName..Caption +#: gui-classic/UFRMAccountSelect.dfm:165 +msgid "Accounts name" +msgstr "" + +#. FRMAccountSelect..pnlBottom..Label17..Caption +#. FRMWallet..pnlTop..Label5..Caption +#. FRMWallet..PageControl..tsMyAccounts..pnlAccounts..pnlAccountsInfo..Label17..Caption +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsBottom..Label20..Caption +#: gui-classic/UFRMAccountSelect.dfm:192 gui-classic/UFRMWallet.dfm:261 +#: gui-classic/UFRMWallet.dfm:543 gui-classic/UFRMWallet.dfm:685 +msgid "Accounts:" +msgstr "" + +#. FRMAccountSelect..pnlBottom..lblAccountsCount..Caption +#. FRMAccountSelect..pnlBottom..lblAccountsBalance..Caption +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..lblPayloadLength..Caption +#. FRMPayloadDecoder..lblDateTime..Caption +#. FRMPayloadDecoder..lblOperationTxt..Caption +#. FRMPayloadDecoder..lblAmount..Caption +#. FRMPayloadDecoder..lblFee..Caption +#. FRMPayloadDecoder..lblReceiver..Caption +#. FRMWallet..pnlTop..lblCurrentBlock..Caption +#. FRMWallet..pnlTop..lblOperationsPending..Caption +#. FRMWallet..pnlTop..lblMinersClients..Caption +#. FRMWallet..pnlTop..lblCurrentDifficulty..Caption +#. FRMWallet..pnlTop..lblTimeAverage..Caption +#. FRMWallet..pnlTop..lblCurrentAccounts..Caption +#. FRMWallet..pnlTop..lblTimeAverageAux..Caption +#. FRMWallet..pnlTop..lblBlocksFound..Caption +#. FRMWallet..PageControl..tsMyAccounts..pnlAccounts..pnlAccountsInfo..lblAccountsCount..Caption +#. FRMWallet..PageControl..tsMyAccounts..pnlAccounts..pnlAccountsInfo..lblAccountsBalance..Caption +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsBottom..lblSelectedAccountsCount..Caption +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsBottom..lblSelectedAccountsBalance..Caption +#: gui-classic/UFRMAccountSelect.dfm:201 gui-classic/UFRMAccountSelect.dfm:219 +#: gui-classic/UFRMOperation.dfm:207 gui-classic/UFRMPayloadDecoder.dfm:46 +#: gui-classic/UFRMPayloadDecoder.dfm:74 gui-classic/UFRMPayloadDecoder.dfm:95 +#: gui-classic/UFRMPayloadDecoder.dfm:115 +#: gui-classic/UFRMPayloadDecoder.dfm:162 gui-classic/UFRMWallet.dfm:144 +#: gui-classic/UFRMWallet.dfm:180 gui-classic/UFRMWallet.dfm:198 +#: gui-classic/UFRMWallet.dfm:216 gui-classic/UFRMWallet.dfm:225 +#: gui-classic/UFRMWallet.dfm:270 gui-classic/UFRMWallet.dfm:279 +#: gui-classic/UFRMWallet.dfm:310 gui-classic/UFRMWallet.dfm:561 +#: gui-classic/UFRMWallet.dfm:570 gui-classic/UFRMWallet.dfm:694 +#: gui-classic/UFRMWallet.dfm:712 +msgid "000" +msgstr "" + +#. FRMAccountSelect..pnlBottom..Label19..Caption +#. FRMOperation..lblBalanceCaption..Caption +#. FRMSaleAccounts..lblBalanceCaption..Caption +#. FRMWallet..PageControl..tsMyAccounts..pnlAccounts..pnlAccountsInfo..Label19..Caption +#: gui-classic/UFRMAccountSelect.dfm:210 gui-classic/UFRMOperation.dfm:50 +#: gui-classic/UFRMSaleAccounts.dfm:73 gui-classic/UFRMWallet.dfm:552 +msgid "Balance:" +msgstr "" + +#. FRMAccountSelect..pnlBottom..bbSelect..Caption +#: gui-classic/UFRMAccountSelect.dfm:229 +msgid "Select" +msgstr "" + +#. FRMAccountSelect..pnlBottom..bbTypeStats..Caption +#: gui-classic/UFRMAccountSelect.dfm:249 +msgid "Type stats" +msgstr "" + +#. FRMDiagnosticTool..Caption +#. FRMDiagnosticTool..Caption +#. FRMDiagnosticTool..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:4 gui-classic/UFRMRandomHashUtil.dfm:4 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:4 +msgid "FRMDiagnosticTool" +msgstr "" + +#. FRMDiagnosticTool..btnRH..Caption +#. FRMDiagnosticTool..btnRH..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:25 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:25 +msgid "Start Random Hash" +msgstr "" + +#. FRMDiagnosticTool..btnRH2..Caption +#. FRMDiagnosticTool..btnRH2..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:34 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:34 +msgid "Start Random Hash 2" +msgstr "" + +#. FRMDiagnosticTool..btnRH2C..Caption +#. FRMDiagnosticTool..btnRH2C..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:51 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:51 +msgid "Start Random Hash 2 (Cached)" +msgstr "" + +#. FRMDiagnosticTool..btnEntropy..Caption +#. FRMDiagnosticTool..btnEntropy..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:60 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:60 +msgid "Entropy Tests" +msgstr "" + +#. FRMDiagnosticTool..btnRH2NonceScan..Caption +#. FRMDiagnosticTool..btnRH2NonceScan..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:69 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:69 +msgid "Start Random Hash 2 (Nonce Scan)" +msgstr "" + +#. FRMDiagnosticTool..txtScanLevel..TextHint +#. FRMDiagnosticTool..txtScanLevel..TextHint +#: gui-classic/UFRMDiagnosticTool.dfm:79 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:79 +msgid "Enter Scan Level (2-4)" +msgstr "" + +#. FRMDiagnosticTool..btnRHC..Caption +#. FRMDiagnosticTool..btnRHC..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:86 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:86 +msgid "Start Random Hash (Cached)" +msgstr "" + +#. FRMHashLock..Caption +#: gui-classic/UFRMHashLock.dfm:5 +msgid "Atomic Swap Hash-Lock " +msgstr "" + +#. FRMHashLock..lblError..Caption +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..lblEncryptionErrors..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsTransaction..lblTransactionErrors..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..lblChangeKeyErrors..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..lblNewOwnerErrors..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblListAccountErrors..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsDelistAccount..lblDelistErrors..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..lblBuyAccountErrors..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..lblChangeInfoErrors..Caption +#: gui-classic/UFRMHashLock.dfm:29 gui-classic/UFRMOperation.dfm:191 +#: gui-classic/UFRMOperation.dfm:327 gui-classic/UFRMOperation.dfm:405 +#: gui-classic/UFRMOperation.dfm:422 gui-classic/UFRMOperation.dfm:534 +#: gui-classic/UFRMOperation.dfm:778 gui-classic/UFRMOperation.dfm:820 +#: gui-classic/UFRMOperation.dfm:973 +msgid "Errors detected" +msgstr "" + +#. FRMHashLock..btnSet..Caption +#: gui-classic/UFRMHashLock.dfm:56 +msgid "Set Hash-Lock" +msgstr "" + +#. FRMHashLock..GroupBox1..Caption +#: gui-classic/UFRMHashLock.dfm:67 +msgid "Mode" +msgstr "" + +#. FRMHashLock..GroupBox1..rbHashLock....Caption +#: gui-classic/UFRMHashLock.dfm:76 +msgid "Hash-Lock - the 32 byte hash-lock provided to you by the counterparty" +msgstr "" + +#. FRMHashLock..GroupBox1..rbHashLockKey....Caption +#: gui-classic/UFRMHashLock.dfm:86 +msgid "" +"Hash-Lock Key - a secret that will be hashed to create the 32 byte hash-lock" +msgstr "" + +#. FRMHashLock..GroupBox2..Caption +#: gui-classic/UFRMHashLock.dfm:96 +msgid "Data" +msgstr "" + +#. FRMHashLock..GroupBox2..Label2..Caption +#: gui-classic/UFRMHashLock.dfm:106 +msgid "Please enter the hash lock data as a hexadecimal string" +msgstr "" + +#. FRMMemoText..Caption +#: gui-classic/UFRMMemoText.dfm:5 +msgid "Information" +msgstr "" + +#. FRMMemoText..Memo....Lines.Strings +#: gui-classic/UFRMMemoText.dfm:53 +msgid "Memo" +msgstr "" + +#. FRMNewPrivateKeyType..Caption +#: gui-classic/UFRMNewPrivateKeyType.dfm:6 +msgid "New Private Key" +msgstr "" + +#. FRMNewPrivateKeyType..Label1..Caption +#: gui-classic/UFRMNewPrivateKeyType.dfm:26 +msgid "Name" +msgstr "" + +#. FRMNewPrivateKeyType..ebName..Text +#: gui-classic/UFRMNewPrivateKeyType.dfm:34 +msgid "ebName" +msgstr "" + +#. FRMNewPrivateKeyType..rgKeyType..Caption +#: gui-classic/UFRMNewPrivateKeyType.dfm:41 +msgid " Key Type: " +msgstr "" + +#. FRMNewPrivateKeyType..rgKeyType....Items.Strings +#: gui-classic/UFRMNewPrivateKeyType.dfm:43 +msgid "asdf" +msgstr "" + +#. FRMNewPrivateKeyType..bbOk..Caption +#. FRMNodesIp..bbOk..Caption +#. FRMChangeLanguage..bbOk..Caption +#. FRMChangeLanguage..bbOk..Caption +#: gui-classic/UFRMNewPrivateKeyType.dfm:51 gui-classic/UFRMNodesIp.dfm:42 +#: gui-classic/UFRMSelectLanguage.dfm:18 +#: lib/i386-win32/ufrmselectlanguage.dfm:18 +msgid "OK" +msgstr "" + +#. FRMNodesIp..Caption +#: gui-classic/UFRMNodesIp.dfm:6 +msgid "Nodes IP" +msgstr "" + +#. FRMNodesIp..Label1..Caption +#: gui-classic/UFRMNodesIp.dfm:25 +msgid "Available Nodes Ip to connect" +msgstr "" + +#. FRMNodesIp..memoNodesIp....Lines.Strings +#: gui-classic/UFRMNodesIp.dfm:33 +msgid "memoNodesIp" +msgstr "" + +#. FRMNodesIp..cbTryOnlyWithThisServers..Caption +#: gui-classic/UFRMNodesIp.dfm:82 +msgid "Try to connect ONLY with this servers" +msgstr "" + +#. FRMOperation..Caption +#: gui-classic/UFRMOperation.dfm:6 +msgid "New Operation" +msgstr "" + +#. FRMOperation..lblAccountCaption..Caption +#. FRMSaleAccounts..lblAccountCaption..Caption +#: gui-classic/UFRMOperation.dfm:26 gui-classic/UFRMSaleAccounts.dfm:25 +msgid "Account:" +msgstr "" + +#. FRMOperation..lblAccountBalance..Caption +#. FRMSaleAccounts..lblAccountBalance..Caption +#: gui-classic/UFRMOperation.dfm:35 gui-classic/UFRMSaleAccounts.dfm:53 +msgid "lblAccountBalance" +msgstr "" + +#. FRMOperation..lblAccountsCount..Caption +#. FRMSaleAccounts..lblAccountsCount..Caption +#: gui-classic/UFRMOperation.dfm:59 gui-classic/UFRMSaleAccounts.dfm:66 +msgid "XXX" +msgstr "" + +#. FRMOperation..bbExecute..Caption +#. FRMOperation..ActionList..actExecute..Caption +#. FRMSaleAccounts..bbExecute..Caption +#. FRMSaleAccounts..ActionList..actExecute..Caption +#: gui-classic/UFRMOperation.dfm:68 gui-classic/UFRMOperation.dfm:1179 +#: gui-classic/UFRMSaleAccounts.dfm:178 gui-classic/UFRMSaleAccounts.dfm:215 +msgid "Execute (F12)" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..lblFee..Caption +#: gui-classic/UFRMOperation.dfm:113 +msgid "Operation Fee" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..lblSignerAccount..Caption +#: gui-classic/UFRMOperation.dfm:122 +msgid "Signer account (Fee payer)" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..Caption +#: gui-classic/UFRMOperation.dfm:165 +msgid " Payload: " +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..lblEncryptPassword..Caption +#: gui-classic/UFRMOperation.dfm:172 +msgid "Password:" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..Label4..Caption +#: gui-classic/UFRMOperation.dfm:181 +msgid "Payload Data" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..rbEncryptedWithEC..Caption +#: gui-classic/UFRMOperation.dfm:216 +msgid "Encrypted with dest account public key" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..rbEncrptedWithPassword..Caption +#: gui-classic/UFRMOperation.dfm:227 +msgid "Encrypted with password" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..rbNotEncrypted..Caption +#: gui-classic/UFRMOperation.dfm:237 +msgid "Dont encrypt (Public payload)" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..rbEncryptedWithOldEC..Caption +#: gui-classic/UFRMOperation.dfm:272 +msgid "Encrypted with old public key" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..cbPayloadAsHex..Caption +#: gui-classic/UFRMOperation.dfm:282 +msgid "As Hex" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsTransaction..Caption +#: gui-classic/UFRMOperation.dfm:302 +msgid "Transaction" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsTransaction..lblDestAccount..Caption +#: gui-classic/UFRMOperation.dfm:308 +msgid "Destination account" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsTransaction..lblAmount..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..lblBuyAmount..Caption +#: gui-classic/UFRMOperation.dfm:317 gui-classic/UFRMOperation.dfm:810 +msgid "Amount" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..Caption +#: gui-classic/UFRMOperation.dfm:387 +msgid "Change Key" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..lblNewPrivateKey..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..lblBuyNewKey..Caption +#: gui-classic/UFRMOperation.dfm:394 gui-classic/UFRMOperation.dfm:837 +msgid "New private key" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..lblNewOwnerPublicKey..Caption +#: gui-classic/UFRMOperation.dfm:437 +msgid "New owners public key" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..rbChangeKeyWithAnother..Caption +#: gui-classic/UFRMOperation.dfm:446 +msgid "Change private key" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..rbChangeKeyTransferAccountToNewOwner..Caption +#: gui-classic/UFRMOperation.dfm:514 +msgid "Transfer account to a new owner" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..Caption +#: gui-classic/UFRMOperation.dfm:526 +msgid "List Account" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblPrice..Caption +#: gui-classic/UFRMOperation.dfm:550 +msgid "Sale Price" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblSeller..Caption +#: gui-classic/UFRMOperation.dfm:560 +msgid "Seller Account" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblNewKey..Caption +#: gui-classic/UFRMOperation.dfm:604 +msgid "Buyer Key" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblTimeLock..Caption +#: gui-classic/UFRMOperation.dfm:614 +msgid "Time-Lock" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblHashLock..Caption +#: gui-classic/UFRMOperation.dfm:623 +msgid "Hash-Lock" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..rbListAccountForPublicSale..Caption +#: gui-classic/UFRMOperation.dfm:699 +msgid "List for Public Sale" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..rbListAccountForPrivateSale..Caption +#: gui-classic/UFRMOperation.dfm:707 +msgid "List for Private Sale" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..rbListAccountForAccountSwap..Caption +#: gui-classic/UFRMOperation.dfm:715 +msgid "List for Atomic Account Swap" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..rbListAccountForCoinSwap..Caption +#: gui-classic/UFRMOperation.dfm:723 +msgid "List for Atomic Coin Swap" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..ebPrice..TextHint +#: gui-classic/UFRMOperation.dfm:732 +msgid "PASC Quantity" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..ebSellerAccount..TextHint +#: gui-classic/UFRMOperation.dfm:740 +msgid "Account Number" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..ebNewKey..TextHint +#: gui-classic/UFRMOperation.dfm:748 +msgid "BASE58 Encoded Public Key Of New Owner" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..ebTimeLock..Hint +#: gui-classic/UFRMOperation.dfm:755 +msgid "Block Number " +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..ebTimeLock..TextHint +#: gui-classic/UFRMOperation.dfm:759 +msgid "Block number" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsDelistAccount..Caption +#: gui-classic/UFRMOperation.dfm:770 +msgid "Delist Account" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..Caption +#: gui-classic/UFRMOperation.dfm:790 +msgid "Buy Account" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..lblAccountToBuy..Caption +#: gui-classic/UFRMOperation.dfm:799 +msgid "Account to Buy" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..Label2..Caption +#: gui-classic/UFRMOperation.dfm:846 +msgid "any over-payment will remain on bought account" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..Caption +#: gui-classic/UFRMOperation.dfm:966 +msgid "Change Info" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..lblChangeName..Caption +#: gui-classic/UFRMOperation.dfm:990 +msgid "Change name" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..lblChangeType..Caption +#: gui-classic/UFRMOperation.dfm:1001 +msgid "Change type" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..lblChangeAccountData..Caption +#: gui-classic/UFRMOperation.dfm:1012 +msgid "Change Data" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..ebChangeName..TextHint +#: gui-classic/UFRMOperation.dfm:1022 +msgid "Account name (null or 3..64 chars)" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..ebChangeType..TextHint +#: gui-classic/UFRMOperation.dfm:1030 +msgid "0..65535" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..ebChangeAccountData..TextHint +#: gui-classic/UFRMOperation.dfm:1038 +msgid "Hexadecimal value (0..32 bytes)" +msgstr "" + +#. FRMOperation..PageControlLocked..tsGlobalError..lblGlobalErrors..Caption +#: gui-classic/UFRMOperation.dfm:1060 +msgid "????" +msgstr "" + +#. FRMOperation..PageControlLocked..tsGlobalError..bbPassword..Caption +#. FRMWalletKeys..bbUpdatePassword..Caption +#: gui-classic/UFRMOperation.dfm:1076 gui-classic/UFRMWalletKeys.dfm:500 +msgid "Password" +msgstr "" + +#. FRMOperation..memoAccounts....Lines.Strings +#. FRMOperation..memoAccounts....Lines.Strings +#. FRMSaleAccounts..memoAccounts....Lines.Strings +#. FRMSaleAccounts..memoAccounts....Lines.Strings +#: gui-classic/UFRMOperation.dfm:1152 gui-classic/UFRMOperation.dfm:1153 +#: gui-classic/UFRMSaleAccounts.dfm:87 gui-classic/UFRMSaleAccounts.dfm:88 +msgid "123456-11 (0.0000); 123456-11 (0.0000); " +msgstr "" + +#. FRMOperation..ebSenderAccount..Text +#. FRMSaleAccounts..ebSenderAccount..Text +#: gui-classic/UFRMOperation.dfm:1171 gui-classic/UFRMSaleAccounts.dfm:107 +msgid "ebSenderAccount" +msgstr "" + +#. FRMOperationsExplorer..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:5 +msgid "Operations Explorer Tool" +msgstr "" + +#. FRMOperationsExplorer..pnlTop..lblTopCaption....Caption +#: gui-classic/UFRMOperationsExplorer.dfm:58 +msgid "" +"You can use this tool to explore operations, also you can copy/paste " +"operations as a RAW (Use Ctrl+I to Import). This tool allows to generate a " +"Multioperation, send to third party the RAW, add more txs... and then sign. " +"Once Everybody has signed, you will be able to EXECUTE OPERATION to be " +"added to network nodes. " +msgstr "" + +#. FRMOperationsExplorer..pnlOpInfo..pnlExport..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:85 +msgid "pnlExport" +msgstr "" + +#. FRMOperationsExplorer..pnlOpInfo..pnlExport..Label1..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:94 +msgid "Operation as RAW:" +msgstr "" + +#. FRMOperationsExplorer..pnlOpInfo..pnlInfo..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:115 +msgid "pnlInfo" +msgstr "" + +#. FRMOperationsExplorer..pnlOpInfo..pnlInfo..pnlInfoOptions..Label2..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:139 +msgid "Multioperation actions:" +msgstr "" + +#. FRMOperationsExplorer..pnlOpInfo..pnlInfo..pnlInfoOptions..bbRandom..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:188 +msgid "RANDOM OPERATIONS" +msgstr "" + +#. FRMOperationsExplorer..mMenu..MiTools..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:199 +msgid "Tools" +msgstr "" + +#. FRMOperationsExplorer..mMenu..MiTools..MiImportOperationsFromTxt..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:201 +msgid "Import Operations from RAW" +msgstr "" + +#. FRMOperationsExplorer..mMenu..MiTools..MiDivider1..Caption +#. FRMOperationsExplorer..mMenu..MiActions..MenuItem6..Caption +#. FRMWallet..MainMenu..miProject..miN1..Caption +#. FRMWallet..MainMenu..miProject..N1..Caption +#. FRMWallet..MainMenu..MiOperations..N2..Caption +#. FRMWallet..MainMenu..MiOperations..N3..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:206 +#: gui-classic/UFRMOperationsExplorer.dfm:224 gui-classic/UFRMWallet.dfm:1254 +#: gui-classic/UFRMWallet.dfm:1270 gui-classic/UFRMWallet.dfm:1310 +#: gui-classic/UFRMWallet.dfm:1327 +msgid "-" +msgstr "" + +#. FRMOperationsExplorer..mMenu..MiTools..miLoadFromBlockchain..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:209 +msgid "Load Operations from Blockchain" +msgstr "" + +#. FRMOperationsExplorer..mMenu..MiTools..MiLoadOperationsFromBlockchainFile..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:214 +msgid "Load Operations from Blockchain file" +msgstr "" + +#. FRMOperationsExplorer..mMenu..MiActions..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:219 +msgid "Actions" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActExecuteOperation..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:244 +msgid "Execute Operation" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActAddTxToMultioperation..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:249 +msgid "Add Tx to Multioperation" +msgstr "" + +#. FRMOperationsExplorer..ActionList..AddOpChangeToMultioperation..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:254 +msgid "Add OpChange to Multioperation" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActRemoveAccountFromMultioperation..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:259 +msgid "Remove Account from Multioperation" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActSignMultioperation..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:264 +msgid "Sign Multioperation" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActAddTx..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:269 +msgid "Add Tx" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActAddOpChange..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:274 +msgid "Add OpChange" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActRemove..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:279 +msgid "Remove" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActSign..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:284 +msgid "Sign" +msgstr "" + +#. FRMPascalCoinWalletConfig..Caption +#. FRMWallet..MainMenu..miProject..miOptions..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:6 +#: gui-classic/UFRMWallet.dfm:1257 +msgid "Options" +msgstr "" + +#. FRMPascalCoinWalletConfig..Label1..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:25 +msgid "Default fee for operation" +msgstr "" + +#. FRMPascalCoinWalletConfig..Label2..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:34 +msgid "Internet Server Port" +msgstr "" + +#. FRMPascalCoinWalletConfig..lblDefaultInternetServerPort..Caption +#. FRMPascalCoinWalletConfig..lblDefaultJSONRPCMinerServerPort..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:43 +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:87 +msgid "(Default XXXX)" +msgstr "" + +#. FRMPascalCoinWalletConfig..Label3..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:52 +msgid "Miner Name:" +msgstr "" + +#. FRMPascalCoinWalletConfig..Label4..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:61 +msgid "This name will be included in each new block you mine!" +msgstr "" + +#. FRMPascalCoinWalletConfig..Label5..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:78 +msgid "JSON-RPC Port" +msgstr "" + +#. FRMPascalCoinWalletConfig..Label6..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:96 +msgid "Allowed IP's" +msgstr "" + +#. FRMPascalCoinWalletConfig..Label7..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:105 +msgid "Ip's separated by semicolon or empty for all" +msgstr "" + +#. FRMPascalCoinWalletConfig..cbJSONRPCMinerServerActive..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:122 +msgid "JSON-RPC Server Miner (TCP/IP, no HTTP)" +msgstr "" + +#. FRMPascalCoinWalletConfig..cbSaveLogFiles..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:139 +msgid "Save log file" +msgstr "" + +#. FRMPascalCoinWalletConfig..cbShowLogs..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:148 +msgid "Show logs" +msgstr "" + +#. FRMPascalCoinWalletConfig..bbUpdatePassword..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:196 +msgid "Wallet Password" +msgstr "" + +#. FRMPascalCoinWalletConfig..ebMinerName..Text +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:265 +msgid "ebMinerName" +msgstr "" + +#. FRMPascalCoinWalletConfig..cbShowModalMessages..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:272 +msgid "Show modal messages" +msgstr "" + +#. FRMPascalCoinWalletConfig..gbMinerPrivateKey..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:301 +msgid " Miner Server Private Key: " +msgstr "" + +#. FRMPascalCoinWalletConfig..gbMinerPrivateKey..rbGenerateANewPrivateKeyEachBlock..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:308 +msgid "Generate a new private key for each generated block" +msgstr "" + +#. FRMPascalCoinWalletConfig..gbMinerPrivateKey..rbUseARandomKey..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:316 +msgid "Use a random existing key" +msgstr "" + +#. FRMPascalCoinWalletConfig..gbMinerPrivateKey..rbMineAllwaysWithThisKey..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:324 +msgid "Always mine with this key:" +msgstr "" + +#. FRMPascalCoinWalletConfig..cbSaveDebugLogs..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:341 +msgid "Save debug logs too" +msgstr "" + +#. FRMPascalCoinWalletConfig..bbOpenDataFolder..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:349 +msgid "Open Data Folder" +msgstr "" + +#. FRMPascalCoinWalletConfig..cbJSONRPCPortEnabled..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:393 +msgid "JSON-RPC Server port enabled (HTTP)" +msgstr "" + +#. FRMPascalCoinWalletConfig..ebJSONRPCAllowedIPs..Text +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:403 +msgid "ebJSONRPCAllowedIPs" +msgstr "" + +#. FRMPascalCoinWalletConfig..cbDownloadNewCheckpoint..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:410 +msgid "Download new Checkpoint if blockchain older than..." +msgstr "" + +#. FRMPascalCoinWalletConfig..bbChangeLanguage..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:428 +msgid "Change UI language" +msgstr "" + +#. FRMPayloadDecoder..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:7 +msgid "Operation Information/Decoder" +msgstr "" + +#. FRMPayloadDecoder..Label1..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:26 +msgid "Block/Op:" +msgstr "" + +#. FRMPayloadDecoder..lblBlock..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:33 +msgid "000000/0000" +msgstr "" + +#. FRMPayloadDecoder..Label6..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:59 +msgid "Date Time:" +msgstr "" + +#. FRMPayloadDecoder..Label2..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:66 +msgid "Operation:" +msgstr "" + +#. FRMPayloadDecoder..lblAmountCaption..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:88 +msgid "Amount:" +msgstr "" + +#. FRMPayloadDecoder..lblFeeCaption..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:108 +msgid "Fee:" +msgstr "" + +#. FRMPayloadDecoder..Label4..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:128 +msgid "OpHash" +msgstr "" + +#. FRMPayloadDecoder..lblSenderCaption..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:135 +msgid "Sender:" +msgstr "" + +#. FRMPayloadDecoder..lblSender..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:142 +msgid "9999999-99" +msgstr "" + +#. FRMPayloadDecoder..lblReceiverCaption..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:155 +msgid "Receiver:" +msgstr "" + +#. FRMPayloadDecoder..lblReceiverInfo..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:175 +msgid "(Receiver info)" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecoded..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:192 +msgid "Payload" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecoded..Label7..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:202 +msgid "Decoded Payload:" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecoded..lblDecodedMethod..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:210 +msgid "(Method)" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecoded..Label3..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:223 +msgid "Original Payload in Hexadecimal:" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecoded..memoDecoded....Lines.Strings +#. FRMPayloadDecoder..PageControl..tsDecoded..memoOriginalPayloadInHexa....Lines.Strings +#: gui-classic/UFRMPayloadDecoder.dfm:237 +#: gui-classic/UFRMPayloadDecoder.dfm:256 +msgid "memoDecoded" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecoded..cbShowAsHexadecimal..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:267 +msgid "Show as hexadecimal" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecodeMethods..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:273 +msgid "Decode methods" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecodeMethods..lblPasswordsInfo..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:280 +msgid "lblPasswordsInfo" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecodeMethods..cbMethodPublicPayload..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:287 +msgid "Not encrypted (Public payload)" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecodeMethods..cbUsingPrivateKeys..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:296 +msgid "Using Private keys of my Wallet" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecodeMethods..cbUsingPasswords..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:305 +msgid "Using Passwords of the list" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecodeMethods..bbSaveMethods..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:323 +msgid "Save" +msgstr "" + +#. FRMPayloadDecoder..bbFind..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:376 +msgid "&Find" +msgstr "" + +#. FRMPayloadDecoder..ebOphash..Text +#: gui-classic/UFRMPayloadDecoder.dfm:420 +msgid "12345678901234567890123456789012345678901234567890123456789012" +msgstr "" + +#. FRMDiagnosticTool..txtLog..Text +#: gui-classic/UFRMRandomHashUtil.dfm:26 +msgid "txtLog" +msgstr "" + +#. FRMDiagnosticTool..btnRH..Caption +#: gui-classic/UFRMRandomHashUtil.dfm:33 +msgid "Random Hash" +msgstr "" + +#. FRMDiagnosticTool..btnRH2..Caption +#: gui-classic/UFRMRandomHashUtil.dfm:41 +msgid "Random Hash 2" +msgstr "" + +#. FRMRandomOperations..Caption +#. FRMRandomOperations..pnlClient..pnlTop1..bbRandomOperations..Caption +#: gui-classic/UFRMRandomOperations.dfm:4 +#: gui-classic/UFRMRandomOperations.dfm:73 +msgid "Random Operations" +msgstr "" + +#. FRMRandomOperations..pnlTop..lblTopCaption....Caption +#: gui-classic/UFRMRandomOperations.dfm:39 +msgid "" +"WARNING! This form will generate RANDOM operations using your private " +"keys!!!" +msgstr "" + +#. FRMRandomOperations..pnlClient..mLogs....Lines.Strings +#: gui-classic/UFRMRandomOperations.dfm:85 +msgid "mLogs" +msgstr "" + +#. FRMRPCCalls..Caption +#. FRMWallet..MainMenu..miProject..MiRPCCalls..Caption +#: gui-classic/UFRMRPCCalls.dfm:5 gui-classic/UFRMWallet.dfm:1266 +msgid "RPC Calls" +msgstr "" + +#. FRMRPCCalls..pnlTop..lblTopCaption....Caption +#: gui-classic/UFRMRPCCalls.dfm:45 +msgid "" +"WARNING! Execute only calls you understand. Execute unknown calls provided " +"by third person can cause that you lost your keys/balance!" +msgstr "" + +#. FRMRPCCalls..pnlRight..Label1..Caption +#: gui-classic/UFRMRPCCalls.dfm:83 +msgid "Method" +msgstr "" + +#. FRMRPCCalls..pnlRight..Label2..Caption +#: gui-classic/UFRMRPCCalls.dfm:92 +msgid "Server" +msgstr "" + +#. FRMRPCCalls..pnlRight..ebMethod..Text +#: gui-classic/UFRMRPCCalls.dfm:102 +msgid "ebMethod" +msgstr "" + +#. FRMRPCCalls..pnlRight..pageControl..tsKeyNames..Caption +#: gui-classic/UFRMRPCCalls.dfm:113 +msgid "Key/Value Params" +msgstr "" + +#. FRMRPCCalls..pnlRight..pageControl..tsJSONParams..Caption +#: gui-classic/UFRMRPCCalls.dfm:130 +msgid "Params as JSON" +msgstr "" + +#. FRMRPCCalls..pnlRight..bbSendCommand..Caption +#: gui-classic/UFRMRPCCalls.dfm:148 +msgid "&Send" +msgstr "" + +#. FRMRPCCalls..pnlRight..ebServerURL..Text +#: gui-classic/UFRMRPCCalls.dfm:195 +msgid "ebServerURL" +msgstr "" + +#. FRMRPCCalls..pnlInfo..pnlInfoBottom..pnlLastCall..Label3..Caption +#: gui-classic/UFRMRPCCalls.dfm:244 +msgid "Last call result:" +msgstr "" + +#. FRMRPCCalls..pnlInfo..pnlInfoBottom..pnlLastCall..lblLastCallResultState..Caption +#: gui-classic/UFRMRPCCalls.dfm:253 +msgid "STATE" +msgstr "" + +#. FRMSaleAccounts..Caption +#: gui-classic/UFRMSaleAccounts.dfm:5 +msgid "Sale accounts" +msgstr "" + +#. FRMSaleAccounts..Label1..Caption +#: gui-classic/UFRMSaleAccounts.dfm:32 +msgid "Sale price:" +msgstr "" + +#. FRMSaleAccounts..Label2..Caption +#: gui-classic/UFRMSaleAccounts.dfm:39 +msgid "Locked until block:" +msgstr "" + +#. FRMSaleAccounts..Label3..Caption +#: gui-classic/UFRMSaleAccounts.dfm:46 +msgid "Seller account (where to pay)" +msgstr "" + +#. FRMSaleAccounts..ebSalePrice..Text +#. FRMSaleAccounts..ebSellerAccount..Text +#: gui-classic/UFRMSaleAccounts.dfm:115 gui-classic/UFRMSaleAccounts.dfm:170 +msgid "Edit1" +msgstr "" + +#. FRMSaleAccounts..ebLockedUntilBlock..Text +#: gui-classic/UFRMSaleAccounts.dfm:123 +msgid "ebLockedUntilBlock" +msgstr "" + +#. FRMSaleAccounts..gbSellOptions..Caption +#: gui-classic/UFRMSaleAccounts.dfm:130 +msgid " Sell options: " +msgstr "" + +#. FRMSaleAccounts..gbSellOptions..lblNewOwnerPublicKey..Caption +#: gui-classic/UFRMSaleAccounts.dfm:137 +msgid "New owner's public key" +msgstr "" + +#. FRMSaleAccounts..gbSellOptions..rbEveryoneCanBuy..Caption +#: gui-classic/UFRMSaleAccounts.dfm:144 +msgid "Everyone can buy" +msgstr "" + +#. FRMSaleAccounts..gbSellOptions..rbReservedForAPublickKey..Caption +#: gui-classic/UFRMSaleAccounts.dfm:152 +msgid "Reserved for only one public key (private)" +msgstr "" + +#. FRMSaleAccounts..gbSellOptions..ebNewOwnerPublicKey..Text +#: gui-classic/UFRMSaleAccounts.dfm:161 +msgid "ebDestAccount" +msgstr "" + +#. FRMChangeLanguage..Caption +#. FRMChangeLanguage..Caption +#: gui-classic/UFRMSelectLanguage.dfm:8 +#: lib/i386-win32/ufrmselectlanguage.dfm:8 +msgid "Language Selection" +msgstr "" + +#. FRMChangeLanguage..bbCancel..Caption +#. FRMChangeLanguage..bbCancel..Caption +#: gui-classic/UFRMSelectLanguage.dfm:28 +#: lib/i386-win32/ufrmselectlanguage.dfm:28 +msgid "Cancel" +msgstr "" + +#. FRMChangeLanguage..Label1..Caption +#. FRMChangeLanguage..Label1..Caption +#: gui-classic/UFRMSelectLanguage.dfm:46 +#: lib/i386-win32/ufrmselectlanguage.dfm:46 +msgid "Select your preferred language" +msgstr "" + +#. FRMWallet..pnlTop..lblCurrentBlockCaption..Caption +#: gui-classic/UFRMWallet.dfm:135 +msgid "Total Blocks:" +msgstr "" + +#. FRMWallet..pnlTop..lblCurrentBlockTimeCaption..Caption +#: gui-classic/UFRMWallet.dfm:153 +msgid "Current Block Age:" +msgstr "" + +#. FRMWallet..pnlTop..lblCurrentBlockTime..Caption +#: gui-classic/UFRMWallet.dfm:162 +msgid "000 seconds ago" +msgstr "" + +#. FRMWallet..pnlTop..lblOperationsPendingCaption..Caption +#: gui-classic/UFRMWallet.dfm:171 +msgid "Pending Operations:" +msgstr "" + +#. FRMWallet..pnlTop..lblMiningStatusCaption..Caption +#: gui-classic/UFRMWallet.dfm:189 +msgid "Miner Clients:" +msgstr "" + +#. FRMWallet..pnlTop..lblCurrentDifficultyCaption..Caption +#: gui-classic/UFRMWallet.dfm:207 +msgid "Current Target:" +msgstr "" + +#. FRMWallet..pnlTop..Label4..Caption +#: gui-classic/UFRMWallet.dfm:234 +msgid "Time average:" +msgstr "" + +#. FRMWallet..pnlTop..Label8..Caption +#: gui-classic/UFRMWallet.dfm:243 +msgid "Node Status:" +msgstr "" + +#. FRMWallet..pnlTop..lblNodeStatus..Caption +#: gui-classic/UFRMWallet.dfm:252 +msgid "???" +msgstr "" + +#. FRMWallet..pnlTop..Label16..Caption +#: gui-classic/UFRMWallet.dfm:294 +msgid "Blocks Found:" +msgstr "" + +#. FRMWallet..pnlTop..lblBlocksFound..Hint +#: gui-classic/UFRMWallet.dfm:309 +msgid "Blocks found while Miner is running..." +msgstr "" + +#. FRMWallet..pnlTop..lblReceivedMessages..Caption +#: gui-classic/UFRMWallet.dfm:328 +msgid "Received Messages" +msgstr "" + +#. FRMWallet..pnlTop..lblBuild..Caption +#: gui-classic/UFRMWallet.dfm:344 +msgid "Build" +msgstr "" + +#. FRMWallet..StatusBar......Text +#: gui-classic/UFRMWallet.dfm:363 +msgid "Server Active" +msgstr "" + +#. FRMWallet..StatusBar......Text +#: gui-classic/UFRMWallet.dfm:367 +msgid "Connection status" +msgstr "" + +#. FRMWallet..StatusBar......Text +#: gui-classic/UFRMWallet.dfm:371 +msgid "Blocks" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..Caption +#: gui-classic/UFRMWallet.dfm:385 +msgid "Account Explorer" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pnlMyAccountsTop..Label18..Caption +#. FRMWallet..MainMenu..MiOperations..MiFindaccount..Caption +#: gui-classic/UFRMWallet.dfm:406 gui-classic/UFRMWallet.dfm:1295 +msgid "Find account" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pnlMyAccountsTop..cbExploreMyAccounts..Caption +#: gui-classic/UFRMWallet.dfm:458 +msgid "Explore accounts with one of my Wallet Keys" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pnlMyAccountsTop..bbChangeKeyName..Caption +#: gui-classic/UFRMWallet.dfm:476 +msgid "Change Key name" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pnlMyAccountsTop..cbFilterAccounts..Caption +#: gui-classic/UFRMWallet.dfm:485 +msgid "Filter accounts by balance" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pnlMyAccountsTop..ebFilterAccountByBalanceMin..Hint +#: gui-classic/UFRMWallet.dfm:494 +msgid "Min balance" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pnlMyAccountsTop..ebFilterAccountByBalanceMax..Hint +#: gui-classic/UFRMWallet.dfm:504 +msgid "Max balance" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pnlAccounts..pnlAccountsInfo..bbAccountsRefresh..Caption +#: gui-classic/UFRMWallet.dfm:580 +msgid "Refresh" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsAccountOperations..Caption +#: gui-classic/UFRMWallet.dfm:622 +msgid "Account Operations" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..Caption +#: gui-classic/UFRMWallet.dfm:634 +msgid "Selected Accounts For Batch Operation" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsTop..Label15..Caption +#: gui-classic/UFRMWallet.dfm:667 +msgid "Select multiple accounts to execute massive operations" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsBottom..Label22..Caption +#: gui-classic/UFRMWallet.dfm:703 +msgid "Accounts Balance:" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsLeft..sbSelectedAccountsAdd..Caption +#: gui-classic/UFRMWallet.dfm:730 +msgid ">" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsLeft..sbSelectedAccountsAddAll..Caption +#: gui-classic/UFRMWallet.dfm:738 +msgid ">>" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsLeft..sbSelectedAccountsDel..Caption +#: gui-classic/UFRMWallet.dfm:746 +msgid "<" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsLeft..sbSelectedAccountsDelAll..Caption +#: gui-classic/UFRMWallet.dfm:754 +msgid "<<" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..bbSelectedAccountsOperation..Caption +#. FRMWallet..MainMenu..MiOperations..Caption +#: gui-classic/UFRMWallet.dfm:763 gui-classic/UFRMWallet.dfm:1278 +msgid "Operations" +msgstr "" + +#. FRMWallet..PageControl..tsPendingOperations..Caption +#: gui-classic/UFRMWallet.dfm:829 +msgid "Pending Operations" +msgstr "" + +#. FRMWallet..PageControl..tsPendingOperations..pnlPendingOperations..Label10....Caption +#: gui-classic/UFRMWallet.dfm:865 +msgid "" +"Here you can see Operations transmited/received from other nodes that will " +"be included in next block. There is no guarantee that other nodes will " +"include them when mining, so it's important that you mine too to help " +"include Operations to the main BlockChain" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Caption +#: gui-classic/UFRMWallet.dfm:879 +msgid "Block Explorer" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..Label9..Caption +#. FRMWallet..PageControl..tsOperations..Panel1..Label2..Caption +#: gui-classic/UFRMWallet.dfm:898 gui-classic/UFRMWallet.dfm:994 +msgid "Filter by blocks range" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..lblHashRateBackBlocks..Caption +#: gui-classic/UFRMWallet.dfm:907 +msgid "HashRate back blocks" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..lblHashRateBackBlocks1..Caption +#: gui-classic/UFRMWallet.dfm:916 +msgid "Units" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..cbHashRateUnits..Text +#. FRMWallet..PageControl..tsBlockChain..Panel2..cbHashRateUnits....Items.Strings +#: gui-classic/UFRMWallet.dfm:955 gui-classic/UFRMWallet.dfm:960 +msgid "Mh/s" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..cbHashRateUnits....Items.Strings +#: gui-classic/UFRMWallet.dfm:959 +msgid "Kh/s" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..cbHashRateUnits....Items.Strings +#: gui-classic/UFRMWallet.dfm:961 +msgid "Gh/s" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..cbHashRateUnits....Items.Strings +#: gui-classic/UFRMWallet.dfm:962 +msgid "Th/s" +msgstr "" + +#. FRMWallet..PageControl..tsOperations..Caption +#. FRMWallet..MainMenu..MiOperations..MiOperationsExplorer..Caption +#: gui-classic/UFRMWallet.dfm:975 gui-classic/UFRMWallet.dfm:1305 +msgid "Operations Explorer" +msgstr "" + +#. FRMWallet..PageControl..tsLogs..Caption +#: gui-classic/UFRMWallet.dfm:1027 +msgid "Logs" +msgstr "" + +#. FRMWallet..PageControl..tsLogs..pnlTopLogs..cbShowDebugLogs..Caption +#: gui-classic/UFRMWallet.dfm:1046 +msgid "Show Debug Logs" +msgstr "" + +#. FRMWallet..PageControl..tsNodeStats..Caption +#: gui-classic/UFRMWallet.dfm:1062 +msgid "Node Stats" +msgstr "" + +#. FRMWallet..PageControl..tsNodeStats..Label3..Caption +#: gui-classic/UFRMWallet.dfm:1076 +msgid "Active Connections:" +msgstr "" + +#. FRMWallet..PageControl..tsNodeStats..Label6..Caption +#: gui-classic/UFRMWallet.dfm:1086 +msgid "Known Node Servers:" +msgstr "" + +#. FRMWallet..PageControl..tsNodeStats..Label7..Caption +#: gui-classic/UFRMWallet.dfm:1096 +msgid "Blacklisted Nodes" +msgstr "" + +#. FRMWallet..PageControl..tsMessages..Caption +#: gui-classic/UFRMWallet.dfm:1135 +msgid "Messages" +msgstr "" + +#. FRMWallet..PageControl..tsMessages..Label11..Caption +#: gui-classic/UFRMWallet.dfm:1149 +msgid "Messages:" +msgstr "" + +#. FRMWallet..PageControl..tsMessages..Label12..Caption +#: gui-classic/UFRMWallet.dfm:1158 +msgid "Message to send:" +msgstr "" + +#. FRMWallet..PageControl..tsMessages..Label13..Caption +#: gui-classic/UFRMWallet.dfm:1167 +msgid "Available Connections:" +msgstr "" + +#. FRMWallet..PageControl..tsMessages..Label14....Caption +#: gui-classic/UFRMWallet.dfm:1178 +msgid "" +"(Messages will be encrypted, so only dest connection will be able to read " +"it)" +msgstr "" + +#. FRMWallet..PageControl..tsMessages..bbSendAMessage..Caption +#: gui-classic/UFRMWallet.dfm:1203 +msgid "Send a Message" +msgstr "" + +#. FRMWallet..PageControl..tsMessages..memoMessageToSend....Lines.Strings +#: gui-classic/UFRMWallet.dfm:1232 +msgid "memoMessageToSend" +msgstr "" + +#. FRMWallet..MainMenu..miProject..Caption +#: gui-classic/UFRMWallet.dfm:1247 +msgid "Project" +msgstr "" + +#. FRMWallet..MainMenu..miProject..miPrivatekeys..Caption +#: gui-classic/UFRMWallet.dfm:1249 +msgid "Private Keys" +msgstr "" + +#. FRMWallet..MainMenu..miProject..IPnodes1..Caption +#: gui-classic/UFRMWallet.dfm:1262 +msgid "Available Node List" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..miNewOperation..Caption +#: gui-classic/UFRMWallet.dfm:1280 +msgid "New single Operation" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiFindOperationbyOpHash..Caption +#: gui-classic/UFRMWallet.dfm:1285 +msgid "Find Operation by OpHash" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiDecodePayload..Caption +#: gui-classic/UFRMWallet.dfm:1290 +msgid "Decode Payload" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiAccountInformation..Caption +#: gui-classic/UFRMWallet.dfm:1300 +msgid "Account Information" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiAddaccounttoSelected..Caption +#: gui-classic/UFRMWallet.dfm:1313 +msgid "Add account to selected" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiRemoveaccountfromselected..Caption +#: gui-classic/UFRMWallet.dfm:1318 +msgid "Remove account from selected" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiMultiaccountoperation..Caption +#: gui-classic/UFRMWallet.dfm:1323 +msgid "Multi account operation" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiFindpreviousaccountwithhighbalance..Caption +#: gui-classic/UFRMWallet.dfm:1330 +msgid "Find previous account with high balance" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiFindnextaccountwithhighbalance..Caption +#: gui-classic/UFRMWallet.dfm:1335 +msgid "Find next account with high balance" +msgstr "" + +#. FRMWallet..MainMenu..miAbout..Caption +#: gui-classic/UFRMWallet.dfm:1341 +msgid "About" +msgstr "" + +#. FRMWallet..MainMenu..miAbout..miAboutPascalCoin..Caption +#: gui-classic/UFRMWallet.dfm:1343 +msgid "About Pascal Coin..." +msgstr "" + +#. FRMWalletKeys..Caption +#: gui-classic/UFRMWalletKeys.dfm:6 +msgid "Wallet keys" +msgstr "" + +#. FRMWalletKeys..lblEncryptionTypeCaption..Caption +#: gui-classic/UFRMWalletKeys.dfm:25 +msgid "Encryption type:" +msgstr "" + +#. FRMWalletKeys..lblEncryptionType..Caption +#. FRMWalletKeys..lblKeyName..Caption +#: gui-classic/UFRMWalletKeys.dfm:32 gui-classic/UFRMWalletKeys.dfm:47 +msgid "000000000" +msgstr "" + +#. FRMWalletKeys..lblKeyNameCaption..Caption +#: gui-classic/UFRMWalletKeys.dfm:39 +msgid "Key name:" +msgstr "" + +#. FRMWalletKeys..lblPrivateKeyCaption..Caption +#: gui-classic/UFRMWalletKeys.dfm:54 +msgid "Public Key:" +msgstr "" + +#. FRMWalletKeys..lblKeysEncrypted..Caption +#: gui-classic/UFRMWalletKeys.dfm:62 +msgid "lblKeysEncrypted" +msgstr "" + +#. FRMWalletKeys..bbExportPrivateKey..Caption +#: gui-classic/UFRMWalletKeys.dfm:85 +msgid "Export Private key" +msgstr "" + +#. FRMWalletKeys..memoPrivateKey....Lines.Strings +#: gui-classic/UFRMWalletKeys.dfm:158 +msgid "memoPrivateKey" +msgstr "" + +#. FRMWalletKeys..bbChangeName..Caption +#: gui-classic/UFRMWalletKeys.dfm:169 +msgid "Change Name" +msgstr "" + +#. FRMWalletKeys..bbImportPrivateKey..Caption +#: gui-classic/UFRMWalletKeys.dfm:178 +msgid "Import Private key" +msgstr "" + +#. FRMWalletKeys..bbExportPublicKey..Caption +#: gui-classic/UFRMWalletKeys.dfm:240 +msgid "Export Public key" +msgstr "" + +#. FRMWalletKeys..bbImportPublicKey..Caption +#: gui-classic/UFRMWalletKeys.dfm:306 +msgid "Import Public key" +msgstr "" + +#. FRMWalletKeys..bbGenerateNewKey..Caption +#: gui-classic/UFRMWalletKeys.dfm:372 +msgid "Generate a new Key" +msgstr "" + +#. FRMWalletKeys..bbDelete..Caption +#: gui-classic/UFRMWalletKeys.dfm:434 +msgid "Delete" +msgstr "" + +#. FRMWalletKeys..bbExportAllWalletKeys..Caption +#: gui-classic/UFRMWalletKeys.dfm:568 +msgid "Export all Wallet Keys to a file" +msgstr "" + +#. FRMWalletKeys..bbImportKeysFile..Caption +#: gui-classic/UFRMWalletKeys.dfm:634 +msgid "Import a Wallet Keys File" +msgstr "" + +#. FRMWalletKeys..bbLock..Caption +#: gui-classic/UFRMWalletKeys.dfm:700 +msgid "Lock" +msgstr "" + +#. FRMWalletKeys..SaveDialog..DefaultExt +#. FRMWalletKeys..OpenDialog..DefaultExt +#: gui-classic/UFRMWalletKeys.dfm:758 gui-classic/UFRMWalletKeys.dfm:765 +msgid "dat" +msgstr "" + +#. FRMWalletKeys..SaveDialog..Filter +#: gui-classic/UFRMWalletKeys.dfm:759 +msgid "Wallet keys file|*.dat|All files|*.*" +msgstr "" + +#. FRMWalletKeys..OpenDialog..Filter +#: gui-classic/UFRMWalletKeys.dfm:766 +msgid "Wallet keys file (*.dat)|*.dat|All files (*.*)|*.*" +msgstr "" + +#. Programmer's name for it: SUnSupportedHash +#. Programmer's name for it: SUnSupportedHash +#: core/URandomHash.pas:267 core/URandomHash2.pas:219 +msgid "Unsupported Hash Selected" +msgstr "" + +#. Programmer's name for it: SInvalidRound +#. Programmer's name for it: SInvalidRound +#: core/URandomHash.pas:268 core/URandomHash2.pas:220 +msgid "Round must be between 0 and N inclusive" +msgstr "" + +#. Programmer's name for it: SOverlappingArgs +#. Programmer's name for it: SOverlappingArgs +#: core/URandomHash.pas:269 core/URandomHash2.pas:221 +msgid "Overlapping read/write regions" +msgstr "" + +#. Programmer's name for it: SBufferTooSmall +#. Programmer's name for it: SBufferTooSmall +#: core/URandomHash.pas:270 core/URandomHash2.pas:222 +msgid "Buffer too small to apply memory transform" +msgstr "" + +#. Programmer's name for it: SBlockHeaderTooSmallForNonce +#. Programmer's name for it: SBlockHeaderTooSmallForNonce +#: core/URandomHash.pas:271 core/URandomHash2.pas:223 +msgid "Buffer too small to contain nonce" +msgstr "" + +#. Programmer's name for it: SAESEngineNotInitialised +#. Programmer's name for it: SAESEngineNotInitialised +#: libraries/cryptolib4pascal/ClpAesEngine.pas:37 +#: libraries/cryptolib4pascal/ClpAesLightEngine.pas:37 +msgid "AES Engine not Initialised" +msgstr "" + +#. Programmer's name for it: SInputBuffertooShort +#. Programmer's name for it: SInputBuffertooShort +#. Programmer's name for it: SInputBufferTooShort +#. Programmer's name for it: SInputBuffertooShort +#. Programmer's name for it: SInputBuffertooShort +#. Programmer's name for it: SInputBuffertooShort +#. Programmer's name for it: SInputBuffertooShort +#. Programmer's name for it: SInputBuffertooShort +#: libraries/cryptolib4pascal/ClpAesEngine.pas:38 +#: libraries/cryptolib4pascal/ClpAesLightEngine.pas:38 +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:39 +#: libraries/cryptolib4pascal/ClpBlowfishEngine.pas:39 +#: libraries/cryptolib4pascal/ClpRijndaelEngine.pas:35 +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:43 +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:36 +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:36 +msgid "Input Buffer too Short" +msgstr "" + +#. Programmer's name for it: SOutputBuffertooShort +#. Programmer's name for it: SOutputBuffertooShort +#. Programmer's name for it: SOutputBufferTooShort +#. Programmer's name for it: SOutputBuffertooShort +#. Programmer's name for it: SOutputBufferTooSmall +#. Programmer's name for it: SOutputBufferTooSmall +#. Programmer's name for it: SOutputBufferTooSmall +#. Programmer's name for it: SOutputBuffertooShort +#. Programmer's name for it: SOutputBuffertooShort +#. Programmer's name for it: SOutputBuffertooShort +#. Programmer's name for it: SOutputBuffertooShort +#: libraries/cryptolib4pascal/ClpAesEngine.pas:39 +#: libraries/cryptolib4pascal/ClpAesLightEngine.pas:39 +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:40 +#: libraries/cryptolib4pascal/ClpBlowfishEngine.pas:40 +#: libraries/cryptolib4pascal/ClpBufferedBlockCipher.pas:39 +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:32 +#: libraries/cryptolib4pascal/ClpPaddedBufferedBlockCipher.pas:40 +#: libraries/cryptolib4pascal/ClpRijndaelEngine.pas:36 +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:44 +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:37 +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:37 +msgid "Output Buffer too Short" +msgstr "" + +#. Programmer's name for it: SInvalidParameterAESInit +#. Programmer's name for it: SInvalidParameterAESInit +#: libraries/cryptolib4pascal/ClpAesEngine.pas:40 +#: libraries/cryptolib4pascal/ClpAesLightEngine.pas:40 +msgid "Invalid Parameter Passed to AES Init - \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#: libraries/cryptolib4pascal/ClpAesEngine.pas:41 +#: libraries/cryptolib4pascal/ClpAesLightEngine.pas:41 +msgid "Key Length not 128/192/256 bits." +msgstr "" + +#. Programmer's name for it: SInvalidOperation +#. Programmer's name for it: SInvalidOperation +#: libraries/cryptolib4pascal/ClpAesEngine.pas:42 +#: libraries/cryptolib4pascal/ClpAesLightEngine.pas:42 +msgid "Should Never Get Here" +msgstr "" + +#: libraries/cryptolib4pascal/ClpAESPRNGRandom.pas:40 +msgid "AES RNG Seed Length must be either one of these \"128/192/256 bits\"." +msgstr "" + +#: libraries/cryptolib4pascal/ClpAgreementUtilities.pas:43 +msgid "Raw Agreement Algorithm \"%s\" Not Recognised." +msgstr "" + +#: libraries/cryptolib4pascal/ClpAgreementUtilities.pas:45 +msgid "Basic Agreement Algorithm \"%s\" Not Recognised." +msgstr "" + +#. Programmer's name for it: SArgon2TypeInvalid +#: libraries/cryptolib4pascal/ClpArgon2ParametersGenerator.pas:41 +msgid "Selected Argon2Type is Invalid" +msgstr "" + +#. Programmer's name for it: SArgon2VersionInvalid +#: libraries/cryptolib4pascal/ClpArgon2ParametersGenerator.pas:42 +msgid "Selected Argon2Version is Invalid" +msgstr "" + +#. Programmer's name for it: SArgon2MemoryCostTypeInvalid +#: libraries/cryptolib4pascal/ClpArgon2ParametersGenerator.pas:43 +msgid "Selected Argon2MemoryCostType is Invalid" +msgstr "" + +#. Programmer's name for it: SInvalidLength +#: libraries/cryptolib4pascal/ClpArrayUtils.pas:30 +msgid "%d \" > \" %d" +msgstr "" + +#. Programmer's name for it: SDataOverflow +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:43 +msgid "Data Overflow" +msgstr "" + +#. Programmer's name for it: SDataOverflow +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:45 +msgid "Corrupted Stream - Invalid High Tag Number Found" +msgstr "" + +#. Programmer's name for it: SEOFFound +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:46 +msgid "EOF Found Inside Tag Value" +msgstr "" + +#. Programmer's name for it: SInvalidEnd +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:47 +msgid "EOF Found When Length Expected" +msgstr "" + +#. Programmer's name for it: SInvalidDerLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:48 +msgid "DER Length More Than 4 Bytes: %d" +msgstr "" + +#. Programmer's name for it: SEndOfStream +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:49 +msgid "EOF Found Reading Length" +msgstr "" + +#. Programmer's name for it: SNegativeLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:50 +msgid "Corrupted Stream - Negative Length Found" +msgstr "" + +#. Programmer's name for it: SOutOfBoundsLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:51 +msgid "Corrupted stream - Out of Bounds Length Found" +msgstr "" + +#. Programmer's name for it: SUnknownTag +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:52 +msgid "Unknown Tag \" %d \" Encountered" +msgstr "" + +#. Programmer's name for it: SEndOfContent +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:53 +msgid "Unexpected End-of-Contents Marker" +msgstr "" + +#. Programmer's name for it: SIndefiniteLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:54 +msgid "Indefinite Length Primitive Encoding Encountered" +msgstr "" + +#. Programmer's name for it: SUnknownBerObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:55 +msgid "Unknown BER Object Encountered" +msgstr "" + +#. Programmer's name for it: SCorruptedStream +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:56 +msgid "Corrupted Stream Detected: %s" +msgstr "" + +#. Programmer's name for it: SInvalidLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:57 +msgid "Negative Lengths not Allowed\", \"Length\"" +msgstr "" + +#. Programmer's name for it: SEndOfStreamTwo +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:58 +msgid "DEF Length %d \" TObject truncated by \" %d" +msgstr "" + +#. Programmer's name for it: SInvalidBufferLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:59 +msgid "Buffer Length Not Right For Data" +msgstr "" + +#. Programmer's name for it: SMalformedContent +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:60 +msgid "Malformed End-of-Contents Marker" +msgstr "" + +#. Programmer's name for it: SExtraData +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:62 +msgid "Extra Data Found After Object" +msgstr "" + +#. Programmer's name for it: SUnRecognizedObjectStream +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:63 +msgid "Cannot Recognise Object in Stream" +msgstr "" + +#. Programmer's name for it: SUnRecognizedObjectByteArray +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:64 +msgid "Cannot Recognise Object in ByteArray" +msgstr "" + +#. Programmer's name for it: SIllegalObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:65 +msgid "Illegal Object in GetInstance: %s, \"obj\"" +msgstr "" + +#. Programmer's name for it: SStrNil +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:66 +msgid "\"Str\" Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SProcessingError +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:67 +msgid "Error Processing Object : \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:68 +msgid "Object Implicit - Explicit Expected." +msgstr "" + +#. Programmer's name for it: SUnknownObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:69 +msgid "Unknown object in GetInstance: %s, \"obj\"" +msgstr "" + +#. Programmer's name for it: SInvalidSequence +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:70 +msgid "\"Failed to Construct Sequence from byte array: \" %s" +msgstr "" + +#. Programmer's name for it: SImplicitObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:71 +msgid "Implicitly Tagged Object" +msgstr "" + +#. Programmer's name for it: SImplicitTag +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:72 +msgid "Implicit Tagging for Tag: %d" +msgstr "" + +#. Programmer's name for it: SUnknownObjectBER +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:73 +msgid "Unknown BER Object Encountered: $%x" +msgstr "" + +#. Programmer's name for it: SImplicitTagging +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:74 +msgid "Implicit Tagging not Implemented" +msgstr "" + +#. Programmer's name for it: SImplicitTagging +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:76 +msgid "Sequences Must Use Constructed Encoding (see X.690 8.9.1/8.10.1)" +msgstr "" + +#. Programmer's name for it: SImplicitTagging +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:78 +msgid "Sets Must Use Constructed Encoding (see X.690 8.11.1/8.12.1)" +msgstr "" + +#. Programmer's name for it: SMalformedObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:79 +msgid "Malformed Object %s" +msgstr "" + +#. Programmer's name for it: SUnSupportedTag +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:80 +msgid "Unsupported Tag Number" +msgstr "" + +#. Programmer's name for it: SConvertError +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:81 +msgid "EIOCryptoLibException Converting Stream to Byte Array: %s" +msgstr "" + +#. Programmer's name for it: SEncodingError +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:82 +msgid "Encoding Error in GetInstance: %s \"obj\"" +msgstr "" + +#. Programmer's name for it: SDataNil +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:83 +msgid "\"data\"" +msgstr "" + +#. Programmer's name for it: SInvalidRange +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:84 +msgid "Must be in the Range 0 to 7\", \"padBits\"" +msgstr "" + +#. Programmer's name for it: SPadBitError +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:85 +msgid "If \"data\" is Empty, \"padBits\" Must be 0" +msgstr "" + +#. Programmer's name for it: SUnalignedData +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:86 +msgid "Attempt to Get non-octet Aligned Data from BIT STRING\"" +msgstr "" + +#. Programmer's name for it: STruncatedBitString +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:87 +msgid "Truncated BIT STRING Detected\", \"octets\"" +msgstr "" + +#. Programmer's name for it: SNotImplemented +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:88 +msgid "Not Implemented %s" +msgstr "" + +#. Programmer's name for it: SUnConstructedTag +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:89 +msgid "Explicit Tags Must be Constructed (see X.690 8.14.2)" +msgstr "" + +#. Programmer's name for it: SParsingError +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:90 +msgid "%s" +msgstr "" + +#. Programmer's name for it: SEmptyInput +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:91 +msgid "Input Cannot be Empty \"astr\"" +msgstr "" + +#. Programmer's name for it: SInvalidValue +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:92 +msgid "Byte Value Should Have 1 Byte in it', \"val\"" +msgstr "" + +#. Programmer's name for it: SInvalidBooleanValue +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:93 +msgid "BOOLEAN Value Should Have 1 Byte in it\", \"Value\"" +msgstr "" + +#. Programmer's name for it: SMalformedEnumerated +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:94 +msgid "Malformed Enumerated" +msgstr "" + +#. Programmer's name for it: SZeroLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:95 +msgid "Enumerated has Zero Length, \"enc\"" +msgstr "" + +#. Programmer's name for it: SInvalidEncoding +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:96 +msgid "Invalid Encoding Value: %d" +msgstr "" + +#. Programmer's name for it: SFewObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:97 +msgid "Too Few Objects in Input Vector, \"v\"" +msgstr "" + +#. Programmer's name for it: SVectorTooLarge +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:98 +msgid "Input Vector too Large\", \"vector\"" +msgstr "" + +#. Programmer's name for it: SVectorTooLarge +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:100 +msgid "" +"No Tagged Object Found in Vector. Structure Doesn 't Seem to be of Type " +"External, \"Vector\"" +msgstr "" + +#. Programmer's name for it: SInvalidEncodingValue +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:101 +msgid "Invalid Encoding Value" +msgstr "" + +#. Programmer's name for it: SObjectNil +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:102 +msgid " \"obj\" Can't be Nil" +msgstr "" + +#. Programmer's name for it: SValueNil +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:103 +msgid " \"value\" Can't be Nil" +msgstr "" + +#. Programmer's name for it: SMalformedInteger +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:104 +msgid "Malformed Integer" +msgstr "" + +#. Programmer's name for it: SIdentifierNil +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:105 +msgid "Identifier Cannot be Empty" +msgstr "" + +#. Programmer's name for it: SInvalidOID +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:106 +msgid "\"String \" %s is \" not an OID\"" +msgstr "" + +#. Programmer's name for it: SInvalidBranchId +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:107 +msgid "\"String \" %s \" not a valid OID branch\", \"branchID\"" +msgstr "" + +#. Programmer's name for it: SIllegalCharacters +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:108 +msgid "String Contains Illegal Characters \"str\"" +msgstr "" + +#. Programmer's name for it: SExpectedPublicKey +#: libraries/cryptolib4pascal/ClpAsymmetricCipherKeyPair.pas:30 +msgid "Expected a Public Key \"publicParameter\"" +msgstr "" + +#. Programmer's name for it: SExpectedPrivateKey +#: libraries/cryptolib4pascal/ClpAsymmetricCipherKeyPair.pas:31 +msgid "Expected a Private Key \"privateParameter\"" +msgstr "" + +#. Programmer's name for it: SOutputBufferTooSmall +#. Programmer's name for it: SOutputBufferTooSmall +#: libraries/cryptolib4pascal/ClpBaseKdfBytesGenerator.pas:36 +#: libraries/cryptolib4pascal/ClpPascalCoinECIESKdfBytesGenerator.pas:34 +msgid "Output Buffer too Small" +msgstr "" + +#. Programmer's name for it: SOutputLengthTooLarge +#: libraries/cryptolib4pascal/ClpBaseKdfBytesGenerator.pas:37 +msgid "Output Length too Large" +msgstr "" + +#. Programmer's name for it: SKDFParameterNotFound +#. Programmer's name for it: SKDFParameterNotFound +#: libraries/cryptolib4pascal/ClpBaseKdfBytesGenerator.pas:38 +#: libraries/cryptolib4pascal/ClpPascalCoinECIESKdfBytesGenerator.pas:35 +msgid "KDF Parameters Required For KDF Generator" +msgstr "" + +#. Programmer's name for it: SDivisionByZero +#: libraries/cryptolib4pascal/ClpBigInteger.pas:36 +msgid "Division by Zero Error" +msgstr "" + +#. Programmer's name for it: SModulusPositive +#: libraries/cryptolib4pascal/ClpBigInteger.pas:37 +msgid "Modulus must be Positive" +msgstr "" + +#. Programmer's name for it: SNotRelativelyPrime +#: libraries/cryptolib4pascal/ClpBigInteger.pas:38 +msgid "Numbers not Relatively Prime." +msgstr "" + +#. Programmer's name for it: SNegativeValue +#: libraries/cryptolib4pascal/ClpBigInteger.pas:39 +msgid "Cannot be Called on Value < 0" +msgstr "" + +#. Programmer's name for it: SNegativeExponent +#: libraries/cryptolib4pascal/ClpBigInteger.pas:40 +msgid "Negative Exponent" +msgstr "" + +#. Programmer's name for it: SResultTooLarge +#: libraries/cryptolib4pascal/ClpBigInteger.pas:41 +msgid "Result too Large" +msgstr "" + +#. Programmer's name for it: SNegativeBitPosition +#: libraries/cryptolib4pascal/ClpBigInteger.pas:42 +msgid "Bit Position must not be Negative" +msgstr "" + +#. Programmer's name for it: SInvalidBitAddress +#: libraries/cryptolib4pascal/ClpBigInteger.pas:43 +msgid "Bit Address less than Zero" +msgstr "" + +#. Programmer's name for it: SZeroLengthBigInteger +#: libraries/cryptolib4pascal/ClpBigInteger.pas:44 +msgid "Zero length BigInteger" +msgstr "" + +#. Programmer's name for it: SInvalidSign +#: libraries/cryptolib4pascal/ClpBigInteger.pas:45 +msgid "Invalid Sign Value" +msgstr "" + +#. Programmer's name for it: SNegativeSizeInBits +#: libraries/cryptolib4pascal/ClpBigInteger.pas:46 +msgid "sizeInBits must be non-negative" +msgstr "" + +#. Programmer's name for it: SInvalidBitLength +#: libraries/cryptolib4pascal/ClpBigInteger.pas:47 +msgid "bitLength < 2" +msgstr "" + +#. Programmer's name for it: SInvalidBase +#: libraries/cryptolib4pascal/ClpBigInteger.pas:48 +msgid "Only bases 2, 8, 10, or 16 allowed" +msgstr "" + +#. Programmer's name for it: SBadCharacterRadix8 +#: libraries/cryptolib4pascal/ClpBigInteger.pas:49 +msgid "Bad Character in radix 8 string: %s" +msgstr "" + +#. Programmer's name for it: SBadCharacterRadix2 +#: libraries/cryptolib4pascal/ClpBigInteger.pas:50 +msgid "Bad Character in radix 2 string: %s" +msgstr "" + +#. Programmer's name for it: SUnSupportedBase +#: libraries/cryptolib4pascal/ClpBigInteger.pas:51 +msgid "Only bases 2, 8, 10, 16 are allowed" +msgstr "" + +#. Programmer's name for it: SInvalidLength +#: libraries/cryptolib4pascal/ClpBigIntegers.pas:31 +msgid "Standard Length Exceeded, \"n\"" +msgstr "" + +#. Programmer's name for it: SInvalidMinValue +#: libraries/cryptolib4pascal/ClpBigIntegers.pas:32 +msgid "\"min\" may not be greater than \"max\"\"" +msgstr "" + +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:37 +msgid "Initialisation Vector Must be the Same Length as Block Size" +msgstr "" + +#. Programmer's name for it: SInvalidChangeState +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:38 +msgid "Cannot Change Encrypting State Without Providing Key." +msgstr "" + +#. Programmer's name for it: SInvalidParameterArgument +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:42 +msgid "CTR/SIC Mode Requires ParametersWithIV" +msgstr "" + +#. Programmer's name for it: SInvalidParameterArgument +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:44 +msgid "CTR/SIC mode requires IV no greater than: %u bytes" +msgstr "" + +#. Programmer's name for it: SInvalidTooSmallIVLength +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:45 +msgid "CTR/SIC mode requires IV of at least: %u bytes" +msgstr "" + +#. Programmer's name for it: SUnsupportedCipher +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:47 +msgid "CtsBlockCipher Can Only Accept ECB or CBC Ciphers" +msgstr "" + +#. Programmer's name for it: SNegativeInputLength +#. Programmer's name for it: SInvalidLength +#. Programmer's name for it: SNegativeInputLength +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:48 +#: libraries/cryptolib4pascal/ClpBufferedBlockCipher.pas:36 +#: libraries/cryptolib4pascal/ClpPaddedBufferedBlockCipher.pas:42 +msgid "Can't Have a Negative Input Length!" +msgstr "" + +#. Programmer's name for it: SCTSDoFinalError +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:49 +msgid "Need at Least One Block of Input For CTS" +msgstr "" + +#. Programmer's name for it: SBlowfishEngineNotInitialised +#: libraries/cryptolib4pascal/ClpBlowfishEngine.pas:36 +msgid "Blowfish Engine not Initialised" +msgstr "" + +#. Programmer's name for it: SBlowfishEngineNotInitialised +#: libraries/cryptolib4pascal/ClpBlowfishEngine.pas:38 +msgid "Invalid Parameter Passed to Blowfish Init - \"%s\"" +msgstr "" + +#. Programmer's name for it: SOutputBuffertooShort +#: libraries/cryptolib4pascal/ClpBlowfishEngine.pas:42 +msgid "Key Length must be between 32 - 448 bits and divisible by 8." +msgstr "" + +#. Programmer's name for it: SInputNil +#: libraries/cryptolib4pascal/ClpBufferedBlockCipher.pas:37 +msgid "Input Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SCipherNil +#: libraries/cryptolib4pascal/ClpBufferedBlockCipher.pas:38 +msgid "Cipher Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SDataNotBlockSizeAligned +#: libraries/cryptolib4pascal/ClpBufferedBlockCipher.pas:40 +msgid "Data not Block Size Aligned" +msgstr "" + +#. Programmer's name for it: SOutputBufferTooSmallForDoFinal +#: libraries/cryptolib4pascal/ClpBufferedBlockCipher.pas:41 +msgid "Output Buffer too Short for DoFinal()" +msgstr "" + +#. Programmer's name for it: SInvalidBufferSize +#. Programmer's name for it: SInvalidBufferSize +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:33 +#: libraries/hashlib4pascal/HlpHash.pas:17 +msgid "\"BufferSize\" Must Be Greater Than Zero" +msgstr "" + +#. Programmer's name for it: SInvalidBufferSize +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:35 +msgid "Input and Output Streams Must not Point to the Same Stream Instance" +msgstr "" + +#. Programmer's name for it: SUnAssignedInputStream +#. Programmer's name for it: SUnAssignedStream +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:36 +#: libraries/hashlib4pascal/HlpHash.pas:18 +msgid "Input Stream Is Unassigned" +msgstr "" + +#. Programmer's name for it: SUnAssignedOutputStream +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:37 +msgid "Output Stream Is Unassigned" +msgstr "" + +#. Programmer's name for it: SPositionOutOfRange +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:38 +msgid "Current Position Is Out Of Range" +msgstr "" + +#. Programmer's name for it: SPositionOutOfRange +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:40 +msgid "Stream Position (or Stream Length to Process) Is Out Of Range" +msgstr "" + +#. Programmer's name for it: SCipherNil +#: libraries/cryptolib4pascal/ClpBufferedStreamCipher.pas:34 +msgid "Cipher Instance Cannot be Nil" +msgstr "" + +#: libraries/cryptolib4pascal/ClpCipherKeyGenerator.pas:34 +msgid "Strength must be a Positive Value, \"defaultStrength\"" +msgstr "" + +#. Programmer's name for it: SParametersNil +#: libraries/cryptolib4pascal/ClpCipherKeyGenerator.pas:35 +msgid "Parameters Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SGeneratorNotInitialized +#: libraries/cryptolib4pascal/ClpCipherKeyGenerator.pas:36 +msgid "Generator has not been Initialised" +msgstr "" + +#. Programmer's name for it: SMechanismNil +#. Programmer's name for it: SMechanismNil +#. Programmer's name for it: SMechanismNil +#: libraries/cryptolib4pascal/ClpCipherUtilities.pas:56 +#: libraries/cryptolib4pascal/ClpDigestUtilities.pas:42 +#: libraries/cryptolib4pascal/ClpSignerUtilities.pas:69 +msgid "Mechanism Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SAlgorithmNil +#. Programmer's name for it: SAlgorithmNil +#. Programmer's name for it: SAlgorithmNil +#: libraries/cryptolib4pascal/ClpCipherUtilities.pas:57 +#: libraries/cryptolib4pascal/ClpParameterUtilities.pas:37 +#: libraries/cryptolib4pascal/ClpSignerUtilities.pas:70 +msgid "Algorithm Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SUnRecognizedCipher +#: libraries/cryptolib4pascal/ClpCipherUtilities.pas:58 +msgid "Cipher \"%s\" Not Recognised." +msgstr "" + +#. Programmer's name for it: SUnRecognizedCipher +#: libraries/cryptolib4pascal/ClpCipherUtilities.pas:60 +msgid "" +"Warning: SIC-Mode Can Become a TwoTime-Pad if the Blocksize of the Cipher " +"is Too Small. Use a Cipher With a Block Size of at Least 128 bits (e.g. AES)" +msgstr "" + +#. Programmer's name for it: SUnRecognizedCipher +#: libraries/cryptolib4pascal/ClpCipherUtilities.pas:62 +msgid "Modes and Paddings Not Used for Stream Ciphers" +msgstr "" + +#. Programmer's name for it: SEncodingInstanceNil +#. Programmer's name for it: SEncodingInstanceNil +#: libraries/cryptolib4pascal/ClpConverters.pas:33 +#: libraries/hashlib4pascal/HlpConverters.pas:16 +msgid "Encoding Instance Cannot Be Nil" +msgstr "" + +#. Programmer's name for it: SNegativeOffset +#: libraries/cryptolib4pascal/ClpCryptoApiRandomGenerator.pas:32 +msgid "Start Offset Cannot be Negative, \"Start\"" +msgstr "" + +#. Programmer's name for it: SArrayTooSmall +#: libraries/cryptolib4pascal/ClpCryptoApiRandomGenerator.pas:33 +msgid "Byte Array Too Small For Requested Offset and Length" +msgstr "" + +#: libraries/cryptolib4pascal/ClpCurve25519Custom.pas:40 +msgid "Value Invalid for Curve25519FieldElement \"%s\"" +msgstr "" + +#. Programmer's name for it: SOneOfECFieldElementIsNil +#. Programmer's name for it: SOneOfECFieldElementIsNil +#. Programmer's name for it: SOneOfECFieldElementIsNil +#. Programmer's name for it: SOneOfECFieldElementIsNil +#. Programmer's name for it: SOneOfECFieldElementIsNil +#. Programmer's name for it: SOneOfECFieldElementIsNil +#: libraries/cryptolib4pascal/ClpCurve25519Custom.pas:41 +#: libraries/cryptolib4pascal/ClpSecP256K1Custom.pas:41 +#: libraries/cryptolib4pascal/ClpSecP256R1Custom.pas:41 +#: libraries/cryptolib4pascal/ClpSecP384R1Custom.pas:41 +#: libraries/cryptolib4pascal/ClpSecP521R1Custom.pas:41 +#: libraries/cryptolib4pascal/ClpSecT283Custom.pas:42 +msgid "Exactly One of the Field Elements is Nil" +msgstr "" + +#: libraries/cryptolib4pascal/ClpDHAgreement.pas:45 +#: libraries/cryptolib4pascal/ClpDHBasicAgreement.pas:38 +msgid "Diffie-Hellman Public Key has Wrong Parameters." +msgstr "" + +#. Programmer's name for it: SNotDHPrivateKeyParameters +#. Programmer's name for it: SNotDHPrivateKeyParameters +#: libraries/cryptolib4pascal/ClpDHAgreement.pas:46 +#: libraries/cryptolib4pascal/ClpDHBasicAgreement.pas:39 +msgid "DHEngine Expects DHPrivateKeyParameters" +msgstr "" + +#. Programmer's name for it: SMessageNotInitialized +#: libraries/cryptolib4pascal/ClpDHAgreement.pas:47 +msgid "Message not Initialised" +msgstr "" + +#. Programmer's name for it: SSharedKeyInvalid +#. Programmer's name for it: SSharedKeyInvalid +#: libraries/cryptolib4pascal/ClpDHAgreement.pas:48 +#: libraries/cryptolib4pascal/ClpDHBasicAgreement.pas:41 +msgid "Shared Key Can't be 1" +msgstr "" + +#. Programmer's name for it: SDHPublicKeyWeak +#. Programmer's name for it: SDHPublicKeyWeak +#: libraries/cryptolib4pascal/ClpDHAgreement.pas:49 +#: libraries/cryptolib4pascal/ClpDHBasicAgreement.pas:42 +msgid "Diffie-Hellman Public Key is Weak" +msgstr "" + +#. Programmer's name for it: SDHPublicKeyNil +#: libraries/cryptolib4pascal/ClpDHAgreement.pas:50 +msgid "DH Public Key Parameter Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SAlgorithmNotInitialized +#: libraries/cryptolib4pascal/ClpDHBasicAgreement.pas:40 +msgid "Agreement Algorithm not Initialised" +msgstr "" + +#. Programmer's name for it: SParametersCannotBeNil +#. Programmer's name for it: SParametersCannotBeNil +#. Programmer's name for it: SParametersCannotBeNil +#: libraries/cryptolib4pascal/ClpDHBasicKeyPairGenerator.pas:42 +#: libraries/cryptolib4pascal/ClpDHKeyPairGenerator.pas:42 +#: libraries/cryptolib4pascal/ClpDsaKeyPairGenerator.pas:44 +msgid "\"parameters\" Cannot Be Nil" +msgstr "" + +#. Programmer's name for it: SPNil +#: libraries/cryptolib4pascal/ClpDHDomainParameters.pas:33 +msgid "P Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SGNil +#. Programmer's name for it: SGNil +#: libraries/cryptolib4pascal/ClpDHDomainParameters.pas:34 +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:35 +msgid "G Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SQNil +#. Programmer's name for it: SQNil +#. Programmer's name for it: SQNil +#: libraries/cryptolib4pascal/ClpDHDomainParameters.pas:35 +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:37 +#: libraries/cryptolib4pascal/ClpECPublicKeyParameters.pas:35 +msgid "Q Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SJNil +#: libraries/cryptolib4pascal/ClpDHDomainParameters.pas:36 +msgid "J Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SBadSequenceSize +#. Programmer's name for it: SBadSequenceSize +#. Programmer's name for it: SBadSequenceSize +#: libraries/cryptolib4pascal/ClpDHDomainParameters.pas:37 +#: libraries/cryptolib4pascal/ClpDHValidationParams.pas:34 +#: libraries/cryptolib4pascal/ClpDsaParameter.pas:32 +msgid "Bad Sequence Size \"seq\": %d" +msgstr "" + +#. Programmer's name for it: SInvalidDHDomainParameters +#: libraries/cryptolib4pascal/ClpDHDomainParameters.pas:38 +msgid "Invalid DHDomainParameters: %s" +msgstr "" + +#. Programmer's name for it: SPUnInitialized +#. Programmer's name for it: SPUnInitialized +#: libraries/cryptolib4pascal/ClpDHParameters.pas:33 +#: libraries/cryptolib4pascal/ClpDsaParameters.pas:32 +msgid "\"P\" Cannot Be Uninitialized" +msgstr "" + +#. Programmer's name for it: SGUnInitialized +#. Programmer's name for it: SGUnInitialized +#: libraries/cryptolib4pascal/ClpDHParameters.pas:34 +#: libraries/cryptolib4pascal/ClpDsaParameters.pas:34 +msgid "\"G\" Cannot Be Uninitialized" +msgstr "" + +#. Programmer's name for it: SMustBeOddPrime +#: libraries/cryptolib4pascal/ClpDHParameters.pas:35 +msgid "Field must be an Odd Prime, \"P\"" +msgstr "" + +#. Programmer's name for it: SInvalidGeneratorRange +#: libraries/cryptolib4pascal/ClpDHParameters.pas:36 +msgid "Generator must in the Range [2, p - 2], \"G\"" +msgstr "" + +#. Programmer's name for it: SQTooBigToBeAFactor +#: libraries/cryptolib4pascal/ClpDHParameters.pas:37 +msgid "Q too Big to be a Factor of (P - 1), \"Q\"" +msgstr "" + +#. Programmer's name for it: SMTooBig +#: libraries/cryptolib4pascal/ClpDHParameters.pas:38 +msgid "M value must be < BitLength of P, \"M\"" +msgstr "" + +#. Programmer's name for it: SLErrorOne +#: libraries/cryptolib4pascal/ClpDHParameters.pas:39 +msgid "when L value specified, it must be less than bitlength(P), \"L\"" +msgstr "" + +#. Programmer's name for it: SLErrorTwo +#: libraries/cryptolib4pascal/ClpDHParameters.pas:40 +msgid "when L value specified, it may not be less than m value, \"L\"" +msgstr "" + +#. Programmer's name for it: SInvalidSubGroupFactor +#: libraries/cryptolib4pascal/ClpDHParameters.pas:41 +msgid "Subgroup factor must be >= 2, \"j\"" +msgstr "" + +#. Programmer's name for it: SXUnInitialized +#. Programmer's name for it: SXUnInitialized +#: libraries/cryptolib4pascal/ClpDHPrivateKeyParameters.pas:33 +#: libraries/cryptolib4pascal/ClpDsaPrivateKeyParameters.pas:32 +msgid "\"X\" Cannot Be Uninitialized" +msgstr "" + +#. Programmer's name for it: SYUnInitialized +#. Programmer's name for it: SYUnInitialized +#: libraries/cryptolib4pascal/ClpDHPublicKeyParameters.pas:33 +#: libraries/cryptolib4pascal/ClpDsaPublicKeyParameters.pas:32 +msgid "\"Y\" Cannot Be Uninitialized" +msgstr "" + +#. Programmer's name for it: SInvalidDHPublicKey +#: libraries/cryptolib4pascal/ClpDHPublicKeyParameters.pas:34 +msgid "Invalid DH public key \"Y\"" +msgstr "" + +#. Programmer's name for it: SInvalidYInCorrectGroup +#. Programmer's name for it: SInvalidYInCorrectGroup +#: libraries/cryptolib4pascal/ClpDHPublicKeyParameters.pas:35 +#: libraries/cryptolib4pascal/ClpDsaPublicKeyParameters.pas:33 +msgid "\"Y\" Value Does Not Appear To Be In Correct Group" +msgstr "" + +#. Programmer's name for it: SSeedNil +#. Programmer's name for it: SSeedNil +#: libraries/cryptolib4pascal/ClpDHValidationParameters.pas:30 +#: libraries/cryptolib4pascal/ClpDsaValidationParameters.pas:30 +msgid "\"Seed\" Cannot Be Nil" +msgstr "" + +#. Programmer's name for it: SSeedNil +#: libraries/cryptolib4pascal/ClpDHValidationParams.pas:32 +msgid "Seed Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SPGenCounterNil +#: libraries/cryptolib4pascal/ClpDHValidationParams.pas:33 +msgid "PGenCounter Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SInvalidDHValidationParams +#: libraries/cryptolib4pascal/ClpDHValidationParams.pas:35 +msgid "Invalid DHValidationParams: %s" +msgstr "" + +#. Programmer's name for it: SOutputBufferTooShort +#. Programmer's name for it: SOutputBufferTooShort +#. Programmer's name for it: SOutputBufferTooShort +#. Programmer's name for it: SOutputBufferTooShort +#. Programmer's name for it: SOutputBufferTooShort +#: libraries/cryptolib4pascal/ClpDigest.pas:31 +#: libraries/cryptolib4pascal/ClpHMac.pas:34 +#: libraries/hashlib4pascal/HlpBlake2B.pas:27 +#: libraries/hashlib4pascal/HlpBlake2S.pas:27 +#: libraries/hashlib4pascal/HlpSHA3.pas:29 +msgid "Output Buffer Too Short" +msgstr "" + +#. Programmer's name for it: SUnRecognizedDigest +#: libraries/cryptolib4pascal/ClpDigestUtilities.pas:43 +msgid "Digest \"%s\" not recognised." +msgstr "" + +#. Programmer's name for it: SPrivateKey +#. Programmer's name for it: SPrivateKey +#: libraries/cryptolib4pascal/ClpDsaDigestSigner.pas:41 +#: libraries/cryptolib4pascal/ClpSchnorrDigestSigner.pas:40 +msgid "Signing Requires Private Key." +msgstr "" + +#. Programmer's name for it: SPublicKey +#. Programmer's name for it: SPublicKey +#: libraries/cryptolib4pascal/ClpDsaDigestSigner.pas:42 +#: libraries/cryptolib4pascal/ClpSchnorrDigestSigner.pas:41 +msgid "Verification Requires Public Key." +msgstr "" + +#. Programmer's name for it: SPublicKey +#: libraries/cryptolib4pascal/ClpDsaDigestSigner.pas:44 +msgid "DSADigestSigner not Initialized for Signature Generation." +msgstr "" + +#. Programmer's name for it: SPublicKey +#: libraries/cryptolib4pascal/ClpDsaDigestSigner.pas:46 +msgid "DSADigestSigner not Initialized for Verification" +msgstr "" + +#. Programmer's name for it: SEncodingError +#. Programmer's name for it: SEncodingError +#: libraries/cryptolib4pascal/ClpDsaDigestSigner.pas:47 +#: libraries/cryptolib4pascal/ClpSchnorrDigestSigner.pas:46 +msgid "Unable to Encode Signature" +msgstr "" + +#. Programmer's name for it: SInvalidDsaParameter +#: libraries/cryptolib4pascal/ClpDsaParameter.pas:33 +msgid "Invalid DsaParameter: %s" +msgstr "" + +#. Programmer's name for it: SQUnInitialized +#: libraries/cryptolib4pascal/ClpDsaParameters.pas:33 +msgid "\"Q\" Cannot Be Uninitialized" +msgstr "" + +#: libraries/cryptolib4pascal/ClpDsaParametersGenerator.pas:44 +msgid "L Values Must be Between 1024 and 3072 and a Multiple of 1024" +msgstr "" + +#. Programmer's name for it: SInvalidNValueForSpecifiedL +#: libraries/cryptolib4pascal/ClpDsaParametersGenerator.pas:45 +msgid "N Must be \" %d \" for L = \" %d \"" +msgstr "" + +#. Programmer's name for it: SInvalidNValueForSpecifiedL_Two +#: libraries/cryptolib4pascal/ClpDsaParametersGenerator.pas:46 +msgid "N Must be \" %d \" or \" %d \" for L = \" %d \"" +msgstr "" + +#. Programmer's name for it: SInvalidNValueForSpecifiedL_Two +#: libraries/cryptolib4pascal/ClpDsaParametersGenerator.pas:48 +msgid "Digest Output Size Too Small for Value of N Which is \" %d \"" +msgstr "" + +#. Programmer's name for it: SInvalidNValueForSpecifiedL_Two +#: libraries/cryptolib4pascal/ClpDsaParametersGenerator.pas:50 +msgid "Can Only Use SHA-1 For Generating FIPS 186-2 Parameters" +msgstr "" + +#. Programmer's name for it: SInvalidNValueForSpecifiedL_Two +#: libraries/cryptolib4pascal/ClpDsaParametersGenerator.pas:52 +msgid "Size Must Be From %d - %d and a multiple of %d, \"%d\"" +msgstr "" + +#. Programmer's name for it: SDSAPrivateKeyNotFound +#: libraries/cryptolib4pascal/ClpDsaSigner.pas:44 +msgid "DSA Private Key Required For Signing" +msgstr "" + +#. Programmer's name for it: SDSAPublicKeyNotFound +#: libraries/cryptolib4pascal/ClpDsaSigner.pas:45 +msgid "DSA Public Key Required For Verification" +msgstr "" + +#: libraries/cryptolib4pascal/ClpECAlgorithms.pas:43 +msgid "" +"Point and Scalar Arrays Should be Non-Null, and of Equal, Non-Zero, Length" +msgstr "" + +#. Programmer's name for it: SInvalidPointLocation +#: libraries/cryptolib4pascal/ClpECAlgorithms.pas:44 +msgid "Point Must be on the Same Curve" +msgstr "" + +#. Programmer's name for it: SInvalidPoint +#: libraries/cryptolib4pascal/ClpECAlgorithms.pas:45 +msgid "Invalid Point, \"P\"" +msgstr "" + +#. Programmer's name for it: SInvalidResult +#: libraries/cryptolib4pascal/ClpECAlgorithms.pas:46 +msgid "Invalid Result" +msgstr "" + +#. Programmer's name for it: SInvalidResult +#: libraries/cryptolib4pascal/ClpECAlgorithms.pas:48 +#: libraries/cryptolib4pascal/ClpMultipliers.pas:46 +msgid "Fixed-Point Comb Doesn't Support Scalars Larger Than The Curve Order" +msgstr "" + +#. Programmer's name for it: SInvalidValue +#: libraries/cryptolib4pascal/ClpECC.pas:52 +msgid "Value Invalid in Fp Field Element, \" x \"" +msgstr "" + +#. Programmer's name for it: SInvalidValue2 +#: libraries/cryptolib4pascal/ClpECC.pas:53 +msgid "Value Invalid in F2m Field Element, \"x\"" +msgstr "" + +#. Programmer's name for it: SInvalidK2Value +#: libraries/cryptolib4pascal/ClpECC.pas:54 +msgid "k2 must be smaller than k3" +msgstr "" + +#. Programmer's name for it: SInvalidK2Value2 +#: libraries/cryptolib4pascal/ClpECC.pas:55 +msgid "k2 must be larger than 0" +msgstr "" + +#. Programmer's name for it: SInvalidK2Value2 +#: libraries/cryptolib4pascal/ClpECC.pas:57 +msgid "Field elements are not both instances of F2mFieldElement" +msgstr "" + +#. Programmer's name for it: SInvalidK2Value2 +#: libraries/cryptolib4pascal/ClpECC.pas:59 +msgid "Field elements are not elements of the same field F2m" +msgstr "" + +#. Programmer's name for it: SInvalidK2Value2 +#: libraries/cryptolib4pascal/ClpECC.pas:61 +msgid "One of the F2m field elements has incorrect representation" +msgstr "" + +#. Programmer's name for it: SEvenValue +#: libraries/cryptolib4pascal/ClpECC.pas:62 +msgid "Even Value of Q" +msgstr "" + +#. Programmer's name for it: STraceInternalErrorCalculation +#: libraries/cryptolib4pascal/ClpECC.pas:63 +msgid "Internal Error in Trace Calculation" +msgstr "" + +#. Programmer's name for it: SHalfTraceUndefinedForM +#: libraries/cryptolib4pascal/ClpECC.pas:64 +msgid "Half-Trace Only Defined For Odd M" +msgstr "" + +#. Programmer's name for it: SUnSupportedCoordinateSystem +#: libraries/cryptolib4pascal/ClpECC.pas:65 +msgid "UnSupported Coordinate System" +msgstr "" + +#. Programmer's name for it: SCurrentCurve +#: libraries/cryptolib4pascal/ClpECC.pas:66 +msgid "Implementation returned Current Curve" +msgstr "" + +#. Programmer's name for it: SInvalidPointCoordinates +#: libraries/cryptolib4pascal/ClpECC.pas:67 +msgid "Invalid Point Coordinates" +msgstr "" + +#. Programmer's name for it: SInvalidAffineCoordinates +#: libraries/cryptolib4pascal/ClpECC.pas:68 +msgid "not valid for affine coordinates, \"iso\"" +msgstr "" + +#. Programmer's name for it: SInvalidPointOnCurve +#: libraries/cryptolib4pascal/ClpECC.pas:69 +msgid "must be non-null and on this curve, \"point\"" +msgstr "" + +#. Programmer's name for it: SInvalidPointOnCurve2 +#: libraries/cryptolib4pascal/ClpECC.pas:70 +msgid "Entries must be null or on this curve, \"points\"" +msgstr "" + +#. Programmer's name for it: SPointsNil +#: libraries/cryptolib4pascal/ClpECC.pas:71 +msgid "points" +msgstr "" + +#. Programmer's name for it: SInvalidRangeSpecified +#: libraries/cryptolib4pascal/ClpECC.pas:72 +msgid "Invalid Range Specified\", \"points\"" +msgstr "" + +#. Programmer's name for it: SInvalidPointCompression +#: libraries/cryptolib4pascal/ClpECC.pas:73 +msgid "Invalid Point Compression" +msgstr "" + +#. Programmer's name for it: SInvalidK1 +#: libraries/cryptolib4pascal/ClpECC.pas:74 +msgid "k1 must be > 0" +msgstr "" + +#. Programmer's name for it: SInvalidK3 +#: libraries/cryptolib4pascal/ClpECC.pas:75 +msgid "k3 must be 0 if k2 == 0" +msgstr "" + +#. Programmer's name for it: SK2K1MisMatch +#: libraries/cryptolib4pascal/ClpECC.pas:76 +msgid "k2 must be > k1" +msgstr "" + +#. Programmer's name for it: SK3K2Mismatch +#: libraries/cryptolib4pascal/ClpECC.pas:77 +msgid "k3 must be > k2" +msgstr "" + +#. Programmer's name for it: SInvalidInfinityEncoding +#: libraries/cryptolib4pascal/ClpECC.pas:78 +msgid "Invalid Infinity Encoding, \"encoded\"" +msgstr "" + +#. Programmer's name for it: SInvalidPointEncoding +#: libraries/cryptolib4pascal/ClpECC.pas:79 +msgid "Invalid Point Encoding %u" +msgstr "" + +#. Programmer's name for it: SInvalidPointEncoding +#: libraries/cryptolib4pascal/ClpECC.pas:81 +msgid "Incorrect Length for infinity encoding\", \"encoded\"" +msgstr "" + +#. Programmer's name for it: SInvalidPointEncoding +#: libraries/cryptolib4pascal/ClpECC.pas:83 +msgid "Incorrect Length for Compressed Encoding\", \"encoded\"" +msgstr "" + +#. Programmer's name for it: SInvalidPoint +#: libraries/cryptolib4pascal/ClpECC.pas:84 +msgid "Invalid Point" +msgstr "" + +#. Programmer's name for it: SInvalidPoint +#: libraries/cryptolib4pascal/ClpECC.pas:86 +msgid "Incorrect Length for UnCompressed Encoding\", \"encoded\"" +msgstr "" + +#. Programmer's name for it: SInvalidPoint +#: libraries/cryptolib4pascal/ClpECC.pas:88 +msgid "Incorrect Length for Hybrid Encoding\", \"encoded\"" +msgstr "" + +#. Programmer's name for it: SInvalidPoint +#: libraries/cryptolib4pascal/ClpECC.pas:90 +msgid "Inconsistent Y Coordinate in Hybrid Encoding\", \"encoded\"" +msgstr "" + +#. Programmer's name for it: SUnknownCoordSystem +#: libraries/cryptolib4pascal/ClpECC.pas:91 +msgid "Unknown Coordinate System" +msgstr "" + +#. Programmer's name for it: SPointNotInNormalForm +#: libraries/cryptolib4pascal/ClpECC.pas:92 +msgid "Point not in Normal Form" +msgstr "" + +#. Programmer's name for it: SNotProjectiveCoordSystem +#: libraries/cryptolib4pascal/ClpECC.pas:93 +msgid "Not a Projective Coordinate System" +msgstr "" + +#. Programmer's name for it: SCannotBeNegative +#: libraries/cryptolib4pascal/ClpECC.pas:94 +msgid "Cannot be Negative, \"e\"" +msgstr "" + +#. Programmer's name for it: SNilFieldElement +#: libraries/cryptolib4pascal/ClpECC.pas:95 +msgid "Exactly one of the Field Elements is Nil" +msgstr "" + +#. Programmer's name for it: SUnsupportedOperation +#: libraries/cryptolib4pascal/ClpECC.pas:96 +msgid "Constant-time Lookup not Supported" +msgstr "" + +#. Programmer's name for it: SInvalidRange +#: libraries/cryptolib4pascal/ClpECCompUtilities.pas:43 +msgid "Must be in the Range [2, 16], \"width\"" +msgstr "" + +#. Programmer's name for it: SInvalidRange2 +#: libraries/cryptolib4pascal/ClpECCompUtilities.pas:44 +msgid "Must be in the Range [2, 8], \"width\"" +msgstr "" + +#. Programmer's name for it: SWrongDomainParameter +#: libraries/cryptolib4pascal/ClpECDHBasicAgreement.pas:39 +msgid "ECDH Public Key has Wrong Domain Parameters" +msgstr "" + +#. Programmer's name for it: SInvalidAgreementValue +#: libraries/cryptolib4pascal/ClpECDHBasicAgreement.pas:40 +msgid "Infinity is not a Valid Agreement Value for ECDH" +msgstr "" + +#. Programmer's name for it: SInfinityInvalidPublicKey +#: libraries/cryptolib4pascal/ClpECDHBasicAgreement.pas:41 +msgid "Infinity is not a Valid Public Key for ECDH" +msgstr "" + +#. Programmer's name for it: SWrongDomainParameter +#: libraries/cryptolib4pascal/ClpECDHCBasicAgreement.pas:39 +msgid "ECDHC Public Key has Wrong Domain Parameters" +msgstr "" + +#. Programmer's name for it: SInvalidAgreementValue +#: libraries/cryptolib4pascal/ClpECDHCBasicAgreement.pas:40 +msgid "Infinity is not a Valid Agreement Value for ECDHC" +msgstr "" + +#. Programmer's name for it: SInfinityInvalidPublicKey +#: libraries/cryptolib4pascal/ClpECDHCBasicAgreement.pas:41 +msgid "Infinity is not a Valid Public Key for ECDHC" +msgstr "" + +#. Programmer's name for it: SCurveNil +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:33 +msgid "Curve Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SScalarNil +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:34 +msgid "Scalar Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SBigIntegerNotInitialized +#. Programmer's name for it: SBigIntegerNotInitialized +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:36 +#: libraries/cryptolib4pascal/ClpECPrivateKeyParameters.pas:32 +msgid "BigInteger Not Initialized \"%s\"" +msgstr "" + +#. Programmer's name for it: SQInfinity +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:38 +msgid "Point at Infinity \"Q\"" +msgstr "" + +#. Programmer's name for it: SQPointNotOnCurve +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:39 +msgid "Point Not on Curve \"Q\"" +msgstr "" + +#. Programmer's name for it: SScalarInvalidRange +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:40 +msgid "Scalar is not in the Interval [1, n - 1]" +msgstr "" + +#. Programmer's name for it: SECPublicKeyNotFound +#. Programmer's name for it: SECPublicKeyNotFound +#. Programmer's name for it: SECPublicKeyNotFound +#: libraries/cryptolib4pascal/ClpECDsaSigner.pas:47 +#: libraries/cryptolib4pascal/ClpECNRSigner.pas:47 +#: libraries/cryptolib4pascal/ClpECSchnorrSipaSigner.pas:45 +msgid "EC Public Key Required for Verification" +msgstr "" + +#. Programmer's name for it: SECPrivateKeyNotFound +#. Programmer's name for it: SECPrivateKeyNotFound +#. Programmer's name for it: SECPrivateKeyNotFound +#: libraries/cryptolib4pascal/ClpECDsaSigner.pas:48 +#: libraries/cryptolib4pascal/ClpECNRSigner.pas:48 +#: libraries/cryptolib4pascal/ClpECSchnorrSipaSigner.pas:46 +msgid "EC Private Key Required for Signing" +msgstr "" + +#. Programmer's name for it: SSenderPublicKeyInvalid +#: libraries/cryptolib4pascal/ClpECIESPublicKeyParser.pas:35 +msgid "Sender's Public Key Invalid." +msgstr "" + +#. Programmer's name for it: SSenderPublicKeyInvalid +#: libraries/cryptolib4pascal/ClpECIESPublicKeyParser.pas:37 +msgid "Sender's Public Key has Invalid Point Encoding \"%x\"" +msgstr "" + +#. Programmer's name for it: SAlgorithmNil +#. Programmer's name for it: SAlgorithmNil +#: libraries/cryptolib4pascal/ClpECKeyPairGenerator.pas:56 +#: libraries/cryptolib4pascal/ClpECKeyParameters.pas:39 +msgid "Algorithm Cannot be Empty" +msgstr "" + +#. Programmer's name for it: SInvalidKeySize +#: libraries/cryptolib4pascal/ClpECKeyPairGenerator.pas:57 +msgid "Unknown Key Size \"%d\"" +msgstr "" + +#. Programmer's name for it: SParameterNil +#: libraries/cryptolib4pascal/ClpECKeyParameters.pas:40 +msgid "Parameter Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SUnRecognizedAlgorithm +#: libraries/cryptolib4pascal/ClpECKeyParameters.pas:41 +msgid "Unrecognised Algorithm: \" %s, \"Algorithm" +msgstr "" + +#. Programmer's name for it: SNotInitializedForSigning +#. Programmer's name for it: SNotInitializedForSigning +#: libraries/cryptolib4pascal/ClpECNRSigner.pas:49 +#: libraries/cryptolib4pascal/ClpECSchnorrSipaSigner.pas:47 +msgid "Not Initialised For Signing" +msgstr "" + +#. Programmer's name for it: SNotInitializedForVerifying +#. Programmer's name for it: SNotInitializedForVerifying +#: libraries/cryptolib4pascal/ClpECNRSigner.pas:50 +#: libraries/cryptolib4pascal/ClpECSchnorrSipaSigner.pas:48 +msgid "Not Initialised For Verifying" +msgstr "" + +#. Programmer's name for it: SNotInitializedForVerifying +#: libraries/cryptolib4pascal/ClpECNRSigner.pas:52 +msgid "Not Initialised For Verifying/Recovery" +msgstr "" + +#. Programmer's name for it: SInputTooLargeForECNRKey +#: libraries/cryptolib4pascal/ClpECNRSigner.pas:53 +msgid "Input Too Large For ECNR Key." +msgstr "" + +#. Programmer's name for it: SSignatureGenerationError +#: libraries/cryptolib4pascal/ClpECSchnorrSipaSigner.pas:49 +msgid "An Error Occurred During Signature Generation" +msgstr "" + +#. Programmer's name for it: SSignatureGenerationError +#: libraries/cryptolib4pascal/ClpECSchnorrSipaSigner.pas:51 +msgid "" +"Only FP (Prime Field) Curves are Allowed for This Schnorr Implementation" +msgstr "" + +#. Programmer's name for it: SInvalidCtx +#: libraries/cryptolib4pascal/ClpEd25519.pas:40 +msgid "ctx" +msgstr "" + +#. Programmer's name for it: SDigestError +#: libraries/cryptolib4pascal/ClpEd25519.pas:41 +msgid "Digest Produced Insufficient Data" +msgstr "" + +#. Programmer's name for it: SEOFInPrivateKey +#: libraries/cryptolib4pascal/ClpEd25519Blake2BPrivateKeyParameters.pas:38 +msgid "EOF encountered in middle of Ed25519Blake2B private key" +msgstr "" + +#. Programmer's name for it: SUnsupportedAlgorithm +#. Programmer's name for it: SUnsupportedAlgorithm +#: libraries/cryptolib4pascal/ClpEd25519Blake2BPrivateKeyParameters.pas:39 +#: libraries/cryptolib4pascal/ClpEd25519PrivateKeyParameters.pas:39 +msgid "Unsupported Algorithm" +msgstr "" + +#. Programmer's name for it: SCtxNotNil +#. Programmer's name for it: SCtxNotNil +#: libraries/cryptolib4pascal/ClpEd25519Blake2BPrivateKeyParameters.pas:40 +#: libraries/cryptolib4pascal/ClpEd25519PrivateKeyParameters.pas:40 +msgid "Ctx must be Nil for Ed25519 Algorithm" +msgstr "" + +#. Programmer's name for it: SMsgLen +#. Programmer's name for it: SMsgLen +#: libraries/cryptolib4pascal/ClpEd25519Blake2BPrivateKeyParameters.pas:41 +#: libraries/cryptolib4pascal/ClpEd25519PrivateKeyParameters.pas:41 +msgid "MsgLen must be Equal to \"PreHashSize\" for Ed25519ph Algorithm" +msgstr "" + +#. Programmer's name for it: SEOFInPublicKey +#: libraries/cryptolib4pascal/ClpEd25519Blake2BPublicKeyParameters.pas:34 +msgid "EOF encountered in middle of Ed25519Blake2B public key" +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519Blake2BSigner.pas:37 +msgid "Ed25519Blake2BSigner not Initialised for Signature Generation." +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519Blake2BSigner.pas:39 +msgid "Ed25519Blake2BSigner not Initialised for Verification" +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519CtxBlake2BSigner.pas:37 +msgid "Ed25519CtxBlake2BSigner not Initialised for Signature Generation." +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519CtxBlake2BSigner.pas:39 +msgid "Ed25519CtxBlake2BSigner not Initialised for Verification" +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519CtxSigner.pas:37 +msgid "Ed25519CtxSigner not Initialised for Signature Generation." +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519CtxSigner.pas:39 +msgid "Ed25519CtxSigner not Initialised for Verification" +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519PhBlake2BSigner.pas:37 +msgid "Ed25519PhBlake2BSigner not Initialised for Signature Generation." +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519PhBlake2BSigner.pas:39 +msgid "Ed25519PhBlake2BSigner not Initialised for Verification" +msgstr "" + +#. Programmer's name for it: SPreHashDigestFailed +#. Programmer's name for it: SPreHashDigestFailed +#: libraries/cryptolib4pascal/ClpEd25519PhBlake2BSigner.pas:40 +#: libraries/cryptolib4pascal/ClpEd25519PhSigner.pas:40 +msgid "PreHash Digest Failed" +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519PhSigner.pas:37 +msgid "Ed25519PhSigner not Initialised for Signature Generation." +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519PhSigner.pas:39 +msgid "Ed25519PhSigner not Initialised for Verification" +msgstr "" + +#. Programmer's name for it: SEOFInPrivateKey +#: libraries/cryptolib4pascal/ClpEd25519PrivateKeyParameters.pas:38 +msgid "EOF encountered in middle of Ed25519 private key" +msgstr "" + +#. Programmer's name for it: SEOFInPublicKey +#: libraries/cryptolib4pascal/ClpEd25519PublicKeyParameters.pas:34 +msgid "EOF encountered in middle of Ed25519 public key" +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519Signer.pas:37 +msgid "Ed25519Signer not Initialised for Signature Generation." +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519Signer.pas:39 +msgid "Ed25519Signer not Initialised for Verification" +msgstr "" + +#. Programmer's name for it: SInvalidCharacteristic +#: libraries/cryptolib4pascal/ClpFiniteFields.pas:35 +msgid "Must be >= 2 , \" characteristic \"" +msgstr "" + +#. Programmer's name for it: SInvalidCharacteristic +#: libraries/cryptolib4pascal/ClpFiniteFields.pas:37 +msgid "" +"Irreducible polynomials in GF(2) must have constant term, \"exponents\"" +msgstr "" + +#. Programmer's name for it: SInvalidCharacteristic +#: libraries/cryptolib4pascal/ClpFiniteFields.pas:39 +msgid "Polynomial Exponents must be montonically increasing\", \"exponents\"" +msgstr "" + +#. Programmer's name for it: SKeyGeneratorAlgorithmNotRecognised +#: libraries/cryptolib4pascal/ClpGeneratorUtilities.pas:52 +msgid "KeyGenerator \"%s\" not Recognised." +msgstr "" + +#. Programmer's name for it: SKeyGeneratorAlgorithmNotRecognised +#: libraries/cryptolib4pascal/ClpGeneratorUtilities.pas:54 +msgid "KeyGenerator \"%s\" ( \"%s\" ) not Supported." +msgstr "" + +#. Programmer's name for it: SKeyGeneratorAlgorithmNotRecognised +#: libraries/cryptolib4pascal/ClpGeneratorUtilities.pas:56 +msgid "KeyPairGenerator \"%s\" not Recognised." +msgstr "" + +#. Programmer's name for it: SKeyGeneratorAlgorithmNotRecognised +#: libraries/cryptolib4pascal/ClpGeneratorUtilities.pas:58 +msgid "KeyPairGenerator \"%s\" ( \"%s\" ) not Supported." +msgstr "" + +#. Programmer's name for it: SSizeTooBigHKDF +#: libraries/cryptolib4pascal/ClpHkdfBytesGenerator.pas:39 +msgid "HKDF Cannot Generate More Than 255 Blocks of HashLen Size" +msgstr "" + +#. Programmer's name for it: SSizeTooBigHKDF2 +#: libraries/cryptolib4pascal/ClpHkdfBytesGenerator.pas:40 +msgid "HKDF May Only Be Used For 255 * HashLen Bytes of Output" +msgstr "" + +#. Programmer's name for it: SSizeTooBigHKDF2 +#: libraries/cryptolib4pascal/ClpHkdfBytesGenerator.pas:42 +msgid "HKDF Parameters Required For \"HkdfBytesGenerator\", \"parameters\"" +msgstr "" + +#. Programmer's name for it: SIKMNil +#: libraries/cryptolib4pascal/ClpHkdfParameters.pas:30 +msgid "\"ikm\" is Nil" +msgstr "" + +#. Programmer's name for it: SUnSupportedOperation +#. Programmer's name for it: SUnSupportedOperation +#: libraries/cryptolib4pascal/ClpHMacDsaKCalculator.pas:42 +#: libraries/cryptolib4pascal/ClpRandomDsaKCalculator.pas:34 +msgid "Operation not Supported" +msgstr "" + +#: libraries/cryptolib4pascal/ClpIESCipher.pas:54 +msgid "Must be Passed Recipient's Public EC Key for Encryption" +msgstr "" + +#: libraries/cryptolib4pascal/ClpIESCipher.pas:56 +msgid "Must be Passed Recipient's Private EC Key for Decryption" +msgstr "" + +#. Programmer's name for it: SIAlgorithmParameterSpecNil +#: libraries/cryptolib4pascal/ClpIESCipher.pas:57 +msgid "Parameter Spec Cannot Be Nil" +msgstr "" + +#. Programmer's name for it: SUnableToProcessBlock +#: libraries/cryptolib4pascal/ClpIESCipher.pas:58 +msgid "Unable to Process Block. \"%s\"" +msgstr "" + +#. Programmer's name for it: SIESParameterSpecError +#: libraries/cryptolib4pascal/ClpIESCipher.pas:59 +msgid "Must be Passed IES Parameter Spec" +msgstr "" + +#. Programmer's name for it: SNonceInvalidLength +#: libraries/cryptolib4pascal/ClpIESCipher.pas:60 +msgid "Nonce in IES Parameters Needs to be \"%s\" Bytes Long" +msgstr "" + +#: libraries/cryptolib4pascal/ClpIESEngine.pas:53 +#: libraries/cryptolib4pascal/ClpPascalCoinIESEngine.pas:45 +msgid "Unable to Recover Ephemeral Public Key: \"%s\"" +msgstr "" + +#: libraries/cryptolib4pascal/ClpIESEngine.pas:55 +#: libraries/cryptolib4pascal/ClpPascalCoinIESEngine.pas:47 +msgid "Length of Input Must be Greater than the MAC and V Combined" +msgstr "" + +#. Programmer's name for it: SInvalidMAC +#. Programmer's name for it: SInvalidMAC +#: libraries/cryptolib4pascal/ClpIESEngine.pas:56 +#: libraries/cryptolib4pascal/ClpPascalCoinIESEngine.pas:48 +msgid "Invalid MAC" +msgstr "" + +#. Programmer's name for it: SRandomNil +#: libraries/cryptolib4pascal/ClpKeyGenerationParameters.pas:30 +msgid "Random Class Instance Can't Be Nil" +msgstr "" + +#. Programmer's name for it: SInvalidStrength +#: libraries/cryptolib4pascal/ClpKeyGenerationParameters.pas:31 +msgid "Strength Must Be Greater Than Zero But Was Given %d" +msgstr "" + +#. Programmer's name for it: SKeyNil +#: libraries/cryptolib4pascal/ClpKeyParameter.pas:31 +msgid "Key Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SInvalidKeyOffSet +#: libraries/cryptolib4pascal/ClpKeyParameter.pas:32 +msgid "Invalid Key OffSet" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/cryptolib4pascal/ClpKeyParameter.pas:33 +msgid "Invalid Key Length" +msgstr "" + +#. Programmer's name for it: SInvalidF2MFieldValue +#: libraries/cryptolib4pascal/ClpLongArray.pas:34 +msgid "Invalid F2M Field value, \"bigInt\"" +msgstr "" + +#. Programmer's name for it: SUnRecognizedMac +#: libraries/cryptolib4pascal/ClpMacUtilities.pas:40 +msgid "Mac \"%s\" not recognised." +msgstr "" + +#. Programmer's name for it: SCannotBeZero +#: libraries/cryptolib4pascal/ClpMod.pas:35 +msgid "cannot be 0, \"x\"" +msgstr "" + +#. Programmer's name for it: SCurveUnknownGroupOrder +#: libraries/cryptolib4pascal/ClpMultipliers.pas:47 +msgid "Need Curve With Known Group Order, \"curve\"" +msgstr "" + +#. Programmer's name for it: SInCompatiblePoint +#: libraries/cryptolib4pascal/ClpMultipliers.pas:48 +msgid "Only AbstractF2mPoint can be used in WTauNafMultiplier" +msgstr "" + +#: libraries/cryptolib4pascal/ClpOSRandom.pas:72 +msgid "" +"An Error Occured while generating random data using MS Windows Cryptography " +"API." +msgstr "" + +#: libraries/cryptolib4pascal/ClpOSRandom.pas:76 +msgid "" +"An Error Occured while generating random data using SecRandomCopyBytes API." +msgstr "" + +#: libraries/cryptolib4pascal/ClpOSRandom.pas:80 +#: libraries/cryptolib4pascal/ClpOSRandom.pas:84 +msgid "An Error Occured while generating random data using getRandom API" +msgstr "" + +#: libraries/cryptolib4pascal/ClpOSRandom.pas:88 +msgid "" +"An Error Occured while generating random data using arc4random_buf API." +msgstr "" + +#. Programmer's name for it: SIncompleteLastBlockInDecryption +#: libraries/cryptolib4pascal/ClpPaddedBufferedBlockCipher.pas:41 +msgid "Last Block Incomplete in Decryption" +msgstr "" + +#. Programmer's name for it: SCorruptedPadBlock +#: libraries/cryptolib4pascal/ClpPaddingModes.pas:32 +msgid "Pad Block Corrupted" +msgstr "" + +#. Programmer's name for it: SIVNil +#: libraries/cryptolib4pascal/ClpParametersWithIV.pas:31 +msgid "IV Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SParameters +#: libraries/cryptolib4pascal/ClpParametersWithRandom.pas:32 +msgid "Parameters" +msgstr "" + +#. Programmer's name for it: SRandom +#: libraries/cryptolib4pascal/ClpParametersWithRandom.pas:33 +msgid "Random" +msgstr "" + +#. Programmer's name for it: SAlgorithmNotRecognised +#: libraries/cryptolib4pascal/ClpParameterUtilities.pas:38 +msgid "Algorithm \"%s\" not Recognised." +msgstr "" + +#. Programmer's name for it: SKDFParameterNotFound +#: libraries/cryptolib4pascal/ClpPascalCoinECIESKdfBytesGenerator.pas:37 +msgid "" +"Specified Hash Cannot Produce Sufficient Data for the Specified Operation." +msgstr "" + +#. Programmer's name for it: SCipherCannotbeNilInThisMode +#: libraries/cryptolib4pascal/ClpPascalCoinIESEngine.pas:49 +msgid "Cipher Cannot be Nil in This Mode." +msgstr "" + +#. Programmer's name for it: SBufferNil +#: libraries/cryptolib4pascal/ClpRandom.pas:30 +msgid "Buffer Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SMaxValueNegative +#: libraries/cryptolib4pascal/ClpRandom.pas:31 +msgid "maxValue Must be Positive" +msgstr "" + +#. Programmer's name for it: SInvalidMinValue +#: libraries/cryptolib4pascal/ClpRandom.pas:32 +msgid "minValue Cannot be Greater Than maxValue" +msgstr "" + +#. Programmer's name for it: SUnknownAlgorithm +#: libraries/cryptolib4pascal/ClpRandomNumberGenerator.pas:31 +msgid "Unknown Random Generation Algorithm Requested" +msgstr "" + +#. Programmer's name for it: SUnknownAlgorithm +#: libraries/cryptolib4pascal/ClpRandomNumberGenerator.pas:33 +msgid "Random Number Generator Output Buffer Cannot Be Nil" +msgstr "" + +#. Programmer's name for it: SUnsupportedBlock +#: libraries/cryptolib4pascal/ClpRijndaelEngine.pas:37 +msgid "Unknown Blocksize to Rijndael" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/cryptolib4pascal/ClpRijndaelEngine.pas:38 +msgid "Key Length not 128/160/192/224/256 bits." +msgstr "" + +#. Programmer's name for it: SRijndaelEngineNotInitialised +#: libraries/cryptolib4pascal/ClpRijndaelEngine.pas:39 +msgid "Rijndael Engine not Initialised" +msgstr "" + +#. Programmer's name for it: SRijndaelEngineNotInitialised +#: libraries/cryptolib4pascal/ClpRijndaelEngine.pas:41 +msgid "Invalid Parameter Passed to Rijndael Init - \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidRound +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:38 +msgid "\"rounds\" Must be a Positive, Even Number" +msgstr "" + +#. Programmer's name for it: SInvalidKeySize +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:39 +msgid "%s Requires 128 bit or 256 bit key" +msgstr "" + +#. Programmer's name for it: SMaxByteExceeded +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:40 +msgid "2^70 Byte Limit per IV; Change IV" +msgstr "" + +#. Programmer's name for it: SMaxByteExceededTwo +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:41 +msgid "2^70 byte limit per IV would be exceeded; Change IV" +msgstr "" + +#. Programmer's name for it: SEngineNotInitialized +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:42 +msgid "%s not Initialized" +msgstr "" + +#. Programmer's name for it: SRoundsMustbeEven +#. Programmer's name for it: SRoundsMustBeEven +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:45 +#: libraries/hashlib4pascal/HlpPBKDF_ScryptNotBuildInAdapter.pas:37 +msgid "Number of Rounds Must be Even" +msgstr "" + +#. Programmer's name for it: SIVRequired +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:47 +msgid "%s Init Requires an IV, \"parameters\"" +msgstr "" + +#. Programmer's name for it: SInvalidIV +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:48 +msgid "%s Requires exactly %d bytes of IV" +msgstr "" + +#. Programmer's name for it: SInvalidIV +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:50 +msgid "%s Init Parameters must Contain a KeyParameter (or null for Re-Init)" +msgstr "" + +#. Programmer's name for it: SInvalidIV +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:52 +msgid "KeyParameter can not be null for First Initialisation" +msgstr "" + +#. Programmer's name for it: SInvalidParameters +#: libraries/cryptolib4pascal/ClpScalarSplitParameters.pas:30 +msgid "\"%s\" must consist of exactly 2 (initialized) values" +msgstr "" + +#. Programmer's name for it: SPublicKey +#: libraries/cryptolib4pascal/ClpSchnorrDigestSigner.pas:43 +msgid "SchnorrDigestSigner not Initialized for Signature Generation." +msgstr "" + +#. Programmer's name for it: SPublicKey +#: libraries/cryptolib4pascal/ClpSchnorrDigestSigner.pas:45 +msgid "SchnorrDigestSigner not Initialized for Verification" +msgstr "" + +#: libraries/cryptolib4pascal/ClpSecP256K1Custom.pas:40 +msgid "Value Invalid for SecP256K1FieldElement \"%s\"" +msgstr "" + +#: libraries/cryptolib4pascal/ClpSecP256R1Custom.pas:40 +msgid "Value Invalid for SecP256R1FieldElement \"%s\"" +msgstr "" + +#: libraries/cryptolib4pascal/ClpSecP384R1Custom.pas:40 +msgid "Value Invalid for SecP384R1FieldElement \"%s\"" +msgstr "" + +#: libraries/cryptolib4pascal/ClpSecP521R1Custom.pas:40 +msgid "Value Invalid for SecP521R1FieldElement \"%s\"" +msgstr "" + +#: libraries/cryptolib4pascal/ClpSecT283Custom.pas:41 +msgid "Value Invalid for SecT283FieldElement \"%s\"" +msgstr "" + +#. Programmer's name for it: SUnRecognisedPRNGAlgorithm +#: libraries/cryptolib4pascal/ClpSecureRandom.pas:43 +msgid "Unrecognised PRNG Algorithm: %s \"algorithm\"" +msgstr "" + +#. Programmer's name for it: SCannotBeNegative +#: libraries/cryptolib4pascal/ClpSecureRandom.pas:44 +msgid "Cannot be Negative \"maxValue\"" +msgstr "" + +#. Programmer's name for it: SInvalidMaxValue +#: libraries/cryptolib4pascal/ClpSecureRandom.pas:45 +msgid "maxValue Cannot be Less Than minValue" +msgstr "" + +#. Programmer's name for it: SMalformedSignature +#: libraries/cryptolib4pascal/ClpSignersEncodings.pas:35 +msgid "Malformed signature, \"%s\"" +msgstr "" + +#. Programmer's name for it: SValueOutOfRange +#: libraries/cryptolib4pascal/ClpSignersEncodings.pas:36 +msgid "Value out of range, \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidEncodingLength +#: libraries/cryptolib4pascal/ClpSignersEncodings.pas:37 +msgid "Encoding has incorrect length, \"%s\"" +msgstr "" + +#. Programmer's name for it: SUnRecognizedAlgorithm +#: libraries/cryptolib4pascal/ClpSignerUtilities.pas:71 +msgid "Signer \" %s \" not recognised." +msgstr "" + +#. Programmer's name for it: SInvalidScale +#. Programmer's name for it: SNegativeScale +#: libraries/cryptolib4pascal/ClpSimpleBigDecimal.pas:29 +#: libraries/cryptolib4pascal/ClpSimpleBigDecimal.pas:32 +msgid "Scale may not be Negative" +msgstr "" + +#. Programmer's name for it: SInvalidScale +#: libraries/cryptolib4pascal/ClpSimpleBigDecimal.pas:31 +msgid "Only SimpleBigDecimal of Same Scale Allowed in Arithmetic Operations" +msgstr "" + +#. Programmer's name for it: SSpeckEngineNotInitialised +#. Programmer's name for it: SSpeckLegacyEngineNotInitialised +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:35 +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:35 +msgid "%s Engine not Initialised" +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:38 +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:38 +msgid "Invalid Argument Encountered." +msgstr "" + +#. Programmer's name for it: SInvalidParameterSpeckInit +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:39 +msgid "Invalid Parameter Passed to Speck Init - \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidParameterSpeckInit +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:41 +msgid "Speck32 requires a key of 64 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidParameterSpeckInit +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:43 +msgid "Speck48 requires a key of 72 or 96 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidParameterSpeckInit +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:45 +msgid "Speck64 requires a key of 96 or 128 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidParameterSpeckInit +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:47 +msgid "Speck96 requires a key of 96 or 144 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidParameterSpeckInit +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:49 +msgid "" +"Speck128 requires a key of 128, 192 or 256 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:40 +msgid "Invalid Parameter Passed to SpeckLegacy Init - \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:42 +msgid "Speck32Legacy requires a key of 64 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:44 +msgid "" +"Speck48Legacy requires a key of 72 or 96 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:46 +msgid "" +"Speck64Legacy requires a key of 96 or 128 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:48 +msgid "" +"Speck96Legacy requires a key of 96 or 144 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:50 +msgid "" +"Speck128Legacy requires a key of 128, 192 or 256 bits but input was \"%d\" " +"bits." +msgstr "" + +#. Programmer's name for it: SInvalidMU +#: libraries/cryptolib4pascal/ClpTnaf.pas:34 +msgid "mu must be 1 or -1" +msgstr "" + +#. Programmer's name for it: SDifferentScales +#: libraries/cryptolib4pascal/ClpTnaf.pas:35 +msgid "lambda0 and lambda1 do not have same scale" +msgstr "" + +#. Programmer's name for it: SNoKoblitzCurve +#: libraries/cryptolib4pascal/ClpTnaf.pas:36 +msgid "No Koblitz curve (ABC), TNAF multiplication not possible" +msgstr "" + +#. Programmer's name for it: SNotKoblitzCurve +#: libraries/cryptolib4pascal/ClpTnaf.pas:37 +msgid "si is defined for Koblitz curves only" +msgstr "" + +#. Programmer's name for it: SInvalidCoFactor +#: libraries/cryptolib4pascal/ClpTnaf.pas:38 +msgid "h (Cofactor) must be 2 or 4" +msgstr "" + +#: libraries/cryptolib4pascal/ClpX25519Agreement.pas:36 +msgid "The Init Parameter does not Contain the Private Key" +msgstr "" + +#. Programmer's name for it: SEOFInPrivateKey +#: libraries/cryptolib4pascal/ClpX25519PrivateKeyParameters.pas:37 +msgid "EOF encountered in middle of X25519 private key" +msgstr "" + +#. Programmer's name for it: SAgreementCalculationFailed +#: libraries/cryptolib4pascal/ClpX25519PrivateKeyParameters.pas:38 +msgid "X25519 Agreement Failed" +msgstr "" + +#. Programmer's name for it: SEOFInPublicKey +#: libraries/cryptolib4pascal/ClpX25519PublicKeyParameters.pas:34 +msgid "EOF encountered in middle of X25519 public key" +msgstr "" + +#. Programmer's name for it: SInconsistentKValues +#: libraries/cryptolib4pascal/ClpX9ECC.pas:36 +msgid "Inconsistent K Values" +msgstr "" + +#. Programmer's name for it: SCurveNil +#: libraries/cryptolib4pascal/ClpX9ECC.pas:37 +msgid "Curve" +msgstr "" + +#. Programmer's name for it: SNotImplementedECCurve +#: libraries/cryptolib4pascal/ClpX9ECC.pas:38 +msgid "This Type of ECCurve is not Implemented" +msgstr "" + +#. Programmer's name for it: SFieldIDNil +#: libraries/cryptolib4pascal/ClpX9ECC.pas:39 +msgid "FieldID" +msgstr "" + +#. Programmer's name for it: SSeqNil +#: libraries/cryptolib4pascal/ClpX9ECC.pas:40 +msgid "Seq" +msgstr "" + +#. Programmer's name for it: SUnSupportedCurveOne +#: libraries/cryptolib4pascal/ClpX9ECParameters.pas:38 +msgid "Only trinomial and pentomial curves are supported" +msgstr "" + +#. Programmer's name for it: SUnSupportedCurveTwo +#: libraries/cryptolib4pascal/ClpX9ECParameters.pas:39 +msgid "\"curve\" is of an unsupported type" +msgstr "" + +#. Programmer's name for it: SBadVersion +#: libraries/cryptolib4pascal/ClpX9ECParameters.pas:40 +msgid "Bad Version in X9ECParameters" +msgstr "" + +#. Programmer's name for it: SNullKeyReInit +#: libraries/cryptolib4pascal/ClpXSalsa20Engine.pas:33 +msgid "%s Doesn't Support Re-Init with Null Key" +msgstr "" + +#. Programmer's name for it: SInvalidKeySize +#: libraries/cryptolib4pascal/ClpXSalsa20Engine.pas:34 +msgid "%s Requires a 256 bit Key" +msgstr "" + +#. Programmer's name for it: SArgumentOutOfRange +#: libraries/generics.collections/generics.strings.pas:26 +msgid "Argument out of range" +msgstr "" + +#. Programmer's name for it: SArgumentNilNode +#: libraries/generics.collections/generics.strings.pas:27 +msgid "Node is nil" +msgstr "" + +#. Programmer's name for it: SDuplicatesNotAllowed +#: libraries/generics.collections/generics.strings.pas:28 +msgid "Duplicates not allowed in dictionary" +msgstr "" + +#. Programmer's name for it: SCollectionInconsistency +#: libraries/generics.collections/generics.strings.pas:29 +msgid "Collection inconsistency" +msgstr "" + +#. Programmer's name for it: SCollectionDuplicate +#: libraries/generics.collections/generics.strings.pas:30 +msgid "Collection does not allow duplicates" +msgstr "" + +#. Programmer's name for it: SDictionaryKeyDoesNotExist +#: libraries/generics.collections/generics.strings.pas:31 +msgid "Dictionary key does not exist" +msgstr "" + +#. Programmer's name for it: SItemNotFound +#: libraries/generics.collections/generics.strings.pas:32 +msgid "Item not found" +msgstr "" + +#. Programmer's name for it: SInvalidConfigLength +#. Programmer's name for it: SInvalidConfigLength +#: libraries/hashlib4pascal/HlpBlake2B.pas:22 +#: libraries/hashlib4pascal/HlpBlake2S.pas:22 +msgid "Config Length Must Be 8 Words" +msgstr "" + +#. Programmer's name for it: SConfigNil +#. Programmer's name for it: SConfigNil +#: libraries/hashlib4pascal/HlpBlake2B.pas:23 +#: libraries/hashlib4pascal/HlpBlake2S.pas:23 +msgid "Config Cannot Be Nil" +msgstr "" + +#. Programmer's name for it: SConfigNil +#. Programmer's name for it: SConfigNil +#: libraries/hashlib4pascal/HlpBlake2B.pas:25 +#: libraries/hashlib4pascal/HlpBlake2S.pas:25 +msgid "XOFSize in Bits must be Multiples of 8 and be Between %u and %u Bytes." +msgstr "" + +#. Programmer's name for it: SOutputLengthInvalid +#. Programmer's name for it: SOutputLengthInvalid +#. Programmer's name for it: SOutputLengthInvalid +#: libraries/hashlib4pascal/HlpBlake2B.pas:26 +#: libraries/hashlib4pascal/HlpBlake2S.pas:26 +#: libraries/hashlib4pascal/HlpSHA3.pas:28 +msgid "Output Length is above the Digest Length" +msgstr "" + +#. Programmer's name for it: SMaximumOutputLengthExceeded +#: libraries/hashlib4pascal/HlpBlake2B.pas:28 +msgid "\"Maximum Length is 2^32 blocks of 64 bytes" +msgstr "" + +#. Programmer's name for it: SWritetoXofAfterReadError +#. Programmer's name for it: SWritetoXofAfterReadError +#. Programmer's name for it: SWritetoXofAfterReadError +#: libraries/hashlib4pascal/HlpBlake2B.pas:29 +#: libraries/hashlib4pascal/HlpBlake2S.pas:29 +#: libraries/hashlib4pascal/HlpSHA3.pas:30 +msgid "\"%s\" Write to Xof after Read not Allowed" +msgstr "" + +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:16 +msgid "" +"BLAKE2B HashSize must be restricted to one of the following [1 .. 64], \"%d" +"\"" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:17 +msgid "\"Key\" Length Must Not Be Greater Than 64, \"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:19 +msgid "\"Personalisation\" Length Must Be Equal To 16, \"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:20 +msgid "\"Salt\" Length Must Be Equal To 16, \"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:23 +msgid "FanOut Value Should be Between [0 .. 255] for Blake2B" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:25 +msgid "MaxDepth Value Should be Between [1 .. 255] for Blake2B" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:27 +msgid "NodeDepth Value Should be Between [0 .. 255] for Blake2B" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:29 +msgid "InnerHashSize Value Should be Between [0 .. 64] for Blake2B" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:31 +msgid "NodeOffset Value Should be Between [0 .. (2^64-1)] for Blake2B" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:34 +msgid "Tree Inner Hash Size Must Not Be Greater Than 64, \"%d\"" +msgstr "" + +#. Programmer's name for it: SMaximumOutputLengthExceeded +#: libraries/hashlib4pascal/HlpBlake2S.pas:28 +msgid "\"Maximum Length is 2^32 blocks of 32 bytes" +msgstr "" + +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:16 +msgid "" +"BLAKE2S HashSize must be restricted to one of the following [1 .. 32], \"%d" +"\"" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:17 +msgid "\"Key\" Length Must Not Be Greater Than 32, \"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:19 +msgid "\"Personalisation\" Length Must Be Equal To 8, \"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:20 +msgid "\"Salt\" Length Must Be Equal To 8, \"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:23 +msgid "FanOut Value Should be Between [0 .. 255] for Blake2S" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:25 +msgid "MaxDepth Value Should be Between [1 .. 255] for Blake2S" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:27 +msgid "NodeDepth Value Should be Between [0 .. 255] for Blake2S" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:29 +msgid "InnerHashSize Value Should be Between [0 .. 32] for Blake2S" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:31 +msgid "NodeOffset Value Should be Between [0 .. (2^48-1)] for Blake2S" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:34 +msgid "Tree Inner Hash Size Must Not Be Greater Than 32, \"%d\"" +msgstr "" + +#. Programmer's name for it: SUnSupportedCRCType +#: libraries/hashlib4pascal/HlpCRC.pas:22 +msgid "UnSupported CRC Type: \"%s\"" +msgstr "" + +#. Programmer's name for it: SWidthOutOfRange +#: libraries/hashlib4pascal/HlpCRC.pas:23 +msgid "Width Must be Between 3 and 64. \"%d\"" +msgstr "" + +#. Programmer's name for it: SIndexOutOfRange +#: libraries/hashlib4pascal/HlpHash.pas:16 +msgid "Current Index Is Out Of Range" +msgstr "" + +#. Programmer's name for it: SFileNotExist +#: libraries/hashlib4pascal/HlpHash.pas:19 +msgid "Specified File Not Found" +msgstr "" + +#. Programmer's name for it: SCloneNotYetImplemented +#: libraries/hashlib4pascal/HlpHash.pas:20 +msgid "Clone Not Yet Implemented For \"%s\"" +msgstr "" + +#. Programmer's name for it: SHashBufferMessage +#: libraries/hashlib4pascal/HlpHashBuffer.pas:13 +msgid "HashBuffer, Length: %d, Position: %d, IsEmpty: %s" +msgstr "" + +#: libraries/hashlib4pascal/HlpHashResult.pas:27 +msgid "Current Data Structure cannot be Represented as an \"Int32\" Type." +msgstr "" + +#: libraries/hashlib4pascal/HlpHashResult.pas:29 +msgid "Current Data Structure cannot be Represented as an \"UInt8\" Type." +msgstr "" + +#: libraries/hashlib4pascal/HlpHashResult.pas:31 +msgid "Current Data Structure cannot be Represented as an \"UInt16\" Type." +msgstr "" + +#: libraries/hashlib4pascal/HlpHashResult.pas:33 +msgid "Current Data Structure cannot be Represented as an \"UInt32\" Type." +msgstr "" + +#: libraries/hashlib4pascal/HlpHashResult.pas:35 +msgid "Current Data Structure cannot be Represented as an \"UInt64\" Type." +msgstr "" + +#. Programmer's name for it: SInvalidHavalRound +#: libraries/hashlib4pascal/HlpHaval.pas:25 +msgid "Haval Round Must be 3, 4 or 5" +msgstr "" + +#. Programmer's name for it: SInvalidHavalRound +#: libraries/hashlib4pascal/HlpHaval.pas:27 +msgid "" +"Haval HashSize Must be Either 128 bit(16 byte), 160 bit(20 byte), 192 " +"bit(24 byte), 224 bit(28 byte) or 256 bit(32 byte)" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpMurmur2.pas:24 +#: libraries/hashlib4pascal/HlpMurmur2_64.pas:21 +#: libraries/hashlib4pascal/HlpMurmurHash3_x64_128.pas:22 +#: libraries/hashlib4pascal/HlpMurmurHash3_x86_128.pas:22 +#: libraries/hashlib4pascal/HlpMurmurHash3_x86_32.pas:22 +#: libraries/hashlib4pascal/HlpSipHash.pas:23 +#: libraries/hashlib4pascal/HlpXXHash32.pas:19 +#: libraries/hashlib4pascal/HlpXXHash64.pas:19 +msgid "KeyLength Must Be Equal to %d" +msgstr "" + +#: libraries/hashlib4pascal/HlpNullable.pas:16 +msgid "Cannot assign non-null pointer to nullable type." +msgstr "" + +#: libraries/hashlib4pascal/HlpNullable.pas:18 +msgid "Unsupported Type: Only supports Integers, Int64, Floats and Strings." +msgstr "" + +#. Programmer's name for it: SGetNullValue +#: libraries/hashlib4pascal/HlpNullable.pas:19 +msgid "Attempted to get a null value." +msgstr "" + +#. Programmer's name for it: SHashSizeNotImplemented +#: libraries/hashlib4pascal/HlpNullDigest.pas:18 +msgid "HashSize Not Implemented For \"%s\"" +msgstr "" + +#. Programmer's name for it: SBlockSizeNotImplemented +#: libraries/hashlib4pascal/HlpNullDigest.pas:19 +msgid "BlockSize Not Implemented For \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidOutputByteCount +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:32 +msgid "\"(AByteCount)\" Argument Less Than \"%d\"." +msgstr "" + +#. Programmer's name for it: SBlockInstanceNotInitialized +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:33 +msgid "Block Instance not Initialized" +msgstr "" + +#. Programmer's name for it: SInputLengthInvalid +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:34 +msgid "Input Length \"%d\" is not Equal to BlockSize \"%d\"" +msgstr "" + +#. Programmer's name for it: SLanesTooSmall +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:35 +msgid "Lanes Must be Greater Than \"%d\"" +msgstr "" + +#. Programmer's name for it: SLanesTooBig +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:36 +msgid "Lanes Must be Less Than \"%d\"" +msgstr "" + +#. Programmer's name for it: SMemoryTooSmall +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:37 +msgid "Memory is Less Than: \"%d\", Expected \"%d\"" +msgstr "" + +#. Programmer's name for it: SIterationsTooSmall +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:38 +msgid "Iterations is Less Than: \"%d\"" +msgstr "" + +#. Programmer's name for it: SIterationsTooSmall +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:40 +msgid "Argon2 Parameter Builder Not Initialized" +msgstr "" + +#: libraries/hashlib4pascal/HlpPBKDF_ScryptNotBuildInAdapter.pas:31 +#: libraries/hashlib4pascal/HlpPBKDF2_HMACNotBuildInAdapter.pas:18 +msgid "\"(AByteCount)\" Argument must be a value greater than zero." +msgstr "" + +#. Programmer's name for it: SInvalidCost +#: libraries/hashlib4pascal/HlpPBKDF_ScryptNotBuildInAdapter.pas:32 +msgid "Cost parameter must be > 1 and a power of 2." +msgstr "" + +#. Programmer's name for it: SBlockSizeAndCostIncompatible +#: libraries/hashlib4pascal/HlpPBKDF_ScryptNotBuildInAdapter.pas:33 +msgid "Cost parameter must be > 1 and < 65536." +msgstr "" + +#. Programmer's name for it: SBlockSizeTooSmall +#: libraries/hashlib4pascal/HlpPBKDF_ScryptNotBuildInAdapter.pas:34 +msgid "Block size must be >= 1." +msgstr "" + +#. Programmer's name for it: SBlockSizeTooSmall +#: libraries/hashlib4pascal/HlpPBKDF_ScryptNotBuildInAdapter.pas:36 +msgid "" +"Parallelism parameter must be >= 1 and <= %d (based on block size of %d)" +msgstr "" + +#. Programmer's name for it: SInvalidIndex +#: libraries/hashlib4pascal/HlpPBKDF2_HMACNotBuildInAdapter.pas:19 +msgid "Invalid start or end index in the internal buffer" +msgstr "" + +#. Programmer's name for it: SNotInitializedIHashInstance +#: libraries/hashlib4pascal/HlpPBKDF2_HMACNotBuildInAdapter.pas:20 +msgid "\"IHash\" instance is uninitialized" +msgstr "" + +#. Programmer's name for it: SIterationtooSmall +#: libraries/hashlib4pascal/HlpPBKDF2_HMACNotBuildInAdapter.pas:21 +msgid "Iteration must be greater than zero." +msgstr "" + +#. Programmer's name for it: SInvalidHashMode +#: libraries/hashlib4pascal/HlpSHA3.pas:25 +msgid "Only \"[%s]\" HashModes are Supported" +msgstr "" + +#. Programmer's name for it: SInvalidHashMode +#: libraries/hashlib4pascal/HlpSHA3.pas:27 +msgid "XOFSize in Bits must be Multiples of 8 and be Greater than Zero Bytes" +msgstr "" + +#: libraries/hashlib4pascal/HlpSnefru.pas:24 +msgid "Snefru Security Level Cannot be Less than 1. Standard Level is 8" +msgstr "" + +#: libraries/hashlib4pascal/HlpSnefru.pas:26 +msgid "Snefru HashSize Must be Either 128 bit(16 byte) or 256 bit(32 byte)" +msgstr "" + +#. Programmer's name for it: SInvalidHashSize +#: libraries/hashlib4pascal/HlpSnefru.pas:27 +msgid "Specified HashSize Is Invalid or UnSupported \"%d\"" +msgstr "" + +#: libraries/hashlib4pascal/HlpTiger.pas:22 +msgid "" +"Tiger HashSize Must be Either 128 bit(16 byte), 160 bit(20 byte) or 192 " +"bit(24 byte)" +msgstr "" + +#. Programmer's name for it: SInvalidHashRound +#. Programmer's name for it: SInvalidHashRound +#: libraries/hashlib4pascal/HlpTiger.pas:23 +#: libraries/hashlib4pascal/HlpTiger2.pas:23 +msgid "Specified HashRound Is Invalid or UnSupported \"%d\"" +msgstr "" + +#: libraries/hashlib4pascal/HlpTiger2.pas:22 +msgid "" +"Tiger2 HashSize Must be Either 128 bit(16 byte), 160 bit(20 byte) or 192 " +"bit(24 byte)" +msgstr "" + +#. Programmer's name for it: sInvalidIPAddress +#: libraries/mormot-min/SynCommons.pas:18356 +msgid "\"%s\" is an invalid IP v4 address" +msgstr "" + +#. Programmer's name for it: sInvalidEmailAddress +#: libraries/mormot-min/SynCommons.pas:18357 +msgid "\"%s\" is an invalid email address" +msgstr "" + +#. Programmer's name for it: sInvalidPattern +#: libraries/mormot-min/SynCommons.pas:18358 +msgid "\"%s\" does not match the expected pattern" +msgstr "" + +#. Programmer's name for it: sCharacter01n +#: libraries/mormot-min/SynCommons.pas:18359 +msgid "character,character,characters" +msgstr "" + +#. Programmer's name for it: sInvalidTextLengthMin +#: libraries/mormot-min/SynCommons.pas:18360 +msgid "Expect at least %d %s" +msgstr "" + +#. Programmer's name for it: sInvalidTextLengthMax +#: libraries/mormot-min/SynCommons.pas:18361 +msgid "Expect up to %d %s" +msgstr "" + +#. Programmer's name for it: sInvalidTextChar +#: libraries/mormot-min/SynCommons.pas:18364 +msgid "" +"Expect at least %d %s %s,Expect up to %d %s %s,alphabetical,digital," +"punctuation,lowercase,uppercase,space,Too much spaces on the left,Too much " +"spaces on the right" +msgstr "" + +#. Programmer's name for it: sValidationFailed +#: libraries/mormot-min/SynCommons.pas:18365 +msgid "\"%s\" rule failed" +msgstr "" + +#. Programmer's name for it: sValidationFieldVoid +#: libraries/mormot-min/SynCommons.pas:18366 +msgid "An unique key field must not be void" +msgstr "" + +#. Programmer's name for it: sValidationFieldDuplicate +#: libraries/mormot-min/SynCommons.pas:18367 +msgid "Value already used for this unique key field" +msgstr "" + +#. Programmer's name for it: Sneed_dict +#: libraries/paszlib/paszlib_zbase.pas:409 +msgid "need dictionary" +msgstr "" + +#. Programmer's name for it: Sstream_end +#: libraries/paszlib/paszlib_zbase.pas:410 +msgid "stream end" +msgstr "" + +#. Programmer's name for it: Sfile_error +#: libraries/paszlib/paszlib_zbase.pas:411 +msgid "file error" +msgstr "" + +#. Programmer's name for it: Sstream_error +#: libraries/paszlib/paszlib_zbase.pas:412 +msgid "stream error" +msgstr "" + +#. Programmer's name for it: Sdata_error +#: libraries/paszlib/paszlib_zbase.pas:413 +msgid "data error" +msgstr "" + +#. Programmer's name for it: Smem_error +#: libraries/paszlib/paszlib_zbase.pas:414 +msgid "insufficient memory" +msgstr "" + +#. Programmer's name for it: Sbuf_error +#: libraries/paszlib/paszlib_zbase.pas:415 +msgid "buffer error" +msgstr "" + +#. Programmer's name for it: Sversion_error +#: libraries/paszlib/paszlib_zbase.pas:416 +msgid "incompatible version" +msgstr "" + +#. Programmer's name for it: SInvalidHexCharacter +#: libraries/simplebaselib4pascal/SbpBase16.pas:12 +msgid "Invalid hex character: \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidTextLength +#: libraries/simplebaselib4pascal/SbpBase16.pas:13 +msgid "Text cannot be odd length \"%s\"" +msgstr "" + +#. Programmer's name for it: SAlphabetNil +#. Programmer's name for it: SAlphabetNil +#. Programmer's name for it: SAlphabetNil +#. Programmer's name for it: SAlphabetNil +#: libraries/simplebaselib4pascal/SbpBase32.pas:16 +#: libraries/simplebaselib4pascal/SbpBase58.pas:16 +#: libraries/simplebaselib4pascal/SbpBase64.pas:16 +#: libraries/simplebaselib4pascal/SbpBase85.pas:16 +msgid "Alphabet Instance cannot be Nil \"%s\"" +msgstr "" + +#. Programmer's name for it: SAlphabetNil +#: libraries/simplebaselib4pascal/SbpBase85.pas:18 +msgid "Unexpected Shortcut Character In The Middle Of a Regular Block" +msgstr "" + +#. Programmer's name for it: SAlphabetNil +#: libraries/simplebaselib4pascal/SbpEncodingAlphabet.pas:12 +msgid "\"%s\" Cannot Be Nil." +msgstr "" + +#. Programmer's name for it: SAlphabetNil +#: libraries/simplebaselib4pascal/SbpEncodingAlphabet.pas:14 +msgid "" +"Required Alphabet Length is \"%d\" but Provided Alphabet is \"%d\" " +"Characters Long." +msgstr "" + +#. Programmer's name for it: SInvalidCharacter +#: libraries/simplebaselib4pascal/SbpEncodingAlphabet.pas:15 +msgid "Alphabet Contains Character \"%s (%d)\" Above \"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidInput +#: libraries/simplebaselib4pascal/SbpEncodingAlphabet.pas:16 +msgid "Invalid character value in input \"%s\"" +msgstr "" + +#. Programmer's name for it: sAColumnsCantBeNil +#: libraries/sphere10/UCommon.Data.pas:246 +msgid "AColumns can't be nil!" +msgstr "" + +#. Programmer's name for it: sTooManyValues +#: libraries/sphere10/UCommon.Data.pas:247 +msgid "Too many values" +msgstr "" + +#. Programmer's name for it: sInvalidUTF8String +#: libraries/sphere10/UCommon.Data.pas:248 +msgid "Invalid UTF8 string" +msgstr "" + +#. Programmer's name for it: sBadNumericExpression +#: libraries/sphere10/UCommon.Data.pas:249 +msgid "Bad numeric expression" +msgstr "" + +#. Programmer's name for it: sUnexpectedNumberFormat +#: libraries/sphere10/UCommon.Data.pas:250 +msgid "Unexpected number format" +msgstr "" + +#. Programmer's name for it: sBadSyntaxForEscapeCharacter +#: libraries/sphere10/UCommon.Data.pas:251 +msgid "Bad syntax for escape character \"\\\"" +msgstr "" + +#. Programmer's name for it: sUnexpectedCharInExpression +#: libraries/sphere10/UCommon.Data.pas:252 +msgid "Unexpected char in expression" +msgstr "" + +#. Programmer's name for it: sInvaildExpression_CharDetectedAfterClosingBracket +#: libraries/sphere10/UCommon.Data.pas:253 +msgid "Invaild expression (char detected after closing bracket)" +msgstr "" + +#. Programmer's name for it: sUnexpectedTokenFound +#: libraries/sphere10/UCommon.Data.pas:254 +msgid "Unexpected token found : \"%s\"" +msgstr "" + +#. Programmer's name for it: sUnexpectedStringLiteralInExpression +#: libraries/sphere10/UCommon.Data.pas:255 +msgid "Unexpected string literal in expression" +msgstr "" + +#. Programmer's name for it: sBadlyClosedBetweenExpression +#: libraries/sphere10/UCommon.Data.pas:256 +msgid "Badly closed \"between\" expression" +msgstr "" + +#. Programmer's name for it: sMissingNumberInExpression +#: libraries/sphere10/UCommon.Data.pas:257 +msgid "Missing number in expression" +msgstr "" + +#. Programmer's name for it: sUnexpectedOccurrenceOf_Found +#: libraries/sphere10/UCommon.Data.pas:258 +msgid "Unexpected occurrence of \"%s\" found" +msgstr "" + +#. Programmer's name for it: sBadBetweenExpression_UnexpectedToken +#: libraries/sphere10/UCommon.Data.pas:259 +msgid "Bad \"between\" expression. Unexpected \"%s\"" +msgstr "" + +#. Programmer's name for it: sExpressionError_NoValue +#: libraries/sphere10/UCommon.Data.pas:260 +msgid "Expression error (no value)" +msgstr "" + +#. Programmer's name for it: sNotImplemented +#: libraries/sphere10/UCommon.pas:468 +msgid "Not implemented" +msgstr "" + +#. Programmer's name for it: sInvalidParameter_OutOfBounds +#: libraries/sphere10/UCommon.pas:469 +msgid "Invalid Parameter: %s out of bounds" +msgstr "" + +#. Programmer's name for it: sLogDebug +#: libraries/sphere10/UCommon.pas:470 +msgid "DEBUG" +msgstr "" + +#. Programmer's name for it: sLogInfo +#: libraries/sphere10/UCommon.pas:471 +msgid "INFO" +msgstr "" + +#. Programmer's name for it: sLogWarn +#: libraries/sphere10/UCommon.pas:472 +msgid "WARNING" +msgstr "" + +#. Programmer's name for it: sLogError +#: libraries/sphere10/UCommon.pas:473 +msgid "ERROR" +msgstr "" + +#. Programmer's name for it: sTotal +#: libraries/sphere10/UVisualGrid.pas:475 +msgid "Total: %d" +msgstr "" + +#. Programmer's name for it: sStandardSearch +#: libraries/sphere10/UVisualGrid.pas:476 +msgid "Standard Search" +msgstr "" + +#. Programmer's name for it: sMultiColumnSearch +#: libraries/sphere10/UVisualGrid.pas:477 +msgid "Multi-Column Search" +msgstr "" + +#. Programmer's name for it: sPageSize +#: libraries/sphere10/UVisualGrid.pas:478 +msgid "Page size:" +msgstr "" + +#. Programmer's name for it: sSearchExpression +#: libraries/sphere10/UVisualGrid.pas:479 +msgid "Search expression" +msgstr "" + +#. Programmer's name for it: sDataLoading +#: libraries/sphere10/UVisualGrid.pas:480 +msgid "DATA LOADING" +msgstr "" + +#. Programmer's name for it: sExpression +#: libraries/sphere10/UVisualGrid.pas:481 +msgid "Expression" +msgstr "" + +#. Programmer's name for it: sImproperColumnIndex +#: libraries/sphere10/UVisualGrid.pas:482 +msgid "Improper column index. Max expected is %d but %d found." +msgstr "" diff --git a/src/locale/fr/LC_MESSAGES/default.mo b/src/locale/fr/LC_MESSAGES/default.mo new file mode 100644 index 000000000..8de35abd4 Binary files /dev/null and b/src/locale/fr/LC_MESSAGES/default.mo differ diff --git a/src/locale/fr/LC_MESSAGES/default.po b/src/locale/fr/LC_MESSAGES/default.po new file mode 100644 index 000000000..05235aade --- /dev/null +++ b/src/locale/fr/LC_MESSAGES/default.po @@ -0,0 +1,4638 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: 2020-03-30 19:19\n" +"PO-Revision-Date: 2020-03-30 19:38+0200\n" +"Last-Translator: Somebody <your.email@address.com>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.3\n" +"Language-Team: \n" +"Language: fr\n" + +#. FRMAbout..Caption +#: gui-classic/UFRMAbout.dfm:7 +msgid "About..." +msgstr "" + +#. FRMAbout..Font.Name +#. FRMAbout..Label1..Font.Name +#. FRMAbout..lblBuild..Font.Name +#. FRMAbout..lblProtocolVersion..Font.Name +#. FRMAbout..Label3..Font.Name +#. FRMAbout..Label4..Font.Name +#. FRMAbout..Label5..Font.Name +#. FRMAccountSelect..Font.Name +#. FRMDiagnosticTool..Font.Name +#. FRMHashLock..Font.Name +#. FRMHashLock..lblError..Font.Name +#. FRMHashLock..GroupBox2..meHashLockData..Font.Name +#. FRMMemoText..Font.Name +#. FRMMemoText..Memo..Font.Name +#. FRMNewPrivateKeyType..Font.Name +#. FRMNodesIp..Font.Name +#. FRMOperation..Font.Name +#. FRMOperation..lblAccountBalance..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..lblEncryptionErrors..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..memoPayload..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsTransaction..lblTransactionErrors..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..lblChangeKeyErrors..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..lblNewOwnerErrors..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblListAccountErrors..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsDelistAccount..lblDelistErrors..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..lblBuyAccountErrors..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..Label2..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..lblChangeInfoErrors..Font.Name +#. FRMOperation..PageControlLocked..tsGlobalError..lblGlobalErrors..Font.Name +#. FRMOperation..PageControlLocked..tsGlobalError..bbPassword..Font.Name +#. FRMOperation..memoAccounts..Font.Name +#. FRMOperation..ebSenderAccount..Font.Name +#. FRMOperationsExplorer..Font.Name +#. FRMPascalCoinWalletConfig..Font.Name +#. FRMPascalCoinWalletConfig..Label4..Font.Name +#. FRMPascalCoinWalletConfig..Label7..Font.Name +#. FRMPascalCoinWalletConfig..bbUpdatePassword..Font.Name +#. FRMPayloadDecoder..Font.Name +#. FRMPayloadDecoder..lblBlock..Font.Name +#. FRMPayloadDecoder..lblDateTime..Font.Name +#. FRMPayloadDecoder..lblOperationTxt..Font.Name +#. FRMPayloadDecoder..lblAmount..Font.Name +#. FRMPayloadDecoder..lblFee..Font.Name +#. FRMPayloadDecoder..lblSender..Font.Name +#. FRMPayloadDecoder..lblReceiver..Font.Name +#. FRMPayloadDecoder..lblReceiverInfo..Font.Name +#. FRMPayloadDecoder..PageControl..tsDecoded..lblDecodedMethod..Font.Name +#. FRMPayloadDecoder..PageControl..tsDecoded..memoDecoded..Font.Name +#. FRMPayloadDecoder..PageControl..tsDecoded..memoOriginalPayloadInHexa..Font.Name +#. FRMPayloadDecoder..ebOphash..Font.Name +#. FRMDiagnosticTool..Font.Name +#. FRMRandomOperations..Font.Name +#. FRMRandomOperations..pnlTop..lblTopCaption..Font.Name +#. FRMRPCCalls..Font.Name +#. FRMRPCCalls..pnlTop..lblTopCaption..Font.Name +#. FRMSaleAccounts..Font.Name +#. FRMSaleAccounts..lblAccountBalance..Font.Name +#. FRMSaleAccounts..memoAccounts..Font.Name +#. FRMSaleAccounts..ebSenderAccount..Font.Name +#. FRMWallet..Font.Name +#. FRMWallet..pnlTop..lblTimeAverageAux..Font.Name +#. FRMWallet..pnlTop..Label16..Font.Name +#. FRMWallet..pnlTop..lblBlocksFound..Font.Name +#. FRMWallet..pnlTop..lblReceivedMessages..Font.Name +#. FRMWallet..pnlTop..lblBuild..Font.Name +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsTop..Font.Name +#. FRMWallet..PageControl..tsPendingOperations..pnlPendingOperations..Label10..Font.Name +#. FRMWallet..PageControl..tsMessages..Label14..Font.Name +#. FRMWallet..PageControl..tsMessages..memoMessages..Font.Name +#. FRMWalletKeys..Font.Name +#. FRMWalletKeys..lblKeysEncrypted..Font.Name +#. FRMWalletKeys..memoPrivateKey..Font.Name +#. FRMWalletKeys..bbUpdatePassword..Font.Name +#. FRMDiagnosticTool..Font.Name +#: gui-classic/UFRMAbout.dfm:14 gui-classic/UFRMAbout.dfm:130 +#: gui-classic/UFRMAbout.dfm:143 gui-classic/UFRMAbout.dfm:156 +#: gui-classic/UFRMAbout.dfm:176 gui-classic/UFRMAbout.dfm:190 +#: gui-classic/UFRMAbout.dfm:205 gui-classic/UFRMAccountSelect.dfm:12 +#: gui-classic/UFRMDiagnosticTool.dfm:11 gui-classic/UFRMHashLock.dfm:12 +#: gui-classic/UFRMHashLock.dfm:34 gui-classic/UFRMHashLock.dfm:117 +#: gui-classic/UFRMMemoText.dfm:12 gui-classic/UFRMMemoText.dfm:50 +#: gui-classic/UFRMNewPrivateKeyType.dfm:13 gui-classic/UFRMNodesIp.dfm:13 +#: gui-classic/UFRMOperation.dfm:13 gui-classic/UFRMOperation.dfm:40 +#: gui-classic/UFRMOperation.dfm:196 gui-classic/UFRMOperation.dfm:259 +#: gui-classic/UFRMOperation.dfm:332 gui-classic/UFRMOperation.dfm:410 +#: gui-classic/UFRMOperation.dfm:427 gui-classic/UFRMOperation.dfm:539 +#: gui-classic/UFRMOperation.dfm:783 gui-classic/UFRMOperation.dfm:825 +#: gui-classic/UFRMOperation.dfm:851 gui-classic/UFRMOperation.dfm:978 +#: gui-classic/UFRMOperation.dfm:1065 gui-classic/UFRMOperation.dfm:1080 +#: gui-classic/UFRMOperation.dfm:1149 gui-classic/UFRMOperation.dfm:1167 +#: gui-classic/UFRMOperationsExplorer.dfm:12 +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:13 +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:66 +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:110 +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:200 +#: gui-classic/UFRMPayloadDecoder.dfm:14 gui-classic/UFRMPayloadDecoder.dfm:37 +#: gui-classic/UFRMPayloadDecoder.dfm:50 gui-classic/UFRMPayloadDecoder.dfm:78 +#: gui-classic/UFRMPayloadDecoder.dfm:99 +#: gui-classic/UFRMPayloadDecoder.dfm:119 +#: gui-classic/UFRMPayloadDecoder.dfm:146 +#: gui-classic/UFRMPayloadDecoder.dfm:166 +#: gui-classic/UFRMPayloadDecoder.dfm:179 +#: gui-classic/UFRMPayloadDecoder.dfm:214 +#: gui-classic/UFRMPayloadDecoder.dfm:234 +#: gui-classic/UFRMPayloadDecoder.dfm:253 +#: gui-classic/UFRMPayloadDecoder.dfm:416 +#: gui-classic/UFRMRandomHashUtil.dfm:11 +#: gui-classic/UFRMRandomOperations.dfm:11 +#: gui-classic/UFRMRandomOperations.dfm:44 gui-classic/UFRMRPCCalls.dfm:12 +#: gui-classic/UFRMRPCCalls.dfm:50 gui-classic/UFRMSaleAccounts.dfm:12 +#: gui-classic/UFRMSaleAccounts.dfm:57 gui-classic/UFRMSaleAccounts.dfm:84 +#: gui-classic/UFRMSaleAccounts.dfm:103 gui-classic/UFRMWallet.dfm:13 +#: gui-classic/UFRMWallet.dfm:284 gui-classic/UFRMWallet.dfm:299 +#: gui-classic/UFRMWallet.dfm:315 gui-classic/UFRMWallet.dfm:333 +#: gui-classic/UFRMWallet.dfm:349 gui-classic/UFRMWallet.dfm:658 +#: gui-classic/UFRMWallet.dfm:870 gui-classic/UFRMWallet.dfm:1183 +#: gui-classic/UFRMWallet.dfm:1216 gui-classic/UFRMWalletKeys.dfm:13 +#: gui-classic/UFRMWalletKeys.dfm:66 gui-classic/UFRMWalletKeys.dfm:155 +#: gui-classic/UFRMWalletKeys.dfm:504 lib/i386-win32/UFRMDiagnosticTool.dfm:11 +msgid "Tahoma" +msgstr "" + +#. FRMAbout..Label1..Caption +#. FRMWallet..Caption +#: gui-classic/UFRMAbout.dfm:126 gui-classic/UFRMWallet.dfm:4 +msgid "Pascal full node Wallet (Classic GUI)" +msgstr "" + +#. FRMAbout..lblBuild..Caption +#: gui-classic/UFRMAbout.dfm:139 +msgid "Build:" +msgstr "" + +#. FRMAbout..lblProtocolVersion..Caption +#: gui-classic/UFRMAbout.dfm:152 +msgid "Protocol:" +msgstr "" + +#. FRMAbout..Label2..Caption +#: gui-classic/UFRMAbout.dfm:165 +msgid "Source Code:" +msgstr "" + +#. FRMAbout..Label3..Caption +#: gui-classic/UFRMAbout.dfm:172 +msgid "Check For New Versions:" +msgstr "" + +#. FRMAbout..Label4..Caption +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:186 gui-classic/UFRMAbout.dfm:252 +msgid "https://github.com/PascalCoin/PascalCoin" +msgstr "" + +#. FRMAbout..Label5..Caption +#: gui-classic/UFRMAbout.dfm:201 +msgid "https://sourceforge.net/projects/pascalcoin" +msgstr "" + +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:220 +msgid "Copyright (c) 2016 - 2019 PascalCoin developers" +msgstr "" + +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:221 +msgid "Based on Albert Molina original source code" +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:225 +msgid "" +"Pascal (aka Pascal Coin) is P2P cryptocurrency without the need for " +"historical " +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:228 +msgid "operations. This software comprises a node within the Pascal network." +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:232 +msgid "" +"Distributed under the MIT software license, see the accompanying file " +"LICENSE or " +msgstr "" + +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:233 +msgid "visit http://www.opensource.org/licenses/mit-license.php." +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:237 +msgid "THIS IS EXPERIMENTAL SOFTWARE. Use it for educational purposes only." +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:241 +msgid "" +"This product includes software developed by the OpenSSL Project and Denis " +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:244 +msgid "Grinyuk (https://github.com/Arvur/OpenSSL-Delphi), some cryptographic " +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:247 +msgid "" +"functions inspirated in code written by Ladar Levison and Marco Ferrante, " +"and " +msgstr "" + +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:248 +msgid "Synapse Socket code copyright of Lukas Gebauer." +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:251 +msgid "" +"Original source code is written in Pascal Language and is available at " +msgstr "" + +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:254 +msgid "If you like it, consider a donation using BitCoin:" +msgstr "" + +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:255 +msgid "16K3HCZRhFUtM8GdWRcfKeaa6KsuyxZaYk" +msgstr "" + +#. FRMAbout..bbClose..Caption +#. FRMPayloadDecoder..bbClose..Caption +#. FRMWallet..MainMenu..miProject..MiClose..Caption +#: gui-classic/UFRMAbout.dfm:266 gui-classic/UFRMPayloadDecoder.dfm:353 +#: gui-classic/UFRMWallet.dfm:1273 +msgid "Close" +msgstr "" + +#. FRMAccountSelect..Caption +#: gui-classic/UFRMAccountSelect.dfm:5 +msgid "Accounts" +msgstr "" + +#. FRMAccountSelect..pnlAccountsTop..cbOnlyForSale..Caption +#: gui-classic/UFRMAccountSelect.dfm:33 +msgid "Only for sale or swap" +msgstr "" + +#. FRMAccountSelect..pnlAccountsTop..bbSearch..Caption +#: gui-classic/UFRMAccountSelect.dfm:41 +msgid "Search" +msgstr "" + +#. FRMAccountSelect..pnlAccountsTop..cbOnlyForPrivateSaleToMe..Caption +#: gui-classic/UFRMAccountSelect.dfm:107 +msgid "Only for private sale to me" +msgstr "" + +#. FRMAccountSelect..pnlAccountsTop..cbAccountsBalance..Caption +#: gui-classic/UFRMAccountSelect.dfm:115 +msgid "Accounts Balance" +msgstr "" + +#. FRMAccountSelect..pnlAccountsTop..cbMyAccounts..Caption +#: gui-classic/UFRMAccountSelect.dfm:123 +msgid "My Accounts" +msgstr "" + +#. FRMAccountSelect..pnlAccountsTop..cbOnlyForPublicSale..Caption +#: gui-classic/UFRMAccountSelect.dfm:141 +msgid "Only for public sale" +msgstr "" + +#. FRMAccountSelect..pnlAccountsTop..cbAccountsName..Caption +#: gui-classic/UFRMAccountSelect.dfm:165 +msgid "Accounts name" +msgstr "" + +#. FRMAccountSelect..pnlBottom..Label17..Caption +#. FRMWallet..pnlTop..Label5..Caption +#. FRMWallet..PageControl..tsMyAccounts..pnlAccounts..pnlAccountsInfo..Label17..Caption +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsBottom..Label20..Caption +#: gui-classic/UFRMAccountSelect.dfm:192 gui-classic/UFRMWallet.dfm:261 +#: gui-classic/UFRMWallet.dfm:543 gui-classic/UFRMWallet.dfm:685 +msgid "Accounts:" +msgstr "" + +#. FRMAccountSelect..pnlBottom..lblAccountsCount..Caption +#. FRMAccountSelect..pnlBottom..lblAccountsBalance..Caption +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..lblPayloadLength..Caption +#. FRMPayloadDecoder..lblDateTime..Caption +#. FRMPayloadDecoder..lblOperationTxt..Caption +#. FRMPayloadDecoder..lblAmount..Caption +#. FRMPayloadDecoder..lblFee..Caption +#. FRMPayloadDecoder..lblReceiver..Caption +#. FRMWallet..pnlTop..lblCurrentBlock..Caption +#. FRMWallet..pnlTop..lblOperationsPending..Caption +#. FRMWallet..pnlTop..lblMinersClients..Caption +#. FRMWallet..pnlTop..lblCurrentDifficulty..Caption +#. FRMWallet..pnlTop..lblTimeAverage..Caption +#. FRMWallet..pnlTop..lblCurrentAccounts..Caption +#. FRMWallet..pnlTop..lblTimeAverageAux..Caption +#. FRMWallet..pnlTop..lblBlocksFound..Caption +#. FRMWallet..PageControl..tsMyAccounts..pnlAccounts..pnlAccountsInfo..lblAccountsCount..Caption +#. FRMWallet..PageControl..tsMyAccounts..pnlAccounts..pnlAccountsInfo..lblAccountsBalance..Caption +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsBottom..lblSelectedAccountsCount..Caption +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsBottom..lblSelectedAccountsBalance..Caption +#: gui-classic/UFRMAccountSelect.dfm:201 gui-classic/UFRMAccountSelect.dfm:219 +#: gui-classic/UFRMOperation.dfm:207 gui-classic/UFRMPayloadDecoder.dfm:46 +#: gui-classic/UFRMPayloadDecoder.dfm:74 gui-classic/UFRMPayloadDecoder.dfm:95 +#: gui-classic/UFRMPayloadDecoder.dfm:115 +#: gui-classic/UFRMPayloadDecoder.dfm:162 gui-classic/UFRMWallet.dfm:144 +#: gui-classic/UFRMWallet.dfm:180 gui-classic/UFRMWallet.dfm:198 +#: gui-classic/UFRMWallet.dfm:216 gui-classic/UFRMWallet.dfm:225 +#: gui-classic/UFRMWallet.dfm:270 gui-classic/UFRMWallet.dfm:279 +#: gui-classic/UFRMWallet.dfm:310 gui-classic/UFRMWallet.dfm:561 +#: gui-classic/UFRMWallet.dfm:570 gui-classic/UFRMWallet.dfm:694 +#: gui-classic/UFRMWallet.dfm:712 +msgid "000" +msgstr "" + +#. FRMAccountSelect..pnlBottom..Label19..Caption +#. FRMOperation..lblBalanceCaption..Caption +#. FRMSaleAccounts..lblBalanceCaption..Caption +#. FRMWallet..PageControl..tsMyAccounts..pnlAccounts..pnlAccountsInfo..Label19..Caption +#: gui-classic/UFRMAccountSelect.dfm:210 gui-classic/UFRMOperation.dfm:50 +#: gui-classic/UFRMSaleAccounts.dfm:73 gui-classic/UFRMWallet.dfm:552 +msgid "Balance:" +msgstr "" + +#. FRMAccountSelect..pnlBottom..bbSelect..Caption +#: gui-classic/UFRMAccountSelect.dfm:229 +msgid "Select" +msgstr "" + +#. FRMAccountSelect..pnlBottom..bbTypeStats..Caption +#: gui-classic/UFRMAccountSelect.dfm:249 +msgid "Type stats" +msgstr "" + +#. FRMDiagnosticTool..Caption +#. FRMDiagnosticTool..Caption +#. FRMDiagnosticTool..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:4 gui-classic/UFRMRandomHashUtil.dfm:4 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:4 +msgid "FRMDiagnosticTool" +msgstr "" + +#. FRMDiagnosticTool..btnRH..Caption +#. FRMDiagnosticTool..btnRH..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:25 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:25 +msgid "Start Random Hash" +msgstr "" + +#. FRMDiagnosticTool..btnRH2..Caption +#. FRMDiagnosticTool..btnRH2..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:34 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:34 +msgid "Start Random Hash 2" +msgstr "" + +#. FRMDiagnosticTool..btnRH2C..Caption +#. FRMDiagnosticTool..btnRH2C..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:51 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:51 +msgid "Start Random Hash 2 (Cached)" +msgstr "" + +#. FRMDiagnosticTool..btnEntropy..Caption +#. FRMDiagnosticTool..btnEntropy..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:60 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:60 +msgid "Entropy Tests" +msgstr "" + +#. FRMDiagnosticTool..btnRH2NonceScan..Caption +#. FRMDiagnosticTool..btnRH2NonceScan..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:69 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:69 +msgid "Start Random Hash 2 (Nonce Scan)" +msgstr "" + +#. FRMDiagnosticTool..txtScanLevel..TextHint +#. FRMDiagnosticTool..txtScanLevel..TextHint +#: gui-classic/UFRMDiagnosticTool.dfm:79 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:79 +msgid "Enter Scan Level (2-4)" +msgstr "" + +#. FRMDiagnosticTool..btnRHC..Caption +#. FRMDiagnosticTool..btnRHC..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:86 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:86 +msgid "Start Random Hash (Cached)" +msgstr "" + +#. FRMHashLock..Caption +#: gui-classic/UFRMHashLock.dfm:5 +msgid "Atomic Swap Hash-Lock " +msgstr "" + +#. FRMHashLock..lblError..Caption +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..lblEncryptionErrors..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsTransaction..lblTransactionErrors..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..lblChangeKeyErrors..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..lblNewOwnerErrors..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblListAccountErrors..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsDelistAccount..lblDelistErrors..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..lblBuyAccountErrors..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..lblChangeInfoErrors..Caption +#: gui-classic/UFRMHashLock.dfm:29 gui-classic/UFRMOperation.dfm:191 +#: gui-classic/UFRMOperation.dfm:327 gui-classic/UFRMOperation.dfm:405 +#: gui-classic/UFRMOperation.dfm:422 gui-classic/UFRMOperation.dfm:534 +#: gui-classic/UFRMOperation.dfm:778 gui-classic/UFRMOperation.dfm:820 +#: gui-classic/UFRMOperation.dfm:973 +msgid "Errors detected" +msgstr "" + +#. FRMHashLock..btnSet..Caption +#: gui-classic/UFRMHashLock.dfm:56 +msgid "Set Hash-Lock" +msgstr "" + +#. FRMHashLock..GroupBox1..Caption +#: gui-classic/UFRMHashLock.dfm:67 +msgid "Mode" +msgstr "" + +#. FRMHashLock..GroupBox1..rbHashLock....Caption +#: gui-classic/UFRMHashLock.dfm:76 +msgid "Hash-Lock - the 32 byte hash-lock provided to you by the counterparty" +msgstr "" + +#. FRMHashLock..GroupBox1..rbHashLockKey....Caption +#: gui-classic/UFRMHashLock.dfm:86 +msgid "" +"Hash-Lock Key - a secret that will be hashed to create the 32 byte hash-lock" +msgstr "" + +#. FRMHashLock..GroupBox2..Caption +#: gui-classic/UFRMHashLock.dfm:96 +msgid "Data" +msgstr "" + +#. FRMHashLock..GroupBox2..Label2..Caption +#: gui-classic/UFRMHashLock.dfm:106 +msgid "Please enter the hash lock data as a hexadecimal string" +msgstr "" + +#. FRMMemoText..Caption +#: gui-classic/UFRMMemoText.dfm:5 +msgid "Information" +msgstr "" + +#. FRMMemoText..Memo....Lines.Strings +#: gui-classic/UFRMMemoText.dfm:53 +msgid "Memo" +msgstr "" + +#. FRMNewPrivateKeyType..Caption +#: gui-classic/UFRMNewPrivateKeyType.dfm:6 +msgid "New Private Key" +msgstr "" + +#. FRMNewPrivateKeyType..Label1..Caption +#: gui-classic/UFRMNewPrivateKeyType.dfm:26 +msgid "Name" +msgstr "" + +#. FRMNewPrivateKeyType..ebName..Text +#: gui-classic/UFRMNewPrivateKeyType.dfm:34 +msgid "ebName" +msgstr "" + +#. FRMNewPrivateKeyType..rgKeyType..Caption +#: gui-classic/UFRMNewPrivateKeyType.dfm:41 +msgid " Key Type: " +msgstr "" + +#. FRMNewPrivateKeyType..rgKeyType....Items.Strings +#: gui-classic/UFRMNewPrivateKeyType.dfm:43 +msgid "asdf" +msgstr "" + +#. FRMNewPrivateKeyType..bbOk..Caption +#. FRMNodesIp..bbOk..Caption +#. FRMChangeLanguage..bbOk..Caption +#. FRMChangeLanguage..bbOk..Caption +#: gui-classic/UFRMNewPrivateKeyType.dfm:51 gui-classic/UFRMNodesIp.dfm:42 +#: gui-classic/UFRMSelectLanguage.dfm:18 +#: lib/i386-win32/ufrmselectlanguage.dfm:18 +msgid "OK" +msgstr "" + +#. FRMNodesIp..Caption +#: gui-classic/UFRMNodesIp.dfm:6 +msgid "Nodes IP" +msgstr "" + +#. FRMNodesIp..Label1..Caption +#: gui-classic/UFRMNodesIp.dfm:25 +msgid "Available Nodes Ip to connect" +msgstr "" + +#. FRMNodesIp..memoNodesIp....Lines.Strings +#: gui-classic/UFRMNodesIp.dfm:33 +msgid "memoNodesIp" +msgstr "" + +#. FRMNodesIp..cbTryOnlyWithThisServers..Caption +#: gui-classic/UFRMNodesIp.dfm:82 +msgid "Try to connect ONLY with this servers" +msgstr "" + +#. FRMOperation..Caption +#: gui-classic/UFRMOperation.dfm:6 +msgid "New Operation" +msgstr "" + +#. FRMOperation..lblAccountCaption..Caption +#. FRMSaleAccounts..lblAccountCaption..Caption +#: gui-classic/UFRMOperation.dfm:26 gui-classic/UFRMSaleAccounts.dfm:25 +msgid "Account:" +msgstr "" + +#. FRMOperation..lblAccountBalance..Caption +#. FRMSaleAccounts..lblAccountBalance..Caption +#: gui-classic/UFRMOperation.dfm:35 gui-classic/UFRMSaleAccounts.dfm:53 +msgid "lblAccountBalance" +msgstr "" + +#. FRMOperation..lblAccountsCount..Caption +#. FRMSaleAccounts..lblAccountsCount..Caption +#: gui-classic/UFRMOperation.dfm:59 gui-classic/UFRMSaleAccounts.dfm:66 +msgid "XXX" +msgstr "" + +#. FRMOperation..bbExecute..Caption +#. FRMOperation..ActionList..actExecute..Caption +#. FRMSaleAccounts..bbExecute..Caption +#. FRMSaleAccounts..ActionList..actExecute..Caption +#: gui-classic/UFRMOperation.dfm:68 gui-classic/UFRMOperation.dfm:1179 +#: gui-classic/UFRMSaleAccounts.dfm:178 gui-classic/UFRMSaleAccounts.dfm:215 +msgid "Execute (F12)" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..lblFee..Caption +#: gui-classic/UFRMOperation.dfm:113 +msgid "Operation Fee" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..lblSignerAccount..Caption +#: gui-classic/UFRMOperation.dfm:122 +msgid "Signer account (Fee payer)" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..Caption +#: gui-classic/UFRMOperation.dfm:165 +msgid " Payload: " +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..lblEncryptPassword..Caption +#: gui-classic/UFRMOperation.dfm:172 +msgid "Password:" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..Label4..Caption +#: gui-classic/UFRMOperation.dfm:181 +msgid "Payload Data" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..rbEncryptedWithEC..Caption +#: gui-classic/UFRMOperation.dfm:216 +msgid "Encrypted with dest account public key" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..rbEncrptedWithPassword..Caption +#: gui-classic/UFRMOperation.dfm:227 +msgid "Encrypted with password" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..rbNotEncrypted..Caption +#: gui-classic/UFRMOperation.dfm:237 +msgid "Dont encrypt (Public payload)" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..rbEncryptedWithOldEC..Caption +#: gui-classic/UFRMOperation.dfm:272 +msgid "Encrypted with old public key" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..cbPayloadAsHex..Caption +#: gui-classic/UFRMOperation.dfm:282 +msgid "As Hex" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsTransaction..Caption +#: gui-classic/UFRMOperation.dfm:302 +msgid "Transaction" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsTransaction..lblDestAccount..Caption +#: gui-classic/UFRMOperation.dfm:308 +msgid "Destination account" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsTransaction..lblAmount..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..lblBuyAmount..Caption +#: gui-classic/UFRMOperation.dfm:317 gui-classic/UFRMOperation.dfm:810 +msgid "Amount" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..Caption +#: gui-classic/UFRMOperation.dfm:387 +msgid "Change Key" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..lblNewPrivateKey..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..lblBuyNewKey..Caption +#: gui-classic/UFRMOperation.dfm:394 gui-classic/UFRMOperation.dfm:837 +msgid "New private key" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..lblNewOwnerPublicKey..Caption +#: gui-classic/UFRMOperation.dfm:437 +msgid "New owners public key" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..rbChangeKeyWithAnother..Caption +#: gui-classic/UFRMOperation.dfm:446 +msgid "Change private key" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..rbChangeKeyTransferAccountToNewOwner..Caption +#: gui-classic/UFRMOperation.dfm:514 +msgid "Transfer account to a new owner" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..Caption +#: gui-classic/UFRMOperation.dfm:526 +msgid "List Account" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblPrice..Caption +#: gui-classic/UFRMOperation.dfm:550 +msgid "Sale Price" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblSeller..Caption +#: gui-classic/UFRMOperation.dfm:560 +msgid "Seller Account" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblNewKey..Caption +#: gui-classic/UFRMOperation.dfm:604 +msgid "Buyer Key" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblTimeLock..Caption +#: gui-classic/UFRMOperation.dfm:614 +msgid "Time-Lock" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblHashLock..Caption +#: gui-classic/UFRMOperation.dfm:623 +msgid "Hash-Lock" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..rbListAccountForPublicSale..Caption +#: gui-classic/UFRMOperation.dfm:699 +msgid "List for Public Sale" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..rbListAccountForPrivateSale..Caption +#: gui-classic/UFRMOperation.dfm:707 +msgid "List for Private Sale" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..rbListAccountForAccountSwap..Caption +#: gui-classic/UFRMOperation.dfm:715 +msgid "List for Atomic Account Swap" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..rbListAccountForCoinSwap..Caption +#: gui-classic/UFRMOperation.dfm:723 +msgid "List for Atomic Coin Swap" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..ebPrice..TextHint +#: gui-classic/UFRMOperation.dfm:732 +msgid "PASC Quantity" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..ebSellerAccount..TextHint +#: gui-classic/UFRMOperation.dfm:740 +msgid "Account Number" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..ebNewKey..TextHint +#: gui-classic/UFRMOperation.dfm:748 +msgid "BASE58 Encoded Public Key Of New Owner" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..ebTimeLock..Hint +#: gui-classic/UFRMOperation.dfm:755 +msgid "Block Number " +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..ebTimeLock..TextHint +#: gui-classic/UFRMOperation.dfm:759 +msgid "Block number" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsDelistAccount..Caption +#: gui-classic/UFRMOperation.dfm:770 +msgid "Delist Account" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..Caption +#: gui-classic/UFRMOperation.dfm:790 +msgid "Buy Account" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..lblAccountToBuy..Caption +#: gui-classic/UFRMOperation.dfm:799 +msgid "Account to Buy" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..Label2..Caption +#: gui-classic/UFRMOperation.dfm:846 +msgid "any over-payment will remain on bought account" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..Caption +#: gui-classic/UFRMOperation.dfm:966 +msgid "Change Info" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..lblChangeName..Caption +#: gui-classic/UFRMOperation.dfm:990 +msgid "Change name" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..lblChangeType..Caption +#: gui-classic/UFRMOperation.dfm:1001 +msgid "Change type" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..lblChangeAccountData..Caption +#: gui-classic/UFRMOperation.dfm:1012 +msgid "Change Data" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..ebChangeName..TextHint +#: gui-classic/UFRMOperation.dfm:1022 +msgid "Account name (null or 3..64 chars)" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..ebChangeType..TextHint +#: gui-classic/UFRMOperation.dfm:1030 +msgid "0..65535" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..ebChangeAccountData..TextHint +#: gui-classic/UFRMOperation.dfm:1038 +msgid "Hexadecimal value (0..32 bytes)" +msgstr "" + +#. FRMOperation..PageControlLocked..tsGlobalError..lblGlobalErrors..Caption +#: gui-classic/UFRMOperation.dfm:1060 +msgid "????" +msgstr "" + +#. FRMOperation..PageControlLocked..tsGlobalError..bbPassword..Caption +#. FRMWalletKeys..bbUpdatePassword..Caption +#: gui-classic/UFRMOperation.dfm:1076 gui-classic/UFRMWalletKeys.dfm:500 +msgid "Password" +msgstr "" + +#. FRMOperation..memoAccounts....Lines.Strings +#. FRMOperation..memoAccounts....Lines.Strings +#. FRMSaleAccounts..memoAccounts....Lines.Strings +#. FRMSaleAccounts..memoAccounts....Lines.Strings +#: gui-classic/UFRMOperation.dfm:1152 gui-classic/UFRMOperation.dfm:1153 +#: gui-classic/UFRMSaleAccounts.dfm:87 gui-classic/UFRMSaleAccounts.dfm:88 +msgid "123456-11 (0.0000); 123456-11 (0.0000); " +msgstr "" + +#. FRMOperation..ebSenderAccount..Text +#. FRMSaleAccounts..ebSenderAccount..Text +#: gui-classic/UFRMOperation.dfm:1171 gui-classic/UFRMSaleAccounts.dfm:107 +msgid "ebSenderAccount" +msgstr "" + +#. FRMOperationsExplorer..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:5 +msgid "Operations Explorer Tool" +msgstr "" + +#. FRMOperationsExplorer..pnlTop..lblTopCaption....Caption +#: gui-classic/UFRMOperationsExplorer.dfm:58 +msgid "" +"You can use this tool to explore operations, also you can copy/paste " +"operations as a RAW (Use Ctrl+I to Import). This tool allows to generate a " +"Multioperation, send to third party the RAW, add more txs... and then sign. " +"Once Everybody has signed, you will be able to EXECUTE OPERATION to be " +"added to network nodes. " +msgstr "" + +#. FRMOperationsExplorer..pnlOpInfo..pnlExport..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:85 +msgid "pnlExport" +msgstr "" + +#. FRMOperationsExplorer..pnlOpInfo..pnlExport..Label1..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:94 +msgid "Operation as RAW:" +msgstr "" + +#. FRMOperationsExplorer..pnlOpInfo..pnlInfo..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:115 +msgid "pnlInfo" +msgstr "" + +#. FRMOperationsExplorer..pnlOpInfo..pnlInfo..pnlInfoOptions..Label2..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:139 +msgid "Multioperation actions:" +msgstr "" + +#. FRMOperationsExplorer..pnlOpInfo..pnlInfo..pnlInfoOptions..bbRandom..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:188 +msgid "RANDOM OPERATIONS" +msgstr "" + +#. FRMOperationsExplorer..mMenu..MiTools..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:199 +msgid "Tools" +msgstr "" + +#. FRMOperationsExplorer..mMenu..MiTools..MiImportOperationsFromTxt..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:201 +msgid "Import Operations from RAW" +msgstr "" + +#. FRMOperationsExplorer..mMenu..MiTools..MiDivider1..Caption +#. FRMOperationsExplorer..mMenu..MiActions..MenuItem6..Caption +#. FRMWallet..MainMenu..miProject..miN1..Caption +#. FRMWallet..MainMenu..miProject..N1..Caption +#. FRMWallet..MainMenu..MiOperations..N2..Caption +#. FRMWallet..MainMenu..MiOperations..N3..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:206 +#: gui-classic/UFRMOperationsExplorer.dfm:224 gui-classic/UFRMWallet.dfm:1254 +#: gui-classic/UFRMWallet.dfm:1270 gui-classic/UFRMWallet.dfm:1310 +#: gui-classic/UFRMWallet.dfm:1327 +msgid "-" +msgstr "" + +#. FRMOperationsExplorer..mMenu..MiTools..miLoadFromBlockchain..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:209 +msgid "Load Operations from Blockchain" +msgstr "" + +#. FRMOperationsExplorer..mMenu..MiTools..MiLoadOperationsFromBlockchainFile..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:214 +msgid "Load Operations from Blockchain file" +msgstr "" + +#. FRMOperationsExplorer..mMenu..MiActions..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:219 +msgid "Actions" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActExecuteOperation..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:244 +msgid "Execute Operation" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActAddTxToMultioperation..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:249 +msgid "Add Tx to Multioperation" +msgstr "" + +#. FRMOperationsExplorer..ActionList..AddOpChangeToMultioperation..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:254 +msgid "Add OpChange to Multioperation" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActRemoveAccountFromMultioperation..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:259 +msgid "Remove Account from Multioperation" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActSignMultioperation..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:264 +msgid "Sign Multioperation" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActAddTx..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:269 +msgid "Add Tx" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActAddOpChange..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:274 +msgid "Add OpChange" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActRemove..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:279 +msgid "Remove" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActSign..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:284 +msgid "Sign" +msgstr "" + +#. FRMPascalCoinWalletConfig..Caption +#. FRMWallet..MainMenu..miProject..miOptions..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:6 +#: gui-classic/UFRMWallet.dfm:1257 +msgid "Options" +msgstr "" + +#. FRMPascalCoinWalletConfig..Label1..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:25 +msgid "Default fee for operation" +msgstr "" + +#. FRMPascalCoinWalletConfig..Label2..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:34 +msgid "Internet Server Port" +msgstr "" + +#. FRMPascalCoinWalletConfig..lblDefaultInternetServerPort..Caption +#. FRMPascalCoinWalletConfig..lblDefaultJSONRPCMinerServerPort..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:43 +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:87 +msgid "(Default XXXX)" +msgstr "" + +#. FRMPascalCoinWalletConfig..Label3..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:52 +msgid "Miner Name:" +msgstr "" + +#. FRMPascalCoinWalletConfig..Label4..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:61 +msgid "This name will be included in each new block you mine!" +msgstr "" + +#. FRMPascalCoinWalletConfig..Label5..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:78 +msgid "JSON-RPC Port" +msgstr "" + +#. FRMPascalCoinWalletConfig..Label6..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:96 +msgid "Allowed IP's" +msgstr "" + +#. FRMPascalCoinWalletConfig..Label7..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:105 +msgid "Ip's separated by semicolon or empty for all" +msgstr "" + +#. FRMPascalCoinWalletConfig..cbJSONRPCMinerServerActive..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:122 +msgid "JSON-RPC Server Miner (TCP/IP, no HTTP)" +msgstr "" + +#. FRMPascalCoinWalletConfig..cbSaveLogFiles..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:139 +msgid "Save log file" +msgstr "" + +#. FRMPascalCoinWalletConfig..cbShowLogs..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:148 +msgid "Show logs" +msgstr "" + +#. FRMPascalCoinWalletConfig..bbUpdatePassword..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:196 +msgid "Wallet Password" +msgstr "" + +#. FRMPascalCoinWalletConfig..ebMinerName..Text +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:265 +msgid "ebMinerName" +msgstr "" + +#. FRMPascalCoinWalletConfig..cbShowModalMessages..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:272 +msgid "Show modal messages" +msgstr "" + +#. FRMPascalCoinWalletConfig..gbMinerPrivateKey..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:301 +msgid " Miner Server Private Key: " +msgstr "" + +#. FRMPascalCoinWalletConfig..gbMinerPrivateKey..rbGenerateANewPrivateKeyEachBlock..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:308 +msgid "Generate a new private key for each generated block" +msgstr "" + +#. FRMPascalCoinWalletConfig..gbMinerPrivateKey..rbUseARandomKey..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:316 +msgid "Use a random existing key" +msgstr "" + +#. FRMPascalCoinWalletConfig..gbMinerPrivateKey..rbMineAllwaysWithThisKey..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:324 +msgid "Always mine with this key:" +msgstr "" + +#. FRMPascalCoinWalletConfig..cbSaveDebugLogs..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:341 +msgid "Save debug logs too" +msgstr "" + +#. FRMPascalCoinWalletConfig..bbOpenDataFolder..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:349 +msgid "Open Data Folder" +msgstr "" + +#. FRMPascalCoinWalletConfig..cbJSONRPCPortEnabled..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:393 +msgid "JSON-RPC Server port enabled (HTTP)" +msgstr "" + +#. FRMPascalCoinWalletConfig..ebJSONRPCAllowedIPs..Text +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:403 +msgid "ebJSONRPCAllowedIPs" +msgstr "" + +#. FRMPascalCoinWalletConfig..cbDownloadNewCheckpoint..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:410 +msgid "Download new Checkpoint if blockchain older than..." +msgstr "" + +#. FRMPascalCoinWalletConfig..bbChangeLanguage..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:428 +msgid "Change UI language" +msgstr "" + +#. FRMPayloadDecoder..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:7 +msgid "Operation Information/Decoder" +msgstr "" + +#. FRMPayloadDecoder..Label1..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:26 +msgid "Block/Op:" +msgstr "" + +#. FRMPayloadDecoder..lblBlock..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:33 +msgid "000000/0000" +msgstr "" + +#. FRMPayloadDecoder..Label6..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:59 +msgid "Date Time:" +msgstr "" + +#. FRMPayloadDecoder..Label2..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:66 +msgid "Operation:" +msgstr "" + +#. FRMPayloadDecoder..lblAmountCaption..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:88 +msgid "Amount:" +msgstr "" + +#. FRMPayloadDecoder..lblFeeCaption..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:108 +msgid "Fee:" +msgstr "" + +#. FRMPayloadDecoder..Label4..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:128 +msgid "OpHash" +msgstr "" + +#. FRMPayloadDecoder..lblSenderCaption..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:135 +msgid "Sender:" +msgstr "" + +#. FRMPayloadDecoder..lblSender..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:142 +msgid "9999999-99" +msgstr "" + +#. FRMPayloadDecoder..lblReceiverCaption..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:155 +msgid "Receiver:" +msgstr "" + +#. FRMPayloadDecoder..lblReceiverInfo..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:175 +msgid "(Receiver info)" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecoded..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:192 +msgid "Payload" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecoded..Label7..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:202 +msgid "Decoded Payload:" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecoded..lblDecodedMethod..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:210 +msgid "(Method)" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecoded..Label3..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:223 +msgid "Original Payload in Hexadecimal:" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecoded..memoDecoded....Lines.Strings +#. FRMPayloadDecoder..PageControl..tsDecoded..memoOriginalPayloadInHexa....Lines.Strings +#: gui-classic/UFRMPayloadDecoder.dfm:237 +#: gui-classic/UFRMPayloadDecoder.dfm:256 +msgid "memoDecoded" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecoded..cbShowAsHexadecimal..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:267 +msgid "Show as hexadecimal" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecodeMethods..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:273 +msgid "Decode methods" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecodeMethods..lblPasswordsInfo..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:280 +msgid "lblPasswordsInfo" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecodeMethods..cbMethodPublicPayload..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:287 +msgid "Not encrypted (Public payload)" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecodeMethods..cbUsingPrivateKeys..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:296 +msgid "Using Private keys of my Wallet" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecodeMethods..cbUsingPasswords..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:305 +msgid "Using Passwords of the list" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecodeMethods..bbSaveMethods..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:323 +msgid "Save" +msgstr "" + +#. FRMPayloadDecoder..bbFind..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:376 +msgid "&Find" +msgstr "" + +#. FRMPayloadDecoder..ebOphash..Text +#: gui-classic/UFRMPayloadDecoder.dfm:420 +msgid "12345678901234567890123456789012345678901234567890123456789012" +msgstr "" + +#. FRMDiagnosticTool..txtLog..Text +#: gui-classic/UFRMRandomHashUtil.dfm:26 +msgid "txtLog" +msgstr "" + +#. FRMDiagnosticTool..btnRH..Caption +#: gui-classic/UFRMRandomHashUtil.dfm:33 +msgid "Random Hash" +msgstr "" + +#. FRMDiagnosticTool..btnRH2..Caption +#: gui-classic/UFRMRandomHashUtil.dfm:41 +msgid "Random Hash 2" +msgstr "" + +#. FRMRandomOperations..Caption +#. FRMRandomOperations..pnlClient..pnlTop1..bbRandomOperations..Caption +#: gui-classic/UFRMRandomOperations.dfm:4 +#: gui-classic/UFRMRandomOperations.dfm:73 +msgid "Random Operations" +msgstr "" + +#. FRMRandomOperations..pnlTop..lblTopCaption....Caption +#: gui-classic/UFRMRandomOperations.dfm:39 +msgid "" +"WARNING! This form will generate RANDOM operations using your private " +"keys!!!" +msgstr "" + +#. FRMRandomOperations..pnlClient..mLogs....Lines.Strings +#: gui-classic/UFRMRandomOperations.dfm:85 +msgid "mLogs" +msgstr "" + +#. FRMRPCCalls..Caption +#. FRMWallet..MainMenu..miProject..MiRPCCalls..Caption +#: gui-classic/UFRMRPCCalls.dfm:5 gui-classic/UFRMWallet.dfm:1266 +msgid "RPC Calls" +msgstr "" + +#. FRMRPCCalls..pnlTop..lblTopCaption....Caption +#: gui-classic/UFRMRPCCalls.dfm:45 +msgid "" +"WARNING! Execute only calls you understand. Execute unknown calls provided " +"by third person can cause that you lost your keys/balance!" +msgstr "" + +#. FRMRPCCalls..pnlRight..Label1..Caption +#: gui-classic/UFRMRPCCalls.dfm:83 +msgid "Method" +msgstr "" + +#. FRMRPCCalls..pnlRight..Label2..Caption +#: gui-classic/UFRMRPCCalls.dfm:92 +msgid "Server" +msgstr "" + +#. FRMRPCCalls..pnlRight..ebMethod..Text +#: gui-classic/UFRMRPCCalls.dfm:102 +msgid "ebMethod" +msgstr "" + +#. FRMRPCCalls..pnlRight..pageControl..tsKeyNames..Caption +#: gui-classic/UFRMRPCCalls.dfm:113 +msgid "Key/Value Params" +msgstr "" + +#. FRMRPCCalls..pnlRight..pageControl..tsJSONParams..Caption +#: gui-classic/UFRMRPCCalls.dfm:130 +msgid "Params as JSON" +msgstr "" + +#. FRMRPCCalls..pnlRight..bbSendCommand..Caption +#: gui-classic/UFRMRPCCalls.dfm:148 +msgid "&Send" +msgstr "" + +#. FRMRPCCalls..pnlRight..ebServerURL..Text +#: gui-classic/UFRMRPCCalls.dfm:195 +msgid "ebServerURL" +msgstr "" + +#. FRMRPCCalls..pnlInfo..pnlInfoBottom..pnlLastCall..Label3..Caption +#: gui-classic/UFRMRPCCalls.dfm:244 +msgid "Last call result:" +msgstr "" + +#. FRMRPCCalls..pnlInfo..pnlInfoBottom..pnlLastCall..lblLastCallResultState..Caption +#: gui-classic/UFRMRPCCalls.dfm:253 +msgid "STATE" +msgstr "" + +#. FRMSaleAccounts..Caption +#: gui-classic/UFRMSaleAccounts.dfm:5 +msgid "Sale accounts" +msgstr "" + +#. FRMSaleAccounts..Label1..Caption +#: gui-classic/UFRMSaleAccounts.dfm:32 +msgid "Sale price:" +msgstr "" + +#. FRMSaleAccounts..Label2..Caption +#: gui-classic/UFRMSaleAccounts.dfm:39 +msgid "Locked until block:" +msgstr "" + +#. FRMSaleAccounts..Label3..Caption +#: gui-classic/UFRMSaleAccounts.dfm:46 +msgid "Seller account (where to pay)" +msgstr "" + +#. FRMSaleAccounts..ebSalePrice..Text +#. FRMSaleAccounts..ebSellerAccount..Text +#: gui-classic/UFRMSaleAccounts.dfm:115 gui-classic/UFRMSaleAccounts.dfm:170 +msgid "Edit1" +msgstr "" + +#. FRMSaleAccounts..ebLockedUntilBlock..Text +#: gui-classic/UFRMSaleAccounts.dfm:123 +msgid "ebLockedUntilBlock" +msgstr "" + +#. FRMSaleAccounts..gbSellOptions..Caption +#: gui-classic/UFRMSaleAccounts.dfm:130 +msgid " Sell options: " +msgstr "" + +#. FRMSaleAccounts..gbSellOptions..lblNewOwnerPublicKey..Caption +#: gui-classic/UFRMSaleAccounts.dfm:137 +msgid "New owner's public key" +msgstr "" + +#. FRMSaleAccounts..gbSellOptions..rbEveryoneCanBuy..Caption +#: gui-classic/UFRMSaleAccounts.dfm:144 +msgid "Everyone can buy" +msgstr "" + +#. FRMSaleAccounts..gbSellOptions..rbReservedForAPublickKey..Caption +#: gui-classic/UFRMSaleAccounts.dfm:152 +msgid "Reserved for only one public key (private)" +msgstr "" + +#. FRMSaleAccounts..gbSellOptions..ebNewOwnerPublicKey..Text +#: gui-classic/UFRMSaleAccounts.dfm:161 +msgid "ebDestAccount" +msgstr "" + +#. FRMChangeLanguage..Caption +#. FRMChangeLanguage..Caption +#: gui-classic/UFRMSelectLanguage.dfm:8 +#: lib/i386-win32/ufrmselectlanguage.dfm:8 +msgid "Language Selection" +msgstr "" + +#. FRMChangeLanguage..bbCancel..Caption +#. FRMChangeLanguage..bbCancel..Caption +#: gui-classic/UFRMSelectLanguage.dfm:28 +#: lib/i386-win32/ufrmselectlanguage.dfm:28 +msgid "Cancel" +msgstr "" + +#. FRMChangeLanguage..Label1..Caption +#. FRMChangeLanguage..Label1..Caption +#: gui-classic/UFRMSelectLanguage.dfm:46 +#: lib/i386-win32/ufrmselectlanguage.dfm:46 +msgid "Select your preferred language" +msgstr "" + +#. FRMWallet..pnlTop..lblCurrentBlockCaption..Caption +#: gui-classic/UFRMWallet.dfm:135 +msgid "Total Blocks:" +msgstr "" + +#. FRMWallet..pnlTop..lblCurrentBlockTimeCaption..Caption +#: gui-classic/UFRMWallet.dfm:153 +msgid "Current Block Age:" +msgstr "" + +#. FRMWallet..pnlTop..lblCurrentBlockTime..Caption +#: gui-classic/UFRMWallet.dfm:162 +msgid "000 seconds ago" +msgstr "" + +#. FRMWallet..pnlTop..lblOperationsPendingCaption..Caption +#: gui-classic/UFRMWallet.dfm:171 +msgid "Pending Operations:" +msgstr "" + +#. FRMWallet..pnlTop..lblMiningStatusCaption..Caption +#: gui-classic/UFRMWallet.dfm:189 +msgid "Miner Clients:" +msgstr "" + +#. FRMWallet..pnlTop..lblCurrentDifficultyCaption..Caption +#: gui-classic/UFRMWallet.dfm:207 +msgid "Current Target:" +msgstr "" + +#. FRMWallet..pnlTop..Label4..Caption +#: gui-classic/UFRMWallet.dfm:234 +msgid "Time average:" +msgstr "" + +#. FRMWallet..pnlTop..Label8..Caption +#: gui-classic/UFRMWallet.dfm:243 +msgid "Node Status:" +msgstr "" + +#. FRMWallet..pnlTop..lblNodeStatus..Caption +#: gui-classic/UFRMWallet.dfm:252 +msgid "???" +msgstr "" + +#. FRMWallet..pnlTop..Label16..Caption +#: gui-classic/UFRMWallet.dfm:294 +msgid "Blocks Found:" +msgstr "" + +#. FRMWallet..pnlTop..lblBlocksFound..Hint +#: gui-classic/UFRMWallet.dfm:309 +msgid "Blocks found while Miner is running..." +msgstr "" + +#. FRMWallet..pnlTop..lblReceivedMessages..Caption +#: gui-classic/UFRMWallet.dfm:328 +msgid "Received Messages" +msgstr "" + +#. FRMWallet..pnlTop..lblBuild..Caption +#: gui-classic/UFRMWallet.dfm:344 +msgid "Build" +msgstr "" + +#. FRMWallet..StatusBar......Text +#: gui-classic/UFRMWallet.dfm:363 +msgid "Server Active" +msgstr "" + +#. FRMWallet..StatusBar......Text +#: gui-classic/UFRMWallet.dfm:367 +msgid "Connection status" +msgstr "" + +#. FRMWallet..StatusBar......Text +#: gui-classic/UFRMWallet.dfm:371 +msgid "Blocks" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..Caption +#: gui-classic/UFRMWallet.dfm:385 +msgid "Account Explorer" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pnlMyAccountsTop..Label18..Caption +#. FRMWallet..MainMenu..MiOperations..MiFindaccount..Caption +#: gui-classic/UFRMWallet.dfm:406 gui-classic/UFRMWallet.dfm:1295 +msgid "Find account" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pnlMyAccountsTop..cbExploreMyAccounts..Caption +#: gui-classic/UFRMWallet.dfm:458 +msgid "Explore accounts with one of my Wallet Keys" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pnlMyAccountsTop..bbChangeKeyName..Caption +#: gui-classic/UFRMWallet.dfm:476 +msgid "Change Key name" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pnlMyAccountsTop..cbFilterAccounts..Caption +#: gui-classic/UFRMWallet.dfm:485 +msgid "Filter accounts by balance" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pnlMyAccountsTop..ebFilterAccountByBalanceMin..Hint +#: gui-classic/UFRMWallet.dfm:494 +msgid "Min balance" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pnlMyAccountsTop..ebFilterAccountByBalanceMax..Hint +#: gui-classic/UFRMWallet.dfm:504 +msgid "Max balance" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pnlAccounts..pnlAccountsInfo..bbAccountsRefresh..Caption +#: gui-classic/UFRMWallet.dfm:580 +msgid "Refresh" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsAccountOperations..Caption +#: gui-classic/UFRMWallet.dfm:622 +msgid "Account Operations" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..Caption +#: gui-classic/UFRMWallet.dfm:634 +msgid "Selected Accounts For Batch Operation" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsTop..Label15..Caption +#: gui-classic/UFRMWallet.dfm:667 +msgid "Select multiple accounts to execute massive operations" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsBottom..Label22..Caption +#: gui-classic/UFRMWallet.dfm:703 +msgid "Accounts Balance:" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsLeft..sbSelectedAccountsAdd..Caption +#: gui-classic/UFRMWallet.dfm:730 +msgid ">" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsLeft..sbSelectedAccountsAddAll..Caption +#: gui-classic/UFRMWallet.dfm:738 +msgid ">>" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsLeft..sbSelectedAccountsDel..Caption +#: gui-classic/UFRMWallet.dfm:746 +msgid "<" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsLeft..sbSelectedAccountsDelAll..Caption +#: gui-classic/UFRMWallet.dfm:754 +msgid "<<" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..bbSelectedAccountsOperation..Caption +#. FRMWallet..MainMenu..MiOperations..Caption +#: gui-classic/UFRMWallet.dfm:763 gui-classic/UFRMWallet.dfm:1278 +msgid "Operations" +msgstr "" + +#. FRMWallet..PageControl..tsPendingOperations..Caption +#: gui-classic/UFRMWallet.dfm:829 +msgid "Pending Operations" +msgstr "" + +#. FRMWallet..PageControl..tsPendingOperations..pnlPendingOperations..Label10....Caption +#: gui-classic/UFRMWallet.dfm:865 +msgid "" +"Here you can see Operations transmited/received from other nodes that will " +"be included in next block. There is no guarantee that other nodes will " +"include them when mining, so it's important that you mine too to help " +"include Operations to the main BlockChain" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Caption +#: gui-classic/UFRMWallet.dfm:879 +msgid "Block Explorer" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..Label9..Caption +#. FRMWallet..PageControl..tsOperations..Panel1..Label2..Caption +#: gui-classic/UFRMWallet.dfm:898 gui-classic/UFRMWallet.dfm:994 +msgid "Filter by blocks range" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..lblHashRateBackBlocks..Caption +#: gui-classic/UFRMWallet.dfm:907 +msgid "HashRate back blocks" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..lblHashRateBackBlocks1..Caption +#: gui-classic/UFRMWallet.dfm:916 +msgid "Units" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..cbHashRateUnits..Text +#. FRMWallet..PageControl..tsBlockChain..Panel2..cbHashRateUnits....Items.Strings +#: gui-classic/UFRMWallet.dfm:955 gui-classic/UFRMWallet.dfm:960 +msgid "Mh/s" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..cbHashRateUnits....Items.Strings +#: gui-classic/UFRMWallet.dfm:959 +msgid "Kh/s" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..cbHashRateUnits....Items.Strings +#: gui-classic/UFRMWallet.dfm:961 +msgid "Gh/s" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..cbHashRateUnits....Items.Strings +#: gui-classic/UFRMWallet.dfm:962 +msgid "Th/s" +msgstr "" + +#. FRMWallet..PageControl..tsOperations..Caption +#. FRMWallet..MainMenu..MiOperations..MiOperationsExplorer..Caption +#: gui-classic/UFRMWallet.dfm:975 gui-classic/UFRMWallet.dfm:1305 +msgid "Operations Explorer" +msgstr "" + +#. FRMWallet..PageControl..tsLogs..Caption +#: gui-classic/UFRMWallet.dfm:1027 +msgid "Logs" +msgstr "" + +#. FRMWallet..PageControl..tsLogs..pnlTopLogs..cbShowDebugLogs..Caption +#: gui-classic/UFRMWallet.dfm:1046 +msgid "Show Debug Logs" +msgstr "" + +#. FRMWallet..PageControl..tsNodeStats..Caption +#: gui-classic/UFRMWallet.dfm:1062 +msgid "Node Stats" +msgstr "" + +#. FRMWallet..PageControl..tsNodeStats..Label3..Caption +#: gui-classic/UFRMWallet.dfm:1076 +msgid "Active Connections:" +msgstr "" + +#. FRMWallet..PageControl..tsNodeStats..Label6..Caption +#: gui-classic/UFRMWallet.dfm:1086 +msgid "Known Node Servers:" +msgstr "" + +#. FRMWallet..PageControl..tsNodeStats..Label7..Caption +#: gui-classic/UFRMWallet.dfm:1096 +msgid "Blacklisted Nodes" +msgstr "" + +#. FRMWallet..PageControl..tsMessages..Caption +#: gui-classic/UFRMWallet.dfm:1135 +msgid "Messages" +msgstr "" + +#. FRMWallet..PageControl..tsMessages..Label11..Caption +#: gui-classic/UFRMWallet.dfm:1149 +msgid "Messages:" +msgstr "" + +#. FRMWallet..PageControl..tsMessages..Label12..Caption +#: gui-classic/UFRMWallet.dfm:1158 +msgid "Message to send:" +msgstr "" + +#. FRMWallet..PageControl..tsMessages..Label13..Caption +#: gui-classic/UFRMWallet.dfm:1167 +msgid "Available Connections:" +msgstr "" + +#. FRMWallet..PageControl..tsMessages..Label14....Caption +#: gui-classic/UFRMWallet.dfm:1178 +msgid "" +"(Messages will be encrypted, so only dest connection will be able to read " +"it)" +msgstr "" + +#. FRMWallet..PageControl..tsMessages..bbSendAMessage..Caption +#: gui-classic/UFRMWallet.dfm:1203 +msgid "Send a Message" +msgstr "" + +#. FRMWallet..PageControl..tsMessages..memoMessageToSend....Lines.Strings +#: gui-classic/UFRMWallet.dfm:1232 +msgid "memoMessageToSend" +msgstr "" + +#. FRMWallet..MainMenu..miProject..Caption +#: gui-classic/UFRMWallet.dfm:1247 +msgid "Project" +msgstr "" + +#. FRMWallet..MainMenu..miProject..miPrivatekeys..Caption +#: gui-classic/UFRMWallet.dfm:1249 +msgid "Private Keys" +msgstr "" + +#. FRMWallet..MainMenu..miProject..IPnodes1..Caption +#: gui-classic/UFRMWallet.dfm:1262 +msgid "Available Node List" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..miNewOperation..Caption +#: gui-classic/UFRMWallet.dfm:1280 +msgid "New single Operation" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiFindOperationbyOpHash..Caption +#: gui-classic/UFRMWallet.dfm:1285 +msgid "Find Operation by OpHash" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiDecodePayload..Caption +#: gui-classic/UFRMWallet.dfm:1290 +msgid "Decode Payload" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiAccountInformation..Caption +#: gui-classic/UFRMWallet.dfm:1300 +msgid "Account Information" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiAddaccounttoSelected..Caption +#: gui-classic/UFRMWallet.dfm:1313 +msgid "Add account to selected" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiRemoveaccountfromselected..Caption +#: gui-classic/UFRMWallet.dfm:1318 +msgid "Remove account from selected" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiMultiaccountoperation..Caption +#: gui-classic/UFRMWallet.dfm:1323 +msgid "Multi account operation" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiFindpreviousaccountwithhighbalance..Caption +#: gui-classic/UFRMWallet.dfm:1330 +msgid "Find previous account with high balance" +msgstr "" + +#. FRMWallet..MainMenu..MiOperations..MiFindnextaccountwithhighbalance..Caption +#: gui-classic/UFRMWallet.dfm:1335 +msgid "Find next account with high balance" +msgstr "" + +#. FRMWallet..MainMenu..miAbout..Caption +#: gui-classic/UFRMWallet.dfm:1341 +msgid "About" +msgstr "" + +#. FRMWallet..MainMenu..miAbout..miAboutPascalCoin..Caption +#: gui-classic/UFRMWallet.dfm:1343 +msgid "About Pascal Coin..." +msgstr "" + +#. FRMWalletKeys..Caption +#: gui-classic/UFRMWalletKeys.dfm:6 +msgid "Wallet keys" +msgstr "" + +#. FRMWalletKeys..lblEncryptionTypeCaption..Caption +#: gui-classic/UFRMWalletKeys.dfm:25 +msgid "Encryption type:" +msgstr "" + +#. FRMWalletKeys..lblEncryptionType..Caption +#. FRMWalletKeys..lblKeyName..Caption +#: gui-classic/UFRMWalletKeys.dfm:32 gui-classic/UFRMWalletKeys.dfm:47 +msgid "000000000" +msgstr "" + +#. FRMWalletKeys..lblKeyNameCaption..Caption +#: gui-classic/UFRMWalletKeys.dfm:39 +msgid "Key name:" +msgstr "" + +#. FRMWalletKeys..lblPrivateKeyCaption..Caption +#: gui-classic/UFRMWalletKeys.dfm:54 +msgid "Public Key:" +msgstr "" + +#. FRMWalletKeys..lblKeysEncrypted..Caption +#: gui-classic/UFRMWalletKeys.dfm:62 +msgid "lblKeysEncrypted" +msgstr "" + +#. FRMWalletKeys..bbExportPrivateKey..Caption +#: gui-classic/UFRMWalletKeys.dfm:85 +msgid "Export Private key" +msgstr "" + +#. FRMWalletKeys..memoPrivateKey....Lines.Strings +#: gui-classic/UFRMWalletKeys.dfm:158 +msgid "memoPrivateKey" +msgstr "" + +#. FRMWalletKeys..bbChangeName..Caption +#: gui-classic/UFRMWalletKeys.dfm:169 +msgid "Change Name" +msgstr "" + +#. FRMWalletKeys..bbImportPrivateKey..Caption +#: gui-classic/UFRMWalletKeys.dfm:178 +msgid "Import Private key" +msgstr "" + +#. FRMWalletKeys..bbExportPublicKey..Caption +#: gui-classic/UFRMWalletKeys.dfm:240 +msgid "Export Public key" +msgstr "" + +#. FRMWalletKeys..bbImportPublicKey..Caption +#: gui-classic/UFRMWalletKeys.dfm:306 +msgid "Import Public key" +msgstr "" + +#. FRMWalletKeys..bbGenerateNewKey..Caption +#: gui-classic/UFRMWalletKeys.dfm:372 +msgid "Generate a new Key" +msgstr "" + +#. FRMWalletKeys..bbDelete..Caption +#: gui-classic/UFRMWalletKeys.dfm:434 +msgid "Delete" +msgstr "" + +#. FRMWalletKeys..bbExportAllWalletKeys..Caption +#: gui-classic/UFRMWalletKeys.dfm:568 +msgid "Export all Wallet Keys to a file" +msgstr "" + +#. FRMWalletKeys..bbImportKeysFile..Caption +#: gui-classic/UFRMWalletKeys.dfm:634 +msgid "Import a Wallet Keys File" +msgstr "" + +#. FRMWalletKeys..bbLock..Caption +#: gui-classic/UFRMWalletKeys.dfm:700 +msgid "Lock" +msgstr "" + +#. FRMWalletKeys..SaveDialog..DefaultExt +#. FRMWalletKeys..OpenDialog..DefaultExt +#: gui-classic/UFRMWalletKeys.dfm:758 gui-classic/UFRMWalletKeys.dfm:765 +msgid "dat" +msgstr "" + +#. FRMWalletKeys..SaveDialog..Filter +#: gui-classic/UFRMWalletKeys.dfm:759 +msgid "Wallet keys file|*.dat|All files|*.*" +msgstr "" + +#. FRMWalletKeys..OpenDialog..Filter +#: gui-classic/UFRMWalletKeys.dfm:766 +msgid "Wallet keys file (*.dat)|*.dat|All files (*.*)|*.*" +msgstr "" + +#. Programmer's name for it: SUnSupportedHash +#. Programmer's name for it: SUnSupportedHash +#: core/URandomHash.pas:267 core/URandomHash2.pas:219 +msgid "Unsupported Hash Selected" +msgstr "" + +#. Programmer's name for it: SInvalidRound +#. Programmer's name for it: SInvalidRound +#: core/URandomHash.pas:268 core/URandomHash2.pas:220 +msgid "Round must be between 0 and N inclusive" +msgstr "" + +#. Programmer's name for it: SOverlappingArgs +#. Programmer's name for it: SOverlappingArgs +#: core/URandomHash.pas:269 core/URandomHash2.pas:221 +msgid "Overlapping read/write regions" +msgstr "" + +#. Programmer's name for it: SBufferTooSmall +#. Programmer's name for it: SBufferTooSmall +#: core/URandomHash.pas:270 core/URandomHash2.pas:222 +msgid "Buffer too small to apply memory transform" +msgstr "" + +#. Programmer's name for it: SBlockHeaderTooSmallForNonce +#. Programmer's name for it: SBlockHeaderTooSmallForNonce +#: core/URandomHash.pas:271 core/URandomHash2.pas:223 +msgid "Buffer too small to contain nonce" +msgstr "" + +#. Programmer's name for it: SAESEngineNotInitialised +#. Programmer's name for it: SAESEngineNotInitialised +#: libraries/cryptolib4pascal/ClpAesEngine.pas:37 +#: libraries/cryptolib4pascal/ClpAesLightEngine.pas:37 +msgid "AES Engine not Initialised" +msgstr "" + +#. Programmer's name for it: SInputBuffertooShort +#. Programmer's name for it: SInputBuffertooShort +#. Programmer's name for it: SInputBufferTooShort +#. Programmer's name for it: SInputBuffertooShort +#. Programmer's name for it: SInputBuffertooShort +#. Programmer's name for it: SInputBuffertooShort +#. Programmer's name for it: SInputBuffertooShort +#. Programmer's name for it: SInputBuffertooShort +#: libraries/cryptolib4pascal/ClpAesEngine.pas:38 +#: libraries/cryptolib4pascal/ClpAesLightEngine.pas:38 +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:39 +#: libraries/cryptolib4pascal/ClpBlowfishEngine.pas:39 +#: libraries/cryptolib4pascal/ClpRijndaelEngine.pas:35 +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:43 +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:36 +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:36 +msgid "Input Buffer too Short" +msgstr "" + +#. Programmer's name for it: SOutputBuffertooShort +#. Programmer's name for it: SOutputBuffertooShort +#. Programmer's name for it: SOutputBufferTooShort +#. Programmer's name for it: SOutputBuffertooShort +#. Programmer's name for it: SOutputBufferTooSmall +#. Programmer's name for it: SOutputBufferTooSmall +#. Programmer's name for it: SOutputBufferTooSmall +#. Programmer's name for it: SOutputBuffertooShort +#. Programmer's name for it: SOutputBuffertooShort +#. Programmer's name for it: SOutputBuffertooShort +#. Programmer's name for it: SOutputBuffertooShort +#: libraries/cryptolib4pascal/ClpAesEngine.pas:39 +#: libraries/cryptolib4pascal/ClpAesLightEngine.pas:39 +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:40 +#: libraries/cryptolib4pascal/ClpBlowfishEngine.pas:40 +#: libraries/cryptolib4pascal/ClpBufferedBlockCipher.pas:39 +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:32 +#: libraries/cryptolib4pascal/ClpPaddedBufferedBlockCipher.pas:40 +#: libraries/cryptolib4pascal/ClpRijndaelEngine.pas:36 +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:44 +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:37 +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:37 +msgid "Output Buffer too Short" +msgstr "" + +#. Programmer's name for it: SInvalidParameterAESInit +#. Programmer's name for it: SInvalidParameterAESInit +#: libraries/cryptolib4pascal/ClpAesEngine.pas:40 +#: libraries/cryptolib4pascal/ClpAesLightEngine.pas:40 +msgid "Invalid Parameter Passed to AES Init - \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#: libraries/cryptolib4pascal/ClpAesEngine.pas:41 +#: libraries/cryptolib4pascal/ClpAesLightEngine.pas:41 +msgid "Key Length not 128/192/256 bits." +msgstr "" + +#. Programmer's name for it: SInvalidOperation +#. Programmer's name for it: SInvalidOperation +#: libraries/cryptolib4pascal/ClpAesEngine.pas:42 +#: libraries/cryptolib4pascal/ClpAesLightEngine.pas:42 +msgid "Should Never Get Here" +msgstr "" + +#: libraries/cryptolib4pascal/ClpAESPRNGRandom.pas:40 +msgid "AES RNG Seed Length must be either one of these \"128/192/256 bits\"." +msgstr "" + +#: libraries/cryptolib4pascal/ClpAgreementUtilities.pas:43 +msgid "Raw Agreement Algorithm \"%s\" Not Recognised." +msgstr "" + +#: libraries/cryptolib4pascal/ClpAgreementUtilities.pas:45 +msgid "Basic Agreement Algorithm \"%s\" Not Recognised." +msgstr "" + +#. Programmer's name for it: SArgon2TypeInvalid +#: libraries/cryptolib4pascal/ClpArgon2ParametersGenerator.pas:41 +msgid "Selected Argon2Type is Invalid" +msgstr "" + +#. Programmer's name for it: SArgon2VersionInvalid +#: libraries/cryptolib4pascal/ClpArgon2ParametersGenerator.pas:42 +msgid "Selected Argon2Version is Invalid" +msgstr "" + +#. Programmer's name for it: SArgon2MemoryCostTypeInvalid +#: libraries/cryptolib4pascal/ClpArgon2ParametersGenerator.pas:43 +msgid "Selected Argon2MemoryCostType is Invalid" +msgstr "" + +#. Programmer's name for it: SInvalidLength +#: libraries/cryptolib4pascal/ClpArrayUtils.pas:30 +msgid "%d \" > \" %d" +msgstr "" + +#. Programmer's name for it: SDataOverflow +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:43 +msgid "Data Overflow" +msgstr "" + +#. Programmer's name for it: SDataOverflow +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:45 +msgid "Corrupted Stream - Invalid High Tag Number Found" +msgstr "" + +#. Programmer's name for it: SEOFFound +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:46 +msgid "EOF Found Inside Tag Value" +msgstr "" + +#. Programmer's name for it: SInvalidEnd +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:47 +msgid "EOF Found When Length Expected" +msgstr "" + +#. Programmer's name for it: SInvalidDerLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:48 +msgid "DER Length More Than 4 Bytes: %d" +msgstr "" + +#. Programmer's name for it: SEndOfStream +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:49 +msgid "EOF Found Reading Length" +msgstr "" + +#. Programmer's name for it: SNegativeLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:50 +msgid "Corrupted Stream - Negative Length Found" +msgstr "" + +#. Programmer's name for it: SOutOfBoundsLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:51 +msgid "Corrupted stream - Out of Bounds Length Found" +msgstr "" + +#. Programmer's name for it: SUnknownTag +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:52 +msgid "Unknown Tag \" %d \" Encountered" +msgstr "" + +#. Programmer's name for it: SEndOfContent +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:53 +msgid "Unexpected End-of-Contents Marker" +msgstr "" + +#. Programmer's name for it: SIndefiniteLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:54 +msgid "Indefinite Length Primitive Encoding Encountered" +msgstr "" + +#. Programmer's name for it: SUnknownBerObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:55 +msgid "Unknown BER Object Encountered" +msgstr "" + +#. Programmer's name for it: SCorruptedStream +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:56 +msgid "Corrupted Stream Detected: %s" +msgstr "" + +#. Programmer's name for it: SInvalidLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:57 +msgid "Negative Lengths not Allowed\", \"Length\"" +msgstr "" + +#. Programmer's name for it: SEndOfStreamTwo +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:58 +msgid "DEF Length %d \" TObject truncated by \" %d" +msgstr "" + +#. Programmer's name for it: SInvalidBufferLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:59 +msgid "Buffer Length Not Right For Data" +msgstr "" + +#. Programmer's name for it: SMalformedContent +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:60 +msgid "Malformed End-of-Contents Marker" +msgstr "" + +#. Programmer's name for it: SExtraData +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:62 +msgid "Extra Data Found After Object" +msgstr "" + +#. Programmer's name for it: SUnRecognizedObjectStream +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:63 +msgid "Cannot Recognise Object in Stream" +msgstr "" + +#. Programmer's name for it: SUnRecognizedObjectByteArray +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:64 +msgid "Cannot Recognise Object in ByteArray" +msgstr "" + +#. Programmer's name for it: SIllegalObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:65 +msgid "Illegal Object in GetInstance: %s, \"obj\"" +msgstr "" + +#. Programmer's name for it: SStrNil +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:66 +msgid "\"Str\" Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SProcessingError +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:67 +msgid "Error Processing Object : \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:68 +msgid "Object Implicit - Explicit Expected." +msgstr "" + +#. Programmer's name for it: SUnknownObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:69 +msgid "Unknown object in GetInstance: %s, \"obj\"" +msgstr "" + +#. Programmer's name for it: SInvalidSequence +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:70 +msgid "\"Failed to Construct Sequence from byte array: \" %s" +msgstr "" + +#. Programmer's name for it: SImplicitObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:71 +msgid "Implicitly Tagged Object" +msgstr "" + +#. Programmer's name for it: SImplicitTag +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:72 +msgid "Implicit Tagging for Tag: %d" +msgstr "" + +#. Programmer's name for it: SUnknownObjectBER +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:73 +msgid "Unknown BER Object Encountered: $%x" +msgstr "" + +#. Programmer's name for it: SImplicitTagging +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:74 +msgid "Implicit Tagging not Implemented" +msgstr "" + +#. Programmer's name for it: SImplicitTagging +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:76 +msgid "Sequences Must Use Constructed Encoding (see X.690 8.9.1/8.10.1)" +msgstr "" + +#. Programmer's name for it: SImplicitTagging +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:78 +msgid "Sets Must Use Constructed Encoding (see X.690 8.11.1/8.12.1)" +msgstr "" + +#. Programmer's name for it: SMalformedObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:79 +msgid "Malformed Object %s" +msgstr "" + +#. Programmer's name for it: SUnSupportedTag +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:80 +msgid "Unsupported Tag Number" +msgstr "" + +#. Programmer's name for it: SConvertError +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:81 +msgid "EIOCryptoLibException Converting Stream to Byte Array: %s" +msgstr "" + +#. Programmer's name for it: SEncodingError +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:82 +msgid "Encoding Error in GetInstance: %s \"obj\"" +msgstr "" + +#. Programmer's name for it: SDataNil +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:83 +msgid "\"data\"" +msgstr "" + +#. Programmer's name for it: SInvalidRange +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:84 +msgid "Must be in the Range 0 to 7\", \"padBits\"" +msgstr "" + +#. Programmer's name for it: SPadBitError +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:85 +msgid "If \"data\" is Empty, \"padBits\" Must be 0" +msgstr "" + +#. Programmer's name for it: SUnalignedData +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:86 +msgid "Attempt to Get non-octet Aligned Data from BIT STRING\"" +msgstr "" + +#. Programmer's name for it: STruncatedBitString +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:87 +msgid "Truncated BIT STRING Detected\", \"octets\"" +msgstr "" + +#. Programmer's name for it: SNotImplemented +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:88 +msgid "Not Implemented %s" +msgstr "" + +#. Programmer's name for it: SUnConstructedTag +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:89 +msgid "Explicit Tags Must be Constructed (see X.690 8.14.2)" +msgstr "" + +#. Programmer's name for it: SParsingError +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:90 +msgid "%s" +msgstr "" + +#. Programmer's name for it: SEmptyInput +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:91 +msgid "Input Cannot be Empty \"astr\"" +msgstr "" + +#. Programmer's name for it: SInvalidValue +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:92 +msgid "Byte Value Should Have 1 Byte in it', \"val\"" +msgstr "" + +#. Programmer's name for it: SInvalidBooleanValue +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:93 +msgid "BOOLEAN Value Should Have 1 Byte in it\", \"Value\"" +msgstr "" + +#. Programmer's name for it: SMalformedEnumerated +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:94 +msgid "Malformed Enumerated" +msgstr "" + +#. Programmer's name for it: SZeroLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:95 +msgid "Enumerated has Zero Length, \"enc\"" +msgstr "" + +#. Programmer's name for it: SInvalidEncoding +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:96 +msgid "Invalid Encoding Value: %d" +msgstr "" + +#. Programmer's name for it: SFewObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:97 +msgid "Too Few Objects in Input Vector, \"v\"" +msgstr "" + +#. Programmer's name for it: SVectorTooLarge +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:98 +msgid "Input Vector too Large\", \"vector\"" +msgstr "" + +#. Programmer's name for it: SVectorTooLarge +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:100 +msgid "" +"No Tagged Object Found in Vector. Structure Doesn 't Seem to be of Type " +"External, \"Vector\"" +msgstr "" + +#. Programmer's name for it: SInvalidEncodingValue +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:101 +msgid "Invalid Encoding Value" +msgstr "" + +#. Programmer's name for it: SObjectNil +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:102 +msgid " \"obj\" Can't be Nil" +msgstr "" + +#. Programmer's name for it: SValueNil +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:103 +msgid " \"value\" Can't be Nil" +msgstr "" + +#. Programmer's name for it: SMalformedInteger +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:104 +msgid "Malformed Integer" +msgstr "" + +#. Programmer's name for it: SIdentifierNil +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:105 +msgid "Identifier Cannot be Empty" +msgstr "" + +#. Programmer's name for it: SInvalidOID +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:106 +msgid "\"String \" %s is \" not an OID\"" +msgstr "" + +#. Programmer's name for it: SInvalidBranchId +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:107 +msgid "\"String \" %s \" not a valid OID branch\", \"branchID\"" +msgstr "" + +#. Programmer's name for it: SIllegalCharacters +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:108 +msgid "String Contains Illegal Characters \"str\"" +msgstr "" + +#. Programmer's name for it: SExpectedPublicKey +#: libraries/cryptolib4pascal/ClpAsymmetricCipherKeyPair.pas:30 +msgid "Expected a Public Key \"publicParameter\"" +msgstr "" + +#. Programmer's name for it: SExpectedPrivateKey +#: libraries/cryptolib4pascal/ClpAsymmetricCipherKeyPair.pas:31 +msgid "Expected a Private Key \"privateParameter\"" +msgstr "" + +#. Programmer's name for it: SOutputBufferTooSmall +#. Programmer's name for it: SOutputBufferTooSmall +#: libraries/cryptolib4pascal/ClpBaseKdfBytesGenerator.pas:36 +#: libraries/cryptolib4pascal/ClpPascalCoinECIESKdfBytesGenerator.pas:34 +msgid "Output Buffer too Small" +msgstr "" + +#. Programmer's name for it: SOutputLengthTooLarge +#: libraries/cryptolib4pascal/ClpBaseKdfBytesGenerator.pas:37 +msgid "Output Length too Large" +msgstr "" + +#. Programmer's name for it: SKDFParameterNotFound +#. Programmer's name for it: SKDFParameterNotFound +#: libraries/cryptolib4pascal/ClpBaseKdfBytesGenerator.pas:38 +#: libraries/cryptolib4pascal/ClpPascalCoinECIESKdfBytesGenerator.pas:35 +msgid "KDF Parameters Required For KDF Generator" +msgstr "" + +#. Programmer's name for it: SDivisionByZero +#: libraries/cryptolib4pascal/ClpBigInteger.pas:36 +msgid "Division by Zero Error" +msgstr "" + +#. Programmer's name for it: SModulusPositive +#: libraries/cryptolib4pascal/ClpBigInteger.pas:37 +msgid "Modulus must be Positive" +msgstr "" + +#. Programmer's name for it: SNotRelativelyPrime +#: libraries/cryptolib4pascal/ClpBigInteger.pas:38 +msgid "Numbers not Relatively Prime." +msgstr "" + +#. Programmer's name for it: SNegativeValue +#: libraries/cryptolib4pascal/ClpBigInteger.pas:39 +msgid "Cannot be Called on Value < 0" +msgstr "" + +#. Programmer's name for it: SNegativeExponent +#: libraries/cryptolib4pascal/ClpBigInteger.pas:40 +msgid "Negative Exponent" +msgstr "" + +#. Programmer's name for it: SResultTooLarge +#: libraries/cryptolib4pascal/ClpBigInteger.pas:41 +msgid "Result too Large" +msgstr "" + +#. Programmer's name for it: SNegativeBitPosition +#: libraries/cryptolib4pascal/ClpBigInteger.pas:42 +msgid "Bit Position must not be Negative" +msgstr "" + +#. Programmer's name for it: SInvalidBitAddress +#: libraries/cryptolib4pascal/ClpBigInteger.pas:43 +msgid "Bit Address less than Zero" +msgstr "" + +#. Programmer's name for it: SZeroLengthBigInteger +#: libraries/cryptolib4pascal/ClpBigInteger.pas:44 +msgid "Zero length BigInteger" +msgstr "" + +#. Programmer's name for it: SInvalidSign +#: libraries/cryptolib4pascal/ClpBigInteger.pas:45 +msgid "Invalid Sign Value" +msgstr "" + +#. Programmer's name for it: SNegativeSizeInBits +#: libraries/cryptolib4pascal/ClpBigInteger.pas:46 +msgid "sizeInBits must be non-negative" +msgstr "" + +#. Programmer's name for it: SInvalidBitLength +#: libraries/cryptolib4pascal/ClpBigInteger.pas:47 +msgid "bitLength < 2" +msgstr "" + +#. Programmer's name for it: SInvalidBase +#: libraries/cryptolib4pascal/ClpBigInteger.pas:48 +msgid "Only bases 2, 8, 10, or 16 allowed" +msgstr "" + +#. Programmer's name for it: SBadCharacterRadix8 +#: libraries/cryptolib4pascal/ClpBigInteger.pas:49 +msgid "Bad Character in radix 8 string: %s" +msgstr "" + +#. Programmer's name for it: SBadCharacterRadix2 +#: libraries/cryptolib4pascal/ClpBigInteger.pas:50 +msgid "Bad Character in radix 2 string: %s" +msgstr "" + +#. Programmer's name for it: SUnSupportedBase +#: libraries/cryptolib4pascal/ClpBigInteger.pas:51 +msgid "Only bases 2, 8, 10, 16 are allowed" +msgstr "" + +#. Programmer's name for it: SInvalidLength +#: libraries/cryptolib4pascal/ClpBigIntegers.pas:31 +msgid "Standard Length Exceeded, \"n\"" +msgstr "" + +#. Programmer's name for it: SInvalidMinValue +#: libraries/cryptolib4pascal/ClpBigIntegers.pas:32 +msgid "\"min\" may not be greater than \"max\"\"" +msgstr "" + +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:37 +msgid "Initialisation Vector Must be the Same Length as Block Size" +msgstr "" + +#. Programmer's name for it: SInvalidChangeState +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:38 +msgid "Cannot Change Encrypting State Without Providing Key." +msgstr "" + +#. Programmer's name for it: SInvalidParameterArgument +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:42 +msgid "CTR/SIC Mode Requires ParametersWithIV" +msgstr "" + +#. Programmer's name for it: SInvalidParameterArgument +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:44 +msgid "CTR/SIC mode requires IV no greater than: %u bytes" +msgstr "" + +#. Programmer's name for it: SInvalidTooSmallIVLength +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:45 +msgid "CTR/SIC mode requires IV of at least: %u bytes" +msgstr "" + +#. Programmer's name for it: SUnsupportedCipher +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:47 +msgid "CtsBlockCipher Can Only Accept ECB or CBC Ciphers" +msgstr "" + +#. Programmer's name for it: SNegativeInputLength +#. Programmer's name for it: SInvalidLength +#. Programmer's name for it: SNegativeInputLength +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:48 +#: libraries/cryptolib4pascal/ClpBufferedBlockCipher.pas:36 +#: libraries/cryptolib4pascal/ClpPaddedBufferedBlockCipher.pas:42 +msgid "Can't Have a Negative Input Length!" +msgstr "" + +#. Programmer's name for it: SCTSDoFinalError +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:49 +msgid "Need at Least One Block of Input For CTS" +msgstr "" + +#. Programmer's name for it: SBlowfishEngineNotInitialised +#: libraries/cryptolib4pascal/ClpBlowfishEngine.pas:36 +msgid "Blowfish Engine not Initialised" +msgstr "" + +#. Programmer's name for it: SBlowfishEngineNotInitialised +#: libraries/cryptolib4pascal/ClpBlowfishEngine.pas:38 +msgid "Invalid Parameter Passed to Blowfish Init - \"%s\"" +msgstr "" + +#. Programmer's name for it: SOutputBuffertooShort +#: libraries/cryptolib4pascal/ClpBlowfishEngine.pas:42 +msgid "Key Length must be between 32 - 448 bits and divisible by 8." +msgstr "" + +#. Programmer's name for it: SInputNil +#: libraries/cryptolib4pascal/ClpBufferedBlockCipher.pas:37 +msgid "Input Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SCipherNil +#: libraries/cryptolib4pascal/ClpBufferedBlockCipher.pas:38 +msgid "Cipher Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SDataNotBlockSizeAligned +#: libraries/cryptolib4pascal/ClpBufferedBlockCipher.pas:40 +msgid "Data not Block Size Aligned" +msgstr "" + +#. Programmer's name for it: SOutputBufferTooSmallForDoFinal +#: libraries/cryptolib4pascal/ClpBufferedBlockCipher.pas:41 +msgid "Output Buffer too Short for DoFinal()" +msgstr "" + +#. Programmer's name for it: SInvalidBufferSize +#. Programmer's name for it: SInvalidBufferSize +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:33 +#: libraries/hashlib4pascal/HlpHash.pas:17 +msgid "\"BufferSize\" Must Be Greater Than Zero" +msgstr "" + +#. Programmer's name for it: SInvalidBufferSize +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:35 +msgid "Input and Output Streams Must not Point to the Same Stream Instance" +msgstr "" + +#. Programmer's name for it: SUnAssignedInputStream +#. Programmer's name for it: SUnAssignedStream +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:36 +#: libraries/hashlib4pascal/HlpHash.pas:18 +msgid "Input Stream Is Unassigned" +msgstr "" + +#. Programmer's name for it: SUnAssignedOutputStream +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:37 +msgid "Output Stream Is Unassigned" +msgstr "" + +#. Programmer's name for it: SPositionOutOfRange +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:38 +msgid "Current Position Is Out Of Range" +msgstr "" + +#. Programmer's name for it: SPositionOutOfRange +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:40 +msgid "Stream Position (or Stream Length to Process) Is Out Of Range" +msgstr "" + +#. Programmer's name for it: SCipherNil +#: libraries/cryptolib4pascal/ClpBufferedStreamCipher.pas:34 +msgid "Cipher Instance Cannot be Nil" +msgstr "" + +#: libraries/cryptolib4pascal/ClpCipherKeyGenerator.pas:34 +msgid "Strength must be a Positive Value, \"defaultStrength\"" +msgstr "" + +#. Programmer's name for it: SParametersNil +#: libraries/cryptolib4pascal/ClpCipherKeyGenerator.pas:35 +msgid "Parameters Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SGeneratorNotInitialized +#: libraries/cryptolib4pascal/ClpCipherKeyGenerator.pas:36 +msgid "Generator has not been Initialised" +msgstr "" + +#. Programmer's name for it: SMechanismNil +#. Programmer's name for it: SMechanismNil +#. Programmer's name for it: SMechanismNil +#: libraries/cryptolib4pascal/ClpCipherUtilities.pas:56 +#: libraries/cryptolib4pascal/ClpDigestUtilities.pas:42 +#: libraries/cryptolib4pascal/ClpSignerUtilities.pas:69 +msgid "Mechanism Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SAlgorithmNil +#. Programmer's name for it: SAlgorithmNil +#. Programmer's name for it: SAlgorithmNil +#: libraries/cryptolib4pascal/ClpCipherUtilities.pas:57 +#: libraries/cryptolib4pascal/ClpParameterUtilities.pas:37 +#: libraries/cryptolib4pascal/ClpSignerUtilities.pas:70 +msgid "Algorithm Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SUnRecognizedCipher +#: libraries/cryptolib4pascal/ClpCipherUtilities.pas:58 +msgid "Cipher \"%s\" Not Recognised." +msgstr "" + +#. Programmer's name for it: SUnRecognizedCipher +#: libraries/cryptolib4pascal/ClpCipherUtilities.pas:60 +msgid "" +"Warning: SIC-Mode Can Become a TwoTime-Pad if the Blocksize of the Cipher " +"is Too Small. Use a Cipher With a Block Size of at Least 128 bits (e.g. AES)" +msgstr "" + +#. Programmer's name for it: SUnRecognizedCipher +#: libraries/cryptolib4pascal/ClpCipherUtilities.pas:62 +msgid "Modes and Paddings Not Used for Stream Ciphers" +msgstr "" + +#. Programmer's name for it: SEncodingInstanceNil +#. Programmer's name for it: SEncodingInstanceNil +#: libraries/cryptolib4pascal/ClpConverters.pas:33 +#: libraries/hashlib4pascal/HlpConverters.pas:16 +msgid "Encoding Instance Cannot Be Nil" +msgstr "" + +#. Programmer's name for it: SNegativeOffset +#: libraries/cryptolib4pascal/ClpCryptoApiRandomGenerator.pas:32 +msgid "Start Offset Cannot be Negative, \"Start\"" +msgstr "" + +#. Programmer's name for it: SArrayTooSmall +#: libraries/cryptolib4pascal/ClpCryptoApiRandomGenerator.pas:33 +msgid "Byte Array Too Small For Requested Offset and Length" +msgstr "" + +#: libraries/cryptolib4pascal/ClpCurve25519Custom.pas:40 +msgid "Value Invalid for Curve25519FieldElement \"%s\"" +msgstr "" + +#. Programmer's name for it: SOneOfECFieldElementIsNil +#. Programmer's name for it: SOneOfECFieldElementIsNil +#. Programmer's name for it: SOneOfECFieldElementIsNil +#. Programmer's name for it: SOneOfECFieldElementIsNil +#. Programmer's name for it: SOneOfECFieldElementIsNil +#. Programmer's name for it: SOneOfECFieldElementIsNil +#: libraries/cryptolib4pascal/ClpCurve25519Custom.pas:41 +#: libraries/cryptolib4pascal/ClpSecP256K1Custom.pas:41 +#: libraries/cryptolib4pascal/ClpSecP256R1Custom.pas:41 +#: libraries/cryptolib4pascal/ClpSecP384R1Custom.pas:41 +#: libraries/cryptolib4pascal/ClpSecP521R1Custom.pas:41 +#: libraries/cryptolib4pascal/ClpSecT283Custom.pas:42 +msgid "Exactly One of the Field Elements is Nil" +msgstr "" + +#: libraries/cryptolib4pascal/ClpDHAgreement.pas:45 +#: libraries/cryptolib4pascal/ClpDHBasicAgreement.pas:38 +msgid "Diffie-Hellman Public Key has Wrong Parameters." +msgstr "" + +#. Programmer's name for it: SNotDHPrivateKeyParameters +#. Programmer's name for it: SNotDHPrivateKeyParameters +#: libraries/cryptolib4pascal/ClpDHAgreement.pas:46 +#: libraries/cryptolib4pascal/ClpDHBasicAgreement.pas:39 +msgid "DHEngine Expects DHPrivateKeyParameters" +msgstr "" + +#. Programmer's name for it: SMessageNotInitialized +#: libraries/cryptolib4pascal/ClpDHAgreement.pas:47 +msgid "Message not Initialised" +msgstr "" + +#. Programmer's name for it: SSharedKeyInvalid +#. Programmer's name for it: SSharedKeyInvalid +#: libraries/cryptolib4pascal/ClpDHAgreement.pas:48 +#: libraries/cryptolib4pascal/ClpDHBasicAgreement.pas:41 +msgid "Shared Key Can't be 1" +msgstr "" + +#. Programmer's name for it: SDHPublicKeyWeak +#. Programmer's name for it: SDHPublicKeyWeak +#: libraries/cryptolib4pascal/ClpDHAgreement.pas:49 +#: libraries/cryptolib4pascal/ClpDHBasicAgreement.pas:42 +msgid "Diffie-Hellman Public Key is Weak" +msgstr "" + +#. Programmer's name for it: SDHPublicKeyNil +#: libraries/cryptolib4pascal/ClpDHAgreement.pas:50 +msgid "DH Public Key Parameter Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SAlgorithmNotInitialized +#: libraries/cryptolib4pascal/ClpDHBasicAgreement.pas:40 +msgid "Agreement Algorithm not Initialised" +msgstr "" + +#. Programmer's name for it: SParametersCannotBeNil +#. Programmer's name for it: SParametersCannotBeNil +#. Programmer's name for it: SParametersCannotBeNil +#: libraries/cryptolib4pascal/ClpDHBasicKeyPairGenerator.pas:42 +#: libraries/cryptolib4pascal/ClpDHKeyPairGenerator.pas:42 +#: libraries/cryptolib4pascal/ClpDsaKeyPairGenerator.pas:44 +msgid "\"parameters\" Cannot Be Nil" +msgstr "" + +#. Programmer's name for it: SPNil +#: libraries/cryptolib4pascal/ClpDHDomainParameters.pas:33 +msgid "P Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SGNil +#. Programmer's name for it: SGNil +#: libraries/cryptolib4pascal/ClpDHDomainParameters.pas:34 +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:35 +msgid "G Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SQNil +#. Programmer's name for it: SQNil +#. Programmer's name for it: SQNil +#: libraries/cryptolib4pascal/ClpDHDomainParameters.pas:35 +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:37 +#: libraries/cryptolib4pascal/ClpECPublicKeyParameters.pas:35 +msgid "Q Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SJNil +#: libraries/cryptolib4pascal/ClpDHDomainParameters.pas:36 +msgid "J Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SBadSequenceSize +#. Programmer's name for it: SBadSequenceSize +#. Programmer's name for it: SBadSequenceSize +#: libraries/cryptolib4pascal/ClpDHDomainParameters.pas:37 +#: libraries/cryptolib4pascal/ClpDHValidationParams.pas:34 +#: libraries/cryptolib4pascal/ClpDsaParameter.pas:32 +msgid "Bad Sequence Size \"seq\": %d" +msgstr "" + +#. Programmer's name for it: SInvalidDHDomainParameters +#: libraries/cryptolib4pascal/ClpDHDomainParameters.pas:38 +msgid "Invalid DHDomainParameters: %s" +msgstr "" + +#. Programmer's name for it: SPUnInitialized +#. Programmer's name for it: SPUnInitialized +#: libraries/cryptolib4pascal/ClpDHParameters.pas:33 +#: libraries/cryptolib4pascal/ClpDsaParameters.pas:32 +msgid "\"P\" Cannot Be Uninitialized" +msgstr "" + +#. Programmer's name for it: SGUnInitialized +#. Programmer's name for it: SGUnInitialized +#: libraries/cryptolib4pascal/ClpDHParameters.pas:34 +#: libraries/cryptolib4pascal/ClpDsaParameters.pas:34 +msgid "\"G\" Cannot Be Uninitialized" +msgstr "" + +#. Programmer's name for it: SMustBeOddPrime +#: libraries/cryptolib4pascal/ClpDHParameters.pas:35 +msgid "Field must be an Odd Prime, \"P\"" +msgstr "" + +#. Programmer's name for it: SInvalidGeneratorRange +#: libraries/cryptolib4pascal/ClpDHParameters.pas:36 +msgid "Generator must in the Range [2, p - 2], \"G\"" +msgstr "" + +#. Programmer's name for it: SQTooBigToBeAFactor +#: libraries/cryptolib4pascal/ClpDHParameters.pas:37 +msgid "Q too Big to be a Factor of (P - 1), \"Q\"" +msgstr "" + +#. Programmer's name for it: SMTooBig +#: libraries/cryptolib4pascal/ClpDHParameters.pas:38 +msgid "M value must be < BitLength of P, \"M\"" +msgstr "" + +#. Programmer's name for it: SLErrorOne +#: libraries/cryptolib4pascal/ClpDHParameters.pas:39 +msgid "when L value specified, it must be less than bitlength(P), \"L\"" +msgstr "" + +#. Programmer's name for it: SLErrorTwo +#: libraries/cryptolib4pascal/ClpDHParameters.pas:40 +msgid "when L value specified, it may not be less than m value, \"L\"" +msgstr "" + +#. Programmer's name for it: SInvalidSubGroupFactor +#: libraries/cryptolib4pascal/ClpDHParameters.pas:41 +msgid "Subgroup factor must be >= 2, \"j\"" +msgstr "" + +#. Programmer's name for it: SXUnInitialized +#. Programmer's name for it: SXUnInitialized +#: libraries/cryptolib4pascal/ClpDHPrivateKeyParameters.pas:33 +#: libraries/cryptolib4pascal/ClpDsaPrivateKeyParameters.pas:32 +msgid "\"X\" Cannot Be Uninitialized" +msgstr "" + +#. Programmer's name for it: SYUnInitialized +#. Programmer's name for it: SYUnInitialized +#: libraries/cryptolib4pascal/ClpDHPublicKeyParameters.pas:33 +#: libraries/cryptolib4pascal/ClpDsaPublicKeyParameters.pas:32 +msgid "\"Y\" Cannot Be Uninitialized" +msgstr "" + +#. Programmer's name for it: SInvalidDHPublicKey +#: libraries/cryptolib4pascal/ClpDHPublicKeyParameters.pas:34 +msgid "Invalid DH public key \"Y\"" +msgstr "" + +#. Programmer's name for it: SInvalidYInCorrectGroup +#. Programmer's name for it: SInvalidYInCorrectGroup +#: libraries/cryptolib4pascal/ClpDHPublicKeyParameters.pas:35 +#: libraries/cryptolib4pascal/ClpDsaPublicKeyParameters.pas:33 +msgid "\"Y\" Value Does Not Appear To Be In Correct Group" +msgstr "" + +#. Programmer's name for it: SSeedNil +#. Programmer's name for it: SSeedNil +#: libraries/cryptolib4pascal/ClpDHValidationParameters.pas:30 +#: libraries/cryptolib4pascal/ClpDsaValidationParameters.pas:30 +msgid "\"Seed\" Cannot Be Nil" +msgstr "" + +#. Programmer's name for it: SSeedNil +#: libraries/cryptolib4pascal/ClpDHValidationParams.pas:32 +msgid "Seed Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SPGenCounterNil +#: libraries/cryptolib4pascal/ClpDHValidationParams.pas:33 +msgid "PGenCounter Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SInvalidDHValidationParams +#: libraries/cryptolib4pascal/ClpDHValidationParams.pas:35 +msgid "Invalid DHValidationParams: %s" +msgstr "" + +#. Programmer's name for it: SOutputBufferTooShort +#. Programmer's name for it: SOutputBufferTooShort +#. Programmer's name for it: SOutputBufferTooShort +#. Programmer's name for it: SOutputBufferTooShort +#. Programmer's name for it: SOutputBufferTooShort +#: libraries/cryptolib4pascal/ClpDigest.pas:31 +#: libraries/cryptolib4pascal/ClpHMac.pas:34 +#: libraries/hashlib4pascal/HlpBlake2B.pas:27 +#: libraries/hashlib4pascal/HlpBlake2S.pas:27 +#: libraries/hashlib4pascal/HlpSHA3.pas:29 +msgid "Output Buffer Too Short" +msgstr "" + +#. Programmer's name for it: SUnRecognizedDigest +#: libraries/cryptolib4pascal/ClpDigestUtilities.pas:43 +msgid "Digest \"%s\" not recognised." +msgstr "" + +#. Programmer's name for it: SPrivateKey +#. Programmer's name for it: SPrivateKey +#: libraries/cryptolib4pascal/ClpDsaDigestSigner.pas:41 +#: libraries/cryptolib4pascal/ClpSchnorrDigestSigner.pas:40 +msgid "Signing Requires Private Key." +msgstr "" + +#. Programmer's name for it: SPublicKey +#. Programmer's name for it: SPublicKey +#: libraries/cryptolib4pascal/ClpDsaDigestSigner.pas:42 +#: libraries/cryptolib4pascal/ClpSchnorrDigestSigner.pas:41 +msgid "Verification Requires Public Key." +msgstr "" + +#. Programmer's name for it: SPublicKey +#: libraries/cryptolib4pascal/ClpDsaDigestSigner.pas:44 +msgid "DSADigestSigner not Initialized for Signature Generation." +msgstr "" + +#. Programmer's name for it: SPublicKey +#: libraries/cryptolib4pascal/ClpDsaDigestSigner.pas:46 +msgid "DSADigestSigner not Initialized for Verification" +msgstr "" + +#. Programmer's name for it: SEncodingError +#. Programmer's name for it: SEncodingError +#: libraries/cryptolib4pascal/ClpDsaDigestSigner.pas:47 +#: libraries/cryptolib4pascal/ClpSchnorrDigestSigner.pas:46 +msgid "Unable to Encode Signature" +msgstr "" + +#. Programmer's name for it: SInvalidDsaParameter +#: libraries/cryptolib4pascal/ClpDsaParameter.pas:33 +msgid "Invalid DsaParameter: %s" +msgstr "" + +#. Programmer's name for it: SQUnInitialized +#: libraries/cryptolib4pascal/ClpDsaParameters.pas:33 +msgid "\"Q\" Cannot Be Uninitialized" +msgstr "" + +#: libraries/cryptolib4pascal/ClpDsaParametersGenerator.pas:44 +msgid "L Values Must be Between 1024 and 3072 and a Multiple of 1024" +msgstr "" + +#. Programmer's name for it: SInvalidNValueForSpecifiedL +#: libraries/cryptolib4pascal/ClpDsaParametersGenerator.pas:45 +msgid "N Must be \" %d \" for L = \" %d \"" +msgstr "" + +#. Programmer's name for it: SInvalidNValueForSpecifiedL_Two +#: libraries/cryptolib4pascal/ClpDsaParametersGenerator.pas:46 +msgid "N Must be \" %d \" or \" %d \" for L = \" %d \"" +msgstr "" + +#. Programmer's name for it: SInvalidNValueForSpecifiedL_Two +#: libraries/cryptolib4pascal/ClpDsaParametersGenerator.pas:48 +msgid "Digest Output Size Too Small for Value of N Which is \" %d \"" +msgstr "" + +#. Programmer's name for it: SInvalidNValueForSpecifiedL_Two +#: libraries/cryptolib4pascal/ClpDsaParametersGenerator.pas:50 +msgid "Can Only Use SHA-1 For Generating FIPS 186-2 Parameters" +msgstr "" + +#. Programmer's name for it: SInvalidNValueForSpecifiedL_Two +#: libraries/cryptolib4pascal/ClpDsaParametersGenerator.pas:52 +msgid "Size Must Be From %d - %d and a multiple of %d, \"%d\"" +msgstr "" + +#. Programmer's name for it: SDSAPrivateKeyNotFound +#: libraries/cryptolib4pascal/ClpDsaSigner.pas:44 +msgid "DSA Private Key Required For Signing" +msgstr "" + +#. Programmer's name for it: SDSAPublicKeyNotFound +#: libraries/cryptolib4pascal/ClpDsaSigner.pas:45 +msgid "DSA Public Key Required For Verification" +msgstr "" + +#: libraries/cryptolib4pascal/ClpECAlgorithms.pas:43 +msgid "" +"Point and Scalar Arrays Should be Non-Null, and of Equal, Non-Zero, Length" +msgstr "" + +#. Programmer's name for it: SInvalidPointLocation +#: libraries/cryptolib4pascal/ClpECAlgorithms.pas:44 +msgid "Point Must be on the Same Curve" +msgstr "" + +#. Programmer's name for it: SInvalidPoint +#: libraries/cryptolib4pascal/ClpECAlgorithms.pas:45 +msgid "Invalid Point, \"P\"" +msgstr "" + +#. Programmer's name for it: SInvalidResult +#: libraries/cryptolib4pascal/ClpECAlgorithms.pas:46 +msgid "Invalid Result" +msgstr "" + +#. Programmer's name for it: SInvalidResult +#: libraries/cryptolib4pascal/ClpECAlgorithms.pas:48 +#: libraries/cryptolib4pascal/ClpMultipliers.pas:46 +msgid "Fixed-Point Comb Doesn't Support Scalars Larger Than The Curve Order" +msgstr "" + +#. Programmer's name for it: SInvalidValue +#: libraries/cryptolib4pascal/ClpECC.pas:52 +msgid "Value Invalid in Fp Field Element, \" x \"" +msgstr "" + +#. Programmer's name for it: SInvalidValue2 +#: libraries/cryptolib4pascal/ClpECC.pas:53 +msgid "Value Invalid in F2m Field Element, \"x\"" +msgstr "" + +#. Programmer's name for it: SInvalidK2Value +#: libraries/cryptolib4pascal/ClpECC.pas:54 +msgid "k2 must be smaller than k3" +msgstr "" + +#. Programmer's name for it: SInvalidK2Value2 +#: libraries/cryptolib4pascal/ClpECC.pas:55 +msgid "k2 must be larger than 0" +msgstr "" + +#. Programmer's name for it: SInvalidK2Value2 +#: libraries/cryptolib4pascal/ClpECC.pas:57 +msgid "Field elements are not both instances of F2mFieldElement" +msgstr "" + +#. Programmer's name for it: SInvalidK2Value2 +#: libraries/cryptolib4pascal/ClpECC.pas:59 +msgid "Field elements are not elements of the same field F2m" +msgstr "" + +#. Programmer's name for it: SInvalidK2Value2 +#: libraries/cryptolib4pascal/ClpECC.pas:61 +msgid "One of the F2m field elements has incorrect representation" +msgstr "" + +#. Programmer's name for it: SEvenValue +#: libraries/cryptolib4pascal/ClpECC.pas:62 +msgid "Even Value of Q" +msgstr "" + +#. Programmer's name for it: STraceInternalErrorCalculation +#: libraries/cryptolib4pascal/ClpECC.pas:63 +msgid "Internal Error in Trace Calculation" +msgstr "" + +#. Programmer's name for it: SHalfTraceUndefinedForM +#: libraries/cryptolib4pascal/ClpECC.pas:64 +msgid "Half-Trace Only Defined For Odd M" +msgstr "" + +#. Programmer's name for it: SUnSupportedCoordinateSystem +#: libraries/cryptolib4pascal/ClpECC.pas:65 +msgid "UnSupported Coordinate System" +msgstr "" + +#. Programmer's name for it: SCurrentCurve +#: libraries/cryptolib4pascal/ClpECC.pas:66 +msgid "Implementation returned Current Curve" +msgstr "" + +#. Programmer's name for it: SInvalidPointCoordinates +#: libraries/cryptolib4pascal/ClpECC.pas:67 +msgid "Invalid Point Coordinates" +msgstr "" + +#. Programmer's name for it: SInvalidAffineCoordinates +#: libraries/cryptolib4pascal/ClpECC.pas:68 +msgid "not valid for affine coordinates, \"iso\"" +msgstr "" + +#. Programmer's name for it: SInvalidPointOnCurve +#: libraries/cryptolib4pascal/ClpECC.pas:69 +msgid "must be non-null and on this curve, \"point\"" +msgstr "" + +#. Programmer's name for it: SInvalidPointOnCurve2 +#: libraries/cryptolib4pascal/ClpECC.pas:70 +msgid "Entries must be null or on this curve, \"points\"" +msgstr "" + +#. Programmer's name for it: SPointsNil +#: libraries/cryptolib4pascal/ClpECC.pas:71 +msgid "points" +msgstr "" + +#. Programmer's name for it: SInvalidRangeSpecified +#: libraries/cryptolib4pascal/ClpECC.pas:72 +msgid "Invalid Range Specified\", \"points\"" +msgstr "" + +#. Programmer's name for it: SInvalidPointCompression +#: libraries/cryptolib4pascal/ClpECC.pas:73 +msgid "Invalid Point Compression" +msgstr "" + +#. Programmer's name for it: SInvalidK1 +#: libraries/cryptolib4pascal/ClpECC.pas:74 +msgid "k1 must be > 0" +msgstr "" + +#. Programmer's name for it: SInvalidK3 +#: libraries/cryptolib4pascal/ClpECC.pas:75 +msgid "k3 must be 0 if k2 == 0" +msgstr "" + +#. Programmer's name for it: SK2K1MisMatch +#: libraries/cryptolib4pascal/ClpECC.pas:76 +msgid "k2 must be > k1" +msgstr "" + +#. Programmer's name for it: SK3K2Mismatch +#: libraries/cryptolib4pascal/ClpECC.pas:77 +msgid "k3 must be > k2" +msgstr "" + +#. Programmer's name for it: SInvalidInfinityEncoding +#: libraries/cryptolib4pascal/ClpECC.pas:78 +msgid "Invalid Infinity Encoding, \"encoded\"" +msgstr "" + +#. Programmer's name for it: SInvalidPointEncoding +#: libraries/cryptolib4pascal/ClpECC.pas:79 +msgid "Invalid Point Encoding %u" +msgstr "" + +#. Programmer's name for it: SInvalidPointEncoding +#: libraries/cryptolib4pascal/ClpECC.pas:81 +msgid "Incorrect Length for infinity encoding\", \"encoded\"" +msgstr "" + +#. Programmer's name for it: SInvalidPointEncoding +#: libraries/cryptolib4pascal/ClpECC.pas:83 +msgid "Incorrect Length for Compressed Encoding\", \"encoded\"" +msgstr "" + +#. Programmer's name for it: SInvalidPoint +#: libraries/cryptolib4pascal/ClpECC.pas:84 +msgid "Invalid Point" +msgstr "" + +#. Programmer's name for it: SInvalidPoint +#: libraries/cryptolib4pascal/ClpECC.pas:86 +msgid "Incorrect Length for UnCompressed Encoding\", \"encoded\"" +msgstr "" + +#. Programmer's name for it: SInvalidPoint +#: libraries/cryptolib4pascal/ClpECC.pas:88 +msgid "Incorrect Length for Hybrid Encoding\", \"encoded\"" +msgstr "" + +#. Programmer's name for it: SInvalidPoint +#: libraries/cryptolib4pascal/ClpECC.pas:90 +msgid "Inconsistent Y Coordinate in Hybrid Encoding\", \"encoded\"" +msgstr "" + +#. Programmer's name for it: SUnknownCoordSystem +#: libraries/cryptolib4pascal/ClpECC.pas:91 +msgid "Unknown Coordinate System" +msgstr "" + +#. Programmer's name for it: SPointNotInNormalForm +#: libraries/cryptolib4pascal/ClpECC.pas:92 +msgid "Point not in Normal Form" +msgstr "" + +#. Programmer's name for it: SNotProjectiveCoordSystem +#: libraries/cryptolib4pascal/ClpECC.pas:93 +msgid "Not a Projective Coordinate System" +msgstr "" + +#. Programmer's name for it: SCannotBeNegative +#: libraries/cryptolib4pascal/ClpECC.pas:94 +msgid "Cannot be Negative, \"e\"" +msgstr "" + +#. Programmer's name for it: SNilFieldElement +#: libraries/cryptolib4pascal/ClpECC.pas:95 +msgid "Exactly one of the Field Elements is Nil" +msgstr "" + +#. Programmer's name for it: SUnsupportedOperation +#: libraries/cryptolib4pascal/ClpECC.pas:96 +msgid "Constant-time Lookup not Supported" +msgstr "" + +#. Programmer's name for it: SInvalidRange +#: libraries/cryptolib4pascal/ClpECCompUtilities.pas:43 +msgid "Must be in the Range [2, 16], \"width\"" +msgstr "" + +#. Programmer's name for it: SInvalidRange2 +#: libraries/cryptolib4pascal/ClpECCompUtilities.pas:44 +msgid "Must be in the Range [2, 8], \"width\"" +msgstr "" + +#. Programmer's name for it: SWrongDomainParameter +#: libraries/cryptolib4pascal/ClpECDHBasicAgreement.pas:39 +msgid "ECDH Public Key has Wrong Domain Parameters" +msgstr "" + +#. Programmer's name for it: SInvalidAgreementValue +#: libraries/cryptolib4pascal/ClpECDHBasicAgreement.pas:40 +msgid "Infinity is not a Valid Agreement Value for ECDH" +msgstr "" + +#. Programmer's name for it: SInfinityInvalidPublicKey +#: libraries/cryptolib4pascal/ClpECDHBasicAgreement.pas:41 +msgid "Infinity is not a Valid Public Key for ECDH" +msgstr "" + +#. Programmer's name for it: SWrongDomainParameter +#: libraries/cryptolib4pascal/ClpECDHCBasicAgreement.pas:39 +msgid "ECDHC Public Key has Wrong Domain Parameters" +msgstr "" + +#. Programmer's name for it: SInvalidAgreementValue +#: libraries/cryptolib4pascal/ClpECDHCBasicAgreement.pas:40 +msgid "Infinity is not a Valid Agreement Value for ECDHC" +msgstr "" + +#. Programmer's name for it: SInfinityInvalidPublicKey +#: libraries/cryptolib4pascal/ClpECDHCBasicAgreement.pas:41 +msgid "Infinity is not a Valid Public Key for ECDHC" +msgstr "" + +#. Programmer's name for it: SCurveNil +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:33 +msgid "Curve Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SScalarNil +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:34 +msgid "Scalar Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SBigIntegerNotInitialized +#. Programmer's name for it: SBigIntegerNotInitialized +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:36 +#: libraries/cryptolib4pascal/ClpECPrivateKeyParameters.pas:32 +msgid "BigInteger Not Initialized \"%s\"" +msgstr "" + +#. Programmer's name for it: SQInfinity +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:38 +msgid "Point at Infinity \"Q\"" +msgstr "" + +#. Programmer's name for it: SQPointNotOnCurve +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:39 +msgid "Point Not on Curve \"Q\"" +msgstr "" + +#. Programmer's name for it: SScalarInvalidRange +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:40 +msgid "Scalar is not in the Interval [1, n - 1]" +msgstr "" + +#. Programmer's name for it: SECPublicKeyNotFound +#. Programmer's name for it: SECPublicKeyNotFound +#. Programmer's name for it: SECPublicKeyNotFound +#: libraries/cryptolib4pascal/ClpECDsaSigner.pas:47 +#: libraries/cryptolib4pascal/ClpECNRSigner.pas:47 +#: libraries/cryptolib4pascal/ClpECSchnorrSipaSigner.pas:45 +msgid "EC Public Key Required for Verification" +msgstr "" + +#. Programmer's name for it: SECPrivateKeyNotFound +#. Programmer's name for it: SECPrivateKeyNotFound +#. Programmer's name for it: SECPrivateKeyNotFound +#: libraries/cryptolib4pascal/ClpECDsaSigner.pas:48 +#: libraries/cryptolib4pascal/ClpECNRSigner.pas:48 +#: libraries/cryptolib4pascal/ClpECSchnorrSipaSigner.pas:46 +msgid "EC Private Key Required for Signing" +msgstr "" + +#. Programmer's name for it: SSenderPublicKeyInvalid +#: libraries/cryptolib4pascal/ClpECIESPublicKeyParser.pas:35 +msgid "Sender's Public Key Invalid." +msgstr "" + +#. Programmer's name for it: SSenderPublicKeyInvalid +#: libraries/cryptolib4pascal/ClpECIESPublicKeyParser.pas:37 +msgid "Sender's Public Key has Invalid Point Encoding \"%x\"" +msgstr "" + +#. Programmer's name for it: SAlgorithmNil +#. Programmer's name for it: SAlgorithmNil +#: libraries/cryptolib4pascal/ClpECKeyPairGenerator.pas:56 +#: libraries/cryptolib4pascal/ClpECKeyParameters.pas:39 +msgid "Algorithm Cannot be Empty" +msgstr "" + +#. Programmer's name for it: SInvalidKeySize +#: libraries/cryptolib4pascal/ClpECKeyPairGenerator.pas:57 +msgid "Unknown Key Size \"%d\"" +msgstr "" + +#. Programmer's name for it: SParameterNil +#: libraries/cryptolib4pascal/ClpECKeyParameters.pas:40 +msgid "Parameter Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SUnRecognizedAlgorithm +#: libraries/cryptolib4pascal/ClpECKeyParameters.pas:41 +msgid "Unrecognised Algorithm: \" %s, \"Algorithm" +msgstr "" + +#. Programmer's name for it: SNotInitializedForSigning +#. Programmer's name for it: SNotInitializedForSigning +#: libraries/cryptolib4pascal/ClpECNRSigner.pas:49 +#: libraries/cryptolib4pascal/ClpECSchnorrSipaSigner.pas:47 +msgid "Not Initialised For Signing" +msgstr "" + +#. Programmer's name for it: SNotInitializedForVerifying +#. Programmer's name for it: SNotInitializedForVerifying +#: libraries/cryptolib4pascal/ClpECNRSigner.pas:50 +#: libraries/cryptolib4pascal/ClpECSchnorrSipaSigner.pas:48 +msgid "Not Initialised For Verifying" +msgstr "" + +#. Programmer's name for it: SNotInitializedForVerifying +#: libraries/cryptolib4pascal/ClpECNRSigner.pas:52 +msgid "Not Initialised For Verifying/Recovery" +msgstr "" + +#. Programmer's name for it: SInputTooLargeForECNRKey +#: libraries/cryptolib4pascal/ClpECNRSigner.pas:53 +msgid "Input Too Large For ECNR Key." +msgstr "" + +#. Programmer's name for it: SSignatureGenerationError +#: libraries/cryptolib4pascal/ClpECSchnorrSipaSigner.pas:49 +msgid "An Error Occurred During Signature Generation" +msgstr "" + +#. Programmer's name for it: SSignatureGenerationError +#: libraries/cryptolib4pascal/ClpECSchnorrSipaSigner.pas:51 +msgid "" +"Only FP (Prime Field) Curves are Allowed for This Schnorr Implementation" +msgstr "" + +#. Programmer's name for it: SInvalidCtx +#: libraries/cryptolib4pascal/ClpEd25519.pas:40 +msgid "ctx" +msgstr "" + +#. Programmer's name for it: SDigestError +#: libraries/cryptolib4pascal/ClpEd25519.pas:41 +msgid "Digest Produced Insufficient Data" +msgstr "" + +#. Programmer's name for it: SEOFInPrivateKey +#: libraries/cryptolib4pascal/ClpEd25519Blake2BPrivateKeyParameters.pas:38 +msgid "EOF encountered in middle of Ed25519Blake2B private key" +msgstr "" + +#. Programmer's name for it: SUnsupportedAlgorithm +#. Programmer's name for it: SUnsupportedAlgorithm +#: libraries/cryptolib4pascal/ClpEd25519Blake2BPrivateKeyParameters.pas:39 +#: libraries/cryptolib4pascal/ClpEd25519PrivateKeyParameters.pas:39 +msgid "Unsupported Algorithm" +msgstr "" + +#. Programmer's name for it: SCtxNotNil +#. Programmer's name for it: SCtxNotNil +#: libraries/cryptolib4pascal/ClpEd25519Blake2BPrivateKeyParameters.pas:40 +#: libraries/cryptolib4pascal/ClpEd25519PrivateKeyParameters.pas:40 +msgid "Ctx must be Nil for Ed25519 Algorithm" +msgstr "" + +#. Programmer's name for it: SMsgLen +#. Programmer's name for it: SMsgLen +#: libraries/cryptolib4pascal/ClpEd25519Blake2BPrivateKeyParameters.pas:41 +#: libraries/cryptolib4pascal/ClpEd25519PrivateKeyParameters.pas:41 +msgid "MsgLen must be Equal to \"PreHashSize\" for Ed25519ph Algorithm" +msgstr "" + +#. Programmer's name for it: SEOFInPublicKey +#: libraries/cryptolib4pascal/ClpEd25519Blake2BPublicKeyParameters.pas:34 +msgid "EOF encountered in middle of Ed25519Blake2B public key" +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519Blake2BSigner.pas:37 +msgid "Ed25519Blake2BSigner not Initialised for Signature Generation." +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519Blake2BSigner.pas:39 +msgid "Ed25519Blake2BSigner not Initialised for Verification" +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519CtxBlake2BSigner.pas:37 +msgid "Ed25519CtxBlake2BSigner not Initialised for Signature Generation." +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519CtxBlake2BSigner.pas:39 +msgid "Ed25519CtxBlake2BSigner not Initialised for Verification" +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519CtxSigner.pas:37 +msgid "Ed25519CtxSigner not Initialised for Signature Generation." +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519CtxSigner.pas:39 +msgid "Ed25519CtxSigner not Initialised for Verification" +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519PhBlake2BSigner.pas:37 +msgid "Ed25519PhBlake2BSigner not Initialised for Signature Generation." +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519PhBlake2BSigner.pas:39 +msgid "Ed25519PhBlake2BSigner not Initialised for Verification" +msgstr "" + +#. Programmer's name for it: SPreHashDigestFailed +#. Programmer's name for it: SPreHashDigestFailed +#: libraries/cryptolib4pascal/ClpEd25519PhBlake2BSigner.pas:40 +#: libraries/cryptolib4pascal/ClpEd25519PhSigner.pas:40 +msgid "PreHash Digest Failed" +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519PhSigner.pas:37 +msgid "Ed25519PhSigner not Initialised for Signature Generation." +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519PhSigner.pas:39 +msgid "Ed25519PhSigner not Initialised for Verification" +msgstr "" + +#. Programmer's name for it: SEOFInPrivateKey +#: libraries/cryptolib4pascal/ClpEd25519PrivateKeyParameters.pas:38 +msgid "EOF encountered in middle of Ed25519 private key" +msgstr "" + +#. Programmer's name for it: SEOFInPublicKey +#: libraries/cryptolib4pascal/ClpEd25519PublicKeyParameters.pas:34 +msgid "EOF encountered in middle of Ed25519 public key" +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519Signer.pas:37 +msgid "Ed25519Signer not Initialised for Signature Generation." +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519Signer.pas:39 +msgid "Ed25519Signer not Initialised for Verification" +msgstr "" + +#. Programmer's name for it: SInvalidCharacteristic +#: libraries/cryptolib4pascal/ClpFiniteFields.pas:35 +msgid "Must be >= 2 , \" characteristic \"" +msgstr "" + +#. Programmer's name for it: SInvalidCharacteristic +#: libraries/cryptolib4pascal/ClpFiniteFields.pas:37 +msgid "" +"Irreducible polynomials in GF(2) must have constant term, \"exponents\"" +msgstr "" + +#. Programmer's name for it: SInvalidCharacteristic +#: libraries/cryptolib4pascal/ClpFiniteFields.pas:39 +msgid "Polynomial Exponents must be montonically increasing\", \"exponents\"" +msgstr "" + +#. Programmer's name for it: SKeyGeneratorAlgorithmNotRecognised +#: libraries/cryptolib4pascal/ClpGeneratorUtilities.pas:52 +msgid "KeyGenerator \"%s\" not Recognised." +msgstr "" + +#. Programmer's name for it: SKeyGeneratorAlgorithmNotRecognised +#: libraries/cryptolib4pascal/ClpGeneratorUtilities.pas:54 +msgid "KeyGenerator \"%s\" ( \"%s\" ) not Supported." +msgstr "" + +#. Programmer's name for it: SKeyGeneratorAlgorithmNotRecognised +#: libraries/cryptolib4pascal/ClpGeneratorUtilities.pas:56 +msgid "KeyPairGenerator \"%s\" not Recognised." +msgstr "" + +#. Programmer's name for it: SKeyGeneratorAlgorithmNotRecognised +#: libraries/cryptolib4pascal/ClpGeneratorUtilities.pas:58 +msgid "KeyPairGenerator \"%s\" ( \"%s\" ) not Supported." +msgstr "" + +#. Programmer's name for it: SSizeTooBigHKDF +#: libraries/cryptolib4pascal/ClpHkdfBytesGenerator.pas:39 +msgid "HKDF Cannot Generate More Than 255 Blocks of HashLen Size" +msgstr "" + +#. Programmer's name for it: SSizeTooBigHKDF2 +#: libraries/cryptolib4pascal/ClpHkdfBytesGenerator.pas:40 +msgid "HKDF May Only Be Used For 255 * HashLen Bytes of Output" +msgstr "" + +#. Programmer's name for it: SSizeTooBigHKDF2 +#: libraries/cryptolib4pascal/ClpHkdfBytesGenerator.pas:42 +msgid "HKDF Parameters Required For \"HkdfBytesGenerator\", \"parameters\"" +msgstr "" + +#. Programmer's name for it: SIKMNil +#: libraries/cryptolib4pascal/ClpHkdfParameters.pas:30 +msgid "\"ikm\" is Nil" +msgstr "" + +#. Programmer's name for it: SUnSupportedOperation +#. Programmer's name for it: SUnSupportedOperation +#: libraries/cryptolib4pascal/ClpHMacDsaKCalculator.pas:42 +#: libraries/cryptolib4pascal/ClpRandomDsaKCalculator.pas:34 +msgid "Operation not Supported" +msgstr "" + +#: libraries/cryptolib4pascal/ClpIESCipher.pas:54 +msgid "Must be Passed Recipient's Public EC Key for Encryption" +msgstr "" + +#: libraries/cryptolib4pascal/ClpIESCipher.pas:56 +msgid "Must be Passed Recipient's Private EC Key for Decryption" +msgstr "" + +#. Programmer's name for it: SIAlgorithmParameterSpecNil +#: libraries/cryptolib4pascal/ClpIESCipher.pas:57 +msgid "Parameter Spec Cannot Be Nil" +msgstr "" + +#. Programmer's name for it: SUnableToProcessBlock +#: libraries/cryptolib4pascal/ClpIESCipher.pas:58 +msgid "Unable to Process Block. \"%s\"" +msgstr "" + +#. Programmer's name for it: SIESParameterSpecError +#: libraries/cryptolib4pascal/ClpIESCipher.pas:59 +msgid "Must be Passed IES Parameter Spec" +msgstr "" + +#. Programmer's name for it: SNonceInvalidLength +#: libraries/cryptolib4pascal/ClpIESCipher.pas:60 +msgid "Nonce in IES Parameters Needs to be \"%s\" Bytes Long" +msgstr "" + +#: libraries/cryptolib4pascal/ClpIESEngine.pas:53 +#: libraries/cryptolib4pascal/ClpPascalCoinIESEngine.pas:45 +msgid "Unable to Recover Ephemeral Public Key: \"%s\"" +msgstr "" + +#: libraries/cryptolib4pascal/ClpIESEngine.pas:55 +#: libraries/cryptolib4pascal/ClpPascalCoinIESEngine.pas:47 +msgid "Length of Input Must be Greater than the MAC and V Combined" +msgstr "" + +#. Programmer's name for it: SInvalidMAC +#. Programmer's name for it: SInvalidMAC +#: libraries/cryptolib4pascal/ClpIESEngine.pas:56 +#: libraries/cryptolib4pascal/ClpPascalCoinIESEngine.pas:48 +msgid "Invalid MAC" +msgstr "" + +#. Programmer's name for it: SRandomNil +#: libraries/cryptolib4pascal/ClpKeyGenerationParameters.pas:30 +msgid "Random Class Instance Can't Be Nil" +msgstr "" + +#. Programmer's name for it: SInvalidStrength +#: libraries/cryptolib4pascal/ClpKeyGenerationParameters.pas:31 +msgid "Strength Must Be Greater Than Zero But Was Given %d" +msgstr "" + +#. Programmer's name for it: SKeyNil +#: libraries/cryptolib4pascal/ClpKeyParameter.pas:31 +msgid "Key Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SInvalidKeyOffSet +#: libraries/cryptolib4pascal/ClpKeyParameter.pas:32 +msgid "Invalid Key OffSet" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/cryptolib4pascal/ClpKeyParameter.pas:33 +msgid "Invalid Key Length" +msgstr "" + +#. Programmer's name for it: SInvalidF2MFieldValue +#: libraries/cryptolib4pascal/ClpLongArray.pas:34 +msgid "Invalid F2M Field value, \"bigInt\"" +msgstr "" + +#. Programmer's name for it: SUnRecognizedMac +#: libraries/cryptolib4pascal/ClpMacUtilities.pas:40 +msgid "Mac \"%s\" not recognised." +msgstr "" + +#. Programmer's name for it: SCannotBeZero +#: libraries/cryptolib4pascal/ClpMod.pas:35 +msgid "cannot be 0, \"x\"" +msgstr "" + +#. Programmer's name for it: SCurveUnknownGroupOrder +#: libraries/cryptolib4pascal/ClpMultipliers.pas:47 +msgid "Need Curve With Known Group Order, \"curve\"" +msgstr "" + +#. Programmer's name for it: SInCompatiblePoint +#: libraries/cryptolib4pascal/ClpMultipliers.pas:48 +msgid "Only AbstractF2mPoint can be used in WTauNafMultiplier" +msgstr "" + +#: libraries/cryptolib4pascal/ClpOSRandom.pas:72 +msgid "" +"An Error Occured while generating random data using MS Windows Cryptography " +"API." +msgstr "" + +#: libraries/cryptolib4pascal/ClpOSRandom.pas:76 +msgid "" +"An Error Occured while generating random data using SecRandomCopyBytes API." +msgstr "" + +#: libraries/cryptolib4pascal/ClpOSRandom.pas:80 +#: libraries/cryptolib4pascal/ClpOSRandom.pas:84 +msgid "An Error Occured while generating random data using getRandom API" +msgstr "" + +#: libraries/cryptolib4pascal/ClpOSRandom.pas:88 +msgid "" +"An Error Occured while generating random data using arc4random_buf API." +msgstr "" + +#. Programmer's name for it: SIncompleteLastBlockInDecryption +#: libraries/cryptolib4pascal/ClpPaddedBufferedBlockCipher.pas:41 +msgid "Last Block Incomplete in Decryption" +msgstr "" + +#. Programmer's name for it: SCorruptedPadBlock +#: libraries/cryptolib4pascal/ClpPaddingModes.pas:32 +msgid "Pad Block Corrupted" +msgstr "" + +#. Programmer's name for it: SIVNil +#: libraries/cryptolib4pascal/ClpParametersWithIV.pas:31 +msgid "IV Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SParameters +#: libraries/cryptolib4pascal/ClpParametersWithRandom.pas:32 +msgid "Parameters" +msgstr "" + +#. Programmer's name for it: SRandom +#: libraries/cryptolib4pascal/ClpParametersWithRandom.pas:33 +msgid "Random" +msgstr "" + +#. Programmer's name for it: SAlgorithmNotRecognised +#: libraries/cryptolib4pascal/ClpParameterUtilities.pas:38 +msgid "Algorithm \"%s\" not Recognised." +msgstr "" + +#. Programmer's name for it: SKDFParameterNotFound +#: libraries/cryptolib4pascal/ClpPascalCoinECIESKdfBytesGenerator.pas:37 +msgid "" +"Specified Hash Cannot Produce Sufficient Data for the Specified Operation." +msgstr "" + +#. Programmer's name for it: SCipherCannotbeNilInThisMode +#: libraries/cryptolib4pascal/ClpPascalCoinIESEngine.pas:49 +msgid "Cipher Cannot be Nil in This Mode." +msgstr "" + +#. Programmer's name for it: SBufferNil +#: libraries/cryptolib4pascal/ClpRandom.pas:30 +msgid "Buffer Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SMaxValueNegative +#: libraries/cryptolib4pascal/ClpRandom.pas:31 +msgid "maxValue Must be Positive" +msgstr "" + +#. Programmer's name for it: SInvalidMinValue +#: libraries/cryptolib4pascal/ClpRandom.pas:32 +msgid "minValue Cannot be Greater Than maxValue" +msgstr "" + +#. Programmer's name for it: SUnknownAlgorithm +#: libraries/cryptolib4pascal/ClpRandomNumberGenerator.pas:31 +msgid "Unknown Random Generation Algorithm Requested" +msgstr "" + +#. Programmer's name for it: SUnknownAlgorithm +#: libraries/cryptolib4pascal/ClpRandomNumberGenerator.pas:33 +msgid "Random Number Generator Output Buffer Cannot Be Nil" +msgstr "" + +#. Programmer's name for it: SUnsupportedBlock +#: libraries/cryptolib4pascal/ClpRijndaelEngine.pas:37 +msgid "Unknown Blocksize to Rijndael" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/cryptolib4pascal/ClpRijndaelEngine.pas:38 +msgid "Key Length not 128/160/192/224/256 bits." +msgstr "" + +#. Programmer's name for it: SRijndaelEngineNotInitialised +#: libraries/cryptolib4pascal/ClpRijndaelEngine.pas:39 +msgid "Rijndael Engine not Initialised" +msgstr "" + +#. Programmer's name for it: SRijndaelEngineNotInitialised +#: libraries/cryptolib4pascal/ClpRijndaelEngine.pas:41 +msgid "Invalid Parameter Passed to Rijndael Init - \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidRound +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:38 +msgid "\"rounds\" Must be a Positive, Even Number" +msgstr "" + +#. Programmer's name for it: SInvalidKeySize +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:39 +msgid "%s Requires 128 bit or 256 bit key" +msgstr "" + +#. Programmer's name for it: SMaxByteExceeded +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:40 +msgid "2^70 Byte Limit per IV; Change IV" +msgstr "" + +#. Programmer's name for it: SMaxByteExceededTwo +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:41 +msgid "2^70 byte limit per IV would be exceeded; Change IV" +msgstr "" + +#. Programmer's name for it: SEngineNotInitialized +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:42 +msgid "%s not Initialized" +msgstr "" + +#. Programmer's name for it: SRoundsMustbeEven +#. Programmer's name for it: SRoundsMustBeEven +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:45 +#: libraries/hashlib4pascal/HlpPBKDF_ScryptNotBuildInAdapter.pas:37 +msgid "Number of Rounds Must be Even" +msgstr "" + +#. Programmer's name for it: SIVRequired +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:47 +msgid "%s Init Requires an IV, \"parameters\"" +msgstr "" + +#. Programmer's name for it: SInvalidIV +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:48 +msgid "%s Requires exactly %d bytes of IV" +msgstr "" + +#. Programmer's name for it: SInvalidIV +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:50 +msgid "%s Init Parameters must Contain a KeyParameter (or null for Re-Init)" +msgstr "" + +#. Programmer's name for it: SInvalidIV +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:52 +msgid "KeyParameter can not be null for First Initialisation" +msgstr "" + +#. Programmer's name for it: SInvalidParameters +#: libraries/cryptolib4pascal/ClpScalarSplitParameters.pas:30 +msgid "\"%s\" must consist of exactly 2 (initialized) values" +msgstr "" + +#. Programmer's name for it: SPublicKey +#: libraries/cryptolib4pascal/ClpSchnorrDigestSigner.pas:43 +msgid "SchnorrDigestSigner not Initialized for Signature Generation." +msgstr "" + +#. Programmer's name for it: SPublicKey +#: libraries/cryptolib4pascal/ClpSchnorrDigestSigner.pas:45 +msgid "SchnorrDigestSigner not Initialized for Verification" +msgstr "" + +#: libraries/cryptolib4pascal/ClpSecP256K1Custom.pas:40 +msgid "Value Invalid for SecP256K1FieldElement \"%s\"" +msgstr "" + +#: libraries/cryptolib4pascal/ClpSecP256R1Custom.pas:40 +msgid "Value Invalid for SecP256R1FieldElement \"%s\"" +msgstr "" + +#: libraries/cryptolib4pascal/ClpSecP384R1Custom.pas:40 +msgid "Value Invalid for SecP384R1FieldElement \"%s\"" +msgstr "" + +#: libraries/cryptolib4pascal/ClpSecP521R1Custom.pas:40 +msgid "Value Invalid for SecP521R1FieldElement \"%s\"" +msgstr "" + +#: libraries/cryptolib4pascal/ClpSecT283Custom.pas:41 +msgid "Value Invalid for SecT283FieldElement \"%s\"" +msgstr "" + +#. Programmer's name for it: SUnRecognisedPRNGAlgorithm +#: libraries/cryptolib4pascal/ClpSecureRandom.pas:43 +msgid "Unrecognised PRNG Algorithm: %s \"algorithm\"" +msgstr "" + +#. Programmer's name for it: SCannotBeNegative +#: libraries/cryptolib4pascal/ClpSecureRandom.pas:44 +msgid "Cannot be Negative \"maxValue\"" +msgstr "" + +#. Programmer's name for it: SInvalidMaxValue +#: libraries/cryptolib4pascal/ClpSecureRandom.pas:45 +msgid "maxValue Cannot be Less Than minValue" +msgstr "" + +#. Programmer's name for it: SMalformedSignature +#: libraries/cryptolib4pascal/ClpSignersEncodings.pas:35 +msgid "Malformed signature, \"%s\"" +msgstr "" + +#. Programmer's name for it: SValueOutOfRange +#: libraries/cryptolib4pascal/ClpSignersEncodings.pas:36 +msgid "Value out of range, \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidEncodingLength +#: libraries/cryptolib4pascal/ClpSignersEncodings.pas:37 +msgid "Encoding has incorrect length, \"%s\"" +msgstr "" + +#. Programmer's name for it: SUnRecognizedAlgorithm +#: libraries/cryptolib4pascal/ClpSignerUtilities.pas:71 +msgid "Signer \" %s \" not recognised." +msgstr "" + +#. Programmer's name for it: SInvalidScale +#. Programmer's name for it: SNegativeScale +#: libraries/cryptolib4pascal/ClpSimpleBigDecimal.pas:29 +#: libraries/cryptolib4pascal/ClpSimpleBigDecimal.pas:32 +msgid "Scale may not be Negative" +msgstr "" + +#. Programmer's name for it: SInvalidScale +#: libraries/cryptolib4pascal/ClpSimpleBigDecimal.pas:31 +msgid "Only SimpleBigDecimal of Same Scale Allowed in Arithmetic Operations" +msgstr "" + +#. Programmer's name for it: SSpeckEngineNotInitialised +#. Programmer's name for it: SSpeckLegacyEngineNotInitialised +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:35 +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:35 +msgid "%s Engine not Initialised" +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:38 +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:38 +msgid "Invalid Argument Encountered." +msgstr "" + +#. Programmer's name for it: SInvalidParameterSpeckInit +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:39 +msgid "Invalid Parameter Passed to Speck Init - \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidParameterSpeckInit +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:41 +msgid "Speck32 requires a key of 64 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidParameterSpeckInit +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:43 +msgid "Speck48 requires a key of 72 or 96 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidParameterSpeckInit +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:45 +msgid "Speck64 requires a key of 96 or 128 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidParameterSpeckInit +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:47 +msgid "Speck96 requires a key of 96 or 144 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidParameterSpeckInit +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:49 +msgid "" +"Speck128 requires a key of 128, 192 or 256 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:40 +msgid "Invalid Parameter Passed to SpeckLegacy Init - \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:42 +msgid "Speck32Legacy requires a key of 64 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:44 +msgid "" +"Speck48Legacy requires a key of 72 or 96 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:46 +msgid "" +"Speck64Legacy requires a key of 96 or 128 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:48 +msgid "" +"Speck96Legacy requires a key of 96 or 144 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:50 +msgid "" +"Speck128Legacy requires a key of 128, 192 or 256 bits but input was \"%d\" " +"bits." +msgstr "" + +#. Programmer's name for it: SInvalidMU +#: libraries/cryptolib4pascal/ClpTnaf.pas:34 +msgid "mu must be 1 or -1" +msgstr "" + +#. Programmer's name for it: SDifferentScales +#: libraries/cryptolib4pascal/ClpTnaf.pas:35 +msgid "lambda0 and lambda1 do not have same scale" +msgstr "" + +#. Programmer's name for it: SNoKoblitzCurve +#: libraries/cryptolib4pascal/ClpTnaf.pas:36 +msgid "No Koblitz curve (ABC), TNAF multiplication not possible" +msgstr "" + +#. Programmer's name for it: SNotKoblitzCurve +#: libraries/cryptolib4pascal/ClpTnaf.pas:37 +msgid "si is defined for Koblitz curves only" +msgstr "" + +#. Programmer's name for it: SInvalidCoFactor +#: libraries/cryptolib4pascal/ClpTnaf.pas:38 +msgid "h (Cofactor) must be 2 or 4" +msgstr "" + +#: libraries/cryptolib4pascal/ClpX25519Agreement.pas:36 +msgid "The Init Parameter does not Contain the Private Key" +msgstr "" + +#. Programmer's name for it: SEOFInPrivateKey +#: libraries/cryptolib4pascal/ClpX25519PrivateKeyParameters.pas:37 +msgid "EOF encountered in middle of X25519 private key" +msgstr "" + +#. Programmer's name for it: SAgreementCalculationFailed +#: libraries/cryptolib4pascal/ClpX25519PrivateKeyParameters.pas:38 +msgid "X25519 Agreement Failed" +msgstr "" + +#. Programmer's name for it: SEOFInPublicKey +#: libraries/cryptolib4pascal/ClpX25519PublicKeyParameters.pas:34 +msgid "EOF encountered in middle of X25519 public key" +msgstr "" + +#. Programmer's name for it: SInconsistentKValues +#: libraries/cryptolib4pascal/ClpX9ECC.pas:36 +msgid "Inconsistent K Values" +msgstr "" + +#. Programmer's name for it: SCurveNil +#: libraries/cryptolib4pascal/ClpX9ECC.pas:37 +msgid "Curve" +msgstr "" + +#. Programmer's name for it: SNotImplementedECCurve +#: libraries/cryptolib4pascal/ClpX9ECC.pas:38 +msgid "This Type of ECCurve is not Implemented" +msgstr "" + +#. Programmer's name for it: SFieldIDNil +#: libraries/cryptolib4pascal/ClpX9ECC.pas:39 +msgid "FieldID" +msgstr "" + +#. Programmer's name for it: SSeqNil +#: libraries/cryptolib4pascal/ClpX9ECC.pas:40 +msgid "Seq" +msgstr "" + +#. Programmer's name for it: SUnSupportedCurveOne +#: libraries/cryptolib4pascal/ClpX9ECParameters.pas:38 +msgid "Only trinomial and pentomial curves are supported" +msgstr "" + +#. Programmer's name for it: SUnSupportedCurveTwo +#: libraries/cryptolib4pascal/ClpX9ECParameters.pas:39 +msgid "\"curve\" is of an unsupported type" +msgstr "" + +#. Programmer's name for it: SBadVersion +#: libraries/cryptolib4pascal/ClpX9ECParameters.pas:40 +msgid "Bad Version in X9ECParameters" +msgstr "" + +#. Programmer's name for it: SNullKeyReInit +#: libraries/cryptolib4pascal/ClpXSalsa20Engine.pas:33 +msgid "%s Doesn't Support Re-Init with Null Key" +msgstr "" + +#. Programmer's name for it: SInvalidKeySize +#: libraries/cryptolib4pascal/ClpXSalsa20Engine.pas:34 +msgid "%s Requires a 256 bit Key" +msgstr "" + +#. Programmer's name for it: SArgumentOutOfRange +#: libraries/generics.collections/generics.strings.pas:26 +msgid "Argument out of range" +msgstr "" + +#. Programmer's name for it: SArgumentNilNode +#: libraries/generics.collections/generics.strings.pas:27 +msgid "Node is nil" +msgstr "" + +#. Programmer's name for it: SDuplicatesNotAllowed +#: libraries/generics.collections/generics.strings.pas:28 +msgid "Duplicates not allowed in dictionary" +msgstr "" + +#. Programmer's name for it: SCollectionInconsistency +#: libraries/generics.collections/generics.strings.pas:29 +msgid "Collection inconsistency" +msgstr "" + +#. Programmer's name for it: SCollectionDuplicate +#: libraries/generics.collections/generics.strings.pas:30 +msgid "Collection does not allow duplicates" +msgstr "" + +#. Programmer's name for it: SDictionaryKeyDoesNotExist +#: libraries/generics.collections/generics.strings.pas:31 +msgid "Dictionary key does not exist" +msgstr "" + +#. Programmer's name for it: SItemNotFound +#: libraries/generics.collections/generics.strings.pas:32 +msgid "Item not found" +msgstr "" + +#. Programmer's name for it: SInvalidConfigLength +#. Programmer's name for it: SInvalidConfigLength +#: libraries/hashlib4pascal/HlpBlake2B.pas:22 +#: libraries/hashlib4pascal/HlpBlake2S.pas:22 +msgid "Config Length Must Be 8 Words" +msgstr "" + +#. Programmer's name for it: SConfigNil +#. Programmer's name for it: SConfigNil +#: libraries/hashlib4pascal/HlpBlake2B.pas:23 +#: libraries/hashlib4pascal/HlpBlake2S.pas:23 +msgid "Config Cannot Be Nil" +msgstr "" + +#. Programmer's name for it: SConfigNil +#. Programmer's name for it: SConfigNil +#: libraries/hashlib4pascal/HlpBlake2B.pas:25 +#: libraries/hashlib4pascal/HlpBlake2S.pas:25 +msgid "XOFSize in Bits must be Multiples of 8 and be Between %u and %u Bytes." +msgstr "" + +#. Programmer's name for it: SOutputLengthInvalid +#. Programmer's name for it: SOutputLengthInvalid +#. Programmer's name for it: SOutputLengthInvalid +#: libraries/hashlib4pascal/HlpBlake2B.pas:26 +#: libraries/hashlib4pascal/HlpBlake2S.pas:26 +#: libraries/hashlib4pascal/HlpSHA3.pas:28 +msgid "Output Length is above the Digest Length" +msgstr "" + +#. Programmer's name for it: SMaximumOutputLengthExceeded +#: libraries/hashlib4pascal/HlpBlake2B.pas:28 +msgid "\"Maximum Length is 2^32 blocks of 64 bytes" +msgstr "" + +#. Programmer's name for it: SWritetoXofAfterReadError +#. Programmer's name for it: SWritetoXofAfterReadError +#. Programmer's name for it: SWritetoXofAfterReadError +#: libraries/hashlib4pascal/HlpBlake2B.pas:29 +#: libraries/hashlib4pascal/HlpBlake2S.pas:29 +#: libraries/hashlib4pascal/HlpSHA3.pas:30 +msgid "\"%s\" Write to Xof after Read not Allowed" +msgstr "" + +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:16 +msgid "" +"BLAKE2B HashSize must be restricted to one of the following [1 .. 64], \"%d" +"\"" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:17 +msgid "\"Key\" Length Must Not Be Greater Than 64, \"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:19 +msgid "\"Personalisation\" Length Must Be Equal To 16, \"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:20 +msgid "\"Salt\" Length Must Be Equal To 16, \"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:23 +msgid "FanOut Value Should be Between [0 .. 255] for Blake2B" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:25 +msgid "MaxDepth Value Should be Between [1 .. 255] for Blake2B" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:27 +msgid "NodeDepth Value Should be Between [0 .. 255] for Blake2B" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:29 +msgid "InnerHashSize Value Should be Between [0 .. 64] for Blake2B" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:31 +msgid "NodeOffset Value Should be Between [0 .. (2^64-1)] for Blake2B" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:34 +msgid "Tree Inner Hash Size Must Not Be Greater Than 64, \"%d\"" +msgstr "" + +#. Programmer's name for it: SMaximumOutputLengthExceeded +#: libraries/hashlib4pascal/HlpBlake2S.pas:28 +msgid "\"Maximum Length is 2^32 blocks of 32 bytes" +msgstr "" + +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:16 +msgid "" +"BLAKE2S HashSize must be restricted to one of the following [1 .. 32], \"%d" +"\"" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:17 +msgid "\"Key\" Length Must Not Be Greater Than 32, \"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:19 +msgid "\"Personalisation\" Length Must Be Equal To 8, \"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:20 +msgid "\"Salt\" Length Must Be Equal To 8, \"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:23 +msgid "FanOut Value Should be Between [0 .. 255] for Blake2S" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:25 +msgid "MaxDepth Value Should be Between [1 .. 255] for Blake2S" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:27 +msgid "NodeDepth Value Should be Between [0 .. 255] for Blake2S" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:29 +msgid "InnerHashSize Value Should be Between [0 .. 32] for Blake2S" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:31 +msgid "NodeOffset Value Should be Between [0 .. (2^48-1)] for Blake2S" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:34 +msgid "Tree Inner Hash Size Must Not Be Greater Than 32, \"%d\"" +msgstr "" + +#. Programmer's name for it: SUnSupportedCRCType +#: libraries/hashlib4pascal/HlpCRC.pas:22 +msgid "UnSupported CRC Type: \"%s\"" +msgstr "" + +#. Programmer's name for it: SWidthOutOfRange +#: libraries/hashlib4pascal/HlpCRC.pas:23 +msgid "Width Must be Between 3 and 64. \"%d\"" +msgstr "" + +#. Programmer's name for it: SIndexOutOfRange +#: libraries/hashlib4pascal/HlpHash.pas:16 +msgid "Current Index Is Out Of Range" +msgstr "" + +#. Programmer's name for it: SFileNotExist +#: libraries/hashlib4pascal/HlpHash.pas:19 +msgid "Specified File Not Found" +msgstr "" + +#. Programmer's name for it: SCloneNotYetImplemented +#: libraries/hashlib4pascal/HlpHash.pas:20 +msgid "Clone Not Yet Implemented For \"%s\"" +msgstr "" + +#. Programmer's name for it: SHashBufferMessage +#: libraries/hashlib4pascal/HlpHashBuffer.pas:13 +msgid "HashBuffer, Length: %d, Position: %d, IsEmpty: %s" +msgstr "" + +#: libraries/hashlib4pascal/HlpHashResult.pas:27 +msgid "Current Data Structure cannot be Represented as an \"Int32\" Type." +msgstr "" + +#: libraries/hashlib4pascal/HlpHashResult.pas:29 +msgid "Current Data Structure cannot be Represented as an \"UInt8\" Type." +msgstr "" + +#: libraries/hashlib4pascal/HlpHashResult.pas:31 +msgid "Current Data Structure cannot be Represented as an \"UInt16\" Type." +msgstr "" + +#: libraries/hashlib4pascal/HlpHashResult.pas:33 +msgid "Current Data Structure cannot be Represented as an \"UInt32\" Type." +msgstr "" + +#: libraries/hashlib4pascal/HlpHashResult.pas:35 +msgid "Current Data Structure cannot be Represented as an \"UInt64\" Type." +msgstr "" + +#. Programmer's name for it: SInvalidHavalRound +#: libraries/hashlib4pascal/HlpHaval.pas:25 +msgid "Haval Round Must be 3, 4 or 5" +msgstr "" + +#. Programmer's name for it: SInvalidHavalRound +#: libraries/hashlib4pascal/HlpHaval.pas:27 +msgid "" +"Haval HashSize Must be Either 128 bit(16 byte), 160 bit(20 byte), 192 " +"bit(24 byte), 224 bit(28 byte) or 256 bit(32 byte)" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpMurmur2.pas:24 +#: libraries/hashlib4pascal/HlpMurmur2_64.pas:21 +#: libraries/hashlib4pascal/HlpMurmurHash3_x64_128.pas:22 +#: libraries/hashlib4pascal/HlpMurmurHash3_x86_128.pas:22 +#: libraries/hashlib4pascal/HlpMurmurHash3_x86_32.pas:22 +#: libraries/hashlib4pascal/HlpSipHash.pas:23 +#: libraries/hashlib4pascal/HlpXXHash32.pas:19 +#: libraries/hashlib4pascal/HlpXXHash64.pas:19 +msgid "KeyLength Must Be Equal to %d" +msgstr "" + +#: libraries/hashlib4pascal/HlpNullable.pas:16 +msgid "Cannot assign non-null pointer to nullable type." +msgstr "" + +#: libraries/hashlib4pascal/HlpNullable.pas:18 +msgid "Unsupported Type: Only supports Integers, Int64, Floats and Strings." +msgstr "" + +#. Programmer's name for it: SGetNullValue +#: libraries/hashlib4pascal/HlpNullable.pas:19 +msgid "Attempted to get a null value." +msgstr "" + +#. Programmer's name for it: SHashSizeNotImplemented +#: libraries/hashlib4pascal/HlpNullDigest.pas:18 +msgid "HashSize Not Implemented For \"%s\"" +msgstr "" + +#. Programmer's name for it: SBlockSizeNotImplemented +#: libraries/hashlib4pascal/HlpNullDigest.pas:19 +msgid "BlockSize Not Implemented For \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidOutputByteCount +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:32 +msgid "\"(AByteCount)\" Argument Less Than \"%d\"." +msgstr "" + +#. Programmer's name for it: SBlockInstanceNotInitialized +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:33 +msgid "Block Instance not Initialized" +msgstr "" + +#. Programmer's name for it: SInputLengthInvalid +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:34 +msgid "Input Length \"%d\" is not Equal to BlockSize \"%d\"" +msgstr "" + +#. Programmer's name for it: SLanesTooSmall +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:35 +msgid "Lanes Must be Greater Than \"%d\"" +msgstr "" + +#. Programmer's name for it: SLanesTooBig +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:36 +msgid "Lanes Must be Less Than \"%d\"" +msgstr "" + +#. Programmer's name for it: SMemoryTooSmall +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:37 +msgid "Memory is Less Than: \"%d\", Expected \"%d\"" +msgstr "" + +#. Programmer's name for it: SIterationsTooSmall +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:38 +msgid "Iterations is Less Than: \"%d\"" +msgstr "" + +#. Programmer's name for it: SIterationsTooSmall +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:40 +msgid "Argon2 Parameter Builder Not Initialized" +msgstr "" + +#: libraries/hashlib4pascal/HlpPBKDF_ScryptNotBuildInAdapter.pas:31 +#: libraries/hashlib4pascal/HlpPBKDF2_HMACNotBuildInAdapter.pas:18 +msgid "\"(AByteCount)\" Argument must be a value greater than zero." +msgstr "" + +#. Programmer's name for it: SInvalidCost +#: libraries/hashlib4pascal/HlpPBKDF_ScryptNotBuildInAdapter.pas:32 +msgid "Cost parameter must be > 1 and a power of 2." +msgstr "" + +#. Programmer's name for it: SBlockSizeAndCostIncompatible +#: libraries/hashlib4pascal/HlpPBKDF_ScryptNotBuildInAdapter.pas:33 +msgid "Cost parameter must be > 1 and < 65536." +msgstr "" + +#. Programmer's name for it: SBlockSizeTooSmall +#: libraries/hashlib4pascal/HlpPBKDF_ScryptNotBuildInAdapter.pas:34 +msgid "Block size must be >= 1." +msgstr "" + +#. Programmer's name for it: SBlockSizeTooSmall +#: libraries/hashlib4pascal/HlpPBKDF_ScryptNotBuildInAdapter.pas:36 +msgid "" +"Parallelism parameter must be >= 1 and <= %d (based on block size of %d)" +msgstr "" + +#. Programmer's name for it: SInvalidIndex +#: libraries/hashlib4pascal/HlpPBKDF2_HMACNotBuildInAdapter.pas:19 +msgid "Invalid start or end index in the internal buffer" +msgstr "" + +#. Programmer's name for it: SNotInitializedIHashInstance +#: libraries/hashlib4pascal/HlpPBKDF2_HMACNotBuildInAdapter.pas:20 +msgid "\"IHash\" instance is uninitialized" +msgstr "" + +#. Programmer's name for it: SIterationtooSmall +#: libraries/hashlib4pascal/HlpPBKDF2_HMACNotBuildInAdapter.pas:21 +msgid "Iteration must be greater than zero." +msgstr "" + +#. Programmer's name for it: SInvalidHashMode +#: libraries/hashlib4pascal/HlpSHA3.pas:25 +msgid "Only \"[%s]\" HashModes are Supported" +msgstr "" + +#. Programmer's name for it: SInvalidHashMode +#: libraries/hashlib4pascal/HlpSHA3.pas:27 +msgid "XOFSize in Bits must be Multiples of 8 and be Greater than Zero Bytes" +msgstr "" + +#: libraries/hashlib4pascal/HlpSnefru.pas:24 +msgid "Snefru Security Level Cannot be Less than 1. Standard Level is 8" +msgstr "" + +#: libraries/hashlib4pascal/HlpSnefru.pas:26 +msgid "Snefru HashSize Must be Either 128 bit(16 byte) or 256 bit(32 byte)" +msgstr "" + +#. Programmer's name for it: SInvalidHashSize +#: libraries/hashlib4pascal/HlpSnefru.pas:27 +msgid "Specified HashSize Is Invalid or UnSupported \"%d\"" +msgstr "" + +#: libraries/hashlib4pascal/HlpTiger.pas:22 +msgid "" +"Tiger HashSize Must be Either 128 bit(16 byte), 160 bit(20 byte) or 192 " +"bit(24 byte)" +msgstr "" + +#. Programmer's name for it: SInvalidHashRound +#. Programmer's name for it: SInvalidHashRound +#: libraries/hashlib4pascal/HlpTiger.pas:23 +#: libraries/hashlib4pascal/HlpTiger2.pas:23 +msgid "Specified HashRound Is Invalid or UnSupported \"%d\"" +msgstr "" + +#: libraries/hashlib4pascal/HlpTiger2.pas:22 +msgid "" +"Tiger2 HashSize Must be Either 128 bit(16 byte), 160 bit(20 byte) or 192 " +"bit(24 byte)" +msgstr "" + +#. Programmer's name for it: sInvalidIPAddress +#: libraries/mormot-min/SynCommons.pas:18356 +msgid "\"%s\" is an invalid IP v4 address" +msgstr "" + +#. Programmer's name for it: sInvalidEmailAddress +#: libraries/mormot-min/SynCommons.pas:18357 +msgid "\"%s\" is an invalid email address" +msgstr "" + +#. Programmer's name for it: sInvalidPattern +#: libraries/mormot-min/SynCommons.pas:18358 +msgid "\"%s\" does not match the expected pattern" +msgstr "" + +#. Programmer's name for it: sCharacter01n +#: libraries/mormot-min/SynCommons.pas:18359 +msgid "character,character,characters" +msgstr "" + +#. Programmer's name for it: sInvalidTextLengthMin +#: libraries/mormot-min/SynCommons.pas:18360 +msgid "Expect at least %d %s" +msgstr "" + +#. Programmer's name for it: sInvalidTextLengthMax +#: libraries/mormot-min/SynCommons.pas:18361 +msgid "Expect up to %d %s" +msgstr "" + +#. Programmer's name for it: sInvalidTextChar +#: libraries/mormot-min/SynCommons.pas:18364 +msgid "" +"Expect at least %d %s %s,Expect up to %d %s %s,alphabetical,digital," +"punctuation,lowercase,uppercase,space,Too much spaces on the left,Too much " +"spaces on the right" +msgstr "" + +#. Programmer's name for it: sValidationFailed +#: libraries/mormot-min/SynCommons.pas:18365 +msgid "\"%s\" rule failed" +msgstr "" + +#. Programmer's name for it: sValidationFieldVoid +#: libraries/mormot-min/SynCommons.pas:18366 +msgid "An unique key field must not be void" +msgstr "" + +#. Programmer's name for it: sValidationFieldDuplicate +#: libraries/mormot-min/SynCommons.pas:18367 +msgid "Value already used for this unique key field" +msgstr "" + +#. Programmer's name for it: Sneed_dict +#: libraries/paszlib/paszlib_zbase.pas:409 +msgid "need dictionary" +msgstr "" + +#. Programmer's name for it: Sstream_end +#: libraries/paszlib/paszlib_zbase.pas:410 +msgid "stream end" +msgstr "" + +#. Programmer's name for it: Sfile_error +#: libraries/paszlib/paszlib_zbase.pas:411 +msgid "file error" +msgstr "" + +#. Programmer's name for it: Sstream_error +#: libraries/paszlib/paszlib_zbase.pas:412 +msgid "stream error" +msgstr "" + +#. Programmer's name for it: Sdata_error +#: libraries/paszlib/paszlib_zbase.pas:413 +msgid "data error" +msgstr "" + +#. Programmer's name for it: Smem_error +#: libraries/paszlib/paszlib_zbase.pas:414 +msgid "insufficient memory" +msgstr "" + +#. Programmer's name for it: Sbuf_error +#: libraries/paszlib/paszlib_zbase.pas:415 +msgid "buffer error" +msgstr "" + +#. Programmer's name for it: Sversion_error +#: libraries/paszlib/paszlib_zbase.pas:416 +msgid "incompatible version" +msgstr "" + +#. Programmer's name for it: SInvalidHexCharacter +#: libraries/simplebaselib4pascal/SbpBase16.pas:12 +msgid "Invalid hex character: \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidTextLength +#: libraries/simplebaselib4pascal/SbpBase16.pas:13 +msgid "Text cannot be odd length \"%s\"" +msgstr "" + +#. Programmer's name for it: SAlphabetNil +#. Programmer's name for it: SAlphabetNil +#. Programmer's name for it: SAlphabetNil +#. Programmer's name for it: SAlphabetNil +#: libraries/simplebaselib4pascal/SbpBase32.pas:16 +#: libraries/simplebaselib4pascal/SbpBase58.pas:16 +#: libraries/simplebaselib4pascal/SbpBase64.pas:16 +#: libraries/simplebaselib4pascal/SbpBase85.pas:16 +msgid "Alphabet Instance cannot be Nil \"%s\"" +msgstr "" + +#. Programmer's name for it: SAlphabetNil +#: libraries/simplebaselib4pascal/SbpBase85.pas:18 +msgid "Unexpected Shortcut Character In The Middle Of a Regular Block" +msgstr "" + +#. Programmer's name for it: SAlphabetNil +#: libraries/simplebaselib4pascal/SbpEncodingAlphabet.pas:12 +msgid "\"%s\" Cannot Be Nil." +msgstr "" + +#. Programmer's name for it: SAlphabetNil +#: libraries/simplebaselib4pascal/SbpEncodingAlphabet.pas:14 +msgid "" +"Required Alphabet Length is \"%d\" but Provided Alphabet is \"%d\" " +"Characters Long." +msgstr "" + +#. Programmer's name for it: SInvalidCharacter +#: libraries/simplebaselib4pascal/SbpEncodingAlphabet.pas:15 +msgid "Alphabet Contains Character \"%s (%d)\" Above \"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidInput +#: libraries/simplebaselib4pascal/SbpEncodingAlphabet.pas:16 +msgid "Invalid character value in input \"%s\"" +msgstr "" + +#. Programmer's name for it: sAColumnsCantBeNil +#: libraries/sphere10/UCommon.Data.pas:246 +msgid "AColumns can't be nil!" +msgstr "" + +#. Programmer's name for it: sTooManyValues +#: libraries/sphere10/UCommon.Data.pas:247 +msgid "Too many values" +msgstr "" + +#. Programmer's name for it: sInvalidUTF8String +#: libraries/sphere10/UCommon.Data.pas:248 +msgid "Invalid UTF8 string" +msgstr "" + +#. Programmer's name for it: sBadNumericExpression +#: libraries/sphere10/UCommon.Data.pas:249 +msgid "Bad numeric expression" +msgstr "" + +#. Programmer's name for it: sUnexpectedNumberFormat +#: libraries/sphere10/UCommon.Data.pas:250 +msgid "Unexpected number format" +msgstr "" + +#. Programmer's name for it: sBadSyntaxForEscapeCharacter +#: libraries/sphere10/UCommon.Data.pas:251 +msgid "Bad syntax for escape character \"\\\"" +msgstr "" + +#. Programmer's name for it: sUnexpectedCharInExpression +#: libraries/sphere10/UCommon.Data.pas:252 +msgid "Unexpected char in expression" +msgstr "" + +#. Programmer's name for it: sInvaildExpression_CharDetectedAfterClosingBracket +#: libraries/sphere10/UCommon.Data.pas:253 +msgid "Invaild expression (char detected after closing bracket)" +msgstr "" + +#. Programmer's name for it: sUnexpectedTokenFound +#: libraries/sphere10/UCommon.Data.pas:254 +msgid "Unexpected token found : \"%s\"" +msgstr "" + +#. Programmer's name for it: sUnexpectedStringLiteralInExpression +#: libraries/sphere10/UCommon.Data.pas:255 +msgid "Unexpected string literal in expression" +msgstr "" + +#. Programmer's name for it: sBadlyClosedBetweenExpression +#: libraries/sphere10/UCommon.Data.pas:256 +msgid "Badly closed \"between\" expression" +msgstr "" + +#. Programmer's name for it: sMissingNumberInExpression +#: libraries/sphere10/UCommon.Data.pas:257 +msgid "Missing number in expression" +msgstr "" + +#. Programmer's name for it: sUnexpectedOccurrenceOf_Found +#: libraries/sphere10/UCommon.Data.pas:258 +msgid "Unexpected occurrence of \"%s\" found" +msgstr "" + +#. Programmer's name for it: sBadBetweenExpression_UnexpectedToken +#: libraries/sphere10/UCommon.Data.pas:259 +msgid "Bad \"between\" expression. Unexpected \"%s\"" +msgstr "" + +#. Programmer's name for it: sExpressionError_NoValue +#: libraries/sphere10/UCommon.Data.pas:260 +msgid "Expression error (no value)" +msgstr "" + +#. Programmer's name for it: sNotImplemented +#: libraries/sphere10/UCommon.pas:468 +msgid "Not implemented" +msgstr "" + +#. Programmer's name for it: sInvalidParameter_OutOfBounds +#: libraries/sphere10/UCommon.pas:469 +msgid "Invalid Parameter: %s out of bounds" +msgstr "" + +#. Programmer's name for it: sLogDebug +#: libraries/sphere10/UCommon.pas:470 +msgid "DEBUG" +msgstr "" + +#. Programmer's name for it: sLogInfo +#: libraries/sphere10/UCommon.pas:471 +msgid "INFO" +msgstr "" + +#. Programmer's name for it: sLogWarn +#: libraries/sphere10/UCommon.pas:472 +msgid "WARNING" +msgstr "" + +#. Programmer's name for it: sLogError +#: libraries/sphere10/UCommon.pas:473 +msgid "ERROR" +msgstr "" + +#. Programmer's name for it: sTotal +#: libraries/sphere10/UVisualGrid.pas:475 +msgid "Total: %d" +msgstr "" + +#. Programmer's name for it: sStandardSearch +#: libraries/sphere10/UVisualGrid.pas:476 +msgid "Standard Search" +msgstr "" + +#. Programmer's name for it: sMultiColumnSearch +#: libraries/sphere10/UVisualGrid.pas:477 +msgid "Multi-Column Search" +msgstr "" + +#. Programmer's name for it: sPageSize +#: libraries/sphere10/UVisualGrid.pas:478 +msgid "Page size:" +msgstr "" + +#. Programmer's name for it: sSearchExpression +#: libraries/sphere10/UVisualGrid.pas:479 +msgid "Search expression" +msgstr "" + +#. Programmer's name for it: sDataLoading +#: libraries/sphere10/UVisualGrid.pas:480 +msgid "DATA LOADING" +msgstr "" + +#. Programmer's name for it: sExpression +#: libraries/sphere10/UVisualGrid.pas:481 +msgid "Expression" +msgstr "" + +#. Programmer's name for it: sImproperColumnIndex +#: libraries/sphere10/UVisualGrid.pas:482 +msgid "Improper column index. Max expected is %d but %d found." +msgstr "" diff --git a/src/locale/nl/LC_MESSAGES/default.mo b/src/locale/nl/LC_MESSAGES/default.mo new file mode 100644 index 000000000..c3f4390e7 Binary files /dev/null and b/src/locale/nl/LC_MESSAGES/default.mo differ diff --git a/src/locale/nl/LC_MESSAGES/default.po b/src/locale/nl/LC_MESSAGES/default.po new file mode 100644 index 000000000..46d7b6814 --- /dev/null +++ b/src/locale/nl/LC_MESSAGES/default.po @@ -0,0 +1,4642 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: 2020-03-28 20:30\n" +"PO-Revision-Date: 2020-03-30 21:22+0200\n" +"Last-Translator: Somebody <your.email@address.com>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.3\n" +"Language-Team: <>\n" +"Language: nl\n" + +#. FRMAbout..Caption +#: gui-classic/UFRMAbout.dfm:7 +msgid "About..." +msgstr "Over..." + +#. FRMAbout..Font.Name +#. FRMAbout..Label1..Font.Name +#. FRMAbout..lblBuild..Font.Name +#. FRMAbout..lblProtocolVersion..Font.Name +#. FRMAbout..Label3..Font.Name +#. FRMAbout..Label4..Font.Name +#. FRMAbout..Label5..Font.Name +#. FRMAccountSelect..Font.Name +#. FRMDiagnosticTool..Font.Name +#. FRMHashLock..Font.Name +#. FRMHashLock..lblError..Font.Name +#. FRMHashLock..GroupBox2..meHashLockData..Font.Name +#. FRMMemoText..Font.Name +#. FRMMemoText..Memo..Font.Name +#. FRMNewPrivateKeyType..Font.Name +#. FRMNodesIp..Font.Name +#. FRMOperation..Font.Name +#. FRMOperation..lblAccountBalance..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..lblEncryptionErrors..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..memoPayload..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsTransaction..lblTransactionErrors..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..lblChangeKeyErrors..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..lblNewOwnerErrors..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblListAccountErrors..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsDelistAccount..lblDelistErrors..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..lblBuyAccountErrors..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..Label2..Font.Name +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..lblChangeInfoErrors..Font.Name +#. FRMOperation..PageControlLocked..tsGlobalError..lblGlobalErrors..Font.Name +#. FRMOperation..PageControlLocked..tsGlobalError..bbPassword..Font.Name +#. FRMOperation..memoAccounts..Font.Name +#. FRMOperation..ebSenderAccount..Font.Name +#. FRMOperationsExplorer..Font.Name +#. FRMPascalCoinWalletConfig..Font.Name +#. FRMPascalCoinWalletConfig..Label4..Font.Name +#. FRMPascalCoinWalletConfig..Label7..Font.Name +#. FRMPascalCoinWalletConfig..bbUpdatePassword..Font.Name +#. FRMPayloadDecoder..Font.Name +#. FRMPayloadDecoder..lblBlock..Font.Name +#. FRMPayloadDecoder..lblDateTime..Font.Name +#. FRMPayloadDecoder..lblOperationTxt..Font.Name +#. FRMPayloadDecoder..lblAmount..Font.Name +#. FRMPayloadDecoder..lblFee..Font.Name +#. FRMPayloadDecoder..lblSender..Font.Name +#. FRMPayloadDecoder..lblReceiver..Font.Name +#. FRMPayloadDecoder..lblReceiverInfo..Font.Name +#. FRMPayloadDecoder..PageControl..tsDecoded..lblDecodedMethod..Font.Name +#. FRMPayloadDecoder..PageControl..tsDecoded..memoDecoded..Font.Name +#. FRMPayloadDecoder..PageControl..tsDecoded..memoOriginalPayloadInHexa..Font.Name +#. FRMPayloadDecoder..ebOphash..Font.Name +#. FRMDiagnosticTool..Font.Name +#. FRMRandomOperations..Font.Name +#. FRMRandomOperations..pnlTop..lblTopCaption..Font.Name +#. FRMRPCCalls..Font.Name +#. FRMRPCCalls..pnlTop..lblTopCaption..Font.Name +#. FRMSaleAccounts..Font.Name +#. FRMSaleAccounts..lblAccountBalance..Font.Name +#. FRMSaleAccounts..memoAccounts..Font.Name +#. FRMSaleAccounts..ebSenderAccount..Font.Name +#. FRMWallet..Font.Name +#. FRMWallet..pnlTop..lblTimeAverageAux..Font.Name +#. FRMWallet..pnlTop..Label16..Font.Name +#. FRMWallet..pnlTop..lblBlocksFound..Font.Name +#. FRMWallet..pnlTop..lblReceivedMessages..Font.Name +#. FRMWallet..pnlTop..lblBuild..Font.Name +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsTop..Font.Name +#. FRMWallet..PageControl..tsPendingOperations..pnlPendingOperations..Label10..Font.Name +#. FRMWallet..PageControl..tsMessages..Label14..Font.Name +#. FRMWallet..PageControl..tsMessages..memoMessages..Font.Name +#. FRMWalletKeys..Font.Name +#. FRMWalletKeys..lblKeysEncrypted..Font.Name +#. FRMWalletKeys..memoPrivateKey..Font.Name +#. FRMWalletKeys..bbUpdatePassword..Font.Name +#. FRMDiagnosticTool..Font.Name +#: gui-classic/UFRMAbout.dfm:14 gui-classic/UFRMAbout.dfm:130 +#: gui-classic/UFRMAbout.dfm:143 gui-classic/UFRMAbout.dfm:156 +#: gui-classic/UFRMAbout.dfm:176 gui-classic/UFRMAbout.dfm:190 +#: gui-classic/UFRMAbout.dfm:205 gui-classic/UFRMAccountSelect.dfm:12 +#: gui-classic/UFRMDiagnosticTool.dfm:11 gui-classic/UFRMHashLock.dfm:12 +#: gui-classic/UFRMHashLock.dfm:34 gui-classic/UFRMHashLock.dfm:117 +#: gui-classic/UFRMMemoText.dfm:12 gui-classic/UFRMMemoText.dfm:50 +#: gui-classic/UFRMNewPrivateKeyType.dfm:13 gui-classic/UFRMNodesIp.dfm:13 +#: gui-classic/UFRMOperation.dfm:13 gui-classic/UFRMOperation.dfm:40 +#: gui-classic/UFRMOperation.dfm:196 gui-classic/UFRMOperation.dfm:259 +#: gui-classic/UFRMOperation.dfm:332 gui-classic/UFRMOperation.dfm:410 +#: gui-classic/UFRMOperation.dfm:427 gui-classic/UFRMOperation.dfm:539 +#: gui-classic/UFRMOperation.dfm:783 gui-classic/UFRMOperation.dfm:825 +#: gui-classic/UFRMOperation.dfm:851 gui-classic/UFRMOperation.dfm:978 +#: gui-classic/UFRMOperation.dfm:1065 gui-classic/UFRMOperation.dfm:1080 +#: gui-classic/UFRMOperation.dfm:1149 gui-classic/UFRMOperation.dfm:1167 +#: gui-classic/UFRMOperationsExplorer.dfm:12 +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:13 +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:57 +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:91 +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:178 +#: gui-classic/UFRMPayloadDecoder.dfm:14 gui-classic/UFRMPayloadDecoder.dfm:37 +#: gui-classic/UFRMPayloadDecoder.dfm:50 gui-classic/UFRMPayloadDecoder.dfm:78 +#: gui-classic/UFRMPayloadDecoder.dfm:99 +#: gui-classic/UFRMPayloadDecoder.dfm:119 +#: gui-classic/UFRMPayloadDecoder.dfm:146 +#: gui-classic/UFRMPayloadDecoder.dfm:166 +#: gui-classic/UFRMPayloadDecoder.dfm:179 +#: gui-classic/UFRMPayloadDecoder.dfm:214 +#: gui-classic/UFRMPayloadDecoder.dfm:234 +#: gui-classic/UFRMPayloadDecoder.dfm:253 +#: gui-classic/UFRMPayloadDecoder.dfm:416 +#: gui-classic/UFRMRandomHashUtil.dfm:11 +#: gui-classic/UFRMRandomOperations.dfm:11 +#: gui-classic/UFRMRandomOperations.dfm:44 gui-classic/UFRMRPCCalls.dfm:12 +#: gui-classic/UFRMRPCCalls.dfm:50 gui-classic/UFRMSaleAccounts.dfm:12 +#: gui-classic/UFRMSaleAccounts.dfm:57 gui-classic/UFRMSaleAccounts.dfm:84 +#: gui-classic/UFRMSaleAccounts.dfm:103 gui-classic/UFRMWallet.dfm:13 +#: gui-classic/UFRMWallet.dfm:284 gui-classic/UFRMWallet.dfm:299 +#: gui-classic/UFRMWallet.dfm:315 gui-classic/UFRMWallet.dfm:333 +#: gui-classic/UFRMWallet.dfm:349 gui-classic/UFRMWallet.dfm:658 +#: gui-classic/UFRMWallet.dfm:870 gui-classic/UFRMWallet.dfm:1183 +#: gui-classic/UFRMWallet.dfm:1216 gui-classic/UFRMWalletKeys.dfm:13 +#: gui-classic/UFRMWalletKeys.dfm:66 gui-classic/UFRMWalletKeys.dfm:155 +#: gui-classic/UFRMWalletKeys.dfm:504 lib/i386-win32/UFRMDiagnosticTool.dfm:11 +msgid "Tahoma" +msgstr "" + +#. FRMAbout..Label1..Caption +#. FRMWallet..Caption +#: gui-classic/UFRMAbout.dfm:126 gui-classic/UFRMWallet.dfm:4 +msgid "Pascal full node Wallet (Classic GUI)" +msgstr "Pascal volledige Node Portemonnee (Klassieke Gebruikersomgeving)" + +#. FRMAbout..lblBuild..Caption +#: gui-classic/UFRMAbout.dfm:139 +msgid "Build:" +msgstr "Bouw:" + +#. FRMAbout..lblProtocolVersion..Caption +#: gui-classic/UFRMAbout.dfm:152 +msgid "Protocol:" +msgstr "" + +#. FRMAbout..Label2..Caption +#: gui-classic/UFRMAbout.dfm:165 +msgid "Source Code:" +msgstr "" + +#. FRMAbout..Label3..Caption +#: gui-classic/UFRMAbout.dfm:172 +msgid "Check For New Versions:" +msgstr "Controleer op nieuwe versies:" + +#. FRMAbout..Label4..Caption +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:186 gui-classic/UFRMAbout.dfm:252 +msgid "https://github.com/PascalCoin/PascalCoin" +msgstr "" + +#. FRMAbout..Label5..Caption +#: gui-classic/UFRMAbout.dfm:201 +msgid "https://sourceforge.net/projects/pascalcoin" +msgstr "" + +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:220 +msgid "Copyright (c) 2016 - 2019 PascalCoin developers" +msgstr "" + +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:221 +msgid "Based on Albert Molina original source code" +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:225 +msgid "" +"Pascal (aka Pascal Coin) is P2P cryptocurrency without the need for " +"historical " +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:228 +msgid "operations. This software comprises a node within the Pascal network." +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:232 +msgid "" +"Distributed under the MIT software license, see the accompanying file " +"LICENSE or " +msgstr "" + +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:233 +msgid "visit http://www.opensource.org/licenses/mit-license.php." +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:237 +msgid "THIS IS EXPERIMENTAL SOFTWARE. Use it for educational purposes only." +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:241 +msgid "" +"This product includes software developed by the OpenSSL Project and Denis " +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:244 +msgid "Grinyuk (https://github.com/Arvur/OpenSSL-Delphi), some cryptographic " +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:247 +msgid "" +"functions inspirated in code written by Ladar Levison and Marco Ferrante, " +"and " +msgstr "" + +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:248 +msgid "Synapse Socket code copyright of Lukas Gebauer." +msgstr "" + +#. FRMAbout..Memo1......Lines.Strings +#: gui-classic/UFRMAbout.dfm:251 +msgid "" +"Original source code is written in Pascal Language and is available at " +msgstr "" + +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:254 +msgid "If you like it, consider a donation using BitCoin:" +msgstr "" + +#. FRMAbout..Memo1....Lines.Strings +#: gui-classic/UFRMAbout.dfm:255 +msgid "16K3HCZRhFUtM8GdWRcfKeaa6KsuyxZaYk" +msgstr "" + +#. FRMAbout..bbClose..Caption +#. FRMPayloadDecoder..bbClose..Caption +#. FRMWallet..MainMenu..miProject..MiClose..Caption +#: gui-classic/UFRMAbout.dfm:266 gui-classic/UFRMPayloadDecoder.dfm:353 +#: gui-classic/UFRMWallet.dfm:1273 +msgid "Close" +msgstr "Sluiten" + +#. FRMAccountSelect..Caption +#: gui-classic/UFRMAccountSelect.dfm:5 +msgid "Accounts" +msgstr "Rekeningen" + +#. FRMAccountSelect..pnlAccountsTop..cbOnlyForSale..Caption +#: gui-classic/UFRMAccountSelect.dfm:33 +msgid "Only for sale or swap" +msgstr "Alleen voor verkoop of ruilen" + +#. FRMAccountSelect..pnlAccountsTop..bbSearch..Caption +#: gui-classic/UFRMAccountSelect.dfm:41 +msgid "Search" +msgstr "Zoek" + +#. FRMAccountSelect..pnlAccountsTop..cbOnlyForPrivateSaleToMe..Caption +#: gui-classic/UFRMAccountSelect.dfm:107 +msgid "Only for private sale to me" +msgstr "Alleen voor prive verkoop aan mij" + +#. FRMAccountSelect..pnlAccountsTop..cbAccountsBalance..Caption +#: gui-classic/UFRMAccountSelect.dfm:115 +msgid "Accounts Balance" +msgstr "Rekeningsaldo" + +#. FRMAccountSelect..pnlAccountsTop..cbMyAccounts..Caption +#: gui-classic/UFRMAccountSelect.dfm:123 +msgid "My Accounts" +msgstr "Mijn Rekeningen" + +#. FRMAccountSelect..pnlAccountsTop..cbOnlyForPublicSale..Caption +#: gui-classic/UFRMAccountSelect.dfm:141 +msgid "Only for public sale" +msgstr "Alleen voor publieke verkoop" + +#. FRMAccountSelect..pnlAccountsTop..cbAccountsName..Caption +#: gui-classic/UFRMAccountSelect.dfm:165 +msgid "Accounts name" +msgstr "Rekening naam" + +#. FRMAccountSelect..pnlBottom..Label17..Caption +#. FRMWallet..pnlTop..Label5..Caption +#. FRMWallet..PageControl..tsMyAccounts..pnlAccounts..pnlAccountsInfo..Label17..Caption +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsBottom..Label20..Caption +#: gui-classic/UFRMAccountSelect.dfm:192 gui-classic/UFRMWallet.dfm:261 +#: gui-classic/UFRMWallet.dfm:543 gui-classic/UFRMWallet.dfm:685 +msgid "Accounts:" +msgstr "Rekeningen:" + +#. FRMAccountSelect..pnlBottom..lblAccountsCount..Caption +#. FRMAccountSelect..pnlBottom..lblAccountsBalance..Caption +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..lblPayloadLength..Caption +#. FRMPayloadDecoder..lblDateTime..Caption +#. FRMPayloadDecoder..lblOperationTxt..Caption +#. FRMPayloadDecoder..lblAmount..Caption +#. FRMPayloadDecoder..lblFee..Caption +#. FRMPayloadDecoder..lblReceiver..Caption +#. FRMWallet..pnlTop..lblCurrentBlock..Caption +#. FRMWallet..pnlTop..lblOperationsPending..Caption +#. FRMWallet..pnlTop..lblMinersClients..Caption +#. FRMWallet..pnlTop..lblCurrentDifficulty..Caption +#. FRMWallet..pnlTop..lblTimeAverage..Caption +#. FRMWallet..pnlTop..lblCurrentAccounts..Caption +#. FRMWallet..pnlTop..lblTimeAverageAux..Caption +#. FRMWallet..pnlTop..lblBlocksFound..Caption +#. FRMWallet..PageControl..tsMyAccounts..pnlAccounts..pnlAccountsInfo..lblAccountsCount..Caption +#. FRMWallet..PageControl..tsMyAccounts..pnlAccounts..pnlAccountsInfo..lblAccountsBalance..Caption +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsBottom..lblSelectedAccountsCount..Caption +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsBottom..lblSelectedAccountsBalance..Caption +#: gui-classic/UFRMAccountSelect.dfm:201 gui-classic/UFRMAccountSelect.dfm:219 +#: gui-classic/UFRMOperation.dfm:207 gui-classic/UFRMPayloadDecoder.dfm:46 +#: gui-classic/UFRMPayloadDecoder.dfm:74 gui-classic/UFRMPayloadDecoder.dfm:95 +#: gui-classic/UFRMPayloadDecoder.dfm:115 +#: gui-classic/UFRMPayloadDecoder.dfm:162 gui-classic/UFRMWallet.dfm:144 +#: gui-classic/UFRMWallet.dfm:180 gui-classic/UFRMWallet.dfm:198 +#: gui-classic/UFRMWallet.dfm:216 gui-classic/UFRMWallet.dfm:225 +#: gui-classic/UFRMWallet.dfm:270 gui-classic/UFRMWallet.dfm:279 +#: gui-classic/UFRMWallet.dfm:310 gui-classic/UFRMWallet.dfm:561 +#: gui-classic/UFRMWallet.dfm:570 gui-classic/UFRMWallet.dfm:694 +#: gui-classic/UFRMWallet.dfm:712 +msgid "000" +msgstr "" + +#. FRMAccountSelect..pnlBottom..Label19..Caption +#. FRMOperation..lblBalanceCaption..Caption +#. FRMSaleAccounts..lblBalanceCaption..Caption +#. FRMWallet..PageControl..tsMyAccounts..pnlAccounts..pnlAccountsInfo..Label19..Caption +#: gui-classic/UFRMAccountSelect.dfm:210 gui-classic/UFRMOperation.dfm:50 +#: gui-classic/UFRMSaleAccounts.dfm:73 gui-classic/UFRMWallet.dfm:552 +msgid "Balance:" +msgstr "Saldo:" + +#. FRMAccountSelect..pnlBottom..bbSelect..Caption +#: gui-classic/UFRMAccountSelect.dfm:229 +msgid "Select" +msgstr "Selecteer" + +#. FRMAccountSelect..pnlBottom..bbTypeStats..Caption +#: gui-classic/UFRMAccountSelect.dfm:249 +msgid "Type stats" +msgstr "" + +#. FRMDiagnosticTool..Caption +#. FRMDiagnosticTool..Caption +#. FRMDiagnosticTool..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:4 gui-classic/UFRMRandomHashUtil.dfm:4 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:4 +msgid "FRMDiagnosticTool" +msgstr "" + +#. FRMDiagnosticTool..btnRH..Caption +#. FRMDiagnosticTool..btnRH..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:25 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:25 +msgid "Start Random Hash" +msgstr "" + +#. FRMDiagnosticTool..btnRH2..Caption +#. FRMDiagnosticTool..btnRH2..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:34 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:34 +msgid "Start Random Hash 2" +msgstr "" + +#. FRMDiagnosticTool..btnRH2C..Caption +#. FRMDiagnosticTool..btnRH2C..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:51 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:51 +msgid "Start Random Hash 2 (Cached)" +msgstr "" + +#. FRMDiagnosticTool..btnEntropy..Caption +#. FRMDiagnosticTool..btnEntropy..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:60 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:60 +msgid "Entropy Tests" +msgstr "" + +#. FRMDiagnosticTool..btnRH2NonceScan..Caption +#. FRMDiagnosticTool..btnRH2NonceScan..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:69 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:69 +msgid "Start Random Hash 2 (Nonce Scan)" +msgstr "" + +#. FRMDiagnosticTool..txtScanLevel..TextHint +#. FRMDiagnosticTool..txtScanLevel..TextHint +#: gui-classic/UFRMDiagnosticTool.dfm:79 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:79 +msgid "Enter Scan Level (2-4)" +msgstr "" + +#. FRMDiagnosticTool..btnRHC..Caption +#. FRMDiagnosticTool..btnRHC..Caption +#: gui-classic/UFRMDiagnosticTool.dfm:86 +#: lib/i386-win32/UFRMDiagnosticTool.dfm:86 +msgid "Start Random Hash (Cached)" +msgstr "" + +#. FRMHashLock..Caption +#: gui-classic/UFRMHashLock.dfm:5 +msgid "Atomic Swap Hash-Lock " +msgstr "" + +#. FRMHashLock..lblError..Caption +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..lblEncryptionErrors..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsTransaction..lblTransactionErrors..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..lblChangeKeyErrors..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..lblNewOwnerErrors..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblListAccountErrors..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsDelistAccount..lblDelistErrors..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..lblBuyAccountErrors..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..lblChangeInfoErrors..Caption +#: gui-classic/UFRMHashLock.dfm:29 gui-classic/UFRMOperation.dfm:191 +#: gui-classic/UFRMOperation.dfm:327 gui-classic/UFRMOperation.dfm:405 +#: gui-classic/UFRMOperation.dfm:422 gui-classic/UFRMOperation.dfm:534 +#: gui-classic/UFRMOperation.dfm:778 gui-classic/UFRMOperation.dfm:820 +#: gui-classic/UFRMOperation.dfm:973 +msgid "Errors detected" +msgstr "" + +#. FRMHashLock..btnSet..Caption +#: gui-classic/UFRMHashLock.dfm:56 +msgid "Set Hash-Lock" +msgstr "" + +#. FRMHashLock..GroupBox1..Caption +#: gui-classic/UFRMHashLock.dfm:67 +msgid "Mode" +msgstr "" + +#. FRMHashLock..GroupBox1..rbHashLock....Caption +#: gui-classic/UFRMHashLock.dfm:76 +msgid "Hash-Lock - the 32 byte hash-lock provided to you by the counterparty" +msgstr "" + +#. FRMHashLock..GroupBox1..rbHashLockKey....Caption +#: gui-classic/UFRMHashLock.dfm:86 +msgid "" +"Hash-Lock Key - a secret that will be hashed to create the 32 byte hash-lock" +msgstr "" + +#. FRMHashLock..GroupBox2..Caption +#: gui-classic/UFRMHashLock.dfm:96 +msgid "Data" +msgstr "" + +#. FRMHashLock..GroupBox2..Label2..Caption +#: gui-classic/UFRMHashLock.dfm:106 +msgid "Please enter the hash lock data as a hexadecimal string" +msgstr "" + +#. FRMMemoText..Caption +#: gui-classic/UFRMMemoText.dfm:5 +msgid "Information" +msgstr "Informatie" + +#. FRMMemoText..Memo....Lines.Strings +#: gui-classic/UFRMMemoText.dfm:53 +msgid "Memo" +msgstr "" + +#. FRMNewPrivateKeyType..Caption +#: gui-classic/UFRMNewPrivateKeyType.dfm:6 +msgid "New Private Key" +msgstr "Nieuwe Prive Sleutel" + +#. FRMNewPrivateKeyType..Label1..Caption +#: gui-classic/UFRMNewPrivateKeyType.dfm:26 +msgid "Name" +msgstr "Naam" + +#. FRMNewPrivateKeyType..ebName..Text +#: gui-classic/UFRMNewPrivateKeyType.dfm:34 +msgid "ebName" +msgstr "ebName" + +#. FRMNewPrivateKeyType..rgKeyType..Caption +#: gui-classic/UFRMNewPrivateKeyType.dfm:41 +msgid " Key Type: " +msgstr " Sleutel Type: " + +#. FRMNewPrivateKeyType..rgKeyType....Items.Strings +#: gui-classic/UFRMNewPrivateKeyType.dfm:43 +msgid "asdf" +msgstr "" + +#. FRMNewPrivateKeyType..bbOk..Caption +#. FRMNodesIp..bbOk..Caption +#. FRMChangeLanguage..bbOk..Caption +#. FRMChangeLanguage..bbOk..Caption +#: gui-classic/UFRMNewPrivateKeyType.dfm:51 gui-classic/UFRMNodesIp.dfm:42 +#: gui-classic/UFRMSelectLanguage.dfm:18 +#: lib/i386-win32/ufrmselectlanguage.dfm:18 +msgid "OK" +msgstr "Akkoord" + +#. FRMNodesIp..Caption +#: gui-classic/UFRMNodesIp.dfm:6 +msgid "Nodes IP" +msgstr "Nodes IP adres" + +#. FRMNodesIp..Label1..Caption +#: gui-classic/UFRMNodesIp.dfm:25 +msgid "Available Nodes Ip to connect" +msgstr "Beschikbare Nodes IP adressen om mee te verbinden" + +#. FRMNodesIp..memoNodesIp....Lines.Strings +#: gui-classic/UFRMNodesIp.dfm:33 +msgid "memoNodesIp" +msgstr "" + +#. FRMNodesIp..cbTryOnlyWithThisServers..Caption +#: gui-classic/UFRMNodesIp.dfm:82 +msgid "Try to connect ONLY with this servers" +msgstr "Probeer ALLEEN met deze servers te verbinden" + +#. FRMOperation..Caption +#: gui-classic/UFRMOperation.dfm:6 +msgid "New Operation" +msgstr "Nieuwe Handeling" + +#. FRMOperation..lblAccountCaption..Caption +#. FRMSaleAccounts..lblAccountCaption..Caption +#: gui-classic/UFRMOperation.dfm:26 gui-classic/UFRMSaleAccounts.dfm:25 +msgid "Account:" +msgstr "Rekening:" + +#. FRMOperation..lblAccountBalance..Caption +#. FRMSaleAccounts..lblAccountBalance..Caption +#: gui-classic/UFRMOperation.dfm:35 gui-classic/UFRMSaleAccounts.dfm:53 +msgid "lblAccountBalance" +msgstr "" + +#. FRMOperation..lblAccountsCount..Caption +#. FRMSaleAccounts..lblAccountsCount..Caption +#: gui-classic/UFRMOperation.dfm:59 gui-classic/UFRMSaleAccounts.dfm:66 +msgid "XXX" +msgstr "" + +#. FRMOperation..bbExecute..Caption +#. FRMOperation..ActionList..actExecute..Caption +#. FRMSaleAccounts..bbExecute..Caption +#. FRMSaleAccounts..ActionList..actExecute..Caption +#: gui-classic/UFRMOperation.dfm:68 gui-classic/UFRMOperation.dfm:1179 +#: gui-classic/UFRMSaleAccounts.dfm:178 gui-classic/UFRMSaleAccounts.dfm:215 +msgid "Execute (F12)" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..lblFee..Caption +#: gui-classic/UFRMOperation.dfm:113 +msgid "Operation Fee" +msgstr "Handeling Vergoeding" + +#. FRMOperation..PageControlLocked..tsOperation..lblSignerAccount..Caption +#: gui-classic/UFRMOperation.dfm:122 +msgid "Signer account (Fee payer)" +msgstr "Ondertekenaar rekening (Vergoeding betaler)" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..Caption +#: gui-classic/UFRMOperation.dfm:165 +msgid " Payload: " +msgstr " Lading: " + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..lblEncryptPassword..Caption +#: gui-classic/UFRMOperation.dfm:172 +msgid "Password:" +msgstr "Wachtwoord:" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..Label4..Caption +#: gui-classic/UFRMOperation.dfm:181 +msgid "Payload Data" +msgstr "Lading inhoud" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..rbEncryptedWithEC..Caption +#: gui-classic/UFRMOperation.dfm:216 +msgid "Encrypted with dest account public key" +msgstr "Versleutel met ontv rekening publieke sleutel" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..rbEncrptedWithPassword..Caption +#: gui-classic/UFRMOperation.dfm:227 +msgid "Encrypted with password" +msgstr "Versleutel met wachtwoord" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..rbNotEncrypted..Caption +#: gui-classic/UFRMOperation.dfm:237 +msgid "Dont encrypt (Public payload)" +msgstr "Versleutel niet (Publieke lading)" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..rbEncryptedWithOldEC..Caption +#: gui-classic/UFRMOperation.dfm:272 +msgid "Encrypted with old public key" +msgstr "Versleutel met oude publieke sleutel" + +#. FRMOperation..PageControlLocked..tsOperation..gbPayload..cbPayloadAsHex..Caption +#: gui-classic/UFRMOperation.dfm:282 +msgid "As Hex" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsTransaction..Caption +#: gui-classic/UFRMOperation.dfm:302 +msgid "Transaction" +msgstr "Transactie" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsTransaction..lblDestAccount..Caption +#: gui-classic/UFRMOperation.dfm:308 +msgid "Destination account" +msgstr "Bestemming rekening" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsTransaction..lblAmount..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..lblBuyAmount..Caption +#: gui-classic/UFRMOperation.dfm:317 gui-classic/UFRMOperation.dfm:810 +msgid "Amount" +msgstr "Bedrag" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..Caption +#: gui-classic/UFRMOperation.dfm:387 +msgid "Change Key" +msgstr "Wijzig Sleutel" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..lblNewPrivateKey..Caption +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..lblBuyNewKey..Caption +#: gui-classic/UFRMOperation.dfm:394 gui-classic/UFRMOperation.dfm:837 +msgid "New private key" +msgstr "Nieuwe Prive Sleutel" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..lblNewOwnerPublicKey..Caption +#: gui-classic/UFRMOperation.dfm:437 +msgid "New owners public key" +msgstr "Nieuwe eigenaars publieke sleutel" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..rbChangeKeyWithAnother..Caption +#: gui-classic/UFRMOperation.dfm:446 +msgid "Change private key" +msgstr "Wijzig prive sleutel" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangePrivateKey..rbChangeKeyTransferAccountToNewOwner..Caption +#: gui-classic/UFRMOperation.dfm:514 +msgid "Transfer account to a new owner" +msgstr "Draag rekening over aan nieuwe eigenaar" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..Caption +#: gui-classic/UFRMOperation.dfm:526 +msgid "List Account" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblPrice..Caption +#: gui-classic/UFRMOperation.dfm:550 +msgid "Sale Price" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblSeller..Caption +#: gui-classic/UFRMOperation.dfm:560 +msgid "Seller Account" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblNewKey..Caption +#: gui-classic/UFRMOperation.dfm:604 +msgid "Buyer Key" +msgstr "Koper sleutel" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblTimeLock..Caption +#: gui-classic/UFRMOperation.dfm:614 +msgid "Time-Lock" +msgstr "Tijd-slot" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..lblHashLock..Caption +#: gui-classic/UFRMOperation.dfm:623 +msgid "Hash-Lock" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..rbListAccountForPublicSale..Caption +#: gui-classic/UFRMOperation.dfm:699 +msgid "List for Public Sale" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..rbListAccountForPrivateSale..Caption +#: gui-classic/UFRMOperation.dfm:707 +msgid "List for Private Sale" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..rbListAccountForAccountSwap..Caption +#: gui-classic/UFRMOperation.dfm:715 +msgid "List for Atomic Account Swap" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..rbListAccountForCoinSwap..Caption +#: gui-classic/UFRMOperation.dfm:723 +msgid "List for Atomic Coin Swap" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..ebPrice..TextHint +#: gui-classic/UFRMOperation.dfm:732 +msgid "PASC Quantity" +msgstr "PASC Hoeveelheid" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..ebSellerAccount..TextHint +#: gui-classic/UFRMOperation.dfm:740 +msgid "Account Number" +msgstr "Rekeningnummer" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..ebNewKey..TextHint +#: gui-classic/UFRMOperation.dfm:748 +msgid "BASE58 Encoded Public Key Of New Owner" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..ebTimeLock..Hint +#: gui-classic/UFRMOperation.dfm:755 +msgid "Block Number " +msgstr "Blok Nummer " + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsListAccount..ebTimeLock..TextHint +#: gui-classic/UFRMOperation.dfm:759 +msgid "Block number" +msgstr "Blok numer" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsDelistAccount..Caption +#: gui-classic/UFRMOperation.dfm:770 +msgid "Delist Account" +msgstr "Verwijder Rekening" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..Caption +#: gui-classic/UFRMOperation.dfm:790 +msgid "Buy Account" +msgstr "Koop Rekening" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..lblAccountToBuy..Caption +#: gui-classic/UFRMOperation.dfm:799 +msgid "Account to Buy" +msgstr "Rekening voor Kopen" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsBuyAccount..Label2..Caption +#: gui-classic/UFRMOperation.dfm:846 +msgid "any over-payment will remain on bought account" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..Caption +#: gui-classic/UFRMOperation.dfm:966 +msgid "Change Info" +msgstr "Wijzig Info" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..lblChangeName..Caption +#: gui-classic/UFRMOperation.dfm:990 +msgid "Change name" +msgstr "Wijzig naam" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..lblChangeType..Caption +#: gui-classic/UFRMOperation.dfm:1001 +msgid "Change type" +msgstr "Wijzig type" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..lblChangeAccountData..Caption +#: gui-classic/UFRMOperation.dfm:1012 +msgid "Change Data" +msgstr "Wijzig Data" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..ebChangeName..TextHint +#: gui-classic/UFRMOperation.dfm:1022 +msgid "Account name (null or 3..64 chars)" +msgstr "Rekening naam (leeg of 3..64 letters)" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..ebChangeType..TextHint +#: gui-classic/UFRMOperation.dfm:1030 +msgid "0..65535" +msgstr "" + +#. FRMOperation..PageControlLocked..tsOperation..PageControlOpType..tsChangeInfo..ebChangeAccountData..TextHint +#: gui-classic/UFRMOperation.dfm:1038 +msgid "Hexadecimal value (0..32 bytes)" +msgstr "" + +#. FRMOperation..PageControlLocked..tsGlobalError..lblGlobalErrors..Caption +#: gui-classic/UFRMOperation.dfm:1060 +msgid "????" +msgstr "" + +#. FRMOperation..PageControlLocked..tsGlobalError..bbPassword..Caption +#. FRMWalletKeys..bbUpdatePassword..Caption +#: gui-classic/UFRMOperation.dfm:1076 gui-classic/UFRMWalletKeys.dfm:500 +msgid "Password" +msgstr "Wachtwoord" + +#. FRMOperation..memoAccounts....Lines.Strings +#. FRMOperation..memoAccounts....Lines.Strings +#. FRMSaleAccounts..memoAccounts....Lines.Strings +#. FRMSaleAccounts..memoAccounts....Lines.Strings +#: gui-classic/UFRMOperation.dfm:1152 gui-classic/UFRMOperation.dfm:1153 +#: gui-classic/UFRMSaleAccounts.dfm:87 gui-classic/UFRMSaleAccounts.dfm:88 +msgid "123456-11 (0.0000); 123456-11 (0.0000); " +msgstr "" + +#. FRMOperation..ebSenderAccount..Text +#. FRMSaleAccounts..ebSenderAccount..Text +#: gui-classic/UFRMOperation.dfm:1171 gui-classic/UFRMSaleAccounts.dfm:107 +msgid "ebSenderAccount" +msgstr "ebAfzenderRekening" + +#. FRMOperationsExplorer..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:5 +msgid "Operations Explorer Tool" +msgstr "Handelingen Verkenner gereedschap" + +#. FRMOperationsExplorer..pnlTop..lblTopCaption....Caption +#: gui-classic/UFRMOperationsExplorer.dfm:58 +msgid "" +"You can use this tool to explore operations, also you can copy/paste " +"operations as a RAW (Use Ctrl+I to Import). This tool allows to generate a " +"Multioperation, send to third party the RAW, add more txs... and then sign. " +"Once Everybody has signed, you will be able to EXECUTE OPERATION to be " +"added to network nodes. " +msgstr "" + +#. FRMOperationsExplorer..pnlOpInfo..pnlExport..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:85 +msgid "pnlExport" +msgstr "" + +#. FRMOperationsExplorer..pnlOpInfo..pnlExport..Label1..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:94 +msgid "Operation as RAW:" +msgstr "" + +#. FRMOperationsExplorer..pnlOpInfo..pnlInfo..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:115 +msgid "pnlInfo" +msgstr "" + +#. FRMOperationsExplorer..pnlOpInfo..pnlInfo..pnlInfoOptions..Label2..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:139 +msgid "Multioperation actions:" +msgstr "Meerdere handelingen aktie:" + +#. FRMOperationsExplorer..pnlOpInfo..pnlInfo..pnlInfoOptions..bbRandom..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:188 +msgid "RANDOM OPERATIONS" +msgstr "" + +#. FRMOperationsExplorer..mMenu..MiTools..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:199 +msgid "Tools" +msgstr "Gereedschappen" + +#. FRMOperationsExplorer..mMenu..MiTools..MiImportOperationsFromTxt..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:201 +msgid "Import Operations from RAW" +msgstr "" + +#. FRMOperationsExplorer..mMenu..MiTools..MiDivider1..Caption +#. FRMOperationsExplorer..mMenu..MiActions..MenuItem6..Caption +#. FRMWallet..MainMenu..miProject..miN1..Caption +#. FRMWallet..MainMenu..miProject..N1..Caption +#. FRMWallet..MainMenu..MiOperations..N2..Caption +#. FRMWallet..MainMenu..MiOperations..N3..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:206 +#: gui-classic/UFRMOperationsExplorer.dfm:224 gui-classic/UFRMWallet.dfm:1254 +#: gui-classic/UFRMWallet.dfm:1270 gui-classic/UFRMWallet.dfm:1310 +#: gui-classic/UFRMWallet.dfm:1327 +msgid "-" +msgstr "" + +#. FRMOperationsExplorer..mMenu..MiTools..miLoadFromBlockchain..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:209 +msgid "Load Operations from Blockchain" +msgstr "" + +#. FRMOperationsExplorer..mMenu..MiTools..MiLoadOperationsFromBlockchainFile..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:214 +msgid "Load Operations from Blockchain file" +msgstr "" + +#. FRMOperationsExplorer..mMenu..MiActions..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:219 +msgid "Actions" +msgstr "Akties" + +#. FRMOperationsExplorer..ActionList..ActExecuteOperation..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:244 +msgid "Execute Operation" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActAddTxToMultioperation..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:249 +msgid "Add Tx to Multioperation" +msgstr "" + +#. FRMOperationsExplorer..ActionList..AddOpChangeToMultioperation..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:254 +msgid "Add OpChange to Multioperation" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActRemoveAccountFromMultioperation..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:259 +msgid "Remove Account from Multioperation" +msgstr "Verwijder Rekening van MultiHandeling" + +#. FRMOperationsExplorer..ActionList..ActSignMultioperation..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:264 +msgid "Sign Multioperation" +msgstr "Teken Multi-handeling" + +#. FRMOperationsExplorer..ActionList..ActAddTx..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:269 +msgid "Add Tx" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActAddOpChange..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:274 +msgid "Add OpChange" +msgstr "" + +#. FRMOperationsExplorer..ActionList..ActRemove..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:279 +msgid "Remove" +msgstr "Verwijder" + +#. FRMOperationsExplorer..ActionList..ActSign..Caption +#: gui-classic/UFRMOperationsExplorer.dfm:284 +msgid "Sign" +msgstr "Teken" + +#. FRMPascalCoinWalletConfig..Caption +#. FRMWallet..MainMenu..miProject..miOptions..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:6 +#: gui-classic/UFRMWallet.dfm:1257 +msgid "Options" +msgstr "Opties" + +#. FRMPascalCoinWalletConfig..Label1..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:25 +msgid "Default fee for operation" +msgstr "Standaard vergoeding voor handeling" + +#. FRMPascalCoinWalletConfig..Label2..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:32 +msgid "Internet Server Port" +msgstr "Internet Server Poort" + +#. FRMPascalCoinWalletConfig..lblDefaultInternetServerPort..Caption +#. FRMPascalCoinWalletConfig..lblDefaultJSONRPCMinerServerPort..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:39 +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:73 +msgid "(Default XXXX)" +msgstr "(Standaard XXXX)" + +#. FRMPascalCoinWalletConfig..Label3..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:46 +msgid "Miner Name:" +msgstr "Miner Naam:" + +#. FRMPascalCoinWalletConfig..Label4..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:53 +msgid "This name will be included in each new block you mine!" +msgstr "Deze naam wordt opgenomen in elk nieuw blok dat je vindt!" + +#. FRMPascalCoinWalletConfig..Label5..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:66 +msgid "JSON-RPC Port" +msgstr "JSON-RPC Poort" + +#. FRMPascalCoinWalletConfig..Label6..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:80 +msgid "Allowed IP's" +msgstr "Toegestane IP adressen" + +#. FRMPascalCoinWalletConfig..Label7..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:87 +msgid "Ip's separated by semicolon or empty for all" +msgstr "IP adressen gescheiden door een puntkomma of leeg voor alle adressen" + +#. FRMPascalCoinWalletConfig..cbJSONRPCMinerServerActive..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:100 +msgid "JSON-RPC Server Miner (TCP/IP, no HTTP)" +msgstr "" + +#. FRMPascalCoinWalletConfig..cbSaveLogFiles..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:117 +msgid "Save log file" +msgstr "Bewaar logboek" + +#. FRMPascalCoinWalletConfig..cbShowLogs..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:126 +msgid "Show logs" +msgstr "Toon logboek" + +#. FRMPascalCoinWalletConfig..bbUpdatePassword..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:174 +msgid "Wallet Password" +msgstr "Portemonnee Wachtwoord" + +#. FRMPascalCoinWalletConfig..ebMinerName..Text +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:243 +msgid "ebMinerName" +msgstr "ebMinderNaam" + +#. FRMPascalCoinWalletConfig..cbShowModalMessages..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:250 +msgid "Show modal messages" +msgstr "Toon modale berichten" + +#. FRMPascalCoinWalletConfig..gbMinerPrivateKey..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:279 +msgid " Miner Server Private Key: " +msgstr " Miner Server Prive Sleutel: " + +#. FRMPascalCoinWalletConfig..gbMinerPrivateKey..rbGenerateANewPrivateKeyEachBlock..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:286 +msgid "Generate a new private key for each generated block" +msgstr "Genereer een nieuwe prive sleutel voor elk gegenereerde blok" + +#. FRMPascalCoinWalletConfig..gbMinerPrivateKey..rbUseARandomKey..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:294 +msgid "Use a random existing key" +msgstr "Gebruik een willekeurig bestaande sleutel" + +#. FRMPascalCoinWalletConfig..gbMinerPrivateKey..rbMineAllwaysWithThisKey..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:302 +msgid "Always mine with this key:" +msgstr "Altijd minen met deze sleutel:" + +#. FRMPascalCoinWalletConfig..cbSaveDebugLogs..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:319 +msgid "Save debug logs too" +msgstr "Bewaar debug logboek ook" + +#. FRMPascalCoinWalletConfig..bbOpenDataFolder..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:349 +msgid "Open Data Folder" +msgstr "" + +#. FRMPascalCoinWalletConfig..cbJSONRPCPortEnabled..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:363 +msgid "JSON-RPC Server port enabled (HTTP)" +msgstr "JSON-RPC Server poort geactiveerd (HTTP)" + +#. FRMPascalCoinWalletConfig..ebJSONRPCAllowedIPs..Text +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:373 +msgid "ebJSONRPCAllowedIPs" +msgstr "" + +#. FRMPascalCoinWalletConfig..cbDownloadNewCheckpoint..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:389 +msgid "Download new Checkpoint if blockchain older than..." +msgstr "Download een nieuw Checkpoint als blockchain ouder is dan ..." + +#. FRMPayloadDecoder..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:7 +msgid "Operation Information/Decoder" +msgstr "" + +#. FRMPascalCoinWalletConfig..bbChangeLanguage..Caption +#: gui-classic/UFRMPascalCoinWalletConfig.dfm:428 +msgid "Change UI language" +msgstr "Verander UI taal" + +#. FRMPayloadDecoder..Label1..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:26 +msgid "Block/Op:" +msgstr "Blok/Op:" + +#. FRMPayloadDecoder..lblBlock..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:33 +msgid "000000/0000" +msgstr "" + +#. FRMPayloadDecoder..Label6..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:59 +msgid "Date Time:" +msgstr "Datum Tijd:" + +#. FRMPayloadDecoder..Label2..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:66 +msgid "Operation:" +msgstr "Handeling:" + +#. FRMPayloadDecoder..lblAmountCaption..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:88 +msgid "Amount:" +msgstr "Bedrag:" + +#. FRMPayloadDecoder..lblFeeCaption..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:108 +msgid "Fee:" +msgstr "Vergoeding:" + +#. FRMPayloadDecoder..Label4..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:128 +msgid "OpHash" +msgstr "" + +#. FRMPayloadDecoder..lblSenderCaption..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:135 +msgid "Sender:" +msgstr "Afzender:" + +#. FRMPayloadDecoder..lblSender..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:142 +msgid "9999999-99" +msgstr "" + +#. FRMPayloadDecoder..lblReceiverCaption..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:155 +msgid "Receiver:" +msgstr "Ontvanger:" + +#. FRMPayloadDecoder..lblReceiverInfo..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:175 +msgid "(Receiver info)" +msgstr "(Ontvanger info)" + +#. FRMPayloadDecoder..PageControl..tsDecoded..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:192 +msgid "Payload" +msgstr "Lading" + +#. FRMPayloadDecoder..PageControl..tsDecoded..Label7..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:202 +msgid "Decoded Payload:" +msgstr "Gedecodeerde Lading:" + +#. FRMPayloadDecoder..PageControl..tsDecoded..lblDecodedMethod..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:210 +msgid "(Method)" +msgstr "(Methode)" + +#. FRMPayloadDecoder..PageControl..tsDecoded..Label3..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:223 +msgid "Original Payload in Hexadecimal:" +msgstr "Originele Lading in Hexadecimaal:" + +#. FRMPayloadDecoder..PageControl..tsDecoded..memoDecoded....Lines.Strings +#. FRMPayloadDecoder..PageControl..tsDecoded..memoOriginalPayloadInHexa....Lines.Strings +#: gui-classic/UFRMPayloadDecoder.dfm:237 +#: gui-classic/UFRMPayloadDecoder.dfm:256 +msgid "memoDecoded" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecoded..cbShowAsHexadecimal..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:267 +msgid "Show as hexadecimal" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecodeMethods..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:273 +msgid "Decode methods" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecodeMethods..lblPasswordsInfo..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:280 +msgid "lblPasswordsInfo" +msgstr "" + +#. FRMPayloadDecoder..PageControl..tsDecodeMethods..cbMethodPublicPayload..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:287 +msgid "Not encrypted (Public payload)" +msgstr "Niet versleuteld (Publieke lading)" + +#. FRMPayloadDecoder..PageControl..tsDecodeMethods..cbUsingPrivateKeys..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:296 +msgid "Using Private keys of my Wallet" +msgstr "Gebruikt Prive sleutels uit mijn Portemonnee" + +#. FRMPayloadDecoder..PageControl..tsDecodeMethods..cbUsingPasswords..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:305 +msgid "Using Passwords of the list" +msgstr "Gebruikt Wachtwoorden uit de lijst" + +#. FRMPayloadDecoder..PageControl..tsDecodeMethods..bbSaveMethods..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:323 +msgid "Save" +msgstr "Bewaar" + +#. FRMPayloadDecoder..bbFind..Caption +#: gui-classic/UFRMPayloadDecoder.dfm:376 +msgid "&Find" +msgstr "&Zoek" + +#. FRMPayloadDecoder..ebOphash..Text +#: gui-classic/UFRMPayloadDecoder.dfm:420 +msgid "12345678901234567890123456789012345678901234567890123456789012" +msgstr "" + +#. FRMDiagnosticTool..txtLog..Text +#: gui-classic/UFRMRandomHashUtil.dfm:26 +msgid "txtLog" +msgstr "" + +#. FRMDiagnosticTool..btnRH..Caption +#: gui-classic/UFRMRandomHashUtil.dfm:33 +msgid "Random Hash" +msgstr "" + +#. FRMDiagnosticTool..btnRH2..Caption +#: gui-classic/UFRMRandomHashUtil.dfm:41 +msgid "Random Hash 2" +msgstr "" + +#. FRMRandomOperations..Caption +#. FRMRandomOperations..pnlClient..pnlTop1..bbRandomOperations..Caption +#: gui-classic/UFRMRandomOperations.dfm:4 +#: gui-classic/UFRMRandomOperations.dfm:73 +msgid "Random Operations" +msgstr "Willekeurige Handelingen" + +#. FRMRandomOperations..pnlTop..lblTopCaption....Caption +#: gui-classic/UFRMRandomOperations.dfm:39 +msgid "" +"WARNING! This form will generate RANDOM operations using your private " +"keys!!!" +msgstr "" + +#. FRMRandomOperations..pnlClient..mLogs....Lines.Strings +#: gui-classic/UFRMRandomOperations.dfm:85 +msgid "mLogs" +msgstr "" + +#. FRMRPCCalls..Caption +#. FRMWallet..MainMenu..miProject..MiRPCCalls..Caption +#: gui-classic/UFRMRPCCalls.dfm:5 gui-classic/UFRMWallet.dfm:1266 +msgid "RPC Calls" +msgstr "RPC Oproepen" + +#. FRMRPCCalls..pnlTop..lblTopCaption....Caption +#: gui-classic/UFRMRPCCalls.dfm:45 +msgid "" +"WARNING! Execute only calls you understand. Execute unknown calls provided " +"by third person can cause that you lost your keys/balance!" +msgstr "" + +#. FRMRPCCalls..pnlRight..Label1..Caption +#: gui-classic/UFRMRPCCalls.dfm:83 +msgid "Method" +msgstr "Methode" + +#. FRMRPCCalls..pnlRight..Label2..Caption +#: gui-classic/UFRMRPCCalls.dfm:92 +msgid "Server" +msgstr "" + +#. FRMRPCCalls..pnlRight..ebMethod..Text +#: gui-classic/UFRMRPCCalls.dfm:102 +msgid "ebMethod" +msgstr "" + +#. FRMRPCCalls..pnlRight..pageControl..tsKeyNames..Caption +#: gui-classic/UFRMRPCCalls.dfm:113 +msgid "Key/Value Params" +msgstr "" + +#. FRMRPCCalls..pnlRight..pageControl..tsJSONParams..Caption +#: gui-classic/UFRMRPCCalls.dfm:130 +msgid "Params as JSON" +msgstr "" + +#. FRMRPCCalls..pnlRight..bbSendCommand..Caption +#: gui-classic/UFRMRPCCalls.dfm:148 +msgid "&Send" +msgstr "&Verstuur" + +#. FRMRPCCalls..pnlRight..ebServerURL..Text +#: gui-classic/UFRMRPCCalls.dfm:195 +msgid "ebServerURL" +msgstr "" + +#. FRMRPCCalls..pnlInfo..pnlInfoBottom..pnlLastCall..Label3..Caption +#: gui-classic/UFRMRPCCalls.dfm:244 +msgid "Last call result:" +msgstr "" + +#. FRMRPCCalls..pnlInfo..pnlInfoBottom..pnlLastCall..lblLastCallResultState..Caption +#: gui-classic/UFRMRPCCalls.dfm:253 +msgid "STATE" +msgstr "TOESTAND" + +#. FRMSaleAccounts..Caption +#: gui-classic/UFRMSaleAccounts.dfm:5 +msgid "Sale accounts" +msgstr "" + +#. FRMSaleAccounts..Label1..Caption +#: gui-classic/UFRMSaleAccounts.dfm:32 +msgid "Sale price:" +msgstr "" + +#. FRMSaleAccounts..Label2..Caption +#: gui-classic/UFRMSaleAccounts.dfm:39 +msgid "Locked until block:" +msgstr "Sluit tot blok:" + +#. FRMSaleAccounts..Label3..Caption +#: gui-classic/UFRMSaleAccounts.dfm:46 +msgid "Seller account (where to pay)" +msgstr "" + +#. FRMSaleAccounts..ebSalePrice..Text +#. FRMSaleAccounts..ebSellerAccount..Text +#: gui-classic/UFRMSaleAccounts.dfm:115 gui-classic/UFRMSaleAccounts.dfm:170 +msgid "Edit1" +msgstr "" + +#. FRMSaleAccounts..ebLockedUntilBlock..Text +#: gui-classic/UFRMSaleAccounts.dfm:123 +msgid "ebLockedUntilBlock" +msgstr "" + +#. FRMSaleAccounts..gbSellOptions..Caption +#: gui-classic/UFRMSaleAccounts.dfm:130 +msgid " Sell options: " +msgstr " Verkoop opties: " + +#. FRMSaleAccounts..gbSellOptions..lblNewOwnerPublicKey..Caption +#: gui-classic/UFRMSaleAccounts.dfm:137 +msgid "New owner's public key" +msgstr "Nieuwe eigenaar zijn publieke sleutel" + +#. FRMSaleAccounts..gbSellOptions..rbEveryoneCanBuy..Caption +#: gui-classic/UFRMSaleAccounts.dfm:144 +msgid "Everyone can buy" +msgstr "" + +#. FRMSaleAccounts..gbSellOptions..rbReservedForAPublickKey..Caption +#: gui-classic/UFRMSaleAccounts.dfm:152 +msgid "Reserved for only one public key (private)" +msgstr "" + +#. FRMSaleAccounts..gbSellOptions..ebNewOwnerPublicKey..Text +#: gui-classic/UFRMSaleAccounts.dfm:161 +msgid "ebDestAccount" +msgstr "ebBestRekening" + +#. FRMChangeLanguage..Caption +#. FRMChangeLanguage..Caption +#: gui-classic/UFRMSelectLanguage.dfm:8 +#: lib/i386-win32/ufrmselectlanguage.dfm:8 +msgid "Language Selection" +msgstr "Taal Selectie" + +#. FRMChangeLanguage..bbCancel..Caption +#. FRMChangeLanguage..bbCancel..Caption +#: gui-classic/UFRMSelectLanguage.dfm:28 +#: lib/i386-win32/ufrmselectlanguage.dfm:28 +msgid "Cancel" +msgstr "Annuleren" + +#. FRMChangeLanguage..Label1..Caption +#. FRMChangeLanguage..Label1..Caption +#: gui-classic/UFRMSelectLanguage.dfm:46 +#: lib/i386-win32/ufrmselectlanguage.dfm:46 +msgid "Select your preferred language" +msgstr "Selecteer uw voorkeurstaal" + +#. FRMWallet..pnlTop..lblCurrentBlockCaption..Caption +#: gui-classic/UFRMWallet.dfm:135 +msgid "Total Blocks:" +msgstr "Totaal Blokken:" + +#. FRMWallet..pnlTop..lblCurrentBlockTimeCaption..Caption +#: gui-classic/UFRMWallet.dfm:153 +msgid "Current Block Age:" +msgstr "Huidige Blok leeftijd:" + +#. FRMWallet..pnlTop..lblCurrentBlockTime..Caption +#: gui-classic/UFRMWallet.dfm:162 +msgid "000 seconds ago" +msgstr "" + +#. FRMWallet..pnlTop..lblOperationsPendingCaption..Caption +#: gui-classic/UFRMWallet.dfm:171 +msgid "Pending Operations:" +msgstr "Lopende Handelingen:" + +#. FRMWallet..pnlTop..lblMiningStatusCaption..Caption +#: gui-classic/UFRMWallet.dfm:189 +msgid "Miner Clients:" +msgstr "" + +#. FRMWallet..pnlTop..lblCurrentDifficultyCaption..Caption +#: gui-classic/UFRMWallet.dfm:207 +msgid "Current Target:" +msgstr "Huidige Doel:" + +#. FRMWallet..pnlTop..Label4..Caption +#: gui-classic/UFRMWallet.dfm:234 +msgid "Time average:" +msgstr "Tijd gemiddeld:" + +#. FRMWallet..pnlTop..Label8..Caption +#: gui-classic/UFRMWallet.dfm:243 +msgid "Node Status:" +msgstr "" + +#. FRMWallet..pnlTop..lblNodeStatus..Caption +#: gui-classic/UFRMWallet.dfm:252 +msgid "???" +msgstr "" + +#. FRMWallet..pnlTop..Label16..Caption +#: gui-classic/UFRMWallet.dfm:294 +msgid "Blocks Found:" +msgstr "Blokken Gevonden:" + +#. FRMWallet..pnlTop..lblBlocksFound..Hint +#: gui-classic/UFRMWallet.dfm:309 +msgid "Blocks found while Miner is running..." +msgstr "Blokken gevonden terwijl de Miner actief is..." + +#. FRMWallet..pnlTop..lblReceivedMessages..Caption +#: gui-classic/UFRMWallet.dfm:328 +msgid "Received Messages" +msgstr "Ontvangen Berichten" + +#. FRMWallet..pnlTop..lblBuild..Caption +#: gui-classic/UFRMWallet.dfm:344 +msgid "Build" +msgstr "Bouw" + +#. FRMWallet..StatusBar......Text +#: gui-classic/UFRMWallet.dfm:363 +msgid "Server Active" +msgstr "Server actief" + +#. FRMWallet..StatusBar......Text +#: gui-classic/UFRMWallet.dfm:367 +msgid "Connection status" +msgstr "Verbinding status" + +#. FRMWallet..StatusBar......Text +#: gui-classic/UFRMWallet.dfm:371 +msgid "Blocks" +msgstr "Blokken" + +#. FRMWallet..PageControl..tsMyAccounts..Caption +#: gui-classic/UFRMWallet.dfm:385 +msgid "Account Explorer" +msgstr "Rekening Verkenner" + +#. FRMWallet..PageControl..tsMyAccounts..pnlMyAccountsTop..Label18..Caption +#. FRMWallet..MainMenu..MiOperations..MiFindaccount..Caption +#: gui-classic/UFRMWallet.dfm:406 gui-classic/UFRMWallet.dfm:1295 +msgid "Find account" +msgstr "Zoek rekening" + +#. FRMWallet..PageControl..tsMyAccounts..pnlMyAccountsTop..cbExploreMyAccounts..Caption +#: gui-classic/UFRMWallet.dfm:458 +msgid "Explore accounts with one of my Wallet Keys" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pnlMyAccountsTop..bbChangeKeyName..Caption +#: gui-classic/UFRMWallet.dfm:476 +msgid "Change Key name" +msgstr "Wijzig Sleutel naam" + +#. FRMWallet..PageControl..tsMyAccounts..pnlMyAccountsTop..cbFilterAccounts..Caption +#: gui-classic/UFRMWallet.dfm:485 +msgid "Filter accounts by balance" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pnlMyAccountsTop..ebFilterAccountByBalanceMin..Hint +#: gui-classic/UFRMWallet.dfm:494 +msgid "Min balance" +msgstr "Min Saldo" + +#. FRMWallet..PageControl..tsMyAccounts..pnlMyAccountsTop..ebFilterAccountByBalanceMax..Hint +#: gui-classic/UFRMWallet.dfm:504 +msgid "Max balance" +msgstr "Max saldo" + +#. FRMWallet..PageControl..tsMyAccounts..pnlAccounts..pnlAccountsInfo..bbAccountsRefresh..Caption +#: gui-classic/UFRMWallet.dfm:580 +msgid "Refresh" +msgstr "Vernieuwen" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsAccountOperations..Caption +#: gui-classic/UFRMWallet.dfm:622 +msgid "Account Operations" +msgstr "Rekening Handelingen" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..Caption +#: gui-classic/UFRMWallet.dfm:634 +msgid "Selected Accounts For Batch Operation" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsTop..Label15..Caption +#: gui-classic/UFRMWallet.dfm:667 +msgid "Select multiple accounts to execute massive operations" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsBottom..Label22..Caption +#: gui-classic/UFRMWallet.dfm:703 +msgid "Accounts Balance:" +msgstr "Rekeningsaldo:" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsLeft..sbSelectedAccountsAdd..Caption +#: gui-classic/UFRMWallet.dfm:730 +msgid ">" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsLeft..sbSelectedAccountsAddAll..Caption +#: gui-classic/UFRMWallet.dfm:738 +msgid ">>" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsLeft..sbSelectedAccountsDel..Caption +#: gui-classic/UFRMWallet.dfm:746 +msgid "<" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..pnlSelectedAccountsLeft..sbSelectedAccountsDelAll..Caption +#: gui-classic/UFRMWallet.dfm:754 +msgid "<<" +msgstr "" + +#. FRMWallet..PageControl..tsMyAccounts..pcAccountsOptions..tsMultiSelectAccounts..bbSelectedAccountsOperation..Caption +#. FRMWallet..MainMenu..MiOperations..Caption +#: gui-classic/UFRMWallet.dfm:763 gui-classic/UFRMWallet.dfm:1278 +msgid "Operations" +msgstr "Handelingen" + +#. FRMWallet..PageControl..tsPendingOperations..Caption +#: gui-classic/UFRMWallet.dfm:829 +msgid "Pending Operations" +msgstr "Lopende Handelingen" + +#. FRMWallet..PageControl..tsPendingOperations..pnlPendingOperations..Label10....Caption +#: gui-classic/UFRMWallet.dfm:865 +msgid "" +"Here you can see Operations transmited/received from other nodes that will " +"be included in next block. There is no guarantee that other nodes will " +"include them when mining, so it's important that you mine too to help " +"include Operations to the main BlockChain" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Caption +#: gui-classic/UFRMWallet.dfm:879 +msgid "Block Explorer" +msgstr "Blok verkenner" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..Label9..Caption +#. FRMWallet..PageControl..tsOperations..Panel1..Label2..Caption +#: gui-classic/UFRMWallet.dfm:898 gui-classic/UFRMWallet.dfm:994 +msgid "Filter by blocks range" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..lblHashRateBackBlocks..Caption +#: gui-classic/UFRMWallet.dfm:907 +msgid "HashRate back blocks" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..lblHashRateBackBlocks1..Caption +#: gui-classic/UFRMWallet.dfm:916 +msgid "Units" +msgstr "Eenheden" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..cbHashRateUnits..Text +#. FRMWallet..PageControl..tsBlockChain..Panel2..cbHashRateUnits....Items.Strings +#: gui-classic/UFRMWallet.dfm:955 gui-classic/UFRMWallet.dfm:960 +msgid "Mh/s" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..cbHashRateUnits....Items.Strings +#: gui-classic/UFRMWallet.dfm:959 +msgid "Kh/s" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..cbHashRateUnits....Items.Strings +#: gui-classic/UFRMWallet.dfm:961 +msgid "Gh/s" +msgstr "" + +#. FRMWallet..PageControl..tsBlockChain..Panel2..cbHashRateUnits....Items.Strings +#: gui-classic/UFRMWallet.dfm:962 +msgid "Th/s" +msgstr "" + +#. FRMWallet..PageControl..tsOperations..Caption +#. FRMWallet..MainMenu..MiOperations..MiOperationsExplorer..Caption +#: gui-classic/UFRMWallet.dfm:975 gui-classic/UFRMWallet.dfm:1305 +msgid "Operations Explorer" +msgstr "Handelingen Verkenner" + +#. FRMWallet..PageControl..tsLogs..Caption +#: gui-classic/UFRMWallet.dfm:1027 +msgid "Logs" +msgstr "Logboeken" + +#. FRMWallet..PageControl..tsLogs..pnlTopLogs..cbShowDebugLogs..Caption +#: gui-classic/UFRMWallet.dfm:1046 +msgid "Show Debug Logs" +msgstr "" + +#. FRMWallet..PageControl..tsNodeStats..Caption +#: gui-classic/UFRMWallet.dfm:1062 +msgid "Node Stats" +msgstr "" + +#. FRMWallet..PageControl..tsNodeStats..Label3..Caption +#: gui-classic/UFRMWallet.dfm:1076 +msgid "Active Connections:" +msgstr "Active verbindingen:" + +#. FRMWallet..PageControl..tsNodeStats..Label6..Caption +#: gui-classic/UFRMWallet.dfm:1086 +msgid "Known Node Servers:" +msgstr "Bekende Node Servers:" + +#. FRMWallet..PageControl..tsNodeStats..Label7..Caption +#: gui-classic/UFRMWallet.dfm:1096 +msgid "Blacklisted Nodes" +msgstr "" + +#. FRMWallet..PageControl..tsMessages..Caption +#: gui-classic/UFRMWallet.dfm:1135 +msgid "Messages" +msgstr "Berichten" + +#. FRMWallet..PageControl..tsMessages..Label11..Caption +#: gui-classic/UFRMWallet.dfm:1149 +msgid "Messages:" +msgstr "Berichten:" + +#. FRMWallet..PageControl..tsMessages..Label12..Caption +#: gui-classic/UFRMWallet.dfm:1158 +msgid "Message to send:" +msgstr "Bericht om te versturen:" + +#. FRMWallet..PageControl..tsMessages..Label13..Caption +#: gui-classic/UFRMWallet.dfm:1167 +msgid "Available Connections:" +msgstr "Beschikbare verbindening:" + +#. FRMWallet..PageControl..tsMessages..Label14....Caption +#: gui-classic/UFRMWallet.dfm:1178 +msgid "" +"(Messages will be encrypted, so only dest connection will be able to read " +"it)" +msgstr "" +"(Berichten zullen versleuteld zijn, alleen ontv connectie zal het kunnen " +"lezen)" + +#. FRMWallet..PageControl..tsMessages..bbSendAMessage..Caption +#: gui-classic/UFRMWallet.dfm:1203 +msgid "Send a Message" +msgstr "Stuur een Bericht" + +#. FRMWallet..PageControl..tsMessages..memoMessageToSend....Lines.Strings +#: gui-classic/UFRMWallet.dfm:1232 +msgid "memoMessageToSend" +msgstr "" + +#. FRMWallet..MainMenu..miProject..Caption +#: gui-classic/UFRMWallet.dfm:1247 +msgid "Project" +msgstr "" + +#. FRMWallet..MainMenu..miProject..miPrivatekeys..Caption +#: gui-classic/UFRMWallet.dfm:1249 +msgid "Private Keys" +msgstr "Prive Sleutels" + +#. FRMWallet..MainMenu..miProject..IPnodes1..Caption +#: gui-classic/UFRMWallet.dfm:1262 +msgid "Available Node List" +msgstr "Beschikbare Node lijst" + +#. FRMWallet..MainMenu..MiOperations..miNewOperation..Caption +#: gui-classic/UFRMWallet.dfm:1280 +msgid "New single Operation" +msgstr "Nieuwe enkele handeling" + +#. FRMWallet..MainMenu..MiOperations..MiFindOperationbyOpHash..Caption +#: gui-classic/UFRMWallet.dfm:1285 +msgid "Find Operation by OpHash" +msgstr "Zoek Handelingen op OpHash" + +#. FRMWallet..MainMenu..MiOperations..MiDecodePayload..Caption +#: gui-classic/UFRMWallet.dfm:1290 +msgid "Decode Payload" +msgstr "Decodeer Lading" + +#. FRMWallet..MainMenu..MiOperations..MiAccountInformation..Caption +#: gui-classic/UFRMWallet.dfm:1300 +msgid "Account Information" +msgstr "Rekening Informatie" + +#. FRMWallet..MainMenu..MiOperations..MiAddaccounttoSelected..Caption +#: gui-classic/UFRMWallet.dfm:1313 +msgid "Add account to selected" +msgstr "Voeg rekening toe aan selectie" + +#. FRMWallet..MainMenu..MiOperations..MiRemoveaccountfromselected..Caption +#: gui-classic/UFRMWallet.dfm:1318 +msgid "Remove account from selected" +msgstr "Verwijder rekening van selectie" + +#. FRMWallet..MainMenu..MiOperations..MiMultiaccountoperation..Caption +#: gui-classic/UFRMWallet.dfm:1323 +msgid "Multi account operation" +msgstr "Meerdere rekening handeling" + +#. FRMWallet..MainMenu..MiOperations..MiFindpreviousaccountwithhighbalance..Caption +#: gui-classic/UFRMWallet.dfm:1330 +msgid "Find previous account with high balance" +msgstr "Zoek vorige rekening met hoog saldo" + +#. FRMWallet..MainMenu..MiOperations..MiFindnextaccountwithhighbalance..Caption +#: gui-classic/UFRMWallet.dfm:1335 +msgid "Find next account with high balance" +msgstr "Zoek volgende rekening met hoog saldo" + +#. FRMWallet..MainMenu..miAbout..Caption +#: gui-classic/UFRMWallet.dfm:1341 +msgid "About" +msgstr "Over" + +#. FRMWallet..MainMenu..miAbout..miAboutPascalCoin..Caption +#: gui-classic/UFRMWallet.dfm:1343 +msgid "About Pascal Coin..." +msgstr "Over Pascal Munt..." + +#. FRMWalletKeys..Caption +#: gui-classic/UFRMWalletKeys.dfm:6 +msgid "Wallet keys" +msgstr "Portemonne sleutels" + +#. FRMWalletKeys..lblEncryptionTypeCaption..Caption +#: gui-classic/UFRMWalletKeys.dfm:25 +msgid "Encryption type:" +msgstr "Versleutel type:" + +#. FRMWalletKeys..lblEncryptionType..Caption +#. FRMWalletKeys..lblKeyName..Caption +#: gui-classic/UFRMWalletKeys.dfm:32 gui-classic/UFRMWalletKeys.dfm:47 +msgid "000000000" +msgstr "" + +#. FRMWalletKeys..lblKeyNameCaption..Caption +#: gui-classic/UFRMWalletKeys.dfm:39 +msgid "Key name:" +msgstr "Sleutel naam:" + +#. FRMWalletKeys..lblPrivateKeyCaption..Caption +#: gui-classic/UFRMWalletKeys.dfm:54 +msgid "Public Key:" +msgstr "Publieke Sleutel:" + +#. FRMWalletKeys..lblKeysEncrypted..Caption +#: gui-classic/UFRMWalletKeys.dfm:62 +msgid "lblKeysEncrypted" +msgstr "" + +#. FRMWalletKeys..bbExportPrivateKey..Caption +#: gui-classic/UFRMWalletKeys.dfm:85 +msgid "Export Private key" +msgstr "Export Prive sleutel" + +#. FRMWalletKeys..memoPrivateKey....Lines.Strings +#: gui-classic/UFRMWalletKeys.dfm:158 +msgid "memoPrivateKey" +msgstr "" + +#. FRMWalletKeys..bbChangeName..Caption +#: gui-classic/UFRMWalletKeys.dfm:169 +msgid "Change Name" +msgstr "Wijzig Naam" + +#. FRMWalletKeys..bbImportPrivateKey..Caption +#: gui-classic/UFRMWalletKeys.dfm:178 +msgid "Import Private key" +msgstr "Importeer Prive sleutel" + +#. FRMWalletKeys..bbExportPublicKey..Caption +#: gui-classic/UFRMWalletKeys.dfm:240 +msgid "Export Public key" +msgstr "Export Publieke sluetel" + +#. FRMWalletKeys..bbImportPublicKey..Caption +#: gui-classic/UFRMWalletKeys.dfm:306 +msgid "Import Public key" +msgstr "Importeer Publieke sleutel" + +#. FRMWalletKeys..bbGenerateNewKey..Caption +#: gui-classic/UFRMWalletKeys.dfm:372 +msgid "Generate a new Key" +msgstr "Genereer een nieuwe Sleutel" + +#. FRMWalletKeys..bbDelete..Caption +#: gui-classic/UFRMWalletKeys.dfm:434 +msgid "Delete" +msgstr "Verwijder" + +#. FRMWalletKeys..bbExportAllWalletKeys..Caption +#: gui-classic/UFRMWalletKeys.dfm:568 +msgid "Export all Wallet Keys to a file" +msgstr "" + +#. FRMWalletKeys..bbImportKeysFile..Caption +#: gui-classic/UFRMWalletKeys.dfm:634 +msgid "Import a Wallet Keys File" +msgstr "Importeer een Portemonnee Sleutel Bestand" + +#. FRMWalletKeys..bbLock..Caption +#: gui-classic/UFRMWalletKeys.dfm:700 +msgid "Lock" +msgstr "Sluit" + +#. FRMWalletKeys..SaveDialog..DefaultExt +#. FRMWalletKeys..OpenDialog..DefaultExt +#: gui-classic/UFRMWalletKeys.dfm:758 gui-classic/UFRMWalletKeys.dfm:765 +msgid "dat" +msgstr "" + +#. FRMWalletKeys..SaveDialog..Filter +#: gui-classic/UFRMWalletKeys.dfm:759 +msgid "Wallet keys file|*.dat|All files|*.*" +msgstr "" + +#. FRMWalletKeys..OpenDialog..Filter +#: gui-classic/UFRMWalletKeys.dfm:766 +msgid "Wallet keys file (*.dat)|*.dat|All files (*.*)|*.*" +msgstr "" + +#. Programmer's name for it: SUnSupportedHash +#. Programmer's name for it: SUnSupportedHash +#: core/URandomHash.pas:267 core/URandomHash2.pas:219 +msgid "Unsupported Hash Selected" +msgstr "" + +#. Programmer's name for it: SInvalidRound +#. Programmer's name for it: SInvalidRound +#: core/URandomHash.pas:268 core/URandomHash2.pas:220 +msgid "Round must be between 0 and N inclusive" +msgstr "" + +#. Programmer's name for it: SOverlappingArgs +#. Programmer's name for it: SOverlappingArgs +#: core/URandomHash.pas:269 core/URandomHash2.pas:221 +msgid "Overlapping read/write regions" +msgstr "" + +#. Programmer's name for it: SBufferTooSmall +#. Programmer's name for it: SBufferTooSmall +#: core/URandomHash.pas:270 core/URandomHash2.pas:222 +msgid "Buffer too small to apply memory transform" +msgstr "" + +#. Programmer's name for it: SBlockHeaderTooSmallForNonce +#. Programmer's name for it: SBlockHeaderTooSmallForNonce +#: core/URandomHash.pas:271 core/URandomHash2.pas:223 +msgid "Buffer too small to contain nonce" +msgstr "" + +#. Programmer's name for it: SAESEngineNotInitialised +#. Programmer's name for it: SAESEngineNotInitialised +#: libraries/cryptolib4pascal/ClpAesEngine.pas:37 +#: libraries/cryptolib4pascal/ClpAesLightEngine.pas:37 +msgid "AES Engine not Initialised" +msgstr "" + +#. Programmer's name for it: SInputBuffertooShort +#. Programmer's name for it: SInputBuffertooShort +#. Programmer's name for it: SInputBufferTooShort +#. Programmer's name for it: SInputBuffertooShort +#. Programmer's name for it: SInputBuffertooShort +#. Programmer's name for it: SInputBuffertooShort +#. Programmer's name for it: SInputBuffertooShort +#. Programmer's name for it: SInputBuffertooShort +#: libraries/cryptolib4pascal/ClpAesEngine.pas:38 +#: libraries/cryptolib4pascal/ClpAesLightEngine.pas:38 +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:39 +#: libraries/cryptolib4pascal/ClpBlowfishEngine.pas:39 +#: libraries/cryptolib4pascal/ClpRijndaelEngine.pas:35 +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:43 +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:36 +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:36 +msgid "Input Buffer too Short" +msgstr "" + +#. Programmer's name for it: SOutputBuffertooShort +#. Programmer's name for it: SOutputBuffertooShort +#. Programmer's name for it: SOutputBufferTooShort +#. Programmer's name for it: SOutputBuffertooShort +#. Programmer's name for it: SOutputBufferTooSmall +#. Programmer's name for it: SOutputBufferTooSmall +#. Programmer's name for it: SOutputBufferTooSmall +#. Programmer's name for it: SOutputBuffertooShort +#. Programmer's name for it: SOutputBuffertooShort +#. Programmer's name for it: SOutputBuffertooShort +#. Programmer's name for it: SOutputBuffertooShort +#: libraries/cryptolib4pascal/ClpAesEngine.pas:39 +#: libraries/cryptolib4pascal/ClpAesLightEngine.pas:39 +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:40 +#: libraries/cryptolib4pascal/ClpBlowfishEngine.pas:40 +#: libraries/cryptolib4pascal/ClpBufferedBlockCipher.pas:39 +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:32 +#: libraries/cryptolib4pascal/ClpPaddedBufferedBlockCipher.pas:40 +#: libraries/cryptolib4pascal/ClpRijndaelEngine.pas:36 +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:44 +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:37 +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:37 +msgid "Output Buffer too Short" +msgstr "" + +#. Programmer's name for it: SInvalidParameterAESInit +#. Programmer's name for it: SInvalidParameterAESInit +#: libraries/cryptolib4pascal/ClpAesEngine.pas:40 +#: libraries/cryptolib4pascal/ClpAesLightEngine.pas:40 +msgid "Invalid Parameter Passed to AES Init - \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#: libraries/cryptolib4pascal/ClpAesEngine.pas:41 +#: libraries/cryptolib4pascal/ClpAesLightEngine.pas:41 +msgid "Key Length not 128/192/256 bits." +msgstr "Sleutel Lengte niet 128/192/256 bits." + +#. Programmer's name for it: SInvalidOperation +#. Programmer's name for it: SInvalidOperation +#: libraries/cryptolib4pascal/ClpAesEngine.pas:42 +#: libraries/cryptolib4pascal/ClpAesLightEngine.pas:42 +msgid "Should Never Get Here" +msgstr "" + +#: libraries/cryptolib4pascal/ClpAESPRNGRandom.pas:40 +msgid "AES RNG Seed Length must be either one of these \"128/192/256 bits\"." +msgstr "" + +#: libraries/cryptolib4pascal/ClpAgreementUtilities.pas:43 +msgid "Raw Agreement Algorithm \"%s\" Not Recognised." +msgstr "" + +#: libraries/cryptolib4pascal/ClpAgreementUtilities.pas:45 +msgid "Basic Agreement Algorithm \"%s\" Not Recognised." +msgstr "" + +#. Programmer's name for it: SArgon2TypeInvalid +#: libraries/cryptolib4pascal/ClpArgon2ParametersGenerator.pas:41 +msgid "Selected Argon2Type is Invalid" +msgstr "" + +#. Programmer's name for it: SArgon2VersionInvalid +#: libraries/cryptolib4pascal/ClpArgon2ParametersGenerator.pas:42 +msgid "Selected Argon2Version is Invalid" +msgstr "" + +#. Programmer's name for it: SArgon2MemoryCostTypeInvalid +#: libraries/cryptolib4pascal/ClpArgon2ParametersGenerator.pas:43 +msgid "Selected Argon2MemoryCostType is Invalid" +msgstr "" + +#. Programmer's name for it: SInvalidLength +#: libraries/cryptolib4pascal/ClpArrayUtils.pas:30 +msgid "%d \" > \" %d" +msgstr "" + +#. Programmer's name for it: SDataOverflow +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:43 +msgid "Data Overflow" +msgstr "" + +#. Programmer's name for it: SDataOverflow +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:45 +msgid "Corrupted Stream - Invalid High Tag Number Found" +msgstr "" + +#. Programmer's name for it: SEOFFound +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:46 +msgid "EOF Found Inside Tag Value" +msgstr "" + +#. Programmer's name for it: SInvalidEnd +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:47 +msgid "EOF Found When Length Expected" +msgstr "" + +#. Programmer's name for it: SInvalidDerLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:48 +msgid "DER Length More Than 4 Bytes: %d" +msgstr "" + +#. Programmer's name for it: SEndOfStream +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:49 +msgid "EOF Found Reading Length" +msgstr "" + +#. Programmer's name for it: SNegativeLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:50 +msgid "Corrupted Stream - Negative Length Found" +msgstr "" + +#. Programmer's name for it: SOutOfBoundsLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:51 +msgid "Corrupted stream - Out of Bounds Length Found" +msgstr "" + +#. Programmer's name for it: SUnknownTag +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:52 +msgid "Unknown Tag \" %d \" Encountered" +msgstr "" + +#. Programmer's name for it: SEndOfContent +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:53 +msgid "Unexpected End-of-Contents Marker" +msgstr "" + +#. Programmer's name for it: SIndefiniteLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:54 +msgid "Indefinite Length Primitive Encoding Encountered" +msgstr "" + +#. Programmer's name for it: SUnknownBerObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:55 +msgid "Unknown BER Object Encountered" +msgstr "" + +#. Programmer's name for it: SCorruptedStream +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:56 +msgid "Corrupted Stream Detected: %s" +msgstr "" + +#. Programmer's name for it: SInvalidLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:57 +msgid "Negative Lengths not Allowed\", \"Length\"" +msgstr "" + +#. Programmer's name for it: SEndOfStreamTwo +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:58 +msgid "DEF Length %d \" TObject truncated by \" %d" +msgstr "" + +#. Programmer's name for it: SInvalidBufferLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:59 +msgid "Buffer Length Not Right For Data" +msgstr "" + +#. Programmer's name for it: SMalformedContent +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:60 +msgid "Malformed End-of-Contents Marker" +msgstr "" + +#. Programmer's name for it: SExtraData +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:62 +msgid "Extra Data Found After Object" +msgstr "" + +#. Programmer's name for it: SUnRecognizedObjectStream +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:63 +msgid "Cannot Recognise Object in Stream" +msgstr "" + +#. Programmer's name for it: SUnRecognizedObjectByteArray +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:64 +msgid "Cannot Recognise Object in ByteArray" +msgstr "" + +#. Programmer's name for it: SIllegalObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:65 +msgid "Illegal Object in GetInstance: %s, \"obj\"" +msgstr "" + +#. Programmer's name for it: SStrNil +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:66 +msgid "\"Str\" Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SProcessingError +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:67 +msgid "Error Processing Object : \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:68 +msgid "Object Implicit - Explicit Expected." +msgstr "" + +#. Programmer's name for it: SUnknownObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:69 +msgid "Unknown object in GetInstance: %s, \"obj\"" +msgstr "" + +#. Programmer's name for it: SInvalidSequence +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:70 +msgid "\"Failed to Construct Sequence from byte array: \" %s" +msgstr "" + +#. Programmer's name for it: SImplicitObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:71 +msgid "Implicitly Tagged Object" +msgstr "" + +#. Programmer's name for it: SImplicitTag +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:72 +msgid "Implicit Tagging for Tag: %d" +msgstr "" + +#. Programmer's name for it: SUnknownObjectBER +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:73 +msgid "Unknown BER Object Encountered: $%x" +msgstr "" + +#. Programmer's name for it: SImplicitTagging +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:74 +msgid "Implicit Tagging not Implemented" +msgstr "" + +#. Programmer's name for it: SImplicitTagging +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:76 +msgid "Sequences Must Use Constructed Encoding (see X.690 8.9.1/8.10.1)" +msgstr "" + +#. Programmer's name for it: SImplicitTagging +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:78 +msgid "Sets Must Use Constructed Encoding (see X.690 8.11.1/8.12.1)" +msgstr "" + +#. Programmer's name for it: SMalformedObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:79 +msgid "Malformed Object %s" +msgstr "" + +#. Programmer's name for it: SUnSupportedTag +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:80 +msgid "Unsupported Tag Number" +msgstr "" + +#. Programmer's name for it: SConvertError +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:81 +msgid "EIOCryptoLibException Converting Stream to Byte Array: %s" +msgstr "" + +#. Programmer's name for it: SEncodingError +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:82 +msgid "Encoding Error in GetInstance: %s \"obj\"" +msgstr "" + +#. Programmer's name for it: SDataNil +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:83 +msgid "\"data\"" +msgstr "" + +#. Programmer's name for it: SInvalidRange +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:84 +msgid "Must be in the Range 0 to 7\", \"padBits\"" +msgstr "" + +#. Programmer's name for it: SPadBitError +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:85 +msgid "If \"data\" is Empty, \"padBits\" Must be 0" +msgstr "" + +#. Programmer's name for it: SUnalignedData +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:86 +msgid "Attempt to Get non-octet Aligned Data from BIT STRING\"" +msgstr "" + +#. Programmer's name for it: STruncatedBitString +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:87 +msgid "Truncated BIT STRING Detected\", \"octets\"" +msgstr "" + +#. Programmer's name for it: SNotImplemented +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:88 +msgid "Not Implemented %s" +msgstr "" + +#. Programmer's name for it: SUnConstructedTag +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:89 +msgid "Explicit Tags Must be Constructed (see X.690 8.14.2)" +msgstr "" + +#. Programmer's name for it: SParsingError +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:90 +msgid "%s" +msgstr "" + +#. Programmer's name for it: SEmptyInput +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:91 +msgid "Input Cannot be Empty \"astr\"" +msgstr "" + +#. Programmer's name for it: SInvalidValue +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:92 +msgid "Byte Value Should Have 1 Byte in it', \"val\"" +msgstr "" + +#. Programmer's name for it: SInvalidBooleanValue +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:93 +msgid "BOOLEAN Value Should Have 1 Byte in it\", \"Value\"" +msgstr "" + +#. Programmer's name for it: SMalformedEnumerated +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:94 +msgid "Malformed Enumerated" +msgstr "" + +#. Programmer's name for it: SZeroLength +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:95 +msgid "Enumerated has Zero Length, \"enc\"" +msgstr "" + +#. Programmer's name for it: SInvalidEncoding +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:96 +msgid "Invalid Encoding Value: %d" +msgstr "" + +#. Programmer's name for it: SFewObject +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:97 +msgid "Too Few Objects in Input Vector, \"v\"" +msgstr "" + +#. Programmer's name for it: SVectorTooLarge +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:98 +msgid "Input Vector too Large\", \"vector\"" +msgstr "" + +#. Programmer's name for it: SVectorTooLarge +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:100 +msgid "" +"No Tagged Object Found in Vector. Structure Doesn 't Seem to be of Type " +"External, \"Vector\"" +msgstr "" + +#. Programmer's name for it: SInvalidEncodingValue +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:101 +msgid "Invalid Encoding Value" +msgstr "" + +#. Programmer's name for it: SObjectNil +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:102 +msgid " \"obj\" Can't be Nil" +msgstr "" + +#. Programmer's name for it: SValueNil +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:103 +msgid " \"value\" Can't be Nil" +msgstr "" + +#. Programmer's name for it: SMalformedInteger +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:104 +msgid "Malformed Integer" +msgstr "" + +#. Programmer's name for it: SIdentifierNil +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:105 +msgid "Identifier Cannot be Empty" +msgstr "" + +#. Programmer's name for it: SInvalidOID +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:106 +msgid "\"String \" %s is \" not an OID\"" +msgstr "" + +#. Programmer's name for it: SInvalidBranchId +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:107 +msgid "\"String \" %s \" not a valid OID branch\", \"branchID\"" +msgstr "" + +#. Programmer's name for it: SIllegalCharacters +#: libraries/cryptolib4pascal/ClpAsn1Objects.pas:108 +msgid "String Contains Illegal Characters \"str\"" +msgstr "" + +#. Programmer's name for it: SExpectedPublicKey +#: libraries/cryptolib4pascal/ClpAsymmetricCipherKeyPair.pas:30 +msgid "Expected a Public Key \"publicParameter\"" +msgstr "" + +#. Programmer's name for it: SExpectedPrivateKey +#: libraries/cryptolib4pascal/ClpAsymmetricCipherKeyPair.pas:31 +msgid "Expected a Private Key \"privateParameter\"" +msgstr "" + +#. Programmer's name for it: SOutputBufferTooSmall +#. Programmer's name for it: SOutputBufferTooSmall +#: libraries/cryptolib4pascal/ClpBaseKdfBytesGenerator.pas:36 +#: libraries/cryptolib4pascal/ClpPascalCoinECIESKdfBytesGenerator.pas:34 +msgid "Output Buffer too Small" +msgstr "" + +#. Programmer's name for it: SOutputLengthTooLarge +#: libraries/cryptolib4pascal/ClpBaseKdfBytesGenerator.pas:37 +msgid "Output Length too Large" +msgstr "" + +#. Programmer's name for it: SKDFParameterNotFound +#. Programmer's name for it: SKDFParameterNotFound +#: libraries/cryptolib4pascal/ClpBaseKdfBytesGenerator.pas:38 +#: libraries/cryptolib4pascal/ClpPascalCoinECIESKdfBytesGenerator.pas:35 +msgid "KDF Parameters Required For KDF Generator" +msgstr "" + +#. Programmer's name for it: SDivisionByZero +#: libraries/cryptolib4pascal/ClpBigInteger.pas:36 +msgid "Division by Zero Error" +msgstr "" + +#. Programmer's name for it: SModulusPositive +#: libraries/cryptolib4pascal/ClpBigInteger.pas:37 +msgid "Modulus must be Positive" +msgstr "" + +#. Programmer's name for it: SNotRelativelyPrime +#: libraries/cryptolib4pascal/ClpBigInteger.pas:38 +msgid "Numbers not Relatively Prime." +msgstr "" + +#. Programmer's name for it: SNegativeValue +#: libraries/cryptolib4pascal/ClpBigInteger.pas:39 +msgid "Cannot be Called on Value < 0" +msgstr "" + +#. Programmer's name for it: SNegativeExponent +#: libraries/cryptolib4pascal/ClpBigInteger.pas:40 +msgid "Negative Exponent" +msgstr "" + +#. Programmer's name for it: SResultTooLarge +#: libraries/cryptolib4pascal/ClpBigInteger.pas:41 +msgid "Result too Large" +msgstr "" + +#. Programmer's name for it: SNegativeBitPosition +#: libraries/cryptolib4pascal/ClpBigInteger.pas:42 +msgid "Bit Position must not be Negative" +msgstr "" + +#. Programmer's name for it: SInvalidBitAddress +#: libraries/cryptolib4pascal/ClpBigInteger.pas:43 +msgid "Bit Address less than Zero" +msgstr "" + +#. Programmer's name for it: SZeroLengthBigInteger +#: libraries/cryptolib4pascal/ClpBigInteger.pas:44 +msgid "Zero length BigInteger" +msgstr "" + +#. Programmer's name for it: SInvalidSign +#: libraries/cryptolib4pascal/ClpBigInteger.pas:45 +msgid "Invalid Sign Value" +msgstr "" + +#. Programmer's name for it: SNegativeSizeInBits +#: libraries/cryptolib4pascal/ClpBigInteger.pas:46 +msgid "sizeInBits must be non-negative" +msgstr "" + +#. Programmer's name for it: SInvalidBitLength +#: libraries/cryptolib4pascal/ClpBigInteger.pas:47 +msgid "bitLength < 2" +msgstr "" + +#. Programmer's name for it: SInvalidBase +#: libraries/cryptolib4pascal/ClpBigInteger.pas:48 +msgid "Only bases 2, 8, 10, or 16 allowed" +msgstr "" + +#. Programmer's name for it: SBadCharacterRadix8 +#: libraries/cryptolib4pascal/ClpBigInteger.pas:49 +msgid "Bad Character in radix 8 string: %s" +msgstr "" + +#. Programmer's name for it: SBadCharacterRadix2 +#: libraries/cryptolib4pascal/ClpBigInteger.pas:50 +msgid "Bad Character in radix 2 string: %s" +msgstr "" + +#. Programmer's name for it: SUnSupportedBase +#: libraries/cryptolib4pascal/ClpBigInteger.pas:51 +msgid "Only bases 2, 8, 10, 16 are allowed" +msgstr "" + +#. Programmer's name for it: SInvalidLength +#: libraries/cryptolib4pascal/ClpBigIntegers.pas:31 +msgid "Standard Length Exceeded, \"n\"" +msgstr "" + +#. Programmer's name for it: SInvalidMinValue +#: libraries/cryptolib4pascal/ClpBigIntegers.pas:32 +msgid "\"min\" may not be greater than \"max\"\"" +msgstr "" + +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:37 +msgid "Initialisation Vector Must be the Same Length as Block Size" +msgstr "" + +#. Programmer's name for it: SInvalidChangeState +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:38 +msgid "Cannot Change Encrypting State Without Providing Key." +msgstr "" +"Kan Versleutelde Status niet Veranderen Zonder Voorgeschreven Sleutel." + +#. Programmer's name for it: SInvalidParameterArgument +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:42 +msgid "CTR/SIC Mode Requires ParametersWithIV" +msgstr "" + +#. Programmer's name for it: SInvalidParameterArgument +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:44 +msgid "CTR/SIC mode requires IV no greater than: %u bytes" +msgstr "" + +#. Programmer's name for it: SInvalidTooSmallIVLength +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:45 +msgid "CTR/SIC mode requires IV of at least: %u bytes" +msgstr "" + +#. Programmer's name for it: SUnsupportedCipher +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:47 +msgid "CtsBlockCipher Can Only Accept ECB or CBC Ciphers" +msgstr "" + +#. Programmer's name for it: SNegativeInputLength +#. Programmer's name for it: SInvalidLength +#. Programmer's name for it: SNegativeInputLength +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:48 +#: libraries/cryptolib4pascal/ClpBufferedBlockCipher.pas:36 +#: libraries/cryptolib4pascal/ClpPaddedBufferedBlockCipher.pas:42 +msgid "Can't Have a Negative Input Length!" +msgstr "" + +#. Programmer's name for it: SCTSDoFinalError +#: libraries/cryptolib4pascal/ClpBlockCipherModes.pas:49 +msgid "Need at Least One Block of Input For CTS" +msgstr "" + +#. Programmer's name for it: SBlowfishEngineNotInitialised +#: libraries/cryptolib4pascal/ClpBlowfishEngine.pas:36 +msgid "Blowfish Engine not Initialised" +msgstr "" + +#. Programmer's name for it: SBlowfishEngineNotInitialised +#: libraries/cryptolib4pascal/ClpBlowfishEngine.pas:38 +msgid "Invalid Parameter Passed to Blowfish Init - \"%s\"" +msgstr "" + +#. Programmer's name for it: SOutputBuffertooShort +#: libraries/cryptolib4pascal/ClpBlowfishEngine.pas:42 +msgid "Key Length must be between 32 - 448 bits and divisible by 8." +msgstr "Sleutel lengte moet tussen de 32 - 448 bits zijn en deelbaar door 8." + +#. Programmer's name for it: SInputNil +#: libraries/cryptolib4pascal/ClpBufferedBlockCipher.pas:37 +msgid "Input Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SCipherNil +#: libraries/cryptolib4pascal/ClpBufferedBlockCipher.pas:38 +msgid "Cipher Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SDataNotBlockSizeAligned +#: libraries/cryptolib4pascal/ClpBufferedBlockCipher.pas:40 +msgid "Data not Block Size Aligned" +msgstr "" + +#. Programmer's name for it: SOutputBufferTooSmallForDoFinal +#: libraries/cryptolib4pascal/ClpBufferedBlockCipher.pas:41 +msgid "Output Buffer too Short for DoFinal()" +msgstr "" + +#. Programmer's name for it: SInvalidBufferSize +#. Programmer's name for it: SInvalidBufferSize +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:33 +#: libraries/hashlib4pascal/HlpHash.pas:17 +msgid "\"BufferSize\" Must Be Greater Than Zero" +msgstr "" + +#. Programmer's name for it: SInvalidBufferSize +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:35 +msgid "Input and Output Streams Must not Point to the Same Stream Instance" +msgstr "" + +#. Programmer's name for it: SUnAssignedInputStream +#. Programmer's name for it: SUnAssignedStream +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:36 +#: libraries/hashlib4pascal/HlpHash.pas:18 +msgid "Input Stream Is Unassigned" +msgstr "" + +#. Programmer's name for it: SUnAssignedOutputStream +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:37 +msgid "Output Stream Is Unassigned" +msgstr "" + +#. Programmer's name for it: SPositionOutOfRange +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:38 +msgid "Current Position Is Out Of Range" +msgstr "" + +#. Programmer's name for it: SPositionOutOfRange +#: libraries/cryptolib4pascal/ClpBufferedCipherBase.pas:40 +msgid "Stream Position (or Stream Length to Process) Is Out Of Range" +msgstr "" + +#. Programmer's name for it: SCipherNil +#: libraries/cryptolib4pascal/ClpBufferedStreamCipher.pas:34 +msgid "Cipher Instance Cannot be Nil" +msgstr "" + +#: libraries/cryptolib4pascal/ClpCipherKeyGenerator.pas:34 +msgid "Strength must be a Positive Value, \"defaultStrength\"" +msgstr "" + +#. Programmer's name for it: SParametersNil +#: libraries/cryptolib4pascal/ClpCipherKeyGenerator.pas:35 +msgid "Parameters Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SGeneratorNotInitialized +#: libraries/cryptolib4pascal/ClpCipherKeyGenerator.pas:36 +msgid "Generator has not been Initialised" +msgstr "" + +#. Programmer's name for it: SMechanismNil +#. Programmer's name for it: SMechanismNil +#. Programmer's name for it: SMechanismNil +#: libraries/cryptolib4pascal/ClpCipherUtilities.pas:56 +#: libraries/cryptolib4pascal/ClpDigestUtilities.pas:42 +#: libraries/cryptolib4pascal/ClpSignerUtilities.pas:69 +msgid "Mechanism Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SAlgorithmNil +#. Programmer's name for it: SAlgorithmNil +#. Programmer's name for it: SAlgorithmNil +#: libraries/cryptolib4pascal/ClpCipherUtilities.pas:57 +#: libraries/cryptolib4pascal/ClpParameterUtilities.pas:37 +#: libraries/cryptolib4pascal/ClpSignerUtilities.pas:70 +msgid "Algorithm Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SUnRecognizedCipher +#: libraries/cryptolib4pascal/ClpCipherUtilities.pas:58 +msgid "Cipher \"%s\" Not Recognised." +msgstr "" + +#. Programmer's name for it: SUnRecognizedCipher +#: libraries/cryptolib4pascal/ClpCipherUtilities.pas:60 +msgid "" +"Warning: SIC-Mode Can Become a TwoTime-Pad if the Blocksize of the Cipher " +"is Too Small. Use a Cipher With a Block Size of at Least 128 bits (e.g. AES)" +msgstr "" + +#. Programmer's name for it: SUnRecognizedCipher +#: libraries/cryptolib4pascal/ClpCipherUtilities.pas:62 +msgid "Modes and Paddings Not Used for Stream Ciphers" +msgstr "" + +#. Programmer's name for it: SEncodingInstanceNil +#. Programmer's name for it: SEncodingInstanceNil +#: libraries/cryptolib4pascal/ClpConverters.pas:33 +#: libraries/hashlib4pascal/HlpConverters.pas:16 +msgid "Encoding Instance Cannot Be Nil" +msgstr "" + +#. Programmer's name for it: SNegativeOffset +#: libraries/cryptolib4pascal/ClpCryptoApiRandomGenerator.pas:32 +msgid "Start Offset Cannot be Negative, \"Start\"" +msgstr "" + +#. Programmer's name for it: SArrayTooSmall +#: libraries/cryptolib4pascal/ClpCryptoApiRandomGenerator.pas:33 +msgid "Byte Array Too Small For Requested Offset and Length" +msgstr "" + +#: libraries/cryptolib4pascal/ClpCurve25519Custom.pas:40 +msgid "Value Invalid for Curve25519FieldElement \"%s\"" +msgstr "" + +#. Programmer's name for it: SOneOfECFieldElementIsNil +#. Programmer's name for it: SOneOfECFieldElementIsNil +#. Programmer's name for it: SOneOfECFieldElementIsNil +#. Programmer's name for it: SOneOfECFieldElementIsNil +#. Programmer's name for it: SOneOfECFieldElementIsNil +#. Programmer's name for it: SOneOfECFieldElementIsNil +#: libraries/cryptolib4pascal/ClpCurve25519Custom.pas:41 +#: libraries/cryptolib4pascal/ClpSecP256K1Custom.pas:41 +#: libraries/cryptolib4pascal/ClpSecP256R1Custom.pas:41 +#: libraries/cryptolib4pascal/ClpSecP384R1Custom.pas:41 +#: libraries/cryptolib4pascal/ClpSecP521R1Custom.pas:41 +#: libraries/cryptolib4pascal/ClpSecT283Custom.pas:42 +msgid "Exactly One of the Field Elements is Nil" +msgstr "" + +#: libraries/cryptolib4pascal/ClpDHAgreement.pas:45 +#: libraries/cryptolib4pascal/ClpDHBasicAgreement.pas:38 +msgid "Diffie-Hellman Public Key has Wrong Parameters." +msgstr "" + +#. Programmer's name for it: SNotDHPrivateKeyParameters +#. Programmer's name for it: SNotDHPrivateKeyParameters +#: libraries/cryptolib4pascal/ClpDHAgreement.pas:46 +#: libraries/cryptolib4pascal/ClpDHBasicAgreement.pas:39 +msgid "DHEngine Expects DHPrivateKeyParameters" +msgstr "" + +#. Programmer's name for it: SMessageNotInitialized +#: libraries/cryptolib4pascal/ClpDHAgreement.pas:47 +msgid "Message not Initialised" +msgstr "Bericht niet geinitialiseerd" + +#. Programmer's name for it: SSharedKeyInvalid +#. Programmer's name for it: SSharedKeyInvalid +#: libraries/cryptolib4pascal/ClpDHAgreement.pas:48 +#: libraries/cryptolib4pascal/ClpDHBasicAgreement.pas:41 +msgid "Shared Key Can't be 1" +msgstr "" + +#. Programmer's name for it: SDHPublicKeyWeak +#. Programmer's name for it: SDHPublicKeyWeak +#: libraries/cryptolib4pascal/ClpDHAgreement.pas:49 +#: libraries/cryptolib4pascal/ClpDHBasicAgreement.pas:42 +msgid "Diffie-Hellman Public Key is Weak" +msgstr "" + +#. Programmer's name for it: SDHPublicKeyNil +#: libraries/cryptolib4pascal/ClpDHAgreement.pas:50 +msgid "DH Public Key Parameter Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SAlgorithmNotInitialized +#: libraries/cryptolib4pascal/ClpDHBasicAgreement.pas:40 +msgid "Agreement Algorithm not Initialised" +msgstr "" + +#. Programmer's name for it: SParametersCannotBeNil +#. Programmer's name for it: SParametersCannotBeNil +#. Programmer's name for it: SParametersCannotBeNil +#: libraries/cryptolib4pascal/ClpDHBasicKeyPairGenerator.pas:42 +#: libraries/cryptolib4pascal/ClpDHKeyPairGenerator.pas:42 +#: libraries/cryptolib4pascal/ClpDsaKeyPairGenerator.pas:44 +msgid "\"parameters\" Cannot Be Nil" +msgstr "" + +#. Programmer's name for it: SPNil +#: libraries/cryptolib4pascal/ClpDHDomainParameters.pas:33 +msgid "P Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SGNil +#. Programmer's name for it: SGNil +#: libraries/cryptolib4pascal/ClpDHDomainParameters.pas:34 +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:35 +msgid "G Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SQNil +#. Programmer's name for it: SQNil +#. Programmer's name for it: SQNil +#: libraries/cryptolib4pascal/ClpDHDomainParameters.pas:35 +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:37 +#: libraries/cryptolib4pascal/ClpECPublicKeyParameters.pas:35 +msgid "Q Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SJNil +#: libraries/cryptolib4pascal/ClpDHDomainParameters.pas:36 +msgid "J Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SBadSequenceSize +#. Programmer's name for it: SBadSequenceSize +#. Programmer's name for it: SBadSequenceSize +#: libraries/cryptolib4pascal/ClpDHDomainParameters.pas:37 +#: libraries/cryptolib4pascal/ClpDHValidationParams.pas:34 +#: libraries/cryptolib4pascal/ClpDsaParameter.pas:32 +msgid "Bad Sequence Size \"seq\": %d" +msgstr "" + +#. Programmer's name for it: SInvalidDHDomainParameters +#: libraries/cryptolib4pascal/ClpDHDomainParameters.pas:38 +msgid "Invalid DHDomainParameters: %s" +msgstr "" + +#. Programmer's name for it: SPUnInitialized +#. Programmer's name for it: SPUnInitialized +#: libraries/cryptolib4pascal/ClpDHParameters.pas:33 +#: libraries/cryptolib4pascal/ClpDsaParameters.pas:32 +msgid "\"P\" Cannot Be Uninitialized" +msgstr "" + +#. Programmer's name for it: SGUnInitialized +#. Programmer's name for it: SGUnInitialized +#: libraries/cryptolib4pascal/ClpDHParameters.pas:34 +#: libraries/cryptolib4pascal/ClpDsaParameters.pas:34 +msgid "\"G\" Cannot Be Uninitialized" +msgstr "" + +#. Programmer's name for it: SMustBeOddPrime +#: libraries/cryptolib4pascal/ClpDHParameters.pas:35 +msgid "Field must be an Odd Prime, \"P\"" +msgstr "" + +#. Programmer's name for it: SInvalidGeneratorRange +#: libraries/cryptolib4pascal/ClpDHParameters.pas:36 +msgid "Generator must in the Range [2, p - 2], \"G\"" +msgstr "" + +#. Programmer's name for it: SQTooBigToBeAFactor +#: libraries/cryptolib4pascal/ClpDHParameters.pas:37 +msgid "Q too Big to be a Factor of (P - 1), \"Q\"" +msgstr "" + +#. Programmer's name for it: SMTooBig +#: libraries/cryptolib4pascal/ClpDHParameters.pas:38 +msgid "M value must be < BitLength of P, \"M\"" +msgstr "" + +#. Programmer's name for it: SLErrorOne +#: libraries/cryptolib4pascal/ClpDHParameters.pas:39 +msgid "when L value specified, it must be less than bitlength(P), \"L\"" +msgstr "" + +#. Programmer's name for it: SLErrorTwo +#: libraries/cryptolib4pascal/ClpDHParameters.pas:40 +msgid "when L value specified, it may not be less than m value, \"L\"" +msgstr "" + +#. Programmer's name for it: SInvalidSubGroupFactor +#: libraries/cryptolib4pascal/ClpDHParameters.pas:41 +msgid "Subgroup factor must be >= 2, \"j\"" +msgstr "" + +#. Programmer's name for it: SXUnInitialized +#. Programmer's name for it: SXUnInitialized +#: libraries/cryptolib4pascal/ClpDHPrivateKeyParameters.pas:33 +#: libraries/cryptolib4pascal/ClpDsaPrivateKeyParameters.pas:32 +msgid "\"X\" Cannot Be Uninitialized" +msgstr "" + +#. Programmer's name for it: SYUnInitialized +#. Programmer's name for it: SYUnInitialized +#: libraries/cryptolib4pascal/ClpDHPublicKeyParameters.pas:33 +#: libraries/cryptolib4pascal/ClpDsaPublicKeyParameters.pas:32 +msgid "\"Y\" Cannot Be Uninitialized" +msgstr "" + +#. Programmer's name for it: SInvalidDHPublicKey +#: libraries/cryptolib4pascal/ClpDHPublicKeyParameters.pas:34 +msgid "Invalid DH public key \"Y\"" +msgstr "" + +#. Programmer's name for it: SInvalidYInCorrectGroup +#. Programmer's name for it: SInvalidYInCorrectGroup +#: libraries/cryptolib4pascal/ClpDHPublicKeyParameters.pas:35 +#: libraries/cryptolib4pascal/ClpDsaPublicKeyParameters.pas:33 +msgid "\"Y\" Value Does Not Appear To Be In Correct Group" +msgstr "" + +#. Programmer's name for it: SSeedNil +#. Programmer's name for it: SSeedNil +#: libraries/cryptolib4pascal/ClpDHValidationParameters.pas:30 +#: libraries/cryptolib4pascal/ClpDsaValidationParameters.pas:30 +msgid "\"Seed\" Cannot Be Nil" +msgstr "" + +#. Programmer's name for it: SSeedNil +#: libraries/cryptolib4pascal/ClpDHValidationParams.pas:32 +msgid "Seed Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SPGenCounterNil +#: libraries/cryptolib4pascal/ClpDHValidationParams.pas:33 +msgid "PGenCounter Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SInvalidDHValidationParams +#: libraries/cryptolib4pascal/ClpDHValidationParams.pas:35 +msgid "Invalid DHValidationParams: %s" +msgstr "" + +#. Programmer's name for it: SOutputBufferTooShort +#. Programmer's name for it: SOutputBufferTooShort +#. Programmer's name for it: SOutputBufferTooShort +#. Programmer's name for it: SOutputBufferTooShort +#. Programmer's name for it: SOutputBufferTooShort +#: libraries/cryptolib4pascal/ClpDigest.pas:31 +#: libraries/cryptolib4pascal/ClpHMac.pas:34 +#: libraries/hashlib4pascal/HlpBlake2B.pas:27 +#: libraries/hashlib4pascal/HlpBlake2S.pas:27 +#: libraries/hashlib4pascal/HlpSHA3.pas:29 +msgid "Output Buffer Too Short" +msgstr "" + +#. Programmer's name for it: SUnRecognizedDigest +#: libraries/cryptolib4pascal/ClpDigestUtilities.pas:43 +msgid "Digest \"%s\" not recognised." +msgstr "" + +#. Programmer's name for it: SPrivateKey +#. Programmer's name for it: SPrivateKey +#: libraries/cryptolib4pascal/ClpDsaDigestSigner.pas:41 +#: libraries/cryptolib4pascal/ClpSchnorrDigestSigner.pas:40 +msgid "Signing Requires Private Key." +msgstr "Tekenen vereist Prive Sleutel." + +#. Programmer's name for it: SPublicKey +#. Programmer's name for it: SPublicKey +#: libraries/cryptolib4pascal/ClpDsaDigestSigner.pas:42 +#: libraries/cryptolib4pascal/ClpSchnorrDigestSigner.pas:41 +msgid "Verification Requires Public Key." +msgstr "Verificatie Vereist Publieke Sleutel." + +#. Programmer's name for it: SPublicKey +#: libraries/cryptolib4pascal/ClpDsaDigestSigner.pas:44 +msgid "DSADigestSigner not Initialized for Signature Generation." +msgstr "" + +#. Programmer's name for it: SPublicKey +#: libraries/cryptolib4pascal/ClpDsaDigestSigner.pas:46 +msgid "DSADigestSigner not Initialized for Verification" +msgstr "" + +#. Programmer's name for it: SEncodingError +#. Programmer's name for it: SEncodingError +#: libraries/cryptolib4pascal/ClpDsaDigestSigner.pas:47 +#: libraries/cryptolib4pascal/ClpSchnorrDigestSigner.pas:46 +msgid "Unable to Encode Signature" +msgstr "" + +#. Programmer's name for it: SInvalidDsaParameter +#: libraries/cryptolib4pascal/ClpDsaParameter.pas:33 +msgid "Invalid DsaParameter: %s" +msgstr "" + +#. Programmer's name for it: SQUnInitialized +#: libraries/cryptolib4pascal/ClpDsaParameters.pas:33 +msgid "\"Q\" Cannot Be Uninitialized" +msgstr "" + +#: libraries/cryptolib4pascal/ClpDsaParametersGenerator.pas:44 +msgid "L Values Must be Between 1024 and 3072 and a Multiple of 1024" +msgstr "" + +#. Programmer's name for it: SInvalidNValueForSpecifiedL +#: libraries/cryptolib4pascal/ClpDsaParametersGenerator.pas:45 +msgid "N Must be \" %d \" for L = \" %d \"" +msgstr "" + +#. Programmer's name for it: SInvalidNValueForSpecifiedL_Two +#: libraries/cryptolib4pascal/ClpDsaParametersGenerator.pas:46 +msgid "N Must be \" %d \" or \" %d \" for L = \" %d \"" +msgstr "" + +#. Programmer's name for it: SInvalidNValueForSpecifiedL_Two +#: libraries/cryptolib4pascal/ClpDsaParametersGenerator.pas:48 +msgid "Digest Output Size Too Small for Value of N Which is \" %d \"" +msgstr "" + +#. Programmer's name for it: SInvalidNValueForSpecifiedL_Two +#: libraries/cryptolib4pascal/ClpDsaParametersGenerator.pas:50 +msgid "Can Only Use SHA-1 For Generating FIPS 186-2 Parameters" +msgstr "" + +#. Programmer's name for it: SInvalidNValueForSpecifiedL_Two +#: libraries/cryptolib4pascal/ClpDsaParametersGenerator.pas:52 +msgid "Size Must Be From %d - %d and a multiple of %d, \"%d\"" +msgstr "" + +#. Programmer's name for it: SDSAPrivateKeyNotFound +#: libraries/cryptolib4pascal/ClpDsaSigner.pas:44 +msgid "DSA Private Key Required For Signing" +msgstr "" + +#. Programmer's name for it: SDSAPublicKeyNotFound +#: libraries/cryptolib4pascal/ClpDsaSigner.pas:45 +msgid "DSA Public Key Required For Verification" +msgstr "" + +#: libraries/cryptolib4pascal/ClpECAlgorithms.pas:43 +msgid "" +"Point and Scalar Arrays Should be Non-Null, and of Equal, Non-Zero, Length" +msgstr "" + +#. Programmer's name for it: SInvalidPointLocation +#: libraries/cryptolib4pascal/ClpECAlgorithms.pas:44 +msgid "Point Must be on the Same Curve" +msgstr "" + +#. Programmer's name for it: SInvalidPoint +#: libraries/cryptolib4pascal/ClpECAlgorithms.pas:45 +msgid "Invalid Point, \"P\"" +msgstr "" + +#. Programmer's name for it: SInvalidResult +#: libraries/cryptolib4pascal/ClpECAlgorithms.pas:46 +msgid "Invalid Result" +msgstr "" + +#. Programmer's name for it: SInvalidResult +#: libraries/cryptolib4pascal/ClpECAlgorithms.pas:48 +#: libraries/cryptolib4pascal/ClpMultipliers.pas:46 +msgid "Fixed-Point Comb Doesn't Support Scalars Larger Than The Curve Order" +msgstr "" + +#. Programmer's name for it: SInvalidValue +#: libraries/cryptolib4pascal/ClpECC.pas:52 +msgid "Value Invalid in Fp Field Element, \" x \"" +msgstr "" + +#. Programmer's name for it: SInvalidValue2 +#: libraries/cryptolib4pascal/ClpECC.pas:53 +msgid "Value Invalid in F2m Field Element, \"x\"" +msgstr "" + +#. Programmer's name for it: SInvalidK2Value +#: libraries/cryptolib4pascal/ClpECC.pas:54 +msgid "k2 must be smaller than k3" +msgstr "" + +#. Programmer's name for it: SInvalidK2Value2 +#: libraries/cryptolib4pascal/ClpECC.pas:55 +msgid "k2 must be larger than 0" +msgstr "" + +#. Programmer's name for it: SInvalidK2Value2 +#: libraries/cryptolib4pascal/ClpECC.pas:57 +msgid "Field elements are not both instances of F2mFieldElement" +msgstr "" + +#. Programmer's name for it: SInvalidK2Value2 +#: libraries/cryptolib4pascal/ClpECC.pas:59 +msgid "Field elements are not elements of the same field F2m" +msgstr "" + +#. Programmer's name for it: SInvalidK2Value2 +#: libraries/cryptolib4pascal/ClpECC.pas:61 +msgid "One of the F2m field elements has incorrect representation" +msgstr "" + +#. Programmer's name for it: SEvenValue +#: libraries/cryptolib4pascal/ClpECC.pas:62 +msgid "Even Value of Q" +msgstr "" + +#. Programmer's name for it: STraceInternalErrorCalculation +#: libraries/cryptolib4pascal/ClpECC.pas:63 +msgid "Internal Error in Trace Calculation" +msgstr "" + +#. Programmer's name for it: SHalfTraceUndefinedForM +#: libraries/cryptolib4pascal/ClpECC.pas:64 +msgid "Half-Trace Only Defined For Odd M" +msgstr "" + +#. Programmer's name for it: SUnSupportedCoordinateSystem +#: libraries/cryptolib4pascal/ClpECC.pas:65 +msgid "UnSupported Coordinate System" +msgstr "" + +#. Programmer's name for it: SCurrentCurve +#: libraries/cryptolib4pascal/ClpECC.pas:66 +msgid "Implementation returned Current Curve" +msgstr "" + +#. Programmer's name for it: SInvalidPointCoordinates +#: libraries/cryptolib4pascal/ClpECC.pas:67 +msgid "Invalid Point Coordinates" +msgstr "" + +#. Programmer's name for it: SInvalidAffineCoordinates +#: libraries/cryptolib4pascal/ClpECC.pas:68 +msgid "not valid for affine coordinates, \"iso\"" +msgstr "" + +#. Programmer's name for it: SInvalidPointOnCurve +#: libraries/cryptolib4pascal/ClpECC.pas:69 +msgid "must be non-null and on this curve, \"point\"" +msgstr "" + +#. Programmer's name for it: SInvalidPointOnCurve2 +#: libraries/cryptolib4pascal/ClpECC.pas:70 +msgid "Entries must be null or on this curve, \"points\"" +msgstr "" + +#. Programmer's name for it: SPointsNil +#: libraries/cryptolib4pascal/ClpECC.pas:71 +msgid "points" +msgstr "" + +#. Programmer's name for it: SInvalidRangeSpecified +#: libraries/cryptolib4pascal/ClpECC.pas:72 +msgid "Invalid Range Specified\", \"points\"" +msgstr "" + +#. Programmer's name for it: SInvalidPointCompression +#: libraries/cryptolib4pascal/ClpECC.pas:73 +msgid "Invalid Point Compression" +msgstr "" + +#. Programmer's name for it: SInvalidK1 +#: libraries/cryptolib4pascal/ClpECC.pas:74 +msgid "k1 must be > 0" +msgstr "" + +#. Programmer's name for it: SInvalidK3 +#: libraries/cryptolib4pascal/ClpECC.pas:75 +msgid "k3 must be 0 if k2 == 0" +msgstr "" + +#. Programmer's name for it: SK2K1MisMatch +#: libraries/cryptolib4pascal/ClpECC.pas:76 +msgid "k2 must be > k1" +msgstr "" + +#. Programmer's name for it: SK3K2Mismatch +#: libraries/cryptolib4pascal/ClpECC.pas:77 +msgid "k3 must be > k2" +msgstr "" + +#. Programmer's name for it: SInvalidInfinityEncoding +#: libraries/cryptolib4pascal/ClpECC.pas:78 +msgid "Invalid Infinity Encoding, \"encoded\"" +msgstr "" + +#. Programmer's name for it: SInvalidPointEncoding +#: libraries/cryptolib4pascal/ClpECC.pas:79 +msgid "Invalid Point Encoding %u" +msgstr "" + +#. Programmer's name for it: SInvalidPointEncoding +#: libraries/cryptolib4pascal/ClpECC.pas:81 +msgid "Incorrect Length for infinity encoding\", \"encoded\"" +msgstr "" + +#. Programmer's name for it: SInvalidPointEncoding +#: libraries/cryptolib4pascal/ClpECC.pas:83 +msgid "Incorrect Length for Compressed Encoding\", \"encoded\"" +msgstr "" + +#. Programmer's name for it: SInvalidPoint +#: libraries/cryptolib4pascal/ClpECC.pas:84 +msgid "Invalid Point" +msgstr "" + +#. Programmer's name for it: SInvalidPoint +#: libraries/cryptolib4pascal/ClpECC.pas:86 +msgid "Incorrect Length for UnCompressed Encoding\", \"encoded\"" +msgstr "" + +#. Programmer's name for it: SInvalidPoint +#: libraries/cryptolib4pascal/ClpECC.pas:88 +msgid "Incorrect Length for Hybrid Encoding\", \"encoded\"" +msgstr "" + +#. Programmer's name for it: SInvalidPoint +#: libraries/cryptolib4pascal/ClpECC.pas:90 +msgid "Inconsistent Y Coordinate in Hybrid Encoding\", \"encoded\"" +msgstr "" + +#. Programmer's name for it: SUnknownCoordSystem +#: libraries/cryptolib4pascal/ClpECC.pas:91 +msgid "Unknown Coordinate System" +msgstr "" + +#. Programmer's name for it: SPointNotInNormalForm +#: libraries/cryptolib4pascal/ClpECC.pas:92 +msgid "Point not in Normal Form" +msgstr "" + +#. Programmer's name for it: SNotProjectiveCoordSystem +#: libraries/cryptolib4pascal/ClpECC.pas:93 +msgid "Not a Projective Coordinate System" +msgstr "" + +#. Programmer's name for it: SCannotBeNegative +#: libraries/cryptolib4pascal/ClpECC.pas:94 +msgid "Cannot be Negative, \"e\"" +msgstr "" + +#. Programmer's name for it: SNilFieldElement +#: libraries/cryptolib4pascal/ClpECC.pas:95 +msgid "Exactly one of the Field Elements is Nil" +msgstr "" + +#. Programmer's name for it: SUnsupportedOperation +#: libraries/cryptolib4pascal/ClpECC.pas:96 +msgid "Constant-time Lookup not Supported" +msgstr "" + +#. Programmer's name for it: SInvalidRange +#: libraries/cryptolib4pascal/ClpECCompUtilities.pas:43 +msgid "Must be in the Range [2, 16], \"width\"" +msgstr "" + +#. Programmer's name for it: SInvalidRange2 +#: libraries/cryptolib4pascal/ClpECCompUtilities.pas:44 +msgid "Must be in the Range [2, 8], \"width\"" +msgstr "" + +#. Programmer's name for it: SWrongDomainParameter +#: libraries/cryptolib4pascal/ClpECDHBasicAgreement.pas:39 +msgid "ECDH Public Key has Wrong Domain Parameters" +msgstr "" + +#. Programmer's name for it: SInvalidAgreementValue +#: libraries/cryptolib4pascal/ClpECDHBasicAgreement.pas:40 +msgid "Infinity is not a Valid Agreement Value for ECDH" +msgstr "" + +#. Programmer's name for it: SInfinityInvalidPublicKey +#: libraries/cryptolib4pascal/ClpECDHBasicAgreement.pas:41 +msgid "Infinity is not a Valid Public Key for ECDH" +msgstr "" + +#. Programmer's name for it: SWrongDomainParameter +#: libraries/cryptolib4pascal/ClpECDHCBasicAgreement.pas:39 +msgid "ECDHC Public Key has Wrong Domain Parameters" +msgstr "" + +#. Programmer's name for it: SInvalidAgreementValue +#: libraries/cryptolib4pascal/ClpECDHCBasicAgreement.pas:40 +msgid "Infinity is not a Valid Agreement Value for ECDHC" +msgstr "" + +#. Programmer's name for it: SInfinityInvalidPublicKey +#: libraries/cryptolib4pascal/ClpECDHCBasicAgreement.pas:41 +msgid "Infinity is not a Valid Public Key for ECDHC" +msgstr "" + +#. Programmer's name for it: SCurveNil +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:33 +msgid "Curve Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SScalarNil +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:34 +msgid "Scalar Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SBigIntegerNotInitialized +#. Programmer's name for it: SBigIntegerNotInitialized +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:36 +#: libraries/cryptolib4pascal/ClpECPrivateKeyParameters.pas:32 +msgid "BigInteger Not Initialized \"%s\"" +msgstr "" + +#. Programmer's name for it: SQInfinity +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:38 +msgid "Point at Infinity \"Q\"" +msgstr "" + +#. Programmer's name for it: SQPointNotOnCurve +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:39 +msgid "Point Not on Curve \"Q\"" +msgstr "" + +#. Programmer's name for it: SScalarInvalidRange +#: libraries/cryptolib4pascal/ClpECDomainParameters.pas:40 +msgid "Scalar is not in the Interval [1, n - 1]" +msgstr "" + +#. Programmer's name for it: SECPublicKeyNotFound +#. Programmer's name for it: SECPublicKeyNotFound +#. Programmer's name for it: SECPublicKeyNotFound +#: libraries/cryptolib4pascal/ClpECDsaSigner.pas:47 +#: libraries/cryptolib4pascal/ClpECNRSigner.pas:47 +#: libraries/cryptolib4pascal/ClpECSchnorrSipaSigner.pas:45 +msgid "EC Public Key Required for Verification" +msgstr "" + +#. Programmer's name for it: SECPrivateKeyNotFound +#. Programmer's name for it: SECPrivateKeyNotFound +#. Programmer's name for it: SECPrivateKeyNotFound +#: libraries/cryptolib4pascal/ClpECDsaSigner.pas:48 +#: libraries/cryptolib4pascal/ClpECNRSigner.pas:48 +#: libraries/cryptolib4pascal/ClpECSchnorrSipaSigner.pas:46 +msgid "EC Private Key Required for Signing" +msgstr "" + +#. Programmer's name for it: SSenderPublicKeyInvalid +#: libraries/cryptolib4pascal/ClpECIESPublicKeyParser.pas:35 +msgid "Sender's Public Key Invalid." +msgstr "Afzender zijn Publieke Sleutel ongeldig." + +#. Programmer's name for it: SSenderPublicKeyInvalid +#: libraries/cryptolib4pascal/ClpECIESPublicKeyParser.pas:37 +msgid "Sender's Public Key has Invalid Point Encoding \"%x\"" +msgstr "" +"Afzender zijn Publieke Sleutel heeft een ongeldige Punt Decodering \"%x\"" + +#. Programmer's name for it: SAlgorithmNil +#. Programmer's name for it: SAlgorithmNil +#: libraries/cryptolib4pascal/ClpECKeyPairGenerator.pas:56 +#: libraries/cryptolib4pascal/ClpECKeyParameters.pas:39 +msgid "Algorithm Cannot be Empty" +msgstr "" + +#. Programmer's name for it: SInvalidKeySize +#: libraries/cryptolib4pascal/ClpECKeyPairGenerator.pas:57 +msgid "Unknown Key Size \"%d\"" +msgstr "" + +#. Programmer's name for it: SParameterNil +#: libraries/cryptolib4pascal/ClpECKeyParameters.pas:40 +msgid "Parameter Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SUnRecognizedAlgorithm +#: libraries/cryptolib4pascal/ClpECKeyParameters.pas:41 +msgid "Unrecognised Algorithm: \" %s, \"Algorithm" +msgstr "" + +#. Programmer's name for it: SNotInitializedForSigning +#. Programmer's name for it: SNotInitializedForSigning +#: libraries/cryptolib4pascal/ClpECNRSigner.pas:49 +#: libraries/cryptolib4pascal/ClpECSchnorrSipaSigner.pas:47 +msgid "Not Initialised For Signing" +msgstr "" + +#. Programmer's name for it: SNotInitializedForVerifying +#. Programmer's name for it: SNotInitializedForVerifying +#: libraries/cryptolib4pascal/ClpECNRSigner.pas:50 +#: libraries/cryptolib4pascal/ClpECSchnorrSipaSigner.pas:48 +msgid "Not Initialised For Verifying" +msgstr "" + +#. Programmer's name for it: SNotInitializedForVerifying +#: libraries/cryptolib4pascal/ClpECNRSigner.pas:52 +msgid "Not Initialised For Verifying/Recovery" +msgstr "" + +#. Programmer's name for it: SInputTooLargeForECNRKey +#: libraries/cryptolib4pascal/ClpECNRSigner.pas:53 +msgid "Input Too Large For ECNR Key." +msgstr "" + +#. Programmer's name for it: SSignatureGenerationError +#: libraries/cryptolib4pascal/ClpECSchnorrSipaSigner.pas:49 +msgid "An Error Occurred During Signature Generation" +msgstr "" + +#. Programmer's name for it: SSignatureGenerationError +#: libraries/cryptolib4pascal/ClpECSchnorrSipaSigner.pas:51 +msgid "" +"Only FP (Prime Field) Curves are Allowed for This Schnorr Implementation" +msgstr "" + +#. Programmer's name for it: SInvalidCtx +#: libraries/cryptolib4pascal/ClpEd25519.pas:40 +msgid "ctx" +msgstr "" + +#. Programmer's name for it: SDigestError +#: libraries/cryptolib4pascal/ClpEd25519.pas:41 +msgid "Digest Produced Insufficient Data" +msgstr "" + +#. Programmer's name for it: SEOFInPrivateKey +#: libraries/cryptolib4pascal/ClpEd25519Blake2BPrivateKeyParameters.pas:38 +msgid "EOF encountered in middle of Ed25519Blake2B private key" +msgstr "" + +#. Programmer's name for it: SUnsupportedAlgorithm +#. Programmer's name for it: SUnsupportedAlgorithm +#: libraries/cryptolib4pascal/ClpEd25519Blake2BPrivateKeyParameters.pas:39 +#: libraries/cryptolib4pascal/ClpEd25519PrivateKeyParameters.pas:39 +msgid "Unsupported Algorithm" +msgstr "" + +#. Programmer's name for it: SCtxNotNil +#. Programmer's name for it: SCtxNotNil +#: libraries/cryptolib4pascal/ClpEd25519Blake2BPrivateKeyParameters.pas:40 +#: libraries/cryptolib4pascal/ClpEd25519PrivateKeyParameters.pas:40 +msgid "Ctx must be Nil for Ed25519 Algorithm" +msgstr "" + +#. Programmer's name for it: SMsgLen +#. Programmer's name for it: SMsgLen +#: libraries/cryptolib4pascal/ClpEd25519Blake2BPrivateKeyParameters.pas:41 +#: libraries/cryptolib4pascal/ClpEd25519PrivateKeyParameters.pas:41 +msgid "MsgLen must be Equal to \"PreHashSize\" for Ed25519ph Algorithm" +msgstr "" + +#. Programmer's name for it: SEOFInPublicKey +#: libraries/cryptolib4pascal/ClpEd25519Blake2BPublicKeyParameters.pas:34 +msgid "EOF encountered in middle of Ed25519Blake2B public key" +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519Blake2BSigner.pas:37 +msgid "Ed25519Blake2BSigner not Initialised for Signature Generation." +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519Blake2BSigner.pas:39 +msgid "Ed25519Blake2BSigner not Initialised for Verification" +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519CtxBlake2BSigner.pas:37 +msgid "Ed25519CtxBlake2BSigner not Initialised for Signature Generation." +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519CtxBlake2BSigner.pas:39 +msgid "Ed25519CtxBlake2BSigner not Initialised for Verification" +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519CtxSigner.pas:37 +msgid "Ed25519CtxSigner not Initialised for Signature Generation." +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519CtxSigner.pas:39 +msgid "Ed25519CtxSigner not Initialised for Verification" +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519PhBlake2BSigner.pas:37 +msgid "Ed25519PhBlake2BSigner not Initialised for Signature Generation." +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519PhBlake2BSigner.pas:39 +msgid "Ed25519PhBlake2BSigner not Initialised for Verification" +msgstr "" + +#. Programmer's name for it: SPreHashDigestFailed +#. Programmer's name for it: SPreHashDigestFailed +#: libraries/cryptolib4pascal/ClpEd25519PhBlake2BSigner.pas:40 +#: libraries/cryptolib4pascal/ClpEd25519PhSigner.pas:40 +msgid "PreHash Digest Failed" +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519PhSigner.pas:37 +msgid "Ed25519PhSigner not Initialised for Signature Generation." +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519PhSigner.pas:39 +msgid "Ed25519PhSigner not Initialised for Verification" +msgstr "" + +#. Programmer's name for it: SEOFInPrivateKey +#: libraries/cryptolib4pascal/ClpEd25519PrivateKeyParameters.pas:38 +msgid "EOF encountered in middle of Ed25519 private key" +msgstr "" + +#. Programmer's name for it: SEOFInPublicKey +#: libraries/cryptolib4pascal/ClpEd25519PublicKeyParameters.pas:34 +msgid "EOF encountered in middle of Ed25519 public key" +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519Signer.pas:37 +msgid "Ed25519Signer not Initialised for Signature Generation." +msgstr "" + +#: libraries/cryptolib4pascal/ClpEd25519Signer.pas:39 +msgid "Ed25519Signer not Initialised for Verification" +msgstr "" + +#. Programmer's name for it: SInvalidCharacteristic +#: libraries/cryptolib4pascal/ClpFiniteFields.pas:35 +msgid "Must be >= 2 , \" characteristic \"" +msgstr "" + +#. Programmer's name for it: SInvalidCharacteristic +#: libraries/cryptolib4pascal/ClpFiniteFields.pas:37 +msgid "" +"Irreducible polynomials in GF(2) must have constant term, \"exponents\"" +msgstr "" + +#. Programmer's name for it: SInvalidCharacteristic +#: libraries/cryptolib4pascal/ClpFiniteFields.pas:39 +msgid "Polynomial Exponents must be montonically increasing\", \"exponents\"" +msgstr "" + +#. Programmer's name for it: SKeyGeneratorAlgorithmNotRecognised +#: libraries/cryptolib4pascal/ClpGeneratorUtilities.pas:52 +msgid "KeyGenerator \"%s\" not Recognised." +msgstr "" + +#. Programmer's name for it: SKeyGeneratorAlgorithmNotRecognised +#: libraries/cryptolib4pascal/ClpGeneratorUtilities.pas:54 +msgid "KeyGenerator \"%s\" ( \"%s\" ) not Supported." +msgstr "" + +#. Programmer's name for it: SKeyGeneratorAlgorithmNotRecognised +#: libraries/cryptolib4pascal/ClpGeneratorUtilities.pas:56 +msgid "KeyPairGenerator \"%s\" not Recognised." +msgstr "" + +#. Programmer's name for it: SKeyGeneratorAlgorithmNotRecognised +#: libraries/cryptolib4pascal/ClpGeneratorUtilities.pas:58 +msgid "KeyPairGenerator \"%s\" ( \"%s\" ) not Supported." +msgstr "" + +#. Programmer's name for it: SSizeTooBigHKDF +#: libraries/cryptolib4pascal/ClpHkdfBytesGenerator.pas:39 +msgid "HKDF Cannot Generate More Than 255 Blocks of HashLen Size" +msgstr "" + +#. Programmer's name for it: SSizeTooBigHKDF2 +#: libraries/cryptolib4pascal/ClpHkdfBytesGenerator.pas:40 +msgid "HKDF May Only Be Used For 255 * HashLen Bytes of Output" +msgstr "" + +#. Programmer's name for it: SSizeTooBigHKDF2 +#: libraries/cryptolib4pascal/ClpHkdfBytesGenerator.pas:42 +msgid "HKDF Parameters Required For \"HkdfBytesGenerator\", \"parameters\"" +msgstr "" + +#. Programmer's name for it: SIKMNil +#: libraries/cryptolib4pascal/ClpHkdfParameters.pas:30 +msgid "\"ikm\" is Nil" +msgstr "" + +#. Programmer's name for it: SUnSupportedOperation +#. Programmer's name for it: SUnSupportedOperation +#: libraries/cryptolib4pascal/ClpHMacDsaKCalculator.pas:42 +#: libraries/cryptolib4pascal/ClpRandomDsaKCalculator.pas:34 +msgid "Operation not Supported" +msgstr "" + +#: libraries/cryptolib4pascal/ClpIESCipher.pas:54 +msgid "Must be Passed Recipient's Public EC Key for Encryption" +msgstr "" + +#: libraries/cryptolib4pascal/ClpIESCipher.pas:56 +msgid "Must be Passed Recipient's Private EC Key for Decryption" +msgstr "" + +#. Programmer's name for it: SIAlgorithmParameterSpecNil +#: libraries/cryptolib4pascal/ClpIESCipher.pas:57 +msgid "Parameter Spec Cannot Be Nil" +msgstr "" + +#. Programmer's name for it: SUnableToProcessBlock +#: libraries/cryptolib4pascal/ClpIESCipher.pas:58 +msgid "Unable to Process Block. \"%s\"" +msgstr "" + +#. Programmer's name for it: SIESParameterSpecError +#: libraries/cryptolib4pascal/ClpIESCipher.pas:59 +msgid "Must be Passed IES Parameter Spec" +msgstr "" + +#. Programmer's name for it: SNonceInvalidLength +#: libraries/cryptolib4pascal/ClpIESCipher.pas:60 +msgid "Nonce in IES Parameters Needs to be \"%s\" Bytes Long" +msgstr "" + +#: libraries/cryptolib4pascal/ClpIESEngine.pas:53 +#: libraries/cryptolib4pascal/ClpPascalCoinIESEngine.pas:45 +msgid "Unable to Recover Ephemeral Public Key: \"%s\"" +msgstr "" + +#: libraries/cryptolib4pascal/ClpIESEngine.pas:55 +#: libraries/cryptolib4pascal/ClpPascalCoinIESEngine.pas:47 +msgid "Length of Input Must be Greater than the MAC and V Combined" +msgstr "" + +#. Programmer's name for it: SInvalidMAC +#. Programmer's name for it: SInvalidMAC +#: libraries/cryptolib4pascal/ClpIESEngine.pas:56 +#: libraries/cryptolib4pascal/ClpPascalCoinIESEngine.pas:48 +msgid "Invalid MAC" +msgstr "" + +#. Programmer's name for it: SRandomNil +#: libraries/cryptolib4pascal/ClpKeyGenerationParameters.pas:30 +msgid "Random Class Instance Can't Be Nil" +msgstr "" + +#. Programmer's name for it: SInvalidStrength +#: libraries/cryptolib4pascal/ClpKeyGenerationParameters.pas:31 +msgid "Strength Must Be Greater Than Zero But Was Given %d" +msgstr "" + +#. Programmer's name for it: SKeyNil +#: libraries/cryptolib4pascal/ClpKeyParameter.pas:31 +msgid "Key Cannot be Nil" +msgstr "Sleutel mag niet leeg zijn" + +#. Programmer's name for it: SInvalidKeyOffSet +#: libraries/cryptolib4pascal/ClpKeyParameter.pas:32 +msgid "Invalid Key OffSet" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/cryptolib4pascal/ClpKeyParameter.pas:33 +msgid "Invalid Key Length" +msgstr "" + +#. Programmer's name for it: SInvalidF2MFieldValue +#: libraries/cryptolib4pascal/ClpLongArray.pas:34 +msgid "Invalid F2M Field value, \"bigInt\"" +msgstr "" + +#. Programmer's name for it: SUnRecognizedMac +#: libraries/cryptolib4pascal/ClpMacUtilities.pas:40 +msgid "Mac \"%s\" not recognised." +msgstr "" + +#. Programmer's name for it: SCannotBeZero +#: libraries/cryptolib4pascal/ClpMod.pas:35 +msgid "cannot be 0, \"x\"" +msgstr "" + +#. Programmer's name for it: SCurveUnknownGroupOrder +#: libraries/cryptolib4pascal/ClpMultipliers.pas:47 +msgid "Need Curve With Known Group Order, \"curve\"" +msgstr "" + +#. Programmer's name for it: SInCompatiblePoint +#: libraries/cryptolib4pascal/ClpMultipliers.pas:48 +msgid "Only AbstractF2mPoint can be used in WTauNafMultiplier" +msgstr "" + +#: libraries/cryptolib4pascal/ClpOSRandom.pas:72 +msgid "" +"An Error Occured while generating random data using MS Windows Cryptography " +"API." +msgstr "" + +#: libraries/cryptolib4pascal/ClpOSRandom.pas:76 +msgid "" +"An Error Occured while generating random data using SecRandomCopyBytes API." +msgstr "" + +#: libraries/cryptolib4pascal/ClpOSRandom.pas:80 +#: libraries/cryptolib4pascal/ClpOSRandom.pas:84 +msgid "An Error Occured while generating random data using getRandom API" +msgstr "" + +#: libraries/cryptolib4pascal/ClpOSRandom.pas:88 +msgid "" +"An Error Occured while generating random data using arc4random_buf API." +msgstr "" + +#. Programmer's name for it: SIncompleteLastBlockInDecryption +#: libraries/cryptolib4pascal/ClpPaddedBufferedBlockCipher.pas:41 +msgid "Last Block Incomplete in Decryption" +msgstr "" + +#. Programmer's name for it: SCorruptedPadBlock +#: libraries/cryptolib4pascal/ClpPaddingModes.pas:32 +msgid "Pad Block Corrupted" +msgstr "" + +#. Programmer's name for it: SIVNil +#: libraries/cryptolib4pascal/ClpParametersWithIV.pas:31 +msgid "IV Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SParameters +#: libraries/cryptolib4pascal/ClpParametersWithRandom.pas:32 +msgid "Parameters" +msgstr "" + +#. Programmer's name for it: SRandom +#: libraries/cryptolib4pascal/ClpParametersWithRandom.pas:33 +msgid "Random" +msgstr "" + +#. Programmer's name for it: SAlgorithmNotRecognised +#: libraries/cryptolib4pascal/ClpParameterUtilities.pas:38 +msgid "Algorithm \"%s\" not Recognised." +msgstr "" + +#. Programmer's name for it: SKDFParameterNotFound +#: libraries/cryptolib4pascal/ClpPascalCoinECIESKdfBytesGenerator.pas:37 +msgid "" +"Specified Hash Cannot Produce Sufficient Data for the Specified Operation." +msgstr "" + +#. Programmer's name for it: SCipherCannotbeNilInThisMode +#: libraries/cryptolib4pascal/ClpPascalCoinIESEngine.pas:49 +msgid "Cipher Cannot be Nil in This Mode." +msgstr "" + +#. Programmer's name for it: SBufferNil +#: libraries/cryptolib4pascal/ClpRandom.pas:30 +msgid "Buffer Cannot be Nil" +msgstr "" + +#. Programmer's name for it: SMaxValueNegative +#: libraries/cryptolib4pascal/ClpRandom.pas:31 +msgid "maxValue Must be Positive" +msgstr "max Waarde Moet positief zijn" + +#. Programmer's name for it: SInvalidMinValue +#: libraries/cryptolib4pascal/ClpRandom.pas:32 +msgid "minValue Cannot be Greater Than maxValue" +msgstr "" + +#. Programmer's name for it: SUnknownAlgorithm +#: libraries/cryptolib4pascal/ClpRandomNumberGenerator.pas:31 +msgid "Unknown Random Generation Algorithm Requested" +msgstr "" + +#. Programmer's name for it: SUnknownAlgorithm +#: libraries/cryptolib4pascal/ClpRandomNumberGenerator.pas:33 +msgid "Random Number Generator Output Buffer Cannot Be Nil" +msgstr "" + +#. Programmer's name for it: SUnsupportedBlock +#: libraries/cryptolib4pascal/ClpRijndaelEngine.pas:37 +msgid "Unknown Blocksize to Rijndael" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/cryptolib4pascal/ClpRijndaelEngine.pas:38 +msgid "Key Length not 128/160/192/224/256 bits." +msgstr "Sleutel Lengte niet 128/192/224/256 bits." + +#. Programmer's name for it: SRijndaelEngineNotInitialised +#: libraries/cryptolib4pascal/ClpRijndaelEngine.pas:39 +msgid "Rijndael Engine not Initialised" +msgstr "" + +#. Programmer's name for it: SRijndaelEngineNotInitialised +#: libraries/cryptolib4pascal/ClpRijndaelEngine.pas:41 +msgid "Invalid Parameter Passed to Rijndael Init - \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidRound +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:38 +msgid "\"rounds\" Must be a Positive, Even Number" +msgstr "" + +#. Programmer's name for it: SInvalidKeySize +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:39 +msgid "%s Requires 128 bit or 256 bit key" +msgstr "" + +#. Programmer's name for it: SMaxByteExceeded +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:40 +msgid "2^70 Byte Limit per IV; Change IV" +msgstr "" + +#. Programmer's name for it: SMaxByteExceededTwo +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:41 +msgid "2^70 byte limit per IV would be exceeded; Change IV" +msgstr "" + +#. Programmer's name for it: SEngineNotInitialized +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:42 +msgid "%s not Initialized" +msgstr "" + +#. Programmer's name for it: SRoundsMustbeEven +#. Programmer's name for it: SRoundsMustBeEven +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:45 +#: libraries/hashlib4pascal/HlpPBKDF_ScryptNotBuildInAdapter.pas:37 +msgid "Number of Rounds Must be Even" +msgstr "" + +#. Programmer's name for it: SIVRequired +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:47 +msgid "%s Init Requires an IV, \"parameters\"" +msgstr "" + +#. Programmer's name for it: SInvalidIV +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:48 +msgid "%s Requires exactly %d bytes of IV" +msgstr "" + +#. Programmer's name for it: SInvalidIV +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:50 +msgid "%s Init Parameters must Contain a KeyParameter (or null for Re-Init)" +msgstr "" + +#. Programmer's name for it: SInvalidIV +#: libraries/cryptolib4pascal/ClpSalsa20Engine.pas:52 +msgid "KeyParameter can not be null for First Initialisation" +msgstr "" + +#. Programmer's name for it: SInvalidParameters +#: libraries/cryptolib4pascal/ClpScalarSplitParameters.pas:30 +msgid "\"%s\" must consist of exactly 2 (initialized) values" +msgstr "" + +#. Programmer's name for it: SPublicKey +#: libraries/cryptolib4pascal/ClpSchnorrDigestSigner.pas:43 +msgid "SchnorrDigestSigner not Initialized for Signature Generation." +msgstr "" + +#. Programmer's name for it: SPublicKey +#: libraries/cryptolib4pascal/ClpSchnorrDigestSigner.pas:45 +msgid "SchnorrDigestSigner not Initialized for Verification" +msgstr "" + +#: libraries/cryptolib4pascal/ClpSecP256K1Custom.pas:40 +msgid "Value Invalid for SecP256K1FieldElement \"%s\"" +msgstr "" + +#: libraries/cryptolib4pascal/ClpSecP256R1Custom.pas:40 +msgid "Value Invalid for SecP256R1FieldElement \"%s\"" +msgstr "" + +#: libraries/cryptolib4pascal/ClpSecP384R1Custom.pas:40 +msgid "Value Invalid for SecP384R1FieldElement \"%s\"" +msgstr "" + +#: libraries/cryptolib4pascal/ClpSecP521R1Custom.pas:40 +msgid "Value Invalid for SecP521R1FieldElement \"%s\"" +msgstr "" + +#: libraries/cryptolib4pascal/ClpSecT283Custom.pas:41 +msgid "Value Invalid for SecT283FieldElement \"%s\"" +msgstr "" + +#. Programmer's name for it: SUnRecognisedPRNGAlgorithm +#: libraries/cryptolib4pascal/ClpSecureRandom.pas:43 +msgid "Unrecognised PRNG Algorithm: %s \"algorithm\"" +msgstr "" + +#. Programmer's name for it: SCannotBeNegative +#: libraries/cryptolib4pascal/ClpSecureRandom.pas:44 +msgid "Cannot be Negative \"maxValue\"" +msgstr "" + +#. Programmer's name for it: SInvalidMaxValue +#: libraries/cryptolib4pascal/ClpSecureRandom.pas:45 +msgid "maxValue Cannot be Less Than minValue" +msgstr "" + +#. Programmer's name for it: SMalformedSignature +#: libraries/cryptolib4pascal/ClpSignersEncodings.pas:35 +msgid "Malformed signature, \"%s\"" +msgstr "" + +#. Programmer's name for it: SValueOutOfRange +#: libraries/cryptolib4pascal/ClpSignersEncodings.pas:36 +msgid "Value out of range, \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidEncodingLength +#: libraries/cryptolib4pascal/ClpSignersEncodings.pas:37 +msgid "Encoding has incorrect length, \"%s\"" +msgstr "" + +#. Programmer's name for it: SUnRecognizedAlgorithm +#: libraries/cryptolib4pascal/ClpSignerUtilities.pas:71 +msgid "Signer \" %s \" not recognised." +msgstr "Ondertekenaar \" %s \" niet bekend." + +#. Programmer's name for it: SInvalidScale +#. Programmer's name for it: SNegativeScale +#: libraries/cryptolib4pascal/ClpSimpleBigDecimal.pas:29 +#: libraries/cryptolib4pascal/ClpSimpleBigDecimal.pas:32 +msgid "Scale may not be Negative" +msgstr "" + +#. Programmer's name for it: SInvalidScale +#: libraries/cryptolib4pascal/ClpSimpleBigDecimal.pas:31 +msgid "Only SimpleBigDecimal of Same Scale Allowed in Arithmetic Operations" +msgstr "" + +#. Programmer's name for it: SSpeckEngineNotInitialised +#. Programmer's name for it: SSpeckLegacyEngineNotInitialised +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:35 +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:35 +msgid "%s Engine not Initialised" +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:38 +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:38 +msgid "Invalid Argument Encountered." +msgstr "" + +#. Programmer's name for it: SInvalidParameterSpeckInit +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:39 +msgid "Invalid Parameter Passed to Speck Init - \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidParameterSpeckInit +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:41 +msgid "Speck32 requires a key of 64 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidParameterSpeckInit +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:43 +msgid "Speck48 requires a key of 72 or 96 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidParameterSpeckInit +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:45 +msgid "Speck64 requires a key of 96 or 128 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidParameterSpeckInit +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:47 +msgid "Speck96 requires a key of 96 or 144 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidParameterSpeckInit +#: libraries/cryptolib4pascal/ClpSpeckEngine.pas:49 +msgid "" +"Speck128 requires a key of 128, 192 or 256 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:40 +msgid "Invalid Parameter Passed to SpeckLegacy Init - \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:42 +msgid "Speck32Legacy requires a key of 64 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:44 +msgid "" +"Speck48Legacy requires a key of 72 or 96 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:46 +msgid "" +"Speck64Legacy requires a key of 96 or 128 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:48 +msgid "" +"Speck96Legacy requires a key of 96 or 144 bits but input was \"%d\" bits." +msgstr "" + +#. Programmer's name for it: SInvalidArgumentEncountered +#: libraries/cryptolib4pascal/ClpSpeckLegacyEngine.pas:50 +msgid "" +"Speck128Legacy requires a key of 128, 192 or 256 bits but input was \"%d\" " +"bits." +msgstr "" + +#. Programmer's name for it: SInvalidMU +#: libraries/cryptolib4pascal/ClpTnaf.pas:34 +msgid "mu must be 1 or -1" +msgstr "" + +#. Programmer's name for it: SDifferentScales +#: libraries/cryptolib4pascal/ClpTnaf.pas:35 +msgid "lambda0 and lambda1 do not have same scale" +msgstr "" + +#. Programmer's name for it: SNoKoblitzCurve +#: libraries/cryptolib4pascal/ClpTnaf.pas:36 +msgid "No Koblitz curve (ABC), TNAF multiplication not possible" +msgstr "" + +#. Programmer's name for it: SNotKoblitzCurve +#: libraries/cryptolib4pascal/ClpTnaf.pas:37 +msgid "si is defined for Koblitz curves only" +msgstr "" + +#. Programmer's name for it: SInvalidCoFactor +#: libraries/cryptolib4pascal/ClpTnaf.pas:38 +msgid "h (Cofactor) must be 2 or 4" +msgstr "" + +#: libraries/cryptolib4pascal/ClpX25519Agreement.pas:36 +msgid "The Init Parameter does not Contain the Private Key" +msgstr "De Begin Parameter Bevat niet de Prive Sleutel" + +#. Programmer's name for it: SEOFInPrivateKey +#: libraries/cryptolib4pascal/ClpX25519PrivateKeyParameters.pas:37 +msgid "EOF encountered in middle of X25519 private key" +msgstr "" + +#. Programmer's name for it: SAgreementCalculationFailed +#: libraries/cryptolib4pascal/ClpX25519PrivateKeyParameters.pas:38 +msgid "X25519 Agreement Failed" +msgstr "" + +#. Programmer's name for it: SEOFInPublicKey +#: libraries/cryptolib4pascal/ClpX25519PublicKeyParameters.pas:34 +msgid "EOF encountered in middle of X25519 public key" +msgstr "" + +#. Programmer's name for it: SInconsistentKValues +#: libraries/cryptolib4pascal/ClpX9ECC.pas:36 +msgid "Inconsistent K Values" +msgstr "" + +#. Programmer's name for it: SCurveNil +#: libraries/cryptolib4pascal/ClpX9ECC.pas:37 +msgid "Curve" +msgstr "" + +#. Programmer's name for it: SNotImplementedECCurve +#: libraries/cryptolib4pascal/ClpX9ECC.pas:38 +msgid "This Type of ECCurve is not Implemented" +msgstr "" + +#. Programmer's name for it: SFieldIDNil +#: libraries/cryptolib4pascal/ClpX9ECC.pas:39 +msgid "FieldID" +msgstr "" + +#. Programmer's name for it: SSeqNil +#: libraries/cryptolib4pascal/ClpX9ECC.pas:40 +msgid "Seq" +msgstr "" + +#. Programmer's name for it: SUnSupportedCurveOne +#: libraries/cryptolib4pascal/ClpX9ECParameters.pas:38 +msgid "Only trinomial and pentomial curves are supported" +msgstr "" + +#. Programmer's name for it: SUnSupportedCurveTwo +#: libraries/cryptolib4pascal/ClpX9ECParameters.pas:39 +msgid "\"curve\" is of an unsupported type" +msgstr "" + +#. Programmer's name for it: SBadVersion +#: libraries/cryptolib4pascal/ClpX9ECParameters.pas:40 +msgid "Bad Version in X9ECParameters" +msgstr "" + +#. Programmer's name for it: SNullKeyReInit +#: libraries/cryptolib4pascal/ClpXSalsa20Engine.pas:33 +msgid "%s Doesn't Support Re-Init with Null Key" +msgstr "" + +#. Programmer's name for it: SInvalidKeySize +#: libraries/cryptolib4pascal/ClpXSalsa20Engine.pas:34 +msgid "%s Requires a 256 bit Key" +msgstr "" + +#. Programmer's name for it: SArgumentOutOfRange +#: libraries/generics.collections/generics.strings.pas:26 +msgid "Argument out of range" +msgstr "" + +#. Programmer's name for it: SArgumentNilNode +#: libraries/generics.collections/generics.strings.pas:27 +msgid "Node is nil" +msgstr "" + +#. Programmer's name for it: SDuplicatesNotAllowed +#: libraries/generics.collections/generics.strings.pas:28 +msgid "Duplicates not allowed in dictionary" +msgstr "" + +#. Programmer's name for it: SCollectionInconsistency +#: libraries/generics.collections/generics.strings.pas:29 +msgid "Collection inconsistency" +msgstr "" + +#. Programmer's name for it: SCollectionDuplicate +#: libraries/generics.collections/generics.strings.pas:30 +msgid "Collection does not allow duplicates" +msgstr "" + +#. Programmer's name for it: SDictionaryKeyDoesNotExist +#: libraries/generics.collections/generics.strings.pas:31 +msgid "Dictionary key does not exist" +msgstr "" + +#. Programmer's name for it: SItemNotFound +#: libraries/generics.collections/generics.strings.pas:32 +msgid "Item not found" +msgstr "" + +#. Programmer's name for it: SInvalidConfigLength +#. Programmer's name for it: SInvalidConfigLength +#: libraries/hashlib4pascal/HlpBlake2B.pas:22 +#: libraries/hashlib4pascal/HlpBlake2S.pas:22 +msgid "Config Length Must Be 8 Words" +msgstr "" + +#. Programmer's name for it: SConfigNil +#. Programmer's name for it: SConfigNil +#: libraries/hashlib4pascal/HlpBlake2B.pas:23 +#: libraries/hashlib4pascal/HlpBlake2S.pas:23 +msgid "Config Cannot Be Nil" +msgstr "" + +#. Programmer's name for it: SConfigNil +#. Programmer's name for it: SConfigNil +#: libraries/hashlib4pascal/HlpBlake2B.pas:25 +#: libraries/hashlib4pascal/HlpBlake2S.pas:25 +msgid "XOFSize in Bits must be Multiples of 8 and be Between %u and %u Bytes." +msgstr "" + +#. Programmer's name for it: SOutputLengthInvalid +#. Programmer's name for it: SOutputLengthInvalid +#. Programmer's name for it: SOutputLengthInvalid +#: libraries/hashlib4pascal/HlpBlake2B.pas:26 +#: libraries/hashlib4pascal/HlpBlake2S.pas:26 +#: libraries/hashlib4pascal/HlpSHA3.pas:28 +msgid "Output Length is above the Digest Length" +msgstr "" + +#. Programmer's name for it: SMaximumOutputLengthExceeded +#: libraries/hashlib4pascal/HlpBlake2B.pas:28 +msgid "\"Maximum Length is 2^32 blocks of 64 bytes" +msgstr "" + +#. Programmer's name for it: SWritetoXofAfterReadError +#. Programmer's name for it: SWritetoXofAfterReadError +#. Programmer's name for it: SWritetoXofAfterReadError +#: libraries/hashlib4pascal/HlpBlake2B.pas:29 +#: libraries/hashlib4pascal/HlpBlake2S.pas:29 +#: libraries/hashlib4pascal/HlpSHA3.pas:30 +msgid "\"%s\" Write to Xof after Read not Allowed" +msgstr "" + +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:16 +msgid "" +"BLAKE2B HashSize must be restricted to one of the following [1 .. 64], \"%d" +"\"" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:17 +msgid "\"Key\" Length Must Not Be Greater Than 64, \"%d\"" +msgstr "\"Key\" Lengte Mag Niet Groter Zijn Dan 64, \"%d\"" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:19 +msgid "\"Personalisation\" Length Must Be Equal To 16, \"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:20 +msgid "\"Salt\" Length Must Be Equal To 16, \"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:23 +msgid "FanOut Value Should be Between [0 .. 255] for Blake2B" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:25 +msgid "MaxDepth Value Should be Between [1 .. 255] for Blake2B" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:27 +msgid "NodeDepth Value Should be Between [0 .. 255] for Blake2B" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:29 +msgid "InnerHashSize Value Should be Between [0 .. 64] for Blake2B" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:31 +msgid "NodeOffset Value Should be Between [0 .. (2^64-1)] for Blake2B" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2BParams.pas:34 +msgid "Tree Inner Hash Size Must Not Be Greater Than 64, \"%d\"" +msgstr "" + +#. Programmer's name for it: SMaximumOutputLengthExceeded +#: libraries/hashlib4pascal/HlpBlake2S.pas:28 +msgid "\"Maximum Length is 2^32 blocks of 32 bytes" +msgstr "" + +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:16 +msgid "" +"BLAKE2S HashSize must be restricted to one of the following [1 .. 32], \"%d" +"\"" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:17 +msgid "\"Key\" Length Must Not Be Greater Than 32, \"%d\"" +msgstr "\"Key\" Lengte Mag Niet Groter Zijn Dan 32, \"%d\"" + +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:19 +msgid "\"Personalisation\" Length Must Be Equal To 8, \"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:20 +msgid "\"Salt\" Length Must Be Equal To 8, \"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:23 +msgid "FanOut Value Should be Between [0 .. 255] for Blake2S" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:25 +msgid "MaxDepth Value Should be Between [1 .. 255] for Blake2S" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:27 +msgid "NodeDepth Value Should be Between [0 .. 255] for Blake2S" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:29 +msgid "InnerHashSize Value Should be Between [0 .. 32] for Blake2S" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:31 +msgid "NodeOffset Value Should be Between [0 .. (2^48-1)] for Blake2S" +msgstr "" + +#. Programmer's name for it: SInvalidSaltLength +#: libraries/hashlib4pascal/HlpBlake2SParams.pas:34 +msgid "Tree Inner Hash Size Must Not Be Greater Than 32, \"%d\"" +msgstr "" + +#. Programmer's name for it: SUnSupportedCRCType +#: libraries/hashlib4pascal/HlpCRC.pas:22 +msgid "UnSupported CRC Type: \"%s\"" +msgstr "" + +#. Programmer's name for it: SWidthOutOfRange +#: libraries/hashlib4pascal/HlpCRC.pas:23 +msgid "Width Must be Between 3 and 64. \"%d\"" +msgstr "" + +#. Programmer's name for it: SIndexOutOfRange +#: libraries/hashlib4pascal/HlpHash.pas:16 +msgid "Current Index Is Out Of Range" +msgstr "" + +#. Programmer's name for it: SFileNotExist +#: libraries/hashlib4pascal/HlpHash.pas:19 +msgid "Specified File Not Found" +msgstr "Opgegeven Bestand Niet Gevonden" + +#. Programmer's name for it: SCloneNotYetImplemented +#: libraries/hashlib4pascal/HlpHash.pas:20 +msgid "Clone Not Yet Implemented For \"%s\"" +msgstr "" + +#. Programmer's name for it: SHashBufferMessage +#: libraries/hashlib4pascal/HlpHashBuffer.pas:13 +msgid "HashBuffer, Length: %d, Position: %d, IsEmpty: %s" +msgstr "" + +#: libraries/hashlib4pascal/HlpHashResult.pas:27 +msgid "Current Data Structure cannot be Represented as an \"Int32\" Type." +msgstr "" + +#: libraries/hashlib4pascal/HlpHashResult.pas:29 +msgid "Current Data Structure cannot be Represented as an \"UInt8\" Type." +msgstr "" + +#: libraries/hashlib4pascal/HlpHashResult.pas:31 +msgid "Current Data Structure cannot be Represented as an \"UInt16\" Type." +msgstr "" + +#: libraries/hashlib4pascal/HlpHashResult.pas:33 +msgid "Current Data Structure cannot be Represented as an \"UInt32\" Type." +msgstr "" + +#: libraries/hashlib4pascal/HlpHashResult.pas:35 +msgid "Current Data Structure cannot be Represented as an \"UInt64\" Type." +msgstr "" + +#. Programmer's name for it: SInvalidHavalRound +#: libraries/hashlib4pascal/HlpHaval.pas:25 +msgid "Haval Round Must be 3, 4 or 5" +msgstr "" + +#. Programmer's name for it: SInvalidHavalRound +#: libraries/hashlib4pascal/HlpHaval.pas:27 +msgid "" +"Haval HashSize Must be Either 128 bit(16 byte), 160 bit(20 byte), 192 " +"bit(24 byte), 224 bit(28 byte) or 256 bit(32 byte)" +msgstr "" + +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#. Programmer's name for it: SInvalidKeyLength +#: libraries/hashlib4pascal/HlpMurmur2.pas:24 +#: libraries/hashlib4pascal/HlpMurmur2_64.pas:21 +#: libraries/hashlib4pascal/HlpMurmurHash3_x64_128.pas:22 +#: libraries/hashlib4pascal/HlpMurmurHash3_x86_128.pas:22 +#: libraries/hashlib4pascal/HlpMurmurHash3_x86_32.pas:22 +#: libraries/hashlib4pascal/HlpSipHash.pas:23 +#: libraries/hashlib4pascal/HlpXXHash32.pas:19 +#: libraries/hashlib4pascal/HlpXXHash64.pas:19 +msgid "KeyLength Must Be Equal to %d" +msgstr "" + +#: libraries/hashlib4pascal/HlpNullable.pas:16 +msgid "Cannot assign non-null pointer to nullable type." +msgstr "" + +#: libraries/hashlib4pascal/HlpNullable.pas:18 +msgid "Unsupported Type: Only supports Integers, Int64, Floats and Strings." +msgstr "" + +#. Programmer's name for it: SGetNullValue +#: libraries/hashlib4pascal/HlpNullable.pas:19 +msgid "Attempted to get a null value." +msgstr "" + +#. Programmer's name for it: SHashSizeNotImplemented +#: libraries/hashlib4pascal/HlpNullDigest.pas:18 +msgid "HashSize Not Implemented For \"%s\"" +msgstr "" + +#. Programmer's name for it: SBlockSizeNotImplemented +#: libraries/hashlib4pascal/HlpNullDigest.pas:19 +msgid "BlockSize Not Implemented For \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidOutputByteCount +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:32 +msgid "\"(AByteCount)\" Argument Less Than \"%d\"." +msgstr "" + +#. Programmer's name for it: SBlockInstanceNotInitialized +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:33 +msgid "Block Instance not Initialized" +msgstr "" + +#. Programmer's name for it: SInputLengthInvalid +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:34 +msgid "Input Length \"%d\" is not Equal to BlockSize \"%d\"" +msgstr "" + +#. Programmer's name for it: SLanesTooSmall +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:35 +msgid "Lanes Must be Greater Than \"%d\"" +msgstr "" + +#. Programmer's name for it: SLanesTooBig +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:36 +msgid "Lanes Must be Less Than \"%d\"" +msgstr "" + +#. Programmer's name for it: SMemoryTooSmall +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:37 +msgid "Memory is Less Than: \"%d\", Expected \"%d\"" +msgstr "" + +#. Programmer's name for it: SIterationsTooSmall +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:38 +msgid "Iterations is Less Than: \"%d\"" +msgstr "" + +#. Programmer's name for it: SIterationsTooSmall +#: libraries/hashlib4pascal/HlpPBKDF_Argon2NotBuildInAdapter.pas:40 +msgid "Argon2 Parameter Builder Not Initialized" +msgstr "" + +#: libraries/hashlib4pascal/HlpPBKDF_ScryptNotBuildInAdapter.pas:31 +#: libraries/hashlib4pascal/HlpPBKDF2_HMACNotBuildInAdapter.pas:18 +msgid "\"(AByteCount)\" Argument must be a value greater than zero." +msgstr "" + +#. Programmer's name for it: SInvalidCost +#: libraries/hashlib4pascal/HlpPBKDF_ScryptNotBuildInAdapter.pas:32 +msgid "Cost parameter must be > 1 and a power of 2." +msgstr "" + +#. Programmer's name for it: SBlockSizeAndCostIncompatible +#: libraries/hashlib4pascal/HlpPBKDF_ScryptNotBuildInAdapter.pas:33 +msgid "Cost parameter must be > 1 and < 65536." +msgstr "" + +#. Programmer's name for it: SBlockSizeTooSmall +#: libraries/hashlib4pascal/HlpPBKDF_ScryptNotBuildInAdapter.pas:34 +msgid "Block size must be >= 1." +msgstr "Blok grote moet >= 1 zijn." + +#. Programmer's name for it: SBlockSizeTooSmall +#: libraries/hashlib4pascal/HlpPBKDF_ScryptNotBuildInAdapter.pas:36 +msgid "" +"Parallelism parameter must be >= 1 and <= %d (based on block size of %d)" +msgstr "" + +#. Programmer's name for it: SInvalidIndex +#: libraries/hashlib4pascal/HlpPBKDF2_HMACNotBuildInAdapter.pas:19 +msgid "Invalid start or end index in the internal buffer" +msgstr "" + +#. Programmer's name for it: SNotInitializedIHashInstance +#: libraries/hashlib4pascal/HlpPBKDF2_HMACNotBuildInAdapter.pas:20 +msgid "\"IHash\" instance is uninitialized" +msgstr "" + +#. Programmer's name for it: SIterationtooSmall +#: libraries/hashlib4pascal/HlpPBKDF2_HMACNotBuildInAdapter.pas:21 +msgid "Iteration must be greater than zero." +msgstr "" + +#. Programmer's name for it: SInvalidHashMode +#: libraries/hashlib4pascal/HlpSHA3.pas:25 +msgid "Only \"[%s]\" HashModes are Supported" +msgstr "" + +#. Programmer's name for it: SInvalidHashMode +#: libraries/hashlib4pascal/HlpSHA3.pas:27 +msgid "XOFSize in Bits must be Multiples of 8 and be Greater than Zero Bytes" +msgstr "" + +#: libraries/hashlib4pascal/HlpSnefru.pas:24 +msgid "Snefru Security Level Cannot be Less than 1. Standard Level is 8" +msgstr "" + +#: libraries/hashlib4pascal/HlpSnefru.pas:26 +msgid "Snefru HashSize Must be Either 128 bit(16 byte) or 256 bit(32 byte)" +msgstr "" + +#. Programmer's name for it: SInvalidHashSize +#: libraries/hashlib4pascal/HlpSnefru.pas:27 +msgid "Specified HashSize Is Invalid or UnSupported \"%d\"" +msgstr "" + +#: libraries/hashlib4pascal/HlpTiger.pas:22 +msgid "" +"Tiger HashSize Must be Either 128 bit(16 byte), 160 bit(20 byte) or 192 " +"bit(24 byte)" +msgstr "" + +#. Programmer's name for it: SInvalidHashRound +#. Programmer's name for it: SInvalidHashRound +#: libraries/hashlib4pascal/HlpTiger.pas:23 +#: libraries/hashlib4pascal/HlpTiger2.pas:23 +msgid "Specified HashRound Is Invalid or UnSupported \"%d\"" +msgstr "" + +#: libraries/hashlib4pascal/HlpTiger2.pas:22 +msgid "" +"Tiger2 HashSize Must be Either 128 bit(16 byte), 160 bit(20 byte) or 192 " +"bit(24 byte)" +msgstr "" + +#. Programmer's name for it: sInvalidIPAddress +#: libraries/mormot-min/SynCommons.pas:18356 +msgid "\"%s\" is an invalid IP v4 address" +msgstr "" + +#. Programmer's name for it: sInvalidEmailAddress +#: libraries/mormot-min/SynCommons.pas:18357 +msgid "\"%s\" is an invalid email address" +msgstr "" + +#. Programmer's name for it: sInvalidPattern +#: libraries/mormot-min/SynCommons.pas:18358 +msgid "\"%s\" does not match the expected pattern" +msgstr "" + +#. Programmer's name for it: sCharacter01n +#: libraries/mormot-min/SynCommons.pas:18359 +msgid "character,character,characters" +msgstr "" + +#. Programmer's name for it: sInvalidTextLengthMin +#: libraries/mormot-min/SynCommons.pas:18360 +msgid "Expect at least %d %s" +msgstr "" + +#. Programmer's name for it: sInvalidTextLengthMax +#: libraries/mormot-min/SynCommons.pas:18361 +msgid "Expect up to %d %s" +msgstr "" + +#. Programmer's name for it: sInvalidTextChar +#: libraries/mormot-min/SynCommons.pas:18364 +msgid "" +"Expect at least %d %s %s,Expect up to %d %s %s,alphabetical,digital," +"punctuation,lowercase,uppercase,space,Too much spaces on the left,Too much " +"spaces on the right" +msgstr "" + +#. Programmer's name for it: sValidationFailed +#: libraries/mormot-min/SynCommons.pas:18365 +msgid "\"%s\" rule failed" +msgstr "" + +#. Programmer's name for it: sValidationFieldVoid +#: libraries/mormot-min/SynCommons.pas:18366 +msgid "An unique key field must not be void" +msgstr "" + +#. Programmer's name for it: sValidationFieldDuplicate +#: libraries/mormot-min/SynCommons.pas:18367 +msgid "Value already used for this unique key field" +msgstr "" + +#. Programmer's name for it: Sneed_dict +#: libraries/paszlib/paszlib_zbase.pas:409 +msgid "need dictionary" +msgstr "" + +#. Programmer's name for it: Sstream_end +#: libraries/paszlib/paszlib_zbase.pas:410 +msgid "stream end" +msgstr "" + +#. Programmer's name for it: Sfile_error +#: libraries/paszlib/paszlib_zbase.pas:411 +msgid "file error" +msgstr "" + +#. Programmer's name for it: Sstream_error +#: libraries/paszlib/paszlib_zbase.pas:412 +msgid "stream error" +msgstr "" + +#. Programmer's name for it: Sdata_error +#: libraries/paszlib/paszlib_zbase.pas:413 +msgid "data error" +msgstr "data fout" + +#. Programmer's name for it: Smem_error +#: libraries/paszlib/paszlib_zbase.pas:414 +msgid "insufficient memory" +msgstr "niet genoeg geheugen" + +#. Programmer's name for it: Sbuf_error +#: libraries/paszlib/paszlib_zbase.pas:415 +msgid "buffer error" +msgstr "" + +#. Programmer's name for it: Sversion_error +#: libraries/paszlib/paszlib_zbase.pas:416 +msgid "incompatible version" +msgstr "" + +#. Programmer's name for it: SInvalidHexCharacter +#: libraries/simplebaselib4pascal/SbpBase16.pas:12 +msgid "Invalid hex character: \"%s\"" +msgstr "" + +#. Programmer's name for it: SInvalidTextLength +#: libraries/simplebaselib4pascal/SbpBase16.pas:13 +msgid "Text cannot be odd length \"%s\"" +msgstr "" + +#. Programmer's name for it: SAlphabetNil +#. Programmer's name for it: SAlphabetNil +#. Programmer's name for it: SAlphabetNil +#. Programmer's name for it: SAlphabetNil +#: libraries/simplebaselib4pascal/SbpBase32.pas:16 +#: libraries/simplebaselib4pascal/SbpBase58.pas:16 +#: libraries/simplebaselib4pascal/SbpBase64.pas:16 +#: libraries/simplebaselib4pascal/SbpBase85.pas:16 +msgid "Alphabet Instance cannot be Nil \"%s\"" +msgstr "" + +#. Programmer's name for it: SAlphabetNil +#: libraries/simplebaselib4pascal/SbpBase85.pas:18 +msgid "Unexpected Shortcut Character In The Middle Of a Regular Block" +msgstr "" + +#. Programmer's name for it: SAlphabetNil +#: libraries/simplebaselib4pascal/SbpEncodingAlphabet.pas:12 +msgid "\"%s\" Cannot Be Nil." +msgstr "" + +#. Programmer's name for it: SAlphabetNil +#: libraries/simplebaselib4pascal/SbpEncodingAlphabet.pas:14 +msgid "" +"Required Alphabet Length is \"%d\" but Provided Alphabet is \"%d\" " +"Characters Long." +msgstr "" + +#. Programmer's name for it: SInvalidCharacter +#: libraries/simplebaselib4pascal/SbpEncodingAlphabet.pas:15 +msgid "Alphabet Contains Character \"%s (%d)\" Above \"%d\"" +msgstr "" + +#. Programmer's name for it: SInvalidInput +#: libraries/simplebaselib4pascal/SbpEncodingAlphabet.pas:16 +msgid "Invalid character value in input \"%s\"" +msgstr "" + +#. Programmer's name for it: sAColumnsCantBeNil +#: libraries/sphere10/UCommon.Data.pas:246 +msgid "AColumns can't be nil!" +msgstr "" + +#. Programmer's name for it: sTooManyValues +#: libraries/sphere10/UCommon.Data.pas:247 +msgid "Too many values" +msgstr "Te veel waardes" + +#. Programmer's name for it: sInvalidUTF8String +#: libraries/sphere10/UCommon.Data.pas:248 +msgid "Invalid UTF8 string" +msgstr "" + +#. Programmer's name for it: sBadNumericExpression +#: libraries/sphere10/UCommon.Data.pas:249 +msgid "Bad numeric expression" +msgstr "" + +#. Programmer's name for it: sUnexpectedNumberFormat +#: libraries/sphere10/UCommon.Data.pas:250 +msgid "Unexpected number format" +msgstr "" + +#. Programmer's name for it: sBadSyntaxForEscapeCharacter +#: libraries/sphere10/UCommon.Data.pas:251 +msgid "Bad syntax for escape character \"\\\"" +msgstr "" + +#. Programmer's name for it: sUnexpectedCharInExpression +#: libraries/sphere10/UCommon.Data.pas:252 +msgid "Unexpected char in expression" +msgstr "" + +#. Programmer's name for it: sInvaildExpression_CharDetectedAfterClosingBracket +#: libraries/sphere10/UCommon.Data.pas:253 +msgid "Invaild expression (char detected after closing bracket)" +msgstr "" + +#. Programmer's name for it: sUnexpectedTokenFound +#: libraries/sphere10/UCommon.Data.pas:254 +msgid "Unexpected token found : \"%s\"" +msgstr "" + +#. Programmer's name for it: sUnexpectedStringLiteralInExpression +#: libraries/sphere10/UCommon.Data.pas:255 +msgid "Unexpected string literal in expression" +msgstr "" + +#. Programmer's name for it: sBadlyClosedBetweenExpression +#: libraries/sphere10/UCommon.Data.pas:256 +msgid "Badly closed \"between\" expression" +msgstr "" + +#. Programmer's name for it: sMissingNumberInExpression +#: libraries/sphere10/UCommon.Data.pas:257 +msgid "Missing number in expression" +msgstr "" + +#. Programmer's name for it: sUnexpectedOccurrenceOf_Found +#: libraries/sphere10/UCommon.Data.pas:258 +msgid "Unexpected occurrence of \"%s\" found" +msgstr "" + +#. Programmer's name for it: sBadBetweenExpression_UnexpectedToken +#: libraries/sphere10/UCommon.Data.pas:259 +msgid "Bad \"between\" expression. Unexpected \"%s\"" +msgstr "" + +#. Programmer's name for it: sExpressionError_NoValue +#: libraries/sphere10/UCommon.Data.pas:260 +msgid "Expression error (no value)" +msgstr "" + +#. Programmer's name for it: sNotImplemented +#: libraries/sphere10/UCommon.pas:468 +msgid "Not implemented" +msgstr "" + +#. Programmer's name for it: sInvalidParameter_OutOfBounds +#: libraries/sphere10/UCommon.pas:469 +msgid "Invalid Parameter: %s out of bounds" +msgstr "" + +#. Programmer's name for it: sLogDebug +#: libraries/sphere10/UCommon.pas:470 +msgid "DEBUG" +msgstr "" + +#. Programmer's name for it: sLogInfo +#: libraries/sphere10/UCommon.pas:471 +msgid "INFO" +msgstr "" + +#. Programmer's name for it: sLogWarn +#: libraries/sphere10/UCommon.pas:472 +msgid "WARNING" +msgstr "WAARSCHUWING" + +#. Programmer's name for it: sLogError +#: libraries/sphere10/UCommon.pas:473 +msgid "ERROR" +msgstr "" + +#. Programmer's name for it: sTotal +#: libraries/sphere10/UVisualGrid.pas:475 +msgid "Total: %d" +msgstr "Totaal: %d" + +#. Programmer's name for it: sStandardSearch +#: libraries/sphere10/UVisualGrid.pas:476 +msgid "Standard Search" +msgstr "Standaard Zoekopdracht" + +#. Programmer's name for it: sMultiColumnSearch +#: libraries/sphere10/UVisualGrid.pas:477 +msgid "Multi-Column Search" +msgstr "" + +#. Programmer's name for it: sPageSize +#: libraries/sphere10/UVisualGrid.pas:478 +msgid "Page size:" +msgstr "" + +#. Programmer's name for it: sSearchExpression +#: libraries/sphere10/UVisualGrid.pas:479 +msgid "Search expression" +msgstr "" + +#. Programmer's name for it: sDataLoading +#: libraries/sphere10/UVisualGrid.pas:480 +msgid "DATA LOADING" +msgstr "DATA LADEN" + +#. Programmer's name for it: sExpression +#: libraries/sphere10/UVisualGrid.pas:481 +msgid "Expression" +msgstr "" + +#. Programmer's name for it: sImproperColumnIndex +#: libraries/sphere10/UVisualGrid.pas:482 +msgid "Improper column index. Max expected is %d but %d found." +msgstr "" diff --git a/src/pascalcoin_daemon.ini b/src/pascalcoin_daemon.ini index cf8609674..44eaf22cb 100644 --- a/src/pascalcoin_daemon.ini +++ b/src/pascalcoin_daemon.ini @@ -1,13 +1,13 @@ [GLOBAL] ;SAVELOGS : Boolean ;If 1 (true) logs will be saved to a file at $HOME/PascalCoin -SAVELOGS=0 +SAVELOGS=1 ;NODE_PORT : Integer (Default 4004) ;Port P2P of PascalCoin NODE_PORT=4004 ;NODE_MAX_CONNECTIONS : Integer (Default 100) ;Max node connections P2P -NODE_MAX_CONNECTIONS=100 +NODE_MAX_CONNECTIONS=200 ;LOWMEMORY : Boolean ;If True, will read/write directly to file storage, using less memory but decreasing speed LOWMEMORY=0 @@ -40,8 +40,30 @@ RPC_SERVERMINER_B58_PUBKEY= RPC_SERVERMINER_MAX_CONNECTIONS=1000 ;RPC_SERVERMINER_MAX_OPERATIONS_PER_BLOCK : Integer ;Max operations included per block -RPC_SERVERMINER_MAX_OPERATIONS_PER_BLOCK=10000 +RPC_SERVERMINER_MAX_OPERATIONS_PER_BLOCK= ;RPC_SERVERMINER_MAX_ZERO_FEE_OPERATIONS : Integer ;Max operations without fee that can be included in a block ;Note: Operations with fee>0 are processed first (have more priority) -RPC_SERVERMINER_MAX_ZERO_FEE_OPERATIONS=4000 +RPC_SERVERMINER_MAX_ZERO_FEE_OPERATIONS= +;DATAFOLDER : String +;Allow define folder to store data of PascalCoin (Blockchain, Safebox, WalletKeys file, Temporal files ...) +;If empty will use default folder $HOME/PascalCoin (Each OS will assigna a different $HOME folder, AppData for Windows...) +DATAFOLDER= + +;ABSTRACTMEM CACHE VALUES +;ABSTRACTMEM_MAX_CACHE_MB : Integer +;Maximum megabytes in memory as a cache - Default 100 +ABSTRACTMEM_MAX_CACHE_MB= +;ABSTRACTMEM_USE_CACHE_ON_LISTS : Boolean +;Set to true (1) to allow save lists on cache or false (0) - Default True +ABSTRACTMEM_USE_CACHE_ON_LISTS= +;ABSTRACTMEM_CACHE_MAX_ACCOUNTS : Integer +;Max number of accounts to store at cache - Default 10000 +ABSTRACTMEM_CACHE_MAX_ACCOUNTS= +;ABSTRACTMEM_CACHE_MAX_PUBKEYS : Integer +;Max number of public keys to store at cache - Default 5000 +ABSTRACTMEM_CACHE_MAX_PUBKEYS= + +;MAX_PAYTOKEY_MOLINAS : Integer +;Max MOLINAS (1 MOLINA = 0.0001 PASC) can be paid for a PayToKey operation using EPaAsa format (Default=5000=0.5 PASC) +MAX_PAYTOKEY_MOLINAS=5000 diff --git a/src/pascalcoin_daemon.lpi b/src/pascalcoin_daemon.lpi index 9b06c3e5b..dbf7c0da3 100644 --- a/src/pascalcoin_daemon.lpi +++ b/src/pascalcoin_daemon.lpi @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> - <Version Value="10"/> + <Version Value="11"/> <PathDelim Value="\"/> <General> <Flags> @@ -25,10 +25,18 @@ </PublishOptions> <RunParams> <local> - <FormatVersion Value="1"/> - <CommandLineParams Value="-r"/> + <CommandLineParams Value="-r -d"/> <Display Use="True" Value=""/> </local> + <FormatVersion Value="2"/> + <Modes Count="1"> + <Mode0 Name="default"> + <local> + <CommandLineParams Value="-r -d"/> + <Display Use="True" Value=""/> + </local> + </Mode0> + </Modes> </RunParams> <Units Count="1"> <Unit0> @@ -45,7 +53,7 @@ </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir)"/> - <OtherUnitFiles Value="core;libraries\synapse;libraries\pascalcoin;libraries\generics.collections;libraries\sphere10;libraries\hashlib4pascal;libraries\paszlib;libraries\cryptolib4pascal;libraries\simplebaselib4pascal"/> + <OtherUnitFiles Value="core;libraries\synapse;libraries\pascalcoin;libraries\sphere10;libraries\hashlib4pascal;libraries\paszlib;libraries\cryptolib4pascal;libraries\simplebaselib4pascal;libraries\abstractmem;libraries\regex"/> <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <CodeGeneration> diff --git a/src/pascalcoin_daemon.pp b/src/pascalcoin_daemon.pp index dc427db27..34daa4ac2 100644 --- a/src/pascalcoin_daemon.pp +++ b/src/pascalcoin_daemon.pp @@ -5,17 +5,41 @@ uses {$IFDEF UNIX}{$IFDEF UseCThreads} + mormot.core.fpcx64mm, cthreads, {$ENDIF}{$ENDIF} sysutils, Classes, daemonapp, UCrypto, upcdaemon; +Type + + { TDaemonMainLoop } + + TDaemonMainLoop = Class + public + Class procedure DaemonMainLoop; + end; + +{ TDaemonMainLoop } + +class procedure TDaemonMainLoop.DaemonMainLoop; +begin + while not Application.Terminated do begin + CheckSynchronize(10); + end; +end; begin Application.Title:='PascalCoin Daemon application'; + {$IF Defined(FPC) and Defined(WINDOWS)} + IsConsole := Not Application.HasOption('r','run'); + {$ELSE} + IsConsole:=False; + {$ENDIF} RegisterDaemonClass(TPCDaemon); RegisterDaemonMapper(TPCDaemonMapper); + Application.GUIMainLoop:=@TDaemonMainLoop.DaemonMainLoop; TCrypto.InitCrypto; Application.Run; end. diff --git a/src/pascalcoin_miner.lpi b/src/pascalcoin_miner.lpi index 37e9f8376..cc7f1f747 100644 --- a/src/pascalcoin_miner.lpi +++ b/src/pascalcoin_miner.lpi @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> - <Version Value="10"/> + <Version Value="11"/> <PathDelim Value="\"/> <General> <Flags> @@ -9,7 +9,7 @@ <MainUnitHasTitleStatement Value="False"/> </Flags> <SessionStorage Value="InProjectDir"/> - <MainUnit Value="0"/> + <MainUnit Value="0"/> <UseAppBundle Value="False"/> <ResourceType Value="res"/> </General> @@ -24,9 +24,16 @@ </PublishOptions> <RunParams> <local> - <FormatVersion Value="1"/> <CommandLineParams Value="-c 1 -s -n TEST"/> </local> + <FormatVersion Value="2"/> + <Modes Count="1"> + <Mode0 Name="default"> + <local> + <CommandLineParams Value="-c 1 -s -n TEST"/> + </local> + </Mode0> + </Modes> </RunParams> <RequiredPackages Count="1"> <Item1> @@ -36,7 +43,8 @@ <Units Count="1"> <Unit0> <Filename Value="pascalcoin_miner.pp"/> - <IsPartOfProject Value="True"/> + <IsPartOfProject Value="True"/> + <UnitName Value="PascalCoinMiner"/> </Unit0> </Units> </ProjectOptions> @@ -48,7 +56,7 @@ </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir)"/> - <OtherUnitFiles Value="core;libraries\pasopencl;libraries\synapse;libraries\sphere10;libraries\hashlib4pascal;libraries\generics.collections;libraries\pascalcoin;libraries\paszlib"/> + <OtherUnitFiles Value="core;libraries\pasopencl;libraries\synapse;libraries\sphere10;libraries\hashlib4pascal;libraries\pascalcoin;libraries\paszlib;libraries\regex;libraries\abstractmem;libraries\cryptolib4pascal;libraries\simplebaselib4pascal"/> <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <CodeGeneration> diff --git a/src/pascalcoin_miner.pp b/src/pascalcoin_miner.pp index 79fb1a663..4c260c743 100644 --- a/src/pascalcoin_miner.pp +++ b/src/pascalcoin_miner.pp @@ -27,8 +27,7 @@ UBlockChain, UPoolMinerThreads, UGPUMining, UPoolMining, ULog, UThread, UAccounts, UCrypto, UConst, UTime, UNode, UNetProtocol, USha256, - UOpenSSL, UBaseTypes, UCommon, - DelphiCL; + UOpenSSL, UBaseTypes, UCommon, DelphiCL; type @@ -44,6 +43,7 @@ TPascalMinerApp = class(TCustomApplication) procedure WriteLine(nline : Integer; txt : String); procedure OnInThreadNewLog(logtype : TLogType; Time : TDateTime; ThreadID : TThreadID; Const sender, logtext : AnsiString); protected + FOutputAsLogs : Boolean; FWindow32X1,FWindow32Y1,FWindow32X2,FWindow32Y2: DWord; FLock : TCriticalSection; FPoolMinerThread : TPoolMinerThread; @@ -57,7 +57,7 @@ TPascalMinerApp = class(TCustomApplication) end; Const - CT_MINER_VERSION = {$IFDEF PRODUCTION}'5.1'{$ELSE}{$IFDEF TESTNET}'5.1 TESTNET'{$ELSE}ERROR{$ENDIF}{$ENDIF}; + CT_MINER_VERSION = {$IFDEF PRODUCTION}'5.4'{$ELSE}{$IFDEF TESTNET}'5.4 TESTNET'{$ELSE}ERROR{$ENDIF}{$ENDIF}; CT_Line_DeviceStatus = 3; CT_Line_ConnectionStatus = 4; CT_Line_MinerValues = 7; @@ -100,7 +100,6 @@ procedure TPascalMinerApp.ShowGPUDrivers; end; procedure TPascalMinerApp.OnConnectionStateChanged(Sender: TObject); -Const CT_state : Array[boolean] of String = ('Disconnected','Connected'); var i : Integer; s : String; begin @@ -120,8 +119,6 @@ procedure TPascalMinerApp.OnConnectionStateChanged(Sender: TObject); end; procedure TPascalMinerApp.OnDeviceStateChanged(Sender: TObject); -Var i : Integer; - s : String; begin If Sender is TCustomMinerDeviceThread then begin If TCustomMinerDeviceThread(Sender).IsMining then WriteLine(CT_Line_DeviceStatus,'') // clear line @@ -153,6 +150,10 @@ procedure TPascalMinerApp.WriteLine(nline: Integer; txt: String); begin FLock.Acquire; try + if FOutputAsLogs then begin + WriteLn(Format('%s %s',[FormatDateTime('hh:nn:ss.zzz',Now()),txt])); + Exit; + end; i := length(txt); if i<=(FWindow32X2-FWindow32X1+1) then begin setlength(txt,FWindow32X2-FWindow32X1+1); @@ -280,9 +281,9 @@ procedure TPascalMinerApp.DoRun; end; Procedure DoWaitAndLog; - Var tc : TTickCount; + Var tc, LMaxElapsed : TTickCount; gs,ms : TMinerStats; - hrReal,hrHashing, glhrHashing, glhrReal : Real; + hrHashing : Real; i : Integer; devt : TCustomMinerDeviceThread; s : String; @@ -297,7 +298,9 @@ procedure TPascalMinerApp.DoRun; end; while (Not Terminated) do begin sleep(100); - If TPlatform.GetElapsedMilliseconds(tc)>1000 then begin + if FOutputAsLogs then LMaxElapsed := 10000 + else LMaxElapsed:=1000; + If TPlatform.GetElapsedMilliseconds(tc)>LMaxElapsed then begin tc := TPlatform.GetTickCount; For i:=0 to FDeviceThreads.Count-1 do begin devt := TCustomMinerDeviceThread(FDeviceThreads[i]); @@ -307,7 +310,7 @@ procedure TPascalMinerApp.DoRun; else hrHashing := 0; gs := devt.GlobalDeviceStats; If ms.RoundsCount>0 then begin - s := FormatDateTime('hh:nn:ss',now)+Format(' Miner:"%s" at %0.1f H/s - Rounds: %0.2f K Found: %d',[devt.MinerValuesForWork.payload_start.ToString,hrHashing, gs.RoundsCount/1000, gs.WinsCount]); + s := FormatDateTime('hh:nn:ss',now)+Format(' Miner:"%s" at %0.1f H/s (%d %0.2f) - Rounds: %0.2f K Found: %d',[devt.MinerValuesForWork.payload_start.ToString,hrHashing, ms.InternalComputingRounds, ms.RoundsCount/1000, gs.RoundsCount/1000, gs.WinsCount]); If (gs.Invalids>0) then s := s +' '+inttostr(gs.Invalids)+' ERRORS!'; WriteLine(CT_Line_MiningStatus+i,s); end else begin @@ -427,7 +430,7 @@ procedure TPascalMinerApp.DoRun; FLock := TCriticalSection.Create; Try // quick check parameters - ErrorMsg:=CheckOptions('hp:d:s::c:n::t:u::x::l::', 'help platform device server cpu minername testmode user pwd logfile logall'); + ErrorMsg:=CheckOptions('hp:d:s::c:n::t:u::x::l::', 'help platform: device: server: cpu: minername: testmode: user: pwd: logfile: logall: outputlogs:'); if ErrorMsg<>'' then begin //ShowException(Exception.Create(ErrorMsg)); WriteLn(ErrorMsg); @@ -440,10 +443,19 @@ procedure TPascalMinerApp.DoRun; Exit; end; - if (Not HasOption('p','platform')) And (Not HasOption('d','device')) And (Not HasOption('c','cpu:')) then begin + if HasOption('outputlogs') then begin + s := Trim(GetOptionValue('outputlogs')); + if (s='0') or (s='false') then FOutputAsLogs:=False + else if (s='1') or (s='-1') or (s='true') then FOutputAsLogs:=True + else begin + Writeln('Invalid outputlogs argument "'+s+'"'); + Exit; + end; + end; + + if (Not HasOption('p','platform')) And (Not HasOption('d','device')) And (Not HasOption('c','cpu')) then begin Writeln('Need to specify -p X and -d Y for GPU mining or -c N for CPU mining'); Writeln('Execute ',ExtractFileName(ExeName),' -h for more info'); - ShowGPUDrivers; Exit; end; @@ -511,6 +523,11 @@ constructor TPascalMinerApp.Create(TheOwner: TComponent); FDeviceThreads := TList.Create; StopOnException:=True; FAppStartTime := Now; + {$IF Defined(WINDOWS)} + FOutputAsLogs := False; + {$ELSE} + FOutputAsLogs := True; + {$ENDIF} end; destructor TPascalMinerApp.Destroy; @@ -537,6 +554,7 @@ procedure TPascalMinerApp.WriteHelp; writeln(' (Not needed for PascalCoin core, only some third party pools)'); writeln(' -u USERNAME'); writeln(' -x PASSWORD'); + writeln(' --outputlogs=BOOLEAN (Show output style as a log)'); writeln(''); writeln('Basic example GPU mining over multiple devices: '); writeln(' ',ExtractFileName(ExeName),' -p 0 -d 0,1,2,3 -s -n ABC'); diff --git a/src/pascalcoin_wallet_classic.dpr b/src/pascalcoin_wallet_classic.dpr index e151a4609..993614b1e 100644 --- a/src/pascalcoin_wallet_classic.dpr +++ b/src/pascalcoin_wallet_classic.dpr @@ -4,6 +4,8 @@ program PascalCoin_Wallet_Classic; {$MODE Delphi} {$ENDIF} +{$I ./config.inc} + uses {$IFnDEF FPC} {$ELSE} @@ -13,25 +15,73 @@ uses Interfaces, {$ENDIF } Forms, + UFRMAbout in 'gui-classic\UFRMAbout.pas' {FRMAbout}, + UFRMAccountSelect in 'gui-classic\UFRMAccountSelect.pas' {FRMAccountSelect}, + UFRMMemoText in 'gui-classic\UFRMMemoText.pas' {FRMMemoText}, + UFRMNewPrivateKeyType in 'gui-classic\UFRMNewPrivateKeyType.pas' {FRMNewPrivateKeyType}, + UFRMNodesIp in 'gui-classic\UFRMNodesIp.pas' {FRMNodesIp}, + UFRMOperation in 'gui-classic\UFRMOperation.pas' {FRMOperation}, + UFRMOperationsExplorer in 'gui-classic\UFRMOperationsExplorer.pas' {FRMOperationsExplorer}, + {$IFDEF USE_GNUGETTEXT} + UFRMSelectLanguage in 'gui-classic\UFRMSelectLanguage.pas' {FRMChangeLanguage}, + {$ENDIF } + UFRMPascalCoinWalletConfig in 'gui-classic\UFRMPascalCoinWalletConfig.pas' {FRMPascalCoinWalletConfig}, + UFRMPayloadDecoder in 'gui-classic\UFRMPayloadDecoder.pas' {FRMPayloadDecoder}, + UFRMRandomOperations in 'gui-classic\UFRMRandomOperations.pas' {FRMRandomOperations}, + UFRMRPCCalls in 'gui-classic\UFRMRPCCalls.pas' {FRMRPCCalls}, + UFRMWallet in 'gui-classic\UFRMWallet.pas' {FRMWallet}, + UFRMWalletKeys in 'gui-classic\UFRMWalletKeys.pas' {FRMWalletKeys}, + UGridUtils in 'gui-classic\UGridUtils.pas', + UGUIUtils in 'gui-classic\UGUIUtils.pas', + UFRMHashLock in 'gui-classic\UFRMHashLock.pas' {FRMHashLock}, + UFRMDiagnosticTool in 'gui-classic\UFRMDiagnosticTool.pas' {FRMDiagnosticTool}, + UCommon in 'libraries\sphere10\UCommon.pas', + UMemory in 'libraries\sphere10\UMemory.pas', UAccountKeyStorage in 'core\UAccountKeyStorage.pas', UAccounts in 'core\UAccounts.pas', - {$IFDEF Use_OpenSSL} UAES in 'core\UAES.pas', - {$ENDIF } UBaseTypes in 'core\UBaseTypes.pas', UBlockChain in 'core\UBlockChain.pas', UChunk in 'core\UChunk.pas', UConst in 'core\UConst.pas', UCrypto in 'core\UCrypto.pas', + UECIES in 'core\UECIES.pas', + UEncoding in 'core\UEncoding.pas', + UEPasa in 'core\UEPasa.pas', UFileStorage in 'core\UFileStorage.pas', ULog in 'core\ULog.pas', + UMurMur3Fast in 'core\UMurMur3Fast.pas', UNetProtection in 'core\UNetProtection.pas', UNetProtocol in 'core\UNetProtocol.pas', UNode in 'core\UNode.pas', + UOpenSSL in 'core\UOpenSSL.pas', UOpTransaction in 'core\UOpTransaction.pas', + {$IFDEF USE_ABSTRACTMEM} + UPCAbstractMem in 'core\UPCAbstractMem.pas', + UPCAbstractMemAccountKeys in 'core\UPCAbstractMemAccountKeys.pas', + {$ENDIF} + UPCAbstractMemAccounts in 'core\UPCAbstractMemAccounts.pas', + UPCAccountsOrdenations in 'core\UPCAccountsOrdenations.pas', + UPCCryptoLib4Pascal in 'core\UPCCryptoLib4Pascal.pas', + UPCDataTypes in 'core\UPCDataTypes.pas', + UPCEncryption in 'core\UPCEncryption.pas', + UPCHardcodedRandomHashTable in 'core\UPCHardcodedRandomHashTable.pas', + UPCOperationsBlockValidator in 'core\UPCOperationsBlockValidator.pas', + UPCOperationsSignatureValidator in 'core\UPCOperationsSignatureValidator.pas', + UPCOrderedLists in 'core\UPCOrderedLists.pas', + UPCRPCFileUtils in 'core\UPCRPCFileUtils.pas', + UPCRPCFindAccounts in 'core\UPCRPCFindAccounts.pas', + UPCRPCFindBlocks in 'core\UPCRPCFindBlocks.pas', + UPCRPCOpData in 'core\UPCRPCOpData.pas', + UPCRPCSend in 'core\UPCRPCSend.pas', + UPCSafeBoxRootHash in 'core\UPCSafeBoxRootHash.pas', + UPCTemporalAbstractMem in 'core\UPCTemporalAbstractMem.pas', + UPCTemporalFileStream in 'core\UPCTemporalFileStream.pas', + UPCTNetDataExtraMessages in 'core\UPCTNetDataExtraMessages.pas', UPoolMinerThreads in 'core\UPoolMinerThreads.pas', UPoolMining in 'core\UPoolMining.pas', URandomHash in 'core\URandomHash.pas', + URandomHash2 in 'core\URandomHash2.pas', URPC in 'core\URPC.pas', USettings in 'core\USettings.pas', USha256 in 'core\USha256.pas', @@ -39,31 +89,7 @@ uses UThread in 'core\UThread.pas', UTime in 'core\UTime.pas', UTxMultiOperation in 'core\UTxMultiOperation.pas', - UWallet in 'core\UWallet.pas', - UFRMAbout in 'gui-classic\UFRMAbout.pas' {FRMAbout}, - UFRMAccountSelect in 'gui-classic\UFRMAccountSelect.pas' {FRMAccountSelect}, - UFRMMemoText in 'gui-classic\UFRMMemoText.pas' {FRMMemoText}, - UFRMNewPrivateKeyType in 'gui-classic\UFRMNewPrivateKeyType.pas' {FRMNewPrivateKeyType}, - UFRMNodesIp in 'gui-classic\UFRMNodesIp.pas' {FRMNodesIp}, - UFRMOperation in 'gui-classic\UFRMOperation.pas' {FRMOperation}, - UFRMOperationsExplorer in 'gui-classic\UFRMOperationsExplorer.pas' {FRMOperationsExplorer}, - UFRMPascalCoinWalletConfig in 'gui-classic\UFRMPascalCoinWalletConfig.pas' {FRMPascalCoinWalletConfig}, - UFRMPayloadDecoder in 'gui-classic\UFRMPayloadDecoder.pas' {FRMPayloadDecoder}, - UFRMRandomOperations in 'gui-classic\UFRMRandomOperations.pas' {FRMRandomOperations}, - UFRMRPCCalls in 'gui-classic\UFRMRPCCalls.pas' {FRMRPCCalls}, - UFRMWallet in 'gui-classic\UFRMWallet.pas' {FRMWallet}, - UFRMWalletKeys in 'gui-classic\UFRMWalletKeys.pas' {FRMWalletKeys}, - UGridUtils in 'gui-classic\UGridUtils.pas', - UGUIUtils in 'gui-classic\UGUIUtils.pas', - UPCDataTypes in 'core\UPCDataTypes.pas', - UPCOrderedLists in 'core\UPCOrderedLists.pas', - UPCOperationsSignatureValidator in 'core\UPCOperationsSignatureValidator.pas', - UPCTNetDataExtraMessages in 'core\UPCTNetDataExtraMessages.pas', - UFRMHashLock in 'gui-classic\UFRMHashLock.pas' {FRMHashLock}, - URandomHash2 in 'core\URandomHash2.pas', - UFRMDiagnosticTool in 'gui-classic\UFRMDiagnosticTool.pas' {FRMDiagnosticTool}, - UCommon in 'libraries\sphere10\UCommon.pas', - UMemory in 'libraries\sphere10\UMemory.pas'; + UWallet in 'core\UWallet.pas'; {$R *.res} diff --git a/src/pascalcoin_wallet_classic.dproj b/src/pascalcoin_wallet_classic.dproj index dd253e60e..1f1d7ae67 100644 --- a/src/pascalcoin_wallet_classic.dproj +++ b/src/pascalcoin_wallet_classic.dproj @@ -4,10 +4,10 @@ <MainSource>pascalcoin_wallet_classic.dpr</MainSource> <Base>True</Base> <Config Condition="'$(Config)'==''">Debug</Config> - <TargetedPlatforms>1027</TargetedPlatforms> + <TargetedPlatforms>3</TargetedPlatforms> <AppType>Application</AppType> <FrameworkType>VCL</FrameworkType> - <ProjectVersion>18.6</ProjectVersion> + <ProjectVersion>18.8</ProjectVersion> <Platform Condition="'$(Platform)'==''">Win32</Platform> </PropertyGroup> <PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''"> @@ -45,12 +45,6 @@ <CfgParent>Base</CfgParent> <Base>true</Base> </PropertyGroup> - <PropertyGroup Condition="('$(Platform)'=='iOSDevice64' and '$(Cfg_2)'=='true') or '$(Cfg_2_iOSDevice64)'!=''"> - <Cfg_2_iOSDevice64>true</Cfg_2_iOSDevice64> - <CfgParent>Cfg_2</CfgParent> - <Cfg_2>true</Cfg_2> - <Base>true</Base> - </PropertyGroup> <PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win32)'!=''"> <Cfg_2_Win32>true</Cfg_2_Win32> <CfgParent>Cfg_2</CfgParent> @@ -74,7 +68,7 @@ <DCC_Namespace>Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Posix;Winapi;$(DCC_Namespace)</DCC_Namespace> <VerInfo_Locale>1033</VerInfo_Locale> <VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=</VerInfo_Keys> - <DCC_UnitSearchPath>.\libraries\hashlib4pascal;.\libraries\sphere10;.\libraries\pascalcoin;.\libraries\synapse;.\core;$(DCC_UnitSearchPath)</DCC_UnitSearchPath> + <DCC_UnitSearchPath>.\libraries\gnugettext;.\libraries\abstractmem;.\libraries\hashlib4pascal;.\libraries\sphere10;.\libraries\pascalcoin;.\libraries\synapse;.\core;.\gui-classic;.\libraries\cryptolib4pascal;.\libraries\simplebaselib4pascal;.\libraries\regex;$(DCC_UnitSearchPath)</DCC_UnitSearchPath> <DCC_DcuOutput>.\lib\$(Platform)\$(Config)</DCC_DcuOutput> </PropertyGroup> <PropertyGroup Condition="'$(Base_Win32)'!=''"> @@ -116,9 +110,6 @@ <DCC_Optimize>false</DCC_Optimize> <DCC_GenerateStackFrames>true</DCC_GenerateStackFrames> </PropertyGroup> - <PropertyGroup Condition="'$(Cfg_2_iOSDevice64)'!=''"> - <BT_BuildType>Debug</BT_BuildType> - </PropertyGroup> <PropertyGroup Condition="'$(Cfg_2_Win32)'!=''"> <AppEnableRuntimeThemes>true</AppEnableRuntimeThemes> <VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo> @@ -134,31 +125,6 @@ <DelphiCompile Include="$(MainSource)"> <MainSource>MainSource</MainSource> </DelphiCompile> - <DCCReference Include="core\UAccountKeyStorage.pas"/> - <DCCReference Include="core\UAccounts.pas"/> - <DCCReference Include="core\UAES.pas"/> - <DCCReference Include="core\UBaseTypes.pas"/> - <DCCReference Include="core\UBlockChain.pas"/> - <DCCReference Include="core\UChunk.pas"/> - <DCCReference Include="core\UConst.pas"/> - <DCCReference Include="core\UCrypto.pas"/> - <DCCReference Include="core\UFileStorage.pas"/> - <DCCReference Include="core\ULog.pas"/> - <DCCReference Include="core\UNetProtection.pas"/> - <DCCReference Include="core\UNetProtocol.pas"/> - <DCCReference Include="core\UNode.pas"/> - <DCCReference Include="core\UOpTransaction.pas"/> - <DCCReference Include="core\UPoolMinerThreads.pas"/> - <DCCReference Include="core\UPoolMining.pas"/> - <DCCReference Include="core\URandomHash.pas"/> - <DCCReference Include="core\URPC.pas"/> - <DCCReference Include="core\USettings.pas"/> - <DCCReference Include="core\USha256.pas"/> - <DCCReference Include="core\UTCPIP.pas"/> - <DCCReference Include="core\UThread.pas"/> - <DCCReference Include="core\UTime.pas"/> - <DCCReference Include="core\UTxMultiOperation.pas"/> - <DCCReference Include="core\UWallet.pas"/> <DCCReference Include="gui-classic\UFRMAbout.pas"> <Form>FRMAbout</Form> <FormType>dfm</FormType> @@ -187,47 +153,88 @@ <Form>FRMOperationsExplorer</Form> <FormType>dfm</FormType> </DCCReference> + <DCCReference Include="gui-classic\UFRMSelectLanguage.pas"> + <Form>FRMChangeLanguage</Form> + </DCCReference> <DCCReference Include="gui-classic\UFRMPascalCoinWalletConfig.pas"> <Form>FRMPascalCoinWalletConfig</Form> - <FormType>dfm</FormType> </DCCReference> <DCCReference Include="gui-classic\UFRMPayloadDecoder.pas"> <Form>FRMPayloadDecoder</Form> - <FormType>dfm</FormType> </DCCReference> <DCCReference Include="gui-classic\UFRMRandomOperations.pas"> <Form>FRMRandomOperations</Form> - <FormType>dfm</FormType> </DCCReference> <DCCReference Include="gui-classic\UFRMRPCCalls.pas"> <Form>FRMRPCCalls</Form> - <FormType>dfm</FormType> </DCCReference> <DCCReference Include="gui-classic\UFRMWallet.pas"> <Form>FRMWallet</Form> - <FormType>dfm</FormType> </DCCReference> <DCCReference Include="gui-classic\UFRMWalletKeys.pas"> <Form>FRMWalletKeys</Form> - <FormType>dfm</FormType> </DCCReference> <DCCReference Include="gui-classic\UGridUtils.pas"/> <DCCReference Include="gui-classic\UGUIUtils.pas"/> - <DCCReference Include="core\UPCDataTypes.pas"/> - <DCCReference Include="core\UPCOrderedLists.pas"/> - <DCCReference Include="core\UPCOperationsSignatureValidator.pas"/> - <DCCReference Include="core\UPCTNetDataExtraMessages.pas"/> <DCCReference Include="gui-classic\UFRMHashLock.pas"> <Form>FRMHashLock</Form> - <FormType>dfm</FormType> </DCCReference> - <DCCReference Include="core\URandomHash2.pas"/> <DCCReference Include="gui-classic\UFRMDiagnosticTool.pas"> <Form>FRMDiagnosticTool</Form> - <FormType>dfm</FormType> </DCCReference> <DCCReference Include="libraries\sphere10\UCommon.pas"/> <DCCReference Include="libraries\sphere10\UMemory.pas"/> + <DCCReference Include="core\UAccountKeyStorage.pas"/> + <DCCReference Include="core\UAccounts.pas"/> + <DCCReference Include="core\UAES.pas"/> + <DCCReference Include="core\UBaseTypes.pas"/> + <DCCReference Include="core\UBlockChain.pas"/> + <DCCReference Include="core\UChunk.pas"/> + <DCCReference Include="core\UConst.pas"/> + <DCCReference Include="core\UCrypto.pas"/> + <DCCReference Include="core\UECIES.pas"/> + <DCCReference Include="core\UEncoding.pas"/> + <DCCReference Include="core\UEPasa.pas"/> + <DCCReference Include="core\UFileStorage.pas"/> + <DCCReference Include="core\ULog.pas"/> + <DCCReference Include="core\UMurMur3Fast.pas"/> + <DCCReference Include="core\UNetProtection.pas"/> + <DCCReference Include="core\UNetProtocol.pas"/> + <DCCReference Include="core\UNode.pas"/> + <DCCReference Include="core\UOpenSSL.pas"/> + <DCCReference Include="core\UOpTransaction.pas"/> + <DCCReference Include="core\UPCAbstractMem.pas"/> + <DCCReference Include="core\UPCAbstractMemAccountKeys.pas"/> + <DCCReference Include="core\UPCAbstractMemAccounts.pas"/> + <DCCReference Include="core\UPCAccountsOrdenations.pas"/> + <DCCReference Include="core\UPCCryptoLib4Pascal.pas"/> + <DCCReference Include="core\UPCDataTypes.pas"/> + <DCCReference Include="core\UPCEncryption.pas"/> + <DCCReference Include="core\UPCHardcodedRandomHashTable.pas"/> + <DCCReference Include="core\UPCOperationsBlockValidator.pas"/> + <DCCReference Include="core\UPCOperationsSignatureValidator.pas"/> + <DCCReference Include="core\UPCOrderedLists.pas"/> + <DCCReference Include="core\UPCRPCFileUtils.pas"/> + <DCCReference Include="core\UPCRPCFindAccounts.pas"/> + <DCCReference Include="core\UPCRPCFindBlocks.pas"/> + <DCCReference Include="core\UPCRPCOpData.pas"/> + <DCCReference Include="core\UPCRPCSend.pas"/> + <DCCReference Include="core\UPCSafeBoxRootHash.pas"/> + <DCCReference Include="core\UPCTemporalAbstractMem.pas"/> + <DCCReference Include="core\UPCTemporalFileStream.pas"/> + <DCCReference Include="core\UPCTNetDataExtraMessages.pas"/> + <DCCReference Include="core\UPoolMinerThreads.pas"/> + <DCCReference Include="core\UPoolMining.pas"/> + <DCCReference Include="core\URandomHash.pas"/> + <DCCReference Include="core\URandomHash2.pas"/> + <DCCReference Include="core\URPC.pas"/> + <DCCReference Include="core\USettings.pas"/> + <DCCReference Include="core\USha256.pas"/> + <DCCReference Include="core\UTCPIP.pas"/> + <DCCReference Include="core\UThread.pas"/> + <DCCReference Include="core\UTime.pas"/> + <DCCReference Include="core\UTxMultiOperation.pas"/> + <DCCReference Include="core\UWallet.pas"/> <BuildConfiguration Include="Debug"> <Key>Cfg_2</Key> <CfgParent>Base</CfgParent> @@ -254,11 +261,11 @@ </Excluded_Packages> </Delphi.Personality> <Platforms> - <Platform value="iOSDevice64">True</Platform> <Platform value="Win32">True</Platform> <Platform value="Win64">True</Platform> </Platforms> <Deployment Version="3"> + <DeployFile LocalName="pascalcoin_wallet_classic.exe" Configuration="Debug" Class="ProjectOutput"/> <DeployFile LocalName="pascalcoin_wallet_classic.exe" Configuration="Debug" Class="ProjectOutput"> <Platform Name="Win32"> <RemoteName>pascalcoin_wallet_classic.exe</RemoteName> @@ -282,12 +289,20 @@ <RemoteDir>classes</RemoteDir> <Operation>1</Operation> </Platform> + <Platform Name="Android64"> + <RemoteDir>classes</RemoteDir> + <Operation>1</Operation> + </Platform> </DeployClass> <DeployClass Name="AndroidFileProvider"> <Platform Name="Android"> <RemoteDir>res\xml</RemoteDir> <Operation>1</Operation> </Platform> + <Platform Name="Android64"> + <RemoteDir>res\xml</RemoteDir> + <Operation>1</Operation> + </Platform> </DeployClass> <DeployClass Name="AndroidGDBServer"> <Platform Name="Android"> @@ -300,96 +315,242 @@ <RemoteDir>library\lib\armeabi</RemoteDir> <Operation>1</Operation> </Platform> + <Platform Name="Android64"> + <RemoteDir>library\lib\armeabi</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="AndroidLibnativeArmeabiv7aFile"> + <Platform Name="Android64"> + <RemoteDir>library\lib\armeabi-v7a</RemoteDir> + <Operation>1</Operation> + </Platform> </DeployClass> <DeployClass Name="AndroidLibnativeMipsFile"> <Platform Name="Android"> <RemoteDir>library\lib\mips</RemoteDir> <Operation>1</Operation> </Platform> + <Platform Name="Android64"> + <RemoteDir>library\lib\mips</RemoteDir> + <Operation>1</Operation> + </Platform> </DeployClass> <DeployClass Name="AndroidServiceOutput"> <Platform Name="Android"> <RemoteDir>library\lib\armeabi-v7a</RemoteDir> <Operation>1</Operation> </Platform> + <Platform Name="Android64"> + <RemoteDir>library\lib\arm64-v8a</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="AndroidServiceOutput_Android32"> + <Platform Name="Android64"> + <RemoteDir>library\lib\armeabi-v7a</RemoteDir> + <Operation>1</Operation> + </Platform> </DeployClass> <DeployClass Name="AndroidSplashImageDef"> <Platform Name="Android"> <RemoteDir>res\drawable</RemoteDir> <Operation>1</Operation> </Platform> + <Platform Name="Android64"> + <RemoteDir>res\drawable</RemoteDir> + <Operation>1</Operation> + </Platform> </DeployClass> <DeployClass Name="AndroidSplashStyles"> <Platform Name="Android"> <RemoteDir>res\values</RemoteDir> <Operation>1</Operation> </Platform> + <Platform Name="Android64"> + <RemoteDir>res\values</RemoteDir> + <Operation>1</Operation> + </Platform> </DeployClass> <DeployClass Name="AndroidSplashStylesV21"> <Platform Name="Android"> <RemoteDir>res\values-v21</RemoteDir> <Operation>1</Operation> </Platform> + <Platform Name="Android64"> + <RemoteDir>res\values-v21</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="Android_Colors"> + <Platform Name="Android"> + <RemoteDir>res\values</RemoteDir> + <Operation>1</Operation> + </Platform> + <Platform Name="Android64"> + <RemoteDir>res\values</RemoteDir> + <Operation>1</Operation> + </Platform> </DeployClass> <DeployClass Name="Android_DefaultAppIcon"> <Platform Name="Android"> <RemoteDir>res\drawable</RemoteDir> <Operation>1</Operation> </Platform> + <Platform Name="Android64"> + <RemoteDir>res\drawable</RemoteDir> + <Operation>1</Operation> + </Platform> </DeployClass> <DeployClass Name="Android_LauncherIcon144"> <Platform Name="Android"> <RemoteDir>res\drawable-xxhdpi</RemoteDir> <Operation>1</Operation> </Platform> + <Platform Name="Android64"> + <RemoteDir>res\drawable-xxhdpi</RemoteDir> + <Operation>1</Operation> + </Platform> </DeployClass> <DeployClass Name="Android_LauncherIcon36"> <Platform Name="Android"> <RemoteDir>res\drawable-ldpi</RemoteDir> <Operation>1</Operation> </Platform> + <Platform Name="Android64"> + <RemoteDir>res\drawable-ldpi</RemoteDir> + <Operation>1</Operation> + </Platform> </DeployClass> <DeployClass Name="Android_LauncherIcon48"> <Platform Name="Android"> <RemoteDir>res\drawable-mdpi</RemoteDir> <Operation>1</Operation> </Platform> + <Platform Name="Android64"> + <RemoteDir>res\drawable-mdpi</RemoteDir> + <Operation>1</Operation> + </Platform> </DeployClass> <DeployClass Name="Android_LauncherIcon72"> <Platform Name="Android"> <RemoteDir>res\drawable-hdpi</RemoteDir> <Operation>1</Operation> </Platform> + <Platform Name="Android64"> + <RemoteDir>res\drawable-hdpi</RemoteDir> + <Operation>1</Operation> + </Platform> </DeployClass> <DeployClass Name="Android_LauncherIcon96"> <Platform Name="Android"> <RemoteDir>res\drawable-xhdpi</RemoteDir> <Operation>1</Operation> </Platform> + <Platform Name="Android64"> + <RemoteDir>res\drawable-xhdpi</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="Android_NotificationIcon24"> + <Platform Name="Android"> + <RemoteDir>res\drawable-mdpi</RemoteDir> + <Operation>1</Operation> + </Platform> + <Platform Name="Android64"> + <RemoteDir>res\drawable-mdpi</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="Android_NotificationIcon36"> + <Platform Name="Android"> + <RemoteDir>res\drawable-hdpi</RemoteDir> + <Operation>1</Operation> + </Platform> + <Platform Name="Android64"> + <RemoteDir>res\drawable-hdpi</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="Android_NotificationIcon48"> + <Platform Name="Android"> + <RemoteDir>res\drawable-xhdpi</RemoteDir> + <Operation>1</Operation> + </Platform> + <Platform Name="Android64"> + <RemoteDir>res\drawable-xhdpi</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="Android_NotificationIcon72"> + <Platform Name="Android"> + <RemoteDir>res\drawable-xxhdpi</RemoteDir> + <Operation>1</Operation> + </Platform> + <Platform Name="Android64"> + <RemoteDir>res\drawable-xxhdpi</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="Android_NotificationIcon96"> + <Platform Name="Android"> + <RemoteDir>res\drawable-xxxhdpi</RemoteDir> + <Operation>1</Operation> + </Platform> + <Platform Name="Android64"> + <RemoteDir>res\drawable-xxxhdpi</RemoteDir> + <Operation>1</Operation> + </Platform> </DeployClass> <DeployClass Name="Android_SplashImage426"> <Platform Name="Android"> <RemoteDir>res\drawable-small</RemoteDir> <Operation>1</Operation> </Platform> + <Platform Name="Android64"> + <RemoteDir>res\drawable-small</RemoteDir> + <Operation>1</Operation> + </Platform> </DeployClass> <DeployClass Name="Android_SplashImage470"> <Platform Name="Android"> <RemoteDir>res\drawable-normal</RemoteDir> <Operation>1</Operation> </Platform> + <Platform Name="Android64"> + <RemoteDir>res\drawable-normal</RemoteDir> + <Operation>1</Operation> + </Platform> </DeployClass> <DeployClass Name="Android_SplashImage640"> <Platform Name="Android"> <RemoteDir>res\drawable-large</RemoteDir> <Operation>1</Operation> </Platform> + <Platform Name="Android64"> + <RemoteDir>res\drawable-large</RemoteDir> + <Operation>1</Operation> + </Platform> </DeployClass> <DeployClass Name="Android_SplashImage960"> <Platform Name="Android"> <RemoteDir>res\drawable-xlarge</RemoteDir> <Operation>1</Operation> </Platform> + <Platform Name="Android64"> + <RemoteDir>res\drawable-xlarge</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="Android_Strings"> + <Platform Name="Android"> + <RemoteDir>res\values</RemoteDir> + <Operation>1</Operation> + </Platform> + <Platform Name="Android64"> + <RemoteDir>res\values</RemoteDir> + <Operation>1</Operation> + </Platform> </DeployClass> <DeployClass Name="DebugSymbols"> <Platform Name="iOSSimulator"> @@ -478,6 +639,9 @@ <Platform Name="Android"> <Operation>0</Operation> </Platform> + <Platform Name="Android64"> + <Operation>0</Operation> + </Platform> <Platform Name="iOSDevice32"> <Operation>0</Operation> </Platform> @@ -499,7 +663,106 @@ <Operation>0</Operation> </Platform> </DeployClass> - <DeployClass Name="iPad_Launch1024"> + <DeployClass Name="iPad_Launch1024x768"> + <Platform Name="iOSDevice32"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSDevice64"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSSimulator"> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="iPad_Launch1536x2048"> + <Platform Name="iOSDevice32"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSDevice64"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSSimulator"> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="iPad_Launch1668"> + <Platform Name="iOSDevice32"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSDevice64"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSSimulator"> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="iPad_Launch1668x2388"> + <Platform Name="iOSDevice32"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSDevice64"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSSimulator"> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="iPad_Launch2048x1536"> + <Platform Name="iOSDevice32"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSDevice64"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSSimulator"> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="iPad_Launch2048x2732"> + <Platform Name="iOSDevice32"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSDevice64"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSSimulator"> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="iPad_Launch2224"> + <Platform Name="iOSDevice32"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSDevice64"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSSimulator"> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="iPad_Launch2388x1668"> + <Platform Name="iOSDevice32"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSDevice64"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSSimulator"> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="iPad_Launch2732x2048"> + <Platform Name="iOSDevice32"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSDevice64"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSSimulator"> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="iPad_Launch768x1024"> <Platform Name="iOSDevice32"> <Operation>1</Operation> </Platform> @@ -510,7 +773,7 @@ <Operation>1</Operation> </Platform> </DeployClass> - <DeployClass Name="iPad_Launch1536"> + <DeployClass Name="iPhone_Launch1125"> <Platform Name="iOSDevice32"> <Operation>1</Operation> </Platform> @@ -521,7 +784,7 @@ <Operation>1</Operation> </Platform> </DeployClass> - <DeployClass Name="iPad_Launch2048"> + <DeployClass Name="iPhone_Launch1136x640"> <Platform Name="iOSDevice32"> <Operation>1</Operation> </Platform> @@ -532,7 +795,73 @@ <Operation>1</Operation> </Platform> </DeployClass> - <DeployClass Name="iPad_Launch768"> + <DeployClass Name="iPhone_Launch1242"> + <Platform Name="iOSDevice32"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSDevice64"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSSimulator"> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="iPhone_Launch1242x2688"> + <Platform Name="iOSDevice32"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSDevice64"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSSimulator"> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="iPhone_Launch1334"> + <Platform Name="iOSDevice32"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSDevice64"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSSimulator"> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="iPhone_Launch1792"> + <Platform Name="iOSDevice32"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSDevice64"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSSimulator"> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="iPhone_Launch2208"> + <Platform Name="iOSDevice32"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSDevice64"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSSimulator"> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="iPhone_Launch2436"> + <Platform Name="iOSDevice32"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSDevice64"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSSimulator"> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="iPhone_Launch2688x1242"> <Platform Name="iOSDevice32"> <Operation>1</Operation> </Platform> @@ -576,10 +905,35 @@ <Operation>1</Operation> </Platform> </DeployClass> + <DeployClass Name="iPhone_Launch750"> + <Platform Name="iOSDevice32"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSDevice64"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSSimulator"> + <Operation>1</Operation> + </Platform> + </DeployClass> + <DeployClass Name="iPhone_Launch828"> + <Platform Name="iOSDevice32"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSDevice64"> + <Operation>1</Operation> + </Platform> + <Platform Name="iOSSimulator"> + <Operation>1</Operation> + </Platform> + </DeployClass> <DeployClass Name="ProjectAndroidManifest"> <Platform Name="Android"> <Operation>1</Operation> </Platform> + <Platform Name="Android64"> + <Operation>1</Operation> + </Platform> </DeployClass> <DeployClass Name="ProjectiOSDeviceDebug"> <Platform Name="iOSDevice32"> @@ -672,6 +1026,10 @@ <RemoteDir>library\lib\armeabi-v7a</RemoteDir> <Operation>1</Operation> </Platform> + <Platform Name="Android64"> + <RemoteDir>library\lib\arm64-v8a</RemoteDir> + <Operation>1</Operation> + </Platform> <Platform Name="iOSDevice32"> <Operation>1</Operation> </Platform> @@ -696,6 +1054,12 @@ <Operation>0</Operation> </Platform> </DeployClass> + <DeployClass Name="ProjectOutput_Android32"> + <Platform Name="Android64"> + <RemoteDir>library\lib\armeabi-v7a</RemoteDir> + <Operation>1</Operation> + </Platform> + </DeployClass> <DeployClass Name="ProjectUWPManifest"> <Platform Name="Win32"> <Operation>1</Operation> @@ -727,12 +1091,13 @@ <ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/> <ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/> <ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/> - <ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/> <ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/> - <ProjectRoot Platform="OSX32" Name="$(PROJECTNAME).app"/> - <ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/> + <ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/> <ProjectRoot Platform="OSX64" Name="$(PROJECTNAME).app"/> + <ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/> + <ProjectRoot Platform="OSX32" Name="$(PROJECTNAME).app"/> <ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/> + <ProjectRoot Platform="Android64" Name="$(PROJECTNAME)"/> </Deployment> </BorlandProject> <ProjectFileVersion>12</ProjectFileVersion> diff --git a/src/pascalcoin_wallet_classic.lpi b/src/pascalcoin_wallet_classic.lpi index 446ccb9aa..9b237b4f0 100644 --- a/src/pascalcoin_wallet_classic.lpi +++ b/src/pascalcoin_wallet_classic.lpi @@ -1,16 +1,16 @@ <?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> - <Version Value="12"/> + <Version Value="11"/> <PathDelim Value="\"/> <General> <Flags> <MainUnitHasUsesSectionForAllUnits Value="False"/> <MainUnitHasCreateFormStatements Value="False"/> <MainUnitHasTitleStatement Value="False"/> - <CompatibilityMode Value="True"/> </Flags> <SessionStorage Value="InProjectDir"/> + <MainUnit Value="0"/> <Title Value="PascalCoin Wallet"/> <ResourceType Value="res"/> <Icon Value="0"/> @@ -42,7 +42,7 @@ <PackageName Value="LCL"/> </Item1> </RequiredPackages> - <Units Count="37"> + <Units Count="39"> <Unit0> <Filename Value="pascalcoin_wallet_classic.dpr"/> <IsPartOfProject Value="True"/> @@ -222,6 +222,15 @@ <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> </Unit36> + <Unit37> + <Filename Value="gui-classic\UFRMAskForAccount.pas"/> + <IsPartOfProject Value="True"/> + <HasResources Value="True"/> + </Unit37> + <Unit38> + <Filename Value="core\UPCTNetDataExtraMessages.pas"/> + <IsPartOfProject Value="True"/> + </Unit38> </Units> </ProjectOptions> <CompilerOptions> @@ -232,7 +241,7 @@ </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir)"/> - <OtherUnitFiles Value="core;gui-classic;libraries\synapse;libraries\sphere10;libraries\cryptolib4pascal;libraries\simplebaselib4pascal;libraries\hashlib4pascal;libraries\generics.collections;libraries\pascalcoin;libraries\paszlib"/> + <OtherUnitFiles Value="core;gui-classic;libraries\synapse;libraries\sphere10;libraries\cryptolib4pascal;libraries\simplebaselib4pascal;libraries\hashlib4pascal;libraries\pascalcoin;libraries\paszlib;libraries\gnugettext;libraries\abstractmem;libraries\regex"/> <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> @@ -242,6 +251,7 @@ </Parsing> <Linking> <Debugging> + <GenerateDebugInfo Value="False"/> <DebugInfoType Value="dsDwarf2Set"/> </Debugging> <Options> diff --git a/src/pascalcoin_wallet_experimental.lpi b/src/pascalcoin_wallet_experimental.lpi index bf856f62f..2db9b0c5a 100644 --- a/src/pascalcoin_wallet_experimental.lpi +++ b/src/pascalcoin_wallet_experimental.lpi @@ -1,16 +1,16 @@ <?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> - <Version Value="12"/> + <Version Value="11"/> <PathDelim Value="\"/> <General> <Flags> <MainUnitHasUsesSectionForAllUnits Value="False"/> <MainUnitHasCreateFormStatements Value="False"/> <MainUnitHasTitleStatement Value="False"/> - <CompatibilityMode Value="True"/> </Flags> <SessionStorage Value="InProjectDir"/> + <MainUnit Value="0"/> <Title Value="PascalCoin Wallet"/> <ResourceType Value="res"/> </General> @@ -28,7 +28,7 @@ </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir);libraries\generics.collections\inc"/> - <OtherUnitFiles Value="core;gui-experimental;libraries\synapse;libraries\sphere10;libraries\simplebaselib4pascal;libraries\cryptolib4pascal;libraries\hashlib4pascal;libraries\generics.collections;libraries\pascalcoin;gui-experimental\core.utils;gui-experimental\wizards\wallet;gui-experimental\wizards\operations;gui-classic;libraries\paszlib"/> + <OtherUnitFiles Value="core;gui-experimental;libraries\synapse;libraries\abstractmem;\libraries\regex;libraries\sphere10;libraries\simplebaselib4pascal;libraries\cryptolib4pascal;libraries\hashlib4pascal;libraries\generics.collections;libraries\pascalcoin;gui-experimental\core.utils;gui-experimental\wizards\wallet;gui-experimental\wizards\operations;gui-classic;libraries\paszlib;libraries\regex"/> <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> @@ -77,7 +77,7 @@ <PackageName Value="LCL"/> </Item1> </RequiredPackages> - <Units Count="104"> + <Units Count="107"> <Unit0> <Filename Value="pascalcoin_wallet_experimental.dpr"/> <IsPartOfProject Value="True"/> @@ -642,6 +642,18 @@ <Filename Value="core\URandomHash2.pas"/> <IsPartOfProject Value="True"/> </Unit103> + <Unit104> + <Filename Value="libraries\abstractmem\UAbstractMem.pas"/> + <IsPartOfProject Value="True"/> + </Unit104> + <Unit105> + <Filename Value="core\UEncoding.pas"/> + <IsPartOfProject Value="True"/> + </Unit105> + <Unit106> + <Filename Value="libraries\regex\uregexpr.pas"/> + <IsPartOfProject Value="True"/> + </Unit106> </Units> </ProjectOptions> <CompilerOptions> @@ -652,7 +664,7 @@ </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir);libraries\generics.collections\inc"/> - <OtherUnitFiles Value="core;gui-experimental;libraries\simplebaselib4pascal;libraries\hashlib4pascal;libraries\cryptolib4pascal;libraries\synapse;libraries\sphere10;libraries\generics.collections;libraries\pascalcoin;gui-experimental\core.utils;gui-experimental\wizards\wallet;gui-experimental\wizards\operations;libraries\paszlib;gui-classic"/> + <OtherUnitFiles Value="core;gui-experimental;libraries\simplebaselib4pascal;libraries\hashlib4pascal;libraries\cryptolib4pascal;libraries\synapse;libraries\sphere10;libraries\generics.collections;libraries\pascalcoin;gui-experimental\core.utils;gui-experimental\wizards\wallet;gui-experimental\wizards\operations;libraries\paszlib;gui-classic;libraries\abstractmem;libraries\regex"/> <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> @@ -662,7 +674,7 @@ </Parsing> <CodeGeneration> <Optimizations> - <OptimizationLevel Value="3"/> + <OptimizationLevel Value="0"/> </Optimizations> </CodeGeneration> <Linking> diff --git a/src/tests/PascalCoinUnitTests.lpr b/src/tests/PascalCoinUnitTests.lpr index b241055f7..e3ff030bc 100644 --- a/src/tests/PascalCoinUnitTests.lpr +++ b/src/tests/PascalCoinUnitTests.lpr @@ -5,7 +5,7 @@ uses Interfaces, Forms, GuiTestRunner, UCommon.Collections, UCommon.Tests, UCommon.Collections.Tests, UMemory.Tests, UThread.Tests, URandomHash.Tests, - URandomHash2.Tests, URandomHash; + URandomHash2.Tests, URandomHash, ubasetypes.tests; {$R *.res} diff --git a/src/tests/ubasetypes.tests.pas b/src/tests/ubasetypes.tests.pas new file mode 100644 index 000000000..fd4fcbd0b --- /dev/null +++ b/src/tests/ubasetypes.tests.pas @@ -0,0 +1,60 @@ +unit UBaseTypes.Tests; + +{$mode delphi} +{$H+} +{$modeswitch nestedprocvars} + +interface + +uses + Classes, SysUtils, fpcunit, + testregistry, + UBaseTypes; + +type + + { TBytesBufferTest } + + TBytesBufferTest = class(TTestCase) + published + procedure Test_SaveToStream; + end; + +implementation + +{ TBytesBufferTest } + +procedure TBytesBufferTest.Test_SaveToStream; +var Lbb, Lbb2 : TBytesBuffer; + LStream : TStream; + LBuffer : TBytes; + i : Integer; +begin + SetLength(LBuffer,1000 + Random(1000) ); + for i:= 0 to High(LBuffer) do begin + LBuffer[i] := Random(250)+1; + end; + Lbb := TBytesBuffer.Create(Random(1000)+100); + Lbb.Add(LBuffer); + Lbb2 := TBytesBuffer.CreateCopy(Lbb); + LStream := TMemoryStream.Create; + try + Lbb.SaveToStream(LStream); + Self.AssertEquals('T1',0,Lbb.Compare(Lbb2)); + Self.AssertEquals('T2',0,Lbb.Compare(LStream)); + Lbb2.Clear; + Lbb2.LoadFromStream(LStream); + Self.AssertEquals('T3',0,Lbb.Compare(Lbb2)); + finally + Lbb.Free; + Lbb2.Free; + end; +end; + + +initialization + Randomize; + RegisterTest(TBytesBufferTest); +end. + + diff --git a/windows-dll/libcrypto-1_1-x64.dll b/windows-dll/libcrypto-1_1-x64.dll new file mode 100644 index 000000000..b781c8fd8 Binary files /dev/null and b/windows-dll/libcrypto-1_1-x64.dll differ