From b09704168c535a580f143cba7922202270d60fe7 Mon Sep 17 00:00:00 2001 From: Haroune Mohammedi Date: Mon, 9 Oct 2023 09:17:01 +0200 Subject: [PATCH 1/4] feat: wip: support cairo v2.3.0 --- kanabi.ts | 59 +++++++++++++++++++++++++++++++++++++++---- test/kanabi.test-d.ts | 2 +- 2 files changed, 55 insertions(+), 6 deletions(-) diff --git a/kanabi.ts b/kanabi.ts index 2de07f1..f7c6f6b 100644 --- a/kanabi.ts +++ b/kanabi.ts @@ -14,6 +14,7 @@ export type CairoInt = `${'core::integer::u'}${MBits}` export type CairoBigInt = `${'core::integer::u'}${BigMBits}` export type CairoU256 = 'core::integer::u256' export type CairoAddress = 'core::starknet::contract_address::ContractAddress' +export type CairoClassHash = 'core::starknet::class_hash::ClassHash' export type CairoFunction = 'function' export type CairoVoid = '()' export type CairoBool = 'core::bool' @@ -41,6 +42,7 @@ type AbiType = | CairoBigInt | CairoU256 | CairoAddress + | CairoClassHash | CairoBool | CairoVoid @@ -66,6 +68,24 @@ type AbiOutput = { type AbiStateMutability = 'view' | 'external' +type AbiImpl = { + type: 'impl' + name: string + interface_name: string +} + +type AbiInterface = { + type: 'interface' + name: string + items: readonly AbiFunction[] +} + +type AbiConstructor = { + type: 'constructor' + name: 'constructor' + inputs: readonly AbiParameter[] +} + type AbiFunction = { type: 'function' name: string @@ -74,12 +94,22 @@ type AbiFunction = { state_mutability: AbiStateMutability } -type AbiEvent = { +type AbiEventStruct = { type: 'event' name: string - inputs: readonly AbiParameter[] + kind: 'struct' + members: readonly AbiParameter[] } +type AbiEventEnum = { + type: 'event' + name: string + kind: 'enum' + variants: readonly AbiParameter[] +} + +type AbiEvent = AbiEventStruct | AbiEventEnum + type AbiMember = { name: string type: string @@ -97,7 +127,15 @@ type AbiEnum = { variants: readonly AbiParameter[] } -export type Abi = readonly (AbiFunction | AbiStruct | AbiEvent | AbiEnum)[] +export type Abi = readonly ( + | AbiImpl + | AbiInterface + | AbiConstructor + | AbiFunction + | AbiStruct + | AbiEnum + | AbiEvent +)[] /// Implement type _BuildArgs< @@ -135,11 +173,20 @@ export type FunctionRet< ExtractAbiFunction['outputs'][0]['type'] > -export type ExtractAbiFunctions = Extract< +export type ExtractAbiImpls = Extract< TAbi[number], - { type: 'function' } + { type: 'impl' } > +export type ExtractAbiInterfaces = Extract< + TAbi[number], + { type: 'interface' } +> + +export type ExtractAbiFunctions = + | Extract['items'][number], { type: 'function' }> + | Extract + export type ExtractAbiFunctionNames = ExtractAbiFunctions['name'] @@ -187,6 +234,8 @@ type PrimitiveTypeLookup = { [_ in CairoBigInt]: number | bigint } & { [_ in CairoAddress]: string +} & { + [_ in CairoClassHash]: string } & { [_ in CairoVoid]: void } & { diff --git a/test/kanabi.test-d.ts b/test/kanabi.test-d.ts index 1a239a7..1f364fb 100644 --- a/test/kanabi.test-d.ts +++ b/test/kanabi.test-d.ts @@ -24,7 +24,7 @@ function returnVoid() {} const voidValue = returnVoid() const bigIntValue = 105n const intValue = 10 -const stringValue = "s" +const stringValue = 's' const emptyArray: [] = [] const boolValue = true From b8510c36b5d1e2f767a198f782ba3681df19ad82 Mon Sep 17 00:00:00 2001 From: Haroune Mohammedi Date: Fri, 20 Oct 2023 12:22:50 +0200 Subject: [PATCH 2/4] feat: full support for cairo v2.3.0 --- README.md | 33 +- test/example.cairo | 89 -- test/example.json | 1883 ------------------------------------ test/example.ts | 387 ++++---- test/example/.gitignore | 1 + test/example/Scarb.toml | 11 + test/example/src/lib.cairo | 110 +++ 7 files changed, 357 insertions(+), 2157 deletions(-) delete mode 100644 test/example.cairo delete mode 100644 test/example.json create mode 100644 test/example/.gitignore create mode 100644 test/example/Scarb.toml create mode 100644 test/example/src/lib.cairo diff --git a/README.md b/README.md index 746f201..89d6bcf 100644 --- a/README.md +++ b/README.md @@ -48,25 +48,26 @@ abiwan will support multiple Cairo compiler versions, but not in parallel - diff Currently supported: -| Abi-Wan npm | Cairo compiler | -| ------------- | ------------- | -| [1.0.3](https://www.npmjs.com/package/abi-wan-kanabi/v/1.0.3) | [Cairo v1.0.0](https://github.com/starkware-libs/cairo/releases/tag/v1.0.0)
[Cairo v1.1.0](https://github.com/starkware-libs/cairo/releases/tag/v1.1.0) | +| Abi-Wan npm | Cairo compiler | +| ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| [1.0.3](https://www.npmjs.com/package/abi-wan-kanabi/v/1.0.3) | [Cairo v1.0.0](https://github.com/starkware-libs/cairo/releases/tag/v1.0.0)
[Cairo v1.1.0](https://github.com/starkware-libs/cairo/releases/tag/v1.1.0) | +| [2.0.0](https://www.npmjs.com/package/abi-wan-kanabi/v/2.0.0) | [Cairo v2.3.0-rc0](https://github.com/starkware-libs/cairo/releases/tag/v2.3.0-rc0) | ### Build -To use abiwan, you must first generate types from your contracts' ABI json files, for example using the helper script (deprecated): +To use abiwan, you must first generate types from your contracts' ABI json files, you can use the the helper script: ```bash -./scripts/extract_abi.sh //.json //.json ./ +npm run generate -- --input /path/to/abi.json --output /path/to/abi.ts ``` -This will create a declaration file (.d.ts) for the abi. +This will create a typescript file for the abi. You can then import it in any script and you are set to go: ```typescript -import abi from "./abi_demo.ts"; -import { call } from "./kannabi.ts"; -call(abi, "balance_of", 5n); +import abi from "./path/to/abi"; +import { call } from "./kanabi"; +const balance = call(abi, "balance_of", 5n); ``` > If you think that we should be able to import types directly from the json files, we think so too! @@ -78,14 +79,17 @@ call(abi, "balance_of", 5n); npm run typecheck ``` -### Generate `test/example.ts` from `test/example.json` +### Generate `test/example.ts` ```bash -npm run generate -- --input test/example.json --output test/example.ts +# First build the example project with `scarb` +cd test/example +scarb build +# Then generate test/example.ts +cd ../.. +npm run generate -- --input test/example/target/dev/example_example_contract.contract_class.json --output test/example.ts ``` -Note: `test/example.json` was generated by `starknet-compile test/example.cairo test/example.json` - ### Demo https://drive.google.com/file/d/1OpIgKlk-okvwJn-dkR2Pq2FvOVwlXTUJ/view?usp=sharing @@ -96,7 +100,7 @@ Abiwan is still very young and has not yet been subject to an official release. ##  Supported Cairo Types -Abi-wan-kanabi supports all of Cairo 1 types, here's the mapping between Cairo types and Typescript types +Abi-wan-kanabi supports all of Cairo types, here's the mapping between Cairo types and Typescript types ### Primitive Types @@ -106,6 +110,7 @@ Abi-wan-kanabi supports all of Cairo 1 types, here's the mapping between Cairo t | `u8 - u32` | `number \| bigint`  | | `u64 - u256` | `number \| bigint \| Uint256`  | | `ContractAddress`  | `string` | +| `ClassHash`  | `string` | | `bool` | `boolean`  | | `()`  | `void` | diff --git a/test/example.cairo b/test/example.cairo deleted file mode 100644 index d69641c..0000000 --- a/test/example.cairo +++ /dev/null @@ -1,89 +0,0 @@ -#[contract] -mod HelloStarknet { - use starknet::ContractAddress; - use starknet::get_caller_address; - - use core::traits::TryInto; - use traits::Into; - use option::OptionTrait; - use array::ArrayTrait; - - #[derive(Copy, Drop, Serde)] - enum TestEnum { - int128: u128, - felt: felt252, - tuple: (u32, u32), - } - - #[derive(Drop, Serde)] - struct TestStruct { - int128: u128, - felt: felt252, - tuple: (u32, u32) - } - - #[event] - fn TestEvent(from: ContractAddress, value: felt252) {} - - #[external] - fn fn_felt(felt: felt252) {} - - #[external] - fn fn_felt_u8_bool(felt: felt252, int8: u8, b: bool) {} - - #[view] - fn fn_felt_u8_bool_out_address_felt_u8_bool( - felt: felt252, int8: u8, boolean: bool - ) -> (ContractAddress, felt252, u8, bool) { - let caller = get_caller_address(); - (caller, felt, int8, boolean) - } - - #[view] - fn fn_felt_out_felt(felt: felt252) -> felt252 { - felt - } - - #[view] - fn fn_out_simple_option() -> Option { - Option::Some(1) - } - - #[view] - fn fn_out_nested_option() -> Option> { - Option::Some(Option::Some(1)) - } - - #[view] - fn fn_simple_array(arg: Array) {} - - #[view] - fn fn_out_simple_array() -> Array { - let mut a = ArrayTrait::::new(); - a.append(0); - a.append(1); - a.append(2); - ArrayTrait::new() - } - - #[view] - fn fn_struct_array(arg: Array) {} - - #[view] - fn fn_struct(arg: TestStruct) {} - - #[view] - fn fn_enum(arg: TestEnum) {} - - #[view] - fn fn_enum_array(arg: Array) {} - - #[view] - fn fn_out_enum_array() -> Array { - let mut messages: Array = ArrayTrait::new(); - messages.append(TestEnum::int128(100_u128)); - messages.append(TestEnum::felt('hello world')); - messages.append(TestEnum::tuple((10_u32, 30_u32))); - messages - } -} diff --git a/test/example.json b/test/example.json deleted file mode 100644 index fef0174..0000000 --- a/test/example.json +++ /dev/null @@ -1,1883 +0,0 @@ -{ - "sierra_program": [ - "0x1", - "0x0", - "0x0", - "0x1", - "0x0", - "0x0", - "0x26a", - "0x196", - "0x45", - "0x52616e6765436865636b", - "0x0", - "0x4761734275696c74696e", - "0x66656c74323532", - "0x4172726179", - "0x1", - "0x2", - "0x536e617073686f74", - "0x3", - "0x537472756374", - "0x1baeba72e79e9db2587cf44fedb2f3700b2075a5e8e39a562584862c4b71f62", - "0x4", - "0x2ee1e2b1b89f8c495f200e4956278a4d47395fe262f27b52e5865c9524c08c3", - "0x456e756d", - "0x11c6d8087e00642489f92d2821ad6ebd6532ad1a3b6d12833da6d6810391511", - "0x6", - "0x753332", - "0x3288d594b9a45d15bb2fcb7903f06cdb06b27f0ba88186ec4cfaa98307cb972", - "0x4275696c74696e436f737473", - "0x5", - "0x19b3b4955bdcfa379bfc5a4949111c4efdd79128f8676f4d0895419b22e2ad7", - "0xb", - "0x53797374656d", - "0x7538", - "0x3b9ddf97bd58cc7301a2107c3eabad82196f38221c880cd3645d07c3aac1422", - "0xe", - "0x2d7b9ba5597ffc180f5bbd030da76b84ecf1e4f1311043a0a15295f29ccc1b0", - "0x9", - "0x436f6e747261637441646472657373", - "0x11", - "0x12", - "0x3d89eacdfab4b638942645760b2d4be5a68552e3be2f1db3a96ebd21299965a", - "0x13", - "0x7ce2d338509c517c3b9a0440e112e30e5531b00f26cab344a2450cff3c4f3c", - "0xf", - "0x172b2d029d59f97d93dd24b7cc98c01ca8efd7bf422afd18e9041d6a1a5c170", - "0x16", - "0x17", - "0xb60ad9cf375613bec498eca9198b0dc069a605f6bef9745d73c7d0d9c1a0ba", - "0x18", - "0x1dd6d80faabe40b870e2bac9bae20133f8a150c977bf480085e39aaa4e0362a", - "0x1b", - "0x75313238", - "0x8", - "0x32cced077aa95c3a495297a511f3fff5161ece129b19f63dcfe9604a076498a", - "0x1d", - "0x1e", - "0x1f", - "0x37edc3412394d68b14c849c67bb6662f91ec84934b052829de65692e51436ef", - "0x20", - "0x21", - "0x2cdf34308dc4d3bca405a439ab48afd57ba3df5d9db7b6e6bf6b47692743c91", - "0x22", - "0x3e17a015debf13259859e5ef6df843a2e9b60d09adaaeda04ac2d1ba239c7ab", - "0x2ae3396109c34fe3a5575a292f244eb05d811af85b7e42778c9e74390a4f591", - "0xd34e83dbb5e595eef2735ba1be9d815736460b14eb41685b779ed883faf27f", - "0x25", - "0x1b14de399c117fa6c2f6d103b34a04b7220d4f7d4b3a9eabb4d155571a9dbf6", - "0x27", - "0x28", - "0x12de53e86f81d546b66aa0cf9af98cffb23fb3236b09a00caf42ec6165cbdb9", - "0x29", - "0x426f78", - "0x29d7d57c04a880978e7b3689f6218e507f3be17588744b58dc17762447ad0e7", - "0x2c", - "0x4e6f6e5a65726f", - "0x125048bba125edb4f72a816890f2f63324d796e84a92b9bd1eb3a97f4e938ee", - "0x2f", - "0x34c1a4ee6ef3ec231b7e21635f0ab0f5e73f747e42beb02d65fc54c8e0e0575", - "0x1a", - "0x1909a2057b9c1373b889e003e050a09f431d8108e0659d03444ced99a6eea68", - "0x2944817ee85b84684ca4f6c6fd495f560f32cdcf9e2b779440250486ae54843", - "0x653823bce0fd6e446506b0afae876fb23b4681f151b34db764b9e1147d03f9", - "0x2b", - "0x753634", - "0x3808c701a5d13e100ab11b6c02f91f752ecae7e420d21b56c90ec0a475cc7e5", - "0x35", - "0x36", - "0x2e655a7513158873ca2e5e659a9e175d23bf69a2325cdd0397ca3b8d864b967", - "0x38", - "0x19367431bdedfe09ea99eed9ade3de00f195dd97087ed511b8942ebb45dbc5a", - "0x37", - "0x39", - "0x3a", - "0x3b", - "0x26c97610bba318e7be7ed9746815afccc1b89e6a3174fbec5d5534288167ac7", - "0x3c", - "0x53ab85eada0a6ea028c03d62be3bee85e33846f2cb70861f36156d3c342647", - "0x3e", - "0x19b9ae4ba181a54f9e7af894a81b44a60aea4c9803939708d6cc212759ee94c", - "0x1c86a3b25e98f964f7653ef93d390234ba042c98d396c578e7aa4a27925073f", - "0x41", - "0x2c7badf5cd070e89531ef781330a9554b04ce4ea21304b67a30ac3d43df84a2", - "0x12e", - "0x7265766f6b655f61705f747261636b696e67", - "0x656e61626c655f61705f747261636b696e67", - "0x77697468647261775f676173", - "0x6272616e63685f616c69676e", - "0x73746f72655f74656d70", - "0x66756e6374696f6e5f63616c6c", - "0xd", - "0x656e756d5f6d61746368", - "0x7", - "0x7374727563745f6465636f6e737472756374", - "0x61727261795f6c656e", - "0x7533325f636f6e7374", - "0x7533325f6571", - "0x7374727563745f636f6e737472756374", - "0x656e756d5f696e6974", - "0x6a756d70", - "0x626f6f6c5f6e6f745f696d706c", - "0x64726f70", - "0x6765745f6275696c74696e5f636f737473", - "0xa", - "0x77697468647261775f6761735f616c6c", - "0x64697361626c655f61705f747261636b696e67", - "0x61727261795f6e6577", - "0x736e617073686f745f74616b65", - "0xc", - "0x66656c743235325f636f6e7374", - "0x4f7574206f6620676173", - "0x61727261795f617070656e64", - "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", - "0x496e70757420746f6f2073686f727420666f7220617267756d656e7473", - "0x10", - "0x14", - "0x15", - "0x19", - "0x1c", - "0x23", - "0x24", - "0x26", - "0x2a", - "0x61727261795f736e617073686f745f706f705f66726f6e74", - "0x2d", - "0x756e626f78", - "0x72656e616d65", - "0x66656c743235325f737562", - "0x66656c743235325f69735f7a65726f", - "0x2e", - "0x30", - "0x75385f636f6e7374", - "0x647570", - "0x31", - "0x32", - "0x33", - "0x34", - "0x753132385f636f6e7374", - "0x64", - "0x68656c6c6f20776f726c64", - "0x75385f7472795f66726f6d5f66656c74323532", - "0x3d", - "0x636f6e74726163745f616464726573735f746f5f66656c74323532", - "0x75385f746f5f66656c74323532", - "0x7533325f746f5f66656c74323532", - "0x3f", - "0x40", - "0x42", - "0x6765745f657865637574696f6e5f696e666f5f73797363616c6c", - "0x43", - "0x75313238735f66726f6d5f66656c74323532", - "0x44", - "0x7533325f7472795f66726f6d5f66656c74323532", - "0x753132385f746f5f66656c74323532", - "0xb00", - "0xffffffffffffffff", - "0x5b", - "0x4d", - "0x46", - "0x47", - "0x48", - "0x49", - "0x4a", - "0x4b", - "0xf1", - "0xe3", - "0xd4", - "0xc4", - "0x84", - "0x88", - "0xb1", - "0xa2", - "0x4c", - "0x4e", - "0x4f", - "0x50", - "0x51", - "0x52", - "0x53", - "0x54", - "0x55", - "0x56", - "0x57", - "0x58", - "0x59", - "0x5a", - "0x5c", - "0x5d", - "0x5e", - "0x5f", - "0x60", - "0x61", - "0x62", - "0x63", - "0x65", - "0x66", - "0x67", - "0x68", - "0x69", - "0x199", - "0x18b", - "0x17c", - "0x16c", - "0x11a", - "0x11e", - "0x159", - "0x14a", - "0x143", - "0x6a", - "0x6b", - "0x6c", - "0x6d", - "0x6e", - "0x6f", - "0x70", - "0x71", - "0x72", - "0x73", - "0x74", - "0x75", - "0x76", - "0x77", - "0x78", - "0x79", - "0x7a", - "0x7b", - "0x206", - "0x1f8", - "0x1b9", - "0x1bd", - "0x1e7", - "0x1da", - "0x25d", - "0x222", - "0x226", - "0x24d", - "0x242", - "0x2b4", - "0x279", - "0x27d", - "0x2a4", - "0x299", - "0x328", - "0x320", - "0x312", - "0x2d8", - "0x2dc", - "0x301", - "0x2f4", - "0x38b", - "0x344", - "0x348", - "0x37b", - "0x370", - "0x369", - "0x3ff", - "0x3f7", - "0x3e9", - "0x3af", - "0x3b3", - "0x3d8", - "0x3cb", - "0x467", - "0x459", - "0x41f", - "0x423", - "0x448", - "0x43b", - "0x4cf", - "0x4c1", - "0x487", - "0x48b", - "0x4b0", - "0x4a3", - "0x543", - "0x53b", - "0x52d", - "0x4f3", - "0x4f7", - "0x51c", - "0x50f", - "0x5a6", - "0x55f", - "0x563", - "0x596", - "0x58b", - "0x584", - "0x5ba", - "0x5bf", - "0x5ca", - "0x7c", - "0x7d", - "0x5e0", - "0x5e5", - "0x5fc", - "0x7e", - "0x5f6", - "0x7f", - "0x80", - "0x60b", - "0x610", - "0x62a", - "0x81", - "0x82", - "0x83", - "0x620", - "0x625", - "0x85", - "0x86", - "0x87", - "0x89", - "0x644", - "0x8a", - "0x8b", - "0x8c", - "0x8d", - "0x8e", - "0x8f", - "0x90", - "0x91", - "0x92", - "0x93", - "0x94", - "0x95", - "0x96", - "0x97", - "0x67b", - "0x685", - "0x98", - "0x99", - "0x9a", - "0x69c", - "0x6a6", - "0x6b1", - "0x6b6", - "0x6d3", - "0x9b", - "0x9c", - "0x6cd", - "0x9d", - "0x9e", - "0x9f", - "0xa0", - "0xa1", - "0xa3", - "0xa4", - "0xa5", - "0xa6", - "0xa7", - "0xa8", - "0xa9", - "0xaa", - "0xab", - "0xac", - "0x709", - "0xad", - "0xae", - "0xaf", - "0xb0", - "0x717", - "0x71c", - "0x739", - "0xb2", - "0x733", - "0xb3", - "0xb4", - "0xb5", - "0xb6", - "0xb7", - "0xb8", - "0xb9", - "0x76a", - "0x763", - "0xba", - "0xbb", - "0x75b", - "0xbc", - "0xbd", - "0xbe", - "0xbf", - "0xc0", - "0x7ca", - "0xc1", - "0x78c", - "0x786", - "0xc2", - "0x7b7", - "0xc3", - "0x7a4", - "0x79e", - "0xc5", - "0x7b4", - "0xc6", - "0x7c2", - "0x7bc", - "0xc7", - "0xc8", - "0xc9", - "0xca", - "0xcb", - "0x7dc", - "0x7e1", - "0x7fe", - "0xcc", - "0xcd", - "0x7f8", - "0xce", - "0xcf", - "0xd0", - "0xd1", - "0xd2", - "0xd3", - "0xd5", - "0xd6", - "0xd7", - "0xd8", - "0xd9", - "0xda", - "0xdb", - "0xdc", - "0xdd", - "0x837", - "0xde", - "0x843", - "0x848", - "0xdf", - "0xe0", - "0xe1", - "0x85d", - "0xe2", - "0xe4", - "0xe5", - "0xe6", - "0xe7", - "0xe8", - "0xe9", - "0xea", - "0xeb", - "0xec", - "0xed", - "0xee", - "0xef", - "0xf0", - "0x882", - "0x886", - "0x8ca", - "0x8a1", - "0x8c0", - "0x8ba", - "0xf2", - "0xf3", - "0x91f", - "0xf4", - "0xf5", - "0x8ef", - "0xf6", - "0xf7", - "0x8f4", - "0xf8", - "0xf9", - "0x911", - "0xfa", - "0x90b", - "0x918", - "0xfb", - "0x966", - "0x93d", - "0xfc", - "0x95c", - "0xfd", - "0x956", - "0x97a", - "0x97f", - "0x996", - "0xfe", - "0x990", - "0xff", - "0x100", - "0x101", - "0x102", - "0x103", - "0x9b5", - "0x9ae", - "0x104", - "0x105", - "0x106", - "0x9f5", - "0x9cc", - "0x107", - "0x9eb", - "0x9e5", - "0xa3e", - "0x108", - "0x109", - "0xa0e", - "0x10a", - "0x10b", - "0xa13", - "0x10c", - "0x10d", - "0xa30", - "0x10e", - "0x10f", - "0xa2a", - "0xa37", - "0x110", - "0x111", - "0xa52", - "0x112", - "0x113", - "0xa57", - "0x114", - "0x115", - "0x116", - "0xa62", - "0x117", - "0x118", - "0x119", - "0x11b", - "0xa6e", - "0xa75", - "0x11c", - "0x11d", - "0xa7f", - "0xa84", - "0xa9b", - "0x11f", - "0xa95", - "0x120", - "0x121", - "0x122", - "0x123", - "0xab2", - "0xac0", - "0x124", - "0x125", - "0xacd", - "0x126", - "0x127", - "0x128", - "0xad7", - "0x129", - "0xae1", - "0xae6", - "0x12a", - "0x12b", - "0x12c", - "0x12d", - "0x1a6", - "0x213", - "0x26a", - "0x2c1", - "0x335", - "0x398", - "0x40c", - "0x474", - "0x4dc", - "0x550", - "0x5b3", - "0x5d1", - "0x5d5", - "0x5d9", - "0x604", - "0x631", - "0x637", - "0x64d", - "0x660", - "0x662", - "0x668", - "0x66c", - "0x688", - "0x68d", - "0x6a9", - "0x6dd", - "0x6e1", - "0x6ef", - "0x70f", - "0x743", - "0x747", - "0x770", - "0x774", - "0x7d0", - "0x7d4", - "0x808", - "0x80c", - "0x81d", - "0x83d", - "0x84b", - "0x863", - "0x86f", - "0x87b", - "0x890", - "0x8d7", - "0x8e3", - "0x92c", - "0x973", - "0x99e", - "0x9bb", - "0xa02", - "0xa4b", - "0xa68", - "0xa78", - "0xaa3", - "0xad1", - "0xadb", - "0xae9", - "0xaf5", - "0x5db8", - "0xd008060280c0180b0080702809018060200701806014020100200c0200400", - "0x60340201c0a008130400604006048020240e008110400601c0603c020240e", - "0x1b00809038100181a0181900809038020600205c0901816018150080903814", - "0xe07c060340201c0a070060680601c0607806034020500a0081d0400607006", - "0x2501824008090381a018060141001823018220080903809018210182000809", - "0x20240a0940601808024060a00609c020240e0980605006034020240a04006", - "0xc0282c0182c0180d00809028020ac090182a018290080903810018090180d", - "0x6034020240a040060c8060c4020240e0c006018050bc0601c060b8060b402", - "0x2e018370080c03810018300183600809038090183501834008090383301814", - "0xa040060ec060e8020240e0e40601805040060e4060e0020240e0bc0601c06", - "0x903807018060fc3b01806020090183e0183d008090383c018140180d00809", - "0xa024061100610c020240e078060340201c0a01c0601842040061040610002", - "0x4900807028100182f0184800809038100182e0184700809038460184500807", - "0x601c0613c020b00a138060183f078061340613406130020300a0084b12806", - "0x1e0185301852018510081002850018060fc070180701807018140182e0181e", - "0x60183f0240615c06158020240e154060340201c0a150060183f01c0607806", - "0x5b0080903839018060fc100182c0185a00809038100185901858008090381a", - "0x21800217c5e0b8060b806034020240a0240615406174020240e0400617006", - "0x69050060186819c06018660080601863194090186405006018630086200861", - "0x618c0201c1c018071b410018061b0021ac2c0180618c0201c061a80701806", - "0x60186300871040060187007006018660086f018070700601c6d0086e07006", - "0x9018061c009018061d807018061d41a02406190070180618c021d0021cc72", - "0x60186319406018630180601863008071dc0601c6d058060186c050060186c", - "0x61e023024061900601c77018071b407018061e87901c061e007018061c077", - "0x601866078090186408c06018661f409018641f0070187805006018701ec07", - "0x7e0180619821024061901c018061c01a018061c01f024061901a0180618c7d", - "0x641f80901864024060186307c060186307c060187007c06018760840601868", - "0x618c23018061c023018061d82602406190250240619007018061d87f02406", - "0x9018641fc06018631fc06018701fc060187620009018640a0090186408c06", - "0x8102406190250180618c260180619828018061a080018061982a0240619046", - "0x6820406018660bc0901864118060186309406018760b809018640940601870", - "0x6190320180618c330180619835018061a0820180619830024061902a01806", - "0x6018700d409018640c0060186320c06018660cc09018640c806018700c809", - "0x390240619039018061c08302406190390180618c8401806198820240619030", - "0x640ec060187021009018640ec06018630f006018660f806018682140601866", - "0x201c87018071b407018062183c024061904a0180618c3b018061d83b02406", - "0x60188901c060188821c06018660180721c0601c6d21c06018630300601863", - "0x3e02406190100180618c0601c67018071b4670180618c0201c67018071b407", - "0x6d23006018700088b0088a00807018780180708c0601c6d0080708c0601c6d", - "0x61a08d0180619885024061900601c7d018071b47d0180618c0201c7d01807", - "0x71f80601c6d1f80601863008071f80601c6d084060186c07c060186c11006", - "0x901806224870240619041024061904a024061901e0180618c1f018061a006", - "0x6018751fc0601866008071fc0601c6d0180701878018070188e0400601889", - "0x601c80018071b4800180618c0201c80018071b428018061b08c024061901a", - "0x601869118060188f01c070188e068060187a008070188e018070980601c6d", - "0x8d02406190900180618c90018061b044024061902c018061c02c018061d81a", - "0x640c00601875018072040601c6d2040601863008072040601c6d0a8060186c", - "0x71b40601c82018071b4820180618c0201c82018071b435018061b09002406", - "0x6d0c0060186c2480601866248090186424406018662440901864018070cc06", - "0x71b4070180623c0601c83018071b42e018061c0830180618c0201c8301807", - "0x6d01c0701878018070e40601c6d2100601863018072100601c6d008070e406", - "0x61d40201c84018071b43901806224140180622402018062240701c3901807", - "0x72140601c6d2140601863008072140601c6d0f8060186c24c09018640e406", - "0x61a87201c061a89601c061e039018061e89501c062500601c3c018071b406", - "0x90186424c060186324c060186c0e40601869128060188f0bc060186c0bc07", - "0x61a0540180622057018061a098018061984e0240619023018062240225c4d", - "0x63008072340601c6d110060186c078060187014c0601870148060187015006", - "0x1c01806224022681a01806224022641e018062240601c8d018071b48d01806", - "0x72700601c6d068060188624006018680089b0b00601889008070980601c6d", - "0x71b490018061c01a018062209c018061980601c9c018071b49c0180618c02", - "0x601c6d2440601863008072440601c6d14809018640c0060187a008070cc06", - "0x92018071b4920180618c0201c92018071b49d0180619850024061900601c91", - "0x601863008072780601c6d0e4060188624c0601868008070f00601c6d01807", - "0x227c93018061c0530240619039018062209e018061980601c9e018071b49e", - "0x6c15009018642800601889018072800601c6d2800601863008072800601c6d", - "0xa2018061b0022840601c98018071b4980180618c0201c98018071b45701806", - "0x601c6d2740601863008072740601c6d154090186424406018892880601870", - "0x619898024061902f0180618c57024061902e0180618c39018061980601c9d", - "0x22980600802008a50bc0601868008a40b806018892740601889008a328006", - "0xa6018020240219c1001ca70500c01ca601c060080701c02008a60180201802", - "0x62980603006040020702c01ca6018720181400872018a6018090180c00802", - "0x6298060b0060b002008a601802024021dc062a016018a601c1c018670080c", - "0x20680629806068060580208c0629806008720081a018a6018650181c00865", - "0x6068021f406298060086500802298060080900802084022980708c1a01c77", - "0x2298060080900802098060087d0081f018a60181e018230081e018a60187d", - "0x1f0081f018a60187e018230087e018a6018210181e00821018a60180219402", - "0x260185709406298071fc06084021fc06298061fc0608c021fc062980607c06", - "0x60a006094020a006298060087f0080229806094061f802008a60180202402", - "0x2008a601802024022042a01c441188001ca601c280500c0242600828018a6", - "0x2e0187e0082e018a60182f018460082f018a60181601880008022980600828", - "0xa6018320182e008330c807298060c006204020c006298060082a0080229806", - "0x83018a6018820183200882018a6018350183000835018a6018330182f00802", - "0x20ec062980601c060d4022100629806118060cc020e406298062000604002", - "0x229806008280080229806008090083c0ec840e40c0183c018a60188301882", - "0x850188000885018a6018020e4020f806298060082a00802298060580620c02", - "0x2a0181000841018a60184a0183b0084a018a6018850f807210022140629806", - "0x61040620802110062980601c060d4022300629806204060cc0221c0629806", - "0x260187e0080229806008280080229806008090088d1108c21c0c0188d018a6", - "0x729806248060f002248062980601c060d402008a601816018830080229806", - "0x800084d018a6018020f80224c06298060082a0080229806244061f80224490", - "0x1000852018a60184e0183b0084e018a60184d24c0721002134062980613406", - "0x6208021500629806240060d40214c0629806050060cc02140062980603006", - "0x7e00802298060082800802298060080900855150531400c01855018a601852", - "0x6298060084a00857018a6018020a802008a60182c0188500802298061dc06", - "0x629806164060ec0216406298062605701c8400898018a6018980188000898", - "0x9e018a601807018350085c018a601814018330089d018a60180c018100089c", - "0xa6018020a002008a601802024022809e1709d0300628006298062700620802", - "0x620002000062980600839008a2018a6018020a802008a6018090188500802", - "0x6040022a806298062a4060ec022a40629806000a201c8400800018a601800", - "0xaa01882008ad018a60180701835008ac018a60186701833008ab018a601810", - "0x701c02008a60180201802008a601802008022b8ad2b0ab030062b80629806", - "0x72018a6018090180c00802298060080900867040072bc14030072980701802", - "0x16018a601c1c018670080c018a60180c018100081c0b007298061c80605002", - "0x1e018a60182c0180c0087d018a60180c0181000802298060080900877018b0", - "0x202402084062c41f018a601c23018870082306865024a60181e1f40710402", - "0x71fc06110021fc7e01ca6018250188c00825018a60181a0180c0080229806", - "0x6200060700220006298061f8060b002008a601802024020a0062c826018a6", - "0xa601c2a118071dc02118062980611806058020a806298060087200846018a6", - "0x20b806298062040606802204062980600865008022980600809008022cc02", - "0x62980600865008022980600809008022d0060087d0082f018a60182e01823", - "0x33018a60182f0181f0082f018a6018320182300832018a6018300181e00830", - "0x2298060080900882018b50d406298070cc06084020cc06298060cc0608c02", - "0x90980220c062980620c060940220c06298060087f00802298060d4061f802", - "0x2008a6018020a002008a601802024020f03b01cb62103901ca601c8305065", - "0x9000841018a601826018230084a018a60181f0188d00885018a60181601880", - "0x62040221c06298060082a00802298060f8061f8020f806298061044a21409", - "0x8d018300088d018a6018440182f0080229806230060b8021108c01ca601887", - "0x6210060cc0224806298060e406040022440629806240060c8022400629806", - "0x4e134932480c0184e018a601891018820084d018a6018070183500893018a6", - "0xa60181f0189100802298060580620c02008a6018020a002008a60180202402", - "0x62000214006298060083900852018a6018020a802008a6018260189200802", - "0x604002150062980614c060ec0214c06298061405201c8400850018a601850", - "0x540188200898018a6018070183500857018a60183c0183300855018a60183b", - "0x61f802008a6018020a002008a601802024021649815c55030061640629806", - "0x2298060980624802008a60181f0189100802298060580620c02008a601882", - "0x2008a60189d0187e0089d2700729806170060f002170062980601c060d402", - "0x9e01c84008a0018a6018a001880008a0018a6018020f80227806298060082a", - "0x1401833008a9018a6018650181000800018a6018a20183b008a2018a6018a0", - "0xab2a8a9030062b0062980600006208022ac0629806270060d4022a80629806", - "0x60580620c02008a6018280187e008022980600828008022980600809008ac", - "0x4a008ad018a6018020a802008a60187e01885008022980607c0624402008a6", - "0x60ec022dc06298062b8ad01c84008ae018a6018ae01880008ae018a601802", - "0x701835008b9018a60181401833008b8018a60186501810008a8018a6018b7", - "0x2008a601802024022ecba2e4b8030062ec06298062a006208022e80629806", - "0xa60181a0188500802298060580620c02008a6018210187e008022980600828", - "0x84008bd018a6018bd01880008bd018a601802128022f006298060082a00802", - "0x33008c0018a60186501810008bf018a6018be0183b008be018a6018bd2f007", - "0xc00300630c06298062fc0620802308062980601c060d402304062980605006", - "0x621402008a6018770187e008022980600828008022980600809008c3308c1", - "0x62980629c062000229c06298060084a008c4018a6018020a802008a60182c", - "0x62980603006040023180629806314060ec02314062980629cc401c84008a7", - "0xca018a6018c601882008c9018a60180701835008c8018a60181401833008c7", - "0x2298060240621402008a6018020a002008a60180202402328c9320c703006", - "0x72100233006298063300620002330062980600839008cb018a6018020a802", - "0x60cc02338062980604006040023340629806254060ec022540629806330cb", - "0xcf3380c018d1018a6018cd01882008d0018a60180701835008cf018a601867", - "0xd20500c01ca601c060080701c02008a60180201802008a60180200802344d0", - "0x2c01ca6018720181400872018a6018090180c0080229806008090086704007", - "0xa601802024021dc0634c16018a601c1c018670080c018a60180c018100081c", - "0x9298060787d01c410081e018a60182c0180c0087d018a60180c0181000802", - "0x60680603002008a60180202402084063501f018a601c23018870082306865", - "0x900828018d509806298071fc06110021fc7e01ca6018250188c00825018a6", - "0xa6018021c8021180629806200060700220006298061f8060b002008a601802", - "0xa60180202402008d6008a601c2a118071dc02118062980611806058020a806", - "0x20bc06298060b80608c020b80629806204060680220406298060086500802", - "0x6298060c006078020c00629806008650080229806008090080235c060087d", - "0x33018a6018330182300833018a60182f0181f0082f018a6018320182300832", - "0x2008a6018350187e00802298060080900882018d80d406298070cc0608402", - "0x840e4072980720c14194090980220c062980620c060940220c06298060087f", - "0x21040629806210060cc02008a6018020a002008a601802024020f03b01cd9", - "0x2300844018a60181f0188d0088c018a6018160188000887018a60180701835", - "0x60e40604002128850f8092980623444230871041424c02234062980609806", - "0x62400613802008a601802024022440636890018a601c4a0184d00839018a6", - "0xa60184d018500084e1340729806248061480224c06298060082a00892018a6", - "0x7298061505301c5500854018a6018930185400853018a60184e0185300802", - "0x229806154060b80215c5501ca601852018810080229806140061f80214052", - "0x22700629806164060c8021640629806260060c002260062980615c060bc02", - "0x820089e018a601885018350085c018a60183e018330089d018a60183901810", - "0x629806244060ec02008a601802024022809e1709d03006280062980627006", - "0xaa018a60188501835008a9018a60183e0183300800018a60183901810008a2", - "0xa6018020a002008a601802024022acaa2a400030062ac06298062880620802", - "0x20a802008a60181601883008022980607c0624402008a6018260189200802", - "0x62b4ac01c84008ad018a6018ad01880008ad018a6018020e4022b00629806", - "0xa60183c01833008a8018a60183b01810008b7018a6018ae0183b008ae018a6", - "0x22e8b92e0a8030062e806298062dc06208022e4062980601c060d4022e006", - "0x2298060980624802008a6018820187e008022980600828008022980600809", - "0x60f0022f4062980601c060d402008a60181601883008022980607c0624402", - "0xa6018020f8022f806298060082a00802298062f0061f8022f0bb01ca6018bd", - "0xa6018c00183b008c0018a6018bf2f807210022fc06298062fc06200022fc06", - "0x6298062ec060d40230c0629806050060cc023080629806194060400230406", - "0x600828008022980600809008a7310c33080c018a7018a6018c101882008c4", - "0x83008022980607c0624402008a60187e0188500802298060a0061f802008a6", - "0xa6018c601880008c6018a6018021280231406298060082a008022980605806", - "0xa60186501810008c8018a6018c70183b008c7018a6018c6314072100231806", - "0x629806320062080232c062980601c060d4023280629806050060cc0232406", - "0xa6018210187e008022980600828008022980600809008cc32cca3240c018cc", - "0x21280225406298060082a00802298060580620c02008a60181a0188500802", - "0xce0183b008ce018a6018cd2540721002334062980633406200023340629806", - "0x601c060d4023440629806050060cc023400629806194060400233c0629806", - "0x28008022980600809008dc36cd13400c018dc018a6018cf01882008db018a6", - "0xdd018a6018020a802008a60182c0188500802298061dc061f802008a601802", - "0x237c0629806378dd01c84008de018a6018de01880008de018a60180212802", - "0x35008e2018a60181401833008e1018a60180c01810008e0018a6018df0183b", - "0xa60180202402390e3388e1030063900629806380062080238c062980601c06", - "0x600839008e5018a6018020a802008a6018090188500802298060082800802", - "0x639c060ec0239c0629806398e501c84008e6018a6018e601880008e6018a6", - "0xa60180701835008ea018a60186701833008e9018a60181001810008e8018a6", - "0x201802008a601802008023b0eb3a8e9030063b006298063a006208023ac06", - "0xc00802298060080900867040073b41403007298070180201c070080229806", - "0x670080c018a60180c018100081c0b007298061c806050021c8062980602406", - "0x1c00865018a60182c0182c00802298060080900877018ee058062980707006", - "0x1a01c770081a018a60181a0181600823018a6018021c802068062980619406", - "0xa60187d0181a0087d018a60180219402008a60180202402008ef008a601c23", - "0x219402008a60180202402008f0018021f40207c06298060780608c0207806", - "0x607c0607c0207c06298061f80608c021f8062980608406078020840629806", - "0x202402098063c425018a601c7f018210087f018a60187f018230087f018a6", - "0x28018a6018280182500828018a6018021fc02008a6018250187e0080229806", - "0x600828008022980600809008810a8073c84620007298070a0140300909802", - "0x30018a6018020a8020b806298060bc0615c020bc06298060580620002008a6", - "0x220c06298060cc0620002008a60183201883008330c807298060b80626002", - "0x2008a6018820187e008820d407298060e48301c5900839018a60183001854", - "0x300083c018a60183b0182f0080229806210060b8020ec8401ca60183501881", - "0x60cc021280629806200060400221406298060f8060c8020f806298060f006", - "0x411280c0188c018a6018850188200887018a6018070183500841018a601846", - "0x60082a00802298060580620c02008a6018020a002008a6018020240223087", - "0xa60188d11007210022340629806234062000223406298060083900844018a6", - "0x629806204060cc0224806298060a806040022440629806240060ec0224006", - "0x90084e134932480c0184e018a601891018820084d018a6018070183500893", - "0x2008a601816018830080229806098061f802008a6018020a002008a601802", - "0x2a0080229806140061f8021405201ca6018530183c00853018a60180701835", - "0x5515007210021540629806154062000215406298060083e00854018a601802", - "0x6050060cc0216406298060300604002260062980615c060ec0215c0629806", - "0x5c2749c1640c0185c018a601898018820089d018a601852018350089c018a6", - "0xa60182c0188500802298061dc061f802008a6018020a002008a60180202402", - "0x84008a0018a6018a001880008a0018a6018021280227806298060082a00802", - "0x33008a9018a60180c0181000800018a6018a20183b008a2018a6018a027807", - "0xa9030062b0062980600006208022ac062980601c060d4022a8062980605006", - "0x20a802008a60180901885008022980600828008022980600809008ac2acaa", - "0x62b8ad01c84008ae018a6018ae01880008ae018a6018020e4022b40629806", - "0xa60186701833008b8018a60181001810008a8018a6018b70183b008b7018a6", - "0x22ecba2e4b8030062ec06298062a006208022e8062980601c060d4022e406", - "0x67040073cc1403007298070180201c07008022980600806008022980600802", - "0x21c80207006298060b006070020b00629806024060b002008a60180202402", - "0x72070071dc0203006298060300604002070062980607006058021c80629806", - "0x6298060580606802058062980600865008022980600809008023d00229807", - "0x600865008022980600809008023d4060087d00865018a6018770182300877", - "0xa6018650181f00865018a6018230182300823018a60181a0181e0081a018a6", - "0x6008090081f018f607806298071f406084021f406298061f40608c021f406", - "0x60940208406298060087f0080229806078061f802008a6018020a002008a6", - "0xa601802024020982501cf71fc7e01ca601c210500c0242600821018a601821", - "0x20a84601ca6018280189d00880018a6018020a8020a006298060089c00802", - "0x7280020c0062980620006150020bc06298060a80627802008a6018460185c", - "0x2e008330c807298062040620402008a60182e0187e0082e20407298060c02f", - "0x820183200882018a6018350183000835018a6018330182f00802298060c806", - "0x601c060d40221006298061fc060cc020e406298061f8060400220c0629806", - "0x2a0080229806008090083c0ec840e40c0183c018a601883018820083b018a6", - "0x850f80721002214062980621406200022140629806008390083e018a601802", - "0x6098060cc0221c062980609406040021040629806128060ec021280629806", - "0x8d1108c21c0c0188d018a6018410188200844018a601807018350088c018a6", - "0xa60180701835008022980607c061f802008a6018020a002008a60180202402", - "0x93018a6018020a802008a6018910187e008912400729806248060f00224806", - "0x213806298061349301c840084d018a60184d018800084d018a6018020f802", - "0x3500853018a6018140183300850018a60180c0181000852018a60184e0183b", - "0xa601802024021545414c500300615406298061480620802150062980624006", - "0x60083900857018a6018020a802008a6018090188500802298060082800802", - "0x6164060ec0216406298062605701c8400898018a6018980188000898018a6", - "0xa601807018350085c018a601867018330089d018a601810018100089c018a6", - "0x201802008a601802008022809e1709d030062800629806270062080227806", - "0x2c00802298060080900867040073e01403007298070180201c070080229806", - "0x1c0181600872018a6018021c80207006298060b006070020b0062980602406", - "0x202402008f9008a601c72070071dc02030062980603006040020700629806", - "0x6298061dc0608c021dc062980605806068020580629806008650080229806", - "0x60680607802068062980600865008022980600809008023e8060087d00865", - "0xa60187d018230087d018a6018650181f00865018a6018230182300823018a6", - "0x229806008280080229806008090081f018fb07806298071f406084021f406", - "0x9098020840629806084060940208406298060087f0080229806078061f802", - "0x28018a60180228802008a601802024020982501cfc1fc7e01ca601c210500c", - "0xaa0080229806118062a4020a84601ca6018280180000880018a6018020a802", - "0x20b88101ca6018300bc072ac020c0062980620006150020bc06298060a806", - "0x60bc02008a6018320182e008330c807298062040620402008a60182e0187e", - "0x7e0181000883018a6018820183200882018a6018350183000835018a601833", - "0x620c06208020ec062980601c060d40221006298061fc060cc020e40629806", - "0x20e4020f806298060082a0080229806008090083c0ec840e40c0183c018a6", - "0x4a0183b0084a018a6018850f80721002214062980621406200022140629806", - "0x601c060d4022300629806098060cc0221c062980609406040021040629806", - "0x280080229806008090088d1108c21c0c0188d018a6018410188200844018a6", - "0xa6018920183c00892018a60180701835008022980607c061f802008a601802", - "0x213406298060083e00893018a6018020a802008a6018910187e0089124007", - "0x21480629806138060ec0213806298061349301c840084d018a60184d01880", - "0x8200854018a6018900183500853018a6018140183300850018a60180c01810", - "0x2008a6018020a002008a601802024021545414c5003006154062980614806", - "0x6260062000226006298060083900857018a6018020a802008a60180901885", - "0x604006040022700629806164060ec0216406298062605701c8400898018a6", - "0xa60189c018820089e018a601807018350085c018a601867018330089d018a6", - "0x60080701c02008a60180201802008a601802008022809e1709d0300628006", - "0x3300816018a60180c0181000802298060080900867040073f4140300729807", - "0x1c0b0092980619477058092b002194062980602406030021dc062980605006", - "0x729806068062b802008a6018020240208c063f81a018a601c72018ad00872", - "0xa60187d0182c00802298060080900821018ff07c0629807078062dc020787d", - "0x7f018a60187f0181600825018a6018021c8021fc06298061f806070021f806", - "0x1a00826018a60180219402008a6018020240200900008a601c251fc071dc02", - "0xa6018020240200901018021f40220006298060a00608c020a0062980609806", - "0x220006298060a80608c020a80629806118060780211806298060086500802", - "0x64082e018a601c810182100881018a6018810182300881018a6018800181f", - "0x300182500830018a6018021fc02008a60182e0187e0080229806008090082f", - "0x22980600809008820d40740c330c807298070c01c0b009098020c00629806", - "0x61f80220c06298060e4062e0020e4062980607c062a002008a6018020a002", - "0x60ec060b8020f03b01ca6018840188100884018a6018020a802008a601883", - "0x629806214060c80221406298060f8060c0020f806298060f0060bc02008a6", - "0x8c018a6018070183500887018a6018330183300841018a601832018100084a", - "0xa6018020a002008a601802024021108c21c410300611006298061280620802", - "0x6200022400629806008390088d018a6018020a802008a60181f018b900802", - "0x6040022480629806244060ec0224406298062408d01c8400890018a601890", - "0x92018820084e018a601807018350084d018a6018820183300893018a601835", - "0x61f802008a6018020a002008a601802024021484e13493030061480629806", - "0xa6018540183c00854018a60180701835008022980607c062e402008a60182f", - "0x215c06298060083e00855018a6018020a802008a6018530187e0085314007", - "0x21640629806260060ec02260062980615c5501c8400857018a60185701880", - "0x820085c018a601850018350089d018a60181c018330089c018a60182c01810", - "0x2008a6018020a002008a601802024022785c2749c03006278062980616406", - "0xa6018021280228006298060082a00802298061f40621402008a6018210187e", - "0xa6018000183b00800018a6018a228007210022880629806288062000228806", - "0x62980601c060d4022ac0629806070060cc022a806298060b006040022a406", - "0x600828008022980600809008ad2b0ab2a80c018ad018a6018a901882008ac", - "0x629806070060cc022dc06298060b006040022b8062980608c060ec02008a6", - "0x9008b92e0a82dc0c018b9018a6018ae01882008b8018a60180701835008a8", - "0x22e806298060082a00802298060240621402008a6018020a002008a601802", - "0x3b008bc018a6018bb2e807210022ec06298062ec06200022ec062980600839", - "0x60d4022fc062980619c060cc022f8062980604006040022f406298062f006", - "0x22980600802008c1300bf2f80c018c1018a6018bd01882008c0018a601807", - "0xa6018020240219c1001d040500c01ca601c060080701c02008a60180201802", - "0x21c80629806008720081c018a60182c0181c0082c018a6018090182c00802", - "0x241402298071c81c01c770080c018a60180c018100081c018a60181c01816", - "0x770182300877018a6018160181a00816018a60180219402008a60180202402", - "0x1e0081a018a60180219402008a6018020240200906018021f4021940629806", - "0x608c021f406298061940607c02194062980608c0608c0208c062980606806", - "0x20a002008a6018020240207c0641c1e018a601c7d018210087d018a60187d", - "0x21018a6018210182500821018a6018021fc02008a60181e0187e0080229806", - "0x6008ba00802298060080900826094074207f1f80729807084140300909802", - "0xa601846018b90082a11807298060a0062ec0220006298060082a00828018a6", - "0x33018a60182a018bc00832018a60187f0183300830018a60187e0181000802", - "0x2f018be0082f0b881024a6018350cc320c00c2f4020d406298062000615002", - "0x61f8022103901ca601882018bf00802298060080900883019092080629807", - "0x60f0060bc02008a60183b0182e0083c0ec07298060e40620402008a601884", - "0xa601881018100084a018a6018850183200885018a60183e018300083e018a6", - "0x6298061280620802230062980601c060d40221c06298060b8060cc0210406", - "0x81018100088d018a6018830183b00802298060080900844230871040c01844", - "0x62340620802248062980601c060d40224406298060b8060cc022400629806", - "0x20e40213406298060082a00802298060080900893248912400c01893018a6", - "0x520183b00852018a60184e1340721002138062980613806200021380629806", - "0x601c060d4021500629806098060cc0214c062980609406040021400629806", - "0x28008022980600809008571545414c0c01857018a6018500188200855018a6", - "0xa60189c0183c0089c018a60180701835008022980607c061f802008a601802", - "0x217006298060083e0089d018a6018020a802008a6018590187e0085926007", - "0x22800629806278060ec0227806298061709d01c840085c018a60185c01880", - "0x82008a9018a6018980183500800018a60181401833008a2018a60180c01810", - "0x2008a6018020a002008a601802024022a8a9000a2030062a8062980628006", - "0x62b006200022b0062980600839008ab018a6018020a802008a60180901885", - "0x604006040022b806298062b4060ec022b406298062b0ab01c84008ac018a6", - "0xa6018ae01882008b8018a60180701835008a8018a60186701833008b7018a6", - "0x60080701c02008a60180201802008a601802008022e4b82a0b7030062e406", - "0x3300816018a60180c018100080229806008090086704007428140300729807", - "0x1c0b00929806194770580930002194062980602406030021dc062980605006", - "0x7298060680630802008a6018020240208c0642c1a018a601c72018c100872", - "0xa60187d0182c008022980600809008210190c07c06298070780630c020787d", - "0x7f018a60187f0181600825018a6018021c8021fc06298061f806070021f806", - "0x1a00826018a60180219402008a601802024020090d008a601c251fc071dc02", - "0xa601802024020090e018021f40220006298060a00608c020a0062980609806", - "0x220006298060a80608c020a80629806118060780211806298060086500802", - "0x643c2e018a601c810182100881018a6018810182300881018a6018800181f", - "0x300182500830018a6018021fc02008a60182e0187e0080229806008090082f", - "0x22980600809008820d407440330c807298070c01c0b009098020c00629806", - "0x61f80220c06298060e40629c020e4062980607c0631002008a6018020a002", - "0x60ec060b8020f03b01ca6018840188100884018a6018020a802008a601883", - "0x629806214060c80221406298060f8060c0020f806298060f0060bc02008a6", - "0x8c018a6018070183500887018a6018330183300841018a601832018100084a", - "0xa6018020a002008a601802024021108c21c410300611006298061280620802", - "0x6200022400629806008390088d018a6018020a802008a60181f018c500802", - "0x6040022480629806244060ec0224406298062408d01c8400890018a601890", - "0x92018820084e018a601807018350084d018a6018820183300893018a601835", - "0x61f802008a6018020a002008a601802024021484e13493030061480629806", - "0xa6018540183c00854018a60180701835008022980607c0631402008a60182f", - "0x215c06298060083e00855018a6018020a802008a6018530187e0085314007", - "0x21640629806260060ec02260062980615c5501c8400857018a60185701880", - "0x820085c018a601850018350089d018a60181c018330089c018a60182c01810", - "0x2008a6018020a002008a601802024022785c2749c03006278062980616406", - "0xa6018021280228006298060082a00802298061f40621402008a6018210187e", - "0xa6018000183b00800018a6018a228007210022880629806288062000228806", - "0x62980601c060d4022ac0629806070060cc022a806298060b006040022a406", - "0x600828008022980600809008ad2b0ab2a80c018ad018a6018a901882008ac", - "0x629806070060cc022dc06298060b006040022b8062980608c060ec02008a6", - "0x9008b92e0a82dc0c018b9018a6018ae01882008b8018a60180701835008a8", - "0x22e806298060082a00802298060240621402008a6018020a002008a601802", - "0x3b008bc018a6018bb2e807210022ec06298062ec06200022ec062980600839", - "0x60d4022fc062980619c060cc022f8062980604006040022f406298062f006", - "0x22980600802008c1300bf2f80c018c1018a6018bd01882008c0018a601807", - "0xa6018020240219c1001d110500c01ca601c060080701c02008a60180201802", - "0x9298061dc1601cc600877018a6018090180c00816018a60180c0181000802", - "0x6070060b002008a601802024020680644865018a601c72018c7008720702c", - "0x6298061f406058020780629806008720087d018a6018230181c00823018a6", - "0x207c0629806008650080229806008090080244c02298070787d01c770087d", - "0x60080900802450060087d0087e018a6018210182300821018a60181f0181a", - "0x7e018a6018250182300825018a60187f0181e0087f018a60180219402008a6", - "0x1150a00629807098060840209806298060980608c0209806298061f80607c02", - "0x60940211806298060087f00802298060a0061f802008a6018020240220006", - "0xa601802024020bc2e01d162042a01ca601c460502c0242600846018a601846", - "0x7e00830018a601832018c900832018a601865018c800802298060082800802", - "0x350182e008820d407298060cc06204020cc06298060082a00802298060c006", - "0xa6018390183200839018a6018830183000883018a6018820182f0080229806", - "0x62980601c060d4020f00629806204060cc020ec06298060a8060400221006", - "0x600828008022980600809008850f83c0ec0c01885018a601884018820083e", - "0x8000841018a6018020e40212806298060082a00802298061940632802008a6", - "0x100088c018a6018870183b00887018a6018411280721002104062980610406", - "0x620802240062980601c060d40223406298060bc060cc0211006298060b806", - "0x7e008022980600828008022980600809008912408d1100c01891018a60188c", - "0x6134060f002134062980601c060d402008a601865018ca008022980620006", - "0x52018a6018020f80213806298060082a008022980624c061f80224c9201ca6", - "0x53018a6018500183b00850018a601852138072100214806298061480620002", - "0x215c0629806248060d4021540629806050060cc0215006298060b00604002", - "0x229806008280080229806008090089815c551500c01898018a60185301882", - "0x60084a00859018a6018020a802008a60181c018850080229806068061f802", - "0x6274060ec0227406298062705901c840089c018a60189c018800089c018a6", - "0xa60180701835008a0018a601814018330089e018a60182c018100085c018a6", - "0x20a002008a60180202402000a22809e030060000629806170062080228806", - "0x22a8062980600839008a9018a6018020a802008a601809018850080229806", - "0x22b006298062ac060ec022ac06298062a8a901c84008aa018a6018aa01880", - "0x82008b7018a60180701835008ae018a60186701833008ad018a60181001810", - "0x2008a60180201802008a601802008022a0b72b8ad030062a006298062b006", - "0xa60180c01810008022980600809008670400745c1403007298070180201c07", - "0x72018cc008720702c024a6018770580732c021dc0629806024060300205806", - "0x230181c00823018a60181c0182c0080229806008090081a019181940629807", - "0x70787d01c770087d018a60187d018160081e018a6018021c8021f40629806", - "0x21018a60181f0181a0081f018a60180219402008a6018020240200919008a6", - "0xa60180219402008a601802024020091a018021f4021f806298060840608c02", - "0x6298061f80607c021f806298060940608c0209406298061fc06078021fc06", - "0xa601802024022000646c28018a601c260182100826018a6018260182300826", - "0x2600846018a6018460182500846018a6018021fc02008a6018280187e00802", - "0x229806008280080229806008090082f0b807470810a80729807118140b009", - "0x2a00802298060c0061f8020c006298060c806334020c806298061940625402", - "0x820182f00802298060d4060b8022083501ca6018330188100833018a601802", - "0x60a8060400221006298060e4060c8020e4062980620c060c00220c0629806", - "0xa601884018820083e018a601807018350083c018a601881018330083b018a6", - "0x61940633802008a6018020a002008a601802024022143e0f03b0300621406", - "0x2104062980610406200021040629806008390084a018a6018020a802008a6", - "0x211006298060b80604002230062980621c060ec0221c06298061044a01c84", - "0xc01891018a60188c0188200890018a601807018350088d018a60182f01833", - "0xce0080229806200061f802008a6018020a002008a601802024022449023444", - "0x61f80224c9201ca60184d0183c0084d018a60180701835008022980619406", - "0x629806148062000214806298060083e0084e018a6018020a802008a601893", - "0x6298060b0060400214c0629806140060ec0214006298061484e01c8400852", - "0x98018a6018530188200857018a6018920183500855018a6018140183300854", - "0x229806068061f802008a6018020a002008a60180202402260571545403006", - "0x9c018800089c018a6018021280216406298060082a00802298060700621402", - "0x2c018100085c018a60189d0183b0089d018a60189c16407210022700629806", - "0x61700620802288062980601c060d4022800629806050060cc022780629806", - "0x90188500802298060082800802298060080900800288a02780c01800018a6", - "0xaa018a6018aa01880008aa018a6018020e4022a406298060082a0080229806", - "0xad018a60181001810008ac018a6018ab0183b008ab018a6018aa2a40721002", - "0x62a006298062b006208022dc062980601c060d4022b8062980619c060cc02", - "0x7298070180201c07008022980600806008022980600802008a82dcae2b40c", - "0x6050060cc0205806298060300604002008a6018020240219c1001d1d0500c", - "0xd0008720702c024a6018651dc16024cf00865018a6018090180c00877018a6", - "0x20787d01ca60181a018d1008022980600809008230191e06806298071c806", - "0x21f806298061f4060b002008a601802024020840647c1f018a601c1e018db", - "0x71dc021fc06298061fc06058020940629806008720087f018a60187e0181c", - "0x609806068020980629806008650080229806008090080248002298070947f", - "0x6500802298060080900802484060087d00880018a6018280182300828018a6", - "0x800181f00880018a60182a018230082a018a6018460181e00846018a601802", - "0x90082f019220b80629807204060840220406298062040608c022040629806", - "0x6298060c006094020c006298060087f00802298060b8061f802008a601802", - "0x20a002008a601802024022083501d230cc3201ca601c300702c0242600830", - "0xa6018830187e00883018a601839018dd00839018a60181f018dc0080229806", - "0x2008a60183b0182e0083c0ec0729806210062040221006298060082a00802", - "0x100084a018a6018850183200885018a60183e018300083e018a60183c0182f", - "0x620802230062980601c060d40221c06298060cc060cc0210406298060c806", - "0xde00802298060082800802298060080900844230871040c01844018a60184a", - "0xa6018900188000890018a6018020e40223406298060082a008022980607c06", - "0xa6018350181000892018a6018910183b00891018a601890234072100224006", - "0x6298062480620802138062980601c060d4021340629806208060cc0224c06", - "0xa60182f0187e008022980600828008022980600809008521384d24c0c01852", - "0x531400729806150060f002150062980601c060d402008a60181f018de00802", - "0x570188000857018a6018020f80215406298060082a008022980614c061f802", - "0x2c0181000859018a6018980183b00898018a601857154072100215c0629806", - "0x616406208021700629806140060d4022740629806070060cc022700629806", - "0x210187e0080229806008280080229806008090089e1709d2700c0189e018a6", - "0x228806298060084a008a0018a6018020a802008a60187d018850080229806", - "0x22a40629806000060ec020000629806288a001c84008a2018a6018a201880", - "0x82008ac018a60180701835008ab018a60181c01833008aa018a60182c01810", - "0x2008a6018020a002008a601802024022b4ac2acaa030062b406298062a406", - "0x35008a8018a60181c01833008b7018a60182c01810008ae018a6018230183b", - "0xa601802024022e4b82a0b7030062e406298062b806208022e0062980601c06", - "0x600839008ba018a6018020a802008a6018090188500802298060082800802", - "0x62f0060ec022f006298062ecba01c84008bb018a6018bb01880008bb018a6", - "0xa60180701835008bf018a60186701833008be018a60181001810008bd018a6", - "0x201802008a60180200802304c02fcbe0300630406298062f4062080230006", - "0x2c00802298060080900867040074901403007298070180201c070080229806", - "0x1c0181600872018a6018021c80207006298060b006070020b0062980602406", - "0x20240200925008a601c72070071dc02030062980603006040020700629806", - "0x6298061dc0608c021dc062980605806068020580629806008650080229806", - "0x6068060780206806298060086500802298060080900802498060087d00865", - "0xa60187d018230087d018a6018650181f00865018a6018230182300823018a6", - "0x229806008280080229806008090081f0192707806298071f406084021f406", - "0x9098020840629806084060940208406298060087f0080229806078061f802", - "0x28018a60180237c02008a601802024020982501d281fc7e01ca601c210500c", - "0x10008022980611806378020a84601ca601828018e000880018a6018020a802", - "0x6150020cc06298060a806384020c806298061fc060cc020c006298061f806", - "0x6298070bc062f8020bc2e20409298060d4330c830030e200835018a601880", - "0xa6018840187e008840e40729806208062fc02008a6018020240220c064a482", - "0x3e018a60183c0182f00802298060ec060b8020f03b01ca6018390188100802", - "0x2104062980620406040021280629806214060c80221406298060f8060c002", - "0xc01844018a60184a018820088c018a6018070183500887018a60182e01833", - "0x6298062040604002234062980620c060ec02008a601802024021108c21c41", - "0x93018a60188d0188200892018a6018070183500891018a60182e0183300890", - "0x629806008390084d018a6018020a802008a6018020240224c922449003006", - "0x629806148060ec0214806298061384d01c840084e018a60184e018800084e", - "0x55018a6018070183500854018a6018260183300853018a6018250181000850", - "0xa6018020a002008a6018020240215c55150530300615c06298061400620802", - "0x592600729806270060f002270062980601c060d402008a60181f0187e00802", - "0x5c018800085c018a6018020f80227406298060082a0080229806164061f802", - "0xc01810008a0018a60189e0183b0089e018a60185c27407210021700629806", - "0x628006208022a40629806260060d4020000629806050060cc022880629806", - "0x901885008022980600828008022980600809008aa2a4002880c018aa018a6", - "0xac018a6018ac01880008ac018a6018020e4022ac06298060082a0080229806", - "0xb7018a60181001810008ae018a6018ad0183b008ad018a6018ac2ac0721002", - "0x62e406298062b806208022e0062980601c060d4022a0062980619c060cc02", - "0xc0192a0240701ca601c06018e300806018a6018020182c008b92e0a82dc0c", - "0x639802040062980601c063940205006298060240639002008a60180202402", - "0x20b0062980600865008022980600809008024ac060087d00867018a601814", - "0x2f00867018a60181c018e600810018a60180c018e50081c018a60182c018e7", - "0x770192c058062980719c063a0021c806298061c806030021c8062980604006", - "0x63a802194062980619406200021940629806058063a402008a60180202402", - "0x23018ec0087d018a6018720180c00823018a60181a018eb0081a018a601865", - "0x60086500802298061dc061f802008a601802024020787d01c060780629806", - "0xa601821018ec0087e018a6018720180c00821018a60181f0192d0081f018a6", - "0x6018064b80201806298060086500802298060080620c021fc7e01c061fc06", - "0x60192e00807018a6018020183500806018a6018021940201c0601807018a6", - "0xc024072980701c0638c0201c0629806018060b0020240701c060240629806", - "0x67018a601809018e500810018a60180c018e4008022980600809008140192f", - "0xa60180219402008a6018020240200930018021f4020b006298060400639802", - "0x6298061c8063980219c062980605006394021c806298060700639c0207006", - "0x77018a601c2c018e800816018a6018160180c00816018a6018670182f0082c", - "0x1a018a60181a018800081a018a601877018e90080229806008090086501931", - "0x2084062980608c062000207c0629806008060400208c0629806068063a802", - "0xa601802024021fc064cc7e018a601c1e018870081e1f407298060841f01d32", - "0x28018a6018160180c00826018a60187d0181000825018a60187e0193400802", - "0xa60187f01935008022980600809008800a0260240620006298060940627802", - "0x6298061180627802204062980605806030020a806298061f4060400211806", - "0x629806008650080229806194061f802008a601802024020b8810a8090182e", - "0x33018a6018160180c00832018a6018020181000830018a60182f019350082f", - "0x6018e300806018a6018020182c008350cc32024060d406298060c00627802", - "0x63940205006298060240639002008a60180202402030064d80901c0729807", - "0x22980600809008024dc060087d00867018a601814018e600810018a601807", - "0xe600810018a60180c018e50081c018a60182c018e70082c018a60180219402", - "0x63a0021c806298061c806030021c80629806040060bc0219c062980607006", - "0x6200021940629806058063a402008a601802024021dc064e016018a601c67", - "0x23068074e80208c0629806009390081a018a601865018ea00865018a601865", - "0x202402078064f002298071f4064ec021f406298061f406200021f40629806", - "0x6298060840608c02084062980607c060780207c0629806008650080229806", - "0xa60180219402008a60181e018b3008022980600809008024f4060087d0087e", - "0x6298061f80607c021f806298060940608c0209406298061fc06068021fc06", - "0x46018a6018280193f00880018a6018720180c00828018a6018260193e00826", - "0x20a806298060086500802298061dc061f802008a601802024021188001c06", - "0x70182f018a6018810193f0082e018a6018720180c00881018a60182a01940", - "0x65008022980601c0624802008a6018060189100802298060080620c020bc2e", - "0x20b00629806008060cc02030060180c018a6018090192e00809018a601802", - "0x62980719c065040219c1005009298060702c01cb40081c018a60180601835", - "0xc024071dc0c510021dc06298061c80650c02008a601802024020580650872", - "0x6050060cc0208c06298060680651802068062980619406514021940629806", - "0x207c1e1f4090181f018a601823019470081e018a601810018350087d018a6", - "0xa6018070188300802298060240624402008a60180c01892008022980600809", - "0x7f018a601810018350087e018a6018140183300821018a6018160194800802", - "0x20500c02407030a60180201949008251fc7e0240609406298060840651c02", - "0x6704007298060702c01d4b0081c018a601806018540082c018a6018070194a", - "0x5900865018a6018100185400877018a60180901880008022980619c061f802", - "0x540087d018a60180c0188d0080229806058061f8020587201ca6018651dc07", - "0x23008022980608c061f80208c1a01ca60181e1f4075300207806298061c806", - "0x20841f01ca60187f1f807534021fc062980606806150021f8062980605006", - "0xa60180201880008260940701826018a6018210194f00825018a60181f0194e", - "0x219402024062980601c0601c8400807018a601802018ea008060180601806", - "0x20401401c060400629806030064b802050062980602406150020300629806", - "0x70180601c062980601806278020180629806008064d002008062980600950", - "0x2030062980600939008022980600809008090195101c06298070080621c02", - "0x540081c018a6018100188000802298060500620c020401401ca60180c01898", - "0x8d00802298060b0061f8020b06701ca60187207007164021c8062980601806", - "0x21dc1601ca60181a1940753002068062980619c0615002194062980601c06", - "0x60080900802548060087d0087d018a6018770194f00823018a6018160194e", - "0x2107c072980607806260020780629806009530080229806024061f802008a6", - "0x5900826018a6018060185400825018a60182101880008022980607c0620c02", - "0x21f406298061fc0653c0208c06298061f806538021fc7e01ca60182609407", - "0x62980600950008800a00701880018a60187d0194f00828018a6018230194e", - "0x9018a601807018aa00807018a6018060195400806018a6018020193400802", - "0xa6018024e402008a601802024020240655807018a601c02019550080901806", - "0x6298060400620002008a60181401883008100500729806030062600203006", - "0xa60182c0187e0082c19c07298061c81c01c5900872018a601806018540081c", - "0x7298060686501ca00081a018a6018670185400865018a6018070189e00802", - "0x200957018021f4021f406298061dc0653c0208c062980605806538021dc16", - "0xa60181e018980081e018a60180254c02008a6018090187e008022980600809", - "0x629806018061500209406298060840620002008a60181f018830082107c07", - "0xa60187f0194f00823018a60187e0194e0087f1f807298060982501c5900826", - "0x20a0022002801c0620006298061f40653c020a0062980608c06538021f406", - "0x900810019580500c01ca601c09018e300809018a6018070182c0080229806", - "0x619c06398020b00629806030063940219c06298060500639002008a601802", - "0x639c021c806298060086500802298060080900802564060087d0081c018a6", - "0x2c0182f0081c018a601816018e60082c018a601810018e500816018a601872", - "0x90081a0195a1940629807070063a0021dc06298061dc06030021dc0629806", - "0x608c063a80208c062980608c062000208c0629806194063a402008a601802", - "0x629806018060cc021fc0629806008060400207806298060095b0087d018a6", - "0x80018a60187d0188000828018a60181e018a800826018a6018770180c00825", - "0x2a0195d11806298071f8062b4021f82107c092980620028098251fc1457002", - "0x20bc06298060b88101d5e0082e2040729806118062b802008a60180202402", - "0x16000833018a6018210183300832018a60181f0181000830018a60182f0195f", - "0x82018a60182a01961008022980600809008350cc32024060d406298060c006", - "0x6210062980620806580020e40629806084060cc0220c062980607c0604002", - "0x20ec0629806008650080229806068061f802008a601802024022103920c09", - "0x221406298060f80657c020f806298060f07701d5e0083c018a60183b01962", - "0x901887018a6018850196000841018a601806018330084a018a60180201810", - "0x7018a6018060192e00806018a60180219402008a601802018b9008871044a", - "0x6018a6018060188d00806018a6018022d80200806298060095b0080701806", - "0x20240629806024062340202406298060095000807018a6018060080758c02", - "0x16300814018a6018140188d00814018a6018025900203006298060240701d63", - "0x67018a800867018a60180256c02008a601810018b900810018a60181403007", - "0x6598020500701ca601807019650080229806008280082c018060b00629806", - "0x67018160080229806040065a00219c1001ca60180c019670080c018a601814", - "0x61f8020702c01ca6018161c8075a402058062980602406150021c80629806", - "0x6018060cc021f4062980600806040021dc062980601c065a802008a60181c", - "0x1f0787d0316c00821018a60182c018540081f018a6018770196b0081e018a6", - "0x2008a601802024021fc065b47e018a601c23018be0082306865024a601821", - "0x75b8020a00629806008650080229806098061f8020982501ca60187e018bf", - "0x60cc020a8062980619406040021180629806200065bc0220006298060a025", - "0x2008a601802024020b8810a8090182e018a6018460197000881018a60181a", - "0x17000832018a60181a0183300830018a601865018100082f018a60187f01971", - "0x9018a6018070182c008022980600828008330c830024060cc06298060bc06", - "0x6298060500639002008a60180202402040065c81403007298070240638c02", - "0x9008025cc060087d0081c018a601867018e60082c018a60180c018e500867", - "0xa601810018e500816018a601872018e700872018a60180219402008a601802", - "0x6298061dc06030021dc06298060b0060bc02070062980605806398020b006", - "0x629806194063a402008a60180202402068065d065018a601c1c018e800877", - "0x20780629806008b50087d018a601823018ea00823018a6018230188000823", - "0xc400826018a6018770180c00825018a601806018330087f018a60180201810", - "0x92980620028098251fc145d40220006298061f406200020a0062980607806", - "0x61180630802008a601802024020a8065d846018a601c7e018c10087e0841f", - "0x1f0181000830018a60182f019780082f018a60182e204075dc020b88101ca6", - "0x350cc32024060d406298060c0065e4020cc0629806084060cc020c80629806", - "0x60cc0220c062980607c060400220806298060a8065e802008a60180202402", - "0x2008a601802024022103920c0901884018a6018820197900839018a601821", - "0x7701d770083c018a60183b0197b0083b018a60180219402008a60181a0187e", - "0x6018330084a018a6018020181000885018a60183e019780083e018a60183c", - "0x2008a601802018c5008871044a0240621c0629806214065e4021040629806", - "0x14018a60180201810008070180601c0629806018064b802018062980600865", - "0xa601c0c0197d0080c02407024a601810050075f00204006298060180603002", - "0xa6018160181400816018a6018090180c0080229806008090082c0197e19c06", - "0x601c0604002008a60180202402194065fc77018a601c72018670087207007", - "0x6604021f423068092980607c1e01d800081f018a60181c0180c0081e018a6", - "0x21fc06298060847719c0960c02008a601802024021f80660821018a601c7d", - "0x18500828018a6018230180c00826018a60181a0181000825018a60187f01984", - "0x2008a60186701986008022980600809008800a02602406200062980609406", - "0x6030020a80629806068060400211806298061f80661c02008a60187701883", - "0x2008a601802024020b8810a8090182e018a6018460198500881018a601823", - "0x6030020c0062980601c06040020bc06298061940661c02008a60186701986", - "0x2008a601802024020cc320c00901833018a60182f0198500832018a60181c", - "0x18500883018a6018090180c00882018a6018070181000835018a60182c01987", - "0x6018a60180219402008a601802018ca0083920c82024060e406298060d406", - "0xa60180c018140080c018a6018060180c008070180601c0629806018064b802", - "0x60500662402008a601802024020400662014018a601c09018670080901c07", - "0x60500620c02008a601802024020b006628022980719c064ec0219c1401ca6", - "0xa6018651dc075f002194062980601c06030021dc06298060080604002008a6", - "0x1a0198c008022980600809008230198b0680629807058065f4020587207009", - "0x61f4062540207c06298061c80603002078062980607006040021f40629806", - "0x100087e018a6018230198e00802298060080900802634060087d00821018a6", - "0x7f0240609806298061f8062c80209406298061c806030021fc062980607006", - "0x6624020a006298060095300802298060b0062cc02008a6018020240209825", - "0x13b00880018a6018800188000880018a601828118074e8021181401ca601814", - "0x70180c00802298060500620c02008a601802024020a80663c022980720006", - "0x20c80664030018a601c2e018670082e20407298060bc06050020bc0629806", - "0x810180c00835018a6018020181000833018a60183001991008022980600809", - "0x2008a6018020240200992018021f40220c06298060cc06254022080629806", - "0xb20083b018a6018810180c00884018a6018020181000839018a6018320198e", - "0x2008a60182a018b30080229806008090083c0ec84024060f006298060e406", - "0x13b00885018a6018850188000885018a60183e050074e8020f8062980600993", - "0x60300211006298060080604002008a6018020240212806650022980721406", - "0x195240062980723006604022308710409298062344401d800088d018a601807", - "0x20d40629806104060400224806298062400665802008a6018020240224406", - "0x1980081e018a6018350199700883018a6018920189500882018a6018870180c", - "0x60400224c06298060840666802084062980620c066640207c062980620806", - "0x4e1340901852018a601893018b20084e018a60181f0180c0084d018a60181e", - "0xc00853018a6018410181000850018a6018910198e00802298060080900852", - "0x229806008090085515053024061540629806140062c802150062980621c06", - "0x604002260062980615c066380215c0629806008650080229806128062cc02", - "0x9c164090189d018a601898018b20089c018a6018070180c00859018a601802", - "0xc0089e018a601802018100085c018a6018100198e0080229806008090089d", - "0xa601802018ce008a22809e024062880629806170062c802280062980601c06", - "0x22980600828008070180601c0629806018064b80201806298060086500802", - "0xa601802024020400666c1403007298070240638c02024062980601c060b002", - "0x1c018a601867018e60082c018a60180c018e500867018a601814018e400802", - "0xa601872018e700872018a60180219402008a601802024020099c018021f402", - "0x6298060b0060bc02070062980605806398020b00629806040063940205806", - "0xa601802024020680667465018a601c1c018e800877018a6018770180c00877", - "0x7d018a601823018ea00823018a6018230188000823018a601865018e900802", - "0xc00825018a601806018330087f018a601802018100081e018a60180267802", - "0x1467c0220006298061f406200020a00629806078063700209806298061dc06", - "0x2024020a80668046018a601c7e018d00087e0841f024a6018800a0260947f", - "0x2f019a20082f018a60182e20407684020b88101ca601846018d10080229806", - "0x60c00668c020cc0629806084060cc020c8062980607c06040020c00629806", - "0x60400220806298060a80669002008a601802024020d4330c80901835018a6", - "0x3920c0901884018a601882019a300839018a6018210183300883018a60181f", - "0x3b019a50083b018a60180219402008a60181a0187e00802298060080900884", - "0x20181000885018a60183e019a20083e018a60183c1dc07684020f00629806", - "0x871044a0240621c06298062140668c021040629806018060cc021280629806", - "0x70180601c0629806018064b80201806298060086500802298060080637802", - "0x62540201c062980601806630020180629806009a600802018a60180267802", - "0xc019910080c018a60180269c02024062980601c0201cb100807018a601807", - "0x6009a800810018a601814024072c402050062980605006254020500629806", - "0xa60181c019960081c018a60182c19c076a8020b00629806009a900867018a6", - "0xa601816018dc00816018a601872040072c4021c806298061c806254021c806", - "0x6050066b0020500701ca601807019ab00802298060082800877018061dc06", - "0xa601867018160080229806040065a00219c1001ca60180c019670080c018a6", - "0x6070061f8020702c01ca6018161c8075a402058062980602406150021c806", - "0x629806018060cc021f4062980600806040021dc062980601c066b402008a6", - "0x60841f0787d031af00821018a60182c018540081f018a601877019ae0081e", - "0x62fc02008a601802024021fc066c07e018a601c23018be0082306865024a6", - "0x28094075b8020a00629806008650080229806098061f8020982501ca60187e", - "0x6068060cc020a8062980619406040021180629806200065bc022000629806", - "0x65c402008a601802024020b8810a8090182e018a6018460197000881018a6", - "0x2f0197000832018a60181a0183300830018a601865018100082f018a60187f", - "0x202402030066c80901c07298070180201db1008330c830024060cc0629806", - "0xa6018140189e00810018a6018070181000814018a601809019340080229806", - "0x2c019350082c018a60180219402008a60180202402009b3018021f40219c06", - "0x60400665c0219c06298060700627802040062980603006040020700629806", - "0x3500814018a60180201833008161c80701816018a601867019b400872018a6", - "0x67018a601c0c019b60080c02407024a601810050076d402040062980601806", - "0x72018a60181c018b00081c018a601867019b80080229806008090082c019b7", - "0xa601877019bb0080229806058066e80208c1a1947705814298061c8066e402", - "0x1be0087d018a601865019bd008022980608c0620c02008a60181a019bc00802", - "0x66fc020840629806024060d40207c062980601c060cc0207806298061f406", - "0x21fc06298060b00670002008a601802024021f82107c090187e018a60181e", - "0x901828018a60187f019bf00826018a6018090183500825018a60180701833", - "0xa6018090189800809018a601807019c200807018a601802019c10082809825", - "0x62980601806150020b006298060500620002008a60180c018830081403007", - "0x72018a60180219402008a6018670187e0086704007298060702c01c590081c", - "0x60080670c021dc1601c061dc06298061c8064b80205806298060400615002", - "0x60300620c020500c01ca6018090189800809018a601807019c400807018a6", - "0xa60181c0b00716402070062980601806150020b006298060500620002008a6", - "0x16018a6018100185400872018a60180219402008a6018670187e0086704007", - "0x701c060840201c062980600806714021dc1601c061dc06298061c8064b802", - "0x629806009390080229806024061f802008a601802024020300671809018a6", - "0xc0187e0080229806008090080271c060087d00810018a6018140188000814", - "0x7298060400626002040062980619c062000219c0629806009530080229806", - "0x65018a6018060185400877018a60181c018ea00802298060b00620c020702c", - "0x20680629806008650080229806058061f8020587201ca6018651dc0716402", - "0x229806008280087d08c070187d018a60181a0192e00823018a60187201854", - "0x1001ca601c14018020242600814018a6018140182500814018a6018021fc02", - "0x604006040021c80c01ca60180c019890080229806008090081c0b00772067", - "0xa60180c0188300802298060080900816019c9008a601c720193b00810018a6", - "0x6298061940657c0219406298061dc0701d5e00877018a601809018af00802", - "0x1e018a60181a019600087d018a6018670183300823018a601810018100081a", - "0x6298060400604002008a601816018b30080229806008090081e1f42302406", - "0x71f80621c021f82107c09298060947f01c4100825018a6018070180c0087f", - "0x60095300880018a6018260240758c02008a601802024020a00672826018a6", - "0x619c060cc020c0062980607c06040020a806298061180c01d3a00846018a6", - "0xa60182a0188000835018a601880018a800833018a6018210180c00832018a6", - "0x1cb20c06298070bc062b4020bc2e2040929806208350cc320c0145700220806", - "0x6298060ec8401d5e0083b210072980620c062b802008a601802024020e406", - "0x4a018a60182e0183300885018a601881018100083e018a60183c0195f0083c", - "0xa6018390196100802298060080900841128850240610406298060f80658002", - "0x62980621c065800211006298060b8060cc022300629806204060400221c06", - "0xa601809018b900802298060300620c02008a6018020240223444230090188d", - "0x6298062440657c0224406298062402101d5e00890018a6018280196200802", - "0x4e018a601892019600084d018a6018670183300893018a60181f0181000892", - "0x229806024062e402008a60180c018830080229806008090084e1349302406", - "0x500188000850018a6018020e40214806298060082a008022980601c0621402", - "0x2c0181000854018a6018530196100853018a60185014807210021400629806", - "0x9815c55024062600629806150065800215c0629806070060cc021540629806", - "0x1403007298060240626002024062980601c067340201c06298060080673002", - "0x590081c018a601806018540082c018a6018140188000802298060300620c02", - "0x6150021c8062980600865008022980619c061f80219c1001ca60181c0b007", - "0x203006298060087f008770580701877018a6018720192e00816018a601810", - "0x2024020b06701dce0401401ca601c0c01802024260080c018a60180c01825", - "0xa601c1c019d000814018a601814018100081c018a601807019cf0080229806", - "0x61c8062f00219406298060580674802008a601802024021dc06744161c807", - "0x6500802298060080900802750060087d00823018a601865019d30081a018a6", - "0x1e019d30081a018a601877018bc0081e018a60187d019d50087d018a601802", - "0x708c067580207c062980607c065ac0207c0629806068065a80208c0629806", - "0x6298060840676002008a6018020a002008a601802024021f80675c21018a6", - "0x7298062002801d4c00880018a6018090185400828018a60187f0188d0087f", - "0x2f018a601810018330082e018a601814018100080229806098061f80209825", - "0xa6018320c02f0b80c5b0020c8062980609406150020c0062980607c065ac02", - "0x33018bf00802298060080900835019d90cc0629807204062f8022042a11809", - "0x60a8060cc020e406298061180604002008a6018830187e008832080729806", - "0x17100802298060080900802768060087d0083b018a6018820185400884018a6", - "0x65c00221406298060a8060cc020f8062980611806040020f006298060d406", - "0x61f802008a6018020a002008a60180202402128850f8090184a018a60183c", - "0xa6018100183300839018a60181401810008022980607c0676c02008a60187e", - "0x6298061043b01d6e00841018a601802194020ec0629806024061500221006", - "0x8d018a6018840183300844018a601839018100088c018a6018870196f00887", - "0x229806008280080229806008090089023444024062400629806230065c002", - "0x60083900891018a6018020a802008a6018090182e008022980601c0676c02", - "0x624c065c40224c06298062489101c8400892018a6018920188000892018a6", - "0xa60184d0197000852018a60182c018330084e018a601867018100084d018a6", - "0x6050060940205006298060087f008022980600828008501484e0240614006", - "0x2008a601802024020702c01ddc19c1001ca601c14018020242600814018a6", - "0x677402298071c8064ec02040062980604006040021c80c01ca60180c01989", - "0x75dc021dc06298060240677802008a60180c0188300802298060080900816", - "0x60cc0208c062980604006040020680629806194065e00219406298061dc07", - "0x2008a601802024020787d08c090181e018a60181a019790087d018a601867", - "0x731802094062980601c06030021fc06298060400604002008a601816018b3", - "0x2298060080900828019df09806298071f80631c021f82107c09298060947f", - "0x2a018a601846030074e80211806298060095300880018a6018260240778002", - "0x20cc062980608406030020c8062980619c060cc020c0062980607c0604002", - "0xa6018820d4330c8300517500882018a60182a0188000835018a601880018c4", - "0x83018c200802298060080900839019e120c06298070bc06304020bc2e20409", - "0x6040020f806298060f0065e0020f006298060ec8401d770083b2100729806", - "0x4a2140901841018a60183e019790084a018a60182e0183300885018a601881", - "0x330088c018a6018810181000887018a6018390197a00802298060080900841", - "0x229806008090088d1108c02406234062980621c065e40211006298060b806", - "0x75dc0224006298060a0065ec02008a601809018c500802298060300620c02", - "0x60cc0224c062980607c06040022480629806244065e002244062980624021", - "0x2008a601802024021384d24c090184e018a601892019790084d018a601867", - "0xa6018020a802008a6018070188500802298060240631402008a60180c01883", - "0x6298061405201c8400850018a6018500188000850018a6018020e40214806", - "0x57018a60181c0183300855018a60182c0181000854018a6018530197a00853", - "0x7018e300807018a6018060182c0089815c55024062600629806150065e402", - "0x63940204006298060300639002008a60180202402050067880c0240729807", - "0x229806008090080278c060087d0082c018a601810018e600867018a601809", - "0xe600867018a601814018e500872018a60181c018e70081c018a60180219402", - "0x63a00205806298060580603002058062980619c060bc020b006298061c806", - "0x62000206806298061dc063a402008a601802024021940679077018a601c2c", - "0x23018800081f018a6018020181000823018a60181a018ea0081a018a60181a", - "0x7f019e61f80629807078065f4020787d01ca60182107c07794020840629806", - "0x60300209806298061f4060400209406298061f80679c02008a60180202402", - "0x2008a60180202402200280980901880018a601825019e800828018a601816", - "0x1e800881018a6018160180c0082a018a60187d0181000846018a60187f019e9", - "0x2008a6018650187e0080229806008090082e2042a024060b8062980611806", - "0x6030020c8062980600806040020c006298060bc067a4020bc062980600865", - "0x62980600806040020d4330c80901835018a601830019e800833018a601816", - "0x7030067ac020300901c09298060401401dea00810018a6018060180c00814", - "0x602406030021dc062980601c0604002008a601802024020b0067b067018a6", - "0x23019ed0680629807058067ac020587207009298061947701dea00865018a6", - "0x100081e018a60187d019ee0087d018a60181a19c076a802008a60180202402", - "0x1f024061f80629806078067bc0208406298061c8060300207c062980607006", - "0x100087f018a601823019f0008022980619c065a002008a601802024021f821", - "0x25024060a006298061fc067bc0209806298061c80603002094062980607006", - "0x2118062980601c060400220006298060b0067c002008a601802024020a026", - "0xa6018020a0022042a1180901881018a601880019ef0082a018a6018090180c", - "0x7298070500600809098020500629806050060940205006298060087f00802", - "0x10018100087203007298060300662402008a601802024020702c01df119c10", - "0x60300620c02008a60180202402058067c802298071c8064ec020400629806", - "0xa601865019a200865018a60187701c07684021dc0629806024067cc02008a6", - "0x6298060680668c021f4062980619c060cc0208c0629806040060400206806", - "0xa601810018100080229806058062cc02008a601802024020787d08c090181e", - "0x7e018cc0087e0841f024a6018251fc0732c02094062980601c06030021fc06", - "0x254c0220006298060980901cb100802298060080900828019f40980629807", - "0x670183300830018a60181f018100082a018a601846030074e8021180629806", - "0x60a806200020d4062980620006370020cc062980608406030020c80629806", - "0x83018a601c2f018d00082f0b881024a6018820d4330c8300519f00882018a6", - "0xa60183b21007684020ec8401ca601883018d100802298060080900839019f5", - "0x6298060b8060cc02214062980620406040020f806298060f006688020f006", - "0x60e40669002008a601802024021044a2140901841018a60183e019a30084a", - "0xa601887019a300844018a60182e018330088c018a6018810181000887018a6", - "0x60240637802008a60180c018830080229806008090088d1108c0240623406", - "0xa601891019a200891018a601890084076840224006298060a00669402008a6", - "0x6298062480668c02134062980619c060cc0224c062980607c060400224806", - "0xa601809018de00802298060300620c02008a601802024021384d24c090184e", - "0x62000214006298060083900852018a6018020a802008a6018070188500802", - "0x604002150062980614c066900214c06298061405201c8400850018a601850", - "0x571540901898018a601854019a300857018a60181c0183300855018a60182c", - "0x7298070300600809098020300629806030060940203006298060087f00898", - "0x60500604002070062980601c067dc02008a601802024020b06701df604014", - "0x16019fa00802298060080900877019f90587201ca601c1c019f800814018a6", - "0x1fc018021f40208c0629806194067ec0206806298061c806384021940629806", - "0x63840207806298061f4067f4021f406298060086500802298060080900802", - "0x1f019ae0081f018a60181a019ad00823018a60181e019fb0081a018a601877", - "0x6008280080229806008090087e019ff084062980708c067f80207c0629806", - "0x62980602406150020a006298061fc06254021fc06298060840680002008a6", - "0x6298060500604002008a6018260187e0082609407298062002801e0100880", - "0x32018a6018250185400830018a60181f019ae0082f018a601810018330082e", - "0x20d40680833018a601c81018be008810a846024a6018320c02f0b80c6bc02", - "0x4601810008022980620c061f80220c8201ca601833018bf008022980600809", - "0x203018021f4020ec0629806208061500221006298060a8060cc020e40629806", - "0x330083e018a601846018100083c018a6018350197100802298060080900802", - "0x229806008090084a2143e0240612806298060f0065c00221406298060a806", - "0x60500604002008a60181f01a0400802298061f8061f802008a6018020a002", - "0x629806008650083b018a6018090185400884018a6018100183300839018a6", - "0x6298060e40604002230062980621c065bc0221c06298061043b01d6e00841", - "0x2024022408d1100901890018a60188c019700088d018a6018840183300844", - "0x2a0080229806024060b802008a60180701a040080229806008280080229806", - "0x9224407210022480629806248062000224806298060083900891018a601802", - "0x60b0060cc02138062980619c0604002134062980624c065c40224c0629806", - "0x7024a601c060080781402140521380901850018a60184d0197000852018a6", - "0x7018330082c018a60180c01a0700802298060080900867040140260603009", - "0x209018021f40205806298060b006820021c80629806024060d4020700629806", - "0x350081c018a6018140183300877018a60186701a0a00802298060080900802", - "0x68300206806298060580682c0205806298061dc06820021c8062980604006", - "0x66e002008a601802024021f40683423018a601c65019b600865018a60181a", - "0x1c0183300821018a60181f01a0f0081f018a60181e01a0e0081e018a601823", - "0x251fc7e02406094062980608406840021fc06298061c8060d4021f80629806", - "0x60d4020a00629806070060cc0209806298061f40635802008a60180202402", - "0xa601c060080784402118800a00901846018a60182601a1000880018a601872", - "0x60400219c06298060240679c02008a6018020240204014030098480901c07", - "0x229806008090080284c060087d0081c018a601867019e80082c018a601807", - "0x1e900816018a60180219402008a60187201a1500872018a6018100500785002", - "0x665c0207006298061dc067a0020b0062980603006040021dc062980605806", - "0x7018a6018060182c0081a194070181a018a60181c018d700865018a60182c", - "0x6298060300639002008a60180202402050068580c024072980701c0638c02", - "0x90080285c060087d0082c018a601810018e600867018a601809018e500810", - "0xa601814018e500872018a60181c018e70081c018a60180219402008a601802", - "0x6298060580603002058062980619c060bc020b006298061c8063980219c06", - "0x6298061dc063a402008a601802024021940686077018a601c2c018e800816", - "0x1f018a6018020181000823018a60181a018ea0081a018a60181a018800081a", - "0x629807078067ac020787d01ca60182107c0786402084062980608c0620002", - "0x6298061f4060400209406298061f80686c02008a601802024021fc068687e", - "0x202402200280980901880018a60182501a1c00828018a6018160180c00826", - "0xa6018160180c0082a018a60187d0181000846018a60187f01a1d0080229806", - "0x650187e0080229806008090082e2042a024060b80629806118068700220406", - "0x62980600806040020c006298060bc06874020bc0629806008650080229806", - "0x6878020d4330c80901835018a60183001a1c00833018a6018160180c00832", - "0x20500629806009390080229806008090080c01a200240687c07018a602402", - "0x5400872018a6018670188000802298060400620c0219c1001ca60181401898", - "0x2210080229806070061f8020702c01ca6018161c80716402058062980601806", - "0x21947701ca601823068078880208c06298060b00615002068062980601c06", - "0xa6018020240200a23018021f4021f406298061dc0615002008a6018650187e", - "0x2008a60181f018830082107c0729806078062600207806298060095300802", - "0x7f1f807298060982501c5900826018a6018060185400825018a60182101880", - "0x590082a018a60187e0185400846018a6018090188000802298061fc061f802", - "0x7d0087d018a601828018540080229806200061f8022002801ca60182a11807", - "0x2e01ca6018810189800881018a60180264c02008a6018020240200a2301802", - "0x20d4062980601806150020cc06298060bc0620002008a60182e018830082f", - "0x20e406298060300689002008a6018320187e008320c007298060d43301c59", - "0x2008a6018830187e0088320807298062103901e2500884018a60183001854", - "0x64b8020f006298061f406538020ec0629806008650087d018a60188201854", - "0xa6018020240201c0689c06018a601c0201a260083e0f0070183e018a60183b", - "0x14018a60180c01a100080c018a60180901a0f00809018a60180601a0e00802", - "0x67018a60181001a1000810018a601807018d60080229806008090081401806", - "0x686c02008a60180202402030068a40901c07298070180201e280086701806", - "0x60087d00867018a60181401a1c00810018a6018070181000814018a601809", - "0x100081c018a60182c01a1d0082c018a60180219402008a6018020240200a2a", - "0x68ac021c806298060400665c0219c06298060700687002040062980603006", - "0x9018a60180701a2d00807018a60180201a2c008161c80701816018a601867", - "0x20b006298060500620002008a60180c018830081403007298060240626002", - "0x2008a6018670187e0086704007298060702c01c590081c018a60180601854", - "0x1601c061dc06298061c8064b802058062980604006150021c8062980600865", - "0x6298060180615002040062980601c06058020240701ca60180201a2e00877", - "0x6298060240605802008a6018140187e00814030072980619c1001d6900867", - "0xa60182c0194e0081c0b007298060587201d6900816018a60180c0185400872", - "0x77194060080c0506501802030591947701c0619406298060700653c021dc06", - "0x14194060080c3400901c0600877194060080c0506501802030020240701802", - "0x22f02407018021dc650180203014194060080c7940901c0600877194060080c", - "0x77194060080c05065018020323002407018021dc650180203014194060080c", - "0x14194060080c8c80901c0600877194060080c0506501802032310240701802", - "0x23402407018021dc650180203014194060080c8cc0901c0600877194060080c", - "0x77194060080c05065018020323502407018021dc650180203014194060080c", - "0x14194060080c8dc0901c0600877194060080c0506501802032360240701802", - "0x6501a3a008100180701a390086705007050068e00901c0600877194060080c", - "0x1a01c098f4021f41401c1401a3c0180208c14008090500201e3b0081019407", - "0x1f01e3f0300901c060087e194060241c06807194060523e01c06008100181c", - "0x23018029080600810024070240701e41008070180701a40018020400901c09", - "0x202646018020400901c091fc079147f018029100600810024070242301e43", - "0x9118060080c924250180292002040060940691c0701802200060080905006", - "0x100183201a4b01c06008820180202414018020264a02407018022040600809", - "0x8405002024140080793802040060c006934060088305002024140080793002", - "0x100183b01a5101c060088501802024140180202650008100183901a4f01802", - "0x201c07008079500901c06008810180202409128060080c94c3b0180294802", - "0x1a01e57018020400901c0907807958060088d1940602465018079540600823", - "0x60080901c2505006008149640600810024070241c01e58018020400901c09", - "0x810180202409240060080c96c0600810024070242c01e5a0300901c0600880", - "0x90500201e5d0300901c060088201802024070c814018020525c0240701802", - "0x60080901c3b050060081497c0600892050020241400807978060089105002", - "0x91940601e61024070180220406008090249301802032600300901c0600885", - "0x2640180227414008090500201e63018022440201c0700807988060089819406", - "0x799c060089d0080701c0201e6600898018a001a65018020400901c090e407", - "0x269018020400901c090bc079a00600810024070242e" - ], - "sierra_program_debug_info": { - "type_names": [], - "libfunc_names": [], - "user_func_names": [] - }, - "contract_class_version": "0.1.0", - "entry_points_by_type": { - "EXTERNAL": [ - { - "selector": "0xcb3dedf70cd591b271bc30c6a15d15f5f68a16c7bba04eab88fa2ec6cf1b38", - "function_idx": 2 - }, - { - "selector": "0x130d09708dc3084ce98ce65b8101c0175c64dd133048efb51c8f72a87c0a0ba", - "function_idx": 4 - }, - { - "selector": "0x192fdc70fa1f877bfec16ddec556d5328343f8a84664c97801afc1fc35daf03", - "function_idx": 0 - }, - { - "selector": "0x1c6b487d959d065ffbe7860e91c72d034e2d59b92b2e23631ee78e1f52aff5a", - "function_idx": 3 - }, - { - "selector": "0x1e33fd2dc36636fe8655ed944ecf12de6522aa9e6ca84ff7b1c196ea6d25922", - "function_idx": 5 - }, - { - "selector": "0x1f13bd2d44bd732fe45a6546f30650c1524f5f1c93889422e94d9610fb7a2f7", - "function_idx": 11 - }, - { - "selector": "0x23fc38e7b10b2be2172065b327c6a971fc422f91e6c8d3fde1326d1699a8962", - "function_idx": 10 - }, - { - "selector": "0x28621e06da4bc505ac9570a58b32d5f3222095745d6a43f32eec348637dcdc6", - "function_idx": 8 - }, - { - "selector": "0x2dfa2d0ea853c030408a7af6d8e4488858705ad2d88d29f5ae62bd7b00866da", - "function_idx": 1 - }, - { - "selector": "0x32fb24ce531b687e67d51b8d6829f2885eedc510f8f6180710188038d242a36", - "function_idx": 7 - }, - { - "selector": "0x3a044cfcff8c6a610ba748a44655d8a4e2b4ed94c974f03602f9d86c03141c8", - "function_idx": 6 - }, - { - "selector": "0x3d735a573855d55cbc015fa94ef2cb0030af65fd05455e7f18e38f8fed81f82", - "function_idx": 9 - }, - { - "selector": "0x3e3ef29ed9dcdebe2e577506ccbeb906c74b3aeea8b417fdb5975f7c6f3691a", - "function_idx": 12 - } - ], - "L1_HANDLER": [], - "CONSTRUCTOR": [] - }, - "abi": [ - { - "type": "function", - "name": "fn_felt", - "inputs": [ - { - "name": "felt", - "type": "core::felt252" - } - ], - "outputs": [], - "state_mutability": "external" - }, - { - "type": "function", - "name": "fn_felt_u8_bool", - "inputs": [ - { - "name": "felt", - "type": "core::felt252" - }, - { - "name": "int8", - "type": "core::integer::u8" - }, - { - "name": "b", - "type": "core::bool" - } - ], - "outputs": [], - "state_mutability": "external" - }, - { - "type": "function", - "name": "fn_felt_u8_bool_out_address_felt_u8_bool", - "inputs": [ - { - "name": "felt", - "type": "core::felt252" - }, - { - "name": "int8", - "type": "core::integer::u8" - }, - { - "name": "boolean", - "type": "core::bool" - } - ], - "outputs": [ - { - "type": "(core::starknet::contract_address::ContractAddress, core::felt252, core::integer::u8, core::bool)" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "fn_felt_out_felt", - "inputs": [ - { - "name": "felt", - "type": "core::felt252" - } - ], - "outputs": [ - { - "type": "core::felt252" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "fn_out_simple_option", - "inputs": [], - "outputs": [ - { - "type": "core::option::Option::" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "fn_out_nested_option", - "inputs": [], - "outputs": [ - { - "type": "core::option::Option::>" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "fn_simple_array", - "inputs": [ - { - "name": "arg", - "type": "core::array::Array::" - } - ], - "outputs": [], - "state_mutability": "view" - }, - { - "type": "function", - "name": "fn_out_simple_array", - "inputs": [], - "outputs": [ - { - "type": "core::array::Array::" - } - ], - "state_mutability": "view" - }, - { - "type": "struct", - "name": "example::example::HelloStarknet::TestStruct", - "members": [ - { - "name": "int128", - "type": "core::integer::u128" - }, - { - "name": "felt", - "type": "core::felt252" - }, - { - "name": "tuple", - "type": "(core::integer::u32, core::integer::u32)" - } - ] - }, - { - "type": "function", - "name": "fn_struct_array", - "inputs": [ - { - "name": "arg", - "type": "core::array::Array::" - } - ], - "outputs": [], - "state_mutability": "view" - }, - { - "type": "function", - "name": "fn_struct", - "inputs": [ - { - "name": "arg", - "type": "example::example::HelloStarknet::TestStruct" - } - ], - "outputs": [], - "state_mutability": "view" - }, - { - "type": "enum", - "name": "example::example::HelloStarknet::TestEnum", - "variants": [ - { - "name": "int128", - "type": "core::integer::u128" - }, - { - "name": "felt", - "type": "core::felt252" - }, - { - "name": "tuple", - "type": "(core::integer::u32, core::integer::u32)" - } - ] - }, - { - "type": "function", - "name": "fn_enum", - "inputs": [ - { - "name": "arg", - "type": "example::example::HelloStarknet::TestEnum" - } - ], - "outputs": [], - "state_mutability": "view" - }, - { - "type": "function", - "name": "fn_enum_array", - "inputs": [ - { - "name": "arg", - "type": "core::array::Array::" - } - ], - "outputs": [], - "state_mutability": "view" - }, - { - "type": "function", - "name": "fn_out_enum_array", - "inputs": [], - "outputs": [ - { - "type": "core::array::Array::" - } - ], - "state_mutability": "view" - }, - { - "type": "event", - "name": "TestEvent", - "inputs": [ - { - "name": "from", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "value", - "type": "core::felt252" - } - ] - } - ] -} diff --git a/test/example.ts b/test/example.ts index 407d93d..e50d6d3 100644 --- a/test/example.ts +++ b/test/example.ts @@ -1,228 +1,273 @@ export const ABI = [ { - type: 'function', - name: 'fn_felt', - inputs: [ - { - name: 'felt', - type: 'core::felt252', - }, - ], - outputs: [], - state_mutability: 'external', + "type": "impl", + "name": "ExampleContract", + "interface_name": "example::IExampleContract" }, { - type: 'function', - name: 'fn_felt_u8_bool', - inputs: [ + "type": "enum", + "name": "core::bool", + "variants": [ { - name: 'felt', - type: 'core::felt252', + "name": "False", + "type": "()" }, { - name: 'int8', - type: 'core::integer::u8', - }, - { - name: 'b', - type: 'core::bool', - }, - ], - outputs: [], - state_mutability: 'external', + "name": "True", + "type": "()" + } + ] }, { - type: 'function', - name: 'fn_felt_u8_bool_out_address_felt_u8_bool', - inputs: [ - { - name: 'felt', - type: 'core::felt252', - }, - { - name: 'int8', - type: 'core::integer::u8', - }, + "type": "enum", + "name": "core::option::Option::", + "variants": [ { - name: 'boolean', - type: 'core::bool', + "name": "Some", + "type": "core::integer::u8" }, - ], - outputs: [ { - type: '(core::starknet::contract_address::ContractAddress, core::felt252, core::integer::u8, core::bool)', - }, - ], - state_mutability: 'view', + "name": "None", + "type": "()" + } + ] }, { - type: 'function', - name: 'fn_felt_out_felt', - inputs: [ + "type": "enum", + "name": "core::option::Option::>", + "variants": [ { - name: 'felt', - type: 'core::felt252', + "name": "Some", + "type": "core::option::Option::" }, - ], - outputs: [ { - type: 'core::felt252', - }, - ], - state_mutability: 'view', + "name": "None", + "type": "()" + } + ] }, { - type: 'function', - name: 'fn_out_simple_option', - inputs: [], - outputs: [ + "type": "struct", + "name": "example::TestStruct", + "members": [ { - type: 'core::option::Option::', + "name": "int128", + "type": "core::integer::u128" }, - ], - state_mutability: 'view', - }, - { - type: 'function', - name: 'fn_out_nested_option', - inputs: [], - outputs: [ { - type: 'core::option::Option::>', + "name": "felt", + "type": "core::felt252" }, - ], - state_mutability: 'view', + { + "name": "tuple", + "type": "(core::integer::u32, core::integer::u32)" + } + ] }, { - type: 'function', - name: 'fn_simple_array', - inputs: [ + "type": "enum", + "name": "example::TestEnum", + "variants": [ { - name: 'arg', - type: 'core::array::Array::', + "name": "int128", + "type": "core::integer::u128" }, - ], - outputs: [], - state_mutability: 'view', - }, - { - type: 'function', - name: 'fn_out_simple_array', - inputs: [], - outputs: [ { - type: 'core::array::Array::', + "name": "felt", + "type": "core::felt252" }, - ], - state_mutability: 'view', + { + "name": "tuple", + "type": "(core::integer::u32, core::integer::u32)" + } + ] }, { - type: 'struct', - name: 'example::example::HelloStarknet::TestStruct', - members: [ + "type": "interface", + "name": "example::IExampleContract", + "items": [ { - name: 'int128', - type: 'core::integer::u128', + "type": "function", + "name": "fn_felt", + "inputs": [ + { + "name": "felt", + "type": "core::felt252" + } + ], + "outputs": [], + "state_mutability": "view" }, { - name: 'felt', - type: 'core::felt252', + "type": "function", + "name": "fn_felt_u8_bool", + "inputs": [ + { + "name": "felt", + "type": "core::felt252" + }, + { + "name": "int8", + "type": "core::integer::u8" + }, + { + "name": "b", + "type": "core::bool" + } + ], + "outputs": [], + "state_mutability": "view" }, { - name: 'tuple', - type: '(core::integer::u32, core::integer::u32)', + "type": "function", + "name": "fn_felt_u8_bool_out_address_felt_u8_bool", + "inputs": [ + { + "name": "felt", + "type": "core::felt252" + }, + { + "name": "int8", + "type": "core::integer::u8" + }, + { + "name": "boolean", + "type": "core::bool" + } + ], + "outputs": [ + { + "type": "(core::starknet::contract_address::ContractAddress, core::felt252, core::integer::u8, core::bool)" + } + ], + "state_mutability": "view" }, - ], - }, - { - type: 'function', - name: 'fn_struct_array', - inputs: [ { - name: 'arg', - type: 'core::array::Array::', + "type": "function", + "name": "fn_felt_out_felt", + "inputs": [ + { + "name": "felt", + "type": "core::felt252" + } + ], + "outputs": [ + { + "type": "core::felt252" + } + ], + "state_mutability": "view" }, - ], - outputs: [], - state_mutability: 'view', - }, - { - type: 'function', - name: 'fn_struct', - inputs: [ { - name: 'arg', - type: 'example::example::HelloStarknet::TestStruct', + "type": "function", + "name": "fn_out_simple_option", + "inputs": [], + "outputs": [ + { + "type": "core::option::Option::" + } + ], + "state_mutability": "view" }, - ], - outputs: [], - state_mutability: 'view', - }, - { - type: 'enum', - name: 'example::example::HelloStarknet::TestEnum', - variants: [ { - name: 'int128', - type: 'core::integer::u128', + "type": "function", + "name": "fn_out_nested_option", + "inputs": [], + "outputs": [ + { + "type": "core::option::Option::>" + } + ], + "state_mutability": "view" }, { - name: 'felt', - type: 'core::felt252', + "type": "function", + "name": "fn_simple_array", + "inputs": [ + { + "name": "arg", + "type": "core::array::Array::" + } + ], + "outputs": [], + "state_mutability": "view" }, { - name: 'tuple', - type: '(core::integer::u32, core::integer::u32)', + "type": "function", + "name": "fn_out_simple_array", + "inputs": [], + "outputs": [ + { + "type": "core::array::Array::" + } + ], + "state_mutability": "view" }, - ], - }, - { - type: 'function', - name: 'fn_enum', - inputs: [ { - name: 'arg', - type: 'example::example::HelloStarknet::TestEnum', + "type": "function", + "name": "fn_struct", + "inputs": [ + { + "name": "arg", + "type": "example::TestStruct" + } + ], + "outputs": [], + "state_mutability": "view" }, - ], - outputs: [], - state_mutability: 'view', - }, - { - type: 'function', - name: 'fn_enum_array', - inputs: [ { - name: 'arg', - type: 'core::array::Array::', + "type": "function", + "name": "fn_struct_array", + "inputs": [ + { + "name": "arg", + "type": "core::array::Array::" + } + ], + "outputs": [], + "state_mutability": "view" }, - ], - outputs: [], - state_mutability: 'view', - }, - { - type: 'function', - name: 'fn_out_enum_array', - inputs: [], - outputs: [ { - type: 'core::array::Array::', + "type": "function", + "name": "fn_enum", + "inputs": [ + { + "name": "arg", + "type": "example::TestEnum" + } + ], + "outputs": [], + "state_mutability": "view" }, - ], - state_mutability: 'view', - }, - { - type: 'event', - name: 'TestEvent', - inputs: [ { - name: 'from', - type: 'core::starknet::contract_address::ContractAddress', + "type": "function", + "name": "fn_enum_array", + "inputs": [ + { + "name": "arg", + "type": "core::array::Array::" + } + ], + "outputs": [], + "state_mutability": "view" }, { - name: 'value', - type: 'core::felt252', - }, - ], + "type": "function", + "name": "fn_out_enum_array", + "inputs": [], + "outputs": [ + { + "type": "core::array::Array::" + } + ], + "state_mutability": "view" + } + ] }, -] as const + { + "type": "event", + "name": "example::example_contract::Event", + "kind": "enum", + "variants": [] + } +] as const; diff --git a/test/example/.gitignore b/test/example/.gitignore new file mode 100644 index 0000000..eb5a316 --- /dev/null +++ b/test/example/.gitignore @@ -0,0 +1 @@ +target diff --git a/test/example/Scarb.toml b/test/example/Scarb.toml new file mode 100644 index 0000000..d074d98 --- /dev/null +++ b/test/example/Scarb.toml @@ -0,0 +1,11 @@ +[package] +name = "example" +version = "0.1.0" + +# See more keys and their definitions at https://docs.swmansion.com/scarb/docs/reference/manifest.html + +[[target.starknet-contract]] +sierra = true + +[dependencies] +starknet = ">=2.3.0-rc0" diff --git a/test/example/src/lib.cairo b/test/example/src/lib.cairo new file mode 100644 index 0000000..ce708c3 --- /dev/null +++ b/test/example/src/lib.cairo @@ -0,0 +1,110 @@ +use starknet::ContractAddress; + +#[derive(Drop, Serde)] +struct TestStruct { + int128: u128, + felt: felt252, + tuple: (u32, u32) +} + +#[derive(Copy, Drop, Serde)] +enum TestEnum { + int128: u128, + felt: felt252, + tuple: (u32, u32), +} + +#[starknet::interface] +trait IExampleContract { + fn fn_felt(self: @TContractState, felt: felt252); + + fn fn_felt_u8_bool(self: @TContractState, felt: felt252, int8: u8, b: bool); + + fn fn_felt_u8_bool_out_address_felt_u8_bool( + self: @TContractState, felt: felt252, int8: u8, boolean: bool + ) -> (ContractAddress, felt252, u8, bool); + + fn fn_felt_out_felt(self: @TContractState, felt: felt252) -> felt252; + + fn fn_out_simple_option(self: @TContractState) -> Option; + + fn fn_out_nested_option(self: @TContractState) -> Option>; + + fn fn_simple_array(self: @TContractState, arg: Array); + + fn fn_out_simple_array(self: @TContractState) -> Array; + + fn fn_struct(self: @TContractState, arg: TestStruct); + + fn fn_struct_array(self: @TContractState, arg: Array); + + fn fn_enum(self: @TContractState, arg: TestEnum); + + fn fn_enum_array(self: @TContractState, arg: Array); + + fn fn_out_enum_array(self: @TContractState, ) -> Array; +} + +#[starknet::contract] +mod example_contract { + use starknet::ContractAddress; + use starknet::get_caller_address; + use example::TestStruct; + use example::TestEnum; + + #[storage] + struct Storage {} + + #[external(v0)] + impl ExampleContract of super::IExampleContract { + fn fn_felt(self: @ContractState, felt: felt252) {} + + fn fn_felt_u8_bool(self: @ContractState, felt: felt252, int8: u8, b: bool) {} + + fn fn_felt_u8_bool_out_address_felt_u8_bool( + self: @ContractState, felt: felt252, int8: u8, boolean: bool + ) -> (ContractAddress, felt252, u8, bool) { + let caller = get_caller_address(); + (caller, felt, int8, boolean) + } + + fn fn_felt_out_felt(self: @ContractState, felt: felt252) -> felt252 { + felt + } + + fn fn_out_simple_option(self: @ContractState) -> Option { + Option::Some(1) + } + + fn fn_out_nested_option(self: @ContractState) -> Option> { + Option::Some(Option::Some(1)) + } + + fn fn_simple_array(self: @ContractState, arg: Array) { + } + + fn fn_out_simple_array(self: @ContractState) -> Array { + let mut a = ArrayTrait::::new(); + a.append(0); + a.append(1); + a.append(2); + ArrayTrait::new() + } + + fn fn_struct(self: @ContractState, arg: TestStruct) {} + + fn fn_struct_array(self: @ContractState, arg: Array) {} + + fn fn_enum(self: @ContractState, arg: TestEnum) {} + + fn fn_enum_array(self: @ContractState, arg: Array) {} + + fn fn_out_enum_array(self: @ContractState, ) -> Array { + let mut messages: Array = ArrayTrait::new(); + messages.append(TestEnum::int128(100_u128)); + messages.append(TestEnum::felt('hello world')); + messages.append(TestEnum::tuple((10_u32, 30_u32))); + messages + } + } +} From c2f90d2c2912489ed174d0c7ade7d59800ccd726 Mon Sep 17 00:00:00 2001 From: Haroune Mohammedi Date: Fri, 20 Oct 2023 12:23:24 +0200 Subject: [PATCH 3/4] chore: update package version to 2.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index dd6a35b..22c340a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "abi-wan-kanabi", - "version": "1.0.4", + "version": "2.0.0", "description": "Abi parser for Cairo smart contracts, based on wagmi abitype", "main": "index.js", "bin": { From 89bbc5c84643893e13ac6369c0c45f9cf38c5cfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20Pavi=C4=8Di=C4=87?= Date: Fri, 27 Oct 2023 12:41:47 +0200 Subject: [PATCH 4/4] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 89d6bcf..6a164f1 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ Currently supported: ### Build -To use abiwan, you must first generate types from your contracts' ABI json files, you can use the the helper script: +To use abiwan, you must first generate types from your contracts' ABI json files, you can use the helper script: ```bash npm run generate -- --input /path/to/abi.json --output /path/to/abi.ts